diff options
author | juhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2012-02-11 15:12:02 +0000 |
---|---|---|
committer | juhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2012-02-11 15:12:02 +0000 |
commit | 606588b4e908a214dd957b0754e260958aacd93f (patch) | |
tree | 2f1f4e59d10a43db4b3f92ff7b7bd023b0a5987e /target/linux/ramips | |
parent | bbc71f5154e32a12b6abe851521fcba655d76d96 (diff) |
ramips: raeth: add rx_dma array to store the DMA address of the rx packets
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@30445 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/ramips')
-rw-r--r-- | target/linux/ramips/files/drivers/net/ramips.c | 26 | ||||
-rw-r--r-- | target/linux/ramips/files/drivers/net/ramips_eth.h | 1 |
2 files changed, 17 insertions, 10 deletions
diff --git a/target/linux/ramips/files/drivers/net/ramips.c b/target/linux/ramips/files/drivers/net/ramips.c index 606685215..c9eecc224 100644 --- a/target/linux/ramips/files/drivers/net/ramips.c +++ b/target/linux/ramips/files/drivers/net/ramips.c @@ -172,6 +172,7 @@ ramips_alloc_dma(struct raeth_priv *re) memset(re->rx, 0, sizeof(struct ramips_rx_dma) * NUM_RX_DESC); for (i = 0; i < NUM_RX_DESC; i++) { + dma_addr_t dma_addr; struct sk_buff *new_skb = dev_alloc_skb(MAX_RX_LENGTH + NET_IP_ALIGN); @@ -179,10 +180,11 @@ ramips_alloc_dma(struct raeth_priv *re) goto err_cleanup; skb_reserve(new_skb, NET_IP_ALIGN); - re->rx[i].rxd1 = dma_map_single(NULL, - new_skb->data, - MAX_RX_LENGTH, - DMA_FROM_DEVICE); + + dma_addr = dma_map_single(NULL, new_skb->data, + MAX_RX_LENGTH, DMA_FROM_DEVICE); + re->rx_dma[i] = dma_addr; + re->rx[i].rxd1 = (unsigned int) re->rx_dma[i]; re->rx[i].rxd2 |= RX_DMA_LSO; re->rx_skb[i] = new_skb; } @@ -282,8 +284,9 @@ ramips_eth_rx_hw(unsigned long ptr) new_skb = netdev_alloc_skb(dev, MAX_RX_LENGTH + NET_IP_ALIGN); /* Reuse the buffer on allocation failures */ if (new_skb) { - /* TODO: convert to use dma_addr_t */ - dma_unmap_single(NULL, priv->rx[rx].rxd1, MAX_RX_LENGTH, + dma_addr_t dma_addr; + + dma_unmap_single(NULL, priv->rx_dma[rx], MAX_RX_LENGTH, DMA_FROM_DEVICE); skb_put(rx_skb, pktlen); @@ -296,10 +299,13 @@ ramips_eth_rx_hw(unsigned long ptr) priv->rx_skb[rx] = new_skb; skb_reserve(new_skb, NET_IP_ALIGN); - priv->rx[rx].rxd1 = dma_map_single(NULL, - new_skb->data, - MAX_RX_LENGTH, - DMA_FROM_DEVICE); + + dma_addr = dma_map_single(NULL, + new_skb->data, + MAX_RX_LENGTH, + DMA_FROM_DEVICE); + priv->rx_dma[rx] = dma_addr; + priv->rx[rx].rxd1 = (unsigned int) dma_addr; } else { dev->stats.rx_dropped++; } diff --git a/target/linux/ramips/files/drivers/net/ramips_eth.h b/target/linux/ramips/files/drivers/net/ramips_eth.h index a69754b77..7d5296b21 100644 --- a/target/linux/ramips/files/drivers/net/ramips_eth.h +++ b/target/linux/ramips/files/drivers/net/ramips_eth.h @@ -219,6 +219,7 @@ struct raeth_priv struct tasklet_struct rx_tasklet; struct ramips_rx_dma *rx; struct sk_buff *rx_skb[NUM_RX_DESC]; + dma_addr_t rx_dma[NUM_RX_DESC]; dma_addr_t tx_desc_dma; struct tasklet_struct tx_housekeeping_tasklet; |