Lines Matching +full:eee +full:- +full:broken +full:- +full:1000 +full:t
1 // SPDX-License-Identifier: GPL-2.0+
122 #define LAN78XX_TSO_SIZE(dev) ((dev)->tx_urb_size - TX_SKB_MIN_LEN)
133 #define DEFAULT_AUTOSUSPEND_DELAY (10 * 1000)
136 #define STAT_UPDATE_TIMER (1 * 1000)
192 "RX 65 - 127 Byte Frames",
193 "RX 128 - 255 Byte Frames",
194 "RX 256 - 511 Bytes Frames",
195 "RX 512 - 1023 Byte Frames",
196 "RX 1024 - 1518 Byte Frames",
198 "EEE RX LPI Transitions",
199 "EEE RX LPI Time",
216 "TX 65 - 127 Byte Frames",
217 "TX 128 - 255 Byte Frames",
218 "TX 256 - 511 Bytes Frames",
219 "TX 512 - 1023 Byte Frames",
220 "TX 1024 - 1518 Byte Frames",
222 "EEE TX LPI Transitions",
223 "EEE TX LPI Time",
375 struct skb_data { /* skb->cb is one of these */
476 static int msg_level = -1;
491 buf->data = buf->head; in lan78xx_release_buf()
494 buf->len = 0; in lan78xx_release_buf()
495 buf->data_len = 0; in lan78xx_release_buf()
508 entry = (struct skb_data *)buf->cb; in lan78xx_free_buf_pool()
509 usb_free_urb(entry->urb); in lan78xx_free_buf_pool()
542 entry = (struct skb_data *)buf->cb; in lan78xx_alloc_buf_pool()
543 entry->urb = urb; in lan78xx_alloc_buf_pool()
544 entry->dev = dev; in lan78xx_alloc_buf_pool()
545 entry->length = 0; in lan78xx_alloc_buf_pool()
546 entry->num_of_packet = 0; in lan78xx_alloc_buf_pool()
556 return -ENOMEM; in lan78xx_alloc_buf_pool()
561 return lan78xx_get_buf(&dev->rxq_free); in lan78xx_get_rx_buf()
567 lan78xx_release_buf(&dev->rxq_free, rx_buf); in lan78xx_release_rx_buf()
572 lan78xx_free_buf_pool(&dev->rxq_free); in lan78xx_free_rx_resources()
577 return lan78xx_alloc_buf_pool(&dev->rxq_free, in lan78xx_alloc_rx_resources()
578 dev->n_rx_urbs, dev->rx_urb_size, dev); in lan78xx_alloc_rx_resources()
583 return lan78xx_get_buf(&dev->txq_free); in lan78xx_get_tx_buf()
589 lan78xx_release_buf(&dev->txq_free, tx_buf); in lan78xx_release_tx_buf()
594 lan78xx_free_buf_pool(&dev->txq_free); in lan78xx_free_tx_resources()
599 return lan78xx_alloc_buf_pool(&dev->txq_free, in lan78xx_alloc_tx_resources()
600 dev->n_tx_urbs, dev->tx_urb_size, dev); in lan78xx_alloc_tx_resources()
608 if (test_bit(EVENT_DEV_DISCONNECT, &dev->flags)) in lan78xx_read_reg()
609 return -ENODEV; in lan78xx_read_reg()
613 return -ENOMEM; in lan78xx_read_reg()
615 ret = usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0), in lan78xx_read_reg()
623 netdev_warn(dev->net, in lan78xx_read_reg()
638 if (test_bit(EVENT_DEV_DISCONNECT, &dev->flags)) in lan78xx_write_reg()
639 return -ENODEV; in lan78xx_write_reg()
643 return -ENOMEM; in lan78xx_write_reg()
648 ret = usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, 0), in lan78xx_write_reg()
654 netdev_warn(dev->net, in lan78xx_write_reg()
691 return -ENOMEM; in lan78xx_read_stats()
693 ret = usb_control_msg(dev->udev, in lan78xx_read_stats()
694 usb_rcvctrlpipe(dev->udev, 0), in lan78xx_read_stats()
710 netdev_warn(dev->net, in lan78xx_read_stats()
721 if ((struct1)->member < (dev_stats).saved.member) \
728 check_counter_rollover(stats, dev->stats, rx_fcs_errors); in lan78xx_check_stat_rollover()
729 check_counter_rollover(stats, dev->stats, rx_alignment_errors); in lan78xx_check_stat_rollover()
730 check_counter_rollover(stats, dev->stats, rx_fragment_errors); in lan78xx_check_stat_rollover()
731 check_counter_rollover(stats, dev->stats, rx_jabber_errors); in lan78xx_check_stat_rollover()
732 check_counter_rollover(stats, dev->stats, rx_undersize_frame_errors); in lan78xx_check_stat_rollover()
733 check_counter_rollover(stats, dev->stats, rx_oversize_frame_errors); in lan78xx_check_stat_rollover()
734 check_counter_rollover(stats, dev->stats, rx_dropped_frames); in lan78xx_check_stat_rollover()
735 check_counter_rollover(stats, dev->stats, rx_unicast_byte_count); in lan78xx_check_stat_rollover()
736 check_counter_rollover(stats, dev->stats, rx_broadcast_byte_count); in lan78xx_check_stat_rollover()
737 check_counter_rollover(stats, dev->stats, rx_multicast_byte_count); in lan78xx_check_stat_rollover()
738 check_counter_rollover(stats, dev->stats, rx_unicast_frames); in lan78xx_check_stat_rollover()
739 check_counter_rollover(stats, dev->stats, rx_broadcast_frames); in lan78xx_check_stat_rollover()
740 check_counter_rollover(stats, dev->stats, rx_multicast_frames); in lan78xx_check_stat_rollover()
741 check_counter_rollover(stats, dev->stats, rx_pause_frames); in lan78xx_check_stat_rollover()
742 check_counter_rollover(stats, dev->stats, rx_64_byte_frames); in lan78xx_check_stat_rollover()
743 check_counter_rollover(stats, dev->stats, rx_65_127_byte_frames); in lan78xx_check_stat_rollover()
744 check_counter_rollover(stats, dev->stats, rx_128_255_byte_frames); in lan78xx_check_stat_rollover()
745 check_counter_rollover(stats, dev->stats, rx_256_511_bytes_frames); in lan78xx_check_stat_rollover()
746 check_counter_rollover(stats, dev->stats, rx_512_1023_byte_frames); in lan78xx_check_stat_rollover()
747 check_counter_rollover(stats, dev->stats, rx_1024_1518_byte_frames); in lan78xx_check_stat_rollover()
748 check_counter_rollover(stats, dev->stats, rx_greater_1518_byte_frames); in lan78xx_check_stat_rollover()
749 check_counter_rollover(stats, dev->stats, eee_rx_lpi_transitions); in lan78xx_check_stat_rollover()
750 check_counter_rollover(stats, dev->stats, eee_rx_lpi_time); in lan78xx_check_stat_rollover()
751 check_counter_rollover(stats, dev->stats, tx_fcs_errors); in lan78xx_check_stat_rollover()
752 check_counter_rollover(stats, dev->stats, tx_excess_deferral_errors); in lan78xx_check_stat_rollover()
753 check_counter_rollover(stats, dev->stats, tx_carrier_errors); in lan78xx_check_stat_rollover()
754 check_counter_rollover(stats, dev->stats, tx_bad_byte_count); in lan78xx_check_stat_rollover()
755 check_counter_rollover(stats, dev->stats, tx_single_collisions); in lan78xx_check_stat_rollover()
756 check_counter_rollover(stats, dev->stats, tx_multiple_collisions); in lan78xx_check_stat_rollover()
757 check_counter_rollover(stats, dev->stats, tx_excessive_collision); in lan78xx_check_stat_rollover()
758 check_counter_rollover(stats, dev->stats, tx_late_collisions); in lan78xx_check_stat_rollover()
759 check_counter_rollover(stats, dev->stats, tx_unicast_byte_count); in lan78xx_check_stat_rollover()
760 check_counter_rollover(stats, dev->stats, tx_broadcast_byte_count); in lan78xx_check_stat_rollover()
761 check_counter_rollover(stats, dev->stats, tx_multicast_byte_count); in lan78xx_check_stat_rollover()
762 check_counter_rollover(stats, dev->stats, tx_unicast_frames); in lan78xx_check_stat_rollover()
763 check_counter_rollover(stats, dev->stats, tx_broadcast_frames); in lan78xx_check_stat_rollover()
764 check_counter_rollover(stats, dev->stats, tx_multicast_frames); in lan78xx_check_stat_rollover()
765 check_counter_rollover(stats, dev->stats, tx_pause_frames); in lan78xx_check_stat_rollover()
766 check_counter_rollover(stats, dev->stats, tx_64_byte_frames); in lan78xx_check_stat_rollover()
767 check_counter_rollover(stats, dev->stats, tx_65_127_byte_frames); in lan78xx_check_stat_rollover()
768 check_counter_rollover(stats, dev->stats, tx_128_255_byte_frames); in lan78xx_check_stat_rollover()
769 check_counter_rollover(stats, dev->stats, tx_256_511_bytes_frames); in lan78xx_check_stat_rollover()
770 check_counter_rollover(stats, dev->stats, tx_512_1023_byte_frames); in lan78xx_check_stat_rollover()
771 check_counter_rollover(stats, dev->stats, tx_1024_1518_byte_frames); in lan78xx_check_stat_rollover()
772 check_counter_rollover(stats, dev->stats, tx_greater_1518_byte_frames); in lan78xx_check_stat_rollover()
773 check_counter_rollover(stats, dev->stats, eee_tx_lpi_transitions); in lan78xx_check_stat_rollover()
774 check_counter_rollover(stats, dev->stats, eee_tx_lpi_time); in lan78xx_check_stat_rollover()
776 memcpy(&dev->stats.saved, stats, sizeof(struct lan78xx_statstage)); in lan78xx_check_stat_rollover()
786 if (usb_autopm_get_interface(dev->intf) < 0) in lan78xx_update_stats()
790 count = (u32 *)&dev->stats.rollover_count; in lan78xx_update_stats()
791 max = (u32 *)&dev->stats.rollover_max; in lan78xx_update_stats()
792 data = (u64 *)&dev->stats.curr_stat; in lan78xx_update_stats()
794 mutex_lock(&dev->stats.access_lock); in lan78xx_update_stats()
802 mutex_unlock(&dev->stats.access_lock); in lan78xx_update_stats()
804 usb_autopm_put_interface(dev->intf); in lan78xx_update_stats()
847 return stopped ? 0 : -ETIMEDOUT; in lan78xx_stop_hw()
859 netif_dbg(dev, drv, dev->net, "start tx path"); in lan78xx_start_tx_path()
880 netif_dbg(dev, drv, dev->net, "stop tx path"); in lan78xx_stop_tx_path()
909 netif_dbg(dev, drv, dev->net, "start rx path"); in lan78xx_start_rx_path()
930 netif_dbg(dev, drv, dev->net, "stop rx path"); in lan78xx_stop_rx_path()
971 return -ETIMEDOUT; in lan78xx_mdiobus_wait_not_busy()
1007 netdev_warn(dev->net, "EEPROM read operation timeout"); in lan78xx_wait_eeprom()
1008 return -ETIMEDOUT; in lan78xx_wait_eeprom()
1031 netdev_warn(dev->net, "EEPROM is busy"); in lan78xx_eeprom_confirm_not_busy()
1032 return -ETIMEDOUT; in lan78xx_eeprom_confirm_not_busy()
1049 if (dev->chipid == ID_REV_CHIP_ID_7800_) { in lan78xx_read_raw_eeprom()
1057 if (ret == -ETIMEDOUT) in lan78xx_read_raw_eeprom()
1072 if (ret == -ETIMEDOUT) in lan78xx_read_raw_eeprom()
1087 if (dev->chipid == ID_REV_CHIP_ID_7800_) in lan78xx_read_raw_eeprom()
1104 return -ENODATA; in lan78xx_read_eeprom()
1124 if (dev->chipid == ID_REV_CHIP_ID_7800_) { in lan78xx_write_raw_eeprom()
1133 if (ret == -ETIMEDOUT) in lan78xx_write_raw_eeprom()
1147 if (ret == -ETIMEDOUT) in lan78xx_write_raw_eeprom()
1169 if (ret == -ETIMEDOUT) in lan78xx_write_raw_eeprom()
1179 if (dev->chipid == ID_REV_CHIP_ID_7800_) in lan78xx_write_raw_eeprom()
1210 netdev_warn(dev->net, in lan78xx_read_raw_otp()
1212 return -ETIMEDOUT; in lan78xx_read_raw_otp()
1244 netdev_warn(dev->net, in lan78xx_read_raw_otp()
1246 return -ETIMEDOUT; in lan78xx_read_raw_otp()
1286 netdev_warn(dev->net, in lan78xx_write_raw_otp()
1288 return -ETIMEDOUT; in lan78xx_write_raw_otp()
1329 netdev_warn(dev->net, in lan78xx_write_raw_otp()
1331 return -ETIMEDOUT; in lan78xx_write_raw_otp()
1351 ret = -EINVAL; in lan78xx_read_otp()
1376 netdev_warn(dev->net, "%s timed out", __func__); in lan78xx_dataport_wait_not_busy()
1378 return -ETIMEDOUT; in lan78xx_dataport_wait_not_busy()
1384 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_dataport_write()
1387 ret = usb_autopm_get_interface(dev->intf); in lan78xx_dataport_write()
1391 mutex_lock(&pdata->dataport_mutex); in lan78xx_dataport_write()
1421 netdev_warn(dev->net, "dataport write failed %pe", ERR_PTR(ret)); in lan78xx_dataport_write()
1423 mutex_unlock(&pdata->dataport_mutex); in lan78xx_dataport_write()
1424 usb_autopm_put_interface(dev->intf); in lan78xx_dataport_write()
1439 pdata->pfilter_table[index][1] = temp; in lan78xx_set_addr_filter()
1443 pdata->pfilter_table[index][0] = temp; in lan78xx_set_addr_filter()
1457 struct lan78xx_net *dev = pdata->dev; in lan78xx_deferred_multicast_write()
1460 netif_dbg(dev, drv, dev->net, "deferred multicast write 0x%08x\n", in lan78xx_deferred_multicast_write()
1461 pdata->rfe_ctl); in lan78xx_deferred_multicast_write()
1465 DP_SEL_VHF_HASH_LEN, pdata->mchash_table); in lan78xx_deferred_multicast_write()
1475 pdata->pfilter_table[i][1]); in lan78xx_deferred_multicast_write()
1480 pdata->pfilter_table[i][0]); in lan78xx_deferred_multicast_write()
1485 ret = lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); in lan78xx_deferred_multicast_write()
1489 netdev_warn(dev->net, "multicast write failed %pe", ERR_PTR(ret)); in lan78xx_deferred_multicast_write()
1496 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_set_multicast()
1500 spin_lock_irqsave(&pdata->rfe_ctl_lock, flags); in lan78xx_set_multicast()
1502 pdata->rfe_ctl &= ~(RFE_CTL_UCAST_EN_ | RFE_CTL_MCAST_EN_ | in lan78xx_set_multicast()
1506 pdata->mchash_table[i] = 0; in lan78xx_set_multicast()
1510 pdata->pfilter_table[i][0] = 0; in lan78xx_set_multicast()
1511 pdata->pfilter_table[i][1] = 0; in lan78xx_set_multicast()
1514 pdata->rfe_ctl |= RFE_CTL_BCAST_EN_; in lan78xx_set_multicast()
1516 if (dev->net->flags & IFF_PROMISC) { in lan78xx_set_multicast()
1517 netif_dbg(dev, drv, dev->net, "promiscuous mode enabled"); in lan78xx_set_multicast()
1518 pdata->rfe_ctl |= RFE_CTL_MCAST_EN_ | RFE_CTL_UCAST_EN_; in lan78xx_set_multicast()
1520 if (dev->net->flags & IFF_ALLMULTI) { in lan78xx_set_multicast()
1521 netif_dbg(dev, drv, dev->net, in lan78xx_set_multicast()
1523 pdata->rfe_ctl |= RFE_CTL_MCAST_EN_; in lan78xx_set_multicast()
1527 if (netdev_mc_count(dev->net)) { in lan78xx_set_multicast()
1531 netif_dbg(dev, drv, dev->net, "receive multicast hash filter"); in lan78xx_set_multicast()
1533 pdata->rfe_ctl |= RFE_CTL_DA_PERFECT_; in lan78xx_set_multicast()
1539 lan78xx_set_addr_filter(pdata, i, ha->addr); in lan78xx_set_multicast()
1541 u32 bitnum = lan78xx_hash(ha->addr); in lan78xx_set_multicast()
1543 pdata->mchash_table[bitnum / 32] |= in lan78xx_set_multicast()
1545 pdata->rfe_ctl |= RFE_CTL_MCAST_HASH_; in lan78xx_set_multicast()
1551 spin_unlock_irqrestore(&pdata->rfe_ctl_lock, flags); in lan78xx_set_multicast()
1554 schedule_work(&pdata->set_multicast); in lan78xx_set_multicast()
1565 if (dev->fc_autoneg) in lan78xx_update_flowcontrol()
1568 cap = dev->fc_request_control; in lan78xx_update_flowcontrol()
1570 netif_dbg(dev, link, dev->net, "rx pause %s, tx pause %s", in lan78xx_update_flowcontrol()
1587 mutex_lock(&dev->mdiobus_mutex); in lan78xx_mac_reset()
1620 ret = -ETIMEDOUT; in lan78xx_mac_reset()
1622 mutex_unlock(&dev->mdiobus_mutex); in lan78xx_mac_reset()
1628 * lan78xx_phy_int_ack - Acknowledge PHY interrupt
1645 struct phy_device *phydev = dev->net->phydev; in lan78xx_link_reset()
1654 mutex_lock(&phydev->lock); in lan78xx_link_reset()
1656 link = phydev->link; in lan78xx_link_reset()
1657 mutex_unlock(&phydev->lock); in lan78xx_link_reset()
1659 if (!link && dev->link_on) { in lan78xx_link_reset()
1660 dev->link_on = false; in lan78xx_link_reset()
1667 timer_delete(&dev->stat_monitor); in lan78xx_link_reset()
1668 } else if (link && !dev->link_on) { in lan78xx_link_reset()
1669 dev->link_on = true; in lan78xx_link_reset()
1685 netif_dbg(dev, link, dev->net, in lan78xx_link_reset()
1694 if (!timer_pending(&dev->stat_monitor)) { in lan78xx_link_reset()
1695 dev->delta = 1; in lan78xx_link_reset()
1696 mod_timer(&dev->stat_monitor, in lan78xx_link_reset()
1703 napi_schedule(&dev->napi); in lan78xx_link_reset()
1710 /* some work can't be done in tasklets, so we use keventd
1713 * but tasklet_schedule() doesn't. hope the failure is rare.
1717 set_bit(work, &dev->flags); in lan78xx_defer_kevent()
1718 if (!schedule_delayed_work(&dev->wq, 0)) in lan78xx_defer_kevent()
1719 netdev_err(dev->net, "kevent %d may have been dropped\n", work); in lan78xx_defer_kevent()
1726 if (urb->actual_length != 4) { in lan78xx_status()
1727 netdev_warn(dev->net, in lan78xx_status()
1728 "unexpected urb length %d", urb->actual_length); in lan78xx_status()
1732 intdata = get_unaligned_le32(urb->transfer_buffer); in lan78xx_status()
1735 netif_dbg(dev, link, dev->net, "PHY INTR: 0x%08x\n", intdata); in lan78xx_status()
1738 if (dev->domain_data.phyirq > 0) in lan78xx_status()
1739 generic_handle_irq_safe(dev->domain_data.phyirq); in lan78xx_status()
1741 netdev_warn(dev->net, in lan78xx_status()
1757 ret = usb_autopm_get_interface(dev->intf); in lan78xx_ethtool_get_eeprom()
1761 ee->magic = LAN78XX_EEPROM_MAGIC; in lan78xx_ethtool_get_eeprom()
1763 ret = lan78xx_read_raw_eeprom(dev, ee->offset, ee->len, data); in lan78xx_ethtool_get_eeprom()
1765 usb_autopm_put_interface(dev->intf); in lan78xx_ethtool_get_eeprom()
1776 ret = usb_autopm_get_interface(dev->intf); in lan78xx_ethtool_set_eeprom()
1783 if (ee->magic == LAN78XX_EEPROM_MAGIC) in lan78xx_ethtool_set_eeprom()
1784 ret = lan78xx_write_raw_eeprom(dev, ee->offset, ee->len, data); in lan78xx_ethtool_set_eeprom()
1785 else if ((ee->magic == LAN78XX_OTP_MAGIC) && in lan78xx_ethtool_set_eeprom()
1786 (ee->offset == 0) && in lan78xx_ethtool_set_eeprom()
1787 (ee->len == 512) && in lan78xx_ethtool_set_eeprom()
1789 ret = lan78xx_write_raw_otp(dev, ee->offset, ee->len, data); in lan78xx_ethtool_set_eeprom()
1791 usb_autopm_put_interface(dev->intf); in lan78xx_ethtool_set_eeprom()
1808 return -EOPNOTSUPP; in lan78xx_get_sset_count()
1818 mutex_lock(&dev->stats.access_lock); in lan78xx_get_stats()
1819 memcpy(data, &dev->stats.curr_stat, sizeof(dev->stats.curr_stat)); in lan78xx_get_stats()
1820 mutex_unlock(&dev->stats.access_lock); in lan78xx_get_stats()
1829 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_get_wol()
1831 if (usb_autopm_get_interface(dev->intf) < 0) in lan78xx_get_wol()
1836 netdev_warn(dev->net, "failed to get WoL %pe", ERR_PTR(ret)); in lan78xx_get_wol()
1837 wol->supported = 0; in lan78xx_get_wol()
1838 wol->wolopts = 0; in lan78xx_get_wol()
1841 wol->supported = WAKE_ALL; in lan78xx_get_wol()
1842 wol->wolopts = pdata->wol; in lan78xx_get_wol()
1844 wol->supported = 0; in lan78xx_get_wol()
1845 wol->wolopts = 0; in lan78xx_get_wol()
1849 usb_autopm_put_interface(dev->intf); in lan78xx_get_wol()
1856 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_set_wol()
1859 if (wol->wolopts & ~WAKE_ALL) in lan78xx_set_wol()
1860 return -EINVAL; in lan78xx_set_wol()
1862 ret = usb_autopm_get_interface(dev->intf); in lan78xx_set_wol()
1866 pdata->wol = wol->wolopts; in lan78xx_set_wol()
1868 ret = device_set_wakeup_enable(&dev->udev->dev, (bool)wol->wolopts); in lan78xx_set_wol()
1872 ret = phy_ethtool_set_wol(netdev->phydev, wol); in lan78xx_set_wol()
1875 usb_autopm_put_interface(dev->intf); in lan78xx_set_wol()
1883 struct phy_device *phydev = net->phydev; in lan78xx_get_eee()
1887 ret = usb_autopm_get_interface(dev->intf); in lan78xx_get_eee()
1899 edata->tx_lpi_timer = buf; in lan78xx_get_eee()
1901 edata->tx_lpi_timer = 0; in lan78xx_get_eee()
1906 usb_autopm_put_interface(dev->intf); in lan78xx_get_eee()
1917 ret = usb_autopm_get_interface(dev->intf); in lan78xx_set_eee()
1921 ret = phy_ethtool_set_eee(net->phydev, edata); in lan78xx_set_eee()
1925 buf = (u32)edata->tx_lpi_timer; in lan78xx_set_eee()
1928 usb_autopm_put_interface(dev->intf); in lan78xx_set_eee()
1937 mutex_lock(&net->phydev->lock); in lan78xx_get_link()
1938 phy_read_status(net->phydev); in lan78xx_get_link()
1939 link = net->phydev->link; in lan78xx_get_link()
1940 mutex_unlock(&net->phydev->lock); in lan78xx_get_link()
1950 strscpy(info->driver, DRIVER_NAME, sizeof(info->driver)); in lan78xx_get_drvinfo()
1951 usb_make_path(dev->udev, info->bus_info, sizeof(info->bus_info)); in lan78xx_get_drvinfo()
1958 return dev->msg_enable; in lan78xx_get_msglevel()
1965 dev->msg_enable = level; in lan78xx_set_msglevel()
1972 struct phy_device *phydev = net->phydev; in lan78xx_get_link_ksettings()
1975 ret = usb_autopm_get_interface(dev->intf); in lan78xx_get_link_ksettings()
1981 usb_autopm_put_interface(dev->intf); in lan78xx_get_link_ksettings()
1990 struct phy_device *phydev = net->phydev; in lan78xx_set_link_ksettings()
1994 ret = usb_autopm_get_interface(dev->intf); in lan78xx_set_link_ksettings()
2001 if (!cmd->base.autoneg) { in lan78xx_set_link_ksettings()
2009 usb_autopm_put_interface(dev->intf); in lan78xx_set_link_ksettings()
2018 struct phy_device *phydev = net->phydev; in lan78xx_get_pause()
2023 pause->autoneg = dev->fc_autoneg; in lan78xx_get_pause()
2025 if (dev->fc_request_control & FLOW_CTRL_TX) in lan78xx_get_pause()
2026 pause->tx_pause = 1; in lan78xx_get_pause()
2028 if (dev->fc_request_control & FLOW_CTRL_RX) in lan78xx_get_pause()
2029 pause->rx_pause = 1; in lan78xx_get_pause()
2036 struct phy_device *phydev = net->phydev; in lan78xx_set_pause()
2042 if (pause->autoneg && !ecmd.base.autoneg) { in lan78xx_set_pause()
2043 ret = -EINVAL; in lan78xx_set_pause()
2047 dev->fc_request_control = 0; in lan78xx_set_pause()
2048 if (pause->rx_pause) in lan78xx_set_pause()
2049 dev->fc_request_control |= FLOW_CTRL_RX; in lan78xx_set_pause()
2051 if (pause->tx_pause) in lan78xx_set_pause()
2052 dev->fc_request_control |= FLOW_CTRL_TX; in lan78xx_set_pause()
2062 mii_adv = (u32)mii_advertise_flowctrl(dev->fc_request_control); in lan78xx_set_pause()
2070 dev->fc_autoneg = pause->autoneg; in lan78xx_set_pause()
2095 netdev_warn(dev->net, in lan78xx_get_regs()
2157 if (!eth_platform_get_mac_address(&dev->udev->dev, addr)) { in lan78xx_init_mac_address()
2159 netif_dbg(dev, ifup, dev->net, in lan78xx_init_mac_address()
2167 netif_dbg(dev, ifup, dev->net, in lan78xx_init_mac_address()
2172 netif_dbg(dev, ifup, dev->net, in lan78xx_init_mac_address()
2197 eth_hw_addr_set(dev->net, addr); in lan78xx_init_mac_address()
2205 struct lan78xx_net *dev = bus->priv; in lan78xx_mdiobus_read()
2209 ret = usb_autopm_get_interface(dev->intf); in lan78xx_mdiobus_read()
2213 mutex_lock(&dev->mdiobus_mutex); in lan78xx_mdiobus_read()
2237 mutex_unlock(&dev->mdiobus_mutex); in lan78xx_mdiobus_read()
2238 usb_autopm_put_interface(dev->intf); in lan78xx_mdiobus_read()
2246 struct lan78xx_net *dev = bus->priv; in lan78xx_mdiobus_write()
2250 ret = usb_autopm_get_interface(dev->intf); in lan78xx_mdiobus_write()
2254 mutex_lock(&dev->mdiobus_mutex); in lan78xx_mdiobus_write()
2277 mutex_unlock(&dev->mdiobus_mutex); in lan78xx_mdiobus_write()
2278 usb_autopm_put_interface(dev->intf); in lan78xx_mdiobus_write()
2287 dev->mdiobus = mdiobus_alloc(); in lan78xx_mdio_init()
2288 if (!dev->mdiobus) { in lan78xx_mdio_init()
2289 netdev_err(dev->net, "can't allocate MDIO bus\n"); in lan78xx_mdio_init()
2290 return -ENOMEM; in lan78xx_mdio_init()
2293 dev->mdiobus->priv = (void *)dev; in lan78xx_mdio_init()
2294 dev->mdiobus->read = lan78xx_mdiobus_read; in lan78xx_mdio_init()
2295 dev->mdiobus->write = lan78xx_mdiobus_write; in lan78xx_mdio_init()
2296 dev->mdiobus->name = "lan78xx-mdiobus"; in lan78xx_mdio_init()
2297 dev->mdiobus->parent = &dev->udev->dev; in lan78xx_mdio_init()
2299 snprintf(dev->mdiobus->id, MII_BUS_ID_SIZE, "usb-%03d:%03d", in lan78xx_mdio_init()
2300 dev->udev->bus->busnum, dev->udev->devnum); in lan78xx_mdio_init()
2302 switch (dev->chipid) { in lan78xx_mdio_init()
2306 dev->mdiobus->phy_mask = ~(1 << 1); in lan78xx_mdio_init()
2310 dev->mdiobus->phy_mask = ~(0xFF); in lan78xx_mdio_init()
2314 node = of_get_child_by_name(dev->udev->dev.of_node, "mdio"); in lan78xx_mdio_init()
2315 ret = of_mdiobus_register(dev->mdiobus, node); in lan78xx_mdio_init()
2318 netdev_err(dev->net, "can't register MDIO bus\n"); in lan78xx_mdio_init()
2322 netdev_dbg(dev->net, "registered mdiobus bus %s\n", dev->mdiobus->id); in lan78xx_mdio_init()
2325 mdiobus_free(dev->mdiobus); in lan78xx_mdio_init()
2331 mdiobus_unregister(dev->mdiobus); in lan78xx_remove_mdio()
2332 mdiobus_free(dev->mdiobus); in lan78xx_remove_mdio()
2338 struct phy_device *phydev = net->phydev; in lan78xx_link_status_change()
2346 if (phydev->enable_tx_lpi) in lan78xx_link_status_change()
2358 struct irq_domain_data *data = d->host_data; in irq_map()
2361 irq_set_chip_and_handler(irq, data->irqchip, data->irq_handler); in irq_map()
2382 data->irqenable &= ~BIT(irqd_to_hwirq(irqd)); in lan78xx_irq_mask()
2389 data->irqenable |= BIT(irqd_to_hwirq(irqd)); in lan78xx_irq_unmask()
2396 mutex_lock(&data->irq_lock); in lan78xx_irq_bus_lock()
2408 * are only two callbacks executed in non-atomic contex. in lan78xx_irq_bus_sync_unlock()
2414 if (buf != data->irqenable) in lan78xx_irq_bus_sync_unlock()
2415 ret = lan78xx_write_reg(dev, INT_EP_CTL, data->irqenable); in lan78xx_irq_bus_sync_unlock()
2419 netdev_err(dev->net, "Failed to sync IRQ enable register: %pe\n", in lan78xx_irq_bus_sync_unlock()
2422 mutex_unlock(&data->irq_lock); in lan78xx_irq_bus_sync_unlock()
2426 .name = "lan78xx-irqs",
2440 mutex_init(&dev->domain_data.irq_lock); in lan78xx_setup_irq_domain()
2446 dev->domain_data.irqenable = buf; in lan78xx_setup_irq_domain()
2448 dev->domain_data.irqchip = &lan78xx_irqchip; in lan78xx_setup_irq_domain()
2449 dev->domain_data.irq_handler = handle_simple_irq; in lan78xx_setup_irq_domain()
2451 irqdomain = irq_domain_create_simple(of_fwnode_handle(dev->udev->dev.parent->of_node), in lan78xx_setup_irq_domain()
2454 &dev->domain_data); in lan78xx_setup_irq_domain()
2462 ret = -EINVAL; in lan78xx_setup_irq_domain()
2465 ret = -EINVAL; in lan78xx_setup_irq_domain()
2468 dev->domain_data.irqdomain = irqdomain; in lan78xx_setup_irq_domain()
2469 dev->domain_data.phyirq = irqmap; in lan78xx_setup_irq_domain()
2476 if (dev->domain_data.phyirq > 0) { in lan78xx_remove_irq_domain()
2477 irq_dispose_mapping(dev->domain_data.phyirq); in lan78xx_remove_irq_domain()
2479 if (dev->domain_data.irqdomain) in lan78xx_remove_irq_domain()
2480 irq_domain_remove(dev->domain_data.irqdomain); in lan78xx_remove_irq_domain()
2482 dev->domain_data.phyirq = 0; in lan78xx_remove_irq_domain()
2483 dev->domain_data.irqdomain = NULL; in lan78xx_remove_irq_domain()
2487 * lan78xx_configure_usb - Configure USB link power settings
2493 * USB_CFG1 register to enable or disable U1 and U2 low-power states.
2496 * LAN7850 is a High-Speed-only (USB 2.0) device and is skipped.
2506 if (dev->udev->speed != USB_SPEED_SUPER) in lan78xx_configure_usb()
2510 if (dev->chipid == ID_REV_CHIP_ID_7850_) { in lan78xx_configure_usb()
2511 netdev_warn_once(dev->net, "Unexpected SuperSpeed for LAN7850 (USB 2.0 only)\n"); in lan78xx_configure_usb()
2535 netdev_warn(dev->net, "Unsupported link speed: %d\n", speed); in lan78xx_configure_usb()
2536 return -EINVAL; in lan78xx_configure_usb()
2541 * lan78xx_configure_flowcontrol - Set MAC and FIFO flow control configuration
2551 * The Pause Time field is measured in units of 512-bit times (quanta):
2552 * - At 1 Gbps: 1 quanta = 512 ns → max ~33.6 ms pause
2553 * - At 100 Mbps: 1 quanta = 5.12 µs → max ~335 ms pause
2554 * - At 10 Mbps: 1 quanta = 51.2 µs → max ~3.3 s pause
2557 * - RXUSED is the number of bytes used in the RX FIFO
2558 * - Flow is turned ON when RXUSED ≥ FLOW_ON threshold
2559 * - Flow is turned OFF when RXUSED ≤ FLOW_OFF threshold
2560 * - Both thresholds are encoded in units of 512 bytes (rounded up)
2564 * - USB 3.x (SuperSpeed):
2567 * - USB 2.0 (High-Speed):
2579 /* Use maximum pause time: 65535 quanta (512-bit times) */ in lan78xx_configure_flowcontrol()
2599 switch (dev->udev->speed) { in lan78xx_configure_flowcontrol()
2607 netdev_warn(dev->net, "Unsupported USB speed: %d\n", in lan78xx_configure_flowcontrol()
2608 dev->udev->speed); in lan78xx_configure_flowcontrol()
2609 return -EINVAL; in lan78xx_configure_flowcontrol()
2622 * lan78xx_register_fixed_phy() - Register a fallback fixed PHY
2626 * like EVB-KSZ9897-1, where LAN7801 acts as a USB-to-Ethernet interface to a
2639 netdev_info(dev->net, in lan78xx_register_fixed_phy()
2640 "No PHY found on LAN7801 – registering fixed PHY (e.g. EVB-KSZ9897-1)\n"); in lan78xx_register_fixed_phy()
2646 * lan78xx_get_phy() - Probe or register PHY device and set interface mode
2651 * sets dev->interface based on chip ID and detected PHY type.
2660 phydev = phy_find_first(dev->mdiobus); in lan78xx_get_phy()
2662 switch (dev->chipid) { in lan78xx_get_phy()
2666 dev->interface = PHY_INTERFACE_MODE_RGMII_ID; in lan78xx_get_phy()
2667 phydev->is_internal = false; in lan78xx_get_phy()
2669 if (!phydev->drv) in lan78xx_get_phy()
2670 netdev_warn(dev->net, in lan78xx_get_phy()
2676 dev->interface = PHY_INTERFACE_MODE_RGMII; in lan78xx_get_phy()
2683 return ERR_PTR(-ENODEV); in lan78xx_get_phy()
2685 /* These use internal GMII-connected PHY */ in lan78xx_get_phy()
2686 dev->interface = PHY_INTERFACE_MODE_GMII; in lan78xx_get_phy()
2687 phydev->is_internal = true; in lan78xx_get_phy()
2691 netdev_err(dev->net, "Unknown CHIP ID: 0x%08x\n", dev->chipid); in lan78xx_get_phy()
2692 return ERR_PTR(-ENODEV); in lan78xx_get_phy()
2697 * lan78xx_mac_prepare_for_phy() - Preconfigure MAC-side interface settings
2700 * Configure MAC-side registers according to dev->interface, which should be
2703 * - For PHY_INTERFACE_MODE_RGMII:
2704 * Enable MAC-side TXC delay. This mode seems to be used in a special setup
2705 * without a real PHY, likely on EVB-KSZ9897-1. In that design, LAN7801 is
2710 * - For PHY_INTERFACE_MODE_RGMII_ID:
2711 * Disable MAC-side delay and rely on the PHY driver to provide delay.
2713 * - For GMII, no MAC-specific config is needed.
2721 switch (dev->interface) { in lan78xx_mac_prepare_for_phy()
2723 /* Enable MAC-side TX clock delay */ in lan78xx_mac_prepare_for_phy()
2742 /* Disable MAC-side TXC delay, PHY provides it */ in lan78xx_mac_prepare_for_phy()
2750 /* No MAC-specific configuration required */ in lan78xx_mac_prepare_for_phy()
2754 netdev_warn(dev->net, "Unsupported interface mode: %d\n", in lan78xx_mac_prepare_for_phy()
2755 dev->interface); in lan78xx_mac_prepare_for_phy()
2763 * lan78xx_configure_leds_from_dt() - Configure LED enables based on DT
2767 * Reads "microchip,led-modes" property from the PHY's DT node and enables
2778 struct device_node *np = phydev->mdio.dev.of_node; in lan78xx_configure_leds_from_dt()
2785 len = of_property_count_elems_of_size(np, "microchip,led-modes", in lan78xx_configure_leds_from_dt()
2821 if (dev->domain_data.phyirq > 0) in lan78xx_phy_init()
2822 phydev->irq = dev->domain_data.phyirq; in lan78xx_phy_init()
2824 phydev->irq = PHY_POLL; in lan78xx_phy_init()
2825 netdev_dbg(dev->net, "phydev->irq = %d\n", phydev->irq); in lan78xx_phy_init()
2828 phydev->mdix = ETH_TP_MDI_AUTO; in lan78xx_phy_init()
2830 ret = phy_connect_direct(dev->net, phydev, in lan78xx_phy_init()
2832 dev->interface); in lan78xx_phy_init()
2834 netdev_err(dev->net, "can't attach PHY to %s\n", in lan78xx_phy_init()
2835 dev->mdiobus->id); in lan78xx_phy_init()
2836 if (dev->chipid == ID_REV_CHIP_ID_7801_) { in lan78xx_phy_init()
2842 return -EIO; in lan78xx_phy_init()
2845 /* MAC doesn't support 1000T Half */ in lan78xx_phy_init()
2849 dev->fc_request_control = (FLOW_CTRL_RX | FLOW_CTRL_TX); in lan78xx_phy_init()
2851 phydev->advertising); in lan78xx_phy_init()
2853 phydev->advertising); in lan78xx_phy_init()
2854 mii_adv = (u32)mii_advertise_flowctrl(dev->fc_request_control); in lan78xx_phy_init()
2856 linkmode_or(phydev->advertising, fc, phydev->advertising); in lan78xx_phy_init()
2866 dev->fc_autoneg = phydev->autoneg; in lan78xx_phy_init()
2922 spin_lock_irqsave(&q->lock, flags); in unlink_urbs()
2929 entry = (struct skb_data *)skb->cb; in unlink_urbs()
2930 if (entry->state != unlink_start) in unlink_urbs()
2935 entry->state = unlink_start; in unlink_urbs()
2936 urb = entry->urb; in unlink_urbs()
2940 * use-after-free problem inside usb_unlink_urb since in unlink_urbs()
2945 spin_unlock_irqrestore(&q->lock, flags); in unlink_urbs()
2946 /* during some PM-driven resume scenarios, in unlink_urbs()
2950 if (ret != -EINPROGRESS && ret != 0) in unlink_urbs()
2951 netdev_dbg(dev->net, "unlink urb err, %d\n", ret); in unlink_urbs()
2955 spin_lock_irqsave(&q->lock, flags); in unlink_urbs()
2957 spin_unlock_irqrestore(&q->lock, flags); in unlink_urbs()
2967 /* no second zero-length packet read wanted after mtu-sized packets */ in lan78xx_change_mtu()
2968 if ((max_frame_len % dev->maxpacket) == 0) in lan78xx_change_mtu()
2969 return -EDOM; in lan78xx_change_mtu()
2971 ret = usb_autopm_get_interface(dev->intf); in lan78xx_change_mtu()
2977 netdev_err(dev->net, "MTU changed to %d from %d failed with %pe\n", in lan78xx_change_mtu()
2978 new_mtu, netdev->mtu, ERR_PTR(ret)); in lan78xx_change_mtu()
2980 WRITE_ONCE(netdev->mtu, new_mtu); in lan78xx_change_mtu()
2982 usb_autopm_put_interface(dev->intf); in lan78xx_change_mtu()
2995 return -EBUSY; in lan78xx_set_mac_addr()
2997 if (!is_valid_ether_addr(addr->sa_data)) in lan78xx_set_mac_addr()
2998 return -EADDRNOTAVAIL; in lan78xx_set_mac_addr()
3000 eth_hw_addr_set(netdev, addr->sa_data); in lan78xx_set_mac_addr()
3002 addr_lo = netdev->dev_addr[0] | in lan78xx_set_mac_addr()
3003 netdev->dev_addr[1] << 8 | in lan78xx_set_mac_addr()
3004 netdev->dev_addr[2] << 16 | in lan78xx_set_mac_addr()
3005 netdev->dev_addr[3] << 24; in lan78xx_set_mac_addr()
3006 addr_hi = netdev->dev_addr[4] | in lan78xx_set_mac_addr()
3007 netdev->dev_addr[5] << 8; in lan78xx_set_mac_addr()
3030 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_set_features()
3033 spin_lock_irqsave(&pdata->rfe_ctl_lock, flags); in lan78xx_set_features()
3036 pdata->rfe_ctl |= RFE_CTL_TCPUDP_COE_ | RFE_CTL_IP_COE_; in lan78xx_set_features()
3037 pdata->rfe_ctl |= RFE_CTL_ICMP_COE_ | RFE_CTL_IGMP_COE_; in lan78xx_set_features()
3039 pdata->rfe_ctl &= ~(RFE_CTL_TCPUDP_COE_ | RFE_CTL_IP_COE_); in lan78xx_set_features()
3040 pdata->rfe_ctl &= ~(RFE_CTL_ICMP_COE_ | RFE_CTL_IGMP_COE_); in lan78xx_set_features()
3044 pdata->rfe_ctl |= RFE_CTL_VLAN_STRIP_; in lan78xx_set_features()
3046 pdata->rfe_ctl &= ~RFE_CTL_VLAN_STRIP_; in lan78xx_set_features()
3049 pdata->rfe_ctl |= RFE_CTL_VLAN_FILTER_; in lan78xx_set_features()
3051 pdata->rfe_ctl &= ~RFE_CTL_VLAN_FILTER_; in lan78xx_set_features()
3053 spin_unlock_irqrestore(&pdata->rfe_ctl_lock, flags); in lan78xx_set_features()
3055 return lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); in lan78xx_set_features()
3062 struct lan78xx_net *dev = pdata->dev; in lan78xx_deferred_vlan_write()
3065 DP_SEL_VHF_VLAN_LEN, pdata->vlan_table); in lan78xx_deferred_vlan_write()
3072 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_vlan_rx_add_vid()
3079 pdata->vlan_table[vid_dword_index] |= (1 << vid_bit_index); in lan78xx_vlan_rx_add_vid()
3082 schedule_work(&pdata->set_vlan); in lan78xx_vlan_rx_add_vid()
3091 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_vlan_rx_kill_vid()
3098 pdata->vlan_table[vid_dword_index] &= ~(1 << vid_bit_index); in lan78xx_vlan_rx_kill_vid()
3101 schedule_work(&pdata->set_vlan); in lan78xx_vlan_rx_kill_vid()
3167 netdev_err(dev->net, "Failed to init LTM with error %pe\n", ERR_PTR(ret)); in lan78xx_init_ltm()
3175 switch (dev->udev->speed) { in lan78xx_urb_config_init()
3177 dev->rx_urb_size = RX_SS_URB_SIZE; in lan78xx_urb_config_init()
3178 dev->tx_urb_size = TX_SS_URB_SIZE; in lan78xx_urb_config_init()
3179 dev->n_rx_urbs = RX_SS_URB_NUM; in lan78xx_urb_config_init()
3180 dev->n_tx_urbs = TX_SS_URB_NUM; in lan78xx_urb_config_init()
3181 dev->bulk_in_delay = SS_BULK_IN_DELAY; in lan78xx_urb_config_init()
3182 dev->burst_cap = SS_BURST_CAP_SIZE / SS_USB_PKT_SIZE; in lan78xx_urb_config_init()
3185 dev->rx_urb_size = RX_HS_URB_SIZE; in lan78xx_urb_config_init()
3186 dev->tx_urb_size = TX_HS_URB_SIZE; in lan78xx_urb_config_init()
3187 dev->n_rx_urbs = RX_HS_URB_NUM; in lan78xx_urb_config_init()
3188 dev->n_tx_urbs = TX_HS_URB_NUM; in lan78xx_urb_config_init()
3189 dev->bulk_in_delay = HS_BULK_IN_DELAY; in lan78xx_urb_config_init()
3190 dev->burst_cap = HS_BURST_CAP_SIZE / HS_USB_PKT_SIZE; in lan78xx_urb_config_init()
3193 dev->rx_urb_size = RX_FS_URB_SIZE; in lan78xx_urb_config_init()
3194 dev->tx_urb_size = TX_FS_URB_SIZE; in lan78xx_urb_config_init()
3195 dev->n_rx_urbs = RX_FS_URB_NUM; in lan78xx_urb_config_init()
3196 dev->n_tx_urbs = TX_FS_URB_NUM; in lan78xx_urb_config_init()
3197 dev->bulk_in_delay = FS_BULK_IN_DELAY; in lan78xx_urb_config_init()
3198 dev->burst_cap = FS_BURST_CAP_SIZE / FS_USB_PKT_SIZE; in lan78xx_urb_config_init()
3201 netdev_warn(dev->net, "USB bus speed not supported\n"); in lan78xx_urb_config_init()
3202 result = -EIO; in lan78xx_urb_config_init()
3211 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_reset()
3235 netdev_warn(dev->net, in lan78xx_reset()
3237 ret = -ETIMEDOUT; in lan78xx_reset()
3251 dev->chipid = (buf & ID_REV_CHIP_ID_MASK_) >> 16; in lan78xx_reset()
3252 dev->chiprev = buf & ID_REV_CHIP_REV_MASK_; in lan78xx_reset()
3270 ret = lan78xx_write_reg(dev, BURST_CAP, dev->burst_cap); in lan78xx_reset()
3274 ret = lan78xx_write_reg(dev, BULK_IN_DLY, dev->bulk_in_delay); in lan78xx_reset()
3301 buf = (MAX_RX_FIFO_SIZE - 512) / 512; in lan78xx_reset()
3307 buf = (MAX_TX_FIFO_SIZE - 512) / 512; in lan78xx_reset()
3325 /* Don't need rfe_ctl_lock during initialisation */ in lan78xx_reset()
3326 ret = lan78xx_read_reg(dev, RFE_CTL, &pdata->rfe_ctl); in lan78xx_reset()
3330 pdata->rfe_ctl |= RFE_CTL_BCAST_EN_ | RFE_CTL_DA_PERFECT_; in lan78xx_reset()
3332 ret = lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); in lan78xx_reset()
3337 ret = lan78xx_set_features(dev->net, dev->net->features); in lan78xx_reset()
3341 lan78xx_set_multicast(dev->net); in lan78xx_reset()
3362 netdev_warn(dev->net, "timeout waiting for PHY Reset"); in lan78xx_reset()
3363 ret = -ETIMEDOUT; in lan78xx_reset()
3373 if (dev->chipid == ID_REV_CHIP_ID_7801_) { in lan78xx_reset()
3379 if (dev->chipid == ID_REV_CHIP_ID_7800_ || in lan78xx_reset()
3380 dev->chipid == ID_REV_CHIP_ID_7850_) { in lan78xx_reset()
3384 netdev_info(dev->net, "No External EEPROM. Setting MAC Speed\n"); in lan78xx_reset()
3393 RX_MAX_FRAME_LEN(dev->net->mtu)); in lan78xx_reset()
3406 p = (u32 *)&dev->stats.rollover_max; in lan78xx_init_stats()
3407 for (i = 0; i < (sizeof(dev->stats.rollover_max) / (sizeof(u32))); i++) in lan78xx_init_stats()
3410 dev->stats.rollover_max.rx_unicast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
3411 dev->stats.rollover_max.rx_broadcast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
3412 dev->stats.rollover_max.rx_multicast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
3413 dev->stats.rollover_max.eee_rx_lpi_transitions = 0xFFFFFFFF; in lan78xx_init_stats()
3414 dev->stats.rollover_max.eee_rx_lpi_time = 0xFFFFFFFF; in lan78xx_init_stats()
3415 dev->stats.rollover_max.tx_unicast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
3416 dev->stats.rollover_max.tx_broadcast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
3417 dev->stats.rollover_max.tx_multicast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
3418 dev->stats.rollover_max.eee_tx_lpi_transitions = 0xFFFFFFFF; in lan78xx_init_stats()
3419 dev->stats.rollover_max.eee_tx_lpi_time = 0xFFFFFFFF; in lan78xx_init_stats()
3421 set_bit(EVENT_STAT_UPDATE, &dev->flags); in lan78xx_init_stats()
3429 netif_dbg(dev, ifup, dev->net, "open device"); in lan78xx_open()
3431 ret = usb_autopm_get_interface(dev->intf); in lan78xx_open()
3435 mutex_lock(&dev->dev_mutex); in lan78xx_open()
3437 phy_start(net->phydev); in lan78xx_open()
3439 netif_dbg(dev, ifup, dev->net, "phy initialised successfully"); in lan78xx_open()
3442 if (dev->urb_intr) { in lan78xx_open()
3443 ret = usb_submit_urb(dev->urb_intr, GFP_KERNEL); in lan78xx_open()
3445 netif_err(dev, ifup, dev->net, in lan78xx_open()
3467 set_bit(EVENT_DEV_OPEN, &dev->flags); in lan78xx_open()
3471 dev->link_on = false; in lan78xx_open()
3473 napi_enable(&dev->napi); in lan78xx_open()
3477 mutex_unlock(&dev->dev_mutex); in lan78xx_open()
3480 usb_autopm_put_interface(dev->intf); in lan78xx_open()
3494 dev->wait = &unlink_wakeup; in lan78xx_terminate_urbs()
3495 temp = unlink_urbs(dev, &dev->txq) + unlink_urbs(dev, &dev->rxq); in lan78xx_terminate_urbs()
3498 while (!skb_queue_empty(&dev->rxq) || in lan78xx_terminate_urbs()
3499 !skb_queue_empty(&dev->txq)) { in lan78xx_terminate_urbs()
3502 netif_dbg(dev, ifdown, dev->net, in lan78xx_terminate_urbs()
3506 dev->wait = NULL; in lan78xx_terminate_urbs()
3511 while (!skb_queue_empty(&dev->rxq_done)) { in lan78xx_terminate_urbs()
3512 struct sk_buff *skb = skb_dequeue(&dev->rxq_done); in lan78xx_terminate_urbs()
3517 skb_queue_purge(&dev->rxq_overflow); in lan78xx_terminate_urbs()
3518 skb_queue_purge(&dev->txq_pend); in lan78xx_terminate_urbs()
3525 netif_dbg(dev, ifup, dev->net, "stop device"); in lan78xx_stop()
3527 mutex_lock(&dev->dev_mutex); in lan78xx_stop()
3529 if (timer_pending(&dev->stat_monitor)) in lan78xx_stop()
3530 timer_delete_sync(&dev->stat_monitor); in lan78xx_stop()
3532 clear_bit(EVENT_DEV_OPEN, &dev->flags); in lan78xx_stop()
3534 napi_disable(&dev->napi); in lan78xx_stop()
3538 netif_info(dev, ifdown, dev->net, in lan78xx_stop()
3540 net->stats.rx_packets, net->stats.tx_packets, in lan78xx_stop()
3541 net->stats.rx_errors, net->stats.tx_errors); in lan78xx_stop()
3547 if (net->phydev) in lan78xx_stop()
3548 phy_stop(net->phydev); in lan78xx_stop()
3550 usb_kill_urb(dev->urb_intr); in lan78xx_stop()
3553 * can't flush_scheduled_work() until we drop rtnl (later), in lan78xx_stop()
3556 clear_bit(EVENT_TX_HALT, &dev->flags); in lan78xx_stop()
3557 clear_bit(EVENT_RX_HALT, &dev->flags); in lan78xx_stop()
3558 clear_bit(EVENT_LINK_RESET, &dev->flags); in lan78xx_stop()
3559 clear_bit(EVENT_STAT_UPDATE, &dev->flags); in lan78xx_stop()
3561 cancel_delayed_work_sync(&dev->wq); in lan78xx_stop()
3563 usb_autopm_put_interface(dev->intf); in lan78xx_stop()
3565 mutex_unlock(&dev->dev_mutex); in lan78xx_stop()
3575 struct skb_data *entry = (struct skb_data *)skb->cb; in defer_bh()
3577 spin_lock_irqsave(&list->lock, flags); in defer_bh()
3578 old_state = entry->state; in defer_bh()
3579 entry->state = state; in defer_bh()
3582 spin_unlock(&list->lock); in defer_bh()
3583 spin_lock(&dev->rxq_done.lock); in defer_bh()
3585 __skb_queue_tail(&dev->rxq_done, skb); in defer_bh()
3586 if (skb_queue_len(&dev->rxq_done) == 1) in defer_bh()
3587 napi_schedule(&dev->napi); in defer_bh()
3589 spin_unlock_irqrestore(&dev->rxq_done.lock, flags); in defer_bh()
3596 struct sk_buff *skb = (struct sk_buff *)urb->context; in tx_complete()
3597 struct skb_data *entry = (struct skb_data *)skb->cb; in tx_complete()
3598 struct lan78xx_net *dev = entry->dev; in tx_complete()
3600 if (urb->status == 0) { in tx_complete()
3601 dev->net->stats.tx_packets += entry->num_of_packet; in tx_complete()
3602 dev->net->stats.tx_bytes += entry->length; in tx_complete()
3604 dev->net->stats.tx_errors += entry->num_of_packet; in tx_complete()
3606 switch (urb->status) { in tx_complete()
3607 case -EPIPE: in tx_complete()
3611 /* software-driven interface shutdown */ in tx_complete()
3612 case -ECONNRESET: in tx_complete()
3613 case -ESHUTDOWN: in tx_complete()
3614 netif_dbg(dev, tx_err, dev->net, in tx_complete()
3616 entry->urb->status); in tx_complete()
3619 case -EPROTO: in tx_complete()
3620 case -ETIME: in tx_complete()
3621 case -EILSEQ: in tx_complete()
3622 netif_stop_queue(dev->net); in tx_complete()
3623 netif_dbg(dev, tx_err, dev->net, in tx_complete()
3625 entry->urb->status); in tx_complete()
3628 netif_dbg(dev, tx_err, dev->net, in tx_complete()
3630 entry->urb->status); in tx_complete()
3635 usb_autopm_put_interface_async(dev->intf); in tx_complete()
3637 skb_unlink(skb, &dev->txq); in tx_complete()
3641 /* Re-schedule NAPI if Tx data pending but no URBs in progress. in tx_complete()
3643 if (skb_queue_empty(&dev->txq) && in tx_complete()
3644 !skb_queue_empty(&dev->txq_pend)) in tx_complete()
3645 napi_schedule(&dev->napi); in tx_complete()
3651 struct skb_data *entry = (struct skb_data *)newsk->cb; in lan78xx_queue_skb()
3654 entry->state = state; in lan78xx_queue_skb()
3659 return skb_queue_len(&dev->txq_free) * dev->tx_urb_size; in lan78xx_tx_urb_space()
3664 return dev->tx_pend_data_len; in lan78xx_tx_pend_data_len()
3673 spin_lock_irqsave(&dev->txq_pend.lock, flags); in lan78xx_tx_pend_skb_add()
3675 __skb_queue_tail(&dev->txq_pend, skb); in lan78xx_tx_pend_skb_add()
3677 dev->tx_pend_data_len += skb->len; in lan78xx_tx_pend_skb_add()
3678 *tx_pend_data_len = dev->tx_pend_data_len; in lan78xx_tx_pend_skb_add()
3680 spin_unlock_irqrestore(&dev->txq_pend.lock, flags); in lan78xx_tx_pend_skb_add()
3689 spin_lock_irqsave(&dev->txq_pend.lock, flags); in lan78xx_tx_pend_skb_head_add()
3691 __skb_queue_head(&dev->txq_pend, skb); in lan78xx_tx_pend_skb_head_add()
3693 dev->tx_pend_data_len += skb->len; in lan78xx_tx_pend_skb_head_add()
3694 *tx_pend_data_len = dev->tx_pend_data_len; in lan78xx_tx_pend_skb_head_add()
3696 spin_unlock_irqrestore(&dev->txq_pend.lock, flags); in lan78xx_tx_pend_skb_head_add()
3705 spin_lock_irqsave(&dev->txq_pend.lock, flags); in lan78xx_tx_pend_skb_get()
3707 *skb = __skb_dequeue(&dev->txq_pend); in lan78xx_tx_pend_skb_get()
3709 dev->tx_pend_data_len -= (*skb)->len; in lan78xx_tx_pend_skb_get()
3710 *tx_pend_data_len = dev->tx_pend_data_len; in lan78xx_tx_pend_skb_get()
3712 spin_unlock_irqrestore(&dev->txq_pend.lock, flags); in lan78xx_tx_pend_skb_get()
3721 if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) in lan78xx_start_xmit()
3722 schedule_delayed_work(&dev->wq, 0); in lan78xx_start_xmit()
3730 if (skb_queue_empty(&dev->txq)) in lan78xx_start_xmit()
3731 napi_schedule(&dev->napi); in lan78xx_start_xmit()
3739 netif_dbg(dev, hw, dev->net, "tx data len: %u, urb space %u", in lan78xx_start_xmit()
3744 if (!skb_queue_empty(&dev->txq_free)) in lan78xx_start_xmit()
3745 napi_schedule(&dev->napi); in lan78xx_start_xmit()
3757 dev->data[0] = (unsigned long)kzalloc(sizeof(*pdata), GFP_KERNEL); in lan78xx_bind()
3759 pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_bind()
3761 netdev_warn(dev->net, "Unable to allocate lan78xx_priv"); in lan78xx_bind()
3762 return -ENOMEM; in lan78xx_bind()
3765 pdata->dev = dev; in lan78xx_bind()
3767 spin_lock_init(&pdata->rfe_ctl_lock); in lan78xx_bind()
3768 mutex_init(&pdata->dataport_mutex); in lan78xx_bind()
3770 INIT_WORK(&pdata->set_multicast, lan78xx_deferred_multicast_write); in lan78xx_bind()
3773 pdata->vlan_table[i] = 0; in lan78xx_bind()
3775 INIT_WORK(&pdata->set_vlan, lan78xx_deferred_vlan_write); in lan78xx_bind()
3777 dev->net->features = 0; in lan78xx_bind()
3780 dev->net->features |= NETIF_F_HW_CSUM; in lan78xx_bind()
3783 dev->net->features |= NETIF_F_RXCSUM; in lan78xx_bind()
3786 dev->net->features |= NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_SG; in lan78xx_bind()
3789 dev->net->features |= NETIF_F_HW_VLAN_CTAG_RX; in lan78xx_bind()
3792 dev->net->features |= NETIF_F_HW_VLAN_CTAG_FILTER; in lan78xx_bind()
3794 dev->net->hw_features = dev->net->features; in lan78xx_bind()
3798 netdev_warn(dev->net, in lan78xx_bind()
3806 netdev_warn(dev->net, "Registers INIT FAILED...."); in lan78xx_bind()
3812 netdev_warn(dev->net, "MDIO INIT FAILED....."); in lan78xx_bind()
3816 dev->net->flags |= IFF_MULTICAST; in lan78xx_bind()
3818 pdata->wol = WAKE_MAGIC; in lan78xx_bind()
3826 netdev_warn(dev->net, "Bind routine FAILED"); in lan78xx_bind()
3827 cancel_work_sync(&pdata->set_multicast); in lan78xx_bind()
3828 cancel_work_sync(&pdata->set_vlan); in lan78xx_bind()
3835 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_unbind()
3842 cancel_work_sync(&pdata->set_multicast); in lan78xx_unbind()
3843 cancel_work_sync(&pdata->set_vlan); in lan78xx_unbind()
3844 netif_dbg(dev, ifdown, dev->net, "free pdata"); in lan78xx_unbind()
3847 dev->data[0] = 0; in lan78xx_unbind()
3858 if (!(dev->net->features & NETIF_F_RXCSUM) || in lan78xx_rx_csum_offload()
3861 !(dev->net->features & NETIF_F_HW_VLAN_CTAG_RX))) { in lan78xx_rx_csum_offload()
3862 skb->ip_summed = CHECKSUM_NONE; in lan78xx_rx_csum_offload()
3864 skb->csum = ntohs((u16)(rx_cmd_b >> RX_CMD_B_CSUM_SHIFT_)); in lan78xx_rx_csum_offload()
3865 skb->ip_summed = CHECKSUM_COMPLETE; in lan78xx_rx_csum_offload()
3873 if ((dev->net->features & NETIF_F_HW_VLAN_CTAG_RX) && in lan78xx_rx_vlan_offload()
3881 dev->net->stats.rx_packets++; in lan78xx_skb_return()
3882 dev->net->stats.rx_bytes += skb->len; in lan78xx_skb_return()
3884 skb->protocol = eth_type_trans(skb, dev->net); in lan78xx_skb_return()
3886 netif_dbg(dev, rx_status, dev->net, "< rx, len %zu, type 0x%x\n", in lan78xx_skb_return()
3887 skb->len + sizeof(struct ethhdr), skb->protocol); in lan78xx_skb_return()
3888 memset(skb->cb, 0, sizeof(struct skb_data)); in lan78xx_skb_return()
3893 napi_gro_receive(&dev->napi, skb); in lan78xx_skb_return()
3899 if (skb->len < RX_SKB_MIN_LEN) in lan78xx_rx()
3905 while (skb->len > 0) { in lan78xx_rx()
3910 rx_cmd_a = get_unaligned_le32(skb->data); in lan78xx_rx()
3913 rx_cmd_b = get_unaligned_le32(skb->data); in lan78xx_rx()
3916 rx_cmd_c = get_unaligned_le16(skb->data); in lan78xx_rx()
3919 packet = skb->data; in lan78xx_rx()
3923 align_count = (4 - ((size + RXW_PADDING) % 4)) % 4; in lan78xx_rx()
3925 if (unlikely(size > skb->len)) { in lan78xx_rx()
3926 netif_dbg(dev, rx_err, dev->net, in lan78xx_rx()
3933 netif_dbg(dev, rx_err, dev->net, in lan78xx_rx()
3940 netif_dbg(dev, rx_err, dev->net, in lan78xx_rx()
3946 frame_len = size - ETH_FCS_LEN; in lan78xx_rx()
3948 skb2 = napi_alloc_skb(&dev->napi, frame_len); in lan78xx_rx()
3952 memcpy(skb2->data, packet, frame_len); in lan78xx_rx()
3968 skb_queue_tail(&dev->rxq_overflow, skb2); in lan78xx_rx()
3975 if (skb->len) in lan78xx_rx()
3986 netif_dbg(dev, rx_err, dev->net, "drop\n"); in rx_process()
3987 dev->net->stats.rx_errors++; in rx_process()
3993 struct sk_buff *skb = (struct sk_buff *)urb->context; in rx_complete()
3994 struct skb_data *entry = (struct skb_data *)skb->cb; in rx_complete()
3995 struct lan78xx_net *dev = entry->dev; in rx_complete()
3996 int urb_status = urb->status; in rx_complete()
3999 netif_dbg(dev, rx_status, dev->net, in rx_complete()
4000 "rx done: status %d", urb->status); in rx_complete()
4002 skb_put(skb, urb->actual_length); in rx_complete()
4005 if (urb != entry->urb) in rx_complete()
4006 netif_warn(dev, rx_err, dev->net, "URB pointer mismatch"); in rx_complete()
4010 if (skb->len < RX_SKB_MIN_LEN) { in rx_complete()
4012 dev->net->stats.rx_errors++; in rx_complete()
4013 dev->net->stats.rx_length_errors++; in rx_complete()
4014 netif_dbg(dev, rx_err, dev->net, in rx_complete()
4015 "rx length %d\n", skb->len); in rx_complete()
4017 usb_mark_last_busy(dev->udev); in rx_complete()
4019 case -EPIPE: in rx_complete()
4020 dev->net->stats.rx_errors++; in rx_complete()
4023 case -ECONNRESET: /* async unlink */ in rx_complete()
4024 case -ESHUTDOWN: /* hardware gone */ in rx_complete()
4025 netif_dbg(dev, ifdown, dev->net, in rx_complete()
4029 case -EPROTO: in rx_complete()
4030 case -ETIME: in rx_complete()
4031 case -EILSEQ: in rx_complete()
4032 dev->net->stats.rx_errors++; in rx_complete()
4037 case -EOVERFLOW: in rx_complete()
4038 dev->net->stats.rx_over_errors++; in rx_complete()
4043 dev->net->stats.rx_errors++; in rx_complete()
4044 netif_dbg(dev, rx_err, dev->net, "rx status %d\n", urb_status); in rx_complete()
4048 state = defer_bh(dev, skb, &dev->rxq, state); in rx_complete()
4053 struct skb_data *entry = (struct skb_data *)skb->cb; in rx_submit()
4054 size_t size = dev->rx_urb_size; in rx_submit()
4055 struct urb *urb = entry->urb; in rx_submit()
4059 usb_fill_bulk_urb(urb, dev->udev, dev->pipe_in, in rx_submit()
4060 skb->data, size, rx_complete, skb); in rx_submit()
4062 spin_lock_irqsave(&dev->rxq.lock, lockflags); in rx_submit()
4064 if (netif_device_present(dev->net) && in rx_submit()
4065 netif_running(dev->net) && in rx_submit()
4066 !test_bit(EVENT_RX_HALT, &dev->flags) && in rx_submit()
4067 !test_bit(EVENT_DEV_ASLEEP, &dev->flags)) { in rx_submit()
4071 lan78xx_queue_skb(&dev->rxq, skb, rx_start); in rx_submit()
4073 case -EPIPE: in rx_submit()
4076 case -ENODEV: in rx_submit()
4077 case -ENOENT: in rx_submit()
4078 netif_dbg(dev, ifdown, dev->net, "device gone\n"); in rx_submit()
4079 netif_device_detach(dev->net); in rx_submit()
4081 case -EHOSTUNREACH: in rx_submit()
4082 ret = -ENOLINK; in rx_submit()
4083 napi_schedule(&dev->napi); in rx_submit()
4086 netif_dbg(dev, rx_err, dev->net, in rx_submit()
4088 napi_schedule(&dev->napi); in rx_submit()
4092 netif_dbg(dev, ifdown, dev->net, "rx: stopped\n"); in rx_submit()
4093 ret = -ENOLINK; in rx_submit()
4095 spin_unlock_irqrestore(&dev->rxq.lock, lockflags); in rx_submit()
4120 rx_buf->data = rx_buf->head; in lan78xx_rx_urb_resubmit()
4122 rx_buf->len = 0; in lan78xx_rx_urb_resubmit()
4123 rx_buf->data_len = 0; in lan78xx_rx_urb_resubmit()
4133 tx_cmd_a = (u32)(skb->len & TX_CMD_A_LEN_MASK_) | TX_CMD_A_FCS_; in lan78xx_fill_tx_cmd_words()
4135 if (skb->ip_summed == CHECKSUM_PARTIAL) in lan78xx_fill_tx_cmd_words()
4140 u16 mss = max(skb_shinfo(skb)->gso_size, TX_CMD_B_MSS_MIN_); in lan78xx_fill_tx_cmd_words()
4159 struct skb_data *entry = (struct skb_data *)tx_buf->cb; in lan78xx_tx_buf_fill()
4160 int remain = dev->tx_urb_size; in lan78xx_tx_buf_fill()
4161 u8 *tx_data = tx_buf->data; in lan78xx_tx_buf_fill()
4164 entry->num_of_packet = 0; in lan78xx_tx_buf_fill()
4165 entry->length = 0; in lan78xx_tx_buf_fill()
4183 align_bytes = (TX_ALIGNMENT - (urb_len % TX_ALIGNMENT)) % in lan78xx_tx_buf_fill()
4185 len = align_bytes + TX_CMD_LEN + skb->len; in lan78xx_tx_buf_fill()
4196 len = skb->len; in lan78xx_tx_buf_fill()
4198 struct net_device_stats *stats = &dev->net->stats; in lan78xx_tx_buf_fill()
4200 stats->tx_dropped++; in lan78xx_tx_buf_fill()
4202 tx_data -= TX_CMD_LEN; in lan78xx_tx_buf_fill()
4207 entry->length += len; in lan78xx_tx_buf_fill()
4208 entry->num_of_packet += skb_shinfo(skb)->gso_segs ?: 1; in lan78xx_tx_buf_fill()
4212 urb_len = (u32)(tx_data - (u8 *)tx_buf->data); in lan78xx_tx_buf_fill()
4214 remain = dev->tx_urb_size - urb_len; in lan78xx_tx_buf_fill()
4228 netif_tx_lock(dev->net); in lan78xx_tx_bh()
4229 if (netif_queue_stopped(dev->net)) { in lan78xx_tx_bh()
4231 netif_wake_queue(dev->net); in lan78xx_tx_bh()
4233 netif_tx_unlock(dev->net); in lan78xx_tx_bh()
4244 if (skb_queue_empty(&dev->txq_pend)) in lan78xx_tx_bh()
4253 spin_lock_irqsave(&dev->txq.lock, flags); in lan78xx_tx_bh()
4254 ret = usb_autopm_get_interface_async(dev->intf); in lan78xx_tx_bh()
4256 spin_unlock_irqrestore(&dev->txq.lock, flags); in lan78xx_tx_bh()
4260 usb_fill_bulk_urb(entry->urb, dev->udev, dev->pipe_out, in lan78xx_tx_bh()
4261 tx_buf->data, tx_buf->len, tx_complete, in lan78xx_tx_bh()
4264 if (tx_buf->len % dev->maxpacket == 0) { in lan78xx_tx_bh()
4266 entry->urb->transfer_flags |= URB_ZERO_PACKET; in lan78xx_tx_bh()
4271 if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) { in lan78xx_tx_bh()
4272 usb_anchor_urb(entry->urb, &dev->deferred); in lan78xx_tx_bh()
4273 netif_stop_queue(dev->net); in lan78xx_tx_bh()
4274 spin_unlock_irqrestore(&dev->txq.lock, flags); in lan78xx_tx_bh()
4275 netdev_dbg(dev->net, in lan78xx_tx_bh()
4280 ret = usb_submit_urb(entry->urb, GFP_ATOMIC); in lan78xx_tx_bh()
4283 netif_trans_update(dev->net); in lan78xx_tx_bh()
4284 lan78xx_queue_skb(&dev->txq, tx_buf, tx_start); in lan78xx_tx_bh()
4286 case -EPIPE: in lan78xx_tx_bh()
4287 netif_stop_queue(dev->net); in lan78xx_tx_bh()
4289 usb_autopm_put_interface_async(dev->intf); in lan78xx_tx_bh()
4291 case -ENODEV: in lan78xx_tx_bh()
4292 case -ENOENT: in lan78xx_tx_bh()
4293 netif_dbg(dev, tx_err, dev->net, in lan78xx_tx_bh()
4295 netif_device_detach(dev->net); in lan78xx_tx_bh()
4298 usb_autopm_put_interface_async(dev->intf); in lan78xx_tx_bh()
4299 netif_dbg(dev, tx_err, dev->net, in lan78xx_tx_bh()
4304 spin_unlock_irqrestore(&dev->txq.lock, flags); in lan78xx_tx_bh()
4307 netdev_warn(dev->net, "failed to tx urb %d\n", ret); in lan78xx_tx_bh()
4309 dev->net->stats.tx_dropped += entry->num_of_packet; in lan78xx_tx_bh()
4326 while (!skb_queue_empty(&dev->rxq_overflow)) { in lan78xx_bh()
4327 lan78xx_skb_return(dev, skb_dequeue(&dev->rxq_overflow)); in lan78xx_bh()
4337 spin_lock_irqsave(&dev->rxq_done.lock, flags); in lan78xx_bh()
4338 skb_queue_splice_init(&dev->rxq_done, &done); in lan78xx_bh()
4339 spin_unlock_irqrestore(&dev->rxq_done.lock, flags); in lan78xx_bh()
4342 * pass them to the stack. Re-submit each completed URB. in lan78xx_bh()
4346 entry = (struct skb_data *)(rx_buf->cb); in lan78xx_bh()
4347 switch (entry->state) { in lan78xx_bh()
4354 netdev_dbg(dev->net, "rx buf state %d\n", in lan78xx_bh()
4355 entry->state); in lan78xx_bh()
4366 spin_lock_irqsave(&dev->rxq_done.lock, flags); in lan78xx_bh()
4367 skb_queue_splice(&done, &dev->rxq_done); in lan78xx_bh()
4368 spin_unlock_irqrestore(&dev->rxq_done.lock, flags); in lan78xx_bh()
4370 if (netif_device_present(dev->net) && netif_running(dev->net)) { in lan78xx_bh()
4372 if (timer_pending(&dev->stat_monitor) && (dev->delta != 1)) { in lan78xx_bh()
4373 dev->delta = 1; in lan78xx_bh()
4374 mod_timer(&dev->stat_monitor, in lan78xx_bh()
4380 if (!test_bit(EVENT_RX_HALT, &dev->flags)) in lan78xx_bh()
4397 /* Don't do any work if the device is suspended */ in lan78xx_poll()
4399 if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) { in lan78xx_poll()
4414 if (!skb_queue_empty(&dev->rxq_done)) { in lan78xx_poll()
4416 } else if (netif_carrier_ok(dev->net)) { in lan78xx_poll()
4417 if (skb_queue_empty(&dev->txq) && in lan78xx_poll()
4418 !skb_queue_empty(&dev->txq_pend)) { in lan78xx_poll()
4421 netif_tx_lock(dev->net); in lan78xx_poll()
4422 if (netif_queue_stopped(dev->net)) { in lan78xx_poll()
4423 netif_wake_queue(dev->net); in lan78xx_poll()
4426 netif_tx_unlock(dev->net); in lan78xx_poll()
4442 if (test_bit(EVENT_DEV_DISCONNECT, &dev->flags)) in lan78xx_delayedwork()
4445 if (usb_autopm_get_interface(dev->intf) < 0) in lan78xx_delayedwork()
4448 if (test_bit(EVENT_TX_HALT, &dev->flags)) { in lan78xx_delayedwork()
4449 unlink_urbs(dev, &dev->txq); in lan78xx_delayedwork()
4451 status = usb_clear_halt(dev->udev, dev->pipe_out); in lan78xx_delayedwork()
4453 status != -EPIPE && in lan78xx_delayedwork()
4454 status != -ESHUTDOWN) { in lan78xx_delayedwork()
4456 netdev_err(dev->net, in lan78xx_delayedwork()
4457 "can't clear tx halt, status %d\n", in lan78xx_delayedwork()
4460 clear_bit(EVENT_TX_HALT, &dev->flags); in lan78xx_delayedwork()
4461 if (status != -ESHUTDOWN) in lan78xx_delayedwork()
4462 netif_wake_queue(dev->net); in lan78xx_delayedwork()
4466 if (test_bit(EVENT_RX_HALT, &dev->flags)) { in lan78xx_delayedwork()
4467 unlink_urbs(dev, &dev->rxq); in lan78xx_delayedwork()
4468 status = usb_clear_halt(dev->udev, dev->pipe_in); in lan78xx_delayedwork()
4470 status != -EPIPE && in lan78xx_delayedwork()
4471 status != -ESHUTDOWN) { in lan78xx_delayedwork()
4473 netdev_err(dev->net, in lan78xx_delayedwork()
4474 "can't clear rx halt, status %d\n", in lan78xx_delayedwork()
4477 clear_bit(EVENT_RX_HALT, &dev->flags); in lan78xx_delayedwork()
4478 napi_schedule(&dev->napi); in lan78xx_delayedwork()
4482 if (test_bit(EVENT_LINK_RESET, &dev->flags)) { in lan78xx_delayedwork()
4485 clear_bit(EVENT_LINK_RESET, &dev->flags); in lan78xx_delayedwork()
4487 netdev_info(dev->net, "link reset failed (%d)\n", in lan78xx_delayedwork()
4492 if (test_bit(EVENT_STAT_UPDATE, &dev->flags)) { in lan78xx_delayedwork()
4495 clear_bit(EVENT_STAT_UPDATE, &dev->flags); in lan78xx_delayedwork()
4497 mod_timer(&dev->stat_monitor, in lan78xx_delayedwork()
4498 jiffies + (STAT_UPDATE_TIMER * dev->delta)); in lan78xx_delayedwork()
4500 dev->delta = min((dev->delta * 2), 50); in lan78xx_delayedwork()
4503 usb_autopm_put_interface(dev->intf); in lan78xx_delayedwork()
4508 struct lan78xx_net *dev = urb->context; in intr_complete()
4509 int status = urb->status; in intr_complete()
4517 /* software-driven interface shutdown */ in intr_complete()
4518 case -ENOENT: /* urb killed */ in intr_complete()
4519 case -ENODEV: /* hardware gone */ in intr_complete()
4520 case -ESHUTDOWN: /* hardware gone */ in intr_complete()
4521 netif_dbg(dev, ifdown, dev->net, in intr_complete()
4529 netdev_dbg(dev->net, "intr status %d\n", status); in intr_complete()
4533 if (!netif_device_present(dev->net) || in intr_complete()
4534 !netif_running(dev->net)) { in intr_complete()
4535 netdev_warn(dev->net, "not submitting new status URB"); in intr_complete()
4539 memset(urb->transfer_buffer, 0, urb->transfer_buffer_length); in intr_complete()
4545 case -ENODEV: in intr_complete()
4546 case -ENOENT: in intr_complete()
4547 netif_dbg(dev, timer, dev->net, in intr_complete()
4549 netif_device_detach(dev->net); in intr_complete()
4552 netif_err(dev, timer, dev->net, in intr_complete()
4553 "intr resubmit --> %d\n", status); in intr_complete()
4571 net = dev->net; in lan78xx_disconnect()
4575 timer_shutdown_sync(&dev->stat_monitor); in lan78xx_disconnect()
4576 set_bit(EVENT_DEV_DISCONNECT, &dev->flags); in lan78xx_disconnect()
4577 cancel_delayed_work_sync(&dev->wq); in lan78xx_disconnect()
4579 phydev = net->phydev; in lan78xx_disconnect()
4581 phy_disconnect(net->phydev); in lan78xx_disconnect()
4588 usb_scuttle_anchored_urbs(&dev->deferred); in lan78xx_disconnect()
4595 usb_kill_urb(dev->urb_intr); in lan78xx_disconnect()
4596 usb_free_urb(dev->urb_intr); in lan78xx_disconnect()
4606 unlink_urbs(dev, &dev->txq); in lan78xx_tx_timeout()
4607 napi_schedule(&dev->napi); in lan78xx_tx_timeout()
4616 if (skb->len > LAN78XX_TSO_SIZE(dev)) in lan78xx_features_check()
4641 static void lan78xx_stat_monitor(struct timer_list *t) in lan78xx_stat_monitor() argument
4643 struct lan78xx_net *dev = timer_container_of(dev, t, stat_monitor); in lan78xx_stat_monitor()
4665 dev_err(&intf->dev, "Error: OOM\n"); in lan78xx_probe()
4666 ret = -ENOMEM; in lan78xx_probe()
4671 SET_NETDEV_DEV(netdev, &intf->dev); in lan78xx_probe()
4674 dev->udev = udev; in lan78xx_probe()
4675 dev->intf = intf; in lan78xx_probe()
4676 dev->net = netdev; in lan78xx_probe()
4677 dev->msg_enable = netif_msg_init(msg_level, NETIF_MSG_DRV in lan78xx_probe()
4680 skb_queue_head_init(&dev->rxq); in lan78xx_probe()
4681 skb_queue_head_init(&dev->txq); in lan78xx_probe()
4682 skb_queue_head_init(&dev->rxq_done); in lan78xx_probe()
4683 skb_queue_head_init(&dev->txq_pend); in lan78xx_probe()
4684 skb_queue_head_init(&dev->rxq_overflow); in lan78xx_probe()
4685 mutex_init(&dev->mdiobus_mutex); in lan78xx_probe()
4686 mutex_init(&dev->dev_mutex); in lan78xx_probe()
4700 /* MTU range: 68 - 9000 */ in lan78xx_probe()
4701 netdev->max_mtu = MAX_SINGLE_PACKET_SIZE; in lan78xx_probe()
4705 netif_napi_add(netdev, &dev->napi, lan78xx_poll); in lan78xx_probe()
4707 INIT_DELAYED_WORK(&dev->wq, lan78xx_delayedwork); in lan78xx_probe()
4708 init_usb_anchor(&dev->deferred); in lan78xx_probe()
4710 netdev->netdev_ops = &lan78xx_netdev_ops; in lan78xx_probe()
4711 netdev->watchdog_timeo = TX_TIMEOUT_JIFFIES; in lan78xx_probe()
4712 netdev->ethtool_ops = &lan78xx_ethtool_ops; in lan78xx_probe()
4714 dev->delta = 1; in lan78xx_probe()
4715 timer_setup(&dev->stat_monitor, lan78xx_stat_monitor, 0); in lan78xx_probe()
4717 mutex_init(&dev->stats.access_lock); in lan78xx_probe()
4719 if (intf->cur_altsetting->desc.bNumEndpoints < 3) { in lan78xx_probe()
4720 ret = -ENODEV; in lan78xx_probe()
4724 dev->pipe_in = usb_rcvbulkpipe(udev, BULK_IN_PIPE); in lan78xx_probe()
4725 ep_blkin = usb_pipe_endpoint(udev, dev->pipe_in); in lan78xx_probe()
4726 if (!ep_blkin || !usb_endpoint_is_bulk_in(&ep_blkin->desc)) { in lan78xx_probe()
4727 ret = -ENODEV; in lan78xx_probe()
4731 dev->pipe_out = usb_sndbulkpipe(udev, BULK_OUT_PIPE); in lan78xx_probe()
4732 ep_blkout = usb_pipe_endpoint(udev, dev->pipe_out); in lan78xx_probe()
4733 if (!ep_blkout || !usb_endpoint_is_bulk_out(&ep_blkout->desc)) { in lan78xx_probe()
4734 ret = -ENODEV; in lan78xx_probe()
4738 ep_intr = &intf->cur_altsetting->endpoint[2]; in lan78xx_probe()
4739 if (!usb_endpoint_is_int_in(&ep_intr->desc)) { in lan78xx_probe()
4740 ret = -ENODEV; in lan78xx_probe()
4744 dev->pipe_intr = usb_rcvintpipe(dev->udev, in lan78xx_probe()
4745 usb_endpoint_num(&ep_intr->desc)); in lan78xx_probe()
4751 period = ep_intr->desc.bInterval; in lan78xx_probe()
4752 maxp = usb_maxpacket(dev->udev, dev->pipe_intr); in lan78xx_probe()
4754 dev->urb_intr = usb_alloc_urb(0, GFP_KERNEL); in lan78xx_probe()
4755 if (!dev->urb_intr) { in lan78xx_probe()
4756 ret = -ENOMEM; in lan78xx_probe()
4762 ret = -ENOMEM; in lan78xx_probe()
4766 usb_fill_int_urb(dev->urb_intr, dev->udev, in lan78xx_probe()
4767 dev->pipe_intr, buf, maxp, in lan78xx_probe()
4769 dev->urb_intr->transfer_flags |= URB_FREE_BUFFER; in lan78xx_probe()
4771 dev->maxpacket = usb_maxpacket(dev->udev, dev->pipe_out); in lan78xx_probe()
4773 /* Reject broken descriptors. */ in lan78xx_probe()
4774 if (dev->maxpacket == 0) { in lan78xx_probe()
4775 ret = -ENODEV; in lan78xx_probe()
4779 /* driver requires remote-wakeup capability during autosuspend. */ in lan78xx_probe()
4780 intf->needs_remote_wakeup = 1; in lan78xx_probe()
4788 netif_err(dev, probe, netdev, "couldn't register the device\n"); in lan78xx_probe()
4794 ret = device_set_wakeup_enable(&udev->dev, true); in lan78xx_probe()
4799 pm_runtime_set_autosuspend_delay(&udev->dev, in lan78xx_probe()
4805 phy_disconnect(netdev->phydev); in lan78xx_probe()
4807 usb_free_urb(dev->urb_intr); in lan78xx_probe()
4811 netif_napi_del(&dev->napi); in lan78xx_probe()
5119 mutex_lock(&dev->dev_mutex); in lan78xx_suspend()
5121 netif_dbg(dev, ifdown, dev->net, in lan78xx_suspend()
5124 dev_open = test_bit(EVENT_DEV_OPEN, &dev->flags); in lan78xx_suspend()
5127 spin_lock_irq(&dev->txq.lock); in lan78xx_suspend()
5128 /* don't autosuspend while transmitting */ in lan78xx_suspend()
5129 if ((skb_queue_len(&dev->txq) || in lan78xx_suspend()
5130 skb_queue_len(&dev->txq_pend)) && in lan78xx_suspend()
5132 spin_unlock_irq(&dev->txq.lock); in lan78xx_suspend()
5133 ret = -EBUSY; in lan78xx_suspend()
5136 set_bit(EVENT_DEV_ASLEEP, &dev->flags); in lan78xx_suspend()
5137 spin_unlock_irq(&dev->txq.lock); in lan78xx_suspend()
5155 netif_device_detach(dev->net); in lan78xx_suspend()
5157 usb_kill_urb(dev->urb_intr); in lan78xx_suspend()
5160 netif_device_attach(dev->net); in lan78xx_suspend()
5162 timer_delete(&dev->stat_monitor); in lan78xx_suspend()
5171 pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_suspend()
5172 netif_carrier_off(dev->net); in lan78xx_suspend()
5173 ret = lan78xx_set_suspend(dev, pdata->wol); in lan78xx_suspend()
5178 /* Interface is down; don't allow WOL and PHY in lan78xx_suspend()
5183 set_bit(EVENT_DEV_ASLEEP, &dev->flags); in lan78xx_suspend()
5218 mutex_unlock(&dev->dev_mutex); in lan78xx_suspend()
5228 while ((urb = usb_get_from_anchor(&dev->deferred))) { in lan78xx_submit_deferred_urbs()
5229 struct sk_buff *skb = urb->context; in lan78xx_submit_deferred_urbs()
5232 if (!netif_device_present(dev->net) || in lan78xx_submit_deferred_urbs()
5233 !netif_carrier_ok(dev->net) || in lan78xx_submit_deferred_urbs()
5242 netif_trans_update(dev->net); in lan78xx_submit_deferred_urbs()
5243 lan78xx_queue_skb(&dev->txq, skb, tx_start); in lan78xx_submit_deferred_urbs()
5245 if (ret == -EPIPE) { in lan78xx_submit_deferred_urbs()
5246 netif_stop_queue(dev->net); in lan78xx_submit_deferred_urbs()
5248 } else if (ret == -ENODEV) { in lan78xx_submit_deferred_urbs()
5249 netif_device_detach(dev->net); in lan78xx_submit_deferred_urbs()
5265 mutex_lock(&dev->dev_mutex); in lan78xx_resume()
5267 netif_dbg(dev, ifup, dev->net, "resuming device"); in lan78xx_resume()
5269 dev_open = test_bit(EVENT_DEV_OPEN, &dev->flags); in lan78xx_resume()
5278 if (dev->urb_intr) { in lan78xx_resume()
5279 int ret = usb_submit_urb(dev->urb_intr, GFP_KERNEL); in lan78xx_resume()
5282 if (ret == -ENODEV) in lan78xx_resume()
5283 netif_device_detach(dev->net); in lan78xx_resume()
5284 netdev_warn(dev->net, "Failed to submit intr URB"); in lan78xx_resume()
5288 spin_lock_irq(&dev->txq.lock); in lan78xx_resume()
5290 if (netif_device_present(dev->net)) { in lan78xx_resume()
5297 clear_bit(EVENT_DEV_ASLEEP, &dev->flags); in lan78xx_resume()
5299 spin_unlock_irq(&dev->txq.lock); in lan78xx_resume()
5302 netif_device_present(dev->net) && in lan78xx_resume()
5304 netif_start_queue(dev->net); in lan78xx_resume()
5310 napi_schedule(&dev->napi); in lan78xx_resume()
5312 if (!timer_pending(&dev->stat_monitor)) { in lan78xx_resume()
5313 dev->delta = 1; in lan78xx_resume()
5314 mod_timer(&dev->stat_monitor, in lan78xx_resume()
5319 clear_bit(EVENT_DEV_ASLEEP, &dev->flags); in lan78xx_resume()
5351 mutex_unlock(&dev->dev_mutex); in lan78xx_resume()
5361 netif_dbg(dev, ifup, dev->net, "(reset) resuming device"); in lan78xx_reset_resume()
5367 phy_start(dev->net->phydev); in lan78xx_reset_resume()
5388 /* ATM2-AF USB Gigabit Ethernet Device */