Lines Matching +full:10 +full:- +full:gigabit

1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * ASIX AX88179/178A USB 3.0/2.0 to Gigabit Ethernet Devices
5 * Copyright (C) 2011-2013 ASIX
139 #define GMII_LED2_LINK_1000 BIT(10)
152 #define LED2_ACTIVE BIT(10)
195 struct ax88179_data *ax179_data = dev->driver_priv; in ax88179_set_pm_mode()
197 ax179_data->in_pm = pm_mode; in ax88179_set_pm_mode()
202 struct ax88179_data *ax179_data = dev->driver_priv; in ax88179_in_pm()
204 return ax179_data->in_pm; in ax88179_in_pm()
212 struct ax88179_data *ax179_data = dev->driver_priv; in __ax88179_read_cmd()
224 if (unlikely((ret < 0) && !(ret == -ENODEV && ax179_data->disconnecting))) in __ax88179_read_cmd()
225 netdev_warn(dev->net, "Failed to read reg index 0x%04x: %d\n", in __ax88179_read_cmd()
236 struct ax88179_data *ax179_data = dev->driver_priv; in __ax88179_write_cmd()
248 if (unlikely((ret < 0) && !(ret == -ENODEV && ax179_data->disconnecting))) in __ax88179_write_cmd()
249 netdev_warn(dev->net, "Failed to write reg index 0x%04x: %d\n", in __ax88179_write_cmd()
319 if (urb->actual_length < 8) in ax88179_status()
322 event = urb->transfer_buffer; in ax88179_status()
323 le32_to_cpus((void *)&event->intdata1); in ax88179_status()
325 link = (((__force u32)event->intdata1) & AX_INT_PPLS_LINK) >> 16; in ax88179_status()
327 if (netif_carrier_ok(dev->net) != link) { in ax88179_status()
329 netdev_info(dev->net, "ax88179 - Link status is: %d\n", link); in ax88179_status()
408 struct ax88179_data *priv = dev->driver_priv; in ax88179_suspend()
417 if (priv->wolopts) { in ax88179_suspend()
420 if (priv->wolopts & WAKE_PHY) in ax88179_suspend()
422 if (priv->wolopts & WAKE_MAGIC) in ax88179_suspend()
436 /* Force bulk-in zero length */ in ax88179_suspend()
506 ax179_data = dev->driver_priv; in ax88179_disconnect()
507 ax179_data->disconnecting = 1; in ax88179_disconnect()
516 struct ax88179_data *priv = dev->driver_priv; in ax88179_get_wol()
518 wolinfo->supported = priv->wol_supported; in ax88179_get_wol()
519 wolinfo->wolopts = priv->wolopts; in ax88179_get_wol()
526 struct ax88179_data *priv = dev->driver_priv; in ax88179_set_wol()
528 if (wolinfo->wolopts & ~(priv->wol_supported)) in ax88179_set_wol()
529 return -EINVAL; in ax88179_set_wol()
531 priv->wolopts = wolinfo->wolopts; in ax88179_set_wol()
550 if (eeprom->len == 0) in ax88179_get_eeprom()
551 return -EINVAL; in ax88179_get_eeprom()
553 eeprom->magic = AX88179_EEPROM_MAGIC; in ax88179_get_eeprom()
555 first_word = eeprom->offset >> 1; in ax88179_get_eeprom()
556 last_word = (eeprom->offset + eeprom->len - 1) >> 1; in ax88179_get_eeprom()
557 eeprom_buff = kmalloc_array(last_word - first_word + 1, sizeof(u16), in ax88179_get_eeprom()
560 return -ENOMEM; in ax88179_get_eeprom()
565 &eeprom_buff[i - first_word]); in ax88179_get_eeprom()
568 return -EIO; in ax88179_get_eeprom()
572 memcpy(data, (u8 *)eeprom_buff + (eeprom->offset & 1), eeprom->len); in ax88179_get_eeprom()
589 eeprom->len, eeprom->offset, eeprom->magic); in ax88179_set_eeprom()
591 if (eeprom->len == 0) in ax88179_set_eeprom()
592 return -EINVAL; in ax88179_set_eeprom()
594 if (eeprom->magic != AX88179_EEPROM_MAGIC) in ax88179_set_eeprom()
595 return -EINVAL; in ax88179_set_eeprom()
597 first_word = eeprom->offset >> 1; in ax88179_set_eeprom()
598 last_word = (eeprom->offset + eeprom->len - 1) >> 1; in ax88179_set_eeprom()
600 eeprom_buff = kmalloc_array(last_word - first_word + 1, sizeof(u16), in ax88179_set_eeprom()
603 return -ENOMEM; in ax88179_set_eeprom()
607 if (eeprom->offset & 1) { in ax88179_set_eeprom()
616 if ((eeprom->offset + eeprom->len) & 1) { in ax88179_set_eeprom()
618 &eeprom_buff[last_word - first_word]); in ax88179_set_eeprom()
625 memcpy((u8 *)eeprom_buff + (eeprom->offset & 1), data, eeprom->len); in ax88179_set_eeprom()
629 i, eeprom_buff[i - first_word]); in ax88179_set_eeprom()
631 &eeprom_buff[i - first_word]); in ax88179_set_eeprom()
657 mii_ethtool_get_link_ksettings(&dev->mii, cmd); in ax88179_get_link_ksettings()
666 return mii_ethtool_set_link_ksettings(&dev->mii, cmd); in ax88179_set_link_ksettings()
679 data->supported = mmd_eee_cap_to_ethtool_sup_t(val); in ax88179_ethtool_get_eee()
686 data->advertised = mmd_eee_adv_to_ethtool_adv_t(val); in ax88179_ethtool_get_eee()
693 data->lp_advertised = mmd_eee_adv_to_ethtool_adv_t(val); in ax88179_ethtool_get_eee()
701 u16 tmp16 = ethtool_adv_to_mmd_eee_adv_t(data->advertised); in ax88179_ethtool_set_eee()
710 struct ax88179_data *priv = dev->driver_priv; in ax88179_chk_eee()
712 mii_ethtool_gset(&dev->mii, &ecmd); in ax88179_chk_eee()
722 priv->eee_active = 0; in ax88179_chk_eee()
728 priv->eee_active = 0; in ax88179_chk_eee()
736 priv->eee_active = 0; in ax88179_chk_eee()
745 priv->eee_active = 0; in ax88179_chk_eee()
756 priv->eee_active = 0; in ax88179_chk_eee()
760 priv->eee_active = 1; in ax88179_chk_eee()
764 priv->eee_active = 0; in ax88179_chk_eee()
813 struct ax88179_data *priv = dev->driver_priv; in ax88179_get_eee()
815 edata->eee_enabled = priv->eee_enabled; in ax88179_get_eee()
816 edata->eee_active = priv->eee_active; in ax88179_get_eee()
824 struct ax88179_data *priv = dev->driver_priv; in ax88179_set_eee()
827 priv->eee_enabled = edata->eee_enabled; in ax88179_set_eee()
828 if (!priv->eee_enabled) { in ax88179_set_eee()
831 priv->eee_enabled = ax88179_chk_eee(dev); in ax88179_set_eee()
832 if (!priv->eee_enabled) in ax88179_set_eee()
833 return -EOPNOTSUPP; in ax88179_set_eee()
842 mii_nway_restart(&dev->mii); in ax88179_set_eee()
852 return generic_mii_ioctl(&dev->mii, if_mii(rq), cmd, NULL); in ax88179_ioctl()
875 struct ax88179_data *data = dev->driver_priv; in ax88179_set_multicast()
876 u8 *m_filter = ((u8 *)dev->data); in ax88179_set_multicast()
878 data->rxctl = (AX_RX_CTL_START | AX_RX_CTL_AB | AX_RX_CTL_IPE); in ax88179_set_multicast()
880 if (net->flags & IFF_PROMISC) { in ax88179_set_multicast()
881 data->rxctl |= AX_RX_CTL_PRO; in ax88179_set_multicast()
882 } else if (net->flags & IFF_ALLMULTI || in ax88179_set_multicast()
884 data->rxctl |= AX_RX_CTL_AMALL; in ax88179_set_multicast()
888 /* We use dev->data for our 8 byte filter buffer in ax88179_set_multicast()
897 crc_bits = ether_crc(ETH_ALEN, ha->addr) >> 26; in ax88179_set_multicast()
905 data->rxctl |= AX_RX_CTL_AM; in ax88179_set_multicast()
909 2, 2, &data->rxctl); in ax88179_set_multicast()
917 netdev_features_t changed = net->features ^ features; in ax88179_set_features()
946 net->mtu = new_mtu; in ax88179_change_mtu()
947 dev->hard_mtu = net->mtu + net->hard_header_len; in ax88179_change_mtu()
949 if (net->mtu > 1500) { in ax88179_change_mtu()
976 return -EBUSY; in ax88179_set_mac_addr()
977 if (!is_valid_ether_addr(addr->sa_data)) in ax88179_set_mac_addr()
978 return -EADDRNOTAVAIL; in ax88179_set_mac_addr()
980 eth_hw_addr_set(net, addr->sa_data); in ax88179_set_mac_addr()
984 ETH_ALEN, net->dev_addr); in ax88179_set_mac_addr()
1008 u16 csum, delay = HZ / 10; in ax88179_check_eeprom()
1016 return -EINVAL; in ax88179_check_eeprom()
1021 return -EINVAL; in ax88179_check_eeprom()
1029 return -EINVAL; in ax88179_check_eeprom()
1037 return -EINVAL; in ax88179_check_eeprom()
1042 if ((csum + eeprom[10]) != 0xff) in ax88179_check_eeprom()
1043 return -EINVAL; in ax88179_check_eeprom()
1055 return -EINVAL; in ax88179_check_efuse()
1058 return -EINVAL; in ax88179_check_efuse()
1067 return -EINVAL; in ax88179_check_efuse()
1080 return -EINVAL; in ax88179_convert_old_led()
1115 u16 tmp, ledact, ledlink, ledvalue = 0, delay = HZ / 10; in ax88179_led_setting()
1126 return -EINVAL; in ax88179_led_setting()
1134 return -EINVAL; in ax88179_led_setting()
1139 return -EINVAL; in ax88179_led_setting()
1147 return -EINVAL; in ax88179_led_setting()
1264 if (!eth_platform_get_mac_address(&dev->udev->dev, mac)) { in ax88179_get_mac_addr()
1265 netif_dbg(dev, ifup, dev->net, in ax88179_get_mac_addr()
1270 netif_dbg(dev, ifup, dev->net, in ax88179_get_mac_addr()
1275 eth_hw_addr_set(dev->net, mac); in ax88179_get_mac_addr()
1277 netdev_info(dev->net, "invalid MAC address, using random\n"); in ax88179_get_mac_addr()
1278 eth_hw_addr_random(dev->net); in ax88179_get_mac_addr()
1282 dev->net->dev_addr); in ax88179_get_mac_addr()
1293 return -ENOMEM; in ax88179_bind()
1295 dev->driver_priv = ax179_data; in ax88179_bind()
1297 dev->net->netdev_ops = &ax88179_netdev_ops; in ax88179_bind()
1298 dev->net->ethtool_ops = &ax88179_ethtool_ops; in ax88179_bind()
1299 dev->net->needed_headroom = 8; in ax88179_bind()
1300 dev->net->max_mtu = 4088; in ax88179_bind()
1303 dev->mii.dev = dev->net; in ax88179_bind()
1304 dev->mii.mdio_read = ax88179_mdio_read; in ax88179_bind()
1305 dev->mii.mdio_write = ax88179_mdio_write; in ax88179_bind()
1306 dev->mii.phy_id_mask = 0xff; in ax88179_bind()
1307 dev->mii.reg_num_mask = 0xff; in ax88179_bind()
1308 dev->mii.phy_id = 0x03; in ax88179_bind()
1309 dev->mii.supports_gmii = 1; in ax88179_bind()
1311 dev->net->features |= NETIF_F_SG | NETIF_F_IP_CSUM | in ax88179_bind()
1314 dev->net->hw_features |= dev->net->features; in ax88179_bind()
1316 netif_set_tso_max_size(dev->net, 16384); in ax88179_bind()
1323 struct ax88179_data *ax179_data = dev->driver_priv; in ax88179_unbind()
1343 skb->ip_summed = CHECKSUM_NONE; in ax88179_rx_checksum()
1353 skb->ip_summed = CHECKSUM_UNNECESSARY; in ax88179_rx_checksum()
1366 * per-packet metadata (which contains elements encoded into u16). in ax88179_rx_fixup()
1373 * <per-packet metadata entry 1> <dummy header> in ax88179_rx_fixup()
1375 * <per-packet metadata entry N> <dummy header> in ax88179_rx_fixup()
1382 * <per-packet metadata entry N> contains 4 bytes: in ax88179_rx_fixup()
1384 * <padding> 0-7 bytes to terminate at in ax88179_rx_fixup()
1385 * 8 bytes boundary (64-bit). in ax88179_rx_fixup()
1387 * 8 bytes boundary (64-bit) in ax88179_rx_fixup()
1388 * <dummy-header> contains 4 bytes: in ax88179_rx_fixup()
1390 * <rx-hdr> contains 4 bytes: in ax88179_rx_fixup()
1392 * <per-packet metadata entry 1>) in ax88179_rx_fixup()
1394 * pkt_cnt is number of entrys in the per-packet metadata. in ax88179_rx_fixup()
1398 * This was done probably to align fields in 64-bit and in ax88179_rx_fixup()
1404 if (skb->len < 4) in ax88179_rx_fixup()
1406 skb_trim(skb, skb->len - 4); in ax88179_rx_fixup()
1417 if (pkt_cnt * 4 + hdr_off > skb->len) in ax88179_rx_fixup()
1419 pkt_hdr = (u32 *)(skb->data + hdr_off); in ax88179_rx_fixup()
1424 for (; pkt_cnt > 0; pkt_cnt--, pkt_hdr++) { in ax88179_rx_fixup()
1437 if (pkt_len_plus_padd > skb->len) in ax88179_rx_fixup()
1443 dev->net->stats.rx_errors++; in ax88179_rx_fixup()
1449 if (pkt_len_plus_padd == skb->len) { in ax88179_rx_fixup()
1455 skb->truesize = SKB_TRUESIZE(pkt_len_plus_padd); in ax88179_rx_fixup()
1468 skb->truesize = pkt_len_plus_padd + in ax88179_rx_fixup()
1483 int frame_size = dev->maxpacket; in ax88179_tx_fixup()
1487 tx_hdr1 = skb->len; in ax88179_tx_fixup()
1488 tx_hdr2 = skb_shinfo(skb)->gso_size; /* Set TSO mss */ in ax88179_tx_fixup()
1489 if (((skb->len + 8) % frame_size) == 0) in ax88179_tx_fixup()
1492 headroom = skb_headroom(skb) - 8; in ax88179_tx_fixup()
1494 if ((dev->net->features & NETIF_F_SG) && skb_linearize(skb)) in ax88179_tx_fixup()
1507 usbnet_set_skb_tx_stats(skb, (skb_shinfo(skb)->gso_segs ?: 1), 0); in ax88179_tx_fixup()
1514 struct ax88179_data *ax179_data = dev->driver_priv; in ax88179_link_reset()
1516 u16 mode, tmp16, delay = HZ / 10; in ax88179_link_reset()
1525 &ax179_data->rxctl); in ax88179_link_reset()
1547 if (dev->net->mtu > 1500) in ax88179_link_reset()
1570 dev->rx_urb_size = (1024 * (tmp[3] + 2)); in ax88179_link_reset()
1577 ax179_data->eee_enabled = ax88179_chk_eee(dev); in ax88179_link_reset()
1579 netif_carrier_on(dev->net); in ax88179_link_reset()
1589 struct ax88179_data *ax179_data = dev->driver_priv; in ax88179_reset()
1612 memcpy(dev->net->perm_addr, dev->net->dev_addr, ETH_ALEN); in ax88179_reset()
1618 dev->rx_urb_size = 1024 * 20; in ax88179_reset()
1653 ax179_data->wol_supported = 0; in ax88179_reset()
1656 ax179_data->wol_supported = WAKE_MAGIC | WAKE_PHY; in ax88179_reset()
1660 ax179_data->eee_enabled = 0; in ax88179_reset()
1661 ax179_data->eee_active = 0; in ax88179_reset()
1670 mii_nway_restart(&dev->mii); in ax88179_reset()
1691 .description = "ASIX AX88179 USB 3.0 Gigabit Ethernet",
1704 .description = "ASIX AX88178A USB 2.0 Gigabit Ethernet",
1717 .description = "Cypress GX3 SuperSpeed to Gigabit Ethernet Controller",
1730 .description = "D-Link DUB-1312 USB 3.0 to Gigabit Ethernet Adapter",
1743 .description = "Sitecom USB 3.0 to Gigabit Adapter",
1769 .description = "Lenovo OneLinkDock Gigabit LAN",
1808 .description = "MCT USB 3.0 Gigabit Ethernet Adapter",
1821 .description = "AT-UMC2000 USB 3.0/USB 3.1 Gen 1 to Gigabit Ethernet Adapter",
1834 .description = "AT-UMC200 USB 3.0/USB 3.1 Gen 1 to Fast Ethernet Adapter",
1847 .description = "AT-UMC2000/SP USB 3.0/USB 3.1 Gen 1 to Gigabit Ethernet Adapter",
1861 /* ASIX AX88179 10/100/1000 */
1865 /* ASIX AX88178A 10/100/1000 */
1869 /* Cypress GX3 SuperSpeed to Gigabit Ethernet Bridge Controller */
1873 /* D-Link DUB-1312 USB 3.0 to Gigabit Ethernet Adapter */
1877 /* Sitecom USB 3.0 to Gigabit Adapter */
1885 /* Lenovo OneLinkDock Gigabit LAN */
1889 /* Belkin B2B128 USB 3.0 Hub + Gigabit Ethernet Adapter */
1897 /* Magic Control Technology U3-A9003 USB 3.0 Gigabit Ethernet Adapter */
1901 /* Allied Telesis AT-UMC2000 USB 3.0/USB 3.1 Gen 1 to Gigabit Ethernet Adapter */
1905 /* Allied Telesis AT-UMC200 USB 3.0/USB 3.1 Gen 1 to Fast Ethernet Adapter */
1909 /* Allied Telesis AT-UMC2000/SP USB 3.0/USB 3.1 Gen 1 to Gigabit Ethernet Adapter */
1931 MODULE_DESCRIPTION("ASIX AX88179/178A based USB 3.0/2.0 Gigabit Ethernet Devices");