diff options
-rw-r--r-- | drivers/net/ethernet/freescale/gianfar.c | 25 | ||||
-rw-r--r-- | drivers/net/ethernet/freescale/gianfar.h | 1 |
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; |