hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/drivers/net/ethernet/smsc/epic100.c
....@@ -280,6 +280,7 @@
280280 signed char phys[4]; /* MII device addresses. */
281281 u16 advertising; /* NWay media advertisement */
282282 int mii_phy_cnt;
283
+ u32 ethtool_ops_nesting;
283284 struct mii_if_info mii;
284285 unsigned int tx_full:1; /* The Tx queue is full. */
285286 unsigned int default_port:4; /* Last dev->if_port value. */
....@@ -291,7 +292,7 @@
291292 static void mdio_write(struct net_device *dev, int phy_id, int loc, int val);
292293 static void epic_restart(struct net_device *dev);
293294 static void epic_timer(struct timer_list *t);
294
-static void epic_tx_timeout(struct net_device *dev);
295
+static void epic_tx_timeout(struct net_device *dev, unsigned int txqueue);
295296 static void epic_init_ring(struct net_device *dev);
296297 static netdev_tx_t epic_start_xmit(struct sk_buff *skb,
297298 struct net_device *dev);
....@@ -373,13 +374,15 @@
373374 ep->mii.phy_id_mask = 0x1f;
374375 ep->mii.reg_num_mask = 0x1f;
375376
376
- ring_space = pci_alloc_consistent(pdev, TX_TOTAL_SIZE, &ring_dma);
377
+ ring_space = dma_alloc_coherent(&pdev->dev, TX_TOTAL_SIZE, &ring_dma,
378
+ GFP_KERNEL);
377379 if (!ring_space)
378380 goto err_out_iounmap;
379381 ep->tx_ring = ring_space;
380382 ep->tx_ring_dma = ring_dma;
381383
382
- ring_space = pci_alloc_consistent(pdev, RX_TOTAL_SIZE, &ring_dma);
384
+ ring_space = dma_alloc_coherent(&pdev->dev, RX_TOTAL_SIZE, &ring_dma,
385
+ GFP_KERNEL);
383386 if (!ring_space)
384387 goto err_out_unmap_tx;
385388 ep->rx_ring = ring_space;
....@@ -492,9 +495,11 @@
492495 return ret;
493496
494497 err_out_unmap_rx:
495
- pci_free_consistent(pdev, RX_TOTAL_SIZE, ep->rx_ring, ep->rx_ring_dma);
498
+ dma_free_coherent(&pdev->dev, RX_TOTAL_SIZE, ep->rx_ring,
499
+ ep->rx_ring_dma);
496500 err_out_unmap_tx:
497
- pci_free_consistent(pdev, TX_TOTAL_SIZE, ep->tx_ring, ep->tx_ring_dma);
501
+ dma_free_coherent(&pdev->dev, TX_TOTAL_SIZE, ep->tx_ring,
502
+ ep->tx_ring_dma);
498503 err_out_iounmap:
499504 pci_iounmap(pdev, ioaddr);
500505 err_out_free_netdev:
....@@ -861,7 +866,7 @@
861866 add_timer(&ep->timer);
862867 }
863868
864
-static void epic_tx_timeout(struct net_device *dev)
869
+static void epic_tx_timeout(struct net_device *dev, unsigned int txqueue)
865870 {
866871 struct epic_private *ep = netdev_priv(dev);
867872 void __iomem *ioaddr = ep->ioaddr;
....@@ -917,8 +922,10 @@
917922 if (skb == NULL)
918923 break;
919924 skb_reserve(skb, 2); /* 16 byte align the IP header. */
920
- ep->rx_ring[i].bufaddr = pci_map_single(ep->pci_dev,
921
- skb->data, ep->rx_buf_sz, PCI_DMA_FROMDEVICE);
925
+ ep->rx_ring[i].bufaddr = dma_map_single(&ep->pci_dev->dev,
926
+ skb->data,
927
+ ep->rx_buf_sz,
928
+ DMA_FROM_DEVICE);
922929 ep->rx_ring[i].rxstatus = DescOwn;
923930 }
924931 ep->dirty_rx = (unsigned int)(i - RX_RING_SIZE);
....@@ -954,8 +961,9 @@
954961 entry = ep->cur_tx % TX_RING_SIZE;
955962
956963 ep->tx_skbuff[entry] = skb;
957
- ep->tx_ring[entry].bufaddr = pci_map_single(ep->pci_dev, skb->data,
958
- skb->len, PCI_DMA_TODEVICE);
964
+ ep->tx_ring[entry].bufaddr = dma_map_single(&ep->pci_dev->dev,
965
+ skb->data, skb->len,
966
+ DMA_TO_DEVICE);
959967 if (free_count < TX_QUEUE_LEN/2) {/* Typical path */
960968 ctrl_word = 0x100000; /* No interrupt */
961969 } else if (free_count == TX_QUEUE_LEN/2) {
....@@ -1035,9 +1043,10 @@
10351043
10361044 /* Free the original skb. */
10371045 skb = ep->tx_skbuff[entry];
1038
- pci_unmap_single(ep->pci_dev, ep->tx_ring[entry].bufaddr,
1039
- skb->len, PCI_DMA_TODEVICE);
1040
- dev_kfree_skb_irq(skb);
1046
+ dma_unmap_single(&ep->pci_dev->dev,
1047
+ ep->tx_ring[entry].bufaddr, skb->len,
1048
+ DMA_TO_DEVICE);
1049
+ dev_consume_skb_irq(skb);
10411050 ep->tx_skbuff[entry] = NULL;
10421051 }
10431052
....@@ -1177,20 +1186,21 @@
11771186 if (pkt_len < rx_copybreak &&
11781187 (skb = netdev_alloc_skb(dev, pkt_len + 2)) != NULL) {
11791188 skb_reserve(skb, 2); /* 16 byte align the IP header */
1180
- pci_dma_sync_single_for_cpu(ep->pci_dev,
1181
- ep->rx_ring[entry].bufaddr,
1182
- ep->rx_buf_sz,
1183
- PCI_DMA_FROMDEVICE);
1189
+ dma_sync_single_for_cpu(&ep->pci_dev->dev,
1190
+ ep->rx_ring[entry].bufaddr,
1191
+ ep->rx_buf_sz,
1192
+ DMA_FROM_DEVICE);
11841193 skb_copy_to_linear_data(skb, ep->rx_skbuff[entry]->data, pkt_len);
11851194 skb_put(skb, pkt_len);
1186
- pci_dma_sync_single_for_device(ep->pci_dev,
1187
- ep->rx_ring[entry].bufaddr,
1188
- ep->rx_buf_sz,
1189
- PCI_DMA_FROMDEVICE);
1195
+ dma_sync_single_for_device(&ep->pci_dev->dev,
1196
+ ep->rx_ring[entry].bufaddr,
1197
+ ep->rx_buf_sz,
1198
+ DMA_FROM_DEVICE);
11901199 } else {
1191
- pci_unmap_single(ep->pci_dev,
1192
- ep->rx_ring[entry].bufaddr,
1193
- ep->rx_buf_sz, PCI_DMA_FROMDEVICE);
1200
+ dma_unmap_single(&ep->pci_dev->dev,
1201
+ ep->rx_ring[entry].bufaddr,
1202
+ ep->rx_buf_sz,
1203
+ DMA_FROM_DEVICE);
11941204 skb_put(skb = ep->rx_skbuff[entry], pkt_len);
11951205 ep->rx_skbuff[entry] = NULL;
11961206 }
....@@ -1212,8 +1222,10 @@
12121222 if (skb == NULL)
12131223 break;
12141224 skb_reserve(skb, 2); /* Align IP on 16 byte boundaries */
1215
- ep->rx_ring[entry].bufaddr = pci_map_single(ep->pci_dev,
1216
- skb->data, ep->rx_buf_sz, PCI_DMA_FROMDEVICE);
1225
+ ep->rx_ring[entry].bufaddr = dma_map_single(&ep->pci_dev->dev,
1226
+ skb->data,
1227
+ ep->rx_buf_sz,
1228
+ DMA_FROM_DEVICE);
12171229 work_done++;
12181230 }
12191231 /* AV: shouldn't we add a barrier here? */
....@@ -1293,8 +1305,8 @@
12931305 ep->rx_ring[i].rxstatus = 0; /* Not owned by Epic chip. */
12941306 ep->rx_ring[i].buflength = 0;
12951307 if (skb) {
1296
- pci_unmap_single(pdev, ep->rx_ring[i].bufaddr,
1297
- ep->rx_buf_sz, PCI_DMA_FROMDEVICE);
1308
+ dma_unmap_single(&pdev->dev, ep->rx_ring[i].bufaddr,
1309
+ ep->rx_buf_sz, DMA_FROM_DEVICE);
12981310 dev_kfree_skb(skb);
12991311 }
13001312 ep->rx_ring[i].bufaddr = 0xBADF00D0; /* An invalid address. */
....@@ -1304,8 +1316,8 @@
13041316 ep->tx_skbuff[i] = NULL;
13051317 if (!skb)
13061318 continue;
1307
- pci_unmap_single(pdev, ep->tx_ring[i].bufaddr, skb->len,
1308
- PCI_DMA_TODEVICE);
1319
+ dma_unmap_single(&pdev->dev, ep->tx_ring[i].bufaddr, skb->len,
1320
+ DMA_TO_DEVICE);
13091321 dev_kfree_skb(skb);
13101322 }
13111323
....@@ -1435,8 +1447,10 @@
14351447 struct epic_private *ep = netdev_priv(dev);
14361448 void __iomem *ioaddr = ep->ioaddr;
14371449
1450
+ if (ep->ethtool_ops_nesting == U32_MAX)
1451
+ return -EBUSY;
14381452 /* power-up, if interface is down */
1439
- if (!netif_running(dev)) {
1453
+ if (!ep->ethtool_ops_nesting++ && !netif_running(dev)) {
14401454 ew32(GENCTL, 0x0200);
14411455 ew32(NVCTL, (er32(NVCTL) & ~0x003c) | 0x4800);
14421456 }
....@@ -1449,7 +1463,7 @@
14491463 void __iomem *ioaddr = ep->ioaddr;
14501464
14511465 /* power-down, if interface is down */
1452
- if (!netif_running(dev)) {
1466
+ if (!--ep->ethtool_ops_nesting && !netif_running(dev)) {
14531467 ew32(GENCTL, 0x0008);
14541468 ew32(NVCTL, (er32(NVCTL) & ~0x483c) | 0x0000);
14551469 }
....@@ -1499,22 +1513,21 @@
14991513 struct net_device *dev = pci_get_drvdata(pdev);
15001514 struct epic_private *ep = netdev_priv(dev);
15011515
1502
- pci_free_consistent(pdev, TX_TOTAL_SIZE, ep->tx_ring, ep->tx_ring_dma);
1503
- pci_free_consistent(pdev, RX_TOTAL_SIZE, ep->rx_ring, ep->rx_ring_dma);
15041516 unregister_netdev(dev);
1517
+ dma_free_coherent(&pdev->dev, TX_TOTAL_SIZE, ep->tx_ring,
1518
+ ep->tx_ring_dma);
1519
+ dma_free_coherent(&pdev->dev, RX_TOTAL_SIZE, ep->rx_ring,
1520
+ ep->rx_ring_dma);
15051521 pci_iounmap(pdev, ep->ioaddr);
1506
- pci_release_regions(pdev);
15071522 free_netdev(dev);
1523
+ pci_release_regions(pdev);
15081524 pci_disable_device(pdev);
15091525 /* pci_power_off(pdev, -1); */
15101526 }
15111527
1512
-
1513
-#ifdef CONFIG_PM
1514
-
1515
-static int epic_suspend (struct pci_dev *pdev, pm_message_t state)
1528
+static int __maybe_unused epic_suspend(struct device *dev_d)
15161529 {
1517
- struct net_device *dev = pci_get_drvdata(pdev);
1530
+ struct net_device *dev = dev_get_drvdata(dev_d);
15181531 struct epic_private *ep = netdev_priv(dev);
15191532 void __iomem *ioaddr = ep->ioaddr;
15201533
....@@ -1528,9 +1541,9 @@
15281541 }
15291542
15301543
1531
-static int epic_resume (struct pci_dev *pdev)
1544
+static int __maybe_unused epic_resume(struct device *dev_d)
15321545 {
1533
- struct net_device *dev = pci_get_drvdata(pdev);
1546
+ struct net_device *dev = dev_get_drvdata(dev_d);
15341547
15351548 if (!netif_running(dev))
15361549 return 0;
....@@ -1539,18 +1552,14 @@
15391552 return 0;
15401553 }
15411554
1542
-#endif /* CONFIG_PM */
1543
-
1555
+static SIMPLE_DEV_PM_OPS(epic_pm_ops, epic_suspend, epic_resume);
15441556
15451557 static struct pci_driver epic_driver = {
15461558 .name = DRV_NAME,
15471559 .id_table = epic_pci_tbl,
15481560 .probe = epic_init_one,
15491561 .remove = epic_remove_one,
1550
-#ifdef CONFIG_PM
1551
- .suspend = epic_suspend,
1552
- .resume = epic_resume,
1553
-#endif /* CONFIG_PM */
1562
+ .driver.pm = &epic_pm_ops,
15541563 };
15551564
15561565