Lines Matching +full:update +full:- +full:fc +full:- +full:fixup

1 // SPDX-License-Identifier: GPL-2.0+
122 #define LAN78XX_TSO_SIZE(dev) ((dev)->tx_urb_size - TX_SKB_MIN_LEN)
135 /* statistic update interval (mSec) */
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",
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",
375 struct skb_data { /* skb->cb is one of these */
485 static int msg_level = -1;
500 buf->data = buf->head; in lan78xx_release_buf()
503 buf->len = 0; in lan78xx_release_buf()
504 buf->data_len = 0; in lan78xx_release_buf()
517 entry = (struct skb_data *)buf->cb; in lan78xx_free_buf_pool()
518 usb_free_urb(entry->urb); in lan78xx_free_buf_pool()
551 entry = (struct skb_data *)buf->cb; in lan78xx_alloc_buf_pool()
552 entry->urb = urb; in lan78xx_alloc_buf_pool()
553 entry->dev = dev; in lan78xx_alloc_buf_pool()
554 entry->length = 0; in lan78xx_alloc_buf_pool()
555 entry->num_of_packet = 0; in lan78xx_alloc_buf_pool()
565 return -ENOMEM; in lan78xx_alloc_buf_pool()
570 return lan78xx_get_buf(&dev->rxq_free); in lan78xx_get_rx_buf()
576 lan78xx_release_buf(&dev->rxq_free, rx_buf); in lan78xx_release_rx_buf()
581 lan78xx_free_buf_pool(&dev->rxq_free); in lan78xx_free_rx_resources()
586 return lan78xx_alloc_buf_pool(&dev->rxq_free, in lan78xx_alloc_rx_resources()
587 dev->n_rx_urbs, dev->rx_urb_size, dev); in lan78xx_alloc_rx_resources()
592 return lan78xx_get_buf(&dev->txq_free); in lan78xx_get_tx_buf()
598 lan78xx_release_buf(&dev->txq_free, tx_buf); in lan78xx_release_tx_buf()
603 lan78xx_free_buf_pool(&dev->txq_free); in lan78xx_free_tx_resources()
608 return lan78xx_alloc_buf_pool(&dev->txq_free, in lan78xx_alloc_tx_resources()
609 dev->n_tx_urbs, dev->tx_urb_size, dev); in lan78xx_alloc_tx_resources()
617 if (test_bit(EVENT_DEV_DISCONNECT, &dev->flags)) in lan78xx_read_reg()
618 return -ENODEV; in lan78xx_read_reg()
622 return -ENOMEM; in lan78xx_read_reg()
624 ret = usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0), in lan78xx_read_reg()
632 netdev_warn(dev->net, in lan78xx_read_reg()
647 if (test_bit(EVENT_DEV_DISCONNECT, &dev->flags)) in lan78xx_write_reg()
648 return -ENODEV; in lan78xx_write_reg()
652 return -ENOMEM; in lan78xx_write_reg()
657 ret = usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, 0), in lan78xx_write_reg()
663 netdev_warn(dev->net, in lan78xx_write_reg()
704 return -ENOMEM; in lan78xx_read_stats()
706 ret = usb_control_msg(dev->udev, in lan78xx_read_stats()
707 usb_rcvctrlpipe(dev->udev, 0), in lan78xx_read_stats()
723 netdev_warn(dev->net, in lan78xx_read_stats()
734 if ((struct1)->member < (dev_stats).saved.member) \
741 check_counter_rollover(stats, dev->stats, rx_fcs_errors); in lan78xx_check_stat_rollover()
742 check_counter_rollover(stats, dev->stats, rx_alignment_errors); in lan78xx_check_stat_rollover()
743 check_counter_rollover(stats, dev->stats, rx_fragment_errors); in lan78xx_check_stat_rollover()
744 check_counter_rollover(stats, dev->stats, rx_jabber_errors); in lan78xx_check_stat_rollover()
745 check_counter_rollover(stats, dev->stats, rx_undersize_frame_errors); in lan78xx_check_stat_rollover()
746 check_counter_rollover(stats, dev->stats, rx_oversize_frame_errors); in lan78xx_check_stat_rollover()
747 check_counter_rollover(stats, dev->stats, rx_dropped_frames); in lan78xx_check_stat_rollover()
748 check_counter_rollover(stats, dev->stats, rx_unicast_byte_count); in lan78xx_check_stat_rollover()
749 check_counter_rollover(stats, dev->stats, rx_broadcast_byte_count); in lan78xx_check_stat_rollover()
750 check_counter_rollover(stats, dev->stats, rx_multicast_byte_count); in lan78xx_check_stat_rollover()
751 check_counter_rollover(stats, dev->stats, rx_unicast_frames); in lan78xx_check_stat_rollover()
752 check_counter_rollover(stats, dev->stats, rx_broadcast_frames); in lan78xx_check_stat_rollover()
753 check_counter_rollover(stats, dev->stats, rx_multicast_frames); in lan78xx_check_stat_rollover()
754 check_counter_rollover(stats, dev->stats, rx_pause_frames); in lan78xx_check_stat_rollover()
755 check_counter_rollover(stats, dev->stats, rx_64_byte_frames); in lan78xx_check_stat_rollover()
756 check_counter_rollover(stats, dev->stats, rx_65_127_byte_frames); in lan78xx_check_stat_rollover()
757 check_counter_rollover(stats, dev->stats, rx_128_255_byte_frames); in lan78xx_check_stat_rollover()
758 check_counter_rollover(stats, dev->stats, rx_256_511_bytes_frames); in lan78xx_check_stat_rollover()
759 check_counter_rollover(stats, dev->stats, rx_512_1023_byte_frames); in lan78xx_check_stat_rollover()
760 check_counter_rollover(stats, dev->stats, rx_1024_1518_byte_frames); in lan78xx_check_stat_rollover()
761 check_counter_rollover(stats, dev->stats, rx_greater_1518_byte_frames); in lan78xx_check_stat_rollover()
762 check_counter_rollover(stats, dev->stats, eee_rx_lpi_transitions); in lan78xx_check_stat_rollover()
763 check_counter_rollover(stats, dev->stats, eee_rx_lpi_time); in lan78xx_check_stat_rollover()
764 check_counter_rollover(stats, dev->stats, tx_fcs_errors); in lan78xx_check_stat_rollover()
765 check_counter_rollover(stats, dev->stats, tx_excess_deferral_errors); in lan78xx_check_stat_rollover()
766 check_counter_rollover(stats, dev->stats, tx_carrier_errors); in lan78xx_check_stat_rollover()
767 check_counter_rollover(stats, dev->stats, tx_bad_byte_count); in lan78xx_check_stat_rollover()
768 check_counter_rollover(stats, dev->stats, tx_single_collisions); in lan78xx_check_stat_rollover()
769 check_counter_rollover(stats, dev->stats, tx_multiple_collisions); in lan78xx_check_stat_rollover()
770 check_counter_rollover(stats, dev->stats, tx_excessive_collision); in lan78xx_check_stat_rollover()
771 check_counter_rollover(stats, dev->stats, tx_late_collisions); in lan78xx_check_stat_rollover()
772 check_counter_rollover(stats, dev->stats, tx_unicast_byte_count); in lan78xx_check_stat_rollover()
773 check_counter_rollover(stats, dev->stats, tx_broadcast_byte_count); in lan78xx_check_stat_rollover()
774 check_counter_rollover(stats, dev->stats, tx_multicast_byte_count); in lan78xx_check_stat_rollover()
775 check_counter_rollover(stats, dev->stats, tx_unicast_frames); in lan78xx_check_stat_rollover()
776 check_counter_rollover(stats, dev->stats, tx_broadcast_frames); in lan78xx_check_stat_rollover()
777 check_counter_rollover(stats, dev->stats, tx_multicast_frames); in lan78xx_check_stat_rollover()
778 check_counter_rollover(stats, dev->stats, tx_pause_frames); in lan78xx_check_stat_rollover()
779 check_counter_rollover(stats, dev->stats, tx_64_byte_frames); in lan78xx_check_stat_rollover()
780 check_counter_rollover(stats, dev->stats, tx_65_127_byte_frames); in lan78xx_check_stat_rollover()
781 check_counter_rollover(stats, dev->stats, tx_128_255_byte_frames); in lan78xx_check_stat_rollover()
782 check_counter_rollover(stats, dev->stats, tx_256_511_bytes_frames); in lan78xx_check_stat_rollover()
783 check_counter_rollover(stats, dev->stats, tx_512_1023_byte_frames); in lan78xx_check_stat_rollover()
784 check_counter_rollover(stats, dev->stats, tx_1024_1518_byte_frames); in lan78xx_check_stat_rollover()
785 check_counter_rollover(stats, dev->stats, tx_greater_1518_byte_frames); in lan78xx_check_stat_rollover()
786 check_counter_rollover(stats, dev->stats, eee_tx_lpi_transitions); in lan78xx_check_stat_rollover()
787 check_counter_rollover(stats, dev->stats, eee_tx_lpi_time); in lan78xx_check_stat_rollover()
789 memcpy(&dev->stats.saved, stats, sizeof(struct lan78xx_statstage)); in lan78xx_check_stat_rollover()
799 if (usb_autopm_get_interface(dev->intf) < 0) in lan78xx_update_stats()
803 count = (u32 *)&dev->stats.rollover_count; in lan78xx_update_stats()
804 max = (u32 *)&dev->stats.rollover_max; in lan78xx_update_stats()
805 data = (u64 *)&dev->stats.curr_stat; in lan78xx_update_stats()
807 mutex_lock(&dev->stats.access_lock); in lan78xx_update_stats()
815 mutex_unlock(&dev->stats.access_lock); in lan78xx_update_stats()
817 usb_autopm_put_interface(dev->intf); in lan78xx_update_stats()
830 return -EIO; in lan78xx_phy_wait_not_busy()
836 return -EIO; in lan78xx_phy_wait_not_busy()
863 return -EIO; in lan78xx_wait_eeprom()
872 netdev_warn(dev->net, "EEPROM read operation timeout"); in lan78xx_wait_eeprom()
873 return -EIO; in lan78xx_wait_eeprom()
888 return -EIO; in lan78xx_eeprom_confirm_not_busy()
896 netdev_warn(dev->net, "EEPROM is busy"); in lan78xx_eeprom_confirm_not_busy()
897 return -EIO; in lan78xx_eeprom_confirm_not_busy()
913 if (dev->chipid == ID_REV_CHIP_ID_7800_) { in lan78xx_read_raw_eeprom()
927 retval = -EIO; in lan78xx_read_raw_eeprom()
937 retval = -EIO; in lan78xx_read_raw_eeprom()
947 if (dev->chipid == ID_REV_CHIP_ID_7800_) in lan78xx_read_raw_eeprom()
963 ret = -EINVAL; in lan78xx_read_eeprom()
981 if (dev->chipid == ID_REV_CHIP_ID_7800_) { in lan78xx_write_raw_eeprom()
994 retval = -EIO; in lan78xx_write_raw_eeprom()
1007 retval = -EIO; in lan78xx_write_raw_eeprom()
1016 retval = -EIO; in lan78xx_write_raw_eeprom()
1029 if (dev->chipid == ID_REV_CHIP_ID_7800_) in lan78xx_write_raw_eeprom()
1053 netdev_warn(dev->net, in lan78xx_read_raw_otp()
1055 return -EIO; in lan78xx_read_raw_otp()
1074 netdev_warn(dev->net, in lan78xx_read_raw_otp()
1076 return -EIO; in lan78xx_read_raw_otp()
1106 netdev_warn(dev->net, in lan78xx_write_raw_otp()
1108 return -EIO; in lan78xx_write_raw_otp()
1130 netdev_warn(dev->net, in lan78xx_write_raw_otp()
1132 return -EIO; in lan78xx_write_raw_otp()
1152 ret = -EINVAL; in lan78xx_read_otp()
1169 return -EIO; in lan78xx_dataport_wait_not_busy()
1177 netdev_warn(dev->net, "%s timed out", __func__); in lan78xx_dataport_wait_not_busy()
1179 return -EIO; in lan78xx_dataport_wait_not_busy()
1185 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_dataport_write()
1189 if (usb_autopm_get_interface(dev->intf) < 0) in lan78xx_dataport_write()
1192 mutex_lock(&pdata->dataport_mutex); in lan78xx_dataport_write()
1217 mutex_unlock(&pdata->dataport_mutex); in lan78xx_dataport_write()
1218 usb_autopm_put_interface(dev->intf); in lan78xx_dataport_write()
1233 pdata->pfilter_table[index][1] = temp; in lan78xx_set_addr_filter()
1237 pdata->pfilter_table[index][0] = temp; in lan78xx_set_addr_filter()
1251 struct lan78xx_net *dev = pdata->dev; in lan78xx_deferred_multicast_write()
1254 netif_dbg(dev, drv, dev->net, "deferred multicast write 0x%08x\n", in lan78xx_deferred_multicast_write()
1255 pdata->rfe_ctl); in lan78xx_deferred_multicast_write()
1258 DP_SEL_VHF_HASH_LEN, pdata->mchash_table); in lan78xx_deferred_multicast_write()
1263 pdata->pfilter_table[i][1]); in lan78xx_deferred_multicast_write()
1265 pdata->pfilter_table[i][0]); in lan78xx_deferred_multicast_write()
1268 lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); in lan78xx_deferred_multicast_write()
1274 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_set_multicast()
1278 spin_lock_irqsave(&pdata->rfe_ctl_lock, flags); in lan78xx_set_multicast()
1280 pdata->rfe_ctl &= ~(RFE_CTL_UCAST_EN_ | RFE_CTL_MCAST_EN_ | in lan78xx_set_multicast()
1284 pdata->mchash_table[i] = 0; in lan78xx_set_multicast()
1288 pdata->pfilter_table[i][0] = 0; in lan78xx_set_multicast()
1289 pdata->pfilter_table[i][1] = 0; in lan78xx_set_multicast()
1292 pdata->rfe_ctl |= RFE_CTL_BCAST_EN_; in lan78xx_set_multicast()
1294 if (dev->net->flags & IFF_PROMISC) { in lan78xx_set_multicast()
1295 netif_dbg(dev, drv, dev->net, "promiscuous mode enabled"); in lan78xx_set_multicast()
1296 pdata->rfe_ctl |= RFE_CTL_MCAST_EN_ | RFE_CTL_UCAST_EN_; in lan78xx_set_multicast()
1298 if (dev->net->flags & IFF_ALLMULTI) { in lan78xx_set_multicast()
1299 netif_dbg(dev, drv, dev->net, in lan78xx_set_multicast()
1301 pdata->rfe_ctl |= RFE_CTL_MCAST_EN_; in lan78xx_set_multicast()
1305 if (netdev_mc_count(dev->net)) { in lan78xx_set_multicast()
1309 netif_dbg(dev, drv, dev->net, "receive multicast hash filter"); in lan78xx_set_multicast()
1311 pdata->rfe_ctl |= RFE_CTL_DA_PERFECT_; in lan78xx_set_multicast()
1317 lan78xx_set_addr_filter(pdata, i, ha->addr); in lan78xx_set_multicast()
1319 u32 bitnum = lan78xx_hash(ha->addr); in lan78xx_set_multicast()
1321 pdata->mchash_table[bitnum / 32] |= in lan78xx_set_multicast()
1323 pdata->rfe_ctl |= RFE_CTL_MCAST_HASH_; in lan78xx_set_multicast()
1329 spin_unlock_irqrestore(&pdata->rfe_ctl_lock, flags); in lan78xx_set_multicast()
1332 schedule_work(&pdata->set_multicast); in lan78xx_set_multicast()
1341 if (dev->fc_autoneg) in lan78xx_update_flowcontrol()
1344 cap = dev->fc_request_control; in lan78xx_update_flowcontrol()
1352 if (dev->udev->speed == USB_SPEED_SUPER) in lan78xx_update_flowcontrol()
1354 else if (dev->udev->speed == USB_SPEED_HIGH) in lan78xx_update_flowcontrol()
1357 netif_dbg(dev, link, dev->net, "rx pause %s, tx pause %s", in lan78xx_update_flowcontrol()
1377 mutex_lock(&dev->phy_mutex); in lan78xx_mac_reset()
1410 ret = -ETIMEDOUT; in lan78xx_mac_reset()
1412 mutex_unlock(&dev->phy_mutex); in lan78xx_mac_reset()
1419 struct phy_device *phydev = dev->net->phydev; in lan78xx_link_reset()
1429 mutex_lock(&phydev->lock); in lan78xx_link_reset()
1431 link = phydev->link; in lan78xx_link_reset()
1432 mutex_unlock(&phydev->lock); in lan78xx_link_reset()
1434 if (!link && dev->link_on) { in lan78xx_link_reset()
1435 dev->link_on = false; in lan78xx_link_reset()
1442 del_timer(&dev->stat_monitor); in lan78xx_link_reset()
1443 } else if (link && !dev->link_on) { in lan78xx_link_reset()
1444 dev->link_on = true; in lan78xx_link_reset()
1448 if (dev->udev->speed == USB_SPEED_SUPER) { in lan78xx_link_reset()
1487 netif_dbg(dev, link, dev->net, in lan78xx_link_reset()
1496 if (!timer_pending(&dev->stat_monitor)) { in lan78xx_link_reset()
1497 dev->delta = 1; in lan78xx_link_reset()
1498 mod_timer(&dev->stat_monitor, in lan78xx_link_reset()
1505 napi_schedule(&dev->napi); in lan78xx_link_reset()
1519 set_bit(work, &dev->flags); in lan78xx_defer_kevent()
1520 if (!schedule_delayed_work(&dev->wq, 0)) in lan78xx_defer_kevent()
1521 netdev_err(dev->net, "kevent %d may have been dropped\n", work); in lan78xx_defer_kevent()
1528 if (urb->actual_length != 4) { in lan78xx_status()
1529 netdev_warn(dev->net, in lan78xx_status()
1530 "unexpected urb length %d", urb->actual_length); in lan78xx_status()
1534 intdata = get_unaligned_le32(urb->transfer_buffer); in lan78xx_status()
1537 netif_dbg(dev, link, dev->net, "PHY INTR: 0x%08x\n", intdata); in lan78xx_status()
1540 if (dev->domain_data.phyirq > 0) in lan78xx_status()
1541 generic_handle_irq_safe(dev->domain_data.phyirq); in lan78xx_status()
1543 netdev_warn(dev->net, in lan78xx_status()
1559 ret = usb_autopm_get_interface(dev->intf); in lan78xx_ethtool_get_eeprom()
1563 ee->magic = LAN78XX_EEPROM_MAGIC; in lan78xx_ethtool_get_eeprom()
1565 ret = lan78xx_read_raw_eeprom(dev, ee->offset, ee->len, data); in lan78xx_ethtool_get_eeprom()
1567 usb_autopm_put_interface(dev->intf); in lan78xx_ethtool_get_eeprom()
1578 ret = usb_autopm_get_interface(dev->intf); in lan78xx_ethtool_set_eeprom()
1585 if (ee->magic == LAN78XX_EEPROM_MAGIC) in lan78xx_ethtool_set_eeprom()
1586 ret = lan78xx_write_raw_eeprom(dev, ee->offset, ee->len, data); in lan78xx_ethtool_set_eeprom()
1587 else if ((ee->magic == LAN78XX_OTP_MAGIC) && in lan78xx_ethtool_set_eeprom()
1588 (ee->offset == 0) && in lan78xx_ethtool_set_eeprom()
1589 (ee->len == 512) && in lan78xx_ethtool_set_eeprom()
1591 ret = lan78xx_write_raw_otp(dev, ee->offset, ee->len, data); in lan78xx_ethtool_set_eeprom()
1593 usb_autopm_put_interface(dev->intf); in lan78xx_ethtool_set_eeprom()
1610 return -EOPNOTSUPP; in lan78xx_get_sset_count()
1620 mutex_lock(&dev->stats.access_lock); in lan78xx_get_stats()
1621 memcpy(data, &dev->stats.curr_stat, sizeof(dev->stats.curr_stat)); in lan78xx_get_stats()
1622 mutex_unlock(&dev->stats.access_lock); in lan78xx_get_stats()
1631 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_get_wol()
1633 if (usb_autopm_get_interface(dev->intf) < 0) in lan78xx_get_wol()
1638 wol->supported = 0; in lan78xx_get_wol()
1639 wol->wolopts = 0; in lan78xx_get_wol()
1642 wol->supported = WAKE_ALL; in lan78xx_get_wol()
1643 wol->wolopts = pdata->wol; in lan78xx_get_wol()
1645 wol->supported = 0; in lan78xx_get_wol()
1646 wol->wolopts = 0; in lan78xx_get_wol()
1650 usb_autopm_put_interface(dev->intf); in lan78xx_get_wol()
1657 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_set_wol()
1660 if (wol->wolopts & ~WAKE_ALL) in lan78xx_set_wol()
1661 return -EINVAL; in lan78xx_set_wol()
1663 ret = usb_autopm_get_interface(dev->intf); in lan78xx_set_wol()
1667 pdata->wol = wol->wolopts; in lan78xx_set_wol()
1669 device_set_wakeup_enable(&dev->udev->dev, (bool)wol->wolopts); in lan78xx_set_wol()
1671 phy_ethtool_set_wol(netdev->phydev, wol); in lan78xx_set_wol()
1673 usb_autopm_put_interface(dev->intf); in lan78xx_set_wol()
1681 struct phy_device *phydev = net->phydev; in lan78xx_get_eee()
1685 ret = usb_autopm_get_interface(dev->intf); in lan78xx_get_eee()
1695 edata->eee_enabled = true; in lan78xx_get_eee()
1696 edata->eee_active = !!(edata->advertised & in lan78xx_get_eee()
1697 edata->lp_advertised); in lan78xx_get_eee()
1698 edata->tx_lpi_enabled = true; in lan78xx_get_eee()
1701 edata->tx_lpi_timer = buf; in lan78xx_get_eee()
1703 edata->eee_enabled = false; in lan78xx_get_eee()
1704 edata->eee_active = false; in lan78xx_get_eee()
1705 edata->tx_lpi_enabled = false; in lan78xx_get_eee()
1706 edata->tx_lpi_timer = 0; in lan78xx_get_eee()
1711 usb_autopm_put_interface(dev->intf); in lan78xx_get_eee()
1722 ret = usb_autopm_get_interface(dev->intf); in lan78xx_set_eee()
1726 if (edata->eee_enabled) { in lan78xx_set_eee()
1731 phy_ethtool_set_eee(net->phydev, edata); in lan78xx_set_eee()
1733 buf = (u32)edata->tx_lpi_timer; in lan78xx_set_eee()
1741 usb_autopm_put_interface(dev->intf); in lan78xx_set_eee()
1750 mutex_lock(&net->phydev->lock); in lan78xx_get_link()
1751 phy_read_status(net->phydev); in lan78xx_get_link()
1752 link = net->phydev->link; in lan78xx_get_link()
1753 mutex_unlock(&net->phydev->lock); in lan78xx_get_link()
1763 strncpy(info->driver, DRIVER_NAME, sizeof(info->driver)); in lan78xx_get_drvinfo()
1764 usb_make_path(dev->udev, info->bus_info, sizeof(info->bus_info)); in lan78xx_get_drvinfo()
1771 return dev->msg_enable; in lan78xx_get_msglevel()
1778 dev->msg_enable = level; in lan78xx_set_msglevel()
1785 struct phy_device *phydev = net->phydev; in lan78xx_get_link_ksettings()
1788 ret = usb_autopm_get_interface(dev->intf); in lan78xx_get_link_ksettings()
1794 usb_autopm_put_interface(dev->intf); in lan78xx_get_link_ksettings()
1803 struct phy_device *phydev = net->phydev; in lan78xx_set_link_ksettings()
1807 ret = usb_autopm_get_interface(dev->intf); in lan78xx_set_link_ksettings()
1814 if (!cmd->base.autoneg) { in lan78xx_set_link_ksettings()
1822 usb_autopm_put_interface(dev->intf); in lan78xx_set_link_ksettings()
1831 struct phy_device *phydev = net->phydev; in lan78xx_get_pause()
1836 pause->autoneg = dev->fc_autoneg; in lan78xx_get_pause()
1838 if (dev->fc_request_control & FLOW_CTRL_TX) in lan78xx_get_pause()
1839 pause->tx_pause = 1; in lan78xx_get_pause()
1841 if (dev->fc_request_control & FLOW_CTRL_RX) in lan78xx_get_pause()
1842 pause->rx_pause = 1; in lan78xx_get_pause()
1849 struct phy_device *phydev = net->phydev; in lan78xx_set_pause()
1855 if (pause->autoneg && !ecmd.base.autoneg) { in lan78xx_set_pause()
1856 ret = -EINVAL; in lan78xx_set_pause()
1860 dev->fc_request_control = 0; in lan78xx_set_pause()
1861 if (pause->rx_pause) in lan78xx_set_pause()
1862 dev->fc_request_control |= FLOW_CTRL_RX; in lan78xx_set_pause()
1864 if (pause->tx_pause) in lan78xx_set_pause()
1865 dev->fc_request_control |= FLOW_CTRL_TX; in lan78xx_set_pause()
1868 __ETHTOOL_DECLARE_LINK_MODE_MASK(fc) = { 0, }; in lan78xx_set_pause()
1875 mii_adv = (u32)mii_advertise_flowctrl(dev->fc_request_control); in lan78xx_set_pause()
1876 mii_adv_to_linkmode_adv_t(fc, mii_adv); in lan78xx_set_pause()
1877 linkmode_or(ecmd.link_modes.advertising, fc, in lan78xx_set_pause()
1883 dev->fc_autoneg = pause->autoneg; in lan78xx_set_pause()
1892 if (!netdev->phydev) in lan78xx_get_regs_len()
1910 if (!netdev->phydev) in lan78xx_get_regs()
1915 data[i] = phy_read(netdev->phydev, j); in lan78xx_get_regs()
1959 if (!eth_platform_get_mac_address(&dev->udev->dev, addr)) { in lan78xx_init_mac_address()
1961 netif_dbg(dev, ifup, dev->net, in lan78xx_init_mac_address()
1969 netif_dbg(dev, ifup, dev->net, in lan78xx_init_mac_address()
1974 netif_dbg(dev, ifup, dev->net, in lan78xx_init_mac_address()
1989 eth_hw_addr_set(dev->net, addr); in lan78xx_init_mac_address()
1995 struct lan78xx_net *dev = bus->priv; in lan78xx_mdiobus_read()
1999 ret = usb_autopm_get_interface(dev->intf); in lan78xx_mdiobus_read()
2003 mutex_lock(&dev->phy_mutex); in lan78xx_mdiobus_read()
2023 mutex_unlock(&dev->phy_mutex); in lan78xx_mdiobus_read()
2024 usb_autopm_put_interface(dev->intf); in lan78xx_mdiobus_read()
2032 struct lan78xx_net *dev = bus->priv; in lan78xx_mdiobus_write()
2036 ret = usb_autopm_get_interface(dev->intf); in lan78xx_mdiobus_write()
2040 mutex_lock(&dev->phy_mutex); in lan78xx_mdiobus_write()
2059 mutex_unlock(&dev->phy_mutex); in lan78xx_mdiobus_write()
2060 usb_autopm_put_interface(dev->intf); in lan78xx_mdiobus_write()
2069 dev->mdiobus = mdiobus_alloc(); in lan78xx_mdio_init()
2070 if (!dev->mdiobus) { in lan78xx_mdio_init()
2071 netdev_err(dev->net, "can't allocate MDIO bus\n"); in lan78xx_mdio_init()
2072 return -ENOMEM; in lan78xx_mdio_init()
2075 dev->mdiobus->priv = (void *)dev; in lan78xx_mdio_init()
2076 dev->mdiobus->read = lan78xx_mdiobus_read; in lan78xx_mdio_init()
2077 dev->mdiobus->write = lan78xx_mdiobus_write; in lan78xx_mdio_init()
2078 dev->mdiobus->name = "lan78xx-mdiobus"; in lan78xx_mdio_init()
2079 dev->mdiobus->parent = &dev->udev->dev; in lan78xx_mdio_init()
2081 snprintf(dev->mdiobus->id, MII_BUS_ID_SIZE, "usb-%03d:%03d", in lan78xx_mdio_init()
2082 dev->udev->bus->busnum, dev->udev->devnum); in lan78xx_mdio_init()
2084 switch (dev->chipid) { in lan78xx_mdio_init()
2088 dev->mdiobus->phy_mask = ~(1 << 1); in lan78xx_mdio_init()
2092 dev->mdiobus->phy_mask = ~(0xFF); in lan78xx_mdio_init()
2096 node = of_get_child_by_name(dev->udev->dev.of_node, "mdio"); in lan78xx_mdio_init()
2097 ret = of_mdiobus_register(dev->mdiobus, node); in lan78xx_mdio_init()
2100 netdev_err(dev->net, "can't register MDIO bus\n"); in lan78xx_mdio_init()
2104 netdev_dbg(dev->net, "registered mdiobus bus %s\n", dev->mdiobus->id); in lan78xx_mdio_init()
2107 mdiobus_free(dev->mdiobus); in lan78xx_mdio_init()
2113 mdiobus_unregister(dev->mdiobus); in lan78xx_remove_mdio()
2114 mdiobus_free(dev->mdiobus); in lan78xx_remove_mdio()
2119 struct phy_device *phydev = net->phydev; in lan78xx_link_status_change()
2127 struct irq_domain_data *data = d->host_data; in irq_map()
2130 irq_set_chip_and_handler(irq, data->irqchip, data->irq_handler); in irq_map()
2151 data->irqenable &= ~BIT(irqd_to_hwirq(irqd)); in lan78xx_irq_mask()
2158 data->irqenable |= BIT(irqd_to_hwirq(irqd)); in lan78xx_irq_unmask()
2165 mutex_lock(&data->irq_lock); in lan78xx_irq_bus_lock()
2176 * are only two callbacks executed in non-atomic contex. in lan78xx_irq_bus_sync_unlock()
2179 if (buf != data->irqenable) in lan78xx_irq_bus_sync_unlock()
2180 lan78xx_write_reg(dev, INT_EP_CTL, data->irqenable); in lan78xx_irq_bus_sync_unlock()
2182 mutex_unlock(&data->irq_lock); in lan78xx_irq_bus_sync_unlock()
2186 .name = "lan78xx-irqs",
2201 of_node = dev->udev->dev.parent->of_node; in lan78xx_setup_irq_domain()
2203 mutex_init(&dev->domain_data.irq_lock); in lan78xx_setup_irq_domain()
2206 dev->domain_data.irqenable = buf; in lan78xx_setup_irq_domain()
2208 dev->domain_data.irqchip = &lan78xx_irqchip; in lan78xx_setup_irq_domain()
2209 dev->domain_data.irq_handler = handle_simple_irq; in lan78xx_setup_irq_domain()
2212 &chip_domain_ops, &dev->domain_data); in lan78xx_setup_irq_domain()
2220 ret = -EINVAL; in lan78xx_setup_irq_domain()
2223 ret = -EINVAL; in lan78xx_setup_irq_domain()
2226 dev->domain_data.irqdomain = irqdomain; in lan78xx_setup_irq_domain()
2227 dev->domain_data.phyirq = irqmap; in lan78xx_setup_irq_domain()
2234 if (dev->domain_data.phyirq > 0) { in lan78xx_remove_irq_domain()
2235 irq_dispose_mapping(dev->domain_data.phyirq); in lan78xx_remove_irq_domain()
2237 if (dev->domain_data.irqdomain) in lan78xx_remove_irq_domain()
2238 irq_domain_remove(dev->domain_data.irqdomain); in lan78xx_remove_irq_domain()
2240 dev->domain_data.phyirq = 0; in lan78xx_remove_irq_domain()
2241 dev->domain_data.irqdomain = NULL; in lan78xx_remove_irq_domain()
2247 struct lan78xx_net *dev = netdev_priv(phydev->attached_dev); in lan8835_fixup()
2262 dev->interface = PHY_INTERFACE_MODE_RGMII_TXID; in lan8835_fixup()
2269 struct lan78xx_net *dev = netdev_priv(phydev->attached_dev); in ksz9031rnx_fixup()
2279 dev->interface = PHY_INTERFACE_MODE_RGMII_RXID; in ksz9031rnx_fixup()
2295 phydev = phy_find_first(dev->mdiobus); in lan7801_phy_init()
2297 netdev_dbg(dev->net, "PHY Not Found!! Registering Fixed PHY\n"); in lan7801_phy_init()
2300 netdev_err(dev->net, "No PHY/fixed_PHY found\n"); in lan7801_phy_init()
2303 netdev_dbg(dev->net, "Registered FIXED PHY\n"); in lan7801_phy_init()
2304 dev->interface = PHY_INTERFACE_MODE_RGMII; in lan7801_phy_init()
2313 if (!phydev->drv) { in lan7801_phy_init()
2314 netdev_err(dev->net, "no PHY driver found\n"); in lan7801_phy_init()
2317 dev->interface = PHY_INTERFACE_MODE_RGMII; in lan7801_phy_init()
2318 /* external PHY fixup for KSZ9031RNX */ in lan7801_phy_init()
2322 netdev_err(dev->net, "Failed to register fixup for PHY_KSZ9031RNX\n"); in lan7801_phy_init()
2325 /* external PHY fixup for LAN8835 */ in lan7801_phy_init()
2329 netdev_err(dev->net, "Failed to register fixup for PHY_LAN8835\n"); in lan7801_phy_init()
2332 /* add more external PHY fixup here if needed */ in lan7801_phy_init()
2334 phydev->is_internal = false; in lan7801_phy_init()
2341 __ETHTOOL_DECLARE_LINK_MODE_MASK(fc) = { 0, }; in lan78xx_phy_init()
2346 switch (dev->chipid) { in lan78xx_phy_init()
2350 netdev_err(dev->net, "lan7801: PHY Init Failed"); in lan78xx_phy_init()
2351 return -EIO; in lan78xx_phy_init()
2357 phydev = phy_find_first(dev->mdiobus); in lan78xx_phy_init()
2359 netdev_err(dev->net, "no PHY found\n"); in lan78xx_phy_init()
2360 return -EIO; in lan78xx_phy_init()
2362 phydev->is_internal = true; in lan78xx_phy_init()
2363 dev->interface = PHY_INTERFACE_MODE_GMII; in lan78xx_phy_init()
2367 netdev_err(dev->net, "Unknown CHIP ID found\n"); in lan78xx_phy_init()
2368 return -EIO; in lan78xx_phy_init()
2372 if (dev->domain_data.phyirq > 0) in lan78xx_phy_init()
2373 phydev->irq = dev->domain_data.phyirq; in lan78xx_phy_init()
2375 phydev->irq = PHY_POLL; in lan78xx_phy_init()
2376 netdev_dbg(dev->net, "phydev->irq = %d\n", phydev->irq); in lan78xx_phy_init()
2379 phydev->mdix = ETH_TP_MDI_AUTO; in lan78xx_phy_init()
2381 ret = phy_connect_direct(dev->net, phydev, in lan78xx_phy_init()
2383 dev->interface); in lan78xx_phy_init()
2385 netdev_err(dev->net, "can't attach PHY to %s\n", in lan78xx_phy_init()
2386 dev->mdiobus->id); in lan78xx_phy_init()
2387 if (dev->chipid == ID_REV_CHIP_ID_7801_) { in lan78xx_phy_init()
2398 return -EIO; in lan78xx_phy_init()
2405 dev->fc_request_control = (FLOW_CTRL_RX | FLOW_CTRL_TX); in lan78xx_phy_init()
2407 phydev->advertising); in lan78xx_phy_init()
2409 phydev->advertising); in lan78xx_phy_init()
2410 mii_adv = (u32)mii_advertise_flowctrl(dev->fc_request_control); in lan78xx_phy_init()
2411 mii_adv_to_linkmode_adv_t(fc, mii_adv); in lan78xx_phy_init()
2412 linkmode_or(phydev->advertising, fc, phydev->advertising); in lan78xx_phy_init()
2414 if (phydev->mdio.dev.of_node) { in lan78xx_phy_init()
2418 len = of_property_count_elems_of_size(phydev->mdio.dev.of_node, in lan78xx_phy_init()
2419 "microchip,led-modes", in lan78xx_phy_init()
2438 dev->fc_autoneg = phydev->autoneg; in lan78xx_phy_init()
2477 spin_lock_irqsave(&q->lock, flags); in unlink_urbs()
2484 entry = (struct skb_data *)skb->cb; in unlink_urbs()
2485 if (entry->state != unlink_start) in unlink_urbs()
2490 entry->state = unlink_start; in unlink_urbs()
2491 urb = entry->urb; in unlink_urbs()
2495 * use-after-free problem inside usb_unlink_urb since in unlink_urbs()
2500 spin_unlock_irqrestore(&q->lock, flags); in unlink_urbs()
2501 /* during some PM-driven resume scenarios, in unlink_urbs()
2505 if (ret != -EINPROGRESS && ret != 0) in unlink_urbs()
2506 netdev_dbg(dev->net, "unlink urb err, %d\n", ret); in unlink_urbs()
2510 spin_lock_irqsave(&q->lock, flags); in unlink_urbs()
2512 spin_unlock_irqrestore(&q->lock, flags); in unlink_urbs()
2522 /* no second zero-length packet read wanted after mtu-sized packets */ in lan78xx_change_mtu()
2523 if ((max_frame_len % dev->maxpacket) == 0) in lan78xx_change_mtu()
2524 return -EDOM; in lan78xx_change_mtu()
2526 ret = usb_autopm_get_interface(dev->intf); in lan78xx_change_mtu()
2532 netdev->mtu = new_mtu; in lan78xx_change_mtu()
2534 usb_autopm_put_interface(dev->intf); in lan78xx_change_mtu()
2546 return -EBUSY; in lan78xx_set_mac_addr()
2548 if (!is_valid_ether_addr(addr->sa_data)) in lan78xx_set_mac_addr()
2549 return -EADDRNOTAVAIL; in lan78xx_set_mac_addr()
2551 eth_hw_addr_set(netdev, addr->sa_data); in lan78xx_set_mac_addr()
2553 addr_lo = netdev->dev_addr[0] | in lan78xx_set_mac_addr()
2554 netdev->dev_addr[1] << 8 | in lan78xx_set_mac_addr()
2555 netdev->dev_addr[2] << 16 | in lan78xx_set_mac_addr()
2556 netdev->dev_addr[3] << 24; in lan78xx_set_mac_addr()
2557 addr_hi = netdev->dev_addr[4] | in lan78xx_set_mac_addr()
2558 netdev->dev_addr[5] << 8; in lan78xx_set_mac_addr()
2575 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_set_features()
2578 spin_lock_irqsave(&pdata->rfe_ctl_lock, flags); in lan78xx_set_features()
2581 pdata->rfe_ctl |= RFE_CTL_TCPUDP_COE_ | RFE_CTL_IP_COE_; in lan78xx_set_features()
2582 pdata->rfe_ctl |= RFE_CTL_ICMP_COE_ | RFE_CTL_IGMP_COE_; in lan78xx_set_features()
2584 pdata->rfe_ctl &= ~(RFE_CTL_TCPUDP_COE_ | RFE_CTL_IP_COE_); in lan78xx_set_features()
2585 pdata->rfe_ctl &= ~(RFE_CTL_ICMP_COE_ | RFE_CTL_IGMP_COE_); in lan78xx_set_features()
2589 pdata->rfe_ctl |= RFE_CTL_VLAN_STRIP_; in lan78xx_set_features()
2591 pdata->rfe_ctl &= ~RFE_CTL_VLAN_STRIP_; in lan78xx_set_features()
2594 pdata->rfe_ctl |= RFE_CTL_VLAN_FILTER_; in lan78xx_set_features()
2596 pdata->rfe_ctl &= ~RFE_CTL_VLAN_FILTER_; in lan78xx_set_features()
2598 spin_unlock_irqrestore(&pdata->rfe_ctl_lock, flags); in lan78xx_set_features()
2600 lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); in lan78xx_set_features()
2609 struct lan78xx_net *dev = pdata->dev; in lan78xx_deferred_vlan_write()
2612 DP_SEL_VHF_VLAN_LEN, pdata->vlan_table); in lan78xx_deferred_vlan_write()
2619 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_vlan_rx_add_vid()
2626 pdata->vlan_table[vid_dword_index] |= (1 << vid_bit_index); in lan78xx_vlan_rx_add_vid()
2629 schedule_work(&pdata->set_vlan); in lan78xx_vlan_rx_add_vid()
2638 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_vlan_rx_kill_vid()
2645 pdata->vlan_table[vid_dword_index] &= ~(1 << vid_bit_index); in lan78xx_vlan_rx_kill_vid()
2648 schedule_work(&pdata->set_vlan); in lan78xx_vlan_rx_kill_vid()
2696 switch (dev->udev->speed) { in lan78xx_urb_config_init()
2698 dev->rx_urb_size = RX_SS_URB_SIZE; in lan78xx_urb_config_init()
2699 dev->tx_urb_size = TX_SS_URB_SIZE; in lan78xx_urb_config_init()
2700 dev->n_rx_urbs = RX_SS_URB_NUM; in lan78xx_urb_config_init()
2701 dev->n_tx_urbs = TX_SS_URB_NUM; in lan78xx_urb_config_init()
2702 dev->bulk_in_delay = SS_BULK_IN_DELAY; in lan78xx_urb_config_init()
2703 dev->burst_cap = SS_BURST_CAP_SIZE / SS_USB_PKT_SIZE; in lan78xx_urb_config_init()
2706 dev->rx_urb_size = RX_HS_URB_SIZE; in lan78xx_urb_config_init()
2707 dev->tx_urb_size = TX_HS_URB_SIZE; in lan78xx_urb_config_init()
2708 dev->n_rx_urbs = RX_HS_URB_NUM; in lan78xx_urb_config_init()
2709 dev->n_tx_urbs = TX_HS_URB_NUM; in lan78xx_urb_config_init()
2710 dev->bulk_in_delay = HS_BULK_IN_DELAY; in lan78xx_urb_config_init()
2711 dev->burst_cap = HS_BURST_CAP_SIZE / HS_USB_PKT_SIZE; in lan78xx_urb_config_init()
2714 dev->rx_urb_size = RX_FS_URB_SIZE; in lan78xx_urb_config_init()
2715 dev->tx_urb_size = TX_FS_URB_SIZE; in lan78xx_urb_config_init()
2716 dev->n_rx_urbs = RX_FS_URB_NUM; in lan78xx_urb_config_init()
2717 dev->n_tx_urbs = TX_FS_URB_NUM; in lan78xx_urb_config_init()
2718 dev->bulk_in_delay = FS_BULK_IN_DELAY; in lan78xx_urb_config_init()
2719 dev->burst_cap = FS_BURST_CAP_SIZE / FS_USB_PKT_SIZE; in lan78xx_urb_config_init()
2722 netdev_warn(dev->net, "USB bus speed not supported\n"); in lan78xx_urb_config_init()
2723 result = -EIO; in lan78xx_urb_config_init()
2770 ret = stopped ? 0 : -ETIME; in lan78xx_stop_hw()
2784 netif_dbg(dev, drv, dev->net, "start tx path"); in lan78xx_start_tx_path()
2805 netif_dbg(dev, drv, dev->net, "stop tx path"); in lan78xx_stop_tx_path()
2834 netif_dbg(dev, drv, dev->net, "start rx path"); in lan78xx_start_rx_path()
2855 netif_dbg(dev, drv, dev->net, "stop rx path"); in lan78xx_stop_rx_path()
2882 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_reset()
2906 netdev_warn(dev->net, in lan78xx_reset()
2908 ret = -ETIMEDOUT; in lan78xx_reset()
2920 dev->chipid = (buf & ID_REV_CHIP_ID_MASK_) >> 16; in lan78xx_reset()
2921 dev->chiprev = buf & ID_REV_CHIP_REV_MASK_; in lan78xx_reset()
2937 ret = lan78xx_write_reg(dev, BURST_CAP, dev->burst_cap); in lan78xx_reset()
2941 ret = lan78xx_write_reg(dev, BULK_IN_DLY, dev->bulk_in_delay); in lan78xx_reset()
2966 buf = (MAX_RX_FIFO_SIZE - 512) / 512; in lan78xx_reset()
2972 buf = (MAX_TX_FIFO_SIZE - 512) / 512; in lan78xx_reset()
2991 ret = lan78xx_read_reg(dev, RFE_CTL, &pdata->rfe_ctl); in lan78xx_reset()
2995 pdata->rfe_ctl |= RFE_CTL_BCAST_EN_ | RFE_CTL_DA_PERFECT_; in lan78xx_reset()
2997 ret = lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); in lan78xx_reset()
3002 ret = lan78xx_set_features(dev->net, dev->net->features); in lan78xx_reset()
3006 lan78xx_set_multicast(dev->net); in lan78xx_reset()
3027 netdev_warn(dev->net, "timeout waiting for PHY Reset"); in lan78xx_reset()
3028 ret = -ETIMEDOUT; in lan78xx_reset()
3038 if (dev->chipid == ID_REV_CHIP_ID_7801_) in lan78xx_reset()
3041 if (dev->chipid == ID_REV_CHIP_ID_7800_ || in lan78xx_reset()
3042 dev->chipid == ID_REV_CHIP_ID_7850_) { in lan78xx_reset()
3046 netdev_info(dev->net, "No External EEPROM. Setting MAC Speed\n"); in lan78xx_reset()
3055 RX_MAX_FRAME_LEN(dev->net->mtu)); in lan78xx_reset()
3065 /* initialize for stats update in lan78xx_init_stats()
3068 p = (u32 *)&dev->stats.rollover_max; in lan78xx_init_stats()
3069 for (i = 0; i < (sizeof(dev->stats.rollover_max) / (sizeof(u32))); i++) in lan78xx_init_stats()
3072 dev->stats.rollover_max.rx_unicast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
3073 dev->stats.rollover_max.rx_broadcast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
3074 dev->stats.rollover_max.rx_multicast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
3075 dev->stats.rollover_max.eee_rx_lpi_transitions = 0xFFFFFFFF; in lan78xx_init_stats()
3076 dev->stats.rollover_max.eee_rx_lpi_time = 0xFFFFFFFF; in lan78xx_init_stats()
3077 dev->stats.rollover_max.tx_unicast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
3078 dev->stats.rollover_max.tx_broadcast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
3079 dev->stats.rollover_max.tx_multicast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
3080 dev->stats.rollover_max.eee_tx_lpi_transitions = 0xFFFFFFFF; in lan78xx_init_stats()
3081 dev->stats.rollover_max.eee_tx_lpi_time = 0xFFFFFFFF; in lan78xx_init_stats()
3083 set_bit(EVENT_STAT_UPDATE, &dev->flags); in lan78xx_init_stats()
3091 netif_dbg(dev, ifup, dev->net, "open device"); in lan78xx_open()
3093 ret = usb_autopm_get_interface(dev->intf); in lan78xx_open()
3097 mutex_lock(&dev->dev_mutex); in lan78xx_open()
3099 phy_start(net->phydev); in lan78xx_open()
3101 netif_dbg(dev, ifup, dev->net, "phy initialised successfully"); in lan78xx_open()
3104 if (dev->urb_intr) { in lan78xx_open()
3105 ret = usb_submit_urb(dev->urb_intr, GFP_KERNEL); in lan78xx_open()
3107 netif_err(dev, ifup, dev->net, in lan78xx_open()
3129 set_bit(EVENT_DEV_OPEN, &dev->flags); in lan78xx_open()
3133 dev->link_on = false; in lan78xx_open()
3135 napi_enable(&dev->napi); in lan78xx_open()
3139 mutex_unlock(&dev->dev_mutex); in lan78xx_open()
3142 usb_autopm_put_interface(dev->intf); in lan78xx_open()
3156 dev->wait = &unlink_wakeup; in lan78xx_terminate_urbs()
3157 temp = unlink_urbs(dev, &dev->txq) + unlink_urbs(dev, &dev->rxq); in lan78xx_terminate_urbs()
3160 while (!skb_queue_empty(&dev->rxq) || in lan78xx_terminate_urbs()
3161 !skb_queue_empty(&dev->txq)) { in lan78xx_terminate_urbs()
3164 netif_dbg(dev, ifdown, dev->net, in lan78xx_terminate_urbs()
3168 dev->wait = NULL; in lan78xx_terminate_urbs()
3173 while (!skb_queue_empty(&dev->rxq_done)) { in lan78xx_terminate_urbs()
3174 struct sk_buff *skb = skb_dequeue(&dev->rxq_done); in lan78xx_terminate_urbs()
3179 skb_queue_purge(&dev->rxq_overflow); in lan78xx_terminate_urbs()
3180 skb_queue_purge(&dev->txq_pend); in lan78xx_terminate_urbs()
3187 netif_dbg(dev, ifup, dev->net, "stop device"); in lan78xx_stop()
3189 mutex_lock(&dev->dev_mutex); in lan78xx_stop()
3191 if (timer_pending(&dev->stat_monitor)) in lan78xx_stop()
3192 del_timer_sync(&dev->stat_monitor); in lan78xx_stop()
3194 clear_bit(EVENT_DEV_OPEN, &dev->flags); in lan78xx_stop()
3196 napi_disable(&dev->napi); in lan78xx_stop()
3200 netif_info(dev, ifdown, dev->net, in lan78xx_stop()
3202 net->stats.rx_packets, net->stats.tx_packets, in lan78xx_stop()
3203 net->stats.rx_errors, net->stats.tx_errors); in lan78xx_stop()
3209 if (net->phydev) in lan78xx_stop()
3210 phy_stop(net->phydev); in lan78xx_stop()
3212 usb_kill_urb(dev->urb_intr); in lan78xx_stop()
3218 clear_bit(EVENT_TX_HALT, &dev->flags); in lan78xx_stop()
3219 clear_bit(EVENT_RX_HALT, &dev->flags); in lan78xx_stop()
3220 clear_bit(EVENT_LINK_RESET, &dev->flags); in lan78xx_stop()
3221 clear_bit(EVENT_STAT_UPDATE, &dev->flags); in lan78xx_stop()
3223 cancel_delayed_work_sync(&dev->wq); in lan78xx_stop()
3225 usb_autopm_put_interface(dev->intf); in lan78xx_stop()
3227 mutex_unlock(&dev->dev_mutex); in lan78xx_stop()
3237 struct skb_data *entry = (struct skb_data *)skb->cb; in defer_bh()
3239 spin_lock_irqsave(&list->lock, flags); in defer_bh()
3240 old_state = entry->state; in defer_bh()
3241 entry->state = state; in defer_bh()
3244 spin_unlock(&list->lock); in defer_bh()
3245 spin_lock(&dev->rxq_done.lock); in defer_bh()
3247 __skb_queue_tail(&dev->rxq_done, skb); in defer_bh()
3248 if (skb_queue_len(&dev->rxq_done) == 1) in defer_bh()
3249 napi_schedule(&dev->napi); in defer_bh()
3251 spin_unlock_irqrestore(&dev->rxq_done.lock, flags); in defer_bh()
3258 struct sk_buff *skb = (struct sk_buff *)urb->context; in tx_complete()
3259 struct skb_data *entry = (struct skb_data *)skb->cb; in tx_complete()
3260 struct lan78xx_net *dev = entry->dev; in tx_complete()
3262 if (urb->status == 0) { in tx_complete()
3263 dev->net->stats.tx_packets += entry->num_of_packet; in tx_complete()
3264 dev->net->stats.tx_bytes += entry->length; in tx_complete()
3266 dev->net->stats.tx_errors += entry->num_of_packet; in tx_complete()
3268 switch (urb->status) { in tx_complete()
3269 case -EPIPE: in tx_complete()
3273 /* software-driven interface shutdown */ in tx_complete()
3274 case -ECONNRESET: in tx_complete()
3275 case -ESHUTDOWN: in tx_complete()
3276 netif_dbg(dev, tx_err, dev->net, in tx_complete()
3278 entry->urb->status); in tx_complete()
3281 case -EPROTO: in tx_complete()
3282 case -ETIME: in tx_complete()
3283 case -EILSEQ: in tx_complete()
3284 netif_stop_queue(dev->net); in tx_complete()
3285 netif_dbg(dev, tx_err, dev->net, in tx_complete()
3287 entry->urb->status); in tx_complete()
3290 netif_dbg(dev, tx_err, dev->net, in tx_complete()
3292 entry->urb->status); in tx_complete()
3297 usb_autopm_put_interface_async(dev->intf); in tx_complete()
3299 skb_unlink(skb, &dev->txq); in tx_complete()
3303 /* Re-schedule NAPI if Tx data pending but no URBs in progress. in tx_complete()
3305 if (skb_queue_empty(&dev->txq) && in tx_complete()
3306 !skb_queue_empty(&dev->txq_pend)) in tx_complete()
3307 napi_schedule(&dev->napi); in tx_complete()
3313 struct skb_data *entry = (struct skb_data *)newsk->cb; in lan78xx_queue_skb()
3316 entry->state = state; in lan78xx_queue_skb()
3321 return skb_queue_len(&dev->txq_free) * dev->tx_urb_size; in lan78xx_tx_urb_space()
3326 return dev->tx_pend_data_len; in lan78xx_tx_pend_data_len()
3335 spin_lock_irqsave(&dev->txq_pend.lock, flags); in lan78xx_tx_pend_skb_add()
3337 __skb_queue_tail(&dev->txq_pend, skb); in lan78xx_tx_pend_skb_add()
3339 dev->tx_pend_data_len += skb->len; in lan78xx_tx_pend_skb_add()
3340 *tx_pend_data_len = dev->tx_pend_data_len; in lan78xx_tx_pend_skb_add()
3342 spin_unlock_irqrestore(&dev->txq_pend.lock, flags); in lan78xx_tx_pend_skb_add()
3351 spin_lock_irqsave(&dev->txq_pend.lock, flags); in lan78xx_tx_pend_skb_head_add()
3353 __skb_queue_head(&dev->txq_pend, skb); in lan78xx_tx_pend_skb_head_add()
3355 dev->tx_pend_data_len += skb->len; in lan78xx_tx_pend_skb_head_add()
3356 *tx_pend_data_len = dev->tx_pend_data_len; in lan78xx_tx_pend_skb_head_add()
3358 spin_unlock_irqrestore(&dev->txq_pend.lock, flags); in lan78xx_tx_pend_skb_head_add()
3367 spin_lock_irqsave(&dev->txq_pend.lock, flags); in lan78xx_tx_pend_skb_get()
3369 *skb = __skb_dequeue(&dev->txq_pend); in lan78xx_tx_pend_skb_get()
3371 dev->tx_pend_data_len -= (*skb)->len; in lan78xx_tx_pend_skb_get()
3372 *tx_pend_data_len = dev->tx_pend_data_len; in lan78xx_tx_pend_skb_get()
3374 spin_unlock_irqrestore(&dev->txq_pend.lock, flags); in lan78xx_tx_pend_skb_get()
3383 if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) in lan78xx_start_xmit()
3384 schedule_delayed_work(&dev->wq, 0); in lan78xx_start_xmit()
3392 if (skb_queue_empty(&dev->txq)) in lan78xx_start_xmit()
3393 napi_schedule(&dev->napi); in lan78xx_start_xmit()
3401 netif_dbg(dev, hw, dev->net, "tx data len: %u, urb space %u", in lan78xx_start_xmit()
3406 if (!skb_queue_empty(&dev->txq_free)) in lan78xx_start_xmit()
3407 napi_schedule(&dev->napi); in lan78xx_start_xmit()
3419 dev->data[0] = (unsigned long)kzalloc(sizeof(*pdata), GFP_KERNEL); in lan78xx_bind()
3421 pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_bind()
3423 netdev_warn(dev->net, "Unable to allocate lan78xx_priv"); in lan78xx_bind()
3424 return -ENOMEM; in lan78xx_bind()
3427 pdata->dev = dev; in lan78xx_bind()
3429 spin_lock_init(&pdata->rfe_ctl_lock); in lan78xx_bind()
3430 mutex_init(&pdata->dataport_mutex); in lan78xx_bind()
3432 INIT_WORK(&pdata->set_multicast, lan78xx_deferred_multicast_write); in lan78xx_bind()
3435 pdata->vlan_table[i] = 0; in lan78xx_bind()
3437 INIT_WORK(&pdata->set_vlan, lan78xx_deferred_vlan_write); in lan78xx_bind()
3439 dev->net->features = 0; in lan78xx_bind()
3442 dev->net->features |= NETIF_F_HW_CSUM; in lan78xx_bind()
3445 dev->net->features |= NETIF_F_RXCSUM; in lan78xx_bind()
3448 dev->net->features |= NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_SG; in lan78xx_bind()
3451 dev->net->features |= NETIF_F_HW_VLAN_CTAG_RX; in lan78xx_bind()
3454 dev->net->features |= NETIF_F_HW_VLAN_CTAG_FILTER; in lan78xx_bind()
3456 dev->net->hw_features = dev->net->features; in lan78xx_bind()
3460 netdev_warn(dev->net, in lan78xx_bind()
3468 netdev_warn(dev->net, "Registers INIT FAILED...."); in lan78xx_bind()
3474 netdev_warn(dev->net, "MDIO INIT FAILED....."); in lan78xx_bind()
3478 dev->net->flags |= IFF_MULTICAST; in lan78xx_bind()
3480 pdata->wol = WAKE_MAGIC; in lan78xx_bind()
3488 netdev_warn(dev->net, "Bind routine FAILED"); in lan78xx_bind()
3489 cancel_work_sync(&pdata->set_multicast); in lan78xx_bind()
3490 cancel_work_sync(&pdata->set_vlan); in lan78xx_bind()
3497 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_unbind()
3504 cancel_work_sync(&pdata->set_multicast); in lan78xx_unbind()
3505 cancel_work_sync(&pdata->set_vlan); in lan78xx_unbind()
3506 netif_dbg(dev, ifdown, dev->net, "free pdata"); in lan78xx_unbind()
3509 dev->data[0] = 0; in lan78xx_unbind()
3520 if (!(dev->net->features & NETIF_F_RXCSUM) || in lan78xx_rx_csum_offload()
3523 !(dev->net->features & NETIF_F_HW_VLAN_CTAG_RX))) { in lan78xx_rx_csum_offload()
3524 skb->ip_summed = CHECKSUM_NONE; in lan78xx_rx_csum_offload()
3526 skb->csum = ntohs((u16)(rx_cmd_b >> RX_CMD_B_CSUM_SHIFT_)); in lan78xx_rx_csum_offload()
3527 skb->ip_summed = CHECKSUM_COMPLETE; in lan78xx_rx_csum_offload()
3535 if ((dev->net->features & NETIF_F_HW_VLAN_CTAG_RX) && in lan78xx_rx_vlan_offload()
3543 dev->net->stats.rx_packets++; in lan78xx_skb_return()
3544 dev->net->stats.rx_bytes += skb->len; in lan78xx_skb_return()
3546 skb->protocol = eth_type_trans(skb, dev->net); in lan78xx_skb_return()
3548 netif_dbg(dev, rx_status, dev->net, "< rx, len %zu, type 0x%x\n", in lan78xx_skb_return()
3549 skb->len + sizeof(struct ethhdr), skb->protocol); in lan78xx_skb_return()
3550 memset(skb->cb, 0, sizeof(struct skb_data)); in lan78xx_skb_return()
3555 napi_gro_receive(&dev->napi, skb); in lan78xx_skb_return()
3561 if (skb->len < RX_SKB_MIN_LEN) in lan78xx_rx()
3567 while (skb->len > 0) { in lan78xx_rx()
3572 rx_cmd_a = get_unaligned_le32(skb->data); in lan78xx_rx()
3575 rx_cmd_b = get_unaligned_le32(skb->data); in lan78xx_rx()
3578 rx_cmd_c = get_unaligned_le16(skb->data); in lan78xx_rx()
3581 packet = skb->data; in lan78xx_rx()
3585 align_count = (4 - ((size + RXW_PADDING) % 4)) % 4; in lan78xx_rx()
3587 if (unlikely(size > skb->len)) { in lan78xx_rx()
3588 netif_dbg(dev, rx_err, dev->net, in lan78xx_rx()
3595 netif_dbg(dev, rx_err, dev->net, in lan78xx_rx()
3602 netif_dbg(dev, rx_err, dev->net, in lan78xx_rx()
3608 frame_len = size - ETH_FCS_LEN; in lan78xx_rx()
3610 skb2 = napi_alloc_skb(&dev->napi, frame_len); in lan78xx_rx()
3614 memcpy(skb2->data, packet, frame_len); in lan78xx_rx()
3630 skb_queue_tail(&dev->rxq_overflow, skb2); in lan78xx_rx()
3637 if (skb->len) in lan78xx_rx()
3648 netif_dbg(dev, rx_err, dev->net, "drop\n"); in rx_process()
3649 dev->net->stats.rx_errors++; in rx_process()
3655 struct sk_buff *skb = (struct sk_buff *)urb->context; in rx_complete()
3656 struct skb_data *entry = (struct skb_data *)skb->cb; in rx_complete()
3657 struct lan78xx_net *dev = entry->dev; in rx_complete()
3658 int urb_status = urb->status; in rx_complete()
3661 netif_dbg(dev, rx_status, dev->net, in rx_complete()
3662 "rx done: status %d", urb->status); in rx_complete()
3664 skb_put(skb, urb->actual_length); in rx_complete()
3667 if (urb != entry->urb) in rx_complete()
3668 netif_warn(dev, rx_err, dev->net, "URB pointer mismatch"); in rx_complete()
3672 if (skb->len < RX_SKB_MIN_LEN) { in rx_complete()
3674 dev->net->stats.rx_errors++; in rx_complete()
3675 dev->net->stats.rx_length_errors++; in rx_complete()
3676 netif_dbg(dev, rx_err, dev->net, in rx_complete()
3677 "rx length %d\n", skb->len); in rx_complete()
3679 usb_mark_last_busy(dev->udev); in rx_complete()
3681 case -EPIPE: in rx_complete()
3682 dev->net->stats.rx_errors++; in rx_complete()
3685 case -ECONNRESET: /* async unlink */ in rx_complete()
3686 case -ESHUTDOWN: /* hardware gone */ in rx_complete()
3687 netif_dbg(dev, ifdown, dev->net, in rx_complete()
3691 case -EPROTO: in rx_complete()
3692 case -ETIME: in rx_complete()
3693 case -EILSEQ: in rx_complete()
3694 dev->net->stats.rx_errors++; in rx_complete()
3699 case -EOVERFLOW: in rx_complete()
3700 dev->net->stats.rx_over_errors++; in rx_complete()
3705 dev->net->stats.rx_errors++; in rx_complete()
3706 netif_dbg(dev, rx_err, dev->net, "rx status %d\n", urb_status); in rx_complete()
3710 state = defer_bh(dev, skb, &dev->rxq, state); in rx_complete()
3715 struct skb_data *entry = (struct skb_data *)skb->cb; in rx_submit()
3716 size_t size = dev->rx_urb_size; in rx_submit()
3717 struct urb *urb = entry->urb; in rx_submit()
3721 usb_fill_bulk_urb(urb, dev->udev, dev->pipe_in, in rx_submit()
3722 skb->data, size, rx_complete, skb); in rx_submit()
3724 spin_lock_irqsave(&dev->rxq.lock, lockflags); in rx_submit()
3726 if (netif_device_present(dev->net) && in rx_submit()
3727 netif_running(dev->net) && in rx_submit()
3728 !test_bit(EVENT_RX_HALT, &dev->flags) && in rx_submit()
3729 !test_bit(EVENT_DEV_ASLEEP, &dev->flags)) { in rx_submit()
3733 lan78xx_queue_skb(&dev->rxq, skb, rx_start); in rx_submit()
3735 case -EPIPE: in rx_submit()
3738 case -ENODEV: in rx_submit()
3739 case -ENOENT: in rx_submit()
3740 netif_dbg(dev, ifdown, dev->net, "device gone\n"); in rx_submit()
3741 netif_device_detach(dev->net); in rx_submit()
3743 case -EHOSTUNREACH: in rx_submit()
3744 ret = -ENOLINK; in rx_submit()
3745 napi_schedule(&dev->napi); in rx_submit()
3748 netif_dbg(dev, rx_err, dev->net, in rx_submit()
3750 napi_schedule(&dev->napi); in rx_submit()
3754 netif_dbg(dev, ifdown, dev->net, "rx: stopped\n"); in rx_submit()
3755 ret = -ENOLINK; in rx_submit()
3757 spin_unlock_irqrestore(&dev->rxq.lock, lockflags); in rx_submit()
3782 rx_buf->data = rx_buf->head; in lan78xx_rx_urb_resubmit()
3784 rx_buf->len = 0; in lan78xx_rx_urb_resubmit()
3785 rx_buf->data_len = 0; in lan78xx_rx_urb_resubmit()
3795 tx_cmd_a = (u32)(skb->len & TX_CMD_A_LEN_MASK_) | TX_CMD_A_FCS_; in lan78xx_fill_tx_cmd_words()
3797 if (skb->ip_summed == CHECKSUM_PARTIAL) in lan78xx_fill_tx_cmd_words()
3802 u16 mss = max(skb_shinfo(skb)->gso_size, TX_CMD_B_MSS_MIN_); in lan78xx_fill_tx_cmd_words()
3821 struct skb_data *entry = (struct skb_data *)tx_buf->cb; in lan78xx_tx_buf_fill()
3822 int remain = dev->tx_urb_size; in lan78xx_tx_buf_fill()
3823 u8 *tx_data = tx_buf->data; in lan78xx_tx_buf_fill()
3826 entry->num_of_packet = 0; in lan78xx_tx_buf_fill()
3827 entry->length = 0; in lan78xx_tx_buf_fill()
3845 align_bytes = (TX_ALIGNMENT - (urb_len % TX_ALIGNMENT)) % in lan78xx_tx_buf_fill()
3847 len = align_bytes + TX_CMD_LEN + skb->len; in lan78xx_tx_buf_fill()
3858 len = skb->len; in lan78xx_tx_buf_fill()
3860 struct net_device_stats *stats = &dev->net->stats; in lan78xx_tx_buf_fill()
3862 stats->tx_dropped++; in lan78xx_tx_buf_fill()
3864 tx_data -= TX_CMD_LEN; in lan78xx_tx_buf_fill()
3869 entry->length += len; in lan78xx_tx_buf_fill()
3870 entry->num_of_packet += skb_shinfo(skb)->gso_segs ?: 1; in lan78xx_tx_buf_fill()
3874 urb_len = (u32)(tx_data - (u8 *)tx_buf->data); in lan78xx_tx_buf_fill()
3876 remain = dev->tx_urb_size - urb_len; in lan78xx_tx_buf_fill()
3890 netif_tx_lock(dev->net); in lan78xx_tx_bh()
3891 if (netif_queue_stopped(dev->net)) { in lan78xx_tx_bh()
3893 netif_wake_queue(dev->net); in lan78xx_tx_bh()
3895 netif_tx_unlock(dev->net); in lan78xx_tx_bh()
3906 if (skb_queue_empty(&dev->txq_pend)) in lan78xx_tx_bh()
3915 spin_lock_irqsave(&dev->txq.lock, flags); in lan78xx_tx_bh()
3916 ret = usb_autopm_get_interface_async(dev->intf); in lan78xx_tx_bh()
3918 spin_unlock_irqrestore(&dev->txq.lock, flags); in lan78xx_tx_bh()
3922 usb_fill_bulk_urb(entry->urb, dev->udev, dev->pipe_out, in lan78xx_tx_bh()
3923 tx_buf->data, tx_buf->len, tx_complete, in lan78xx_tx_bh()
3926 if (tx_buf->len % dev->maxpacket == 0) { in lan78xx_tx_bh()
3928 entry->urb->transfer_flags |= URB_ZERO_PACKET; in lan78xx_tx_bh()
3933 if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) { in lan78xx_tx_bh()
3934 usb_anchor_urb(entry->urb, &dev->deferred); in lan78xx_tx_bh()
3935 netif_stop_queue(dev->net); in lan78xx_tx_bh()
3936 spin_unlock_irqrestore(&dev->txq.lock, flags); in lan78xx_tx_bh()
3937 netdev_dbg(dev->net, in lan78xx_tx_bh()
3942 ret = usb_submit_urb(entry->urb, GFP_ATOMIC); in lan78xx_tx_bh()
3945 netif_trans_update(dev->net); in lan78xx_tx_bh()
3946 lan78xx_queue_skb(&dev->txq, tx_buf, tx_start); in lan78xx_tx_bh()
3948 case -EPIPE: in lan78xx_tx_bh()
3949 netif_stop_queue(dev->net); in lan78xx_tx_bh()
3951 usb_autopm_put_interface_async(dev->intf); in lan78xx_tx_bh()
3953 case -ENODEV: in lan78xx_tx_bh()
3954 case -ENOENT: in lan78xx_tx_bh()
3955 netif_dbg(dev, tx_err, dev->net, in lan78xx_tx_bh()
3957 netif_device_detach(dev->net); in lan78xx_tx_bh()
3960 usb_autopm_put_interface_async(dev->intf); in lan78xx_tx_bh()
3961 netif_dbg(dev, tx_err, dev->net, in lan78xx_tx_bh()
3966 spin_unlock_irqrestore(&dev->txq.lock, flags); in lan78xx_tx_bh()
3969 netdev_warn(dev->net, "failed to tx urb %d\n", ret); in lan78xx_tx_bh()
3971 dev->net->stats.tx_dropped += entry->num_of_packet; in lan78xx_tx_bh()
3988 while (!skb_queue_empty(&dev->rxq_overflow)) { in lan78xx_bh()
3989 lan78xx_skb_return(dev, skb_dequeue(&dev->rxq_overflow)); in lan78xx_bh()
3999 spin_lock_irqsave(&dev->rxq_done.lock, flags); in lan78xx_bh()
4000 skb_queue_splice_init(&dev->rxq_done, &done); in lan78xx_bh()
4001 spin_unlock_irqrestore(&dev->rxq_done.lock, flags); in lan78xx_bh()
4004 * pass them to the stack. Re-submit each completed URB. in lan78xx_bh()
4008 entry = (struct skb_data *)(rx_buf->cb); in lan78xx_bh()
4009 switch (entry->state) { in lan78xx_bh()
4016 netdev_dbg(dev->net, "rx buf state %d\n", in lan78xx_bh()
4017 entry->state); in lan78xx_bh()
4028 spin_lock_irqsave(&dev->rxq_done.lock, flags); in lan78xx_bh()
4029 skb_queue_splice(&done, &dev->rxq_done); in lan78xx_bh()
4030 spin_unlock_irqrestore(&dev->rxq_done.lock, flags); in lan78xx_bh()
4032 if (netif_device_present(dev->net) && netif_running(dev->net)) { in lan78xx_bh()
4033 /* reset update timer delta */ in lan78xx_bh()
4034 if (timer_pending(&dev->stat_monitor) && (dev->delta != 1)) { in lan78xx_bh()
4035 dev->delta = 1; in lan78xx_bh()
4036 mod_timer(&dev->stat_monitor, in lan78xx_bh()
4042 if (!test_bit(EVENT_RX_HALT, &dev->flags)) in lan78xx_bh()
4061 if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) { in lan78xx_poll()
4076 if (!skb_queue_empty(&dev->rxq_done)) { in lan78xx_poll()
4078 } else if (netif_carrier_ok(dev->net)) { in lan78xx_poll()
4079 if (skb_queue_empty(&dev->txq) && in lan78xx_poll()
4080 !skb_queue_empty(&dev->txq_pend)) { in lan78xx_poll()
4083 netif_tx_lock(dev->net); in lan78xx_poll()
4084 if (netif_queue_stopped(dev->net)) { in lan78xx_poll()
4085 netif_wake_queue(dev->net); in lan78xx_poll()
4088 netif_tx_unlock(dev->net); in lan78xx_poll()
4104 if (test_bit(EVENT_DEV_DISCONNECT, &dev->flags)) in lan78xx_delayedwork()
4107 if (usb_autopm_get_interface(dev->intf) < 0) in lan78xx_delayedwork()
4110 if (test_bit(EVENT_TX_HALT, &dev->flags)) { in lan78xx_delayedwork()
4111 unlink_urbs(dev, &dev->txq); in lan78xx_delayedwork()
4113 status = usb_clear_halt(dev->udev, dev->pipe_out); in lan78xx_delayedwork()
4115 status != -EPIPE && in lan78xx_delayedwork()
4116 status != -ESHUTDOWN) { in lan78xx_delayedwork()
4118 netdev_err(dev->net, in lan78xx_delayedwork()
4122 clear_bit(EVENT_TX_HALT, &dev->flags); in lan78xx_delayedwork()
4123 if (status != -ESHUTDOWN) in lan78xx_delayedwork()
4124 netif_wake_queue(dev->net); in lan78xx_delayedwork()
4128 if (test_bit(EVENT_RX_HALT, &dev->flags)) { in lan78xx_delayedwork()
4129 unlink_urbs(dev, &dev->rxq); in lan78xx_delayedwork()
4130 status = usb_clear_halt(dev->udev, dev->pipe_in); in lan78xx_delayedwork()
4132 status != -EPIPE && in lan78xx_delayedwork()
4133 status != -ESHUTDOWN) { in lan78xx_delayedwork()
4135 netdev_err(dev->net, in lan78xx_delayedwork()
4139 clear_bit(EVENT_RX_HALT, &dev->flags); in lan78xx_delayedwork()
4140 napi_schedule(&dev->napi); in lan78xx_delayedwork()
4144 if (test_bit(EVENT_LINK_RESET, &dev->flags)) { in lan78xx_delayedwork()
4147 clear_bit(EVENT_LINK_RESET, &dev->flags); in lan78xx_delayedwork()
4149 netdev_info(dev->net, "link reset failed (%d)\n", in lan78xx_delayedwork()
4154 if (test_bit(EVENT_STAT_UPDATE, &dev->flags)) { in lan78xx_delayedwork()
4157 clear_bit(EVENT_STAT_UPDATE, &dev->flags); in lan78xx_delayedwork()
4159 mod_timer(&dev->stat_monitor, in lan78xx_delayedwork()
4160 jiffies + (STAT_UPDATE_TIMER * dev->delta)); in lan78xx_delayedwork()
4162 dev->delta = min((dev->delta * 2), 50); in lan78xx_delayedwork()
4165 usb_autopm_put_interface(dev->intf); in lan78xx_delayedwork()
4170 struct lan78xx_net *dev = urb->context; in intr_complete()
4171 int status = urb->status; in intr_complete()
4179 /* software-driven interface shutdown */ in intr_complete()
4180 case -ENOENT: /* urb killed */ in intr_complete()
4181 case -ENODEV: /* hardware gone */ in intr_complete()
4182 case -ESHUTDOWN: /* hardware gone */ in intr_complete()
4183 netif_dbg(dev, ifdown, dev->net, in intr_complete()
4191 netdev_dbg(dev->net, "intr status %d\n", status); in intr_complete()
4195 if (!netif_device_present(dev->net) || in intr_complete()
4196 !netif_running(dev->net)) { in intr_complete()
4197 netdev_warn(dev->net, "not submitting new status URB"); in intr_complete()
4201 memset(urb->transfer_buffer, 0, urb->transfer_buffer_length); in intr_complete()
4207 case -ENODEV: in intr_complete()
4208 case -ENOENT: in intr_complete()
4209 netif_dbg(dev, timer, dev->net, in intr_complete()
4211 netif_device_detach(dev->net); in intr_complete()
4214 netif_err(dev, timer, dev->net, in intr_complete()
4215 "intr resubmit --> %d\n", status); in intr_complete()
4232 netif_napi_del(&dev->napi); in lan78xx_disconnect()
4235 net = dev->net; in lan78xx_disconnect()
4239 timer_shutdown_sync(&dev->stat_monitor); in lan78xx_disconnect()
4240 set_bit(EVENT_DEV_DISCONNECT, &dev->flags); in lan78xx_disconnect()
4241 cancel_delayed_work_sync(&dev->wq); in lan78xx_disconnect()
4243 phydev = net->phydev; in lan78xx_disconnect()
4248 phy_disconnect(net->phydev); in lan78xx_disconnect()
4255 usb_scuttle_anchored_urbs(&dev->deferred); in lan78xx_disconnect()
4262 usb_kill_urb(dev->urb_intr); in lan78xx_disconnect()
4263 usb_free_urb(dev->urb_intr); in lan78xx_disconnect()
4273 unlink_urbs(dev, &dev->txq); in lan78xx_tx_timeout()
4274 napi_schedule(&dev->napi); in lan78xx_tx_timeout()
4283 if (skb->len > LAN78XX_TSO_SIZE(dev)) in lan78xx_features_check()
4332 dev_err(&intf->dev, "Error: OOM\n"); in lan78xx_probe()
4333 ret = -ENOMEM; in lan78xx_probe()
4338 SET_NETDEV_DEV(netdev, &intf->dev); in lan78xx_probe()
4341 dev->udev = udev; in lan78xx_probe()
4342 dev->intf = intf; in lan78xx_probe()
4343 dev->net = netdev; in lan78xx_probe()
4344 dev->msg_enable = netif_msg_init(msg_level, NETIF_MSG_DRV in lan78xx_probe()
4347 skb_queue_head_init(&dev->rxq); in lan78xx_probe()
4348 skb_queue_head_init(&dev->txq); in lan78xx_probe()
4349 skb_queue_head_init(&dev->rxq_done); in lan78xx_probe()
4350 skb_queue_head_init(&dev->txq_pend); in lan78xx_probe()
4351 skb_queue_head_init(&dev->rxq_overflow); in lan78xx_probe()
4352 mutex_init(&dev->phy_mutex); in lan78xx_probe()
4353 mutex_init(&dev->dev_mutex); in lan78xx_probe()
4367 /* MTU range: 68 - 9000 */ in lan78xx_probe()
4368 netdev->max_mtu = MAX_SINGLE_PACKET_SIZE; in lan78xx_probe()
4372 netif_napi_add(netdev, &dev->napi, lan78xx_poll); in lan78xx_probe()
4374 INIT_DELAYED_WORK(&dev->wq, lan78xx_delayedwork); in lan78xx_probe()
4375 init_usb_anchor(&dev->deferred); in lan78xx_probe()
4377 netdev->netdev_ops = &lan78xx_netdev_ops; in lan78xx_probe()
4378 netdev->watchdog_timeo = TX_TIMEOUT_JIFFIES; in lan78xx_probe()
4379 netdev->ethtool_ops = &lan78xx_ethtool_ops; in lan78xx_probe()
4381 dev->delta = 1; in lan78xx_probe()
4382 timer_setup(&dev->stat_monitor, lan78xx_stat_monitor, 0); in lan78xx_probe()
4384 mutex_init(&dev->stats.access_lock); in lan78xx_probe()
4386 if (intf->cur_altsetting->desc.bNumEndpoints < 3) { in lan78xx_probe()
4387 ret = -ENODEV; in lan78xx_probe()
4391 dev->pipe_in = usb_rcvbulkpipe(udev, BULK_IN_PIPE); in lan78xx_probe()
4392 ep_blkin = usb_pipe_endpoint(udev, dev->pipe_in); in lan78xx_probe()
4393 if (!ep_blkin || !usb_endpoint_is_bulk_in(&ep_blkin->desc)) { in lan78xx_probe()
4394 ret = -ENODEV; in lan78xx_probe()
4398 dev->pipe_out = usb_sndbulkpipe(udev, BULK_OUT_PIPE); in lan78xx_probe()
4399 ep_blkout = usb_pipe_endpoint(udev, dev->pipe_out); in lan78xx_probe()
4400 if (!ep_blkout || !usb_endpoint_is_bulk_out(&ep_blkout->desc)) { in lan78xx_probe()
4401 ret = -ENODEV; in lan78xx_probe()
4405 ep_intr = &intf->cur_altsetting->endpoint[2]; in lan78xx_probe()
4406 if (!usb_endpoint_is_int_in(&ep_intr->desc)) { in lan78xx_probe()
4407 ret = -ENODEV; in lan78xx_probe()
4411 dev->pipe_intr = usb_rcvintpipe(dev->udev, in lan78xx_probe()
4412 usb_endpoint_num(&ep_intr->desc)); in lan78xx_probe()
4418 period = ep_intr->desc.bInterval; in lan78xx_probe()
4419 maxp = usb_maxpacket(dev->udev, dev->pipe_intr); in lan78xx_probe()
4421 dev->urb_intr = usb_alloc_urb(0, GFP_KERNEL); in lan78xx_probe()
4422 if (!dev->urb_intr) { in lan78xx_probe()
4423 ret = -ENOMEM; in lan78xx_probe()
4429 ret = -ENOMEM; in lan78xx_probe()
4433 usb_fill_int_urb(dev->urb_intr, dev->udev, in lan78xx_probe()
4434 dev->pipe_intr, buf, maxp, in lan78xx_probe()
4436 dev->urb_intr->transfer_flags |= URB_FREE_BUFFER; in lan78xx_probe()
4438 dev->maxpacket = usb_maxpacket(dev->udev, dev->pipe_out); in lan78xx_probe()
4441 if (dev->maxpacket == 0) { in lan78xx_probe()
4442 ret = -ENODEV; in lan78xx_probe()
4446 /* driver requires remote-wakeup capability during autosuspend. */ in lan78xx_probe()
4447 intf->needs_remote_wakeup = 1; in lan78xx_probe()
4461 ret = device_set_wakeup_enable(&udev->dev, true); in lan78xx_probe()
4466 pm_runtime_set_autosuspend_delay(&udev->dev, in lan78xx_probe()
4472 phy_disconnect(netdev->phydev); in lan78xx_probe()
4474 usb_free_urb(dev->urb_intr); in lan78xx_probe()
4478 netif_napi_del(&dev->napi); in lan78xx_probe()
4786 mutex_lock(&dev->dev_mutex); in lan78xx_suspend()
4788 netif_dbg(dev, ifdown, dev->net, in lan78xx_suspend()
4791 dev_open = test_bit(EVENT_DEV_OPEN, &dev->flags); in lan78xx_suspend()
4794 spin_lock_irq(&dev->txq.lock); in lan78xx_suspend()
4796 if ((skb_queue_len(&dev->txq) || in lan78xx_suspend()
4797 skb_queue_len(&dev->txq_pend)) && in lan78xx_suspend()
4799 spin_unlock_irq(&dev->txq.lock); in lan78xx_suspend()
4800 ret = -EBUSY; in lan78xx_suspend()
4803 set_bit(EVENT_DEV_ASLEEP, &dev->flags); in lan78xx_suspend()
4804 spin_unlock_irq(&dev->txq.lock); in lan78xx_suspend()
4822 netif_device_detach(dev->net); in lan78xx_suspend()
4824 usb_kill_urb(dev->urb_intr); in lan78xx_suspend()
4827 netif_device_attach(dev->net); in lan78xx_suspend()
4829 del_timer(&dev->stat_monitor); in lan78xx_suspend()
4838 pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_suspend()
4839 netif_carrier_off(dev->net); in lan78xx_suspend()
4840 ret = lan78xx_set_suspend(dev, pdata->wol); in lan78xx_suspend()
4850 set_bit(EVENT_DEV_ASLEEP, &dev->flags); in lan78xx_suspend()
4885 mutex_unlock(&dev->dev_mutex); in lan78xx_suspend()
4895 while ((urb = usb_get_from_anchor(&dev->deferred))) { in lan78xx_submit_deferred_urbs()
4896 struct sk_buff *skb = urb->context; in lan78xx_submit_deferred_urbs()
4899 if (!netif_device_present(dev->net) || in lan78xx_submit_deferred_urbs()
4900 !netif_carrier_ok(dev->net) || in lan78xx_submit_deferred_urbs()
4909 netif_trans_update(dev->net); in lan78xx_submit_deferred_urbs()
4910 lan78xx_queue_skb(&dev->txq, skb, tx_start); in lan78xx_submit_deferred_urbs()
4912 if (ret == -EPIPE) { in lan78xx_submit_deferred_urbs()
4913 netif_stop_queue(dev->net); in lan78xx_submit_deferred_urbs()
4915 } else if (ret == -ENODEV) { in lan78xx_submit_deferred_urbs()
4916 netif_device_detach(dev->net); in lan78xx_submit_deferred_urbs()
4932 mutex_lock(&dev->dev_mutex); in lan78xx_resume()
4934 netif_dbg(dev, ifup, dev->net, "resuming device"); in lan78xx_resume()
4936 dev_open = test_bit(EVENT_DEV_OPEN, &dev->flags); in lan78xx_resume()
4945 if (dev->urb_intr) { in lan78xx_resume()
4946 int ret = usb_submit_urb(dev->urb_intr, GFP_KERNEL); in lan78xx_resume()
4949 if (ret == -ENODEV) in lan78xx_resume()
4950 netif_device_detach(dev->net); in lan78xx_resume()
4951 netdev_warn(dev->net, "Failed to submit intr URB"); in lan78xx_resume()
4955 spin_lock_irq(&dev->txq.lock); in lan78xx_resume()
4957 if (netif_device_present(dev->net)) { in lan78xx_resume()
4964 clear_bit(EVENT_DEV_ASLEEP, &dev->flags); in lan78xx_resume()
4966 spin_unlock_irq(&dev->txq.lock); in lan78xx_resume()
4969 netif_device_present(dev->net) && in lan78xx_resume()
4971 netif_start_queue(dev->net); in lan78xx_resume()
4977 napi_schedule(&dev->napi); in lan78xx_resume()
4979 if (!timer_pending(&dev->stat_monitor)) { in lan78xx_resume()
4980 dev->delta = 1; in lan78xx_resume()
4981 mod_timer(&dev->stat_monitor, in lan78xx_resume()
4986 clear_bit(EVENT_DEV_ASLEEP, &dev->flags); in lan78xx_resume()
5018 mutex_unlock(&dev->dev_mutex); in lan78xx_resume()
5028 netif_dbg(dev, ifup, dev->net, "(reset) resuming device"); in lan78xx_reset_resume()
5034 phy_start(dev->net->phydev); in lan78xx_reset_resume()
5055 /* ATM2-AF USB Gigabit Ethernet Device */