Lines Matching +full:eee +full:- +full:broken +full:- +full:100 +full:tx
1 // SPDX-License-Identifier: GPL-2.0+
141 "RX 65 - 127 Byte Frames",
142 "RX 128 - 255 Byte Frames",
143 "RX 256 - 511 Bytes Frames",
144 "RX 512 - 1023 Byte Frames",
145 "RX 1024 - 1518 Byte Frames",
147 "EEE RX LPI Transitions",
148 "EEE RX LPI Time",
149 "TX FCS Errors",
150 "TX Excess Deferral Errors",
151 "TX Carrier Errors",
152 "TX Bad Byte Count",
153 "TX Single Collisions",
154 "TX Multiple Collisions",
155 "TX Excessive Collision",
156 "TX Late Collisions",
157 "TX Unicast Byte Count",
158 "TX Broadcast Byte Count",
159 "TX Multicast Byte Count",
160 "TX Unicast Frames",
161 "TX Broadcast Frames",
162 "TX Multicast Frames",
163 "TX Pause Frames",
164 "TX 64 Byte Frames",
165 "TX 65 - 127 Byte Frames",
166 "TX 128 - 255 Byte Frames",
167 "TX 256 - 511 Bytes Frames",
168 "TX 512 - 1023 Byte Frames",
169 "TX 1024 - 1518 Byte Frames",
170 "TX Greater 1518 Byte Frames",
171 "EEE TX LPI Transitions",
172 "EEE TX LPI Time",
324 struct skb_data { /* skb->cb is one of these */
426 static int msg_level = -1;
436 return -ENOMEM; in lan78xx_read_reg()
438 ret = usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0), in lan78xx_read_reg()
446 netdev_warn(dev->net, in lan78xx_read_reg()
462 return -ENOMEM; in lan78xx_write_reg()
467 ret = usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, 0), in lan78xx_write_reg()
472 netdev_warn(dev->net, in lan78xx_write_reg()
493 return -ENOMEM; in lan78xx_read_stats()
495 ret = usb_control_msg(dev->udev, in lan78xx_read_stats()
496 usb_rcvctrlpipe(dev->udev, 0), in lan78xx_read_stats()
512 netdev_warn(dev->net, in lan78xx_read_stats()
522 if (struct1->member < dev_stats.saved.member) \
529 check_counter_rollover(stats, dev->stats, rx_fcs_errors); in lan78xx_check_stat_rollover()
530 check_counter_rollover(stats, dev->stats, rx_alignment_errors); in lan78xx_check_stat_rollover()
531 check_counter_rollover(stats, dev->stats, rx_fragment_errors); in lan78xx_check_stat_rollover()
532 check_counter_rollover(stats, dev->stats, rx_jabber_errors); in lan78xx_check_stat_rollover()
533 check_counter_rollover(stats, dev->stats, rx_undersize_frame_errors); in lan78xx_check_stat_rollover()
534 check_counter_rollover(stats, dev->stats, rx_oversize_frame_errors); in lan78xx_check_stat_rollover()
535 check_counter_rollover(stats, dev->stats, rx_dropped_frames); in lan78xx_check_stat_rollover()
536 check_counter_rollover(stats, dev->stats, rx_unicast_byte_count); in lan78xx_check_stat_rollover()
537 check_counter_rollover(stats, dev->stats, rx_broadcast_byte_count); in lan78xx_check_stat_rollover()
538 check_counter_rollover(stats, dev->stats, rx_multicast_byte_count); in lan78xx_check_stat_rollover()
539 check_counter_rollover(stats, dev->stats, rx_unicast_frames); in lan78xx_check_stat_rollover()
540 check_counter_rollover(stats, dev->stats, rx_broadcast_frames); in lan78xx_check_stat_rollover()
541 check_counter_rollover(stats, dev->stats, rx_multicast_frames); in lan78xx_check_stat_rollover()
542 check_counter_rollover(stats, dev->stats, rx_pause_frames); in lan78xx_check_stat_rollover()
543 check_counter_rollover(stats, dev->stats, rx_64_byte_frames); in lan78xx_check_stat_rollover()
544 check_counter_rollover(stats, dev->stats, rx_65_127_byte_frames); in lan78xx_check_stat_rollover()
545 check_counter_rollover(stats, dev->stats, rx_128_255_byte_frames); in lan78xx_check_stat_rollover()
546 check_counter_rollover(stats, dev->stats, rx_256_511_bytes_frames); in lan78xx_check_stat_rollover()
547 check_counter_rollover(stats, dev->stats, rx_512_1023_byte_frames); in lan78xx_check_stat_rollover()
548 check_counter_rollover(stats, dev->stats, rx_1024_1518_byte_frames); in lan78xx_check_stat_rollover()
549 check_counter_rollover(stats, dev->stats, rx_greater_1518_byte_frames); in lan78xx_check_stat_rollover()
550 check_counter_rollover(stats, dev->stats, eee_rx_lpi_transitions); in lan78xx_check_stat_rollover()
551 check_counter_rollover(stats, dev->stats, eee_rx_lpi_time); in lan78xx_check_stat_rollover()
552 check_counter_rollover(stats, dev->stats, tx_fcs_errors); in lan78xx_check_stat_rollover()
553 check_counter_rollover(stats, dev->stats, tx_excess_deferral_errors); in lan78xx_check_stat_rollover()
554 check_counter_rollover(stats, dev->stats, tx_carrier_errors); in lan78xx_check_stat_rollover()
555 check_counter_rollover(stats, dev->stats, tx_bad_byte_count); in lan78xx_check_stat_rollover()
556 check_counter_rollover(stats, dev->stats, tx_single_collisions); in lan78xx_check_stat_rollover()
557 check_counter_rollover(stats, dev->stats, tx_multiple_collisions); in lan78xx_check_stat_rollover()
558 check_counter_rollover(stats, dev->stats, tx_excessive_collision); in lan78xx_check_stat_rollover()
559 check_counter_rollover(stats, dev->stats, tx_late_collisions); in lan78xx_check_stat_rollover()
560 check_counter_rollover(stats, dev->stats, tx_unicast_byte_count); in lan78xx_check_stat_rollover()
561 check_counter_rollover(stats, dev->stats, tx_broadcast_byte_count); in lan78xx_check_stat_rollover()
562 check_counter_rollover(stats, dev->stats, tx_multicast_byte_count); in lan78xx_check_stat_rollover()
563 check_counter_rollover(stats, dev->stats, tx_unicast_frames); in lan78xx_check_stat_rollover()
564 check_counter_rollover(stats, dev->stats, tx_broadcast_frames); in lan78xx_check_stat_rollover()
565 check_counter_rollover(stats, dev->stats, tx_multicast_frames); in lan78xx_check_stat_rollover()
566 check_counter_rollover(stats, dev->stats, tx_pause_frames); in lan78xx_check_stat_rollover()
567 check_counter_rollover(stats, dev->stats, tx_64_byte_frames); in lan78xx_check_stat_rollover()
568 check_counter_rollover(stats, dev->stats, tx_65_127_byte_frames); in lan78xx_check_stat_rollover()
569 check_counter_rollover(stats, dev->stats, tx_128_255_byte_frames); in lan78xx_check_stat_rollover()
570 check_counter_rollover(stats, dev->stats, tx_256_511_bytes_frames); in lan78xx_check_stat_rollover()
571 check_counter_rollover(stats, dev->stats, tx_512_1023_byte_frames); in lan78xx_check_stat_rollover()
572 check_counter_rollover(stats, dev->stats, tx_1024_1518_byte_frames); in lan78xx_check_stat_rollover()
573 check_counter_rollover(stats, dev->stats, tx_greater_1518_byte_frames); in lan78xx_check_stat_rollover()
574 check_counter_rollover(stats, dev->stats, eee_tx_lpi_transitions); in lan78xx_check_stat_rollover()
575 check_counter_rollover(stats, dev->stats, eee_tx_lpi_time); in lan78xx_check_stat_rollover()
577 memcpy(&dev->stats.saved, stats, sizeof(struct lan78xx_statstage)); in lan78xx_check_stat_rollover()
587 if (usb_autopm_get_interface(dev->intf) < 0) in lan78xx_update_stats()
591 count = (u32 *)&dev->stats.rollover_count; in lan78xx_update_stats()
592 max = (u32 *)&dev->stats.rollover_max; in lan78xx_update_stats()
593 data = (u64 *)&dev->stats.curr_stat; in lan78xx_update_stats()
595 mutex_lock(&dev->stats.access_lock); in lan78xx_update_stats()
603 mutex_unlock(&dev->stats.access_lock); in lan78xx_update_stats()
605 usb_autopm_put_interface(dev->intf); in lan78xx_update_stats()
618 return -EIO; in lan78xx_phy_wait_not_busy()
624 return -EIO; in lan78xx_phy_wait_not_busy()
651 return -EIO; in lan78xx_wait_eeprom()
656 usleep_range(40, 100); in lan78xx_wait_eeprom()
660 netdev_warn(dev->net, "EEPROM read operation timeout"); in lan78xx_wait_eeprom()
661 return -EIO; in lan78xx_wait_eeprom()
676 return -EIO; in lan78xx_eeprom_confirm_not_busy()
681 usleep_range(40, 100); in lan78xx_eeprom_confirm_not_busy()
684 netdev_warn(dev->net, "EEPROM is busy"); in lan78xx_eeprom_confirm_not_busy()
685 return -EIO; in lan78xx_eeprom_confirm_not_busy()
701 if (dev->chipid == ID_REV_CHIP_ID_7800_) { in lan78xx_read_raw_eeprom()
715 retval = -EIO; in lan78xx_read_raw_eeprom()
725 retval = -EIO; in lan78xx_read_raw_eeprom()
735 if (dev->chipid == ID_REV_CHIP_ID_7800_) in lan78xx_read_raw_eeprom()
751 ret = -EINVAL; in lan78xx_read_eeprom()
769 if (dev->chipid == ID_REV_CHIP_ID_7800_) { in lan78xx_write_raw_eeprom()
782 retval = -EIO; in lan78xx_write_raw_eeprom()
795 retval = -EIO; in lan78xx_write_raw_eeprom()
804 retval = -EIO; in lan78xx_write_raw_eeprom()
817 if (dev->chipid == ID_REV_CHIP_ID_7800_) in lan78xx_write_raw_eeprom()
842 netdev_warn(dev->net, in lan78xx_read_raw_otp()
844 return -EIO; in lan78xx_read_raw_otp()
863 netdev_warn(dev->net, in lan78xx_read_raw_otp()
865 return -EIO; in lan78xx_read_raw_otp()
896 netdev_warn(dev->net, in lan78xx_write_raw_otp()
898 return -EIO; in lan78xx_write_raw_otp()
920 netdev_warn(dev->net, in lan78xx_write_raw_otp()
922 return -EIO; in lan78xx_write_raw_otp()
942 ret = -EINVAL; in lan78xx_read_otp()
954 for (i = 0; i < 100; i++) { in lan78xx_dataport_wait_not_busy()
959 return -EIO; in lan78xx_dataport_wait_not_busy()
964 usleep_range(40, 100); in lan78xx_dataport_wait_not_busy()
967 netdev_warn(dev->net, "lan78xx_dataport_wait_not_busy timed out"); in lan78xx_dataport_wait_not_busy()
969 return -EIO; in lan78xx_dataport_wait_not_busy()
975 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_dataport_write()
979 if (usb_autopm_get_interface(dev->intf) < 0) in lan78xx_dataport_write()
982 mutex_lock(&pdata->dataport_mutex); in lan78xx_dataport_write()
1007 mutex_unlock(&pdata->dataport_mutex); in lan78xx_dataport_write()
1008 usb_autopm_put_interface(dev->intf); in lan78xx_dataport_write()
1023 pdata->pfilter_table[index][1] = temp; in lan78xx_set_addr_filter()
1027 pdata->pfilter_table[index][0] = temp; in lan78xx_set_addr_filter()
1041 struct lan78xx_net *dev = pdata->dev; in lan78xx_deferred_multicast_write()
1045 netif_dbg(dev, drv, dev->net, "deferred multicast write 0x%08x\n", in lan78xx_deferred_multicast_write()
1046 pdata->rfe_ctl); in lan78xx_deferred_multicast_write()
1049 DP_SEL_VHF_HASH_LEN, pdata->mchash_table); in lan78xx_deferred_multicast_write()
1054 pdata->pfilter_table[i][1]); in lan78xx_deferred_multicast_write()
1056 pdata->pfilter_table[i][0]); in lan78xx_deferred_multicast_write()
1059 ret = lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); in lan78xx_deferred_multicast_write()
1065 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_set_multicast()
1069 spin_lock_irqsave(&pdata->rfe_ctl_lock, flags); in lan78xx_set_multicast()
1071 pdata->rfe_ctl &= ~(RFE_CTL_UCAST_EN_ | RFE_CTL_MCAST_EN_ | in lan78xx_set_multicast()
1075 pdata->mchash_table[i] = 0; in lan78xx_set_multicast()
1078 pdata->pfilter_table[i][0] = in lan78xx_set_multicast()
1079 pdata->pfilter_table[i][1] = 0; in lan78xx_set_multicast()
1082 pdata->rfe_ctl |= RFE_CTL_BCAST_EN_; in lan78xx_set_multicast()
1084 if (dev->net->flags & IFF_PROMISC) { in lan78xx_set_multicast()
1085 netif_dbg(dev, drv, dev->net, "promiscuous mode enabled"); in lan78xx_set_multicast()
1086 pdata->rfe_ctl |= RFE_CTL_MCAST_EN_ | RFE_CTL_UCAST_EN_; in lan78xx_set_multicast()
1088 if (dev->net->flags & IFF_ALLMULTI) { in lan78xx_set_multicast()
1089 netif_dbg(dev, drv, dev->net, in lan78xx_set_multicast()
1091 pdata->rfe_ctl |= RFE_CTL_MCAST_EN_; in lan78xx_set_multicast()
1095 if (netdev_mc_count(dev->net)) { in lan78xx_set_multicast()
1099 netif_dbg(dev, drv, dev->net, "receive multicast hash filter"); in lan78xx_set_multicast()
1101 pdata->rfe_ctl |= RFE_CTL_DA_PERFECT_; in lan78xx_set_multicast()
1107 lan78xx_set_addr_filter(pdata, i, ha->addr); in lan78xx_set_multicast()
1109 u32 bitnum = lan78xx_hash(ha->addr); in lan78xx_set_multicast()
1111 pdata->mchash_table[bitnum / 32] |= in lan78xx_set_multicast()
1113 pdata->rfe_ctl |= RFE_CTL_MCAST_HASH_; in lan78xx_set_multicast()
1119 spin_unlock_irqrestore(&pdata->rfe_ctl_lock, flags); in lan78xx_set_multicast()
1122 schedule_work(&pdata->set_multicast); in lan78xx_set_multicast()
1132 if (dev->fc_autoneg) in lan78xx_update_flowcontrol()
1135 cap = dev->fc_request_control; in lan78xx_update_flowcontrol()
1143 if (dev->udev->speed == USB_SPEED_SUPER) in lan78xx_update_flowcontrol()
1145 else if (dev->udev->speed == USB_SPEED_HIGH) in lan78xx_update_flowcontrol()
1148 netif_dbg(dev, link, dev->net, "rx pause %s, tx pause %s", in lan78xx_update_flowcontrol()
1162 struct phy_device *phydev = dev->net->phydev; in lan78xx_link_reset()
1170 return -EIO; in lan78xx_link_reset()
1172 mutex_lock(&phydev->lock); in lan78xx_link_reset()
1174 link = phydev->link; in lan78xx_link_reset()
1175 mutex_unlock(&phydev->lock); in lan78xx_link_reset()
1177 if (!link && dev->link_on) { in lan78xx_link_reset()
1178 dev->link_on = false; in lan78xx_link_reset()
1183 return -EIO; in lan78xx_link_reset()
1187 return -EIO; in lan78xx_link_reset()
1189 del_timer(&dev->stat_monitor); in lan78xx_link_reset()
1190 } else if (link && !dev->link_on) { in lan78xx_link_reset()
1191 dev->link_on = true; in lan78xx_link_reset()
1195 if (dev->udev->speed == USB_SPEED_SUPER) { in lan78xx_link_reset()
1222 netif_dbg(dev, link, dev->net, in lan78xx_link_reset()
1229 if (!timer_pending(&dev->stat_monitor)) { in lan78xx_link_reset()
1230 dev->delta = 1; in lan78xx_link_reset()
1231 mod_timer(&dev->stat_monitor, in lan78xx_link_reset()
1235 tasklet_schedule(&dev->bh); in lan78xx_link_reset()
1248 set_bit(work, &dev->flags); in lan78xx_defer_kevent()
1249 if (!schedule_delayed_work(&dev->wq, 0)) in lan78xx_defer_kevent()
1250 netdev_err(dev->net, "kevent %d may have been dropped\n", work); in lan78xx_defer_kevent()
1257 if (urb->actual_length != 4) { in lan78xx_status()
1258 netdev_warn(dev->net, in lan78xx_status()
1259 "unexpected urb length %d", urb->actual_length); in lan78xx_status()
1263 intdata = get_unaligned_le32(urb->transfer_buffer); in lan78xx_status()
1266 netif_dbg(dev, link, dev->net, "PHY INTR: 0x%08x\n", intdata); in lan78xx_status()
1269 if (dev->domain_data.phyirq > 0) { in lan78xx_status()
1271 generic_handle_irq(dev->domain_data.phyirq); in lan78xx_status()
1275 netdev_warn(dev->net, in lan78xx_status()
1290 ret = usb_autopm_get_interface(dev->intf); in lan78xx_ethtool_get_eeprom()
1294 ee->magic = LAN78XX_EEPROM_MAGIC; in lan78xx_ethtool_get_eeprom()
1296 ret = lan78xx_read_raw_eeprom(dev, ee->offset, ee->len, data); in lan78xx_ethtool_get_eeprom()
1298 usb_autopm_put_interface(dev->intf); in lan78xx_ethtool_get_eeprom()
1309 ret = usb_autopm_get_interface(dev->intf); in lan78xx_ethtool_set_eeprom()
1316 if (ee->magic == LAN78XX_EEPROM_MAGIC) in lan78xx_ethtool_set_eeprom()
1317 ret = lan78xx_write_raw_eeprom(dev, ee->offset, ee->len, data); in lan78xx_ethtool_set_eeprom()
1318 else if ((ee->magic == LAN78XX_OTP_MAGIC) && in lan78xx_ethtool_set_eeprom()
1319 (ee->offset == 0) && in lan78xx_ethtool_set_eeprom()
1320 (ee->len == 512) && in lan78xx_ethtool_set_eeprom()
1322 ret = lan78xx_write_raw_otp(dev, ee->offset, ee->len, data); in lan78xx_ethtool_set_eeprom()
1324 usb_autopm_put_interface(dev->intf); in lan78xx_ethtool_set_eeprom()
1341 return -EOPNOTSUPP; in lan78xx_get_sset_count()
1351 mutex_lock(&dev->stats.access_lock); in lan78xx_get_stats()
1352 memcpy(data, &dev->stats.curr_stat, sizeof(dev->stats.curr_stat)); in lan78xx_get_stats()
1353 mutex_unlock(&dev->stats.access_lock); in lan78xx_get_stats()
1362 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_get_wol()
1364 if (usb_autopm_get_interface(dev->intf) < 0) in lan78xx_get_wol()
1369 wol->supported = 0; in lan78xx_get_wol()
1370 wol->wolopts = 0; in lan78xx_get_wol()
1373 wol->supported = WAKE_ALL; in lan78xx_get_wol()
1374 wol->wolopts = pdata->wol; in lan78xx_get_wol()
1376 wol->supported = 0; in lan78xx_get_wol()
1377 wol->wolopts = 0; in lan78xx_get_wol()
1381 usb_autopm_put_interface(dev->intf); in lan78xx_get_wol()
1388 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_set_wol()
1391 ret = usb_autopm_get_interface(dev->intf); in lan78xx_set_wol()
1395 if (wol->wolopts & ~WAKE_ALL) in lan78xx_set_wol()
1396 return -EINVAL; in lan78xx_set_wol()
1398 pdata->wol = wol->wolopts; in lan78xx_set_wol()
1400 device_set_wakeup_enable(&dev->udev->dev, (bool)wol->wolopts); in lan78xx_set_wol()
1402 phy_ethtool_set_wol(netdev->phydev, wol); in lan78xx_set_wol()
1404 usb_autopm_put_interface(dev->intf); in lan78xx_set_wol()
1412 struct phy_device *phydev = net->phydev; in lan78xx_get_eee()
1416 ret = usb_autopm_get_interface(dev->intf); in lan78xx_get_eee()
1426 edata->eee_enabled = true; in lan78xx_get_eee()
1427 edata->eee_active = !!(edata->advertised & in lan78xx_get_eee()
1428 edata->lp_advertised); in lan78xx_get_eee()
1429 edata->tx_lpi_enabled = true; in lan78xx_get_eee()
1432 edata->tx_lpi_timer = buf; in lan78xx_get_eee()
1434 edata->eee_enabled = false; in lan78xx_get_eee()
1435 edata->eee_active = false; in lan78xx_get_eee()
1436 edata->tx_lpi_enabled = false; in lan78xx_get_eee()
1437 edata->tx_lpi_timer = 0; in lan78xx_get_eee()
1442 usb_autopm_put_interface(dev->intf); in lan78xx_get_eee()
1453 ret = usb_autopm_get_interface(dev->intf); in lan78xx_set_eee()
1457 if (edata->eee_enabled) { in lan78xx_set_eee()
1462 phy_ethtool_set_eee(net->phydev, edata); in lan78xx_set_eee()
1464 buf = (u32)edata->tx_lpi_timer; in lan78xx_set_eee()
1472 usb_autopm_put_interface(dev->intf); in lan78xx_set_eee()
1481 mutex_lock(&net->phydev->lock); in lan78xx_get_link()
1482 phy_read_status(net->phydev); in lan78xx_get_link()
1483 link = net->phydev->link; in lan78xx_get_link()
1484 mutex_unlock(&net->phydev->lock); in lan78xx_get_link()
1494 strncpy(info->driver, DRIVER_NAME, sizeof(info->driver)); in lan78xx_get_drvinfo()
1495 usb_make_path(dev->udev, info->bus_info, sizeof(info->bus_info)); in lan78xx_get_drvinfo()
1502 return dev->msg_enable; in lan78xx_get_msglevel()
1509 dev->msg_enable = level; in lan78xx_set_msglevel()
1516 struct phy_device *phydev = net->phydev; in lan78xx_get_link_ksettings()
1519 ret = usb_autopm_get_interface(dev->intf); in lan78xx_get_link_ksettings()
1525 usb_autopm_put_interface(dev->intf); in lan78xx_get_link_ksettings()
1534 struct phy_device *phydev = net->phydev; in lan78xx_set_link_ksettings()
1538 ret = usb_autopm_get_interface(dev->intf); in lan78xx_set_link_ksettings()
1545 if (!cmd->base.autoneg) { in lan78xx_set_link_ksettings()
1553 usb_autopm_put_interface(dev->intf); in lan78xx_set_link_ksettings()
1562 struct phy_device *phydev = net->phydev; in lan78xx_get_pause()
1567 pause->autoneg = dev->fc_autoneg; in lan78xx_get_pause()
1569 if (dev->fc_request_control & FLOW_CTRL_TX) in lan78xx_get_pause()
1570 pause->tx_pause = 1; in lan78xx_get_pause()
1572 if (dev->fc_request_control & FLOW_CTRL_RX) in lan78xx_get_pause()
1573 pause->rx_pause = 1; in lan78xx_get_pause()
1580 struct phy_device *phydev = net->phydev; in lan78xx_set_pause()
1586 if (pause->autoneg && !ecmd.base.autoneg) { in lan78xx_set_pause()
1587 ret = -EINVAL; in lan78xx_set_pause()
1591 dev->fc_request_control = 0; in lan78xx_set_pause()
1592 if (pause->rx_pause) in lan78xx_set_pause()
1593 dev->fc_request_control |= FLOW_CTRL_RX; in lan78xx_set_pause()
1595 if (pause->tx_pause) in lan78xx_set_pause()
1596 dev->fc_request_control |= FLOW_CTRL_TX; in lan78xx_set_pause()
1606 mii_adv = (u32)mii_advertise_flowctrl(dev->fc_request_control); in lan78xx_set_pause()
1614 dev->fc_autoneg = pause->autoneg; in lan78xx_set_pause()
1623 if (!netdev->phydev) in lan78xx_get_regs_len()
1641 if (!netdev->phydev) in lan78xx_get_regs()
1646 data[i] = phy_read(netdev->phydev, j); in lan78xx_get_regs()
1690 if (!eth_platform_get_mac_address(&dev->udev->dev, addr)) { in lan78xx_init_mac_address()
1692 netif_dbg(dev, ifup, dev->net, in lan78xx_init_mac_address()
1700 netif_dbg(dev, ifup, dev->net, in lan78xx_init_mac_address()
1705 netif_dbg(dev, ifup, dev->net, in lan78xx_init_mac_address()
1720 ether_addr_copy(dev->net->dev_addr, addr); in lan78xx_init_mac_address()
1726 struct lan78xx_net *dev = bus->priv; in lan78xx_mdiobus_read()
1730 ret = usb_autopm_get_interface(dev->intf); in lan78xx_mdiobus_read()
1734 mutex_lock(&dev->phy_mutex); in lan78xx_mdiobus_read()
1754 mutex_unlock(&dev->phy_mutex); in lan78xx_mdiobus_read()
1755 usb_autopm_put_interface(dev->intf); in lan78xx_mdiobus_read()
1763 struct lan78xx_net *dev = bus->priv; in lan78xx_mdiobus_write()
1767 ret = usb_autopm_get_interface(dev->intf); in lan78xx_mdiobus_write()
1771 mutex_lock(&dev->phy_mutex); in lan78xx_mdiobus_write()
1790 mutex_unlock(&dev->phy_mutex); in lan78xx_mdiobus_write()
1791 usb_autopm_put_interface(dev->intf); in lan78xx_mdiobus_write()
1800 dev->mdiobus = mdiobus_alloc(); in lan78xx_mdio_init()
1801 if (!dev->mdiobus) { in lan78xx_mdio_init()
1802 netdev_err(dev->net, "can't allocate MDIO bus\n"); in lan78xx_mdio_init()
1803 return -ENOMEM; in lan78xx_mdio_init()
1806 dev->mdiobus->priv = (void *)dev; in lan78xx_mdio_init()
1807 dev->mdiobus->read = lan78xx_mdiobus_read; in lan78xx_mdio_init()
1808 dev->mdiobus->write = lan78xx_mdiobus_write; in lan78xx_mdio_init()
1809 dev->mdiobus->name = "lan78xx-mdiobus"; in lan78xx_mdio_init()
1810 dev->mdiobus->parent = &dev->udev->dev; in lan78xx_mdio_init()
1812 snprintf(dev->mdiobus->id, MII_BUS_ID_SIZE, "usb-%03d:%03d", in lan78xx_mdio_init()
1813 dev->udev->bus->busnum, dev->udev->devnum); in lan78xx_mdio_init()
1815 switch (dev->chipid) { in lan78xx_mdio_init()
1819 dev->mdiobus->phy_mask = ~(1 << 1); in lan78xx_mdio_init()
1823 dev->mdiobus->phy_mask = ~(0xFF); in lan78xx_mdio_init()
1827 node = of_get_child_by_name(dev->udev->dev.of_node, "mdio"); in lan78xx_mdio_init()
1828 ret = of_mdiobus_register(dev->mdiobus, node); in lan78xx_mdio_init()
1831 netdev_err(dev->net, "can't register MDIO bus\n"); in lan78xx_mdio_init()
1835 netdev_dbg(dev->net, "registered mdiobus bus %s\n", dev->mdiobus->id); in lan78xx_mdio_init()
1838 mdiobus_free(dev->mdiobus); in lan78xx_mdio_init()
1844 mdiobus_unregister(dev->mdiobus); in lan78xx_remove_mdio()
1845 mdiobus_free(dev->mdiobus); in lan78xx_remove_mdio()
1850 struct phy_device *phydev = net->phydev; in lan78xx_link_status_change()
1853 /* At forced 100 F/H mode, chip may fail to set mode correctly in lan78xx_link_status_change()
1855 * As workaround, set to 10 before setting to 100 in lan78xx_link_status_change()
1856 * at forced 100 F/H mode. in lan78xx_link_status_change()
1858 if (!phydev->autoneg && (phydev->speed == 100)) { in lan78xx_link_status_change()
1868 phy_write(phydev, MII_BMCR, temp); /* set to 100 later */ in lan78xx_link_status_change()
1883 struct irq_domain_data *data = d->host_data; in irq_map()
1886 irq_set_chip_and_handler(irq, data->irqchip, data->irq_handler); in irq_map()
1907 data->irqenable &= ~BIT(irqd_to_hwirq(irqd)); in lan78xx_irq_mask()
1914 data->irqenable |= BIT(irqd_to_hwirq(irqd)); in lan78xx_irq_unmask()
1921 mutex_lock(&data->irq_lock); in lan78xx_irq_bus_lock()
1933 * are only two callbacks executed in non-atomic contex. in lan78xx_irq_bus_sync_unlock()
1936 if (buf != data->irqenable) in lan78xx_irq_bus_sync_unlock()
1937 ret = lan78xx_write_reg(dev, INT_EP_CTL, data->irqenable); in lan78xx_irq_bus_sync_unlock()
1939 mutex_unlock(&data->irq_lock); in lan78xx_irq_bus_sync_unlock()
1943 .name = "lan78xx-irqs",
1958 of_node = dev->udev->dev.parent->of_node; in lan78xx_setup_irq_domain()
1960 mutex_init(&dev->domain_data.irq_lock); in lan78xx_setup_irq_domain()
1963 dev->domain_data.irqenable = buf; in lan78xx_setup_irq_domain()
1965 dev->domain_data.irqchip = &lan78xx_irqchip; in lan78xx_setup_irq_domain()
1966 dev->domain_data.irq_handler = handle_simple_irq; in lan78xx_setup_irq_domain()
1969 &chip_domain_ops, &dev->domain_data); in lan78xx_setup_irq_domain()
1977 ret = -EINVAL; in lan78xx_setup_irq_domain()
1980 ret = -EINVAL; in lan78xx_setup_irq_domain()
1983 dev->domain_data.irqdomain = irqdomain; in lan78xx_setup_irq_domain()
1984 dev->domain_data.phyirq = irqmap; in lan78xx_setup_irq_domain()
1991 if (dev->domain_data.phyirq > 0) { in lan78xx_remove_irq_domain()
1992 irq_dispose_mapping(dev->domain_data.phyirq); in lan78xx_remove_irq_domain()
1994 if (dev->domain_data.irqdomain) in lan78xx_remove_irq_domain()
1995 irq_domain_remove(dev->domain_data.irqdomain); in lan78xx_remove_irq_domain()
1997 dev->domain_data.phyirq = 0; in lan78xx_remove_irq_domain()
1998 dev->domain_data.irqdomain = NULL; in lan78xx_remove_irq_domain()
2005 struct lan78xx_net *dev = netdev_priv(phydev->attached_dev); in lan8835_fixup()
2017 /* RGMII TX DLL Tune Adjust */ in lan8835_fixup()
2020 dev->interface = PHY_INTERFACE_MODE_RGMII_TXID; in lan8835_fixup()
2027 struct lan78xx_net *dev = netdev_priv(phydev->attached_dev); in ksz9031rnx_fixup()
2037 dev->interface = PHY_INTERFACE_MODE_RGMII_RXID; in ksz9031rnx_fixup()
2053 phydev = phy_find_first(dev->mdiobus); in lan7801_phy_init()
2055 netdev_dbg(dev->net, "PHY Not Found!! Registering Fixed PHY\n"); in lan7801_phy_init()
2058 netdev_err(dev->net, "No PHY/fixed_PHY found\n"); in lan7801_phy_init()
2061 netdev_dbg(dev->net, "Registered FIXED PHY\n"); in lan7801_phy_init()
2062 dev->interface = PHY_INTERFACE_MODE_RGMII; in lan7801_phy_init()
2071 if (!phydev->drv) { in lan7801_phy_init()
2072 netdev_err(dev->net, "no PHY driver found\n"); in lan7801_phy_init()
2075 dev->interface = PHY_INTERFACE_MODE_RGMII; in lan7801_phy_init()
2080 netdev_err(dev->net, "Failed to register fixup for PHY_KSZ9031RNX\n"); in lan7801_phy_init()
2087 netdev_err(dev->net, "Failed to register fixup for PHY_LAN8835\n"); in lan7801_phy_init()
2092 phydev->is_internal = false; in lan7801_phy_init()
2104 switch (dev->chipid) { in lan78xx_phy_init()
2108 netdev_err(dev->net, "lan7801: PHY Init Failed"); in lan78xx_phy_init()
2109 return -EIO; in lan78xx_phy_init()
2115 phydev = phy_find_first(dev->mdiobus); in lan78xx_phy_init()
2117 netdev_err(dev->net, "no PHY found\n"); in lan78xx_phy_init()
2118 return -EIO; in lan78xx_phy_init()
2120 phydev->is_internal = true; in lan78xx_phy_init()
2121 dev->interface = PHY_INTERFACE_MODE_GMII; in lan78xx_phy_init()
2125 netdev_err(dev->net, "Unknown CHIP ID found\n"); in lan78xx_phy_init()
2126 return -EIO; in lan78xx_phy_init()
2130 if (dev->domain_data.phyirq > 0) in lan78xx_phy_init()
2131 phydev->irq = dev->domain_data.phyirq; in lan78xx_phy_init()
2133 phydev->irq = PHY_POLL; in lan78xx_phy_init()
2134 netdev_dbg(dev->net, "phydev->irq = %d\n", phydev->irq); in lan78xx_phy_init()
2137 phydev->mdix = ETH_TP_MDI_AUTO; in lan78xx_phy_init()
2139 ret = phy_connect_direct(dev->net, phydev, in lan78xx_phy_init()
2141 dev->interface); in lan78xx_phy_init()
2143 netdev_err(dev->net, "can't attach PHY to %s\n", in lan78xx_phy_init()
2144 dev->mdiobus->id); in lan78xx_phy_init()
2145 if (dev->chipid == ID_REV_CHIP_ID_7801_) { in lan78xx_phy_init()
2155 return -EIO; in lan78xx_phy_init()
2162 dev->fc_request_control = (FLOW_CTRL_RX | FLOW_CTRL_TX); in lan78xx_phy_init()
2164 phydev->advertising); in lan78xx_phy_init()
2166 phydev->advertising); in lan78xx_phy_init()
2167 mii_adv = (u32)mii_advertise_flowctrl(dev->fc_request_control); in lan78xx_phy_init()
2169 linkmode_or(phydev->advertising, fc, phydev->advertising); in lan78xx_phy_init()
2171 if (phydev->mdio.dev.of_node) { in lan78xx_phy_init()
2175 len = of_property_count_elems_of_size(phydev->mdio.dev.of_node, in lan78xx_phy_init()
2176 "microchip,led-modes", in lan78xx_phy_init()
2195 dev->fc_autoneg = phydev->autoneg; in lan78xx_phy_init()
2235 spin_lock_irqsave(&q->lock, flags); in unlink_urbs()
2242 entry = (struct skb_data *)skb->cb; in unlink_urbs()
2243 if (entry->state != unlink_start) in unlink_urbs()
2248 entry->state = unlink_start; in unlink_urbs()
2249 urb = entry->urb; in unlink_urbs()
2253 * use-after-free problem inside usb_unlink_urb since in unlink_urbs()
2258 spin_unlock_irqrestore(&q->lock, flags); in unlink_urbs()
2259 /* during some PM-driven resume scenarios, in unlink_urbs()
2263 if (ret != -EINPROGRESS && ret != 0) in unlink_urbs()
2264 netdev_dbg(dev->net, "unlink urb err, %d\n", ret); in unlink_urbs()
2268 spin_lock_irqsave(&q->lock, flags); in unlink_urbs()
2270 spin_unlock_irqrestore(&q->lock, flags); in unlink_urbs()
2277 int ll_mtu = new_mtu + netdev->hard_header_len; in lan78xx_change_mtu()
2278 int old_hard_mtu = dev->hard_mtu; in lan78xx_change_mtu()
2279 int old_rx_urb_size = dev->rx_urb_size; in lan78xx_change_mtu()
2282 /* no second zero-length packet read wanted after mtu-sized packets */ in lan78xx_change_mtu()
2283 if ((ll_mtu % dev->maxpacket) == 0) in lan78xx_change_mtu()
2284 return -EDOM; in lan78xx_change_mtu()
2288 netdev->mtu = new_mtu; in lan78xx_change_mtu()
2290 dev->hard_mtu = netdev->mtu + netdev->hard_header_len; in lan78xx_change_mtu()
2291 if (dev->rx_urb_size == old_hard_mtu) { in lan78xx_change_mtu()
2292 dev->rx_urb_size = dev->hard_mtu; in lan78xx_change_mtu()
2293 if (dev->rx_urb_size > old_rx_urb_size) { in lan78xx_change_mtu()
2294 if (netif_running(dev->net)) { in lan78xx_change_mtu()
2295 unlink_urbs(dev, &dev->rxq); in lan78xx_change_mtu()
2296 tasklet_schedule(&dev->bh); in lan78xx_change_mtu()
2312 return -EBUSY; in lan78xx_set_mac_addr()
2314 if (!is_valid_ether_addr(addr->sa_data)) in lan78xx_set_mac_addr()
2315 return -EADDRNOTAVAIL; in lan78xx_set_mac_addr()
2317 ether_addr_copy(netdev->dev_addr, addr->sa_data); in lan78xx_set_mac_addr()
2319 addr_lo = netdev->dev_addr[0] | in lan78xx_set_mac_addr()
2320 netdev->dev_addr[1] << 8 | in lan78xx_set_mac_addr()
2321 netdev->dev_addr[2] << 16 | in lan78xx_set_mac_addr()
2322 netdev->dev_addr[3] << 24; in lan78xx_set_mac_addr()
2323 addr_hi = netdev->dev_addr[4] | in lan78xx_set_mac_addr()
2324 netdev->dev_addr[5] << 8; in lan78xx_set_mac_addr()
2341 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_set_features()
2345 spin_lock_irqsave(&pdata->rfe_ctl_lock, flags); in lan78xx_set_features()
2348 pdata->rfe_ctl |= RFE_CTL_TCPUDP_COE_ | RFE_CTL_IP_COE_; in lan78xx_set_features()
2349 pdata->rfe_ctl |= RFE_CTL_ICMP_COE_ | RFE_CTL_IGMP_COE_; in lan78xx_set_features()
2351 pdata->rfe_ctl &= ~(RFE_CTL_TCPUDP_COE_ | RFE_CTL_IP_COE_); in lan78xx_set_features()
2352 pdata->rfe_ctl &= ~(RFE_CTL_ICMP_COE_ | RFE_CTL_IGMP_COE_); in lan78xx_set_features()
2356 pdata->rfe_ctl |= RFE_CTL_VLAN_STRIP_; in lan78xx_set_features()
2358 pdata->rfe_ctl &= ~RFE_CTL_VLAN_STRIP_; in lan78xx_set_features()
2361 pdata->rfe_ctl |= RFE_CTL_VLAN_FILTER_; in lan78xx_set_features()
2363 pdata->rfe_ctl &= ~RFE_CTL_VLAN_FILTER_; in lan78xx_set_features()
2365 spin_unlock_irqrestore(&pdata->rfe_ctl_lock, flags); in lan78xx_set_features()
2367 ret = lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); in lan78xx_set_features()
2376 struct lan78xx_net *dev = pdata->dev; in lan78xx_deferred_vlan_write()
2379 DP_SEL_VHF_VLAN_LEN, pdata->vlan_table); in lan78xx_deferred_vlan_write()
2386 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_vlan_rx_add_vid()
2393 pdata->vlan_table[vid_dword_index] |= (1 << vid_bit_index); in lan78xx_vlan_rx_add_vid()
2396 schedule_work(&pdata->set_vlan); in lan78xx_vlan_rx_add_vid()
2405 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_vlan_rx_kill_vid()
2412 pdata->vlan_table[vid_dword_index] &= ~(1 << vid_bit_index); in lan78xx_vlan_rx_kill_vid()
2415 schedule_work(&pdata->set_vlan); in lan78xx_vlan_rx_kill_vid()
2461 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_reset()
2476 netdev_warn(dev->net, in lan78xx_reset()
2478 return -EIO; in lan78xx_reset()
2486 dev->chipid = (buf & ID_REV_CHIP_ID_MASK_) >> 16; in lan78xx_reset()
2487 dev->chiprev = buf & ID_REV_CHIP_REV_MASK_; in lan78xx_reset()
2497 if (dev->udev->speed == USB_SPEED_SUPER) { in lan78xx_reset()
2499 dev->rx_urb_size = DEFAULT_BURST_CAP_SIZE; in lan78xx_reset()
2500 dev->rx_qlen = 4; in lan78xx_reset()
2501 dev->tx_qlen = 4; in lan78xx_reset()
2502 } else if (dev->udev->speed == USB_SPEED_HIGH) { in lan78xx_reset()
2504 dev->rx_urb_size = DEFAULT_BURST_CAP_SIZE; in lan78xx_reset()
2505 dev->rx_qlen = RX_MAX_QUEUE_MEMORY / dev->rx_urb_size; in lan78xx_reset()
2506 dev->tx_qlen = RX_MAX_QUEUE_MEMORY / dev->hard_mtu; in lan78xx_reset()
2509 dev->rx_urb_size = DEFAULT_BURST_CAP_SIZE; in lan78xx_reset()
2510 dev->rx_qlen = 4; in lan78xx_reset()
2511 dev->tx_qlen = 4; in lan78xx_reset()
2526 buf = (MAX_RX_FIFO_SIZE - 512) / 512; in lan78xx_reset()
2529 buf = (MAX_TX_FIFO_SIZE - 512) / 512; in lan78xx_reset()
2537 ret = lan78xx_read_reg(dev, RFE_CTL, &pdata->rfe_ctl); in lan78xx_reset()
2538 pdata->rfe_ctl |= RFE_CTL_BCAST_EN_ | RFE_CTL_DA_PERFECT_; in lan78xx_reset()
2539 ret = lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); in lan78xx_reset()
2542 lan78xx_set_features(dev->net, dev->net->features); in lan78xx_reset()
2544 lan78xx_set_multicast(dev->net); in lan78xx_reset()
2556 netdev_warn(dev->net, "timeout waiting for PHY Reset"); in lan78xx_reset()
2557 return -EIO; in lan78xx_reset()
2563 if (dev->chipid == ID_REV_CHIP_ID_7801_) in lan78xx_reset()
2566 if (dev->chipid == ID_REV_CHIP_ID_7800_) { in lan78xx_reset()
2570 netdev_info(dev->net, "No External EEPROM. Setting MAC Speed\n"); in lan78xx_reset()
2585 dev->net->mtu + VLAN_ETH_HLEN); in lan78xx_reset()
2606 p = (u32 *)&dev->stats.rollover_max; in lan78xx_init_stats()
2607 for (i = 0; i < (sizeof(dev->stats.rollover_max) / (sizeof(u32))); i++) in lan78xx_init_stats()
2610 dev->stats.rollover_max.rx_unicast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
2611 dev->stats.rollover_max.rx_broadcast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
2612 dev->stats.rollover_max.rx_multicast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
2613 dev->stats.rollover_max.eee_rx_lpi_transitions = 0xFFFFFFFF; in lan78xx_init_stats()
2614 dev->stats.rollover_max.eee_rx_lpi_time = 0xFFFFFFFF; in lan78xx_init_stats()
2615 dev->stats.rollover_max.tx_unicast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
2616 dev->stats.rollover_max.tx_broadcast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
2617 dev->stats.rollover_max.tx_multicast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
2618 dev->stats.rollover_max.eee_tx_lpi_transitions = 0xFFFFFFFF; in lan78xx_init_stats()
2619 dev->stats.rollover_max.eee_tx_lpi_time = 0xFFFFFFFF; in lan78xx_init_stats()
2621 set_bit(EVENT_STAT_UPDATE, &dev->flags); in lan78xx_init_stats()
2629 ret = usb_autopm_get_interface(dev->intf); in lan78xx_open()
2633 phy_start(net->phydev); in lan78xx_open()
2635 netif_dbg(dev, ifup, dev->net, "phy initialised successfully"); in lan78xx_open()
2638 if (dev->urb_intr) { in lan78xx_open()
2639 ret = usb_submit_urb(dev->urb_intr, GFP_KERNEL); in lan78xx_open()
2641 netif_err(dev, ifup, dev->net, in lan78xx_open()
2649 set_bit(EVENT_DEV_OPEN, &dev->flags); in lan78xx_open()
2653 dev->link_on = false; in lan78xx_open()
2657 usb_autopm_put_interface(dev->intf); in lan78xx_open()
2672 dev->wait = &unlink_wakeup; in lan78xx_terminate_urbs()
2673 temp = unlink_urbs(dev, &dev->txq) + unlink_urbs(dev, &dev->rxq); in lan78xx_terminate_urbs()
2676 while (!skb_queue_empty(&dev->rxq) && in lan78xx_terminate_urbs()
2677 !skb_queue_empty(&dev->txq) && in lan78xx_terminate_urbs()
2678 !skb_queue_empty(&dev->done)) { in lan78xx_terminate_urbs()
2681 netif_dbg(dev, ifdown, dev->net, in lan78xx_terminate_urbs()
2685 dev->wait = NULL; in lan78xx_terminate_urbs()
2693 if (timer_pending(&dev->stat_monitor)) in lan78xx_stop()
2694 del_timer_sync(&dev->stat_monitor); in lan78xx_stop()
2696 if (net->phydev) in lan78xx_stop()
2697 phy_stop(net->phydev); in lan78xx_stop()
2699 clear_bit(EVENT_DEV_OPEN, &dev->flags); in lan78xx_stop()
2702 netif_info(dev, ifdown, dev->net, in lan78xx_stop()
2703 "stop stats: rx/tx %lu/%lu, errs %lu/%lu\n", in lan78xx_stop()
2704 net->stats.rx_packets, net->stats.tx_packets, in lan78xx_stop()
2705 net->stats.rx_errors, net->stats.tx_errors); in lan78xx_stop()
2709 usb_kill_urb(dev->urb_intr); in lan78xx_stop()
2711 skb_queue_purge(&dev->rxq_pause); in lan78xx_stop()
2717 dev->flags = 0; in lan78xx_stop()
2718 cancel_delayed_work_sync(&dev->wq); in lan78xx_stop()
2719 tasklet_kill(&dev->bh); in lan78xx_stop()
2721 usb_autopm_put_interface(dev->intf); in lan78xx_stop()
2742 tx_cmd_a = (u32)(skb->len & TX_CMD_A_LEN_MASK_) | TX_CMD_A_FCS_; in lan78xx_tx_prep()
2744 if (skb->ip_summed == CHECKSUM_PARTIAL) in lan78xx_tx_prep()
2749 u16 mss = max(skb_shinfo(skb)->gso_size, TX_CMD_B_MSS_MIN_); in lan78xx_tx_prep()
2773 struct skb_data *entry = (struct skb_data *)skb->cb; in defer_bh()
2775 spin_lock_irqsave(&list->lock, flags); in defer_bh()
2776 old_state = entry->state; in defer_bh()
2777 entry->state = state; in defer_bh()
2780 spin_unlock(&list->lock); in defer_bh()
2781 spin_lock(&dev->done.lock); in defer_bh()
2783 __skb_queue_tail(&dev->done, skb); in defer_bh()
2784 if (skb_queue_len(&dev->done) == 1) in defer_bh()
2785 tasklet_schedule(&dev->bh); in defer_bh()
2786 spin_unlock_irqrestore(&dev->done.lock, flags); in defer_bh()
2793 struct sk_buff *skb = (struct sk_buff *)urb->context; in tx_complete()
2794 struct skb_data *entry = (struct skb_data *)skb->cb; in tx_complete()
2795 struct lan78xx_net *dev = entry->dev; in tx_complete()
2797 if (urb->status == 0) { in tx_complete()
2798 dev->net->stats.tx_packets += entry->num_of_packet; in tx_complete()
2799 dev->net->stats.tx_bytes += entry->length; in tx_complete()
2801 dev->net->stats.tx_errors++; in tx_complete()
2803 switch (urb->status) { in tx_complete()
2804 case -EPIPE: in tx_complete()
2808 /* software-driven interface shutdown */ in tx_complete()
2809 case -ECONNRESET: in tx_complete()
2810 case -ESHUTDOWN: in tx_complete()
2813 case -EPROTO: in tx_complete()
2814 case -ETIME: in tx_complete()
2815 case -EILSEQ: in tx_complete()
2816 netif_stop_queue(dev->net); in tx_complete()
2819 netif_dbg(dev, tx_err, dev->net, in tx_complete()
2820 "tx err %d\n", entry->urb->status); in tx_complete()
2825 usb_autopm_put_interface_async(dev->intf); in tx_complete()
2827 defer_bh(dev, skb, &dev->txq, tx_done); in tx_complete()
2833 struct skb_data *entry = (struct skb_data *)newsk->cb; in lan78xx_queue_skb()
2836 entry->state = state; in lan78xx_queue_skb()
2851 skb_queue_tail(&dev->txq_pend, skb2); in lan78xx_start_xmit()
2853 /* throttle TX patch at slower than SUPER SPEED USB */ in lan78xx_start_xmit()
2854 if ((dev->udev->speed < USB_SPEED_SUPER) && in lan78xx_start_xmit()
2855 (skb_queue_len(&dev->txq_pend) > 10)) in lan78xx_start_xmit()
2858 netif_dbg(dev, tx_err, dev->net, in lan78xx_start_xmit()
2860 dev->net->stats.tx_errors++; in lan78xx_start_xmit()
2861 dev->net->stats.tx_dropped++; in lan78xx_start_xmit()
2864 tasklet_schedule(&dev->bh); in lan78xx_start_xmit()
2875 dev->data[0] = (unsigned long)kzalloc(sizeof(*pdata), GFP_KERNEL); in lan78xx_bind()
2877 pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_bind()
2879 netdev_warn(dev->net, "Unable to allocate lan78xx_priv"); in lan78xx_bind()
2880 return -ENOMEM; in lan78xx_bind()
2883 pdata->dev = dev; in lan78xx_bind()
2885 spin_lock_init(&pdata->rfe_ctl_lock); in lan78xx_bind()
2886 mutex_init(&pdata->dataport_mutex); in lan78xx_bind()
2888 INIT_WORK(&pdata->set_multicast, lan78xx_deferred_multicast_write); in lan78xx_bind()
2891 pdata->vlan_table[i] = 0; in lan78xx_bind()
2893 INIT_WORK(&pdata->set_vlan, lan78xx_deferred_vlan_write); in lan78xx_bind()
2895 dev->net->features = 0; in lan78xx_bind()
2898 dev->net->features |= NETIF_F_HW_CSUM; in lan78xx_bind()
2901 dev->net->features |= NETIF_F_RXCSUM; in lan78xx_bind()
2904 dev->net->features |= NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_SG; in lan78xx_bind()
2907 dev->net->features |= NETIF_F_HW_VLAN_CTAG_RX; in lan78xx_bind()
2910 dev->net->features |= NETIF_F_HW_VLAN_CTAG_FILTER; in lan78xx_bind()
2912 dev->net->hw_features = dev->net->features; in lan78xx_bind()
2916 netdev_warn(dev->net, in lan78xx_bind()
2921 dev->net->hard_header_len += TX_OVERHEAD; in lan78xx_bind()
2922 dev->hard_mtu = dev->net->mtu + dev->net->hard_header_len; in lan78xx_bind()
2927 netdev_warn(dev->net, "Registers INIT FAILED...."); in lan78xx_bind()
2933 netdev_warn(dev->net, "MDIO INIT FAILED....."); in lan78xx_bind()
2937 dev->net->flags |= IFF_MULTICAST; in lan78xx_bind()
2939 pdata->wol = WAKE_MAGIC; in lan78xx_bind()
2947 netdev_warn(dev->net, "Bind routine FAILED"); in lan78xx_bind()
2948 cancel_work_sync(&pdata->set_multicast); in lan78xx_bind()
2949 cancel_work_sync(&pdata->set_vlan); in lan78xx_bind()
2956 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_unbind()
2963 cancel_work_sync(&pdata->set_multicast); in lan78xx_unbind()
2964 cancel_work_sync(&pdata->set_vlan); in lan78xx_unbind()
2965 netif_dbg(dev, ifdown, dev->net, "free pdata"); in lan78xx_unbind()
2968 dev->data[0] = 0; in lan78xx_unbind()
2979 if (!(dev->net->features & NETIF_F_RXCSUM) || in lan78xx_rx_csum_offload()
2982 !(dev->net->features & NETIF_F_HW_VLAN_CTAG_RX))) { in lan78xx_rx_csum_offload()
2983 skb->ip_summed = CHECKSUM_NONE; in lan78xx_rx_csum_offload()
2985 skb->csum = ntohs((u16)(rx_cmd_b >> RX_CMD_B_CSUM_SHIFT_)); in lan78xx_rx_csum_offload()
2986 skb->ip_summed = CHECKSUM_COMPLETE; in lan78xx_rx_csum_offload()
2994 if ((dev->net->features & NETIF_F_HW_VLAN_CTAG_RX) && in lan78xx_rx_vlan_offload()
3004 if (test_bit(EVENT_RX_PAUSED, &dev->flags)) { in lan78xx_skb_return()
3005 skb_queue_tail(&dev->rxq_pause, skb); in lan78xx_skb_return()
3009 dev->net->stats.rx_packets++; in lan78xx_skb_return()
3010 dev->net->stats.rx_bytes += skb->len; in lan78xx_skb_return()
3012 skb->protocol = eth_type_trans(skb, dev->net); in lan78xx_skb_return()
3014 netif_dbg(dev, rx_status, dev->net, "< rx, len %zu, type 0x%x\n", in lan78xx_skb_return()
3015 skb->len + sizeof(struct ethhdr), skb->protocol); in lan78xx_skb_return()
3016 memset(skb->cb, 0, sizeof(struct skb_data)); in lan78xx_skb_return()
3023 netif_dbg(dev, rx_err, dev->net, in lan78xx_skb_return()
3029 if (skb->len < dev->net->hard_header_len) in lan78xx_rx()
3032 while (skb->len > 0) { in lan78xx_rx()
3038 rx_cmd_a = get_unaligned_le32(skb->data); in lan78xx_rx()
3041 rx_cmd_b = get_unaligned_le32(skb->data); in lan78xx_rx()
3044 rx_cmd_c = get_unaligned_le16(skb->data); in lan78xx_rx()
3047 packet = skb->data; in lan78xx_rx()
3051 align_count = (4 - ((size + RXW_PADDING) % 4)) % 4; in lan78xx_rx()
3054 netif_dbg(dev, rx_err, dev->net, in lan78xx_rx()
3058 if (skb->len == size) { in lan78xx_rx()
3064 skb_trim(skb, skb->len - 4); /* remove fcs */ in lan78xx_rx()
3065 skb->truesize = size + sizeof(struct sk_buff); in lan78xx_rx()
3072 netdev_warn(dev->net, "Error allocating skb"); in lan78xx_rx()
3076 skb2->len = size; in lan78xx_rx()
3077 skb2->data = packet; in lan78xx_rx()
3083 skb_trim(skb2, skb2->len - 4); /* remove fcs */ in lan78xx_rx()
3084 skb2->truesize = size + sizeof(struct sk_buff); in lan78xx_rx()
3092 if (skb->len) in lan78xx_rx()
3102 dev->net->stats.rx_errors++; in rx_process()
3106 if (skb->len) { in rx_process()
3111 netif_dbg(dev, rx_err, dev->net, "drop\n"); in rx_process()
3112 dev->net->stats.rx_errors++; in rx_process()
3114 skb_queue_tail(&dev->done, skb); in rx_process()
3124 size_t size = dev->rx_urb_size; in rx_submit()
3127 skb = netdev_alloc_skb_ip_align(dev->net, size); in rx_submit()
3130 return -ENOMEM; in rx_submit()
3133 entry = (struct skb_data *)skb->cb; in rx_submit()
3134 entry->urb = urb; in rx_submit()
3135 entry->dev = dev; in rx_submit()
3136 entry->length = 0; in rx_submit()
3138 usb_fill_bulk_urb(urb, dev->udev, dev->pipe_in, in rx_submit()
3139 skb->data, size, rx_complete, skb); in rx_submit()
3141 spin_lock_irqsave(&dev->rxq.lock, lockflags); in rx_submit()
3143 if (netif_device_present(dev->net) && in rx_submit()
3144 netif_running(dev->net) && in rx_submit()
3145 !test_bit(EVENT_RX_HALT, &dev->flags) && in rx_submit()
3146 !test_bit(EVENT_DEV_ASLEEP, &dev->flags)) { in rx_submit()
3150 lan78xx_queue_skb(&dev->rxq, skb, rx_start); in rx_submit()
3152 case -EPIPE: in rx_submit()
3155 case -ENODEV: in rx_submit()
3156 netif_dbg(dev, ifdown, dev->net, "device gone\n"); in rx_submit()
3157 netif_device_detach(dev->net); in rx_submit()
3159 case -EHOSTUNREACH: in rx_submit()
3160 ret = -ENOLINK; in rx_submit()
3163 netif_dbg(dev, rx_err, dev->net, in rx_submit()
3165 tasklet_schedule(&dev->bh); in rx_submit()
3168 netif_dbg(dev, ifdown, dev->net, "rx: stopped\n"); in rx_submit()
3169 ret = -ENOLINK; in rx_submit()
3171 spin_unlock_irqrestore(&dev->rxq.lock, lockflags); in rx_submit()
3181 struct sk_buff *skb = (struct sk_buff *)urb->context; in rx_complete()
3182 struct skb_data *entry = (struct skb_data *)skb->cb; in rx_complete()
3183 struct lan78xx_net *dev = entry->dev; in rx_complete()
3184 int urb_status = urb->status; in rx_complete()
3187 skb_put(skb, urb->actual_length); in rx_complete()
3189 entry->urb = NULL; in rx_complete()
3193 if (skb->len < dev->net->hard_header_len) { in rx_complete()
3195 dev->net->stats.rx_errors++; in rx_complete()
3196 dev->net->stats.rx_length_errors++; in rx_complete()
3197 netif_dbg(dev, rx_err, dev->net, in rx_complete()
3198 "rx length %d\n", skb->len); in rx_complete()
3200 usb_mark_last_busy(dev->udev); in rx_complete()
3202 case -EPIPE: in rx_complete()
3203 dev->net->stats.rx_errors++; in rx_complete()
3206 case -ECONNRESET: /* async unlink */ in rx_complete()
3207 case -ESHUTDOWN: /* hardware gone */ in rx_complete()
3208 netif_dbg(dev, ifdown, dev->net, in rx_complete()
3211 entry->urb = urb; in rx_complete()
3214 case -EPROTO: in rx_complete()
3215 case -ETIME: in rx_complete()
3216 case -EILSEQ: in rx_complete()
3217 dev->net->stats.rx_errors++; in rx_complete()
3219 entry->urb = urb; in rx_complete()
3224 case -EOVERFLOW: in rx_complete()
3225 dev->net->stats.rx_over_errors++; in rx_complete()
3230 dev->net->stats.rx_errors++; in rx_complete()
3231 netif_dbg(dev, rx_err, dev->net, "rx status %d\n", urb_status); in rx_complete()
3235 state = defer_bh(dev, skb, &dev->rxq, state); in rx_complete()
3238 if (netif_running(dev->net) && in rx_complete()
3239 !test_bit(EVENT_RX_HALT, &dev->flags) && in rx_complete()
3246 netif_dbg(dev, rx_err, dev->net, "no read resubmitted\n"); in rx_complete()
3255 struct sk_buff_head *tqp = &dev->txq_pend; in lan78xx_tx_bh()
3265 spin_lock_irqsave(&tqp->lock, flags); in lan78xx_tx_bh()
3273 length = skb->len - TX_OVERHEAD; in lan78xx_tx_bh()
3275 spin_unlock_irqrestore(&tqp->lock, flags); in lan78xx_tx_bh()
3279 if ((skb_totallen + skb->len) > MAX_SINGLE_PACKET_SIZE) in lan78xx_tx_bh()
3281 skb_totallen = skb->len + roundup(skb_totallen, sizeof(u32)); in lan78xx_tx_bh()
3284 spin_unlock_irqrestore(&tqp->lock, flags); in lan78xx_tx_bh()
3296 length += (skb2->len - TX_OVERHEAD); in lan78xx_tx_bh()
3297 memcpy(skb->data + pos, skb2->data, skb2->len); in lan78xx_tx_bh()
3298 pos += roundup(skb2->len, sizeof(u32)); in lan78xx_tx_bh()
3308 entry = (struct skb_data *)skb->cb; in lan78xx_tx_bh()
3309 entry->urb = urb; in lan78xx_tx_bh()
3310 entry->dev = dev; in lan78xx_tx_bh()
3311 entry->length = length; in lan78xx_tx_bh()
3312 entry->num_of_packet = count; in lan78xx_tx_bh()
3314 spin_lock_irqsave(&dev->txq.lock, flags); in lan78xx_tx_bh()
3315 ret = usb_autopm_get_interface_async(dev->intf); in lan78xx_tx_bh()
3317 spin_unlock_irqrestore(&dev->txq.lock, flags); in lan78xx_tx_bh()
3321 usb_fill_bulk_urb(urb, dev->udev, dev->pipe_out, in lan78xx_tx_bh()
3322 skb->data, skb->len, tx_complete, skb); in lan78xx_tx_bh()
3324 if (length % dev->maxpacket == 0) { in lan78xx_tx_bh()
3326 urb->transfer_flags |= URB_ZERO_PACKET; in lan78xx_tx_bh()
3331 if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) { in lan78xx_tx_bh()
3333 usb_anchor_urb(urb, &dev->deferred); in lan78xx_tx_bh()
3335 netif_stop_queue(dev->net); in lan78xx_tx_bh()
3337 spin_unlock_irqrestore(&dev->txq.lock, flags); in lan78xx_tx_bh()
3338 netdev_dbg(dev->net, "Delaying transmission for resumption\n"); in lan78xx_tx_bh()
3346 netif_trans_update(dev->net); in lan78xx_tx_bh()
3347 lan78xx_queue_skb(&dev->txq, skb, tx_start); in lan78xx_tx_bh()
3348 if (skb_queue_len(&dev->txq) >= dev->tx_qlen) in lan78xx_tx_bh()
3349 netif_stop_queue(dev->net); in lan78xx_tx_bh()
3351 case -EPIPE: in lan78xx_tx_bh()
3352 netif_stop_queue(dev->net); in lan78xx_tx_bh()
3354 usb_autopm_put_interface_async(dev->intf); in lan78xx_tx_bh()
3357 usb_autopm_put_interface_async(dev->intf); in lan78xx_tx_bh()
3358 netif_dbg(dev, tx_err, dev->net, in lan78xx_tx_bh()
3359 "tx: submit urb err %d\n", ret); in lan78xx_tx_bh()
3363 spin_unlock_irqrestore(&dev->txq.lock, flags); in lan78xx_tx_bh()
3366 netif_dbg(dev, tx_err, dev->net, "drop, code %d\n", ret); in lan78xx_tx_bh()
3368 dev->net->stats.tx_dropped++; in lan78xx_tx_bh()
3373 netif_dbg(dev, tx_queued, dev->net, in lan78xx_tx_bh()
3374 "> tx, len %d, type 0x%x\n", length, skb->protocol); in lan78xx_tx_bh()
3382 if (skb_queue_len(&dev->rxq) < dev->rx_qlen) { in lan78xx_rx_bh()
3384 if (skb_queue_len(&dev->rxq) >= dev->rx_qlen) in lan78xx_rx_bh()
3388 if (rx_submit(dev, urb, GFP_ATOMIC) == -ENOLINK) in lan78xx_rx_bh()
3392 if (skb_queue_len(&dev->rxq) < dev->rx_qlen) in lan78xx_rx_bh()
3393 tasklet_schedule(&dev->bh); in lan78xx_rx_bh()
3395 if (skb_queue_len(&dev->txq) < dev->tx_qlen) in lan78xx_rx_bh()
3396 netif_wake_queue(dev->net); in lan78xx_rx_bh()
3405 while ((skb = skb_dequeue(&dev->done))) { in lan78xx_bh()
3406 entry = (struct skb_data *)(skb->cb); in lan78xx_bh()
3407 switch (entry->state) { in lan78xx_bh()
3409 entry->state = rx_cleanup; in lan78xx_bh()
3413 usb_free_urb(entry->urb); in lan78xx_bh()
3417 usb_free_urb(entry->urb); in lan78xx_bh()
3421 netdev_dbg(dev->net, "skb state %d\n", entry->state); in lan78xx_bh()
3426 if (netif_device_present(dev->net) && netif_running(dev->net)) { in lan78xx_bh()
3428 if (timer_pending(&dev->stat_monitor) && (dev->delta != 1)) { in lan78xx_bh()
3429 dev->delta = 1; in lan78xx_bh()
3430 mod_timer(&dev->stat_monitor, in lan78xx_bh()
3434 if (!skb_queue_empty(&dev->txq_pend)) in lan78xx_bh()
3437 if (!timer_pending(&dev->delay) && in lan78xx_bh()
3438 !test_bit(EVENT_RX_HALT, &dev->flags)) in lan78xx_bh()
3450 if (test_bit(EVENT_TX_HALT, &dev->flags)) { in lan78xx_delayedwork()
3451 unlink_urbs(dev, &dev->txq); in lan78xx_delayedwork()
3452 status = usb_autopm_get_interface(dev->intf); in lan78xx_delayedwork()
3455 status = usb_clear_halt(dev->udev, dev->pipe_out); in lan78xx_delayedwork()
3456 usb_autopm_put_interface(dev->intf); in lan78xx_delayedwork()
3458 status != -EPIPE && in lan78xx_delayedwork()
3459 status != -ESHUTDOWN) { in lan78xx_delayedwork()
3462 netdev_err(dev->net, in lan78xx_delayedwork()
3463 "can't clear tx halt, status %d\n", in lan78xx_delayedwork()
3466 clear_bit(EVENT_TX_HALT, &dev->flags); in lan78xx_delayedwork()
3467 if (status != -ESHUTDOWN) in lan78xx_delayedwork()
3468 netif_wake_queue(dev->net); in lan78xx_delayedwork()
3471 if (test_bit(EVENT_RX_HALT, &dev->flags)) { in lan78xx_delayedwork()
3472 unlink_urbs(dev, &dev->rxq); in lan78xx_delayedwork()
3473 status = usb_autopm_get_interface(dev->intf); in lan78xx_delayedwork()
3476 status = usb_clear_halt(dev->udev, dev->pipe_in); in lan78xx_delayedwork()
3477 usb_autopm_put_interface(dev->intf); in lan78xx_delayedwork()
3479 status != -EPIPE && in lan78xx_delayedwork()
3480 status != -ESHUTDOWN) { in lan78xx_delayedwork()
3483 netdev_err(dev->net, in lan78xx_delayedwork()
3487 clear_bit(EVENT_RX_HALT, &dev->flags); in lan78xx_delayedwork()
3488 tasklet_schedule(&dev->bh); in lan78xx_delayedwork()
3492 if (test_bit(EVENT_LINK_RESET, &dev->flags)) { in lan78xx_delayedwork()
3495 clear_bit(EVENT_LINK_RESET, &dev->flags); in lan78xx_delayedwork()
3496 status = usb_autopm_get_interface(dev->intf); in lan78xx_delayedwork()
3500 usb_autopm_put_interface(dev->intf); in lan78xx_delayedwork()
3502 netdev_info(dev->net, "link reset failed (%d)\n", in lan78xx_delayedwork()
3505 usb_autopm_put_interface(dev->intf); in lan78xx_delayedwork()
3509 if (test_bit(EVENT_STAT_UPDATE, &dev->flags)) { in lan78xx_delayedwork()
3512 clear_bit(EVENT_STAT_UPDATE, &dev->flags); in lan78xx_delayedwork()
3514 mod_timer(&dev->stat_monitor, in lan78xx_delayedwork()
3515 jiffies + (STAT_UPDATE_TIMER * dev->delta)); in lan78xx_delayedwork()
3517 dev->delta = min((dev->delta * 2), 50); in lan78xx_delayedwork()
3523 struct lan78xx_net *dev = urb->context; in intr_complete()
3524 int status = urb->status; in intr_complete()
3532 /* software-driven interface shutdown */ in intr_complete()
3533 case -ENOENT: /* urb killed */ in intr_complete()
3534 case -ESHUTDOWN: /* hardware gone */ in intr_complete()
3535 netif_dbg(dev, ifdown, dev->net, in intr_complete()
3539 /* NOTE: not throttling like RX/TX, since this endpoint in intr_complete()
3543 netdev_dbg(dev->net, "intr status %d\n", status); in intr_complete()
3547 if (!netif_running(dev->net)) in intr_complete()
3550 memset(urb->transfer_buffer, 0, urb->transfer_buffer_length); in intr_complete()
3553 netif_err(dev, timer, dev->net, in intr_complete()
3554 "intr resubmit --> %d\n", status); in intr_complete()
3570 net = dev->net; in lan78xx_disconnect()
3571 phydev = net->phydev; in lan78xx_disconnect()
3576 phy_disconnect(net->phydev); in lan78xx_disconnect()
3583 cancel_delayed_work_sync(&dev->wq); in lan78xx_disconnect()
3585 usb_scuttle_anchored_urbs(&dev->deferred); in lan78xx_disconnect()
3589 usb_kill_urb(dev->urb_intr); in lan78xx_disconnect()
3590 usb_free_urb(dev->urb_intr); in lan78xx_disconnect()
3600 unlink_urbs(dev, &dev->txq); in lan78xx_tx_timeout()
3601 tasklet_schedule(&dev->bh); in lan78xx_tx_timeout()
3608 if (skb->len + TX_OVERHEAD > MAX_SINGLE_PACKET_SIZE) in lan78xx_features_check()
3657 dev_err(&intf->dev, "Error: OOM\n"); in lan78xx_probe()
3658 ret = -ENOMEM; in lan78xx_probe()
3663 SET_NETDEV_DEV(netdev, &intf->dev); in lan78xx_probe()
3666 dev->udev = udev; in lan78xx_probe()
3667 dev->intf = intf; in lan78xx_probe()
3668 dev->net = netdev; in lan78xx_probe()
3669 dev->msg_enable = netif_msg_init(msg_level, NETIF_MSG_DRV in lan78xx_probe()
3672 skb_queue_head_init(&dev->rxq); in lan78xx_probe()
3673 skb_queue_head_init(&dev->txq); in lan78xx_probe()
3674 skb_queue_head_init(&dev->done); in lan78xx_probe()
3675 skb_queue_head_init(&dev->rxq_pause); in lan78xx_probe()
3676 skb_queue_head_init(&dev->txq_pend); in lan78xx_probe()
3677 mutex_init(&dev->phy_mutex); in lan78xx_probe()
3679 tasklet_init(&dev->bh, lan78xx_bh, (unsigned long)dev); in lan78xx_probe()
3680 INIT_DELAYED_WORK(&dev->wq, lan78xx_delayedwork); in lan78xx_probe()
3681 init_usb_anchor(&dev->deferred); in lan78xx_probe()
3683 netdev->netdev_ops = &lan78xx_netdev_ops; in lan78xx_probe()
3684 netdev->watchdog_timeo = TX_TIMEOUT_JIFFIES; in lan78xx_probe()
3685 netdev->ethtool_ops = &lan78xx_ethtool_ops; in lan78xx_probe()
3687 dev->delta = 1; in lan78xx_probe()
3688 timer_setup(&dev->stat_monitor, lan78xx_stat_monitor, 0); in lan78xx_probe()
3690 mutex_init(&dev->stats.access_lock); in lan78xx_probe()
3692 if (intf->cur_altsetting->desc.bNumEndpoints < 3) { in lan78xx_probe()
3693 ret = -ENODEV; in lan78xx_probe()
3697 dev->pipe_in = usb_rcvbulkpipe(udev, BULK_IN_PIPE); in lan78xx_probe()
3698 ep_blkin = usb_pipe_endpoint(udev, dev->pipe_in); in lan78xx_probe()
3699 if (!ep_blkin || !usb_endpoint_is_bulk_in(&ep_blkin->desc)) { in lan78xx_probe()
3700 ret = -ENODEV; in lan78xx_probe()
3704 dev->pipe_out = usb_sndbulkpipe(udev, BULK_OUT_PIPE); in lan78xx_probe()
3705 ep_blkout = usb_pipe_endpoint(udev, dev->pipe_out); in lan78xx_probe()
3706 if (!ep_blkout || !usb_endpoint_is_bulk_out(&ep_blkout->desc)) { in lan78xx_probe()
3707 ret = -ENODEV; in lan78xx_probe()
3711 ep_intr = &intf->cur_altsetting->endpoint[2]; in lan78xx_probe()
3712 if (!usb_endpoint_is_int_in(&ep_intr->desc)) { in lan78xx_probe()
3713 ret = -ENODEV; in lan78xx_probe()
3717 dev->pipe_intr = usb_rcvintpipe(dev->udev, in lan78xx_probe()
3718 usb_endpoint_num(&ep_intr->desc)); in lan78xx_probe()
3724 if (netdev->mtu > (dev->hard_mtu - netdev->hard_header_len)) in lan78xx_probe()
3725 netdev->mtu = dev->hard_mtu - netdev->hard_header_len; in lan78xx_probe()
3727 /* MTU range: 68 - 9000 */ in lan78xx_probe()
3728 netdev->max_mtu = MAX_SINGLE_PACKET_SIZE; in lan78xx_probe()
3729 netif_set_gso_max_size(netdev, MAX_SINGLE_PACKET_SIZE - MAX_HEADER); in lan78xx_probe()
3731 period = ep_intr->desc.bInterval; in lan78xx_probe()
3732 maxp = usb_maxpacket(dev->udev, dev->pipe_intr, 0); in lan78xx_probe()
3735 dev->urb_intr = usb_alloc_urb(0, GFP_KERNEL); in lan78xx_probe()
3736 if (!dev->urb_intr) { in lan78xx_probe()
3737 ret = -ENOMEM; in lan78xx_probe()
3741 usb_fill_int_urb(dev->urb_intr, dev->udev, in lan78xx_probe()
3742 dev->pipe_intr, buf, maxp, in lan78xx_probe()
3744 dev->urb_intr->transfer_flags |= URB_FREE_BUFFER; in lan78xx_probe()
3748 dev->maxpacket = usb_maxpacket(dev->udev, dev->pipe_out, 1); in lan78xx_probe()
3750 /* Reject broken descriptors. */ in lan78xx_probe()
3751 if (dev->maxpacket == 0) { in lan78xx_probe()
3752 ret = -ENODEV; in lan78xx_probe()
3756 /* driver requires remote-wakeup capability during autosuspend. */ in lan78xx_probe()
3757 intf->needs_remote_wakeup = 1; in lan78xx_probe()
3771 ret = device_set_wakeup_enable(&udev->dev, true); in lan78xx_probe()
3776 pm_runtime_set_autosuspend_delay(&udev->dev, in lan78xx_probe()
3782 phy_disconnect(netdev->phydev); in lan78xx_probe()
3784 usb_free_urb(dev->urb_intr); in lan78xx_probe()
3966 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_suspend()
3970 if (!dev->suspend_count++) { in lan78xx_suspend()
3971 spin_lock_irq(&dev->txq.lock); in lan78xx_suspend()
3973 if ((skb_queue_len(&dev->txq) || in lan78xx_suspend()
3974 skb_queue_len(&dev->txq_pend)) && in lan78xx_suspend()
3976 spin_unlock_irq(&dev->txq.lock); in lan78xx_suspend()
3977 ret = -EBUSY; in lan78xx_suspend()
3980 set_bit(EVENT_DEV_ASLEEP, &dev->flags); in lan78xx_suspend()
3981 spin_unlock_irq(&dev->txq.lock); in lan78xx_suspend()
3984 /* stop TX & RX */ in lan78xx_suspend()
3993 netif_device_detach(dev->net); in lan78xx_suspend()
3995 usb_kill_urb(dev->urb_intr); in lan78xx_suspend()
3998 netif_device_attach(dev->net); in lan78xx_suspend()
4001 if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) { in lan78xx_suspend()
4002 del_timer(&dev->stat_monitor); in lan78xx_suspend()
4047 lan78xx_set_suspend(dev, pdata->wol); in lan78xx_suspend()
4064 if (!timer_pending(&dev->stat_monitor)) { in lan78xx_resume()
4065 dev->delta = 1; in lan78xx_resume()
4066 mod_timer(&dev->stat_monitor, in lan78xx_resume()
4070 if (!--dev->suspend_count) { in lan78xx_resume()
4072 if (dev->urb_intr && test_bit(EVENT_DEV_OPEN, &dev->flags)) in lan78xx_resume()
4073 usb_submit_urb(dev->urb_intr, GFP_NOIO); in lan78xx_resume()
4075 spin_lock_irq(&dev->txq.lock); in lan78xx_resume()
4076 while ((res = usb_get_from_anchor(&dev->deferred))) { in lan78xx_resume()
4077 skb = (struct sk_buff *)res->context; in lan78xx_resume()
4082 usb_autopm_put_interface_async(dev->intf); in lan78xx_resume()
4084 netif_trans_update(dev->net); in lan78xx_resume()
4085 lan78xx_queue_skb(&dev->txq, skb, tx_start); in lan78xx_resume()
4089 clear_bit(EVENT_DEV_ASLEEP, &dev->flags); in lan78xx_resume()
4090 spin_unlock_irq(&dev->txq.lock); in lan78xx_resume()
4092 if (test_bit(EVENT_DEV_OPEN, &dev->flags)) { in lan78xx_resume()
4093 if (!(skb_queue_len(&dev->txq) >= dev->tx_qlen)) in lan78xx_resume()
4094 netif_start_queue(dev->net); in lan78xx_resume()
4095 tasklet_schedule(&dev->bh); in lan78xx_resume()
4129 phy_start(dev->net->phydev); in lan78xx_reset_resume()
4148 /* ATM2-AF USB Gigabit Ethernet Device */