projects
/
openwrt.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
ar71xx: ag71xx: compute the RX buffer size from the maximum frame size
[openwrt.git]
/
target
/
linux
/
ar71xx
/
files
/
drivers
/
net
/
ethernet
/
atheros
/
ag71xx
/
ag71xx_main.c
diff --git
a/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c
b/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c
index
281d0f5
..
622ffed
100644
(file)
--- a/
target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c
+++ b/
target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c
@@
-191,7
+191,7
@@
static void ag71xx_ring_rx_clean(struct ag71xx *ag)
for (i = 0; i < ring->size; i++)
if (ring->buf[i].rx_buf) {
dma_unmap_single(&ag->dev->dev, ring->buf[i].dma_addr,
for (i = 0; i < ring->size; i++)
if (ring->buf[i].rx_buf) {
dma_unmap_single(&ag->dev->dev, ring->buf[i].dma_addr,
-
AG71XX_RX_BUF_SIZE
, DMA_FROM_DEVICE);
+
ag->rx_buf_size
, DMA_FROM_DEVICE);
kfree(ring->buf[i].rx_buf);
}
}
kfree(ring->buf[i].rx_buf);
}
}
@@
-217,15
+217,15
@@
static bool ag71xx_fill_rx_buf(struct ag71xx *ag, struct ag71xx_buf *buf,
{
void *data;
{
void *data;
- data = kmalloc(
AG71XX_RX_BUF_SIZE
+
+ data = kmalloc(
ag->rx_buf_size
+
SKB_DATA_ALIGN(sizeof(struct skb_shared_info)),
GFP_ATOMIC);
if (!data)
return false;
buf->rx_buf = data;
SKB_DATA_ALIGN(sizeof(struct skb_shared_info)),
GFP_ATOMIC);
if (!data)
return false;
buf->rx_buf = data;
- buf->dma_addr = dma_map_single(&ag->dev->dev, data,
-
AG71XX_RX_BUF_SIZE,
DMA_FROM_DEVICE);
+ buf->dma_addr = dma_map_single(&ag->dev->dev, data,
ag->rx_buf_size,
+ DMA_FROM_DEVICE);
buf->desc->data = (u32) buf->dma_addr + offset;
return true;
}
buf->desc->data = (u32) buf->dma_addr + offset;
return true;
}
@@
-609,6
+609,8
@@
static int ag71xx_open(struct net_device *dev)
struct ag71xx *ag = netdev_priv(dev);
int ret;
struct ag71xx *ag = netdev_priv(dev);
int ret;
+ ag->rx_buf_size = ag->max_frame_len + NET_SKB_PAD + NET_IP_ALIGN;
+
ret = ag71xx_rings_init(ag);
if (ret)
goto err;
ret = ag71xx_rings_init(ag);
if (ret)
goto err;
@@
-890,7
+892,7
@@
static int ag71xx_rx_packets(struct ag71xx *ag, int limit)
pktlen -= ETH_FCS_LEN;
dma_unmap_single(&dev->dev, ring->buf[i].dma_addr,
pktlen -= ETH_FCS_LEN;
dma_unmap_single(&dev->dev, ring->buf[i].dma_addr,
-
AG71XX_RX_BUF_SIZE
, DMA_FROM_DEVICE);
+
ag->rx_buf_size
, DMA_FROM_DEVICE);
dev->stats.rx_packets++;
dev->stats.rx_bytes += pktlen;
dev->stats.rx_packets++;
dev->stats.rx_bytes += pktlen;