• Home
  • Raw
  • Download

Lines Matching +full:eee +full:- +full:broken +full:- +full:1000 +full:t

1 // SPDX-License-Identifier: GPL-2.0+
88 #define DEFAULT_AUTOSUSPEND_DELAY (10 * 1000)
91 #define STAT_UPDATE_TIMER (1 * 1000)
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",
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",
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()
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()
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()
959 return -EIO; 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()
1196 if (ecmd.base.speed == 1000) { 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()
1241 /* some work can't be done in tasklets, so we use keventd
1244 * but tasklet_schedule() doesn't. hope the failure is rare.
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()
1858 if (!phydev->autoneg && (phydev->speed == 100)) { 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()
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()
2158 /* MAC doesn't support 1000T Half */ 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()
2536 /* Don't need rfe_ctl_lock during initialisation */ 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()
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()
2714 * can't flush_scheduled_work() until we drop rtnl (later), 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()
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()
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()
3484 "can't clear rx halt, status %d\n", 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()
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()
3633 static void lan78xx_stat_monitor(struct timer_list *t) in lan78xx_stat_monitor() argument
3635 struct lan78xx_net *dev = from_timer(dev, t, stat_monitor); in lan78xx_stat_monitor()
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()
3765 netif_err(dev, probe, netdev, "couldn't register the device\n"); 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()
3972 /* don't autosuspend while transmitting */ 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()
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 */