|
|
@ -196,6 +196,9 @@ static int ag71xx_ring_rx_init(struct ag71xx *ag) |
|
|
|
break; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dma_map_single(NULL, skb->data, AG71XX_RX_PKT_SIZE, |
|
|
|
|
|
|
|
DMA_FROM_DEVICE); |
|
|
|
|
|
|
|
|
|
|
|
skb->dev = ag->dev; |
|
|
|
skb->dev = ag->dev; |
|
|
|
skb_reserve(skb, AG71XX_RX_PKT_RESERVE); |
|
|
|
skb_reserve(skb, AG71XX_RX_PKT_RESERVE); |
|
|
|
|
|
|
|
|
|
|
@ -234,8 +237,12 @@ static int ag71xx_ring_rx_refill(struct ag71xx *ag) |
|
|
|
break; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dma_map_single(NULL, skb->data, AG71XX_RX_PKT_SIZE, |
|
|
|
|
|
|
|
DMA_FROM_DEVICE); |
|
|
|
|
|
|
|
|
|
|
|
skb_reserve(skb, AG71XX_RX_PKT_RESERVE); |
|
|
|
skb_reserve(skb, AG71XX_RX_PKT_RESERVE); |
|
|
|
skb->dev = ag->dev; |
|
|
|
skb->dev = ag->dev; |
|
|
|
|
|
|
|
|
|
|
|
ring->buf[i].skb = skb; |
|
|
|
ring->buf[i].skb = skb; |
|
|
|
ring->descs[i].data = virt_to_phys(skb->data); |
|
|
|
ring->descs[i].data = virt_to_phys(skb->data); |
|
|
|
} |
|
|
|
} |
|
|
@ -468,7 +475,7 @@ static int ag71xx_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) |
|
|
|
goto err_drop; |
|
|
|
goto err_drop; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
dma_cache_wback_inv((unsigned long)skb->data, skb->len); |
|
|
|
dma_map_single(NULL, skb->data, skb->len, DMA_TO_DEVICE); |
|
|
|
|
|
|
|
|
|
|
|
ring->buf[i].skb = skb; |
|
|
|
ring->buf[i].skb = skb; |
|
|
|
|
|
|
|
|
|
|
@ -621,8 +628,6 @@ static int ag71xx_rx_packets(struct ag71xx *ag, int limit) |
|
|
|
pktlen = ag71xx_desc_pktlen(desc); |
|
|
|
pktlen = ag71xx_desc_pktlen(desc); |
|
|
|
pktlen -= ETH_FCS_LEN; |
|
|
|
pktlen -= ETH_FCS_LEN; |
|
|
|
|
|
|
|
|
|
|
|
/* TODO: move it into the refill function */ |
|
|
|
|
|
|
|
dma_cache_wback_inv((unsigned long)skb->data, pktlen); |
|
|
|
|
|
|
|
skb_put(skb, pktlen); |
|
|
|
skb_put(skb, pktlen); |
|
|
|
|
|
|
|
|
|
|
|
skb->dev = dev; |
|
|
|
skb->dev = dev; |
|
|
|