# HG changeset patch # User Louis Opter # Date 1325960934 -3600 # Node ID f0ab7ee21dd8eb8e667b246c7b7f7a58a4400899 # Parent 65523c345b40cac827ade9946fc7cdae571e7a03 Merge diff -r 65523c345b40 -r f0ab7ee21dd8 rathaxes_start_to_implement_sk_buff_in_the_lkm.patch --- a/rathaxes_start_to_implement_sk_buff_in_the_lkm.patch Sat Jan 07 19:19:28 2012 +0100 +++ b/rathaxes_start_to_implement_sk_buff_in_the_lkm.patch Sat Jan 07 19:28:54 2012 +0100 @@ -1,29 +1,103 @@ # HG changeset patch -# Parent 3af2c7465a59483f6980e4e819beb3520bc023a7 +# Parent 7ed8c85f91b681a259ea6f7fcb39ec9ed4591a57 rathaxes: add sk_buff abstraction and add the implementation of the xmit function for the ethernet system. We have a fully (empty) functionnal ethernet driver -diff -r 3af2c7465a59 rathaxes/samples/lkm/CMakeLists.txt ---- a/rathaxes/samples/lkm/CMakeLists.txt Sat Jan 07 19:18:24 2012 +0100 -+++ b/rathaxes/samples/lkm/CMakeLists.txt Sat Jan 07 19:19:17 2012 +0100 +diff --git a/rathaxes/samples/lkm/CMakeLists.txt b/rathaxes/samples/lkm/CMakeLists.txt +--- a/rathaxes/samples/lkm/CMakeLists.txt ++++ b/rathaxes/samples/lkm/CMakeLists.txt @@ -1,6 +1,6 @@ ADD_RATHAXES_SOURCES(lkm lkm.rtx - RTI log.rti lkm.rti pci.rti ethernet.rti - BLT log.blt lkm.blt pci.blt ethernet.blt) -+ RTI log.rti lkm.rti pci.rti socket.rti ethernet.rti -+ BLT log.blt lkm.blt pci.blt socket.blt ethernet.blt) ++ RTI log.rti lkm.rti pci.rti socket.rti ethernet.rti e1000.rti ++ BLT log.blt lkm.blt pci.blt socket.blt ethernet.blt e1000.blt) # We can't name lkm since it's already used as the target name to generate the # source (with ADD_RATHAXES_SOURCES). -diff -r 3af2c7465a59 rathaxes/samples/lkm/ethernet.blt ---- a/rathaxes/samples/lkm/ethernet.blt Sat Jan 07 19:18:24 2012 +0100 -+++ b/rathaxes/samples/lkm/ethernet.blt Sat Jan 07 19:19:17 2012 +0100 +diff --git a/rathaxes/samples/lkm/e1000.blt b/rathaxes/samples/lkm/e1000.blt +new file mode 100644 +--- /dev/null ++++ b/rathaxes/samples/lkm/e1000.blt +@@ -0,0 +1,40 @@ ++with e1000, Ethernet, Socket, PCI, LKM, Log ++{ ++ template type e1000::Context() ++ { ++ chunk LKM::includes() ++ { ++ /* ++ * Force the generation of the structure in the "headers part, we ++ * have to do this since we do not use the structure in this blt ++ * (we hacked a bit and used it in ethernet.blt directly). ++ */ ++ typedef int ${e1000::Context}; /* CNorm __std__ workaround */ ++ ${e1000::Context} force_declaration_in_includes; ++ } ++ ++ chunk ::decl() ++ { ++ struct rtx_e1000_ctx ++ { ++ unsigned char *bar; ++ }; ++ } ++ ++ map ++ { ++ } ++ } ++ ++ template sequence e1000::create() ++ { ++ chunk ::CALL ++ { ++ int bars = pci_select_bars(pdev, IORESOURCE_MEM); ++ if (pci_enable_device_mem(pdev)) ++ { ++ ${Log::info("e1000::create: pci_enable_device_mem failed")}; ++ } ++ } ++ } ++} +diff --git a/rathaxes/samples/lkm/e1000.rti b/rathaxes/samples/lkm/e1000.rti +new file mode 100644 +--- /dev/null ++++ b/rathaxes/samples/lkm/e1000.rti +@@ -0,0 +1,10 @@ ++interface e1000 : Socket, Ethernet, PCI, LKM ++{ ++ provided type e1000::Context; ++ ++ /* Not sure if we need the argument */ ++ provided sequence e1000::create() ++ { ++ provided chunk ::CALL; ++ } ++} +diff --git a/rathaxes/samples/lkm/ethernet.blt b/rathaxes/samples/lkm/ethernet.blt +--- a/rathaxes/samples/lkm/ethernet.blt ++++ b/rathaxes/samples/lkm/ethernet.blt @@ -1,4 +1,4 @@ --with Ethernet, PCI, LKM, Log -+with Ethernet, Socket, PCI, LKM, Log +-with Ethernet, PCI, LKM ++with Ethernet, Socket, PCI, LKM { template type Ethernet::Device() { -@@ -51,6 +51,24 @@ +@@ -18,8 +18,11 @@ + * I think it's useless to use the ${PCI::Device} "abstraction" + * here, since we are already in a Linux specific context here. + */ +- struct pci_dev *pci_dev; +- struct net_device *net_dev; ++ struct pci_dev *pci_dev; ++ struct net_device *net_dev; ++ ++ /* while waiting on issue #8 */ ++ struct rtx_e1000_ctx hw_ctx; + }; + } + +@@ -51,6 +54,24 @@ } } @@ -48,7 +122,7 @@ template sequence Ethernet::close(Ethernet::Device dev) { chunk LKM::prototypes() -@@ -100,7 +118,7 @@ +@@ -100,7 +121,7 @@ { .ndo_open = rtx_ethernet_open, .ndo_stop = rtx_ethernet_close, @@ -57,9 +131,9 @@ }; } -diff -r 3af2c7465a59 rathaxes/samples/lkm/ethernet.rti ---- a/rathaxes/samples/lkm/ethernet.rti Sat Jan 07 19:18:24 2012 +0100 -+++ b/rathaxes/samples/lkm/ethernet.rti Sat Jan 07 19:19:17 2012 +0100 +diff --git a/rathaxes/samples/lkm/ethernet.rti b/rathaxes/samples/lkm/ethernet.rti +--- a/rathaxes/samples/lkm/ethernet.rti ++++ b/rathaxes/samples/lkm/ethernet.rti @@ -1,4 +1,4 @@ -interface Ethernet : PCI, LKM +interface Ethernet : Socket, PCI, LKM @@ -79,10 +153,10 @@ required sequence Ethernet::close(Ethernet::Device) { provided chunk LKM::prototypes; -diff -r 3af2c7465a59 rathaxes/samples/lkm/lkm.rtx ---- a/rathaxes/samples/lkm/lkm.rtx Sat Jan 07 19:18:24 2012 +0100 -+++ b/rathaxes/samples/lkm/lkm.rtx Sat Jan 07 19:19:17 2012 +0100 -@@ -15,6 +15,11 @@ +diff --git a/rathaxes/samples/lkm/lkm.rtx b/rathaxes/samples/lkm/lkm.rtx +--- a/rathaxes/samples/lkm/lkm.rtx ++++ b/rathaxes/samples/lkm/lkm.rtx +@@ -15,10 +15,16 @@ Log::info("Got an interruption"); } @@ -94,9 +168,15 @@ PCI::probe(PCI::Device dev) { Log::info("Probe the device"); -diff -r 3af2c7465a59 rathaxes/samples/lkm/socket.blt ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ b/rathaxes/samples/lkm/socket.blt Sat Jan 07 19:19:17 2012 +0100 + Ethernet::init(dev); ++ e1000::create(); + } + + PCI::remove(PCI::Device dev) +diff --git a/rathaxes/samples/lkm/socket.blt b/rathaxes/samples/lkm/socket.blt +new file mode 100644 +--- /dev/null ++++ b/rathaxes/samples/lkm/socket.blt @@ -0,0 +1,27 @@ +with Socket, LKM +{ @@ -125,9 +205,10 @@ + } + } +} -diff -r 3af2c7465a59 rathaxes/samples/lkm/socket.rti ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ b/rathaxes/samples/lkm/socket.rti Sat Jan 07 19:19:17 2012 +0100 +diff --git a/rathaxes/samples/lkm/socket.rti b/rathaxes/samples/lkm/socket.rti +new file mode 100644 +--- /dev/null ++++ b/rathaxes/samples/lkm/socket.rti @@ -0,0 +1,4 @@ +interface Socket : LKM +{