Lines Matching +full:update +full:- +full:fc +full:- +full:fixup
1 // SPDX-License-Identifier: GPL-2.0+
90 /* statistic update interval (mSec) */
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",
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",
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()
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()
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()
841 netdev_warn(dev->net, in lan78xx_read_raw_otp()
843 return -EIO; in lan78xx_read_raw_otp()
862 netdev_warn(dev->net, in lan78xx_read_raw_otp()
864 return -EIO; in lan78xx_read_raw_otp()
894 netdev_warn(dev->net, in lan78xx_write_raw_otp()
896 return -EIO; in lan78xx_write_raw_otp()
918 netdev_warn(dev->net, in lan78xx_write_raw_otp()
920 return -EIO; in lan78xx_write_raw_otp()
940 ret = -EINVAL; in lan78xx_read_otp()
957 return -EIO; in lan78xx_dataport_wait_not_busy()
965 netdev_warn(dev->net, "lan78xx_dataport_wait_not_busy timed out"); in lan78xx_dataport_wait_not_busy()
967 return -EIO; in lan78xx_dataport_wait_not_busy()
973 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_dataport_write()
977 if (usb_autopm_get_interface(dev->intf) < 0) in lan78xx_dataport_write()
980 mutex_lock(&pdata->dataport_mutex); in lan78xx_dataport_write()
1005 mutex_unlock(&pdata->dataport_mutex); in lan78xx_dataport_write()
1006 usb_autopm_put_interface(dev->intf); in lan78xx_dataport_write()
1021 pdata->pfilter_table[index][1] = temp; in lan78xx_set_addr_filter()
1025 pdata->pfilter_table[index][0] = temp; in lan78xx_set_addr_filter()
1039 struct lan78xx_net *dev = pdata->dev; in lan78xx_deferred_multicast_write()
1042 netif_dbg(dev, drv, dev->net, "deferred multicast write 0x%08x\n", in lan78xx_deferred_multicast_write()
1043 pdata->rfe_ctl); in lan78xx_deferred_multicast_write()
1046 DP_SEL_VHF_HASH_LEN, pdata->mchash_table); in lan78xx_deferred_multicast_write()
1051 pdata->pfilter_table[i][1]); in lan78xx_deferred_multicast_write()
1053 pdata->pfilter_table[i][0]); in lan78xx_deferred_multicast_write()
1056 lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); in lan78xx_deferred_multicast_write()
1062 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_set_multicast()
1066 spin_lock_irqsave(&pdata->rfe_ctl_lock, flags); in lan78xx_set_multicast()
1068 pdata->rfe_ctl &= ~(RFE_CTL_UCAST_EN_ | RFE_CTL_MCAST_EN_ | in lan78xx_set_multicast()
1072 pdata->mchash_table[i] = 0; in lan78xx_set_multicast()
1075 pdata->pfilter_table[i][0] = in lan78xx_set_multicast()
1076 pdata->pfilter_table[i][1] = 0; in lan78xx_set_multicast()
1079 pdata->rfe_ctl |= RFE_CTL_BCAST_EN_; in lan78xx_set_multicast()
1081 if (dev->net->flags & IFF_PROMISC) { in lan78xx_set_multicast()
1082 netif_dbg(dev, drv, dev->net, "promiscuous mode enabled"); in lan78xx_set_multicast()
1083 pdata->rfe_ctl |= RFE_CTL_MCAST_EN_ | RFE_CTL_UCAST_EN_; in lan78xx_set_multicast()
1085 if (dev->net->flags & IFF_ALLMULTI) { in lan78xx_set_multicast()
1086 netif_dbg(dev, drv, dev->net, in lan78xx_set_multicast()
1088 pdata->rfe_ctl |= RFE_CTL_MCAST_EN_; in lan78xx_set_multicast()
1092 if (netdev_mc_count(dev->net)) { in lan78xx_set_multicast()
1096 netif_dbg(dev, drv, dev->net, "receive multicast hash filter"); in lan78xx_set_multicast()
1098 pdata->rfe_ctl |= RFE_CTL_DA_PERFECT_; in lan78xx_set_multicast()
1104 lan78xx_set_addr_filter(pdata, i, ha->addr); in lan78xx_set_multicast()
1106 u32 bitnum = lan78xx_hash(ha->addr); in lan78xx_set_multicast()
1108 pdata->mchash_table[bitnum / 32] |= in lan78xx_set_multicast()
1110 pdata->rfe_ctl |= RFE_CTL_MCAST_HASH_; in lan78xx_set_multicast()
1116 spin_unlock_irqrestore(&pdata->rfe_ctl_lock, flags); in lan78xx_set_multicast()
1119 schedule_work(&pdata->set_multicast); in lan78xx_set_multicast()
1128 if (dev->fc_autoneg) in lan78xx_update_flowcontrol()
1131 cap = dev->fc_request_control; in lan78xx_update_flowcontrol()
1139 if (dev->udev->speed == USB_SPEED_SUPER) in lan78xx_update_flowcontrol()
1141 else if (dev->udev->speed == USB_SPEED_HIGH) in lan78xx_update_flowcontrol()
1144 netif_dbg(dev, link, dev->net, "rx pause %s, tx pause %s", in lan78xx_update_flowcontrol()
1158 struct phy_device *phydev = dev->net->phydev; in lan78xx_link_reset()
1166 return -EIO; in lan78xx_link_reset()
1168 mutex_lock(&phydev->lock); in lan78xx_link_reset()
1170 link = phydev->link; in lan78xx_link_reset()
1171 mutex_unlock(&phydev->lock); in lan78xx_link_reset()
1173 if (!link && dev->link_on) { in lan78xx_link_reset()
1174 dev->link_on = false; in lan78xx_link_reset()
1179 return -EIO; in lan78xx_link_reset()
1183 return -EIO; in lan78xx_link_reset()
1185 del_timer(&dev->stat_monitor); in lan78xx_link_reset()
1186 } else if (link && !dev->link_on) { in lan78xx_link_reset()
1187 dev->link_on = true; in lan78xx_link_reset()
1191 if (dev->udev->speed == USB_SPEED_SUPER) { in lan78xx_link_reset()
1218 netif_dbg(dev, link, dev->net, in lan78xx_link_reset()
1225 if (!timer_pending(&dev->stat_monitor)) { in lan78xx_link_reset()
1226 dev->delta = 1; in lan78xx_link_reset()
1227 mod_timer(&dev->stat_monitor, in lan78xx_link_reset()
1231 tasklet_schedule(&dev->bh); in lan78xx_link_reset()
1244 set_bit(work, &dev->flags); in lan78xx_defer_kevent()
1245 if (!schedule_delayed_work(&dev->wq, 0)) in lan78xx_defer_kevent()
1246 netdev_err(dev->net, "kevent %d may have been dropped\n", work); in lan78xx_defer_kevent()
1253 if (urb->actual_length != 4) { in lan78xx_status()
1254 netdev_warn(dev->net, in lan78xx_status()
1255 "unexpected urb length %d", urb->actual_length); in lan78xx_status()
1259 intdata = get_unaligned_le32(urb->transfer_buffer); in lan78xx_status()
1262 netif_dbg(dev, link, dev->net, "PHY INTR: 0x%08x\n", intdata); in lan78xx_status()
1265 if (dev->domain_data.phyirq > 0) { in lan78xx_status()
1267 generic_handle_irq(dev->domain_data.phyirq); in lan78xx_status()
1271 netdev_warn(dev->net, in lan78xx_status()
1286 ret = usb_autopm_get_interface(dev->intf); in lan78xx_ethtool_get_eeprom()
1290 ee->magic = LAN78XX_EEPROM_MAGIC; in lan78xx_ethtool_get_eeprom()
1292 ret = lan78xx_read_raw_eeprom(dev, ee->offset, ee->len, data); in lan78xx_ethtool_get_eeprom()
1294 usb_autopm_put_interface(dev->intf); in lan78xx_ethtool_get_eeprom()
1305 ret = usb_autopm_get_interface(dev->intf); in lan78xx_ethtool_set_eeprom()
1312 if (ee->magic == LAN78XX_EEPROM_MAGIC) in lan78xx_ethtool_set_eeprom()
1313 ret = lan78xx_write_raw_eeprom(dev, ee->offset, ee->len, data); in lan78xx_ethtool_set_eeprom()
1314 else if ((ee->magic == LAN78XX_OTP_MAGIC) && in lan78xx_ethtool_set_eeprom()
1315 (ee->offset == 0) && in lan78xx_ethtool_set_eeprom()
1316 (ee->len == 512) && in lan78xx_ethtool_set_eeprom()
1318 ret = lan78xx_write_raw_otp(dev, ee->offset, ee->len, data); in lan78xx_ethtool_set_eeprom()
1320 usb_autopm_put_interface(dev->intf); in lan78xx_ethtool_set_eeprom()
1337 return -EOPNOTSUPP; in lan78xx_get_sset_count()
1347 mutex_lock(&dev->stats.access_lock); in lan78xx_get_stats()
1348 memcpy(data, &dev->stats.curr_stat, sizeof(dev->stats.curr_stat)); in lan78xx_get_stats()
1349 mutex_unlock(&dev->stats.access_lock); in lan78xx_get_stats()
1358 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_get_wol()
1360 if (usb_autopm_get_interface(dev->intf) < 0) in lan78xx_get_wol()
1365 wol->supported = 0; in lan78xx_get_wol()
1366 wol->wolopts = 0; in lan78xx_get_wol()
1369 wol->supported = WAKE_ALL; in lan78xx_get_wol()
1370 wol->wolopts = pdata->wol; in lan78xx_get_wol()
1372 wol->supported = 0; in lan78xx_get_wol()
1373 wol->wolopts = 0; in lan78xx_get_wol()
1377 usb_autopm_put_interface(dev->intf); in lan78xx_get_wol()
1384 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_set_wol()
1387 ret = usb_autopm_get_interface(dev->intf); in lan78xx_set_wol()
1391 if (wol->wolopts & ~WAKE_ALL) in lan78xx_set_wol()
1392 return -EINVAL; in lan78xx_set_wol()
1394 pdata->wol = wol->wolopts; in lan78xx_set_wol()
1396 device_set_wakeup_enable(&dev->udev->dev, (bool)wol->wolopts); in lan78xx_set_wol()
1398 phy_ethtool_set_wol(netdev->phydev, wol); in lan78xx_set_wol()
1400 usb_autopm_put_interface(dev->intf); in lan78xx_set_wol()
1408 struct phy_device *phydev = net->phydev; in lan78xx_get_eee()
1412 ret = usb_autopm_get_interface(dev->intf); in lan78xx_get_eee()
1422 edata->eee_enabled = true; in lan78xx_get_eee()
1423 edata->eee_active = !!(edata->advertised & in lan78xx_get_eee()
1424 edata->lp_advertised); in lan78xx_get_eee()
1425 edata->tx_lpi_enabled = true; in lan78xx_get_eee()
1428 edata->tx_lpi_timer = buf; in lan78xx_get_eee()
1430 edata->eee_enabled = false; in lan78xx_get_eee()
1431 edata->eee_active = false; in lan78xx_get_eee()
1432 edata->tx_lpi_enabled = false; in lan78xx_get_eee()
1433 edata->tx_lpi_timer = 0; in lan78xx_get_eee()
1438 usb_autopm_put_interface(dev->intf); in lan78xx_get_eee()
1449 ret = usb_autopm_get_interface(dev->intf); in lan78xx_set_eee()
1453 if (edata->eee_enabled) { in lan78xx_set_eee()
1458 phy_ethtool_set_eee(net->phydev, edata); in lan78xx_set_eee()
1460 buf = (u32)edata->tx_lpi_timer; in lan78xx_set_eee()
1468 usb_autopm_put_interface(dev->intf); in lan78xx_set_eee()
1477 mutex_lock(&net->phydev->lock); in lan78xx_get_link()
1478 phy_read_status(net->phydev); in lan78xx_get_link()
1479 link = net->phydev->link; in lan78xx_get_link()
1480 mutex_unlock(&net->phydev->lock); in lan78xx_get_link()
1490 strncpy(info->driver, DRIVER_NAME, sizeof(info->driver)); in lan78xx_get_drvinfo()
1491 usb_make_path(dev->udev, info->bus_info, sizeof(info->bus_info)); in lan78xx_get_drvinfo()
1498 return dev->msg_enable; in lan78xx_get_msglevel()
1505 dev->msg_enable = level; in lan78xx_set_msglevel()
1512 struct phy_device *phydev = net->phydev; in lan78xx_get_link_ksettings()
1515 ret = usb_autopm_get_interface(dev->intf); in lan78xx_get_link_ksettings()
1521 usb_autopm_put_interface(dev->intf); in lan78xx_get_link_ksettings()
1530 struct phy_device *phydev = net->phydev; in lan78xx_set_link_ksettings()
1534 ret = usb_autopm_get_interface(dev->intf); in lan78xx_set_link_ksettings()
1541 if (!cmd->base.autoneg) { in lan78xx_set_link_ksettings()
1549 usb_autopm_put_interface(dev->intf); in lan78xx_set_link_ksettings()
1558 struct phy_device *phydev = net->phydev; in lan78xx_get_pause()
1563 pause->autoneg = dev->fc_autoneg; in lan78xx_get_pause()
1565 if (dev->fc_request_control & FLOW_CTRL_TX) in lan78xx_get_pause()
1566 pause->tx_pause = 1; in lan78xx_get_pause()
1568 if (dev->fc_request_control & FLOW_CTRL_RX) in lan78xx_get_pause()
1569 pause->rx_pause = 1; in lan78xx_get_pause()
1576 struct phy_device *phydev = net->phydev; in lan78xx_set_pause()
1582 if (pause->autoneg && !ecmd.base.autoneg) { in lan78xx_set_pause()
1583 ret = -EINVAL; in lan78xx_set_pause()
1587 dev->fc_request_control = 0; in lan78xx_set_pause()
1588 if (pause->rx_pause) in lan78xx_set_pause()
1589 dev->fc_request_control |= FLOW_CTRL_RX; in lan78xx_set_pause()
1591 if (pause->tx_pause) in lan78xx_set_pause()
1592 dev->fc_request_control |= FLOW_CTRL_TX; in lan78xx_set_pause()
1595 __ETHTOOL_DECLARE_LINK_MODE_MASK(fc) = { 0, }; in lan78xx_set_pause()
1602 mii_adv = (u32)mii_advertise_flowctrl(dev->fc_request_control); in lan78xx_set_pause()
1603 mii_adv_to_linkmode_adv_t(fc, mii_adv); in lan78xx_set_pause()
1604 linkmode_or(ecmd.link_modes.advertising, fc, in lan78xx_set_pause()
1610 dev->fc_autoneg = pause->autoneg; in lan78xx_set_pause()
1619 if (!netdev->phydev) in lan78xx_get_regs_len()
1637 if (!netdev->phydev) in lan78xx_get_regs()
1642 data[i] = phy_read(netdev->phydev, j); in lan78xx_get_regs()
1685 if (!eth_platform_get_mac_address(&dev->udev->dev, addr)) { in lan78xx_init_mac_address()
1687 netif_dbg(dev, ifup, dev->net, in lan78xx_init_mac_address()
1695 netif_dbg(dev, ifup, dev->net, in lan78xx_init_mac_address()
1700 netif_dbg(dev, ifup, dev->net, in lan78xx_init_mac_address()
1715 ether_addr_copy(dev->net->dev_addr, addr); in lan78xx_init_mac_address()
1721 struct lan78xx_net *dev = bus->priv; in lan78xx_mdiobus_read()
1725 ret = usb_autopm_get_interface(dev->intf); in lan78xx_mdiobus_read()
1729 mutex_lock(&dev->phy_mutex); in lan78xx_mdiobus_read()
1749 mutex_unlock(&dev->phy_mutex); in lan78xx_mdiobus_read()
1750 usb_autopm_put_interface(dev->intf); in lan78xx_mdiobus_read()
1758 struct lan78xx_net *dev = bus->priv; in lan78xx_mdiobus_write()
1762 ret = usb_autopm_get_interface(dev->intf); in lan78xx_mdiobus_write()
1766 mutex_lock(&dev->phy_mutex); in lan78xx_mdiobus_write()
1785 mutex_unlock(&dev->phy_mutex); in lan78xx_mdiobus_write()
1786 usb_autopm_put_interface(dev->intf); in lan78xx_mdiobus_write()
1795 dev->mdiobus = mdiobus_alloc(); in lan78xx_mdio_init()
1796 if (!dev->mdiobus) { in lan78xx_mdio_init()
1797 netdev_err(dev->net, "can't allocate MDIO bus\n"); in lan78xx_mdio_init()
1798 return -ENOMEM; in lan78xx_mdio_init()
1801 dev->mdiobus->priv = (void *)dev; in lan78xx_mdio_init()
1802 dev->mdiobus->read = lan78xx_mdiobus_read; in lan78xx_mdio_init()
1803 dev->mdiobus->write = lan78xx_mdiobus_write; in lan78xx_mdio_init()
1804 dev->mdiobus->name = "lan78xx-mdiobus"; in lan78xx_mdio_init()
1805 dev->mdiobus->parent = &dev->udev->dev; in lan78xx_mdio_init()
1807 snprintf(dev->mdiobus->id, MII_BUS_ID_SIZE, "usb-%03d:%03d", in lan78xx_mdio_init()
1808 dev->udev->bus->busnum, dev->udev->devnum); in lan78xx_mdio_init()
1810 switch (dev->chipid) { in lan78xx_mdio_init()
1814 dev->mdiobus->phy_mask = ~(1 << 1); in lan78xx_mdio_init()
1818 dev->mdiobus->phy_mask = ~(0xFF); in lan78xx_mdio_init()
1822 node = of_get_child_by_name(dev->udev->dev.of_node, "mdio"); in lan78xx_mdio_init()
1823 ret = of_mdiobus_register(dev->mdiobus, node); in lan78xx_mdio_init()
1826 netdev_err(dev->net, "can't register MDIO bus\n"); in lan78xx_mdio_init()
1830 netdev_dbg(dev->net, "registered mdiobus bus %s\n", dev->mdiobus->id); in lan78xx_mdio_init()
1833 mdiobus_free(dev->mdiobus); in lan78xx_mdio_init()
1839 mdiobus_unregister(dev->mdiobus); in lan78xx_remove_mdio()
1840 mdiobus_free(dev->mdiobus); in lan78xx_remove_mdio()
1845 struct phy_device *phydev = net->phydev; in lan78xx_link_status_change()
1853 struct irq_domain_data *data = d->host_data; in irq_map()
1856 irq_set_chip_and_handler(irq, data->irqchip, data->irq_handler); in irq_map()
1877 data->irqenable &= ~BIT(irqd_to_hwirq(irqd)); in lan78xx_irq_mask()
1884 data->irqenable |= BIT(irqd_to_hwirq(irqd)); in lan78xx_irq_unmask()
1891 mutex_lock(&data->irq_lock); in lan78xx_irq_bus_lock()
1902 * are only two callbacks executed in non-atomic contex. in lan78xx_irq_bus_sync_unlock()
1905 if (buf != data->irqenable) in lan78xx_irq_bus_sync_unlock()
1906 lan78xx_write_reg(dev, INT_EP_CTL, data->irqenable); in lan78xx_irq_bus_sync_unlock()
1908 mutex_unlock(&data->irq_lock); in lan78xx_irq_bus_sync_unlock()
1912 .name = "lan78xx-irqs",
1927 of_node = dev->udev->dev.parent->of_node; in lan78xx_setup_irq_domain()
1929 mutex_init(&dev->domain_data.irq_lock); in lan78xx_setup_irq_domain()
1932 dev->domain_data.irqenable = buf; in lan78xx_setup_irq_domain()
1934 dev->domain_data.irqchip = &lan78xx_irqchip; in lan78xx_setup_irq_domain()
1935 dev->domain_data.irq_handler = handle_simple_irq; in lan78xx_setup_irq_domain()
1938 &chip_domain_ops, &dev->domain_data); in lan78xx_setup_irq_domain()
1946 ret = -EINVAL; in lan78xx_setup_irq_domain()
1949 ret = -EINVAL; in lan78xx_setup_irq_domain()
1952 dev->domain_data.irqdomain = irqdomain; in lan78xx_setup_irq_domain()
1953 dev->domain_data.phyirq = irqmap; in lan78xx_setup_irq_domain()
1960 if (dev->domain_data.phyirq > 0) { in lan78xx_remove_irq_domain()
1961 irq_dispose_mapping(dev->domain_data.phyirq); in lan78xx_remove_irq_domain()
1963 if (dev->domain_data.irqdomain) in lan78xx_remove_irq_domain()
1964 irq_domain_remove(dev->domain_data.irqdomain); in lan78xx_remove_irq_domain()
1966 dev->domain_data.phyirq = 0; in lan78xx_remove_irq_domain()
1967 dev->domain_data.irqdomain = NULL; in lan78xx_remove_irq_domain()
1973 struct lan78xx_net *dev = netdev_priv(phydev->attached_dev); in lan8835_fixup()
1988 dev->interface = PHY_INTERFACE_MODE_RGMII_TXID; in lan8835_fixup()
1995 struct lan78xx_net *dev = netdev_priv(phydev->attached_dev); in ksz9031rnx_fixup()
2005 dev->interface = PHY_INTERFACE_MODE_RGMII_RXID; in ksz9031rnx_fixup()
2021 phydev = phy_find_first(dev->mdiobus); in lan7801_phy_init()
2023 netdev_dbg(dev->net, "PHY Not Found!! Registering Fixed PHY\n"); in lan7801_phy_init()
2026 netdev_err(dev->net, "No PHY/fixed_PHY found\n"); in lan7801_phy_init()
2029 netdev_dbg(dev->net, "Registered FIXED PHY\n"); in lan7801_phy_init()
2030 dev->interface = PHY_INTERFACE_MODE_RGMII; in lan7801_phy_init()
2039 if (!phydev->drv) { in lan7801_phy_init()
2040 netdev_err(dev->net, "no PHY driver found\n"); in lan7801_phy_init()
2043 dev->interface = PHY_INTERFACE_MODE_RGMII; in lan7801_phy_init()
2044 /* external PHY fixup for KSZ9031RNX */ in lan7801_phy_init()
2048 netdev_err(dev->net, "Failed to register fixup for PHY_KSZ9031RNX\n"); in lan7801_phy_init()
2051 /* external PHY fixup for LAN8835 */ in lan7801_phy_init()
2055 netdev_err(dev->net, "Failed to register fixup for PHY_LAN8835\n"); in lan7801_phy_init()
2058 /* add more external PHY fixup here if needed */ in lan7801_phy_init()
2060 phydev->is_internal = false; in lan7801_phy_init()
2067 __ETHTOOL_DECLARE_LINK_MODE_MASK(fc) = { 0, }; in lan78xx_phy_init()
2072 switch (dev->chipid) { in lan78xx_phy_init()
2076 netdev_err(dev->net, "lan7801: PHY Init Failed"); in lan78xx_phy_init()
2077 return -EIO; in lan78xx_phy_init()
2083 phydev = phy_find_first(dev->mdiobus); in lan78xx_phy_init()
2085 netdev_err(dev->net, "no PHY found\n"); in lan78xx_phy_init()
2086 return -EIO; in lan78xx_phy_init()
2088 phydev->is_internal = true; in lan78xx_phy_init()
2089 dev->interface = PHY_INTERFACE_MODE_GMII; in lan78xx_phy_init()
2093 netdev_err(dev->net, "Unknown CHIP ID found\n"); in lan78xx_phy_init()
2094 return -EIO; in lan78xx_phy_init()
2098 if (dev->domain_data.phyirq > 0) in lan78xx_phy_init()
2099 phydev->irq = dev->domain_data.phyirq; in lan78xx_phy_init()
2101 phydev->irq = PHY_POLL; in lan78xx_phy_init()
2102 netdev_dbg(dev->net, "phydev->irq = %d\n", phydev->irq); in lan78xx_phy_init()
2105 phydev->mdix = ETH_TP_MDI_AUTO; in lan78xx_phy_init()
2107 ret = phy_connect_direct(dev->net, phydev, in lan78xx_phy_init()
2109 dev->interface); in lan78xx_phy_init()
2111 netdev_err(dev->net, "can't attach PHY to %s\n", in lan78xx_phy_init()
2112 dev->mdiobus->id); in lan78xx_phy_init()
2113 if (dev->chipid == ID_REV_CHIP_ID_7801_) { in lan78xx_phy_init()
2123 return -EIO; in lan78xx_phy_init()
2130 dev->fc_request_control = (FLOW_CTRL_RX | FLOW_CTRL_TX); in lan78xx_phy_init()
2132 phydev->advertising); in lan78xx_phy_init()
2134 phydev->advertising); in lan78xx_phy_init()
2135 mii_adv = (u32)mii_advertise_flowctrl(dev->fc_request_control); in lan78xx_phy_init()
2136 mii_adv_to_linkmode_adv_t(fc, mii_adv); in lan78xx_phy_init()
2137 linkmode_or(phydev->advertising, fc, phydev->advertising); in lan78xx_phy_init()
2139 if (phydev->mdio.dev.of_node) { in lan78xx_phy_init()
2143 len = of_property_count_elems_of_size(phydev->mdio.dev.of_node, in lan78xx_phy_init()
2144 "microchip,led-modes", in lan78xx_phy_init()
2163 dev->fc_autoneg = phydev->autoneg; in lan78xx_phy_init()
2202 spin_lock_irqsave(&q->lock, flags); in unlink_urbs()
2209 entry = (struct skb_data *)skb->cb; in unlink_urbs()
2210 if (entry->state != unlink_start) in unlink_urbs()
2215 entry->state = unlink_start; in unlink_urbs()
2216 urb = entry->urb; in unlink_urbs()
2220 * use-after-free problem inside usb_unlink_urb since in unlink_urbs()
2225 spin_unlock_irqrestore(&q->lock, flags); in unlink_urbs()
2226 /* during some PM-driven resume scenarios, in unlink_urbs()
2230 if (ret != -EINPROGRESS && ret != 0) in unlink_urbs()
2231 netdev_dbg(dev->net, "unlink urb err, %d\n", ret); in unlink_urbs()
2235 spin_lock_irqsave(&q->lock, flags); in unlink_urbs()
2237 spin_unlock_irqrestore(&q->lock, flags); in unlink_urbs()
2244 int ll_mtu = new_mtu + netdev->hard_header_len; in lan78xx_change_mtu()
2245 int old_hard_mtu = dev->hard_mtu; in lan78xx_change_mtu()
2246 int old_rx_urb_size = dev->rx_urb_size; in lan78xx_change_mtu()
2248 /* no second zero-length packet read wanted after mtu-sized packets */ in lan78xx_change_mtu()
2249 if ((ll_mtu % dev->maxpacket) == 0) in lan78xx_change_mtu()
2250 return -EDOM; in lan78xx_change_mtu()
2254 netdev->mtu = new_mtu; in lan78xx_change_mtu()
2256 dev->hard_mtu = netdev->mtu + netdev->hard_header_len; in lan78xx_change_mtu()
2257 if (dev->rx_urb_size == old_hard_mtu) { in lan78xx_change_mtu()
2258 dev->rx_urb_size = dev->hard_mtu; in lan78xx_change_mtu()
2259 if (dev->rx_urb_size > old_rx_urb_size) { in lan78xx_change_mtu()
2260 if (netif_running(dev->net)) { in lan78xx_change_mtu()
2261 unlink_urbs(dev, &dev->rxq); in lan78xx_change_mtu()
2262 tasklet_schedule(&dev->bh); in lan78xx_change_mtu()
2277 return -EBUSY; in lan78xx_set_mac_addr()
2279 if (!is_valid_ether_addr(addr->sa_data)) in lan78xx_set_mac_addr()
2280 return -EADDRNOTAVAIL; in lan78xx_set_mac_addr()
2282 ether_addr_copy(netdev->dev_addr, addr->sa_data); in lan78xx_set_mac_addr()
2284 addr_lo = netdev->dev_addr[0] | in lan78xx_set_mac_addr()
2285 netdev->dev_addr[1] << 8 | in lan78xx_set_mac_addr()
2286 netdev->dev_addr[2] << 16 | in lan78xx_set_mac_addr()
2287 netdev->dev_addr[3] << 24; in lan78xx_set_mac_addr()
2288 addr_hi = netdev->dev_addr[4] | in lan78xx_set_mac_addr()
2289 netdev->dev_addr[5] << 8; in lan78xx_set_mac_addr()
2306 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_set_features()
2309 spin_lock_irqsave(&pdata->rfe_ctl_lock, flags); in lan78xx_set_features()
2312 pdata->rfe_ctl |= RFE_CTL_TCPUDP_COE_ | RFE_CTL_IP_COE_; in lan78xx_set_features()
2313 pdata->rfe_ctl |= RFE_CTL_ICMP_COE_ | RFE_CTL_IGMP_COE_; in lan78xx_set_features()
2315 pdata->rfe_ctl &= ~(RFE_CTL_TCPUDP_COE_ | RFE_CTL_IP_COE_); in lan78xx_set_features()
2316 pdata->rfe_ctl &= ~(RFE_CTL_ICMP_COE_ | RFE_CTL_IGMP_COE_); in lan78xx_set_features()
2320 pdata->rfe_ctl |= RFE_CTL_VLAN_STRIP_; in lan78xx_set_features()
2322 pdata->rfe_ctl &= ~RFE_CTL_VLAN_STRIP_; in lan78xx_set_features()
2325 pdata->rfe_ctl |= RFE_CTL_VLAN_FILTER_; in lan78xx_set_features()
2327 pdata->rfe_ctl &= ~RFE_CTL_VLAN_FILTER_; in lan78xx_set_features()
2329 spin_unlock_irqrestore(&pdata->rfe_ctl_lock, flags); in lan78xx_set_features()
2331 lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); in lan78xx_set_features()
2340 struct lan78xx_net *dev = pdata->dev; in lan78xx_deferred_vlan_write()
2343 DP_SEL_VHF_VLAN_LEN, pdata->vlan_table); in lan78xx_deferred_vlan_write()
2350 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_vlan_rx_add_vid()
2357 pdata->vlan_table[vid_dword_index] |= (1 << vid_bit_index); in lan78xx_vlan_rx_add_vid()
2360 schedule_work(&pdata->set_vlan); in lan78xx_vlan_rx_add_vid()
2369 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_vlan_rx_kill_vid()
2376 pdata->vlan_table[vid_dword_index] &= ~(1 << vid_bit_index); in lan78xx_vlan_rx_kill_vid()
2379 schedule_work(&pdata->set_vlan); in lan78xx_vlan_rx_kill_vid()
2425 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_reset()
2440 netdev_warn(dev->net, in lan78xx_reset()
2442 return -EIO; in lan78xx_reset()
2450 dev->chipid = (buf & ID_REV_CHIP_ID_MASK_) >> 16; in lan78xx_reset()
2451 dev->chiprev = buf & ID_REV_CHIP_REV_MASK_; in lan78xx_reset()
2461 if (dev->udev->speed == USB_SPEED_SUPER) { in lan78xx_reset()
2463 dev->rx_urb_size = DEFAULT_BURST_CAP_SIZE; in lan78xx_reset()
2464 dev->rx_qlen = 4; in lan78xx_reset()
2465 dev->tx_qlen = 4; in lan78xx_reset()
2466 } else if (dev->udev->speed == USB_SPEED_HIGH) { in lan78xx_reset()
2468 dev->rx_urb_size = DEFAULT_BURST_CAP_SIZE; in lan78xx_reset()
2469 dev->rx_qlen = RX_MAX_QUEUE_MEMORY / dev->rx_urb_size; in lan78xx_reset()
2470 dev->tx_qlen = RX_MAX_QUEUE_MEMORY / dev->hard_mtu; in lan78xx_reset()
2473 dev->rx_urb_size = DEFAULT_BURST_CAP_SIZE; in lan78xx_reset()
2474 dev->rx_qlen = 4; in lan78xx_reset()
2475 dev->tx_qlen = 4; in lan78xx_reset()
2490 buf = (MAX_RX_FIFO_SIZE - 512) / 512; in lan78xx_reset()
2493 buf = (MAX_TX_FIFO_SIZE - 512) / 512; in lan78xx_reset()
2501 ret = lan78xx_read_reg(dev, RFE_CTL, &pdata->rfe_ctl); in lan78xx_reset()
2502 pdata->rfe_ctl |= RFE_CTL_BCAST_EN_ | RFE_CTL_DA_PERFECT_; in lan78xx_reset()
2503 ret = lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); in lan78xx_reset()
2506 lan78xx_set_features(dev->net, dev->net->features); in lan78xx_reset()
2508 lan78xx_set_multicast(dev->net); in lan78xx_reset()
2520 netdev_warn(dev->net, "timeout waiting for PHY Reset"); in lan78xx_reset()
2521 return -EIO; in lan78xx_reset()
2527 if (dev->chipid == ID_REV_CHIP_ID_7801_) in lan78xx_reset()
2530 if (dev->chipid == ID_REV_CHIP_ID_7800_) { in lan78xx_reset()
2534 netdev_info(dev->net, "No External EEPROM. Setting MAC Speed\n"); in lan78xx_reset()
2549 dev->net->mtu + VLAN_ETH_HLEN); in lan78xx_reset()
2567 /* initialize for stats update in lan78xx_init_stats()
2570 p = (u32 *)&dev->stats.rollover_max; in lan78xx_init_stats()
2571 for (i = 0; i < (sizeof(dev->stats.rollover_max) / (sizeof(u32))); i++) in lan78xx_init_stats()
2574 dev->stats.rollover_max.rx_unicast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
2575 dev->stats.rollover_max.rx_broadcast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
2576 dev->stats.rollover_max.rx_multicast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
2577 dev->stats.rollover_max.eee_rx_lpi_transitions = 0xFFFFFFFF; in lan78xx_init_stats()
2578 dev->stats.rollover_max.eee_rx_lpi_time = 0xFFFFFFFF; in lan78xx_init_stats()
2579 dev->stats.rollover_max.tx_unicast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
2580 dev->stats.rollover_max.tx_broadcast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
2581 dev->stats.rollover_max.tx_multicast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
2582 dev->stats.rollover_max.eee_tx_lpi_transitions = 0xFFFFFFFF; in lan78xx_init_stats()
2583 dev->stats.rollover_max.eee_tx_lpi_time = 0xFFFFFFFF; in lan78xx_init_stats()
2585 set_bit(EVENT_STAT_UPDATE, &dev->flags); in lan78xx_init_stats()
2593 ret = usb_autopm_get_interface(dev->intf); in lan78xx_open()
2597 phy_start(net->phydev); in lan78xx_open()
2599 netif_dbg(dev, ifup, dev->net, "phy initialised successfully"); in lan78xx_open()
2602 if (dev->urb_intr) { in lan78xx_open()
2603 ret = usb_submit_urb(dev->urb_intr, GFP_KERNEL); in lan78xx_open()
2605 netif_err(dev, ifup, dev->net, in lan78xx_open()
2613 set_bit(EVENT_DEV_OPEN, &dev->flags); in lan78xx_open()
2617 dev->link_on = false; in lan78xx_open()
2621 usb_autopm_put_interface(dev->intf); in lan78xx_open()
2636 dev->wait = &unlink_wakeup; in lan78xx_terminate_urbs()
2637 temp = unlink_urbs(dev, &dev->txq) + unlink_urbs(dev, &dev->rxq); in lan78xx_terminate_urbs()
2640 while (!skb_queue_empty(&dev->rxq) && in lan78xx_terminate_urbs()
2641 !skb_queue_empty(&dev->txq) && in lan78xx_terminate_urbs()
2642 !skb_queue_empty(&dev->done)) { in lan78xx_terminate_urbs()
2645 netif_dbg(dev, ifdown, dev->net, in lan78xx_terminate_urbs()
2649 dev->wait = NULL; in lan78xx_terminate_urbs()
2657 if (timer_pending(&dev->stat_monitor)) in lan78xx_stop()
2658 del_timer_sync(&dev->stat_monitor); in lan78xx_stop()
2660 if (net->phydev) in lan78xx_stop()
2661 phy_stop(net->phydev); in lan78xx_stop()
2663 clear_bit(EVENT_DEV_OPEN, &dev->flags); in lan78xx_stop()
2666 netif_info(dev, ifdown, dev->net, in lan78xx_stop()
2668 net->stats.rx_packets, net->stats.tx_packets, in lan78xx_stop()
2669 net->stats.rx_errors, net->stats.tx_errors); in lan78xx_stop()
2673 usb_kill_urb(dev->urb_intr); in lan78xx_stop()
2675 skb_queue_purge(&dev->rxq_pause); in lan78xx_stop()
2681 dev->flags = 0; in lan78xx_stop()
2682 cancel_delayed_work_sync(&dev->wq); in lan78xx_stop()
2683 tasklet_kill(&dev->bh); in lan78xx_stop()
2685 usb_autopm_put_interface(dev->intf); in lan78xx_stop()
2706 tx_cmd_a = (u32)(skb->len & TX_CMD_A_LEN_MASK_) | TX_CMD_A_FCS_; in lan78xx_tx_prep()
2708 if (skb->ip_summed == CHECKSUM_PARTIAL) in lan78xx_tx_prep()
2713 u16 mss = max(skb_shinfo(skb)->gso_size, TX_CMD_B_MSS_MIN_); in lan78xx_tx_prep()
2737 struct skb_data *entry = (struct skb_data *)skb->cb; in defer_bh()
2739 spin_lock_irqsave(&list->lock, flags); in defer_bh()
2740 old_state = entry->state; in defer_bh()
2741 entry->state = state; in defer_bh()
2744 spin_unlock(&list->lock); in defer_bh()
2745 spin_lock(&dev->done.lock); in defer_bh()
2747 __skb_queue_tail(&dev->done, skb); in defer_bh()
2748 if (skb_queue_len(&dev->done) == 1) in defer_bh()
2749 tasklet_schedule(&dev->bh); in defer_bh()
2750 spin_unlock_irqrestore(&dev->done.lock, flags); in defer_bh()
2757 struct sk_buff *skb = (struct sk_buff *)urb->context; in tx_complete()
2758 struct skb_data *entry = (struct skb_data *)skb->cb; in tx_complete()
2759 struct lan78xx_net *dev = entry->dev; in tx_complete()
2761 if (urb->status == 0) { in tx_complete()
2762 dev->net->stats.tx_packets += entry->num_of_packet; in tx_complete()
2763 dev->net->stats.tx_bytes += entry->length; in tx_complete()
2765 dev->net->stats.tx_errors++; in tx_complete()
2767 switch (urb->status) { in tx_complete()
2768 case -EPIPE: in tx_complete()
2772 /* software-driven interface shutdown */ in tx_complete()
2773 case -ECONNRESET: in tx_complete()
2774 case -ESHUTDOWN: in tx_complete()
2777 case -EPROTO: in tx_complete()
2778 case -ETIME: in tx_complete()
2779 case -EILSEQ: in tx_complete()
2780 netif_stop_queue(dev->net); in tx_complete()
2783 netif_dbg(dev, tx_err, dev->net, in tx_complete()
2784 "tx err %d\n", entry->urb->status); in tx_complete()
2789 usb_autopm_put_interface_async(dev->intf); in tx_complete()
2791 defer_bh(dev, skb, &dev->txq, tx_done); in tx_complete()
2797 struct skb_data *entry = (struct skb_data *)newsk->cb; in lan78xx_queue_skb()
2800 entry->state = state; in lan78xx_queue_skb()
2815 skb_queue_tail(&dev->txq_pend, skb2); in lan78xx_start_xmit()
2818 if ((dev->udev->speed < USB_SPEED_SUPER) && in lan78xx_start_xmit()
2819 (skb_queue_len(&dev->txq_pend) > 10)) in lan78xx_start_xmit()
2822 netif_dbg(dev, tx_err, dev->net, in lan78xx_start_xmit()
2824 dev->net->stats.tx_errors++; in lan78xx_start_xmit()
2825 dev->net->stats.tx_dropped++; in lan78xx_start_xmit()
2828 tasklet_schedule(&dev->bh); in lan78xx_start_xmit()
2839 dev->data[0] = (unsigned long)kzalloc(sizeof(*pdata), GFP_KERNEL); in lan78xx_bind()
2841 pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_bind()
2843 netdev_warn(dev->net, "Unable to allocate lan78xx_priv"); in lan78xx_bind()
2844 return -ENOMEM; in lan78xx_bind()
2847 pdata->dev = dev; in lan78xx_bind()
2849 spin_lock_init(&pdata->rfe_ctl_lock); in lan78xx_bind()
2850 mutex_init(&pdata->dataport_mutex); in lan78xx_bind()
2852 INIT_WORK(&pdata->set_multicast, lan78xx_deferred_multicast_write); in lan78xx_bind()
2855 pdata->vlan_table[i] = 0; in lan78xx_bind()
2857 INIT_WORK(&pdata->set_vlan, lan78xx_deferred_vlan_write); in lan78xx_bind()
2859 dev->net->features = 0; in lan78xx_bind()
2862 dev->net->features |= NETIF_F_HW_CSUM; in lan78xx_bind()
2865 dev->net->features |= NETIF_F_RXCSUM; in lan78xx_bind()
2868 dev->net->features |= NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_SG; in lan78xx_bind()
2871 dev->net->features |= NETIF_F_HW_VLAN_CTAG_RX; in lan78xx_bind()
2874 dev->net->features |= NETIF_F_HW_VLAN_CTAG_FILTER; in lan78xx_bind()
2876 dev->net->hw_features = dev->net->features; in lan78xx_bind()
2880 netdev_warn(dev->net, in lan78xx_bind()
2885 dev->net->hard_header_len += TX_OVERHEAD; in lan78xx_bind()
2886 dev->hard_mtu = dev->net->mtu + dev->net->hard_header_len; in lan78xx_bind()
2891 netdev_warn(dev->net, "Registers INIT FAILED...."); in lan78xx_bind()
2897 netdev_warn(dev->net, "MDIO INIT FAILED....."); in lan78xx_bind()
2901 dev->net->flags |= IFF_MULTICAST; in lan78xx_bind()
2903 pdata->wol = WAKE_MAGIC; in lan78xx_bind()
2911 netdev_warn(dev->net, "Bind routine FAILED"); in lan78xx_bind()
2912 cancel_work_sync(&pdata->set_multicast); in lan78xx_bind()
2913 cancel_work_sync(&pdata->set_vlan); in lan78xx_bind()
2920 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_unbind()
2927 cancel_work_sync(&pdata->set_multicast); in lan78xx_unbind()
2928 cancel_work_sync(&pdata->set_vlan); in lan78xx_unbind()
2929 netif_dbg(dev, ifdown, dev->net, "free pdata"); in lan78xx_unbind()
2932 dev->data[0] = 0; in lan78xx_unbind()
2943 if (!(dev->net->features & NETIF_F_RXCSUM) || in lan78xx_rx_csum_offload()
2946 !(dev->net->features & NETIF_F_HW_VLAN_CTAG_RX))) { in lan78xx_rx_csum_offload()
2947 skb->ip_summed = CHECKSUM_NONE; in lan78xx_rx_csum_offload()
2949 skb->csum = ntohs((u16)(rx_cmd_b >> RX_CMD_B_CSUM_SHIFT_)); in lan78xx_rx_csum_offload()
2950 skb->ip_summed = CHECKSUM_COMPLETE; in lan78xx_rx_csum_offload()
2958 if ((dev->net->features & NETIF_F_HW_VLAN_CTAG_RX) && in lan78xx_rx_vlan_offload()
2968 if (test_bit(EVENT_RX_PAUSED, &dev->flags)) { in lan78xx_skb_return()
2969 skb_queue_tail(&dev->rxq_pause, skb); in lan78xx_skb_return()
2973 dev->net->stats.rx_packets++; in lan78xx_skb_return()
2974 dev->net->stats.rx_bytes += skb->len; in lan78xx_skb_return()
2976 skb->protocol = eth_type_trans(skb, dev->net); in lan78xx_skb_return()
2978 netif_dbg(dev, rx_status, dev->net, "< rx, len %zu, type 0x%x\n", in lan78xx_skb_return()
2979 skb->len + sizeof(struct ethhdr), skb->protocol); in lan78xx_skb_return()
2980 memset(skb->cb, 0, sizeof(struct skb_data)); in lan78xx_skb_return()
2987 netif_dbg(dev, rx_err, dev->net, in lan78xx_skb_return()
2993 if (skb->len < dev->net->hard_header_len) in lan78xx_rx()
2996 while (skb->len > 0) { in lan78xx_rx()
3002 rx_cmd_a = get_unaligned_le32(skb->data); in lan78xx_rx()
3005 rx_cmd_b = get_unaligned_le32(skb->data); in lan78xx_rx()
3008 rx_cmd_c = get_unaligned_le16(skb->data); in lan78xx_rx()
3011 packet = skb->data; in lan78xx_rx()
3015 align_count = (4 - ((size + RXW_PADDING) % 4)) % 4; in lan78xx_rx()
3018 netif_dbg(dev, rx_err, dev->net, in lan78xx_rx()
3022 if (skb->len == size) { in lan78xx_rx()
3028 skb_trim(skb, skb->len - 4); /* remove fcs */ in lan78xx_rx()
3029 skb->truesize = size + sizeof(struct sk_buff); in lan78xx_rx()
3036 netdev_warn(dev->net, "Error allocating skb"); in lan78xx_rx()
3040 skb2->len = size; in lan78xx_rx()
3041 skb2->data = packet; in lan78xx_rx()
3047 skb_trim(skb2, skb2->len - 4); /* remove fcs */ in lan78xx_rx()
3048 skb2->truesize = size + sizeof(struct sk_buff); in lan78xx_rx()
3056 if (skb->len) in lan78xx_rx()
3066 dev->net->stats.rx_errors++; in rx_process()
3070 if (skb->len) { in rx_process()
3075 netif_dbg(dev, rx_err, dev->net, "drop\n"); in rx_process()
3076 dev->net->stats.rx_errors++; in rx_process()
3078 skb_queue_tail(&dev->done, skb); in rx_process()
3088 size_t size = dev->rx_urb_size; in rx_submit()
3091 skb = netdev_alloc_skb_ip_align(dev->net, size); in rx_submit()
3094 return -ENOMEM; in rx_submit()
3097 entry = (struct skb_data *)skb->cb; in rx_submit()
3098 entry->urb = urb; in rx_submit()
3099 entry->dev = dev; in rx_submit()
3100 entry->length = 0; in rx_submit()
3102 usb_fill_bulk_urb(urb, dev->udev, dev->pipe_in, in rx_submit()
3103 skb->data, size, rx_complete, skb); in rx_submit()
3105 spin_lock_irqsave(&dev->rxq.lock, lockflags); in rx_submit()
3107 if (netif_device_present(dev->net) && in rx_submit()
3108 netif_running(dev->net) && in rx_submit()
3109 !test_bit(EVENT_RX_HALT, &dev->flags) && in rx_submit()
3110 !test_bit(EVENT_DEV_ASLEEP, &dev->flags)) { in rx_submit()
3114 lan78xx_queue_skb(&dev->rxq, skb, rx_start); in rx_submit()
3116 case -EPIPE: in rx_submit()
3119 case -ENODEV: in rx_submit()
3120 netif_dbg(dev, ifdown, dev->net, "device gone\n"); in rx_submit()
3121 netif_device_detach(dev->net); in rx_submit()
3123 case -EHOSTUNREACH: in rx_submit()
3124 ret = -ENOLINK; in rx_submit()
3127 netif_dbg(dev, rx_err, dev->net, in rx_submit()
3129 tasklet_schedule(&dev->bh); in rx_submit()
3132 netif_dbg(dev, ifdown, dev->net, "rx: stopped\n"); in rx_submit()
3133 ret = -ENOLINK; in rx_submit()
3135 spin_unlock_irqrestore(&dev->rxq.lock, lockflags); in rx_submit()
3145 struct sk_buff *skb = (struct sk_buff *)urb->context; in rx_complete()
3146 struct skb_data *entry = (struct skb_data *)skb->cb; in rx_complete()
3147 struct lan78xx_net *dev = entry->dev; in rx_complete()
3148 int urb_status = urb->status; in rx_complete()
3151 skb_put(skb, urb->actual_length); in rx_complete()
3153 entry->urb = NULL; in rx_complete()
3157 if (skb->len < dev->net->hard_header_len) { in rx_complete()
3159 dev->net->stats.rx_errors++; in rx_complete()
3160 dev->net->stats.rx_length_errors++; in rx_complete()
3161 netif_dbg(dev, rx_err, dev->net, in rx_complete()
3162 "rx length %d\n", skb->len); in rx_complete()
3164 usb_mark_last_busy(dev->udev); in rx_complete()
3166 case -EPIPE: in rx_complete()
3167 dev->net->stats.rx_errors++; in rx_complete()
3170 case -ECONNRESET: /* async unlink */ in rx_complete()
3171 case -ESHUTDOWN: /* hardware gone */ in rx_complete()
3172 netif_dbg(dev, ifdown, dev->net, in rx_complete()
3175 entry->urb = urb; in rx_complete()
3178 case -EPROTO: in rx_complete()
3179 case -ETIME: in rx_complete()
3180 case -EILSEQ: in rx_complete()
3181 dev->net->stats.rx_errors++; in rx_complete()
3183 entry->urb = urb; in rx_complete()
3188 case -EOVERFLOW: in rx_complete()
3189 dev->net->stats.rx_over_errors++; in rx_complete()
3194 dev->net->stats.rx_errors++; in rx_complete()
3195 netif_dbg(dev, rx_err, dev->net, "rx status %d\n", urb_status); in rx_complete()
3199 state = defer_bh(dev, skb, &dev->rxq, state); in rx_complete()
3202 if (netif_running(dev->net) && in rx_complete()
3203 !test_bit(EVENT_RX_HALT, &dev->flags) && in rx_complete()
3210 netif_dbg(dev, rx_err, dev->net, "no read resubmitted\n"); in rx_complete()
3219 struct sk_buff_head *tqp = &dev->txq_pend; in lan78xx_tx_bh()
3229 spin_lock_irqsave(&tqp->lock, flags); in lan78xx_tx_bh()
3237 length = skb->len - TX_OVERHEAD; in lan78xx_tx_bh()
3239 spin_unlock_irqrestore(&tqp->lock, flags); in lan78xx_tx_bh()
3243 if ((skb_totallen + skb->len) > MAX_SINGLE_PACKET_SIZE) in lan78xx_tx_bh()
3245 skb_totallen = skb->len + roundup(skb_totallen, sizeof(u32)); in lan78xx_tx_bh()
3248 spin_unlock_irqrestore(&tqp->lock, flags); in lan78xx_tx_bh()
3260 length += (skb2->len - TX_OVERHEAD); in lan78xx_tx_bh()
3261 memcpy(skb->data + pos, skb2->data, skb2->len); in lan78xx_tx_bh()
3262 pos += roundup(skb2->len, sizeof(u32)); in lan78xx_tx_bh()
3272 entry = (struct skb_data *)skb->cb; in lan78xx_tx_bh()
3273 entry->urb = urb; in lan78xx_tx_bh()
3274 entry->dev = dev; in lan78xx_tx_bh()
3275 entry->length = length; in lan78xx_tx_bh()
3276 entry->num_of_packet = count; in lan78xx_tx_bh()
3278 spin_lock_irqsave(&dev->txq.lock, flags); in lan78xx_tx_bh()
3279 ret = usb_autopm_get_interface_async(dev->intf); in lan78xx_tx_bh()
3281 spin_unlock_irqrestore(&dev->txq.lock, flags); in lan78xx_tx_bh()
3285 usb_fill_bulk_urb(urb, dev->udev, dev->pipe_out, in lan78xx_tx_bh()
3286 skb->data, skb->len, tx_complete, skb); in lan78xx_tx_bh()
3288 if (length % dev->maxpacket == 0) { in lan78xx_tx_bh()
3290 urb->transfer_flags |= URB_ZERO_PACKET; in lan78xx_tx_bh()
3295 if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) { in lan78xx_tx_bh()
3297 usb_anchor_urb(urb, &dev->deferred); in lan78xx_tx_bh()
3299 netif_stop_queue(dev->net); in lan78xx_tx_bh()
3301 spin_unlock_irqrestore(&dev->txq.lock, flags); in lan78xx_tx_bh()
3302 netdev_dbg(dev->net, "Delaying transmission for resumption\n"); in lan78xx_tx_bh()
3310 netif_trans_update(dev->net); in lan78xx_tx_bh()
3311 lan78xx_queue_skb(&dev->txq, skb, tx_start); in lan78xx_tx_bh()
3312 if (skb_queue_len(&dev->txq) >= dev->tx_qlen) in lan78xx_tx_bh()
3313 netif_stop_queue(dev->net); in lan78xx_tx_bh()
3315 case -EPIPE: in lan78xx_tx_bh()
3316 netif_stop_queue(dev->net); in lan78xx_tx_bh()
3318 usb_autopm_put_interface_async(dev->intf); in lan78xx_tx_bh()
3321 usb_autopm_put_interface_async(dev->intf); in lan78xx_tx_bh()
3322 netif_dbg(dev, tx_err, dev->net, in lan78xx_tx_bh()
3327 spin_unlock_irqrestore(&dev->txq.lock, flags); in lan78xx_tx_bh()
3330 netif_dbg(dev, tx_err, dev->net, "drop, code %d\n", ret); in lan78xx_tx_bh()
3332 dev->net->stats.tx_dropped++; in lan78xx_tx_bh()
3337 netif_dbg(dev, tx_queued, dev->net, in lan78xx_tx_bh()
3338 "> tx, len %d, type 0x%x\n", length, skb->protocol); in lan78xx_tx_bh()
3346 if (skb_queue_len(&dev->rxq) < dev->rx_qlen) { in lan78xx_rx_bh()
3348 if (skb_queue_len(&dev->rxq) >= dev->rx_qlen) in lan78xx_rx_bh()
3352 if (rx_submit(dev, urb, GFP_ATOMIC) == -ENOLINK) in lan78xx_rx_bh()
3356 if (skb_queue_len(&dev->rxq) < dev->rx_qlen) in lan78xx_rx_bh()
3357 tasklet_schedule(&dev->bh); in lan78xx_rx_bh()
3359 if (skb_queue_len(&dev->txq) < dev->tx_qlen) in lan78xx_rx_bh()
3360 netif_wake_queue(dev->net); in lan78xx_rx_bh()
3369 while ((skb = skb_dequeue(&dev->done))) { in lan78xx_bh()
3370 entry = (struct skb_data *)(skb->cb); in lan78xx_bh()
3371 switch (entry->state) { in lan78xx_bh()
3373 entry->state = rx_cleanup; in lan78xx_bh()
3377 usb_free_urb(entry->urb); in lan78xx_bh()
3381 usb_free_urb(entry->urb); in lan78xx_bh()
3385 netdev_dbg(dev->net, "skb state %d\n", entry->state); in lan78xx_bh()
3390 if (netif_device_present(dev->net) && netif_running(dev->net)) { in lan78xx_bh()
3391 /* reset update timer delta */ in lan78xx_bh()
3392 if (timer_pending(&dev->stat_monitor) && (dev->delta != 1)) { in lan78xx_bh()
3393 dev->delta = 1; in lan78xx_bh()
3394 mod_timer(&dev->stat_monitor, in lan78xx_bh()
3398 if (!skb_queue_empty(&dev->txq_pend)) in lan78xx_bh()
3401 if (!timer_pending(&dev->delay) && in lan78xx_bh()
3402 !test_bit(EVENT_RX_HALT, &dev->flags)) in lan78xx_bh()
3414 if (test_bit(EVENT_TX_HALT, &dev->flags)) { in lan78xx_delayedwork()
3415 unlink_urbs(dev, &dev->txq); in lan78xx_delayedwork()
3416 status = usb_autopm_get_interface(dev->intf); in lan78xx_delayedwork()
3419 status = usb_clear_halt(dev->udev, dev->pipe_out); in lan78xx_delayedwork()
3420 usb_autopm_put_interface(dev->intf); in lan78xx_delayedwork()
3422 status != -EPIPE && in lan78xx_delayedwork()
3423 status != -ESHUTDOWN) { in lan78xx_delayedwork()
3426 netdev_err(dev->net, in lan78xx_delayedwork()
3430 clear_bit(EVENT_TX_HALT, &dev->flags); in lan78xx_delayedwork()
3431 if (status != -ESHUTDOWN) in lan78xx_delayedwork()
3432 netif_wake_queue(dev->net); in lan78xx_delayedwork()
3435 if (test_bit(EVENT_RX_HALT, &dev->flags)) { in lan78xx_delayedwork()
3436 unlink_urbs(dev, &dev->rxq); in lan78xx_delayedwork()
3437 status = usb_autopm_get_interface(dev->intf); in lan78xx_delayedwork()
3440 status = usb_clear_halt(dev->udev, dev->pipe_in); in lan78xx_delayedwork()
3441 usb_autopm_put_interface(dev->intf); in lan78xx_delayedwork()
3443 status != -EPIPE && in lan78xx_delayedwork()
3444 status != -ESHUTDOWN) { in lan78xx_delayedwork()
3447 netdev_err(dev->net, in lan78xx_delayedwork()
3451 clear_bit(EVENT_RX_HALT, &dev->flags); in lan78xx_delayedwork()
3452 tasklet_schedule(&dev->bh); in lan78xx_delayedwork()
3456 if (test_bit(EVENT_LINK_RESET, &dev->flags)) { in lan78xx_delayedwork()
3459 clear_bit(EVENT_LINK_RESET, &dev->flags); in lan78xx_delayedwork()
3460 status = usb_autopm_get_interface(dev->intf); in lan78xx_delayedwork()
3464 usb_autopm_put_interface(dev->intf); in lan78xx_delayedwork()
3466 netdev_info(dev->net, "link reset failed (%d)\n", in lan78xx_delayedwork()
3469 usb_autopm_put_interface(dev->intf); in lan78xx_delayedwork()
3473 if (test_bit(EVENT_STAT_UPDATE, &dev->flags)) { in lan78xx_delayedwork()
3476 clear_bit(EVENT_STAT_UPDATE, &dev->flags); in lan78xx_delayedwork()
3478 mod_timer(&dev->stat_monitor, in lan78xx_delayedwork()
3479 jiffies + (STAT_UPDATE_TIMER * dev->delta)); in lan78xx_delayedwork()
3481 dev->delta = min((dev->delta * 2), 50); in lan78xx_delayedwork()
3487 struct lan78xx_net *dev = urb->context; in intr_complete()
3488 int status = urb->status; in intr_complete()
3496 /* software-driven interface shutdown */ in intr_complete()
3497 case -ENOENT: /* urb killed */ in intr_complete()
3498 case -ESHUTDOWN: /* hardware gone */ in intr_complete()
3499 netif_dbg(dev, ifdown, dev->net, in intr_complete()
3507 netdev_dbg(dev->net, "intr status %d\n", status); in intr_complete()
3511 if (!netif_running(dev->net)) in intr_complete()
3514 memset(urb->transfer_buffer, 0, urb->transfer_buffer_length); in intr_complete()
3517 netif_err(dev, timer, dev->net, in intr_complete()
3518 "intr resubmit --> %d\n", status); in intr_complete()
3534 net = dev->net; in lan78xx_disconnect()
3535 phydev = net->phydev; in lan78xx_disconnect()
3540 phy_disconnect(net->phydev); in lan78xx_disconnect()
3547 cancel_delayed_work_sync(&dev->wq); in lan78xx_disconnect()
3549 usb_scuttle_anchored_urbs(&dev->deferred); in lan78xx_disconnect()
3553 usb_kill_urb(dev->urb_intr); in lan78xx_disconnect()
3554 usb_free_urb(dev->urb_intr); in lan78xx_disconnect()
3564 unlink_urbs(dev, &dev->txq); in lan78xx_tx_timeout()
3565 tasklet_schedule(&dev->bh); in lan78xx_tx_timeout()
3572 if (skb->len + TX_OVERHEAD > MAX_SINGLE_PACKET_SIZE) in lan78xx_features_check()
3621 dev_err(&intf->dev, "Error: OOM\n"); in lan78xx_probe()
3622 ret = -ENOMEM; in lan78xx_probe()
3627 SET_NETDEV_DEV(netdev, &intf->dev); in lan78xx_probe()
3630 dev->udev = udev; in lan78xx_probe()
3631 dev->intf = intf; in lan78xx_probe()
3632 dev->net = netdev; in lan78xx_probe()
3633 dev->msg_enable = netif_msg_init(msg_level, NETIF_MSG_DRV in lan78xx_probe()
3636 skb_queue_head_init(&dev->rxq); in lan78xx_probe()
3637 skb_queue_head_init(&dev->txq); in lan78xx_probe()
3638 skb_queue_head_init(&dev->done); in lan78xx_probe()
3639 skb_queue_head_init(&dev->rxq_pause); in lan78xx_probe()
3640 skb_queue_head_init(&dev->txq_pend); in lan78xx_probe()
3641 mutex_init(&dev->phy_mutex); in lan78xx_probe()
3643 tasklet_init(&dev->bh, lan78xx_bh, (unsigned long)dev); in lan78xx_probe()
3644 INIT_DELAYED_WORK(&dev->wq, lan78xx_delayedwork); in lan78xx_probe()
3645 init_usb_anchor(&dev->deferred); in lan78xx_probe()
3647 netdev->netdev_ops = &lan78xx_netdev_ops; in lan78xx_probe()
3648 netdev->watchdog_timeo = TX_TIMEOUT_JIFFIES; in lan78xx_probe()
3649 netdev->ethtool_ops = &lan78xx_ethtool_ops; in lan78xx_probe()
3651 dev->delta = 1; in lan78xx_probe()
3652 timer_setup(&dev->stat_monitor, lan78xx_stat_monitor, 0); in lan78xx_probe()
3654 mutex_init(&dev->stats.access_lock); in lan78xx_probe()
3656 if (intf->cur_altsetting->desc.bNumEndpoints < 3) { in lan78xx_probe()
3657 ret = -ENODEV; in lan78xx_probe()
3661 dev->pipe_in = usb_rcvbulkpipe(udev, BULK_IN_PIPE); in lan78xx_probe()
3662 ep_blkin = usb_pipe_endpoint(udev, dev->pipe_in); in lan78xx_probe()
3663 if (!ep_blkin || !usb_endpoint_is_bulk_in(&ep_blkin->desc)) { in lan78xx_probe()
3664 ret = -ENODEV; in lan78xx_probe()
3668 dev->pipe_out = usb_sndbulkpipe(udev, BULK_OUT_PIPE); in lan78xx_probe()
3669 ep_blkout = usb_pipe_endpoint(udev, dev->pipe_out); in lan78xx_probe()
3670 if (!ep_blkout || !usb_endpoint_is_bulk_out(&ep_blkout->desc)) { in lan78xx_probe()
3671 ret = -ENODEV; in lan78xx_probe()
3675 ep_intr = &intf->cur_altsetting->endpoint[2]; in lan78xx_probe()
3676 if (!usb_endpoint_is_int_in(&ep_intr->desc)) { in lan78xx_probe()
3677 ret = -ENODEV; in lan78xx_probe()
3681 dev->pipe_intr = usb_rcvintpipe(dev->udev, in lan78xx_probe()
3682 usb_endpoint_num(&ep_intr->desc)); in lan78xx_probe()
3688 if (netdev->mtu > (dev->hard_mtu - netdev->hard_header_len)) in lan78xx_probe()
3689 netdev->mtu = dev->hard_mtu - netdev->hard_header_len; in lan78xx_probe()
3691 /* MTU range: 68 - 9000 */ in lan78xx_probe()
3692 netdev->max_mtu = MAX_SINGLE_PACKET_SIZE; in lan78xx_probe()
3693 netif_set_gso_max_size(netdev, MAX_SINGLE_PACKET_SIZE - MAX_HEADER); in lan78xx_probe()
3695 period = ep_intr->desc.bInterval; in lan78xx_probe()
3696 maxp = usb_maxpacket(dev->udev, dev->pipe_intr, 0); in lan78xx_probe()
3699 dev->urb_intr = usb_alloc_urb(0, GFP_KERNEL); in lan78xx_probe()
3700 if (!dev->urb_intr) { in lan78xx_probe()
3701 ret = -ENOMEM; in lan78xx_probe()
3705 usb_fill_int_urb(dev->urb_intr, dev->udev, in lan78xx_probe()
3706 dev->pipe_intr, buf, maxp, in lan78xx_probe()
3708 dev->urb_intr->transfer_flags |= URB_FREE_BUFFER; in lan78xx_probe()
3712 dev->maxpacket = usb_maxpacket(dev->udev, dev->pipe_out, 1); in lan78xx_probe()
3715 if (dev->maxpacket == 0) { in lan78xx_probe()
3716 ret = -ENODEV; in lan78xx_probe()
3720 /* driver requires remote-wakeup capability during autosuspend. */ in lan78xx_probe()
3721 intf->needs_remote_wakeup = 1; in lan78xx_probe()
3735 ret = device_set_wakeup_enable(&udev->dev, true); in lan78xx_probe()
3740 pm_runtime_set_autosuspend_delay(&udev->dev, in lan78xx_probe()
3746 phy_disconnect(netdev->phydev); in lan78xx_probe()
3748 usb_free_urb(dev->urb_intr); in lan78xx_probe()
3929 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_suspend()
3933 if (!dev->suspend_count++) { in lan78xx_suspend()
3934 spin_lock_irq(&dev->txq.lock); in lan78xx_suspend()
3936 if ((skb_queue_len(&dev->txq) || in lan78xx_suspend()
3937 skb_queue_len(&dev->txq_pend)) && in lan78xx_suspend()
3939 spin_unlock_irq(&dev->txq.lock); in lan78xx_suspend()
3940 ret = -EBUSY; in lan78xx_suspend()
3943 set_bit(EVENT_DEV_ASLEEP, &dev->flags); in lan78xx_suspend()
3944 spin_unlock_irq(&dev->txq.lock); in lan78xx_suspend()
3956 netif_device_detach(dev->net); in lan78xx_suspend()
3958 usb_kill_urb(dev->urb_intr); in lan78xx_suspend()
3961 netif_device_attach(dev->net); in lan78xx_suspend()
3964 if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) { in lan78xx_suspend()
3965 del_timer(&dev->stat_monitor); in lan78xx_suspend()
4010 lan78xx_set_suspend(dev, pdata->wol); in lan78xx_suspend()
4027 if (!timer_pending(&dev->stat_monitor)) { in lan78xx_resume()
4028 dev->delta = 1; in lan78xx_resume()
4029 mod_timer(&dev->stat_monitor, in lan78xx_resume()
4033 if (!--dev->suspend_count) { in lan78xx_resume()
4035 if (dev->urb_intr && test_bit(EVENT_DEV_OPEN, &dev->flags)) in lan78xx_resume()
4036 usb_submit_urb(dev->urb_intr, GFP_NOIO); in lan78xx_resume()
4038 spin_lock_irq(&dev->txq.lock); in lan78xx_resume()
4039 while ((res = usb_get_from_anchor(&dev->deferred))) { in lan78xx_resume()
4040 skb = (struct sk_buff *)res->context; in lan78xx_resume()
4045 usb_autopm_put_interface_async(dev->intf); in lan78xx_resume()
4047 netif_trans_update(dev->net); in lan78xx_resume()
4048 lan78xx_queue_skb(&dev->txq, skb, tx_start); in lan78xx_resume()
4052 clear_bit(EVENT_DEV_ASLEEP, &dev->flags); in lan78xx_resume()
4053 spin_unlock_irq(&dev->txq.lock); in lan78xx_resume()
4055 if (test_bit(EVENT_DEV_OPEN, &dev->flags)) { in lan78xx_resume()
4056 if (!(skb_queue_len(&dev->txq) >= dev->tx_qlen)) in lan78xx_resume()
4057 netif_start_queue(dev->net); in lan78xx_resume()
4058 tasklet_schedule(&dev->bh); in lan78xx_resume()
4092 phy_start(dev->net->phydev); in lan78xx_reset_resume()
4111 /* ATM2-AF USB Gigabit Ethernet Device */