Mercurial > archived > louis > epitech > mq > rathaxes
comparison rathaxes_samples_e1000_split_set_up_device.patch @ 129:518d9c8ac70c
Clean-up the patch queue
author | Louis Opter <louis@lse.epita.fr> |
---|---|
date | Mon, 02 Sep 2013 22:59:30 -0700 |
parents | 52402232483f |
children | 6359457dce75 |
comparison
equal
deleted
inserted
replaced
128:0fdaa93ed62b | 129:518d9c8ac70c |
---|---|
1 # HG changeset patch | 1 # HG changeset patch |
2 # Parent d62a08753da7cec4d44246b747ff79847d9b4238 | 2 # Parent 2bb3ee06ef16e410c364238ccdccf43a6a2acceb |
3 rathaxes: split and refactor e1000::set_up_device in {Rx,Tx}Ring methods | 3 rathaxes: split and refactor e1000::set_up_device in {Rx,Tx}Ring methods |
4 | 4 |
5 diff --git a/rathaxes/samples/e1000/e1000.blt b/rathaxes/samples/e1000/e1000.blt | 5 diff --git a/rathaxes/samples/e1000/e1000.blt b/rathaxes/samples/e1000/e1000.blt |
6 --- a/rathaxes/samples/e1000/e1000.blt | 6 --- a/rathaxes/samples/e1000/e1000.blt |
7 +++ b/rathaxes/samples/e1000/e1000.blt | 7 +++ b/rathaxes/samples/e1000/e1000.blt |
9 -with e1000, Ethernet, Socket, PCI, LKM, Log, Builtin | 9 -with e1000, Ethernet, Socket, PCI, LKM, Log, Builtin |
10 +with e1000, Ethernet, Socket, DMA, PCI, LKM, Log, Builtin | 10 +with e1000, Ethernet, Socket, DMA, PCI, LKM, Log, Builtin |
11 { | 11 { |
12 template type e1000::RxDescriptor() | 12 template type e1000::RxDescriptor() |
13 { | 13 { |
14 @@ -96,8 +96,163 @@ | 14 @@ -96,8 +96,164 @@ |
15 { | 15 { |
16 } | 16 } |
17 | 17 |
18 + chunk Ethernet::adapter_init_rx(Ethernet::Device rtx_ether_ctx) | 18 + chunk Ethernet::adapter_init_rx(Ethernet::Device rtx_ether_ctx) |
19 + { | 19 + { |
105 + goto err_skbuffs_alloc; | 105 + goto err_skbuffs_alloc; |
106 + } | 106 + } |
107 + ${Socket::SKBuff.ref} skbuff = &hw_ctx->rx_ring.skbuffs[i]; | 107 + ${Socket::SKBuff.ref} skbuff = &hw_ctx->rx_ring.skbuffs[i]; |
108 + // XXX breaks rtxGen: ${local.skbuff.init(local.k_sk_buff)}; | 108 + // XXX breaks rtxGen: ${local.skbuff.init(local.k_sk_buff)}; |
109 + skbuff->skbuff = k_sk_buff; | 109 + skbuff->skbuff = k_sk_buff; |
110 + skbuff->dma_handle = 0; | 110 + *(dma_addr_t *)&(skbuff->dma_handle) = 0; |
111 + // XXX #46: ${local.skbuff.map_from(rtx_ether_ctx.device)}; | 111 + // XXX #46: ${local.skbuff.map_from(rtx_ether_ctx.device)}; |
112 + if (rtx_socket_skbuff_map(${local.skbuff}, ${rtx_ether_ctx.device}, RTX_DMA_FROM_DEVICE)) | 112 + if (rtx_socket_skbuff_map(${local.skbuff}, ${rtx_ether_ctx.device}, RTX_DMA_FROM_DEVICE)) |
113 + { | 113 + { |
114 + ${Log::info("adapter_init_rx: cannot dma-map a skbuff for the rx ring")}; | 114 + ${Log::info("adapter_init_rx: cannot dma-map a skbuff for the rx ring")}; |
115 + goto err_skbuffs_map; | 115 + goto err_skbuffs_map; |
145 + err_skbuffs_alloc: | 145 + err_skbuffs_alloc: |
146 + while (i--) | 146 + while (i--) |
147 + { | 147 + { |
148 + dma_unmap_single( | 148 + dma_unmap_single( |
149 + ${rtx_ether_ctx.device}, | 149 + ${rtx_ether_ctx.device}, |
150 + hw_ctx->rx_ring.skbuffs[i].dma_handle, | 150 + /* XXX Leaking cast because of the array: */ |
151 + *((dma_addr_t *)&(hw_ctx->rx_ring.skbuffs[i].dma_handle)), | |
151 + ${config.rx_buffer_len}, | 152 + ${config.rx_buffer_len}, |
152 + DMA_FROM_DEVICE); | 153 + DMA_FROM_DEVICE); |
153 + err_skbuffs_map: | 154 + err_skbuffs_map: |
154 + /* XXX leaking cast: */ | 155 + /* XXX leaking cast: */ |
155 + dev_kfree_skb((struct sk_buff *)hw_ctx->rx_ring.skbuffs[i].skbuff); | 156 + dev_kfree_skb((struct sk_buff *)hw_ctx->rx_ring.skbuffs[i].skbuff); |
173 + size: ((${self}).size); | 174 + size: ((${self}).size); |
174 + dma_base: ((${self}).dma_base); | 175 + dma_base: ((${self}).dma_base); |
175 } | 176 } |
176 } | 177 } |
177 | 178 |
178 @@ -208,7 +363,62 @@ | 179 @@ -195,7 +351,7 @@ |
180 E1000_TXD_CMD_RS | | |
181 skb_headlen(${local.k_skb.k_sk_buff})); | |
182 tx_desc->upper.data = 0; | |
183 - tx_desc->buff_addr = cpu_to_le64(skb->dma_handle); | |
184 + tx_desc->buff_addr = cpu_to_le64(${local.skb.dma_handle.k_dma_handle}); | |
185 memcpy(&self->skbuffs[self->tail], ${local.k_skb.k_sk_buff}, sizeof(*${local.k_skb.k_sk_buff})); | |
186 self->tail = (self->tail + 1) % ${config.tx_ring_size}; | |
187 } | |
188 @@ -208,7 +364,62 @@ | |
179 } | 189 } |
180 } | 190 } |
181 | 191 |
182 - method clean() | 192 - method clean() |
183 + chunk Ethernet::adapter_init_tx(Ethernet::Device rtx_ether_ctx) | 193 + chunk Ethernet::adapter_init_tx(Ethernet::Device rtx_ether_ctx) |
237 + | 247 + |
238 + method clean() | 248 + method clean() |
239 { | 249 { |
240 rtx_e1000_tx_ring_clean(${self}); | 250 rtx_e1000_tx_ring_clean(${self}); |
241 } | 251 } |
242 @@ -247,9 +457,8 @@ | 252 @@ -247,9 +458,8 @@ |
243 { | 253 { |
244 int bars; | 254 int bars; |
245 unsigned char /* __iomem */ *ioaddr; | 255 unsigned char /* __iomem */ *ioaddr; |
246 - | 256 - |
247 - ${e1000::RxRing} rx_ring; | 257 - ${e1000::RxRing} rx_ring; |
249 + ${e1000::RxRing.scalar} rx_ring; | 259 + ${e1000::RxRing.scalar} rx_ring; |
250 + ${e1000::TxRing.scalar} tx_ring; | 260 + ${e1000::TxRing.scalar} tx_ring; |
251 } | 261 } |
252 | 262 |
253 chunk Ethernet::HardwareContext() | 263 chunk Ethernet::HardwareContext() |
254 @@ -309,10 +518,53 @@ | 264 @@ -309,10 +519,53 @@ |
255 } | 265 } |
256 } | 266 } |
257 | 267 |
258 + chunk Ethernet::adapter_setup(Ethernet::Device rtx_ether_ctx) | 268 + chunk Ethernet::adapter_setup(Ethernet::Device rtx_ether_ctx) |
259 + { | 269 + { |
304 } | 314 } |
305 - | 315 - |
306 } | 316 } |
307 | 317 |
308 template type e1000::Register() | 318 template type e1000::Register() |
309 @@ -615,269 +867,6 @@ | 319 @@ -615,269 +868,6 @@ |
310 } | 320 } |
311 } | 321 } |
312 | 322 |
313 - /* TODO: refactor | 323 - /* TODO: refactor |
314 - * | 324 - * |
574 - } | 584 - } |
575 - | 585 - |
576 /* TODO: | 586 /* TODO: |
577 * | 587 * |
578 * Refactor into two methods (one in RxRing and one in TxRing) and make use | 588 * Refactor into two methods (one in RxRing and one in TxRing) and make use |
589 @@ -901,15 +891,18 @@ | |
590 */ | |
591 for (int i = 0; i != ${config.rx_ring_size}; ++i) | |
592 { | |
593 + /* | |
594 + * XXX Leaking casts: | |
595 + * | |
596 + * We should go through the rtx types (Socket::SKBuff, | |
597 + * AbstractSKBuff), but we can't because of the array here, | |
598 + * which is not supported by the compiler. | |
599 + */ | |
600 dma_unmap_single( | |
601 ${rtx_ether_ctx.device}, | |
602 - (dma_addr_t)hw_ctx_->rx_ring.skbuffs[i].dma_handle, | |
603 + *((dma_addr_t *)&(hw_ctx_->rx_ring.skbuffs[i].dma_handle)), | |
604 ${config.rx_buffer_len}, | |
605 DMA_FROM_DEVICE); | |
606 - /* XXX Leaking cast | |
607 - * (We should go through the rtx types (Socket::SKBuff, | |
608 - * AbstractSKBuff) | |
609 - */ | |
610 dev_kfree_skb((struct sk_buff *)hw_ctx_->rx_ring.skbuffs[i].skbuff); | |
611 } | |
612 dma_free_coherent(${rtx_ether_ctx.device}, hw_ctx_->rx_ring.size, | |
579 diff --git a/rathaxes/samples/e1000/e1000.rti b/rathaxes/samples/e1000/e1000.rti | 613 diff --git a/rathaxes/samples/e1000/e1000.rti b/rathaxes/samples/e1000/e1000.rti |
580 --- a/rathaxes/samples/e1000/e1000.rti | 614 --- a/rathaxes/samples/e1000/e1000.rti |
581 +++ b/rathaxes/samples/e1000/e1000.rti | 615 +++ b/rathaxes/samples/e1000/e1000.rti |
582 @@ -1,23 +1,10 @@ | 616 @@ -1,23 +1,10 @@ |
583 -interface e1000 : Socket, Ethernet, PCI, LKM, Builtin | 617 -interface e1000 : Socket, Ethernet, PCI, LKM, Builtin |