comparison rathaxes_start_to_implement_sk_buff_in_the_lkm.patch @ 25:e330b0cea45e

rathaxes: workaround resolution bug + update the license since we use pci_ioremap which is only available for gpl driver
author Thomas Sanchez <thomas.sanchz@gmail.com>
date Sat, 07 Jan 2012 20:11:27 +0100
parents 60dd543b67b0
children 8eac832f763d
comparison
equal deleted inserted replaced
24:60dd543b67b0 25:e330b0cea45e
1 # HG changeset patch 1 # HG changeset patch
2 # Parent bffc8f046282cb07fab2c8ef86cf4fff344fdefc 2 # Parent 606e807b8bc7a3a7ea6f1b895bfe909cd7875c2e
3 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 3 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
4 4
5 diff --git a/rathaxes/samples/lkm/CMakeLists.txt b/rathaxes/samples/lkm/CMakeLists.txt 5 diff -r 606e807b8bc7 rathaxes/samples/lkm/CMakeLists.txt
6 --- a/rathaxes/samples/lkm/CMakeLists.txt 6 --- a/rathaxes/samples/lkm/CMakeLists.txt Sat Jan 07 20:02:55 2012 +0100
7 +++ b/rathaxes/samples/lkm/CMakeLists.txt 7 +++ b/rathaxes/samples/lkm/CMakeLists.txt Sat Jan 07 20:10:46 2012 +0100
8 @@ -1,6 +1,6 @@ 8 @@ -1,6 +1,6 @@
9 ADD_RATHAXES_SOURCES(lkm lkm.rtx 9 ADD_RATHAXES_SOURCES(lkm lkm.rtx
10 - RTI log.rti lkm.rti pci.rti ethernet.rti 10 - RTI log.rti lkm.rti pci.rti ethernet.rti
11 - BLT log.blt lkm.blt pci.blt ethernet.blt) 11 - BLT log.blt lkm.blt pci.blt ethernet.blt)
12 + RTI log.rti lkm.rti pci.rti socket.rti ethernet.rti e1000.rti 12 + RTI log.rti lkm.rti pci.rti socket.rti ethernet.rti e1000.rti
13 + BLT log.blt lkm.blt pci.blt socket.blt ethernet.blt e1000.blt) 13 + BLT log.blt lkm.blt pci.blt socket.blt ethernet.blt e1000.blt)
14 14
15 # We can't name lkm since it's already used as the target name to generate the 15 # We can't name lkm since it's already used as the target name to generate the
16 # source (with ADD_RATHAXES_SOURCES). 16 # source (with ADD_RATHAXES_SOURCES).
17 diff --git a/rathaxes/samples/lkm/e1000.blt b/rathaxes/samples/lkm/e1000.blt 17 diff -r 606e807b8bc7 rathaxes/samples/lkm/e1000.blt
18 new file mode 100644 18 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
19 --- /dev/null 19 +++ b/rathaxes/samples/lkm/e1000.blt Sat Jan 07 20:10:46 2012 +0100
20 +++ b/rathaxes/samples/lkm/e1000.blt 20 @@ -0,0 +1,57 @@
21 @@ -0,0 +1,49 @@
22 +with e1000, Ethernet, Socket, PCI, LKM, Log 21 +with e1000, Ethernet, Socket, PCI, LKM, Log
23 +{ 22 +{
24 + template type e1000::Context() 23 + template type e1000::Context()
25 + { 24 + {
26 + chunk LKM::includes() 25 + chunk LKM::includes()
51 + { 50 + {
52 + chunk ::CALL 51 + chunk ::CALL
53 + { 52 + {
54 + int bars = pci_select_bars(pdev, IORESOURCE_MEM); 53 + int bars = pci_select_bars(pdev, IORESOURCE_MEM);
55 + if (pci_enable_device_mem(pdev)) 54 + if (pci_enable_device_mem(pdev))
55 + {
56 + ${Log::info("e1000::create: pci_enable_device_mem failed")}; 56 + ${Log::info("e1000::create: pci_enable_device_mem failed")};
57 + }
57 + 58 +
58 + if (pci_request_selected_regions(pdev, bars, ${config.name})) 59 + if (pci_request_selected_regions(pdev, bars, ${config.name}))
60 + {
59 + ${Log::info("e1000::create: pci_request_selected_regions failed")}; 61 + ${Log::info("e1000::create: pci_request_selected_regions failed")};
62 + }
60 + 63 +
61 + if (${config.set_master}) 64 + if (${config.set_master})
65 + {
62 + pci_set_master(pdev); 66 + pci_set_master(pdev);
67 + }
63 + 68 +
64 + /* 0 here is for BAR_0: */ 69 + /* 0 here is for BAR_0: */
65 + rtx_ether_ctx->hw_ctx.ioaddr = pci_ioremap_bar(pdev, 0); 70 + rtx_ether_ctx->hw_ctx.ioaddr = pci_ioremap_bar(pdev, 0);
66 + if (!rtx_ether_ctx->hw_ctx.ioaddr) 71 + if (!rtx_ether_ctx->hw_ctx.ioaddr)
72 + {
67 + ${Log::info("e1000::create: pci_ioremap_bar failed")}; 73 + ${Log::info("e1000::create: pci_ioremap_bar failed")};
68 + } 74 + }
69 + } 75 + }
70 +} 76 + }
71 diff --git a/rathaxes/samples/lkm/e1000.rti b/rathaxes/samples/lkm/e1000.rti 77 +}
72 new file mode 100644 78 diff -r 606e807b8bc7 rathaxes/samples/lkm/e1000.rti
73 --- /dev/null 79 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
74 +++ b/rathaxes/samples/lkm/e1000.rti 80 +++ b/rathaxes/samples/lkm/e1000.rti Sat Jan 07 20:10:46 2012 +0100
75 @@ -0,0 +1,10 @@ 81 @@ -0,0 +1,10 @@
76 +interface e1000 : Socket, Ethernet, PCI, LKM 82 +interface e1000 : Socket, Ethernet, PCI, LKM
77 +{ 83 +{
78 + provided type e1000::Context; 84 + provided type e1000::Context;
79 + 85 +
81 + provided sequence e1000::create() 87 + provided sequence e1000::create()
82 + { 88 + {
83 + provided chunk ::CALL; 89 + provided chunk ::CALL;
84 + } 90 + }
85 +} 91 +}
86 diff --git a/rathaxes/samples/lkm/ethernet.blt b/rathaxes/samples/lkm/ethernet.blt 92 diff -r 606e807b8bc7 rathaxes/samples/lkm/ethernet.blt
87 --- a/rathaxes/samples/lkm/ethernet.blt 93 --- a/rathaxes/samples/lkm/ethernet.blt Sat Jan 07 20:02:55 2012 +0100
88 +++ b/rathaxes/samples/lkm/ethernet.blt 94 +++ b/rathaxes/samples/lkm/ethernet.blt Sat Jan 07 20:10:46 2012 +0100
89 @@ -18,8 +18,11 @@ 95 @@ -18,8 +18,11 @@
90 * I think it's useless to use the ${PCI::Device} "abstraction" 96 * I think it's useless to use the ${PCI::Device} "abstraction"
91 * here, since we are already in a Linux specific context here. 97 * here, since we are already in a Linux specific context here.
92 */ 98 */
93 - struct pci_dev *pci_dev; 99 - struct pci_dev *pci_dev;
132 - .ndo_start_xmit = NULL, 138 - .ndo_start_xmit = NULL,
133 + .ndo_start_xmit = rtx_ethernet_xmit, 139 + .ndo_start_xmit = rtx_ethernet_xmit,
134 }; 140 };
135 } 141 }
136 142
137 diff --git a/rathaxes/samples/lkm/ethernet.rti b/rathaxes/samples/lkm/ethernet.rti 143 diff -r 606e807b8bc7 rathaxes/samples/lkm/ethernet.rti
138 --- a/rathaxes/samples/lkm/ethernet.rti 144 --- a/rathaxes/samples/lkm/ethernet.rti Sat Jan 07 20:02:55 2012 +0100
139 +++ b/rathaxes/samples/lkm/ethernet.rti 145 +++ b/rathaxes/samples/lkm/ethernet.rti Sat Jan 07 20:10:46 2012 +0100
140 @@ -1,4 +1,4 @@ 146 @@ -1,4 +1,4 @@
141 -interface Ethernet : PCI, LKM 147 -interface Ethernet : PCI, LKM
142 +interface Ethernet : Socket, PCI, LKM 148 +interface Ethernet : Socket, PCI, LKM
143 { 149 {
144 provided type Ethernet::Device; 150 provided type Ethernet::Device;
154 + } 160 + }
155 + 161 +
156 required sequence Ethernet::close(Ethernet::Device) 162 required sequence Ethernet::close(Ethernet::Device)
157 { 163 {
158 provided chunk LKM::prototypes; 164 provided chunk LKM::prototypes;
159 diff --git a/rathaxes/samples/lkm/lkm.rtx b/rathaxes/samples/lkm/lkm.rtx 165 diff -r 606e807b8bc7 rathaxes/samples/lkm/lkm.rtx
160 --- a/rathaxes/samples/lkm/lkm.rtx 166 --- a/rathaxes/samples/lkm/lkm.rtx Sat Jan 07 20:02:55 2012 +0100
161 +++ b/rathaxes/samples/lkm/lkm.rtx 167 +++ b/rathaxes/samples/lkm/lkm.rtx Sat Jan 07 20:10:46 2012 +0100
162 @@ -15,10 +15,16 @@ 168 @@ -15,10 +15,16 @@
163 Log::info("Got an interruption"); 169 Log::info("Got an interruption");
164 } 170 }
165 171
166 + Ethernet::send(Ethernet::Device dev, Socket::SKBuff skb) 172 + Ethernet::send(Ethernet::Device dev, Socket::SKBuff skb)
174 Ethernet::init(dev); 180 Ethernet::init(dev);
175 + e1000::create(); 181 + e1000::create();
176 } 182 }
177 183
178 PCI::remove(PCI::Device dev) 184 PCI::remove(PCI::Device dev)
179 @@ -49,6 +55,7 @@ 185 @@ -45,10 +51,11 @@
186 LKM::name = "hello";
187 LKM::author = "Rathaxes";
188 LKM::description = "Hello World Loadable Kernel Module (LKM)";
189 - LKM::license = "BSD";
190 + LKM::license = "GPL";
180 191
181 PCI::vendor_id = 0x8086; 192 PCI::vendor_id = 0x8086;
182 PCI::product_id = 0x100f; 193 PCI::product_id = 0x100f;
183 + PCI::set_master = true; 194 + PCI::set_master = true;
184 195
185 Ethernet::ifname = "rtx%d"; 196 Ethernet::ifname = "rtx%d";
186 } 197 }
187 diff --git a/rathaxes/samples/lkm/socket.blt b/rathaxes/samples/lkm/socket.blt 198 diff -r 606e807b8bc7 rathaxes/samples/lkm/socket.blt
188 new file mode 100644 199 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
189 --- /dev/null 200 +++ b/rathaxes/samples/lkm/socket.blt Sat Jan 07 20:10:46 2012 +0100
190 +++ b/rathaxes/samples/lkm/socket.blt
191 @@ -0,0 +1,27 @@ 201 @@ -0,0 +1,27 @@
192 +with Socket, LKM 202 +with Socket, LKM
193 +{ 203 +{
194 + template type Socket::SKBuff() 204 + template type Socket::SKBuff()
195 + { 205 + {
214 + // We should determine if all the sk_buff managment 224 + // We should determine if all the sk_buff managment
215 + // can be abstracted from the user. 225 + // can be abstracted from the user.
216 + } 226 + }
217 + } 227 + }
218 +} 228 +}
219 diff --git a/rathaxes/samples/lkm/socket.rti b/rathaxes/samples/lkm/socket.rti 229 diff -r 606e807b8bc7 rathaxes/samples/lkm/socket.rti
220 new file mode 100644 230 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
221 --- /dev/null 231 +++ b/rathaxes/samples/lkm/socket.rti Sat Jan 07 20:10:46 2012 +0100
222 +++ b/rathaxes/samples/lkm/socket.rti
223 @@ -0,0 +1,4 @@ 232 @@ -0,0 +1,4 @@
224 +interface Socket : LKM 233 +interface Socket : LKM
225 +{ 234 +{
226 + provided type Socket::SKBuff; 235 + provided type Socket::SKBuff;
227 +} 236 +}