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()
1505 napi_schedule(&dev->napi); in lan78xx_link_reset()
1519 set_bit(work, &dev->flags); in lan78xx_defer_kevent()
1520 if (!schedule_delayed_work(&dev->wq, 0)) in lan78xx_defer_kevent()
1521 netdev_err(dev->net, "kevent %d may have been dropped\n", work); in lan78xx_defer_kevent()
1528 if (urb->actual_length != 4) { in lan78xx_status()
1529 netdev_warn(dev->net, in lan78xx_status()
1530 "unexpected urb length %d", urb->actual_length); in lan78xx_status()
1534 intdata = get_unaligned_le32(urb->transfer_buffer); in lan78xx_status()
1537 netif_dbg(dev, link, dev->net, "PHY INTR: 0x%08x\n", intdata); in lan78xx_status()
1540 if (dev->domain_data.phyirq > 0) in lan78xx_status()
1541 generic_handle_irq_safe(dev->domain_data.phyirq); in lan78xx_status()
1543 netdev_warn(dev->net, in lan78xx_status()
1559 ret = usb_autopm_get_interface(dev->intf); in lan78xx_ethtool_get_eeprom()
1563 ee->magic = LAN78XX_EEPROM_MAGIC; in lan78xx_ethtool_get_eeprom()
1565 ret = lan78xx_read_raw_eeprom(dev, ee->offset, ee->len, data); in lan78xx_ethtool_get_eeprom()
1567 usb_autopm_put_interface(dev->intf); in lan78xx_ethtool_get_eeprom()
1578 ret = usb_autopm_get_interface(dev->intf); in lan78xx_ethtool_set_eeprom()
1585 if (ee->magic == LAN78XX_EEPROM_MAGIC) in lan78xx_ethtool_set_eeprom()
1586 ret = lan78xx_write_raw_eeprom(dev, ee->offset, ee->len, data); in lan78xx_ethtool_set_eeprom()
1587 else if ((ee->magic == LAN78XX_OTP_MAGIC) && in lan78xx_ethtool_set_eeprom()
1588 (ee->offset == 0) && in lan78xx_ethtool_set_eeprom()
1589 (ee->len == 512) && in lan78xx_ethtool_set_eeprom()
1591 ret = lan78xx_write_raw_otp(dev, ee->offset, ee->len, data); in lan78xx_ethtool_set_eeprom()
1593 usb_autopm_put_interface(dev->intf); in lan78xx_ethtool_set_eeprom()
1610 return -EOPNOTSUPP; in lan78xx_get_sset_count()
1620 mutex_lock(&dev->stats.access_lock); in lan78xx_get_stats()
1621 memcpy(data, &dev->stats.curr_stat, sizeof(dev->stats.curr_stat)); in lan78xx_get_stats()
1622 mutex_unlock(&dev->stats.access_lock); in lan78xx_get_stats()
1631 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_get_wol()
1633 if (usb_autopm_get_interface(dev->intf) < 0) in lan78xx_get_wol()
1638 wol->supported = 0; in lan78xx_get_wol()
1639 wol->wolopts = 0; in lan78xx_get_wol()
1642 wol->supported = WAKE_ALL; in lan78xx_get_wol()
1643 wol->wolopts = pdata->wol; in lan78xx_get_wol()
1645 wol->supported = 0; in lan78xx_get_wol()
1646 wol->wolopts = 0; in lan78xx_get_wol()
1650 usb_autopm_put_interface(dev->intf); in lan78xx_get_wol()
1657 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_set_wol()
1660 ret = usb_autopm_get_interface(dev->intf); in lan78xx_set_wol()
1664 if (wol->wolopts & ~WAKE_ALL) in lan78xx_set_wol()
1665 return -EINVAL; in lan78xx_set_wol()
1667 pdata->wol = wol->wolopts; in lan78xx_set_wol()
1669 device_set_wakeup_enable(&dev->udev->dev, (bool)wol->wolopts); in lan78xx_set_wol()
1671 phy_ethtool_set_wol(netdev->phydev, wol); in lan78xx_set_wol()
1673 usb_autopm_put_interface(dev->intf); in lan78xx_set_wol()
1681 struct phy_device *phydev = net->phydev; in lan78xx_get_eee()
1685 ret = usb_autopm_get_interface(dev->intf); in lan78xx_get_eee()
1695 edata->eee_enabled = true; in lan78xx_get_eee()
1696 edata->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 strscpy(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()
2125 struct irq_domain_data *data = d->host_data; in irq_map()
2128 irq_set_chip_and_handler(irq, data->irqchip, data->irq_handler); in irq_map()
2149 data->irqenable &= ~BIT(irqd_to_hwirq(irqd)); in lan78xx_irq_mask()
2156 data->irqenable |= BIT(irqd_to_hwirq(irqd)); in lan78xx_irq_unmask()
2163 mutex_lock(&data->irq_lock); in lan78xx_irq_bus_lock()
2174 * are only two callbacks executed in non-atomic contex. in lan78xx_irq_bus_sync_unlock()
2177 if (buf != data->irqenable) in lan78xx_irq_bus_sync_unlock()
2178 lan78xx_write_reg(dev, INT_EP_CTL, data->irqenable); in lan78xx_irq_bus_sync_unlock()
2180 mutex_unlock(&data->irq_lock); in lan78xx_irq_bus_sync_unlock()
2184 .name = "lan78xx-irqs",
2199 of_node = dev->udev->dev.parent->of_node; in lan78xx_setup_irq_domain()
2201 mutex_init(&dev->domain_data.irq_lock); in lan78xx_setup_irq_domain()
2204 dev->domain_data.irqenable = buf; in lan78xx_setup_irq_domain()
2206 dev->domain_data.irqchip = &lan78xx_irqchip; in lan78xx_setup_irq_domain()
2207 dev->domain_data.irq_handler = handle_simple_irq; in lan78xx_setup_irq_domain()
2210 &chip_domain_ops, &dev->domain_data); in lan78xx_setup_irq_domain()
2218 ret = -EINVAL; in lan78xx_setup_irq_domain()
2221 ret = -EINVAL; in lan78xx_setup_irq_domain()
2224 dev->domain_data.irqdomain = irqdomain; in lan78xx_setup_irq_domain()
2225 dev->domain_data.phyirq = irqmap; in lan78xx_setup_irq_domain()
2232 if (dev->domain_data.phyirq > 0) { in lan78xx_remove_irq_domain()
2233 irq_dispose_mapping(dev->domain_data.phyirq); in lan78xx_remove_irq_domain()
2235 if (dev->domain_data.irqdomain) in lan78xx_remove_irq_domain()
2236 irq_domain_remove(dev->domain_data.irqdomain); in lan78xx_remove_irq_domain()
2238 dev->domain_data.phyirq = 0; in lan78xx_remove_irq_domain()
2239 dev->domain_data.irqdomain = NULL; in lan78xx_remove_irq_domain()
2245 struct lan78xx_net *dev = netdev_priv(phydev->attached_dev); in lan8835_fixup()
2257 /* RGMII TX DLL Tune Adjust */ in lan8835_fixup()
2260 dev->interface = PHY_INTERFACE_MODE_RGMII_TXID; in lan8835_fixup()
2267 struct lan78xx_net *dev = netdev_priv(phydev->attached_dev); in ksz9031rnx_fixup()
2277 dev->interface = PHY_INTERFACE_MODE_RGMII_RXID; in ksz9031rnx_fixup()
2293 phydev = phy_find_first(dev->mdiobus); in lan7801_phy_init()
2295 netdev_dbg(dev->net, "PHY Not Found!! Registering Fixed PHY\n"); in lan7801_phy_init()
2298 netdev_err(dev->net, "No PHY/fixed_PHY found\n"); in lan7801_phy_init()
2301 netdev_dbg(dev->net, "Registered FIXED PHY\n"); in lan7801_phy_init()
2302 dev->interface = PHY_INTERFACE_MODE_RGMII; in lan7801_phy_init()
2311 if (!phydev->drv) { in lan7801_phy_init()
2312 netdev_err(dev->net, "no PHY driver found\n"); in lan7801_phy_init()
2315 dev->interface = PHY_INTERFACE_MODE_RGMII; in lan7801_phy_init()
2320 netdev_err(dev->net, "Failed to register fixup for PHY_KSZ9031RNX\n"); in lan7801_phy_init()
2327 netdev_err(dev->net, "Failed to register fixup for PHY_LAN8835\n"); in lan7801_phy_init()
2332 phydev->is_internal = false; in lan7801_phy_init()
2344 switch (dev->chipid) { in lan78xx_phy_init()
2348 netdev_err(dev->net, "lan7801: PHY Init Failed"); in lan78xx_phy_init()
2349 return -EIO; in lan78xx_phy_init()
2355 phydev = phy_find_first(dev->mdiobus); in lan78xx_phy_init()
2357 netdev_err(dev->net, "no PHY found\n"); in lan78xx_phy_init()
2358 return -EIO; in lan78xx_phy_init()
2360 phydev->is_internal = true; in lan78xx_phy_init()
2361 dev->interface = PHY_INTERFACE_MODE_GMII; in lan78xx_phy_init()
2365 netdev_err(dev->net, "Unknown CHIP ID found\n"); in lan78xx_phy_init()
2366 return -EIO; in lan78xx_phy_init()
2370 if (dev->domain_data.phyirq > 0) in lan78xx_phy_init()
2371 phydev->irq = dev->domain_data.phyirq; in lan78xx_phy_init()
2373 phydev->irq = PHY_POLL; in lan78xx_phy_init()
2374 netdev_dbg(dev->net, "phydev->irq = %d\n", phydev->irq); in lan78xx_phy_init()
2377 phydev->mdix = ETH_TP_MDI_AUTO; in lan78xx_phy_init()
2379 ret = phy_connect_direct(dev->net, phydev, in lan78xx_phy_init()
2381 dev->interface); in lan78xx_phy_init()
2383 netdev_err(dev->net, "can't attach PHY to %s\n", in lan78xx_phy_init()
2384 dev->mdiobus->id); in lan78xx_phy_init()
2385 if (dev->chipid == ID_REV_CHIP_ID_7801_) { in lan78xx_phy_init()
2395 return -EIO; in lan78xx_phy_init()
2402 dev->fc_request_control = (FLOW_CTRL_RX | FLOW_CTRL_TX); in lan78xx_phy_init()
2404 phydev->advertising); in lan78xx_phy_init()
2406 phydev->advertising); in lan78xx_phy_init()
2407 mii_adv = (u32)mii_advertise_flowctrl(dev->fc_request_control); in lan78xx_phy_init()
2409 linkmode_or(phydev->advertising, fc, phydev->advertising); in lan78xx_phy_init()
2411 if (phydev->mdio.dev.of_node) { in lan78xx_phy_init()
2415 len = of_property_count_elems_of_size(phydev->mdio.dev.of_node, in lan78xx_phy_init()
2416 "microchip,led-modes", in lan78xx_phy_init()
2435 dev->fc_autoneg = phydev->autoneg; in lan78xx_phy_init()
2474 spin_lock_irqsave(&q->lock, flags); in unlink_urbs()
2481 entry = (struct skb_data *)skb->cb; in unlink_urbs()
2482 if (entry->state != unlink_start) in unlink_urbs()
2487 entry->state = unlink_start; in unlink_urbs()
2488 urb = entry->urb; in unlink_urbs()
2492 * use-after-free problem inside usb_unlink_urb since in unlink_urbs()
2497 spin_unlock_irqrestore(&q->lock, flags); in unlink_urbs()
2498 /* during some PM-driven resume scenarios, in unlink_urbs()
2502 if (ret != -EINPROGRESS && ret != 0) in unlink_urbs()
2503 netdev_dbg(dev->net, "unlink urb err, %d\n", ret); in unlink_urbs()
2507 spin_lock_irqsave(&q->lock, flags); in unlink_urbs()
2509 spin_unlock_irqrestore(&q->lock, flags); in unlink_urbs()
2519 /* no second zero-length packet read wanted after mtu-sized packets */ in lan78xx_change_mtu()
2520 if ((max_frame_len % dev->maxpacket) == 0) in lan78xx_change_mtu()
2521 return -EDOM; in lan78xx_change_mtu()
2523 ret = usb_autopm_get_interface(dev->intf); in lan78xx_change_mtu()
2529 netdev->mtu = new_mtu; in lan78xx_change_mtu()
2531 usb_autopm_put_interface(dev->intf); in lan78xx_change_mtu()
2543 return -EBUSY; in lan78xx_set_mac_addr()
2545 if (!is_valid_ether_addr(addr->sa_data)) in lan78xx_set_mac_addr()
2546 return -EADDRNOTAVAIL; in lan78xx_set_mac_addr()
2548 eth_hw_addr_set(netdev, addr->sa_data); in lan78xx_set_mac_addr()
2550 addr_lo = netdev->dev_addr[0] | in lan78xx_set_mac_addr()
2551 netdev->dev_addr[1] << 8 | in lan78xx_set_mac_addr()
2552 netdev->dev_addr[2] << 16 | in lan78xx_set_mac_addr()
2553 netdev->dev_addr[3] << 24; in lan78xx_set_mac_addr()
2554 addr_hi = netdev->dev_addr[4] | in lan78xx_set_mac_addr()
2555 netdev->dev_addr[5] << 8; in lan78xx_set_mac_addr()
2572 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_set_features()
2575 spin_lock_irqsave(&pdata->rfe_ctl_lock, flags); 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()
2581 pdata->rfe_ctl &= ~(RFE_CTL_TCPUDP_COE_ | RFE_CTL_IP_COE_); in lan78xx_set_features()
2582 pdata->rfe_ctl &= ~(RFE_CTL_ICMP_COE_ | RFE_CTL_IGMP_COE_); in lan78xx_set_features()
2586 pdata->rfe_ctl |= RFE_CTL_VLAN_STRIP_; in lan78xx_set_features()
2588 pdata->rfe_ctl &= ~RFE_CTL_VLAN_STRIP_; in lan78xx_set_features()
2591 pdata->rfe_ctl |= RFE_CTL_VLAN_FILTER_; in lan78xx_set_features()
2593 pdata->rfe_ctl &= ~RFE_CTL_VLAN_FILTER_; in lan78xx_set_features()
2595 spin_unlock_irqrestore(&pdata->rfe_ctl_lock, flags); in lan78xx_set_features()
2597 lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); in lan78xx_set_features()
2606 struct lan78xx_net *dev = pdata->dev; in lan78xx_deferred_vlan_write()
2609 DP_SEL_VHF_VLAN_LEN, pdata->vlan_table); in lan78xx_deferred_vlan_write()
2616 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_vlan_rx_add_vid()
2623 pdata->vlan_table[vid_dword_index] |= (1 << vid_bit_index); in lan78xx_vlan_rx_add_vid()
2626 schedule_work(&pdata->set_vlan); in lan78xx_vlan_rx_add_vid()
2635 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_vlan_rx_kill_vid()
2642 pdata->vlan_table[vid_dword_index] &= ~(1 << vid_bit_index); in lan78xx_vlan_rx_kill_vid()
2645 schedule_work(&pdata->set_vlan); in lan78xx_vlan_rx_kill_vid()
2693 switch (dev->udev->speed) { in lan78xx_urb_config_init()
2695 dev->rx_urb_size = RX_SS_URB_SIZE; in lan78xx_urb_config_init()
2696 dev->tx_urb_size = TX_SS_URB_SIZE; in lan78xx_urb_config_init()
2697 dev->n_rx_urbs = RX_SS_URB_NUM; in lan78xx_urb_config_init()
2698 dev->n_tx_urbs = TX_SS_URB_NUM; in lan78xx_urb_config_init()
2699 dev->bulk_in_delay = SS_BULK_IN_DELAY; in lan78xx_urb_config_init()
2700 dev->burst_cap = SS_BURST_CAP_SIZE / SS_USB_PKT_SIZE; in lan78xx_urb_config_init()
2703 dev->rx_urb_size = RX_HS_URB_SIZE; in lan78xx_urb_config_init()
2704 dev->tx_urb_size = TX_HS_URB_SIZE; in lan78xx_urb_config_init()
2705 dev->n_rx_urbs = RX_HS_URB_NUM; in lan78xx_urb_config_init()
2706 dev->n_tx_urbs = TX_HS_URB_NUM; in lan78xx_urb_config_init()
2707 dev->bulk_in_delay = HS_BULK_IN_DELAY; in lan78xx_urb_config_init()
2708 dev->burst_cap = HS_BURST_CAP_SIZE / HS_USB_PKT_SIZE; in lan78xx_urb_config_init()
2711 dev->rx_urb_size = RX_FS_URB_SIZE; in lan78xx_urb_config_init()
2712 dev->tx_urb_size = TX_FS_URB_SIZE; in lan78xx_urb_config_init()
2713 dev->n_rx_urbs = RX_FS_URB_NUM; in lan78xx_urb_config_init()
2714 dev->n_tx_urbs = TX_FS_URB_NUM; in lan78xx_urb_config_init()
2715 dev->bulk_in_delay = FS_BULK_IN_DELAY; in lan78xx_urb_config_init()
2716 dev->burst_cap = FS_BURST_CAP_SIZE / FS_USB_PKT_SIZE; in lan78xx_urb_config_init()
2719 netdev_warn(dev->net, "USB bus speed not supported\n"); in lan78xx_urb_config_init()
2720 result = -EIO; in lan78xx_urb_config_init()
2767 ret = stopped ? 0 : -ETIME; in lan78xx_stop_hw()
2781 netif_dbg(dev, drv, dev->net, "start tx path"); in lan78xx_start_tx_path()
2789 /* Start the Tx FIFO */ in lan78xx_start_tx_path()
2802 netif_dbg(dev, drv, dev->net, "stop tx path"); in lan78xx_stop_tx_path()
2804 /* Stop the Tx FIFO */ in lan78xx_stop_tx_path()
2819 /* The caller must ensure the Tx path is stopped before calling
2831 netif_dbg(dev, drv, dev->net, "start rx path"); in lan78xx_start_rx_path()
2852 netif_dbg(dev, drv, dev->net, "stop rx path"); in lan78xx_stop_rx_path()
2879 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_reset()
2903 netdev_warn(dev->net, in lan78xx_reset()
2905 ret = -ETIMEDOUT; in lan78xx_reset()
2917 dev->chipid = (buf & ID_REV_CHIP_ID_MASK_) >> 16; in lan78xx_reset()
2918 dev->chiprev = buf & ID_REV_CHIP_REV_MASK_; in lan78xx_reset()
2934 ret = lan78xx_write_reg(dev, BURST_CAP, dev->burst_cap); in lan78xx_reset()
2938 ret = lan78xx_write_reg(dev, BULK_IN_DLY, dev->bulk_in_delay); in lan78xx_reset()
2963 buf = (MAX_RX_FIFO_SIZE - 512) / 512; in lan78xx_reset()
2969 buf = (MAX_TX_FIFO_SIZE - 512) / 512; in lan78xx_reset()
2988 ret = lan78xx_read_reg(dev, RFE_CTL, &pdata->rfe_ctl); in lan78xx_reset()
2992 pdata->rfe_ctl |= RFE_CTL_BCAST_EN_ | RFE_CTL_DA_PERFECT_; in lan78xx_reset()
2994 ret = lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); in lan78xx_reset()
2999 ret = lan78xx_set_features(dev->net, dev->net->features); in lan78xx_reset()
3003 lan78xx_set_multicast(dev->net); in lan78xx_reset()
3024 netdev_warn(dev->net, "timeout waiting for PHY Reset"); in lan78xx_reset()
3025 ret = -ETIMEDOUT; in lan78xx_reset()
3035 if (dev->chipid == ID_REV_CHIP_ID_7801_) in lan78xx_reset()
3038 if (dev->chipid == ID_REV_CHIP_ID_7800_ || in lan78xx_reset()
3039 dev->chipid == ID_REV_CHIP_ID_7850_) { in lan78xx_reset()
3043 netdev_info(dev->net, "No External EEPROM. Setting MAC Speed\n"); in lan78xx_reset()
3052 RX_MAX_FRAME_LEN(dev->net->mtu)); in lan78xx_reset()
3065 p = (u32 *)&dev->stats.rollover_max; in lan78xx_init_stats()
3066 for (i = 0; i < (sizeof(dev->stats.rollover_max) / (sizeof(u32))); i++) in lan78xx_init_stats()
3069 dev->stats.rollover_max.rx_unicast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
3070 dev->stats.rollover_max.rx_broadcast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
3071 dev->stats.rollover_max.rx_multicast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
3072 dev->stats.rollover_max.eee_rx_lpi_transitions = 0xFFFFFFFF; in lan78xx_init_stats()
3073 dev->stats.rollover_max.eee_rx_lpi_time = 0xFFFFFFFF; in lan78xx_init_stats()
3074 dev->stats.rollover_max.tx_unicast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
3075 dev->stats.rollover_max.tx_broadcast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
3076 dev->stats.rollover_max.tx_multicast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
3077 dev->stats.rollover_max.eee_tx_lpi_transitions = 0xFFFFFFFF; in lan78xx_init_stats()
3078 dev->stats.rollover_max.eee_tx_lpi_time = 0xFFFFFFFF; in lan78xx_init_stats()
3080 set_bit(EVENT_STAT_UPDATE, &dev->flags); in lan78xx_init_stats()
3088 netif_dbg(dev, ifup, dev->net, "open device"); in lan78xx_open()
3090 ret = usb_autopm_get_interface(dev->intf); in lan78xx_open()
3094 mutex_lock(&dev->dev_mutex); in lan78xx_open()
3096 phy_start(net->phydev); in lan78xx_open()
3098 netif_dbg(dev, ifup, dev->net, "phy initialised successfully"); in lan78xx_open()
3101 if (dev->urb_intr) { in lan78xx_open()
3102 ret = usb_submit_urb(dev->urb_intr, GFP_KERNEL); in lan78xx_open()
3104 netif_err(dev, ifup, dev->net, in lan78xx_open()
3126 set_bit(EVENT_DEV_OPEN, &dev->flags); in lan78xx_open()
3130 dev->link_on = false; in lan78xx_open()
3132 napi_enable(&dev->napi); in lan78xx_open()
3136 mutex_unlock(&dev->dev_mutex); in lan78xx_open()
3139 usb_autopm_put_interface(dev->intf); in lan78xx_open()
3153 dev->wait = &unlink_wakeup; in lan78xx_terminate_urbs()
3154 temp = unlink_urbs(dev, &dev->txq) + unlink_urbs(dev, &dev->rxq); in lan78xx_terminate_urbs()
3157 while (!skb_queue_empty(&dev->rxq) || in lan78xx_terminate_urbs()
3158 !skb_queue_empty(&dev->txq)) { in lan78xx_terminate_urbs()
3161 netif_dbg(dev, ifdown, dev->net, in lan78xx_terminate_urbs()
3165 dev->wait = NULL; in lan78xx_terminate_urbs()
3168 /* empty Rx done, Rx overflow and Tx pend queues in lan78xx_terminate_urbs()
3170 while (!skb_queue_empty(&dev->rxq_done)) { in lan78xx_terminate_urbs()
3171 struct sk_buff *skb = skb_dequeue(&dev->rxq_done); in lan78xx_terminate_urbs()
3176 skb_queue_purge(&dev->rxq_overflow); in lan78xx_terminate_urbs()
3177 skb_queue_purge(&dev->txq_pend); in lan78xx_terminate_urbs()
3184 netif_dbg(dev, ifup, dev->net, "stop device"); in lan78xx_stop()
3186 mutex_lock(&dev->dev_mutex); in lan78xx_stop()
3188 if (timer_pending(&dev->stat_monitor)) in lan78xx_stop()
3189 del_timer_sync(&dev->stat_monitor); in lan78xx_stop()
3191 clear_bit(EVENT_DEV_OPEN, &dev->flags); in lan78xx_stop()
3193 napi_disable(&dev->napi); in lan78xx_stop()
3197 netif_info(dev, ifdown, dev->net, in lan78xx_stop()
3198 "stop stats: rx/tx %lu/%lu, errs %lu/%lu\n", in lan78xx_stop()
3199 net->stats.rx_packets, net->stats.tx_packets, in lan78xx_stop()
3200 net->stats.rx_errors, net->stats.tx_errors); in lan78xx_stop()
3202 /* ignore errors that occur stopping the Tx and Rx data paths */ in lan78xx_stop()
3206 if (net->phydev) in lan78xx_stop()
3207 phy_stop(net->phydev); in lan78xx_stop()
3209 usb_kill_urb(dev->urb_intr); in lan78xx_stop()
3215 clear_bit(EVENT_TX_HALT, &dev->flags); in lan78xx_stop()
3216 clear_bit(EVENT_RX_HALT, &dev->flags); in lan78xx_stop()
3217 clear_bit(EVENT_LINK_RESET, &dev->flags); in lan78xx_stop()
3218 clear_bit(EVENT_STAT_UPDATE, &dev->flags); in lan78xx_stop()
3220 cancel_delayed_work_sync(&dev->wq); in lan78xx_stop()
3222 usb_autopm_put_interface(dev->intf); in lan78xx_stop()
3224 mutex_unlock(&dev->dev_mutex); in lan78xx_stop()
3234 struct skb_data *entry = (struct skb_data *)skb->cb; in defer_bh()
3236 spin_lock_irqsave(&list->lock, flags); in defer_bh()
3237 old_state = entry->state; in defer_bh()
3238 entry->state = state; in defer_bh()
3241 spin_unlock(&list->lock); in defer_bh()
3242 spin_lock(&dev->rxq_done.lock); in defer_bh()
3244 __skb_queue_tail(&dev->rxq_done, skb); in defer_bh()
3245 if (skb_queue_len(&dev->rxq_done) == 1) in defer_bh()
3246 napi_schedule(&dev->napi); in defer_bh()
3248 spin_unlock_irqrestore(&dev->rxq_done.lock, flags); in defer_bh()
3255 struct sk_buff *skb = (struct sk_buff *)urb->context; in tx_complete()
3256 struct skb_data *entry = (struct skb_data *)skb->cb; in tx_complete()
3257 struct lan78xx_net *dev = entry->dev; in tx_complete()
3259 if (urb->status == 0) { in tx_complete()
3260 dev->net->stats.tx_packets += entry->num_of_packet; in tx_complete()
3261 dev->net->stats.tx_bytes += entry->length; in tx_complete()
3263 dev->net->stats.tx_errors += entry->num_of_packet; in tx_complete()
3265 switch (urb->status) { in tx_complete()
3266 case -EPIPE: in tx_complete()
3270 /* software-driven interface shutdown */ in tx_complete()
3271 case -ECONNRESET: in tx_complete()
3272 case -ESHUTDOWN: in tx_complete()
3273 netif_dbg(dev, tx_err, dev->net, in tx_complete()
3274 "tx err interface gone %d\n", in tx_complete()
3275 entry->urb->status); in tx_complete()
3278 case -EPROTO: in tx_complete()
3279 case -ETIME: in tx_complete()
3280 case -EILSEQ: in tx_complete()
3281 netif_stop_queue(dev->net); in tx_complete()
3282 netif_dbg(dev, tx_err, dev->net, in tx_complete()
3283 "tx err queue stopped %d\n", in tx_complete()
3284 entry->urb->status); in tx_complete()
3287 netif_dbg(dev, tx_err, dev->net, in tx_complete()
3288 "unknown tx err %d\n", in tx_complete()
3289 entry->urb->status); in tx_complete()
3294 usb_autopm_put_interface_async(dev->intf); in tx_complete()
3296 skb_unlink(skb, &dev->txq); in tx_complete()
3300 /* Re-schedule NAPI if Tx data pending but no URBs in progress. in tx_complete()
3302 if (skb_queue_empty(&dev->txq) && in tx_complete()
3303 !skb_queue_empty(&dev->txq_pend)) in tx_complete()
3304 napi_schedule(&dev->napi); in tx_complete()
3310 struct skb_data *entry = (struct skb_data *)newsk->cb; in lan78xx_queue_skb()
3313 entry->state = state; in lan78xx_queue_skb()
3318 return skb_queue_len(&dev->txq_free) * dev->tx_urb_size; in lan78xx_tx_urb_space()
3323 return dev->tx_pend_data_len; in lan78xx_tx_pend_data_len()
3332 spin_lock_irqsave(&dev->txq_pend.lock, flags); in lan78xx_tx_pend_skb_add()
3334 __skb_queue_tail(&dev->txq_pend, skb); in lan78xx_tx_pend_skb_add()
3336 dev->tx_pend_data_len += skb->len; in lan78xx_tx_pend_skb_add()
3337 *tx_pend_data_len = dev->tx_pend_data_len; in lan78xx_tx_pend_skb_add()
3339 spin_unlock_irqrestore(&dev->txq_pend.lock, flags); in lan78xx_tx_pend_skb_add()
3348 spin_lock_irqsave(&dev->txq_pend.lock, flags); in lan78xx_tx_pend_skb_head_add()
3350 __skb_queue_head(&dev->txq_pend, skb); in lan78xx_tx_pend_skb_head_add()
3352 dev->tx_pend_data_len += skb->len; in lan78xx_tx_pend_skb_head_add()
3353 *tx_pend_data_len = dev->tx_pend_data_len; in lan78xx_tx_pend_skb_head_add()
3355 spin_unlock_irqrestore(&dev->txq_pend.lock, flags); in lan78xx_tx_pend_skb_head_add()
3364 spin_lock_irqsave(&dev->txq_pend.lock, flags); in lan78xx_tx_pend_skb_get()
3366 *skb = __skb_dequeue(&dev->txq_pend); in lan78xx_tx_pend_skb_get()
3368 dev->tx_pend_data_len -= (*skb)->len; in lan78xx_tx_pend_skb_get()
3369 *tx_pend_data_len = dev->tx_pend_data_len; in lan78xx_tx_pend_skb_get()
3371 spin_unlock_irqrestore(&dev->txq_pend.lock, flags); in lan78xx_tx_pend_skb_get()
3380 if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) in lan78xx_start_xmit()
3381 schedule_delayed_work(&dev->wq, 0); in lan78xx_start_xmit()
3387 /* Set up a Tx URB if none is in progress */ in lan78xx_start_xmit()
3389 if (skb_queue_empty(&dev->txq)) in lan78xx_start_xmit()
3390 napi_schedule(&dev->napi); in lan78xx_start_xmit()
3392 /* Stop stack Tx queue if we have enough data to fill in lan78xx_start_xmit()
3393 * all the free Tx URBs. in lan78xx_start_xmit()
3398 netif_dbg(dev, hw, dev->net, "tx data len: %u, urb space %u", in lan78xx_start_xmit()
3403 if (!skb_queue_empty(&dev->txq_free)) in lan78xx_start_xmit()
3404 napi_schedule(&dev->napi); in lan78xx_start_xmit()
3416 dev->data[0] = (unsigned long)kzalloc(sizeof(*pdata), GFP_KERNEL); in lan78xx_bind()
3418 pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_bind()
3420 netdev_warn(dev->net, "Unable to allocate lan78xx_priv"); in lan78xx_bind()
3421 return -ENOMEM; in lan78xx_bind()
3424 pdata->dev = dev; in lan78xx_bind()
3426 spin_lock_init(&pdata->rfe_ctl_lock); in lan78xx_bind()
3427 mutex_init(&pdata->dataport_mutex); in lan78xx_bind()
3429 INIT_WORK(&pdata->set_multicast, lan78xx_deferred_multicast_write); in lan78xx_bind()
3432 pdata->vlan_table[i] = 0; in lan78xx_bind()
3434 INIT_WORK(&pdata->set_vlan, lan78xx_deferred_vlan_write); in lan78xx_bind()
3436 dev->net->features = 0; in lan78xx_bind()
3439 dev->net->features |= NETIF_F_HW_CSUM; in lan78xx_bind()
3442 dev->net->features |= NETIF_F_RXCSUM; in lan78xx_bind()
3445 dev->net->features |= NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_SG; in lan78xx_bind()
3448 dev->net->features |= NETIF_F_HW_VLAN_CTAG_RX; in lan78xx_bind()
3451 dev->net->features |= NETIF_F_HW_VLAN_CTAG_FILTER; in lan78xx_bind()
3453 dev->net->hw_features = dev->net->features; in lan78xx_bind()
3457 netdev_warn(dev->net, in lan78xx_bind()
3465 netdev_warn(dev->net, "Registers INIT FAILED...."); in lan78xx_bind()
3471 netdev_warn(dev->net, "MDIO INIT FAILED....."); in lan78xx_bind()
3475 dev->net->flags |= IFF_MULTICAST; in lan78xx_bind()
3477 pdata->wol = WAKE_MAGIC; in lan78xx_bind()
3485 netdev_warn(dev->net, "Bind routine FAILED"); in lan78xx_bind()
3486 cancel_work_sync(&pdata->set_multicast); in lan78xx_bind()
3487 cancel_work_sync(&pdata->set_vlan); in lan78xx_bind()
3494 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_unbind()
3501 cancel_work_sync(&pdata->set_multicast); in lan78xx_unbind()
3502 cancel_work_sync(&pdata->set_vlan); in lan78xx_unbind()
3503 netif_dbg(dev, ifdown, dev->net, "free pdata"); in lan78xx_unbind()
3506 dev->data[0] = 0; in lan78xx_unbind()
3517 if (!(dev->net->features & NETIF_F_RXCSUM) || in lan78xx_rx_csum_offload()
3520 !(dev->net->features & NETIF_F_HW_VLAN_CTAG_RX))) { in lan78xx_rx_csum_offload()
3521 skb->ip_summed = CHECKSUM_NONE; in lan78xx_rx_csum_offload()
3523 skb->csum = ntohs((u16)(rx_cmd_b >> RX_CMD_B_CSUM_SHIFT_)); in lan78xx_rx_csum_offload()
3524 skb->ip_summed = CHECKSUM_COMPLETE; in lan78xx_rx_csum_offload()
3532 if ((dev->net->features & NETIF_F_HW_VLAN_CTAG_RX) && in lan78xx_rx_vlan_offload()
3540 dev->net->stats.rx_packets++; in lan78xx_skb_return()
3541 dev->net->stats.rx_bytes += skb->len; in lan78xx_skb_return()
3543 skb->protocol = eth_type_trans(skb, dev->net); in lan78xx_skb_return()
3545 netif_dbg(dev, rx_status, dev->net, "< rx, len %zu, type 0x%x\n", in lan78xx_skb_return()
3546 skb->len + sizeof(struct ethhdr), skb->protocol); in lan78xx_skb_return()
3547 memset(skb->cb, 0, sizeof(struct skb_data)); in lan78xx_skb_return()
3552 napi_gro_receive(&dev->napi, skb); in lan78xx_skb_return()
3558 if (skb->len < RX_SKB_MIN_LEN) in lan78xx_rx()
3564 while (skb->len > 0) { in lan78xx_rx()
3569 rx_cmd_a = get_unaligned_le32(skb->data); in lan78xx_rx()
3572 rx_cmd_b = get_unaligned_le32(skb->data); in lan78xx_rx()
3575 rx_cmd_c = get_unaligned_le16(skb->data); in lan78xx_rx()
3578 packet = skb->data; in lan78xx_rx()
3582 align_count = (4 - ((size + RXW_PADDING) % 4)) % 4; in lan78xx_rx()
3584 if (unlikely(size > skb->len)) { in lan78xx_rx()
3585 netif_dbg(dev, rx_err, dev->net, in lan78xx_rx()
3592 netif_dbg(dev, rx_err, dev->net, in lan78xx_rx()
3599 netif_dbg(dev, rx_err, dev->net, in lan78xx_rx()
3605 frame_len = size - ETH_FCS_LEN; in lan78xx_rx()
3607 skb2 = napi_alloc_skb(&dev->napi, frame_len); in lan78xx_rx()
3611 memcpy(skb2->data, packet, frame_len); in lan78xx_rx()
3627 skb_queue_tail(&dev->rxq_overflow, skb2); in lan78xx_rx()
3634 if (skb->len) in lan78xx_rx()
3645 netif_dbg(dev, rx_err, dev->net, "drop\n"); in rx_process()
3646 dev->net->stats.rx_errors++; in rx_process()
3652 struct sk_buff *skb = (struct sk_buff *)urb->context; in rx_complete()
3653 struct skb_data *entry = (struct skb_data *)skb->cb; in rx_complete()
3654 struct lan78xx_net *dev = entry->dev; in rx_complete()
3655 int urb_status = urb->status; in rx_complete()
3658 netif_dbg(dev, rx_status, dev->net, in rx_complete()
3659 "rx done: status %d", urb->status); in rx_complete()
3661 skb_put(skb, urb->actual_length); in rx_complete()
3664 if (urb != entry->urb) in rx_complete()
3665 netif_warn(dev, rx_err, dev->net, "URB pointer mismatch"); in rx_complete()
3669 if (skb->len < RX_SKB_MIN_LEN) { in rx_complete()
3671 dev->net->stats.rx_errors++; in rx_complete()
3672 dev->net->stats.rx_length_errors++; in rx_complete()
3673 netif_dbg(dev, rx_err, dev->net, in rx_complete()
3674 "rx length %d\n", skb->len); in rx_complete()
3676 usb_mark_last_busy(dev->udev); in rx_complete()
3678 case -EPIPE: in rx_complete()
3679 dev->net->stats.rx_errors++; in rx_complete()
3682 case -ECONNRESET: /* async unlink */ in rx_complete()
3683 case -ESHUTDOWN: /* hardware gone */ in rx_complete()
3684 netif_dbg(dev, ifdown, dev->net, in rx_complete()
3688 case -EPROTO: in rx_complete()
3689 case -ETIME: in rx_complete()
3690 case -EILSEQ: in rx_complete()
3691 dev->net->stats.rx_errors++; in rx_complete()
3696 case -EOVERFLOW: in rx_complete()
3697 dev->net->stats.rx_over_errors++; in rx_complete()
3702 dev->net->stats.rx_errors++; in rx_complete()
3703 netif_dbg(dev, rx_err, dev->net, "rx status %d\n", urb_status); in rx_complete()
3707 state = defer_bh(dev, skb, &dev->rxq, state); in rx_complete()
3712 struct skb_data *entry = (struct skb_data *)skb->cb; in rx_submit()
3713 size_t size = dev->rx_urb_size; in rx_submit()
3714 struct urb *urb = entry->urb; in rx_submit()
3718 usb_fill_bulk_urb(urb, dev->udev, dev->pipe_in, in rx_submit()
3719 skb->data, size, rx_complete, skb); in rx_submit()
3721 spin_lock_irqsave(&dev->rxq.lock, lockflags); in rx_submit()
3723 if (netif_device_present(dev->net) && in rx_submit()
3724 netif_running(dev->net) && in rx_submit()
3725 !test_bit(EVENT_RX_HALT, &dev->flags) && in rx_submit()
3726 !test_bit(EVENT_DEV_ASLEEP, &dev->flags)) { in rx_submit()
3730 lan78xx_queue_skb(&dev->rxq, skb, rx_start); in rx_submit()
3732 case -EPIPE: in rx_submit()
3735 case -ENODEV: in rx_submit()
3736 case -ENOENT: in rx_submit()
3737 netif_dbg(dev, ifdown, dev->net, "device gone\n"); in rx_submit()
3738 netif_device_detach(dev->net); in rx_submit()
3740 case -EHOSTUNREACH: in rx_submit()
3741 ret = -ENOLINK; in rx_submit()
3742 napi_schedule(&dev->napi); in rx_submit()
3745 netif_dbg(dev, rx_err, dev->net, in rx_submit()
3747 napi_schedule(&dev->napi); in rx_submit()
3751 netif_dbg(dev, ifdown, dev->net, "rx: stopped\n"); in rx_submit()
3752 ret = -ENOLINK; in rx_submit()
3754 spin_unlock_irqrestore(&dev->rxq.lock, lockflags); in rx_submit()
3779 rx_buf->data = rx_buf->head; in lan78xx_rx_urb_resubmit()
3781 rx_buf->len = 0; in lan78xx_rx_urb_resubmit()
3782 rx_buf->data_len = 0; in lan78xx_rx_urb_resubmit()
3792 tx_cmd_a = (u32)(skb->len & TX_CMD_A_LEN_MASK_) | TX_CMD_A_FCS_; in lan78xx_fill_tx_cmd_words()
3794 if (skb->ip_summed == CHECKSUM_PARTIAL) in lan78xx_fill_tx_cmd_words()
3799 u16 mss = max(skb_shinfo(skb)->gso_size, TX_CMD_B_MSS_MIN_); in lan78xx_fill_tx_cmd_words()
3818 struct skb_data *entry = (struct skb_data *)tx_buf->cb; in lan78xx_tx_buf_fill()
3819 int remain = dev->tx_urb_size; in lan78xx_tx_buf_fill()
3820 u8 *tx_data = tx_buf->data; in lan78xx_tx_buf_fill()
3823 entry->num_of_packet = 0; in lan78xx_tx_buf_fill()
3824 entry->length = 0; in lan78xx_tx_buf_fill()
3842 align_bytes = (TX_ALIGNMENT - (urb_len % TX_ALIGNMENT)) % in lan78xx_tx_buf_fill()
3844 len = align_bytes + TX_CMD_LEN + skb->len; in lan78xx_tx_buf_fill()
3855 len = skb->len; in lan78xx_tx_buf_fill()
3857 struct net_device_stats *stats = &dev->net->stats; in lan78xx_tx_buf_fill()
3859 stats->tx_dropped++; in lan78xx_tx_buf_fill()
3861 tx_data -= TX_CMD_LEN; in lan78xx_tx_buf_fill()
3866 entry->length += len; in lan78xx_tx_buf_fill()
3867 entry->num_of_packet += skb_shinfo(skb)->gso_segs ?: 1; in lan78xx_tx_buf_fill()
3871 urb_len = (u32)(tx_data - (u8 *)tx_buf->data); in lan78xx_tx_buf_fill()
3873 remain = dev->tx_urb_size - urb_len; in lan78xx_tx_buf_fill()
3885 /* Start the stack Tx queue if it was stopped in lan78xx_tx_bh()
3887 netif_tx_lock(dev->net); in lan78xx_tx_bh()
3888 if (netif_queue_stopped(dev->net)) { in lan78xx_tx_bh()
3890 netif_wake_queue(dev->net); in lan78xx_tx_bh()
3892 netif_tx_unlock(dev->net); in lan78xx_tx_bh()
3894 /* Go through the Tx pending queue and set up URBs to transfer in lan78xx_tx_bh()
3903 if (skb_queue_empty(&dev->txq_pend)) in lan78xx_tx_bh()
3912 spin_lock_irqsave(&dev->txq.lock, flags); in lan78xx_tx_bh()
3913 ret = usb_autopm_get_interface_async(dev->intf); in lan78xx_tx_bh()
3915 spin_unlock_irqrestore(&dev->txq.lock, flags); in lan78xx_tx_bh()
3919 usb_fill_bulk_urb(entry->urb, dev->udev, dev->pipe_out, in lan78xx_tx_bh()
3920 tx_buf->data, tx_buf->len, tx_complete, in lan78xx_tx_bh()
3923 if (tx_buf->len % dev->maxpacket == 0) { in lan78xx_tx_bh()
3925 entry->urb->transfer_flags |= URB_ZERO_PACKET; in lan78xx_tx_bh()
3930 if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) { in lan78xx_tx_bh()
3931 usb_anchor_urb(entry->urb, &dev->deferred); in lan78xx_tx_bh()
3932 netif_stop_queue(dev->net); in lan78xx_tx_bh()
3933 spin_unlock_irqrestore(&dev->txq.lock, flags); in lan78xx_tx_bh()
3934 netdev_dbg(dev->net, in lan78xx_tx_bh()
3939 ret = usb_submit_urb(entry->urb, GFP_ATOMIC); in lan78xx_tx_bh()
3942 netif_trans_update(dev->net); in lan78xx_tx_bh()
3943 lan78xx_queue_skb(&dev->txq, tx_buf, tx_start); in lan78xx_tx_bh()
3945 case -EPIPE: in lan78xx_tx_bh()
3946 netif_stop_queue(dev->net); in lan78xx_tx_bh()
3948 usb_autopm_put_interface_async(dev->intf); in lan78xx_tx_bh()
3950 case -ENODEV: in lan78xx_tx_bh()
3951 case -ENOENT: in lan78xx_tx_bh()
3952 netif_dbg(dev, tx_err, dev->net, in lan78xx_tx_bh()
3953 "tx submit urb err %d (disconnected?)", ret); in lan78xx_tx_bh()
3954 netif_device_detach(dev->net); in lan78xx_tx_bh()
3957 usb_autopm_put_interface_async(dev->intf); in lan78xx_tx_bh()
3958 netif_dbg(dev, tx_err, dev->net, in lan78xx_tx_bh()
3959 "tx submit urb err %d\n", ret); in lan78xx_tx_bh()
3963 spin_unlock_irqrestore(&dev->txq.lock, flags); in lan78xx_tx_bh()
3966 netdev_warn(dev->net, "failed to tx urb %d\n", ret); in lan78xx_tx_bh()
3968 dev->net->stats.tx_dropped += entry->num_of_packet; in lan78xx_tx_bh()
3985 while (!skb_queue_empty(&dev->rxq_overflow)) { in lan78xx_bh()
3986 lan78xx_skb_return(dev, skb_dequeue(&dev->rxq_overflow)); in lan78xx_bh()
3996 spin_lock_irqsave(&dev->rxq_done.lock, flags); in lan78xx_bh()
3997 skb_queue_splice_init(&dev->rxq_done, &done); in lan78xx_bh()
3998 spin_unlock_irqrestore(&dev->rxq_done.lock, flags); in lan78xx_bh()
4001 * pass them to the stack. Re-submit each completed URB. in lan78xx_bh()
4005 entry = (struct skb_data *)(rx_buf->cb); in lan78xx_bh()
4006 switch (entry->state) { in lan78xx_bh()
4013 netdev_dbg(dev->net, "rx buf state %d\n", in lan78xx_bh()
4014 entry->state); in lan78xx_bh()
4025 spin_lock_irqsave(&dev->rxq_done.lock, flags); in lan78xx_bh()
4026 skb_queue_splice(&done, &dev->rxq_done); in lan78xx_bh()
4027 spin_unlock_irqrestore(&dev->rxq_done.lock, flags); in lan78xx_bh()
4029 if (netif_device_present(dev->net) && netif_running(dev->net)) { in lan78xx_bh()
4031 if (timer_pending(&dev->stat_monitor) && (dev->delta != 1)) { in lan78xx_bh()
4032 dev->delta = 1; in lan78xx_bh()
4033 mod_timer(&dev->stat_monitor, in lan78xx_bh()
4039 if (!test_bit(EVENT_RX_HALT, &dev->flags)) in lan78xx_bh()
4042 /* Submit new Tx URBs */ in lan78xx_bh()
4058 if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) { in lan78xx_poll()
4073 if (!skb_queue_empty(&dev->rxq_done)) { in lan78xx_poll()
4075 } else if (netif_carrier_ok(dev->net)) { in lan78xx_poll()
4076 if (skb_queue_empty(&dev->txq) && in lan78xx_poll()
4077 !skb_queue_empty(&dev->txq_pend)) { in lan78xx_poll()
4080 netif_tx_lock(dev->net); in lan78xx_poll()
4081 if (netif_queue_stopped(dev->net)) { in lan78xx_poll()
4082 netif_wake_queue(dev->net); in lan78xx_poll()
4085 netif_tx_unlock(dev->net); in lan78xx_poll()
4101 if (test_bit(EVENT_DEV_DISCONNECT, &dev->flags)) in lan78xx_delayedwork()
4104 if (usb_autopm_get_interface(dev->intf) < 0) in lan78xx_delayedwork()
4107 if (test_bit(EVENT_TX_HALT, &dev->flags)) { in lan78xx_delayedwork()
4108 unlink_urbs(dev, &dev->txq); in lan78xx_delayedwork()
4110 status = usb_clear_halt(dev->udev, dev->pipe_out); in lan78xx_delayedwork()
4112 status != -EPIPE && in lan78xx_delayedwork()
4113 status != -ESHUTDOWN) { in lan78xx_delayedwork()
4115 netdev_err(dev->net, in lan78xx_delayedwork()
4116 "can't clear tx halt, status %d\n", in lan78xx_delayedwork()
4119 clear_bit(EVENT_TX_HALT, &dev->flags); in lan78xx_delayedwork()
4120 if (status != -ESHUTDOWN) in lan78xx_delayedwork()
4121 netif_wake_queue(dev->net); in lan78xx_delayedwork()
4125 if (test_bit(EVENT_RX_HALT, &dev->flags)) { in lan78xx_delayedwork()
4126 unlink_urbs(dev, &dev->rxq); in lan78xx_delayedwork()
4127 status = usb_clear_halt(dev->udev, dev->pipe_in); in lan78xx_delayedwork()
4129 status != -EPIPE && in lan78xx_delayedwork()
4130 status != -ESHUTDOWN) { in lan78xx_delayedwork()
4132 netdev_err(dev->net, in lan78xx_delayedwork()
4136 clear_bit(EVENT_RX_HALT, &dev->flags); in lan78xx_delayedwork()
4137 napi_schedule(&dev->napi); in lan78xx_delayedwork()
4141 if (test_bit(EVENT_LINK_RESET, &dev->flags)) { in lan78xx_delayedwork()
4144 clear_bit(EVENT_LINK_RESET, &dev->flags); in lan78xx_delayedwork()
4146 netdev_info(dev->net, "link reset failed (%d)\n", in lan78xx_delayedwork()
4151 if (test_bit(EVENT_STAT_UPDATE, &dev->flags)) { in lan78xx_delayedwork()
4154 clear_bit(EVENT_STAT_UPDATE, &dev->flags); in lan78xx_delayedwork()
4156 mod_timer(&dev->stat_monitor, in lan78xx_delayedwork()
4157 jiffies + (STAT_UPDATE_TIMER * dev->delta)); in lan78xx_delayedwork()
4159 dev->delta = min((dev->delta * 2), 50); in lan78xx_delayedwork()
4162 usb_autopm_put_interface(dev->intf); in lan78xx_delayedwork()
4167 struct lan78xx_net *dev = urb->context; in intr_complete()
4168 int status = urb->status; in intr_complete()
4176 /* software-driven interface shutdown */ in intr_complete()
4177 case -ENOENT: /* urb killed */ in intr_complete()
4178 case -ENODEV: /* hardware gone */ in intr_complete()
4179 case -ESHUTDOWN: /* hardware gone */ in intr_complete()
4180 netif_dbg(dev, ifdown, dev->net, in intr_complete()
4184 /* NOTE: not throttling like RX/TX, since this endpoint in intr_complete()
4188 netdev_dbg(dev->net, "intr status %d\n", status); in intr_complete()
4192 if (!netif_device_present(dev->net) || in intr_complete()
4193 !netif_running(dev->net)) { in intr_complete()
4194 netdev_warn(dev->net, "not submitting new status URB"); in intr_complete()
4198 memset(urb->transfer_buffer, 0, urb->transfer_buffer_length); in intr_complete()
4204 case -ENODEV: in intr_complete()
4205 case -ENOENT: in intr_complete()
4206 netif_dbg(dev, timer, dev->net, in intr_complete()
4208 netif_device_detach(dev->net); in intr_complete()
4211 netif_err(dev, timer, dev->net, in intr_complete()
4212 "intr resubmit --> %d\n", status); in intr_complete()
4229 netif_napi_del(&dev->napi); in lan78xx_disconnect()
4232 net = dev->net; in lan78xx_disconnect()
4236 timer_shutdown_sync(&dev->stat_monitor); in lan78xx_disconnect()
4237 set_bit(EVENT_DEV_DISCONNECT, &dev->flags); in lan78xx_disconnect()
4238 cancel_delayed_work_sync(&dev->wq); in lan78xx_disconnect()
4240 phydev = net->phydev; in lan78xx_disconnect()
4245 phy_disconnect(net->phydev); in lan78xx_disconnect()
4250 usb_scuttle_anchored_urbs(&dev->deferred); in lan78xx_disconnect()
4257 usb_kill_urb(dev->urb_intr); in lan78xx_disconnect()
4258 usb_free_urb(dev->urb_intr); in lan78xx_disconnect()
4268 unlink_urbs(dev, &dev->txq); in lan78xx_tx_timeout()
4269 napi_schedule(&dev->napi); in lan78xx_tx_timeout()
4278 if (skb->len > LAN78XX_TSO_SIZE(dev)) in lan78xx_features_check()
4327 dev_err(&intf->dev, "Error: OOM\n"); in lan78xx_probe()
4328 ret = -ENOMEM; in lan78xx_probe()
4333 SET_NETDEV_DEV(netdev, &intf->dev); in lan78xx_probe()
4336 dev->udev = udev; in lan78xx_probe()
4337 dev->intf = intf; in lan78xx_probe()
4338 dev->net = netdev; in lan78xx_probe()
4339 dev->msg_enable = netif_msg_init(msg_level, NETIF_MSG_DRV in lan78xx_probe()
4342 skb_queue_head_init(&dev->rxq); in lan78xx_probe()
4343 skb_queue_head_init(&dev->txq); in lan78xx_probe()
4344 skb_queue_head_init(&dev->rxq_done); in lan78xx_probe()
4345 skb_queue_head_init(&dev->txq_pend); in lan78xx_probe()
4346 skb_queue_head_init(&dev->rxq_overflow); in lan78xx_probe()
4347 mutex_init(&dev->phy_mutex); in lan78xx_probe()
4348 mutex_init(&dev->dev_mutex); in lan78xx_probe()
4362 /* MTU range: 68 - 9000 */ in lan78xx_probe()
4363 netdev->max_mtu = MAX_SINGLE_PACKET_SIZE; in lan78xx_probe()
4367 netif_napi_add(netdev, &dev->napi, lan78xx_poll); in lan78xx_probe()
4369 INIT_DELAYED_WORK(&dev->wq, lan78xx_delayedwork); in lan78xx_probe()
4370 init_usb_anchor(&dev->deferred); in lan78xx_probe()
4372 netdev->netdev_ops = &lan78xx_netdev_ops; in lan78xx_probe()
4373 netdev->watchdog_timeo = TX_TIMEOUT_JIFFIES; in lan78xx_probe()
4374 netdev->ethtool_ops = &lan78xx_ethtool_ops; in lan78xx_probe()
4376 dev->delta = 1; in lan78xx_probe()
4377 timer_setup(&dev->stat_monitor, lan78xx_stat_monitor, 0); in lan78xx_probe()
4379 mutex_init(&dev->stats.access_lock); in lan78xx_probe()
4381 if (intf->cur_altsetting->desc.bNumEndpoints < 3) { in lan78xx_probe()
4382 ret = -ENODEV; in lan78xx_probe()
4386 dev->pipe_in = usb_rcvbulkpipe(udev, BULK_IN_PIPE); in lan78xx_probe()
4387 ep_blkin = usb_pipe_endpoint(udev, dev->pipe_in); in lan78xx_probe()
4388 if (!ep_blkin || !usb_endpoint_is_bulk_in(&ep_blkin->desc)) { in lan78xx_probe()
4389 ret = -ENODEV; in lan78xx_probe()
4393 dev->pipe_out = usb_sndbulkpipe(udev, BULK_OUT_PIPE); in lan78xx_probe()
4394 ep_blkout = usb_pipe_endpoint(udev, dev->pipe_out); in lan78xx_probe()
4395 if (!ep_blkout || !usb_endpoint_is_bulk_out(&ep_blkout->desc)) { in lan78xx_probe()
4396 ret = -ENODEV; in lan78xx_probe()
4400 ep_intr = &intf->cur_altsetting->endpoint[2]; in lan78xx_probe()
4401 if (!usb_endpoint_is_int_in(&ep_intr->desc)) { in lan78xx_probe()
4402 ret = -ENODEV; in lan78xx_probe()
4406 dev->pipe_intr = usb_rcvintpipe(dev->udev, in lan78xx_probe()
4407 usb_endpoint_num(&ep_intr->desc)); in lan78xx_probe()
4413 period = ep_intr->desc.bInterval; in lan78xx_probe()
4414 maxp = usb_maxpacket(dev->udev, dev->pipe_intr); in lan78xx_probe()
4417 ret = -ENOMEM; in lan78xx_probe()
4421 dev->urb_intr = usb_alloc_urb(0, GFP_KERNEL); in lan78xx_probe()
4422 if (!dev->urb_intr) { in lan78xx_probe()
4423 ret = -ENOMEM; in lan78xx_probe()
4426 usb_fill_int_urb(dev->urb_intr, dev->udev, in lan78xx_probe()
4427 dev->pipe_intr, buf, maxp, in lan78xx_probe()
4429 dev->urb_intr->transfer_flags |= URB_FREE_BUFFER; in lan78xx_probe()
4432 dev->maxpacket = usb_maxpacket(dev->udev, dev->pipe_out); in lan78xx_probe()
4434 /* Reject broken descriptors. */ in lan78xx_probe()
4435 if (dev->maxpacket == 0) { in lan78xx_probe()
4436 ret = -ENODEV; in lan78xx_probe()
4440 /* driver requires remote-wakeup capability during autosuspend. */ in lan78xx_probe()
4441 intf->needs_remote_wakeup = 1; in lan78xx_probe()
4455 ret = device_set_wakeup_enable(&udev->dev, true); in lan78xx_probe()
4460 pm_runtime_set_autosuspend_delay(&udev->dev, in lan78xx_probe()
4466 phy_disconnect(netdev->phydev); in lan78xx_probe()
4468 usb_free_urb(dev->urb_intr); in lan78xx_probe()
4474 netif_napi_del(&dev->napi); in lan78xx_probe()
4782 mutex_lock(&dev->dev_mutex); in lan78xx_suspend()
4784 netif_dbg(dev, ifdown, dev->net, in lan78xx_suspend()
4787 dev_open = test_bit(EVENT_DEV_OPEN, &dev->flags); in lan78xx_suspend()
4790 spin_lock_irq(&dev->txq.lock); in lan78xx_suspend()
4792 if ((skb_queue_len(&dev->txq) || in lan78xx_suspend()
4793 skb_queue_len(&dev->txq_pend)) && in lan78xx_suspend()
4795 spin_unlock_irq(&dev->txq.lock); in lan78xx_suspend()
4796 ret = -EBUSY; in lan78xx_suspend()
4799 set_bit(EVENT_DEV_ASLEEP, &dev->flags); in lan78xx_suspend()
4800 spin_unlock_irq(&dev->txq.lock); in lan78xx_suspend()
4812 /* stop Tx */ in lan78xx_suspend()
4817 /* empty out the Rx and Tx queues */ in lan78xx_suspend()
4818 netif_device_detach(dev->net); in lan78xx_suspend()
4820 usb_kill_urb(dev->urb_intr); in lan78xx_suspend()
4823 netif_device_attach(dev->net); in lan78xx_suspend()
4825 del_timer(&dev->stat_monitor); in lan78xx_suspend()
4834 pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_suspend()
4835 netif_carrier_off(dev->net); in lan78xx_suspend()
4836 ret = lan78xx_set_suspend(dev, pdata->wol); in lan78xx_suspend()
4846 set_bit(EVENT_DEV_ASLEEP, &dev->flags); in lan78xx_suspend()
4881 mutex_unlock(&dev->dev_mutex); in lan78xx_suspend()
4891 while ((urb = usb_get_from_anchor(&dev->deferred))) { in lan78xx_submit_deferred_urbs()
4892 struct sk_buff *skb = urb->context; in lan78xx_submit_deferred_urbs()
4895 if (!netif_device_present(dev->net) || in lan78xx_submit_deferred_urbs()
4896 !netif_carrier_ok(dev->net) || in lan78xx_submit_deferred_urbs()
4905 netif_trans_update(dev->net); in lan78xx_submit_deferred_urbs()
4906 lan78xx_queue_skb(&dev->txq, skb, tx_start); in lan78xx_submit_deferred_urbs()
4908 if (ret == -EPIPE) { in lan78xx_submit_deferred_urbs()
4909 netif_stop_queue(dev->net); in lan78xx_submit_deferred_urbs()
4911 } else if (ret == -ENODEV) { in lan78xx_submit_deferred_urbs()
4912 netif_device_detach(dev->net); in lan78xx_submit_deferred_urbs()
4928 mutex_lock(&dev->dev_mutex); in lan78xx_resume()
4930 netif_dbg(dev, ifup, dev->net, "resuming device"); in lan78xx_resume()
4932 dev_open = test_bit(EVENT_DEV_OPEN, &dev->flags); in lan78xx_resume()
4941 if (dev->urb_intr) { in lan78xx_resume()
4942 int ret = usb_submit_urb(dev->urb_intr, GFP_KERNEL); in lan78xx_resume()
4945 if (ret == -ENODEV) in lan78xx_resume()
4946 netif_device_detach(dev->net); in lan78xx_resume()
4947 netdev_warn(dev->net, "Failed to submit intr URB"); in lan78xx_resume()
4951 spin_lock_irq(&dev->txq.lock); in lan78xx_resume()
4953 if (netif_device_present(dev->net)) { in lan78xx_resume()
4960 clear_bit(EVENT_DEV_ASLEEP, &dev->flags); in lan78xx_resume()
4962 spin_unlock_irq(&dev->txq.lock); in lan78xx_resume()
4965 netif_device_present(dev->net) && in lan78xx_resume()
4967 netif_start_queue(dev->net); in lan78xx_resume()
4973 napi_schedule(&dev->napi); in lan78xx_resume()
4975 if (!timer_pending(&dev->stat_monitor)) { in lan78xx_resume()
4976 dev->delta = 1; in lan78xx_resume()
4977 mod_timer(&dev->stat_monitor, in lan78xx_resume()
4982 clear_bit(EVENT_DEV_ASLEEP, &dev->flags); in lan78xx_resume()
5014 mutex_unlock(&dev->dev_mutex); in lan78xx_resume()
5024 netif_dbg(dev, ifup, dev->net, "(reset) resuming device"); in lan78xx_reset_resume()
5030 phy_start(dev->net->phydev); in lan78xx_reset_resume()
5051 /* ATM2-AF USB Gigabit Ethernet Device */