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 */
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()
868 usleep_range(40, 100); 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()
893 usleep_range(40, 100); 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()
1164 for (i = 0; i < 100; i++) { in lan78xx_dataport_wait_not_busy()
1169 return -EIO; in lan78xx_dataport_wait_not_busy()
1174 usleep_range(40, 100); 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()
1504 napi_schedule(&dev->napi); in lan78xx_link_reset()
1517 set_bit(work, &dev->flags); in lan78xx_defer_kevent()
1518 if (!schedule_delayed_work(&dev->wq, 0)) in lan78xx_defer_kevent()
1519 netdev_err(dev->net, "kevent %d may have been dropped\n", work); in lan78xx_defer_kevent()
1526 if (urb->actual_length != 4) { in lan78xx_status()
1527 netdev_warn(dev->net, in lan78xx_status()
1528 "unexpected urb length %d", urb->actual_length); in lan78xx_status()
1532 intdata = get_unaligned_le32(urb->transfer_buffer); in lan78xx_status()
1535 netif_dbg(dev, link, dev->net, "PHY INTR: 0x%08x\n", intdata); in lan78xx_status()
1538 if (dev->domain_data.phyirq > 0) in lan78xx_status()
1539 generic_handle_irq_safe(dev->domain_data.phyirq); in lan78xx_status()
1541 netdev_warn(dev->net, in lan78xx_status()
1557 ret = usb_autopm_get_interface(dev->intf); in lan78xx_ethtool_get_eeprom()
1561 ee->magic = LAN78XX_EEPROM_MAGIC; in lan78xx_ethtool_get_eeprom()
1563 ret = lan78xx_read_raw_eeprom(dev, ee->offset, ee->len, data); in lan78xx_ethtool_get_eeprom()
1565 usb_autopm_put_interface(dev->intf); in lan78xx_ethtool_get_eeprom()
1576 ret = usb_autopm_get_interface(dev->intf); in lan78xx_ethtool_set_eeprom()
1583 if (ee->magic == LAN78XX_EEPROM_MAGIC) in lan78xx_ethtool_set_eeprom()
1584 ret = lan78xx_write_raw_eeprom(dev, ee->offset, ee->len, data); in lan78xx_ethtool_set_eeprom()
1585 else if ((ee->magic == LAN78XX_OTP_MAGIC) && in lan78xx_ethtool_set_eeprom()
1586 (ee->offset == 0) && in lan78xx_ethtool_set_eeprom()
1587 (ee->len == 512) && in lan78xx_ethtool_set_eeprom()
1589 ret = lan78xx_write_raw_otp(dev, ee->offset, ee->len, data); in lan78xx_ethtool_set_eeprom()
1591 usb_autopm_put_interface(dev->intf); in lan78xx_ethtool_set_eeprom()
1608 return -EOPNOTSUPP; in lan78xx_get_sset_count()
1618 mutex_lock(&dev->stats.access_lock); in lan78xx_get_stats()
1619 memcpy(data, &dev->stats.curr_stat, sizeof(dev->stats.curr_stat)); in lan78xx_get_stats()
1620 mutex_unlock(&dev->stats.access_lock); in lan78xx_get_stats()
1629 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_get_wol()
1631 if (usb_autopm_get_interface(dev->intf) < 0) in lan78xx_get_wol()
1636 wol->supported = 0; in lan78xx_get_wol()
1637 wol->wolopts = 0; in lan78xx_get_wol()
1640 wol->supported = WAKE_ALL; in lan78xx_get_wol()
1641 wol->wolopts = pdata->wol; in lan78xx_get_wol()
1643 wol->supported = 0; in lan78xx_get_wol()
1644 wol->wolopts = 0; in lan78xx_get_wol()
1648 usb_autopm_put_interface(dev->intf); in lan78xx_get_wol()
1655 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_set_wol()
1658 ret = usb_autopm_get_interface(dev->intf); in lan78xx_set_wol()
1662 if (wol->wolopts & ~WAKE_ALL) in lan78xx_set_wol()
1663 return -EINVAL; in lan78xx_set_wol()
1665 pdata->wol = wol->wolopts; in lan78xx_set_wol()
1667 device_set_wakeup_enable(&dev->udev->dev, (bool)wol->wolopts); in lan78xx_set_wol()
1669 phy_ethtool_set_wol(netdev->phydev, wol); in lan78xx_set_wol()
1671 usb_autopm_put_interface(dev->intf); in lan78xx_set_wol()
1679 struct phy_device *phydev = net->phydev; in lan78xx_get_eee()
1683 ret = usb_autopm_get_interface(dev->intf); in lan78xx_get_eee()
1693 edata->eee_enabled = true; in lan78xx_get_eee()
1694 edata->eee_active = !!(edata->advertised & in lan78xx_get_eee()
1695 edata->lp_advertised); in lan78xx_get_eee()
1696 edata->tx_lpi_enabled = true; in lan78xx_get_eee()
1699 edata->tx_lpi_timer = buf; in lan78xx_get_eee()
1701 edata->eee_enabled = false; in lan78xx_get_eee()
1702 edata->eee_active = false; in lan78xx_get_eee()
1703 edata->tx_lpi_enabled = false; in lan78xx_get_eee()
1704 edata->tx_lpi_timer = 0; in lan78xx_get_eee()
1709 usb_autopm_put_interface(dev->intf); in lan78xx_get_eee()
1720 ret = usb_autopm_get_interface(dev->intf); in lan78xx_set_eee()
1724 if (edata->eee_enabled) { in lan78xx_set_eee()
1729 phy_ethtool_set_eee(net->phydev, edata); in lan78xx_set_eee()
1731 buf = (u32)edata->tx_lpi_timer; in lan78xx_set_eee()
1739 usb_autopm_put_interface(dev->intf); in lan78xx_set_eee()
1748 mutex_lock(&net->phydev->lock); in lan78xx_get_link()
1749 phy_read_status(net->phydev); in lan78xx_get_link()
1750 link = net->phydev->link; in lan78xx_get_link()
1751 mutex_unlock(&net->phydev->lock); in lan78xx_get_link()
1761 strncpy(info->driver, DRIVER_NAME, sizeof(info->driver)); in lan78xx_get_drvinfo()
1762 usb_make_path(dev->udev, info->bus_info, sizeof(info->bus_info)); in lan78xx_get_drvinfo()
1769 return dev->msg_enable; in lan78xx_get_msglevel()
1776 dev->msg_enable = level; in lan78xx_set_msglevel()
1783 struct phy_device *phydev = net->phydev; in lan78xx_get_link_ksettings()
1786 ret = usb_autopm_get_interface(dev->intf); in lan78xx_get_link_ksettings()
1792 usb_autopm_put_interface(dev->intf); in lan78xx_get_link_ksettings()
1801 struct phy_device *phydev = net->phydev; in lan78xx_set_link_ksettings()
1805 ret = usb_autopm_get_interface(dev->intf); in lan78xx_set_link_ksettings()
1812 if (!cmd->base.autoneg) { in lan78xx_set_link_ksettings()
1820 usb_autopm_put_interface(dev->intf); in lan78xx_set_link_ksettings()
1829 struct phy_device *phydev = net->phydev; in lan78xx_get_pause()
1834 pause->autoneg = dev->fc_autoneg; in lan78xx_get_pause()
1836 if (dev->fc_request_control & FLOW_CTRL_TX) in lan78xx_get_pause()
1837 pause->tx_pause = 1; in lan78xx_get_pause()
1839 if (dev->fc_request_control & FLOW_CTRL_RX) in lan78xx_get_pause()
1840 pause->rx_pause = 1; in lan78xx_get_pause()
1847 struct phy_device *phydev = net->phydev; in lan78xx_set_pause()
1853 if (pause->autoneg && !ecmd.base.autoneg) { in lan78xx_set_pause()
1854 ret = -EINVAL; in lan78xx_set_pause()
1858 dev->fc_request_control = 0; in lan78xx_set_pause()
1859 if (pause->rx_pause) in lan78xx_set_pause()
1860 dev->fc_request_control |= FLOW_CTRL_RX; in lan78xx_set_pause()
1862 if (pause->tx_pause) in lan78xx_set_pause()
1863 dev->fc_request_control |= FLOW_CTRL_TX; in lan78xx_set_pause()
1873 mii_adv = (u32)mii_advertise_flowctrl(dev->fc_request_control); in lan78xx_set_pause()
1881 dev->fc_autoneg = pause->autoneg; in lan78xx_set_pause()
1890 if (!netdev->phydev) in lan78xx_get_regs_len()
1908 if (!netdev->phydev) in lan78xx_get_regs()
1913 data[i] = phy_read(netdev->phydev, j); in lan78xx_get_regs()
1957 if (!eth_platform_get_mac_address(&dev->udev->dev, addr)) { in lan78xx_init_mac_address()
1959 netif_dbg(dev, ifup, dev->net, in lan78xx_init_mac_address()
1967 netif_dbg(dev, ifup, dev->net, in lan78xx_init_mac_address()
1972 netif_dbg(dev, ifup, dev->net, in lan78xx_init_mac_address()
1987 eth_hw_addr_set(dev->net, addr); in lan78xx_init_mac_address()
1993 struct lan78xx_net *dev = bus->priv; in lan78xx_mdiobus_read()
1997 ret = usb_autopm_get_interface(dev->intf); in lan78xx_mdiobus_read()
2001 mutex_lock(&dev->phy_mutex); in lan78xx_mdiobus_read()
2021 mutex_unlock(&dev->phy_mutex); in lan78xx_mdiobus_read()
2022 usb_autopm_put_interface(dev->intf); in lan78xx_mdiobus_read()
2030 struct lan78xx_net *dev = bus->priv; in lan78xx_mdiobus_write()
2034 ret = usb_autopm_get_interface(dev->intf); in lan78xx_mdiobus_write()
2038 mutex_lock(&dev->phy_mutex); in lan78xx_mdiobus_write()
2057 mutex_unlock(&dev->phy_mutex); in lan78xx_mdiobus_write()
2058 usb_autopm_put_interface(dev->intf); in lan78xx_mdiobus_write()
2067 dev->mdiobus = mdiobus_alloc(); in lan78xx_mdio_init()
2068 if (!dev->mdiobus) { in lan78xx_mdio_init()
2069 netdev_err(dev->net, "can't allocate MDIO bus\n"); in lan78xx_mdio_init()
2070 return -ENOMEM; in lan78xx_mdio_init()
2073 dev->mdiobus->priv = (void *)dev; in lan78xx_mdio_init()
2074 dev->mdiobus->read = lan78xx_mdiobus_read; in lan78xx_mdio_init()
2075 dev->mdiobus->write = lan78xx_mdiobus_write; in lan78xx_mdio_init()
2076 dev->mdiobus->name = "lan78xx-mdiobus"; in lan78xx_mdio_init()
2077 dev->mdiobus->parent = &dev->udev->dev; in lan78xx_mdio_init()
2079 snprintf(dev->mdiobus->id, MII_BUS_ID_SIZE, "usb-%03d:%03d", in lan78xx_mdio_init()
2080 dev->udev->bus->busnum, dev->udev->devnum); in lan78xx_mdio_init()
2082 switch (dev->chipid) { in lan78xx_mdio_init()
2086 dev->mdiobus->phy_mask = ~(1 << 1); in lan78xx_mdio_init()
2090 dev->mdiobus->phy_mask = ~(0xFF); in lan78xx_mdio_init()
2094 node = of_get_child_by_name(dev->udev->dev.of_node, "mdio"); in lan78xx_mdio_init()
2095 ret = of_mdiobus_register(dev->mdiobus, node); in lan78xx_mdio_init()
2098 netdev_err(dev->net, "can't register MDIO bus\n"); in lan78xx_mdio_init()
2102 netdev_dbg(dev->net, "registered mdiobus bus %s\n", dev->mdiobus->id); in lan78xx_mdio_init()
2105 mdiobus_free(dev->mdiobus); in lan78xx_mdio_init()
2111 mdiobus_unregister(dev->mdiobus); in lan78xx_remove_mdio()
2112 mdiobus_free(dev->mdiobus); in lan78xx_remove_mdio()
2117 struct phy_device *phydev = net->phydev; in lan78xx_link_status_change()
2120 /* At forced 100 F/H mode, chip may fail to set mode correctly in lan78xx_link_status_change()
2122 * As workaround, set to 10 before setting to 100 in lan78xx_link_status_change()
2123 * at forced 100 F/H mode. in lan78xx_link_status_change()
2125 if (!phydev->autoneg && (phydev->speed == 100)) { in lan78xx_link_status_change()
2135 phy_write(phydev, MII_BMCR, temp); /* set to 100 later */ in lan78xx_link_status_change()
2150 struct irq_domain_data *data = d->host_data; in irq_map()
2153 irq_set_chip_and_handler(irq, data->irqchip, data->irq_handler); in irq_map()
2174 data->irqenable &= ~BIT(irqd_to_hwirq(irqd)); in lan78xx_irq_mask()
2181 data->irqenable |= BIT(irqd_to_hwirq(irqd)); in lan78xx_irq_unmask()
2188 mutex_lock(&data->irq_lock); in lan78xx_irq_bus_lock()
2199 * are only two callbacks executed in non-atomic contex. in lan78xx_irq_bus_sync_unlock()
2202 if (buf != data->irqenable) in lan78xx_irq_bus_sync_unlock()
2203 lan78xx_write_reg(dev, INT_EP_CTL, data->irqenable); in lan78xx_irq_bus_sync_unlock()
2205 mutex_unlock(&data->irq_lock); in lan78xx_irq_bus_sync_unlock()
2209 .name = "lan78xx-irqs",
2224 of_node = dev->udev->dev.parent->of_node; in lan78xx_setup_irq_domain()
2226 mutex_init(&dev->domain_data.irq_lock); in lan78xx_setup_irq_domain()
2229 dev->domain_data.irqenable = buf; in lan78xx_setup_irq_domain()
2231 dev->domain_data.irqchip = &lan78xx_irqchip; in lan78xx_setup_irq_domain()
2232 dev->domain_data.irq_handler = handle_simple_irq; in lan78xx_setup_irq_domain()
2235 &chip_domain_ops, &dev->domain_data); in lan78xx_setup_irq_domain()
2243 ret = -EINVAL; in lan78xx_setup_irq_domain()
2246 ret = -EINVAL; in lan78xx_setup_irq_domain()
2249 dev->domain_data.irqdomain = irqdomain; in lan78xx_setup_irq_domain()
2250 dev->domain_data.phyirq = irqmap; in lan78xx_setup_irq_domain()
2257 if (dev->domain_data.phyirq > 0) { in lan78xx_remove_irq_domain()
2258 irq_dispose_mapping(dev->domain_data.phyirq); in lan78xx_remove_irq_domain()
2260 if (dev->domain_data.irqdomain) in lan78xx_remove_irq_domain()
2261 irq_domain_remove(dev->domain_data.irqdomain); in lan78xx_remove_irq_domain()
2263 dev->domain_data.phyirq = 0; in lan78xx_remove_irq_domain()
2264 dev->domain_data.irqdomain = NULL; in lan78xx_remove_irq_domain()
2270 struct lan78xx_net *dev = netdev_priv(phydev->attached_dev); in lan8835_fixup()
2282 /* RGMII TX DLL Tune Adjust */ in lan8835_fixup()
2285 dev->interface = PHY_INTERFACE_MODE_RGMII_TXID; in lan8835_fixup()
2292 struct lan78xx_net *dev = netdev_priv(phydev->attached_dev); in ksz9031rnx_fixup()
2302 dev->interface = PHY_INTERFACE_MODE_RGMII_RXID; in ksz9031rnx_fixup()
2318 phydev = phy_find_first(dev->mdiobus); in lan7801_phy_init()
2320 netdev_dbg(dev->net, "PHY Not Found!! Registering Fixed PHY\n"); in lan7801_phy_init()
2323 netdev_err(dev->net, "No PHY/fixed_PHY found\n"); in lan7801_phy_init()
2326 netdev_dbg(dev->net, "Registered FIXED PHY\n"); in lan7801_phy_init()
2327 dev->interface = PHY_INTERFACE_MODE_RGMII; in lan7801_phy_init()
2336 if (!phydev->drv) { in lan7801_phy_init()
2337 netdev_err(dev->net, "no PHY driver found\n"); in lan7801_phy_init()
2340 dev->interface = PHY_INTERFACE_MODE_RGMII; in lan7801_phy_init()
2345 netdev_err(dev->net, "Failed to register fixup for PHY_KSZ9031RNX\n"); in lan7801_phy_init()
2352 netdev_err(dev->net, "Failed to register fixup for PHY_LAN8835\n"); in lan7801_phy_init()
2357 phydev->is_internal = false; in lan7801_phy_init()
2369 switch (dev->chipid) { in lan78xx_phy_init()
2373 netdev_err(dev->net, "lan7801: PHY Init Failed"); in lan78xx_phy_init()
2374 return -EIO; in lan78xx_phy_init()
2380 phydev = phy_find_first(dev->mdiobus); in lan78xx_phy_init()
2382 netdev_err(dev->net, "no PHY found\n"); in lan78xx_phy_init()
2383 return -EIO; in lan78xx_phy_init()
2385 phydev->is_internal = true; in lan78xx_phy_init()
2386 dev->interface = PHY_INTERFACE_MODE_GMII; in lan78xx_phy_init()
2390 netdev_err(dev->net, "Unknown CHIP ID found\n"); in lan78xx_phy_init()
2391 return -EIO; in lan78xx_phy_init()
2395 if (dev->domain_data.phyirq > 0) in lan78xx_phy_init()
2396 phydev->irq = dev->domain_data.phyirq; in lan78xx_phy_init()
2398 phydev->irq = PHY_POLL; in lan78xx_phy_init()
2399 netdev_dbg(dev->net, "phydev->irq = %d\n", phydev->irq); in lan78xx_phy_init()
2402 phydev->mdix = ETH_TP_MDI_AUTO; in lan78xx_phy_init()
2404 ret = phy_connect_direct(dev->net, phydev, in lan78xx_phy_init()
2406 dev->interface); in lan78xx_phy_init()
2408 netdev_err(dev->net, "can't attach PHY to %s\n", in lan78xx_phy_init()
2409 dev->mdiobus->id); in lan78xx_phy_init()
2410 if (dev->chipid == ID_REV_CHIP_ID_7801_) { in lan78xx_phy_init()
2420 return -EIO; in lan78xx_phy_init()
2427 dev->fc_request_control = (FLOW_CTRL_RX | FLOW_CTRL_TX); in lan78xx_phy_init()
2429 phydev->advertising); in lan78xx_phy_init()
2431 phydev->advertising); in lan78xx_phy_init()
2432 mii_adv = (u32)mii_advertise_flowctrl(dev->fc_request_control); in lan78xx_phy_init()
2434 linkmode_or(phydev->advertising, fc, phydev->advertising); in lan78xx_phy_init()
2436 if (phydev->mdio.dev.of_node) { in lan78xx_phy_init()
2440 len = of_property_count_elems_of_size(phydev->mdio.dev.of_node, in lan78xx_phy_init()
2441 "microchip,led-modes", in lan78xx_phy_init()
2460 dev->fc_autoneg = phydev->autoneg; in lan78xx_phy_init()
2499 spin_lock_irqsave(&q->lock, flags); in unlink_urbs()
2506 entry = (struct skb_data *)skb->cb; in unlink_urbs()
2507 if (entry->state != unlink_start) in unlink_urbs()
2512 entry->state = unlink_start; in unlink_urbs()
2513 urb = entry->urb; in unlink_urbs()
2517 * use-after-free problem inside usb_unlink_urb since in unlink_urbs()
2522 spin_unlock_irqrestore(&q->lock, flags); in unlink_urbs()
2523 /* during some PM-driven resume scenarios, in unlink_urbs()
2527 if (ret != -EINPROGRESS && ret != 0) in unlink_urbs()
2528 netdev_dbg(dev->net, "unlink urb err, %d\n", ret); in unlink_urbs()
2532 spin_lock_irqsave(&q->lock, flags); in unlink_urbs()
2534 spin_unlock_irqrestore(&q->lock, flags); in unlink_urbs()
2544 /* no second zero-length packet read wanted after mtu-sized packets */ in lan78xx_change_mtu()
2545 if ((max_frame_len % dev->maxpacket) == 0) in lan78xx_change_mtu()
2546 return -EDOM; in lan78xx_change_mtu()
2548 ret = usb_autopm_get_interface(dev->intf); in lan78xx_change_mtu()
2554 netdev->mtu = new_mtu; in lan78xx_change_mtu()
2556 usb_autopm_put_interface(dev->intf); in lan78xx_change_mtu()
2568 return -EBUSY; in lan78xx_set_mac_addr()
2570 if (!is_valid_ether_addr(addr->sa_data)) in lan78xx_set_mac_addr()
2571 return -EADDRNOTAVAIL; in lan78xx_set_mac_addr()
2573 eth_hw_addr_set(netdev, addr->sa_data); in lan78xx_set_mac_addr()
2575 addr_lo = netdev->dev_addr[0] | in lan78xx_set_mac_addr()
2576 netdev->dev_addr[1] << 8 | in lan78xx_set_mac_addr()
2577 netdev->dev_addr[2] << 16 | in lan78xx_set_mac_addr()
2578 netdev->dev_addr[3] << 24; in lan78xx_set_mac_addr()
2579 addr_hi = netdev->dev_addr[4] | in lan78xx_set_mac_addr()
2580 netdev->dev_addr[5] << 8; in lan78xx_set_mac_addr()
2597 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_set_features()
2600 spin_lock_irqsave(&pdata->rfe_ctl_lock, flags); in lan78xx_set_features()
2603 pdata->rfe_ctl |= RFE_CTL_TCPUDP_COE_ | RFE_CTL_IP_COE_; in lan78xx_set_features()
2604 pdata->rfe_ctl |= RFE_CTL_ICMP_COE_ | RFE_CTL_IGMP_COE_; in lan78xx_set_features()
2606 pdata->rfe_ctl &= ~(RFE_CTL_TCPUDP_COE_ | RFE_CTL_IP_COE_); in lan78xx_set_features()
2607 pdata->rfe_ctl &= ~(RFE_CTL_ICMP_COE_ | RFE_CTL_IGMP_COE_); in lan78xx_set_features()
2611 pdata->rfe_ctl |= RFE_CTL_VLAN_STRIP_; in lan78xx_set_features()
2613 pdata->rfe_ctl &= ~RFE_CTL_VLAN_STRIP_; in lan78xx_set_features()
2616 pdata->rfe_ctl |= RFE_CTL_VLAN_FILTER_; in lan78xx_set_features()
2618 pdata->rfe_ctl &= ~RFE_CTL_VLAN_FILTER_; in lan78xx_set_features()
2620 spin_unlock_irqrestore(&pdata->rfe_ctl_lock, flags); in lan78xx_set_features()
2622 lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); in lan78xx_set_features()
2631 struct lan78xx_net *dev = pdata->dev; in lan78xx_deferred_vlan_write()
2634 DP_SEL_VHF_VLAN_LEN, pdata->vlan_table); in lan78xx_deferred_vlan_write()
2641 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_vlan_rx_add_vid()
2648 pdata->vlan_table[vid_dword_index] |= (1 << vid_bit_index); in lan78xx_vlan_rx_add_vid()
2651 schedule_work(&pdata->set_vlan); in lan78xx_vlan_rx_add_vid()
2660 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_vlan_rx_kill_vid()
2667 pdata->vlan_table[vid_dword_index] &= ~(1 << vid_bit_index); in lan78xx_vlan_rx_kill_vid()
2670 schedule_work(&pdata->set_vlan); in lan78xx_vlan_rx_kill_vid()
2718 switch (dev->udev->speed) { in lan78xx_urb_config_init()
2720 dev->rx_urb_size = RX_SS_URB_SIZE; in lan78xx_urb_config_init()
2721 dev->tx_urb_size = TX_SS_URB_SIZE; in lan78xx_urb_config_init()
2722 dev->n_rx_urbs = RX_SS_URB_NUM; in lan78xx_urb_config_init()
2723 dev->n_tx_urbs = TX_SS_URB_NUM; in lan78xx_urb_config_init()
2724 dev->bulk_in_delay = SS_BULK_IN_DELAY; in lan78xx_urb_config_init()
2725 dev->burst_cap = SS_BURST_CAP_SIZE / SS_USB_PKT_SIZE; in lan78xx_urb_config_init()
2728 dev->rx_urb_size = RX_HS_URB_SIZE; in lan78xx_urb_config_init()
2729 dev->tx_urb_size = TX_HS_URB_SIZE; in lan78xx_urb_config_init()
2730 dev->n_rx_urbs = RX_HS_URB_NUM; in lan78xx_urb_config_init()
2731 dev->n_tx_urbs = TX_HS_URB_NUM; in lan78xx_urb_config_init()
2732 dev->bulk_in_delay = HS_BULK_IN_DELAY; in lan78xx_urb_config_init()
2733 dev->burst_cap = HS_BURST_CAP_SIZE / HS_USB_PKT_SIZE; in lan78xx_urb_config_init()
2736 dev->rx_urb_size = RX_FS_URB_SIZE; in lan78xx_urb_config_init()
2737 dev->tx_urb_size = TX_FS_URB_SIZE; in lan78xx_urb_config_init()
2738 dev->n_rx_urbs = RX_FS_URB_NUM; in lan78xx_urb_config_init()
2739 dev->n_tx_urbs = TX_FS_URB_NUM; in lan78xx_urb_config_init()
2740 dev->bulk_in_delay = FS_BULK_IN_DELAY; in lan78xx_urb_config_init()
2741 dev->burst_cap = FS_BURST_CAP_SIZE / FS_USB_PKT_SIZE; in lan78xx_urb_config_init()
2744 netdev_warn(dev->net, "USB bus speed not supported\n"); in lan78xx_urb_config_init()
2745 result = -EIO; in lan78xx_urb_config_init()
2792 ret = stopped ? 0 : -ETIME; in lan78xx_stop_hw()
2806 netif_dbg(dev, drv, dev->net, "start tx path"); in lan78xx_start_tx_path()
2814 /* Start the Tx FIFO */ in lan78xx_start_tx_path()
2827 netif_dbg(dev, drv, dev->net, "stop tx path"); in lan78xx_stop_tx_path()
2829 /* Stop the Tx FIFO */ in lan78xx_stop_tx_path()
2844 /* The caller must ensure the Tx path is stopped before calling
2856 netif_dbg(dev, drv, dev->net, "start rx path"); in lan78xx_start_rx_path()
2877 netif_dbg(dev, drv, dev->net, "stop rx path"); in lan78xx_stop_rx_path()
2904 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_reset()
2928 netdev_warn(dev->net, in lan78xx_reset()
2930 ret = -ETIMEDOUT; in lan78xx_reset()
2942 dev->chipid = (buf & ID_REV_CHIP_ID_MASK_) >> 16; in lan78xx_reset()
2943 dev->chiprev = buf & ID_REV_CHIP_REV_MASK_; in lan78xx_reset()
2959 ret = lan78xx_write_reg(dev, BURST_CAP, dev->burst_cap); in lan78xx_reset()
2963 ret = lan78xx_write_reg(dev, BULK_IN_DLY, dev->bulk_in_delay); in lan78xx_reset()
2988 buf = (MAX_RX_FIFO_SIZE - 512) / 512; in lan78xx_reset()
2994 buf = (MAX_TX_FIFO_SIZE - 512) / 512; in lan78xx_reset()
3013 ret = lan78xx_read_reg(dev, RFE_CTL, &pdata->rfe_ctl); in lan78xx_reset()
3017 pdata->rfe_ctl |= RFE_CTL_BCAST_EN_ | RFE_CTL_DA_PERFECT_; in lan78xx_reset()
3019 ret = lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); in lan78xx_reset()
3024 ret = lan78xx_set_features(dev->net, dev->net->features); in lan78xx_reset()
3028 lan78xx_set_multicast(dev->net); in lan78xx_reset()
3049 netdev_warn(dev->net, "timeout waiting for PHY Reset"); in lan78xx_reset()
3050 ret = -ETIMEDOUT; in lan78xx_reset()
3060 if (dev->chipid == ID_REV_CHIP_ID_7801_) in lan78xx_reset()
3063 if (dev->chipid == ID_REV_CHIP_ID_7800_) { in lan78xx_reset()
3067 netdev_info(dev->net, "No External EEPROM. Setting MAC Speed\n"); in lan78xx_reset()
3076 RX_MAX_FRAME_LEN(dev->net->mtu)); in lan78xx_reset()
3089 p = (u32 *)&dev->stats.rollover_max; in lan78xx_init_stats()
3090 for (i = 0; i < (sizeof(dev->stats.rollover_max) / (sizeof(u32))); i++) in lan78xx_init_stats()
3093 dev->stats.rollover_max.rx_unicast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
3094 dev->stats.rollover_max.rx_broadcast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
3095 dev->stats.rollover_max.rx_multicast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
3096 dev->stats.rollover_max.eee_rx_lpi_transitions = 0xFFFFFFFF; in lan78xx_init_stats()
3097 dev->stats.rollover_max.eee_rx_lpi_time = 0xFFFFFFFF; in lan78xx_init_stats()
3098 dev->stats.rollover_max.tx_unicast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
3099 dev->stats.rollover_max.tx_broadcast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
3100 dev->stats.rollover_max.tx_multicast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
3101 dev->stats.rollover_max.eee_tx_lpi_transitions = 0xFFFFFFFF; in lan78xx_init_stats()
3102 dev->stats.rollover_max.eee_tx_lpi_time = 0xFFFFFFFF; in lan78xx_init_stats()
3104 set_bit(EVENT_STAT_UPDATE, &dev->flags); in lan78xx_init_stats()
3112 netif_dbg(dev, ifup, dev->net, "open device"); in lan78xx_open()
3114 ret = usb_autopm_get_interface(dev->intf); in lan78xx_open()
3118 mutex_lock(&dev->dev_mutex); in lan78xx_open()
3120 phy_start(net->phydev); in lan78xx_open()
3122 netif_dbg(dev, ifup, dev->net, "phy initialised successfully"); in lan78xx_open()
3125 if (dev->urb_intr) { in lan78xx_open()
3126 ret = usb_submit_urb(dev->urb_intr, GFP_KERNEL); in lan78xx_open()
3128 netif_err(dev, ifup, dev->net, in lan78xx_open()
3150 set_bit(EVENT_DEV_OPEN, &dev->flags); in lan78xx_open()
3154 dev->link_on = false; in lan78xx_open()
3156 napi_enable(&dev->napi); in lan78xx_open()
3160 mutex_unlock(&dev->dev_mutex); in lan78xx_open()
3162 usb_autopm_put_interface(dev->intf); in lan78xx_open()
3176 dev->wait = &unlink_wakeup; in lan78xx_terminate_urbs()
3177 temp = unlink_urbs(dev, &dev->txq) + unlink_urbs(dev, &dev->rxq); in lan78xx_terminate_urbs()
3180 while (!skb_queue_empty(&dev->rxq) || in lan78xx_terminate_urbs()
3181 !skb_queue_empty(&dev->txq)) { in lan78xx_terminate_urbs()
3184 netif_dbg(dev, ifdown, dev->net, in lan78xx_terminate_urbs()
3188 dev->wait = NULL; in lan78xx_terminate_urbs()
3191 /* empty Rx done, Rx overflow and Tx pend queues in lan78xx_terminate_urbs()
3193 while (!skb_queue_empty(&dev->rxq_done)) { in lan78xx_terminate_urbs()
3194 struct sk_buff *skb = skb_dequeue(&dev->rxq_done); in lan78xx_terminate_urbs()
3199 skb_queue_purge(&dev->rxq_overflow); in lan78xx_terminate_urbs()
3200 skb_queue_purge(&dev->txq_pend); in lan78xx_terminate_urbs()
3207 netif_dbg(dev, ifup, dev->net, "stop device"); in lan78xx_stop()
3209 mutex_lock(&dev->dev_mutex); in lan78xx_stop()
3211 if (timer_pending(&dev->stat_monitor)) in lan78xx_stop()
3212 del_timer_sync(&dev->stat_monitor); in lan78xx_stop()
3214 clear_bit(EVENT_DEV_OPEN, &dev->flags); in lan78xx_stop()
3216 napi_disable(&dev->napi); in lan78xx_stop()
3220 netif_info(dev, ifdown, dev->net, in lan78xx_stop()
3221 "stop stats: rx/tx %lu/%lu, errs %lu/%lu\n", in lan78xx_stop()
3222 net->stats.rx_packets, net->stats.tx_packets, in lan78xx_stop()
3223 net->stats.rx_errors, net->stats.tx_errors); in lan78xx_stop()
3225 /* ignore errors that occur stopping the Tx and Rx data paths */ in lan78xx_stop()
3229 if (net->phydev) in lan78xx_stop()
3230 phy_stop(net->phydev); in lan78xx_stop()
3232 usb_kill_urb(dev->urb_intr); in lan78xx_stop()
3238 clear_bit(EVENT_TX_HALT, &dev->flags); in lan78xx_stop()
3239 clear_bit(EVENT_RX_HALT, &dev->flags); in lan78xx_stop()
3240 clear_bit(EVENT_LINK_RESET, &dev->flags); in lan78xx_stop()
3241 clear_bit(EVENT_STAT_UPDATE, &dev->flags); in lan78xx_stop()
3243 cancel_delayed_work_sync(&dev->wq); in lan78xx_stop()
3245 usb_autopm_put_interface(dev->intf); in lan78xx_stop()
3247 mutex_unlock(&dev->dev_mutex); in lan78xx_stop()
3257 struct skb_data *entry = (struct skb_data *)skb->cb; in defer_bh()
3259 spin_lock_irqsave(&list->lock, flags); in defer_bh()
3260 old_state = entry->state; in defer_bh()
3261 entry->state = state; in defer_bh()
3264 spin_unlock(&list->lock); in defer_bh()
3265 spin_lock(&dev->rxq_done.lock); in defer_bh()
3267 __skb_queue_tail(&dev->rxq_done, skb); in defer_bh()
3268 if (skb_queue_len(&dev->rxq_done) == 1) in defer_bh()
3269 napi_schedule(&dev->napi); in defer_bh()
3271 spin_unlock_irqrestore(&dev->rxq_done.lock, flags); in defer_bh()
3278 struct sk_buff *skb = (struct sk_buff *)urb->context; in tx_complete()
3279 struct skb_data *entry = (struct skb_data *)skb->cb; in tx_complete()
3280 struct lan78xx_net *dev = entry->dev; in tx_complete()
3282 if (urb->status == 0) { in tx_complete()
3283 dev->net->stats.tx_packets += entry->num_of_packet; in tx_complete()
3284 dev->net->stats.tx_bytes += entry->length; in tx_complete()
3286 dev->net->stats.tx_errors += entry->num_of_packet; in tx_complete()
3288 switch (urb->status) { in tx_complete()
3289 case -EPIPE: in tx_complete()
3293 /* software-driven interface shutdown */ in tx_complete()
3294 case -ECONNRESET: in tx_complete()
3295 case -ESHUTDOWN: in tx_complete()
3296 netif_dbg(dev, tx_err, dev->net, in tx_complete()
3297 "tx err interface gone %d\n", in tx_complete()
3298 entry->urb->status); in tx_complete()
3301 case -EPROTO: in tx_complete()
3302 case -ETIME: in tx_complete()
3303 case -EILSEQ: in tx_complete()
3304 netif_stop_queue(dev->net); in tx_complete()
3305 netif_dbg(dev, tx_err, dev->net, in tx_complete()
3306 "tx err queue stopped %d\n", in tx_complete()
3307 entry->urb->status); in tx_complete()
3310 netif_dbg(dev, tx_err, dev->net, in tx_complete()
3311 "unknown tx err %d\n", in tx_complete()
3312 entry->urb->status); in tx_complete()
3317 usb_autopm_put_interface_async(dev->intf); in tx_complete()
3319 skb_unlink(skb, &dev->txq); in tx_complete()
3323 /* Re-schedule NAPI if Tx data pending but no URBs in progress. in tx_complete()
3325 if (skb_queue_empty(&dev->txq) && in tx_complete()
3326 !skb_queue_empty(&dev->txq_pend)) in tx_complete()
3327 napi_schedule(&dev->napi); in tx_complete()
3333 struct skb_data *entry = (struct skb_data *)newsk->cb; in lan78xx_queue_skb()
3336 entry->state = state; in lan78xx_queue_skb()
3341 return skb_queue_len(&dev->txq_free) * dev->tx_urb_size; in lan78xx_tx_urb_space()
3346 return dev->tx_pend_data_len; in lan78xx_tx_pend_data_len()
3355 spin_lock_irqsave(&dev->txq_pend.lock, flags); in lan78xx_tx_pend_skb_add()
3357 __skb_queue_tail(&dev->txq_pend, skb); in lan78xx_tx_pend_skb_add()
3359 dev->tx_pend_data_len += skb->len; in lan78xx_tx_pend_skb_add()
3360 *tx_pend_data_len = dev->tx_pend_data_len; in lan78xx_tx_pend_skb_add()
3362 spin_unlock_irqrestore(&dev->txq_pend.lock, flags); in lan78xx_tx_pend_skb_add()
3371 spin_lock_irqsave(&dev->txq_pend.lock, flags); in lan78xx_tx_pend_skb_head_add()
3373 __skb_queue_head(&dev->txq_pend, skb); in lan78xx_tx_pend_skb_head_add()
3375 dev->tx_pend_data_len += skb->len; in lan78xx_tx_pend_skb_head_add()
3376 *tx_pend_data_len = dev->tx_pend_data_len; in lan78xx_tx_pend_skb_head_add()
3378 spin_unlock_irqrestore(&dev->txq_pend.lock, flags); in lan78xx_tx_pend_skb_head_add()
3387 spin_lock_irqsave(&dev->txq_pend.lock, flags); in lan78xx_tx_pend_skb_get()
3389 *skb = __skb_dequeue(&dev->txq_pend); in lan78xx_tx_pend_skb_get()
3391 dev->tx_pend_data_len -= (*skb)->len; in lan78xx_tx_pend_skb_get()
3392 *tx_pend_data_len = dev->tx_pend_data_len; in lan78xx_tx_pend_skb_get()
3394 spin_unlock_irqrestore(&dev->txq_pend.lock, flags); in lan78xx_tx_pend_skb_get()
3403 if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) in lan78xx_start_xmit()
3404 schedule_delayed_work(&dev->wq, 0); in lan78xx_start_xmit()
3410 /* Set up a Tx URB if none is in progress */ in lan78xx_start_xmit()
3412 if (skb_queue_empty(&dev->txq)) in lan78xx_start_xmit()
3413 napi_schedule(&dev->napi); in lan78xx_start_xmit()
3415 /* Stop stack Tx queue if we have enough data to fill in lan78xx_start_xmit()
3416 * all the free Tx URBs. in lan78xx_start_xmit()
3421 netif_dbg(dev, hw, dev->net, "tx data len: %u, urb space %u", in lan78xx_start_xmit()
3426 if (!skb_queue_empty(&dev->txq_free)) in lan78xx_start_xmit()
3427 napi_schedule(&dev->napi); in lan78xx_start_xmit()
3439 dev->data[0] = (unsigned long)kzalloc(sizeof(*pdata), GFP_KERNEL); in lan78xx_bind()
3441 pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_bind()
3443 netdev_warn(dev->net, "Unable to allocate lan78xx_priv"); in lan78xx_bind()
3444 return -ENOMEM; in lan78xx_bind()
3447 pdata->dev = dev; in lan78xx_bind()
3449 spin_lock_init(&pdata->rfe_ctl_lock); in lan78xx_bind()
3450 mutex_init(&pdata->dataport_mutex); in lan78xx_bind()
3452 INIT_WORK(&pdata->set_multicast, lan78xx_deferred_multicast_write); in lan78xx_bind()
3455 pdata->vlan_table[i] = 0; in lan78xx_bind()
3457 INIT_WORK(&pdata->set_vlan, lan78xx_deferred_vlan_write); in lan78xx_bind()
3459 dev->net->features = 0; in lan78xx_bind()
3462 dev->net->features |= NETIF_F_HW_CSUM; in lan78xx_bind()
3465 dev->net->features |= NETIF_F_RXCSUM; in lan78xx_bind()
3468 dev->net->features |= NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_SG; in lan78xx_bind()
3471 dev->net->features |= NETIF_F_HW_VLAN_CTAG_RX; in lan78xx_bind()
3474 dev->net->features |= NETIF_F_HW_VLAN_CTAG_FILTER; in lan78xx_bind()
3476 dev->net->hw_features = dev->net->features; in lan78xx_bind()
3480 netdev_warn(dev->net, in lan78xx_bind()
3488 netdev_warn(dev->net, "Registers INIT FAILED...."); in lan78xx_bind()
3494 netdev_warn(dev->net, "MDIO INIT FAILED....."); in lan78xx_bind()
3498 dev->net->flags |= IFF_MULTICAST; in lan78xx_bind()
3500 pdata->wol = WAKE_MAGIC; in lan78xx_bind()
3508 netdev_warn(dev->net, "Bind routine FAILED"); in lan78xx_bind()
3509 cancel_work_sync(&pdata->set_multicast); in lan78xx_bind()
3510 cancel_work_sync(&pdata->set_vlan); in lan78xx_bind()
3517 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_unbind()
3524 cancel_work_sync(&pdata->set_multicast); in lan78xx_unbind()
3525 cancel_work_sync(&pdata->set_vlan); in lan78xx_unbind()
3526 netif_dbg(dev, ifdown, dev->net, "free pdata"); in lan78xx_unbind()
3529 dev->data[0] = 0; in lan78xx_unbind()
3540 if (!(dev->net->features & NETIF_F_RXCSUM) || in lan78xx_rx_csum_offload()
3543 !(dev->net->features & NETIF_F_HW_VLAN_CTAG_RX))) { in lan78xx_rx_csum_offload()
3544 skb->ip_summed = CHECKSUM_NONE; in lan78xx_rx_csum_offload()
3546 skb->csum = ntohs((u16)(rx_cmd_b >> RX_CMD_B_CSUM_SHIFT_)); in lan78xx_rx_csum_offload()
3547 skb->ip_summed = CHECKSUM_COMPLETE; in lan78xx_rx_csum_offload()
3555 if ((dev->net->features & NETIF_F_HW_VLAN_CTAG_RX) && in lan78xx_rx_vlan_offload()
3563 dev->net->stats.rx_packets++; in lan78xx_skb_return()
3564 dev->net->stats.rx_bytes += skb->len; in lan78xx_skb_return()
3566 skb->protocol = eth_type_trans(skb, dev->net); in lan78xx_skb_return()
3568 netif_dbg(dev, rx_status, dev->net, "< rx, len %zu, type 0x%x\n", in lan78xx_skb_return()
3569 skb->len + sizeof(struct ethhdr), skb->protocol); in lan78xx_skb_return()
3570 memset(skb->cb, 0, sizeof(struct skb_data)); in lan78xx_skb_return()
3575 napi_gro_receive(&dev->napi, skb); in lan78xx_skb_return()
3581 if (skb->len < RX_SKB_MIN_LEN) in lan78xx_rx()
3587 while (skb->len > 0) { in lan78xx_rx()
3592 rx_cmd_a = get_unaligned_le32(skb->data); in lan78xx_rx()
3595 rx_cmd_b = get_unaligned_le32(skb->data); in lan78xx_rx()
3598 rx_cmd_c = get_unaligned_le16(skb->data); in lan78xx_rx()
3601 packet = skb->data; in lan78xx_rx()
3605 align_count = (4 - ((size + RXW_PADDING) % 4)) % 4; in lan78xx_rx()
3608 netif_dbg(dev, rx_err, dev->net, in lan78xx_rx()
3611 u32 frame_len = size - ETH_FCS_LEN; in lan78xx_rx()
3614 skb2 = napi_alloc_skb(&dev->napi, frame_len); in lan78xx_rx()
3618 memcpy(skb2->data, packet, frame_len); in lan78xx_rx()
3634 skb_queue_tail(&dev->rxq_overflow, skb2); in lan78xx_rx()
3641 if (skb->len) in lan78xx_rx()
3652 netif_dbg(dev, rx_err, dev->net, "drop\n"); in rx_process()
3653 dev->net->stats.rx_errors++; in rx_process()
3659 struct sk_buff *skb = (struct sk_buff *)urb->context; in rx_complete()
3660 struct skb_data *entry = (struct skb_data *)skb->cb; in rx_complete()
3661 struct lan78xx_net *dev = entry->dev; in rx_complete()
3662 int urb_status = urb->status; in rx_complete()
3665 netif_dbg(dev, rx_status, dev->net, in rx_complete()
3666 "rx done: status %d", urb->status); in rx_complete()
3668 skb_put(skb, urb->actual_length); in rx_complete()
3671 if (urb != entry->urb) in rx_complete()
3672 netif_warn(dev, rx_err, dev->net, "URB pointer mismatch"); in rx_complete()
3676 if (skb->len < RX_SKB_MIN_LEN) { in rx_complete()
3678 dev->net->stats.rx_errors++; in rx_complete()
3679 dev->net->stats.rx_length_errors++; in rx_complete()
3680 netif_dbg(dev, rx_err, dev->net, in rx_complete()
3681 "rx length %d\n", skb->len); in rx_complete()
3683 usb_mark_last_busy(dev->udev); in rx_complete()
3685 case -EPIPE: in rx_complete()
3686 dev->net->stats.rx_errors++; in rx_complete()
3689 case -ECONNRESET: /* async unlink */ in rx_complete()
3690 case -ESHUTDOWN: /* hardware gone */ in rx_complete()
3691 netif_dbg(dev, ifdown, dev->net, in rx_complete()
3695 case -EPROTO: in rx_complete()
3696 case -ETIME: in rx_complete()
3697 case -EILSEQ: in rx_complete()
3698 dev->net->stats.rx_errors++; in rx_complete()
3703 case -EOVERFLOW: in rx_complete()
3704 dev->net->stats.rx_over_errors++; in rx_complete()
3709 dev->net->stats.rx_errors++; in rx_complete()
3710 netif_dbg(dev, rx_err, dev->net, "rx status %d\n", urb_status); in rx_complete()
3714 state = defer_bh(dev, skb, &dev->rxq, state); in rx_complete()
3719 struct skb_data *entry = (struct skb_data *)skb->cb; in rx_submit()
3720 size_t size = dev->rx_urb_size; in rx_submit()
3721 struct urb *urb = entry->urb; in rx_submit()
3725 usb_fill_bulk_urb(urb, dev->udev, dev->pipe_in, in rx_submit()
3726 skb->data, size, rx_complete, skb); in rx_submit()
3728 spin_lock_irqsave(&dev->rxq.lock, lockflags); in rx_submit()
3730 if (netif_device_present(dev->net) && in rx_submit()
3731 netif_running(dev->net) && in rx_submit()
3732 !test_bit(EVENT_RX_HALT, &dev->flags) && in rx_submit()
3733 !test_bit(EVENT_DEV_ASLEEP, &dev->flags)) { in rx_submit()
3737 lan78xx_queue_skb(&dev->rxq, skb, rx_start); in rx_submit()
3739 case -EPIPE: in rx_submit()
3742 case -ENODEV: in rx_submit()
3743 case -ENOENT: in rx_submit()
3744 netif_dbg(dev, ifdown, dev->net, "device gone\n"); in rx_submit()
3745 netif_device_detach(dev->net); in rx_submit()
3747 case -EHOSTUNREACH: in rx_submit()
3748 ret = -ENOLINK; in rx_submit()
3749 napi_schedule(&dev->napi); in rx_submit()
3752 netif_dbg(dev, rx_err, dev->net, in rx_submit()
3754 napi_schedule(&dev->napi); in rx_submit()
3758 netif_dbg(dev, ifdown, dev->net, "rx: stopped\n"); in rx_submit()
3759 ret = -ENOLINK; in rx_submit()
3761 spin_unlock_irqrestore(&dev->rxq.lock, lockflags); in rx_submit()
3786 rx_buf->data = rx_buf->head; in lan78xx_rx_urb_resubmit()
3788 rx_buf->len = 0; in lan78xx_rx_urb_resubmit()
3789 rx_buf->data_len = 0; in lan78xx_rx_urb_resubmit()
3799 tx_cmd_a = (u32)(skb->len & TX_CMD_A_LEN_MASK_) | TX_CMD_A_FCS_; in lan78xx_fill_tx_cmd_words()
3801 if (skb->ip_summed == CHECKSUM_PARTIAL) in lan78xx_fill_tx_cmd_words()
3806 u16 mss = max(skb_shinfo(skb)->gso_size, TX_CMD_B_MSS_MIN_); in lan78xx_fill_tx_cmd_words()
3825 struct skb_data *entry = (struct skb_data *)tx_buf->cb; in lan78xx_tx_buf_fill()
3826 int remain = dev->tx_urb_size; in lan78xx_tx_buf_fill()
3827 u8 *tx_data = tx_buf->data; in lan78xx_tx_buf_fill()
3830 entry->num_of_packet = 0; in lan78xx_tx_buf_fill()
3831 entry->length = 0; in lan78xx_tx_buf_fill()
3849 align_bytes = (TX_ALIGNMENT - (urb_len % TX_ALIGNMENT)) % in lan78xx_tx_buf_fill()
3851 len = align_bytes + TX_CMD_LEN + skb->len; in lan78xx_tx_buf_fill()
3862 len = skb->len; in lan78xx_tx_buf_fill()
3864 struct net_device_stats *stats = &dev->net->stats; in lan78xx_tx_buf_fill()
3866 stats->tx_dropped++; in lan78xx_tx_buf_fill()
3868 tx_data -= TX_CMD_LEN; in lan78xx_tx_buf_fill()
3873 entry->length += len; in lan78xx_tx_buf_fill()
3874 entry->num_of_packet += skb_shinfo(skb)->gso_segs ?: 1; in lan78xx_tx_buf_fill()
3878 urb_len = (u32)(tx_data - (u8 *)tx_buf->data); in lan78xx_tx_buf_fill()
3880 remain = dev->tx_urb_size - urb_len; in lan78xx_tx_buf_fill()
3892 /* Start the stack Tx queue if it was stopped in lan78xx_tx_bh()
3894 netif_tx_lock(dev->net); in lan78xx_tx_bh()
3895 if (netif_queue_stopped(dev->net)) { in lan78xx_tx_bh()
3897 netif_wake_queue(dev->net); in lan78xx_tx_bh()
3899 netif_tx_unlock(dev->net); in lan78xx_tx_bh()
3901 /* Go through the Tx pending queue and set up URBs to transfer in lan78xx_tx_bh()
3910 if (skb_queue_empty(&dev->txq_pend)) in lan78xx_tx_bh()
3919 spin_lock_irqsave(&dev->txq.lock, flags); in lan78xx_tx_bh()
3920 ret = usb_autopm_get_interface_async(dev->intf); in lan78xx_tx_bh()
3922 spin_unlock_irqrestore(&dev->txq.lock, flags); in lan78xx_tx_bh()
3926 usb_fill_bulk_urb(entry->urb, dev->udev, dev->pipe_out, in lan78xx_tx_bh()
3927 tx_buf->data, tx_buf->len, tx_complete, in lan78xx_tx_bh()
3930 if (tx_buf->len % dev->maxpacket == 0) { in lan78xx_tx_bh()
3932 entry->urb->transfer_flags |= URB_ZERO_PACKET; in lan78xx_tx_bh()
3937 if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) { in lan78xx_tx_bh()
3938 usb_anchor_urb(entry->urb, &dev->deferred); in lan78xx_tx_bh()
3939 netif_stop_queue(dev->net); in lan78xx_tx_bh()
3940 spin_unlock_irqrestore(&dev->txq.lock, flags); in lan78xx_tx_bh()
3941 netdev_dbg(dev->net, in lan78xx_tx_bh()
3946 ret = usb_submit_urb(entry->urb, GFP_ATOMIC); in lan78xx_tx_bh()
3949 netif_trans_update(dev->net); in lan78xx_tx_bh()
3950 lan78xx_queue_skb(&dev->txq, tx_buf, tx_start); in lan78xx_tx_bh()
3952 case -EPIPE: in lan78xx_tx_bh()
3953 netif_stop_queue(dev->net); in lan78xx_tx_bh()
3955 usb_autopm_put_interface_async(dev->intf); in lan78xx_tx_bh()
3957 case -ENODEV: in lan78xx_tx_bh()
3958 case -ENOENT: in lan78xx_tx_bh()
3959 netif_dbg(dev, tx_err, dev->net, in lan78xx_tx_bh()
3960 "tx submit urb err %d (disconnected?)", ret); in lan78xx_tx_bh()
3961 netif_device_detach(dev->net); in lan78xx_tx_bh()
3964 usb_autopm_put_interface_async(dev->intf); in lan78xx_tx_bh()
3965 netif_dbg(dev, tx_err, dev->net, in lan78xx_tx_bh()
3966 "tx submit urb err %d\n", ret); in lan78xx_tx_bh()
3970 spin_unlock_irqrestore(&dev->txq.lock, flags); in lan78xx_tx_bh()
3973 netdev_warn(dev->net, "failed to tx urb %d\n", ret); in lan78xx_tx_bh()
3975 dev->net->stats.tx_dropped += entry->num_of_packet; in lan78xx_tx_bh()
3992 while (!skb_queue_empty(&dev->rxq_overflow)) { in lan78xx_bh()
3993 lan78xx_skb_return(dev, skb_dequeue(&dev->rxq_overflow)); in lan78xx_bh()
4003 spin_lock_irqsave(&dev->rxq_done.lock, flags); in lan78xx_bh()
4004 skb_queue_splice_init(&dev->rxq_done, &done); in lan78xx_bh()
4005 spin_unlock_irqrestore(&dev->rxq_done.lock, flags); in lan78xx_bh()
4008 * pass them to the stack. Re-submit each completed URB. in lan78xx_bh()
4012 entry = (struct skb_data *)(rx_buf->cb); in lan78xx_bh()
4013 switch (entry->state) { in lan78xx_bh()
4020 netdev_dbg(dev->net, "rx buf state %d\n", in lan78xx_bh()
4021 entry->state); in lan78xx_bh()
4032 spin_lock_irqsave(&dev->rxq_done.lock, flags); in lan78xx_bh()
4033 skb_queue_splice(&done, &dev->rxq_done); in lan78xx_bh()
4034 spin_unlock_irqrestore(&dev->rxq_done.lock, flags); in lan78xx_bh()
4036 if (netif_device_present(dev->net) && netif_running(dev->net)) { in lan78xx_bh()
4038 if (timer_pending(&dev->stat_monitor) && (dev->delta != 1)) { in lan78xx_bh()
4039 dev->delta = 1; in lan78xx_bh()
4040 mod_timer(&dev->stat_monitor, in lan78xx_bh()
4046 if (!test_bit(EVENT_RX_HALT, &dev->flags)) in lan78xx_bh()
4049 /* Submit new Tx URBs */ in lan78xx_bh()
4065 if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) { in lan78xx_poll()
4080 if (!skb_queue_empty(&dev->rxq_done)) { in lan78xx_poll()
4082 } else if (netif_carrier_ok(dev->net)) { in lan78xx_poll()
4083 if (skb_queue_empty(&dev->txq) && in lan78xx_poll()
4084 !skb_queue_empty(&dev->txq_pend)) { in lan78xx_poll()
4087 netif_tx_lock(dev->net); in lan78xx_poll()
4088 if (netif_queue_stopped(dev->net)) { in lan78xx_poll()
4089 netif_wake_queue(dev->net); in lan78xx_poll()
4092 netif_tx_unlock(dev->net); in lan78xx_poll()
4108 if (test_bit(EVENT_DEV_DISCONNECT, &dev->flags)) in lan78xx_delayedwork()
4111 if (usb_autopm_get_interface(dev->intf) < 0) in lan78xx_delayedwork()
4114 if (test_bit(EVENT_TX_HALT, &dev->flags)) { in lan78xx_delayedwork()
4115 unlink_urbs(dev, &dev->txq); in lan78xx_delayedwork()
4117 status = usb_clear_halt(dev->udev, dev->pipe_out); in lan78xx_delayedwork()
4119 status != -EPIPE && in lan78xx_delayedwork()
4120 status != -ESHUTDOWN) { in lan78xx_delayedwork()
4122 netdev_err(dev->net, in lan78xx_delayedwork()
4123 "can't clear tx halt, status %d\n", in lan78xx_delayedwork()
4126 clear_bit(EVENT_TX_HALT, &dev->flags); in lan78xx_delayedwork()
4127 if (status != -ESHUTDOWN) in lan78xx_delayedwork()
4128 netif_wake_queue(dev->net); in lan78xx_delayedwork()
4132 if (test_bit(EVENT_RX_HALT, &dev->flags)) { in lan78xx_delayedwork()
4133 unlink_urbs(dev, &dev->rxq); in lan78xx_delayedwork()
4134 status = usb_clear_halt(dev->udev, dev->pipe_in); in lan78xx_delayedwork()
4136 status != -EPIPE && in lan78xx_delayedwork()
4137 status != -ESHUTDOWN) { in lan78xx_delayedwork()
4139 netdev_err(dev->net, in lan78xx_delayedwork()
4143 clear_bit(EVENT_RX_HALT, &dev->flags); in lan78xx_delayedwork()
4144 napi_schedule(&dev->napi); in lan78xx_delayedwork()
4148 if (test_bit(EVENT_LINK_RESET, &dev->flags)) { in lan78xx_delayedwork()
4151 clear_bit(EVENT_LINK_RESET, &dev->flags); in lan78xx_delayedwork()
4153 netdev_info(dev->net, "link reset failed (%d)\n", in lan78xx_delayedwork()
4158 if (test_bit(EVENT_STAT_UPDATE, &dev->flags)) { in lan78xx_delayedwork()
4161 clear_bit(EVENT_STAT_UPDATE, &dev->flags); in lan78xx_delayedwork()
4163 mod_timer(&dev->stat_monitor, in lan78xx_delayedwork()
4164 jiffies + (STAT_UPDATE_TIMER * dev->delta)); in lan78xx_delayedwork()
4166 dev->delta = min((dev->delta * 2), 50); in lan78xx_delayedwork()
4169 usb_autopm_put_interface(dev->intf); in lan78xx_delayedwork()
4174 struct lan78xx_net *dev = urb->context; in intr_complete()
4175 int status = urb->status; in intr_complete()
4183 /* software-driven interface shutdown */ in intr_complete()
4184 case -ENOENT: /* urb killed */ in intr_complete()
4185 case -ENODEV: /* hardware gone */ in intr_complete()
4186 case -ESHUTDOWN: /* hardware gone */ in intr_complete()
4187 netif_dbg(dev, ifdown, dev->net, in intr_complete()
4191 /* NOTE: not throttling like RX/TX, since this endpoint in intr_complete()
4195 netdev_dbg(dev->net, "intr status %d\n", status); in intr_complete()
4199 if (!netif_device_present(dev->net) || in intr_complete()
4200 !netif_running(dev->net)) { in intr_complete()
4201 netdev_warn(dev->net, "not submitting new status URB"); in intr_complete()
4205 memset(urb->transfer_buffer, 0, urb->transfer_buffer_length); in intr_complete()
4211 case -ENODEV: in intr_complete()
4212 case -ENOENT: in intr_complete()
4213 netif_dbg(dev, timer, dev->net, in intr_complete()
4215 netif_device_detach(dev->net); in intr_complete()
4218 netif_err(dev, timer, dev->net, in intr_complete()
4219 "intr resubmit --> %d\n", status); in intr_complete()
4236 set_bit(EVENT_DEV_DISCONNECT, &dev->flags); in lan78xx_disconnect()
4238 netif_napi_del(&dev->napi); in lan78xx_disconnect()
4241 net = dev->net; in lan78xx_disconnect()
4245 cancel_delayed_work_sync(&dev->wq); in lan78xx_disconnect()
4247 phydev = net->phydev; in lan78xx_disconnect()
4252 phy_disconnect(net->phydev); in lan78xx_disconnect()
4257 usb_scuttle_anchored_urbs(&dev->deferred); in lan78xx_disconnect()
4259 if (timer_pending(&dev->stat_monitor)) in lan78xx_disconnect()
4260 del_timer_sync(&dev->stat_monitor); in lan78xx_disconnect()
4267 usb_kill_urb(dev->urb_intr); in lan78xx_disconnect()
4268 usb_free_urb(dev->urb_intr); in lan78xx_disconnect()
4278 unlink_urbs(dev, &dev->txq); in lan78xx_tx_timeout()
4279 napi_schedule(&dev->napi); in lan78xx_tx_timeout()
4288 if (skb->len > LAN78XX_TSO_SIZE(dev)) in lan78xx_features_check()
4337 dev_err(&intf->dev, "Error: OOM\n"); in lan78xx_probe()
4338 ret = -ENOMEM; in lan78xx_probe()
4343 SET_NETDEV_DEV(netdev, &intf->dev); in lan78xx_probe()
4346 dev->udev = udev; in lan78xx_probe()
4347 dev->intf = intf; in lan78xx_probe()
4348 dev->net = netdev; in lan78xx_probe()
4349 dev->msg_enable = netif_msg_init(msg_level, NETIF_MSG_DRV in lan78xx_probe()
4352 skb_queue_head_init(&dev->rxq); in lan78xx_probe()
4353 skb_queue_head_init(&dev->txq); in lan78xx_probe()
4354 skb_queue_head_init(&dev->rxq_done); in lan78xx_probe()
4355 skb_queue_head_init(&dev->txq_pend); in lan78xx_probe()
4356 skb_queue_head_init(&dev->rxq_overflow); in lan78xx_probe()
4357 mutex_init(&dev->phy_mutex); in lan78xx_probe()
4358 mutex_init(&dev->dev_mutex); in lan78xx_probe()
4372 /* MTU range: 68 - 9000 */ in lan78xx_probe()
4373 netdev->max_mtu = MAX_SINGLE_PACKET_SIZE; in lan78xx_probe()
4377 netif_napi_add(netdev, &dev->napi, lan78xx_poll); in lan78xx_probe()
4379 INIT_DELAYED_WORK(&dev->wq, lan78xx_delayedwork); in lan78xx_probe()
4380 init_usb_anchor(&dev->deferred); in lan78xx_probe()
4382 netdev->netdev_ops = &lan78xx_netdev_ops; in lan78xx_probe()
4383 netdev->watchdog_timeo = TX_TIMEOUT_JIFFIES; in lan78xx_probe()
4384 netdev->ethtool_ops = &lan78xx_ethtool_ops; in lan78xx_probe()
4386 dev->delta = 1; in lan78xx_probe()
4387 timer_setup(&dev->stat_monitor, lan78xx_stat_monitor, 0); in lan78xx_probe()
4389 mutex_init(&dev->stats.access_lock); in lan78xx_probe()
4391 if (intf->cur_altsetting->desc.bNumEndpoints < 3) { in lan78xx_probe()
4392 ret = -ENODEV; in lan78xx_probe()
4396 dev->pipe_in = usb_rcvbulkpipe(udev, BULK_IN_PIPE); in lan78xx_probe()
4397 ep_blkin = usb_pipe_endpoint(udev, dev->pipe_in); in lan78xx_probe()
4398 if (!ep_blkin || !usb_endpoint_is_bulk_in(&ep_blkin->desc)) { in lan78xx_probe()
4399 ret = -ENODEV; in lan78xx_probe()
4403 dev->pipe_out = usb_sndbulkpipe(udev, BULK_OUT_PIPE); in lan78xx_probe()
4404 ep_blkout = usb_pipe_endpoint(udev, dev->pipe_out); in lan78xx_probe()
4405 if (!ep_blkout || !usb_endpoint_is_bulk_out(&ep_blkout->desc)) { in lan78xx_probe()
4406 ret = -ENODEV; in lan78xx_probe()
4410 ep_intr = &intf->cur_altsetting->endpoint[2]; in lan78xx_probe()
4411 if (!usb_endpoint_is_int_in(&ep_intr->desc)) { in lan78xx_probe()
4412 ret = -ENODEV; in lan78xx_probe()
4416 dev->pipe_intr = usb_rcvintpipe(dev->udev, in lan78xx_probe()
4417 usb_endpoint_num(&ep_intr->desc)); in lan78xx_probe()
4423 period = ep_intr->desc.bInterval; in lan78xx_probe()
4424 maxp = usb_maxpacket(dev->udev, dev->pipe_intr); in lan78xx_probe()
4427 ret = -ENOMEM; in lan78xx_probe()
4431 dev->urb_intr = usb_alloc_urb(0, GFP_KERNEL); in lan78xx_probe()
4432 if (!dev->urb_intr) { in lan78xx_probe()
4433 ret = -ENOMEM; in lan78xx_probe()
4436 usb_fill_int_urb(dev->urb_intr, dev->udev, in lan78xx_probe()
4437 dev->pipe_intr, buf, maxp, in lan78xx_probe()
4439 dev->urb_intr->transfer_flags |= URB_FREE_BUFFER; in lan78xx_probe()
4442 dev->maxpacket = usb_maxpacket(dev->udev, dev->pipe_out); in lan78xx_probe()
4444 /* Reject broken descriptors. */ in lan78xx_probe()
4445 if (dev->maxpacket == 0) { in lan78xx_probe()
4446 ret = -ENODEV; in lan78xx_probe()
4450 /* driver requires remote-wakeup capability during autosuspend. */ in lan78xx_probe()
4451 intf->needs_remote_wakeup = 1; in lan78xx_probe()
4465 ret = device_set_wakeup_enable(&udev->dev, true); in lan78xx_probe()
4470 pm_runtime_set_autosuspend_delay(&udev->dev, in lan78xx_probe()
4476 phy_disconnect(netdev->phydev); in lan78xx_probe()
4478 usb_free_urb(dev->urb_intr); in lan78xx_probe()
4484 netif_napi_del(&dev->napi); in lan78xx_probe()
4792 mutex_lock(&dev->dev_mutex); in lan78xx_suspend()
4794 netif_dbg(dev, ifdown, dev->net, in lan78xx_suspend()
4797 dev_open = test_bit(EVENT_DEV_OPEN, &dev->flags); in lan78xx_suspend()
4800 spin_lock_irq(&dev->txq.lock); in lan78xx_suspend()
4802 if ((skb_queue_len(&dev->txq) || in lan78xx_suspend()
4803 skb_queue_len(&dev->txq_pend)) && in lan78xx_suspend()
4805 spin_unlock_irq(&dev->txq.lock); in lan78xx_suspend()
4806 ret = -EBUSY; in lan78xx_suspend()
4809 set_bit(EVENT_DEV_ASLEEP, &dev->flags); in lan78xx_suspend()
4810 spin_unlock_irq(&dev->txq.lock); in lan78xx_suspend()
4822 /* stop Tx */ in lan78xx_suspend()
4827 /* empty out the Rx and Tx queues */ in lan78xx_suspend()
4828 netif_device_detach(dev->net); in lan78xx_suspend()
4830 usb_kill_urb(dev->urb_intr); in lan78xx_suspend()
4833 netif_device_attach(dev->net); in lan78xx_suspend()
4835 del_timer(&dev->stat_monitor); in lan78xx_suspend()
4844 pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_suspend()
4845 netif_carrier_off(dev->net); in lan78xx_suspend()
4846 ret = lan78xx_set_suspend(dev, pdata->wol); in lan78xx_suspend()
4856 set_bit(EVENT_DEV_ASLEEP, &dev->flags); in lan78xx_suspend()
4891 mutex_unlock(&dev->dev_mutex); in lan78xx_suspend()
4901 while ((urb = usb_get_from_anchor(&dev->deferred))) { in lan78xx_submit_deferred_urbs()
4902 struct sk_buff *skb = urb->context; in lan78xx_submit_deferred_urbs()
4905 if (!netif_device_present(dev->net) || in lan78xx_submit_deferred_urbs()
4906 !netif_carrier_ok(dev->net) || in lan78xx_submit_deferred_urbs()
4915 netif_trans_update(dev->net); in lan78xx_submit_deferred_urbs()
4916 lan78xx_queue_skb(&dev->txq, skb, tx_start); in lan78xx_submit_deferred_urbs()
4918 if (ret == -EPIPE) { in lan78xx_submit_deferred_urbs()
4919 netif_stop_queue(dev->net); in lan78xx_submit_deferred_urbs()
4921 } else if (ret == -ENODEV) { in lan78xx_submit_deferred_urbs()
4922 netif_device_detach(dev->net); in lan78xx_submit_deferred_urbs()
4938 mutex_lock(&dev->dev_mutex); in lan78xx_resume()
4940 netif_dbg(dev, ifup, dev->net, "resuming device"); in lan78xx_resume()
4942 dev_open = test_bit(EVENT_DEV_OPEN, &dev->flags); in lan78xx_resume()
4951 if (dev->urb_intr) { in lan78xx_resume()
4952 int ret = usb_submit_urb(dev->urb_intr, GFP_KERNEL); in lan78xx_resume()
4955 if (ret == -ENODEV) in lan78xx_resume()
4956 netif_device_detach(dev->net); in lan78xx_resume()
4957 netdev_warn(dev->net, "Failed to submit intr URB"); in lan78xx_resume()
4961 spin_lock_irq(&dev->txq.lock); in lan78xx_resume()
4963 if (netif_device_present(dev->net)) { in lan78xx_resume()
4970 clear_bit(EVENT_DEV_ASLEEP, &dev->flags); in lan78xx_resume()
4972 spin_unlock_irq(&dev->txq.lock); in lan78xx_resume()
4975 netif_device_present(dev->net) && in lan78xx_resume()
4977 netif_start_queue(dev->net); in lan78xx_resume()
4983 napi_schedule(&dev->napi); in lan78xx_resume()
4985 if (!timer_pending(&dev->stat_monitor)) { in lan78xx_resume()
4986 dev->delta = 1; in lan78xx_resume()
4987 mod_timer(&dev->stat_monitor, in lan78xx_resume()
4992 clear_bit(EVENT_DEV_ASLEEP, &dev->flags); in lan78xx_resume()
5024 mutex_unlock(&dev->dev_mutex); in lan78xx_resume()
5034 netif_dbg(dev, ifup, dev->net, "(reset) resuming device"); in lan78xx_reset_resume()
5040 phy_start(dev->net->phydev); in lan78xx_reset_resume()
5061 /* ATM2-AF USB Gigabit Ethernet Device */