| .. | .. |
|---|
| 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); |
|---|