Lines Matching refs:dev

122 #define LAN78XX_TSO_SIZE(dev)		((dev)->tx_urb_size - TX_SKB_MIN_LEN)  argument
353 struct lan78xx_net *dev; member
377 struct lan78xx_net *dev; member
385 struct lan78xx_net *dev; member
526 struct lan78xx_net *dev) in lan78xx_alloc_buf_pool() argument
553 entry->dev = dev; in lan78xx_alloc_buf_pool()
568 static struct sk_buff *lan78xx_get_rx_buf(struct lan78xx_net *dev) in lan78xx_get_rx_buf() argument
570 return lan78xx_get_buf(&dev->rxq_free); in lan78xx_get_rx_buf()
573 static void lan78xx_release_rx_buf(struct lan78xx_net *dev, in lan78xx_release_rx_buf() argument
576 lan78xx_release_buf(&dev->rxq_free, rx_buf); in lan78xx_release_rx_buf()
579 static void lan78xx_free_rx_resources(struct lan78xx_net *dev) in lan78xx_free_rx_resources() argument
581 lan78xx_free_buf_pool(&dev->rxq_free); in lan78xx_free_rx_resources()
584 static int lan78xx_alloc_rx_resources(struct lan78xx_net *dev) in lan78xx_alloc_rx_resources() argument
586 return lan78xx_alloc_buf_pool(&dev->rxq_free, in lan78xx_alloc_rx_resources()
587 dev->n_rx_urbs, dev->rx_urb_size, dev); in lan78xx_alloc_rx_resources()
590 static struct sk_buff *lan78xx_get_tx_buf(struct lan78xx_net *dev) in lan78xx_get_tx_buf() argument
592 return lan78xx_get_buf(&dev->txq_free); in lan78xx_get_tx_buf()
595 static void lan78xx_release_tx_buf(struct lan78xx_net *dev, in lan78xx_release_tx_buf() argument
598 lan78xx_release_buf(&dev->txq_free, tx_buf); in lan78xx_release_tx_buf()
601 static void lan78xx_free_tx_resources(struct lan78xx_net *dev) in lan78xx_free_tx_resources() argument
603 lan78xx_free_buf_pool(&dev->txq_free); in lan78xx_free_tx_resources()
606 static int lan78xx_alloc_tx_resources(struct lan78xx_net *dev) in lan78xx_alloc_tx_resources() argument
608 return lan78xx_alloc_buf_pool(&dev->txq_free, in lan78xx_alloc_tx_resources()
609 dev->n_tx_urbs, dev->tx_urb_size, dev); in lan78xx_alloc_tx_resources()
612 static int lan78xx_read_reg(struct lan78xx_net *dev, u32 index, u32 *data) in lan78xx_read_reg() argument
617 if (test_bit(EVENT_DEV_DISCONNECT, &dev->flags)) in lan78xx_read_reg()
624 ret = usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0), in lan78xx_read_reg()
632 netdev_warn(dev->net, in lan78xx_read_reg()
642 static int lan78xx_write_reg(struct lan78xx_net *dev, u32 index, u32 data) in lan78xx_write_reg() argument
647 if (test_bit(EVENT_DEV_DISCONNECT, &dev->flags)) in lan78xx_write_reg()
657 ret = usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, 0), in lan78xx_write_reg()
663 netdev_warn(dev->net, in lan78xx_write_reg()
673 static int lan78xx_update_reg(struct lan78xx_net *dev, u32 reg, u32 mask, in lan78xx_update_reg() argument
679 ret = lan78xx_read_reg(dev, reg, &buf); in lan78xx_update_reg()
686 ret = lan78xx_write_reg(dev, reg, buf); in lan78xx_update_reg()
693 static int lan78xx_read_stats(struct lan78xx_net *dev, in lan78xx_read_stats() argument
706 ret = usb_control_msg(dev->udev, in lan78xx_read_stats()
707 usb_rcvctrlpipe(dev->udev, 0), in lan78xx_read_stats()
723 netdev_warn(dev->net, in lan78xx_read_stats()
738 static void lan78xx_check_stat_rollover(struct lan78xx_net *dev, in lan78xx_check_stat_rollover() argument
741 check_counter_rollover(stats, dev->stats, rx_fcs_errors); in lan78xx_check_stat_rollover()
742 check_counter_rollover(stats, dev->stats, rx_alignment_errors); in lan78xx_check_stat_rollover()
743 check_counter_rollover(stats, dev->stats, rx_fragment_errors); in lan78xx_check_stat_rollover()
744 check_counter_rollover(stats, dev->stats, rx_jabber_errors); in lan78xx_check_stat_rollover()
745 check_counter_rollover(stats, dev->stats, rx_undersize_frame_errors); in lan78xx_check_stat_rollover()
746 check_counter_rollover(stats, dev->stats, rx_oversize_frame_errors); in lan78xx_check_stat_rollover()
747 check_counter_rollover(stats, dev->stats, rx_dropped_frames); in lan78xx_check_stat_rollover()
748 check_counter_rollover(stats, dev->stats, rx_unicast_byte_count); in lan78xx_check_stat_rollover()
749 check_counter_rollover(stats, dev->stats, rx_broadcast_byte_count); in lan78xx_check_stat_rollover()
750 check_counter_rollover(stats, dev->stats, rx_multicast_byte_count); in lan78xx_check_stat_rollover()
751 check_counter_rollover(stats, dev->stats, rx_unicast_frames); in lan78xx_check_stat_rollover()
752 check_counter_rollover(stats, dev->stats, rx_broadcast_frames); in lan78xx_check_stat_rollover()
753 check_counter_rollover(stats, dev->stats, rx_multicast_frames); in lan78xx_check_stat_rollover()
754 check_counter_rollover(stats, dev->stats, rx_pause_frames); in lan78xx_check_stat_rollover()
755 check_counter_rollover(stats, dev->stats, rx_64_byte_frames); in lan78xx_check_stat_rollover()
756 check_counter_rollover(stats, dev->stats, rx_65_127_byte_frames); in lan78xx_check_stat_rollover()
757 check_counter_rollover(stats, dev->stats, rx_128_255_byte_frames); in lan78xx_check_stat_rollover()
758 check_counter_rollover(stats, dev->stats, rx_256_511_bytes_frames); in lan78xx_check_stat_rollover()
759 check_counter_rollover(stats, dev->stats, rx_512_1023_byte_frames); in lan78xx_check_stat_rollover()
760 check_counter_rollover(stats, dev->stats, rx_1024_1518_byte_frames); in lan78xx_check_stat_rollover()
761 check_counter_rollover(stats, dev->stats, rx_greater_1518_byte_frames); in lan78xx_check_stat_rollover()
762 check_counter_rollover(stats, dev->stats, eee_rx_lpi_transitions); in lan78xx_check_stat_rollover()
763 check_counter_rollover(stats, dev->stats, eee_rx_lpi_time); in lan78xx_check_stat_rollover()
764 check_counter_rollover(stats, dev->stats, tx_fcs_errors); in lan78xx_check_stat_rollover()
765 check_counter_rollover(stats, dev->stats, tx_excess_deferral_errors); in lan78xx_check_stat_rollover()
766 check_counter_rollover(stats, dev->stats, tx_carrier_errors); in lan78xx_check_stat_rollover()
767 check_counter_rollover(stats, dev->stats, tx_bad_byte_count); in lan78xx_check_stat_rollover()
768 check_counter_rollover(stats, dev->stats, tx_single_collisions); in lan78xx_check_stat_rollover()
769 check_counter_rollover(stats, dev->stats, tx_multiple_collisions); in lan78xx_check_stat_rollover()
770 check_counter_rollover(stats, dev->stats, tx_excessive_collision); in lan78xx_check_stat_rollover()
771 check_counter_rollover(stats, dev->stats, tx_late_collisions); in lan78xx_check_stat_rollover()
772 check_counter_rollover(stats, dev->stats, tx_unicast_byte_count); in lan78xx_check_stat_rollover()
773 check_counter_rollover(stats, dev->stats, tx_broadcast_byte_count); in lan78xx_check_stat_rollover()
774 check_counter_rollover(stats, dev->stats, tx_multicast_byte_count); in lan78xx_check_stat_rollover()
775 check_counter_rollover(stats, dev->stats, tx_unicast_frames); in lan78xx_check_stat_rollover()
776 check_counter_rollover(stats, dev->stats, tx_broadcast_frames); in lan78xx_check_stat_rollover()
777 check_counter_rollover(stats, dev->stats, tx_multicast_frames); in lan78xx_check_stat_rollover()
778 check_counter_rollover(stats, dev->stats, tx_pause_frames); in lan78xx_check_stat_rollover()
779 check_counter_rollover(stats, dev->stats, tx_64_byte_frames); in lan78xx_check_stat_rollover()
780 check_counter_rollover(stats, dev->stats, tx_65_127_byte_frames); in lan78xx_check_stat_rollover()
781 check_counter_rollover(stats, dev->stats, tx_128_255_byte_frames); in lan78xx_check_stat_rollover()
782 check_counter_rollover(stats, dev->stats, tx_256_511_bytes_frames); in lan78xx_check_stat_rollover()
783 check_counter_rollover(stats, dev->stats, tx_512_1023_byte_frames); in lan78xx_check_stat_rollover()
784 check_counter_rollover(stats, dev->stats, tx_1024_1518_byte_frames); in lan78xx_check_stat_rollover()
785 check_counter_rollover(stats, dev->stats, tx_greater_1518_byte_frames); in lan78xx_check_stat_rollover()
786 check_counter_rollover(stats, dev->stats, eee_tx_lpi_transitions); in lan78xx_check_stat_rollover()
787 check_counter_rollover(stats, dev->stats, eee_tx_lpi_time); in lan78xx_check_stat_rollover()
789 memcpy(&dev->stats.saved, stats, sizeof(struct lan78xx_statstage)); in lan78xx_check_stat_rollover()
792 static void lan78xx_update_stats(struct lan78xx_net *dev) in lan78xx_update_stats() argument
799 if (usb_autopm_get_interface(dev->intf) < 0) in lan78xx_update_stats()
803 count = (u32 *)&dev->stats.rollover_count; in lan78xx_update_stats()
804 max = (u32 *)&dev->stats.rollover_max; in lan78xx_update_stats()
805 data = (u64 *)&dev->stats.curr_stat; in lan78xx_update_stats()
807 mutex_lock(&dev->stats.access_lock); in lan78xx_update_stats()
809 if (lan78xx_read_stats(dev, &lan78xx_stats) > 0) in lan78xx_update_stats()
810 lan78xx_check_stat_rollover(dev, &lan78xx_stats); in lan78xx_update_stats()
815 mutex_unlock(&dev->stats.access_lock); in lan78xx_update_stats()
817 usb_autopm_put_interface(dev->intf); in lan78xx_update_stats()
821 static int lan78xx_phy_wait_not_busy(struct lan78xx_net *dev) in lan78xx_phy_wait_not_busy() argument
828 ret = lan78xx_read_reg(dev, MII_ACC, &val); in lan78xx_phy_wait_not_busy()
854 static int lan78xx_wait_eeprom(struct lan78xx_net *dev) in lan78xx_wait_eeprom() argument
861 ret = lan78xx_read_reg(dev, E2P_CMD, &val); in lan78xx_wait_eeprom()
872 netdev_warn(dev->net, "EEPROM read operation timeout"); in lan78xx_wait_eeprom()
879 static int lan78xx_eeprom_confirm_not_busy(struct lan78xx_net *dev) in lan78xx_eeprom_confirm_not_busy() argument
886 ret = lan78xx_read_reg(dev, E2P_CMD, &val); in lan78xx_eeprom_confirm_not_busy()
896 netdev_warn(dev->net, "EEPROM is busy"); in lan78xx_eeprom_confirm_not_busy()
900 static int lan78xx_read_raw_eeprom(struct lan78xx_net *dev, u32 offset, in lan78xx_read_raw_eeprom() argument
911 ret = lan78xx_read_reg(dev, HW_CFG, &val); in lan78xx_read_raw_eeprom()
913 if (dev->chipid == ID_REV_CHIP_ID_7800_) { in lan78xx_read_raw_eeprom()
915 ret = lan78xx_write_reg(dev, HW_CFG, val); in lan78xx_read_raw_eeprom()
918 retval = lan78xx_eeprom_confirm_not_busy(dev); in lan78xx_read_raw_eeprom()
925 ret = lan78xx_write_reg(dev, E2P_CMD, val); in lan78xx_read_raw_eeprom()
931 retval = lan78xx_wait_eeprom(dev); in lan78xx_read_raw_eeprom()
935 ret = lan78xx_read_reg(dev, E2P_DATA, &val); in lan78xx_read_raw_eeprom()
947 if (dev->chipid == ID_REV_CHIP_ID_7800_) in lan78xx_read_raw_eeprom()
948 ret = lan78xx_write_reg(dev, HW_CFG, saved); in lan78xx_read_raw_eeprom()
953 static int lan78xx_read_eeprom(struct lan78xx_net *dev, u32 offset, in lan78xx_read_eeprom() argument
959 ret = lan78xx_read_raw_eeprom(dev, 0, 1, &sig); in lan78xx_read_eeprom()
961 ret = lan78xx_read_raw_eeprom(dev, offset, length, data); in lan78xx_read_eeprom()
968 static int lan78xx_write_raw_eeprom(struct lan78xx_net *dev, u32 offset, in lan78xx_write_raw_eeprom() argument
979 ret = lan78xx_read_reg(dev, HW_CFG, &val); in lan78xx_write_raw_eeprom()
981 if (dev->chipid == ID_REV_CHIP_ID_7800_) { in lan78xx_write_raw_eeprom()
983 ret = lan78xx_write_reg(dev, HW_CFG, val); in lan78xx_write_raw_eeprom()
986 retval = lan78xx_eeprom_confirm_not_busy(dev); in lan78xx_write_raw_eeprom()
992 ret = lan78xx_write_reg(dev, E2P_CMD, val); in lan78xx_write_raw_eeprom()
998 retval = lan78xx_wait_eeprom(dev); in lan78xx_write_raw_eeprom()
1005 ret = lan78xx_write_reg(dev, E2P_DATA, val); in lan78xx_write_raw_eeprom()
1014 ret = lan78xx_write_reg(dev, E2P_CMD, val); in lan78xx_write_raw_eeprom()
1020 retval = lan78xx_wait_eeprom(dev); in lan78xx_write_raw_eeprom()
1029 if (dev->chipid == ID_REV_CHIP_ID_7800_) in lan78xx_write_raw_eeprom()
1030 ret = lan78xx_write_reg(dev, HW_CFG, saved); in lan78xx_write_raw_eeprom()
1035 static int lan78xx_read_raw_otp(struct lan78xx_net *dev, u32 offset, in lan78xx_read_raw_otp() argument
1042 lan78xx_read_reg(dev, OTP_PWR_DN, &buf); in lan78xx_read_raw_otp()
1046 lan78xx_write_reg(dev, OTP_PWR_DN, 0); in lan78xx_read_raw_otp()
1051 lan78xx_read_reg(dev, OTP_PWR_DN, &buf); in lan78xx_read_raw_otp()
1053 netdev_warn(dev->net, in lan78xx_read_raw_otp()
1061 lan78xx_write_reg(dev, OTP_ADDR1, in lan78xx_read_raw_otp()
1063 lan78xx_write_reg(dev, OTP_ADDR2, in lan78xx_read_raw_otp()
1066 lan78xx_write_reg(dev, OTP_FUNC_CMD, OTP_FUNC_CMD_READ_); in lan78xx_read_raw_otp()
1067 lan78xx_write_reg(dev, OTP_CMD_GO, OTP_CMD_GO_GO_); in lan78xx_read_raw_otp()
1072 lan78xx_read_reg(dev, OTP_STATUS, &buf); in lan78xx_read_raw_otp()
1074 netdev_warn(dev->net, in lan78xx_read_raw_otp()
1080 lan78xx_read_reg(dev, OTP_RD_DATA, &buf); in lan78xx_read_raw_otp()
1088 static int lan78xx_write_raw_otp(struct lan78xx_net *dev, u32 offset, in lan78xx_write_raw_otp() argument
1095 lan78xx_read_reg(dev, OTP_PWR_DN, &buf); in lan78xx_write_raw_otp()
1099 lan78xx_write_reg(dev, OTP_PWR_DN, 0); in lan78xx_write_raw_otp()
1104 lan78xx_read_reg(dev, OTP_PWR_DN, &buf); in lan78xx_write_raw_otp()
1106 netdev_warn(dev->net, in lan78xx_write_raw_otp()
1114 lan78xx_write_reg(dev, OTP_PRGM_MODE, OTP_PRGM_MODE_BYTE_); in lan78xx_write_raw_otp()
1117 lan78xx_write_reg(dev, OTP_ADDR1, in lan78xx_write_raw_otp()
1119 lan78xx_write_reg(dev, OTP_ADDR2, in lan78xx_write_raw_otp()
1121 lan78xx_write_reg(dev, OTP_PRGM_DATA, data[i]); in lan78xx_write_raw_otp()
1122 lan78xx_write_reg(dev, OTP_TST_CMD, OTP_TST_CMD_PRGVRFY_); in lan78xx_write_raw_otp()
1123 lan78xx_write_reg(dev, OTP_CMD_GO, OTP_CMD_GO_GO_); in lan78xx_write_raw_otp()
1128 lan78xx_read_reg(dev, OTP_STATUS, &buf); in lan78xx_write_raw_otp()
1130 netdev_warn(dev->net, in lan78xx_write_raw_otp()
1140 static int lan78xx_read_otp(struct lan78xx_net *dev, u32 offset, in lan78xx_read_otp() argument
1146 ret = lan78xx_read_raw_otp(dev, 0, 1, &sig); in lan78xx_read_otp()
1154 ret = lan78xx_read_raw_otp(dev, offset, length, data); in lan78xx_read_otp()
1160 static int lan78xx_dataport_wait_not_busy(struct lan78xx_net *dev) in lan78xx_dataport_wait_not_busy() argument
1167 ret = lan78xx_read_reg(dev, DP_SEL, &dp_sel); in lan78xx_dataport_wait_not_busy()
1177 netdev_warn(dev->net, "%s timed out", __func__); in lan78xx_dataport_wait_not_busy()
1182 static int lan78xx_dataport_write(struct lan78xx_net *dev, u32 ram_select, in lan78xx_dataport_write() argument
1185 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_dataport_write()
1189 if (usb_autopm_get_interface(dev->intf) < 0) in lan78xx_dataport_write()
1194 ret = lan78xx_dataport_wait_not_busy(dev); in lan78xx_dataport_write()
1198 ret = lan78xx_read_reg(dev, DP_SEL, &dp_sel); in lan78xx_dataport_write()
1202 ret = lan78xx_write_reg(dev, DP_SEL, dp_sel); in lan78xx_dataport_write()
1205 ret = lan78xx_write_reg(dev, DP_ADDR, addr + i); in lan78xx_dataport_write()
1207 ret = lan78xx_write_reg(dev, DP_DATA, buf[i]); in lan78xx_dataport_write()
1209 ret = lan78xx_write_reg(dev, DP_CMD, DP_CMD_WRITE_); in lan78xx_dataport_write()
1211 ret = lan78xx_dataport_wait_not_busy(dev); in lan78xx_dataport_write()
1218 usb_autopm_put_interface(dev->intf); in lan78xx_dataport_write()
1251 struct lan78xx_net *dev = pdata->dev; in lan78xx_deferred_multicast_write() local
1254 netif_dbg(dev, drv, dev->net, "deferred multicast write 0x%08x\n", in lan78xx_deferred_multicast_write()
1257 lan78xx_dataport_write(dev, DP_SEL_RSEL_VLAN_DA_, DP_SEL_VHF_VLAN_LEN, in lan78xx_deferred_multicast_write()
1261 lan78xx_write_reg(dev, MAF_HI(i), 0); in lan78xx_deferred_multicast_write()
1262 lan78xx_write_reg(dev, MAF_LO(i), in lan78xx_deferred_multicast_write()
1264 lan78xx_write_reg(dev, MAF_HI(i), in lan78xx_deferred_multicast_write()
1268 lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); in lan78xx_deferred_multicast_write()
1273 struct lan78xx_net *dev = netdev_priv(netdev); in lan78xx_set_multicast() local
1274 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_set_multicast()
1294 if (dev->net->flags & IFF_PROMISC) { in lan78xx_set_multicast()
1295 netif_dbg(dev, drv, dev->net, "promiscuous mode enabled"); in lan78xx_set_multicast()
1298 if (dev->net->flags & IFF_ALLMULTI) { in lan78xx_set_multicast()
1299 netif_dbg(dev, drv, dev->net, in lan78xx_set_multicast()
1305 if (netdev_mc_count(dev->net)) { in lan78xx_set_multicast()
1309 netif_dbg(dev, drv, dev->net, "receive multicast hash filter"); in lan78xx_set_multicast()
1335 static int lan78xx_update_flowcontrol(struct lan78xx_net *dev, u8 duplex, in lan78xx_update_flowcontrol() argument
1341 if (dev->fc_autoneg) in lan78xx_update_flowcontrol()
1344 cap = dev->fc_request_control; in lan78xx_update_flowcontrol()
1352 if (dev->udev->speed == USB_SPEED_SUPER) in lan78xx_update_flowcontrol()
1354 else if (dev->udev->speed == USB_SPEED_HIGH) in lan78xx_update_flowcontrol()
1357 netif_dbg(dev, link, dev->net, "rx pause %s, tx pause %s", in lan78xx_update_flowcontrol()
1361 lan78xx_write_reg(dev, FCT_FLOW, fct_flow); in lan78xx_update_flowcontrol()
1364 lan78xx_write_reg(dev, FLOW, flow); in lan78xx_update_flowcontrol()
1369 static void lan78xx_rx_urb_submit_all(struct lan78xx_net *dev);
1371 static int lan78xx_mac_reset(struct lan78xx_net *dev) in lan78xx_mac_reset() argument
1377 mutex_lock(&dev->phy_mutex); in lan78xx_mac_reset()
1383 ret = lan78xx_phy_wait_not_busy(dev); in lan78xx_mac_reset()
1387 ret = lan78xx_read_reg(dev, MAC_CR, &val); in lan78xx_mac_reset()
1392 ret = lan78xx_write_reg(dev, MAC_CR, val); in lan78xx_mac_reset()
1400 ret = lan78xx_read_reg(dev, MAC_CR, &val); in lan78xx_mac_reset()
1412 mutex_unlock(&dev->phy_mutex); in lan78xx_mac_reset()
1417 static int lan78xx_link_reset(struct lan78xx_net *dev) in lan78xx_link_reset() argument
1419 struct phy_device *phydev = dev->net->phydev; in lan78xx_link_reset()
1425 ret = lan78xx_write_reg(dev, INT_STS, INT_STS_PHY_INT_); in lan78xx_link_reset()
1434 if (!link && dev->link_on) { in lan78xx_link_reset()
1435 dev->link_on = false; in lan78xx_link_reset()
1438 ret = lan78xx_mac_reset(dev); in lan78xx_link_reset()
1442 del_timer(&dev->stat_monitor); in lan78xx_link_reset()
1443 } else if (link && !dev->link_on) { in lan78xx_link_reset()
1444 dev->link_on = true; in lan78xx_link_reset()
1448 if (dev->udev->speed == USB_SPEED_SUPER) { in lan78xx_link_reset()
1451 ret = lan78xx_read_reg(dev, USB_CFG1, &buf); in lan78xx_link_reset()
1455 ret = lan78xx_write_reg(dev, USB_CFG1, buf); in lan78xx_link_reset()
1459 ret = lan78xx_read_reg(dev, USB_CFG1, &buf); in lan78xx_link_reset()
1463 ret = lan78xx_write_reg(dev, USB_CFG1, buf); in lan78xx_link_reset()
1468 ret = lan78xx_read_reg(dev, USB_CFG1, &buf); in lan78xx_link_reset()
1473 ret = lan78xx_write_reg(dev, USB_CFG1, buf); in lan78xx_link_reset()
1487 netif_dbg(dev, link, dev->net, in lan78xx_link_reset()
1491 ret = lan78xx_update_flowcontrol(dev, ecmd.base.duplex, ladv, in lan78xx_link_reset()
1496 if (!timer_pending(&dev->stat_monitor)) { in lan78xx_link_reset()
1497 dev->delta = 1; in lan78xx_link_reset()
1498 mod_timer(&dev->stat_monitor, in lan78xx_link_reset()
1502 lan78xx_rx_urb_submit_all(dev); in lan78xx_link_reset()
1505 napi_schedule(&dev->napi); in lan78xx_link_reset()
1517 static void lan78xx_defer_kevent(struct lan78xx_net *dev, int work) in lan78xx_defer_kevent() argument
1519 set_bit(work, &dev->flags); in lan78xx_defer_kevent()
1520 if (!schedule_delayed_work(&dev->wq, 0)) in lan78xx_defer_kevent()
1521 netdev_err(dev->net, "kevent %d may have been dropped\n", work); in lan78xx_defer_kevent()
1524 static void lan78xx_status(struct lan78xx_net *dev, struct urb *urb) in lan78xx_status() argument
1529 netdev_warn(dev->net, in lan78xx_status()
1537 netif_dbg(dev, link, dev->net, "PHY INTR: 0x%08x\n", intdata); in lan78xx_status()
1538 lan78xx_defer_kevent(dev, EVENT_LINK_RESET); in lan78xx_status()
1540 if (dev->domain_data.phyirq > 0) in lan78xx_status()
1541 generic_handle_irq_safe(dev->domain_data.phyirq); in lan78xx_status()
1543 netdev_warn(dev->net, in lan78xx_status()
1556 struct lan78xx_net *dev = netdev_priv(netdev); in lan78xx_ethtool_get_eeprom() local
1559 ret = usb_autopm_get_interface(dev->intf); in lan78xx_ethtool_get_eeprom()
1565 ret = lan78xx_read_raw_eeprom(dev, ee->offset, ee->len, data); in lan78xx_ethtool_get_eeprom()
1567 usb_autopm_put_interface(dev->intf); in lan78xx_ethtool_get_eeprom()
1575 struct lan78xx_net *dev = netdev_priv(netdev); in lan78xx_ethtool_set_eeprom() local
1578 ret = usb_autopm_get_interface(dev->intf); in lan78xx_ethtool_set_eeprom()
1586 ret = lan78xx_write_raw_eeprom(dev, ee->offset, ee->len, data); in lan78xx_ethtool_set_eeprom()
1591 ret = lan78xx_write_raw_otp(dev, ee->offset, ee->len, data); in lan78xx_ethtool_set_eeprom()
1593 usb_autopm_put_interface(dev->intf); in lan78xx_ethtool_set_eeprom()
1616 struct lan78xx_net *dev = netdev_priv(netdev); in lan78xx_get_stats() local
1618 lan78xx_update_stats(dev); in lan78xx_get_stats()
1620 mutex_lock(&dev->stats.access_lock); in lan78xx_get_stats()
1621 memcpy(data, &dev->stats.curr_stat, sizeof(dev->stats.curr_stat)); in lan78xx_get_stats()
1622 mutex_unlock(&dev->stats.access_lock); in lan78xx_get_stats()
1628 struct lan78xx_net *dev = netdev_priv(netdev); in lan78xx_get_wol() local
1631 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_get_wol()
1633 if (usb_autopm_get_interface(dev->intf) < 0) in lan78xx_get_wol()
1636 ret = lan78xx_read_reg(dev, USB_CFG0, &buf); in lan78xx_get_wol()
1650 usb_autopm_put_interface(dev->intf); in lan78xx_get_wol()
1656 struct lan78xx_net *dev = netdev_priv(netdev); in lan78xx_set_wol() local
1657 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_set_wol()
1660 ret = usb_autopm_get_interface(dev->intf); in lan78xx_set_wol()
1669 device_set_wakeup_enable(&dev->udev->dev, (bool)wol->wolopts); in lan78xx_set_wol()
1673 usb_autopm_put_interface(dev->intf); in lan78xx_set_wol()
1680 struct lan78xx_net *dev = netdev_priv(net); in lan78xx_get_eee() local
1685 ret = usb_autopm_get_interface(dev->intf); in lan78xx_get_eee()
1693 ret = lan78xx_read_reg(dev, MAC_CR, &buf); in lan78xx_get_eee()
1700 ret = lan78xx_read_reg(dev, EEE_TX_LPI_REQ_DLY, &buf); in lan78xx_get_eee()
1711 usb_autopm_put_interface(dev->intf); in lan78xx_get_eee()
1718 struct lan78xx_net *dev = netdev_priv(net); in lan78xx_set_eee() local
1722 ret = usb_autopm_get_interface(dev->intf); in lan78xx_set_eee()
1727 ret = lan78xx_read_reg(dev, MAC_CR, &buf); in lan78xx_set_eee()
1729 ret = lan78xx_write_reg(dev, MAC_CR, buf); in lan78xx_set_eee()
1734 ret = lan78xx_write_reg(dev, EEE_TX_LPI_REQ_DLY, buf); in lan78xx_set_eee()
1736 ret = lan78xx_read_reg(dev, MAC_CR, &buf); in lan78xx_set_eee()
1738 ret = lan78xx_write_reg(dev, MAC_CR, buf); in lan78xx_set_eee()
1741 usb_autopm_put_interface(dev->intf); in lan78xx_set_eee()
1761 struct lan78xx_net *dev = netdev_priv(net); in lan78xx_get_drvinfo() local
1764 usb_make_path(dev->udev, info->bus_info, sizeof(info->bus_info)); in lan78xx_get_drvinfo()
1769 struct lan78xx_net *dev = netdev_priv(net); in lan78xx_get_msglevel() local
1771 return dev->msg_enable; in lan78xx_get_msglevel()
1776 struct lan78xx_net *dev = netdev_priv(net); in lan78xx_set_msglevel() local
1778 dev->msg_enable = level; in lan78xx_set_msglevel()
1784 struct lan78xx_net *dev = netdev_priv(net); in lan78xx_get_link_ksettings() local
1788 ret = usb_autopm_get_interface(dev->intf); in lan78xx_get_link_ksettings()
1794 usb_autopm_put_interface(dev->intf); in lan78xx_get_link_ksettings()
1802 struct lan78xx_net *dev = netdev_priv(net); in lan78xx_set_link_ksettings() local
1807 ret = usb_autopm_get_interface(dev->intf); in lan78xx_set_link_ksettings()
1822 usb_autopm_put_interface(dev->intf); in lan78xx_set_link_ksettings()
1830 struct lan78xx_net *dev = netdev_priv(net); in lan78xx_get_pause() local
1836 pause->autoneg = dev->fc_autoneg; in lan78xx_get_pause()
1838 if (dev->fc_request_control & FLOW_CTRL_TX) in lan78xx_get_pause()
1841 if (dev->fc_request_control & FLOW_CTRL_RX) in lan78xx_get_pause()
1848 struct lan78xx_net *dev = netdev_priv(net); in lan78xx_set_pause() local
1860 dev->fc_request_control = 0; in lan78xx_set_pause()
1862 dev->fc_request_control |= FLOW_CTRL_RX; in lan78xx_set_pause()
1865 dev->fc_request_control |= FLOW_CTRL_TX; in lan78xx_set_pause()
1875 mii_adv = (u32)mii_advertise_flowctrl(dev->fc_request_control); in lan78xx_set_pause()
1883 dev->fc_autoneg = pause->autoneg; in lan78xx_set_pause()
1904 struct lan78xx_net *dev = netdev_priv(netdev); in lan78xx_get_regs() local
1908 lan78xx_read_reg(dev, lan78xx_regs[i], &data[i]); in lan78xx_get_regs()
1943 static void lan78xx_init_mac_address(struct lan78xx_net *dev) in lan78xx_init_mac_address() argument
1948 lan78xx_read_reg(dev, RX_ADDRL, &addr_lo); in lan78xx_init_mac_address()
1949 lan78xx_read_reg(dev, RX_ADDRH, &addr_hi); in lan78xx_init_mac_address()
1959 if (!eth_platform_get_mac_address(&dev->udev->dev, addr)) { in lan78xx_init_mac_address()
1961 netif_dbg(dev, ifup, dev->net, in lan78xx_init_mac_address()
1963 } else if (((lan78xx_read_eeprom(dev, EEPROM_MAC_OFFSET, in lan78xx_init_mac_address()
1965 (lan78xx_read_otp(dev, EEPROM_MAC_OFFSET, in lan78xx_init_mac_address()
1969 netif_dbg(dev, ifup, dev->net, in lan78xx_init_mac_address()
1974 netif_dbg(dev, ifup, dev->net, in lan78xx_init_mac_address()
1982 lan78xx_write_reg(dev, RX_ADDRL, addr_lo); in lan78xx_init_mac_address()
1983 lan78xx_write_reg(dev, RX_ADDRH, addr_hi); in lan78xx_init_mac_address()
1986 lan78xx_write_reg(dev, MAF_LO(0), addr_lo); in lan78xx_init_mac_address()
1987 lan78xx_write_reg(dev, MAF_HI(0), addr_hi | MAF_HI_VALID_); in lan78xx_init_mac_address()
1989 eth_hw_addr_set(dev->net, addr); in lan78xx_init_mac_address()
1995 struct lan78xx_net *dev = bus->priv; in lan78xx_mdiobus_read() local
1999 ret = usb_autopm_get_interface(dev->intf); in lan78xx_mdiobus_read()
2003 mutex_lock(&dev->phy_mutex); in lan78xx_mdiobus_read()
2006 ret = lan78xx_phy_wait_not_busy(dev); in lan78xx_mdiobus_read()
2012 ret = lan78xx_write_reg(dev, MII_ACC, addr); in lan78xx_mdiobus_read()
2014 ret = lan78xx_phy_wait_not_busy(dev); in lan78xx_mdiobus_read()
2018 ret = lan78xx_read_reg(dev, MII_DATA, &val); in lan78xx_mdiobus_read()
2023 mutex_unlock(&dev->phy_mutex); in lan78xx_mdiobus_read()
2024 usb_autopm_put_interface(dev->intf); in lan78xx_mdiobus_read()
2032 struct lan78xx_net *dev = bus->priv; in lan78xx_mdiobus_write() local
2036 ret = usb_autopm_get_interface(dev->intf); in lan78xx_mdiobus_write()
2040 mutex_lock(&dev->phy_mutex); in lan78xx_mdiobus_write()
2043 ret = lan78xx_phy_wait_not_busy(dev); in lan78xx_mdiobus_write()
2048 ret = lan78xx_write_reg(dev, MII_DATA, val); in lan78xx_mdiobus_write()
2052 ret = lan78xx_write_reg(dev, MII_ACC, addr); in lan78xx_mdiobus_write()
2054 ret = lan78xx_phy_wait_not_busy(dev); in lan78xx_mdiobus_write()
2059 mutex_unlock(&dev->phy_mutex); in lan78xx_mdiobus_write()
2060 usb_autopm_put_interface(dev->intf); in lan78xx_mdiobus_write()
2064 static int lan78xx_mdio_init(struct lan78xx_net *dev) in lan78xx_mdio_init() argument
2069 dev->mdiobus = mdiobus_alloc(); in lan78xx_mdio_init()
2070 if (!dev->mdiobus) { in lan78xx_mdio_init()
2071 netdev_err(dev->net, "can't allocate MDIO bus\n"); in lan78xx_mdio_init()
2075 dev->mdiobus->priv = (void *)dev; in lan78xx_mdio_init()
2076 dev->mdiobus->read = lan78xx_mdiobus_read; in lan78xx_mdio_init()
2077 dev->mdiobus->write = lan78xx_mdiobus_write; in lan78xx_mdio_init()
2078 dev->mdiobus->name = "lan78xx-mdiobus"; in lan78xx_mdio_init()
2079 dev->mdiobus->parent = &dev->udev->dev; in lan78xx_mdio_init()
2081 snprintf(dev->mdiobus->id, MII_BUS_ID_SIZE, "usb-%03d:%03d", in lan78xx_mdio_init()
2082 dev->udev->bus->busnum, dev->udev->devnum); in lan78xx_mdio_init()
2084 switch (dev->chipid) { in lan78xx_mdio_init()
2088 dev->mdiobus->phy_mask = ~(1 << 1); in lan78xx_mdio_init()
2092 dev->mdiobus->phy_mask = ~(0xFF); in lan78xx_mdio_init()
2096 node = of_get_child_by_name(dev->udev->dev.of_node, "mdio"); in lan78xx_mdio_init()
2097 ret = of_mdiobus_register(dev->mdiobus, node); in lan78xx_mdio_init()
2100 netdev_err(dev->net, "can't register MDIO bus\n"); in lan78xx_mdio_init()
2104 netdev_dbg(dev->net, "registered mdiobus bus %s\n", dev->mdiobus->id); in lan78xx_mdio_init()
2107 mdiobus_free(dev->mdiobus); in lan78xx_mdio_init()
2111 static void lan78xx_remove_mdio(struct lan78xx_net *dev) in lan78xx_remove_mdio() argument
2113 mdiobus_unregister(dev->mdiobus); in lan78xx_remove_mdio()
2114 mdiobus_free(dev->mdiobus); in lan78xx_remove_mdio()
2171 struct lan78xx_net *dev = in lan78xx_irq_bus_sync_unlock() local
2178 lan78xx_read_reg(dev, INT_EP_CTL, &buf); in lan78xx_irq_bus_sync_unlock()
2180 lan78xx_write_reg(dev, INT_EP_CTL, data->irqenable); in lan78xx_irq_bus_sync_unlock()
2193 static int lan78xx_setup_irq_domain(struct lan78xx_net *dev) in lan78xx_setup_irq_domain() argument
2201 of_node = dev->udev->dev.parent->of_node; in lan78xx_setup_irq_domain()
2203 mutex_init(&dev->domain_data.irq_lock); in lan78xx_setup_irq_domain()
2205 lan78xx_read_reg(dev, INT_EP_CTL, &buf); in lan78xx_setup_irq_domain()
2206 dev->domain_data.irqenable = buf; in lan78xx_setup_irq_domain()
2208 dev->domain_data.irqchip = &lan78xx_irqchip; in lan78xx_setup_irq_domain()
2209 dev->domain_data.irq_handler = handle_simple_irq; in lan78xx_setup_irq_domain()
2212 &chip_domain_ops, &dev->domain_data); in lan78xx_setup_irq_domain()
2226 dev->domain_data.irqdomain = irqdomain; in lan78xx_setup_irq_domain()
2227 dev->domain_data.phyirq = irqmap; in lan78xx_setup_irq_domain()
2232 static void lan78xx_remove_irq_domain(struct lan78xx_net *dev) in lan78xx_remove_irq_domain() argument
2234 if (dev->domain_data.phyirq > 0) { in lan78xx_remove_irq_domain()
2235 irq_dispose_mapping(dev->domain_data.phyirq); in lan78xx_remove_irq_domain()
2237 if (dev->domain_data.irqdomain) in lan78xx_remove_irq_domain()
2238 irq_domain_remove(dev->domain_data.irqdomain); in lan78xx_remove_irq_domain()
2240 dev->domain_data.phyirq = 0; in lan78xx_remove_irq_domain()
2241 dev->domain_data.irqdomain = NULL; in lan78xx_remove_irq_domain()
2247 struct lan78xx_net *dev = netdev_priv(phydev->attached_dev); in lan8835_fixup() local
2256 lan78xx_write_reg(dev, MAC_RGMII_ID, in lan8835_fixup()
2260 lan78xx_write_reg(dev, RGMII_TX_BYP_DLL, 0x3D00); in lan8835_fixup()
2262 dev->interface = PHY_INTERFACE_MODE_RGMII_TXID; in lan8835_fixup()
2269 struct lan78xx_net *dev = netdev_priv(phydev->attached_dev); in ksz9031rnx_fixup() local
2279 dev->interface = PHY_INTERFACE_MODE_RGMII_RXID; in ksz9031rnx_fixup()
2284 static struct phy_device *lan7801_phy_init(struct lan78xx_net *dev) in lan7801_phy_init() argument
2295 phydev = phy_find_first(dev->mdiobus); in lan7801_phy_init()
2297 netdev_dbg(dev->net, "PHY Not Found!! Registering Fixed PHY\n"); in lan7801_phy_init()
2300 netdev_err(dev->net, "No PHY/fixed_PHY found\n"); in lan7801_phy_init()
2303 netdev_dbg(dev->net, "Registered FIXED PHY\n"); in lan7801_phy_init()
2304 dev->interface = PHY_INTERFACE_MODE_RGMII; in lan7801_phy_init()
2305 ret = lan78xx_write_reg(dev, MAC_RGMII_ID, in lan7801_phy_init()
2307 ret = lan78xx_write_reg(dev, RGMII_TX_BYP_DLL, 0x3D00); in lan7801_phy_init()
2308 ret = lan78xx_read_reg(dev, HW_CFG, &buf); in lan7801_phy_init()
2311 ret = lan78xx_write_reg(dev, HW_CFG, buf); in lan7801_phy_init()
2314 netdev_err(dev->net, "no PHY driver found\n"); in lan7801_phy_init()
2317 dev->interface = PHY_INTERFACE_MODE_RGMII; in lan7801_phy_init()
2322 netdev_err(dev->net, "Failed to register fixup for PHY_KSZ9031RNX\n"); in lan7801_phy_init()
2329 netdev_err(dev->net, "Failed to register fixup for PHY_LAN8835\n"); in lan7801_phy_init()
2339 static int lan78xx_phy_init(struct lan78xx_net *dev) in lan78xx_phy_init() argument
2346 switch (dev->chipid) { in lan78xx_phy_init()
2348 phydev = lan7801_phy_init(dev); in lan78xx_phy_init()
2350 netdev_err(dev->net, "lan7801: PHY Init Failed"); in lan78xx_phy_init()
2357 phydev = phy_find_first(dev->mdiobus); in lan78xx_phy_init()
2359 netdev_err(dev->net, "no PHY found\n"); in lan78xx_phy_init()
2363 dev->interface = PHY_INTERFACE_MODE_GMII; in lan78xx_phy_init()
2367 netdev_err(dev->net, "Unknown CHIP ID found\n"); in lan78xx_phy_init()
2372 if (dev->domain_data.phyirq > 0) in lan78xx_phy_init()
2373 phydev->irq = dev->domain_data.phyirq; in lan78xx_phy_init()
2376 netdev_dbg(dev->net, "phydev->irq = %d\n", phydev->irq); in lan78xx_phy_init()
2381 ret = phy_connect_direct(dev->net, phydev, in lan78xx_phy_init()
2383 dev->interface); in lan78xx_phy_init()
2385 netdev_err(dev->net, "can't attach PHY to %s\n", in lan78xx_phy_init()
2386 dev->mdiobus->id); in lan78xx_phy_init()
2387 if (dev->chipid == ID_REV_CHIP_ID_7801_) { in lan78xx_phy_init()
2404 dev->fc_request_control = (FLOW_CTRL_RX | FLOW_CTRL_TX); in lan78xx_phy_init()
2409 mii_adv = (u32)mii_advertise_flowctrl(dev->fc_request_control); in lan78xx_phy_init()
2413 if (phydev->mdio.dev.of_node) { in lan78xx_phy_init()
2417 len = of_property_count_elems_of_size(phydev->mdio.dev.of_node, in lan78xx_phy_init()
2422 lan78xx_read_reg(dev, HW_CFG, &reg); in lan78xx_phy_init()
2431 lan78xx_write_reg(dev, HW_CFG, reg); in lan78xx_phy_init()
2437 dev->fc_autoneg = phydev->autoneg; in lan78xx_phy_init()
2442 static int lan78xx_set_rx_max_frame_length(struct lan78xx_net *dev, int size) in lan78xx_set_rx_max_frame_length() argument
2447 lan78xx_read_reg(dev, MAC_RX, &buf); in lan78xx_set_rx_max_frame_length()
2453 lan78xx_write_reg(dev, MAC_RX, buf); in lan78xx_set_rx_max_frame_length()
2460 lan78xx_write_reg(dev, MAC_RX, buf); in lan78xx_set_rx_max_frame_length()
2464 lan78xx_write_reg(dev, MAC_RX, buf); in lan78xx_set_rx_max_frame_length()
2470 static int unlink_urbs(struct lan78xx_net *dev, struct sk_buff_head *q) in unlink_urbs() argument
2505 netdev_dbg(dev->net, "unlink urb err, %d\n", ret); in unlink_urbs()
2517 struct lan78xx_net *dev = netdev_priv(netdev); in lan78xx_change_mtu() local
2522 if ((max_frame_len % dev->maxpacket) == 0) in lan78xx_change_mtu()
2525 ret = usb_autopm_get_interface(dev->intf); in lan78xx_change_mtu()
2529 ret = lan78xx_set_rx_max_frame_length(dev, max_frame_len); in lan78xx_change_mtu()
2533 usb_autopm_put_interface(dev->intf); in lan78xx_change_mtu()
2540 struct lan78xx_net *dev = netdev_priv(netdev); in lan78xx_set_mac_addr() local
2559 lan78xx_write_reg(dev, RX_ADDRL, addr_lo); in lan78xx_set_mac_addr()
2560 lan78xx_write_reg(dev, RX_ADDRH, addr_hi); in lan78xx_set_mac_addr()
2563 lan78xx_write_reg(dev, MAF_LO(0), addr_lo); in lan78xx_set_mac_addr()
2564 lan78xx_write_reg(dev, MAF_HI(0), addr_hi | MAF_HI_VALID_); in lan78xx_set_mac_addr()
2573 struct lan78xx_net *dev = netdev_priv(netdev); in lan78xx_set_features() local
2574 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_set_features()
2599 lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); in lan78xx_set_features()
2608 struct lan78xx_net *dev = pdata->dev; in lan78xx_deferred_vlan_write() local
2610 lan78xx_dataport_write(dev, DP_SEL_RSEL_VLAN_DA_, 0, in lan78xx_deferred_vlan_write()
2617 struct lan78xx_net *dev = netdev_priv(netdev); in lan78xx_vlan_rx_add_vid() local
2618 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_vlan_rx_add_vid()
2636 struct lan78xx_net *dev = netdev_priv(netdev); in lan78xx_vlan_rx_kill_vid() local
2637 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_vlan_rx_kill_vid()
2652 static void lan78xx_init_ltm(struct lan78xx_net *dev) in lan78xx_init_ltm() argument
2658 ret = lan78xx_read_reg(dev, USB_CFG1, &buf); in lan78xx_init_ltm()
2662 if (lan78xx_read_eeprom(dev, 0x3F, 2, temp) == 0) { in lan78xx_init_ltm()
2664 ret = lan78xx_read_raw_eeprom(dev, in lan78xx_init_ltm()
2671 } else if (lan78xx_read_otp(dev, 0x3F, 2, temp) == 0) { in lan78xx_init_ltm()
2673 ret = lan78xx_read_raw_otp(dev, in lan78xx_init_ltm()
2683 lan78xx_write_reg(dev, LTM_BELT_IDLE0, regs[0]); in lan78xx_init_ltm()
2684 lan78xx_write_reg(dev, LTM_BELT_IDLE1, regs[1]); in lan78xx_init_ltm()
2685 lan78xx_write_reg(dev, LTM_BELT_ACT0, regs[2]); in lan78xx_init_ltm()
2686 lan78xx_write_reg(dev, LTM_BELT_ACT1, regs[3]); in lan78xx_init_ltm()
2687 lan78xx_write_reg(dev, LTM_INACTIVE0, regs[4]); in lan78xx_init_ltm()
2688 lan78xx_write_reg(dev, LTM_INACTIVE1, regs[5]); in lan78xx_init_ltm()
2691 static int lan78xx_urb_config_init(struct lan78xx_net *dev) in lan78xx_urb_config_init() argument
2695 switch (dev->udev->speed) { in lan78xx_urb_config_init()
2697 dev->rx_urb_size = RX_SS_URB_SIZE; in lan78xx_urb_config_init()
2698 dev->tx_urb_size = TX_SS_URB_SIZE; in lan78xx_urb_config_init()
2699 dev->n_rx_urbs = RX_SS_URB_NUM; in lan78xx_urb_config_init()
2700 dev->n_tx_urbs = TX_SS_URB_NUM; in lan78xx_urb_config_init()
2701 dev->bulk_in_delay = SS_BULK_IN_DELAY; in lan78xx_urb_config_init()
2702 dev->burst_cap = SS_BURST_CAP_SIZE / SS_USB_PKT_SIZE; in lan78xx_urb_config_init()
2705 dev->rx_urb_size = RX_HS_URB_SIZE; in lan78xx_urb_config_init()
2706 dev->tx_urb_size = TX_HS_URB_SIZE; in lan78xx_urb_config_init()
2707 dev->n_rx_urbs = RX_HS_URB_NUM; in lan78xx_urb_config_init()
2708 dev->n_tx_urbs = TX_HS_URB_NUM; in lan78xx_urb_config_init()
2709 dev->bulk_in_delay = HS_BULK_IN_DELAY; in lan78xx_urb_config_init()
2710 dev->burst_cap = HS_BURST_CAP_SIZE / HS_USB_PKT_SIZE; in lan78xx_urb_config_init()
2713 dev->rx_urb_size = RX_FS_URB_SIZE; in lan78xx_urb_config_init()
2714 dev->tx_urb_size = TX_FS_URB_SIZE; in lan78xx_urb_config_init()
2715 dev->n_rx_urbs = RX_FS_URB_NUM; in lan78xx_urb_config_init()
2716 dev->n_tx_urbs = TX_FS_URB_NUM; in lan78xx_urb_config_init()
2717 dev->bulk_in_delay = FS_BULK_IN_DELAY; in lan78xx_urb_config_init()
2718 dev->burst_cap = FS_BURST_CAP_SIZE / FS_USB_PKT_SIZE; in lan78xx_urb_config_init()
2721 netdev_warn(dev->net, "USB bus speed not supported\n"); in lan78xx_urb_config_init()
2729 static int lan78xx_start_hw(struct lan78xx_net *dev, u32 reg, u32 hw_enable) in lan78xx_start_hw() argument
2731 return lan78xx_update_reg(dev, reg, hw_enable, hw_enable); in lan78xx_start_hw()
2734 static int lan78xx_stop_hw(struct lan78xx_net *dev, u32 reg, u32 hw_enabled, in lan78xx_stop_hw() argument
2744 ret = lan78xx_read_reg(dev, reg, &buf); in lan78xx_stop_hw()
2751 ret = lan78xx_write_reg(dev, reg, buf); in lan78xx_stop_hw()
2758 ret = lan78xx_read_reg(dev, reg, &buf); in lan78xx_stop_hw()
2774 static int lan78xx_flush_fifo(struct lan78xx_net *dev, u32 reg, u32 fifo_flush) in lan78xx_flush_fifo() argument
2776 return lan78xx_update_reg(dev, reg, fifo_flush, fifo_flush); in lan78xx_flush_fifo()
2779 static int lan78xx_start_tx_path(struct lan78xx_net *dev) in lan78xx_start_tx_path() argument
2783 netif_dbg(dev, drv, dev->net, "start tx path"); in lan78xx_start_tx_path()
2787 ret = lan78xx_start_hw(dev, MAC_TX, MAC_TX_TXEN_); in lan78xx_start_tx_path()
2793 ret = lan78xx_start_hw(dev, FCT_TX_CTL, FCT_TX_CTL_EN_); in lan78xx_start_tx_path()
2800 static int lan78xx_stop_tx_path(struct lan78xx_net *dev) in lan78xx_stop_tx_path() argument
2804 netif_dbg(dev, drv, dev->net, "stop tx path"); in lan78xx_stop_tx_path()
2808 ret = lan78xx_stop_hw(dev, FCT_TX_CTL, FCT_TX_CTL_EN_, FCT_TX_CTL_DIS_); in lan78xx_stop_tx_path()
2814 ret = lan78xx_stop_hw(dev, MAC_TX, MAC_TX_TXEN_, MAC_TX_TXD_); in lan78xx_stop_tx_path()
2824 static int lan78xx_flush_tx_fifo(struct lan78xx_net *dev) in lan78xx_flush_tx_fifo() argument
2826 return lan78xx_flush_fifo(dev, FCT_TX_CTL, FCT_TX_CTL_RST_); in lan78xx_flush_tx_fifo()
2829 static int lan78xx_start_rx_path(struct lan78xx_net *dev) in lan78xx_start_rx_path() argument
2833 netif_dbg(dev, drv, dev->net, "start rx path"); in lan78xx_start_rx_path()
2837 ret = lan78xx_start_hw(dev, FCT_RX_CTL, FCT_RX_CTL_EN_); in lan78xx_start_rx_path()
2843 ret = lan78xx_start_hw(dev, MAC_RX, MAC_RX_RXEN_); in lan78xx_start_rx_path()
2850 static int lan78xx_stop_rx_path(struct lan78xx_net *dev) in lan78xx_stop_rx_path() argument
2854 netif_dbg(dev, drv, dev->net, "stop rx path"); in lan78xx_stop_rx_path()
2858 ret = lan78xx_stop_hw(dev, MAC_RX, MAC_RX_RXEN_, MAC_RX_RXD_); in lan78xx_stop_rx_path()
2864 ret = lan78xx_stop_hw(dev, FCT_RX_CTL, FCT_RX_CTL_EN_, FCT_RX_CTL_DIS_); in lan78xx_stop_rx_path()
2874 static int lan78xx_flush_rx_fifo(struct lan78xx_net *dev) in lan78xx_flush_rx_fifo() argument
2876 return lan78xx_flush_fifo(dev, FCT_RX_CTL, FCT_RX_CTL_RST_); in lan78xx_flush_rx_fifo()
2879 static int lan78xx_reset(struct lan78xx_net *dev) in lan78xx_reset() argument
2881 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_reset()
2887 ret = lan78xx_read_reg(dev, HW_CFG, &buf); in lan78xx_reset()
2893 ret = lan78xx_write_reg(dev, HW_CFG, buf); in lan78xx_reset()
2900 ret = lan78xx_read_reg(dev, HW_CFG, &buf); in lan78xx_reset()
2905 netdev_warn(dev->net, in lan78xx_reset()
2912 lan78xx_init_mac_address(dev); in lan78xx_reset()
2915 ret = lan78xx_read_reg(dev, ID_REV, &buf); in lan78xx_reset()
2919 dev->chipid = (buf & ID_REV_CHIP_ID_MASK_) >> 16; in lan78xx_reset()
2920 dev->chiprev = buf & ID_REV_CHIP_REV_MASK_; in lan78xx_reset()
2923 ret = lan78xx_read_reg(dev, USB_CFG0, &buf); in lan78xx_reset()
2929 ret = lan78xx_write_reg(dev, USB_CFG0, buf); in lan78xx_reset()
2934 lan78xx_init_ltm(dev); in lan78xx_reset()
2936 ret = lan78xx_write_reg(dev, BURST_CAP, dev->burst_cap); in lan78xx_reset()
2940 ret = lan78xx_write_reg(dev, BULK_IN_DLY, dev->bulk_in_delay); in lan78xx_reset()
2944 ret = lan78xx_read_reg(dev, HW_CFG, &buf); in lan78xx_reset()
2950 ret = lan78xx_write_reg(dev, HW_CFG, buf); in lan78xx_reset()
2954 ret = lan78xx_read_reg(dev, USB_CFG0, &buf); in lan78xx_reset()
2960 ret = lan78xx_write_reg(dev, USB_CFG0, buf); in lan78xx_reset()
2967 ret = lan78xx_write_reg(dev, FCT_RX_FIFO_END, buf); in lan78xx_reset()
2973 ret = lan78xx_write_reg(dev, FCT_TX_FIFO_END, buf); in lan78xx_reset()
2977 ret = lan78xx_write_reg(dev, INT_STS, INT_STS_CLEAR_ALL_); in lan78xx_reset()
2981 ret = lan78xx_write_reg(dev, FLOW, 0); in lan78xx_reset()
2985 ret = lan78xx_write_reg(dev, FCT_FLOW, 0); in lan78xx_reset()
2990 ret = lan78xx_read_reg(dev, RFE_CTL, &pdata->rfe_ctl); in lan78xx_reset()
2996 ret = lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); in lan78xx_reset()
3001 ret = lan78xx_set_features(dev->net, dev->net->features); in lan78xx_reset()
3005 lan78xx_set_multicast(dev->net); in lan78xx_reset()
3008 ret = lan78xx_read_reg(dev, PMT_CTL, &buf); in lan78xx_reset()
3014 ret = lan78xx_write_reg(dev, PMT_CTL, buf); in lan78xx_reset()
3021 ret = lan78xx_read_reg(dev, PMT_CTL, &buf); in lan78xx_reset()
3026 netdev_warn(dev->net, "timeout waiting for PHY Reset"); in lan78xx_reset()
3032 ret = lan78xx_read_reg(dev, MAC_CR, &buf); in lan78xx_reset()
3037 if (dev->chipid == ID_REV_CHIP_ID_7801_) in lan78xx_reset()
3040 if (dev->chipid == ID_REV_CHIP_ID_7800_ || in lan78xx_reset()
3041 dev->chipid == ID_REV_CHIP_ID_7850_) { in lan78xx_reset()
3042 ret = lan78xx_read_raw_eeprom(dev, 0, 1, &sig); in lan78xx_reset()
3045 netdev_info(dev->net, "No External EEPROM. Setting MAC Speed\n"); in lan78xx_reset()
3049 ret = lan78xx_write_reg(dev, MAC_CR, buf); in lan78xx_reset()
3053 ret = lan78xx_set_rx_max_frame_length(dev, in lan78xx_reset()
3054 RX_MAX_FRAME_LEN(dev->net->mtu)); in lan78xx_reset()
3059 static void lan78xx_init_stats(struct lan78xx_net *dev) in lan78xx_init_stats() argument
3067 p = (u32 *)&dev->stats.rollover_max; in lan78xx_init_stats()
3068 for (i = 0; i < (sizeof(dev->stats.rollover_max) / (sizeof(u32))); i++) in lan78xx_init_stats()
3071 dev->stats.rollover_max.rx_unicast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
3072 dev->stats.rollover_max.rx_broadcast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
3073 dev->stats.rollover_max.rx_multicast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
3074 dev->stats.rollover_max.eee_rx_lpi_transitions = 0xFFFFFFFF; in lan78xx_init_stats()
3075 dev->stats.rollover_max.eee_rx_lpi_time = 0xFFFFFFFF; in lan78xx_init_stats()
3076 dev->stats.rollover_max.tx_unicast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
3077 dev->stats.rollover_max.tx_broadcast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
3078 dev->stats.rollover_max.tx_multicast_byte_count = 0xFFFFFFFF; in lan78xx_init_stats()
3079 dev->stats.rollover_max.eee_tx_lpi_transitions = 0xFFFFFFFF; in lan78xx_init_stats()
3080 dev->stats.rollover_max.eee_tx_lpi_time = 0xFFFFFFFF; in lan78xx_init_stats()
3082 set_bit(EVENT_STAT_UPDATE, &dev->flags); in lan78xx_init_stats()
3087 struct lan78xx_net *dev = netdev_priv(net); in lan78xx_open() local
3090 netif_dbg(dev, ifup, dev->net, "open device"); in lan78xx_open()
3092 ret = usb_autopm_get_interface(dev->intf); in lan78xx_open()
3096 mutex_lock(&dev->dev_mutex); in lan78xx_open()
3100 netif_dbg(dev, ifup, dev->net, "phy initialised successfully"); in lan78xx_open()
3103 if (dev->urb_intr) { in lan78xx_open()
3104 ret = usb_submit_urb(dev->urb_intr, GFP_KERNEL); in lan78xx_open()
3106 netif_err(dev, ifup, dev->net, in lan78xx_open()
3112 ret = lan78xx_flush_rx_fifo(dev); in lan78xx_open()
3115 ret = lan78xx_flush_tx_fifo(dev); in lan78xx_open()
3119 ret = lan78xx_start_tx_path(dev); in lan78xx_open()
3122 ret = lan78xx_start_rx_path(dev); in lan78xx_open()
3126 lan78xx_init_stats(dev); in lan78xx_open()
3128 set_bit(EVENT_DEV_OPEN, &dev->flags); in lan78xx_open()
3132 dev->link_on = false; in lan78xx_open()
3134 napi_enable(&dev->napi); in lan78xx_open()
3136 lan78xx_defer_kevent(dev, EVENT_LINK_RESET); in lan78xx_open()
3138 mutex_unlock(&dev->dev_mutex); in lan78xx_open()
3141 usb_autopm_put_interface(dev->intf); in lan78xx_open()
3146 static void lan78xx_terminate_urbs(struct lan78xx_net *dev) in lan78xx_terminate_urbs() argument
3155 dev->wait = &unlink_wakeup; in lan78xx_terminate_urbs()
3156 temp = unlink_urbs(dev, &dev->txq) + unlink_urbs(dev, &dev->rxq); in lan78xx_terminate_urbs()
3159 while (!skb_queue_empty(&dev->rxq) || in lan78xx_terminate_urbs()
3160 !skb_queue_empty(&dev->txq)) { in lan78xx_terminate_urbs()
3163 netif_dbg(dev, ifdown, dev->net, in lan78xx_terminate_urbs()
3167 dev->wait = NULL; in lan78xx_terminate_urbs()
3172 while (!skb_queue_empty(&dev->rxq_done)) { in lan78xx_terminate_urbs()
3173 struct sk_buff *skb = skb_dequeue(&dev->rxq_done); in lan78xx_terminate_urbs()
3175 lan78xx_release_rx_buf(dev, skb); in lan78xx_terminate_urbs()
3178 skb_queue_purge(&dev->rxq_overflow); in lan78xx_terminate_urbs()
3179 skb_queue_purge(&dev->txq_pend); in lan78xx_terminate_urbs()
3184 struct lan78xx_net *dev = netdev_priv(net); in lan78xx_stop() local
3186 netif_dbg(dev, ifup, dev->net, "stop device"); in lan78xx_stop()
3188 mutex_lock(&dev->dev_mutex); in lan78xx_stop()
3190 if (timer_pending(&dev->stat_monitor)) in lan78xx_stop()
3191 del_timer_sync(&dev->stat_monitor); in lan78xx_stop()
3193 clear_bit(EVENT_DEV_OPEN, &dev->flags); in lan78xx_stop()
3195 napi_disable(&dev->napi); in lan78xx_stop()
3197 lan78xx_terminate_urbs(dev); in lan78xx_stop()
3199 netif_info(dev, ifdown, dev->net, in lan78xx_stop()
3205 lan78xx_stop_tx_path(dev); in lan78xx_stop()
3206 lan78xx_stop_rx_path(dev); in lan78xx_stop()
3211 usb_kill_urb(dev->urb_intr); in lan78xx_stop()
3217 clear_bit(EVENT_TX_HALT, &dev->flags); in lan78xx_stop()
3218 clear_bit(EVENT_RX_HALT, &dev->flags); in lan78xx_stop()
3219 clear_bit(EVENT_LINK_RESET, &dev->flags); in lan78xx_stop()
3220 clear_bit(EVENT_STAT_UPDATE, &dev->flags); in lan78xx_stop()
3222 cancel_delayed_work_sync(&dev->wq); in lan78xx_stop()
3224 usb_autopm_put_interface(dev->intf); in lan78xx_stop()
3226 mutex_unlock(&dev->dev_mutex); in lan78xx_stop()
3231 static enum skb_state defer_bh(struct lan78xx_net *dev, struct sk_buff *skb, in defer_bh() argument
3244 spin_lock(&dev->rxq_done.lock); in defer_bh()
3246 __skb_queue_tail(&dev->rxq_done, skb); in defer_bh()
3247 if (skb_queue_len(&dev->rxq_done) == 1) in defer_bh()
3248 napi_schedule(&dev->napi); in defer_bh()
3250 spin_unlock_irqrestore(&dev->rxq_done.lock, flags); in defer_bh()
3259 struct lan78xx_net *dev = entry->dev; in tx_complete() local
3262 dev->net->stats.tx_packets += entry->num_of_packet; in tx_complete()
3263 dev->net->stats.tx_bytes += entry->length; in tx_complete()
3265 dev->net->stats.tx_errors += entry->num_of_packet; in tx_complete()
3269 lan78xx_defer_kevent(dev, EVENT_TX_HALT); in tx_complete()
3275 netif_dbg(dev, tx_err, dev->net, in tx_complete()
3283 netif_stop_queue(dev->net); in tx_complete()
3284 netif_dbg(dev, tx_err, dev->net, in tx_complete()
3289 netif_dbg(dev, tx_err, dev->net, in tx_complete()
3296 usb_autopm_put_interface_async(dev->intf); in tx_complete()
3298 skb_unlink(skb, &dev->txq); in tx_complete()
3300 lan78xx_release_tx_buf(dev, skb); in tx_complete()
3304 if (skb_queue_empty(&dev->txq) && in tx_complete()
3305 !skb_queue_empty(&dev->txq_pend)) in tx_complete()
3306 napi_schedule(&dev->napi); in tx_complete()
3318 static unsigned int lan78xx_tx_urb_space(struct lan78xx_net *dev) in lan78xx_tx_urb_space() argument
3320 return skb_queue_len(&dev->txq_free) * dev->tx_urb_size; in lan78xx_tx_urb_space()
3323 static unsigned int lan78xx_tx_pend_data_len(struct lan78xx_net *dev) in lan78xx_tx_pend_data_len() argument
3325 return dev->tx_pend_data_len; in lan78xx_tx_pend_data_len()
3328 static void lan78xx_tx_pend_skb_add(struct lan78xx_net *dev, in lan78xx_tx_pend_skb_add() argument
3334 spin_lock_irqsave(&dev->txq_pend.lock, flags); in lan78xx_tx_pend_skb_add()
3336 __skb_queue_tail(&dev->txq_pend, skb); in lan78xx_tx_pend_skb_add()
3338 dev->tx_pend_data_len += skb->len; in lan78xx_tx_pend_skb_add()
3339 *tx_pend_data_len = dev->tx_pend_data_len; in lan78xx_tx_pend_skb_add()
3341 spin_unlock_irqrestore(&dev->txq_pend.lock, flags); in lan78xx_tx_pend_skb_add()
3344 static void lan78xx_tx_pend_skb_head_add(struct lan78xx_net *dev, in lan78xx_tx_pend_skb_head_add() argument
3350 spin_lock_irqsave(&dev->txq_pend.lock, flags); in lan78xx_tx_pend_skb_head_add()
3352 __skb_queue_head(&dev->txq_pend, skb); in lan78xx_tx_pend_skb_head_add()
3354 dev->tx_pend_data_len += skb->len; in lan78xx_tx_pend_skb_head_add()
3355 *tx_pend_data_len = dev->tx_pend_data_len; in lan78xx_tx_pend_skb_head_add()
3357 spin_unlock_irqrestore(&dev->txq_pend.lock, flags); in lan78xx_tx_pend_skb_head_add()
3360 static void lan78xx_tx_pend_skb_get(struct lan78xx_net *dev, in lan78xx_tx_pend_skb_get() argument
3366 spin_lock_irqsave(&dev->txq_pend.lock, flags); in lan78xx_tx_pend_skb_get()
3368 *skb = __skb_dequeue(&dev->txq_pend); in lan78xx_tx_pend_skb_get()
3370 dev->tx_pend_data_len -= (*skb)->len; in lan78xx_tx_pend_skb_get()
3371 *tx_pend_data_len = dev->tx_pend_data_len; in lan78xx_tx_pend_skb_get()
3373 spin_unlock_irqrestore(&dev->txq_pend.lock, flags); in lan78xx_tx_pend_skb_get()
3379 struct lan78xx_net *dev = netdev_priv(net); in lan78xx_start_xmit() local
3382 if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) in lan78xx_start_xmit()
3383 schedule_delayed_work(&dev->wq, 0); in lan78xx_start_xmit()
3387 lan78xx_tx_pend_skb_add(dev, skb, &tx_pend_data_len); in lan78xx_start_xmit()
3391 if (skb_queue_empty(&dev->txq)) in lan78xx_start_xmit()
3392 napi_schedule(&dev->napi); in lan78xx_start_xmit()
3397 if (tx_pend_data_len > lan78xx_tx_urb_space(dev)) { in lan78xx_start_xmit()
3400 netif_dbg(dev, hw, dev->net, "tx data len: %u, urb space %u", in lan78xx_start_xmit()
3401 tx_pend_data_len, lan78xx_tx_urb_space(dev)); in lan78xx_start_xmit()
3405 if (!skb_queue_empty(&dev->txq_free)) in lan78xx_start_xmit()
3406 napi_schedule(&dev->napi); in lan78xx_start_xmit()
3412 static int lan78xx_bind(struct lan78xx_net *dev, struct usb_interface *intf) in lan78xx_bind() argument
3418 dev->data[0] = (unsigned long)kzalloc(sizeof(*pdata), GFP_KERNEL); in lan78xx_bind()
3420 pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_bind()
3422 netdev_warn(dev->net, "Unable to allocate lan78xx_priv"); in lan78xx_bind()
3426 pdata->dev = dev; in lan78xx_bind()
3438 dev->net->features = 0; in lan78xx_bind()
3441 dev->net->features |= NETIF_F_HW_CSUM; in lan78xx_bind()
3444 dev->net->features |= NETIF_F_RXCSUM; in lan78xx_bind()
3447 dev->net->features |= NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_SG; in lan78xx_bind()
3450 dev->net->features |= NETIF_F_HW_VLAN_CTAG_RX; in lan78xx_bind()
3453 dev->net->features |= NETIF_F_HW_VLAN_CTAG_FILTER; in lan78xx_bind()
3455 dev->net->hw_features = dev->net->features; in lan78xx_bind()
3457 ret = lan78xx_setup_irq_domain(dev); in lan78xx_bind()
3459 netdev_warn(dev->net, in lan78xx_bind()
3465 ret = lan78xx_reset(dev); in lan78xx_bind()
3467 netdev_warn(dev->net, "Registers INIT FAILED...."); in lan78xx_bind()
3471 ret = lan78xx_mdio_init(dev); in lan78xx_bind()
3473 netdev_warn(dev->net, "MDIO INIT FAILED....."); in lan78xx_bind()
3477 dev->net->flags |= IFF_MULTICAST; in lan78xx_bind()
3484 lan78xx_remove_irq_domain(dev); in lan78xx_bind()
3487 netdev_warn(dev->net, "Bind routine FAILED"); in lan78xx_bind()
3494 static void lan78xx_unbind(struct lan78xx_net *dev, struct usb_interface *intf) in lan78xx_unbind() argument
3496 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_unbind()
3498 lan78xx_remove_irq_domain(dev); in lan78xx_unbind()
3500 lan78xx_remove_mdio(dev); in lan78xx_unbind()
3505 netif_dbg(dev, ifdown, dev->net, "free pdata"); in lan78xx_unbind()
3508 dev->data[0] = 0; in lan78xx_unbind()
3512 static void lan78xx_rx_csum_offload(struct lan78xx_net *dev, in lan78xx_rx_csum_offload() argument
3519 if (!(dev->net->features & NETIF_F_RXCSUM) || in lan78xx_rx_csum_offload()
3522 !(dev->net->features & NETIF_F_HW_VLAN_CTAG_RX))) { in lan78xx_rx_csum_offload()
3530 static void lan78xx_rx_vlan_offload(struct lan78xx_net *dev, in lan78xx_rx_vlan_offload() argument
3534 if ((dev->net->features & NETIF_F_HW_VLAN_CTAG_RX) && in lan78xx_rx_vlan_offload()
3540 static void lan78xx_skb_return(struct lan78xx_net *dev, struct sk_buff *skb) in lan78xx_skb_return() argument
3542 dev->net->stats.rx_packets++; in lan78xx_skb_return()
3543 dev->net->stats.rx_bytes += skb->len; in lan78xx_skb_return()
3545 skb->protocol = eth_type_trans(skb, dev->net); in lan78xx_skb_return()
3547 netif_dbg(dev, rx_status, dev->net, "< rx, len %zu, type 0x%x\n", in lan78xx_skb_return()
3554 napi_gro_receive(&dev->napi, skb); in lan78xx_skb_return()
3557 static int lan78xx_rx(struct lan78xx_net *dev, struct sk_buff *skb, in lan78xx_rx() argument
3587 netif_dbg(dev, rx_err, dev->net, in lan78xx_rx()
3594 netif_dbg(dev, rx_err, dev->net, in lan78xx_rx()
3601 netif_dbg(dev, rx_err, dev->net, in lan78xx_rx()
3609 skb2 = napi_alloc_skb(&dev->napi, frame_len); in lan78xx_rx()
3617 lan78xx_rx_csum_offload(dev, skb2, rx_cmd_a, rx_cmd_b); in lan78xx_rx()
3618 lan78xx_rx_vlan_offload(dev, skb2, rx_cmd_a, rx_cmd_b); in lan78xx_rx()
3626 lan78xx_skb_return(dev, skb2); in lan78xx_rx()
3629 skb_queue_tail(&dev->rxq_overflow, skb2); in lan78xx_rx()
3643 static inline void rx_process(struct lan78xx_net *dev, struct sk_buff *skb, in rx_process() argument
3646 if (!lan78xx_rx(dev, skb, budget, work_done)) { in rx_process()
3647 netif_dbg(dev, rx_err, dev->net, "drop\n"); in rx_process()
3648 dev->net->stats.rx_errors++; in rx_process()
3656 struct lan78xx_net *dev = entry->dev; in rx_complete() local
3660 netif_dbg(dev, rx_status, dev->net, in rx_complete()
3667 netif_warn(dev, rx_err, dev->net, "URB pointer mismatch"); in rx_complete()
3673 dev->net->stats.rx_errors++; in rx_complete()
3674 dev->net->stats.rx_length_errors++; in rx_complete()
3675 netif_dbg(dev, rx_err, dev->net, in rx_complete()
3678 usb_mark_last_busy(dev->udev); in rx_complete()
3681 dev->net->stats.rx_errors++; in rx_complete()
3682 lan78xx_defer_kevent(dev, EVENT_RX_HALT); in rx_complete()
3686 netif_dbg(dev, ifdown, dev->net, in rx_complete()
3693 dev->net->stats.rx_errors++; in rx_complete()
3699 dev->net->stats.rx_over_errors++; in rx_complete()
3704 dev->net->stats.rx_errors++; in rx_complete()
3705 netif_dbg(dev, rx_err, dev->net, "rx status %d\n", urb_status); in rx_complete()
3709 state = defer_bh(dev, skb, &dev->rxq, state); in rx_complete()
3712 static int rx_submit(struct lan78xx_net *dev, struct sk_buff *skb, gfp_t flags) in rx_submit() argument
3715 size_t size = dev->rx_urb_size; in rx_submit()
3720 usb_fill_bulk_urb(urb, dev->udev, dev->pipe_in, in rx_submit()
3723 spin_lock_irqsave(&dev->rxq.lock, lockflags); in rx_submit()
3725 if (netif_device_present(dev->net) && in rx_submit()
3726 netif_running(dev->net) && in rx_submit()
3727 !test_bit(EVENT_RX_HALT, &dev->flags) && in rx_submit()
3728 !test_bit(EVENT_DEV_ASLEEP, &dev->flags)) { in rx_submit()
3732 lan78xx_queue_skb(&dev->rxq, skb, rx_start); in rx_submit()
3735 lan78xx_defer_kevent(dev, EVENT_RX_HALT); in rx_submit()
3739 netif_dbg(dev, ifdown, dev->net, "device gone\n"); in rx_submit()
3740 netif_device_detach(dev->net); in rx_submit()
3744 napi_schedule(&dev->napi); in rx_submit()
3747 netif_dbg(dev, rx_err, dev->net, in rx_submit()
3749 napi_schedule(&dev->napi); in rx_submit()
3753 netif_dbg(dev, ifdown, dev->net, "rx: stopped\n"); in rx_submit()
3756 spin_unlock_irqrestore(&dev->rxq.lock, lockflags); in rx_submit()
3759 lan78xx_release_rx_buf(dev, skb); in rx_submit()
3764 static void lan78xx_rx_urb_submit_all(struct lan78xx_net *dev) in lan78xx_rx_urb_submit_all() argument
3770 while ((rx_buf = lan78xx_get_rx_buf(dev)) != NULL) { in lan78xx_rx_urb_submit_all()
3771 if (rx_submit(dev, rx_buf, GFP_ATOMIC) != 0) in lan78xx_rx_urb_submit_all()
3776 static void lan78xx_rx_urb_resubmit(struct lan78xx_net *dev, in lan78xx_rx_urb_resubmit() argument
3786 rx_submit(dev, rx_buf, GFP_ATOMIC); in lan78xx_rx_urb_resubmit()
3817 static struct skb_data *lan78xx_tx_buf_fill(struct lan78xx_net *dev, in lan78xx_tx_buf_fill() argument
3821 int remain = dev->tx_urb_size; in lan78xx_tx_buf_fill()
3839 lan78xx_tx_pend_skb_get(dev, &skb, &pending_bytes); in lan78xx_tx_buf_fill()
3848 lan78xx_tx_pend_skb_head_add(dev, skb, &pending_bytes); in lan78xx_tx_buf_fill()
3859 struct net_device_stats *stats = &dev->net->stats; in lan78xx_tx_buf_fill()
3875 remain = dev->tx_urb_size - urb_len; in lan78xx_tx_buf_fill()
3883 static void lan78xx_tx_bh(struct lan78xx_net *dev) in lan78xx_tx_bh() argument
3889 netif_tx_lock(dev->net); in lan78xx_tx_bh()
3890 if (netif_queue_stopped(dev->net)) { in lan78xx_tx_bh()
3891 if (lan78xx_tx_pend_data_len(dev) < lan78xx_tx_urb_space(dev)) in lan78xx_tx_bh()
3892 netif_wake_queue(dev->net); in lan78xx_tx_bh()
3894 netif_tx_unlock(dev->net); in lan78xx_tx_bh()
3905 if (skb_queue_empty(&dev->txq_pend)) in lan78xx_tx_bh()
3908 tx_buf = lan78xx_get_tx_buf(dev); in lan78xx_tx_bh()
3912 entry = lan78xx_tx_buf_fill(dev, tx_buf); in lan78xx_tx_bh()
3914 spin_lock_irqsave(&dev->txq.lock, flags); in lan78xx_tx_bh()
3915 ret = usb_autopm_get_interface_async(dev->intf); in lan78xx_tx_bh()
3917 spin_unlock_irqrestore(&dev->txq.lock, flags); in lan78xx_tx_bh()
3921 usb_fill_bulk_urb(entry->urb, dev->udev, dev->pipe_out, in lan78xx_tx_bh()
3925 if (tx_buf->len % dev->maxpacket == 0) { in lan78xx_tx_bh()
3932 if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) { in lan78xx_tx_bh()
3933 usb_anchor_urb(entry->urb, &dev->deferred); in lan78xx_tx_bh()
3934 netif_stop_queue(dev->net); in lan78xx_tx_bh()
3935 spin_unlock_irqrestore(&dev->txq.lock, flags); in lan78xx_tx_bh()
3936 netdev_dbg(dev->net, in lan78xx_tx_bh()
3944 netif_trans_update(dev->net); in lan78xx_tx_bh()
3945 lan78xx_queue_skb(&dev->txq, tx_buf, tx_start); in lan78xx_tx_bh()
3948 netif_stop_queue(dev->net); in lan78xx_tx_bh()
3949 lan78xx_defer_kevent(dev, EVENT_TX_HALT); in lan78xx_tx_bh()
3950 usb_autopm_put_interface_async(dev->intf); in lan78xx_tx_bh()
3954 netif_dbg(dev, tx_err, dev->net, in lan78xx_tx_bh()
3956 netif_device_detach(dev->net); in lan78xx_tx_bh()
3959 usb_autopm_put_interface_async(dev->intf); in lan78xx_tx_bh()
3960 netif_dbg(dev, tx_err, dev->net, in lan78xx_tx_bh()
3965 spin_unlock_irqrestore(&dev->txq.lock, flags); in lan78xx_tx_bh()
3968 netdev_warn(dev->net, "failed to tx urb %d\n", ret); in lan78xx_tx_bh()
3970 dev->net->stats.tx_dropped += entry->num_of_packet; in lan78xx_tx_bh()
3971 lan78xx_release_tx_buf(dev, tx_buf); in lan78xx_tx_bh()
3976 static int lan78xx_bh(struct lan78xx_net *dev, int budget) in lan78xx_bh() argument
3987 while (!skb_queue_empty(&dev->rxq_overflow)) { in lan78xx_bh()
3988 lan78xx_skb_return(dev, skb_dequeue(&dev->rxq_overflow)); in lan78xx_bh()
3998 spin_lock_irqsave(&dev->rxq_done.lock, flags); in lan78xx_bh()
3999 skb_queue_splice_init(&dev->rxq_done, &done); in lan78xx_bh()
4000 spin_unlock_irqrestore(&dev->rxq_done.lock, flags); in lan78xx_bh()
4010 rx_process(dev, rx_buf, budget, &work_done); in lan78xx_bh()
4015 netdev_dbg(dev->net, "rx buf state %d\n", in lan78xx_bh()
4020 lan78xx_rx_urb_resubmit(dev, rx_buf); in lan78xx_bh()
4027 spin_lock_irqsave(&dev->rxq_done.lock, flags); in lan78xx_bh()
4028 skb_queue_splice(&done, &dev->rxq_done); in lan78xx_bh()
4029 spin_unlock_irqrestore(&dev->rxq_done.lock, flags); in lan78xx_bh()
4031 if (netif_device_present(dev->net) && netif_running(dev->net)) { in lan78xx_bh()
4033 if (timer_pending(&dev->stat_monitor) && (dev->delta != 1)) { in lan78xx_bh()
4034 dev->delta = 1; in lan78xx_bh()
4035 mod_timer(&dev->stat_monitor, in lan78xx_bh()
4041 if (!test_bit(EVENT_RX_HALT, &dev->flags)) in lan78xx_bh()
4042 lan78xx_rx_urb_submit_all(dev); in lan78xx_bh()
4046 lan78xx_tx_bh(dev); in lan78xx_bh()
4054 struct lan78xx_net *dev = container_of(napi, struct lan78xx_net, napi); in lan78xx_poll() local
4060 if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) { in lan78xx_poll()
4067 work_done = lan78xx_bh(dev, budget); in lan78xx_poll()
4075 if (!skb_queue_empty(&dev->rxq_done)) { in lan78xx_poll()
4077 } else if (netif_carrier_ok(dev->net)) { in lan78xx_poll()
4078 if (skb_queue_empty(&dev->txq) && in lan78xx_poll()
4079 !skb_queue_empty(&dev->txq_pend)) { in lan78xx_poll()
4082 netif_tx_lock(dev->net); in lan78xx_poll()
4083 if (netif_queue_stopped(dev->net)) { in lan78xx_poll()
4084 netif_wake_queue(dev->net); in lan78xx_poll()
4087 netif_tx_unlock(dev->net); in lan78xx_poll()
4099 struct lan78xx_net *dev; in lan78xx_delayedwork() local
4101 dev = container_of(work, struct lan78xx_net, wq.work); in lan78xx_delayedwork()
4103 if (test_bit(EVENT_DEV_DISCONNECT, &dev->flags)) in lan78xx_delayedwork()
4106 if (usb_autopm_get_interface(dev->intf) < 0) in lan78xx_delayedwork()
4109 if (test_bit(EVENT_TX_HALT, &dev->flags)) { in lan78xx_delayedwork()
4110 unlink_urbs(dev, &dev->txq); in lan78xx_delayedwork()
4112 status = usb_clear_halt(dev->udev, dev->pipe_out); in lan78xx_delayedwork()
4116 if (netif_msg_tx_err(dev)) in lan78xx_delayedwork()
4117 netdev_err(dev->net, in lan78xx_delayedwork()
4121 clear_bit(EVENT_TX_HALT, &dev->flags); in lan78xx_delayedwork()
4123 netif_wake_queue(dev->net); in lan78xx_delayedwork()
4127 if (test_bit(EVENT_RX_HALT, &dev->flags)) { in lan78xx_delayedwork()
4128 unlink_urbs(dev, &dev->rxq); in lan78xx_delayedwork()
4129 status = usb_clear_halt(dev->udev, dev->pipe_in); in lan78xx_delayedwork()
4133 if (netif_msg_rx_err(dev)) in lan78xx_delayedwork()
4134 netdev_err(dev->net, in lan78xx_delayedwork()
4138 clear_bit(EVENT_RX_HALT, &dev->flags); in lan78xx_delayedwork()
4139 napi_schedule(&dev->napi); in lan78xx_delayedwork()
4143 if (test_bit(EVENT_LINK_RESET, &dev->flags)) { in lan78xx_delayedwork()
4146 clear_bit(EVENT_LINK_RESET, &dev->flags); in lan78xx_delayedwork()
4147 if (lan78xx_link_reset(dev) < 0) { in lan78xx_delayedwork()
4148 netdev_info(dev->net, "link reset failed (%d)\n", in lan78xx_delayedwork()
4153 if (test_bit(EVENT_STAT_UPDATE, &dev->flags)) { in lan78xx_delayedwork()
4154 lan78xx_update_stats(dev); in lan78xx_delayedwork()
4156 clear_bit(EVENT_STAT_UPDATE, &dev->flags); in lan78xx_delayedwork()
4158 mod_timer(&dev->stat_monitor, in lan78xx_delayedwork()
4159 jiffies + (STAT_UPDATE_TIMER * dev->delta)); in lan78xx_delayedwork()
4161 dev->delta = min((dev->delta * 2), 50); in lan78xx_delayedwork()
4164 usb_autopm_put_interface(dev->intf); in lan78xx_delayedwork()
4169 struct lan78xx_net *dev = urb->context; in intr_complete() local
4175 lan78xx_status(dev, urb); in intr_complete()
4182 netif_dbg(dev, ifdown, dev->net, in intr_complete()
4190 netdev_dbg(dev->net, "intr status %d\n", status); in intr_complete()
4194 if (!netif_device_present(dev->net) || in intr_complete()
4195 !netif_running(dev->net)) { in intr_complete()
4196 netdev_warn(dev->net, "not submitting new status URB"); in intr_complete()
4208 netif_dbg(dev, timer, dev->net, in intr_complete()
4210 netif_device_detach(dev->net); in intr_complete()
4213 netif_err(dev, timer, dev->net, in intr_complete()
4221 struct lan78xx_net *dev; in lan78xx_disconnect() local
4226 dev = usb_get_intfdata(intf); in lan78xx_disconnect()
4228 if (!dev) in lan78xx_disconnect()
4231 netif_napi_del(&dev->napi); in lan78xx_disconnect()
4234 net = dev->net; in lan78xx_disconnect()
4238 timer_shutdown_sync(&dev->stat_monitor); in lan78xx_disconnect()
4239 set_bit(EVENT_DEV_DISCONNECT, &dev->flags); in lan78xx_disconnect()
4240 cancel_delayed_work_sync(&dev->wq); in lan78xx_disconnect()
4252 usb_scuttle_anchored_urbs(&dev->deferred); in lan78xx_disconnect()
4254 lan78xx_unbind(dev, intf); in lan78xx_disconnect()
4256 lan78xx_free_tx_resources(dev); in lan78xx_disconnect()
4257 lan78xx_free_rx_resources(dev); in lan78xx_disconnect()
4259 usb_kill_urb(dev->urb_intr); in lan78xx_disconnect()
4260 usb_free_urb(dev->urb_intr); in lan78xx_disconnect()
4268 struct lan78xx_net *dev = netdev_priv(net); in lan78xx_tx_timeout() local
4270 unlink_urbs(dev, &dev->txq); in lan78xx_tx_timeout()
4271 napi_schedule(&dev->napi); in lan78xx_tx_timeout()
4278 struct lan78xx_net *dev = netdev_priv(netdev); in lan78xx_features_check() local
4280 if (skb->len > LAN78XX_TSO_SIZE(dev)) in lan78xx_features_check()
4307 struct lan78xx_net *dev = from_timer(dev, t, stat_monitor); in lan78xx_stat_monitor() local
4309 lan78xx_defer_kevent(dev, EVENT_STAT_UPDATE); in lan78xx_stat_monitor()
4316 struct lan78xx_net *dev; in lan78xx_probe() local
4329 dev_err(&intf->dev, "Error: OOM\n"); in lan78xx_probe()
4335 SET_NETDEV_DEV(netdev, &intf->dev); in lan78xx_probe()
4337 dev = netdev_priv(netdev); in lan78xx_probe()
4338 dev->udev = udev; in lan78xx_probe()
4339 dev->intf = intf; in lan78xx_probe()
4340 dev->net = netdev; in lan78xx_probe()
4341 dev->msg_enable = netif_msg_init(msg_level, NETIF_MSG_DRV in lan78xx_probe()
4344 skb_queue_head_init(&dev->rxq); in lan78xx_probe()
4345 skb_queue_head_init(&dev->txq); in lan78xx_probe()
4346 skb_queue_head_init(&dev->rxq_done); in lan78xx_probe()
4347 skb_queue_head_init(&dev->txq_pend); in lan78xx_probe()
4348 skb_queue_head_init(&dev->rxq_overflow); in lan78xx_probe()
4349 mutex_init(&dev->phy_mutex); in lan78xx_probe()
4350 mutex_init(&dev->dev_mutex); in lan78xx_probe()
4352 ret = lan78xx_urb_config_init(dev); in lan78xx_probe()
4356 ret = lan78xx_alloc_tx_resources(dev); in lan78xx_probe()
4360 ret = lan78xx_alloc_rx_resources(dev); in lan78xx_probe()
4367 netif_set_tso_max_size(netdev, LAN78XX_TSO_SIZE(dev)); in lan78xx_probe()
4369 netif_napi_add(netdev, &dev->napi, lan78xx_poll); in lan78xx_probe()
4371 INIT_DELAYED_WORK(&dev->wq, lan78xx_delayedwork); in lan78xx_probe()
4372 init_usb_anchor(&dev->deferred); in lan78xx_probe()
4378 dev->delta = 1; in lan78xx_probe()
4379 timer_setup(&dev->stat_monitor, lan78xx_stat_monitor, 0); in lan78xx_probe()
4381 mutex_init(&dev->stats.access_lock); in lan78xx_probe()
4388 dev->pipe_in = usb_rcvbulkpipe(udev, BULK_IN_PIPE); in lan78xx_probe()
4389 ep_blkin = usb_pipe_endpoint(udev, dev->pipe_in); in lan78xx_probe()
4395 dev->pipe_out = usb_sndbulkpipe(udev, BULK_OUT_PIPE); in lan78xx_probe()
4396 ep_blkout = usb_pipe_endpoint(udev, dev->pipe_out); in lan78xx_probe()
4408 dev->pipe_intr = usb_rcvintpipe(dev->udev, in lan78xx_probe()
4411 ret = lan78xx_bind(dev, intf); in lan78xx_probe()
4416 maxp = usb_maxpacket(dev->udev, dev->pipe_intr); in lan78xx_probe()
4423 dev->urb_intr = usb_alloc_urb(0, GFP_KERNEL); in lan78xx_probe()
4424 if (!dev->urb_intr) { in lan78xx_probe()
4428 usb_fill_int_urb(dev->urb_intr, dev->udev, in lan78xx_probe()
4429 dev->pipe_intr, buf, maxp, in lan78xx_probe()
4430 intr_complete, dev, period); in lan78xx_probe()
4431 dev->urb_intr->transfer_flags |= URB_FREE_BUFFER; in lan78xx_probe()
4434 dev->maxpacket = usb_maxpacket(dev->udev, dev->pipe_out); in lan78xx_probe()
4437 if (dev->maxpacket == 0) { in lan78xx_probe()
4445 ret = lan78xx_phy_init(dev); in lan78xx_probe()
4451 netif_err(dev, probe, netdev, "couldn't register the device\n"); in lan78xx_probe()
4455 usb_set_intfdata(intf, dev); in lan78xx_probe()
4457 ret = device_set_wakeup_enable(&udev->dev, true); in lan78xx_probe()
4462 pm_runtime_set_autosuspend_delay(&udev->dev, in lan78xx_probe()
4470 usb_free_urb(dev->urb_intr); in lan78xx_probe()
4474 lan78xx_unbind(dev, intf); in lan78xx_probe()
4476 netif_napi_del(&dev->napi); in lan78xx_probe()
4477 lan78xx_free_rx_resources(dev); in lan78xx_probe()
4479 lan78xx_free_tx_resources(dev); in lan78xx_probe()
4513 static int lan78xx_set_auto_suspend(struct lan78xx_net *dev) in lan78xx_set_auto_suspend() argument
4518 ret = lan78xx_stop_tx_path(dev); in lan78xx_set_auto_suspend()
4522 ret = lan78xx_stop_rx_path(dev); in lan78xx_set_auto_suspend()
4528 ret = lan78xx_write_reg(dev, WUCSR, 0); in lan78xx_set_auto_suspend()
4531 ret = lan78xx_write_reg(dev, WUCSR2, 0); in lan78xx_set_auto_suspend()
4534 ret = lan78xx_write_reg(dev, WK_SRC, 0xFFF1FF1FUL); in lan78xx_set_auto_suspend()
4540 ret = lan78xx_read_reg(dev, WUCSR, &buf); in lan78xx_set_auto_suspend()
4547 ret = lan78xx_write_reg(dev, WUCSR, buf); in lan78xx_set_auto_suspend()
4551 ret = lan78xx_read_reg(dev, PMT_CTL, &buf); in lan78xx_set_auto_suspend()
4562 ret = lan78xx_write_reg(dev, PMT_CTL, buf); in lan78xx_set_auto_suspend()
4566 ret = lan78xx_read_reg(dev, PMT_CTL, &buf); in lan78xx_set_auto_suspend()
4572 ret = lan78xx_write_reg(dev, PMT_CTL, buf); in lan78xx_set_auto_suspend()
4576 ret = lan78xx_start_rx_path(dev); in lan78xx_set_auto_suspend()
4581 static int lan78xx_set_suspend(struct lan78xx_net *dev, u32 wol) in lan78xx_set_suspend() argument
4593 ret = lan78xx_stop_tx_path(dev); in lan78xx_set_suspend()
4596 ret = lan78xx_stop_rx_path(dev); in lan78xx_set_suspend()
4600 ret = lan78xx_write_reg(dev, WUCSR, 0); in lan78xx_set_suspend()
4603 ret = lan78xx_write_reg(dev, WUCSR2, 0); in lan78xx_set_suspend()
4606 ret = lan78xx_write_reg(dev, WK_SRC, 0xFFF1FF1FUL); in lan78xx_set_suspend()
4614 ret = lan78xx_read_reg(dev, PMT_CTL, &temp_pmt_ctl); in lan78xx_set_suspend()
4622 ret = lan78xx_write_reg(dev, WUF_CFG(mask_index), 0); in lan78xx_set_suspend()
4654 ret = lan78xx_write_reg(dev, WUF_CFG(mask_index), in lan78xx_set_suspend()
4662 ret = lan78xx_write_reg(dev, WUF_MASK0(mask_index), 7); in lan78xx_set_suspend()
4665 ret = lan78xx_write_reg(dev, WUF_MASK1(mask_index), 0); in lan78xx_set_suspend()
4668 ret = lan78xx_write_reg(dev, WUF_MASK2(mask_index), 0); in lan78xx_set_suspend()
4671 ret = lan78xx_write_reg(dev, WUF_MASK3(mask_index), 0); in lan78xx_set_suspend()
4679 ret = lan78xx_write_reg(dev, WUF_CFG(mask_index), in lan78xx_set_suspend()
4687 ret = lan78xx_write_reg(dev, WUF_MASK0(mask_index), 3); in lan78xx_set_suspend()
4690 ret = lan78xx_write_reg(dev, WUF_MASK1(mask_index), 0); in lan78xx_set_suspend()
4693 ret = lan78xx_write_reg(dev, WUF_MASK2(mask_index), 0); in lan78xx_set_suspend()
4696 ret = lan78xx_write_reg(dev, WUF_MASK3(mask_index), 0); in lan78xx_set_suspend()
4720 ret = lan78xx_write_reg(dev, WUF_CFG(mask_index), in lan78xx_set_suspend()
4728 ret = lan78xx_write_reg(dev, WUF_MASK0(mask_index), 0x3000); in lan78xx_set_suspend()
4731 ret = lan78xx_write_reg(dev, WUF_MASK1(mask_index), 0); in lan78xx_set_suspend()
4734 ret = lan78xx_write_reg(dev, WUF_MASK2(mask_index), 0); in lan78xx_set_suspend()
4737 ret = lan78xx_write_reg(dev, WUF_MASK3(mask_index), 0); in lan78xx_set_suspend()
4748 ret = lan78xx_write_reg(dev, WUCSR, temp_wucsr); in lan78xx_set_suspend()
4758 ret = lan78xx_write_reg(dev, PMT_CTL, temp_pmt_ctl); in lan78xx_set_suspend()
4763 ret = lan78xx_read_reg(dev, PMT_CTL, &buf); in lan78xx_set_suspend()
4769 ret = lan78xx_write_reg(dev, PMT_CTL, buf); in lan78xx_set_suspend()
4773 ret = lan78xx_start_rx_path(dev); in lan78xx_set_suspend()
4780 struct lan78xx_net *dev = usb_get_intfdata(intf); in lan78xx_suspend() local
4784 mutex_lock(&dev->dev_mutex); in lan78xx_suspend()
4786 netif_dbg(dev, ifdown, dev->net, in lan78xx_suspend()
4789 dev_open = test_bit(EVENT_DEV_OPEN, &dev->flags); in lan78xx_suspend()
4792 spin_lock_irq(&dev->txq.lock); in lan78xx_suspend()
4794 if ((skb_queue_len(&dev->txq) || in lan78xx_suspend()
4795 skb_queue_len(&dev->txq_pend)) && in lan78xx_suspend()
4797 spin_unlock_irq(&dev->txq.lock); in lan78xx_suspend()
4801 set_bit(EVENT_DEV_ASLEEP, &dev->flags); in lan78xx_suspend()
4802 spin_unlock_irq(&dev->txq.lock); in lan78xx_suspend()
4806 ret = lan78xx_stop_rx_path(dev); in lan78xx_suspend()
4810 ret = lan78xx_flush_rx_fifo(dev); in lan78xx_suspend()
4815 ret = lan78xx_stop_tx_path(dev); in lan78xx_suspend()
4820 netif_device_detach(dev->net); in lan78xx_suspend()
4821 lan78xx_terminate_urbs(dev); in lan78xx_suspend()
4822 usb_kill_urb(dev->urb_intr); in lan78xx_suspend()
4825 netif_device_attach(dev->net); in lan78xx_suspend()
4827 del_timer(&dev->stat_monitor); in lan78xx_suspend()
4830 ret = lan78xx_set_auto_suspend(dev); in lan78xx_suspend()
4836 pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_suspend()
4837 netif_carrier_off(dev->net); in lan78xx_suspend()
4838 ret = lan78xx_set_suspend(dev, pdata->wol); in lan78xx_suspend()
4848 set_bit(EVENT_DEV_ASLEEP, &dev->flags); in lan78xx_suspend()
4850 ret = lan78xx_write_reg(dev, WUCSR, 0); in lan78xx_suspend()
4853 ret = lan78xx_write_reg(dev, WUCSR2, 0); in lan78xx_suspend()
4857 ret = lan78xx_read_reg(dev, PMT_CTL, &buf); in lan78xx_suspend()
4866 ret = lan78xx_write_reg(dev, PMT_CTL, buf); in lan78xx_suspend()
4870 ret = lan78xx_read_reg(dev, PMT_CTL, &buf); in lan78xx_suspend()
4876 ret = lan78xx_write_reg(dev, PMT_CTL, buf); in lan78xx_suspend()
4883 mutex_unlock(&dev->dev_mutex); in lan78xx_suspend()
4888 static bool lan78xx_submit_deferred_urbs(struct lan78xx_net *dev) in lan78xx_submit_deferred_urbs() argument
4893 while ((urb = usb_get_from_anchor(&dev->deferred))) { in lan78xx_submit_deferred_urbs()
4897 if (!netif_device_present(dev->net) || in lan78xx_submit_deferred_urbs()
4898 !netif_carrier_ok(dev->net) || in lan78xx_submit_deferred_urbs()
4900 lan78xx_release_tx_buf(dev, skb); in lan78xx_submit_deferred_urbs()
4907 netif_trans_update(dev->net); in lan78xx_submit_deferred_urbs()
4908 lan78xx_queue_skb(&dev->txq, skb, tx_start); in lan78xx_submit_deferred_urbs()
4911 netif_stop_queue(dev->net); in lan78xx_submit_deferred_urbs()
4914 netif_device_detach(dev->net); in lan78xx_submit_deferred_urbs()
4917 lan78xx_release_tx_buf(dev, skb); in lan78xx_submit_deferred_urbs()
4926 struct lan78xx_net *dev = usb_get_intfdata(intf); in lan78xx_resume() local
4930 mutex_lock(&dev->dev_mutex); in lan78xx_resume()
4932 netif_dbg(dev, ifup, dev->net, "resuming device"); in lan78xx_resume()
4934 dev_open = test_bit(EVENT_DEV_OPEN, &dev->flags); in lan78xx_resume()
4939 ret = lan78xx_flush_tx_fifo(dev); in lan78xx_resume()
4943 if (dev->urb_intr) { in lan78xx_resume()
4944 int ret = usb_submit_urb(dev->urb_intr, GFP_KERNEL); in lan78xx_resume()
4948 netif_device_detach(dev->net); in lan78xx_resume()
4949 netdev_warn(dev->net, "Failed to submit intr URB"); in lan78xx_resume()
4953 spin_lock_irq(&dev->txq.lock); in lan78xx_resume()
4955 if (netif_device_present(dev->net)) { in lan78xx_resume()
4956 pipe_halted = lan78xx_submit_deferred_urbs(dev); in lan78xx_resume()
4959 lan78xx_defer_kevent(dev, EVENT_TX_HALT); in lan78xx_resume()
4962 clear_bit(EVENT_DEV_ASLEEP, &dev->flags); in lan78xx_resume()
4964 spin_unlock_irq(&dev->txq.lock); in lan78xx_resume()
4967 netif_device_present(dev->net) && in lan78xx_resume()
4968 (lan78xx_tx_pend_data_len(dev) < lan78xx_tx_urb_space(dev))) in lan78xx_resume()
4969 netif_start_queue(dev->net); in lan78xx_resume()
4971 ret = lan78xx_start_tx_path(dev); in lan78xx_resume()
4975 napi_schedule(&dev->napi); in lan78xx_resume()
4977 if (!timer_pending(&dev->stat_monitor)) { in lan78xx_resume()
4978 dev->delta = 1; in lan78xx_resume()
4979 mod_timer(&dev->stat_monitor, in lan78xx_resume()
4984 clear_bit(EVENT_DEV_ASLEEP, &dev->flags); in lan78xx_resume()
4987 ret = lan78xx_write_reg(dev, WUCSR2, 0); in lan78xx_resume()
4990 ret = lan78xx_write_reg(dev, WUCSR, 0); in lan78xx_resume()
4993 ret = lan78xx_write_reg(dev, WK_SRC, 0xFFF1FF1FUL); in lan78xx_resume()
4997 ret = lan78xx_write_reg(dev, WUCSR2, WUCSR2_NS_RCD_ | in lan78xx_resume()
5004 ret = lan78xx_write_reg(dev, WUCSR, WUCSR_EEE_TX_WAKE_ | in lan78xx_resume()
5016 mutex_unlock(&dev->dev_mutex); in lan78xx_resume()
5023 struct lan78xx_net *dev = usb_get_intfdata(intf); in lan78xx_reset_resume() local
5026 netif_dbg(dev, ifup, dev->net, "(reset) resuming device"); in lan78xx_reset_resume()
5028 ret = lan78xx_reset(dev); in lan78xx_reset_resume()
5032 phy_start(dev->net->phydev); in lan78xx_reset_resume()