Lines Matching refs:dev
192 struct lan78xx_net *dev; member
216 struct lan78xx_net *dev; member
223 struct lan78xx_net *dev; member
290 static int lan78xx_read_reg(struct lan78xx_net *dev, u32 index, u32 *data) in lan78xx_read_reg() argument
298 ret = usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0), in lan78xx_read_reg()
306 netdev_warn(dev->net, in lan78xx_read_reg()
316 static int lan78xx_write_reg(struct lan78xx_net *dev, u32 index, u32 data) in lan78xx_write_reg() argument
327 ret = usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, 0), in lan78xx_write_reg()
332 netdev_warn(dev->net, in lan78xx_write_reg()
342 static int lan78xx_read_stats(struct lan78xx_net *dev, in lan78xx_read_stats() argument
355 ret = usb_control_msg(dev->udev, in lan78xx_read_stats()
356 usb_rcvctrlpipe(dev->udev, 0), in lan78xx_read_stats()
372 netdev_warn(dev->net, in lan78xx_read_stats()
382 static int lan78xx_phy_wait_not_busy(struct lan78xx_net *dev) in lan78xx_phy_wait_not_busy() argument
389 ret = lan78xx_read_reg(dev, MII_ACC, &val); in lan78xx_phy_wait_not_busy()
415 static int lan78xx_wait_eeprom(struct lan78xx_net *dev) in lan78xx_wait_eeprom() argument
422 ret = lan78xx_read_reg(dev, E2P_CMD, &val); in lan78xx_wait_eeprom()
433 netdev_warn(dev->net, "EEPROM read operation timeout"); in lan78xx_wait_eeprom()
440 static int lan78xx_eeprom_confirm_not_busy(struct lan78xx_net *dev) in lan78xx_eeprom_confirm_not_busy() argument
447 ret = lan78xx_read_reg(dev, E2P_CMD, &val); in lan78xx_eeprom_confirm_not_busy()
457 netdev_warn(dev->net, "EEPROM is busy"); in lan78xx_eeprom_confirm_not_busy()
461 static int lan78xx_read_raw_eeprom(struct lan78xx_net *dev, u32 offset, in lan78xx_read_raw_eeprom() argument
467 ret = lan78xx_eeprom_confirm_not_busy(dev); in lan78xx_read_raw_eeprom()
474 ret = lan78xx_write_reg(dev, E2P_CMD, val); in lan78xx_read_raw_eeprom()
478 ret = lan78xx_wait_eeprom(dev); in lan78xx_read_raw_eeprom()
482 ret = lan78xx_read_reg(dev, E2P_DATA, &val); in lan78xx_read_raw_eeprom()
493 static int lan78xx_read_eeprom(struct lan78xx_net *dev, u32 offset, in lan78xx_read_eeprom() argument
499 ret = lan78xx_read_raw_eeprom(dev, 0, 1, &sig); in lan78xx_read_eeprom()
501 ret = lan78xx_read_raw_eeprom(dev, offset, length, data); in lan78xx_read_eeprom()
508 static int lan78xx_write_raw_eeprom(struct lan78xx_net *dev, u32 offset, in lan78xx_write_raw_eeprom() argument
514 ret = lan78xx_eeprom_confirm_not_busy(dev); in lan78xx_write_raw_eeprom()
520 ret = lan78xx_write_reg(dev, E2P_CMD, val); in lan78xx_write_raw_eeprom()
524 ret = lan78xx_wait_eeprom(dev); in lan78xx_write_raw_eeprom()
531 ret = lan78xx_write_reg(dev, E2P_DATA, val); in lan78xx_write_raw_eeprom()
538 ret = lan78xx_write_reg(dev, E2P_CMD, val); in lan78xx_write_raw_eeprom()
542 ret = lan78xx_wait_eeprom(dev); in lan78xx_write_raw_eeprom()
552 static int lan78xx_read_raw_otp(struct lan78xx_net *dev, u32 offset, in lan78xx_read_raw_otp() argument
560 ret = lan78xx_read_reg(dev, OTP_PWR_DN, &buf); in lan78xx_read_raw_otp()
564 ret = lan78xx_write_reg(dev, OTP_PWR_DN, 0); in lan78xx_read_raw_otp()
569 ret = lan78xx_read_reg(dev, OTP_PWR_DN, &buf); in lan78xx_read_raw_otp()
571 netdev_warn(dev->net, in lan78xx_read_raw_otp()
579 ret = lan78xx_write_reg(dev, OTP_ADDR1, in lan78xx_read_raw_otp()
581 ret = lan78xx_write_reg(dev, OTP_ADDR2, in lan78xx_read_raw_otp()
584 ret = lan78xx_write_reg(dev, OTP_FUNC_CMD, OTP_FUNC_CMD_READ_); in lan78xx_read_raw_otp()
585 ret = lan78xx_write_reg(dev, OTP_CMD_GO, OTP_CMD_GO_GO_); in lan78xx_read_raw_otp()
590 ret = lan78xx_read_reg(dev, OTP_STATUS, &buf); in lan78xx_read_raw_otp()
592 netdev_warn(dev->net, in lan78xx_read_raw_otp()
598 ret = lan78xx_read_reg(dev, OTP_RD_DATA, &buf); in lan78xx_read_raw_otp()
606 static int lan78xx_read_otp(struct lan78xx_net *dev, u32 offset, in lan78xx_read_otp() argument
612 ret = lan78xx_read_raw_otp(dev, 0, 1, &sig); in lan78xx_read_otp()
621 ret = lan78xx_read_raw_otp(dev, offset, length, data); in lan78xx_read_otp()
627 static int lan78xx_dataport_wait_not_busy(struct lan78xx_net *dev) in lan78xx_dataport_wait_not_busy() argument
634 ret = lan78xx_read_reg(dev, DP_SEL, &dp_sel); in lan78xx_dataport_wait_not_busy()
644 netdev_warn(dev->net, "lan78xx_dataport_wait_not_busy timed out"); in lan78xx_dataport_wait_not_busy()
649 static int lan78xx_dataport_write(struct lan78xx_net *dev, u32 ram_select, in lan78xx_dataport_write() argument
652 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_dataport_write()
656 if (usb_autopm_get_interface(dev->intf) < 0) in lan78xx_dataport_write()
661 ret = lan78xx_dataport_wait_not_busy(dev); in lan78xx_dataport_write()
665 ret = lan78xx_read_reg(dev, DP_SEL, &dp_sel); in lan78xx_dataport_write()
669 ret = lan78xx_write_reg(dev, DP_SEL, dp_sel); in lan78xx_dataport_write()
672 ret = lan78xx_write_reg(dev, DP_ADDR, addr + i); in lan78xx_dataport_write()
674 ret = lan78xx_write_reg(dev, DP_DATA, buf[i]); in lan78xx_dataport_write()
676 ret = lan78xx_write_reg(dev, DP_CMD, DP_CMD_WRITE_); in lan78xx_dataport_write()
678 ret = lan78xx_dataport_wait_not_busy(dev); in lan78xx_dataport_write()
685 usb_autopm_put_interface(dev->intf); in lan78xx_dataport_write()
718 struct lan78xx_net *dev = pdata->dev; in lan78xx_deferred_multicast_write() local
722 netif_dbg(dev, drv, dev->net, "deferred multicast write 0x%08x\n", in lan78xx_deferred_multicast_write()
725 lan78xx_dataport_write(dev, DP_SEL_RSEL_VLAN_DA_, DP_SEL_VHF_VLAN_LEN, in lan78xx_deferred_multicast_write()
729 ret = lan78xx_write_reg(dev, MAF_HI(i), 0); in lan78xx_deferred_multicast_write()
730 ret = lan78xx_write_reg(dev, MAF_LO(i), in lan78xx_deferred_multicast_write()
732 ret = lan78xx_write_reg(dev, MAF_HI(i), in lan78xx_deferred_multicast_write()
736 ret = lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); in lan78xx_deferred_multicast_write()
741 struct lan78xx_net *dev = netdev_priv(netdev); in lan78xx_set_multicast() local
742 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_set_multicast()
761 if (dev->net->flags & IFF_PROMISC) { in lan78xx_set_multicast()
762 netif_dbg(dev, drv, dev->net, "promiscuous mode enabled"); in lan78xx_set_multicast()
765 if (dev->net->flags & IFF_ALLMULTI) { in lan78xx_set_multicast()
766 netif_dbg(dev, drv, dev->net, in lan78xx_set_multicast()
772 if (netdev_mc_count(dev->net)) { in lan78xx_set_multicast()
776 netif_dbg(dev, drv, dev->net, "receive multicast hash filter"); in lan78xx_set_multicast()
802 static int lan78xx_update_flowcontrol(struct lan78xx_net *dev, u8 duplex, in lan78xx_update_flowcontrol() argument
816 if (dev->udev->speed == USB_SPEED_SUPER) in lan78xx_update_flowcontrol()
818 else if (dev->udev->speed == USB_SPEED_HIGH) in lan78xx_update_flowcontrol()
821 netif_dbg(dev, link, dev->net, "rx pause %s, tx pause %s", in lan78xx_update_flowcontrol()
825 ret = lan78xx_write_reg(dev, FCT_FLOW, fct_flow); in lan78xx_update_flowcontrol()
828 ret = lan78xx_write_reg(dev, FLOW, flow); in lan78xx_update_flowcontrol()
833 static int lan78xx_link_reset(struct lan78xx_net *dev) in lan78xx_link_reset() argument
835 struct phy_device *phydev = dev->net->phydev; in lan78xx_link_reset()
846 ret = lan78xx_write_reg(dev, INT_STS, INT_STS_PHY_INT_); in lan78xx_link_reset()
852 if (!phydev->link && dev->link_on) { in lan78xx_link_reset()
853 dev->link_on = false; in lan78xx_link_reset()
854 netif_carrier_off(dev->net); in lan78xx_link_reset()
857 ret = lan78xx_read_reg(dev, MAC_CR, &buf); in lan78xx_link_reset()
861 ret = lan78xx_write_reg(dev, MAC_CR, buf); in lan78xx_link_reset()
864 } else if (phydev->link && !dev->link_on) { in lan78xx_link_reset()
865 dev->link_on = true; in lan78xx_link_reset()
871 if (dev->udev->speed == USB_SPEED_SUPER) { in lan78xx_link_reset()
874 ret = lan78xx_read_reg(dev, USB_CFG1, &buf); in lan78xx_link_reset()
876 ret = lan78xx_write_reg(dev, USB_CFG1, buf); in lan78xx_link_reset()
878 ret = lan78xx_read_reg(dev, USB_CFG1, &buf); in lan78xx_link_reset()
880 ret = lan78xx_write_reg(dev, USB_CFG1, buf); in lan78xx_link_reset()
883 ret = lan78xx_read_reg(dev, USB_CFG1, &buf); in lan78xx_link_reset()
886 ret = lan78xx_write_reg(dev, USB_CFG1, buf); in lan78xx_link_reset()
898 netif_dbg(dev, link, dev->net, in lan78xx_link_reset()
902 ret = lan78xx_update_flowcontrol(dev, ecmd.duplex, ladv, radv); in lan78xx_link_reset()
903 netif_carrier_on(dev->net); in lan78xx_link_reset()
914 void lan78xx_defer_kevent(struct lan78xx_net *dev, int work) in lan78xx_defer_kevent() argument
916 set_bit(work, &dev->flags); in lan78xx_defer_kevent()
917 if (!schedule_delayed_work(&dev->wq, 0)) in lan78xx_defer_kevent()
918 netdev_err(dev->net, "kevent %d may have been dropped\n", work); in lan78xx_defer_kevent()
921 static void lan78xx_status(struct lan78xx_net *dev, struct urb *urb) in lan78xx_status() argument
926 netdev_warn(dev->net, in lan78xx_status()
935 netif_dbg(dev, link, dev->net, "PHY INTR: 0x%08x\n", intdata); in lan78xx_status()
936 lan78xx_defer_kevent(dev, EVENT_LINK_RESET); in lan78xx_status()
938 netdev_warn(dev->net, in lan78xx_status()
950 struct lan78xx_net *dev = netdev_priv(netdev); in lan78xx_ethtool_get_eeprom() local
954 return lan78xx_read_raw_eeprom(dev, ee->offset, ee->len, data); in lan78xx_ethtool_get_eeprom()
960 struct lan78xx_net *dev = netdev_priv(netdev); in lan78xx_ethtool_set_eeprom() local
967 return lan78xx_write_raw_eeprom(dev, ee->offset, ee->len, data); in lan78xx_ethtool_set_eeprom()
972 return lan78xx_write_raw_eeprom(dev, ee->offset, ee->len, data); in lan78xx_ethtool_set_eeprom()
995 struct lan78xx_net *dev = netdev_priv(netdev); in lan78xx_get_stats() local
1000 if (usb_autopm_get_interface(dev->intf) < 0) in lan78xx_get_stats()
1003 if (lan78xx_read_stats(dev, &lan78xx_stat) > 0) { in lan78xx_get_stats()
1009 usb_autopm_put_interface(dev->intf); in lan78xx_get_stats()
1015 struct lan78xx_net *dev = netdev_priv(netdev); in lan78xx_get_wol() local
1018 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_get_wol()
1020 if (usb_autopm_get_interface(dev->intf) < 0) in lan78xx_get_wol()
1023 ret = lan78xx_read_reg(dev, USB_CFG0, &buf); in lan78xx_get_wol()
1037 usb_autopm_put_interface(dev->intf); in lan78xx_get_wol()
1043 struct lan78xx_net *dev = netdev_priv(netdev); in lan78xx_set_wol() local
1044 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_set_wol()
1047 ret = usb_autopm_get_interface(dev->intf); in lan78xx_set_wol()
1065 device_set_wakeup_enable(&dev->udev->dev, (bool)wol->wolopts); in lan78xx_set_wol()
1069 usb_autopm_put_interface(dev->intf); in lan78xx_set_wol()
1076 struct lan78xx_net *dev = netdev_priv(net); in lan78xx_get_eee() local
1081 ret = usb_autopm_get_interface(dev->intf); in lan78xx_get_eee()
1089 ret = lan78xx_read_reg(dev, MAC_CR, &buf); in lan78xx_get_eee()
1096 ret = lan78xx_read_reg(dev, EEE_TX_LPI_REQ_DLY, &buf); in lan78xx_get_eee()
1107 usb_autopm_put_interface(dev->intf); in lan78xx_get_eee()
1114 struct lan78xx_net *dev = netdev_priv(net); in lan78xx_set_eee() local
1118 ret = usb_autopm_get_interface(dev->intf); in lan78xx_set_eee()
1123 ret = lan78xx_read_reg(dev, MAC_CR, &buf); in lan78xx_set_eee()
1125 ret = lan78xx_write_reg(dev, MAC_CR, buf); in lan78xx_set_eee()
1130 ret = lan78xx_write_reg(dev, EEE_TX_LPI_REQ_DLY, buf); in lan78xx_set_eee()
1132 ret = lan78xx_read_reg(dev, MAC_CR, &buf); in lan78xx_set_eee()
1134 ret = lan78xx_write_reg(dev, MAC_CR, buf); in lan78xx_set_eee()
1137 usb_autopm_put_interface(dev->intf); in lan78xx_set_eee()
1157 struct lan78xx_net *dev = netdev_priv(net); in lan78xx_get_drvinfo() local
1161 usb_make_path(dev->udev, info->bus_info, sizeof(info->bus_info)); in lan78xx_get_drvinfo()
1166 struct lan78xx_net *dev = netdev_priv(net); in lan78xx_get_msglevel() local
1168 return dev->msg_enable; in lan78xx_get_msglevel()
1173 struct lan78xx_net *dev = netdev_priv(net); in lan78xx_set_msglevel() local
1175 dev->msg_enable = level; in lan78xx_set_msglevel()
1192 struct lan78xx_net *dev = netdev_priv(net); in lan78xx_set_mdix_status() local
1224 dev->mdix_ctrl = mdix_ctrl; in lan78xx_set_mdix_status()
1229 struct lan78xx_net *dev = netdev_priv(net); in lan78xx_get_settings() local
1234 ret = usb_autopm_get_interface(dev->intf); in lan78xx_get_settings()
1254 usb_autopm_put_interface(dev->intf); in lan78xx_get_settings()
1261 struct lan78xx_net *dev = netdev_priv(net); in lan78xx_set_settings() local
1266 ret = usb_autopm_get_interface(dev->intf); in lan78xx_set_settings()
1270 if (dev->mdix_ctrl != cmd->eth_tp_mdix_ctrl) { in lan78xx_set_settings()
1285 usb_autopm_put_interface(dev->intf); in lan78xx_set_settings()
1318 static void lan78xx_init_mac_address(struct lan78xx_net *dev) in lan78xx_init_mac_address() argument
1324 ret = lan78xx_read_reg(dev, RX_ADDRL, &addr_lo); in lan78xx_init_mac_address()
1325 ret = lan78xx_read_reg(dev, RX_ADDRH, &addr_hi); in lan78xx_init_mac_address()
1336 if ((lan78xx_read_eeprom(dev, EEPROM_MAC_OFFSET, ETH_ALEN, in lan78xx_init_mac_address()
1338 (lan78xx_read_otp(dev, EEPROM_MAC_OFFSET, ETH_ALEN, in lan78xx_init_mac_address()
1342 netif_dbg(dev, ifup, dev->net, in lan78xx_init_mac_address()
1347 netif_dbg(dev, ifup, dev->net, in lan78xx_init_mac_address()
1355 ret = lan78xx_write_reg(dev, RX_ADDRL, addr_lo); in lan78xx_init_mac_address()
1356 ret = lan78xx_write_reg(dev, RX_ADDRH, addr_hi); in lan78xx_init_mac_address()
1360 netif_dbg(dev, ifup, dev->net, in lan78xx_init_mac_address()
1365 ret = lan78xx_write_reg(dev, MAF_LO(0), addr_lo); in lan78xx_init_mac_address()
1366 ret = lan78xx_write_reg(dev, MAF_HI(0), addr_hi | MAF_HI_VALID_); in lan78xx_init_mac_address()
1368 ether_addr_copy(dev->net->dev_addr, addr); in lan78xx_init_mac_address()
1374 struct lan78xx_net *dev = bus->priv; in lan78xx_mdiobus_read() local
1378 ret = usb_autopm_get_interface(dev->intf); in lan78xx_mdiobus_read()
1382 mutex_lock(&dev->phy_mutex); in lan78xx_mdiobus_read()
1385 ret = lan78xx_phy_wait_not_busy(dev); in lan78xx_mdiobus_read()
1391 ret = lan78xx_write_reg(dev, MII_ACC, addr); in lan78xx_mdiobus_read()
1393 ret = lan78xx_phy_wait_not_busy(dev); in lan78xx_mdiobus_read()
1397 ret = lan78xx_read_reg(dev, MII_DATA, &val); in lan78xx_mdiobus_read()
1402 mutex_unlock(&dev->phy_mutex); in lan78xx_mdiobus_read()
1403 usb_autopm_put_interface(dev->intf); in lan78xx_mdiobus_read()
1410 struct lan78xx_net *dev = bus->priv; in lan78xx_mdiobus_write() local
1414 ret = usb_autopm_get_interface(dev->intf); in lan78xx_mdiobus_write()
1418 mutex_lock(&dev->phy_mutex); in lan78xx_mdiobus_write()
1421 ret = lan78xx_phy_wait_not_busy(dev); in lan78xx_mdiobus_write()
1426 ret = lan78xx_write_reg(dev, MII_DATA, val); in lan78xx_mdiobus_write()
1430 ret = lan78xx_write_reg(dev, MII_ACC, addr); in lan78xx_mdiobus_write()
1432 ret = lan78xx_phy_wait_not_busy(dev); in lan78xx_mdiobus_write()
1437 mutex_unlock(&dev->phy_mutex); in lan78xx_mdiobus_write()
1438 usb_autopm_put_interface(dev->intf); in lan78xx_mdiobus_write()
1442 static int lan78xx_mdio_init(struct lan78xx_net *dev) in lan78xx_mdio_init() argument
1447 dev->mdiobus = mdiobus_alloc(); in lan78xx_mdio_init()
1448 if (!dev->mdiobus) { in lan78xx_mdio_init()
1449 netdev_err(dev->net, "can't allocate MDIO bus\n"); in lan78xx_mdio_init()
1453 dev->mdiobus->priv = (void *)dev; in lan78xx_mdio_init()
1454 dev->mdiobus->read = lan78xx_mdiobus_read; in lan78xx_mdio_init()
1455 dev->mdiobus->write = lan78xx_mdiobus_write; in lan78xx_mdio_init()
1456 dev->mdiobus->name = "lan78xx-mdiobus"; in lan78xx_mdio_init()
1458 snprintf(dev->mdiobus->id, MII_BUS_ID_SIZE, "usb-%03d:%03d", in lan78xx_mdio_init()
1459 dev->udev->bus->busnum, dev->udev->devnum); in lan78xx_mdio_init()
1461 dev->mdiobus->irq = kzalloc(sizeof(int) * PHY_MAX_ADDR, GFP_KERNEL); in lan78xx_mdio_init()
1462 if (!dev->mdiobus->irq) { in lan78xx_mdio_init()
1469 dev->mdiobus->irq[i] = PHY_IGNORE_INTERRUPT; in lan78xx_mdio_init()
1471 switch (dev->devid & ID_REV_CHIP_ID_MASK_) { in lan78xx_mdio_init()
1475 dev->mdiobus->phy_mask = ~(1 << 1); in lan78xx_mdio_init()
1479 ret = mdiobus_register(dev->mdiobus); in lan78xx_mdio_init()
1481 netdev_err(dev->net, "can't register MDIO bus\n"); in lan78xx_mdio_init()
1485 netdev_dbg(dev->net, "registered mdiobus bus %s\n", dev->mdiobus->id); in lan78xx_mdio_init()
1488 kfree(dev->mdiobus->irq); in lan78xx_mdio_init()
1490 mdiobus_free(dev->mdiobus); in lan78xx_mdio_init()
1494 static void lan78xx_remove_mdio(struct lan78xx_net *dev) in lan78xx_remove_mdio() argument
1496 mdiobus_unregister(dev->mdiobus); in lan78xx_remove_mdio()
1497 kfree(dev->mdiobus->irq); in lan78xx_remove_mdio()
1498 mdiobus_free(dev->mdiobus); in lan78xx_remove_mdio()
1506 static int lan78xx_phy_init(struct lan78xx_net *dev) in lan78xx_phy_init() argument
1509 struct phy_device *phydev = dev->net->phydev; in lan78xx_phy_init()
1511 phydev = phy_find_first(dev->mdiobus); in lan78xx_phy_init()
1513 netdev_err(dev->net, "no PHY found\n"); in lan78xx_phy_init()
1517 ret = phy_connect_direct(dev->net, phydev, in lan78xx_phy_init()
1521 netdev_err(dev->net, "can't attach PHY to %s\n", in lan78xx_phy_init()
1522 dev->mdiobus->id); in lan78xx_phy_init()
1527 lan78xx_set_mdix_status(dev->net, ETH_TP_MDI_AUTO); in lan78xx_phy_init()
1549 netif_dbg(dev, ifup, dev->net, "phy initialised successfully"); in lan78xx_phy_init()
1554 static int lan78xx_set_rx_max_frame_length(struct lan78xx_net *dev, int size) in lan78xx_set_rx_max_frame_length() argument
1560 ret = lan78xx_read_reg(dev, MAC_RX, &buf); in lan78xx_set_rx_max_frame_length()
1566 ret = lan78xx_write_reg(dev, MAC_RX, buf); in lan78xx_set_rx_max_frame_length()
1573 ret = lan78xx_write_reg(dev, MAC_RX, buf); in lan78xx_set_rx_max_frame_length()
1577 ret = lan78xx_write_reg(dev, MAC_RX, buf); in lan78xx_set_rx_max_frame_length()
1583 static int unlink_urbs(struct lan78xx_net *dev, struct sk_buff_head *q) in unlink_urbs() argument
1618 netdev_dbg(dev->net, "unlink urb err, %d\n", ret); in unlink_urbs()
1630 struct lan78xx_net *dev = netdev_priv(netdev); in lan78xx_change_mtu() local
1632 int old_hard_mtu = dev->hard_mtu; in lan78xx_change_mtu()
1633 int old_rx_urb_size = dev->rx_urb_size; in lan78xx_change_mtu()
1642 if ((ll_mtu % dev->maxpacket) == 0) in lan78xx_change_mtu()
1645 ret = lan78xx_set_rx_max_frame_length(dev, new_mtu + ETH_HLEN); in lan78xx_change_mtu()
1649 dev->hard_mtu = netdev->mtu + netdev->hard_header_len; in lan78xx_change_mtu()
1650 if (dev->rx_urb_size == old_hard_mtu) { in lan78xx_change_mtu()
1651 dev->rx_urb_size = dev->hard_mtu; in lan78xx_change_mtu()
1652 if (dev->rx_urb_size > old_rx_urb_size) { in lan78xx_change_mtu()
1653 if (netif_running(dev->net)) { in lan78xx_change_mtu()
1654 unlink_urbs(dev, &dev->rxq); in lan78xx_change_mtu()
1655 tasklet_schedule(&dev->bh); in lan78xx_change_mtu()
1665 struct lan78xx_net *dev = netdev_priv(netdev); in lan78xx_set_mac_addr() local
1685 ret = lan78xx_write_reg(dev, RX_ADDRL, addr_lo); in lan78xx_set_mac_addr()
1686 ret = lan78xx_write_reg(dev, RX_ADDRH, addr_hi); in lan78xx_set_mac_addr()
1695 struct lan78xx_net *dev = netdev_priv(netdev); in lan78xx_set_features() local
1696 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_set_features()
1717 ret = lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); in lan78xx_set_features()
1726 struct lan78xx_net *dev = pdata->dev; in lan78xx_deferred_vlan_write() local
1728 lan78xx_dataport_write(dev, DP_SEL_RSEL_VLAN_DA_, 0, in lan78xx_deferred_vlan_write()
1735 struct lan78xx_net *dev = netdev_priv(netdev); in lan78xx_vlan_rx_add_vid() local
1736 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_vlan_rx_add_vid()
1754 struct lan78xx_net *dev = netdev_priv(netdev); in lan78xx_vlan_rx_kill_vid() local
1755 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_vlan_rx_kill_vid()
1770 static void lan78xx_init_ltm(struct lan78xx_net *dev) in lan78xx_init_ltm() argument
1776 ret = lan78xx_read_reg(dev, USB_CFG1, &buf); in lan78xx_init_ltm()
1780 if (lan78xx_read_eeprom(dev, 0x3F, 2, temp) == 0) { in lan78xx_init_ltm()
1782 ret = lan78xx_read_raw_eeprom(dev, in lan78xx_init_ltm()
1789 } else if (lan78xx_read_otp(dev, 0x3F, 2, temp) == 0) { in lan78xx_init_ltm()
1791 ret = lan78xx_read_raw_otp(dev, in lan78xx_init_ltm()
1801 lan78xx_write_reg(dev, LTM_BELT_IDLE0, regs[0]); in lan78xx_init_ltm()
1802 lan78xx_write_reg(dev, LTM_BELT_IDLE1, regs[1]); in lan78xx_init_ltm()
1803 lan78xx_write_reg(dev, LTM_BELT_ACT0, regs[2]); in lan78xx_init_ltm()
1804 lan78xx_write_reg(dev, LTM_BELT_ACT1, regs[3]); in lan78xx_init_ltm()
1805 lan78xx_write_reg(dev, LTM_INACTIVE0, regs[4]); in lan78xx_init_ltm()
1806 lan78xx_write_reg(dev, LTM_INACTIVE1, regs[5]); in lan78xx_init_ltm()
1809 static int lan78xx_reset(struct lan78xx_net *dev) in lan78xx_reset() argument
1811 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_reset()
1816 ret = lan78xx_read_reg(dev, HW_CFG, &buf); in lan78xx_reset()
1818 ret = lan78xx_write_reg(dev, HW_CFG, buf); in lan78xx_reset()
1823 ret = lan78xx_read_reg(dev, HW_CFG, &buf); in lan78xx_reset()
1825 netdev_warn(dev->net, in lan78xx_reset()
1831 lan78xx_init_mac_address(dev); in lan78xx_reset()
1834 ret = lan78xx_read_reg(dev, ID_REV, &buf); in lan78xx_reset()
1835 dev->devid = buf; in lan78xx_reset()
1838 ret = lan78xx_read_reg(dev, USB_CFG0, &buf); in lan78xx_reset()
1840 ret = lan78xx_write_reg(dev, USB_CFG0, buf); in lan78xx_reset()
1843 lan78xx_init_ltm(dev); in lan78xx_reset()
1845 dev->net->hard_header_len += TX_OVERHEAD; in lan78xx_reset()
1846 dev->hard_mtu = dev->net->mtu + dev->net->hard_header_len; in lan78xx_reset()
1848 if (dev->udev->speed == USB_SPEED_SUPER) { in lan78xx_reset()
1850 dev->rx_urb_size = DEFAULT_BURST_CAP_SIZE; in lan78xx_reset()
1851 dev->rx_qlen = 4; in lan78xx_reset()
1852 dev->tx_qlen = 4; in lan78xx_reset()
1853 } else if (dev->udev->speed == USB_SPEED_HIGH) { in lan78xx_reset()
1855 dev->rx_urb_size = DEFAULT_BURST_CAP_SIZE; in lan78xx_reset()
1856 dev->rx_qlen = RX_MAX_QUEUE_MEMORY / dev->rx_urb_size; in lan78xx_reset()
1857 dev->tx_qlen = RX_MAX_QUEUE_MEMORY / dev->hard_mtu; in lan78xx_reset()
1860 dev->rx_urb_size = DEFAULT_BURST_CAP_SIZE; in lan78xx_reset()
1861 dev->rx_qlen = 4; in lan78xx_reset()
1864 ret = lan78xx_write_reg(dev, BURST_CAP, buf); in lan78xx_reset()
1865 ret = lan78xx_write_reg(dev, BULK_IN_DLY, DEFAULT_BULK_IN_DELAY); in lan78xx_reset()
1867 ret = lan78xx_read_reg(dev, HW_CFG, &buf); in lan78xx_reset()
1869 ret = lan78xx_write_reg(dev, HW_CFG, buf); in lan78xx_reset()
1871 ret = lan78xx_read_reg(dev, USB_CFG0, &buf); in lan78xx_reset()
1873 ret = lan78xx_write_reg(dev, USB_CFG0, buf); in lan78xx_reset()
1877 ret = lan78xx_write_reg(dev, FCT_RX_FIFO_END, buf); in lan78xx_reset()
1880 ret = lan78xx_write_reg(dev, FCT_TX_FIFO_END, buf); in lan78xx_reset()
1882 ret = lan78xx_write_reg(dev, INT_STS, INT_STS_CLEAR_ALL_); in lan78xx_reset()
1883 ret = lan78xx_write_reg(dev, FLOW, 0); in lan78xx_reset()
1884 ret = lan78xx_write_reg(dev, FCT_FLOW, 0); in lan78xx_reset()
1887 ret = lan78xx_read_reg(dev, RFE_CTL, &pdata->rfe_ctl); in lan78xx_reset()
1889 ret = lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); in lan78xx_reset()
1892 lan78xx_set_features(dev->net, dev->net->features); in lan78xx_reset()
1894 lan78xx_set_multicast(dev->net); in lan78xx_reset()
1897 ret = lan78xx_read_reg(dev, PMT_CTL, &buf); in lan78xx_reset()
1899 ret = lan78xx_write_reg(dev, PMT_CTL, buf); in lan78xx_reset()
1904 ret = lan78xx_read_reg(dev, PMT_CTL, &buf); in lan78xx_reset()
1906 netdev_warn(dev->net, "timeout waiting for PHY Reset"); in lan78xx_reset()
1911 ret = lan78xx_read_reg(dev, MAC_CR, &buf); in lan78xx_reset()
1913 ret = lan78xx_write_reg(dev, MAC_CR, buf); in lan78xx_reset()
1916 ret = lan78xx_read_reg(dev, INT_EP_CTL, &buf); in lan78xx_reset()
1918 ret = lan78xx_write_reg(dev, INT_EP_CTL, buf); in lan78xx_reset()
1920 ret = lan78xx_read_reg(dev, MAC_TX, &buf); in lan78xx_reset()
1922 ret = lan78xx_write_reg(dev, MAC_TX, buf); in lan78xx_reset()
1924 ret = lan78xx_read_reg(dev, FCT_TX_CTL, &buf); in lan78xx_reset()
1926 ret = lan78xx_write_reg(dev, FCT_TX_CTL, buf); in lan78xx_reset()
1928 ret = lan78xx_set_rx_max_frame_length(dev, dev->net->mtu + ETH_HLEN); in lan78xx_reset()
1930 ret = lan78xx_read_reg(dev, MAC_RX, &buf); in lan78xx_reset()
1932 ret = lan78xx_write_reg(dev, MAC_RX, buf); in lan78xx_reset()
1934 ret = lan78xx_read_reg(dev, FCT_RX_CTL, &buf); in lan78xx_reset()
1936 ret = lan78xx_write_reg(dev, FCT_RX_CTL, buf); in lan78xx_reset()
1943 struct lan78xx_net *dev = netdev_priv(net); in lan78xx_open() local
1946 ret = usb_autopm_get_interface(dev->intf); in lan78xx_open()
1950 ret = lan78xx_reset(dev); in lan78xx_open()
1954 ret = lan78xx_phy_init(dev); in lan78xx_open()
1959 if (dev->urb_intr) { in lan78xx_open()
1960 ret = usb_submit_urb(dev->urb_intr, GFP_KERNEL); in lan78xx_open()
1962 netif_err(dev, ifup, dev->net, in lan78xx_open()
1968 set_bit(EVENT_DEV_OPEN, &dev->flags); in lan78xx_open()
1972 dev->link_on = false; in lan78xx_open()
1974 lan78xx_defer_kevent(dev, EVENT_LINK_RESET); in lan78xx_open()
1976 usb_autopm_put_interface(dev->intf); in lan78xx_open()
1982 static void lan78xx_terminate_urbs(struct lan78xx_net *dev) in lan78xx_terminate_urbs() argument
1991 dev->wait = &unlink_wakeup; in lan78xx_terminate_urbs()
1992 temp = unlink_urbs(dev, &dev->txq) + unlink_urbs(dev, &dev->rxq); in lan78xx_terminate_urbs()
1995 while (!skb_queue_empty(&dev->rxq) && in lan78xx_terminate_urbs()
1996 !skb_queue_empty(&dev->txq) && in lan78xx_terminate_urbs()
1997 !skb_queue_empty(&dev->done)) { in lan78xx_terminate_urbs()
2000 netif_dbg(dev, ifdown, dev->net, in lan78xx_terminate_urbs()
2004 dev->wait = NULL; in lan78xx_terminate_urbs()
2010 struct lan78xx_net *dev = netdev_priv(net); in lan78xx_stop() local
2016 clear_bit(EVENT_DEV_OPEN, &dev->flags); in lan78xx_stop()
2019 netif_info(dev, ifdown, dev->net, in lan78xx_stop()
2024 lan78xx_terminate_urbs(dev); in lan78xx_stop()
2026 usb_kill_urb(dev->urb_intr); in lan78xx_stop()
2028 skb_queue_purge(&dev->rxq_pause); in lan78xx_stop()
2034 dev->flags = 0; in lan78xx_stop()
2035 cancel_delayed_work_sync(&dev->wq); in lan78xx_stop()
2036 tasklet_kill(&dev->bh); in lan78xx_stop()
2038 usb_autopm_put_interface(dev->intf); in lan78xx_stop()
2048 static struct sk_buff *lan78xx_tx_prep(struct lan78xx_net *dev, in lan78xx_tx_prep() argument
2096 static enum skb_state defer_bh(struct lan78xx_net *dev, struct sk_buff *skb, in defer_bh() argument
2109 spin_lock(&dev->done.lock); in defer_bh()
2111 __skb_queue_tail(&dev->done, skb); in defer_bh()
2112 if (skb_queue_len(&dev->done) == 1) in defer_bh()
2113 tasklet_schedule(&dev->bh); in defer_bh()
2114 spin_unlock_irqrestore(&dev->done.lock, flags); in defer_bh()
2123 struct lan78xx_net *dev = entry->dev; in tx_complete() local
2126 dev->net->stats.tx_packets++; in tx_complete()
2127 dev->net->stats.tx_bytes += entry->length; in tx_complete()
2129 dev->net->stats.tx_errors++; in tx_complete()
2133 lan78xx_defer_kevent(dev, EVENT_TX_HALT); in tx_complete()
2144 netif_stop_queue(dev->net); in tx_complete()
2147 netif_dbg(dev, tx_err, dev->net, in tx_complete()
2153 usb_autopm_put_interface_async(dev->intf); in tx_complete()
2155 defer_bh(dev, skb, &dev->txq, tx_done); in tx_complete()
2169 struct lan78xx_net *dev = netdev_priv(net); in lan78xx_start_xmit() local
2174 skb2 = lan78xx_tx_prep(dev, skb, GFP_ATOMIC); in lan78xx_start_xmit()
2178 skb_queue_tail(&dev->txq_pend, skb2); in lan78xx_start_xmit()
2180 if (skb_queue_len(&dev->txq_pend) > 10) in lan78xx_start_xmit()
2183 netif_dbg(dev, tx_err, dev->net, in lan78xx_start_xmit()
2185 dev->net->stats.tx_errors++; in lan78xx_start_xmit()
2186 dev->net->stats.tx_dropped++; in lan78xx_start_xmit()
2189 tasklet_schedule(&dev->bh); in lan78xx_start_xmit()
2194 int lan78xx_get_endpoints(struct lan78xx_net *dev, struct usb_interface *intf) in lan78xx_get_endpoints() argument
2241 dev->pipe_in = usb_rcvbulkpipe(dev->udev, in lan78xx_get_endpoints()
2244 dev->pipe_out = usb_sndbulkpipe(dev->udev, in lan78xx_get_endpoints()
2247 dev->ep_intr = status; in lan78xx_get_endpoints()
2252 static int lan78xx_bind(struct lan78xx_net *dev, struct usb_interface *intf) in lan78xx_bind() argument
2258 ret = lan78xx_get_endpoints(dev, intf); in lan78xx_bind()
2260 dev->data[0] = (unsigned long)kzalloc(sizeof(*pdata), GFP_KERNEL); in lan78xx_bind()
2262 pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_bind()
2264 netdev_warn(dev->net, "Unable to allocate lan78xx_priv"); in lan78xx_bind()
2268 pdata->dev = dev; in lan78xx_bind()
2280 dev->net->features = 0; in lan78xx_bind()
2283 dev->net->features |= NETIF_F_HW_CSUM; in lan78xx_bind()
2286 dev->net->features |= NETIF_F_RXCSUM; in lan78xx_bind()
2289 dev->net->features |= NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_SG; in lan78xx_bind()
2291 dev->net->hw_features = dev->net->features; in lan78xx_bind()
2294 ret = lan78xx_reset(dev); in lan78xx_bind()
2296 lan78xx_mdio_init(dev); in lan78xx_bind()
2298 dev->net->flags |= IFF_MULTICAST; in lan78xx_bind()
2305 static void lan78xx_unbind(struct lan78xx_net *dev, struct usb_interface *intf) in lan78xx_unbind() argument
2307 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_unbind()
2309 lan78xx_remove_mdio(dev); in lan78xx_unbind()
2312 netif_dbg(dev, ifdown, dev->net, "free pdata"); in lan78xx_unbind()
2315 dev->data[0] = 0; in lan78xx_unbind()
2319 static void lan78xx_rx_csum_offload(struct lan78xx_net *dev, in lan78xx_rx_csum_offload() argument
2323 if (!(dev->net->features & NETIF_F_RXCSUM) || in lan78xx_rx_csum_offload()
2332 void lan78xx_skb_return(struct lan78xx_net *dev, struct sk_buff *skb) in lan78xx_skb_return() argument
2336 if (test_bit(EVENT_RX_PAUSED, &dev->flags)) { in lan78xx_skb_return()
2337 skb_queue_tail(&dev->rxq_pause, skb); in lan78xx_skb_return()
2341 skb->protocol = eth_type_trans(skb, dev->net); in lan78xx_skb_return()
2342 dev->net->stats.rx_packets++; in lan78xx_skb_return()
2343 dev->net->stats.rx_bytes += skb->len; in lan78xx_skb_return()
2345 netif_dbg(dev, rx_status, dev->net, "< rx, len %zu, type 0x%x\n", in lan78xx_skb_return()
2354 netif_dbg(dev, rx_err, dev->net, in lan78xx_skb_return()
2358 static int lan78xx_rx(struct lan78xx_net *dev, struct sk_buff *skb) in lan78xx_rx() argument
2360 if (skb->len < dev->net->hard_header_len) in lan78xx_rx()
2388 netif_dbg(dev, rx_err, dev->net, in lan78xx_rx()
2393 lan78xx_rx_csum_offload(dev, skb, in lan78xx_rx()
2404 netdev_warn(dev->net, "Error allocating skb"); in lan78xx_rx()
2412 lan78xx_rx_csum_offload(dev, skb2, rx_cmd_a, rx_cmd_b); in lan78xx_rx()
2417 lan78xx_skb_return(dev, skb2); in lan78xx_rx()
2430 static inline void rx_process(struct lan78xx_net *dev, struct sk_buff *skb) in rx_process() argument
2432 if (!lan78xx_rx(dev, skb)) { in rx_process()
2433 dev->net->stats.rx_errors++; in rx_process()
2438 lan78xx_skb_return(dev, skb); in rx_process()
2442 netif_dbg(dev, rx_err, dev->net, "drop\n"); in rx_process()
2443 dev->net->stats.rx_errors++; in rx_process()
2445 skb_queue_tail(&dev->done, skb); in rx_process()
2450 static int rx_submit(struct lan78xx_net *dev, struct urb *urb, gfp_t flags) in rx_submit() argument
2455 size_t size = dev->rx_urb_size; in rx_submit()
2458 skb = netdev_alloc_skb_ip_align(dev->net, size); in rx_submit()
2466 entry->dev = dev; in rx_submit()
2469 usb_fill_bulk_urb(urb, dev->udev, dev->pipe_in, in rx_submit()
2472 spin_lock_irqsave(&dev->rxq.lock, lockflags); in rx_submit()
2474 if (netif_device_present(dev->net) && in rx_submit()
2475 netif_running(dev->net) && in rx_submit()
2476 !test_bit(EVENT_RX_HALT, &dev->flags) && in rx_submit()
2477 !test_bit(EVENT_DEV_ASLEEP, &dev->flags)) { in rx_submit()
2481 lan78xx_queue_skb(&dev->rxq, skb, rx_start); in rx_submit()
2484 lan78xx_defer_kevent(dev, EVENT_RX_HALT); in rx_submit()
2487 netif_dbg(dev, ifdown, dev->net, "device gone\n"); in rx_submit()
2488 netif_device_detach(dev->net); in rx_submit()
2494 netif_dbg(dev, rx_err, dev->net, in rx_submit()
2496 tasklet_schedule(&dev->bh); in rx_submit()
2499 netif_dbg(dev, ifdown, dev->net, "rx: stopped\n"); in rx_submit()
2502 spin_unlock_irqrestore(&dev->rxq.lock, lockflags); in rx_submit()
2514 struct lan78xx_net *dev = entry->dev; in rx_complete() local
2524 if (skb->len < dev->net->hard_header_len) { in rx_complete()
2526 dev->net->stats.rx_errors++; in rx_complete()
2527 dev->net->stats.rx_length_errors++; in rx_complete()
2528 netif_dbg(dev, rx_err, dev->net, in rx_complete()
2531 usb_mark_last_busy(dev->udev); in rx_complete()
2534 dev->net->stats.rx_errors++; in rx_complete()
2535 lan78xx_defer_kevent(dev, EVENT_RX_HALT); in rx_complete()
2539 netif_dbg(dev, ifdown, dev->net, in rx_complete()
2548 dev->net->stats.rx_errors++; in rx_complete()
2556 dev->net->stats.rx_over_errors++; in rx_complete()
2561 dev->net->stats.rx_errors++; in rx_complete()
2562 netif_dbg(dev, rx_err, dev->net, "rx status %d\n", urb_status); in rx_complete()
2566 state = defer_bh(dev, skb, &dev->rxq, state); in rx_complete()
2569 if (netif_running(dev->net) && in rx_complete()
2570 !test_bit(EVENT_RX_HALT, &dev->flags) && in rx_complete()
2572 rx_submit(dev, urb, GFP_ATOMIC); in rx_complete()
2577 netif_dbg(dev, rx_err, dev->net, "no read resubmitted\n"); in rx_complete()
2580 static void lan78xx_tx_bh(struct lan78xx_net *dev) in lan78xx_tx_bh() argument
2586 struct sk_buff_head *tqp = &dev->txq_pend; in lan78xx_tx_bh()
2632 netif_dbg(dev, tx_err, dev->net, "no urb\n"); in lan78xx_tx_bh()
2638 entry->dev = dev; in lan78xx_tx_bh()
2641 spin_lock_irqsave(&dev->txq.lock, flags); in lan78xx_tx_bh()
2642 ret = usb_autopm_get_interface_async(dev->intf); in lan78xx_tx_bh()
2644 spin_unlock_irqrestore(&dev->txq.lock, flags); in lan78xx_tx_bh()
2648 usb_fill_bulk_urb(urb, dev->udev, dev->pipe_out, in lan78xx_tx_bh()
2651 if (length % dev->maxpacket == 0) { in lan78xx_tx_bh()
2658 if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) { in lan78xx_tx_bh()
2660 usb_anchor_urb(urb, &dev->deferred); in lan78xx_tx_bh()
2662 netif_stop_queue(dev->net); in lan78xx_tx_bh()
2664 spin_unlock_irqrestore(&dev->txq.lock, flags); in lan78xx_tx_bh()
2665 netdev_dbg(dev->net, "Delaying transmission for resumption\n"); in lan78xx_tx_bh()
2673 dev->net->trans_start = jiffies; in lan78xx_tx_bh()
2674 lan78xx_queue_skb(&dev->txq, skb, tx_start); in lan78xx_tx_bh()
2675 if (skb_queue_len(&dev->txq) >= dev->tx_qlen) in lan78xx_tx_bh()
2676 netif_stop_queue(dev->net); in lan78xx_tx_bh()
2679 netif_stop_queue(dev->net); in lan78xx_tx_bh()
2680 lan78xx_defer_kevent(dev, EVENT_TX_HALT); in lan78xx_tx_bh()
2681 usb_autopm_put_interface_async(dev->intf); in lan78xx_tx_bh()
2684 usb_autopm_put_interface_async(dev->intf); in lan78xx_tx_bh()
2685 netif_dbg(dev, tx_err, dev->net, in lan78xx_tx_bh()
2690 spin_unlock_irqrestore(&dev->txq.lock, flags); in lan78xx_tx_bh()
2693 netif_dbg(dev, tx_err, dev->net, "drop, code %d\n", ret); in lan78xx_tx_bh()
2695 dev->net->stats.tx_dropped++; in lan78xx_tx_bh()
2700 netif_dbg(dev, tx_queued, dev->net, in lan78xx_tx_bh()
2704 static void lan78xx_rx_bh(struct lan78xx_net *dev) in lan78xx_rx_bh() argument
2709 if (skb_queue_len(&dev->rxq) < dev->rx_qlen) { in lan78xx_rx_bh()
2711 if (skb_queue_len(&dev->rxq) >= dev->rx_qlen) in lan78xx_rx_bh()
2715 if (rx_submit(dev, urb, GFP_ATOMIC) == -ENOLINK) in lan78xx_rx_bh()
2719 if (skb_queue_len(&dev->rxq) < dev->rx_qlen) in lan78xx_rx_bh()
2720 tasklet_schedule(&dev->bh); in lan78xx_rx_bh()
2722 if (skb_queue_len(&dev->txq) < dev->tx_qlen) in lan78xx_rx_bh()
2723 netif_wake_queue(dev->net); in lan78xx_rx_bh()
2728 struct lan78xx_net *dev = (struct lan78xx_net *)param; in lan78xx_bh() local
2732 while ((skb = skb_dequeue(&dev->done))) { in lan78xx_bh()
2737 rx_process(dev, skb); in lan78xx_bh()
2748 netdev_dbg(dev->net, "skb state %d\n", entry->state); in lan78xx_bh()
2753 if (netif_device_present(dev->net) && netif_running(dev->net)) { in lan78xx_bh()
2754 if (!skb_queue_empty(&dev->txq_pend)) in lan78xx_bh()
2755 lan78xx_tx_bh(dev); in lan78xx_bh()
2757 if (!timer_pending(&dev->delay) && in lan78xx_bh()
2758 !test_bit(EVENT_RX_HALT, &dev->flags)) in lan78xx_bh()
2759 lan78xx_rx_bh(dev); in lan78xx_bh()
2766 struct lan78xx_net *dev; in lan78xx_delayedwork() local
2768 dev = container_of(work, struct lan78xx_net, wq.work); in lan78xx_delayedwork()
2770 if (test_bit(EVENT_TX_HALT, &dev->flags)) { in lan78xx_delayedwork()
2771 unlink_urbs(dev, &dev->txq); in lan78xx_delayedwork()
2772 status = usb_autopm_get_interface(dev->intf); in lan78xx_delayedwork()
2775 status = usb_clear_halt(dev->udev, dev->pipe_out); in lan78xx_delayedwork()
2776 usb_autopm_put_interface(dev->intf); in lan78xx_delayedwork()
2780 if (netif_msg_tx_err(dev)) in lan78xx_delayedwork()
2782 netdev_err(dev->net, in lan78xx_delayedwork()
2786 clear_bit(EVENT_TX_HALT, &dev->flags); in lan78xx_delayedwork()
2788 netif_wake_queue(dev->net); in lan78xx_delayedwork()
2791 if (test_bit(EVENT_RX_HALT, &dev->flags)) { in lan78xx_delayedwork()
2792 unlink_urbs(dev, &dev->rxq); in lan78xx_delayedwork()
2793 status = usb_autopm_get_interface(dev->intf); in lan78xx_delayedwork()
2796 status = usb_clear_halt(dev->udev, dev->pipe_in); in lan78xx_delayedwork()
2797 usb_autopm_put_interface(dev->intf); in lan78xx_delayedwork()
2801 if (netif_msg_rx_err(dev)) in lan78xx_delayedwork()
2803 netdev_err(dev->net, in lan78xx_delayedwork()
2807 clear_bit(EVENT_RX_HALT, &dev->flags); in lan78xx_delayedwork()
2808 tasklet_schedule(&dev->bh); in lan78xx_delayedwork()
2812 if (test_bit(EVENT_LINK_RESET, &dev->flags)) { in lan78xx_delayedwork()
2815 clear_bit(EVENT_LINK_RESET, &dev->flags); in lan78xx_delayedwork()
2816 status = usb_autopm_get_interface(dev->intf); in lan78xx_delayedwork()
2819 if (lan78xx_link_reset(dev) < 0) { in lan78xx_delayedwork()
2820 usb_autopm_put_interface(dev->intf); in lan78xx_delayedwork()
2822 netdev_info(dev->net, "link reset failed (%d)\n", in lan78xx_delayedwork()
2825 usb_autopm_put_interface(dev->intf); in lan78xx_delayedwork()
2832 struct lan78xx_net *dev = urb->context; in intr_complete() local
2838 lan78xx_status(dev, urb); in intr_complete()
2844 netif_dbg(dev, ifdown, dev->net, in intr_complete()
2852 netdev_dbg(dev->net, "intr status %d\n", status); in intr_complete()
2856 if (!netif_running(dev->net)) in intr_complete()
2862 netif_err(dev, timer, dev->net, in intr_complete()
2868 struct lan78xx_net *dev; in lan78xx_disconnect() local
2872 dev = usb_get_intfdata(intf); in lan78xx_disconnect()
2874 if (!dev) in lan78xx_disconnect()
2879 net = dev->net; in lan78xx_disconnect()
2882 cancel_delayed_work_sync(&dev->wq); in lan78xx_disconnect()
2884 usb_scuttle_anchored_urbs(&dev->deferred); in lan78xx_disconnect()
2886 lan78xx_unbind(dev, intf); in lan78xx_disconnect()
2888 usb_kill_urb(dev->urb_intr); in lan78xx_disconnect()
2889 usb_free_urb(dev->urb_intr); in lan78xx_disconnect()
2897 struct lan78xx_net *dev = netdev_priv(net); in lan78xx_tx_timeout() local
2899 unlink_urbs(dev, &dev->txq); in lan78xx_tx_timeout()
2900 tasklet_schedule(&dev->bh); in lan78xx_tx_timeout()
2921 struct lan78xx_net *dev; in lan78xx_probe() local
2935 dev_err(&intf->dev, "Error: OOM\n"); in lan78xx_probe()
2940 SET_NETDEV_DEV(netdev, &intf->dev); in lan78xx_probe()
2942 dev = netdev_priv(netdev); in lan78xx_probe()
2943 dev->udev = udev; in lan78xx_probe()
2944 dev->intf = intf; in lan78xx_probe()
2945 dev->net = netdev; in lan78xx_probe()
2946 dev->msg_enable = netif_msg_init(msg_level, NETIF_MSG_DRV in lan78xx_probe()
2949 skb_queue_head_init(&dev->rxq); in lan78xx_probe()
2950 skb_queue_head_init(&dev->txq); in lan78xx_probe()
2951 skb_queue_head_init(&dev->done); in lan78xx_probe()
2952 skb_queue_head_init(&dev->rxq_pause); in lan78xx_probe()
2953 skb_queue_head_init(&dev->txq_pend); in lan78xx_probe()
2954 mutex_init(&dev->phy_mutex); in lan78xx_probe()
2956 tasklet_init(&dev->bh, lan78xx_bh, (unsigned long)dev); in lan78xx_probe()
2957 INIT_DELAYED_WORK(&dev->wq, lan78xx_delayedwork); in lan78xx_probe()
2958 init_usb_anchor(&dev->deferred); in lan78xx_probe()
2964 ret = lan78xx_bind(dev, intf); in lan78xx_probe()
2969 if (netdev->mtu > (dev->hard_mtu - netdev->hard_header_len)) in lan78xx_probe()
2970 netdev->mtu = dev->hard_mtu - netdev->hard_header_len; in lan78xx_probe()
2972 dev->ep_blkin = (intf->cur_altsetting)->endpoint + 0; in lan78xx_probe()
2973 dev->ep_blkout = (intf->cur_altsetting)->endpoint + 1; in lan78xx_probe()
2974 dev->ep_intr = (intf->cur_altsetting)->endpoint + 2; in lan78xx_probe()
2976 dev->pipe_in = usb_rcvbulkpipe(udev, BULK_IN_PIPE); in lan78xx_probe()
2977 dev->pipe_out = usb_sndbulkpipe(udev, BULK_OUT_PIPE); in lan78xx_probe()
2979 dev->pipe_intr = usb_rcvintpipe(dev->udev, in lan78xx_probe()
2980 dev->ep_intr->desc.bEndpointAddress & in lan78xx_probe()
2982 period = dev->ep_intr->desc.bInterval; in lan78xx_probe()
2984 maxp = usb_maxpacket(dev->udev, dev->pipe_intr, 0); in lan78xx_probe()
2987 dev->urb_intr = usb_alloc_urb(0, GFP_KERNEL); in lan78xx_probe()
2988 if (!dev->urb_intr) { in lan78xx_probe()
2992 usb_fill_int_urb(dev->urb_intr, dev->udev, in lan78xx_probe()
2993 dev->pipe_intr, buf, maxp, in lan78xx_probe()
2994 intr_complete, dev, period); in lan78xx_probe()
2998 dev->maxpacket = usb_maxpacket(dev->udev, dev->pipe_out, 1); in lan78xx_probe()
3005 netif_err(dev, probe, netdev, "couldn't register the device\n"); in lan78xx_probe()
3009 usb_set_intfdata(intf, dev); in lan78xx_probe()
3011 ret = device_set_wakeup_enable(&udev->dev, true); in lan78xx_probe()
3016 pm_runtime_set_autosuspend_delay(&udev->dev, in lan78xx_probe()
3022 lan78xx_unbind(dev, intf); in lan78xx_probe()
3056 static int lan78xx_set_suspend(struct lan78xx_net *dev, u32 wol) in lan78xx_set_suspend() argument
3068 ret = lan78xx_read_reg(dev, MAC_TX, &buf); in lan78xx_set_suspend()
3070 ret = lan78xx_write_reg(dev, MAC_TX, buf); in lan78xx_set_suspend()
3071 ret = lan78xx_read_reg(dev, MAC_RX, &buf); in lan78xx_set_suspend()
3073 ret = lan78xx_write_reg(dev, MAC_RX, buf); in lan78xx_set_suspend()
3075 ret = lan78xx_write_reg(dev, WUCSR, 0); in lan78xx_set_suspend()
3076 ret = lan78xx_write_reg(dev, WUCSR2, 0); in lan78xx_set_suspend()
3077 ret = lan78xx_write_reg(dev, WK_SRC, 0xFFF1FF1FUL); in lan78xx_set_suspend()
3082 ret = lan78xx_read_reg(dev, PMT_CTL, &temp_pmt_ctl); in lan78xx_set_suspend()
3087 ret = lan78xx_write_reg(dev, WUF_CFG(mask_index), 0); in lan78xx_set_suspend()
3116 ret = lan78xx_write_reg(dev, WUF_CFG(mask_index), in lan78xx_set_suspend()
3122 ret = lan78xx_write_reg(dev, WUF_MASK0(mask_index), 7); in lan78xx_set_suspend()
3123 ret = lan78xx_write_reg(dev, WUF_MASK1(mask_index), 0); in lan78xx_set_suspend()
3124 ret = lan78xx_write_reg(dev, WUF_MASK2(mask_index), 0); in lan78xx_set_suspend()
3125 ret = lan78xx_write_reg(dev, WUF_MASK3(mask_index), 0); in lan78xx_set_suspend()
3130 ret = lan78xx_write_reg(dev, WUF_CFG(mask_index), in lan78xx_set_suspend()
3136 ret = lan78xx_write_reg(dev, WUF_MASK0(mask_index), 3); in lan78xx_set_suspend()
3137 ret = lan78xx_write_reg(dev, WUF_MASK1(mask_index), 0); in lan78xx_set_suspend()
3138 ret = lan78xx_write_reg(dev, WUF_MASK2(mask_index), 0); in lan78xx_set_suspend()
3139 ret = lan78xx_write_reg(dev, WUF_MASK3(mask_index), 0); in lan78xx_set_suspend()
3160 ret = lan78xx_write_reg(dev, WUF_CFG(mask_index), in lan78xx_set_suspend()
3166 ret = lan78xx_write_reg(dev, WUF_MASK0(mask_index), 0x3000); in lan78xx_set_suspend()
3167 ret = lan78xx_write_reg(dev, WUF_MASK1(mask_index), 0); in lan78xx_set_suspend()
3168 ret = lan78xx_write_reg(dev, WUF_MASK2(mask_index), 0); in lan78xx_set_suspend()
3169 ret = lan78xx_write_reg(dev, WUF_MASK3(mask_index), 0); in lan78xx_set_suspend()
3177 ret = lan78xx_write_reg(dev, WUCSR, temp_wucsr); in lan78xx_set_suspend()
3185 ret = lan78xx_write_reg(dev, PMT_CTL, temp_pmt_ctl); in lan78xx_set_suspend()
3188 ret = lan78xx_read_reg(dev, PMT_CTL, &buf); in lan78xx_set_suspend()
3190 ret = lan78xx_write_reg(dev, PMT_CTL, buf); in lan78xx_set_suspend()
3192 ret = lan78xx_read_reg(dev, MAC_RX, &buf); in lan78xx_set_suspend()
3194 ret = lan78xx_write_reg(dev, MAC_RX, buf); in lan78xx_set_suspend()
3201 struct lan78xx_net *dev = usb_get_intfdata(intf); in lan78xx_suspend() local
3202 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); in lan78xx_suspend()
3209 if (!dev->suspend_count++) { in lan78xx_suspend()
3210 spin_lock_irq(&dev->txq.lock); in lan78xx_suspend()
3212 if ((skb_queue_len(&dev->txq) || in lan78xx_suspend()
3213 skb_queue_len(&dev->txq_pend)) && in lan78xx_suspend()
3215 spin_unlock_irq(&dev->txq.lock); in lan78xx_suspend()
3219 set_bit(EVENT_DEV_ASLEEP, &dev->flags); in lan78xx_suspend()
3220 spin_unlock_irq(&dev->txq.lock); in lan78xx_suspend()
3224 ret = lan78xx_read_reg(dev, MAC_TX, &buf); in lan78xx_suspend()
3226 ret = lan78xx_write_reg(dev, MAC_TX, buf); in lan78xx_suspend()
3227 ret = lan78xx_read_reg(dev, MAC_RX, &buf); in lan78xx_suspend()
3229 ret = lan78xx_write_reg(dev, MAC_RX, buf); in lan78xx_suspend()
3232 netif_device_detach(dev->net); in lan78xx_suspend()
3233 lan78xx_terminate_urbs(dev); in lan78xx_suspend()
3234 usb_kill_urb(dev->urb_intr); in lan78xx_suspend()
3237 netif_device_attach(dev->net); in lan78xx_suspend()
3240 if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) { in lan78xx_suspend()
3243 ret = lan78xx_read_reg(dev, MAC_TX, &buf); in lan78xx_suspend()
3245 ret = lan78xx_write_reg(dev, MAC_TX, buf); in lan78xx_suspend()
3246 ret = lan78xx_read_reg(dev, MAC_RX, &buf); in lan78xx_suspend()
3248 ret = lan78xx_write_reg(dev, MAC_RX, buf); in lan78xx_suspend()
3250 ret = lan78xx_write_reg(dev, WUCSR, 0); in lan78xx_suspend()
3251 ret = lan78xx_write_reg(dev, WUCSR2, 0); in lan78xx_suspend()
3252 ret = lan78xx_write_reg(dev, WK_SRC, 0xFFF1FF1FUL); in lan78xx_suspend()
3255 ret = lan78xx_read_reg(dev, WUCSR, &buf); in lan78xx_suspend()
3260 ret = lan78xx_write_reg(dev, WUCSR, buf); in lan78xx_suspend()
3262 ret = lan78xx_read_reg(dev, PMT_CTL, &buf); in lan78xx_suspend()
3272 ret = lan78xx_write_reg(dev, PMT_CTL, buf); in lan78xx_suspend()
3274 ret = lan78xx_read_reg(dev, PMT_CTL, &buf); in lan78xx_suspend()
3278 ret = lan78xx_write_reg(dev, PMT_CTL, buf); in lan78xx_suspend()
3280 ret = lan78xx_read_reg(dev, MAC_RX, &buf); in lan78xx_suspend()
3282 ret = lan78xx_write_reg(dev, MAC_RX, buf); in lan78xx_suspend()
3284 lan78xx_set_suspend(dev, pdata->wol); in lan78xx_suspend()
3295 struct lan78xx_net *dev = usb_get_intfdata(intf); in lan78xx_resume() local
3301 if (!--dev->suspend_count) { in lan78xx_resume()
3303 if (dev->urb_intr && test_bit(EVENT_DEV_OPEN, &dev->flags)) in lan78xx_resume()
3304 usb_submit_urb(dev->urb_intr, GFP_NOIO); in lan78xx_resume()
3306 spin_lock_irq(&dev->txq.lock); in lan78xx_resume()
3307 while ((res = usb_get_from_anchor(&dev->deferred))) { in lan78xx_resume()
3313 usb_autopm_put_interface_async(dev->intf); in lan78xx_resume()
3315 dev->net->trans_start = jiffies; in lan78xx_resume()
3316 lan78xx_queue_skb(&dev->txq, skb, tx_start); in lan78xx_resume()
3320 clear_bit(EVENT_DEV_ASLEEP, &dev->flags); in lan78xx_resume()
3321 spin_unlock_irq(&dev->txq.lock); in lan78xx_resume()
3323 if (test_bit(EVENT_DEV_OPEN, &dev->flags)) { in lan78xx_resume()
3324 if (!(skb_queue_len(&dev->txq) >= dev->tx_qlen)) in lan78xx_resume()
3325 netif_start_queue(dev->net); in lan78xx_resume()
3326 tasklet_schedule(&dev->bh); in lan78xx_resume()
3330 ret = lan78xx_write_reg(dev, WUCSR2, 0); in lan78xx_resume()
3331 ret = lan78xx_write_reg(dev, WUCSR, 0); in lan78xx_resume()
3332 ret = lan78xx_write_reg(dev, WK_SRC, 0xFFF1FF1FUL); in lan78xx_resume()
3334 ret = lan78xx_write_reg(dev, WUCSR2, WUCSR2_NS_RCD_ | in lan78xx_resume()
3339 ret = lan78xx_write_reg(dev, WUCSR, WUCSR_EEE_TX_WAKE_ | in lan78xx_resume()
3347 ret = lan78xx_read_reg(dev, MAC_TX, &buf); in lan78xx_resume()
3349 ret = lan78xx_write_reg(dev, MAC_TX, buf); in lan78xx_resume()
3356 struct lan78xx_net *dev = usb_get_intfdata(intf); in lan78xx_reset_resume() local
3358 lan78xx_reset(dev); in lan78xx_reset_resume()
3360 lan78xx_phy_init(dev); in lan78xx_reset_resume()