aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2018-01-10 13:03:21 -0500
committerBjorn Helgaas <bhelgaas@google.com>2018-01-17 19:04:43 -0500
commitc08fa1608ddbf21a00ce4da54b0d90635cf5c1de (patch)
treebe373632f718679410f36b09f597811195ffc65f
parent8d669f93b4b1405946af77a155c1df4fe1b526b1 (diff)
net: tsi108: Use DMA API properly
We need to pass a struct device to the DMA API, even if some architectures still support that for legacy reasons, and should not mix it with the old PCI DMA API. Note that the driver also seems to never actually unmap its DMA mappings, but to fix that we'll need someone more familar with the driver. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
-rw-r--r--drivers/net/ethernet/tundra/tsi108_eth.c36
1 files changed, 20 insertions, 16 deletions
diff --git a/drivers/net/ethernet/tundra/tsi108_eth.c b/drivers/net/ethernet/tundra/tsi108_eth.c
index 0624b71ab5d4..edcd1e60b30d 100644
--- a/drivers/net/ethernet/tundra/tsi108_eth.c
+++ b/drivers/net/ethernet/tundra/tsi108_eth.c
@@ -152,6 +152,8 @@ struct tsi108_prv_data {
152 u32 msg_enable; /* debug message level */ 152 u32 msg_enable; /* debug message level */
153 struct mii_if_info mii_if; 153 struct mii_if_info mii_if;
154 unsigned int init_media; 154 unsigned int init_media;
155
156 struct platform_device *pdev;
155}; 157};
156 158
157/* Structure for a device driver */ 159/* Structure for a device driver */
@@ -703,17 +705,18 @@ static int tsi108_send_packet(struct sk_buff * skb, struct net_device *dev)
703 data->txskbs[tx] = skb; 705 data->txskbs[tx] = skb;
704 706
705 if (i == 0) { 707 if (i == 0) {
706 data->txring[tx].buf0 = dma_map_single(NULL, skb->data, 708 data->txring[tx].buf0 = dma_map_single(&data->pdev->dev,
707 skb_headlen(skb), DMA_TO_DEVICE); 709 skb->data, skb_headlen(skb),
710 DMA_TO_DEVICE);
708 data->txring[tx].len = skb_headlen(skb); 711 data->txring[tx].len = skb_headlen(skb);
709 misc |= TSI108_TX_SOF; 712 misc |= TSI108_TX_SOF;
710 } else { 713 } else {
711 const skb_frag_t *frag = &skb_shinfo(skb)->frags[i - 1]; 714 const skb_frag_t *frag = &skb_shinfo(skb)->frags[i - 1];
712 715
713 data->txring[tx].buf0 = skb_frag_dma_map(NULL, frag, 716 data->txring[tx].buf0 =
714 0, 717 skb_frag_dma_map(&data->pdev->dev, frag,
715 skb_frag_size(frag), 718 0, skb_frag_size(frag),
716 DMA_TO_DEVICE); 719 DMA_TO_DEVICE);
717 data->txring[tx].len = skb_frag_size(frag); 720 data->txring[tx].len = skb_frag_size(frag);
718 } 721 }
719 722
@@ -808,9 +811,9 @@ static int tsi108_refill_rx(struct net_device *dev, int budget)
808 if (!skb) 811 if (!skb)
809 break; 812 break;
810 813
811 data->rxring[rx].buf0 = dma_map_single(NULL, skb->data, 814 data->rxring[rx].buf0 = dma_map_single(&data->pdev->dev,
812 TSI108_RX_SKB_SIZE, 815 skb->data, TSI108_RX_SKB_SIZE,
813 DMA_FROM_DEVICE); 816 DMA_FROM_DEVICE);
814 817
815 /* Sometimes the hardware sets blen to zero after packet 818 /* Sometimes the hardware sets blen to zero after packet
816 * reception, even though the manual says that it's only ever 819 * reception, even though the manual says that it's only ever
@@ -1308,15 +1311,15 @@ static int tsi108_open(struct net_device *dev)
1308 data->id, dev->irq, dev->name); 1311 data->id, dev->irq, dev->name);
1309 } 1312 }
1310 1313
1311 data->rxring = dma_zalloc_coherent(NULL, rxring_size, &data->rxdma, 1314 data->rxring = dma_zalloc_coherent(&data->pdev->dev, rxring_size,
1312 GFP_KERNEL); 1315 &data->rxdma, GFP_KERNEL);
1313 if (!data->rxring) 1316 if (!data->rxring)
1314 return -ENOMEM; 1317 return -ENOMEM;
1315 1318
1316 data->txring = dma_zalloc_coherent(NULL, txring_size, &data->txdma, 1319 data->txring = dma_zalloc_coherent(&data->pdev->dev, txring_size,
1317 GFP_KERNEL); 1320 &data->txdma, GFP_KERNEL);
1318 if (!data->txring) { 1321 if (!data->txring) {
1319 pci_free_consistent(NULL, rxring_size, data->rxring, 1322 dma_free_coherent(&data->pdev->dev, rxring_size, data->rxring,
1320 data->rxdma); 1323 data->rxdma);
1321 return -ENOMEM; 1324 return -ENOMEM;
1322 } 1325 }
@@ -1428,10 +1431,10 @@ static int tsi108_close(struct net_device *dev)
1428 dev_kfree_skb(skb); 1431 dev_kfree_skb(skb);
1429 } 1432 }
1430 1433
1431 dma_free_coherent(0, 1434 dma_free_coherent(&data->pdev->dev,
1432 TSI108_RXRING_LEN * sizeof(rx_desc), 1435 TSI108_RXRING_LEN * sizeof(rx_desc),
1433 data->rxring, data->rxdma); 1436 data->rxring, data->rxdma);
1434 dma_free_coherent(0, 1437 dma_free_coherent(&data->pdev->dev,
1435 TSI108_TXRING_LEN * sizeof(tx_desc), 1438 TSI108_TXRING_LEN * sizeof(tx_desc),
1436 data->txring, data->txdma); 1439 data->txring, data->txdma);
1437 1440
@@ -1576,6 +1579,7 @@ tsi108_init_one(struct platform_device *pdev)
1576 printk("tsi108_eth%d: probe...\n", pdev->id); 1579 printk("tsi108_eth%d: probe...\n", pdev->id);
1577 data = netdev_priv(dev); 1580 data = netdev_priv(dev);
1578 data->dev = dev; 1581 data->dev = dev;
1582 data->pdev = pdev;
1579 1583
1580 pr_debug("tsi108_eth%d:regs:phyresgs:phy:irq_num=0x%x:0x%x:0x%x:0x%x\n", 1584 pr_debug("tsi108_eth%d:regs:phyresgs:phy:irq_num=0x%x:0x%x:0x%x:0x%x\n",
1581 pdev->id, einfo->regs, einfo->phyregs, 1585 pdev->id, einfo->regs, einfo->phyregs,