Lines Matching +full:reg +full:- +full:names
3 8139too.c: A RealTek RTL-8139 Fast Ethernet driver for Linux.
6 Copyright 2000-2002 Jeff Garzik
12 -----<snip>-----
14 Written 1997-2001 by Donald Becker.
33 Twister-tuning table provided by Kinston
36 -----<snip>-----
43 Donald Becker - he wrote the original driver, kudos to him!
44 (but please don't e-mail him for support, this isn't his driver)
46 Tigran Aivazian - bug fixes, skbuff free cleanup
48 Martin Mares - suggestions for PCI cleanup
50 David S. Miller - PCI DMA and softnet updates
52 Ernst Gill - fixes ported from BSD driver
54 Daniel Kobras - identified specific locations of
57 Gerard Sharp - bug fix, testing and feedback
59 David Ford - Rx ring wrap fix
61 Dan DeMaggio - swapped RTL8139 cards with me, and allowed me
64 Donald Becker/Chris Butterworth/Marcus Westergren -
65 Noticed various Rx packet size-related buglets.
67 Santiago Garcia Mantinan - testing and feedback
69 Jens David - 2.2.x kernel backports
71 Martin Dennett - incredibly helpful insight on undocumented
74 Jean-Jacques Michel - bug fix
76 Tobias Ringström - Rx interrupt status checking suggestion
78 Andrew Morton - Clear blocked signals, avoid
79 buffer overrun setting current->comm.
81 Kalle Olavi Niemitalo - Wake-on-LAN ioctls
83 Robert Kuebel - Save kernel thread from dying on any signal.
87 "rtl8139-diag -mmmaaavvveefN" output
144 /* A few user-configurable values. */
147 static int media[MAX_UNITS] = {-1, -1, -1, -1, -1, -1, -1, -1};
148 static int full_duplex[MAX_UNITS] = {-1, -1, -1, -1, -1, -1, -1, -1};
157 /* Maximum number of multicast addresses to filter (vs. Rx-all-multicast).
162 static int debug = -1;
186 /* max supported ethernet frame size -- must be at least (dev->mtu+18+4).*/
190 #define MAX_ETH_DATA_SIZE (MAX_ETH_FRAME_SIZE - VLAN_ETH_HLEN - ETH_FCS_LEN)
192 /* Size of the Tx bounce buffers -- must be at least (dev->mtu+18+4). */
200 /* The following settings are log_2(bytes)-4: 0 == 16 bytes .. 6==1024, 7==end of packet. */
204 #define TX_RETRY 8 /* 0-15. retries = 16 + (TX_RETRY * 16) */
218 #define RTL_REGS_VER 1 /* version of reg. data in ETHTOOL_GREGS */
264 /* Bogus 8139 silicon reports 8129 without external PROM :-( */
308 Timer = 0x48, /* A general-purpose counter. */
316 Config4 = 0x5A, /* absent on RTL-8139A */
331 Config5 = 0xD8, /* absent on RTL-8139A */
347 /* Interrupt register bits, using my own meaningful names. */
404 TxDMAShift = 8, /* DMA burst value (0-7) is shifted X many bits */
405 TxRetryShift = 4, /* TXRR value (0-15) is shifted X many bits */
407 TxVersionMask = 0x7C800000, /* mask out version bits 30-26, 23 */
514 { "RTL-8139",
519 { "RTL-8139 rev K",
524 { "RTL-8139A",
529 { "RTL-8139A rev G",
534 { "RTL-8139B",
539 { "RTL-8130",
544 { "RTL-8139C",
549 { "RTL-8100",
554 { "RTL-8100B/8139D",
560 { "RTL-8101",
606 unsigned int default_port : 4; /* Last dev->if_port value. */
624 MODULE_DESCRIPTION ("RealTek RTL-8139 Fast Ethernet driver");
668 #define RTL_W8_F(reg, val8) do { iowrite8 ((val8), ioaddr + (reg)); ioread8 (ioaddr + (reg)); } whi… argument
669 #define RTL_W16_F(reg, val16) do { iowrite16 ((val16), ioaddr + (reg)); ioread16 (ioaddr + (reg)); … argument
670 #define RTL_W32_F(reg, val32) do { iowrite32 ((val32), ioaddr + (reg)); ioread32 (ioaddr + (reg)); … argument
673 #define RTL_W8(reg, val8) iowrite8 ((val8), ioaddr + (reg)) argument
674 #define RTL_W16(reg, val16) iowrite16 ((val16), ioaddr + (reg)) argument
675 #define RTL_W32(reg, val32) iowrite32 ((val32), ioaddr + (reg)) argument
678 #define RTL_R8(reg) ioread8 (ioaddr + (reg)) argument
679 #define RTL_R16(reg) ioread16 (ioaddr + (reg)) argument
680 #define RTL_R32(reg) ioread32 (ioaddr + (reg)) argument
724 assert (tp->pci_dev != NULL); in __rtl8139_cleanup_dev()
725 pdev = tp->pci_dev; in __rtl8139_cleanup_dev()
727 if (tp->mmio_addr) in __rtl8139_cleanup_dev()
728 pci_iounmap (pdev, tp->mmio_addr); in __rtl8139_cleanup_dev()
745 for (i = 1000; i > 0; i--) { in rtl8139_chip_reset()
756 struct device *d = &pdev->dev; in rtl8139_init_board()
778 return ERR_PTR(-ENOMEM); in rtl8139_init_board()
780 SET_NETDEV_DEV(dev, &pdev->dev); in rtl8139_init_board()
783 tp->pci_dev = pdev; in rtl8139_init_board()
797 u64_stats_init(&tp->rx_stats.syncp); in rtl8139_init_board()
798 u64_stats_init(&tp->tx_stats.syncp); in rtl8139_init_board()
811 rc = -ENODEV; in rtl8139_init_board()
817 rc = -ENODEV; in rtl8139_init_board()
828 rc = -ENODEV; in rtl8139_init_board()
831 tp->regs_len = io_len; in rtl8139_init_board()
832 tp->mmio_addr = ioaddr; in rtl8139_init_board()
834 /* Bring old chips out of low-power mode. */ in rtl8139_init_board()
839 dev_err(&pdev->dev, "Chip not responding, ignoring board\n"); in rtl8139_init_board()
840 rc = -EIO; in rtl8139_init_board()
848 tp->chipset = i; in rtl8139_init_board()
852 /* if unknown chip, assume array element #0, original RTL-8139 in this case */ in rtl8139_init_board()
854 dev_dbg(&pdev->dev, "unknown chip version, assuming RTL-8139\n"); in rtl8139_init_board()
855 dev_dbg(&pdev->dev, "TxConfig = 0x%x\n", RTL_R32 (TxConfig)); in rtl8139_init_board()
856 tp->chipset = 0; in rtl8139_init_board()
862 if (tp->chipset >= CH_8139B) { in rtl8139_init_board()
865 if ((rtl_chip_info[tp->chipset].flags & HasLWake) && in rtl8139_init_board()
874 if (rtl_chip_info[tp->chipset].flags & HasLWake) { in rtl8139_init_board()
904 netdev_features_t changed = features ^ dev->features; in rtl8139_set_features()
905 void __iomem *ioaddr = tp->mmio_addr; in rtl8139_set_features()
910 spin_lock_irqsave(&tp->lock, flags); in rtl8139_set_features()
913 int rx_mode = tp->rx_config; in rtl8139_set_features()
918 tp->rx_config = rtl8139_rx_config | rx_mode; in rtl8139_set_features()
919 RTL_W32_F(RxConfig, tp->rx_config); in rtl8139_set_features()
922 spin_unlock_irqrestore(&tp->lock, flags); in rtl8139_set_features()
950 static int board_idx = -1; in rtl8139_init_one()
968 if (pdev->vendor == PCI_VENDOR_ID_REALTEK && in rtl8139_init_one()
969 pdev->device == PCI_DEVICE_ID_REALTEK_8139 && pdev->revision >= 0x20) { in rtl8139_init_one()
970 dev_info(&pdev->dev, in rtl8139_init_one()
972 pdev->vendor, pdev->device, pdev->revision); in rtl8139_init_one()
973 return -ENODEV; in rtl8139_init_one()
976 if (pdev->vendor == PCI_VENDOR_ID_REALTEK && in rtl8139_init_one()
977 pdev->device == PCI_DEVICE_ID_REALTEK_8139 && in rtl8139_init_one()
978 pdev->subsystem_vendor == PCI_VENDOR_ID_ATHEROS && in rtl8139_init_one()
979 pdev->subsystem_device == PCI_DEVICE_ID_REALTEK_8139) { in rtl8139_init_one()
990 tp->dev = dev; in rtl8139_init_one()
992 ioaddr = tp->mmio_addr; in rtl8139_init_one()
997 ((__le16 *) (dev->dev_addr))[i] = in rtl8139_init_one()
1000 /* The Rtl8139-specific entries in the device structure. */ in rtl8139_init_one()
1001 dev->netdev_ops = &rtl8139_netdev_ops; in rtl8139_init_one()
1002 dev->ethtool_ops = &rtl8139_ethtool_ops; in rtl8139_init_one()
1003 dev->watchdog_timeo = TX_TIMEOUT; in rtl8139_init_one()
1004 netif_napi_add(dev, &tp->napi, rtl8139_poll, 64); in rtl8139_init_one()
1010 dev->features |= NETIF_F_SG | NETIF_F_HW_CSUM | NETIF_F_HIGHDMA; in rtl8139_init_one()
1011 dev->vlan_features = dev->features; in rtl8139_init_one()
1013 dev->hw_features |= NETIF_F_RXALL; in rtl8139_init_one()
1014 dev->hw_features |= NETIF_F_RXFCS; in rtl8139_init_one()
1016 /* MTU range: 68 - 1770 */ in rtl8139_init_one()
1017 dev->min_mtu = ETH_MIN_MTU; in rtl8139_init_one()
1018 dev->max_mtu = MAX_ETH_DATA_SIZE; in rtl8139_init_one()
1023 /* note: tp->chipset set in rtl8139_init_board */ in rtl8139_init_one()
1024 tp->drv_flags = board_info[ent->driver_data].hw_flags; in rtl8139_init_one()
1025 tp->mmio_addr = ioaddr; in rtl8139_init_one()
1026 tp->msg_enable = in rtl8139_init_one()
1027 (debug < 0 ? RTL8139_DEF_MSG_ENABLE : ((1 << debug) - 1)); in rtl8139_init_one()
1028 spin_lock_init (&tp->lock); in rtl8139_init_one()
1029 spin_lock_init (&tp->rx_lock); in rtl8139_init_one()
1030 INIT_DELAYED_WORK(&tp->thread, rtl8139_thread); in rtl8139_init_one()
1031 tp->mii.dev = dev; in rtl8139_init_one()
1032 tp->mii.mdio_read = mdio_read; in rtl8139_init_one()
1033 tp->mii.mdio_write = mdio_write; in rtl8139_init_one()
1034 tp->mii.phy_id_mask = 0x3f; in rtl8139_init_one()
1035 tp->mii.reg_num_mask = 0x1f; in rtl8139_init_one()
1039 dev->name, dev); in rtl8139_init_one()
1046 board_info[ent->driver_data].name, in rtl8139_init_one()
1047 ioaddr, dev->dev_addr, pdev->irq); in rtl8139_init_one()
1050 rtl_chip_info[tp->chipset].name); in rtl8139_init_one()
1056 if (tp->drv_flags & HAS_MII_XCVR) { in rtl8139_init_one()
1058 for (phy = 0; phy < 32 && phy_idx < sizeof(tp->phys); phy++) { in rtl8139_init_one()
1062 tp->phys[phy_idx++] = phy; in rtl8139_init_one()
1069 tp->phys[0] = 32; in rtl8139_init_one()
1073 tp->phys[0] = 32; in rtl8139_init_one()
1074 tp->mii.phy_id = tp->phys[0]; in rtl8139_init_one()
1079 tp->mii.full_duplex = (option & 0x210) ? 1 : 0; in rtl8139_init_one()
1080 tp->default_port = option & 0xFF; in rtl8139_init_one()
1081 if (tp->default_port) in rtl8139_init_one()
1082 tp->mii.force_media = 1; in rtl8139_init_one()
1085 tp->mii.full_duplex = full_duplex[board_idx]; in rtl8139_init_one()
1086 if (tp->mii.full_duplex) { in rtl8139_init_one()
1088 /* Changing the MII-advertised media because might prevent in rtl8139_init_one()
1089 re-connection. */ in rtl8139_init_one()
1090 tp->mii.force_media = 1; in rtl8139_init_one()
1092 if (tp->default_port) { in rtl8139_init_one()
1093 netdev_info(dev, " Forcing %dMbps %s-duplex operation\n", in rtl8139_init_one()
1096 mdio_write(dev, tp->phys[0], 0, in rtl8139_init_one()
1101 /* Put the chip into low-power mode. */ in rtl8139_init_one()
1102 if (rtl_chip_info[tp->chipset].flags & HasHltClk) in rtl8139_init_one()
1121 cancel_delayed_work_sync(&tp->thread); in rtl8139_remove_one()
1147 /* The EEPROM commands include the alway-set leading bit. */
1163 for (i = 4 + addr_len; i >= 0; i--) { in read_eeprom()
1173 for (i = 16; i > 0; i--) { in read_eeprom()
1191 /* Read and write the MII management registers using software-generated
1194 met by back-to-back PCI I/O cycles, but we insert a delay to avoid
1224 for (i = 32; i >= 0; i--) { in mdio_sync()
1238 void __iomem *ioaddr = tp->mmio_addr; in mdio_read()
1244 void __iomem *ioaddr = tp->mmio_addr; in mdio_read()
1252 for (i = 15; i >= 0; i--) { in mdio_read()
1261 /* Read the two transition, 16 data, and wire-idle bits. */ in mdio_read()
1262 for (i = 19; i > 0; i--) { in mdio_read()
1280 void __iomem *ioaddr = tp->mmio_addr; in mdio_write()
1286 void __iomem *ioaddr = tp->mmio_addr; in mdio_write()
1300 for (i = 31; i >= 0; i--) { in mdio_write()
1309 for (i = 2; i > 0; i--) { in mdio_write()
1322 void __iomem *ioaddr = tp->mmio_addr; in rtl8139_open()
1323 const int irq = tp->pci_dev->irq; in rtl8139_open()
1326 retval = request_irq(irq, rtl8139_interrupt, IRQF_SHARED, dev->name, dev); in rtl8139_open()
1330 tp->tx_bufs = dma_alloc_coherent(&tp->pci_dev->dev, TX_BUF_TOT_LEN, in rtl8139_open()
1331 &tp->tx_bufs_dma, GFP_KERNEL); in rtl8139_open()
1332 tp->rx_ring = dma_alloc_coherent(&tp->pci_dev->dev, RX_BUF_TOT_LEN, in rtl8139_open()
1333 &tp->rx_ring_dma, GFP_KERNEL); in rtl8139_open()
1334 if (tp->tx_bufs == NULL || tp->rx_ring == NULL) { in rtl8139_open()
1337 if (tp->tx_bufs) in rtl8139_open()
1338 dma_free_coherent(&tp->pci_dev->dev, TX_BUF_TOT_LEN, in rtl8139_open()
1339 tp->tx_bufs, tp->tx_bufs_dma); in rtl8139_open()
1340 if (tp->rx_ring) in rtl8139_open()
1341 dma_free_coherent(&tp->pci_dev->dev, RX_BUF_TOT_LEN, in rtl8139_open()
1342 tp->rx_ring, tp->rx_ring_dma); in rtl8139_open()
1344 return -ENOMEM; in rtl8139_open()
1348 napi_enable(&tp->napi); in rtl8139_open()
1350 tp->mii.full_duplex = tp->mii.force_media; in rtl8139_open()
1351 tp->tx_flag = (TX_FIFO_THRESH << 11) & 0x003f0000; in rtl8139_open()
1358 "%s() ioaddr %#llx IRQ %d GP Pins %02x %s-duplex\n", in rtl8139_open()
1360 (unsigned long long)pci_resource_start (tp->pci_dev, 1), in rtl8139_open()
1362 tp->mii.full_duplex ? "full" : "half"); in rtl8139_open()
1374 if (tp->phys[0] >= 0) { in rtl_check_media()
1375 mii_check_media(&tp->mii, netif_msg_link(tp), init_media); in rtl_check_media()
1383 void __iomem *ioaddr = tp->mmio_addr; in rtl8139_hw_start()
1387 /* Bring old chips out of low-power mode. */ in rtl8139_hw_start()
1388 if (rtl_chip_info[tp->chipset].flags & HasHltClk) in rtl8139_hw_start()
1396 RTL_W32_F (MAC0 + 0, le32_to_cpu (*(__le32 *) (dev->dev_addr + 0))); in rtl8139_hw_start()
1397 RTL_W32_F (MAC0 + 4, le16_to_cpu (*(__le16 *) (dev->dev_addr + 4))); in rtl8139_hw_start()
1399 tp->cur_rx = 0; in rtl8139_hw_start()
1402 RTL_W32_F (RxBuf, tp->rx_ring_dma); in rtl8139_hw_start()
1407 tp->rx_config = rtl8139_rx_config | AcceptBroadcast | AcceptMyPhys; in rtl8139_hw_start()
1408 RTL_W32 (RxConfig, tp->rx_config); in rtl8139_hw_start()
1413 if (tp->chipset >= CH_8139B) { in rtl8139_hw_start()
1427 RTL_W32_F (TxAddr0 + (i * 4), tp->tx_bufs_dma + (tp->tx_buf[i] - tp->tx_bufs)); in rtl8139_hw_start()
1433 /* no early-rx interrupts */ in rtl8139_hw_start()
1452 tp->cur_rx = 0; in rtl8139_init_ring()
1453 tp->cur_tx = 0; in rtl8139_init_ring()
1454 tp->dirty_tx = 0; in rtl8139_init_ring()
1457 tp->tx_buf[i] = &tp->tx_bufs[i * TX_BUF_SIZE]; in rtl8139_init_ring()
1485 void __iomem *ioaddr = tp->mmio_addr; in rtl8139_tune_twister()
1491 switch (tp->twistie) { in rtl8139_tune_twister()
1496 tp->twistie = 2; /* Change to state 2. */ in rtl8139_tune_twister()
1504 tp->twistie = 0; /* Bail from future actions. */ in rtl8139_tune_twister()
1511 tp->twist_row = 3; in rtl8139_tune_twister()
1513 tp->twist_row = 2; in rtl8139_tune_twister()
1515 tp->twist_row = 1; in rtl8139_tune_twister()
1517 tp->twist_row = 0; in rtl8139_tune_twister()
1518 tp->twist_col = 0; in rtl8139_tune_twister()
1519 tp->twistie = 3; /* Change to state 2. */ in rtl8139_tune_twister()
1524 if (tp->twist_col == 0) in rtl8139_tune_twister()
1526 RTL_W32 (PARA7c, param[(int) tp->twist_row] in rtl8139_tune_twister()
1527 [(int) tp->twist_col]); in rtl8139_tune_twister()
1529 if (++tp->twist_col >= 4) { in rtl8139_tune_twister()
1532 tp->twistie = in rtl8139_tune_twister()
1533 (tp->twist_row == 3) ? 4 : 0; in rtl8139_tune_twister()
1540 tp->twistie = 0; in rtl8139_tune_twister()
1544 tp->twistie = 5; in rtl8139_tune_twister()
1554 tp->twist_row = 2; in rtl8139_tune_twister()
1555 tp->twist_col = 0; in rtl8139_tune_twister()
1556 tp->twistie = 3; in rtl8139_tune_twister()
1573 mii_lpa = mdio_read (dev, tp->phys[0], MII_LPA); in rtl8139_thread_iter()
1575 if (!tp->mii.force_media && mii_lpa != 0xffff) { in rtl8139_thread_iter()
1578 if (tp->mii.full_duplex != duplex) { in rtl8139_thread_iter()
1579 tp->mii.full_duplex = duplex; in rtl8139_thread_iter()
1582 netdev_info(dev, "Setting %s-duplex based on MII #%d link partner ability of %04x\n", in rtl8139_thread_iter()
1583 tp->mii.full_duplex ? "full" : "half", in rtl8139_thread_iter()
1584 tp->phys[0], mii_lpa); in rtl8139_thread_iter()
1590 RTL_W8 (Config1, tp->mii.full_duplex ? 0x60 : 0x20); in rtl8139_thread_iter()
1612 struct net_device *dev = tp->mii.dev; in rtl8139_thread()
1620 if (tp->watchdog_fired) { in rtl8139_thread()
1621 tp->watchdog_fired = 0; in rtl8139_thread()
1624 rtl8139_thread_iter(dev, tp, tp->mmio_addr); in rtl8139_thread()
1626 if (tp->have_thread) in rtl8139_thread()
1627 schedule_delayed_work(&tp->thread, thr_delay); in rtl8139_thread()
1634 tp->twistie = 0; in rtl8139_start_thread()
1635 if (tp->chipset == CH_8139_K) in rtl8139_start_thread()
1636 tp->twistie = 1; in rtl8139_start_thread()
1637 else if (tp->drv_flags & HAS_LNK_CHNG) in rtl8139_start_thread()
1640 tp->have_thread = 1; in rtl8139_start_thread()
1641 tp->watchdog_fired = 0; in rtl8139_start_thread()
1643 schedule_delayed_work(&tp->thread, next_tick); in rtl8139_start_thread()
1648 tp->cur_tx = 0; in rtl8139_tx_clear()
1649 tp->dirty_tx = 0; in rtl8139_tx_clear()
1651 /* XXX account for unsent Tx packets in tp->stats.tx_dropped */ in rtl8139_tx_clear()
1658 struct net_device *dev = tp->mii.dev; in rtl8139_tx_timeout_task()
1659 void __iomem *ioaddr = tp->mmio_addr; in rtl8139_tx_timeout_task()
1663 napi_disable(&tp->napi); in rtl8139_tx_timeout_task()
1672 tp->cur_tx, tp->dirty_tx); in rtl8139_tx_timeout_task()
1676 i == tp->dirty_tx % NUM_TX_DESC ? in rtl8139_tx_timeout_task()
1679 tp->xstats.tx_timeouts++; in rtl8139_tx_timeout_task()
1686 spin_lock_bh(&tp->rx_lock); in rtl8139_tx_timeout_task()
1691 spin_lock_irq(&tp->lock); in rtl8139_tx_timeout_task()
1693 spin_unlock_irq(&tp->lock); in rtl8139_tx_timeout_task()
1696 napi_enable(&tp->napi); in rtl8139_tx_timeout_task()
1700 spin_unlock_bh(&tp->rx_lock); in rtl8139_tx_timeout_task()
1707 tp->watchdog_fired = 1; in rtl8139_tx_timeout()
1708 if (!tp->have_thread) { in rtl8139_tx_timeout()
1709 INIT_DELAYED_WORK(&tp->thread, rtl8139_thread); in rtl8139_tx_timeout()
1710 schedule_delayed_work(&tp->thread, next_tick); in rtl8139_tx_timeout()
1718 void __iomem *ioaddr = tp->mmio_addr; in rtl8139_start_xmit()
1720 unsigned int len = skb->len; in rtl8139_start_xmit()
1724 entry = tp->cur_tx % NUM_TX_DESC; in rtl8139_start_xmit()
1726 /* Note: the chip doesn't have auto-pad! */ in rtl8139_start_xmit()
1729 memset(tp->tx_buf[entry], 0, ETH_ZLEN); in rtl8139_start_xmit()
1730 skb_copy_and_csum_dev(skb, tp->tx_buf[entry]); in rtl8139_start_xmit()
1734 dev->stats.tx_dropped++; in rtl8139_start_xmit()
1738 spin_lock_irqsave(&tp->lock, flags); in rtl8139_start_xmit()
1741 * copied to tp->tx_buf[entry] above. Use a memory barrier in rtl8139_start_xmit()
1746 tp->tx_flag | max(len, (unsigned int)ETH_ZLEN)); in rtl8139_start_xmit()
1748 tp->cur_tx++; in rtl8139_start_xmit()
1750 if ((tp->cur_tx - NUM_TX_DESC) == tp->dirty_tx) in rtl8139_start_xmit()
1752 spin_unlock_irqrestore(&tp->lock, flags); in rtl8139_start_xmit()
1770 dirty_tx = tp->dirty_tx; in rtl8139_tx_interrupt()
1771 tx_left = tp->cur_tx - dirty_tx; in rtl8139_tx_interrupt()
1786 dev->stats.tx_errors++; in rtl8139_tx_interrupt()
1788 dev->stats.tx_aborted_errors++; in rtl8139_tx_interrupt()
1794 dev->stats.tx_carrier_errors++; in rtl8139_tx_interrupt()
1796 dev->stats.tx_window_errors++; in rtl8139_tx_interrupt()
1800 if (tp->tx_flag < 0x00300000) in rtl8139_tx_interrupt()
1801 tp->tx_flag += 0x00020000; in rtl8139_tx_interrupt()
1802 dev->stats.tx_fifo_errors++; in rtl8139_tx_interrupt()
1804 dev->stats.collisions += (txstatus >> 24) & 15; in rtl8139_tx_interrupt()
1805 u64_stats_update_begin(&tp->tx_stats.syncp); in rtl8139_tx_interrupt()
1806 tp->tx_stats.packets++; in rtl8139_tx_interrupt()
1807 tp->tx_stats.bytes += txstatus & 0x7ff; in rtl8139_tx_interrupt()
1808 u64_stats_update_end(&tp->tx_stats.syncp); in rtl8139_tx_interrupt()
1812 tx_left--; in rtl8139_tx_interrupt()
1816 if (tp->cur_tx - dirty_tx > NUM_TX_DESC) { in rtl8139_tx_interrupt()
1817 netdev_err(dev, "Out-of-sync dirty pointer, %ld vs. %ld\n", in rtl8139_tx_interrupt()
1818 dirty_tx, tp->cur_tx); in rtl8139_tx_interrupt()
1824 if (tp->dirty_tx != dirty_tx) { in rtl8139_tx_interrupt()
1825 tp->dirty_tx = dirty_tx; in rtl8139_tx_interrupt()
1843 dev->stats.rx_errors++; in rtl8139_rx_err()
1851 dev->stats.rx_frame_errors++; in rtl8139_rx_err()
1853 dev->stats.rx_length_errors++; in rtl8139_rx_err()
1855 dev->stats.rx_crc_errors++; in rtl8139_rx_err()
1857 tp->xstats.rx_lost_in_ring++; in rtl8139_rx_err()
1864 RTL_W32 (RxConfig, tp->rx_config); in rtl8139_rx_err()
1865 tp->cur_rx = 0; in rtl8139_rx_err()
1872 while (--tmp_work > 0) { in rtl8139_rx_err()
1882 while (--tmp_work > 0) { in rtl8139_rx_err()
1897 tp->rx_config = rtl8139_rx_config | AcceptBroadcast | AcceptMyPhys; in rtl8139_rx_err()
1898 RTL_W32 (RxConfig, tp->rx_config); in rtl8139_rx_err()
1899 tp->cur_rx = 0; in rtl8139_rx_err()
1907 RTL_W32_F (RxBuf, tp->rx_ring_dma); in rtl8139_rx_err()
1918 u32 left = RX_BUF_LEN - offset; in wrap_copy()
1922 skb_copy_to_linear_data_offset(skb, left, ring, size - left); in wrap_copy()
1930 void __iomem *ioaddr = tp->mmio_addr; in rtl8139_isr_ack()
1938 tp->dev->stats.rx_errors++; in rtl8139_isr_ack()
1940 tp->dev->stats.rx_fifo_errors++; in rtl8139_isr_ack()
1949 void __iomem *ioaddr = tp->mmio_addr; in rtl8139_rx()
1951 unsigned char *rx_ring = tp->rx_ring; in rtl8139_rx()
1952 unsigned int cur_rx = tp->cur_rx; in rtl8139_rx()
1971 if (likely(!(dev->features & NETIF_F_RXFCS))) in rtl8139_rx()
1972 pkt_size = rx_size - 4; in rtl8139_rx()
1989 if (!tp->fifo_copy_timeout) in rtl8139_rx()
1990 tp->fifo_copy_timeout = jiffies + 2; in rtl8139_rx()
1991 else if (time_after(jiffies, tp->fifo_copy_timeout)) { in rtl8139_rx()
1997 tp->xstats.early_rx++; in rtl8139_rx()
2002 tp->fifo_copy_timeout = 0; in rtl8139_rx()
2012 if ((dev->features & NETIF_F_RXALL) && in rtl8139_rx()
2018 * errors without resetting the chip. --Ben in rtl8139_rx()
2020 dev->stats.rx_errors++; in rtl8139_rx()
2022 dev->stats.rx_crc_errors++; in rtl8139_rx()
2026 dev->stats.rx_length_errors++; in rtl8139_rx()
2031 received = -1; in rtl8139_rx()
2036 /* Malloc up new buffer, compatible with net-2e. */ in rtl8139_rx()
2039 skb = napi_alloc_skb(&tp->napi, pkt_size); in rtl8139_rx()
2048 skb->protocol = eth_type_trans (skb, dev); in rtl8139_rx()
2050 u64_stats_update_begin(&tp->rx_stats.syncp); in rtl8139_rx()
2051 tp->rx_stats.packets++; in rtl8139_rx()
2052 tp->rx_stats.bytes += pkt_size; in rtl8139_rx()
2053 u64_stats_update_end(&tp->rx_stats.syncp); in rtl8139_rx()
2057 dev->stats.rx_dropped++; in rtl8139_rx()
2062 RTL_W16 (RxBufPtr, (u16) (cur_rx - 16)); in rtl8139_rx()
2074 tp->cur_rx = cur_rx; in rtl8139_rx()
2080 if (tp->fifo_copy_timeout) in rtl8139_rx()
2100 dev->stats.rx_missed_errors += RTL_R32 (RxMissed); in rtl8139_weird_interrupt()
2104 (tp->drv_flags & HAS_LNK_CHNG)) { in rtl8139_weird_interrupt()
2110 dev->stats.rx_errors++; in rtl8139_weird_interrupt()
2113 dev->stats.rx_length_errors++; in rtl8139_weird_interrupt()
2115 dev->stats.rx_fifo_errors++; in rtl8139_weird_interrupt()
2118 pci_read_config_word (tp->pci_dev, PCI_STATUS, &pci_cmd_status); in rtl8139_weird_interrupt()
2119 pci_write_config_word (tp->pci_dev, PCI_STATUS, pci_cmd_status); in rtl8139_weird_interrupt()
2128 struct net_device *dev = tp->dev; in rtl8139_poll()
2129 void __iomem *ioaddr = tp->mmio_addr; in rtl8139_poll()
2132 spin_lock(&tp->rx_lock); in rtl8139_poll()
2140 spin_lock_irqsave(&tp->lock, flags); in rtl8139_poll()
2143 spin_unlock_irqrestore(&tp->lock, flags); in rtl8139_poll()
2145 spin_unlock(&tp->rx_lock); in rtl8139_poll()
2156 void __iomem *ioaddr = tp->mmio_addr; in rtl8139_interrupt()
2161 spin_lock (&tp->lock); in rtl8139_interrupt()
2192 if (napi_schedule_prep(&tp->napi)) { in rtl8139_interrupt()
2194 __napi_schedule(&tp->napi); in rtl8139_interrupt()
2209 spin_unlock (&tp->lock); in rtl8139_interrupt()
2218 * Polling receive - used by netconsole and other diagnostic tools
2224 const int irq = tp->pci_dev->irq; in rtl8139_poll_controller()
2235 void __iomem *ioaddr = tp->mmio_addr; in rtl8139_set_mac_address()
2238 if (!is_valid_ether_addr(addr->sa_data)) in rtl8139_set_mac_address()
2239 return -EADDRNOTAVAIL; in rtl8139_set_mac_address()
2241 memcpy(dev->dev_addr, addr->sa_data, dev->addr_len); in rtl8139_set_mac_address()
2243 spin_lock_irq(&tp->lock); in rtl8139_set_mac_address()
2246 RTL_W32_F(MAC0 + 0, cpu_to_le32 (*(u32 *) (dev->dev_addr + 0))); in rtl8139_set_mac_address()
2247 RTL_W32_F(MAC0 + 4, cpu_to_le32 (*(u32 *) (dev->dev_addr + 4))); in rtl8139_set_mac_address()
2250 spin_unlock_irq(&tp->lock); in rtl8139_set_mac_address()
2258 void __iomem *ioaddr = tp->mmio_addr; in rtl8139_close()
2262 napi_disable(&tp->napi); in rtl8139_close()
2267 spin_lock_irqsave (&tp->lock, flags); in rtl8139_close()
2276 dev->stats.rx_missed_errors += RTL_R32 (RxMissed); in rtl8139_close()
2279 spin_unlock_irqrestore (&tp->lock, flags); in rtl8139_close()
2281 free_irq(tp->pci_dev->irq, dev); in rtl8139_close()
2285 dma_free_coherent(&tp->pci_dev->dev, RX_BUF_TOT_LEN, in rtl8139_close()
2286 tp->rx_ring, tp->rx_ring_dma); in rtl8139_close()
2287 dma_free_coherent(&tp->pci_dev->dev, TX_BUF_TOT_LEN, in rtl8139_close()
2288 tp->tx_bufs, tp->tx_bufs_dma); in rtl8139_close()
2289 tp->rx_ring = NULL; in rtl8139_close()
2290 tp->tx_bufs = NULL; in rtl8139_close()
2292 /* Green! Put the chip in low-power mode. */ in rtl8139_close()
2295 if (rtl_chip_info[tp->chipset].flags & HasHltClk) in rtl8139_close()
2302 /* Get the ethtool Wake-on-LAN settings. Assumes that wol points to
2308 void __iomem *ioaddr = tp->mmio_addr; in rtl8139_get_wol()
2310 spin_lock_irq(&tp->lock); in rtl8139_get_wol()
2311 if (rtl_chip_info[tp->chipset].flags & HasLWake) { in rtl8139_get_wol()
2315 wol->supported = WAKE_PHY | WAKE_MAGIC in rtl8139_get_wol()
2318 wol->wolopts = 0; in rtl8139_get_wol()
2320 wol->wolopts |= WAKE_PHY; in rtl8139_get_wol()
2322 wol->wolopts |= WAKE_MAGIC; in rtl8139_get_wol()
2326 wol->wolopts |= WAKE_UCAST; in rtl8139_get_wol()
2328 wol->wolopts |= WAKE_MCAST; in rtl8139_get_wol()
2330 wol->wolopts |= WAKE_BCAST; in rtl8139_get_wol()
2332 spin_unlock_irq(&tp->lock); in rtl8139_get_wol()
2336 /* Set the ethtool Wake-on-LAN settings. Return 0 or -errno. Assumes
2342 void __iomem *ioaddr = tp->mmio_addr; in rtl8139_set_wol()
2346 support = ((rtl_chip_info[tp->chipset].flags & HasLWake) in rtl8139_set_wol()
2350 if (wol->wolopts & ~support) in rtl8139_set_wol()
2351 return -EINVAL; in rtl8139_set_wol()
2353 spin_lock_irq(&tp->lock); in rtl8139_set_wol()
2355 if (wol->wolopts & WAKE_PHY) in rtl8139_set_wol()
2357 if (wol->wolopts & WAKE_MAGIC) in rtl8139_set_wol()
2367 if (wol->wolopts & WAKE_UCAST) in rtl8139_set_wol()
2369 if (wol->wolopts & WAKE_MCAST) in rtl8139_set_wol()
2371 if (wol->wolopts & WAKE_BCAST) in rtl8139_set_wol()
2374 spin_unlock_irq(&tp->lock); in rtl8139_set_wol()
2382 strlcpy(info->driver, DRV_NAME, sizeof(info->driver)); in rtl8139_get_drvinfo()
2383 strlcpy(info->version, DRV_VERSION, sizeof(info->version)); in rtl8139_get_drvinfo()
2384 strlcpy(info->bus_info, pci_name(tp->pci_dev), sizeof(info->bus_info)); in rtl8139_get_drvinfo()
2391 spin_lock_irq(&tp->lock); in rtl8139_get_link_ksettings()
2392 mii_ethtool_get_link_ksettings(&tp->mii, cmd); in rtl8139_get_link_ksettings()
2393 spin_unlock_irq(&tp->lock); in rtl8139_get_link_ksettings()
2402 spin_lock_irq(&tp->lock); in rtl8139_set_link_ksettings()
2403 rc = mii_ethtool_set_link_ksettings(&tp->mii, cmd); in rtl8139_set_link_ksettings()
2404 spin_unlock_irq(&tp->lock); in rtl8139_set_link_ksettings()
2411 return mii_nway_restart(&tp->mii); in rtl8139_nway_reset()
2417 return mii_link_ok(&tp->mii); in rtl8139_get_link()
2423 return tp->msg_enable; in rtl8139_get_msglevel()
2429 tp->msg_enable = datum; in rtl8139_set_msglevel()
2435 /* TODO: we are too slack to do reg dumping for pio, for now */ in rtl8139_get_regs_len()
2439 return tp->regs_len; in rtl8139_get_regs_len()
2446 /* TODO: we are too slack to do reg dumping for pio, for now */ in rtl8139_get_regs()
2451 regs->version = RTL_REGS_VER; in rtl8139_get_regs()
2453 spin_lock_irq(&tp->lock); in rtl8139_get_regs()
2454 memcpy_fromio(regbuf, tp->mmio_addr, regs->len); in rtl8139_get_regs()
2455 spin_unlock_irq(&tp->lock); in rtl8139_get_regs()
2464 return -EOPNOTSUPP; in rtl8139_get_sset_count()
2472 data[0] = tp->xstats.early_rx; in rtl8139_get_ethtool_stats()
2473 data[1] = tp->xstats.tx_buf_mapped; in rtl8139_get_ethtool_stats()
2474 data[2] = tp->xstats.tx_timeouts; in rtl8139_get_ethtool_stats()
2475 data[3] = tp->xstats.rx_lost_in_ring; in rtl8139_get_ethtool_stats()
2506 return -EINVAL; in netdev_ioctl()
2508 spin_lock_irq(&tp->lock); in netdev_ioctl()
2509 rc = generic_mii_ioctl(&tp->mii, if_mii(rq), cmd, NULL); in netdev_ioctl()
2510 spin_unlock_irq(&tp->lock); in netdev_ioctl()
2520 void __iomem *ioaddr = tp->mmio_addr; in rtl8139_get_stats64()
2525 spin_lock_irqsave (&tp->lock, flags); in rtl8139_get_stats64()
2526 dev->stats.rx_missed_errors += RTL_R32 (RxMissed); in rtl8139_get_stats64()
2528 spin_unlock_irqrestore (&tp->lock, flags); in rtl8139_get_stats64()
2531 netdev_stats_to_stats64(stats, &dev->stats); in rtl8139_get_stats64()
2534 start = u64_stats_fetch_begin_irq(&tp->rx_stats.syncp); in rtl8139_get_stats64()
2535 stats->rx_packets = tp->rx_stats.packets; in rtl8139_get_stats64()
2536 stats->rx_bytes = tp->rx_stats.bytes; in rtl8139_get_stats64()
2537 } while (u64_stats_fetch_retry_irq(&tp->rx_stats.syncp, start)); in rtl8139_get_stats64()
2540 start = u64_stats_fetch_begin_irq(&tp->tx_stats.syncp); in rtl8139_get_stats64()
2541 stats->tx_packets = tp->tx_stats.packets; in rtl8139_get_stats64()
2542 stats->tx_bytes = tp->tx_stats.bytes; in rtl8139_get_stats64()
2543 } while (u64_stats_fetch_retry_irq(&tp->tx_stats.syncp, start)); in rtl8139_get_stats64()
2552 void __iomem *ioaddr = tp->mmio_addr; in __set_rx_mode()
2557 netdev_dbg(dev, "rtl8139_set_rx_mode(%04x) done -- Rx config %08x\n", in __set_rx_mode()
2558 dev->flags, RTL_R32(RxConfig)); in __set_rx_mode()
2561 if (dev->flags & IFF_PROMISC) { in __set_rx_mode()
2567 (dev->flags & IFF_ALLMULTI)) { in __set_rx_mode()
2568 /* Too many to filter perfectly -- accept all multicasts. */ in __set_rx_mode()
2576 int bit_nr = ether_crc(ETH_ALEN, ha->addr) >> 26; in __set_rx_mode()
2583 if (dev->features & NETIF_F_RXALL) in __set_rx_mode()
2588 if (tp->rx_config != tmp) { in __set_rx_mode()
2590 tp->rx_config = tmp; in __set_rx_mode()
2601 spin_lock_irqsave (&tp->lock, flags); in rtl8139_set_rx_mode()
2603 spin_unlock_irqrestore (&tp->lock, flags); in rtl8139_set_rx_mode()
2610 void __iomem *ioaddr = tp->mmio_addr; in rtl8139_suspend()
2618 spin_lock_irqsave (&tp->lock, flags); in rtl8139_suspend()
2625 dev->stats.rx_missed_errors += RTL_R32 (RxMissed); in rtl8139_suspend()
2628 spin_unlock_irqrestore (&tp->lock, flags); in rtl8139_suspend()