Lines Matching refs:dev

82 static int __must_check smsc95xx_read_reg(struct usbnet *dev, u32 index,  in smsc95xx_read_reg()  argument
85 struct smsc95xx_priv *pdata = dev->driver_priv; in smsc95xx_read_reg()
95 ret = fn(dev, USB_VENDOR_REQUEST_READ_REGISTER, USB_DIR_IN in smsc95xx_read_reg()
102 netdev_warn(dev->net, "Failed to read reg index 0x%08x: %d\n", in smsc95xx_read_reg()
113 static int __must_check smsc95xx_write_reg(struct usbnet *dev, u32 index, in smsc95xx_write_reg() argument
116 struct smsc95xx_priv *pdata = dev->driver_priv; in smsc95xx_write_reg()
129 ret = fn(dev, USB_VENDOR_REQUEST_WRITE_REGISTER, USB_DIR_OUT in smsc95xx_write_reg()
133 netdev_warn(dev->net, "Failed to write reg index 0x%08x: %d\n", in smsc95xx_write_reg()
141 static int __must_check smsc95xx_phy_wait_not_busy(struct usbnet *dev) in smsc95xx_phy_wait_not_busy() argument
148 ret = smsc95xx_read_reg(dev, MII_ADDR, &val); in smsc95xx_phy_wait_not_busy()
153 netdev_warn(dev->net, "Error reading MII_ACCESS\n"); in smsc95xx_phy_wait_not_busy()
169 static int smsc95xx_mdio_read(struct usbnet *dev, int phy_id, int idx) in smsc95xx_mdio_read() argument
174 mutex_lock(&dev->phy_mutex); in smsc95xx_mdio_read()
177 ret = smsc95xx_phy_wait_not_busy(dev); in smsc95xx_mdio_read()
179 netdev_warn(dev->net, "%s: MII is busy\n", __func__); in smsc95xx_mdio_read()
185 ret = smsc95xx_write_reg(dev, MII_ADDR, addr); in smsc95xx_mdio_read()
188 netdev_warn(dev->net, "Error writing MII_ADDR\n"); in smsc95xx_mdio_read()
192 ret = smsc95xx_phy_wait_not_busy(dev); in smsc95xx_mdio_read()
194 netdev_warn(dev->net, "Timed out reading MII reg %02X\n", idx); in smsc95xx_mdio_read()
198 ret = smsc95xx_read_reg(dev, MII_DATA, &val); in smsc95xx_mdio_read()
201 netdev_warn(dev->net, "Error reading MII_DATA\n"); in smsc95xx_mdio_read()
208 mutex_unlock(&dev->phy_mutex); in smsc95xx_mdio_read()
216 static void smsc95xx_mdio_write(struct usbnet *dev, int phy_id, int idx, in smsc95xx_mdio_write() argument
222 mutex_lock(&dev->phy_mutex); in smsc95xx_mdio_write()
225 ret = smsc95xx_phy_wait_not_busy(dev); in smsc95xx_mdio_write()
227 netdev_warn(dev->net, "%s: MII is busy\n", __func__); in smsc95xx_mdio_write()
232 ret = smsc95xx_write_reg(dev, MII_DATA, val); in smsc95xx_mdio_write()
235 netdev_warn(dev->net, "Error writing MII_DATA\n"); in smsc95xx_mdio_write()
241 ret = smsc95xx_write_reg(dev, MII_ADDR, addr); in smsc95xx_mdio_write()
244 netdev_warn(dev->net, "Error writing MII_ADDR\n"); in smsc95xx_mdio_write()
248 ret = smsc95xx_phy_wait_not_busy(dev); in smsc95xx_mdio_write()
250 netdev_warn(dev->net, "Timed out writing MII reg %02X\n", idx); in smsc95xx_mdio_write()
255 mutex_unlock(&dev->phy_mutex); in smsc95xx_mdio_write()
261 struct usbnet *dev; in smsc95xx_mdiobus_reset() local
265 dev = bus->priv; in smsc95xx_mdiobus_reset()
266 pdata = dev->driver_priv; in smsc95xx_mdiobus_reset()
271 mutex_lock(&dev->phy_mutex); in smsc95xx_mdiobus_reset()
273 ret = smsc95xx_read_reg(dev, PM_CTRL, &val); in smsc95xx_mdiobus_reset()
279 ret = smsc95xx_write_reg(dev, PM_CTRL, val); in smsc95xx_mdiobus_reset()
290 mutex_unlock(&dev->phy_mutex); in smsc95xx_mdiobus_reset()
297 struct usbnet *dev = bus->priv; in smsc95xx_mdiobus_read() local
299 return smsc95xx_mdio_read(dev, phy_id, idx); in smsc95xx_mdiobus_read()
305 struct usbnet *dev = bus->priv; in smsc95xx_mdiobus_write() local
307 smsc95xx_mdio_write(dev, phy_id, idx, regval); in smsc95xx_mdiobus_write()
311 static int __must_check smsc95xx_wait_eeprom(struct usbnet *dev) in smsc95xx_wait_eeprom() argument
318 ret = smsc95xx_read_reg(dev, E2P_CMD, &val); in smsc95xx_wait_eeprom()
320 netdev_warn(dev->net, "Error reading E2P_CMD\n"); in smsc95xx_wait_eeprom()
330 netdev_warn(dev->net, "EEPROM read operation timeout\n"); in smsc95xx_wait_eeprom()
337 static int __must_check smsc95xx_eeprom_confirm_not_busy(struct usbnet *dev) in smsc95xx_eeprom_confirm_not_busy() argument
344 ret = smsc95xx_read_reg(dev, E2P_CMD, &val); in smsc95xx_eeprom_confirm_not_busy()
346 netdev_warn(dev->net, "Error reading E2P_CMD\n"); in smsc95xx_eeprom_confirm_not_busy()
356 netdev_warn(dev->net, "EEPROM is busy\n"); in smsc95xx_eeprom_confirm_not_busy()
360 static int smsc95xx_read_eeprom(struct usbnet *dev, u32 offset, u32 length, in smsc95xx_read_eeprom() argument
366 BUG_ON(!dev); in smsc95xx_read_eeprom()
369 ret = smsc95xx_eeprom_confirm_not_busy(dev); in smsc95xx_read_eeprom()
375 ret = smsc95xx_write_reg(dev, E2P_CMD, val); in smsc95xx_read_eeprom()
377 netdev_warn(dev->net, "Error writing E2P_CMD\n"); in smsc95xx_read_eeprom()
381 ret = smsc95xx_wait_eeprom(dev); in smsc95xx_read_eeprom()
385 ret = smsc95xx_read_reg(dev, E2P_DATA, &val); in smsc95xx_read_eeprom()
387 netdev_warn(dev->net, "Error reading E2P_DATA\n"); in smsc95xx_read_eeprom()
398 static int smsc95xx_write_eeprom(struct usbnet *dev, u32 offset, u32 length, in smsc95xx_write_eeprom() argument
404 BUG_ON(!dev); in smsc95xx_write_eeprom()
407 ret = smsc95xx_eeprom_confirm_not_busy(dev); in smsc95xx_write_eeprom()
413 ret = smsc95xx_write_reg(dev, E2P_CMD, val); in smsc95xx_write_eeprom()
415 netdev_warn(dev->net, "Error writing E2P_DATA\n"); in smsc95xx_write_eeprom()
419 ret = smsc95xx_wait_eeprom(dev); in smsc95xx_write_eeprom()
427 ret = smsc95xx_write_reg(dev, E2P_DATA, val); in smsc95xx_write_eeprom()
429 netdev_warn(dev->net, "Error writing E2P_DATA\n"); in smsc95xx_write_eeprom()
435 ret = smsc95xx_write_reg(dev, E2P_CMD, val); in smsc95xx_write_eeprom()
437 netdev_warn(dev->net, "Error writing E2P_CMD\n"); in smsc95xx_write_eeprom()
441 ret = smsc95xx_wait_eeprom(dev); in smsc95xx_write_eeprom()
451 static int __must_check smsc95xx_write_reg_async(struct usbnet *dev, u16 index, in smsc95xx_write_reg_async() argument
461 ret = usbnet_write_cmd_async(dev, USB_VENDOR_REQUEST_WRITE_REGISTER, in smsc95xx_write_reg_async()
466 netdev_warn(dev->net, "Error write async cmd, sts=%d\n", in smsc95xx_write_reg_async()
481 struct usbnet *dev = netdev_priv(netdev); in smsc95xx_set_multicast() local
482 struct smsc95xx_priv *pdata = dev->driver_priv; in smsc95xx_set_multicast()
491 if (dev->net->flags & IFF_PROMISC) { in smsc95xx_set_multicast()
492 netif_dbg(dev, drv, dev->net, "promiscuous mode enabled\n"); in smsc95xx_set_multicast()
495 } else if (dev->net->flags & IFF_ALLMULTI) { in smsc95xx_set_multicast()
496 netif_dbg(dev, drv, dev->net, "receive all multicast enabled\n"); in smsc95xx_set_multicast()
499 } else if (!netdev_mc_empty(dev->net)) { in smsc95xx_set_multicast()
514 netif_dbg(dev, drv, dev->net, "HASHH=0x%08X, HASHL=0x%08X\n", in smsc95xx_set_multicast()
517 netif_dbg(dev, drv, dev->net, "receive own packets only\n"); in smsc95xx_set_multicast()
525 ret = smsc95xx_write_reg_async(dev, HASHH, pdata->hash_hi); in smsc95xx_set_multicast()
527 netdev_warn(dev->net, "failed to initiate async write to HASHH\n"); in smsc95xx_set_multicast()
529 ret = smsc95xx_write_reg_async(dev, HASHL, pdata->hash_lo); in smsc95xx_set_multicast()
531 netdev_warn(dev->net, "failed to initiate async write to HASHL\n"); in smsc95xx_set_multicast()
533 ret = smsc95xx_write_reg_async(dev, MAC_CR, pdata->mac_cr); in smsc95xx_set_multicast()
535 netdev_warn(dev->net, "failed to initiate async write to MAC_CR\n"); in smsc95xx_set_multicast()
538 static int smsc95xx_phy_update_flowcontrol(struct usbnet *dev) in smsc95xx_phy_update_flowcontrol() argument
541 struct smsc95xx_priv *pdata = dev->driver_priv; in smsc95xx_phy_update_flowcontrol()
544 int ret = smsc95xx_read_reg(dev, AFC_CFG, &afc_cfg); in smsc95xx_phy_update_flowcontrol()
561 netif_dbg(dev, link, dev->net, "rx pause %s, tx pause %s\n", in smsc95xx_phy_update_flowcontrol()
565 netif_dbg(dev, link, dev->net, "half duplex\n"); in smsc95xx_phy_update_flowcontrol()
569 ret = smsc95xx_write_reg(dev, FLOW, flow); in smsc95xx_phy_update_flowcontrol()
573 return smsc95xx_write_reg(dev, AFC_CFG, afc_cfg); in smsc95xx_phy_update_flowcontrol()
576 static void smsc95xx_mac_update_fullduplex(struct usbnet *dev) in smsc95xx_mac_update_fullduplex() argument
578 struct smsc95xx_priv *pdata = dev->driver_priv; in smsc95xx_mac_update_fullduplex()
592 ret = smsc95xx_write_reg(dev, MAC_CR, pdata->mac_cr); in smsc95xx_mac_update_fullduplex()
595 netdev_warn(dev->net, in smsc95xx_mac_update_fullduplex()
600 ret = smsc95xx_phy_update_flowcontrol(dev); in smsc95xx_mac_update_fullduplex()
602 netdev_warn(dev->net, "Error updating PHY flow control\n"); in smsc95xx_mac_update_fullduplex()
605 static void smsc95xx_status(struct usbnet *dev, struct urb *urb) in smsc95xx_status() argument
607 struct smsc95xx_priv *pdata = dev->driver_priv; in smsc95xx_status()
612 netdev_warn(dev->net, "unexpected urb length %d\n", in smsc95xx_status()
618 netif_dbg(dev, link, dev->net, "intdata: 0x%08X\n", intdata); in smsc95xx_status()
625 netdev_warn(dev->net, "unexpected interrupt, intdata=0x%08X\n", in smsc95xx_status()
635 struct usbnet *dev = netdev_priv(netdev); in smsc95xx_set_features() local
639 ret = smsc95xx_read_reg(dev, COE_CR, &read_buf); in smsc95xx_set_features()
653 ret = smsc95xx_write_reg(dev, COE_CR, read_buf); in smsc95xx_set_features()
657 netif_dbg(dev, hw, dev->net, "COE_CR = 0x%08x\n", read_buf); in smsc95xx_set_features()
669 struct usbnet *dev = netdev_priv(netdev); in smsc95xx_ethtool_get_eeprom() local
673 return smsc95xx_read_eeprom(dev, ee->offset, ee->len, data); in smsc95xx_ethtool_get_eeprom()
679 struct usbnet *dev = netdev_priv(netdev); in smsc95xx_ethtool_set_eeprom() local
682 netdev_warn(dev->net, "EEPROM: magic value mismatch, magic = 0x%x\n", in smsc95xx_ethtool_set_eeprom()
687 return smsc95xx_write_eeprom(dev, ee->offset, ee->len, data); in smsc95xx_ethtool_set_eeprom()
700 struct usbnet *dev = netdev_priv(netdev); in smsc95xx_ethtool_getregs() local
705 retval = smsc95xx_read_reg(dev, ID_REV, &regs->version); in smsc95xx_ethtool_getregs()
712 retval = smsc95xx_read_reg(dev, i, &data[j]); in smsc95xx_ethtool_getregs()
723 struct usbnet *dev = netdev_priv(net); in smsc95xx_ethtool_get_wol() local
724 struct smsc95xx_priv *pdata = dev->driver_priv; in smsc95xx_ethtool_get_wol()
733 struct usbnet *dev = netdev_priv(net); in smsc95xx_ethtool_set_wol() local
734 struct smsc95xx_priv *pdata = dev->driver_priv; in smsc95xx_ethtool_set_wol()
742 ret = device_set_wakeup_enable(&dev->udev->dev, pdata->wolopts); in smsc95xx_ethtool_set_wol()
744 netdev_warn(dev->net, "device_set_wakeup_enable error %d\n", ret); in smsc95xx_ethtool_set_wol()
804 static void smsc95xx_init_mac_address(struct usbnet *dev) in smsc95xx_init_mac_address() argument
809 if (!platform_get_ethdev_address(&dev->udev->dev, dev->net)) { in smsc95xx_init_mac_address()
810 if (is_valid_ether_addr(dev->net->dev_addr)) { in smsc95xx_init_mac_address()
812 netif_dbg(dev, ifup, dev->net, "MAC address read from the device tree\n"); in smsc95xx_init_mac_address()
818 if (smsc95xx_read_eeprom(dev, EEPROM_MAC_OFFSET, ETH_ALEN, addr) == 0) { in smsc95xx_init_mac_address()
819 eth_hw_addr_set(dev->net, addr); in smsc95xx_init_mac_address()
820 if (is_valid_ether_addr(dev->net->dev_addr)) { in smsc95xx_init_mac_address()
822 netif_dbg(dev, ifup, dev->net, "MAC address read from EEPROM\n"); in smsc95xx_init_mac_address()
828 eth_hw_addr_random(dev->net); in smsc95xx_init_mac_address()
829 netif_dbg(dev, ifup, dev->net, "MAC address set to eth_random_addr\n"); in smsc95xx_init_mac_address()
832 static int smsc95xx_set_mac_address(struct usbnet *dev) in smsc95xx_set_mac_address() argument
834 u32 addr_lo = dev->net->dev_addr[0] | dev->net->dev_addr[1] << 8 | in smsc95xx_set_mac_address()
835 dev->net->dev_addr[2] << 16 | dev->net->dev_addr[3] << 24; in smsc95xx_set_mac_address()
836 u32 addr_hi = dev->net->dev_addr[4] | dev->net->dev_addr[5] << 8; in smsc95xx_set_mac_address()
839 ret = smsc95xx_write_reg(dev, ADDRL, addr_lo); in smsc95xx_set_mac_address()
843 return smsc95xx_write_reg(dev, ADDRH, addr_hi); in smsc95xx_set_mac_address()
847 static int smsc95xx_start_tx_path(struct usbnet *dev) in smsc95xx_start_tx_path() argument
849 struct smsc95xx_priv *pdata = dev->driver_priv; in smsc95xx_start_tx_path()
858 ret = smsc95xx_write_reg(dev, MAC_CR, pdata->mac_cr); in smsc95xx_start_tx_path()
863 return smsc95xx_write_reg(dev, TX_CFG, TX_CFG_ON_); in smsc95xx_start_tx_path()
867 static int smsc95xx_start_rx_path(struct usbnet *dev) in smsc95xx_start_rx_path() argument
869 struct smsc95xx_priv *pdata = dev->driver_priv; in smsc95xx_start_rx_path()
876 return smsc95xx_write_reg(dev, MAC_CR, pdata->mac_cr); in smsc95xx_start_rx_path()
879 static int smsc95xx_reset(struct usbnet *dev) in smsc95xx_reset() argument
881 struct smsc95xx_priv *pdata = dev->driver_priv; in smsc95xx_reset()
885 netif_dbg(dev, ifup, dev->net, "entering smsc95xx_reset\n"); in smsc95xx_reset()
887 ret = smsc95xx_write_reg(dev, HW_CFG, HW_CFG_LRST_); in smsc95xx_reset()
894 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf); in smsc95xx_reset()
901 netdev_warn(dev->net, "timeout waiting for completion of Lite Reset\n"); in smsc95xx_reset()
905 ret = smsc95xx_set_mac_address(dev); in smsc95xx_reset()
909 netif_dbg(dev, ifup, dev->net, "MAC Address: %pM\n", in smsc95xx_reset()
910 dev->net->dev_addr); in smsc95xx_reset()
912 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf); in smsc95xx_reset()
916 netif_dbg(dev, ifup, dev->net, "Read Value from HW_CFG : 0x%08x\n", in smsc95xx_reset()
921 ret = smsc95xx_write_reg(dev, HW_CFG, read_buf); in smsc95xx_reset()
925 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf); in smsc95xx_reset()
929 netif_dbg(dev, ifup, dev->net, in smsc95xx_reset()
935 dev->rx_urb_size = MAX_SINGLE_PACKET_SIZE; in smsc95xx_reset()
936 } else if (dev->udev->speed == USB_SPEED_HIGH) { in smsc95xx_reset()
938 dev->rx_urb_size = DEFAULT_HS_BURST_CAP_SIZE; in smsc95xx_reset()
941 dev->rx_urb_size = DEFAULT_FS_BURST_CAP_SIZE; in smsc95xx_reset()
944 netif_dbg(dev, ifup, dev->net, "rx_urb_size=%ld\n", in smsc95xx_reset()
945 (ulong)dev->rx_urb_size); in smsc95xx_reset()
947 ret = smsc95xx_write_reg(dev, BURST_CAP, burst_cap); in smsc95xx_reset()
951 ret = smsc95xx_read_reg(dev, BURST_CAP, &read_buf); in smsc95xx_reset()
955 netif_dbg(dev, ifup, dev->net, in smsc95xx_reset()
959 ret = smsc95xx_write_reg(dev, BULK_IN_DLY, DEFAULT_BULK_IN_DELAY); in smsc95xx_reset()
963 ret = smsc95xx_read_reg(dev, BULK_IN_DLY, &read_buf); in smsc95xx_reset()
967 netif_dbg(dev, ifup, dev->net, in smsc95xx_reset()
971 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf); in smsc95xx_reset()
975 netif_dbg(dev, ifup, dev->net, "Read Value from HW_CFG: 0x%08x\n", in smsc95xx_reset()
986 ret = smsc95xx_write_reg(dev, HW_CFG, read_buf); in smsc95xx_reset()
990 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf); in smsc95xx_reset()
994 netif_dbg(dev, ifup, dev->net, in smsc95xx_reset()
997 ret = smsc95xx_write_reg(dev, INT_STS, INT_STS_CLEAR_ALL_); in smsc95xx_reset()
1001 ret = smsc95xx_read_reg(dev, ID_REV, &read_buf); in smsc95xx_reset()
1004 netif_dbg(dev, ifup, dev->net, "ID_REV = 0x%08x\n", read_buf); in smsc95xx_reset()
1006 ret = smsc95xx_read_reg(dev, LED_GPIO_CFG, &read_buf); in smsc95xx_reset()
1012 ret = smsc95xx_write_reg(dev, LED_GPIO_CFG, read_buf); in smsc95xx_reset()
1017 ret = smsc95xx_write_reg(dev, FLOW, 0); in smsc95xx_reset()
1021 ret = smsc95xx_write_reg(dev, AFC_CFG, AFC_CFG_DEFAULT); in smsc95xx_reset()
1026 ret = smsc95xx_read_reg(dev, MAC_CR, &pdata->mac_cr); in smsc95xx_reset()
1032 ret = smsc95xx_write_reg(dev, VLAN1, (u32)ETH_P_8021Q); in smsc95xx_reset()
1037 ret = smsc95xx_set_features(dev->net, dev->net->features); in smsc95xx_reset()
1039 netdev_warn(dev->net, "Failed to set checksum offload features\n"); in smsc95xx_reset()
1043 smsc95xx_set_multicast(dev->net); in smsc95xx_reset()
1045 ret = smsc95xx_read_reg(dev, INT_EP_CTL, &read_buf); in smsc95xx_reset()
1052 ret = smsc95xx_write_reg(dev, INT_EP_CTL, read_buf); in smsc95xx_reset()
1056 ret = smsc95xx_start_tx_path(dev); in smsc95xx_reset()
1058 netdev_warn(dev->net, "Failed to start TX path\n"); in smsc95xx_reset()
1062 ret = smsc95xx_start_rx_path(dev); in smsc95xx_reset()
1064 netdev_warn(dev->net, "Failed to start RX path\n"); in smsc95xx_reset()
1068 netif_dbg(dev, ifup, dev->net, "smsc95xx_reset, return 0\n"); in smsc95xx_reset()
1088 struct usbnet *dev = netdev_priv(net); in smsc95xx_handle_link_change() local
1091 smsc95xx_mac_update_fullduplex(dev); in smsc95xx_handle_link_change()
1092 usbnet_defer_kevent(dev, EVENT_LINK_CHANGE); in smsc95xx_handle_link_change()
1095 static int smsc95xx_bind(struct usbnet *dev, struct usb_interface *intf) in smsc95xx_bind() argument
1104 ret = usbnet_get_endpoints(dev, intf); in smsc95xx_bind()
1106 netdev_warn(dev->net, "usbnet_get_endpoints failed: %d\n", ret); in smsc95xx_bind()
1114 dev->driver_priv = pdata; in smsc95xx_bind()
1126 dev->net->features |= NETIF_F_IP_CSUM; in smsc95xx_bind()
1128 dev->net->features |= NETIF_F_RXCSUM; in smsc95xx_bind()
1130 dev->net->hw_features = NETIF_F_IP_CSUM | NETIF_F_RXCSUM; in smsc95xx_bind()
1131 set_bit(EVENT_NO_IP_ALIGN, &dev->flags); in smsc95xx_bind()
1133 smsc95xx_init_mac_address(dev); in smsc95xx_bind()
1136 ret = smsc95xx_reset(dev); in smsc95xx_bind()
1141 usb_make_path(dev->udev, usb_path, sizeof(usb_path)); in smsc95xx_bind()
1174 ret = smsc95xx_read_reg(dev, HW_CFG, &val); in smsc95xx_bind()
1182 pdata->mdiobus->priv = dev; in smsc95xx_bind()
1187 pdata->mdiobus->parent = &dev->udev->dev; in smsc95xx_bind()
1190 "usb-%03d:%03d", dev->udev->bus->busnum, dev->udev->devnum); in smsc95xx_bind()
1194 netdev_err(dev->net, "Could not register MDIO bus\n"); in smsc95xx_bind()
1200 netdev_err(dev->net, "no PHY found\n"); in smsc95xx_bind()
1209 ret = smsc95xx_read_reg(dev, ID_REV, &val); in smsc95xx_bind()
1222 dev->net->netdev_ops = &smsc95xx_netdev_ops; in smsc95xx_bind()
1223 dev->net->ethtool_ops = &smsc95xx_ethtool_ops; in smsc95xx_bind()
1224 dev->net->flags |= IFF_MULTICAST; in smsc95xx_bind()
1225 dev->net->hard_header_len += SMSC95XX_TX_OVERHEAD_CSUM; in smsc95xx_bind()
1226 dev->net->min_mtu = ETH_MIN_MTU; in smsc95xx_bind()
1227 dev->net->max_mtu = ETH_DATA_LEN; in smsc95xx_bind()
1228 dev->hard_mtu = dev->net->mtu + dev->net->hard_header_len; in smsc95xx_bind()
1230 ret = phy_connect_direct(dev->net, pdata->phydev, in smsc95xx_bind()
1234 netdev_err(dev->net, "can't attach PHY to %s\n", pdata->mdiobus->id); in smsc95xx_bind()
1238 phy_attached_info(dev->net->phydev); in smsc95xx_bind()
1262 static void smsc95xx_unbind(struct usbnet *dev, struct usb_interface *intf) in smsc95xx_unbind() argument
1264 struct smsc95xx_priv *pdata = dev->driver_priv; in smsc95xx_unbind()
1266 phy_disconnect(dev->net->phydev); in smsc95xx_unbind()
1272 netif_dbg(dev, ifdown, dev->net, "free pdata\n"); in smsc95xx_unbind()
1276 static int smsc95xx_start_phy(struct usbnet *dev) in smsc95xx_start_phy() argument
1278 phy_start(dev->net->phydev); in smsc95xx_start_phy()
1283 static int smsc95xx_stop(struct usbnet *dev) in smsc95xx_stop() argument
1285 phy_stop(dev->net->phydev); in smsc95xx_stop()
1296 static int smsc95xx_link_ok(struct usbnet *dev) in smsc95xx_link_ok() argument
1298 struct smsc95xx_priv *pdata = dev->driver_priv; in smsc95xx_link_ok()
1302 ret = smsc95xx_mdio_read(dev, pdata->phydev->mdio.addr, MII_BMSR); in smsc95xx_link_ok()
1306 ret = smsc95xx_mdio_read(dev, pdata->phydev->mdio.addr, MII_BMSR); in smsc95xx_link_ok()
1313 static int smsc95xx_enter_suspend0(struct usbnet *dev) in smsc95xx_enter_suspend0() argument
1315 struct smsc95xx_priv *pdata = dev->driver_priv; in smsc95xx_enter_suspend0()
1319 ret = smsc95xx_read_reg(dev, PM_CTRL, &val); in smsc95xx_enter_suspend0()
1326 ret = smsc95xx_write_reg(dev, PM_CTRL, val); in smsc95xx_enter_suspend0()
1338 ret = smsc95xx_write_reg(dev, PM_CTRL, val); in smsc95xx_enter_suspend0()
1343 ret = smsc95xx_read_reg(dev, PM_CTRL, &val); in smsc95xx_enter_suspend0()
1352 static int smsc95xx_enter_suspend1(struct usbnet *dev) in smsc95xx_enter_suspend1() argument
1354 struct smsc95xx_priv *pdata = dev->driver_priv; in smsc95xx_enter_suspend1()
1362 smsc95xx_mdio_write(dev, phy_id, PHY_EDPD_CONFIG, in smsc95xx_enter_suspend1()
1366 ret = smsc95xx_mdio_read(dev, phy_id, PHY_MODE_CTRL_STS); in smsc95xx_enter_suspend1()
1372 smsc95xx_mdio_write(dev, phy_id, PHY_MODE_CTRL_STS, ret); in smsc95xx_enter_suspend1()
1375 ret = smsc95xx_read_reg(dev, PM_CTRL, &val); in smsc95xx_enter_suspend1()
1382 ret = smsc95xx_write_reg(dev, PM_CTRL, val); in smsc95xx_enter_suspend1()
1390 ret = smsc95xx_write_reg(dev, PM_CTRL, val); in smsc95xx_enter_suspend1()
1399 static int smsc95xx_enter_suspend2(struct usbnet *dev) in smsc95xx_enter_suspend2() argument
1401 struct smsc95xx_priv *pdata = dev->driver_priv; in smsc95xx_enter_suspend2()
1405 ret = smsc95xx_read_reg(dev, PM_CTRL, &val); in smsc95xx_enter_suspend2()
1412 ret = smsc95xx_write_reg(dev, PM_CTRL, val); in smsc95xx_enter_suspend2()
1421 static int smsc95xx_enter_suspend3(struct usbnet *dev) in smsc95xx_enter_suspend3() argument
1423 struct smsc95xx_priv *pdata = dev->driver_priv; in smsc95xx_enter_suspend3()
1427 ret = smsc95xx_read_reg(dev, RX_FIFO_INF, &val); in smsc95xx_enter_suspend3()
1432 netdev_info(dev->net, "rx fifo not empty in autosuspend\n"); in smsc95xx_enter_suspend3()
1436 ret = smsc95xx_read_reg(dev, PM_CTRL, &val); in smsc95xx_enter_suspend3()
1443 ret = smsc95xx_write_reg(dev, PM_CTRL, val); in smsc95xx_enter_suspend3()
1451 ret = smsc95xx_write_reg(dev, PM_CTRL, val); in smsc95xx_enter_suspend3()
1460 static int smsc95xx_autosuspend(struct usbnet *dev, u32 link_up) in smsc95xx_autosuspend() argument
1462 struct smsc95xx_priv *pdata = dev->driver_priv; in smsc95xx_autosuspend()
1464 if (!netif_running(dev->net)) { in smsc95xx_autosuspend()
1466 netdev_dbg(dev->net, "autosuspend entering SUSPEND2\n"); in smsc95xx_autosuspend()
1467 return smsc95xx_enter_suspend2(dev); in smsc95xx_autosuspend()
1476 netdev_warn(dev->net, "EDPD not supported\n"); in smsc95xx_autosuspend()
1480 netdev_dbg(dev->net, "autosuspend entering SUSPEND1\n"); in smsc95xx_autosuspend()
1481 netdev_info(dev->net, "entering SUSPEND1 mode\n"); in smsc95xx_autosuspend()
1482 return smsc95xx_enter_suspend1(dev); in smsc95xx_autosuspend()
1485 netdev_dbg(dev->net, "autosuspend entering SUSPEND3\n"); in smsc95xx_autosuspend()
1486 return smsc95xx_enter_suspend3(dev); in smsc95xx_autosuspend()
1491 struct usbnet *dev = usb_get_intfdata(intf); in smsc95xx_suspend() local
1492 struct smsc95xx_priv *pdata = dev->driver_priv; in smsc95xx_suspend()
1500 netdev_warn(dev->net, "usbnet_suspend error\n"); in smsc95xx_suspend()
1506 netdev_warn(dev->net, "error during last resume\n"); in smsc95xx_suspend()
1510 link_up = smsc95xx_link_ok(dev); in smsc95xx_suspend()
1514 ret = smsc95xx_autosuspend(dev, link_up); in smsc95xx_suspend()
1524 netdev_info(dev->net, "entering SUSPEND2 mode\n"); in smsc95xx_suspend()
1527 ret = smsc95xx_read_reg(dev, WUCSR, &val); in smsc95xx_suspend()
1533 ret = smsc95xx_write_reg(dev, WUCSR, val); in smsc95xx_suspend()
1537 ret = smsc95xx_read_reg(dev, PM_CTRL, &val); in smsc95xx_suspend()
1543 ret = smsc95xx_write_reg(dev, PM_CTRL, val); in smsc95xx_suspend()
1547 ret = smsc95xx_enter_suspend2(dev); in smsc95xx_suspend()
1556 netdev_info(dev->net, "entering SUSPEND1 mode\n"); in smsc95xx_suspend()
1557 ret = smsc95xx_enter_suspend1(dev); in smsc95xx_suspend()
1573 netdev_warn(dev->net, "Unable to allocate filter_mask\n"); in smsc95xx_suspend()
1584 netdev_info(dev->net, "enabling broadcast detection\n"); in smsc95xx_suspend()
1597 netdev_info(dev->net, "enabling multicast detection\n"); in smsc95xx_suspend()
1610 netdev_info(dev->net, "enabling ARP detection\n"); in smsc95xx_suspend()
1622 netdev_info(dev->net, "enabling unicast detection\n"); in smsc95xx_suspend()
1629 crc[filter/2] |= smsc_crc(dev->net->dev_addr, ETH_ALEN, filter); in smsc95xx_suspend()
1634 ret = smsc95xx_write_reg(dev, WUFF, filter_mask[i]); in smsc95xx_suspend()
1643 ret = smsc95xx_write_reg(dev, WUFF, command[i]); in smsc95xx_suspend()
1649 ret = smsc95xx_write_reg(dev, WUFF, offset[i]); in smsc95xx_suspend()
1655 ret = smsc95xx_write_reg(dev, WUFF, crc[i]); in smsc95xx_suspend()
1661 ret = smsc95xx_read_reg(dev, WUCSR, &val); in smsc95xx_suspend()
1667 ret = smsc95xx_write_reg(dev, WUCSR, val); in smsc95xx_suspend()
1674 ret = smsc95xx_read_reg(dev, WUCSR, &val); in smsc95xx_suspend()
1680 ret = smsc95xx_write_reg(dev, WUCSR, val); in smsc95xx_suspend()
1686 ret = smsc95xx_read_reg(dev, WUCSR, &val); in smsc95xx_suspend()
1691 netdev_info(dev->net, "enabling pattern match wakeup\n"); in smsc95xx_suspend()
1694 netdev_info(dev->net, "disabling pattern match wakeup\n"); in smsc95xx_suspend()
1699 netdev_info(dev->net, "enabling magic packet wakeup\n"); in smsc95xx_suspend()
1702 netdev_info(dev->net, "disabling magic packet wakeup\n"); in smsc95xx_suspend()
1706 ret = smsc95xx_write_reg(dev, WUCSR, val); in smsc95xx_suspend()
1711 ret = smsc95xx_read_reg(dev, PM_CTRL, &val); in smsc95xx_suspend()
1721 ret = smsc95xx_write_reg(dev, PM_CTRL, val); in smsc95xx_suspend()
1726 smsc95xx_start_rx_path(dev); in smsc95xx_suspend()
1729 netdev_info(dev->net, "entering SUSPEND0 mode\n"); in smsc95xx_suspend()
1730 ret = smsc95xx_enter_suspend0(dev); in smsc95xx_suspend()
1746 struct usbnet *dev = usb_get_intfdata(intf); in smsc95xx_resume() local
1752 BUG_ON(!dev); in smsc95xx_resume()
1753 pdata = dev->driver_priv; in smsc95xx_resume()
1756 netdev_dbg(dev->net, "resume suspend_flags=0x%02x\n", suspend_flags); in smsc95xx_resume()
1765 ret = smsc95xx_read_reg(dev, WUCSR, &val); in smsc95xx_resume()
1771 ret = smsc95xx_write_reg(dev, WUCSR, val); in smsc95xx_resume()
1776 ret = smsc95xx_read_reg(dev, PM_CTRL, &val); in smsc95xx_resume()
1783 ret = smsc95xx_write_reg(dev, PM_CTRL, val); in smsc95xx_resume()
1792 netdev_warn(dev->net, "usbnet_resume error\n"); in smsc95xx_resume()
1801 struct usbnet *dev = usb_get_intfdata(intf); in smsc95xx_reset_resume() local
1802 struct smsc95xx_priv *pdata = dev->driver_priv; in smsc95xx_reset_resume()
1806 ret = smsc95xx_reset(dev); in smsc95xx_reset_resume()
1823 static int smsc95xx_rx_fixup(struct usbnet *dev, struct sk_buff *skb) in smsc95xx_rx_fixup() argument
1826 if (skb->len < dev->net->hard_header_len) in smsc95xx_rx_fixup()
1844 netif_dbg(dev, rx_err, dev->net, in smsc95xx_rx_fixup()
1850 netif_dbg(dev, rx_err, dev->net, in smsc95xx_rx_fixup()
1852 dev->net->stats.rx_errors++; in smsc95xx_rx_fixup()
1853 dev->net->stats.rx_dropped++; in smsc95xx_rx_fixup()
1856 dev->net->stats.rx_crc_errors++; in smsc95xx_rx_fixup()
1859 dev->net->stats.rx_frame_errors++; in smsc95xx_rx_fixup()
1863 dev->net->stats.rx_length_errors++; in smsc95xx_rx_fixup()
1868 netif_dbg(dev, rx_err, dev->net, in smsc95xx_rx_fixup()
1875 if (dev->net->features & NETIF_F_RXCSUM) in smsc95xx_rx_fixup()
1882 ax_skb = netdev_alloc_skb_ip_align(dev->net, size); in smsc95xx_rx_fixup()
1884 netdev_warn(dev->net, "Error allocating skb\n"); in smsc95xx_rx_fixup()
1891 if (dev->net->features & NETIF_F_RXCSUM) in smsc95xx_rx_fixup()
1895 usbnet_skb_return(dev, ax_skb); in smsc95xx_rx_fixup()
1932 static struct sk_buff *smsc95xx_tx_fixup(struct usbnet *dev, in smsc95xx_tx_fixup() argument
1984 static int smsc95xx_manage_power(struct usbnet *dev, int on) in smsc95xx_manage_power() argument
1986 struct smsc95xx_priv *pdata = dev->driver_priv; in smsc95xx_manage_power()
1988 dev->intf->needs_remote_wakeup = on; in smsc95xx_manage_power()
1994 netdev_info(dev->net, "hardware isn't capable of remote wakeup\n"); in smsc95xx_manage_power()
1997 usb_autopm_get_interface_no_resume(dev->intf); in smsc95xx_manage_power()
1999 usb_autopm_put_interface(dev->intf); in smsc95xx_manage_power()