Lines Matching +full:eee +full:- +full:broken +full:- +full:100 +full:tx
1 // SPDX-License-Identifier: GPL-2.0+
122 #define LAN78XX_TSO_SIZE(dev) ((dev)->tx_urb_size - TX_SKB_MIN_LEN)
192 "RX 65 - 127 Byte Frames",
193 "RX 128 - 255 Byte Frames",
194 "RX 256 - 511 Bytes Frames",
195 "RX 512 - 1023 Byte Frames",
196 "RX 1024 - 1518 Byte Frames",
198 "EEE RX LPI Transitions",
199 "EEE RX LPI Time",
200 "TX FCS Errors",
201 "TX Excess Deferral Errors",
202 "TX Carrier Errors",
203 "TX Bad Byte Count",
204 "TX Single Collisions",
205 "TX Multiple Collisions",
206 "TX Excessive Collision",
207 "TX Late Collisions",
208 "TX Unicast Byte Count",
209 "TX Broadcast Byte Count",
210 "TX Multicast Byte Count",
211 "TX Unicast Frames",
212 "TX Broadcast Frames",
213 "TX Multicast Frames",
214 "TX Pause Frames",
215 "TX 64 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",
221 "TX Greater 1518 Byte Frames",
222 "EEE TX LPI Transitions",
223 "EEE TX LPI Time",
375 struct skb_data { /* skb->cb is one of these */
480 static int msg_level = -1;
495 buf->data = buf->head; in lan78xx_release_buf()
498 buf->len = 0; in lan78xx_release_buf()
499 buf->data_len = 0; in lan78xx_release_buf()
512 entry = (struct skb_data *)buf->cb; in lan78xx_free_buf_pool()
513 usb_free_urb(entry->urb); in lan78xx_free_buf_pool()
546 entry = (struct skb_data *)buf->cb; in lan78xx_alloc_buf_pool()
547 entry->urb = urb; in lan78xx_alloc_buf_pool()
548 entry->dev = dev; in lan78xx_alloc_buf_pool()
549 entry->length = 0; in lan78xx_alloc_buf_pool()
550 entry->num_of_packet = 0; in lan78xx_alloc_buf_pool()
560 return -ENOMEM; in lan78xx_alloc_buf_pool()
565 return lan78xx_get_buf(&dev->rxq_free); in lan78xx_get_rx_buf()
571 lan78xx_release_buf(&dev->rxq_free, rx_buf); in lan78xx_release_rx_buf()
576 lan78xx_free_buf_pool(&dev->rxq_free); in lan78xx_free_rx_resources()
581 return lan78xx_alloc_buf_pool(&dev->rxq_free, in lan78xx_alloc_rx_resources()
582 dev->n_rx_urbs, dev->rx_urb_size, dev); in lan78xx_alloc_rx_resources()
587 return lan78xx_get_buf(&dev->txq_free); in lan78xx_get_tx_buf()
593 lan78xx_release_buf(&dev->txq_free, tx_buf); in lan78xx_release_tx_buf()
598 lan78xx_free_buf_pool(&dev->txq_free); in lan78xx_free_tx_resources()
603 return lan78xx_alloc_buf_pool(&dev->txq_free, in lan78xx_alloc_tx_resources()
604 dev->n_tx_urbs, dev->tx_urb_size, dev); in lan78xx_alloc_tx_resources()
612 if (test_bit(EVENT_DEV_DISCONNECT, &dev->flags)) in lan78xx_read_reg()
613 return -ENODEV; in lan78xx_read_reg()
617 return -ENOMEM; in lan78xx_read_reg()
619 ret = usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0), in lan78xx_read_reg()
627 netdev_warn(dev->net, in lan78xx_read_reg()
642 if (test_bit(EVENT_DEV_DISCONNECT, &dev->flags)) in lan78xx_write_reg()
643 return -ENODEV; in lan78xx_write_reg()
647 return -ENOMEM; in lan78xx_write_reg()
652 ret = usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, 0), in lan78xx_write_reg()
658 netdev_warn(dev->net, in lan78xx_write_reg()
699 return -ENOMEM; in lan78xx_read_stats()
701 ret = usb_control_msg(dev->udev, in lan78xx_read_stats()
702 usb_rcvctrlpipe(dev->udev, 0), in lan78xx_read_stats()
718 netdev_warn(dev->net, in lan78xx_read_stats()
729 if ((struct1)->member < (dev_stats).saved.member) \
736 check_counter_rollover(stats, dev->stats, rx_fcs_errors); in lan78xx_check_stat_rollover()
737 check_counter_rollover(stats, dev->stats, rx_alignment_errors); in lan78xx_check_stat_rollover()
738 check_counter_rollover(stats, dev->stats, rx_fragment_errors); in lan78xx_check_stat_rollover()
739 check_counter_rollover(stats, dev->stats, rx_jabber_errors); in lan78xx_check_stat_rollover()
740 check_counter_rollover(stats, dev->stats, rx_undersize_frame_errors); in lan78xx_check_stat_rollover()
741 check_counter_rollover(stats, dev->stats, rx_oversize_frame_errors); in lan78xx_check_stat_rollover()
742 check_counter_rollover(stats, dev->stats, rx_dropped_frames); in lan78xx_check_stat_rollover()
743 check_counter_rollover(stats, dev->stats, rx_unicast_byte_count); in lan78xx_check_stat_rollover()
744 check_counter_rollover(stats, dev->stats, rx_broadcast_byte_count); in lan78xx_check_stat_rollover()
745 check_counter_rollover(stats, dev->stats, rx_multicast_byte_count); in lan78xx_check_stat_rollover()
746 check_counter_rollover(stats, dev->stats, rx_unicast_frames); in lan78xx_check_stat_rollover()
747 check_counter_rollover(stats, dev->stats, rx_broadcast_frames); in lan78xx_check_stat_rollover()
748 check_counter_rollover(stats, dev->stats, rx_multicast_frames); in lan78xx_check_stat_rollover()
749 check_counter_rollover(stats, dev->stats, rx_pause_frames); in lan78xx_check_stat_rollover()
750 check_counter_rollover(stats, dev->stats, rx_64_byte_frames); in lan78xx_check_stat_rollover()
751 check_counter_rollover(stats, dev->stats, rx_65_127_byte_frames); in lan78xx_check_stat_rollover()
752 check_counter_rollover(stats, dev->stats, rx_128_255_byte_frames); in lan78xx_check_stat_rollover()
753 check_counter_rollover(stats, dev->stats, rx_256_511_bytes_frames); in lan78xx_check_stat_rollover()
754 check_counter_rollover(stats, dev->stats, rx_512_1023_byte_frames); in lan78xx_check_stat_rollover()
755 check_counter_rollover(stats, dev->stats, rx_1024_1518_byte_frames); in lan78xx_check_stat_rollover()
756 check_counter_rollover(stats, dev->stats, rx_greater_1518_byte_frames); in lan78xx_check_stat_rollover()
757 check_counter_rollover(stats, dev->stats, eee_rx_lpi_transitions); in lan78xx_check_stat_rollover()
758 check_counter_rollover(stats, dev->stats, eee_rx_lpi_time); in lan78xx_check_stat_rollover()
759 check_counter_rollover(stats, dev->stats, tx_fcs_errors); in lan78xx_check_stat_rollover()
760 check_counter_rollover(stats, dev->stats, tx_excess_deferral_errors); in lan78xx_check_stat_rollover()
761 check_counter_rollover(stats, dev->stats, tx_carrier_errors); in lan78xx_check_stat_rollover()
762 check_counter_rollover(stats, dev->stats, tx_bad_byte_count); in lan78xx_check_stat_rollover()
763 check_counter_rollover(stats, dev->stats, tx_single_collisions); in lan78xx_check_stat_rollover()
764 check_counter_rollover(stats, dev->stats, tx_multiple_collisions); in lan78xx_check_stat_rollover()
765 check_counter_rollover(stats, dev->stats, tx_excessive_collision); in lan78xx_check_stat_rollover()
766 check_counter_rollover(stats, dev->stats, tx_late_collisions); in lan78xx_check_stat_rollover()
767 check_counter_rollover(stats, dev->stats, tx_unicast_byte_count); in lan78xx_check_stat_rollover()
768 check_counter_rollover(stats, dev->stats, tx_broadcast_byte_count); in lan78xx_check_stat_rollover()
769 check_counter_rollover(stats, dev->stats, tx_multicast_byte_count); in lan78xx_check_stat_rollover()
770 check_counter_rollover(stats, dev->stats, tx_unicast_frames); in lan78xx_check_stat_rollover()
771 check_counter_rollover(stats, dev->stats, tx_broadcast_frames); in lan78xx_check_stat_rollover()
772 check_counter_rollover(stats, dev->stats, tx_multicast_frames); in lan78xx_check_stat_rollover()
773 check_counter_rollover(stats, dev->stats, tx_pause_frames); in lan78xx_check_stat_rollover()
774 check_counter_rollover(stats, dev->stats, tx_64_byte_frames); in lan78xx_check_stat_rollover()
775 check_counter_rollover(stats, dev->stats, tx_65_127_byte_frames); in lan78xx_check_stat_rollover()
776 check_counter_rollover(stats, dev->stats, tx_128_255_byte_frames); in lan78xx_check_stat_rollover()
777 check_counter_rollover(stats, dev->stats, tx_256_511_bytes_frames); in lan78xx_check_stat_rollover()
778 check_counter_rollover(stats, dev->stats, tx_512_1023_byte_frames); in lan78xx_check_stat_rollover()
779 check_counter_rollover(stats, dev->stats, tx_1024_1518_byte_frames); in lan78xx_check_stat_rollover()
780 check_counter_rollover(stats, dev->stats, tx_greater_1518_byte_frames); in lan78xx_check_stat_rollover()
781 check_counter_rollover(stats, dev->stats, eee_tx_lpi_transitions); in lan78xx_check_stat_rollover()
782 check_counter_rollover(stats, dev->stats, eee_tx_lpi_time); in lan78xx_check_stat_rollover()
784 memcpy(&dev->stats.saved, stats, sizeof(struct lan78xx_statstage)); in lan78xx_check_stat_rollover()
794 if (usb_autopm_get_interface(dev->intf) < 0) in lan78xx_update_stats()
798 count = (u32 *)&dev->stats.rollover_count; in lan78xx_update_stats()
799 max = (u32 *)&dev->stats.rollover_max; in lan78xx_update_stats()
800 data = (u64 *)&dev->stats.curr_stat; in lan78xx_update_stats()
802 mutex_lock(&dev->stats.access_lock); in lan78xx_update_stats()
810 mutex_unlock(&dev->stats.access_lock); in lan78xx_update_stats()
812 usb_autopm_put_interface(dev->intf); in lan78xx_update_stats()
825 return -EIO; in lan78xx_phy_wait_not_busy()
831 return -EIO; in lan78xx_phy_wait_not_busy()
858 return -EIO; in lan78xx_wait_eeprom()
863 usleep_range(40, 100); in lan78xx_wait_eeprom()
867 netdev_warn(dev->net, "EEPROM read operation timeout"); in lan78xx_wait_eeprom()
868 return -EIO; in lan78xx_wait_eeprom()
883 return -EIO; in lan78xx_eeprom_confirm_not_busy()
888 usleep_range(40, 100); in lan78xx_eeprom_confirm_not_busy()
891 netdev_warn(dev->net, "EEPROM is busy"); in lan78xx_eeprom_confirm_not_busy()
892 return -EIO; in lan78xx_eeprom_confirm_not_busy()
908 if (dev->chipid == ID_REV_CHIP_ID_7800_) { in lan78xx_read_raw_eeprom()
922 retval = -EIO; in lan78xx_read_raw_eeprom()
932 retval = -EIO; in lan78xx_read_raw_eeprom()
942 if (dev->chipid == ID_REV_CHIP_ID_7800_) in lan78xx_read_raw_eeprom()
958 ret = -EINVAL; in lan78xx_read_eeprom()
976 if (dev->chipid == ID_REV_CHIP_ID_7800_) { in lan78xx_write_raw_eeprom()
989 retval = -EIO; in lan78xx_write_raw_eeprom()
1002 retval = -EIO; in lan78xx_write_raw_eeprom()
1011 retval = -EIO; in lan78xx_write_raw_eeprom()
1024 if (dev->chipid == ID_REV_CHIP_ID_7800_) in lan78xx_write_raw_eeprom()
1048 netdev_warn(dev->net, in lan78xx_read_raw_otp()
1050 return -EIO; in lan78xx_read_raw_otp()
1069 netdev_warn(dev->net, in lan78xx_read_raw_otp()
1071 return -EIO; in lan78xx_read_raw_otp()
1101 netdev_warn(dev->net, in lan78xx_write_raw_otp()
1103 return -EIO; in lan78xx_write_raw_otp()
1125 netdev_warn(dev->net, in lan78xx_write_raw_otp()
1127 return -EIO; in lan78xx_write_raw_otp()
1147 ret = -EINVAL; in lan78xx_read_otp()
1159 for (i = 0; i < 100; i++) { in lan78xx_dataport_wait_not_busy()
1164 return -EIO; in lan78xx_dataport_wait_not_busy()
1169 usleep_range(40, 100); in lan78xx_dataport_wait_not_busy()
1172 netdev_warn(dev->net, "%s timed out", __func__); in lan78xx_dataport_wait_not_busy()
1174 return -EIO; in lan78xx_dataport_wait_not_busy()
1180 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_dataport_write()
1184 if (usb_autopm_get_interface(dev->intf) < 0) in lan78xx_dataport_write()
1187 mutex_lock(&pdata->dataport_mutex); in lan78xx_dataport_write()
1212 mutex_unlock(&pdata->dataport_mutex); in lan78xx_dataport_write()
1213 usb_autopm_put_interface(dev->intf); in lan78xx_dataport_write()
1228 pdata->pfilter_table[index][1] = temp; in lan78xx_set_addr_filter()
1232 pdata->pfilter_table[index][0] = temp; in lan78xx_set_addr_filter()
1246 struct lan78xx_net *dev = pdata->dev; in lan78xx_deferred_multicast_write()
1249 netif_dbg(dev, drv, dev->net, "deferred multicast write 0x%08x\n", in lan78xx_deferred_multicast_write()
1250 pdata->rfe_ctl); in lan78xx_deferred_multicast_write()
1253 DP_SEL_VHF_HASH_LEN, pdata->mchash_table); in lan78xx_deferred_multicast_write()
1258 pdata->pfilter_table[i][1]); in lan78xx_deferred_multicast_write()
1260 pdata->pfilter_table[i][0]); in lan78xx_deferred_multicast_write()
1263 lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); in lan78xx_deferred_multicast_write()
1269 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_set_multicast()
1273 spin_lock_irqsave(&pdata->rfe_ctl_lock, flags); in lan78xx_set_multicast()
1275 pdata->rfe_ctl &= ~(RFE_CTL_UCAST_EN_ | RFE_CTL_MCAST_EN_ | in lan78xx_set_multicast()
1279 pdata->mchash_table[i] = 0; in lan78xx_set_multicast()
1283 pdata->pfilter_table[i][0] = 0; in lan78xx_set_multicast()
1284 pdata->pfilter_table[i][1] = 0; in lan78xx_set_multicast()
1287 pdata->rfe_ctl |= RFE_CTL_BCAST_EN_; in lan78xx_set_multicast()
1289 if (dev->net->flags & IFF_PROMISC) { in lan78xx_set_multicast()
1290 netif_dbg(dev, drv, dev->net, "promiscuous mode enabled"); in lan78xx_set_multicast()
1291 pdata->rfe_ctl |= RFE_CTL_MCAST_EN_ | RFE_CTL_UCAST_EN_; in lan78xx_set_multicast()
1293 if (dev->net->flags & IFF_ALLMULTI) { in lan78xx_set_multicast()
1294 netif_dbg(dev, drv, dev->net, in lan78xx_set_multicast()
1296 pdata->rfe_ctl |= RFE_CTL_MCAST_EN_; in lan78xx_set_multicast()
1300 if (netdev_mc_count(dev->net)) { in lan78xx_set_multicast()
1304 netif_dbg(dev, drv, dev->net, "receive multicast hash filter"); in lan78xx_set_multicast()
1306 pdata->rfe_ctl |= RFE_CTL_DA_PERFECT_; in lan78xx_set_multicast()
1312 lan78xx_set_addr_filter(pdata, i, ha->addr); in lan78xx_set_multicast()
1314 u32 bitnum = lan78xx_hash(ha->addr); in lan78xx_set_multicast()
1316 pdata->mchash_table[bitnum / 32] |= in lan78xx_set_multicast()
1318 pdata->rfe_ctl |= RFE_CTL_MCAST_HASH_; in lan78xx_set_multicast()
1324 spin_unlock_irqrestore(&pdata->rfe_ctl_lock, flags); in lan78xx_set_multicast()
1327 schedule_work(&pdata->set_multicast); in lan78xx_set_multicast()
1336 if (dev->fc_autoneg) in lan78xx_update_flowcontrol()
1339 cap = dev->fc_request_control; in lan78xx_update_flowcontrol()
1347 if (dev->udev->speed == USB_SPEED_SUPER) in lan78xx_update_flowcontrol()
1349 else if (dev->udev->speed == USB_SPEED_HIGH) in lan78xx_update_flowcontrol()
1352 netif_dbg(dev, link, dev->net, "rx pause %s, tx pause %s", in lan78xx_update_flowcontrol()
1372 mutex_lock(&dev->phy_mutex); in lan78xx_mac_reset()
1405 ret = -ETIMEDOUT; in lan78xx_mac_reset()
1407 mutex_unlock(&dev->phy_mutex); in lan78xx_mac_reset()
1414 struct phy_device *phydev = dev->net->phydev; in lan78xx_link_reset()
1424 mutex_lock(&phydev->lock); in lan78xx_link_reset()
1426 link = phydev->link; in lan78xx_link_reset()
1427 mutex_unlock(&phydev->lock); in lan78xx_link_reset()
1429 if (!link && dev->link_on) { in lan78xx_link_reset()
1430 dev->link_on = false; in lan78xx_link_reset()
1437 del_timer(&dev->stat_monitor); in lan78xx_link_reset()
1438 } else if (link && !dev->link_on) { in lan78xx_link_reset()
1439 dev->link_on = true; in lan78xx_link_reset()
1443 if (dev->udev->speed == USB_SPEED_SUPER) { in lan78xx_link_reset()
1482 netif_dbg(dev, link, dev->net, in lan78xx_link_reset()
1491 if (!timer_pending(&dev->stat_monitor)) { in lan78xx_link_reset()
1492 dev->delta = 1; in lan78xx_link_reset()
1493 mod_timer(&dev->stat_monitor, in lan78xx_link_reset()
1500 napi_schedule(&dev->napi); in lan78xx_link_reset()
1514 set_bit(work, &dev->flags); in lan78xx_defer_kevent()
1515 if (!schedule_delayed_work(&dev->wq, 0)) in lan78xx_defer_kevent()
1516 netdev_err(dev->net, "kevent %d may have been dropped\n", work); in lan78xx_defer_kevent()
1523 if (urb->actual_length != 4) { in lan78xx_status()
1524 netdev_warn(dev->net, in lan78xx_status()
1525 "unexpected urb length %d", urb->actual_length); in lan78xx_status()
1529 intdata = get_unaligned_le32(urb->transfer_buffer); in lan78xx_status()
1532 netif_dbg(dev, link, dev->net, "PHY INTR: 0x%08x\n", intdata); in lan78xx_status()
1535 if (dev->domain_data.phyirq > 0) in lan78xx_status()
1536 generic_handle_irq_safe(dev->domain_data.phyirq); in lan78xx_status()
1538 netdev_warn(dev->net, in lan78xx_status()
1554 ret = usb_autopm_get_interface(dev->intf); in lan78xx_ethtool_get_eeprom()
1558 ee->magic = LAN78XX_EEPROM_MAGIC; in lan78xx_ethtool_get_eeprom()
1560 ret = lan78xx_read_raw_eeprom(dev, ee->offset, ee->len, data); in lan78xx_ethtool_get_eeprom()
1562 usb_autopm_put_interface(dev->intf); in lan78xx_ethtool_get_eeprom()
1573 ret = usb_autopm_get_interface(dev->intf); in lan78xx_ethtool_set_eeprom()
1580 if (ee->magic == LAN78XX_EEPROM_MAGIC) in lan78xx_ethtool_set_eeprom()
1581 ret = lan78xx_write_raw_eeprom(dev, ee->offset, ee->len, data); in lan78xx_ethtool_set_eeprom()
1582 else if ((ee->magic == LAN78XX_OTP_MAGIC) && in lan78xx_ethtool_set_eeprom()
1583 (ee->offset == 0) && in lan78xx_ethtool_set_eeprom()
1584 (ee->len == 512) && in lan78xx_ethtool_set_eeprom()
1586 ret = lan78xx_write_raw_otp(dev, ee->offset, ee->len, data); in lan78xx_ethtool_set_eeprom()
1588 usb_autopm_put_interface(dev->intf); in lan78xx_ethtool_set_eeprom()
1605 return -EOPNOTSUPP; in lan78xx_get_sset_count()
1615 mutex_lock(&dev->stats.access_lock); in lan78xx_get_stats()
1616 memcpy(data, &dev->stats.curr_stat, sizeof(dev->stats.curr_stat)); in lan78xx_get_stats()
1617 mutex_unlock(&dev->stats.access_lock); in lan78xx_get_stats()
1626 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_get_wol()
1628 if (usb_autopm_get_interface(dev->intf) < 0) in lan78xx_get_wol()
1633 wol->supported = 0; in lan78xx_get_wol()
1634 wol->wolopts = 0; in lan78xx_get_wol()
1637 wol->supported = WAKE_ALL; in lan78xx_get_wol()
1638 wol->wolopts = pdata->wol; in lan78xx_get_wol()
1640 wol->supported = 0; in lan78xx_get_wol()
1641 wol->wolopts = 0; in lan78xx_get_wol()
1645 usb_autopm_put_interface(dev->intf); in lan78xx_get_wol()
1652 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_set_wol()
1655 ret = usb_autopm_get_interface(dev->intf); in lan78xx_set_wol()
1659 if (wol->wolopts & ~WAKE_ALL) in lan78xx_set_wol()
1660 return -EINVAL; in lan78xx_set_wol()
1662 pdata->wol = wol->wolopts; in lan78xx_set_wol()
1664 device_set_wakeup_enable(&dev->udev->dev, (bool)wol->wolopts); in lan78xx_set_wol()
1666 phy_ethtool_set_wol(netdev->phydev, wol); in lan78xx_set_wol()
1668 usb_autopm_put_interface(dev->intf); in lan78xx_set_wol()
1676 struct phy_device *phydev = net->phydev; in lan78xx_get_eee()
1680 ret = usb_autopm_get_interface(dev->intf); in lan78xx_get_eee()
1692 edata->tx_lpi_timer = buf; in lan78xx_get_eee()
1694 edata->tx_lpi_timer = 0; in lan78xx_get_eee()
1699 usb_autopm_put_interface(dev->intf); in lan78xx_get_eee()
1710 ret = usb_autopm_get_interface(dev->intf); in lan78xx_set_eee()
1714 ret = phy_ethtool_set_eee(net->phydev, edata); in lan78xx_set_eee()
1718 buf = (u32)edata->tx_lpi_timer; in lan78xx_set_eee()
1721 usb_autopm_put_interface(dev->intf); in lan78xx_set_eee()
1730 mutex_lock(&net->phydev->lock); in lan78xx_get_link()
1731 phy_read_status(net->phydev); in lan78xx_get_link()
1732 link = net->phydev->link; in lan78xx_get_link()
1733 mutex_unlock(&net->phydev->lock); in lan78xx_get_link()
1743 strscpy(info->driver, DRIVER_NAME, sizeof(info->driver)); in lan78xx_get_drvinfo()
1744 usb_make_path(dev->udev, info->bus_info, sizeof(info->bus_info)); in lan78xx_get_drvinfo()
1751 return dev->msg_enable; in lan78xx_get_msglevel()
1758 dev->msg_enable = level; in lan78xx_set_msglevel()
1765 struct phy_device *phydev = net->phydev; in lan78xx_get_link_ksettings()
1768 ret = usb_autopm_get_interface(dev->intf); in lan78xx_get_link_ksettings()
1774 usb_autopm_put_interface(dev->intf); in lan78xx_get_link_ksettings()
1783 struct phy_device *phydev = net->phydev; in lan78xx_set_link_ksettings()
1787 ret = usb_autopm_get_interface(dev->intf); in lan78xx_set_link_ksettings()
1794 if (!cmd->base.autoneg) { in lan78xx_set_link_ksettings()
1802 usb_autopm_put_interface(dev->intf); in lan78xx_set_link_ksettings()
1811 struct phy_device *phydev = net->phydev; in lan78xx_get_pause()
1816 pause->autoneg = dev->fc_autoneg; in lan78xx_get_pause()
1818 if (dev->fc_request_control & FLOW_CTRL_TX) in lan78xx_get_pause()
1819 pause->tx_pause = 1; in lan78xx_get_pause()
1821 if (dev->fc_request_control & FLOW_CTRL_RX) in lan78xx_get_pause()
1822 pause->rx_pause = 1; in lan78xx_get_pause()
1829 struct phy_device *phydev = net->phydev; in lan78xx_set_pause()
1835 if (pause->autoneg && !ecmd.base.autoneg) { in lan78xx_set_pause()
1836 ret = -EINVAL; in lan78xx_set_pause()
1840 dev->fc_request_control = 0; in lan78xx_set_pause()
1841 if (pause->rx_pause) in lan78xx_set_pause()
1842 dev->fc_request_control |= FLOW_CTRL_RX; in lan78xx_set_pause()
1844 if (pause->tx_pause) in lan78xx_set_pause()
1845 dev->fc_request_control |= FLOW_CTRL_TX; in lan78xx_set_pause()
1855 mii_adv = (u32)mii_advertise_flowctrl(dev->fc_request_control); in lan78xx_set_pause()
1863 dev->fc_autoneg = pause->autoneg; in lan78xx_set_pause()
1872 if (!netdev->phydev) in lan78xx_get_regs_len()
1890 if (!netdev->phydev) in lan78xx_get_regs()
1895 data[i] = phy_read(netdev->phydev, j); in lan78xx_get_regs()
1939 if (!eth_platform_get_mac_address(&dev->udev->dev, addr)) { in lan78xx_init_mac_address()
1941 netif_dbg(dev, ifup, dev->net, in lan78xx_init_mac_address()
1949 netif_dbg(dev, ifup, dev->net, in lan78xx_init_mac_address()
1954 netif_dbg(dev, ifup, dev->net, in lan78xx_init_mac_address()
1969 eth_hw_addr_set(dev->net, addr); in lan78xx_init_mac_address()
1975 struct lan78xx_net *dev = bus->priv; in lan78xx_mdiobus_read()
1979 ret = usb_autopm_get_interface(dev->intf); in lan78xx_mdiobus_read()
1983 mutex_lock(&dev->phy_mutex); in lan78xx_mdiobus_read()
2003 mutex_unlock(&dev->phy_mutex); in lan78xx_mdiobus_read()
2004 usb_autopm_put_interface(dev->intf); in lan78xx_mdiobus_read()
2012 struct lan78xx_net *dev = bus->priv; in lan78xx_mdiobus_write()
2016 ret = usb_autopm_get_interface(dev->intf); in lan78xx_mdiobus_write()
2020 mutex_lock(&dev->phy_mutex); in lan78xx_mdiobus_write()
2039 mutex_unlock(&dev->phy_mutex); in lan78xx_mdiobus_write()
2040 usb_autopm_put_interface(dev->intf); in lan78xx_mdiobus_write()
2049 dev->mdiobus = mdiobus_alloc(); in lan78xx_mdio_init()
2050 if (!dev->mdiobus) { in lan78xx_mdio_init()
2051 netdev_err(dev->net, "can't allocate MDIO bus\n"); in lan78xx_mdio_init()
2052 return -ENOMEM; in lan78xx_mdio_init()
2055 dev->mdiobus->priv = (void *)dev; in lan78xx_mdio_init()
2056 dev->mdiobus->read = lan78xx_mdiobus_read; in lan78xx_mdio_init()
2057 dev->mdiobus->write = lan78xx_mdiobus_write; in lan78xx_mdio_init()
2058 dev->mdiobus->name = "lan78xx-mdiobus"; in lan78xx_mdio_init()
2059 dev->mdiobus->parent = &dev->udev->dev; in lan78xx_mdio_init()
2061 snprintf(dev->mdiobus->id, MII_BUS_ID_SIZE, "usb-%03d:%03d", in lan78xx_mdio_init()
2062 dev->udev->bus->busnum, dev->udev->devnum); in lan78xx_mdio_init()
2064 switch (dev->chipid) { in lan78xx_mdio_init()
2068 dev->mdiobus->phy_mask = ~(1 << 1); in lan78xx_mdio_init()
2072 dev->mdiobus->phy_mask = ~(0xFF); in lan78xx_mdio_init()
2076 node = of_get_child_by_name(dev->udev->dev.of_node, "mdio"); in lan78xx_mdio_init()
2077 ret = of_mdiobus_register(dev->mdiobus, node); in lan78xx_mdio_init()
2080 netdev_err(dev->net, "can't register MDIO bus\n"); in lan78xx_mdio_init()
2084 netdev_dbg(dev->net, "registered mdiobus bus %s\n", dev->mdiobus->id); in lan78xx_mdio_init()
2087 mdiobus_free(dev->mdiobus); in lan78xx_mdio_init()
2093 mdiobus_unregister(dev->mdiobus); in lan78xx_remove_mdio()
2094 mdiobus_free(dev->mdiobus); in lan78xx_remove_mdio()
2100 struct phy_device *phydev = net->phydev; in lan78xx_link_status_change()
2108 if (phydev->enable_tx_lpi) in lan78xx_link_status_change()
2120 struct irq_domain_data *data = d->host_data; in irq_map()
2123 irq_set_chip_and_handler(irq, data->irqchip, data->irq_handler); in irq_map()
2144 data->irqenable &= ~BIT(irqd_to_hwirq(irqd)); in lan78xx_irq_mask()
2151 data->irqenable |= BIT(irqd_to_hwirq(irqd)); in lan78xx_irq_unmask()
2158 mutex_lock(&data->irq_lock); in lan78xx_irq_bus_lock()
2169 * are only two callbacks executed in non-atomic contex. in lan78xx_irq_bus_sync_unlock()
2172 if (buf != data->irqenable) in lan78xx_irq_bus_sync_unlock()
2173 lan78xx_write_reg(dev, INT_EP_CTL, data->irqenable); in lan78xx_irq_bus_sync_unlock()
2175 mutex_unlock(&data->irq_lock); in lan78xx_irq_bus_sync_unlock()
2179 .name = "lan78xx-irqs",
2194 of_node = dev->udev->dev.parent->of_node; in lan78xx_setup_irq_domain()
2196 mutex_init(&dev->domain_data.irq_lock); in lan78xx_setup_irq_domain()
2199 dev->domain_data.irqenable = buf; in lan78xx_setup_irq_domain()
2201 dev->domain_data.irqchip = &lan78xx_irqchip; in lan78xx_setup_irq_domain()
2202 dev->domain_data.irq_handler = handle_simple_irq; in lan78xx_setup_irq_domain()
2205 &chip_domain_ops, &dev->domain_data); in lan78xx_setup_irq_domain()
2213 ret = -EINVAL; in lan78xx_setup_irq_domain()
2216 ret = -EINVAL; in lan78xx_setup_irq_domain()
2219 dev->domain_data.irqdomain = irqdomain; in lan78xx_setup_irq_domain()
2220 dev->domain_data.phyirq = irqmap; in lan78xx_setup_irq_domain()
2227 if (dev->domain_data.phyirq > 0) { in lan78xx_remove_irq_domain()
2228 irq_dispose_mapping(dev->domain_data.phyirq); in lan78xx_remove_irq_domain()
2230 if (dev->domain_data.irqdomain) in lan78xx_remove_irq_domain()
2231 irq_domain_remove(dev->domain_data.irqdomain); in lan78xx_remove_irq_domain()
2233 dev->domain_data.phyirq = 0; in lan78xx_remove_irq_domain()
2234 dev->domain_data.irqdomain = NULL; in lan78xx_remove_irq_domain()
2240 struct lan78xx_net *dev = netdev_priv(phydev->attached_dev); in lan8835_fixup()
2252 /* RGMII TX DLL Tune Adjust */ in lan8835_fixup()
2255 dev->interface = PHY_INTERFACE_MODE_RGMII_TXID; in lan8835_fixup()
2262 struct lan78xx_net *dev = netdev_priv(phydev->attached_dev); in ksz9031rnx_fixup()
2272 dev->interface = PHY_INTERFACE_MODE_RGMII_RXID; in ksz9031rnx_fixup()
2288 phydev = phy_find_first(dev->mdiobus); in lan7801_phy_init()
2290 netdev_dbg(dev->net, "PHY Not Found!! Registering Fixed PHY\n"); in lan7801_phy_init()
2293 netdev_err(dev->net, "No PHY/fixed_PHY found\n"); in lan7801_phy_init()
2296 netdev_dbg(dev->net, "Registered FIXED PHY\n"); in lan7801_phy_init()
2297 dev->interface = PHY_INTERFACE_MODE_RGMII; in lan7801_phy_init()
2306 if (!phydev->drv) { in lan7801_phy_init()
2307 netdev_err(dev->net, "no PHY driver found\n"); in lan7801_phy_init()
2310 dev->interface = PHY_INTERFACE_MODE_RGMII; in lan7801_phy_init()
2315 netdev_err(dev->net, "Failed to register fixup for PHY_KSZ9031RNX\n"); in lan7801_phy_init()
2322 netdev_err(dev->net, "Failed to register fixup for PHY_LAN8835\n"); in lan7801_phy_init()
2327 phydev->is_internal = false; in lan7801_phy_init()
2339 switch (dev->chipid) { in lan78xx_phy_init()
2343 netdev_err(dev->net, "lan7801: PHY Init Failed"); in lan78xx_phy_init()
2344 return -EIO; in lan78xx_phy_init()
2350 phydev = phy_find_first(dev->mdiobus); in lan78xx_phy_init()
2352 netdev_err(dev->net, "no PHY found\n"); in lan78xx_phy_init()
2353 return -EIO; in lan78xx_phy_init()
2355 phydev->is_internal = true; in lan78xx_phy_init()
2356 dev->interface = PHY_INTERFACE_MODE_GMII; in lan78xx_phy_init()
2360 netdev_err(dev->net, "Unknown CHIP ID found\n"); in lan78xx_phy_init()
2361 return -EIO; in lan78xx_phy_init()
2365 if (dev->domain_data.phyirq > 0) in lan78xx_phy_init()
2366 phydev->irq = dev->domain_data.phyirq; in lan78xx_phy_init()
2368 phydev->irq = PHY_POLL; in lan78xx_phy_init()
2369 netdev_dbg(dev->net, "phydev->irq = %d\n", phydev->irq); in lan78xx_phy_init()
2372 phydev->mdix = ETH_TP_MDI_AUTO; in lan78xx_phy_init()
2374 ret = phy_connect_direct(dev->net, phydev, in lan78xx_phy_init()
2376 dev->interface); in lan78xx_phy_init()
2378 netdev_err(dev->net, "can't attach PHY to %s\n", in lan78xx_phy_init()
2379 dev->mdiobus->id); in lan78xx_phy_init()
2380 if (dev->chipid == ID_REV_CHIP_ID_7801_) { in lan78xx_phy_init()
2390 return -EIO; in lan78xx_phy_init()
2397 dev->fc_request_control = (FLOW_CTRL_RX | FLOW_CTRL_TX); in lan78xx_phy_init()
2399 phydev->advertising); in lan78xx_phy_init()
2401 phydev->advertising); in lan78xx_phy_init()
2402 mii_adv = (u32)mii_advertise_flowctrl(dev->fc_request_control); in lan78xx_phy_init()
2404 linkmode_or(phydev->advertising, fc, phydev->advertising); in lan78xx_phy_init()
2408 if (phydev->mdio.dev.of_node) { in lan78xx_phy_init()
2412 len = of_property_count_elems_of_size(phydev->mdio.dev.of_node, in lan78xx_phy_init()
2413 "microchip,led-modes", in lan78xx_phy_init()
2432 dev->fc_autoneg = phydev->autoneg; in lan78xx_phy_init()
2471 spin_lock_irqsave(&q->lock, flags); in unlink_urbs()
2478 entry = (struct skb_data *)skb->cb; in unlink_urbs()
2479 if (entry->state != unlink_start) in unlink_urbs()
2484 entry->state = unlink_start; in unlink_urbs()
2485 urb = entry->urb; in unlink_urbs()
2489 * use-after-free problem inside usb_unlink_urb since in unlink_urbs()
2494 spin_unlock_irqrestore(&q->lock, flags); in unlink_urbs()
2495 /* during some PM-driven resume scenarios, in unlink_urbs()
2499 if (ret != -EINPROGRESS && ret != 0) in unlink_urbs()
2500 netdev_dbg(dev->net, "unlink urb err, %d\n", ret); in unlink_urbs()
2504 spin_lock_irqsave(&q->lock, flags); in unlink_urbs()
2506 spin_unlock_irqrestore(&q->lock, flags); in unlink_urbs()
2516 /* no second zero-length packet read wanted after mtu-sized packets */ in lan78xx_change_mtu()
2517 if ((max_frame_len % dev->maxpacket) == 0) in lan78xx_change_mtu()
2518 return -EDOM; in lan78xx_change_mtu()
2520 ret = usb_autopm_get_interface(dev->intf); in lan78xx_change_mtu()
2526 WRITE_ONCE(netdev->mtu, new_mtu); in lan78xx_change_mtu()
2528 usb_autopm_put_interface(dev->intf); in lan78xx_change_mtu()
2540 return -EBUSY; in lan78xx_set_mac_addr()
2542 if (!is_valid_ether_addr(addr->sa_data)) in lan78xx_set_mac_addr()
2543 return -EADDRNOTAVAIL; in lan78xx_set_mac_addr()
2545 eth_hw_addr_set(netdev, addr->sa_data); in lan78xx_set_mac_addr()
2547 addr_lo = netdev->dev_addr[0] | in lan78xx_set_mac_addr()
2548 netdev->dev_addr[1] << 8 | in lan78xx_set_mac_addr()
2549 netdev->dev_addr[2] << 16 | in lan78xx_set_mac_addr()
2550 netdev->dev_addr[3] << 24; in lan78xx_set_mac_addr()
2551 addr_hi = netdev->dev_addr[4] | in lan78xx_set_mac_addr()
2552 netdev->dev_addr[5] << 8; in lan78xx_set_mac_addr()
2569 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_set_features()
2572 spin_lock_irqsave(&pdata->rfe_ctl_lock, flags); in lan78xx_set_features()
2575 pdata->rfe_ctl |= RFE_CTL_TCPUDP_COE_ | RFE_CTL_IP_COE_; in lan78xx_set_features()
2576 pdata->rfe_ctl |= RFE_CTL_ICMP_COE_ | RFE_CTL_IGMP_COE_; in lan78xx_set_features()
2578 pdata->rfe_ctl &= ~(RFE_CTL_TCPUDP_COE_ | RFE_CTL_IP_COE_); in lan78xx_set_features()
2579 pdata->rfe_ctl &= ~(RFE_CTL_ICMP_COE_ | RFE_CTL_IGMP_COE_); in lan78xx_set_features()
2583 pdata->rfe_ctl |= RFE_CTL_VLAN_STRIP_; in lan78xx_set_features()
2585 pdata->rfe_ctl &= ~RFE_CTL_VLAN_STRIP_; in lan78xx_set_features()
2588 pdata->rfe_ctl |= RFE_CTL_VLAN_FILTER_; in lan78xx_set_features()
2590 pdata->rfe_ctl &= ~RFE_CTL_VLAN_FILTER_; in lan78xx_set_features()
2592 spin_unlock_irqrestore(&pdata->rfe_ctl_lock, flags); in lan78xx_set_features()
2594 lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); in lan78xx_set_features()
2603 struct lan78xx_net *dev = pdata->dev; in lan78xx_deferred_vlan_write()
2606 DP_SEL_VHF_VLAN_LEN, pdata->vlan_table); in lan78xx_deferred_vlan_write()
2613 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_vlan_rx_add_vid()
2620 pdata->vlan_table[vid_dword_index] |= (1 << vid_bit_index); in lan78xx_vlan_rx_add_vid()
2623 schedule_work(&pdata->set_vlan); in lan78xx_vlan_rx_add_vid()
2632 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_vlan_rx_kill_vid()
2639 pdata->vlan_table[vid_dword_index] &= ~(1 << vid_bit_index); in lan78xx_vlan_rx_kill_vid()
2642 schedule_work(&pdata->set_vlan); in lan78xx_vlan_rx_kill_vid()
2690 switch (dev->udev->speed) { in lan78xx_urb_config_init()
2692 dev->rx_urb_size = RX_SS_URB_SIZE; in lan78xx_urb_config_init()
2693 dev->tx_urb_size = TX_SS_URB_SIZE; in lan78xx_urb_config_init()
2694 dev->n_rx_urbs = RX_SS_URB_NUM; in lan78xx_urb_config_init()
2695 dev->n_tx_urbs = TX_SS_URB_NUM; in lan78xx_urb_config_init()
2696 dev->bulk_in_delay = SS_BULK_IN_DELAY; in lan78xx_urb_config_init()
2697 dev->burst_cap = SS_BURST_CAP_SIZE / SS_USB_PKT_SIZE; in lan78xx_urb_config_init()
2700 dev->rx_urb_size = RX_HS_URB_SIZE; in lan78xx_urb_config_init()
2701 dev->tx_urb_size = TX_HS_URB_SIZE; in lan78xx_urb_config_init()
2702 dev->n_rx_urbs = RX_HS_URB_NUM; in lan78xx_urb_config_init()
2703 dev->n_tx_urbs = TX_HS_URB_NUM; in lan78xx_urb_config_init()
2704 dev->bulk_in_delay = HS_BULK_IN_DELAY; in lan78xx_urb_config_init()
2705 dev->burst_cap = HS_BURST_CAP_SIZE / HS_USB_PKT_SIZE; in lan78xx_urb_config_init()
2708 dev->rx_urb_size = RX_FS_URB_SIZE; in lan78xx_urb_config_init()
2709 dev->tx_urb_size = TX_FS_URB_SIZE; in lan78xx_urb_config_init()
2710 dev->n_rx_urbs = RX_FS_URB_NUM; in lan78xx_urb_config_init()
2711 dev->n_tx_urbs = TX_FS_URB_NUM; in lan78xx_urb_config_init()
2712 dev->bulk_in_delay = FS_BULK_IN_DELAY; in lan78xx_urb_config_init()
2713 dev->burst_cap = FS_BURST_CAP_SIZE / FS_USB_PKT_SIZE; in lan78xx_urb_config_init()
2716 netdev_warn(dev->net, "USB bus speed not supported\n"); in lan78xx_urb_config_init()
2717 result = -EIO; in lan78xx_urb_config_init()
2764 ret = stopped ? 0 : -ETIME; in lan78xx_stop_hw()
2778 netif_dbg(dev, drv, dev->net, "start tx path"); in lan78xx_start_tx_path()
2786 /* Start the Tx FIFO */ in lan78xx_start_tx_path()
2799 netif_dbg(dev, drv, dev->net, "stop tx path"); in lan78xx_stop_tx_path()
2801 /* Stop the Tx FIFO */ in lan78xx_stop_tx_path()
2816 /* The caller must ensure the Tx path is stopped before calling
2828 netif_dbg(dev, drv, dev->net, "start rx path"); in lan78xx_start_rx_path()
2849 netif_dbg(dev, drv, dev->net, "stop rx path"); in lan78xx_stop_rx_path()
2876 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_reset()
2900 netdev_warn(dev->net, in lan78xx_reset()
2902 ret = -ETIMEDOUT; in lan78xx_reset()
2914 dev->chipid = (buf & ID_REV_CHIP_ID_MASK_) >> 16; in lan78xx_reset()
2915 dev->chiprev = buf & ID_REV_CHIP_REV_MASK_; in lan78xx_reset()
2931 ret = lan78xx_write_reg(dev, BURST_CAP, dev->burst_cap); in lan78xx_reset()
2935 ret = lan78xx_write_reg(dev, BULK_IN_DLY, dev->bulk_in_delay); in lan78xx_reset()
2962 buf = (MAX_RX_FIFO_SIZE - 512) / 512; in lan78xx_reset()
2968 buf = (MAX_TX_FIFO_SIZE - 512) / 512; in lan78xx_reset()
2987 ret = lan78xx_read_reg(dev, RFE_CTL, &pdata->rfe_ctl); in lan78xx_reset()
2991 pdata->rfe_ctl |= RFE_CTL_BCAST_EN_ | RFE_CTL_DA_PERFECT_; in lan78xx_reset()
2993 ret = lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); in lan78xx_reset()
2998 ret = lan78xx_set_features(dev->net, dev->net->features); in lan78xx_reset()
3002 lan78xx_set_multicast(dev->net); in lan78xx_reset()
3023 netdev_warn(dev->net, "timeout waiting for PHY Reset"); in lan78xx_reset()
3024 ret = -ETIMEDOUT; in lan78xx_reset()
3034 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()
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()
3170 /* empty Rx done, Rx overflow and Tx pend queues 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()
3200 "stop stats: rx/tx %lu/%lu, errs %lu/%lu\n", 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()
3204 /* ignore errors that occur stopping the Tx and Rx data paths */ 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()
3276 "tx err interface gone %d\n", 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()
3285 "tx err queue stopped %d\n", in tx_complete()
3286 entry->urb->status); in tx_complete()
3289 netif_dbg(dev, tx_err, dev->net, in tx_complete()
3290 "unknown tx err %d\n", 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()
3389 /* Set up a Tx URB if none is in progress */ in lan78xx_start_xmit()
3391 if (skb_queue_empty(&dev->txq)) in lan78xx_start_xmit()
3392 napi_schedule(&dev->napi); in lan78xx_start_xmit()
3394 /* Stop stack Tx queue if we have enough data to fill in lan78xx_start_xmit()
3395 * all the free Tx URBs. 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()
3887 /* Start the stack Tx queue if it was stopped in lan78xx_tx_bh()
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()
3896 /* Go through the Tx pending queue and set up URBs to transfer 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()
3955 "tx submit urb err %d (disconnected?)", ret); 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()
3961 "tx submit urb err %d\n", ret); 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()
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()
4044 /* Submit new Tx URBs */ 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()
4118 "can't clear tx halt, status %d\n", 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()
4186 /* NOTE: not throttling like RX/TX, since this endpoint 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()
4436 /* Reject broken descriptors. */ 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()
4814 /* stop Tx */ in lan78xx_suspend()
4819 /* empty out the Rx and Tx queues */ 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 */