.. | .. |
---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-or-later |
---|
1 | 2 | |
---|
2 | 3 | /* Advanced Micro Devices Inc. AMD8111E Linux Network Driver |
---|
3 | 4 | * Copyright (C) 2004 Advanced Micro Devices |
---|
4 | | - * |
---|
5 | 5 | * |
---|
6 | 6 | * Copyright 2001,2002 Jeff Garzik <jgarzik@mandrakesoft.com> [ 8139cp.c,tg3.c ] |
---|
7 | 7 | * Copyright (C) 2001, 2002 David S. Miller (davem@redhat.com)[ tg3.c] |
---|
.. | .. |
---|
12 | 12 | * Carsten Langgaard, carstenl@mips.com [ pcnet32.c ] |
---|
13 | 13 | * Copyright (C) 2000 MIPS Technologies, Inc. All rights reserved. |
---|
14 | 14 | * |
---|
15 | | - * |
---|
16 | | - * This program is free software; you can redistribute it and/or modify |
---|
17 | | - * it under the terms of the GNU General Public License as published by |
---|
18 | | - * the Free Software Foundation; either version 2 of the License, or |
---|
19 | | - * (at your option) any later version. |
---|
20 | | - * |
---|
21 | | - * This program is distributed in the hope that it will be useful, |
---|
22 | | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
---|
23 | | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
---|
24 | | - * GNU General Public License for more details. |
---|
25 | | - * |
---|
26 | | - * You should have received a copy of the GNU General Public License |
---|
27 | | - * along with this program; if not, see <http://www.gnu.org/licenses/>. |
---|
28 | 15 | |
---|
29 | 16 | Module Name: |
---|
30 | 17 | |
---|
.. | .. |
---|
97 | 84 | |
---|
98 | 85 | #include "amd8111e.h" |
---|
99 | 86 | #define MODULE_NAME "amd8111e" |
---|
100 | | -#define MODULE_VERS "3.0.7" |
---|
101 | 87 | MODULE_AUTHOR("Advanced Micro Devices, Inc."); |
---|
102 | | -MODULE_DESCRIPTION ("AMD8111 based 10/100 Ethernet Controller. Driver Version "MODULE_VERS); |
---|
| 88 | +MODULE_DESCRIPTION("AMD8111 based 10/100 Ethernet Controller."); |
---|
103 | 89 | MODULE_LICENSE("GPL"); |
---|
104 | 90 | module_param_array(speed_duplex, int, NULL, 0); |
---|
105 | 91 | MODULE_PARM_DESC(speed_duplex, "Set device speed and duplex modes, 0: Auto Negotiate, 1: 10Mbps Half Duplex, 2: 10Mbps Full Duplex, 3: 100Mbps Half Duplex, 4: 100Mbps Full Duplex"); |
---|
.. | .. |
---|
240 | 226 | /* Freeing transmit skbs */ |
---|
241 | 227 | for(i = 0; i < NUM_TX_BUFFERS; i++){ |
---|
242 | 228 | if(lp->tx_skbuff[i]){ |
---|
243 | | - pci_unmap_single(lp->pci_dev,lp->tx_dma_addr[i], lp->tx_skbuff[i]->len,PCI_DMA_TODEVICE); |
---|
| 229 | + dma_unmap_single(&lp->pci_dev->dev, |
---|
| 230 | + lp->tx_dma_addr[i], |
---|
| 231 | + lp->tx_skbuff[i]->len, DMA_TO_DEVICE); |
---|
244 | 232 | dev_kfree_skb (lp->tx_skbuff[i]); |
---|
245 | 233 | lp->tx_skbuff[i] = NULL; |
---|
246 | 234 | lp->tx_dma_addr[i] = 0; |
---|
.. | .. |
---|
250 | 238 | for (i = 0; i < NUM_RX_BUFFERS; i++){ |
---|
251 | 239 | rx_skbuff = lp->rx_skbuff[i]; |
---|
252 | 240 | if(rx_skbuff != NULL){ |
---|
253 | | - pci_unmap_single(lp->pci_dev,lp->rx_dma_addr[i], |
---|
254 | | - lp->rx_buff_len - 2,PCI_DMA_FROMDEVICE); |
---|
| 241 | + dma_unmap_single(&lp->pci_dev->dev, |
---|
| 242 | + lp->rx_dma_addr[i], |
---|
| 243 | + lp->rx_buff_len - 2, DMA_FROM_DEVICE); |
---|
255 | 244 | dev_kfree_skb(lp->rx_skbuff[i]); |
---|
256 | 245 | lp->rx_skbuff[i] = NULL; |
---|
257 | 246 | lp->rx_dma_addr[i] = 0; |
---|
.. | .. |
---|
301 | 290 | amd8111e_free_skbs(dev); |
---|
302 | 291 | |
---|
303 | 292 | else{ |
---|
304 | | - /* allocate the tx and rx descriptors */ |
---|
305 | | - if((lp->tx_ring = pci_alloc_consistent(lp->pci_dev, |
---|
306 | | - sizeof(struct amd8111e_tx_dr)*NUM_TX_RING_DR, |
---|
307 | | - &lp->tx_ring_dma_addr)) == NULL) |
---|
308 | | - |
---|
| 293 | + /* allocate the tx and rx descriptors */ |
---|
| 294 | + lp->tx_ring = dma_alloc_coherent(&lp->pci_dev->dev, |
---|
| 295 | + sizeof(struct amd8111e_tx_dr) * NUM_TX_RING_DR, |
---|
| 296 | + &lp->tx_ring_dma_addr, GFP_ATOMIC); |
---|
| 297 | + if (!lp->tx_ring) |
---|
309 | 298 | goto err_no_mem; |
---|
310 | 299 | |
---|
311 | | - if((lp->rx_ring = pci_alloc_consistent(lp->pci_dev, |
---|
312 | | - sizeof(struct amd8111e_rx_dr)*NUM_RX_RING_DR, |
---|
313 | | - &lp->rx_ring_dma_addr)) == NULL) |
---|
314 | | - |
---|
| 300 | + lp->rx_ring = dma_alloc_coherent(&lp->pci_dev->dev, |
---|
| 301 | + sizeof(struct amd8111e_rx_dr) * NUM_RX_RING_DR, |
---|
| 302 | + &lp->rx_ring_dma_addr, GFP_ATOMIC); |
---|
| 303 | + if (!lp->rx_ring) |
---|
315 | 304 | goto err_free_tx_ring; |
---|
316 | | - |
---|
317 | 305 | } |
---|
| 306 | + |
---|
318 | 307 | /* Set new receive buff size */ |
---|
319 | 308 | amd8111e_set_rx_buff_len(dev); |
---|
320 | 309 | |
---|
.. | .. |
---|
332 | 321 | } |
---|
333 | 322 | /* Initilaizing receive descriptors */ |
---|
334 | 323 | for (i = 0; i < NUM_RX_BUFFERS; i++) { |
---|
335 | | - lp->rx_dma_addr[i] = pci_map_single(lp->pci_dev, |
---|
336 | | - lp->rx_skbuff[i]->data,lp->rx_buff_len-2, PCI_DMA_FROMDEVICE); |
---|
| 324 | + lp->rx_dma_addr[i] = dma_map_single(&lp->pci_dev->dev, |
---|
| 325 | + lp->rx_skbuff[i]->data, |
---|
| 326 | + lp->rx_buff_len - 2, |
---|
| 327 | + DMA_FROM_DEVICE); |
---|
337 | 328 | |
---|
338 | 329 | lp->rx_ring[i].buff_phy_addr = cpu_to_le32(lp->rx_dma_addr[i]); |
---|
339 | 330 | lp->rx_ring[i].buff_count = cpu_to_le16(lp->rx_buff_len-2); |
---|
.. | .. |
---|
352 | 343 | |
---|
353 | 344 | err_free_rx_ring: |
---|
354 | 345 | |
---|
355 | | - pci_free_consistent(lp->pci_dev, |
---|
356 | | - sizeof(struct amd8111e_rx_dr)*NUM_RX_RING_DR,lp->rx_ring, |
---|
357 | | - lp->rx_ring_dma_addr); |
---|
| 346 | + dma_free_coherent(&lp->pci_dev->dev, |
---|
| 347 | + sizeof(struct amd8111e_rx_dr) * NUM_RX_RING_DR, |
---|
| 348 | + lp->rx_ring, lp->rx_ring_dma_addr); |
---|
358 | 349 | |
---|
359 | 350 | err_free_tx_ring: |
---|
360 | 351 | |
---|
361 | | - pci_free_consistent(lp->pci_dev, |
---|
362 | | - sizeof(struct amd8111e_tx_dr)*NUM_TX_RING_DR,lp->tx_ring, |
---|
363 | | - lp->tx_ring_dma_addr); |
---|
| 352 | + dma_free_coherent(&lp->pci_dev->dev, |
---|
| 353 | + sizeof(struct amd8111e_tx_dr) * NUM_TX_RING_DR, |
---|
| 354 | + lp->tx_ring, lp->tx_ring_dma_addr); |
---|
364 | 355 | |
---|
365 | 356 | err_no_mem: |
---|
366 | 357 | return -ENOMEM; |
---|
.. | .. |
---|
435 | 426 | int i,reg_val; |
---|
436 | 427 | |
---|
437 | 428 | /* stop the chip */ |
---|
438 | | - writel(RUN, mmio + CMD0); |
---|
| 429 | + writel(RUN, mmio + CMD0); |
---|
439 | 430 | |
---|
440 | 431 | if(amd8111e_init_ring(dev)) |
---|
441 | 432 | return -ENOMEM; |
---|
.. | .. |
---|
626 | 617 | { |
---|
627 | 618 | /* Free transmit and receive descriptor rings */ |
---|
628 | 619 | if(lp->rx_ring){ |
---|
629 | | - pci_free_consistent(lp->pci_dev, |
---|
630 | | - sizeof(struct amd8111e_rx_dr)*NUM_RX_RING_DR, |
---|
631 | | - lp->rx_ring, lp->rx_ring_dma_addr); |
---|
| 620 | + dma_free_coherent(&lp->pci_dev->dev, |
---|
| 621 | + sizeof(struct amd8111e_rx_dr) * NUM_RX_RING_DR, |
---|
| 622 | + lp->rx_ring, lp->rx_ring_dma_addr); |
---|
632 | 623 | lp->rx_ring = NULL; |
---|
633 | 624 | } |
---|
634 | 625 | |
---|
635 | 626 | if(lp->tx_ring){ |
---|
636 | | - pci_free_consistent(lp->pci_dev, |
---|
637 | | - sizeof(struct amd8111e_tx_dr)*NUM_TX_RING_DR, |
---|
638 | | - lp->tx_ring, lp->tx_ring_dma_addr); |
---|
| 627 | + dma_free_coherent(&lp->pci_dev->dev, |
---|
| 628 | + sizeof(struct amd8111e_tx_dr) * NUM_TX_RING_DR, |
---|
| 629 | + lp->tx_ring, lp->tx_ring_dma_addr); |
---|
639 | 630 | |
---|
640 | 631 | lp->tx_ring = NULL; |
---|
641 | 632 | } |
---|
.. | .. |
---|
663 | 654 | |
---|
664 | 655 | /* We must free the original skb */ |
---|
665 | 656 | if (lp->tx_skbuff[tx_index]) { |
---|
666 | | - pci_unmap_single(lp->pci_dev, lp->tx_dma_addr[tx_index], |
---|
667 | | - lp->tx_skbuff[tx_index]->len, |
---|
668 | | - PCI_DMA_TODEVICE); |
---|
669 | | - dev_kfree_skb_irq (lp->tx_skbuff[tx_index]); |
---|
| 657 | + dma_unmap_single(&lp->pci_dev->dev, |
---|
| 658 | + lp->tx_dma_addr[tx_index], |
---|
| 659 | + lp->tx_skbuff[tx_index]->len, |
---|
| 660 | + DMA_TO_DEVICE); |
---|
| 661 | + dev_consume_skb_irq(lp->tx_skbuff[tx_index]); |
---|
670 | 662 | lp->tx_skbuff[tx_index] = NULL; |
---|
671 | 663 | lp->tx_dma_addr[tx_index] = 0; |
---|
672 | 664 | } |
---|
.. | .. |
---|
751 | 743 | |
---|
752 | 744 | skb_reserve(new_skb, 2); |
---|
753 | 745 | skb = lp->rx_skbuff[rx_index]; |
---|
754 | | - pci_unmap_single(lp->pci_dev,lp->rx_dma_addr[rx_index], |
---|
755 | | - lp->rx_buff_len-2, PCI_DMA_FROMDEVICE); |
---|
| 746 | + dma_unmap_single(&lp->pci_dev->dev, lp->rx_dma_addr[rx_index], |
---|
| 747 | + lp->rx_buff_len - 2, DMA_FROM_DEVICE); |
---|
756 | 748 | skb_put(skb, pkt_len); |
---|
757 | 749 | lp->rx_skbuff[rx_index] = new_skb; |
---|
758 | | - lp->rx_dma_addr[rx_index] = pci_map_single(lp->pci_dev, |
---|
| 750 | + lp->rx_dma_addr[rx_index] = dma_map_single(&lp->pci_dev->dev, |
---|
759 | 751 | new_skb->data, |
---|
760 | | - lp->rx_buff_len-2, |
---|
761 | | - PCI_DMA_FROMDEVICE); |
---|
| 752 | + lp->rx_buff_len - 2, |
---|
| 753 | + DMA_FROM_DEVICE); |
---|
762 | 754 | |
---|
763 | 755 | skb->protocol = eth_type_trans(skb, dev); |
---|
764 | 756 | |
---|
.. | .. |
---|
1284 | 1276 | } |
---|
1285 | 1277 | #endif |
---|
1286 | 1278 | lp->tx_dma_addr[tx_index] = |
---|
1287 | | - pci_map_single(lp->pci_dev, skb->data, skb->len, PCI_DMA_TODEVICE); |
---|
| 1279 | + dma_map_single(&lp->pci_dev->dev, skb->data, skb->len, |
---|
| 1280 | + DMA_TO_DEVICE); |
---|
1288 | 1281 | lp->tx_ring[tx_index].buff_phy_addr = |
---|
1289 | 1282 | cpu_to_le32(lp->tx_dma_addr[tx_index]); |
---|
1290 | 1283 | |
---|
.. | .. |
---|
1379 | 1372 | struct amd8111e_priv *lp = netdev_priv(dev); |
---|
1380 | 1373 | struct pci_dev *pci_dev = lp->pci_dev; |
---|
1381 | 1374 | strlcpy(info->driver, MODULE_NAME, sizeof(info->driver)); |
---|
1382 | | - strlcpy(info->version, MODULE_VERS, sizeof(info->version)); |
---|
1383 | 1375 | snprintf(info->fw_version, sizeof(info->fw_version), |
---|
1384 | 1376 | "%u", chip_version); |
---|
1385 | 1377 | strlcpy(info->bus_info, pci_name(pci_dev), sizeof(info->bus_info)); |
---|
.. | .. |
---|
1483 | 1475 | case SIOCGMIIPHY: |
---|
1484 | 1476 | data->phy_id = lp->ext_phy_addr; |
---|
1485 | 1477 | |
---|
1486 | | - /* fallthru */ |
---|
| 1478 | + fallthrough; |
---|
1487 | 1479 | case SIOCGMIIREG: |
---|
1488 | 1480 | |
---|
1489 | 1481 | spin_lock_irq(&lp->lock); |
---|
.. | .. |
---|
1582 | 1574 | * failed or the interface is locked up. This function will reinitialize |
---|
1583 | 1575 | * the hardware. |
---|
1584 | 1576 | */ |
---|
1585 | | -static void amd8111e_tx_timeout(struct net_device *dev) |
---|
| 1577 | +static void amd8111e_tx_timeout(struct net_device *dev, unsigned int txqueue) |
---|
1586 | 1578 | { |
---|
1587 | 1579 | struct amd8111e_priv *lp = netdev_priv(dev); |
---|
1588 | 1580 | int err; |
---|
.. | .. |
---|
1595 | 1587 | if(!err) |
---|
1596 | 1588 | netif_wake_queue(dev); |
---|
1597 | 1589 | } |
---|
1598 | | -static int amd8111e_suspend(struct pci_dev *pci_dev, pm_message_t state) |
---|
| 1590 | + |
---|
| 1591 | +static int __maybe_unused amd8111e_suspend(struct device *dev_d) |
---|
1599 | 1592 | { |
---|
1600 | | - struct net_device *dev = pci_get_drvdata(pci_dev); |
---|
| 1593 | + struct net_device *dev = dev_get_drvdata(dev_d); |
---|
1601 | 1594 | struct amd8111e_priv *lp = netdev_priv(dev); |
---|
1602 | 1595 | |
---|
1603 | 1596 | if (!netif_running(dev)) |
---|
.. | .. |
---|
1624 | 1617 | if(lp->options & OPTION_WAKE_PHY_ENABLE) |
---|
1625 | 1618 | amd8111e_enable_link_change(lp); |
---|
1626 | 1619 | |
---|
1627 | | - pci_enable_wake(pci_dev, PCI_D3hot, 1); |
---|
1628 | | - pci_enable_wake(pci_dev, PCI_D3cold, 1); |
---|
| 1620 | + device_set_wakeup_enable(dev_d, 1); |
---|
1629 | 1621 | |
---|
1630 | 1622 | } |
---|
1631 | 1623 | else{ |
---|
1632 | | - pci_enable_wake(pci_dev, PCI_D3hot, 0); |
---|
1633 | | - pci_enable_wake(pci_dev, PCI_D3cold, 0); |
---|
| 1624 | + device_set_wakeup_enable(dev_d, 0); |
---|
1634 | 1625 | } |
---|
1635 | | - |
---|
1636 | | - pci_save_state(pci_dev); |
---|
1637 | | - pci_set_power_state(pci_dev, PCI_D3hot); |
---|
1638 | 1626 | |
---|
1639 | 1627 | return 0; |
---|
1640 | 1628 | } |
---|
1641 | | -static int amd8111e_resume(struct pci_dev *pci_dev) |
---|
| 1629 | + |
---|
| 1630 | +static int __maybe_unused amd8111e_resume(struct device *dev_d) |
---|
1642 | 1631 | { |
---|
1643 | | - struct net_device *dev = pci_get_drvdata(pci_dev); |
---|
| 1632 | + struct net_device *dev = dev_get_drvdata(dev_d); |
---|
1644 | 1633 | struct amd8111e_priv *lp = netdev_priv(dev); |
---|
1645 | 1634 | |
---|
1646 | 1635 | if (!netif_running(dev)) |
---|
1647 | 1636 | return 0; |
---|
1648 | | - |
---|
1649 | | - pci_set_power_state(pci_dev, PCI_D0); |
---|
1650 | | - pci_restore_state(pci_dev); |
---|
1651 | | - |
---|
1652 | | - pci_enable_wake(pci_dev, PCI_D3hot, 0); |
---|
1653 | | - pci_enable_wake(pci_dev, PCI_D3cold, 0); /* D3 cold */ |
---|
1654 | 1637 | |
---|
1655 | 1638 | netif_device_attach(dev); |
---|
1656 | 1639 | |
---|
.. | .. |
---|
1720 | 1703 | writew((u32)tmp_ipg, mmio + IPG); |
---|
1721 | 1704 | writew((u32)(tmp_ipg - IFS1_DELTA), mmio + IFS1); |
---|
1722 | 1705 | } |
---|
1723 | | - mod_timer(&lp->ipg_data.ipg_timer, jiffies + IPG_CONVERGE_JIFFIES); |
---|
| 1706 | + mod_timer(&lp->ipg_data.ipg_timer, jiffies + IPG_CONVERGE_JIFFIES); |
---|
1724 | 1707 | return; |
---|
1725 | 1708 | |
---|
1726 | 1709 | } |
---|
.. | .. |
---|
1797 | 1780 | } |
---|
1798 | 1781 | |
---|
1799 | 1782 | /* Initialize DMA */ |
---|
1800 | | - if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) < 0) { |
---|
| 1783 | + if (dma_set_mask(&pdev->dev, DMA_BIT_MASK(32)) < 0) { |
---|
1801 | 1784 | dev_err(&pdev->dev, "DMA not supported\n"); |
---|
1802 | 1785 | err = -ENODEV; |
---|
1803 | 1786 | goto err_free_reg; |
---|
.. | .. |
---|
1888 | 1871 | |
---|
1889 | 1872 | /* display driver and device information */ |
---|
1890 | 1873 | chip_version = (readl(lp->mmio + CHIPID) & 0xf0000000)>>28; |
---|
1891 | | - dev_info(&pdev->dev, "AMD-8111e Driver Version: %s\n", MODULE_VERS); |
---|
1892 | 1874 | dev_info(&pdev->dev, "[ Rev %x ] PCI 10/100BaseT Ethernet %pM\n", |
---|
1893 | 1875 | chip_version, dev->dev_addr); |
---|
1894 | 1876 | if (lp->ext_phy_id) |
---|
.. | .. |
---|
1934 | 1916 | }; |
---|
1935 | 1917 | MODULE_DEVICE_TABLE(pci, amd8111e_pci_tbl); |
---|
1936 | 1918 | |
---|
| 1919 | +static SIMPLE_DEV_PM_OPS(amd8111e_pm_ops, amd8111e_suspend, amd8111e_resume); |
---|
| 1920 | + |
---|
1937 | 1921 | static struct pci_driver amd8111e_driver = { |
---|
1938 | 1922 | .name = MODULE_NAME, |
---|
1939 | 1923 | .id_table = amd8111e_pci_tbl, |
---|
1940 | 1924 | .probe = amd8111e_probe_one, |
---|
1941 | 1925 | .remove = amd8111e_remove_one, |
---|
1942 | | - .suspend = amd8111e_suspend, |
---|
1943 | | - .resume = amd8111e_resume |
---|
| 1926 | + .driver.pm = &amd8111e_pm_ops |
---|
1944 | 1927 | }; |
---|
1945 | 1928 | |
---|
1946 | 1929 | module_pci_driver(amd8111e_driver); |
---|