aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/ethernet/freescale/gianfar.c25
-rw-r--r--drivers/net/ethernet/freescale/gianfar.h1
2 files changed, 14 insertions, 12 deletions
diff --git a/drivers/net/ethernet/freescale/gianfar.c b/drivers/net/ethernet/freescale/gianfar.c
index 2c6b5694b3f0..592d297b9eda 100644
--- a/drivers/net/ethernet/freescale/gianfar.c
+++ b/drivers/net/ethernet/freescale/gianfar.c
@@ -231,7 +231,7 @@ static int gfar_alloc_skb_resources(struct net_device *ndev)
231 dma_addr_t addr; 231 dma_addr_t addr;
232 int i, j, k; 232 int i, j, k;
233 struct gfar_private *priv = netdev_priv(ndev); 233 struct gfar_private *priv = netdev_priv(ndev);
234 struct device *dev = &priv->ofdev->dev; 234 struct device *dev = priv->dev;
235 struct gfar_priv_tx_q *tx_queue = NULL; 235 struct gfar_priv_tx_q *tx_queue = NULL;
236 struct gfar_priv_rx_q *rx_queue = NULL; 236 struct gfar_priv_rx_q *rx_queue = NULL;
237 237
@@ -1000,6 +1000,7 @@ static int gfar_probe(struct platform_device *ofdev)
1000 priv = netdev_priv(dev); 1000 priv = netdev_priv(dev);
1001 priv->ndev = dev; 1001 priv->ndev = dev;
1002 priv->ofdev = ofdev; 1002 priv->ofdev = ofdev;
1003 priv->dev = &ofdev->dev;
1003 SET_NETDEV_DEV(dev, &ofdev->dev); 1004 SET_NETDEV_DEV(dev, &ofdev->dev);
1004 1005
1005 spin_lock_init(&priv->bflock); 1006 spin_lock_init(&priv->bflock);
@@ -1713,13 +1714,13 @@ static void free_skb_tx_queue(struct gfar_priv_tx_q *tx_queue)
1713 if (!tx_queue->tx_skbuff[i]) 1714 if (!tx_queue->tx_skbuff[i])
1714 continue; 1715 continue;
1715 1716
1716 dma_unmap_single(&priv->ofdev->dev, txbdp->bufPtr, 1717 dma_unmap_single(priv->dev, txbdp->bufPtr,
1717 txbdp->length, DMA_TO_DEVICE); 1718 txbdp->length, DMA_TO_DEVICE);
1718 txbdp->lstatus = 0; 1719 txbdp->lstatus = 0;
1719 for (j = 0; j < skb_shinfo(tx_queue->tx_skbuff[i])->nr_frags; 1720 for (j = 0; j < skb_shinfo(tx_queue->tx_skbuff[i])->nr_frags;
1720 j++) { 1721 j++) {
1721 txbdp++; 1722 txbdp++;
1722 dma_unmap_page(&priv->ofdev->dev, txbdp->bufPtr, 1723 dma_unmap_page(priv->dev, txbdp->bufPtr,
1723 txbdp->length, DMA_TO_DEVICE); 1724 txbdp->length, DMA_TO_DEVICE);
1724 } 1725 }
1725 txbdp++; 1726 txbdp++;
@@ -1740,8 +1741,8 @@ static void free_skb_rx_queue(struct gfar_priv_rx_q *rx_queue)
1740 1741
1741 for (i = 0; i < rx_queue->rx_ring_size; i++) { 1742 for (i = 0; i < rx_queue->rx_ring_size; i++) {
1742 if (rx_queue->rx_skbuff[i]) { 1743 if (rx_queue->rx_skbuff[i]) {
1743 dma_unmap_single(&priv->ofdev->dev, 1744 dma_unmap_single(priv->dev, rxbdp->bufPtr,
1744 rxbdp->bufPtr, priv->rx_buffer_size, 1745 priv->rx_buffer_size,
1745 DMA_FROM_DEVICE); 1746 DMA_FROM_DEVICE);
1746 dev_kfree_skb_any(rx_queue->rx_skbuff[i]); 1747 dev_kfree_skb_any(rx_queue->rx_skbuff[i]);
1747 rx_queue->rx_skbuff[i] = NULL; 1748 rx_queue->rx_skbuff[i] = NULL;
@@ -1780,7 +1781,7 @@ static void free_skb_resources(struct gfar_private *priv)
1780 free_skb_rx_queue(rx_queue); 1781 free_skb_rx_queue(rx_queue);
1781 } 1782 }
1782 1783
1783 dma_free_coherent(&priv->ofdev->dev, 1784 dma_free_coherent(priv->dev,
1784 sizeof(struct txbd8) * priv->total_tx_ring_size + 1785 sizeof(struct txbd8) * priv->total_tx_ring_size +
1785 sizeof(struct rxbd8) * priv->total_rx_ring_size, 1786 sizeof(struct rxbd8) * priv->total_rx_ring_size,
1786 priv->tx_queue[0]->tx_bd_base, 1787 priv->tx_queue[0]->tx_bd_base,
@@ -2160,7 +2161,7 @@ static int gfar_start_xmit(struct sk_buff *skb, struct net_device *dev)
2160 if (i == nr_frags - 1) 2161 if (i == nr_frags - 1)
2161 lstatus |= BD_LFLAG(TXBD_LAST | TXBD_INTERRUPT); 2162 lstatus |= BD_LFLAG(TXBD_LAST | TXBD_INTERRUPT);
2162 2163
2163 bufaddr = skb_frag_dma_map(&priv->ofdev->dev, 2164 bufaddr = skb_frag_dma_map(priv->dev,
2164 &skb_shinfo(skb)->frags[i], 2165 &skb_shinfo(skb)->frags[i],
2165 0, 2166 0,
2166 length, 2167 length,
@@ -2212,7 +2213,7 @@ static int gfar_start_xmit(struct sk_buff *skb, struct net_device *dev)
2212 lstatus |= BD_LFLAG(TXBD_TOE); 2213 lstatus |= BD_LFLAG(TXBD_TOE);
2213 } 2214 }
2214 2215
2215 txbdp_start->bufPtr = dma_map_single(&priv->ofdev->dev, skb->data, 2216 txbdp_start->bufPtr = dma_map_single(priv->dev, skb->data,
2216 skb_headlen(skb), DMA_TO_DEVICE); 2217 skb_headlen(skb), DMA_TO_DEVICE);
2217 2218
2218 /* If time stamping is requested one additional TxBD must be set up. The 2219 /* If time stamping is requested one additional TxBD must be set up. The
@@ -2525,7 +2526,7 @@ static int gfar_clean_tx_ring(struct gfar_priv_tx_q *tx_queue)
2525 } else 2526 } else
2526 buflen = bdp->length; 2527 buflen = bdp->length;
2527 2528
2528 dma_unmap_single(&priv->ofdev->dev, bdp->bufPtr, 2529 dma_unmap_single(priv->dev, bdp->bufPtr,
2529 buflen, DMA_TO_DEVICE); 2530 buflen, DMA_TO_DEVICE);
2530 2531
2531 if (unlikely(skb_shinfo(skb)->tx_flags & SKBTX_IN_PROGRESS)) { 2532 if (unlikely(skb_shinfo(skb)->tx_flags & SKBTX_IN_PROGRESS)) {
@@ -2544,7 +2545,7 @@ static int gfar_clean_tx_ring(struct gfar_priv_tx_q *tx_queue)
2544 bdp = next_txbd(bdp, base, tx_ring_size); 2545 bdp = next_txbd(bdp, base, tx_ring_size);
2545 2546
2546 for (i = 0; i < frags; i++) { 2547 for (i = 0; i < frags; i++) {
2547 dma_unmap_page(&priv->ofdev->dev, bdp->bufPtr, 2548 dma_unmap_page(priv->dev, bdp->bufPtr,
2548 bdp->length, DMA_TO_DEVICE); 2549 bdp->length, DMA_TO_DEVICE);
2549 bdp->lstatus &= BD_LFLAG(TXBD_WRAP); 2550 bdp->lstatus &= BD_LFLAG(TXBD_WRAP);
2550 bdp = next_txbd(bdp, base, tx_ring_size); 2551 bdp = next_txbd(bdp, base, tx_ring_size);
@@ -2610,7 +2611,7 @@ static void gfar_new_rxbdp(struct gfar_priv_rx_q *rx_queue, struct rxbd8 *bdp,
2610 struct gfar_private *priv = netdev_priv(dev); 2611 struct gfar_private *priv = netdev_priv(dev);
2611 dma_addr_t buf; 2612 dma_addr_t buf;
2612 2613
2613 buf = dma_map_single(&priv->ofdev->dev, skb->data, 2614 buf = dma_map_single(priv->dev, skb->data,
2614 priv->rx_buffer_size, DMA_FROM_DEVICE); 2615 priv->rx_buffer_size, DMA_FROM_DEVICE);
2615 gfar_init_rxbdp(rx_queue, bdp, buf); 2616 gfar_init_rxbdp(rx_queue, bdp, buf);
2616} 2617}
@@ -2775,7 +2776,7 @@ int gfar_clean_rx_ring(struct gfar_priv_rx_q *rx_queue, int rx_work_limit)
2775 2776
2776 skb = rx_queue->rx_skbuff[rx_queue->skb_currx]; 2777 skb = rx_queue->rx_skbuff[rx_queue->skb_currx];
2777 2778
2778 dma_unmap_single(&priv->ofdev->dev, bdp->bufPtr, 2779 dma_unmap_single(priv->dev, bdp->bufPtr,
2779 priv->rx_buffer_size, DMA_FROM_DEVICE); 2780 priv->rx_buffer_size, DMA_FROM_DEVICE);
2780 2781
2781 if (unlikely(!(bdp->status & RXBD_ERR) && 2782 if (unlikely(!(bdp->status & RXBD_ERR) &&
diff --git a/drivers/net/ethernet/freescale/gianfar.h b/drivers/net/ethernet/freescale/gianfar.h
index 8b4de57a5c23..8b27e5ff54c0 100644
--- a/drivers/net/ethernet/freescale/gianfar.h
+++ b/drivers/net/ethernet/freescale/gianfar.h
@@ -1060,6 +1060,7 @@ struct gfar_private {
1060 unsigned int total_tx_ring_size; 1060 unsigned int total_tx_ring_size;
1061 unsigned int total_rx_ring_size; 1061 unsigned int total_rx_ring_size;
1062 1062
1063 struct device *dev;
1063 struct net_device *ndev; 1064 struct net_device *ndev;
1064 struct platform_device *ofdev; 1065 struct platform_device *ofdev;
1065 enum gfar_errata errata; 1066 enum gfar_errata errata;