Lines Matching +full:eee +full:- +full:broken +full:- +full:100 +full:tx
1 // SPDX-License-Identifier: GPL-2.0+
139 "RX 65 - 127 Byte Frames",
140 "RX 128 - 255 Byte Frames",
141 "RX 256 - 511 Bytes Frames",
142 "RX 512 - 1023 Byte Frames",
143 "RX 1024 - 1518 Byte Frames",
145 "EEE RX LPI Transitions",
146 "EEE RX LPI Time",
147 "TX FCS Errors",
148 "TX Excess Deferral Errors",
149 "TX Carrier Errors",
150 "TX Bad Byte Count",
151 "TX Single Collisions",
152 "TX Multiple Collisions",
153 "TX Excessive Collision",
154 "TX Late Collisions",
155 "TX Unicast Byte Count",
156 "TX Broadcast Byte Count",
157 "TX Multicast Byte Count",
158 "TX Unicast Frames",
159 "TX Broadcast Frames",
160 "TX Multicast Frames",
161 "TX Pause Frames",
162 "TX 64 Byte Frames",
163 "TX 65 - 127 Byte Frames",
164 "TX 128 - 255 Byte Frames",
165 "TX 256 - 511 Bytes Frames",
166 "TX 512 - 1023 Byte Frames",
167 "TX 1024 - 1518 Byte Frames",
168 "TX Greater 1518 Byte Frames",
169 "EEE TX LPI Transitions",
170 "EEE TX LPI Time",
322 struct skb_data { /* skb->cb is one of these */
424 static int msg_level = -1;
434 return -ENOMEM; in lan78xx_read_reg()
436 ret = usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0), in lan78xx_read_reg()
444 netdev_warn(dev->net, in lan78xx_read_reg()
460 return -ENOMEM; in lan78xx_write_reg()
465 ret = usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, 0), in lan78xx_write_reg()
470 netdev_warn(dev->net, in lan78xx_write_reg()
491 return -ENOMEM; in lan78xx_read_stats()
493 ret = usb_control_msg(dev->udev, in lan78xx_read_stats()
494 usb_rcvctrlpipe(dev->udev, 0), in lan78xx_read_stats()
510 netdev_warn(dev->net, in lan78xx_read_stats()
520 if (struct1->member < dev_stats.saved.member) \
527 check_counter_rollover(stats, dev->stats, rx_fcs_errors); in lan78xx_check_stat_rollover()
528 check_counter_rollover(stats, dev->stats, rx_alignment_errors); in lan78xx_check_stat_rollover()
529 check_counter_rollover(stats, dev->stats, rx_fragment_errors); in lan78xx_check_stat_rollover()
530 check_counter_rollover(stats, dev->stats, rx_jabber_errors); in lan78xx_check_stat_rollover()
531 check_counter_rollover(stats, dev->stats, rx_undersize_frame_errors); in lan78xx_check_stat_rollover()
532 check_counter_rollover(stats, dev->stats, rx_oversize_frame_errors); in lan78xx_check_stat_rollover()
533 check_counter_rollover(stats, dev->stats, rx_dropped_frames); in lan78xx_check_stat_rollover()
534 check_counter_rollover(stats, dev->stats, rx_unicast_byte_count); in lan78xx_check_stat_rollover()
535 check_counter_rollover(stats, dev->stats, rx_broadcast_byte_count); in lan78xx_check_stat_rollover()
536 check_counter_rollover(stats, dev->stats, rx_multicast_byte_count); in lan78xx_check_stat_rollover()
537 check_counter_rollover(stats, dev->stats, rx_unicast_frames); in lan78xx_check_stat_rollover()
538 check_counter_rollover(stats, dev->stats, rx_broadcast_frames); in lan78xx_check_stat_rollover()
539 check_counter_rollover(stats, dev->stats, rx_multicast_frames); in lan78xx_check_stat_rollover()
540 check_counter_rollover(stats, dev->stats, rx_pause_frames); in lan78xx_check_stat_rollover()
541 check_counter_rollover(stats, dev->stats, rx_64_byte_frames); in lan78xx_check_stat_rollover()
542 check_counter_rollover(stats, dev->stats, rx_65_127_byte_frames); in lan78xx_check_stat_rollover()
543 check_counter_rollover(stats, dev->stats, rx_128_255_byte_frames); in lan78xx_check_stat_rollover()
544 check_counter_rollover(stats, dev->stats, rx_256_511_bytes_frames); in lan78xx_check_stat_rollover()
545 check_counter_rollover(stats, dev->stats, rx_512_1023_byte_frames); in lan78xx_check_stat_rollover()
546 check_counter_rollover(stats, dev->stats, rx_1024_1518_byte_frames); in lan78xx_check_stat_rollover()
547 check_counter_rollover(stats, dev->stats, rx_greater_1518_byte_frames); in lan78xx_check_stat_rollover()
548 check_counter_rollover(stats, dev->stats, eee_rx_lpi_transitions); in lan78xx_check_stat_rollover()
549 check_counter_rollover(stats, dev->stats, eee_rx_lpi_time); in lan78xx_check_stat_rollover()
550 check_counter_rollover(stats, dev->stats, tx_fcs_errors); in lan78xx_check_stat_rollover()
551 check_counter_rollover(stats, dev->stats, tx_excess_deferral_errors); in lan78xx_check_stat_rollover()
552 check_counter_rollover(stats, dev->stats, tx_carrier_errors); in lan78xx_check_stat_rollover()
553 check_counter_rollover(stats, dev->stats, tx_bad_byte_count); in lan78xx_check_stat_rollover()
554 check_counter_rollover(stats, dev->stats, tx_single_collisions); in lan78xx_check_stat_rollover()
555 check_counter_rollover(stats, dev->stats, tx_multiple_collisions); in lan78xx_check_stat_rollover()
556 check_counter_rollover(stats, dev->stats, tx_excessive_collision); in lan78xx_check_stat_rollover()
557 check_counter_rollover(stats, dev->stats, tx_late_collisions); in lan78xx_check_stat_rollover()
558 check_counter_rollover(stats, dev->stats, tx_unicast_byte_count); in lan78xx_check_stat_rollover()
559 check_counter_rollover(stats, dev->stats, tx_broadcast_byte_count); in lan78xx_check_stat_rollover()
560 check_counter_rollover(stats, dev->stats, tx_multicast_byte_count); in lan78xx_check_stat_rollover()
561 check_counter_rollover(stats, dev->stats, tx_unicast_frames); in lan78xx_check_stat_rollover()
562 check_counter_rollover(stats, dev->stats, tx_broadcast_frames); in lan78xx_check_stat_rollover()
563 check_counter_rollover(stats, dev->stats, tx_multicast_frames); in lan78xx_check_stat_rollover()
564 check_counter_rollover(stats, dev->stats, tx_pause_frames); in lan78xx_check_stat_rollover()
565 check_counter_rollover(stats, dev->stats, tx_64_byte_frames); in lan78xx_check_stat_rollover()
566 check_counter_rollover(stats, dev->stats, tx_65_127_byte_frames); in lan78xx_check_stat_rollover()
567 check_counter_rollover(stats, dev->stats, tx_128_255_byte_frames); in lan78xx_check_stat_rollover()
568 check_counter_rollover(stats, dev->stats, tx_256_511_bytes_frames); in lan78xx_check_stat_rollover()
569 check_counter_rollover(stats, dev->stats, tx_512_1023_byte_frames); in lan78xx_check_stat_rollover()
570 check_counter_rollover(stats, dev->stats, tx_1024_1518_byte_frames); in lan78xx_check_stat_rollover()
571 check_counter_rollover(stats, dev->stats, tx_greater_1518_byte_frames); in lan78xx_check_stat_rollover()
572 check_counter_rollover(stats, dev->stats, eee_tx_lpi_transitions); in lan78xx_check_stat_rollover()
573 check_counter_rollover(stats, dev->stats, eee_tx_lpi_time); in lan78xx_check_stat_rollover()
575 memcpy(&dev->stats.saved, stats, sizeof(struct lan78xx_statstage)); in lan78xx_check_stat_rollover()
585 if (usb_autopm_get_interface(dev->intf) < 0) in lan78xx_update_stats()
589 count = (u32 *)&dev->stats.rollover_count; in lan78xx_update_stats()
590 max = (u32 *)&dev->stats.rollover_max; in lan78xx_update_stats()
591 data = (u64 *)&dev->stats.curr_stat; in lan78xx_update_stats()
593 mutex_lock(&dev->stats.access_lock); in lan78xx_update_stats()
601 mutex_unlock(&dev->stats.access_lock); in lan78xx_update_stats()
603 usb_autopm_put_interface(dev->intf); in lan78xx_update_stats()
616 return -EIO; in lan78xx_phy_wait_not_busy()
622 return -EIO; in lan78xx_phy_wait_not_busy()
649 return -EIO; in lan78xx_wait_eeprom()
654 usleep_range(40, 100); in lan78xx_wait_eeprom()
658 netdev_warn(dev->net, "EEPROM read operation timeout"); in lan78xx_wait_eeprom()
659 return -EIO; in lan78xx_wait_eeprom()
674 return -EIO; in lan78xx_eeprom_confirm_not_busy()
679 usleep_range(40, 100); in lan78xx_eeprom_confirm_not_busy()
682 netdev_warn(dev->net, "EEPROM is busy"); in lan78xx_eeprom_confirm_not_busy()
683 return -EIO; in lan78xx_eeprom_confirm_not_busy()
699 if (dev->chipid == ID_REV_CHIP_ID_7800_) { in lan78xx_read_raw_eeprom()
713 retval = -EIO; in lan78xx_read_raw_eeprom()
723 retval = -EIO; in lan78xx_read_raw_eeprom()
733 if (dev->chipid == ID_REV_CHIP_ID_7800_) in lan78xx_read_raw_eeprom()
749 ret = -EINVAL; in lan78xx_read_eeprom()
767 if (dev->chipid == ID_REV_CHIP_ID_7800_) { in lan78xx_write_raw_eeprom()
780 retval = -EIO; in lan78xx_write_raw_eeprom()
793 retval = -EIO; in lan78xx_write_raw_eeprom()
802 retval = -EIO; in lan78xx_write_raw_eeprom()
815 if (dev->chipid == ID_REV_CHIP_ID_7800_) in lan78xx_write_raw_eeprom()
840 netdev_warn(dev->net, in lan78xx_read_raw_otp()
842 return -EIO; in lan78xx_read_raw_otp()
861 netdev_warn(dev->net, in lan78xx_read_raw_otp()
863 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()
952 for (i = 0; i < 100; i++) { in lan78xx_dataport_wait_not_busy()
957 return -EIO; in lan78xx_dataport_wait_not_busy()
962 usleep_range(40, 100); 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()
1043 netif_dbg(dev, drv, dev->net, "deferred multicast write 0x%08x\n", in lan78xx_deferred_multicast_write()
1044 pdata->rfe_ctl); in lan78xx_deferred_multicast_write()
1047 DP_SEL_VHF_HASH_LEN, pdata->mchash_table); in lan78xx_deferred_multicast_write()
1052 pdata->pfilter_table[i][1]); in lan78xx_deferred_multicast_write()
1054 pdata->pfilter_table[i][0]); in lan78xx_deferred_multicast_write()
1057 ret = lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); in lan78xx_deferred_multicast_write()
1063 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_set_multicast()
1067 spin_lock_irqsave(&pdata->rfe_ctl_lock, flags); in lan78xx_set_multicast()
1069 pdata->rfe_ctl &= ~(RFE_CTL_UCAST_EN_ | RFE_CTL_MCAST_EN_ | in lan78xx_set_multicast()
1073 pdata->mchash_table[i] = 0; in lan78xx_set_multicast()
1076 pdata->pfilter_table[i][0] = in lan78xx_set_multicast()
1077 pdata->pfilter_table[i][1] = 0; in lan78xx_set_multicast()
1080 pdata->rfe_ctl |= RFE_CTL_BCAST_EN_; in lan78xx_set_multicast()
1082 if (dev->net->flags & IFF_PROMISC) { in lan78xx_set_multicast()
1083 netif_dbg(dev, drv, dev->net, "promiscuous mode enabled"); in lan78xx_set_multicast()
1084 pdata->rfe_ctl |= RFE_CTL_MCAST_EN_ | RFE_CTL_UCAST_EN_; in lan78xx_set_multicast()
1086 if (dev->net->flags & IFF_ALLMULTI) { in lan78xx_set_multicast()
1087 netif_dbg(dev, drv, dev->net, in lan78xx_set_multicast()
1089 pdata->rfe_ctl |= RFE_CTL_MCAST_EN_; in lan78xx_set_multicast()
1093 if (netdev_mc_count(dev->net)) { in lan78xx_set_multicast()
1097 netif_dbg(dev, drv, dev->net, "receive multicast hash filter"); in lan78xx_set_multicast()
1099 pdata->rfe_ctl |= RFE_CTL_DA_PERFECT_; in lan78xx_set_multicast()
1105 lan78xx_set_addr_filter(pdata, i, ha->addr); in lan78xx_set_multicast()
1107 u32 bitnum = lan78xx_hash(ha->addr); in lan78xx_set_multicast()
1109 pdata->mchash_table[bitnum / 32] |= in lan78xx_set_multicast()
1111 pdata->rfe_ctl |= RFE_CTL_MCAST_HASH_; in lan78xx_set_multicast()
1117 spin_unlock_irqrestore(&pdata->rfe_ctl_lock, flags); in lan78xx_set_multicast()
1120 schedule_work(&pdata->set_multicast); in lan78xx_set_multicast()
1130 if (dev->fc_autoneg) in lan78xx_update_flowcontrol()
1133 cap = dev->fc_request_control; in lan78xx_update_flowcontrol()
1141 if (dev->udev->speed == USB_SPEED_SUPER) in lan78xx_update_flowcontrol()
1143 else if (dev->udev->speed == USB_SPEED_HIGH) in lan78xx_update_flowcontrol()
1146 netif_dbg(dev, link, dev->net, "rx pause %s, tx pause %s", in lan78xx_update_flowcontrol()
1160 struct phy_device *phydev = dev->net->phydev; in lan78xx_link_reset()
1168 return -EIO; in lan78xx_link_reset()
1170 mutex_lock(&phydev->lock); in lan78xx_link_reset()
1172 link = phydev->link; in lan78xx_link_reset()
1173 mutex_unlock(&phydev->lock); in lan78xx_link_reset()
1175 if (!link && dev->link_on) { in lan78xx_link_reset()
1176 dev->link_on = false; in lan78xx_link_reset()
1181 return -EIO; in lan78xx_link_reset()
1185 return -EIO; in lan78xx_link_reset()
1187 del_timer(&dev->stat_monitor); in lan78xx_link_reset()
1188 } else if (link && !dev->link_on) { in lan78xx_link_reset()
1189 dev->link_on = true; in lan78xx_link_reset()
1193 if (dev->udev->speed == USB_SPEED_SUPER) { in lan78xx_link_reset()
1220 netif_dbg(dev, link, dev->net, in lan78xx_link_reset()
1227 if (!timer_pending(&dev->stat_monitor)) { in lan78xx_link_reset()
1228 dev->delta = 1; in lan78xx_link_reset()
1229 mod_timer(&dev->stat_monitor, in lan78xx_link_reset()
1233 tasklet_schedule(&dev->bh); in lan78xx_link_reset()
1246 set_bit(work, &dev->flags); in lan78xx_defer_kevent()
1247 if (!schedule_delayed_work(&dev->wq, 0)) in lan78xx_defer_kevent()
1248 netdev_err(dev->net, "kevent %d may have been dropped\n", work); in lan78xx_defer_kevent()
1255 if (urb->actual_length != 4) { in lan78xx_status()
1256 netdev_warn(dev->net, in lan78xx_status()
1257 "unexpected urb length %d", urb->actual_length); in lan78xx_status()
1261 intdata = get_unaligned_le32(urb->transfer_buffer); in lan78xx_status()
1264 netif_dbg(dev, link, dev->net, "PHY INTR: 0x%08x\n", intdata); in lan78xx_status()
1267 if (dev->domain_data.phyirq > 0) { in lan78xx_status()
1269 generic_handle_irq(dev->domain_data.phyirq); in lan78xx_status()
1273 netdev_warn(dev->net, in lan78xx_status()
1288 ret = usb_autopm_get_interface(dev->intf); in lan78xx_ethtool_get_eeprom()
1292 ee->magic = LAN78XX_EEPROM_MAGIC; in lan78xx_ethtool_get_eeprom()
1294 ret = lan78xx_read_raw_eeprom(dev, ee->offset, ee->len, data); in lan78xx_ethtool_get_eeprom()
1296 usb_autopm_put_interface(dev->intf); in lan78xx_ethtool_get_eeprom()
1307 ret = usb_autopm_get_interface(dev->intf); in lan78xx_ethtool_set_eeprom()
1314 if (ee->magic == LAN78XX_EEPROM_MAGIC) in lan78xx_ethtool_set_eeprom()
1315 ret = lan78xx_write_raw_eeprom(dev, ee->offset, ee->len, data); in lan78xx_ethtool_set_eeprom()
1316 else if ((ee->magic == LAN78XX_OTP_MAGIC) && in lan78xx_ethtool_set_eeprom()
1317 (ee->offset == 0) && in lan78xx_ethtool_set_eeprom()
1318 (ee->len == 512) && in lan78xx_ethtool_set_eeprom()
1320 ret = lan78xx_write_raw_otp(dev, ee->offset, ee->len, data); in lan78xx_ethtool_set_eeprom()
1322 usb_autopm_put_interface(dev->intf); in lan78xx_ethtool_set_eeprom()
1339 return -EOPNOTSUPP; in lan78xx_get_sset_count()
1349 mutex_lock(&dev->stats.access_lock); in lan78xx_get_stats()
1350 memcpy(data, &dev->stats.curr_stat, sizeof(dev->stats.curr_stat)); in lan78xx_get_stats()
1351 mutex_unlock(&dev->stats.access_lock); in lan78xx_get_stats()
1360 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_get_wol()
1362 if (usb_autopm_get_interface(dev->intf) < 0) in lan78xx_get_wol()
1367 wol->supported = 0; in lan78xx_get_wol()
1368 wol->wolopts = 0; in lan78xx_get_wol()
1371 wol->supported = WAKE_ALL; in lan78xx_get_wol()
1372 wol->wolopts = pdata->wol; in lan78xx_get_wol()
1374 wol->supported = 0; in lan78xx_get_wol()
1375 wol->wolopts = 0; in lan78xx_get_wol()
1379 usb_autopm_put_interface(dev->intf); in lan78xx_get_wol()
1386 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_set_wol()
1389 ret = usb_autopm_get_interface(dev->intf); in lan78xx_set_wol()
1393 if (wol->wolopts & ~WAKE_ALL) in lan78xx_set_wol()
1394 return -EINVAL; in lan78xx_set_wol()
1396 pdata->wol = wol->wolopts; in lan78xx_set_wol()
1398 device_set_wakeup_enable(&dev->udev->dev, (bool)wol->wolopts); in lan78xx_set_wol()
1400 phy_ethtool_set_wol(netdev->phydev, wol); in lan78xx_set_wol()
1402 usb_autopm_put_interface(dev->intf); in lan78xx_set_wol()
1410 struct phy_device *phydev = net->phydev; in lan78xx_get_eee()
1414 ret = usb_autopm_get_interface(dev->intf); in lan78xx_get_eee()
1424 edata->eee_enabled = true; in lan78xx_get_eee()
1425 edata->eee_active = !!(edata->advertised & in lan78xx_get_eee()
1426 edata->lp_advertised); in lan78xx_get_eee()
1427 edata->tx_lpi_enabled = true; in lan78xx_get_eee()
1430 edata->tx_lpi_timer = buf; in lan78xx_get_eee()
1432 edata->eee_enabled = false; in lan78xx_get_eee()
1433 edata->eee_active = false; in lan78xx_get_eee()
1434 edata->tx_lpi_enabled = false; in lan78xx_get_eee()
1435 edata->tx_lpi_timer = 0; in lan78xx_get_eee()
1440 usb_autopm_put_interface(dev->intf); in lan78xx_get_eee()
1451 ret = usb_autopm_get_interface(dev->intf); in lan78xx_set_eee()
1455 if (edata->eee_enabled) { in lan78xx_set_eee()
1460 phy_ethtool_set_eee(net->phydev, edata); in lan78xx_set_eee()
1462 buf = (u32)edata->tx_lpi_timer; in lan78xx_set_eee()
1470 usb_autopm_put_interface(dev->intf); in lan78xx_set_eee()
1479 mutex_lock(&net->phydev->lock); in lan78xx_get_link()
1480 phy_read_status(net->phydev); in lan78xx_get_link()
1481 link = net->phydev->link; in lan78xx_get_link()
1482 mutex_unlock(&net->phydev->lock); in lan78xx_get_link()
1492 strncpy(info->driver, DRIVER_NAME, sizeof(info->driver)); in lan78xx_get_drvinfo()
1493 usb_make_path(dev->udev, info->bus_info, sizeof(info->bus_info)); in lan78xx_get_drvinfo()
1500 return dev->msg_enable; in lan78xx_get_msglevel()
1507 dev->msg_enable = level; in lan78xx_set_msglevel()
1514 struct phy_device *phydev = net->phydev; in lan78xx_get_link_ksettings()
1517 ret = usb_autopm_get_interface(dev->intf); in lan78xx_get_link_ksettings()
1523 usb_autopm_put_interface(dev->intf); in lan78xx_get_link_ksettings()
1532 struct phy_device *phydev = net->phydev; in lan78xx_set_link_ksettings()
1536 ret = usb_autopm_get_interface(dev->intf); in lan78xx_set_link_ksettings()
1543 if (!cmd->base.autoneg) { in lan78xx_set_link_ksettings()
1551 usb_autopm_put_interface(dev->intf); in lan78xx_set_link_ksettings()
1560 struct phy_device *phydev = net->phydev; in lan78xx_get_pause()
1565 pause->autoneg = dev->fc_autoneg; in lan78xx_get_pause()
1567 if (dev->fc_request_control & FLOW_CTRL_TX) in lan78xx_get_pause()
1568 pause->tx_pause = 1; in lan78xx_get_pause()
1570 if (dev->fc_request_control & FLOW_CTRL_RX) in lan78xx_get_pause()
1571 pause->rx_pause = 1; in lan78xx_get_pause()
1578 struct phy_device *phydev = net->phydev; in lan78xx_set_pause()
1584 if (pause->autoneg && !ecmd.base.autoneg) { in lan78xx_set_pause()
1585 ret = -EINVAL; in lan78xx_set_pause()
1589 dev->fc_request_control = 0; in lan78xx_set_pause()
1590 if (pause->rx_pause) in lan78xx_set_pause()
1591 dev->fc_request_control |= FLOW_CTRL_RX; in lan78xx_set_pause()
1593 if (pause->tx_pause) in lan78xx_set_pause()
1594 dev->fc_request_control |= FLOW_CTRL_TX; in lan78xx_set_pause()
1604 mii_adv = (u32)mii_advertise_flowctrl(dev->fc_request_control); in lan78xx_set_pause()
1612 dev->fc_autoneg = pause->autoneg; in lan78xx_set_pause()
1621 if (!netdev->phydev) in lan78xx_get_regs_len()
1639 if (!netdev->phydev) in lan78xx_get_regs()
1644 data[i] = phy_read(netdev->phydev, j); in lan78xx_get_regs()
1688 if (!eth_platform_get_mac_address(&dev->udev->dev, addr)) { in lan78xx_init_mac_address()
1690 netif_dbg(dev, ifup, dev->net, in lan78xx_init_mac_address()
1698 netif_dbg(dev, ifup, dev->net, in lan78xx_init_mac_address()
1703 netif_dbg(dev, ifup, dev->net, in lan78xx_init_mac_address()
1718 ether_addr_copy(dev->net->dev_addr, addr); in lan78xx_init_mac_address()
1724 struct lan78xx_net *dev = bus->priv; in lan78xx_mdiobus_read()
1728 ret = usb_autopm_get_interface(dev->intf); in lan78xx_mdiobus_read()
1732 mutex_lock(&dev->phy_mutex); in lan78xx_mdiobus_read()
1752 mutex_unlock(&dev->phy_mutex); in lan78xx_mdiobus_read()
1753 usb_autopm_put_interface(dev->intf); in lan78xx_mdiobus_read()
1761 struct lan78xx_net *dev = bus->priv; in lan78xx_mdiobus_write()
1765 ret = usb_autopm_get_interface(dev->intf); in lan78xx_mdiobus_write()
1769 mutex_lock(&dev->phy_mutex); in lan78xx_mdiobus_write()
1788 mutex_unlock(&dev->phy_mutex); in lan78xx_mdiobus_write()
1789 usb_autopm_put_interface(dev->intf); in lan78xx_mdiobus_write()
1798 dev->mdiobus = mdiobus_alloc(); in lan78xx_mdio_init()
1799 if (!dev->mdiobus) { in lan78xx_mdio_init()
1800 netdev_err(dev->net, "can't allocate MDIO bus\n"); in lan78xx_mdio_init()
1801 return -ENOMEM; in lan78xx_mdio_init()
1804 dev->mdiobus->priv = (void *)dev; in lan78xx_mdio_init()
1805 dev->mdiobus->read = lan78xx_mdiobus_read; in lan78xx_mdio_init()
1806 dev->mdiobus->write = lan78xx_mdiobus_write; in lan78xx_mdio_init()
1807 dev->mdiobus->name = "lan78xx-mdiobus"; in lan78xx_mdio_init()
1808 dev->mdiobus->parent = &dev->udev->dev; in lan78xx_mdio_init()
1810 snprintf(dev->mdiobus->id, MII_BUS_ID_SIZE, "usb-%03d:%03d", in lan78xx_mdio_init()
1811 dev->udev->bus->busnum, dev->udev->devnum); in lan78xx_mdio_init()
1813 switch (dev->chipid) { in lan78xx_mdio_init()
1817 dev->mdiobus->phy_mask = ~(1 << 1); in lan78xx_mdio_init()
1821 dev->mdiobus->phy_mask = ~(0xFF); in lan78xx_mdio_init()
1825 node = of_get_child_by_name(dev->udev->dev.of_node, "mdio"); in lan78xx_mdio_init()
1826 ret = of_mdiobus_register(dev->mdiobus, node); in lan78xx_mdio_init()
1829 netdev_err(dev->net, "can't register MDIO bus\n"); in lan78xx_mdio_init()
1833 netdev_dbg(dev->net, "registered mdiobus bus %s\n", dev->mdiobus->id); in lan78xx_mdio_init()
1836 mdiobus_free(dev->mdiobus); in lan78xx_mdio_init()
1842 mdiobus_unregister(dev->mdiobus); in lan78xx_remove_mdio()
1843 mdiobus_free(dev->mdiobus); in lan78xx_remove_mdio()
1848 struct phy_device *phydev = net->phydev; in lan78xx_link_status_change()
1851 /* At forced 100 F/H mode, chip may fail to set mode correctly in lan78xx_link_status_change()
1853 * As workaround, set to 10 before setting to 100 in lan78xx_link_status_change()
1854 * at forced 100 F/H mode. in lan78xx_link_status_change()
1856 if (!phydev->autoneg && (phydev->speed == 100)) { in lan78xx_link_status_change()
1866 phy_write(phydev, MII_BMCR, temp); /* set to 100 later */ in lan78xx_link_status_change()
1881 struct irq_domain_data *data = d->host_data; in irq_map()
1884 irq_set_chip_and_handler(irq, data->irqchip, data->irq_handler); in irq_map()
1905 data->irqenable &= ~BIT(irqd_to_hwirq(irqd)); in lan78xx_irq_mask()
1912 data->irqenable |= BIT(irqd_to_hwirq(irqd)); in lan78xx_irq_unmask()
1919 mutex_lock(&data->irq_lock); in lan78xx_irq_bus_lock()
1931 * are only two callbacks executed in non-atomic contex. in lan78xx_irq_bus_sync_unlock()
1934 if (buf != data->irqenable) in lan78xx_irq_bus_sync_unlock()
1935 ret = lan78xx_write_reg(dev, INT_EP_CTL, data->irqenable); in lan78xx_irq_bus_sync_unlock()
1937 mutex_unlock(&data->irq_lock); in lan78xx_irq_bus_sync_unlock()
1941 .name = "lan78xx-irqs",
1956 of_node = dev->udev->dev.parent->of_node; in lan78xx_setup_irq_domain()
1958 mutex_init(&dev->domain_data.irq_lock); in lan78xx_setup_irq_domain()
1961 dev->domain_data.irqenable = buf; in lan78xx_setup_irq_domain()
1963 dev->domain_data.irqchip = &lan78xx_irqchip; in lan78xx_setup_irq_domain()
1964 dev->domain_data.irq_handler = handle_simple_irq; in lan78xx_setup_irq_domain()
1967 &chip_domain_ops, &dev->domain_data); in lan78xx_setup_irq_domain()
1975 ret = -EINVAL; in lan78xx_setup_irq_domain()
1978 ret = -EINVAL; in lan78xx_setup_irq_domain()
1981 dev->domain_data.irqdomain = irqdomain; in lan78xx_setup_irq_domain()
1982 dev->domain_data.phyirq = irqmap; in lan78xx_setup_irq_domain()
1989 if (dev->domain_data.phyirq > 0) { in lan78xx_remove_irq_domain()
1990 irq_dispose_mapping(dev->domain_data.phyirq); in lan78xx_remove_irq_domain()
1992 if (dev->domain_data.irqdomain) in lan78xx_remove_irq_domain()
1993 irq_domain_remove(dev->domain_data.irqdomain); in lan78xx_remove_irq_domain()
1995 dev->domain_data.phyirq = 0; in lan78xx_remove_irq_domain()
1996 dev->domain_data.irqdomain = NULL; in lan78xx_remove_irq_domain()
2003 struct lan78xx_net *dev = netdev_priv(phydev->attached_dev); in lan8835_fixup()
2015 /* RGMII TX DLL Tune Adjust */ in lan8835_fixup()
2018 dev->interface = PHY_INTERFACE_MODE_RGMII_TXID; in lan8835_fixup()
2025 struct lan78xx_net *dev = netdev_priv(phydev->attached_dev); in ksz9031rnx_fixup()
2035 dev->interface = PHY_INTERFACE_MODE_RGMII_RXID; in ksz9031rnx_fixup()
2051 phydev = phy_find_first(dev->mdiobus); in lan7801_phy_init()
2053 netdev_dbg(dev->net, "PHY Not Found!! Registering Fixed PHY\n"); in lan7801_phy_init()
2056 netdev_err(dev->net, "No PHY/fixed_PHY found\n"); in lan7801_phy_init()
2059 netdev_dbg(dev->net, "Registered FIXED PHY\n"); in lan7801_phy_init()
2060 dev->interface = PHY_INTERFACE_MODE_RGMII; in lan7801_phy_init()
2069 if (!phydev->drv) { in lan7801_phy_init()
2070 netdev_err(dev->net, "no PHY driver found\n"); in lan7801_phy_init()
2073 dev->interface = PHY_INTERFACE_MODE_RGMII; in lan7801_phy_init()
2078 netdev_err(dev->net, "Failed to register fixup for PHY_KSZ9031RNX\n"); in lan7801_phy_init()
2085 netdev_err(dev->net, "Failed to register fixup for PHY_LAN8835\n"); in lan7801_phy_init()
2090 phydev->is_internal = false; in lan7801_phy_init()
2102 switch (dev->chipid) { in lan78xx_phy_init()
2106 netdev_err(dev->net, "lan7801: PHY Init Failed"); in lan78xx_phy_init()
2107 return -EIO; in lan78xx_phy_init()
2113 phydev = phy_find_first(dev->mdiobus); in lan78xx_phy_init()
2115 netdev_err(dev->net, "no PHY found\n"); in lan78xx_phy_init()
2116 return -EIO; in lan78xx_phy_init()
2118 phydev->is_internal = true; in lan78xx_phy_init()
2119 dev->interface = PHY_INTERFACE_MODE_GMII; in lan78xx_phy_init()
2123 netdev_err(dev->net, "Unknown CHIP ID found\n"); in lan78xx_phy_init()
2124 return -EIO; in lan78xx_phy_init()
2128 if (dev->domain_data.phyirq > 0) in lan78xx_phy_init()
2129 phydev->irq = dev->domain_data.phyirq; in lan78xx_phy_init()
2131 phydev->irq = 0; in lan78xx_phy_init()
2132 netdev_dbg(dev->net, "phydev->irq = %d\n", phydev->irq); in lan78xx_phy_init()
2135 phydev->mdix = ETH_TP_MDI_AUTO; in lan78xx_phy_init()
2137 ret = phy_connect_direct(dev->net, phydev, in lan78xx_phy_init()
2139 dev->interface); in lan78xx_phy_init()
2141 netdev_err(dev->net, "can't attach PHY to %s\n", in lan78xx_phy_init()
2142 dev->mdiobus->id); in lan78xx_phy_init()
2143 if (dev->chipid == ID_REV_CHIP_ID_7801_) { in lan78xx_phy_init()
2153 return -EIO; in lan78xx_phy_init()
2160 dev->fc_request_control = (FLOW_CTRL_RX | FLOW_CTRL_TX); in lan78xx_phy_init()
2162 phydev->advertising); in lan78xx_phy_init()
2164 phydev->advertising); in lan78xx_phy_init()
2165 mii_adv = (u32)mii_advertise_flowctrl(dev->fc_request_control); in lan78xx_phy_init()
2167 linkmode_or(phydev->advertising, fc, phydev->advertising); in lan78xx_phy_init()
2169 if (phydev->mdio.dev.of_node) { in lan78xx_phy_init()
2173 len = of_property_count_elems_of_size(phydev->mdio.dev.of_node, in lan78xx_phy_init()
2174 "microchip,led-modes", in lan78xx_phy_init()
2193 dev->fc_autoneg = phydev->autoneg; in lan78xx_phy_init()
2233 spin_lock_irqsave(&q->lock, flags); in unlink_urbs()
2240 entry = (struct skb_data *)skb->cb; in unlink_urbs()
2241 if (entry->state != unlink_start) in unlink_urbs()
2246 entry->state = unlink_start; in unlink_urbs()
2247 urb = entry->urb; in unlink_urbs()
2251 * use-after-free problem inside usb_unlink_urb since in unlink_urbs()
2256 spin_unlock_irqrestore(&q->lock, flags); in unlink_urbs()
2257 /* during some PM-driven resume scenarios, in unlink_urbs()
2261 if (ret != -EINPROGRESS && ret != 0) in unlink_urbs()
2262 netdev_dbg(dev->net, "unlink urb err, %d\n", ret); in unlink_urbs()
2266 spin_lock_irqsave(&q->lock, flags); in unlink_urbs()
2268 spin_unlock_irqrestore(&q->lock, flags); in unlink_urbs()
2275 int ll_mtu = new_mtu + netdev->hard_header_len; in lan78xx_change_mtu()
2276 int old_hard_mtu = dev->hard_mtu; in lan78xx_change_mtu()
2277 int old_rx_urb_size = dev->rx_urb_size; in lan78xx_change_mtu()
2280 /* no second zero-length packet read wanted after mtu-sized packets */ in lan78xx_change_mtu()
2281 if ((ll_mtu % dev->maxpacket) == 0) in lan78xx_change_mtu()
2282 return -EDOM; in lan78xx_change_mtu()
2286 netdev->mtu = new_mtu; in lan78xx_change_mtu()
2288 dev->hard_mtu = netdev->mtu + netdev->hard_header_len; in lan78xx_change_mtu()
2289 if (dev->rx_urb_size == old_hard_mtu) { in lan78xx_change_mtu()
2290 dev->rx_urb_size = dev->hard_mtu; in lan78xx_change_mtu()
2291 if (dev->rx_urb_size > old_rx_urb_size) { in lan78xx_change_mtu()
2292 if (netif_running(dev->net)) { in lan78xx_change_mtu()
2293 unlink_urbs(dev, &dev->rxq); in lan78xx_change_mtu()
2294 tasklet_schedule(&dev->bh); in lan78xx_change_mtu()
2310 return -EBUSY; in lan78xx_set_mac_addr()
2312 if (!is_valid_ether_addr(addr->sa_data)) in lan78xx_set_mac_addr()
2313 return -EADDRNOTAVAIL; in lan78xx_set_mac_addr()
2315 ether_addr_copy(netdev->dev_addr, addr->sa_data); in lan78xx_set_mac_addr()
2317 addr_lo = netdev->dev_addr[0] | in lan78xx_set_mac_addr()
2318 netdev->dev_addr[1] << 8 | in lan78xx_set_mac_addr()
2319 netdev->dev_addr[2] << 16 | in lan78xx_set_mac_addr()
2320 netdev->dev_addr[3] << 24; in lan78xx_set_mac_addr()
2321 addr_hi = netdev->dev_addr[4] | in lan78xx_set_mac_addr()
2322 netdev->dev_addr[5] << 8; in lan78xx_set_mac_addr()
2339 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_set_features()
2343 spin_lock_irqsave(&pdata->rfe_ctl_lock, flags); in lan78xx_set_features()
2346 pdata->rfe_ctl |= RFE_CTL_TCPUDP_COE_ | RFE_CTL_IP_COE_; in lan78xx_set_features()
2347 pdata->rfe_ctl |= RFE_CTL_ICMP_COE_ | RFE_CTL_IGMP_COE_; in lan78xx_set_features()
2349 pdata->rfe_ctl &= ~(RFE_CTL_TCPUDP_COE_ | RFE_CTL_IP_COE_); in lan78xx_set_features()
2350 pdata->rfe_ctl &= ~(RFE_CTL_ICMP_COE_ | RFE_CTL_IGMP_COE_); in lan78xx_set_features()
2354 pdata->rfe_ctl |= RFE_CTL_VLAN_STRIP_; in lan78xx_set_features()
2356 pdata->rfe_ctl &= ~RFE_CTL_VLAN_STRIP_; in lan78xx_set_features()
2359 pdata->rfe_ctl |= RFE_CTL_VLAN_FILTER_; in lan78xx_set_features()
2361 pdata->rfe_ctl &= ~RFE_CTL_VLAN_FILTER_; in lan78xx_set_features()
2363 spin_unlock_irqrestore(&pdata->rfe_ctl_lock, flags); in lan78xx_set_features()
2365 ret = lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); in lan78xx_set_features()
2374 struct lan78xx_net *dev = pdata->dev; in lan78xx_deferred_vlan_write()
2377 DP_SEL_VHF_VLAN_LEN, pdata->vlan_table); in lan78xx_deferred_vlan_write()
2384 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_vlan_rx_add_vid()
2391 pdata->vlan_table[vid_dword_index] |= (1 << vid_bit_index); in lan78xx_vlan_rx_add_vid()
2394 schedule_work(&pdata->set_vlan); in lan78xx_vlan_rx_add_vid()
2403 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_vlan_rx_kill_vid()
2410 pdata->vlan_table[vid_dword_index] &= ~(1 << vid_bit_index); in lan78xx_vlan_rx_kill_vid()
2413 schedule_work(&pdata->set_vlan); in lan78xx_vlan_rx_kill_vid()
2459 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_reset()
2474 netdev_warn(dev->net, in lan78xx_reset()
2476 return -EIO; in lan78xx_reset()
2484 dev->chipid = (buf & ID_REV_CHIP_ID_MASK_) >> 16; in lan78xx_reset()
2485 dev->chiprev = buf & ID_REV_CHIP_REV_MASK_; in lan78xx_reset()
2495 if (dev->udev->speed == USB_SPEED_SUPER) { in lan78xx_reset()
2497 dev->rx_urb_size = DEFAULT_BURST_CAP_SIZE; in lan78xx_reset()
2498 dev->rx_qlen = 4; in lan78xx_reset()
2499 dev->tx_qlen = 4; in lan78xx_reset()
2500 } else if (dev->udev->speed == USB_SPEED_HIGH) { in lan78xx_reset()
2502 dev->rx_urb_size = DEFAULT_BURST_CAP_SIZE; in lan78xx_reset()
2503 dev->rx_qlen = RX_MAX_QUEUE_MEMORY / dev->rx_urb_size; in lan78xx_reset()
2504 dev->tx_qlen = RX_MAX_QUEUE_MEMORY / dev->hard_mtu; in lan78xx_reset()
2507 dev->rx_urb_size = DEFAULT_BURST_CAP_SIZE; in lan78xx_reset()
2508 dev->rx_qlen = 4; in lan78xx_reset()
2509 dev->tx_qlen = 4; in lan78xx_reset()
2524 buf = (MAX_RX_FIFO_SIZE - 512) / 512; in lan78xx_reset()
2527 buf = (MAX_TX_FIFO_SIZE - 512) / 512; in lan78xx_reset()
2535 ret = lan78xx_read_reg(dev, RFE_CTL, &pdata->rfe_ctl); in lan78xx_reset()
2536 pdata->rfe_ctl |= RFE_CTL_BCAST_EN_ | RFE_CTL_DA_PERFECT_; in lan78xx_reset()
2537 ret = lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); in lan78xx_reset()
2540 lan78xx_set_features(dev->net, dev->net->features); in lan78xx_reset()
2542 lan78xx_set_multicast(dev->net); in lan78xx_reset()
2554 netdev_warn(dev->net, "timeout waiting for PHY Reset"); in lan78xx_reset()
2555 return -EIO; in lan78xx_reset()
2561 if (dev->chipid == ID_REV_CHIP_ID_7801_) in lan78xx_reset()
2564 if (dev->chipid == ID_REV_CHIP_ID_7800_) { in lan78xx_reset()
2568 netdev_info(dev->net, "No External EEPROM. Setting MAC Speed\n"); in lan78xx_reset()
2583 dev->net->mtu + VLAN_ETH_HLEN); in lan78xx_reset()
2604 p = (u32 *)&dev->stats.rollover_max; in lan78xx_init_stats()
2605 for (i = 0; i < (sizeof(dev->stats.rollover_max) / (sizeof(u32))); i++) in lan78xx_init_stats()
2608 dev->stats.rollover_max.rx_unicast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
2609 dev->stats.rollover_max.rx_broadcast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
2610 dev->stats.rollover_max.rx_multicast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
2611 dev->stats.rollover_max.eee_rx_lpi_transitions = 0xFFFFFFFF; in lan78xx_init_stats()
2612 dev->stats.rollover_max.eee_rx_lpi_time = 0xFFFFFFFF; in lan78xx_init_stats()
2613 dev->stats.rollover_max.tx_unicast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
2614 dev->stats.rollover_max.tx_broadcast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
2615 dev->stats.rollover_max.tx_multicast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
2616 dev->stats.rollover_max.eee_tx_lpi_transitions = 0xFFFFFFFF; in lan78xx_init_stats()
2617 dev->stats.rollover_max.eee_tx_lpi_time = 0xFFFFFFFF; in lan78xx_init_stats()
2619 set_bit(EVENT_STAT_UPDATE, &dev->flags); in lan78xx_init_stats()
2627 ret = usb_autopm_get_interface(dev->intf); in lan78xx_open()
2631 phy_start(net->phydev); in lan78xx_open()
2633 netif_dbg(dev, ifup, dev->net, "phy initialised successfully"); in lan78xx_open()
2636 if (dev->urb_intr) { in lan78xx_open()
2637 ret = usb_submit_urb(dev->urb_intr, GFP_KERNEL); in lan78xx_open()
2639 netif_err(dev, ifup, dev->net, in lan78xx_open()
2647 set_bit(EVENT_DEV_OPEN, &dev->flags); in lan78xx_open()
2651 dev->link_on = false; in lan78xx_open()
2655 usb_autopm_put_interface(dev->intf); in lan78xx_open()
2670 dev->wait = &unlink_wakeup; in lan78xx_terminate_urbs()
2671 temp = unlink_urbs(dev, &dev->txq) + unlink_urbs(dev, &dev->rxq); in lan78xx_terminate_urbs()
2674 while (!skb_queue_empty(&dev->rxq) && in lan78xx_terminate_urbs()
2675 !skb_queue_empty(&dev->txq) && in lan78xx_terminate_urbs()
2676 !skb_queue_empty(&dev->done)) { in lan78xx_terminate_urbs()
2679 netif_dbg(dev, ifdown, dev->net, in lan78xx_terminate_urbs()
2683 dev->wait = NULL; in lan78xx_terminate_urbs()
2691 if (timer_pending(&dev->stat_monitor)) in lan78xx_stop()
2692 del_timer_sync(&dev->stat_monitor); in lan78xx_stop()
2694 if (net->phydev) in lan78xx_stop()
2695 phy_stop(net->phydev); in lan78xx_stop()
2697 clear_bit(EVENT_DEV_OPEN, &dev->flags); in lan78xx_stop()
2700 netif_info(dev, ifdown, dev->net, in lan78xx_stop()
2701 "stop stats: rx/tx %lu/%lu, errs %lu/%lu\n", in lan78xx_stop()
2702 net->stats.rx_packets, net->stats.tx_packets, in lan78xx_stop()
2703 net->stats.rx_errors, net->stats.tx_errors); in lan78xx_stop()
2707 usb_kill_urb(dev->urb_intr); in lan78xx_stop()
2709 skb_queue_purge(&dev->rxq_pause); in lan78xx_stop()
2715 dev->flags = 0; in lan78xx_stop()
2716 cancel_delayed_work_sync(&dev->wq); in lan78xx_stop()
2717 tasklet_kill(&dev->bh); in lan78xx_stop()
2719 usb_autopm_put_interface(dev->intf); in lan78xx_stop()
2740 tx_cmd_a = (u32)(skb->len & TX_CMD_A_LEN_MASK_) | TX_CMD_A_FCS_; in lan78xx_tx_prep()
2742 if (skb->ip_summed == CHECKSUM_PARTIAL) in lan78xx_tx_prep()
2747 u16 mss = max(skb_shinfo(skb)->gso_size, TX_CMD_B_MSS_MIN_); in lan78xx_tx_prep()
2771 struct skb_data *entry = (struct skb_data *)skb->cb; in defer_bh()
2773 spin_lock_irqsave(&list->lock, flags); in defer_bh()
2774 old_state = entry->state; in defer_bh()
2775 entry->state = state; in defer_bh()
2778 spin_unlock(&list->lock); in defer_bh()
2779 spin_lock(&dev->done.lock); in defer_bh()
2781 __skb_queue_tail(&dev->done, skb); in defer_bh()
2782 if (skb_queue_len(&dev->done) == 1) in defer_bh()
2783 tasklet_schedule(&dev->bh); in defer_bh()
2784 spin_unlock_irqrestore(&dev->done.lock, flags); in defer_bh()
2791 struct sk_buff *skb = (struct sk_buff *)urb->context; in tx_complete()
2792 struct skb_data *entry = (struct skb_data *)skb->cb; in tx_complete()
2793 struct lan78xx_net *dev = entry->dev; in tx_complete()
2795 if (urb->status == 0) { in tx_complete()
2796 dev->net->stats.tx_packets += entry->num_of_packet; in tx_complete()
2797 dev->net->stats.tx_bytes += entry->length; in tx_complete()
2799 dev->net->stats.tx_errors++; in tx_complete()
2801 switch (urb->status) { in tx_complete()
2802 case -EPIPE: in tx_complete()
2806 /* software-driven interface shutdown */ in tx_complete()
2807 case -ECONNRESET: in tx_complete()
2808 case -ESHUTDOWN: in tx_complete()
2811 case -EPROTO: in tx_complete()
2812 case -ETIME: in tx_complete()
2813 case -EILSEQ: in tx_complete()
2814 netif_stop_queue(dev->net); in tx_complete()
2817 netif_dbg(dev, tx_err, dev->net, in tx_complete()
2818 "tx err %d\n", entry->urb->status); in tx_complete()
2823 usb_autopm_put_interface_async(dev->intf); in tx_complete()
2825 defer_bh(dev, skb, &dev->txq, tx_done); in tx_complete()
2831 struct skb_data *entry = (struct skb_data *)newsk->cb; in lan78xx_queue_skb()
2834 entry->state = state; in lan78xx_queue_skb()
2849 skb_queue_tail(&dev->txq_pend, skb2); in lan78xx_start_xmit()
2851 /* throttle TX patch at slower than SUPER SPEED USB */ in lan78xx_start_xmit()
2852 if ((dev->udev->speed < USB_SPEED_SUPER) && in lan78xx_start_xmit()
2853 (skb_queue_len(&dev->txq_pend) > 10)) in lan78xx_start_xmit()
2856 netif_dbg(dev, tx_err, dev->net, in lan78xx_start_xmit()
2858 dev->net->stats.tx_errors++; in lan78xx_start_xmit()
2859 dev->net->stats.tx_dropped++; in lan78xx_start_xmit()
2862 tasklet_schedule(&dev->bh); in lan78xx_start_xmit()
2873 dev->data[0] = (unsigned long)kzalloc(sizeof(*pdata), GFP_KERNEL); in lan78xx_bind()
2875 pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_bind()
2877 netdev_warn(dev->net, "Unable to allocate lan78xx_priv"); in lan78xx_bind()
2878 return -ENOMEM; in lan78xx_bind()
2881 pdata->dev = dev; in lan78xx_bind()
2883 spin_lock_init(&pdata->rfe_ctl_lock); in lan78xx_bind()
2884 mutex_init(&pdata->dataport_mutex); in lan78xx_bind()
2886 INIT_WORK(&pdata->set_multicast, lan78xx_deferred_multicast_write); in lan78xx_bind()
2889 pdata->vlan_table[i] = 0; in lan78xx_bind()
2891 INIT_WORK(&pdata->set_vlan, lan78xx_deferred_vlan_write); in lan78xx_bind()
2893 dev->net->features = 0; in lan78xx_bind()
2896 dev->net->features |= NETIF_F_HW_CSUM; in lan78xx_bind()
2899 dev->net->features |= NETIF_F_RXCSUM; in lan78xx_bind()
2902 dev->net->features |= NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_SG; in lan78xx_bind()
2905 dev->net->features |= NETIF_F_HW_VLAN_CTAG_RX; in lan78xx_bind()
2908 dev->net->features |= NETIF_F_HW_VLAN_CTAG_FILTER; in lan78xx_bind()
2910 dev->net->hw_features = dev->net->features; in lan78xx_bind()
2914 netdev_warn(dev->net, in lan78xx_bind()
2919 dev->net->hard_header_len += TX_OVERHEAD; in lan78xx_bind()
2920 dev->hard_mtu = dev->net->mtu + dev->net->hard_header_len; in lan78xx_bind()
2925 netdev_warn(dev->net, "Registers INIT FAILED...."); in lan78xx_bind()
2931 netdev_warn(dev->net, "MDIO INIT FAILED....."); in lan78xx_bind()
2935 dev->net->flags |= IFF_MULTICAST; in lan78xx_bind()
2937 pdata->wol = WAKE_MAGIC; in lan78xx_bind()
2945 netdev_warn(dev->net, "Bind routine FAILED"); in lan78xx_bind()
2946 cancel_work_sync(&pdata->set_multicast); in lan78xx_bind()
2947 cancel_work_sync(&pdata->set_vlan); in lan78xx_bind()
2954 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_unbind()
2961 cancel_work_sync(&pdata->set_multicast); in lan78xx_unbind()
2962 cancel_work_sync(&pdata->set_vlan); in lan78xx_unbind()
2963 netif_dbg(dev, ifdown, dev->net, "free pdata"); in lan78xx_unbind()
2966 dev->data[0] = 0; in lan78xx_unbind()
2977 if (!(dev->net->features & NETIF_F_RXCSUM) || in lan78xx_rx_csum_offload()
2980 !(dev->net->features & NETIF_F_HW_VLAN_CTAG_RX))) { in lan78xx_rx_csum_offload()
2981 skb->ip_summed = CHECKSUM_NONE; in lan78xx_rx_csum_offload()
2983 skb->csum = ntohs((u16)(rx_cmd_b >> RX_CMD_B_CSUM_SHIFT_)); in lan78xx_rx_csum_offload()
2984 skb->ip_summed = CHECKSUM_COMPLETE; in lan78xx_rx_csum_offload()
2992 if ((dev->net->features & NETIF_F_HW_VLAN_CTAG_RX) && in lan78xx_rx_vlan_offload()
3002 if (test_bit(EVENT_RX_PAUSED, &dev->flags)) { in lan78xx_skb_return()
3003 skb_queue_tail(&dev->rxq_pause, skb); in lan78xx_skb_return()
3007 dev->net->stats.rx_packets++; in lan78xx_skb_return()
3008 dev->net->stats.rx_bytes += skb->len; in lan78xx_skb_return()
3010 skb->protocol = eth_type_trans(skb, dev->net); in lan78xx_skb_return()
3012 netif_dbg(dev, rx_status, dev->net, "< rx, len %zu, type 0x%x\n", in lan78xx_skb_return()
3013 skb->len + sizeof(struct ethhdr), skb->protocol); in lan78xx_skb_return()
3014 memset(skb->cb, 0, sizeof(struct skb_data)); in lan78xx_skb_return()
3021 netif_dbg(dev, rx_err, dev->net, in lan78xx_skb_return()
3027 if (skb->len < dev->net->hard_header_len) in lan78xx_rx()
3030 while (skb->len > 0) { in lan78xx_rx()
3036 rx_cmd_a = get_unaligned_le32(skb->data); in lan78xx_rx()
3039 rx_cmd_b = get_unaligned_le32(skb->data); in lan78xx_rx()
3042 rx_cmd_c = get_unaligned_le16(skb->data); in lan78xx_rx()
3045 packet = skb->data; in lan78xx_rx()
3049 align_count = (4 - ((size + RXW_PADDING) % 4)) % 4; in lan78xx_rx()
3052 netif_dbg(dev, rx_err, dev->net, in lan78xx_rx()
3056 if (skb->len == size) { in lan78xx_rx()
3062 skb_trim(skb, skb->len - 4); /* remove fcs */ in lan78xx_rx()
3063 skb->truesize = size + sizeof(struct sk_buff); in lan78xx_rx()
3070 netdev_warn(dev->net, "Error allocating skb"); in lan78xx_rx()
3074 skb2->len = size; in lan78xx_rx()
3075 skb2->data = packet; in lan78xx_rx()
3081 skb_trim(skb2, skb2->len - 4); /* remove fcs */ in lan78xx_rx()
3082 skb2->truesize = size + sizeof(struct sk_buff); in lan78xx_rx()
3090 if (skb->len) in lan78xx_rx()
3100 dev->net->stats.rx_errors++; in rx_process()
3104 if (skb->len) { in rx_process()
3109 netif_dbg(dev, rx_err, dev->net, "drop\n"); in rx_process()
3110 dev->net->stats.rx_errors++; in rx_process()
3112 skb_queue_tail(&dev->done, skb); in rx_process()
3122 size_t size = dev->rx_urb_size; in rx_submit()
3125 skb = netdev_alloc_skb_ip_align(dev->net, size); in rx_submit()
3128 return -ENOMEM; in rx_submit()
3131 entry = (struct skb_data *)skb->cb; in rx_submit()
3132 entry->urb = urb; in rx_submit()
3133 entry->dev = dev; in rx_submit()
3134 entry->length = 0; in rx_submit()
3136 usb_fill_bulk_urb(urb, dev->udev, dev->pipe_in, in rx_submit()
3137 skb->data, size, rx_complete, skb); in rx_submit()
3139 spin_lock_irqsave(&dev->rxq.lock, lockflags); in rx_submit()
3141 if (netif_device_present(dev->net) && in rx_submit()
3142 netif_running(dev->net) && in rx_submit()
3143 !test_bit(EVENT_RX_HALT, &dev->flags) && in rx_submit()
3144 !test_bit(EVENT_DEV_ASLEEP, &dev->flags)) { in rx_submit()
3148 lan78xx_queue_skb(&dev->rxq, skb, rx_start); in rx_submit()
3150 case -EPIPE: in rx_submit()
3153 case -ENODEV: in rx_submit()
3154 netif_dbg(dev, ifdown, dev->net, "device gone\n"); in rx_submit()
3155 netif_device_detach(dev->net); in rx_submit()
3157 case -EHOSTUNREACH: in rx_submit()
3158 ret = -ENOLINK; in rx_submit()
3161 netif_dbg(dev, rx_err, dev->net, in rx_submit()
3163 tasklet_schedule(&dev->bh); in rx_submit()
3166 netif_dbg(dev, ifdown, dev->net, "rx: stopped\n"); in rx_submit()
3167 ret = -ENOLINK; in rx_submit()
3169 spin_unlock_irqrestore(&dev->rxq.lock, lockflags); in rx_submit()
3179 struct sk_buff *skb = (struct sk_buff *)urb->context; in rx_complete()
3180 struct skb_data *entry = (struct skb_data *)skb->cb; in rx_complete()
3181 struct lan78xx_net *dev = entry->dev; in rx_complete()
3182 int urb_status = urb->status; in rx_complete()
3185 skb_put(skb, urb->actual_length); in rx_complete()
3187 entry->urb = NULL; in rx_complete()
3191 if (skb->len < dev->net->hard_header_len) { in rx_complete()
3193 dev->net->stats.rx_errors++; in rx_complete()
3194 dev->net->stats.rx_length_errors++; in rx_complete()
3195 netif_dbg(dev, rx_err, dev->net, in rx_complete()
3196 "rx length %d\n", skb->len); in rx_complete()
3198 usb_mark_last_busy(dev->udev); in rx_complete()
3200 case -EPIPE: in rx_complete()
3201 dev->net->stats.rx_errors++; in rx_complete()
3204 case -ECONNRESET: /* async unlink */ in rx_complete()
3205 case -ESHUTDOWN: /* hardware gone */ in rx_complete()
3206 netif_dbg(dev, ifdown, dev->net, in rx_complete()
3209 entry->urb = urb; in rx_complete()
3212 case -EPROTO: in rx_complete()
3213 case -ETIME: in rx_complete()
3214 case -EILSEQ: in rx_complete()
3215 dev->net->stats.rx_errors++; in rx_complete()
3217 entry->urb = urb; in rx_complete()
3222 case -EOVERFLOW: in rx_complete()
3223 dev->net->stats.rx_over_errors++; in rx_complete()
3228 dev->net->stats.rx_errors++; in rx_complete()
3229 netif_dbg(dev, rx_err, dev->net, "rx status %d\n", urb_status); in rx_complete()
3233 state = defer_bh(dev, skb, &dev->rxq, state); in rx_complete()
3236 if (netif_running(dev->net) && in rx_complete()
3237 !test_bit(EVENT_RX_HALT, &dev->flags) && in rx_complete()
3244 netif_dbg(dev, rx_err, dev->net, "no read resubmitted\n"); in rx_complete()
3253 struct sk_buff_head *tqp = &dev->txq_pend; in lan78xx_tx_bh()
3263 spin_lock_irqsave(&tqp->lock, flags); in lan78xx_tx_bh()
3271 length = skb->len - TX_OVERHEAD; in lan78xx_tx_bh()
3273 spin_unlock_irqrestore(&tqp->lock, flags); in lan78xx_tx_bh()
3277 if ((skb_totallen + skb->len) > MAX_SINGLE_PACKET_SIZE) in lan78xx_tx_bh()
3279 skb_totallen = skb->len + roundup(skb_totallen, sizeof(u32)); in lan78xx_tx_bh()
3282 spin_unlock_irqrestore(&tqp->lock, flags); in lan78xx_tx_bh()
3294 length += (skb2->len - TX_OVERHEAD); in lan78xx_tx_bh()
3295 memcpy(skb->data + pos, skb2->data, skb2->len); in lan78xx_tx_bh()
3296 pos += roundup(skb2->len, sizeof(u32)); in lan78xx_tx_bh()
3306 entry = (struct skb_data *)skb->cb; in lan78xx_tx_bh()
3307 entry->urb = urb; in lan78xx_tx_bh()
3308 entry->dev = dev; in lan78xx_tx_bh()
3309 entry->length = length; in lan78xx_tx_bh()
3310 entry->num_of_packet = count; in lan78xx_tx_bh()
3312 spin_lock_irqsave(&dev->txq.lock, flags); in lan78xx_tx_bh()
3313 ret = usb_autopm_get_interface_async(dev->intf); in lan78xx_tx_bh()
3315 spin_unlock_irqrestore(&dev->txq.lock, flags); in lan78xx_tx_bh()
3319 usb_fill_bulk_urb(urb, dev->udev, dev->pipe_out, in lan78xx_tx_bh()
3320 skb->data, skb->len, tx_complete, skb); in lan78xx_tx_bh()
3322 if (length % dev->maxpacket == 0) { in lan78xx_tx_bh()
3324 urb->transfer_flags |= URB_ZERO_PACKET; in lan78xx_tx_bh()
3329 if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) { in lan78xx_tx_bh()
3331 usb_anchor_urb(urb, &dev->deferred); in lan78xx_tx_bh()
3333 netif_stop_queue(dev->net); in lan78xx_tx_bh()
3335 spin_unlock_irqrestore(&dev->txq.lock, flags); in lan78xx_tx_bh()
3336 netdev_dbg(dev->net, "Delaying transmission for resumption\n"); in lan78xx_tx_bh()
3344 netif_trans_update(dev->net); in lan78xx_tx_bh()
3345 lan78xx_queue_skb(&dev->txq, skb, tx_start); in lan78xx_tx_bh()
3346 if (skb_queue_len(&dev->txq) >= dev->tx_qlen) in lan78xx_tx_bh()
3347 netif_stop_queue(dev->net); in lan78xx_tx_bh()
3349 case -EPIPE: in lan78xx_tx_bh()
3350 netif_stop_queue(dev->net); in lan78xx_tx_bh()
3352 usb_autopm_put_interface_async(dev->intf); in lan78xx_tx_bh()
3355 usb_autopm_put_interface_async(dev->intf); in lan78xx_tx_bh()
3356 netif_dbg(dev, tx_err, dev->net, in lan78xx_tx_bh()
3357 "tx: submit urb err %d\n", ret); in lan78xx_tx_bh()
3361 spin_unlock_irqrestore(&dev->txq.lock, flags); in lan78xx_tx_bh()
3364 netif_dbg(dev, tx_err, dev->net, "drop, code %d\n", ret); in lan78xx_tx_bh()
3366 dev->net->stats.tx_dropped++; in lan78xx_tx_bh()
3371 netif_dbg(dev, tx_queued, dev->net, in lan78xx_tx_bh()
3372 "> tx, len %d, type 0x%x\n", length, skb->protocol); in lan78xx_tx_bh()
3380 if (skb_queue_len(&dev->rxq) < dev->rx_qlen) { in lan78xx_rx_bh()
3382 if (skb_queue_len(&dev->rxq) >= dev->rx_qlen) in lan78xx_rx_bh()
3386 if (rx_submit(dev, urb, GFP_ATOMIC) == -ENOLINK) in lan78xx_rx_bh()
3390 if (skb_queue_len(&dev->rxq) < dev->rx_qlen) in lan78xx_rx_bh()
3391 tasklet_schedule(&dev->bh); in lan78xx_rx_bh()
3393 if (skb_queue_len(&dev->txq) < dev->tx_qlen) in lan78xx_rx_bh()
3394 netif_wake_queue(dev->net); in lan78xx_rx_bh()
3403 while ((skb = skb_dequeue(&dev->done))) { in lan78xx_bh()
3404 entry = (struct skb_data *)(skb->cb); in lan78xx_bh()
3405 switch (entry->state) { in lan78xx_bh()
3407 entry->state = rx_cleanup; in lan78xx_bh()
3411 usb_free_urb(entry->urb); in lan78xx_bh()
3415 usb_free_urb(entry->urb); in lan78xx_bh()
3419 netdev_dbg(dev->net, "skb state %d\n", entry->state); in lan78xx_bh()
3424 if (netif_device_present(dev->net) && netif_running(dev->net)) { in lan78xx_bh()
3426 if (timer_pending(&dev->stat_monitor) && (dev->delta != 1)) { in lan78xx_bh()
3427 dev->delta = 1; in lan78xx_bh()
3428 mod_timer(&dev->stat_monitor, in lan78xx_bh()
3432 if (!skb_queue_empty(&dev->txq_pend)) in lan78xx_bh()
3435 if (!timer_pending(&dev->delay) && in lan78xx_bh()
3436 !test_bit(EVENT_RX_HALT, &dev->flags)) in lan78xx_bh()
3448 if (test_bit(EVENT_TX_HALT, &dev->flags)) { in lan78xx_delayedwork()
3449 unlink_urbs(dev, &dev->txq); in lan78xx_delayedwork()
3450 status = usb_autopm_get_interface(dev->intf); in lan78xx_delayedwork()
3453 status = usb_clear_halt(dev->udev, dev->pipe_out); in lan78xx_delayedwork()
3454 usb_autopm_put_interface(dev->intf); in lan78xx_delayedwork()
3456 status != -EPIPE && in lan78xx_delayedwork()
3457 status != -ESHUTDOWN) { in lan78xx_delayedwork()
3460 netdev_err(dev->net, in lan78xx_delayedwork()
3461 "can't clear tx halt, status %d\n", in lan78xx_delayedwork()
3464 clear_bit(EVENT_TX_HALT, &dev->flags); in lan78xx_delayedwork()
3465 if (status != -ESHUTDOWN) in lan78xx_delayedwork()
3466 netif_wake_queue(dev->net); in lan78xx_delayedwork()
3469 if (test_bit(EVENT_RX_HALT, &dev->flags)) { in lan78xx_delayedwork()
3470 unlink_urbs(dev, &dev->rxq); in lan78xx_delayedwork()
3471 status = usb_autopm_get_interface(dev->intf); in lan78xx_delayedwork()
3474 status = usb_clear_halt(dev->udev, dev->pipe_in); in lan78xx_delayedwork()
3475 usb_autopm_put_interface(dev->intf); in lan78xx_delayedwork()
3477 status != -EPIPE && in lan78xx_delayedwork()
3478 status != -ESHUTDOWN) { in lan78xx_delayedwork()
3481 netdev_err(dev->net, in lan78xx_delayedwork()
3485 clear_bit(EVENT_RX_HALT, &dev->flags); in lan78xx_delayedwork()
3486 tasklet_schedule(&dev->bh); in lan78xx_delayedwork()
3490 if (test_bit(EVENT_LINK_RESET, &dev->flags)) { in lan78xx_delayedwork()
3493 clear_bit(EVENT_LINK_RESET, &dev->flags); in lan78xx_delayedwork()
3494 status = usb_autopm_get_interface(dev->intf); in lan78xx_delayedwork()
3498 usb_autopm_put_interface(dev->intf); in lan78xx_delayedwork()
3500 netdev_info(dev->net, "link reset failed (%d)\n", in lan78xx_delayedwork()
3503 usb_autopm_put_interface(dev->intf); in lan78xx_delayedwork()
3507 if (test_bit(EVENT_STAT_UPDATE, &dev->flags)) { in lan78xx_delayedwork()
3510 clear_bit(EVENT_STAT_UPDATE, &dev->flags); in lan78xx_delayedwork()
3512 mod_timer(&dev->stat_monitor, in lan78xx_delayedwork()
3513 jiffies + (STAT_UPDATE_TIMER * dev->delta)); in lan78xx_delayedwork()
3515 dev->delta = min((dev->delta * 2), 50); in lan78xx_delayedwork()
3521 struct lan78xx_net *dev = urb->context; in intr_complete()
3522 int status = urb->status; in intr_complete()
3530 /* software-driven interface shutdown */ in intr_complete()
3531 case -ENOENT: /* urb killed */ in intr_complete()
3532 case -ESHUTDOWN: /* hardware gone */ in intr_complete()
3533 netif_dbg(dev, ifdown, dev->net, in intr_complete()
3537 /* NOTE: not throttling like RX/TX, since this endpoint in intr_complete()
3541 netdev_dbg(dev->net, "intr status %d\n", status); in intr_complete()
3545 if (!netif_running(dev->net)) in intr_complete()
3548 memset(urb->transfer_buffer, 0, urb->transfer_buffer_length); in intr_complete()
3551 netif_err(dev, timer, dev->net, in intr_complete()
3552 "intr resubmit --> %d\n", status); in intr_complete()
3568 net = dev->net; in lan78xx_disconnect()
3569 phydev = net->phydev; in lan78xx_disconnect()
3574 phy_disconnect(net->phydev); in lan78xx_disconnect()
3581 cancel_delayed_work_sync(&dev->wq); in lan78xx_disconnect()
3583 usb_scuttle_anchored_urbs(&dev->deferred); in lan78xx_disconnect()
3587 usb_kill_urb(dev->urb_intr); in lan78xx_disconnect()
3588 usb_free_urb(dev->urb_intr); in lan78xx_disconnect()
3598 unlink_urbs(dev, &dev->txq); in lan78xx_tx_timeout()
3599 tasklet_schedule(&dev->bh); in lan78xx_tx_timeout()
3606 if (skb->len + TX_OVERHEAD > MAX_SINGLE_PACKET_SIZE) in lan78xx_features_check()
3655 dev_err(&intf->dev, "Error: OOM\n"); in lan78xx_probe()
3656 ret = -ENOMEM; in lan78xx_probe()
3661 SET_NETDEV_DEV(netdev, &intf->dev); in lan78xx_probe()
3664 dev->udev = udev; in lan78xx_probe()
3665 dev->intf = intf; in lan78xx_probe()
3666 dev->net = netdev; in lan78xx_probe()
3667 dev->msg_enable = netif_msg_init(msg_level, NETIF_MSG_DRV in lan78xx_probe()
3670 skb_queue_head_init(&dev->rxq); in lan78xx_probe()
3671 skb_queue_head_init(&dev->txq); in lan78xx_probe()
3672 skb_queue_head_init(&dev->done); in lan78xx_probe()
3673 skb_queue_head_init(&dev->rxq_pause); in lan78xx_probe()
3674 skb_queue_head_init(&dev->txq_pend); in lan78xx_probe()
3675 mutex_init(&dev->phy_mutex); in lan78xx_probe()
3677 tasklet_init(&dev->bh, lan78xx_bh, (unsigned long)dev); in lan78xx_probe()
3678 INIT_DELAYED_WORK(&dev->wq, lan78xx_delayedwork); in lan78xx_probe()
3679 init_usb_anchor(&dev->deferred); in lan78xx_probe()
3681 netdev->netdev_ops = &lan78xx_netdev_ops; in lan78xx_probe()
3682 netdev->watchdog_timeo = TX_TIMEOUT_JIFFIES; in lan78xx_probe()
3683 netdev->ethtool_ops = &lan78xx_ethtool_ops; in lan78xx_probe()
3685 dev->delta = 1; in lan78xx_probe()
3686 timer_setup(&dev->stat_monitor, lan78xx_stat_monitor, 0); in lan78xx_probe()
3688 mutex_init(&dev->stats.access_lock); in lan78xx_probe()
3690 if (intf->cur_altsetting->desc.bNumEndpoints < 3) { in lan78xx_probe()
3691 ret = -ENODEV; in lan78xx_probe()
3695 dev->pipe_in = usb_rcvbulkpipe(udev, BULK_IN_PIPE); in lan78xx_probe()
3696 ep_blkin = usb_pipe_endpoint(udev, dev->pipe_in); in lan78xx_probe()
3697 if (!ep_blkin || !usb_endpoint_is_bulk_in(&ep_blkin->desc)) { in lan78xx_probe()
3698 ret = -ENODEV; in lan78xx_probe()
3702 dev->pipe_out = usb_sndbulkpipe(udev, BULK_OUT_PIPE); in lan78xx_probe()
3703 ep_blkout = usb_pipe_endpoint(udev, dev->pipe_out); in lan78xx_probe()
3704 if (!ep_blkout || !usb_endpoint_is_bulk_out(&ep_blkout->desc)) { in lan78xx_probe()
3705 ret = -ENODEV; in lan78xx_probe()
3709 ep_intr = &intf->cur_altsetting->endpoint[2]; in lan78xx_probe()
3710 if (!usb_endpoint_is_int_in(&ep_intr->desc)) { in lan78xx_probe()
3711 ret = -ENODEV; in lan78xx_probe()
3715 dev->pipe_intr = usb_rcvintpipe(dev->udev, in lan78xx_probe()
3716 usb_endpoint_num(&ep_intr->desc)); in lan78xx_probe()
3722 if (netdev->mtu > (dev->hard_mtu - netdev->hard_header_len)) in lan78xx_probe()
3723 netdev->mtu = dev->hard_mtu - netdev->hard_header_len; in lan78xx_probe()
3725 /* MTU range: 68 - 9000 */ in lan78xx_probe()
3726 netdev->max_mtu = MAX_SINGLE_PACKET_SIZE; in lan78xx_probe()
3727 netif_set_gso_max_size(netdev, MAX_SINGLE_PACKET_SIZE - MAX_HEADER); in lan78xx_probe()
3729 period = ep_intr->desc.bInterval; in lan78xx_probe()
3730 maxp = usb_maxpacket(dev->udev, dev->pipe_intr, 0); in lan78xx_probe()
3733 dev->urb_intr = usb_alloc_urb(0, GFP_KERNEL); in lan78xx_probe()
3734 if (!dev->urb_intr) { in lan78xx_probe()
3735 ret = -ENOMEM; in lan78xx_probe()
3739 usb_fill_int_urb(dev->urb_intr, dev->udev, in lan78xx_probe()
3740 dev->pipe_intr, buf, maxp, in lan78xx_probe()
3742 dev->urb_intr->transfer_flags |= URB_FREE_BUFFER; in lan78xx_probe()
3746 dev->maxpacket = usb_maxpacket(dev->udev, dev->pipe_out, 1); in lan78xx_probe()
3748 /* Reject broken descriptors. */ in lan78xx_probe()
3749 if (dev->maxpacket == 0) { in lan78xx_probe()
3750 ret = -ENODEV; in lan78xx_probe()
3754 /* driver requires remote-wakeup capability during autosuspend. */ in lan78xx_probe()
3755 intf->needs_remote_wakeup = 1; in lan78xx_probe()
3769 ret = device_set_wakeup_enable(&udev->dev, true); in lan78xx_probe()
3774 pm_runtime_set_autosuspend_delay(&udev->dev, in lan78xx_probe()
3780 phy_disconnect(netdev->phydev); in lan78xx_probe()
3782 usb_free_urb(dev->urb_intr); in lan78xx_probe()
3964 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_suspend()
3968 if (!dev->suspend_count++) { in lan78xx_suspend()
3969 spin_lock_irq(&dev->txq.lock); in lan78xx_suspend()
3971 if ((skb_queue_len(&dev->txq) || in lan78xx_suspend()
3972 skb_queue_len(&dev->txq_pend)) && in lan78xx_suspend()
3974 spin_unlock_irq(&dev->txq.lock); in lan78xx_suspend()
3975 ret = -EBUSY; in lan78xx_suspend()
3978 set_bit(EVENT_DEV_ASLEEP, &dev->flags); in lan78xx_suspend()
3979 spin_unlock_irq(&dev->txq.lock); in lan78xx_suspend()
3982 /* stop TX & RX */ in lan78xx_suspend()
3991 netif_device_detach(dev->net); in lan78xx_suspend()
3993 usb_kill_urb(dev->urb_intr); in lan78xx_suspend()
3996 netif_device_attach(dev->net); in lan78xx_suspend()
3999 if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) { in lan78xx_suspend()
4000 del_timer(&dev->stat_monitor); in lan78xx_suspend()
4045 lan78xx_set_suspend(dev, pdata->wol); in lan78xx_suspend()
4062 if (!timer_pending(&dev->stat_monitor)) { in lan78xx_resume()
4063 dev->delta = 1; in lan78xx_resume()
4064 mod_timer(&dev->stat_monitor, in lan78xx_resume()
4068 if (!--dev->suspend_count) { in lan78xx_resume()
4070 if (dev->urb_intr && test_bit(EVENT_DEV_OPEN, &dev->flags)) in lan78xx_resume()
4071 usb_submit_urb(dev->urb_intr, GFP_NOIO); in lan78xx_resume()
4073 spin_lock_irq(&dev->txq.lock); in lan78xx_resume()
4074 while ((res = usb_get_from_anchor(&dev->deferred))) { in lan78xx_resume()
4075 skb = (struct sk_buff *)res->context; in lan78xx_resume()
4080 usb_autopm_put_interface_async(dev->intf); in lan78xx_resume()
4082 netif_trans_update(dev->net); in lan78xx_resume()
4083 lan78xx_queue_skb(&dev->txq, skb, tx_start); in lan78xx_resume()
4087 clear_bit(EVENT_DEV_ASLEEP, &dev->flags); in lan78xx_resume()
4088 spin_unlock_irq(&dev->txq.lock); in lan78xx_resume()
4090 if (test_bit(EVENT_DEV_OPEN, &dev->flags)) { in lan78xx_resume()
4091 if (!(skb_queue_len(&dev->txq) >= dev->tx_qlen)) in lan78xx_resume()
4092 netif_start_queue(dev->net); in lan78xx_resume()
4093 tasklet_schedule(&dev->bh); in lan78xx_resume()
4127 phy_start(dev->net->phydev); in lan78xx_reset_resume()