Lines Matching refs:dev

54 	struct usbnet *dev;  member
66 struct usbnet *dev; member
73 static int smsc75xx_link_ok_nopm(struct usbnet *dev);
74 static int smsc75xx_phy_gig_workaround(struct usbnet *dev);
76 static int __must_check __smsc75xx_read_reg(struct usbnet *dev, u32 index, in __smsc75xx_read_reg() argument
83 BUG_ON(!dev); in __smsc75xx_read_reg()
90 ret = fn(dev, USB_VENDOR_REQUEST_READ_REGISTER, USB_DIR_IN in __smsc75xx_read_reg()
96 netdev_warn(dev->net, "Failed to read reg index 0x%08x: %d\n", in __smsc75xx_read_reg()
107 static int __must_check __smsc75xx_write_reg(struct usbnet *dev, u32 index, in __smsc75xx_write_reg() argument
114 BUG_ON(!dev); in __smsc75xx_write_reg()
124 ret = fn(dev, USB_VENDOR_REQUEST_WRITE_REGISTER, USB_DIR_OUT in __smsc75xx_write_reg()
128 netdev_warn(dev->net, "Failed to write reg index 0x%08x: %d\n", in __smsc75xx_write_reg()
134 static int __must_check smsc75xx_read_reg_nopm(struct usbnet *dev, u32 index, in smsc75xx_read_reg_nopm() argument
137 return __smsc75xx_read_reg(dev, index, data, 1); in smsc75xx_read_reg_nopm()
140 static int __must_check smsc75xx_write_reg_nopm(struct usbnet *dev, u32 index, in smsc75xx_write_reg_nopm() argument
143 return __smsc75xx_write_reg(dev, index, data, 1); in smsc75xx_write_reg_nopm()
146 static int __must_check smsc75xx_read_reg(struct usbnet *dev, u32 index, in smsc75xx_read_reg() argument
149 return __smsc75xx_read_reg(dev, index, data, 0); in smsc75xx_read_reg()
152 static int __must_check smsc75xx_write_reg(struct usbnet *dev, u32 index, in smsc75xx_write_reg() argument
155 return __smsc75xx_write_reg(dev, index, data, 0); in smsc75xx_write_reg()
160 static __must_check int __smsc75xx_phy_wait_not_busy(struct usbnet *dev, in __smsc75xx_phy_wait_not_busy() argument
168 ret = __smsc75xx_read_reg(dev, MII_ACCESS, &val, in_pm); in __smsc75xx_phy_wait_not_busy()
170 netdev_warn(dev->net, "Error reading MII_ACCESS\n"); in __smsc75xx_phy_wait_not_busy()
184 struct usbnet *dev = netdev_priv(netdev); in __smsc75xx_mdio_read() local
188 mutex_lock(&dev->phy_mutex); in __smsc75xx_mdio_read()
191 ret = __smsc75xx_phy_wait_not_busy(dev, in_pm); in __smsc75xx_mdio_read()
193 netdev_warn(dev->net, "MII is busy in smsc75xx_mdio_read\n"); in __smsc75xx_mdio_read()
198 phy_id &= dev->mii.phy_id_mask; in __smsc75xx_mdio_read()
199 idx &= dev->mii.reg_num_mask; in __smsc75xx_mdio_read()
203 ret = __smsc75xx_write_reg(dev, MII_ACCESS, addr, in_pm); in __smsc75xx_mdio_read()
205 netdev_warn(dev->net, "Error writing MII_ACCESS\n"); in __smsc75xx_mdio_read()
209 ret = __smsc75xx_phy_wait_not_busy(dev, in_pm); in __smsc75xx_mdio_read()
211 netdev_warn(dev->net, "Timed out reading MII reg %02X\n", idx); in __smsc75xx_mdio_read()
215 ret = __smsc75xx_read_reg(dev, MII_DATA, &val, in_pm); in __smsc75xx_mdio_read()
217 netdev_warn(dev->net, "Error reading MII_DATA\n"); in __smsc75xx_mdio_read()
224 mutex_unlock(&dev->phy_mutex); in __smsc75xx_mdio_read()
231 struct usbnet *dev = netdev_priv(netdev); in __smsc75xx_mdio_write() local
235 mutex_lock(&dev->phy_mutex); in __smsc75xx_mdio_write()
238 ret = __smsc75xx_phy_wait_not_busy(dev, in_pm); in __smsc75xx_mdio_write()
240 netdev_warn(dev->net, "MII is busy in smsc75xx_mdio_write\n"); in __smsc75xx_mdio_write()
245 ret = __smsc75xx_write_reg(dev, MII_DATA, val, in_pm); in __smsc75xx_mdio_write()
247 netdev_warn(dev->net, "Error writing MII_DATA\n"); in __smsc75xx_mdio_write()
252 phy_id &= dev->mii.phy_id_mask; in __smsc75xx_mdio_write()
253 idx &= dev->mii.reg_num_mask; in __smsc75xx_mdio_write()
257 ret = __smsc75xx_write_reg(dev, MII_ACCESS, addr, in_pm); in __smsc75xx_mdio_write()
259 netdev_warn(dev->net, "Error writing MII_ACCESS\n"); in __smsc75xx_mdio_write()
263 ret = __smsc75xx_phy_wait_not_busy(dev, in_pm); in __smsc75xx_mdio_write()
265 netdev_warn(dev->net, "Timed out writing MII reg %02X\n", idx); in __smsc75xx_mdio_write()
270 mutex_unlock(&dev->phy_mutex); in __smsc75xx_mdio_write()
296 static int smsc75xx_wait_eeprom(struct usbnet *dev) in smsc75xx_wait_eeprom() argument
303 ret = smsc75xx_read_reg(dev, E2P_CMD, &val); in smsc75xx_wait_eeprom()
305 netdev_warn(dev->net, "Error reading E2P_CMD\n"); in smsc75xx_wait_eeprom()
315 netdev_warn(dev->net, "EEPROM read operation timeout\n"); in smsc75xx_wait_eeprom()
322 static int smsc75xx_eeprom_confirm_not_busy(struct usbnet *dev) in smsc75xx_eeprom_confirm_not_busy() argument
329 ret = smsc75xx_read_reg(dev, E2P_CMD, &val); in smsc75xx_eeprom_confirm_not_busy()
331 netdev_warn(dev->net, "Error reading E2P_CMD\n"); in smsc75xx_eeprom_confirm_not_busy()
341 netdev_warn(dev->net, "EEPROM is busy\n"); in smsc75xx_eeprom_confirm_not_busy()
345 static int smsc75xx_read_eeprom(struct usbnet *dev, u32 offset, u32 length, in smsc75xx_read_eeprom() argument
351 BUG_ON(!dev); in smsc75xx_read_eeprom()
354 ret = smsc75xx_eeprom_confirm_not_busy(dev); in smsc75xx_read_eeprom()
360 ret = smsc75xx_write_reg(dev, E2P_CMD, val); in smsc75xx_read_eeprom()
362 netdev_warn(dev->net, "Error writing E2P_CMD\n"); in smsc75xx_read_eeprom()
366 ret = smsc75xx_wait_eeprom(dev); in smsc75xx_read_eeprom()
370 ret = smsc75xx_read_reg(dev, E2P_DATA, &val); in smsc75xx_read_eeprom()
372 netdev_warn(dev->net, "Error reading E2P_DATA\n"); in smsc75xx_read_eeprom()
383 static int smsc75xx_write_eeprom(struct usbnet *dev, u32 offset, u32 length, in smsc75xx_write_eeprom() argument
389 BUG_ON(!dev); in smsc75xx_write_eeprom()
392 ret = smsc75xx_eeprom_confirm_not_busy(dev); in smsc75xx_write_eeprom()
398 ret = smsc75xx_write_reg(dev, E2P_CMD, val); in smsc75xx_write_eeprom()
400 netdev_warn(dev->net, "Error writing E2P_CMD\n"); in smsc75xx_write_eeprom()
404 ret = smsc75xx_wait_eeprom(dev); in smsc75xx_write_eeprom()
412 ret = smsc75xx_write_reg(dev, E2P_DATA, val); in smsc75xx_write_eeprom()
414 netdev_warn(dev->net, "Error writing E2P_DATA\n"); in smsc75xx_write_eeprom()
420 ret = smsc75xx_write_reg(dev, E2P_CMD, val); in smsc75xx_write_eeprom()
422 netdev_warn(dev->net, "Error writing E2P_CMD\n"); in smsc75xx_write_eeprom()
426 ret = smsc75xx_wait_eeprom(dev); in smsc75xx_write_eeprom()
436 static int smsc75xx_dataport_wait_not_busy(struct usbnet *dev) in smsc75xx_dataport_wait_not_busy() argument
442 ret = smsc75xx_read_reg(dev, DP_SEL, &dp_sel); in smsc75xx_dataport_wait_not_busy()
444 netdev_warn(dev->net, "Error reading DP_SEL\n"); in smsc75xx_dataport_wait_not_busy()
454 netdev_warn(dev->net, "smsc75xx_dataport_wait_not_busy timed out\n"); in smsc75xx_dataport_wait_not_busy()
459 static int smsc75xx_dataport_write(struct usbnet *dev, u32 ram_select, u32 addr, in smsc75xx_dataport_write() argument
462 struct smsc75xx_priv *pdata = (struct smsc75xx_priv *)(dev->data[0]); in smsc75xx_dataport_write()
468 ret = smsc75xx_dataport_wait_not_busy(dev); in smsc75xx_dataport_write()
470 netdev_warn(dev->net, "smsc75xx_dataport_write busy on entry\n"); in smsc75xx_dataport_write()
474 ret = smsc75xx_read_reg(dev, DP_SEL, &dp_sel); in smsc75xx_dataport_write()
476 netdev_warn(dev->net, "Error reading DP_SEL\n"); in smsc75xx_dataport_write()
482 ret = smsc75xx_write_reg(dev, DP_SEL, dp_sel); in smsc75xx_dataport_write()
484 netdev_warn(dev->net, "Error writing DP_SEL\n"); in smsc75xx_dataport_write()
489 ret = smsc75xx_write_reg(dev, DP_ADDR, addr + i); in smsc75xx_dataport_write()
491 netdev_warn(dev->net, "Error writing DP_ADDR\n"); in smsc75xx_dataport_write()
495 ret = smsc75xx_write_reg(dev, DP_DATA, buf[i]); in smsc75xx_dataport_write()
497 netdev_warn(dev->net, "Error writing DP_DATA\n"); in smsc75xx_dataport_write()
501 ret = smsc75xx_write_reg(dev, DP_CMD, DP_CMD_WRITE); in smsc75xx_dataport_write()
503 netdev_warn(dev->net, "Error writing DP_CMD\n"); in smsc75xx_dataport_write()
507 ret = smsc75xx_dataport_wait_not_busy(dev); in smsc75xx_dataport_write()
509 netdev_warn(dev->net, "smsc75xx_dataport_write timeout\n"); in smsc75xx_dataport_write()
529 struct usbnet *dev = pdata->dev; in smsc75xx_deferred_multicast_write() local
532 netif_dbg(dev, drv, dev->net, "deferred multicast write 0x%08x\n", in smsc75xx_deferred_multicast_write()
535 smsc75xx_dataport_write(dev, DP_SEL_VHF, DP_SEL_VHF_VLAN_LEN, in smsc75xx_deferred_multicast_write()
538 ret = smsc75xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); in smsc75xx_deferred_multicast_write()
540 netdev_warn(dev->net, "Error writing RFE_CRL\n"); in smsc75xx_deferred_multicast_write()
545 struct usbnet *dev = netdev_priv(netdev); in smsc75xx_set_multicast() local
546 struct smsc75xx_priv *pdata = (struct smsc75xx_priv *)(dev->data[0]); in smsc75xx_set_multicast()
559 if (dev->net->flags & IFF_PROMISC) { in smsc75xx_set_multicast()
560 netif_dbg(dev, drv, dev->net, "promiscuous mode enabled\n"); in smsc75xx_set_multicast()
562 } else if (dev->net->flags & IFF_ALLMULTI) { in smsc75xx_set_multicast()
563 netif_dbg(dev, drv, dev->net, "receive all multicast enabled\n"); in smsc75xx_set_multicast()
565 } else if (!netdev_mc_empty(dev->net)) { in smsc75xx_set_multicast()
568 netif_dbg(dev, drv, dev->net, "receive multicast hash filter\n"); in smsc75xx_set_multicast()
578 netif_dbg(dev, drv, dev->net, "receive own packets only\n"); in smsc75xx_set_multicast()
588 static int smsc75xx_update_flowcontrol(struct usbnet *dev, u8 duplex, in smsc75xx_update_flowcontrol() argument
606 netif_dbg(dev, link, dev->net, "rx pause %s, tx pause %s\n", in smsc75xx_update_flowcontrol()
610 netif_dbg(dev, link, dev->net, "half duplex\n"); in smsc75xx_update_flowcontrol()
613 ret = smsc75xx_write_reg(dev, FLOW, flow); in smsc75xx_update_flowcontrol()
615 netdev_warn(dev->net, "Error writing FLOW\n"); in smsc75xx_update_flowcontrol()
619 ret = smsc75xx_write_reg(dev, FCT_FLOW, fct_flow); in smsc75xx_update_flowcontrol()
621 netdev_warn(dev->net, "Error writing FCT_FLOW\n"); in smsc75xx_update_flowcontrol()
628 static int smsc75xx_link_reset(struct usbnet *dev) in smsc75xx_link_reset() argument
630 struct mii_if_info *mii = &dev->mii; in smsc75xx_link_reset()
636 smsc75xx_mdio_write(dev->net, mii->phy_id, PHY_INT_SRC, in smsc75xx_link_reset()
639 ret = smsc75xx_write_reg(dev, INT_STS, INT_STS_CLEAR_ALL); in smsc75xx_link_reset()
641 netdev_warn(dev->net, "Error writing INT_STS\n"); in smsc75xx_link_reset()
646 mii_ethtool_gset(&dev->mii, &ecmd); in smsc75xx_link_reset()
647 lcladv = smsc75xx_mdio_read(dev->net, mii->phy_id, MII_ADVERTISE); in smsc75xx_link_reset()
648 rmtadv = smsc75xx_mdio_read(dev->net, mii->phy_id, MII_LPA); in smsc75xx_link_reset()
650 netif_dbg(dev, link, dev->net, "speed: %u duplex: %d lcladv: %04x rmtadv: %04x\n", in smsc75xx_link_reset()
653 return smsc75xx_update_flowcontrol(dev, ecmd.duplex, lcladv, rmtadv); in smsc75xx_link_reset()
656 static void smsc75xx_status(struct usbnet *dev, struct urb *urb) in smsc75xx_status() argument
661 netdev_warn(dev->net, "unexpected urb length %d\n", in smsc75xx_status()
668 netif_dbg(dev, link, dev->net, "intdata: 0x%08X\n", intdata); in smsc75xx_status()
671 usbnet_defer_kevent(dev, EVENT_LINK_RESET); in smsc75xx_status()
673 netdev_warn(dev->net, "unexpected interrupt, intdata=0x%08X\n", in smsc75xx_status()
685 struct usbnet *dev = netdev_priv(netdev); in smsc75xx_ethtool_get_eeprom() local
689 return smsc75xx_read_eeprom(dev, ee->offset, ee->len, data); in smsc75xx_ethtool_get_eeprom()
695 struct usbnet *dev = netdev_priv(netdev); in smsc75xx_ethtool_set_eeprom() local
698 netdev_warn(dev->net, "EEPROM: magic value mismatch: 0x%x\n", in smsc75xx_ethtool_set_eeprom()
703 return smsc75xx_write_eeprom(dev, ee->offset, ee->len, data); in smsc75xx_ethtool_set_eeprom()
709 struct usbnet *dev = netdev_priv(net); in smsc75xx_ethtool_get_wol() local
710 struct smsc75xx_priv *pdata = (struct smsc75xx_priv *)(dev->data[0]); in smsc75xx_ethtool_get_wol()
719 struct usbnet *dev = netdev_priv(net); in smsc75xx_ethtool_set_wol() local
720 struct smsc75xx_priv *pdata = (struct smsc75xx_priv *)(dev->data[0]); in smsc75xx_ethtool_set_wol()
728 ret = device_set_wakeup_enable(&dev->udev->dev, pdata->wolopts); in smsc75xx_ethtool_set_wol()
730 netdev_warn(dev->net, "device_set_wakeup_enable error %d\n", ret); in smsc75xx_ethtool_set_wol()
752 struct usbnet *dev = netdev_priv(netdev); in smsc75xx_ioctl() local
757 return generic_mii_ioctl(&dev->mii, if_mii(rq), cmd, NULL); in smsc75xx_ioctl()
760 static void smsc75xx_init_mac_address(struct usbnet *dev) in smsc75xx_init_mac_address() argument
765 if (!platform_get_ethdev_address(&dev->udev->dev, dev->net)) { in smsc75xx_init_mac_address()
766 if (is_valid_ether_addr(dev->net->dev_addr)) { in smsc75xx_init_mac_address()
768 netif_dbg(dev, ifup, dev->net, "MAC address read from the device tree\n"); in smsc75xx_init_mac_address()
774 if (smsc75xx_read_eeprom(dev, EEPROM_MAC_OFFSET, ETH_ALEN, addr) == 0) { in smsc75xx_init_mac_address()
775 eth_hw_addr_set(dev->net, addr); in smsc75xx_init_mac_address()
776 if (is_valid_ether_addr(dev->net->dev_addr)) { in smsc75xx_init_mac_address()
778 netif_dbg(dev, ifup, dev->net, in smsc75xx_init_mac_address()
785 eth_hw_addr_random(dev->net); in smsc75xx_init_mac_address()
786 netif_dbg(dev, ifup, dev->net, "MAC address set to eth_random_addr\n"); in smsc75xx_init_mac_address()
789 static int smsc75xx_set_mac_address(struct usbnet *dev) in smsc75xx_set_mac_address() argument
791 u32 addr_lo = dev->net->dev_addr[0] | dev->net->dev_addr[1] << 8 | in smsc75xx_set_mac_address()
792 dev->net->dev_addr[2] << 16 | dev->net->dev_addr[3] << 24; in smsc75xx_set_mac_address()
793 u32 addr_hi = dev->net->dev_addr[4] | dev->net->dev_addr[5] << 8; in smsc75xx_set_mac_address()
795 int ret = smsc75xx_write_reg(dev, RX_ADDRH, addr_hi); in smsc75xx_set_mac_address()
797 netdev_warn(dev->net, "Failed to write RX_ADDRH: %d\n", ret); in smsc75xx_set_mac_address()
801 ret = smsc75xx_write_reg(dev, RX_ADDRL, addr_lo); in smsc75xx_set_mac_address()
803 netdev_warn(dev->net, "Failed to write RX_ADDRL: %d\n", ret); in smsc75xx_set_mac_address()
808 ret = smsc75xx_write_reg(dev, ADDR_FILTX, addr_hi); in smsc75xx_set_mac_address()
810 netdev_warn(dev->net, "Failed to write ADDR_FILTX: %d\n", ret); in smsc75xx_set_mac_address()
814 ret = smsc75xx_write_reg(dev, ADDR_FILTX + 4, addr_lo); in smsc75xx_set_mac_address()
816 netdev_warn(dev->net, "Failed to write ADDR_FILTX+4: %d\n", ret); in smsc75xx_set_mac_address()
821 static int smsc75xx_phy_initialize(struct usbnet *dev) in smsc75xx_phy_initialize() argument
826 dev->mii.dev = dev->net; in smsc75xx_phy_initialize()
827 dev->mii.mdio_read = smsc75xx_mdio_read; in smsc75xx_phy_initialize()
828 dev->mii.mdio_write = smsc75xx_mdio_write; in smsc75xx_phy_initialize()
829 dev->mii.phy_id_mask = 0x1f; in smsc75xx_phy_initialize()
830 dev->mii.reg_num_mask = 0x1f; in smsc75xx_phy_initialize()
831 dev->mii.supports_gmii = 1; in smsc75xx_phy_initialize()
832 dev->mii.phy_id = SMSC75XX_INTERNAL_PHY_ID; in smsc75xx_phy_initialize()
835 smsc75xx_mdio_write(dev->net, dev->mii.phy_id, MII_BMCR, BMCR_RESET); in smsc75xx_phy_initialize()
839 bmcr = smsc75xx_mdio_read(dev->net, dev->mii.phy_id, MII_BMCR); in smsc75xx_phy_initialize()
841 netdev_warn(dev->net, "Error reading MII_BMCR\n"); in smsc75xx_phy_initialize()
848 netdev_warn(dev->net, "timeout on PHY Reset\n"); in smsc75xx_phy_initialize()
853 smsc75xx_phy_gig_workaround(dev); in smsc75xx_phy_initialize()
855 smsc75xx_mdio_write(dev->net, dev->mii.phy_id, MII_ADVERTISE, in smsc75xx_phy_initialize()
858 smsc75xx_mdio_write(dev->net, dev->mii.phy_id, MII_CTRL1000, in smsc75xx_phy_initialize()
862 ret = smsc75xx_mdio_read(dev->net, dev->mii.phy_id, PHY_INT_SRC); in smsc75xx_phy_initialize()
864 netdev_warn(dev->net, "Error reading PHY_INT_SRC\n"); in smsc75xx_phy_initialize()
868 smsc75xx_mdio_write(dev->net, dev->mii.phy_id, PHY_INT_SRC, 0xffff); in smsc75xx_phy_initialize()
870 smsc75xx_mdio_write(dev->net, dev->mii.phy_id, PHY_INT_MASK, in smsc75xx_phy_initialize()
872 mii_nway_restart(&dev->mii); in smsc75xx_phy_initialize()
874 netif_dbg(dev, ifup, dev->net, "phy initialised successfully\n"); in smsc75xx_phy_initialize()
878 static int smsc75xx_set_rx_max_frame_length(struct usbnet *dev, int size) in smsc75xx_set_rx_max_frame_length() argument
884 ret = smsc75xx_read_reg(dev, MAC_RX, &buf); in smsc75xx_set_rx_max_frame_length()
886 netdev_warn(dev->net, "Failed to read MAC_RX: %d\n", ret); in smsc75xx_set_rx_max_frame_length()
894 ret = smsc75xx_write_reg(dev, MAC_RX, buf); in smsc75xx_set_rx_max_frame_length()
896 netdev_warn(dev->net, "Failed to write MAC_RX: %d\n", ret); in smsc75xx_set_rx_max_frame_length()
905 ret = smsc75xx_write_reg(dev, MAC_RX, buf); in smsc75xx_set_rx_max_frame_length()
907 netdev_warn(dev->net, "Failed to write MAC_RX: %d\n", ret); in smsc75xx_set_rx_max_frame_length()
913 ret = smsc75xx_write_reg(dev, MAC_RX, buf); in smsc75xx_set_rx_max_frame_length()
915 netdev_warn(dev->net, "Failed to write MAC_RX: %d\n", ret); in smsc75xx_set_rx_max_frame_length()
925 struct usbnet *dev = netdev_priv(netdev); in smsc75xx_change_mtu() local
928 ret = smsc75xx_set_rx_max_frame_length(dev, new_mtu + ETH_HLEN); in smsc75xx_change_mtu()
930 netdev_warn(dev->net, "Failed to set mac rx frame length\n"); in smsc75xx_change_mtu()
941 struct usbnet *dev = netdev_priv(netdev); in smsc75xx_set_features() local
942 struct smsc75xx_priv *pdata = (struct smsc75xx_priv *)(dev->data[0]); in smsc75xx_set_features()
956 ret = smsc75xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); in smsc75xx_set_features()
958 netdev_warn(dev->net, "Error writing RFE_CTL\n"); in smsc75xx_set_features()
964 static int smsc75xx_wait_ready(struct usbnet *dev, int in_pm) in smsc75xx_wait_ready() argument
972 ret = __smsc75xx_read_reg(dev, PMT_CTL, &buf, in_pm); in smsc75xx_wait_ready()
975 netdev_warn(dev->net, "Failed to read PMT_CTL: %d\n", ret); in smsc75xx_wait_ready()
986 netdev_warn(dev->net, "timeout waiting for device ready\n"); in smsc75xx_wait_ready()
990 static int smsc75xx_phy_gig_workaround(struct usbnet *dev) in smsc75xx_phy_gig_workaround() argument
992 struct mii_if_info *mii = &dev->mii; in smsc75xx_phy_gig_workaround()
997 smsc75xx_mdio_write(dev->net, mii->phy_id, MII_BMCR, 0x4040); in smsc75xx_phy_gig_workaround()
1001 link_up = smsc75xx_link_ok_nopm(dev); in smsc75xx_phy_gig_workaround()
1007 netdev_warn(dev->net, "Timeout waiting for PHY link up\n"); in smsc75xx_phy_gig_workaround()
1012 ret = smsc75xx_read_reg(dev, PMT_CTL, &buf); in smsc75xx_phy_gig_workaround()
1014 netdev_warn(dev->net, "Failed to read PMT_CTL: %d\n", ret); in smsc75xx_phy_gig_workaround()
1020 ret = smsc75xx_write_reg(dev, PMT_CTL, buf); in smsc75xx_phy_gig_workaround()
1022 netdev_warn(dev->net, "Failed to write PMT_CTL: %d\n", ret); in smsc75xx_phy_gig_workaround()
1029 ret = smsc75xx_read_reg(dev, PMT_CTL, &buf); in smsc75xx_phy_gig_workaround()
1031 netdev_warn(dev->net, "Failed to read PMT_CTL: %d\n", in smsc75xx_phy_gig_workaround()
1039 netdev_warn(dev->net, "timeout waiting for PHY Reset\n"); in smsc75xx_phy_gig_workaround()
1046 static int smsc75xx_reset(struct usbnet *dev) in smsc75xx_reset() argument
1048 struct smsc75xx_priv *pdata = (struct smsc75xx_priv *)(dev->data[0]); in smsc75xx_reset()
1052 netif_dbg(dev, ifup, dev->net, "entering smsc75xx_reset\n"); in smsc75xx_reset()
1054 ret = smsc75xx_wait_ready(dev, 0); in smsc75xx_reset()
1056 netdev_warn(dev->net, "device not ready in smsc75xx_reset\n"); in smsc75xx_reset()
1060 ret = smsc75xx_read_reg(dev, HW_CFG, &buf); in smsc75xx_reset()
1062 netdev_warn(dev->net, "Failed to read HW_CFG: %d\n", ret); in smsc75xx_reset()
1068 ret = smsc75xx_write_reg(dev, HW_CFG, buf); in smsc75xx_reset()
1070 netdev_warn(dev->net, "Failed to write HW_CFG: %d\n", ret); in smsc75xx_reset()
1077 ret = smsc75xx_read_reg(dev, HW_CFG, &buf); in smsc75xx_reset()
1079 netdev_warn(dev->net, "Failed to read HW_CFG: %d\n", ret); in smsc75xx_reset()
1086 netdev_warn(dev->net, "timeout on completion of Lite Reset\n"); in smsc75xx_reset()
1090 netif_dbg(dev, ifup, dev->net, "Lite reset complete, resetting PHY\n"); in smsc75xx_reset()
1092 ret = smsc75xx_read_reg(dev, PMT_CTL, &buf); in smsc75xx_reset()
1094 netdev_warn(dev->net, "Failed to read PMT_CTL: %d\n", ret); in smsc75xx_reset()
1100 ret = smsc75xx_write_reg(dev, PMT_CTL, buf); in smsc75xx_reset()
1102 netdev_warn(dev->net, "Failed to write PMT_CTL: %d\n", ret); in smsc75xx_reset()
1109 ret = smsc75xx_read_reg(dev, PMT_CTL, &buf); in smsc75xx_reset()
1111 netdev_warn(dev->net, "Failed to read PMT_CTL: %d\n", ret); in smsc75xx_reset()
1118 netdev_warn(dev->net, "timeout waiting for PHY Reset\n"); in smsc75xx_reset()
1122 netif_dbg(dev, ifup, dev->net, "PHY reset complete\n"); in smsc75xx_reset()
1124 ret = smsc75xx_set_mac_address(dev); in smsc75xx_reset()
1126 netdev_warn(dev->net, "Failed to set mac address\n"); in smsc75xx_reset()
1130 netif_dbg(dev, ifup, dev->net, "MAC Address: %pM\n", in smsc75xx_reset()
1131 dev->net->dev_addr); in smsc75xx_reset()
1133 ret = smsc75xx_read_reg(dev, HW_CFG, &buf); in smsc75xx_reset()
1135 netdev_warn(dev->net, "Failed to read HW_CFG: %d\n", ret); in smsc75xx_reset()
1139 netif_dbg(dev, ifup, dev->net, "Read Value from HW_CFG : 0x%08x\n", in smsc75xx_reset()
1144 ret = smsc75xx_write_reg(dev, HW_CFG, buf); in smsc75xx_reset()
1146 netdev_warn(dev->net, "Failed to write HW_CFG: %d\n", ret); in smsc75xx_reset()
1150 ret = smsc75xx_read_reg(dev, HW_CFG, &buf); in smsc75xx_reset()
1152 netdev_warn(dev->net, "Failed to read HW_CFG: %d\n", ret); in smsc75xx_reset()
1156 netif_dbg(dev, ifup, dev->net, "Read Value from HW_CFG after writing HW_CFG_BIR: 0x%08x\n", in smsc75xx_reset()
1161 dev->rx_urb_size = MAX_SINGLE_PACKET_SIZE; in smsc75xx_reset()
1162 } else if (dev->udev->speed == USB_SPEED_HIGH) { in smsc75xx_reset()
1164 dev->rx_urb_size = DEFAULT_HS_BURST_CAP_SIZE; in smsc75xx_reset()
1167 dev->rx_urb_size = DEFAULT_FS_BURST_CAP_SIZE; in smsc75xx_reset()
1170 netif_dbg(dev, ifup, dev->net, "rx_urb_size=%ld\n", in smsc75xx_reset()
1171 (ulong)dev->rx_urb_size); in smsc75xx_reset()
1173 ret = smsc75xx_write_reg(dev, BURST_CAP, buf); in smsc75xx_reset()
1175 netdev_warn(dev->net, "Failed to write BURST_CAP: %d\n", ret); in smsc75xx_reset()
1179 ret = smsc75xx_read_reg(dev, BURST_CAP, &buf); in smsc75xx_reset()
1181 netdev_warn(dev->net, "Failed to read BURST_CAP: %d\n", ret); in smsc75xx_reset()
1185 netif_dbg(dev, ifup, dev->net, in smsc75xx_reset()
1188 ret = smsc75xx_write_reg(dev, BULK_IN_DLY, DEFAULT_BULK_IN_DELAY); in smsc75xx_reset()
1190 netdev_warn(dev->net, "Failed to write BULK_IN_DLY: %d\n", ret); in smsc75xx_reset()
1194 ret = smsc75xx_read_reg(dev, BULK_IN_DLY, &buf); in smsc75xx_reset()
1196 netdev_warn(dev->net, "Failed to read BULK_IN_DLY: %d\n", ret); in smsc75xx_reset()
1200 netif_dbg(dev, ifup, dev->net, in smsc75xx_reset()
1204 ret = smsc75xx_read_reg(dev, HW_CFG, &buf); in smsc75xx_reset()
1206 netdev_warn(dev->net, "Failed to read HW_CFG: %d\n", ret); in smsc75xx_reset()
1210 netif_dbg(dev, ifup, dev->net, "HW_CFG: 0x%08x\n", buf); in smsc75xx_reset()
1214 ret = smsc75xx_write_reg(dev, HW_CFG, buf); in smsc75xx_reset()
1216 netdev_warn(dev->net, "Failed to write HW_CFG: %d\n", ret); in smsc75xx_reset()
1220 ret = smsc75xx_read_reg(dev, HW_CFG, &buf); in smsc75xx_reset()
1222 netdev_warn(dev->net, "Failed to read HW_CFG: %d\n", ret); in smsc75xx_reset()
1226 netif_dbg(dev, ifup, dev->net, "HW_CFG: 0x%08x\n", buf); in smsc75xx_reset()
1231 ret = smsc75xx_write_reg(dev, FCT_RX_FIFO_END, buf); in smsc75xx_reset()
1233 netdev_warn(dev->net, "Failed to write FCT_RX_FIFO_END: %d\n", ret); in smsc75xx_reset()
1237 netif_dbg(dev, ifup, dev->net, "FCT_RX_FIFO_END set to 0x%08x\n", buf); in smsc75xx_reset()
1240 ret = smsc75xx_write_reg(dev, FCT_TX_FIFO_END, buf); in smsc75xx_reset()
1242 netdev_warn(dev->net, "Failed to write FCT_TX_FIFO_END: %d\n", ret); in smsc75xx_reset()
1246 netif_dbg(dev, ifup, dev->net, "FCT_TX_FIFO_END set to 0x%08x\n", buf); in smsc75xx_reset()
1248 ret = smsc75xx_write_reg(dev, INT_STS, INT_STS_CLEAR_ALL); in smsc75xx_reset()
1250 netdev_warn(dev->net, "Failed to write INT_STS: %d\n", ret); in smsc75xx_reset()
1254 ret = smsc75xx_read_reg(dev, ID_REV, &buf); in smsc75xx_reset()
1256 netdev_warn(dev->net, "Failed to read ID_REV: %d\n", ret); in smsc75xx_reset()
1260 netif_dbg(dev, ifup, dev->net, "ID_REV = 0x%08x\n", buf); in smsc75xx_reset()
1262 ret = smsc75xx_read_reg(dev, E2P_CMD, &buf); in smsc75xx_reset()
1264 netdev_warn(dev->net, "Failed to read E2P_CMD: %d\n", ret); in smsc75xx_reset()
1270 ret = smsc75xx_read_reg(dev, LED_GPIO_CFG, &buf); in smsc75xx_reset()
1272 netdev_warn(dev->net, "Failed to read LED_GPIO_CFG: %d\n", ret); in smsc75xx_reset()
1279 ret = smsc75xx_write_reg(dev, LED_GPIO_CFG, buf); in smsc75xx_reset()
1281 netdev_warn(dev->net, "Failed to write LED_GPIO_CFG: %d\n", ret); in smsc75xx_reset()
1286 ret = smsc75xx_write_reg(dev, FLOW, 0); in smsc75xx_reset()
1288 netdev_warn(dev->net, "Failed to write FLOW: %d\n", ret); in smsc75xx_reset()
1292 ret = smsc75xx_write_reg(dev, FCT_FLOW, 0); in smsc75xx_reset()
1294 netdev_warn(dev->net, "Failed to write FCT_FLOW: %d\n", ret); in smsc75xx_reset()
1299 ret = smsc75xx_read_reg(dev, RFE_CTL, &pdata->rfe_ctl); in smsc75xx_reset()
1301 netdev_warn(dev->net, "Failed to read RFE_CTL: %d\n", ret); in smsc75xx_reset()
1307 ret = smsc75xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); in smsc75xx_reset()
1309 netdev_warn(dev->net, "Failed to write RFE_CTL: %d\n", ret); in smsc75xx_reset()
1313 ret = smsc75xx_read_reg(dev, RFE_CTL, &pdata->rfe_ctl); in smsc75xx_reset()
1315 netdev_warn(dev->net, "Failed to read RFE_CTL: %d\n", ret); in smsc75xx_reset()
1319 netif_dbg(dev, ifup, dev->net, "RFE_CTL set to 0x%08x\n", in smsc75xx_reset()
1323 smsc75xx_set_features(dev->net, dev->net->features); in smsc75xx_reset()
1325 smsc75xx_set_multicast(dev->net); in smsc75xx_reset()
1327 ret = smsc75xx_phy_initialize(dev); in smsc75xx_reset()
1329 netdev_warn(dev->net, "Failed to initialize PHY: %d\n", ret); in smsc75xx_reset()
1333 ret = smsc75xx_read_reg(dev, INT_EP_CTL, &buf); in smsc75xx_reset()
1335 netdev_warn(dev->net, "Failed to read INT_EP_CTL: %d\n", ret); in smsc75xx_reset()
1342 ret = smsc75xx_write_reg(dev, INT_EP_CTL, buf); in smsc75xx_reset()
1344 netdev_warn(dev->net, "Failed to write INT_EP_CTL: %d\n", ret); in smsc75xx_reset()
1349 ret = smsc75xx_read_reg(dev, MAC_CR, &buf); in smsc75xx_reset()
1351 netdev_warn(dev->net, "Failed to read MAC_CR: %d\n", ret); in smsc75xx_reset()
1356 ret = smsc75xx_write_reg(dev, MAC_CR, buf); in smsc75xx_reset()
1358 netdev_warn(dev->net, "Failed to write MAC_CR: %d\n", ret); in smsc75xx_reset()
1362 ret = smsc75xx_read_reg(dev, MAC_TX, &buf); in smsc75xx_reset()
1364 netdev_warn(dev->net, "Failed to read MAC_TX: %d\n", ret); in smsc75xx_reset()
1370 ret = smsc75xx_write_reg(dev, MAC_TX, buf); in smsc75xx_reset()
1372 netdev_warn(dev->net, "Failed to write MAC_TX: %d\n", ret); in smsc75xx_reset()
1376 netif_dbg(dev, ifup, dev->net, "MAC_TX set to 0x%08x\n", buf); in smsc75xx_reset()
1378 ret = smsc75xx_read_reg(dev, FCT_TX_CTL, &buf); in smsc75xx_reset()
1380 netdev_warn(dev->net, "Failed to read FCT_TX_CTL: %d\n", ret); in smsc75xx_reset()
1386 ret = smsc75xx_write_reg(dev, FCT_TX_CTL, buf); in smsc75xx_reset()
1388 netdev_warn(dev->net, "Failed to write FCT_TX_CTL: %d\n", ret); in smsc75xx_reset()
1392 netif_dbg(dev, ifup, dev->net, "FCT_TX_CTL set to 0x%08x\n", buf); in smsc75xx_reset()
1394 ret = smsc75xx_set_rx_max_frame_length(dev, dev->net->mtu + ETH_HLEN); in smsc75xx_reset()
1396 netdev_warn(dev->net, "Failed to set max rx frame length\n"); in smsc75xx_reset()
1400 ret = smsc75xx_read_reg(dev, MAC_RX, &buf); in smsc75xx_reset()
1402 netdev_warn(dev->net, "Failed to read MAC_RX: %d\n", ret); in smsc75xx_reset()
1408 ret = smsc75xx_write_reg(dev, MAC_RX, buf); in smsc75xx_reset()
1410 netdev_warn(dev->net, "Failed to write MAC_RX: %d\n", ret); in smsc75xx_reset()
1414 netif_dbg(dev, ifup, dev->net, "MAC_RX set to 0x%08x\n", buf); in smsc75xx_reset()
1416 ret = smsc75xx_read_reg(dev, FCT_RX_CTL, &buf); in smsc75xx_reset()
1418 netdev_warn(dev->net, "Failed to read FCT_RX_CTL: %d\n", ret); in smsc75xx_reset()
1424 ret = smsc75xx_write_reg(dev, FCT_RX_CTL, buf); in smsc75xx_reset()
1426 netdev_warn(dev->net, "Failed to write FCT_RX_CTL: %d\n", ret); in smsc75xx_reset()
1430 netif_dbg(dev, ifup, dev->net, "FCT_RX_CTL set to 0x%08x\n", buf); in smsc75xx_reset()
1432 netif_dbg(dev, ifup, dev->net, "smsc75xx_reset, return 0\n"); in smsc75xx_reset()
1450 static int smsc75xx_bind(struct usbnet *dev, struct usb_interface *intf) in smsc75xx_bind() argument
1457 ret = usbnet_get_endpoints(dev, intf); in smsc75xx_bind()
1459 netdev_warn(dev->net, "usbnet_get_endpoints failed: %d\n", ret); in smsc75xx_bind()
1463 dev->data[0] = (unsigned long)kzalloc(sizeof(struct smsc75xx_priv), in smsc75xx_bind()
1466 pdata = (struct smsc75xx_priv *)(dev->data[0]); in smsc75xx_bind()
1470 pdata->dev = dev; in smsc75xx_bind()
1478 dev->net->features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM; in smsc75xx_bind()
1481 dev->net->features |= NETIF_F_RXCSUM; in smsc75xx_bind()
1483 dev->net->hw_features = NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | in smsc75xx_bind()
1486 ret = smsc75xx_wait_ready(dev, 0); in smsc75xx_bind()
1488 netdev_warn(dev->net, "device not ready in smsc75xx_bind\n"); in smsc75xx_bind()
1492 smsc75xx_init_mac_address(dev); in smsc75xx_bind()
1495 ret = smsc75xx_reset(dev); in smsc75xx_bind()
1497 netdev_warn(dev->net, "smsc75xx_reset error %d\n", ret); in smsc75xx_bind()
1501 dev->net->netdev_ops = &smsc75xx_netdev_ops; in smsc75xx_bind()
1502 dev->net->ethtool_ops = &smsc75xx_ethtool_ops; in smsc75xx_bind()
1503 dev->net->flags |= IFF_MULTICAST; in smsc75xx_bind()
1504 dev->net->hard_header_len += SMSC75XX_TX_OVERHEAD; in smsc75xx_bind()
1505 dev->hard_mtu = dev->net->mtu + dev->net->hard_header_len; in smsc75xx_bind()
1506 dev->net->max_mtu = MAX_SINGLE_PACKET_SIZE; in smsc75xx_bind()
1513 dev->data[0] = 0; in smsc75xx_bind()
1517 static void smsc75xx_unbind(struct usbnet *dev, struct usb_interface *intf) in smsc75xx_unbind() argument
1519 struct smsc75xx_priv *pdata = (struct smsc75xx_priv *)(dev->data[0]); in smsc75xx_unbind()
1522 netif_dbg(dev, ifdown, dev->net, "free pdata\n"); in smsc75xx_unbind()
1524 dev->data[0] = 0; in smsc75xx_unbind()
1533 static int smsc75xx_write_wuff(struct usbnet *dev, int filter, u32 wuf_cfg, in smsc75xx_write_wuff() argument
1540 ret = smsc75xx_write_reg(dev, cfg_base, wuf_cfg); in smsc75xx_write_wuff()
1542 netdev_warn(dev->net, "Error writing WUF_CFGX\n"); in smsc75xx_write_wuff()
1546 ret = smsc75xx_write_reg(dev, mask_base, wuf_mask1); in smsc75xx_write_wuff()
1548 netdev_warn(dev->net, "Error writing WUF_MASKX\n"); in smsc75xx_write_wuff()
1552 ret = smsc75xx_write_reg(dev, mask_base + 4, 0); in smsc75xx_write_wuff()
1554 netdev_warn(dev->net, "Error writing WUF_MASKX\n"); in smsc75xx_write_wuff()
1558 ret = smsc75xx_write_reg(dev, mask_base + 8, 0); in smsc75xx_write_wuff()
1560 netdev_warn(dev->net, "Error writing WUF_MASKX\n"); in smsc75xx_write_wuff()
1564 ret = smsc75xx_write_reg(dev, mask_base + 12, 0); in smsc75xx_write_wuff()
1566 netdev_warn(dev->net, "Error writing WUF_MASKX\n"); in smsc75xx_write_wuff()
1573 static int smsc75xx_enter_suspend0(struct usbnet *dev) in smsc75xx_enter_suspend0() argument
1575 struct smsc75xx_priv *pdata = (struct smsc75xx_priv *)(dev->data[0]); in smsc75xx_enter_suspend0()
1579 ret = smsc75xx_read_reg_nopm(dev, PMT_CTL, &val); in smsc75xx_enter_suspend0()
1581 netdev_warn(dev->net, "Error reading PMT_CTL\n"); in smsc75xx_enter_suspend0()
1588 ret = smsc75xx_write_reg_nopm(dev, PMT_CTL, val); in smsc75xx_enter_suspend0()
1590 netdev_warn(dev->net, "Error writing PMT_CTL\n"); in smsc75xx_enter_suspend0()
1599 static int smsc75xx_enter_suspend1(struct usbnet *dev) in smsc75xx_enter_suspend1() argument
1601 struct smsc75xx_priv *pdata = (struct smsc75xx_priv *)(dev->data[0]); in smsc75xx_enter_suspend1()
1605 ret = smsc75xx_read_reg_nopm(dev, PMT_CTL, &val); in smsc75xx_enter_suspend1()
1607 netdev_warn(dev->net, "Error reading PMT_CTL\n"); in smsc75xx_enter_suspend1()
1614 ret = smsc75xx_write_reg_nopm(dev, PMT_CTL, val); in smsc75xx_enter_suspend1()
1616 netdev_warn(dev->net, "Error writing PMT_CTL\n"); in smsc75xx_enter_suspend1()
1624 ret = smsc75xx_write_reg_nopm(dev, PMT_CTL, val); in smsc75xx_enter_suspend1()
1626 netdev_warn(dev->net, "Error writing PMT_CTL\n"); in smsc75xx_enter_suspend1()
1635 static int smsc75xx_enter_suspend2(struct usbnet *dev) in smsc75xx_enter_suspend2() argument
1637 struct smsc75xx_priv *pdata = (struct smsc75xx_priv *)(dev->data[0]); in smsc75xx_enter_suspend2()
1641 ret = smsc75xx_read_reg_nopm(dev, PMT_CTL, &val); in smsc75xx_enter_suspend2()
1643 netdev_warn(dev->net, "Error reading PMT_CTL\n"); in smsc75xx_enter_suspend2()
1650 ret = smsc75xx_write_reg_nopm(dev, PMT_CTL, val); in smsc75xx_enter_suspend2()
1652 netdev_warn(dev->net, "Error writing PMT_CTL\n"); in smsc75xx_enter_suspend2()
1661 static int smsc75xx_enter_suspend3(struct usbnet *dev) in smsc75xx_enter_suspend3() argument
1663 struct smsc75xx_priv *pdata = (struct smsc75xx_priv *)(dev->data[0]); in smsc75xx_enter_suspend3()
1667 ret = smsc75xx_read_reg_nopm(dev, FCT_RX_CTL, &val); in smsc75xx_enter_suspend3()
1669 netdev_warn(dev->net, "Error reading FCT_RX_CTL\n"); in smsc75xx_enter_suspend3()
1674 netdev_dbg(dev->net, "rx fifo not empty in autosuspend\n"); in smsc75xx_enter_suspend3()
1678 ret = smsc75xx_read_reg_nopm(dev, PMT_CTL, &val); in smsc75xx_enter_suspend3()
1680 netdev_warn(dev->net, "Error reading PMT_CTL\n"); in smsc75xx_enter_suspend3()
1687 ret = smsc75xx_write_reg_nopm(dev, PMT_CTL, val); in smsc75xx_enter_suspend3()
1689 netdev_warn(dev->net, "Error writing PMT_CTL\n"); in smsc75xx_enter_suspend3()
1697 ret = smsc75xx_write_reg_nopm(dev, PMT_CTL, val); in smsc75xx_enter_suspend3()
1699 netdev_warn(dev->net, "Error writing PMT_CTL\n"); in smsc75xx_enter_suspend3()
1708 static int smsc75xx_enable_phy_wakeup_interrupts(struct usbnet *dev, u16 mask) in smsc75xx_enable_phy_wakeup_interrupts() argument
1710 struct mii_if_info *mii = &dev->mii; in smsc75xx_enable_phy_wakeup_interrupts()
1713 netdev_dbg(dev->net, "enabling PHY wakeup interrupts\n"); in smsc75xx_enable_phy_wakeup_interrupts()
1716 ret = smsc75xx_mdio_read_nopm(dev->net, mii->phy_id, PHY_INT_SRC); in smsc75xx_enable_phy_wakeup_interrupts()
1718 netdev_warn(dev->net, "Error reading PHY_INT_SRC\n"); in smsc75xx_enable_phy_wakeup_interrupts()
1723 ret = smsc75xx_mdio_read_nopm(dev->net, mii->phy_id, PHY_INT_MASK); in smsc75xx_enable_phy_wakeup_interrupts()
1725 netdev_warn(dev->net, "Error reading PHY_INT_MASK\n"); in smsc75xx_enable_phy_wakeup_interrupts()
1731 smsc75xx_mdio_write_nopm(dev->net, mii->phy_id, PHY_INT_MASK, ret); in smsc75xx_enable_phy_wakeup_interrupts()
1736 static int smsc75xx_link_ok_nopm(struct usbnet *dev) in smsc75xx_link_ok_nopm() argument
1738 struct mii_if_info *mii = &dev->mii; in smsc75xx_link_ok_nopm()
1742 ret = smsc75xx_mdio_read_nopm(dev->net, mii->phy_id, MII_BMSR); in smsc75xx_link_ok_nopm()
1744 netdev_warn(dev->net, "Error reading MII_BMSR\n"); in smsc75xx_link_ok_nopm()
1748 ret = smsc75xx_mdio_read_nopm(dev->net, mii->phy_id, MII_BMSR); in smsc75xx_link_ok_nopm()
1750 netdev_warn(dev->net, "Error reading MII_BMSR\n"); in smsc75xx_link_ok_nopm()
1757 static int smsc75xx_autosuspend(struct usbnet *dev, u32 link_up) in smsc75xx_autosuspend() argument
1761 if (!netif_running(dev->net)) { in smsc75xx_autosuspend()
1763 netdev_dbg(dev->net, "autosuspend entering SUSPEND2\n"); in smsc75xx_autosuspend()
1764 return smsc75xx_enter_suspend2(dev); in smsc75xx_autosuspend()
1769 netdev_dbg(dev->net, "autosuspend entering SUSPEND1\n"); in smsc75xx_autosuspend()
1772 ret = smsc75xx_enable_phy_wakeup_interrupts(dev, in smsc75xx_autosuspend()
1775 netdev_warn(dev->net, "error enabling PHY wakeup ints\n"); in smsc75xx_autosuspend()
1779 netdev_info(dev->net, "entering SUSPEND1 mode\n"); in smsc75xx_autosuspend()
1780 return smsc75xx_enter_suspend1(dev); in smsc75xx_autosuspend()
1784 ret = smsc75xx_enable_phy_wakeup_interrupts(dev, in smsc75xx_autosuspend()
1787 netdev_warn(dev->net, "error enabling PHY wakeup ints\n"); in smsc75xx_autosuspend()
1791 netdev_dbg(dev->net, "autosuspend entering SUSPEND3\n"); in smsc75xx_autosuspend()
1792 return smsc75xx_enter_suspend3(dev); in smsc75xx_autosuspend()
1797 struct usbnet *dev = usb_get_intfdata(intf); in smsc75xx_suspend() local
1798 struct smsc75xx_priv *pdata = (struct smsc75xx_priv *)(dev->data[0]); in smsc75xx_suspend()
1804 netdev_warn(dev->net, "usbnet_suspend error\n"); in smsc75xx_suspend()
1809 netdev_warn(dev->net, "error during last resume\n"); in smsc75xx_suspend()
1814 link_up = smsc75xx_link_ok_nopm(dev); in smsc75xx_suspend()
1817 ret = smsc75xx_autosuspend(dev, link_up); in smsc75xx_suspend()
1827 netdev_info(dev->net, "entering SUSPEND2 mode\n"); in smsc75xx_suspend()
1830 ret = smsc75xx_read_reg_nopm(dev, WUCSR, &val); in smsc75xx_suspend()
1832 netdev_warn(dev->net, "Error reading WUCSR\n"); in smsc75xx_suspend()
1838 ret = smsc75xx_write_reg_nopm(dev, WUCSR, val); in smsc75xx_suspend()
1840 netdev_warn(dev->net, "Error writing WUCSR\n"); in smsc75xx_suspend()
1844 ret = smsc75xx_read_reg_nopm(dev, PMT_CTL, &val); in smsc75xx_suspend()
1846 netdev_warn(dev->net, "Error reading PMT_CTL\n"); in smsc75xx_suspend()
1852 ret = smsc75xx_write_reg_nopm(dev, PMT_CTL, val); in smsc75xx_suspend()
1854 netdev_warn(dev->net, "Error writing PMT_CTL\n"); in smsc75xx_suspend()
1858 ret = smsc75xx_enter_suspend2(dev); in smsc75xx_suspend()
1863 ret = smsc75xx_enable_phy_wakeup_interrupts(dev, in smsc75xx_suspend()
1866 netdev_warn(dev->net, "error enabling PHY wakeup ints\n"); in smsc75xx_suspend()
1874 struct mii_if_info *mii = &dev->mii; in smsc75xx_suspend()
1875 netdev_info(dev->net, "entering SUSPEND1 mode\n"); in smsc75xx_suspend()
1878 ret = smsc75xx_mdio_read_nopm(dev->net, mii->phy_id, in smsc75xx_suspend()
1881 netdev_warn(dev->net, "Error reading PHY_MODE_CTRL_STS\n"); in smsc75xx_suspend()
1887 smsc75xx_mdio_write_nopm(dev->net, mii->phy_id, in smsc75xx_suspend()
1891 ret = smsc75xx_enter_suspend1(dev); in smsc75xx_suspend()
1901 ret = smsc75xx_write_reg_nopm(dev, WUF_CFGX + i * 4, 0); in smsc75xx_suspend()
1903 netdev_warn(dev->net, "Error writing WUF_CFGX\n"); in smsc75xx_suspend()
1910 netdev_info(dev->net, "enabling multicast detection\n"); in smsc75xx_suspend()
1914 ret = smsc75xx_write_wuff(dev, filter++, val, 0x0007); in smsc75xx_suspend()
1916 netdev_warn(dev->net, "Error writing wakeup filter\n"); in smsc75xx_suspend()
1923 netdev_info(dev->net, "enabling ARP detection\n"); in smsc75xx_suspend()
1927 ret = smsc75xx_write_wuff(dev, filter++, val, 0x0003); in smsc75xx_suspend()
1929 netdev_warn(dev->net, "Error writing wakeup filter\n"); in smsc75xx_suspend()
1935 ret = smsc75xx_read_reg_nopm(dev, WUCSR, &val); in smsc75xx_suspend()
1937 netdev_warn(dev->net, "Error reading WUCSR\n"); in smsc75xx_suspend()
1943 ret = smsc75xx_write_reg_nopm(dev, WUCSR, val); in smsc75xx_suspend()
1945 netdev_warn(dev->net, "Error writing WUCSR\n"); in smsc75xx_suspend()
1949 netdev_info(dev->net, "enabling packet match detection\n"); in smsc75xx_suspend()
1950 ret = smsc75xx_read_reg_nopm(dev, WUCSR, &val); in smsc75xx_suspend()
1952 netdev_warn(dev->net, "Error reading WUCSR\n"); in smsc75xx_suspend()
1958 ret = smsc75xx_write_reg_nopm(dev, WUCSR, val); in smsc75xx_suspend()
1960 netdev_warn(dev->net, "Error writing WUCSR\n"); in smsc75xx_suspend()
1964 netdev_info(dev->net, "disabling packet match detection\n"); in smsc75xx_suspend()
1965 ret = smsc75xx_read_reg_nopm(dev, WUCSR, &val); in smsc75xx_suspend()
1967 netdev_warn(dev->net, "Error reading WUCSR\n"); in smsc75xx_suspend()
1973 ret = smsc75xx_write_reg_nopm(dev, WUCSR, val); in smsc75xx_suspend()
1975 netdev_warn(dev->net, "Error writing WUCSR\n"); in smsc75xx_suspend()
1981 ret = smsc75xx_read_reg_nopm(dev, WUCSR, &val); in smsc75xx_suspend()
1983 netdev_warn(dev->net, "Error reading WUCSR\n"); in smsc75xx_suspend()
1989 ret = smsc75xx_write_reg_nopm(dev, WUCSR, val); in smsc75xx_suspend()
1991 netdev_warn(dev->net, "Error writing WUCSR\n"); in smsc75xx_suspend()
1996 netdev_info(dev->net, "enabling PHY wakeup\n"); in smsc75xx_suspend()
1998 ret = smsc75xx_read_reg_nopm(dev, PMT_CTL, &val); in smsc75xx_suspend()
2000 netdev_warn(dev->net, "Error reading PMT_CTL\n"); in smsc75xx_suspend()
2008 ret = smsc75xx_write_reg_nopm(dev, PMT_CTL, val); in smsc75xx_suspend()
2010 netdev_warn(dev->net, "Error writing PMT_CTL\n"); in smsc75xx_suspend()
2016 netdev_info(dev->net, "enabling magic packet wakeup\n"); in smsc75xx_suspend()
2017 ret = smsc75xx_read_reg_nopm(dev, WUCSR, &val); in smsc75xx_suspend()
2019 netdev_warn(dev->net, "Error reading WUCSR\n"); in smsc75xx_suspend()
2026 ret = smsc75xx_write_reg_nopm(dev, WUCSR, val); in smsc75xx_suspend()
2028 netdev_warn(dev->net, "Error writing WUCSR\n"); in smsc75xx_suspend()
2034 netdev_info(dev->net, "enabling broadcast detection\n"); in smsc75xx_suspend()
2035 ret = smsc75xx_read_reg_nopm(dev, WUCSR, &val); in smsc75xx_suspend()
2037 netdev_warn(dev->net, "Error reading WUCSR\n"); in smsc75xx_suspend()
2043 ret = smsc75xx_write_reg_nopm(dev, WUCSR, val); in smsc75xx_suspend()
2045 netdev_warn(dev->net, "Error writing WUCSR\n"); in smsc75xx_suspend()
2051 netdev_info(dev->net, "enabling unicast detection\n"); in smsc75xx_suspend()
2052 ret = smsc75xx_read_reg_nopm(dev, WUCSR, &val); in smsc75xx_suspend()
2054 netdev_warn(dev->net, "Error reading WUCSR\n"); in smsc75xx_suspend()
2060 ret = smsc75xx_write_reg_nopm(dev, WUCSR, val); in smsc75xx_suspend()
2062 netdev_warn(dev->net, "Error writing WUCSR\n"); in smsc75xx_suspend()
2068 ret = smsc75xx_read_reg_nopm(dev, MAC_RX, &val); in smsc75xx_suspend()
2070 netdev_warn(dev->net, "Failed to read MAC_RX: %d\n", ret); in smsc75xx_suspend()
2076 ret = smsc75xx_write_reg_nopm(dev, MAC_RX, val); in smsc75xx_suspend()
2078 netdev_warn(dev->net, "Failed to write MAC_RX: %d\n", ret); in smsc75xx_suspend()
2083 netdev_info(dev->net, "entering SUSPEND0 mode\n"); in smsc75xx_suspend()
2084 ret = smsc75xx_enter_suspend0(dev); in smsc75xx_suspend()
2098 struct usbnet *dev = usb_get_intfdata(intf); in smsc75xx_resume() local
2099 struct smsc75xx_priv *pdata = (struct smsc75xx_priv *)(dev->data[0]); in smsc75xx_resume()
2104 netdev_dbg(dev->net, "resume suspend_flags=0x%02x\n", suspend_flags); in smsc75xx_resume()
2111 ret = smsc75xx_read_reg_nopm(dev, WUCSR, &val); in smsc75xx_resume()
2113 netdev_warn(dev->net, "Error reading WUCSR\n"); in smsc75xx_resume()
2120 ret = smsc75xx_write_reg_nopm(dev, WUCSR, val); in smsc75xx_resume()
2122 netdev_warn(dev->net, "Error writing WUCSR\n"); in smsc75xx_resume()
2127 ret = smsc75xx_read_reg_nopm(dev, PMT_CTL, &val); in smsc75xx_resume()
2129 netdev_warn(dev->net, "Error reading PMT_CTL\n"); in smsc75xx_resume()
2136 ret = smsc75xx_write_reg_nopm(dev, PMT_CTL, val); in smsc75xx_resume()
2138 netdev_warn(dev->net, "Error writing PMT_CTL\n"); in smsc75xx_resume()
2144 netdev_info(dev->net, "resuming from SUSPEND2\n"); in smsc75xx_resume()
2146 ret = smsc75xx_read_reg_nopm(dev, PMT_CTL, &val); in smsc75xx_resume()
2148 netdev_warn(dev->net, "Error reading PMT_CTL\n"); in smsc75xx_resume()
2154 ret = smsc75xx_write_reg_nopm(dev, PMT_CTL, val); in smsc75xx_resume()
2156 netdev_warn(dev->net, "Error writing PMT_CTL\n"); in smsc75xx_resume()
2161 ret = smsc75xx_wait_ready(dev, 1); in smsc75xx_resume()
2163 netdev_warn(dev->net, "device not ready in smsc75xx_resume\n"); in smsc75xx_resume()
2170 static void smsc75xx_rx_csum_offload(struct usbnet *dev, struct sk_buff *skb, in smsc75xx_rx_csum_offload() argument
2173 if (!(dev->net->features & NETIF_F_RXCSUM) || in smsc75xx_rx_csum_offload()
2182 static int smsc75xx_rx_fixup(struct usbnet *dev, struct sk_buff *skb) in smsc75xx_rx_fixup() argument
2185 if (skb->len < dev->net->hard_header_len) in smsc75xx_rx_fixup()
2206 netif_dbg(dev, rx_err, dev->net, in smsc75xx_rx_fixup()
2213 netif_dbg(dev, rx_err, dev->net, in smsc75xx_rx_fixup()
2215 dev->net->stats.rx_errors++; in smsc75xx_rx_fixup()
2216 dev->net->stats.rx_dropped++; in smsc75xx_rx_fixup()
2219 dev->net->stats.rx_crc_errors++; in smsc75xx_rx_fixup()
2221 dev->net->stats.rx_frame_errors++; in smsc75xx_rx_fixup()
2225 netif_dbg(dev, rx_err, dev->net, in smsc75xx_rx_fixup()
2233 smsc75xx_rx_csum_offload(dev, skb, rx_cmd_a, in smsc75xx_rx_fixup()
2244 netdev_warn(dev->net, "Error allocating skb\n"); in smsc75xx_rx_fixup()
2252 smsc75xx_rx_csum_offload(dev, ax_skb, rx_cmd_a, in smsc75xx_rx_fixup()
2258 usbnet_skb_return(dev, ax_skb); in smsc75xx_rx_fixup()
2271 static struct sk_buff *smsc75xx_tx_fixup(struct usbnet *dev, in smsc75xx_tx_fixup() argument
2303 static int smsc75xx_manage_power(struct usbnet *dev, int on) in smsc75xx_manage_power() argument
2305 dev->intf->needs_remote_wakeup = on; in smsc75xx_manage_power()