view e1000_wip.patch @ 128:0fdaa93ed62b

Start to clean up new compiler patch
author Louis Opter <louis@lse.epita.fr>
date Mon, 26 Aug 2013 22:53:34 -0700
parents
children
line wrap: on
line source

# HG changeset patch
# Parent e2e8117a5aede962810a9a561890d2cf80997815
diff --git a/rathaxes/samples/e1000/e1000.blt b/rathaxes/samples/e1000/e1000.blt
--- a/rathaxes/samples/e1000/e1000.blt
+++ b/rathaxes/samples/e1000/e1000.blt
@@ -186,9 +186,9 @@
                         goto err_skbuffs_alloc;
                     }
                     ${Socket::SKBuff.ref} skbuff = &hw_ctx->rx_ring.skbuffs[i];
-                    // XXX breaks rtxGen: ${local.skbuff.init(local.k_sk_buff)};
-                    skbuff->skbuff = k_sk_buff;
-                    skbuff->dma_handle = 0;
+                    ${local.skbuff.init(local.k_sk_buff)};
+                    // skbuff->skbuff = k_sk_buff;
+                    // *(dma_addr_t *)&(skbuff->dma_handle) = 0;
                     // XXX #46: ${local.skbuff.map_from(rtx_ether_ctx.device)};
                     if (rtx_socket_skbuff_map(${local.skbuff}, ${rtx_ether_ctx.device}, RTX_DMA_FROM_DEVICE))
                     {
@@ -228,7 +228,7 @@
                 {
                     dma_unmap_single(
                             ${rtx_ether_ctx.device},
-                            hw_ctx->rx_ring.skbuffs[i].dma_handle,
+                            *((dma_addr_t *)&(hw_ctx->rx_ring.skbuffs[i].dma_handle)),
                             ${config.rx_buffer_len},
                             DMA_FROM_DEVICE);
             err_skbuffs_map:
@@ -350,7 +350,7 @@
                         E1000_TXD_CMD_RS   |
                         skb_headlen(${local.k_skb.k_sk_buff}));
                 tx_desc->upper.data = 0;
-                tx_desc->buff_addr = cpu_to_le64(skb->dma_handle);
+                tx_desc->buff_addr = cpu_to_le64(${local.skb.dma_handle.k_dma_handle});
                 memcpy(&self->skbuffs[self->tail], ${local.k_skb.k_sk_buff}, sizeof(*${local.k_skb.k_sk_buff}));
                 self->tail = (self->tail + 1) % ${config.tx_ring_size};
             }
@@ -890,15 +890,18 @@
              */
             for (int i = 0; i != ${config.rx_ring_size}; ++i)
             {
+                /*
+                 * XXX Leaking casts:
+                 *
+                 * We should go through the rtx types (Socket::SKBuff,
+                 * AbstractSKBuff), but we can't because of the array here,
+                 * which is not supported by the compiler.
+                 */
                 dma_unmap_single(
                         ${rtx_ether_ctx.device},
-                        (dma_addr_t)hw_ctx_->rx_ring.skbuffs[i].dma_handle,
+                        *((dma_addr_t *)&(hw_ctx_->rx_ring.skbuffs[i].dma_handle)),
                         ${config.rx_buffer_len},
                         DMA_FROM_DEVICE);
-                /* XXX Leaking cast
-                 * (We should go through the rtx types (Socket::SKBuff,
-                 * AbstractSKBuff)
-                 */
                 dev_kfree_skb((struct sk_buff *)hw_ctx_->rx_ring.skbuffs[i].skbuff);
             }
             dma_free_coherent(${rtx_ether_ctx.device}, hw_ctx_->rx_ring.size,