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 ret = usb_autopm_get_interface(dev->intf); in lan78xx_set_wol()
1664 if (wol->wolopts & ~WAKE_ALL) in lan78xx_set_wol()
1665 return -EINVAL; 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()
2397 return -EIO; in lan78xx_phy_init()
2404 dev->fc_request_control = (FLOW_CTRL_RX | FLOW_CTRL_TX); in lan78xx_phy_init()
2406 phydev->advertising); in lan78xx_phy_init()
2408 phydev->advertising); in lan78xx_phy_init()
2409 mii_adv = (u32)mii_advertise_flowctrl(dev->fc_request_control); in lan78xx_phy_init()
2410 mii_adv_to_linkmode_adv_t(fc, mii_adv); in lan78xx_phy_init()
2411 linkmode_or(phydev->advertising, fc, phydev->advertising); in lan78xx_phy_init()
2413 if (phydev->mdio.dev.of_node) { in lan78xx_phy_init()
2417 len = of_property_count_elems_of_size(phydev->mdio.dev.of_node, in lan78xx_phy_init()
2418 "microchip,led-modes", in lan78xx_phy_init()
2437 dev->fc_autoneg = phydev->autoneg; in lan78xx_phy_init()
2476 spin_lock_irqsave(&q->lock, flags); in unlink_urbs()
2483 entry = (struct skb_data *)skb->cb; in unlink_urbs()
2484 if (entry->state != unlink_start) in unlink_urbs()
2489 entry->state = unlink_start; in unlink_urbs()
2490 urb = entry->urb; in unlink_urbs()
2494 * use-after-free problem inside usb_unlink_urb since in unlink_urbs()
2499 spin_unlock_irqrestore(&q->lock, flags); in unlink_urbs()
2500 /* during some PM-driven resume scenarios, in unlink_urbs()
2504 if (ret != -EINPROGRESS && ret != 0) in unlink_urbs()
2505 netdev_dbg(dev->net, "unlink urb err, %d\n", ret); in unlink_urbs()
2509 spin_lock_irqsave(&q->lock, flags); in unlink_urbs()
2511 spin_unlock_irqrestore(&q->lock, flags); in unlink_urbs()
2521 /* no second zero-length packet read wanted after mtu-sized packets */ in lan78xx_change_mtu()
2522 if ((max_frame_len % dev->maxpacket) == 0) in lan78xx_change_mtu()
2523 return -EDOM; in lan78xx_change_mtu()
2525 ret = usb_autopm_get_interface(dev->intf); in lan78xx_change_mtu()
2531 netdev->mtu = new_mtu; in lan78xx_change_mtu()
2533 usb_autopm_put_interface(dev->intf); in lan78xx_change_mtu()
2545 return -EBUSY; in lan78xx_set_mac_addr()
2547 if (!is_valid_ether_addr(addr->sa_data)) in lan78xx_set_mac_addr()
2548 return -EADDRNOTAVAIL; in lan78xx_set_mac_addr()
2550 eth_hw_addr_set(netdev, addr->sa_data); in lan78xx_set_mac_addr()
2552 addr_lo = netdev->dev_addr[0] | in lan78xx_set_mac_addr()
2553 netdev->dev_addr[1] << 8 | in lan78xx_set_mac_addr()
2554 netdev->dev_addr[2] << 16 | in lan78xx_set_mac_addr()
2555 netdev->dev_addr[3] << 24; in lan78xx_set_mac_addr()
2556 addr_hi = netdev->dev_addr[4] | in lan78xx_set_mac_addr()
2557 netdev->dev_addr[5] << 8; in lan78xx_set_mac_addr()
2574 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_set_features()
2577 spin_lock_irqsave(&pdata->rfe_ctl_lock, flags); in lan78xx_set_features()
2580 pdata->rfe_ctl |= RFE_CTL_TCPUDP_COE_ | RFE_CTL_IP_COE_; in lan78xx_set_features()
2581 pdata->rfe_ctl |= RFE_CTL_ICMP_COE_ | RFE_CTL_IGMP_COE_; in lan78xx_set_features()
2583 pdata->rfe_ctl &= ~(RFE_CTL_TCPUDP_COE_ | RFE_CTL_IP_COE_); in lan78xx_set_features()
2584 pdata->rfe_ctl &= ~(RFE_CTL_ICMP_COE_ | RFE_CTL_IGMP_COE_); in lan78xx_set_features()
2588 pdata->rfe_ctl |= RFE_CTL_VLAN_STRIP_; in lan78xx_set_features()
2590 pdata->rfe_ctl &= ~RFE_CTL_VLAN_STRIP_; in lan78xx_set_features()
2593 pdata->rfe_ctl |= RFE_CTL_VLAN_FILTER_; in lan78xx_set_features()
2595 pdata->rfe_ctl &= ~RFE_CTL_VLAN_FILTER_; in lan78xx_set_features()
2597 spin_unlock_irqrestore(&pdata->rfe_ctl_lock, flags); in lan78xx_set_features()
2599 lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); in lan78xx_set_features()
2608 struct lan78xx_net *dev = pdata->dev; in lan78xx_deferred_vlan_write()
2611 DP_SEL_VHF_VLAN_LEN, pdata->vlan_table); in lan78xx_deferred_vlan_write()
2618 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_vlan_rx_add_vid()
2625 pdata->vlan_table[vid_dword_index] |= (1 << vid_bit_index); in lan78xx_vlan_rx_add_vid()
2628 schedule_work(&pdata->set_vlan); in lan78xx_vlan_rx_add_vid()
2637 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_vlan_rx_kill_vid()
2644 pdata->vlan_table[vid_dword_index] &= ~(1 << vid_bit_index); in lan78xx_vlan_rx_kill_vid()
2647 schedule_work(&pdata->set_vlan); in lan78xx_vlan_rx_kill_vid()
2695 switch (dev->udev->speed) { in lan78xx_urb_config_init()
2697 dev->rx_urb_size = RX_SS_URB_SIZE; in lan78xx_urb_config_init()
2698 dev->tx_urb_size = TX_SS_URB_SIZE; in lan78xx_urb_config_init()
2699 dev->n_rx_urbs = RX_SS_URB_NUM; in lan78xx_urb_config_init()
2700 dev->n_tx_urbs = TX_SS_URB_NUM; in lan78xx_urb_config_init()
2701 dev->bulk_in_delay = SS_BULK_IN_DELAY; in lan78xx_urb_config_init()
2702 dev->burst_cap = SS_BURST_CAP_SIZE / SS_USB_PKT_SIZE; in lan78xx_urb_config_init()
2705 dev->rx_urb_size = RX_HS_URB_SIZE; in lan78xx_urb_config_init()
2706 dev->tx_urb_size = TX_HS_URB_SIZE; in lan78xx_urb_config_init()
2707 dev->n_rx_urbs = RX_HS_URB_NUM; in lan78xx_urb_config_init()
2708 dev->n_tx_urbs = TX_HS_URB_NUM; in lan78xx_urb_config_init()
2709 dev->bulk_in_delay = HS_BULK_IN_DELAY; in lan78xx_urb_config_init()
2710 dev->burst_cap = HS_BURST_CAP_SIZE / HS_USB_PKT_SIZE; in lan78xx_urb_config_init()
2713 dev->rx_urb_size = RX_FS_URB_SIZE; in lan78xx_urb_config_init()
2714 dev->tx_urb_size = TX_FS_URB_SIZE; in lan78xx_urb_config_init()
2715 dev->n_rx_urbs = RX_FS_URB_NUM; in lan78xx_urb_config_init()
2716 dev->n_tx_urbs = TX_FS_URB_NUM; in lan78xx_urb_config_init()
2717 dev->bulk_in_delay = FS_BULK_IN_DELAY; in lan78xx_urb_config_init()
2718 dev->burst_cap = FS_BURST_CAP_SIZE / FS_USB_PKT_SIZE; in lan78xx_urb_config_init()
2721 netdev_warn(dev->net, "USB bus speed not supported\n"); in lan78xx_urb_config_init()
2722 result = -EIO; in lan78xx_urb_config_init()
2769 ret = stopped ? 0 : -ETIME; in lan78xx_stop_hw()
2783 netif_dbg(dev, drv, dev->net, "start tx path"); in lan78xx_start_tx_path()
2804 netif_dbg(dev, drv, dev->net, "stop tx path"); in lan78xx_stop_tx_path()
2833 netif_dbg(dev, drv, dev->net, "start rx path"); in lan78xx_start_rx_path()
2854 netif_dbg(dev, drv, dev->net, "stop rx path"); in lan78xx_stop_rx_path()
2881 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_reset()
2905 netdev_warn(dev->net, in lan78xx_reset()
2907 ret = -ETIMEDOUT; in lan78xx_reset()
2919 dev->chipid = (buf & ID_REV_CHIP_ID_MASK_) >> 16; in lan78xx_reset()
2920 dev->chiprev = buf & ID_REV_CHIP_REV_MASK_; in lan78xx_reset()
2936 ret = lan78xx_write_reg(dev, BURST_CAP, dev->burst_cap); in lan78xx_reset()
2940 ret = lan78xx_write_reg(dev, BULK_IN_DLY, dev->bulk_in_delay); in lan78xx_reset()
2965 buf = (MAX_RX_FIFO_SIZE - 512) / 512; in lan78xx_reset()
2971 buf = (MAX_TX_FIFO_SIZE - 512) / 512; in lan78xx_reset()
2990 ret = lan78xx_read_reg(dev, RFE_CTL, &pdata->rfe_ctl); in lan78xx_reset()
2994 pdata->rfe_ctl |= RFE_CTL_BCAST_EN_ | RFE_CTL_DA_PERFECT_; in lan78xx_reset()
2996 ret = lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); in lan78xx_reset()
3001 ret = lan78xx_set_features(dev->net, dev->net->features); in lan78xx_reset()
3005 lan78xx_set_multicast(dev->net); in lan78xx_reset()
3026 netdev_warn(dev->net, "timeout waiting for PHY Reset"); in lan78xx_reset()
3027 ret = -ETIMEDOUT; in lan78xx_reset()
3037 if (dev->chipid == ID_REV_CHIP_ID_7801_) in lan78xx_reset()
3040 if (dev->chipid == ID_REV_CHIP_ID_7800_ || in lan78xx_reset()
3041 dev->chipid == ID_REV_CHIP_ID_7850_) { in lan78xx_reset()
3045 netdev_info(dev->net, "No External EEPROM. Setting MAC Speed\n"); in lan78xx_reset()
3054 RX_MAX_FRAME_LEN(dev->net->mtu)); in lan78xx_reset()
3064 /* initialize for stats update in lan78xx_init_stats()
3067 p = (u32 *)&dev->stats.rollover_max; in lan78xx_init_stats()
3068 for (i = 0; i < (sizeof(dev->stats.rollover_max) / (sizeof(u32))); i++) in lan78xx_init_stats()
3071 dev->stats.rollover_max.rx_unicast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
3072 dev->stats.rollover_max.rx_broadcast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
3073 dev->stats.rollover_max.rx_multicast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
3074 dev->stats.rollover_max.eee_rx_lpi_transitions = 0xFFFFFFFF; in lan78xx_init_stats()
3075 dev->stats.rollover_max.eee_rx_lpi_time = 0xFFFFFFFF; in lan78xx_init_stats()
3076 dev->stats.rollover_max.tx_unicast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
3077 dev->stats.rollover_max.tx_broadcast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
3078 dev->stats.rollover_max.tx_multicast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
3079 dev->stats.rollover_max.eee_tx_lpi_transitions = 0xFFFFFFFF; in lan78xx_init_stats()
3080 dev->stats.rollover_max.eee_tx_lpi_time = 0xFFFFFFFF; in lan78xx_init_stats()
3082 set_bit(EVENT_STAT_UPDATE, &dev->flags); in lan78xx_init_stats()
3090 netif_dbg(dev, ifup, dev->net, "open device"); in lan78xx_open()
3092 ret = usb_autopm_get_interface(dev->intf); in lan78xx_open()
3096 mutex_lock(&dev->dev_mutex); in lan78xx_open()
3098 phy_start(net->phydev); in lan78xx_open()
3100 netif_dbg(dev, ifup, dev->net, "phy initialised successfully"); in lan78xx_open()
3103 if (dev->urb_intr) { in lan78xx_open()
3104 ret = usb_submit_urb(dev->urb_intr, GFP_KERNEL); in lan78xx_open()
3106 netif_err(dev, ifup, dev->net, in lan78xx_open()
3128 set_bit(EVENT_DEV_OPEN, &dev->flags); in lan78xx_open()
3132 dev->link_on = false; in lan78xx_open()
3134 napi_enable(&dev->napi); in lan78xx_open()
3138 mutex_unlock(&dev->dev_mutex); in lan78xx_open()
3141 usb_autopm_put_interface(dev->intf); in lan78xx_open()
3155 dev->wait = &unlink_wakeup; in lan78xx_terminate_urbs()
3156 temp = unlink_urbs(dev, &dev->txq) + unlink_urbs(dev, &dev->rxq); in lan78xx_terminate_urbs()
3159 while (!skb_queue_empty(&dev->rxq) || in lan78xx_terminate_urbs()
3160 !skb_queue_empty(&dev->txq)) { in lan78xx_terminate_urbs()
3163 netif_dbg(dev, ifdown, dev->net, in lan78xx_terminate_urbs()
3167 dev->wait = NULL; in lan78xx_terminate_urbs()
3172 while (!skb_queue_empty(&dev->rxq_done)) { in lan78xx_terminate_urbs()
3173 struct sk_buff *skb = skb_dequeue(&dev->rxq_done); in lan78xx_terminate_urbs()
3178 skb_queue_purge(&dev->rxq_overflow); in lan78xx_terminate_urbs()
3179 skb_queue_purge(&dev->txq_pend); in lan78xx_terminate_urbs()
3186 netif_dbg(dev, ifup, dev->net, "stop device"); in lan78xx_stop()
3188 mutex_lock(&dev->dev_mutex); in lan78xx_stop()
3190 if (timer_pending(&dev->stat_monitor)) in lan78xx_stop()
3191 del_timer_sync(&dev->stat_monitor); in lan78xx_stop()
3193 clear_bit(EVENT_DEV_OPEN, &dev->flags); in lan78xx_stop()
3195 napi_disable(&dev->napi); in lan78xx_stop()
3199 netif_info(dev, ifdown, dev->net, in lan78xx_stop()
3201 net->stats.rx_packets, net->stats.tx_packets, in lan78xx_stop()
3202 net->stats.rx_errors, net->stats.tx_errors); in lan78xx_stop()
3208 if (net->phydev) in lan78xx_stop()
3209 phy_stop(net->phydev); in lan78xx_stop()
3211 usb_kill_urb(dev->urb_intr); in lan78xx_stop()
3217 clear_bit(EVENT_TX_HALT, &dev->flags); in lan78xx_stop()
3218 clear_bit(EVENT_RX_HALT, &dev->flags); in lan78xx_stop()
3219 clear_bit(EVENT_LINK_RESET, &dev->flags); in lan78xx_stop()
3220 clear_bit(EVENT_STAT_UPDATE, &dev->flags); in lan78xx_stop()
3222 cancel_delayed_work_sync(&dev->wq); in lan78xx_stop()
3224 usb_autopm_put_interface(dev->intf); in lan78xx_stop()
3226 mutex_unlock(&dev->dev_mutex); in lan78xx_stop()
3236 struct skb_data *entry = (struct skb_data *)skb->cb; in defer_bh()
3238 spin_lock_irqsave(&list->lock, flags); in defer_bh()
3239 old_state = entry->state; in defer_bh()
3240 entry->state = state; in defer_bh()
3243 spin_unlock(&list->lock); in defer_bh()
3244 spin_lock(&dev->rxq_done.lock); in defer_bh()
3246 __skb_queue_tail(&dev->rxq_done, skb); in defer_bh()
3247 if (skb_queue_len(&dev->rxq_done) == 1) in defer_bh()
3248 napi_schedule(&dev->napi); in defer_bh()
3250 spin_unlock_irqrestore(&dev->rxq_done.lock, flags); in defer_bh()
3257 struct sk_buff *skb = (struct sk_buff *)urb->context; in tx_complete()
3258 struct skb_data *entry = (struct skb_data *)skb->cb; in tx_complete()
3259 struct lan78xx_net *dev = entry->dev; in tx_complete()
3261 if (urb->status == 0) { in tx_complete()
3262 dev->net->stats.tx_packets += entry->num_of_packet; in tx_complete()
3263 dev->net->stats.tx_bytes += entry->length; in tx_complete()
3265 dev->net->stats.tx_errors += entry->num_of_packet; in tx_complete()
3267 switch (urb->status) { in tx_complete()
3268 case -EPIPE: in tx_complete()
3272 /* software-driven interface shutdown */ in tx_complete()
3273 case -ECONNRESET: in tx_complete()
3274 case -ESHUTDOWN: in tx_complete()
3275 netif_dbg(dev, tx_err, dev->net, in tx_complete()
3277 entry->urb->status); in tx_complete()
3280 case -EPROTO: in tx_complete()
3281 case -ETIME: in tx_complete()
3282 case -EILSEQ: in tx_complete()
3283 netif_stop_queue(dev->net); in tx_complete()
3284 netif_dbg(dev, tx_err, dev->net, in tx_complete()
3286 entry->urb->status); in tx_complete()
3289 netif_dbg(dev, tx_err, dev->net, in tx_complete()
3291 entry->urb->status); in tx_complete()
3296 usb_autopm_put_interface_async(dev->intf); in tx_complete()
3298 skb_unlink(skb, &dev->txq); in tx_complete()
3302 /* Re-schedule NAPI if Tx data pending but no URBs in progress. in tx_complete()
3304 if (skb_queue_empty(&dev->txq) && in tx_complete()
3305 !skb_queue_empty(&dev->txq_pend)) in tx_complete()
3306 napi_schedule(&dev->napi); in tx_complete()
3312 struct skb_data *entry = (struct skb_data *)newsk->cb; in lan78xx_queue_skb()
3315 entry->state = state; in lan78xx_queue_skb()
3320 return skb_queue_len(&dev->txq_free) * dev->tx_urb_size; in lan78xx_tx_urb_space()
3325 return dev->tx_pend_data_len; in lan78xx_tx_pend_data_len()
3334 spin_lock_irqsave(&dev->txq_pend.lock, flags); in lan78xx_tx_pend_skb_add()
3336 __skb_queue_tail(&dev->txq_pend, skb); in lan78xx_tx_pend_skb_add()
3338 dev->tx_pend_data_len += skb->len; in lan78xx_tx_pend_skb_add()
3339 *tx_pend_data_len = dev->tx_pend_data_len; in lan78xx_tx_pend_skb_add()
3341 spin_unlock_irqrestore(&dev->txq_pend.lock, flags); in lan78xx_tx_pend_skb_add()
3350 spin_lock_irqsave(&dev->txq_pend.lock, flags); in lan78xx_tx_pend_skb_head_add()
3352 __skb_queue_head(&dev->txq_pend, skb); in lan78xx_tx_pend_skb_head_add()
3354 dev->tx_pend_data_len += skb->len; in lan78xx_tx_pend_skb_head_add()
3355 *tx_pend_data_len = dev->tx_pend_data_len; in lan78xx_tx_pend_skb_head_add()
3357 spin_unlock_irqrestore(&dev->txq_pend.lock, flags); in lan78xx_tx_pend_skb_head_add()
3366 spin_lock_irqsave(&dev->txq_pend.lock, flags); in lan78xx_tx_pend_skb_get()
3368 *skb = __skb_dequeue(&dev->txq_pend); in lan78xx_tx_pend_skb_get()
3370 dev->tx_pend_data_len -= (*skb)->len; in lan78xx_tx_pend_skb_get()
3371 *tx_pend_data_len = dev->tx_pend_data_len; in lan78xx_tx_pend_skb_get()
3373 spin_unlock_irqrestore(&dev->txq_pend.lock, flags); in lan78xx_tx_pend_skb_get()
3382 if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) in lan78xx_start_xmit()
3383 schedule_delayed_work(&dev->wq, 0); in lan78xx_start_xmit()
3391 if (skb_queue_empty(&dev->txq)) in lan78xx_start_xmit()
3392 napi_schedule(&dev->napi); in lan78xx_start_xmit()
3400 netif_dbg(dev, hw, dev->net, "tx data len: %u, urb space %u", in lan78xx_start_xmit()
3405 if (!skb_queue_empty(&dev->txq_free)) in lan78xx_start_xmit()
3406 napi_schedule(&dev->napi); in lan78xx_start_xmit()
3418 dev->data[0] = (unsigned long)kzalloc(sizeof(*pdata), GFP_KERNEL); in lan78xx_bind()
3420 pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_bind()
3422 netdev_warn(dev->net, "Unable to allocate lan78xx_priv"); in lan78xx_bind()
3423 return -ENOMEM; in lan78xx_bind()
3426 pdata->dev = dev; in lan78xx_bind()
3428 spin_lock_init(&pdata->rfe_ctl_lock); in lan78xx_bind()
3429 mutex_init(&pdata->dataport_mutex); in lan78xx_bind()
3431 INIT_WORK(&pdata->set_multicast, lan78xx_deferred_multicast_write); in lan78xx_bind()
3434 pdata->vlan_table[i] = 0; in lan78xx_bind()
3436 INIT_WORK(&pdata->set_vlan, lan78xx_deferred_vlan_write); in lan78xx_bind()
3438 dev->net->features = 0; in lan78xx_bind()
3441 dev->net->features |= NETIF_F_HW_CSUM; in lan78xx_bind()
3444 dev->net->features |= NETIF_F_RXCSUM; in lan78xx_bind()
3447 dev->net->features |= NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_SG; in lan78xx_bind()
3450 dev->net->features |= NETIF_F_HW_VLAN_CTAG_RX; in lan78xx_bind()
3453 dev->net->features |= NETIF_F_HW_VLAN_CTAG_FILTER; in lan78xx_bind()
3455 dev->net->hw_features = dev->net->features; in lan78xx_bind()
3459 netdev_warn(dev->net, in lan78xx_bind()
3467 netdev_warn(dev->net, "Registers INIT FAILED...."); in lan78xx_bind()
3473 netdev_warn(dev->net, "MDIO INIT FAILED....."); in lan78xx_bind()
3477 dev->net->flags |= IFF_MULTICAST; in lan78xx_bind()
3479 pdata->wol = WAKE_MAGIC; in lan78xx_bind()
3487 netdev_warn(dev->net, "Bind routine FAILED"); in lan78xx_bind()
3488 cancel_work_sync(&pdata->set_multicast); in lan78xx_bind()
3489 cancel_work_sync(&pdata->set_vlan); in lan78xx_bind()
3496 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_unbind()
3503 cancel_work_sync(&pdata->set_multicast); in lan78xx_unbind()
3504 cancel_work_sync(&pdata->set_vlan); in lan78xx_unbind()
3505 netif_dbg(dev, ifdown, dev->net, "free pdata"); in lan78xx_unbind()
3508 dev->data[0] = 0; in lan78xx_unbind()
3519 if (!(dev->net->features & NETIF_F_RXCSUM) || in lan78xx_rx_csum_offload()
3522 !(dev->net->features & NETIF_F_HW_VLAN_CTAG_RX))) { in lan78xx_rx_csum_offload()
3523 skb->ip_summed = CHECKSUM_NONE; in lan78xx_rx_csum_offload()
3525 skb->csum = ntohs((u16)(rx_cmd_b >> RX_CMD_B_CSUM_SHIFT_)); in lan78xx_rx_csum_offload()
3526 skb->ip_summed = CHECKSUM_COMPLETE; in lan78xx_rx_csum_offload()
3534 if ((dev->net->features & NETIF_F_HW_VLAN_CTAG_RX) && in lan78xx_rx_vlan_offload()
3542 dev->net->stats.rx_packets++; in lan78xx_skb_return()
3543 dev->net->stats.rx_bytes += skb->len; in lan78xx_skb_return()
3545 skb->protocol = eth_type_trans(skb, dev->net); in lan78xx_skb_return()
3547 netif_dbg(dev, rx_status, dev->net, "< rx, len %zu, type 0x%x\n", in lan78xx_skb_return()
3548 skb->len + sizeof(struct ethhdr), skb->protocol); in lan78xx_skb_return()
3549 memset(skb->cb, 0, sizeof(struct skb_data)); in lan78xx_skb_return()
3554 napi_gro_receive(&dev->napi, skb); in lan78xx_skb_return()
3560 if (skb->len < RX_SKB_MIN_LEN) in lan78xx_rx()
3566 while (skb->len > 0) { in lan78xx_rx()
3571 rx_cmd_a = get_unaligned_le32(skb->data); in lan78xx_rx()
3574 rx_cmd_b = get_unaligned_le32(skb->data); in lan78xx_rx()
3577 rx_cmd_c = get_unaligned_le16(skb->data); in lan78xx_rx()
3580 packet = skb->data; in lan78xx_rx()
3584 align_count = (4 - ((size + RXW_PADDING) % 4)) % 4; in lan78xx_rx()
3586 if (unlikely(size > skb->len)) { in lan78xx_rx()
3587 netif_dbg(dev, rx_err, dev->net, in lan78xx_rx()
3594 netif_dbg(dev, rx_err, dev->net, in lan78xx_rx()
3601 netif_dbg(dev, rx_err, dev->net, in lan78xx_rx()
3607 frame_len = size - ETH_FCS_LEN; in lan78xx_rx()
3609 skb2 = napi_alloc_skb(&dev->napi, frame_len); in lan78xx_rx()
3613 memcpy(skb2->data, packet, frame_len); in lan78xx_rx()
3629 skb_queue_tail(&dev->rxq_overflow, skb2); in lan78xx_rx()
3636 if (skb->len) in lan78xx_rx()
3647 netif_dbg(dev, rx_err, dev->net, "drop\n"); in rx_process()
3648 dev->net->stats.rx_errors++; in rx_process()
3654 struct sk_buff *skb = (struct sk_buff *)urb->context; in rx_complete()
3655 struct skb_data *entry = (struct skb_data *)skb->cb; in rx_complete()
3656 struct lan78xx_net *dev = entry->dev; in rx_complete()
3657 int urb_status = urb->status; in rx_complete()
3660 netif_dbg(dev, rx_status, dev->net, in rx_complete()
3661 "rx done: status %d", urb->status); in rx_complete()
3663 skb_put(skb, urb->actual_length); in rx_complete()
3666 if (urb != entry->urb) in rx_complete()
3667 netif_warn(dev, rx_err, dev->net, "URB pointer mismatch"); in rx_complete()
3671 if (skb->len < RX_SKB_MIN_LEN) { in rx_complete()
3673 dev->net->stats.rx_errors++; in rx_complete()
3674 dev->net->stats.rx_length_errors++; in rx_complete()
3675 netif_dbg(dev, rx_err, dev->net, in rx_complete()
3676 "rx length %d\n", skb->len); in rx_complete()
3678 usb_mark_last_busy(dev->udev); in rx_complete()
3680 case -EPIPE: in rx_complete()
3681 dev->net->stats.rx_errors++; in rx_complete()
3684 case -ECONNRESET: /* async unlink */ in rx_complete()
3685 case -ESHUTDOWN: /* hardware gone */ in rx_complete()
3686 netif_dbg(dev, ifdown, dev->net, in rx_complete()
3690 case -EPROTO: in rx_complete()
3691 case -ETIME: in rx_complete()
3692 case -EILSEQ: in rx_complete()
3693 dev->net->stats.rx_errors++; in rx_complete()
3698 case -EOVERFLOW: in rx_complete()
3699 dev->net->stats.rx_over_errors++; in rx_complete()
3704 dev->net->stats.rx_errors++; in rx_complete()
3705 netif_dbg(dev, rx_err, dev->net, "rx status %d\n", urb_status); in rx_complete()
3709 state = defer_bh(dev, skb, &dev->rxq, state); in rx_complete()
3714 struct skb_data *entry = (struct skb_data *)skb->cb; in rx_submit()
3715 size_t size = dev->rx_urb_size; in rx_submit()
3716 struct urb *urb = entry->urb; in rx_submit()
3720 usb_fill_bulk_urb(urb, dev->udev, dev->pipe_in, in rx_submit()
3721 skb->data, size, rx_complete, skb); in rx_submit()
3723 spin_lock_irqsave(&dev->rxq.lock, lockflags); in rx_submit()
3725 if (netif_device_present(dev->net) && in rx_submit()
3726 netif_running(dev->net) && in rx_submit()
3727 !test_bit(EVENT_RX_HALT, &dev->flags) && in rx_submit()
3728 !test_bit(EVENT_DEV_ASLEEP, &dev->flags)) { in rx_submit()
3732 lan78xx_queue_skb(&dev->rxq, skb, rx_start); in rx_submit()
3734 case -EPIPE: in rx_submit()
3737 case -ENODEV: in rx_submit()
3738 case -ENOENT: in rx_submit()
3739 netif_dbg(dev, ifdown, dev->net, "device gone\n"); in rx_submit()
3740 netif_device_detach(dev->net); in rx_submit()
3742 case -EHOSTUNREACH: in rx_submit()
3743 ret = -ENOLINK; in rx_submit()
3744 napi_schedule(&dev->napi); in rx_submit()
3747 netif_dbg(dev, rx_err, dev->net, in rx_submit()
3749 napi_schedule(&dev->napi); in rx_submit()
3753 netif_dbg(dev, ifdown, dev->net, "rx: stopped\n"); in rx_submit()
3754 ret = -ENOLINK; in rx_submit()
3756 spin_unlock_irqrestore(&dev->rxq.lock, lockflags); in rx_submit()
3781 rx_buf->data = rx_buf->head; in lan78xx_rx_urb_resubmit()
3783 rx_buf->len = 0; in lan78xx_rx_urb_resubmit()
3784 rx_buf->data_len = 0; in lan78xx_rx_urb_resubmit()
3794 tx_cmd_a = (u32)(skb->len & TX_CMD_A_LEN_MASK_) | TX_CMD_A_FCS_; in lan78xx_fill_tx_cmd_words()
3796 if (skb->ip_summed == CHECKSUM_PARTIAL) in lan78xx_fill_tx_cmd_words()
3801 u16 mss = max(skb_shinfo(skb)->gso_size, TX_CMD_B_MSS_MIN_); in lan78xx_fill_tx_cmd_words()
3820 struct skb_data *entry = (struct skb_data *)tx_buf->cb; in lan78xx_tx_buf_fill()
3821 int remain = dev->tx_urb_size; in lan78xx_tx_buf_fill()
3822 u8 *tx_data = tx_buf->data; in lan78xx_tx_buf_fill()
3825 entry->num_of_packet = 0; in lan78xx_tx_buf_fill()
3826 entry->length = 0; in lan78xx_tx_buf_fill()
3844 align_bytes = (TX_ALIGNMENT - (urb_len % TX_ALIGNMENT)) % in lan78xx_tx_buf_fill()
3846 len = align_bytes + TX_CMD_LEN + skb->len; in lan78xx_tx_buf_fill()
3857 len = skb->len; in lan78xx_tx_buf_fill()
3859 struct net_device_stats *stats = &dev->net->stats; in lan78xx_tx_buf_fill()
3861 stats->tx_dropped++; in lan78xx_tx_buf_fill()
3863 tx_data -= TX_CMD_LEN; in lan78xx_tx_buf_fill()
3868 entry->length += len; in lan78xx_tx_buf_fill()
3869 entry->num_of_packet += skb_shinfo(skb)->gso_segs ?: 1; in lan78xx_tx_buf_fill()
3873 urb_len = (u32)(tx_data - (u8 *)tx_buf->data); in lan78xx_tx_buf_fill()
3875 remain = dev->tx_urb_size - urb_len; in lan78xx_tx_buf_fill()
3889 netif_tx_lock(dev->net); in lan78xx_tx_bh()
3890 if (netif_queue_stopped(dev->net)) { in lan78xx_tx_bh()
3892 netif_wake_queue(dev->net); in lan78xx_tx_bh()
3894 netif_tx_unlock(dev->net); in lan78xx_tx_bh()
3905 if (skb_queue_empty(&dev->txq_pend)) in lan78xx_tx_bh()
3914 spin_lock_irqsave(&dev->txq.lock, flags); in lan78xx_tx_bh()
3915 ret = usb_autopm_get_interface_async(dev->intf); in lan78xx_tx_bh()
3917 spin_unlock_irqrestore(&dev->txq.lock, flags); in lan78xx_tx_bh()
3921 usb_fill_bulk_urb(entry->urb, dev->udev, dev->pipe_out, in lan78xx_tx_bh()
3922 tx_buf->data, tx_buf->len, tx_complete, in lan78xx_tx_bh()
3925 if (tx_buf->len % dev->maxpacket == 0) { in lan78xx_tx_bh()
3927 entry->urb->transfer_flags |= URB_ZERO_PACKET; in lan78xx_tx_bh()
3932 if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) { in lan78xx_tx_bh()
3933 usb_anchor_urb(entry->urb, &dev->deferred); in lan78xx_tx_bh()
3934 netif_stop_queue(dev->net); in lan78xx_tx_bh()
3935 spin_unlock_irqrestore(&dev->txq.lock, flags); in lan78xx_tx_bh()
3936 netdev_dbg(dev->net, in lan78xx_tx_bh()
3941 ret = usb_submit_urb(entry->urb, GFP_ATOMIC); in lan78xx_tx_bh()
3944 netif_trans_update(dev->net); in lan78xx_tx_bh()
3945 lan78xx_queue_skb(&dev->txq, tx_buf, tx_start); in lan78xx_tx_bh()
3947 case -EPIPE: in lan78xx_tx_bh()
3948 netif_stop_queue(dev->net); in lan78xx_tx_bh()
3950 usb_autopm_put_interface_async(dev->intf); in lan78xx_tx_bh()
3952 case -ENODEV: in lan78xx_tx_bh()
3953 case -ENOENT: in lan78xx_tx_bh()
3954 netif_dbg(dev, tx_err, dev->net, in lan78xx_tx_bh()
3956 netif_device_detach(dev->net); in lan78xx_tx_bh()
3959 usb_autopm_put_interface_async(dev->intf); in lan78xx_tx_bh()
3960 netif_dbg(dev, tx_err, dev->net, in lan78xx_tx_bh()
3965 spin_unlock_irqrestore(&dev->txq.lock, flags); in lan78xx_tx_bh()
3968 netdev_warn(dev->net, "failed to tx urb %d\n", ret); in lan78xx_tx_bh()
3970 dev->net->stats.tx_dropped += entry->num_of_packet; in lan78xx_tx_bh()
3987 while (!skb_queue_empty(&dev->rxq_overflow)) { in lan78xx_bh()
3988 lan78xx_skb_return(dev, skb_dequeue(&dev->rxq_overflow)); in lan78xx_bh()
3998 spin_lock_irqsave(&dev->rxq_done.lock, flags); in lan78xx_bh()
3999 skb_queue_splice_init(&dev->rxq_done, &done); in lan78xx_bh()
4000 spin_unlock_irqrestore(&dev->rxq_done.lock, flags); in lan78xx_bh()
4003 * pass them to the stack. Re-submit each completed URB. in lan78xx_bh()
4007 entry = (struct skb_data *)(rx_buf->cb); in lan78xx_bh()
4008 switch (entry->state) { in lan78xx_bh()
4015 netdev_dbg(dev->net, "rx buf state %d\n", in lan78xx_bh()
4016 entry->state); in lan78xx_bh()
4027 spin_lock_irqsave(&dev->rxq_done.lock, flags); in lan78xx_bh()
4028 skb_queue_splice(&done, &dev->rxq_done); in lan78xx_bh()
4029 spin_unlock_irqrestore(&dev->rxq_done.lock, flags); in lan78xx_bh()
4031 if (netif_device_present(dev->net) && netif_running(dev->net)) { in lan78xx_bh()
4032 /* reset update timer delta */ in lan78xx_bh()
4033 if (timer_pending(&dev->stat_monitor) && (dev->delta != 1)) { in lan78xx_bh()
4034 dev->delta = 1; in lan78xx_bh()
4035 mod_timer(&dev->stat_monitor, in lan78xx_bh()
4041 if (!test_bit(EVENT_RX_HALT, &dev->flags)) in lan78xx_bh()
4060 if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) { in lan78xx_poll()
4075 if (!skb_queue_empty(&dev->rxq_done)) { in lan78xx_poll()
4077 } else if (netif_carrier_ok(dev->net)) { in lan78xx_poll()
4078 if (skb_queue_empty(&dev->txq) && in lan78xx_poll()
4079 !skb_queue_empty(&dev->txq_pend)) { in lan78xx_poll()
4082 netif_tx_lock(dev->net); in lan78xx_poll()
4083 if (netif_queue_stopped(dev->net)) { in lan78xx_poll()
4084 netif_wake_queue(dev->net); in lan78xx_poll()
4087 netif_tx_unlock(dev->net); in lan78xx_poll()
4103 if (test_bit(EVENT_DEV_DISCONNECT, &dev->flags)) in lan78xx_delayedwork()
4106 if (usb_autopm_get_interface(dev->intf) < 0) in lan78xx_delayedwork()
4109 if (test_bit(EVENT_TX_HALT, &dev->flags)) { in lan78xx_delayedwork()
4110 unlink_urbs(dev, &dev->txq); in lan78xx_delayedwork()
4112 status = usb_clear_halt(dev->udev, dev->pipe_out); in lan78xx_delayedwork()
4114 status != -EPIPE && in lan78xx_delayedwork()
4115 status != -ESHUTDOWN) { in lan78xx_delayedwork()
4117 netdev_err(dev->net, in lan78xx_delayedwork()
4121 clear_bit(EVENT_TX_HALT, &dev->flags); in lan78xx_delayedwork()
4122 if (status != -ESHUTDOWN) in lan78xx_delayedwork()
4123 netif_wake_queue(dev->net); in lan78xx_delayedwork()
4127 if (test_bit(EVENT_RX_HALT, &dev->flags)) { in lan78xx_delayedwork()
4128 unlink_urbs(dev, &dev->rxq); in lan78xx_delayedwork()
4129 status = usb_clear_halt(dev->udev, dev->pipe_in); in lan78xx_delayedwork()
4131 status != -EPIPE && in lan78xx_delayedwork()
4132 status != -ESHUTDOWN) { in lan78xx_delayedwork()
4134 netdev_err(dev->net, in lan78xx_delayedwork()
4138 clear_bit(EVENT_RX_HALT, &dev->flags); in lan78xx_delayedwork()
4139 napi_schedule(&dev->napi); in lan78xx_delayedwork()
4143 if (test_bit(EVENT_LINK_RESET, &dev->flags)) { in lan78xx_delayedwork()
4146 clear_bit(EVENT_LINK_RESET, &dev->flags); in lan78xx_delayedwork()
4148 netdev_info(dev->net, "link reset failed (%d)\n", in lan78xx_delayedwork()
4153 if (test_bit(EVENT_STAT_UPDATE, &dev->flags)) { in lan78xx_delayedwork()
4156 clear_bit(EVENT_STAT_UPDATE, &dev->flags); in lan78xx_delayedwork()
4158 mod_timer(&dev->stat_monitor, in lan78xx_delayedwork()
4159 jiffies + (STAT_UPDATE_TIMER * dev->delta)); in lan78xx_delayedwork()
4161 dev->delta = min((dev->delta * 2), 50); in lan78xx_delayedwork()
4164 usb_autopm_put_interface(dev->intf); in lan78xx_delayedwork()
4169 struct lan78xx_net *dev = urb->context; in intr_complete()
4170 int status = urb->status; in intr_complete()
4178 /* software-driven interface shutdown */ in intr_complete()
4179 case -ENOENT: /* urb killed */ in intr_complete()
4180 case -ENODEV: /* hardware gone */ in intr_complete()
4181 case -ESHUTDOWN: /* hardware gone */ in intr_complete()
4182 netif_dbg(dev, ifdown, dev->net, in intr_complete()
4190 netdev_dbg(dev->net, "intr status %d\n", status); in intr_complete()
4194 if (!netif_device_present(dev->net) || in intr_complete()
4195 !netif_running(dev->net)) { in intr_complete()
4196 netdev_warn(dev->net, "not submitting new status URB"); in intr_complete()
4200 memset(urb->transfer_buffer, 0, urb->transfer_buffer_length); in intr_complete()
4206 case -ENODEV: in intr_complete()
4207 case -ENOENT: in intr_complete()
4208 netif_dbg(dev, timer, dev->net, in intr_complete()
4210 netif_device_detach(dev->net); in intr_complete()
4213 netif_err(dev, timer, dev->net, in intr_complete()
4214 "intr resubmit --> %d\n", status); in intr_complete()
4231 netif_napi_del(&dev->napi); in lan78xx_disconnect()
4234 net = dev->net; in lan78xx_disconnect()
4238 timer_shutdown_sync(&dev->stat_monitor); in lan78xx_disconnect()
4239 set_bit(EVENT_DEV_DISCONNECT, &dev->flags); in lan78xx_disconnect()
4240 cancel_delayed_work_sync(&dev->wq); in lan78xx_disconnect()
4242 phydev = net->phydev; in lan78xx_disconnect()
4247 phy_disconnect(net->phydev); in lan78xx_disconnect()
4252 usb_scuttle_anchored_urbs(&dev->deferred); in lan78xx_disconnect()
4259 usb_kill_urb(dev->urb_intr); in lan78xx_disconnect()
4260 usb_free_urb(dev->urb_intr); in lan78xx_disconnect()
4270 unlink_urbs(dev, &dev->txq); in lan78xx_tx_timeout()
4271 napi_schedule(&dev->napi); in lan78xx_tx_timeout()
4280 if (skb->len > LAN78XX_TSO_SIZE(dev)) in lan78xx_features_check()
4329 dev_err(&intf->dev, "Error: OOM\n"); in lan78xx_probe()
4330 ret = -ENOMEM; in lan78xx_probe()
4335 SET_NETDEV_DEV(netdev, &intf->dev); in lan78xx_probe()
4338 dev->udev = udev; in lan78xx_probe()
4339 dev->intf = intf; in lan78xx_probe()
4340 dev->net = netdev; in lan78xx_probe()
4341 dev->msg_enable = netif_msg_init(msg_level, NETIF_MSG_DRV in lan78xx_probe()
4344 skb_queue_head_init(&dev->rxq); in lan78xx_probe()
4345 skb_queue_head_init(&dev->txq); in lan78xx_probe()
4346 skb_queue_head_init(&dev->rxq_done); in lan78xx_probe()
4347 skb_queue_head_init(&dev->txq_pend); in lan78xx_probe()
4348 skb_queue_head_init(&dev->rxq_overflow); in lan78xx_probe()
4349 mutex_init(&dev->phy_mutex); in lan78xx_probe()
4350 mutex_init(&dev->dev_mutex); in lan78xx_probe()
4364 /* MTU range: 68 - 9000 */ in lan78xx_probe()
4365 netdev->max_mtu = MAX_SINGLE_PACKET_SIZE; in lan78xx_probe()
4369 netif_napi_add(netdev, &dev->napi, lan78xx_poll); in lan78xx_probe()
4371 INIT_DELAYED_WORK(&dev->wq, lan78xx_delayedwork); in lan78xx_probe()
4372 init_usb_anchor(&dev->deferred); in lan78xx_probe()
4374 netdev->netdev_ops = &lan78xx_netdev_ops; in lan78xx_probe()
4375 netdev->watchdog_timeo = TX_TIMEOUT_JIFFIES; in lan78xx_probe()
4376 netdev->ethtool_ops = &lan78xx_ethtool_ops; in lan78xx_probe()
4378 dev->delta = 1; in lan78xx_probe()
4379 timer_setup(&dev->stat_monitor, lan78xx_stat_monitor, 0); in lan78xx_probe()
4381 mutex_init(&dev->stats.access_lock); in lan78xx_probe()
4383 if (intf->cur_altsetting->desc.bNumEndpoints < 3) { in lan78xx_probe()
4384 ret = -ENODEV; in lan78xx_probe()
4388 dev->pipe_in = usb_rcvbulkpipe(udev, BULK_IN_PIPE); in lan78xx_probe()
4389 ep_blkin = usb_pipe_endpoint(udev, dev->pipe_in); in lan78xx_probe()
4390 if (!ep_blkin || !usb_endpoint_is_bulk_in(&ep_blkin->desc)) { in lan78xx_probe()
4391 ret = -ENODEV; in lan78xx_probe()
4395 dev->pipe_out = usb_sndbulkpipe(udev, BULK_OUT_PIPE); in lan78xx_probe()
4396 ep_blkout = usb_pipe_endpoint(udev, dev->pipe_out); in lan78xx_probe()
4397 if (!ep_blkout || !usb_endpoint_is_bulk_out(&ep_blkout->desc)) { in lan78xx_probe()
4398 ret = -ENODEV; in lan78xx_probe()
4402 ep_intr = &intf->cur_altsetting->endpoint[2]; in lan78xx_probe()
4403 if (!usb_endpoint_is_int_in(&ep_intr->desc)) { in lan78xx_probe()
4404 ret = -ENODEV; in lan78xx_probe()
4408 dev->pipe_intr = usb_rcvintpipe(dev->udev, in lan78xx_probe()
4409 usb_endpoint_num(&ep_intr->desc)); in lan78xx_probe()
4415 period = ep_intr->desc.bInterval; in lan78xx_probe()
4416 maxp = usb_maxpacket(dev->udev, dev->pipe_intr); in lan78xx_probe()
4419 ret = -ENOMEM; in lan78xx_probe()
4423 dev->urb_intr = usb_alloc_urb(0, GFP_KERNEL); in lan78xx_probe()
4424 if (!dev->urb_intr) { in lan78xx_probe()
4425 ret = -ENOMEM; in lan78xx_probe()
4428 usb_fill_int_urb(dev->urb_intr, dev->udev, in lan78xx_probe()
4429 dev->pipe_intr, buf, maxp, in lan78xx_probe()
4431 dev->urb_intr->transfer_flags |= URB_FREE_BUFFER; in lan78xx_probe()
4434 dev->maxpacket = usb_maxpacket(dev->udev, dev->pipe_out); in lan78xx_probe()
4437 if (dev->maxpacket == 0) { in lan78xx_probe()
4438 ret = -ENODEV; in lan78xx_probe()
4442 /* driver requires remote-wakeup capability during autosuspend. */ in lan78xx_probe()
4443 intf->needs_remote_wakeup = 1; in lan78xx_probe()
4457 ret = device_set_wakeup_enable(&udev->dev, true); in lan78xx_probe()
4462 pm_runtime_set_autosuspend_delay(&udev->dev, in lan78xx_probe()
4468 phy_disconnect(netdev->phydev); in lan78xx_probe()
4470 usb_free_urb(dev->urb_intr); in lan78xx_probe()
4476 netif_napi_del(&dev->napi); in lan78xx_probe()
4784 mutex_lock(&dev->dev_mutex); in lan78xx_suspend()
4786 netif_dbg(dev, ifdown, dev->net, in lan78xx_suspend()
4789 dev_open = test_bit(EVENT_DEV_OPEN, &dev->flags); in lan78xx_suspend()
4792 spin_lock_irq(&dev->txq.lock); in lan78xx_suspend()
4794 if ((skb_queue_len(&dev->txq) || in lan78xx_suspend()
4795 skb_queue_len(&dev->txq_pend)) && in lan78xx_suspend()
4797 spin_unlock_irq(&dev->txq.lock); in lan78xx_suspend()
4798 ret = -EBUSY; in lan78xx_suspend()
4801 set_bit(EVENT_DEV_ASLEEP, &dev->flags); in lan78xx_suspend()
4802 spin_unlock_irq(&dev->txq.lock); in lan78xx_suspend()
4820 netif_device_detach(dev->net); in lan78xx_suspend()
4822 usb_kill_urb(dev->urb_intr); in lan78xx_suspend()
4825 netif_device_attach(dev->net); in lan78xx_suspend()
4827 del_timer(&dev->stat_monitor); in lan78xx_suspend()
4836 pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_suspend()
4837 netif_carrier_off(dev->net); in lan78xx_suspend()
4838 ret = lan78xx_set_suspend(dev, pdata->wol); in lan78xx_suspend()
4848 set_bit(EVENT_DEV_ASLEEP, &dev->flags); in lan78xx_suspend()
4883 mutex_unlock(&dev->dev_mutex); in lan78xx_suspend()
4893 while ((urb = usb_get_from_anchor(&dev->deferred))) { in lan78xx_submit_deferred_urbs()
4894 struct sk_buff *skb = urb->context; in lan78xx_submit_deferred_urbs()
4897 if (!netif_device_present(dev->net) || in lan78xx_submit_deferred_urbs()
4898 !netif_carrier_ok(dev->net) || in lan78xx_submit_deferred_urbs()
4907 netif_trans_update(dev->net); in lan78xx_submit_deferred_urbs()
4908 lan78xx_queue_skb(&dev->txq, skb, tx_start); in lan78xx_submit_deferred_urbs()
4910 if (ret == -EPIPE) { in lan78xx_submit_deferred_urbs()
4911 netif_stop_queue(dev->net); in lan78xx_submit_deferred_urbs()
4913 } else if (ret == -ENODEV) { in lan78xx_submit_deferred_urbs()
4914 netif_device_detach(dev->net); in lan78xx_submit_deferred_urbs()
4930 mutex_lock(&dev->dev_mutex); in lan78xx_resume()
4932 netif_dbg(dev, ifup, dev->net, "resuming device"); in lan78xx_resume()
4934 dev_open = test_bit(EVENT_DEV_OPEN, &dev->flags); in lan78xx_resume()
4943 if (dev->urb_intr) { in lan78xx_resume()
4944 int ret = usb_submit_urb(dev->urb_intr, GFP_KERNEL); in lan78xx_resume()
4947 if (ret == -ENODEV) in lan78xx_resume()
4948 netif_device_detach(dev->net); in lan78xx_resume()
4949 netdev_warn(dev->net, "Failed to submit intr URB"); in lan78xx_resume()
4953 spin_lock_irq(&dev->txq.lock); in lan78xx_resume()
4955 if (netif_device_present(dev->net)) { in lan78xx_resume()
4962 clear_bit(EVENT_DEV_ASLEEP, &dev->flags); in lan78xx_resume()
4964 spin_unlock_irq(&dev->txq.lock); in lan78xx_resume()
4967 netif_device_present(dev->net) && in lan78xx_resume()
4969 netif_start_queue(dev->net); in lan78xx_resume()
4975 napi_schedule(&dev->napi); in lan78xx_resume()
4977 if (!timer_pending(&dev->stat_monitor)) { in lan78xx_resume()
4978 dev->delta = 1; in lan78xx_resume()
4979 mod_timer(&dev->stat_monitor, in lan78xx_resume()
4984 clear_bit(EVENT_DEV_ASLEEP, &dev->flags); in lan78xx_resume()
5016 mutex_unlock(&dev->dev_mutex); in lan78xx_resume()
5026 netif_dbg(dev, ifup, dev->net, "(reset) resuming device"); in lan78xx_reset_resume()
5032 phy_start(dev->net->phydev); in lan78xx_reset_resume()
5053 /* ATM2-AF USB Gigabit Ethernet Device */