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