Lines Matching +full:eee +full:- +full:broken +full:- +full:100 +full:tx
1 // SPDX-License-Identifier: GPL-2.0+
157 "RX 65 - 127 Byte Frames",
158 "RX 128 - 255 Byte Frames",
159 "RX 256 - 511 Bytes Frames",
160 "RX 512 - 1023 Byte Frames",
161 "RX 1024 - 1518 Byte Frames",
163 "EEE RX LPI Transitions",
164 "EEE RX LPI Time",
165 "TX FCS Errors",
166 "TX Excess Deferral Errors",
167 "TX Carrier Errors",
168 "TX Bad Byte Count",
169 "TX Single Collisions",
170 "TX Multiple Collisions",
171 "TX Excessive Collision",
172 "TX Late Collisions",
173 "TX Unicast Byte Count",
174 "TX Broadcast Byte Count",
175 "TX Multicast Byte Count",
176 "TX Unicast Frames",
177 "TX Broadcast Frames",
178 "TX Multicast Frames",
179 "TX Pause Frames",
180 "TX 64 Byte Frames",
181 "TX 65 - 127 Byte Frames",
182 "TX 128 - 255 Byte Frames",
183 "TX 256 - 511 Bytes Frames",
184 "TX 512 - 1023 Byte Frames",
185 "TX 1024 - 1518 Byte Frames",
186 "TX Greater 1518 Byte Frames",
187 "EEE TX LPI Transitions",
188 "EEE TX LPI Time",
340 struct skb_data { /* skb->cb is one of these */
442 static int msg_level = -1;
451 if (test_bit(EVENT_DEV_DISCONNECT, &dev->flags)) in lan78xx_read_reg()
452 return -ENODEV; in lan78xx_read_reg()
456 return -ENOMEM; in lan78xx_read_reg()
458 ret = usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0), in lan78xx_read_reg()
466 netdev_warn(dev->net, in lan78xx_read_reg()
481 if (test_bit(EVENT_DEV_DISCONNECT, &dev->flags)) in lan78xx_write_reg()
482 return -ENODEV; in lan78xx_write_reg()
486 return -ENOMEM; in lan78xx_write_reg()
491 ret = usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, 0), in lan78xx_write_reg()
497 netdev_warn(dev->net, in lan78xx_write_reg()
538 return -ENOMEM; in lan78xx_read_stats()
540 ret = usb_control_msg(dev->udev, in lan78xx_read_stats()
541 usb_rcvctrlpipe(dev->udev, 0), in lan78xx_read_stats()
557 netdev_warn(dev->net, in lan78xx_read_stats()
568 if ((struct1)->member < (dev_stats).saved.member) \
575 check_counter_rollover(stats, dev->stats, rx_fcs_errors); in lan78xx_check_stat_rollover()
576 check_counter_rollover(stats, dev->stats, rx_alignment_errors); in lan78xx_check_stat_rollover()
577 check_counter_rollover(stats, dev->stats, rx_fragment_errors); in lan78xx_check_stat_rollover()
578 check_counter_rollover(stats, dev->stats, rx_jabber_errors); in lan78xx_check_stat_rollover()
579 check_counter_rollover(stats, dev->stats, rx_undersize_frame_errors); in lan78xx_check_stat_rollover()
580 check_counter_rollover(stats, dev->stats, rx_oversize_frame_errors); in lan78xx_check_stat_rollover()
581 check_counter_rollover(stats, dev->stats, rx_dropped_frames); in lan78xx_check_stat_rollover()
582 check_counter_rollover(stats, dev->stats, rx_unicast_byte_count); in lan78xx_check_stat_rollover()
583 check_counter_rollover(stats, dev->stats, rx_broadcast_byte_count); in lan78xx_check_stat_rollover()
584 check_counter_rollover(stats, dev->stats, rx_multicast_byte_count); in lan78xx_check_stat_rollover()
585 check_counter_rollover(stats, dev->stats, rx_unicast_frames); in lan78xx_check_stat_rollover()
586 check_counter_rollover(stats, dev->stats, rx_broadcast_frames); in lan78xx_check_stat_rollover()
587 check_counter_rollover(stats, dev->stats, rx_multicast_frames); in lan78xx_check_stat_rollover()
588 check_counter_rollover(stats, dev->stats, rx_pause_frames); in lan78xx_check_stat_rollover()
589 check_counter_rollover(stats, dev->stats, rx_64_byte_frames); in lan78xx_check_stat_rollover()
590 check_counter_rollover(stats, dev->stats, rx_65_127_byte_frames); in lan78xx_check_stat_rollover()
591 check_counter_rollover(stats, dev->stats, rx_128_255_byte_frames); in lan78xx_check_stat_rollover()
592 check_counter_rollover(stats, dev->stats, rx_256_511_bytes_frames); in lan78xx_check_stat_rollover()
593 check_counter_rollover(stats, dev->stats, rx_512_1023_byte_frames); in lan78xx_check_stat_rollover()
594 check_counter_rollover(stats, dev->stats, rx_1024_1518_byte_frames); in lan78xx_check_stat_rollover()
595 check_counter_rollover(stats, dev->stats, rx_greater_1518_byte_frames); in lan78xx_check_stat_rollover()
596 check_counter_rollover(stats, dev->stats, eee_rx_lpi_transitions); in lan78xx_check_stat_rollover()
597 check_counter_rollover(stats, dev->stats, eee_rx_lpi_time); in lan78xx_check_stat_rollover()
598 check_counter_rollover(stats, dev->stats, tx_fcs_errors); in lan78xx_check_stat_rollover()
599 check_counter_rollover(stats, dev->stats, tx_excess_deferral_errors); in lan78xx_check_stat_rollover()
600 check_counter_rollover(stats, dev->stats, tx_carrier_errors); in lan78xx_check_stat_rollover()
601 check_counter_rollover(stats, dev->stats, tx_bad_byte_count); in lan78xx_check_stat_rollover()
602 check_counter_rollover(stats, dev->stats, tx_single_collisions); in lan78xx_check_stat_rollover()
603 check_counter_rollover(stats, dev->stats, tx_multiple_collisions); in lan78xx_check_stat_rollover()
604 check_counter_rollover(stats, dev->stats, tx_excessive_collision); in lan78xx_check_stat_rollover()
605 check_counter_rollover(stats, dev->stats, tx_late_collisions); in lan78xx_check_stat_rollover()
606 check_counter_rollover(stats, dev->stats, tx_unicast_byte_count); in lan78xx_check_stat_rollover()
607 check_counter_rollover(stats, dev->stats, tx_broadcast_byte_count); in lan78xx_check_stat_rollover()
608 check_counter_rollover(stats, dev->stats, tx_multicast_byte_count); in lan78xx_check_stat_rollover()
609 check_counter_rollover(stats, dev->stats, tx_unicast_frames); in lan78xx_check_stat_rollover()
610 check_counter_rollover(stats, dev->stats, tx_broadcast_frames); in lan78xx_check_stat_rollover()
611 check_counter_rollover(stats, dev->stats, tx_multicast_frames); in lan78xx_check_stat_rollover()
612 check_counter_rollover(stats, dev->stats, tx_pause_frames); in lan78xx_check_stat_rollover()
613 check_counter_rollover(stats, dev->stats, tx_64_byte_frames); in lan78xx_check_stat_rollover()
614 check_counter_rollover(stats, dev->stats, tx_65_127_byte_frames); in lan78xx_check_stat_rollover()
615 check_counter_rollover(stats, dev->stats, tx_128_255_byte_frames); in lan78xx_check_stat_rollover()
616 check_counter_rollover(stats, dev->stats, tx_256_511_bytes_frames); in lan78xx_check_stat_rollover()
617 check_counter_rollover(stats, dev->stats, tx_512_1023_byte_frames); in lan78xx_check_stat_rollover()
618 check_counter_rollover(stats, dev->stats, tx_1024_1518_byte_frames); in lan78xx_check_stat_rollover()
619 check_counter_rollover(stats, dev->stats, tx_greater_1518_byte_frames); in lan78xx_check_stat_rollover()
620 check_counter_rollover(stats, dev->stats, eee_tx_lpi_transitions); in lan78xx_check_stat_rollover()
621 check_counter_rollover(stats, dev->stats, eee_tx_lpi_time); in lan78xx_check_stat_rollover()
623 memcpy(&dev->stats.saved, stats, sizeof(struct lan78xx_statstage)); in lan78xx_check_stat_rollover()
633 if (usb_autopm_get_interface(dev->intf) < 0) in lan78xx_update_stats()
637 count = (u32 *)&dev->stats.rollover_count; in lan78xx_update_stats()
638 max = (u32 *)&dev->stats.rollover_max; in lan78xx_update_stats()
639 data = (u64 *)&dev->stats.curr_stat; in lan78xx_update_stats()
641 mutex_lock(&dev->stats.access_lock); in lan78xx_update_stats()
649 mutex_unlock(&dev->stats.access_lock); in lan78xx_update_stats()
651 usb_autopm_put_interface(dev->intf); in lan78xx_update_stats()
664 return -EIO; in lan78xx_phy_wait_not_busy()
670 return -EIO; in lan78xx_phy_wait_not_busy()
697 return -EIO; in lan78xx_wait_eeprom()
702 usleep_range(40, 100); in lan78xx_wait_eeprom()
706 netdev_warn(dev->net, "EEPROM read operation timeout"); in lan78xx_wait_eeprom()
707 return -EIO; in lan78xx_wait_eeprom()
722 return -EIO; in lan78xx_eeprom_confirm_not_busy()
727 usleep_range(40, 100); in lan78xx_eeprom_confirm_not_busy()
730 netdev_warn(dev->net, "EEPROM is busy"); in lan78xx_eeprom_confirm_not_busy()
731 return -EIO; in lan78xx_eeprom_confirm_not_busy()
747 if (dev->chipid == ID_REV_CHIP_ID_7800_) { in lan78xx_read_raw_eeprom()
761 retval = -EIO; in lan78xx_read_raw_eeprom()
771 retval = -EIO; in lan78xx_read_raw_eeprom()
781 if (dev->chipid == ID_REV_CHIP_ID_7800_) in lan78xx_read_raw_eeprom()
797 ret = -EINVAL; in lan78xx_read_eeprom()
815 if (dev->chipid == ID_REV_CHIP_ID_7800_) { in lan78xx_write_raw_eeprom()
828 retval = -EIO; in lan78xx_write_raw_eeprom()
841 retval = -EIO; in lan78xx_write_raw_eeprom()
850 retval = -EIO; in lan78xx_write_raw_eeprom()
863 if (dev->chipid == ID_REV_CHIP_ID_7800_) in lan78xx_write_raw_eeprom()
887 netdev_warn(dev->net, in lan78xx_read_raw_otp()
889 return -EIO; in lan78xx_read_raw_otp()
908 netdev_warn(dev->net, in lan78xx_read_raw_otp()
910 return -EIO; in lan78xx_read_raw_otp()
940 netdev_warn(dev->net, in lan78xx_write_raw_otp()
942 return -EIO; in lan78xx_write_raw_otp()
964 netdev_warn(dev->net, in lan78xx_write_raw_otp()
966 return -EIO; in lan78xx_write_raw_otp()
986 ret = -EINVAL; in lan78xx_read_otp()
998 for (i = 0; i < 100; i++) { in lan78xx_dataport_wait_not_busy()
1003 return -EIO; in lan78xx_dataport_wait_not_busy()
1008 usleep_range(40, 100); in lan78xx_dataport_wait_not_busy()
1011 netdev_warn(dev->net, "%s timed out", __func__); in lan78xx_dataport_wait_not_busy()
1013 return -EIO; in lan78xx_dataport_wait_not_busy()
1019 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_dataport_write()
1023 if (usb_autopm_get_interface(dev->intf) < 0) in lan78xx_dataport_write()
1026 mutex_lock(&pdata->dataport_mutex); in lan78xx_dataport_write()
1051 mutex_unlock(&pdata->dataport_mutex); in lan78xx_dataport_write()
1052 usb_autopm_put_interface(dev->intf); in lan78xx_dataport_write()
1067 pdata->pfilter_table[index][1] = temp; in lan78xx_set_addr_filter()
1071 pdata->pfilter_table[index][0] = temp; in lan78xx_set_addr_filter()
1085 struct lan78xx_net *dev = pdata->dev; in lan78xx_deferred_multicast_write()
1088 netif_dbg(dev, drv, dev->net, "deferred multicast write 0x%08x\n", in lan78xx_deferred_multicast_write()
1089 pdata->rfe_ctl); in lan78xx_deferred_multicast_write()
1092 DP_SEL_VHF_HASH_LEN, pdata->mchash_table); in lan78xx_deferred_multicast_write()
1097 pdata->pfilter_table[i][1]); in lan78xx_deferred_multicast_write()
1099 pdata->pfilter_table[i][0]); in lan78xx_deferred_multicast_write()
1102 lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); in lan78xx_deferred_multicast_write()
1108 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_set_multicast()
1112 spin_lock_irqsave(&pdata->rfe_ctl_lock, flags); in lan78xx_set_multicast()
1114 pdata->rfe_ctl &= ~(RFE_CTL_UCAST_EN_ | RFE_CTL_MCAST_EN_ | in lan78xx_set_multicast()
1118 pdata->mchash_table[i] = 0; in lan78xx_set_multicast()
1122 pdata->pfilter_table[i][0] = 0; in lan78xx_set_multicast()
1123 pdata->pfilter_table[i][1] = 0; in lan78xx_set_multicast()
1126 pdata->rfe_ctl |= RFE_CTL_BCAST_EN_; in lan78xx_set_multicast()
1128 if (dev->net->flags & IFF_PROMISC) { in lan78xx_set_multicast()
1129 netif_dbg(dev, drv, dev->net, "promiscuous mode enabled"); in lan78xx_set_multicast()
1130 pdata->rfe_ctl |= RFE_CTL_MCAST_EN_ | RFE_CTL_UCAST_EN_; in lan78xx_set_multicast()
1132 if (dev->net->flags & IFF_ALLMULTI) { in lan78xx_set_multicast()
1133 netif_dbg(dev, drv, dev->net, in lan78xx_set_multicast()
1135 pdata->rfe_ctl |= RFE_CTL_MCAST_EN_; in lan78xx_set_multicast()
1139 if (netdev_mc_count(dev->net)) { in lan78xx_set_multicast()
1143 netif_dbg(dev, drv, dev->net, "receive multicast hash filter"); in lan78xx_set_multicast()
1145 pdata->rfe_ctl |= RFE_CTL_DA_PERFECT_; in lan78xx_set_multicast()
1151 lan78xx_set_addr_filter(pdata, i, ha->addr); in lan78xx_set_multicast()
1153 u32 bitnum = lan78xx_hash(ha->addr); in lan78xx_set_multicast()
1155 pdata->mchash_table[bitnum / 32] |= in lan78xx_set_multicast()
1157 pdata->rfe_ctl |= RFE_CTL_MCAST_HASH_; in lan78xx_set_multicast()
1163 spin_unlock_irqrestore(&pdata->rfe_ctl_lock, flags); in lan78xx_set_multicast()
1166 schedule_work(&pdata->set_multicast); in lan78xx_set_multicast()
1175 if (dev->fc_autoneg) in lan78xx_update_flowcontrol()
1178 cap = dev->fc_request_control; in lan78xx_update_flowcontrol()
1186 if (dev->udev->speed == USB_SPEED_SUPER) in lan78xx_update_flowcontrol()
1188 else if (dev->udev->speed == USB_SPEED_HIGH) in lan78xx_update_flowcontrol()
1191 netif_dbg(dev, link, dev->net, "rx pause %s, tx pause %s", in lan78xx_update_flowcontrol()
1209 mutex_lock(&dev->phy_mutex); in lan78xx_mac_reset()
1242 ret = -ETIMEDOUT; in lan78xx_mac_reset()
1244 mutex_unlock(&dev->phy_mutex); in lan78xx_mac_reset()
1251 struct phy_device *phydev = dev->net->phydev; in lan78xx_link_reset()
1261 mutex_lock(&phydev->lock); in lan78xx_link_reset()
1263 link = phydev->link; in lan78xx_link_reset()
1264 mutex_unlock(&phydev->lock); in lan78xx_link_reset()
1266 if (!link && dev->link_on) { in lan78xx_link_reset()
1267 dev->link_on = false; in lan78xx_link_reset()
1274 del_timer(&dev->stat_monitor); in lan78xx_link_reset()
1275 } else if (link && !dev->link_on) { in lan78xx_link_reset()
1276 dev->link_on = true; in lan78xx_link_reset()
1280 if (dev->udev->speed == USB_SPEED_SUPER) { in lan78xx_link_reset()
1319 netif_dbg(dev, link, dev->net, in lan78xx_link_reset()
1328 if (!timer_pending(&dev->stat_monitor)) { in lan78xx_link_reset()
1329 dev->delta = 1; in lan78xx_link_reset()
1330 mod_timer(&dev->stat_monitor, in lan78xx_link_reset()
1334 tasklet_schedule(&dev->bh); in lan78xx_link_reset()
1347 set_bit(work, &dev->flags); in lan78xx_defer_kevent()
1348 if (!schedule_delayed_work(&dev->wq, 0)) in lan78xx_defer_kevent()
1349 netdev_err(dev->net, "kevent %d may have been dropped\n", work); in lan78xx_defer_kevent()
1356 if (urb->actual_length != 4) { in lan78xx_status()
1357 netdev_warn(dev->net, in lan78xx_status()
1358 "unexpected urb length %d", urb->actual_length); in lan78xx_status()
1362 intdata = get_unaligned_le32(urb->transfer_buffer); in lan78xx_status()
1365 netif_dbg(dev, link, dev->net, "PHY INTR: 0x%08x\n", intdata); in lan78xx_status()
1368 if (dev->domain_data.phyirq > 0) { in lan78xx_status()
1370 generic_handle_irq(dev->domain_data.phyirq); in lan78xx_status()
1374 netdev_warn(dev->net, in lan78xx_status()
1390 ret = usb_autopm_get_interface(dev->intf); in lan78xx_ethtool_get_eeprom()
1394 ee->magic = LAN78XX_EEPROM_MAGIC; in lan78xx_ethtool_get_eeprom()
1396 ret = lan78xx_read_raw_eeprom(dev, ee->offset, ee->len, data); in lan78xx_ethtool_get_eeprom()
1398 usb_autopm_put_interface(dev->intf); in lan78xx_ethtool_get_eeprom()
1409 ret = usb_autopm_get_interface(dev->intf); in lan78xx_ethtool_set_eeprom()
1416 if (ee->magic == LAN78XX_EEPROM_MAGIC) in lan78xx_ethtool_set_eeprom()
1417 ret = lan78xx_write_raw_eeprom(dev, ee->offset, ee->len, data); in lan78xx_ethtool_set_eeprom()
1418 else if ((ee->magic == LAN78XX_OTP_MAGIC) && in lan78xx_ethtool_set_eeprom()
1419 (ee->offset == 0) && in lan78xx_ethtool_set_eeprom()
1420 (ee->len == 512) && in lan78xx_ethtool_set_eeprom()
1422 ret = lan78xx_write_raw_otp(dev, ee->offset, ee->len, data); in lan78xx_ethtool_set_eeprom()
1424 usb_autopm_put_interface(dev->intf); in lan78xx_ethtool_set_eeprom()
1441 return -EOPNOTSUPP; in lan78xx_get_sset_count()
1451 mutex_lock(&dev->stats.access_lock); in lan78xx_get_stats()
1452 memcpy(data, &dev->stats.curr_stat, sizeof(dev->stats.curr_stat)); in lan78xx_get_stats()
1453 mutex_unlock(&dev->stats.access_lock); in lan78xx_get_stats()
1462 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_get_wol()
1464 if (usb_autopm_get_interface(dev->intf) < 0) in lan78xx_get_wol()
1469 wol->supported = 0; in lan78xx_get_wol()
1470 wol->wolopts = 0; in lan78xx_get_wol()
1473 wol->supported = WAKE_ALL; in lan78xx_get_wol()
1474 wol->wolopts = pdata->wol; in lan78xx_get_wol()
1476 wol->supported = 0; in lan78xx_get_wol()
1477 wol->wolopts = 0; in lan78xx_get_wol()
1481 usb_autopm_put_interface(dev->intf); in lan78xx_get_wol()
1488 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_set_wol()
1491 ret = usb_autopm_get_interface(dev->intf); in lan78xx_set_wol()
1495 if (wol->wolopts & ~WAKE_ALL) in lan78xx_set_wol()
1496 return -EINVAL; in lan78xx_set_wol()
1498 pdata->wol = wol->wolopts; in lan78xx_set_wol()
1500 device_set_wakeup_enable(&dev->udev->dev, (bool)wol->wolopts); in lan78xx_set_wol()
1502 phy_ethtool_set_wol(netdev->phydev, wol); in lan78xx_set_wol()
1504 usb_autopm_put_interface(dev->intf); in lan78xx_set_wol()
1512 struct phy_device *phydev = net->phydev; in lan78xx_get_eee()
1516 ret = usb_autopm_get_interface(dev->intf); in lan78xx_get_eee()
1526 edata->eee_enabled = true; in lan78xx_get_eee()
1527 edata->eee_active = !!(edata->advertised & in lan78xx_get_eee()
1528 edata->lp_advertised); in lan78xx_get_eee()
1529 edata->tx_lpi_enabled = true; in lan78xx_get_eee()
1532 edata->tx_lpi_timer = buf; in lan78xx_get_eee()
1534 edata->eee_enabled = false; in lan78xx_get_eee()
1535 edata->eee_active = false; in lan78xx_get_eee()
1536 edata->tx_lpi_enabled = false; in lan78xx_get_eee()
1537 edata->tx_lpi_timer = 0; in lan78xx_get_eee()
1542 usb_autopm_put_interface(dev->intf); in lan78xx_get_eee()
1553 ret = usb_autopm_get_interface(dev->intf); in lan78xx_set_eee()
1557 if (edata->eee_enabled) { in lan78xx_set_eee()
1562 phy_ethtool_set_eee(net->phydev, edata); in lan78xx_set_eee()
1564 buf = (u32)edata->tx_lpi_timer; in lan78xx_set_eee()
1572 usb_autopm_put_interface(dev->intf); in lan78xx_set_eee()
1581 mutex_lock(&net->phydev->lock); in lan78xx_get_link()
1582 phy_read_status(net->phydev); in lan78xx_get_link()
1583 link = net->phydev->link; in lan78xx_get_link()
1584 mutex_unlock(&net->phydev->lock); in lan78xx_get_link()
1594 strncpy(info->driver, DRIVER_NAME, sizeof(info->driver)); in lan78xx_get_drvinfo()
1595 usb_make_path(dev->udev, info->bus_info, sizeof(info->bus_info)); in lan78xx_get_drvinfo()
1602 return dev->msg_enable; in lan78xx_get_msglevel()
1609 dev->msg_enable = level; in lan78xx_set_msglevel()
1616 struct phy_device *phydev = net->phydev; in lan78xx_get_link_ksettings()
1619 ret = usb_autopm_get_interface(dev->intf); in lan78xx_get_link_ksettings()
1625 usb_autopm_put_interface(dev->intf); in lan78xx_get_link_ksettings()
1634 struct phy_device *phydev = net->phydev; in lan78xx_set_link_ksettings()
1638 ret = usb_autopm_get_interface(dev->intf); in lan78xx_set_link_ksettings()
1645 if (!cmd->base.autoneg) { in lan78xx_set_link_ksettings()
1653 usb_autopm_put_interface(dev->intf); in lan78xx_set_link_ksettings()
1662 struct phy_device *phydev = net->phydev; in lan78xx_get_pause()
1667 pause->autoneg = dev->fc_autoneg; in lan78xx_get_pause()
1669 if (dev->fc_request_control & FLOW_CTRL_TX) in lan78xx_get_pause()
1670 pause->tx_pause = 1; in lan78xx_get_pause()
1672 if (dev->fc_request_control & FLOW_CTRL_RX) in lan78xx_get_pause()
1673 pause->rx_pause = 1; in lan78xx_get_pause()
1680 struct phy_device *phydev = net->phydev; in lan78xx_set_pause()
1686 if (pause->autoneg && !ecmd.base.autoneg) { in lan78xx_set_pause()
1687 ret = -EINVAL; in lan78xx_set_pause()
1691 dev->fc_request_control = 0; in lan78xx_set_pause()
1692 if (pause->rx_pause) in lan78xx_set_pause()
1693 dev->fc_request_control |= FLOW_CTRL_RX; in lan78xx_set_pause()
1695 if (pause->tx_pause) in lan78xx_set_pause()
1696 dev->fc_request_control |= FLOW_CTRL_TX; in lan78xx_set_pause()
1706 mii_adv = (u32)mii_advertise_flowctrl(dev->fc_request_control); in lan78xx_set_pause()
1714 dev->fc_autoneg = pause->autoneg; in lan78xx_set_pause()
1723 if (!netdev->phydev) in lan78xx_get_regs_len()
1741 if (!netdev->phydev) in lan78xx_get_regs()
1746 data[i] = phy_read(netdev->phydev, j); in lan78xx_get_regs()
1790 if (!eth_platform_get_mac_address(&dev->udev->dev, addr)) { in lan78xx_init_mac_address()
1792 netif_dbg(dev, ifup, dev->net, in lan78xx_init_mac_address()
1800 netif_dbg(dev, ifup, dev->net, in lan78xx_init_mac_address()
1805 netif_dbg(dev, ifup, dev->net, in lan78xx_init_mac_address()
1820 ether_addr_copy(dev->net->dev_addr, addr); in lan78xx_init_mac_address()
1826 struct lan78xx_net *dev = bus->priv; in lan78xx_mdiobus_read()
1830 ret = usb_autopm_get_interface(dev->intf); in lan78xx_mdiobus_read()
1834 mutex_lock(&dev->phy_mutex); in lan78xx_mdiobus_read()
1854 mutex_unlock(&dev->phy_mutex); in lan78xx_mdiobus_read()
1855 usb_autopm_put_interface(dev->intf); in lan78xx_mdiobus_read()
1863 struct lan78xx_net *dev = bus->priv; in lan78xx_mdiobus_write()
1867 ret = usb_autopm_get_interface(dev->intf); in lan78xx_mdiobus_write()
1871 mutex_lock(&dev->phy_mutex); in lan78xx_mdiobus_write()
1890 mutex_unlock(&dev->phy_mutex); in lan78xx_mdiobus_write()
1891 usb_autopm_put_interface(dev->intf); in lan78xx_mdiobus_write()
1900 dev->mdiobus = mdiobus_alloc(); in lan78xx_mdio_init()
1901 if (!dev->mdiobus) { in lan78xx_mdio_init()
1902 netdev_err(dev->net, "can't allocate MDIO bus\n"); in lan78xx_mdio_init()
1903 return -ENOMEM; in lan78xx_mdio_init()
1906 dev->mdiobus->priv = (void *)dev; in lan78xx_mdio_init()
1907 dev->mdiobus->read = lan78xx_mdiobus_read; in lan78xx_mdio_init()
1908 dev->mdiobus->write = lan78xx_mdiobus_write; in lan78xx_mdio_init()
1909 dev->mdiobus->name = "lan78xx-mdiobus"; in lan78xx_mdio_init()
1910 dev->mdiobus->parent = &dev->udev->dev; in lan78xx_mdio_init()
1912 snprintf(dev->mdiobus->id, MII_BUS_ID_SIZE, "usb-%03d:%03d", in lan78xx_mdio_init()
1913 dev->udev->bus->busnum, dev->udev->devnum); in lan78xx_mdio_init()
1915 switch (dev->chipid) { in lan78xx_mdio_init()
1919 dev->mdiobus->phy_mask = ~(1 << 1); in lan78xx_mdio_init()
1923 dev->mdiobus->phy_mask = ~(0xFF); in lan78xx_mdio_init()
1927 node = of_get_child_by_name(dev->udev->dev.of_node, "mdio"); in lan78xx_mdio_init()
1928 ret = of_mdiobus_register(dev->mdiobus, node); in lan78xx_mdio_init()
1931 netdev_err(dev->net, "can't register MDIO bus\n"); in lan78xx_mdio_init()
1935 netdev_dbg(dev->net, "registered mdiobus bus %s\n", dev->mdiobus->id); in lan78xx_mdio_init()
1938 mdiobus_free(dev->mdiobus); in lan78xx_mdio_init()
1944 mdiobus_unregister(dev->mdiobus); in lan78xx_remove_mdio()
1945 mdiobus_free(dev->mdiobus); in lan78xx_remove_mdio()
1950 struct phy_device *phydev = net->phydev; in lan78xx_link_status_change()
1953 /* At forced 100 F/H mode, chip may fail to set mode correctly in lan78xx_link_status_change()
1955 * As workaround, set to 10 before setting to 100 in lan78xx_link_status_change()
1956 * at forced 100 F/H mode. in lan78xx_link_status_change()
1958 if (!phydev->autoneg && (phydev->speed == 100)) { in lan78xx_link_status_change()
1968 phy_write(phydev, MII_BMCR, temp); /* set to 100 later */ in lan78xx_link_status_change()
1983 struct irq_domain_data *data = d->host_data; in irq_map()
1986 irq_set_chip_and_handler(irq, data->irqchip, data->irq_handler); in irq_map()
2007 data->irqenable &= ~BIT(irqd_to_hwirq(irqd)); in lan78xx_irq_mask()
2014 data->irqenable |= BIT(irqd_to_hwirq(irqd)); in lan78xx_irq_unmask()
2021 mutex_lock(&data->irq_lock); in lan78xx_irq_bus_lock()
2032 * are only two callbacks executed in non-atomic contex. in lan78xx_irq_bus_sync_unlock()
2035 if (buf != data->irqenable) in lan78xx_irq_bus_sync_unlock()
2036 lan78xx_write_reg(dev, INT_EP_CTL, data->irqenable); in lan78xx_irq_bus_sync_unlock()
2038 mutex_unlock(&data->irq_lock); in lan78xx_irq_bus_sync_unlock()
2042 .name = "lan78xx-irqs",
2057 of_node = dev->udev->dev.parent->of_node; in lan78xx_setup_irq_domain()
2059 mutex_init(&dev->domain_data.irq_lock); in lan78xx_setup_irq_domain()
2062 dev->domain_data.irqenable = buf; in lan78xx_setup_irq_domain()
2064 dev->domain_data.irqchip = &lan78xx_irqchip; in lan78xx_setup_irq_domain()
2065 dev->domain_data.irq_handler = handle_simple_irq; in lan78xx_setup_irq_domain()
2068 &chip_domain_ops, &dev->domain_data); in lan78xx_setup_irq_domain()
2076 ret = -EINVAL; in lan78xx_setup_irq_domain()
2079 ret = -EINVAL; in lan78xx_setup_irq_domain()
2082 dev->domain_data.irqdomain = irqdomain; in lan78xx_setup_irq_domain()
2083 dev->domain_data.phyirq = irqmap; in lan78xx_setup_irq_domain()
2090 if (dev->domain_data.phyirq > 0) { in lan78xx_remove_irq_domain()
2091 irq_dispose_mapping(dev->domain_data.phyirq); in lan78xx_remove_irq_domain()
2093 if (dev->domain_data.irqdomain) in lan78xx_remove_irq_domain()
2094 irq_domain_remove(dev->domain_data.irqdomain); in lan78xx_remove_irq_domain()
2096 dev->domain_data.phyirq = 0; in lan78xx_remove_irq_domain()
2097 dev->domain_data.irqdomain = NULL; in lan78xx_remove_irq_domain()
2103 struct lan78xx_net *dev = netdev_priv(phydev->attached_dev); in lan8835_fixup()
2115 /* RGMII TX DLL Tune Adjust */ in lan8835_fixup()
2118 dev->interface = PHY_INTERFACE_MODE_RGMII_TXID; in lan8835_fixup()
2125 struct lan78xx_net *dev = netdev_priv(phydev->attached_dev); in ksz9031rnx_fixup()
2135 dev->interface = PHY_INTERFACE_MODE_RGMII_RXID; in ksz9031rnx_fixup()
2151 phydev = phy_find_first(dev->mdiobus); in lan7801_phy_init()
2153 netdev_dbg(dev->net, "PHY Not Found!! Registering Fixed PHY\n"); in lan7801_phy_init()
2156 netdev_err(dev->net, "No PHY/fixed_PHY found\n"); in lan7801_phy_init()
2159 netdev_dbg(dev->net, "Registered FIXED PHY\n"); in lan7801_phy_init()
2160 dev->interface = PHY_INTERFACE_MODE_RGMII; in lan7801_phy_init()
2169 if (!phydev->drv) { in lan7801_phy_init()
2170 netdev_err(dev->net, "no PHY driver found\n"); in lan7801_phy_init()
2173 dev->interface = PHY_INTERFACE_MODE_RGMII; in lan7801_phy_init()
2178 netdev_err(dev->net, "Failed to register fixup for PHY_KSZ9031RNX\n"); in lan7801_phy_init()
2185 netdev_err(dev->net, "Failed to register fixup for PHY_LAN8835\n"); in lan7801_phy_init()
2190 phydev->is_internal = false; in lan7801_phy_init()
2202 switch (dev->chipid) { in lan78xx_phy_init()
2206 netdev_err(dev->net, "lan7801: PHY Init Failed"); in lan78xx_phy_init()
2207 return -EIO; in lan78xx_phy_init()
2213 phydev = phy_find_first(dev->mdiobus); in lan78xx_phy_init()
2215 netdev_err(dev->net, "no PHY found\n"); in lan78xx_phy_init()
2216 return -EIO; in lan78xx_phy_init()
2218 phydev->is_internal = true; in lan78xx_phy_init()
2219 dev->interface = PHY_INTERFACE_MODE_GMII; in lan78xx_phy_init()
2223 netdev_err(dev->net, "Unknown CHIP ID found\n"); in lan78xx_phy_init()
2224 return -EIO; in lan78xx_phy_init()
2228 if (dev->domain_data.phyirq > 0) in lan78xx_phy_init()
2229 phydev->irq = dev->domain_data.phyirq; in lan78xx_phy_init()
2231 phydev->irq = 0; in lan78xx_phy_init()
2232 netdev_dbg(dev->net, "phydev->irq = %d\n", phydev->irq); in lan78xx_phy_init()
2235 phydev->mdix = ETH_TP_MDI_AUTO; in lan78xx_phy_init()
2237 ret = phy_connect_direct(dev->net, phydev, in lan78xx_phy_init()
2239 dev->interface); in lan78xx_phy_init()
2241 netdev_err(dev->net, "can't attach PHY to %s\n", in lan78xx_phy_init()
2242 dev->mdiobus->id); in lan78xx_phy_init()
2243 if (dev->chipid == ID_REV_CHIP_ID_7801_) { in lan78xx_phy_init()
2253 return -EIO; in lan78xx_phy_init()
2260 dev->fc_request_control = (FLOW_CTRL_RX | FLOW_CTRL_TX); in lan78xx_phy_init()
2262 phydev->advertising); in lan78xx_phy_init()
2264 phydev->advertising); in lan78xx_phy_init()
2265 mii_adv = (u32)mii_advertise_flowctrl(dev->fc_request_control); in lan78xx_phy_init()
2267 linkmode_or(phydev->advertising, fc, phydev->advertising); in lan78xx_phy_init()
2269 if (phydev->mdio.dev.of_node) { in lan78xx_phy_init()
2273 len = of_property_count_elems_of_size(phydev->mdio.dev.of_node, in lan78xx_phy_init()
2274 "microchip,led-modes", in lan78xx_phy_init()
2293 dev->fc_autoneg = phydev->autoneg; in lan78xx_phy_init()
2332 spin_lock_irqsave(&q->lock, flags); in unlink_urbs()
2339 entry = (struct skb_data *)skb->cb; in unlink_urbs()
2340 if (entry->state != unlink_start) in unlink_urbs()
2345 entry->state = unlink_start; in unlink_urbs()
2346 urb = entry->urb; in unlink_urbs()
2350 * use-after-free problem inside usb_unlink_urb since in unlink_urbs()
2355 spin_unlock_irqrestore(&q->lock, flags); in unlink_urbs()
2356 /* during some PM-driven resume scenarios, in unlink_urbs()
2360 if (ret != -EINPROGRESS && ret != 0) in unlink_urbs()
2361 netdev_dbg(dev->net, "unlink urb err, %d\n", ret); in unlink_urbs()
2365 spin_lock_irqsave(&q->lock, flags); in unlink_urbs()
2367 spin_unlock_irqrestore(&q->lock, flags); in unlink_urbs()
2374 int ll_mtu = new_mtu + netdev->hard_header_len; in lan78xx_change_mtu()
2375 int old_hard_mtu = dev->hard_mtu; in lan78xx_change_mtu()
2376 int old_rx_urb_size = dev->rx_urb_size; in lan78xx_change_mtu()
2379 /* no second zero-length packet read wanted after mtu-sized packets */ in lan78xx_change_mtu()
2380 if ((ll_mtu % dev->maxpacket) == 0) in lan78xx_change_mtu()
2381 return -EDOM; in lan78xx_change_mtu()
2383 ret = usb_autopm_get_interface(dev->intf); in lan78xx_change_mtu()
2389 netdev->mtu = new_mtu; in lan78xx_change_mtu()
2391 dev->hard_mtu = netdev->mtu + netdev->hard_header_len; in lan78xx_change_mtu()
2392 if (dev->rx_urb_size == old_hard_mtu) { in lan78xx_change_mtu()
2393 dev->rx_urb_size = dev->hard_mtu; in lan78xx_change_mtu()
2394 if (dev->rx_urb_size > old_rx_urb_size) { in lan78xx_change_mtu()
2395 if (netif_running(dev->net)) { in lan78xx_change_mtu()
2396 unlink_urbs(dev, &dev->rxq); in lan78xx_change_mtu()
2397 tasklet_schedule(&dev->bh); in lan78xx_change_mtu()
2402 usb_autopm_put_interface(dev->intf); in lan78xx_change_mtu()
2414 return -EBUSY; in lan78xx_set_mac_addr()
2416 if (!is_valid_ether_addr(addr->sa_data)) in lan78xx_set_mac_addr()
2417 return -EADDRNOTAVAIL; in lan78xx_set_mac_addr()
2419 ether_addr_copy(netdev->dev_addr, addr->sa_data); in lan78xx_set_mac_addr()
2421 addr_lo = netdev->dev_addr[0] | in lan78xx_set_mac_addr()
2422 netdev->dev_addr[1] << 8 | in lan78xx_set_mac_addr()
2423 netdev->dev_addr[2] << 16 | in lan78xx_set_mac_addr()
2424 netdev->dev_addr[3] << 24; in lan78xx_set_mac_addr()
2425 addr_hi = netdev->dev_addr[4] | in lan78xx_set_mac_addr()
2426 netdev->dev_addr[5] << 8; in lan78xx_set_mac_addr()
2443 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_set_features()
2446 spin_lock_irqsave(&pdata->rfe_ctl_lock, flags); in lan78xx_set_features()
2449 pdata->rfe_ctl |= RFE_CTL_TCPUDP_COE_ | RFE_CTL_IP_COE_; in lan78xx_set_features()
2450 pdata->rfe_ctl |= RFE_CTL_ICMP_COE_ | RFE_CTL_IGMP_COE_; in lan78xx_set_features()
2452 pdata->rfe_ctl &= ~(RFE_CTL_TCPUDP_COE_ | RFE_CTL_IP_COE_); in lan78xx_set_features()
2453 pdata->rfe_ctl &= ~(RFE_CTL_ICMP_COE_ | RFE_CTL_IGMP_COE_); in lan78xx_set_features()
2457 pdata->rfe_ctl |= RFE_CTL_VLAN_STRIP_; in lan78xx_set_features()
2459 pdata->rfe_ctl &= ~RFE_CTL_VLAN_STRIP_; in lan78xx_set_features()
2462 pdata->rfe_ctl |= RFE_CTL_VLAN_FILTER_; in lan78xx_set_features()
2464 pdata->rfe_ctl &= ~RFE_CTL_VLAN_FILTER_; in lan78xx_set_features()
2466 spin_unlock_irqrestore(&pdata->rfe_ctl_lock, flags); in lan78xx_set_features()
2468 lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); in lan78xx_set_features()
2477 struct lan78xx_net *dev = pdata->dev; in lan78xx_deferred_vlan_write()
2480 DP_SEL_VHF_VLAN_LEN, pdata->vlan_table); in lan78xx_deferred_vlan_write()
2487 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_vlan_rx_add_vid()
2494 pdata->vlan_table[vid_dword_index] |= (1 << vid_bit_index); in lan78xx_vlan_rx_add_vid()
2497 schedule_work(&pdata->set_vlan); in lan78xx_vlan_rx_add_vid()
2506 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_vlan_rx_kill_vid()
2513 pdata->vlan_table[vid_dword_index] &= ~(1 << vid_bit_index); in lan78xx_vlan_rx_kill_vid()
2516 schedule_work(&pdata->set_vlan); in lan78xx_vlan_rx_kill_vid()
2600 ret = stopped ? 0 : -ETIME; in lan78xx_stop_hw()
2614 netif_dbg(dev, drv, dev->net, "start tx path"); in lan78xx_start_tx_path()
2622 /* Start the Tx FIFO */ in lan78xx_start_tx_path()
2635 netif_dbg(dev, drv, dev->net, "stop tx path"); in lan78xx_stop_tx_path()
2637 /* Stop the Tx FIFO */ in lan78xx_stop_tx_path()
2652 /* The caller must ensure the Tx path is stopped before calling
2664 netif_dbg(dev, drv, dev->net, "start rx path"); in lan78xx_start_rx_path()
2685 netif_dbg(dev, drv, dev->net, "stop rx path"); in lan78xx_stop_rx_path()
2712 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_reset()
2736 netdev_warn(dev->net, in lan78xx_reset()
2738 ret = -ETIMEDOUT; in lan78xx_reset()
2750 dev->chipid = (buf & ID_REV_CHIP_ID_MASK_) >> 16; in lan78xx_reset()
2751 dev->chiprev = buf & ID_REV_CHIP_REV_MASK_; in lan78xx_reset()
2767 if (dev->udev->speed == USB_SPEED_SUPER) { in lan78xx_reset()
2769 dev->rx_urb_size = DEFAULT_BURST_CAP_SIZE; in lan78xx_reset()
2770 dev->rx_qlen = 4; in lan78xx_reset()
2771 dev->tx_qlen = 4; in lan78xx_reset()
2772 } else if (dev->udev->speed == USB_SPEED_HIGH) { in lan78xx_reset()
2774 dev->rx_urb_size = DEFAULT_BURST_CAP_SIZE; in lan78xx_reset()
2775 dev->rx_qlen = RX_MAX_QUEUE_MEMORY / dev->rx_urb_size; in lan78xx_reset()
2776 dev->tx_qlen = RX_MAX_QUEUE_MEMORY / dev->hard_mtu; in lan78xx_reset()
2779 dev->rx_urb_size = DEFAULT_BURST_CAP_SIZE; in lan78xx_reset()
2780 dev->rx_qlen = 4; in lan78xx_reset()
2781 dev->tx_qlen = 4; in lan78xx_reset()
2813 buf = (MAX_RX_FIFO_SIZE - 512) / 512; in lan78xx_reset()
2819 buf = (MAX_TX_FIFO_SIZE - 512) / 512; in lan78xx_reset()
2838 ret = lan78xx_read_reg(dev, RFE_CTL, &pdata->rfe_ctl); in lan78xx_reset()
2842 pdata->rfe_ctl |= RFE_CTL_BCAST_EN_ | RFE_CTL_DA_PERFECT_; in lan78xx_reset()
2844 ret = lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); in lan78xx_reset()
2849 ret = lan78xx_set_features(dev->net, dev->net->features); in lan78xx_reset()
2853 lan78xx_set_multicast(dev->net); in lan78xx_reset()
2874 netdev_warn(dev->net, "timeout waiting for PHY Reset"); in lan78xx_reset()
2875 ret = -ETIMEDOUT; in lan78xx_reset()
2885 if (dev->chipid == ID_REV_CHIP_ID_7801_) in lan78xx_reset()
2888 if (dev->chipid == ID_REV_CHIP_ID_7800_) { in lan78xx_reset()
2892 netdev_info(dev->net, "No External EEPROM. Setting MAC Speed\n"); in lan78xx_reset()
2901 dev->net->mtu + VLAN_ETH_HLEN); in lan78xx_reset()
2914 p = (u32 *)&dev->stats.rollover_max; in lan78xx_init_stats()
2915 for (i = 0; i < (sizeof(dev->stats.rollover_max) / (sizeof(u32))); i++) in lan78xx_init_stats()
2918 dev->stats.rollover_max.rx_unicast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
2919 dev->stats.rollover_max.rx_broadcast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
2920 dev->stats.rollover_max.rx_multicast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
2921 dev->stats.rollover_max.eee_rx_lpi_transitions = 0xFFFFFFFF; in lan78xx_init_stats()
2922 dev->stats.rollover_max.eee_rx_lpi_time = 0xFFFFFFFF; in lan78xx_init_stats()
2923 dev->stats.rollover_max.tx_unicast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
2924 dev->stats.rollover_max.tx_broadcast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
2925 dev->stats.rollover_max.tx_multicast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
2926 dev->stats.rollover_max.eee_tx_lpi_transitions = 0xFFFFFFFF; in lan78xx_init_stats()
2927 dev->stats.rollover_max.eee_tx_lpi_time = 0xFFFFFFFF; in lan78xx_init_stats()
2929 set_bit(EVENT_STAT_UPDATE, &dev->flags); in lan78xx_init_stats()
2937 netif_dbg(dev, ifup, dev->net, "open device"); in lan78xx_open()
2939 ret = usb_autopm_get_interface(dev->intf); in lan78xx_open()
2943 mutex_lock(&dev->dev_mutex); in lan78xx_open()
2945 phy_start(net->phydev); in lan78xx_open()
2947 netif_dbg(dev, ifup, dev->net, "phy initialised successfully"); in lan78xx_open()
2950 if (dev->urb_intr) { in lan78xx_open()
2951 ret = usb_submit_urb(dev->urb_intr, GFP_KERNEL); in lan78xx_open()
2953 netif_err(dev, ifup, dev->net, in lan78xx_open()
2975 set_bit(EVENT_DEV_OPEN, &dev->flags); in lan78xx_open()
2979 dev->link_on = false; in lan78xx_open()
2983 mutex_unlock(&dev->dev_mutex); in lan78xx_open()
2985 usb_autopm_put_interface(dev->intf); in lan78xx_open()
2999 dev->wait = &unlink_wakeup; in lan78xx_terminate_urbs()
3000 temp = unlink_urbs(dev, &dev->txq) + unlink_urbs(dev, &dev->rxq); in lan78xx_terminate_urbs()
3003 while (!skb_queue_empty(&dev->rxq) || in lan78xx_terminate_urbs()
3004 !skb_queue_empty(&dev->txq)) { in lan78xx_terminate_urbs()
3007 netif_dbg(dev, ifdown, dev->net, in lan78xx_terminate_urbs()
3011 dev->wait = NULL; in lan78xx_terminate_urbs()
3014 while (!skb_queue_empty(&dev->done)) { in lan78xx_terminate_urbs()
3018 skb = skb_dequeue(&dev->done); in lan78xx_terminate_urbs()
3019 entry = (struct skb_data *)(skb->cb); in lan78xx_terminate_urbs()
3020 usb_free_urb(entry->urb); in lan78xx_terminate_urbs()
3029 netif_dbg(dev, ifup, dev->net, "stop device"); in lan78xx_stop()
3031 mutex_lock(&dev->dev_mutex); in lan78xx_stop()
3033 if (timer_pending(&dev->stat_monitor)) in lan78xx_stop()
3034 del_timer_sync(&dev->stat_monitor); in lan78xx_stop()
3036 clear_bit(EVENT_DEV_OPEN, &dev->flags); in lan78xx_stop()
3038 tasklet_kill(&dev->bh); in lan78xx_stop()
3042 netif_info(dev, ifdown, dev->net, in lan78xx_stop()
3043 "stop stats: rx/tx %lu/%lu, errs %lu/%lu\n", in lan78xx_stop()
3044 net->stats.rx_packets, net->stats.tx_packets, in lan78xx_stop()
3045 net->stats.rx_errors, net->stats.tx_errors); in lan78xx_stop()
3047 /* ignore errors that occur stopping the Tx and Rx data paths */ in lan78xx_stop()
3051 if (net->phydev) in lan78xx_stop()
3052 phy_stop(net->phydev); in lan78xx_stop()
3054 usb_kill_urb(dev->urb_intr); in lan78xx_stop()
3060 clear_bit(EVENT_TX_HALT, &dev->flags); in lan78xx_stop()
3061 clear_bit(EVENT_RX_HALT, &dev->flags); in lan78xx_stop()
3062 clear_bit(EVENT_LINK_RESET, &dev->flags); in lan78xx_stop()
3063 clear_bit(EVENT_STAT_UPDATE, &dev->flags); in lan78xx_stop()
3065 cancel_delayed_work_sync(&dev->wq); in lan78xx_stop()
3067 usb_autopm_put_interface(dev->intf); in lan78xx_stop()
3069 mutex_unlock(&dev->dev_mutex); in lan78xx_stop()
3090 tx_cmd_a = (u32)(skb->len & TX_CMD_A_LEN_MASK_) | TX_CMD_A_FCS_; in lan78xx_tx_prep()
3092 if (skb->ip_summed == CHECKSUM_PARTIAL) in lan78xx_tx_prep()
3097 u16 mss = max(skb_shinfo(skb)->gso_size, TX_CMD_B_MSS_MIN_); in lan78xx_tx_prep()
3121 struct skb_data *entry = (struct skb_data *)skb->cb; in defer_bh()
3123 spin_lock_irqsave(&list->lock, flags); in defer_bh()
3124 old_state = entry->state; in defer_bh()
3125 entry->state = state; in defer_bh()
3128 spin_unlock(&list->lock); in defer_bh()
3129 spin_lock(&dev->done.lock); in defer_bh()
3131 __skb_queue_tail(&dev->done, skb); in defer_bh()
3132 if (skb_queue_len(&dev->done) == 1) in defer_bh()
3133 tasklet_schedule(&dev->bh); in defer_bh()
3134 spin_unlock_irqrestore(&dev->done.lock, flags); in defer_bh()
3141 struct sk_buff *skb = (struct sk_buff *)urb->context; in tx_complete()
3142 struct skb_data *entry = (struct skb_data *)skb->cb; in tx_complete()
3143 struct lan78xx_net *dev = entry->dev; in tx_complete()
3145 if (urb->status == 0) { in tx_complete()
3146 dev->net->stats.tx_packets += entry->num_of_packet; in tx_complete()
3147 dev->net->stats.tx_bytes += entry->length; in tx_complete()
3149 dev->net->stats.tx_errors++; in tx_complete()
3151 switch (urb->status) { in tx_complete()
3152 case -EPIPE: in tx_complete()
3156 /* software-driven interface shutdown */ in tx_complete()
3157 case -ECONNRESET: in tx_complete()
3158 case -ESHUTDOWN: in tx_complete()
3159 netif_dbg(dev, tx_err, dev->net, in tx_complete()
3160 "tx err interface gone %d\n", in tx_complete()
3161 entry->urb->status); in tx_complete()
3164 case -EPROTO: in tx_complete()
3165 case -ETIME: in tx_complete()
3166 case -EILSEQ: in tx_complete()
3167 netif_stop_queue(dev->net); in tx_complete()
3168 netif_dbg(dev, tx_err, dev->net, in tx_complete()
3169 "tx err queue stopped %d\n", in tx_complete()
3170 entry->urb->status); in tx_complete()
3173 netif_dbg(dev, tx_err, dev->net, in tx_complete()
3174 "unknown tx err %d\n", in tx_complete()
3175 entry->urb->status); in tx_complete()
3180 usb_autopm_put_interface_async(dev->intf); in tx_complete()
3182 defer_bh(dev, skb, &dev->txq, tx_done); in tx_complete()
3188 struct skb_data *entry = (struct skb_data *)newsk->cb; in lan78xx_queue_skb()
3191 entry->state = state; in lan78xx_queue_skb()
3200 if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) in lan78xx_start_xmit()
3201 schedule_delayed_work(&dev->wq, 0); in lan78xx_start_xmit()
3209 skb_queue_tail(&dev->txq_pend, skb2); in lan78xx_start_xmit()
3211 /* throttle TX patch at slower than SUPER SPEED USB */ in lan78xx_start_xmit()
3212 if ((dev->udev->speed < USB_SPEED_SUPER) && in lan78xx_start_xmit()
3213 (skb_queue_len(&dev->txq_pend) > 10)) in lan78xx_start_xmit()
3216 netif_dbg(dev, tx_err, dev->net, in lan78xx_start_xmit()
3218 dev->net->stats.tx_errors++; in lan78xx_start_xmit()
3219 dev->net->stats.tx_dropped++; in lan78xx_start_xmit()
3222 tasklet_schedule(&dev->bh); in lan78xx_start_xmit()
3233 dev->data[0] = (unsigned long)kzalloc(sizeof(*pdata), GFP_KERNEL); in lan78xx_bind()
3235 pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_bind()
3237 netdev_warn(dev->net, "Unable to allocate lan78xx_priv"); in lan78xx_bind()
3238 return -ENOMEM; in lan78xx_bind()
3241 pdata->dev = dev; in lan78xx_bind()
3243 spin_lock_init(&pdata->rfe_ctl_lock); in lan78xx_bind()
3244 mutex_init(&pdata->dataport_mutex); in lan78xx_bind()
3246 INIT_WORK(&pdata->set_multicast, lan78xx_deferred_multicast_write); in lan78xx_bind()
3249 pdata->vlan_table[i] = 0; in lan78xx_bind()
3251 INIT_WORK(&pdata->set_vlan, lan78xx_deferred_vlan_write); in lan78xx_bind()
3253 dev->net->features = 0; in lan78xx_bind()
3256 dev->net->features |= NETIF_F_HW_CSUM; in lan78xx_bind()
3259 dev->net->features |= NETIF_F_RXCSUM; in lan78xx_bind()
3262 dev->net->features |= NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_SG; in lan78xx_bind()
3265 dev->net->features |= NETIF_F_HW_VLAN_CTAG_RX; in lan78xx_bind()
3268 dev->net->features |= NETIF_F_HW_VLAN_CTAG_FILTER; in lan78xx_bind()
3270 dev->net->hw_features = dev->net->features; in lan78xx_bind()
3274 netdev_warn(dev->net, in lan78xx_bind()
3279 dev->net->hard_header_len += TX_OVERHEAD; in lan78xx_bind()
3280 dev->hard_mtu = dev->net->mtu + dev->net->hard_header_len; in lan78xx_bind()
3285 netdev_warn(dev->net, "Registers INIT FAILED...."); in lan78xx_bind()
3291 netdev_warn(dev->net, "MDIO INIT FAILED....."); in lan78xx_bind()
3295 dev->net->flags |= IFF_MULTICAST; in lan78xx_bind()
3297 pdata->wol = WAKE_MAGIC; in lan78xx_bind()
3305 netdev_warn(dev->net, "Bind routine FAILED"); in lan78xx_bind()
3306 cancel_work_sync(&pdata->set_multicast); in lan78xx_bind()
3307 cancel_work_sync(&pdata->set_vlan); in lan78xx_bind()
3314 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_unbind()
3321 cancel_work_sync(&pdata->set_multicast); in lan78xx_unbind()
3322 cancel_work_sync(&pdata->set_vlan); in lan78xx_unbind()
3323 netif_dbg(dev, ifdown, dev->net, "free pdata"); in lan78xx_unbind()
3326 dev->data[0] = 0; in lan78xx_unbind()
3337 if (!(dev->net->features & NETIF_F_RXCSUM) || in lan78xx_rx_csum_offload()
3340 !(dev->net->features & NETIF_F_HW_VLAN_CTAG_RX))) { in lan78xx_rx_csum_offload()
3341 skb->ip_summed = CHECKSUM_NONE; in lan78xx_rx_csum_offload()
3343 skb->csum = ntohs((u16)(rx_cmd_b >> RX_CMD_B_CSUM_SHIFT_)); in lan78xx_rx_csum_offload()
3344 skb->ip_summed = CHECKSUM_COMPLETE; in lan78xx_rx_csum_offload()
3352 if ((dev->net->features & NETIF_F_HW_VLAN_CTAG_RX) && in lan78xx_rx_vlan_offload()
3362 dev->net->stats.rx_packets++; in lan78xx_skb_return()
3363 dev->net->stats.rx_bytes += skb->len; in lan78xx_skb_return()
3365 skb->protocol = eth_type_trans(skb, dev->net); in lan78xx_skb_return()
3367 netif_dbg(dev, rx_status, dev->net, "< rx, len %zu, type 0x%x\n", in lan78xx_skb_return()
3368 skb->len + sizeof(struct ethhdr), skb->protocol); in lan78xx_skb_return()
3369 memset(skb->cb, 0, sizeof(struct skb_data)); in lan78xx_skb_return()
3376 netif_dbg(dev, rx_err, dev->net, in lan78xx_skb_return()
3382 if (skb->len < dev->net->hard_header_len) in lan78xx_rx()
3385 while (skb->len > 0) { in lan78xx_rx()
3391 rx_cmd_a = get_unaligned_le32(skb->data); in lan78xx_rx()
3394 rx_cmd_b = get_unaligned_le32(skb->data); in lan78xx_rx()
3397 rx_cmd_c = get_unaligned_le16(skb->data); in lan78xx_rx()
3400 packet = skb->data; in lan78xx_rx()
3404 align_count = (4 - ((size + RXW_PADDING) % 4)) % 4; in lan78xx_rx()
3407 netif_dbg(dev, rx_err, dev->net, in lan78xx_rx()
3411 if (skb->len == size) { in lan78xx_rx()
3417 skb_trim(skb, skb->len - 4); /* remove fcs */ in lan78xx_rx()
3418 skb->truesize = size + sizeof(struct sk_buff); in lan78xx_rx()
3425 netdev_warn(dev->net, "Error allocating skb"); in lan78xx_rx()
3429 skb2->len = size; in lan78xx_rx()
3430 skb2->data = packet; in lan78xx_rx()
3436 skb_trim(skb2, skb2->len - 4); /* remove fcs */ in lan78xx_rx()
3437 skb2->truesize = size + sizeof(struct sk_buff); in lan78xx_rx()
3445 if (skb->len) in lan78xx_rx()
3455 dev->net->stats.rx_errors++; in rx_process()
3459 if (skb->len) { in rx_process()
3464 netif_dbg(dev, rx_err, dev->net, "drop\n"); in rx_process()
3465 dev->net->stats.rx_errors++; in rx_process()
3467 skb_queue_tail(&dev->done, skb); in rx_process()
3477 size_t size = dev->rx_urb_size; in rx_submit()
3480 skb = netdev_alloc_skb_ip_align(dev->net, size); in rx_submit()
3483 return -ENOMEM; in rx_submit()
3486 entry = (struct skb_data *)skb->cb; in rx_submit()
3487 entry->urb = urb; in rx_submit()
3488 entry->dev = dev; in rx_submit()
3489 entry->length = 0; in rx_submit()
3491 usb_fill_bulk_urb(urb, dev->udev, dev->pipe_in, in rx_submit()
3492 skb->data, size, rx_complete, skb); in rx_submit()
3494 spin_lock_irqsave(&dev->rxq.lock, lockflags); in rx_submit()
3496 if (netif_device_present(dev->net) && in rx_submit()
3497 netif_running(dev->net) && in rx_submit()
3498 !test_bit(EVENT_RX_HALT, &dev->flags) && in rx_submit()
3499 !test_bit(EVENT_DEV_ASLEEP, &dev->flags)) { in rx_submit()
3503 lan78xx_queue_skb(&dev->rxq, skb, rx_start); in rx_submit()
3505 case -EPIPE: in rx_submit()
3508 case -ENODEV: in rx_submit()
3509 case -ENOENT: in rx_submit()
3510 netif_dbg(dev, ifdown, dev->net, "device gone\n"); in rx_submit()
3511 netif_device_detach(dev->net); in rx_submit()
3513 case -EHOSTUNREACH: in rx_submit()
3514 ret = -ENOLINK; in rx_submit()
3517 netif_dbg(dev, rx_err, dev->net, in rx_submit()
3519 tasklet_schedule(&dev->bh); in rx_submit()
3522 netif_dbg(dev, ifdown, dev->net, "rx: stopped\n"); in rx_submit()
3523 ret = -ENOLINK; in rx_submit()
3525 spin_unlock_irqrestore(&dev->rxq.lock, lockflags); in rx_submit()
3535 struct sk_buff *skb = (struct sk_buff *)urb->context; in rx_complete()
3536 struct skb_data *entry = (struct skb_data *)skb->cb; in rx_complete()
3537 struct lan78xx_net *dev = entry->dev; in rx_complete()
3538 int urb_status = urb->status; in rx_complete()
3541 skb_put(skb, urb->actual_length); in rx_complete()
3543 entry->urb = NULL; in rx_complete()
3547 if (skb->len < dev->net->hard_header_len) { in rx_complete()
3549 dev->net->stats.rx_errors++; in rx_complete()
3550 dev->net->stats.rx_length_errors++; in rx_complete()
3551 netif_dbg(dev, rx_err, dev->net, in rx_complete()
3552 "rx length %d\n", skb->len); in rx_complete()
3554 usb_mark_last_busy(dev->udev); in rx_complete()
3556 case -EPIPE: in rx_complete()
3557 dev->net->stats.rx_errors++; in rx_complete()
3560 case -ECONNRESET: /* async unlink */ in rx_complete()
3561 case -ESHUTDOWN: /* hardware gone */ in rx_complete()
3562 netif_dbg(dev, ifdown, dev->net, in rx_complete()
3565 entry->urb = urb; in rx_complete()
3568 case -EPROTO: in rx_complete()
3569 case -ETIME: in rx_complete()
3570 case -EILSEQ: in rx_complete()
3571 dev->net->stats.rx_errors++; in rx_complete()
3573 entry->urb = urb; in rx_complete()
3578 case -EOVERFLOW: in rx_complete()
3579 dev->net->stats.rx_over_errors++; in rx_complete()
3584 dev->net->stats.rx_errors++; in rx_complete()
3585 netif_dbg(dev, rx_err, dev->net, "rx status %d\n", urb_status); in rx_complete()
3589 state = defer_bh(dev, skb, &dev->rxq, state); in rx_complete()
3592 if (netif_running(dev->net) && in rx_complete()
3593 !test_bit(EVENT_RX_HALT, &dev->flags) && in rx_complete()
3600 netif_dbg(dev, rx_err, dev->net, "no read resubmitted\n"); in rx_complete()
3609 struct sk_buff_head *tqp = &dev->txq_pend; in lan78xx_tx_bh()
3619 spin_lock_irqsave(&tqp->lock, flags); in lan78xx_tx_bh()
3627 length = skb->len - TX_OVERHEAD; in lan78xx_tx_bh()
3629 spin_unlock_irqrestore(&tqp->lock, flags); in lan78xx_tx_bh()
3633 if ((skb_totallen + skb->len) > MAX_SINGLE_PACKET_SIZE) in lan78xx_tx_bh()
3635 skb_totallen = skb->len + roundup(skb_totallen, sizeof(u32)); in lan78xx_tx_bh()
3638 spin_unlock_irqrestore(&tqp->lock, flags); in lan78xx_tx_bh()
3650 length += (skb2->len - TX_OVERHEAD); in lan78xx_tx_bh()
3651 memcpy(skb->data + pos, skb2->data, skb2->len); in lan78xx_tx_bh()
3652 pos += roundup(skb2->len, sizeof(u32)); in lan78xx_tx_bh()
3662 entry = (struct skb_data *)skb->cb; in lan78xx_tx_bh()
3663 entry->urb = urb; in lan78xx_tx_bh()
3664 entry->dev = dev; in lan78xx_tx_bh()
3665 entry->length = length; in lan78xx_tx_bh()
3666 entry->num_of_packet = count; in lan78xx_tx_bh()
3668 spin_lock_irqsave(&dev->txq.lock, flags); in lan78xx_tx_bh()
3669 ret = usb_autopm_get_interface_async(dev->intf); in lan78xx_tx_bh()
3671 spin_unlock_irqrestore(&dev->txq.lock, flags); in lan78xx_tx_bh()
3675 usb_fill_bulk_urb(urb, dev->udev, dev->pipe_out, in lan78xx_tx_bh()
3676 skb->data, skb->len, tx_complete, skb); in lan78xx_tx_bh()
3678 if (length % dev->maxpacket == 0) { in lan78xx_tx_bh()
3680 urb->transfer_flags |= URB_ZERO_PACKET; in lan78xx_tx_bh()
3685 if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) { in lan78xx_tx_bh()
3687 usb_anchor_urb(urb, &dev->deferred); in lan78xx_tx_bh()
3689 netif_stop_queue(dev->net); in lan78xx_tx_bh()
3691 spin_unlock_irqrestore(&dev->txq.lock, flags); in lan78xx_tx_bh()
3692 netdev_dbg(dev->net, "Delaying transmission for resumption\n"); in lan78xx_tx_bh()
3700 netif_trans_update(dev->net); in lan78xx_tx_bh()
3701 lan78xx_queue_skb(&dev->txq, skb, tx_start); in lan78xx_tx_bh()
3702 if (skb_queue_len(&dev->txq) >= dev->tx_qlen) in lan78xx_tx_bh()
3703 netif_stop_queue(dev->net); in lan78xx_tx_bh()
3705 case -EPIPE: in lan78xx_tx_bh()
3706 netif_stop_queue(dev->net); in lan78xx_tx_bh()
3708 usb_autopm_put_interface_async(dev->intf); in lan78xx_tx_bh()
3710 case -ENODEV: in lan78xx_tx_bh()
3711 case -ENOENT: in lan78xx_tx_bh()
3712 netif_dbg(dev, tx_err, dev->net, in lan78xx_tx_bh()
3713 "tx: submit urb err %d (disconnected?)", ret); in lan78xx_tx_bh()
3714 netif_device_detach(dev->net); in lan78xx_tx_bh()
3717 usb_autopm_put_interface_async(dev->intf); in lan78xx_tx_bh()
3718 netif_dbg(dev, tx_err, dev->net, in lan78xx_tx_bh()
3719 "tx: submit urb err %d\n", ret); in lan78xx_tx_bh()
3723 spin_unlock_irqrestore(&dev->txq.lock, flags); in lan78xx_tx_bh()
3726 netif_dbg(dev, tx_err, dev->net, "drop, code %d\n", ret); in lan78xx_tx_bh()
3728 dev->net->stats.tx_dropped++; in lan78xx_tx_bh()
3733 netif_dbg(dev, tx_queued, dev->net, in lan78xx_tx_bh()
3734 "> tx, len %d, type 0x%x\n", length, skb->protocol); in lan78xx_tx_bh()
3743 if (skb_queue_len(&dev->rxq) < dev->rx_qlen) { in lan78xx_rx_bh()
3745 if (skb_queue_len(&dev->rxq) >= dev->rx_qlen) in lan78xx_rx_bh()
3749 if (rx_submit(dev, urb, GFP_ATOMIC) == -ENOLINK) in lan78xx_rx_bh()
3753 if (skb_queue_len(&dev->rxq) < dev->rx_qlen) in lan78xx_rx_bh()
3754 tasklet_schedule(&dev->bh); in lan78xx_rx_bh()
3756 if (skb_queue_len(&dev->txq) < dev->tx_qlen) in lan78xx_rx_bh()
3757 netif_wake_queue(dev->net); in lan78xx_rx_bh()
3766 while ((skb = skb_dequeue(&dev->done))) { in lan78xx_bh()
3767 entry = (struct skb_data *)(skb->cb); in lan78xx_bh()
3768 switch (entry->state) { in lan78xx_bh()
3770 entry->state = rx_cleanup; in lan78xx_bh()
3774 usb_free_urb(entry->urb); in lan78xx_bh()
3778 usb_free_urb(entry->urb); in lan78xx_bh()
3782 netdev_dbg(dev->net, "skb state %d\n", entry->state); in lan78xx_bh()
3787 if (netif_device_present(dev->net) && netif_running(dev->net)) { in lan78xx_bh()
3789 if (timer_pending(&dev->stat_monitor) && (dev->delta != 1)) { in lan78xx_bh()
3790 dev->delta = 1; in lan78xx_bh()
3791 mod_timer(&dev->stat_monitor, in lan78xx_bh()
3795 if (!skb_queue_empty(&dev->txq_pend)) in lan78xx_bh()
3798 if (!test_bit(EVENT_RX_HALT, &dev->flags)) in lan78xx_bh()
3810 if (test_bit(EVENT_DEV_DISCONNECT, &dev->flags)) in lan78xx_delayedwork()
3813 if (usb_autopm_get_interface(dev->intf) < 0) in lan78xx_delayedwork()
3816 if (test_bit(EVENT_TX_HALT, &dev->flags)) { in lan78xx_delayedwork()
3817 unlink_urbs(dev, &dev->txq); in lan78xx_delayedwork()
3819 status = usb_clear_halt(dev->udev, dev->pipe_out); in lan78xx_delayedwork()
3821 status != -EPIPE && in lan78xx_delayedwork()
3822 status != -ESHUTDOWN) { in lan78xx_delayedwork()
3824 netdev_err(dev->net, in lan78xx_delayedwork()
3825 "can't clear tx halt, status %d\n", in lan78xx_delayedwork()
3828 clear_bit(EVENT_TX_HALT, &dev->flags); in lan78xx_delayedwork()
3829 if (status != -ESHUTDOWN) in lan78xx_delayedwork()
3830 netif_wake_queue(dev->net); in lan78xx_delayedwork()
3834 if (test_bit(EVENT_RX_HALT, &dev->flags)) { in lan78xx_delayedwork()
3835 unlink_urbs(dev, &dev->rxq); in lan78xx_delayedwork()
3836 status = usb_clear_halt(dev->udev, dev->pipe_in); in lan78xx_delayedwork()
3838 status != -EPIPE && in lan78xx_delayedwork()
3839 status != -ESHUTDOWN) { in lan78xx_delayedwork()
3841 netdev_err(dev->net, in lan78xx_delayedwork()
3845 clear_bit(EVENT_RX_HALT, &dev->flags); in lan78xx_delayedwork()
3846 tasklet_schedule(&dev->bh); in lan78xx_delayedwork()
3850 if (test_bit(EVENT_LINK_RESET, &dev->flags)) { in lan78xx_delayedwork()
3853 clear_bit(EVENT_LINK_RESET, &dev->flags); in lan78xx_delayedwork()
3855 netdev_info(dev->net, "link reset failed (%d)\n", in lan78xx_delayedwork()
3860 if (test_bit(EVENT_STAT_UPDATE, &dev->flags)) { in lan78xx_delayedwork()
3863 clear_bit(EVENT_STAT_UPDATE, &dev->flags); in lan78xx_delayedwork()
3865 mod_timer(&dev->stat_monitor, in lan78xx_delayedwork()
3866 jiffies + (STAT_UPDATE_TIMER * dev->delta)); in lan78xx_delayedwork()
3868 dev->delta = min((dev->delta * 2), 50); in lan78xx_delayedwork()
3871 usb_autopm_put_interface(dev->intf); in lan78xx_delayedwork()
3876 struct lan78xx_net *dev = urb->context; in intr_complete()
3877 int status = urb->status; in intr_complete()
3885 /* software-driven interface shutdown */ in intr_complete()
3886 case -ENOENT: /* urb killed */ in intr_complete()
3887 case -ENODEV: /* hardware gone */ in intr_complete()
3888 case -ESHUTDOWN: /* hardware gone */ in intr_complete()
3889 netif_dbg(dev, ifdown, dev->net, in intr_complete()
3893 /* NOTE: not throttling like RX/TX, since this endpoint in intr_complete()
3897 netdev_dbg(dev->net, "intr status %d\n", status); in intr_complete()
3901 if (!netif_device_present(dev->net) || in intr_complete()
3902 !netif_running(dev->net)) { in intr_complete()
3903 netdev_warn(dev->net, "not submitting new status URB"); in intr_complete()
3907 memset(urb->transfer_buffer, 0, urb->transfer_buffer_length); in intr_complete()
3913 case -ENODEV: in intr_complete()
3914 case -ENOENT: in intr_complete()
3915 netif_dbg(dev, timer, dev->net, in intr_complete()
3917 netif_device_detach(dev->net); in intr_complete()
3920 netif_err(dev, timer, dev->net, in intr_complete()
3921 "intr resubmit --> %d\n", status); in intr_complete()
3938 set_bit(EVENT_DEV_DISCONNECT, &dev->flags); in lan78xx_disconnect()
3941 net = dev->net; in lan78xx_disconnect()
3945 cancel_delayed_work_sync(&dev->wq); in lan78xx_disconnect()
3947 phydev = net->phydev; in lan78xx_disconnect()
3952 phy_disconnect(net->phydev); in lan78xx_disconnect()
3957 usb_scuttle_anchored_urbs(&dev->deferred); in lan78xx_disconnect()
3959 if (timer_pending(&dev->stat_monitor)) in lan78xx_disconnect()
3960 del_timer_sync(&dev->stat_monitor); in lan78xx_disconnect()
3964 usb_kill_urb(dev->urb_intr); in lan78xx_disconnect()
3965 usb_free_urb(dev->urb_intr); in lan78xx_disconnect()
3975 unlink_urbs(dev, &dev->txq); in lan78xx_tx_timeout()
3976 tasklet_schedule(&dev->bh); in lan78xx_tx_timeout()
3983 if (skb->len + TX_OVERHEAD > MAX_SINGLE_PACKET_SIZE) in lan78xx_features_check()
4032 dev_err(&intf->dev, "Error: OOM\n"); in lan78xx_probe()
4033 ret = -ENOMEM; in lan78xx_probe()
4038 SET_NETDEV_DEV(netdev, &intf->dev); in lan78xx_probe()
4041 dev->udev = udev; in lan78xx_probe()
4042 dev->intf = intf; in lan78xx_probe()
4043 dev->net = netdev; in lan78xx_probe()
4044 dev->msg_enable = netif_msg_init(msg_level, NETIF_MSG_DRV in lan78xx_probe()
4047 skb_queue_head_init(&dev->rxq); in lan78xx_probe()
4048 skb_queue_head_init(&dev->txq); in lan78xx_probe()
4049 skb_queue_head_init(&dev->done); in lan78xx_probe()
4050 skb_queue_head_init(&dev->txq_pend); in lan78xx_probe()
4051 mutex_init(&dev->phy_mutex); in lan78xx_probe()
4052 mutex_init(&dev->dev_mutex); in lan78xx_probe()
4054 tasklet_setup(&dev->bh, lan78xx_bh); in lan78xx_probe()
4055 INIT_DELAYED_WORK(&dev->wq, lan78xx_delayedwork); in lan78xx_probe()
4056 init_usb_anchor(&dev->deferred); in lan78xx_probe()
4058 netdev->netdev_ops = &lan78xx_netdev_ops; in lan78xx_probe()
4059 netdev->watchdog_timeo = TX_TIMEOUT_JIFFIES; in lan78xx_probe()
4060 netdev->ethtool_ops = &lan78xx_ethtool_ops; in lan78xx_probe()
4062 dev->delta = 1; in lan78xx_probe()
4063 timer_setup(&dev->stat_monitor, lan78xx_stat_monitor, 0); in lan78xx_probe()
4065 mutex_init(&dev->stats.access_lock); in lan78xx_probe()
4067 if (intf->cur_altsetting->desc.bNumEndpoints < 3) { in lan78xx_probe()
4068 ret = -ENODEV; in lan78xx_probe()
4072 dev->pipe_in = usb_rcvbulkpipe(udev, BULK_IN_PIPE); in lan78xx_probe()
4073 ep_blkin = usb_pipe_endpoint(udev, dev->pipe_in); in lan78xx_probe()
4074 if (!ep_blkin || !usb_endpoint_is_bulk_in(&ep_blkin->desc)) { in lan78xx_probe()
4075 ret = -ENODEV; in lan78xx_probe()
4079 dev->pipe_out = usb_sndbulkpipe(udev, BULK_OUT_PIPE); in lan78xx_probe()
4080 ep_blkout = usb_pipe_endpoint(udev, dev->pipe_out); in lan78xx_probe()
4081 if (!ep_blkout || !usb_endpoint_is_bulk_out(&ep_blkout->desc)) { in lan78xx_probe()
4082 ret = -ENODEV; in lan78xx_probe()
4086 ep_intr = &intf->cur_altsetting->endpoint[2]; in lan78xx_probe()
4087 if (!usb_endpoint_is_int_in(&ep_intr->desc)) { in lan78xx_probe()
4088 ret = -ENODEV; in lan78xx_probe()
4092 dev->pipe_intr = usb_rcvintpipe(dev->udev, in lan78xx_probe()
4093 usb_endpoint_num(&ep_intr->desc)); in lan78xx_probe()
4099 if (netdev->mtu > (dev->hard_mtu - netdev->hard_header_len)) in lan78xx_probe()
4100 netdev->mtu = dev->hard_mtu - netdev->hard_header_len; in lan78xx_probe()
4102 /* MTU range: 68 - 9000 */ in lan78xx_probe()
4103 netdev->max_mtu = MAX_SINGLE_PACKET_SIZE; in lan78xx_probe()
4104 netif_set_gso_max_size(netdev, MAX_SINGLE_PACKET_SIZE - MAX_HEADER); in lan78xx_probe()
4106 period = ep_intr->desc.bInterval; in lan78xx_probe()
4107 maxp = usb_maxpacket(dev->udev, dev->pipe_intr, 0); in lan78xx_probe()
4110 dev->urb_intr = usb_alloc_urb(0, GFP_KERNEL); in lan78xx_probe()
4111 if (!dev->urb_intr) { in lan78xx_probe()
4112 ret = -ENOMEM; in lan78xx_probe()
4116 usb_fill_int_urb(dev->urb_intr, dev->udev, in lan78xx_probe()
4117 dev->pipe_intr, buf, maxp, in lan78xx_probe()
4119 dev->urb_intr->transfer_flags |= URB_FREE_BUFFER; in lan78xx_probe()
4123 dev->maxpacket = usb_maxpacket(dev->udev, dev->pipe_out, 1); in lan78xx_probe()
4125 /* Reject broken descriptors. */ in lan78xx_probe()
4126 if (dev->maxpacket == 0) { in lan78xx_probe()
4127 ret = -ENODEV; in lan78xx_probe()
4131 /* driver requires remote-wakeup capability during autosuspend. */ in lan78xx_probe()
4132 intf->needs_remote_wakeup = 1; in lan78xx_probe()
4146 ret = device_set_wakeup_enable(&udev->dev, true); in lan78xx_probe()
4151 pm_runtime_set_autosuspend_delay(&udev->dev, in lan78xx_probe()
4157 phy_disconnect(netdev->phydev); in lan78xx_probe()
4159 usb_free_urb(dev->urb_intr); in lan78xx_probe()
4466 mutex_lock(&dev->dev_mutex); in lan78xx_suspend()
4468 netif_dbg(dev, ifdown, dev->net, in lan78xx_suspend()
4471 dev_open = test_bit(EVENT_DEV_OPEN, &dev->flags); in lan78xx_suspend()
4474 spin_lock_irq(&dev->txq.lock); in lan78xx_suspend()
4476 if ((skb_queue_len(&dev->txq) || in lan78xx_suspend()
4477 skb_queue_len(&dev->txq_pend)) && in lan78xx_suspend()
4479 spin_unlock_irq(&dev->txq.lock); in lan78xx_suspend()
4480 ret = -EBUSY; in lan78xx_suspend()
4483 set_bit(EVENT_DEV_ASLEEP, &dev->flags); in lan78xx_suspend()
4484 spin_unlock_irq(&dev->txq.lock); in lan78xx_suspend()
4496 /* stop Tx */ in lan78xx_suspend()
4501 /* empty out the Rx and Tx queues */ in lan78xx_suspend()
4502 netif_device_detach(dev->net); in lan78xx_suspend()
4504 usb_kill_urb(dev->urb_intr); in lan78xx_suspend()
4507 netif_device_attach(dev->net); in lan78xx_suspend()
4509 del_timer(&dev->stat_monitor); in lan78xx_suspend()
4518 pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_suspend()
4519 netif_carrier_off(dev->net); in lan78xx_suspend()
4520 ret = lan78xx_set_suspend(dev, pdata->wol); in lan78xx_suspend()
4530 set_bit(EVENT_DEV_ASLEEP, &dev->flags); in lan78xx_suspend()
4565 mutex_unlock(&dev->dev_mutex); in lan78xx_suspend()
4575 while ((urb = usb_get_from_anchor(&dev->deferred))) { in lan78xx_submit_deferred_urbs()
4576 struct sk_buff *skb = urb->context; in lan78xx_submit_deferred_urbs()
4579 if (!netif_device_present(dev->net) || in lan78xx_submit_deferred_urbs()
4580 !netif_carrier_ok(dev->net) || in lan78xx_submit_deferred_urbs()
4590 netif_trans_update(dev->net); in lan78xx_submit_deferred_urbs()
4591 lan78xx_queue_skb(&dev->txq, skb, tx_start); in lan78xx_submit_deferred_urbs()
4596 if (ret == -EPIPE) { in lan78xx_submit_deferred_urbs()
4597 netif_stop_queue(dev->net); in lan78xx_submit_deferred_urbs()
4599 } else if (ret == -ENODEV) { in lan78xx_submit_deferred_urbs()
4600 netif_device_detach(dev->net); in lan78xx_submit_deferred_urbs()
4614 mutex_lock(&dev->dev_mutex); in lan78xx_resume()
4616 netif_dbg(dev, ifup, dev->net, "resuming device"); in lan78xx_resume()
4618 dev_open = test_bit(EVENT_DEV_OPEN, &dev->flags); in lan78xx_resume()
4627 if (dev->urb_intr) { in lan78xx_resume()
4628 int ret = usb_submit_urb(dev->urb_intr, GFP_KERNEL); in lan78xx_resume()
4631 if (ret == -ENODEV) in lan78xx_resume()
4632 netif_device_detach(dev->net); in lan78xx_resume()
4634 netdev_warn(dev->net, "Failed to submit intr URB"); in lan78xx_resume()
4638 spin_lock_irq(&dev->txq.lock); in lan78xx_resume()
4640 if (netif_device_present(dev->net)) { in lan78xx_resume()
4647 clear_bit(EVENT_DEV_ASLEEP, &dev->flags); in lan78xx_resume()
4649 spin_unlock_irq(&dev->txq.lock); in lan78xx_resume()
4652 netif_device_present(dev->net) && in lan78xx_resume()
4653 (skb_queue_len(&dev->txq) < dev->tx_qlen)) in lan78xx_resume()
4654 netif_start_queue(dev->net); in lan78xx_resume()
4660 tasklet_schedule(&dev->bh); in lan78xx_resume()
4662 if (!timer_pending(&dev->stat_monitor)) { in lan78xx_resume()
4663 dev->delta = 1; in lan78xx_resume()
4664 mod_timer(&dev->stat_monitor, in lan78xx_resume()
4669 clear_bit(EVENT_DEV_ASLEEP, &dev->flags); in lan78xx_resume()
4701 mutex_unlock(&dev->dev_mutex); in lan78xx_resume()
4711 netif_dbg(dev, ifup, dev->net, "(reset) resuming device"); in lan78xx_reset_resume()
4717 phy_start(dev->net->phydev); in lan78xx_reset_resume()