diff options
Diffstat (limited to 'target/linux/ar71xx/files/drivers/net/ag71xx')
| -rw-r--r-- | target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx.h | 8 | ||||
| -rw-r--r-- | target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_main.c | 11 | 
2 files changed, 14 insertions, 5 deletions
diff --git a/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx.h b/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx.h index 74593ddcc..5e3573b33 100644 --- a/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx.h +++ b/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx.h @@ -38,7 +38,7 @@  #define ETH_FCS_LEN	4  #define AG71XX_DRV_NAME		"ag71xx" -#define AG71XX_DRV_VERSION	"0.5.29" +#define AG71XX_DRV_VERSION	"0.5.30"  #define AG71XX_NAPI_WEIGHT	64  #define AG71XX_OOM_REFILL	(1 + HZ/10) @@ -88,8 +88,10 @@ struct ag71xx_desc {  } __attribute__((aligned(4)));  struct ag71xx_buf { -	struct sk_buff	*skb; -	struct ag71xx_desc *desc; +	struct sk_buff		*skb; +	struct ag71xx_desc 	*desc; +	dma_addr_t		dma_addr; +	u32			pad;  };  struct ag71xx_ring { diff --git a/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_main.c b/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_main.c index a3edd43aa..cb4ccf06b 100644 --- a/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_main.c +++ b/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_main.c @@ -185,9 +185,11 @@ static void ag71xx_ring_rx_clean(struct ag71xx *ag)  		return;  	for (i = 0; i < AG71XX_RX_RING_SIZE; i++) -		if (ring->buf[i].skb) +		if (ring->buf[i].skb) { +			dma_unmap_single(&ag->dev->dev, ring->buf[i].dma_addr, +					 AG71XX_RX_PKT_SIZE, DMA_FROM_DEVICE);  			kfree_skb(ring->buf[i].skb); - +		}  }  static int ag71xx_ring_rx_init(struct ag71xx *ag) @@ -223,6 +225,7 @@ static int ag71xx_ring_rx_init(struct ag71xx *ag)  					  AG71XX_RX_PKT_SIZE,  					  DMA_FROM_DEVICE);  		ring->buf[i].skb = skb; +		ring->buf[i].dma_addr = dma_addr;  		ring->buf[i].desc->data = (u32) dma_addr;  		ring->buf[i].desc->ctrl = DESC_EMPTY;  	} @@ -264,6 +267,7 @@ static int ag71xx_ring_rx_refill(struct ag71xx *ag)  						  DMA_FROM_DEVICE);  			ring->buf[i].skb = skb; +			ring->buf[i].dma_addr = dma_addr;  			ring->buf[i].desc->data = (u32) dma_addr;  		} @@ -684,6 +688,9 @@ static int ag71xx_rx_packets(struct ag71xx *ag, int limit)  		pktlen = ag71xx_desc_pktlen(desc);  		pktlen -= ETH_FCS_LEN; +		dma_unmap_single(&dev->dev, ring->buf[i].dma_addr, +				 AG71XX_RX_PKT_SIZE, DMA_FROM_DEVICE); +  		skb_put(skb, pktlen);  		skb->dev = dev;  | 
