Lines Matching +full:5 +full:gbase +full:- +full:x
1 // SPDX-License-Identifier: GPL-2.0-only
31 /* Information for net-next */
443 #define pwd_dn_scale(x) ((x) << 1) argument
502 #define BYPASS_MAC_RESET BIT(5)
515 #define BYPASS_FLASH BIT(5)
543 #define USP_PREWAKE BIT(5)
560 /* bit 4 ~ 5: fifo empty boundary */
578 #define MID_REVERSE BIT(5) /* RTL8156A */
587 #define ups_flags_speed(x) ((x) << 16) argument
621 #define PHY_STAT_PWRDN 5
639 #define sd_rise_time(x) (min(x, 7) << 4) /* bit 4 ~ 6 */ argument
652 #define fast_snr(x) (min(x, 0x1ff) << 7) /* bit 7 ~ 15 */ argument
653 #define RG_LFS_SEL 0x0060 /* bit 6 ~ 5 */
674 #define RTL_ADV2_5G_F_R BIT(5) /* Advertise 2.5GBASE-T fast-retrain */
695 #define sysclk_div_expo(x) (min(x, 5) << 8) argument
696 #define clk_div_expo(x) (min(x, 5) << 4) argument
731 _rx_flow = BIT(5),
755 #define RTL8152_TX_TIMEOUT (5 * HZ)
757 #define size_to_mtu(s) ((s) - VLAN_ETH_HLEN - ETH_FCS_LEN)
758 #define rx_reserved_size(x) (mtu_to_size(x) + sizeof(struct rx_desc) + RX_ALIGN) argument
950 * struct fw_block - block type and total length
961 * struct fw_header - header of the firmware file
1035 * struct fw_mac - a firmware block used by RTL_FW_PLA and RTL_FW_USB.
1076 * struct fw_phy_patch_key - a firmware block used by RTL_FW_PHY_START.
1091 * struct fw_phy_nc - a firmware block used by RTL_FW_PHY_NC.
1183 #define RTL_ADVERTISED_1000_FULL BIT(5)
1186 /* Maximum number of multicast addresses to filter (vs. Rx-all-multicast).
1192 #define RTL_LIMITED_TSO_SIZE (size_to_mtu(agg_buf_sz) - sizeof(struct tx_desc))
1202 return -ENOMEM; in get_registers()
1204 ret = usb_control_msg(tp->udev, tp->pipe_ctrl_in, in get_registers()
1225 return -ENOMEM; in set_registers()
1227 ret = usb_control_msg(tp->udev, tp->pipe_ctrl_out, in set_registers()
1238 if (tp->udev->state == USB_STATE_NOTATTACHED) { in rtl_set_unplug()
1239 set_bit(RTL8152_UNPLUG, &tp->flags); in rtl_set_unplug()
1250 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in generic_ocp_read()
1251 return -ENODEV; in generic_ocp_read()
1255 return -EPERM; in generic_ocp_read()
1258 return -EPERM; in generic_ocp_read()
1268 size -= limit; in generic_ocp_read()
1281 if (ret == -ENODEV) in generic_ocp_read()
1294 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in generic_ocp_write()
1295 return -ENODEV; in generic_ocp_write()
1299 return -EPERM; in generic_ocp_write()
1302 return -EPERM; in generic_ocp_write()
1314 size -= 4; in generic_ocp_write()
1317 size -= 4; in generic_ocp_write()
1329 size -= limit; in generic_ocp_write()
1351 if (ret == -ENODEV) in generic_ocp_write()
1474 if (ocp_base != tp->ocp_base) { in ocp_reg_read()
1476 tp->ocp_base = ocp_base; in ocp_reg_read()
1488 if (ocp_base != tp->ocp_base) { in ocp_reg_write()
1490 tp->ocp_base = ocp_base; in ocp_reg_write()
1524 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in read_mii_word()
1525 return -ENODEV; in read_mii_word()
1528 return -EINVAL; in read_mii_word()
1540 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in write_mii_word()
1561 int ret = -EADDRNOTAVAIL; in __rtl8152_set_mac_address()
1563 if (!is_valid_ether_addr(addr->sa_data)) in __rtl8152_set_mac_address()
1567 ret = usb_autopm_get_interface(tp->intf); in __rtl8152_set_mac_address()
1572 mutex_lock(&tp->control); in __rtl8152_set_mac_address()
1574 memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len); in __rtl8152_set_mac_address()
1577 pla_ocp_write(tp, PLA_IDR, BYTE_EN_SIX_BYTES, 8, addr->sa_data); in __rtl8152_set_mac_address()
1580 mutex_unlock(&tp->control); in __rtl8152_set_mac_address()
1583 usb_autopm_put_interface(tp->intf); in __rtl8152_set_mac_address()
1602 int ret = -EINVAL; in vendor_mac_passthru_addr_read()
1609 if (tp->lenovo_macpassthru) { in vendor_mac_passthru_addr_read()
1614 /* test for -AD variant of RTL8153 */ in vendor_mac_passthru_addr_read()
1617 /* test for MAC address pass-through bit */ in vendor_mac_passthru_addr_read()
1620 netif_dbg(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1621 "No efuse for RTL8153-AD MAC pass through\n"); in vendor_mac_passthru_addr_read()
1622 return -ENODEV; in vendor_mac_passthru_addr_read()
1625 /* test for RTL8153-BND and RTL8153-BD */ in vendor_mac_passthru_addr_read()
1628 netif_dbg(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1630 return -ENODEV; in vendor_mac_passthru_addr_read()
1643 return -ENODEV; in vendor_mac_passthru_addr_read()
1644 if (obj->type != mac_obj_type || obj->string.length != mac_strlen) { in vendor_mac_passthru_addr_read()
1645 netif_warn(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1646 "Invalid buffer for pass-thru MAC addr: (%d, %d)\n", in vendor_mac_passthru_addr_read()
1647 obj->type, obj->string.length); in vendor_mac_passthru_addr_read()
1651 if (strncmp(obj->string.pointer, "_AUXMAC_#", 9) != 0 || in vendor_mac_passthru_addr_read()
1652 strncmp(obj->string.pointer + 0x15, "#", 1) != 0) { in vendor_mac_passthru_addr_read()
1653 netif_warn(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1654 "Invalid header when reading pass-thru MAC addr\n"); in vendor_mac_passthru_addr_read()
1657 ret = hex2bin(buf, obj->string.pointer + 9, 6); in vendor_mac_passthru_addr_read()
1659 netif_warn(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1660 "Invalid MAC for pass-thru MAC addr: %d, %pM\n", in vendor_mac_passthru_addr_read()
1662 ret = -EINVAL; in vendor_mac_passthru_addr_read()
1665 memcpy(sa->sa_data, buf, 6); in vendor_mac_passthru_addr_read()
1666 netif_info(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1667 "Using pass-thru MAC addr %pM\n", sa->sa_data); in vendor_mac_passthru_addr_read()
1676 struct net_device *dev = tp->netdev; in determine_ethernet_addr()
1679 sa->sa_family = dev->type; in determine_ethernet_addr()
1681 ret = eth_platform_get_mac_address(&tp->udev->dev, sa->sa_data); in determine_ethernet_addr()
1683 if (tp->version == RTL_VER_01) { in determine_ethernet_addr()
1684 ret = pla_ocp_read(tp, PLA_IDR, 8, sa->sa_data); in determine_ethernet_addr()
1687 * be expected to be non-zero in determine_ethernet_addr()
1692 sa->sa_data); in determine_ethernet_addr()
1698 } else if (!is_valid_ether_addr(sa->sa_data)) { in determine_ethernet_addr()
1700 sa->sa_data); in determine_ethernet_addr()
1702 ether_addr_copy(sa->sa_data, dev->dev_addr); in determine_ethernet_addr()
1704 sa->sa_data); in determine_ethernet_addr()
1713 struct net_device *dev = tp->netdev; in set_ethernet_addr()
1721 if (tp->version == RTL_VER_01) in set_ethernet_addr()
1722 ether_addr_copy(dev->dev_addr, sa.sa_data); in set_ethernet_addr()
1732 int status = urb->status; in read_bulk_callback()
1737 agg = urb->context; in read_bulk_callback()
1741 tp = agg->context; in read_bulk_callback()
1745 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in read_bulk_callback()
1748 if (!test_bit(WORK_ENABLE, &tp->flags)) in read_bulk_callback()
1751 netdev = tp->netdev; in read_bulk_callback()
1754 /* This avoid the re-submitting bulk */ in read_bulk_callback()
1758 usb_mark_last_busy(tp->udev); in read_bulk_callback()
1762 if (urb->actual_length < ETH_ZLEN) in read_bulk_callback()
1765 spin_lock_irqsave(&tp->rx_lock, flags); in read_bulk_callback()
1766 list_add_tail(&agg->list, &tp->rx_done); in read_bulk_callback()
1767 spin_unlock_irqrestore(&tp->rx_lock, flags); in read_bulk_callback()
1768 napi_schedule(&tp->napi); in read_bulk_callback()
1770 case -ESHUTDOWN: in read_bulk_callback()
1772 netif_device_detach(tp->netdev); in read_bulk_callback()
1774 case -EPROTO: in read_bulk_callback()
1775 urb->actual_length = 0; in read_bulk_callback()
1776 spin_lock_irqsave(&tp->rx_lock, flags); in read_bulk_callback()
1777 list_add_tail(&agg->list, &tp->rx_done); in read_bulk_callback()
1778 spin_unlock_irqrestore(&tp->rx_lock, flags); in read_bulk_callback()
1779 set_bit(RX_EPROTO, &tp->flags); in read_bulk_callback()
1780 schedule_delayed_work(&tp->schedule, 1); in read_bulk_callback()
1782 case -ENOENT: in read_bulk_callback()
1784 case -ETIME: in read_bulk_callback()
1804 int status = urb->status; in write_bulk_callback()
1806 agg = urb->context; in write_bulk_callback()
1810 tp = agg->context; in write_bulk_callback()
1814 netdev = tp->netdev; in write_bulk_callback()
1815 stats = &netdev->stats; in write_bulk_callback()
1819 stats->tx_errors += agg->skb_num; in write_bulk_callback()
1821 stats->tx_packets += agg->skb_num; in write_bulk_callback()
1822 stats->tx_bytes += agg->skb_len; in write_bulk_callback()
1825 spin_lock_irqsave(&tp->tx_lock, flags); in write_bulk_callback()
1826 list_add_tail(&agg->list, &tp->tx_free); in write_bulk_callback()
1827 spin_unlock_irqrestore(&tp->tx_lock, flags); in write_bulk_callback()
1829 usb_autopm_put_interface_async(tp->intf); in write_bulk_callback()
1834 if (!test_bit(WORK_ENABLE, &tp->flags)) in write_bulk_callback()
1837 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in write_bulk_callback()
1840 if (!skb_queue_empty(&tp->tx_queue)) in write_bulk_callback()
1841 tasklet_schedule(&tp->tx_tl); in write_bulk_callback()
1848 int status = urb->status; in intr_callback()
1851 tp = urb->context; in intr_callback()
1855 if (!test_bit(WORK_ENABLE, &tp->flags)) in intr_callback()
1858 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in intr_callback()
1864 case -ECONNRESET: /* unlink */ in intr_callback()
1865 case -ESHUTDOWN: in intr_callback()
1866 netif_device_detach(tp->netdev); in intr_callback()
1868 case -ENOENT: in intr_callback()
1869 case -EPROTO: in intr_callback()
1870 netif_info(tp, intr, tp->netdev, in intr_callback()
1873 case -EOVERFLOW: in intr_callback()
1874 netif_info(tp, intr, tp->netdev, "intr status -EOVERFLOW\n"); in intr_callback()
1876 /* -EPIPE: should clear the halt */ in intr_callback()
1878 netif_info(tp, intr, tp->netdev, "intr status %d\n", status); in intr_callback()
1882 d = urb->transfer_buffer; in intr_callback()
1884 if (!netif_carrier_ok(tp->netdev)) { in intr_callback()
1885 set_bit(RTL8152_LINK_CHG, &tp->flags); in intr_callback()
1886 schedule_delayed_work(&tp->schedule, 0); in intr_callback()
1889 if (netif_carrier_ok(tp->netdev)) { in intr_callback()
1890 netif_stop_queue(tp->netdev); in intr_callback()
1891 set_bit(RTL8152_LINK_CHG, &tp->flags); in intr_callback()
1892 schedule_delayed_work(&tp->schedule, 0); in intr_callback()
1898 if (res == -ENODEV) { in intr_callback()
1900 netif_device_detach(tp->netdev); in intr_callback()
1902 netif_err(tp, intr, tp->netdev, in intr_callback()
1919 list_del(&agg->info_list); in free_rx_agg()
1921 usb_free_urb(agg->urb); in free_rx_agg()
1922 put_page(agg->page); in free_rx_agg()
1925 atomic_dec(&tp->rx_count); in free_rx_agg()
1930 struct net_device *netdev = tp->netdev; in alloc_rx_agg()
1931 int node = netdev->dev.parent ? dev_to_node(netdev->dev.parent) : -1; in alloc_rx_agg()
1932 unsigned int order = get_order(tp->rx_buf_sz); in alloc_rx_agg()
1940 rx_agg->page = alloc_pages(mflags | __GFP_COMP, order); in alloc_rx_agg()
1941 if (!rx_agg->page) in alloc_rx_agg()
1944 rx_agg->buffer = page_address(rx_agg->page); in alloc_rx_agg()
1946 rx_agg->urb = usb_alloc_urb(0, mflags); in alloc_rx_agg()
1947 if (!rx_agg->urb) in alloc_rx_agg()
1950 rx_agg->context = tp; in alloc_rx_agg()
1952 INIT_LIST_HEAD(&rx_agg->list); in alloc_rx_agg()
1953 INIT_LIST_HEAD(&rx_agg->info_list); in alloc_rx_agg()
1954 spin_lock_irqsave(&tp->rx_lock, flags); in alloc_rx_agg()
1955 list_add_tail(&rx_agg->info_list, &tp->rx_info); in alloc_rx_agg()
1956 spin_unlock_irqrestore(&tp->rx_lock, flags); in alloc_rx_agg()
1958 atomic_inc(&tp->rx_count); in alloc_rx_agg()
1963 __free_pages(rx_agg->page, order); in alloc_rx_agg()
1975 spin_lock_irqsave(&tp->rx_lock, flags); in free_all_mem()
1977 list_for_each_entry_safe(agg, agg_next, &tp->rx_info, info_list) in free_all_mem()
1980 spin_unlock_irqrestore(&tp->rx_lock, flags); in free_all_mem()
1982 WARN_ON(atomic_read(&tp->rx_count)); in free_all_mem()
1985 usb_free_urb(tp->tx_info[i].urb); in free_all_mem()
1986 tp->tx_info[i].urb = NULL; in free_all_mem()
1988 kfree(tp->tx_info[i].buffer); in free_all_mem()
1989 tp->tx_info[i].buffer = NULL; in free_all_mem()
1990 tp->tx_info[i].head = NULL; in free_all_mem()
1993 usb_free_urb(tp->intr_urb); in free_all_mem()
1994 tp->intr_urb = NULL; in free_all_mem()
1996 kfree(tp->intr_buff); in free_all_mem()
1997 tp->intr_buff = NULL; in free_all_mem()
2002 struct net_device *netdev = tp->netdev; in alloc_all_mem()
2003 struct usb_interface *intf = tp->intf; in alloc_all_mem()
2004 struct usb_host_interface *alt = intf->cur_altsetting; in alloc_all_mem()
2005 struct usb_host_endpoint *ep_intr = alt->endpoint + 2; in alloc_all_mem()
2008 node = netdev->dev.parent ? dev_to_node(netdev->dev.parent) : -1; in alloc_all_mem()
2010 spin_lock_init(&tp->rx_lock); in alloc_all_mem()
2011 spin_lock_init(&tp->tx_lock); in alloc_all_mem()
2012 INIT_LIST_HEAD(&tp->rx_info); in alloc_all_mem()
2013 INIT_LIST_HEAD(&tp->tx_free); in alloc_all_mem()
2014 INIT_LIST_HEAD(&tp->rx_done); in alloc_all_mem()
2015 skb_queue_head_init(&tp->tx_queue); in alloc_all_mem()
2016 skb_queue_head_init(&tp->rx_queue); in alloc_all_mem()
2017 atomic_set(&tp->rx_count, 0); in alloc_all_mem()
2046 INIT_LIST_HEAD(&tp->tx_info[i].list); in alloc_all_mem()
2047 tp->tx_info[i].context = tp; in alloc_all_mem()
2048 tp->tx_info[i].urb = urb; in alloc_all_mem()
2049 tp->tx_info[i].buffer = buf; in alloc_all_mem()
2050 tp->tx_info[i].head = tx_agg_align(buf); in alloc_all_mem()
2052 list_add_tail(&tp->tx_info[i].list, &tp->tx_free); in alloc_all_mem()
2055 tp->intr_urb = usb_alloc_urb(0, GFP_KERNEL); in alloc_all_mem()
2056 if (!tp->intr_urb) in alloc_all_mem()
2059 tp->intr_buff = kmalloc(INTBUFSIZE, GFP_KERNEL); in alloc_all_mem()
2060 if (!tp->intr_buff) in alloc_all_mem()
2063 tp->intr_interval = (int)ep_intr->desc.bInterval; in alloc_all_mem()
2064 usb_fill_int_urb(tp->intr_urb, tp->udev, tp->pipe_intr, in alloc_all_mem()
2065 tp->intr_buff, INTBUFSIZE, intr_callback, in alloc_all_mem()
2066 tp, tp->intr_interval); in alloc_all_mem()
2072 return -ENOMEM; in alloc_all_mem()
2080 if (list_empty(&tp->tx_free)) in r8152_get_tx_agg()
2083 spin_lock_irqsave(&tp->tx_lock, flags); in r8152_get_tx_agg()
2084 if (!list_empty(&tp->tx_free)) { in r8152_get_tx_agg()
2087 cursor = tp->tx_free.next; in r8152_get_tx_agg()
2091 spin_unlock_irqrestore(&tp->tx_lock, flags); in r8152_get_tx_agg()
2103 if (skb_shinfo(skb)->gso_size) { in r8152_csum_workaround()
2104 netdev_features_t features = tp->netdev->features; in r8152_csum_workaround()
2122 } else if (skb->ip_summed == CHECKSUM_PARTIAL) { in r8152_csum_workaround()
2131 stats = &tp->netdev->stats; in r8152_csum_workaround()
2132 stats->tx_dropped++; in r8152_csum_workaround()
2143 desc->opts2 |= cpu_to_le32(opts2); in rtl_tx_vlan_tag()
2149 u32 opts2 = le32_to_cpu(desc->opts2); in rtl_rx_vlan_tag()
2159 u32 mss = skb_shinfo(skb)->gso_size; in r8152_tx_csum()
2169 netif_warn(tp, tx_err, tp->netdev, in r8152_tx_csum()
2170 "Invalid transport offset 0x%x for TSO\n", in r8152_tx_csum()
2197 } else if (skb->ip_summed == CHECKSUM_PARTIAL) { in r8152_tx_csum()
2201 netif_warn(tp, tx_err, tp->netdev, in r8152_tx_csum()
2202 "Invalid transport offset 0x%x\n", in r8152_tx_csum()
2211 ip_protocol = ip_hdr(skb)->protocol; in r8152_tx_csum()
2216 ip_protocol = ipv6_hdr(skb)->nexthdr; in r8152_tx_csum()
2234 desc->opts2 = cpu_to_le32(opts2); in r8152_tx_csum()
2235 desc->opts1 = cpu_to_le32(opts1); in r8152_tx_csum()
2243 struct sk_buff_head skb_head, *tx_queue = &tp->tx_queue; in r8152_tx_agg_fill()
2248 spin_lock(&tx_queue->lock); in r8152_tx_agg_fill()
2250 spin_unlock(&tx_queue->lock); in r8152_tx_agg_fill()
2252 tx_data = agg->head; in r8152_tx_agg_fill()
2253 agg->skb_num = 0; in r8152_tx_agg_fill()
2254 agg->skb_len = 0; in r8152_tx_agg_fill()
2267 len = skb->len + sizeof(*tx_desc); in r8152_tx_agg_fill()
2279 if (r8152_tx_csum(tp, tx_desc, skb, skb->len, offset)) { in r8152_tx_agg_fill()
2288 len = skb->len; in r8152_tx_agg_fill()
2290 struct net_device_stats *stats = &tp->netdev->stats; in r8152_tx_agg_fill()
2292 stats->tx_dropped++; in r8152_tx_agg_fill()
2294 tx_data -= sizeof(*tx_desc); in r8152_tx_agg_fill()
2299 agg->skb_len += len; in r8152_tx_agg_fill()
2300 agg->skb_num += skb_shinfo(skb)->gso_segs ?: 1; in r8152_tx_agg_fill()
2304 remain = agg_buf_sz - (int)(tx_agg_align(tx_data) - agg->head); in r8152_tx_agg_fill()
2306 if (tp->dell_tb_rx_agg_bug) in r8152_tx_agg_fill()
2311 spin_lock(&tx_queue->lock); in r8152_tx_agg_fill()
2313 spin_unlock(&tx_queue->lock); in r8152_tx_agg_fill()
2316 netif_tx_lock(tp->netdev); in r8152_tx_agg_fill()
2318 if (netif_queue_stopped(tp->netdev) && in r8152_tx_agg_fill()
2319 skb_queue_len(&tp->tx_queue) < tp->tx_qlen) in r8152_tx_agg_fill()
2320 netif_wake_queue(tp->netdev); in r8152_tx_agg_fill()
2322 netif_tx_unlock(tp->netdev); in r8152_tx_agg_fill()
2324 ret = usb_autopm_get_interface_async(tp->intf); in r8152_tx_agg_fill()
2328 usb_fill_bulk_urb(agg->urb, tp->udev, tp->pipe_out, in r8152_tx_agg_fill()
2329 agg->head, (int)(tx_data - (u8 *)agg->head), in r8152_tx_agg_fill()
2332 ret = usb_submit_urb(agg->urb, GFP_ATOMIC); in r8152_tx_agg_fill()
2334 usb_autopm_put_interface_async(tp->intf); in r8152_tx_agg_fill()
2345 if (!(tp->netdev->features & NETIF_F_RXCSUM)) in r8152_rx_csum()
2348 opts2 = le32_to_cpu(rx_desc->opts2); in r8152_rx_csum()
2349 opts3 = le32_to_cpu(rx_desc->opts3); in r8152_rx_csum()
2371 return atomic_read(&tp->rx_count) > RTL8152_MAX_RX; in rx_count_exceed()
2376 return (int)(addr - agg->buffer); in agg_offset()
2384 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_get_free_rx()
2386 list_for_each_entry_safe(agg, agg_next, &tp->rx_used, list) { in rtl_get_free_rx()
2387 if (page_count(agg->page) == 1) { in rtl_get_free_rx()
2389 list_del_init(&agg->list); in rtl_get_free_rx()
2394 list_del_init(&agg->list); in rtl_get_free_rx()
2401 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_get_free_rx()
2403 if (!agg_free && atomic_read(&tp->rx_count) < tp->rx_pending) in rtl_get_free_rx()
2414 struct napi_struct *napi = &tp->napi; in rx_bottom()
2416 if (!skb_queue_empty(&tp->rx_queue)) { in rx_bottom()
2418 struct sk_buff *skb = __skb_dequeue(&tp->rx_queue); in rx_bottom()
2419 struct net_device *netdev = tp->netdev; in rx_bottom()
2420 struct net_device_stats *stats = &netdev->stats; in rx_bottom()
2426 pkt_len = skb->len; in rx_bottom()
2429 stats->rx_packets++; in rx_bottom()
2430 stats->rx_bytes += pkt_len; in rx_bottom()
2434 if (list_empty(&tp->rx_done)) in rx_bottom()
2437 clear_bit(RX_EPROTO, &tp->flags); in rx_bottom()
2439 spin_lock_irqsave(&tp->rx_lock, flags); in rx_bottom()
2440 list_splice_init(&tp->rx_done, &rx_queue); in rx_bottom()
2441 spin_unlock_irqrestore(&tp->rx_lock, flags); in rx_bottom()
2453 urb = agg->urb; in rx_bottom()
2454 if (urb->status != 0 || urb->actual_length < ETH_ZLEN) in rx_bottom()
2459 rx_desc = agg->buffer; in rx_bottom()
2460 rx_data = agg->buffer; in rx_bottom()
2463 while (urb->actual_length > len_used) { in rx_bottom()
2464 struct net_device *netdev = tp->netdev; in rx_bottom()
2465 struct net_device_stats *stats = &netdev->stats; in rx_bottom()
2470 if (unlikely(skb_queue_len(&tp->rx_queue) >= 1000)) in rx_bottom()
2473 pkt_len = le32_to_cpu(rx_desc->opts1) & RX_LEN_MASK; in rx_bottom()
2478 if (urb->actual_length < len_used) in rx_bottom()
2481 pkt_len -= ETH_FCS_LEN; in rx_bottom()
2484 if (!agg_free || tp->rx_copybreak > pkt_len) in rx_bottom()
2487 rx_frag_head_sz = tp->rx_copybreak; in rx_bottom()
2491 stats->rx_dropped++; in rx_bottom()
2495 skb->ip_summed = r8152_rx_csum(tp, rx_desc); in rx_bottom()
2496 memcpy(skb->data, rx_data, rx_frag_head_sz); in rx_bottom()
2498 pkt_len -= rx_frag_head_sz; in rx_bottom()
2501 skb_add_rx_frag(skb, 0, agg->page, in rx_bottom()
2505 get_page(agg->page); in rx_bottom()
2508 skb->protocol = eth_type_trans(skb, netdev); in rx_bottom()
2512 stats->rx_packets++; in rx_bottom()
2513 stats->rx_bytes += skb->len; in rx_bottom()
2516 __skb_queue_tail(&tp->rx_queue, skb); in rx_bottom()
2526 WARN_ON(!agg_free && page_count(agg->page) > 1); in rx_bottom()
2529 spin_lock_irqsave(&tp->rx_lock, flags); in rx_bottom()
2530 if (page_count(agg->page) == 1) { in rx_bottom()
2531 list_add(&agg_free->list, &tp->rx_used); in rx_bottom()
2533 list_add_tail(&agg->list, &tp->rx_used); in rx_bottom()
2535 urb = agg->urb; in rx_bottom()
2537 spin_unlock_irqrestore(&tp->rx_lock, flags); in rx_bottom()
2544 urb->actual_length = 0; in rx_bottom()
2545 list_add_tail(&agg->list, next); in rx_bottom()
2550 spin_lock_irqsave(&tp->rx_lock, flags); in rx_bottom()
2551 list_splice_tail(&rx_queue, &tp->rx_done); in rx_bottom()
2552 spin_unlock_irqrestore(&tp->rx_lock, flags); in rx_bottom()
2564 struct net_device *netdev = tp->netdev; in tx_bottom()
2567 if (skb_queue_empty(&tp->tx_queue)) in tx_bottom()
2578 if (res == -ENODEV) { in tx_bottom()
2582 struct net_device_stats *stats = &netdev->stats; in tx_bottom()
2587 stats->tx_dropped += agg->skb_num; in tx_bottom()
2589 spin_lock_irqsave(&tp->tx_lock, flags); in tx_bottom()
2590 list_add_tail(&agg->list, &tp->tx_free); in tx_bottom()
2591 spin_unlock_irqrestore(&tp->tx_lock, flags); in tx_bottom()
2600 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in bottom_half()
2603 if (!test_bit(WORK_ENABLE, &tp->flags)) in bottom_half()
2607 /* This avoid the re-submitting bulk */ in bottom_half()
2608 if (!netif_carrier_ok(tp->netdev)) in bottom_half()
2611 clear_bit(SCHEDULE_TASKLET, &tp->flags); in bottom_half()
2626 if (!list_empty(&tp->rx_done)) in r8152_poll()
2640 if (test_bit(RTL8152_UNPLUG, &tp->flags) || in r8152_submit_rx()
2641 !test_bit(WORK_ENABLE, &tp->flags) || !netif_carrier_ok(tp->netdev)) in r8152_submit_rx()
2644 usb_fill_bulk_urb(agg->urb, tp->udev, tp->pipe_in, in r8152_submit_rx()
2645 agg->buffer, tp->rx_buf_sz, in r8152_submit_rx()
2648 ret = usb_submit_urb(agg->urb, mem_flags); in r8152_submit_rx()
2649 if (ret == -ENODEV) { in r8152_submit_rx()
2651 netif_device_detach(tp->netdev); in r8152_submit_rx()
2653 struct urb *urb = agg->urb; in r8152_submit_rx()
2656 urb->actual_length = 0; in r8152_submit_rx()
2657 spin_lock_irqsave(&tp->rx_lock, flags); in r8152_submit_rx()
2658 list_add_tail(&agg->list, &tp->rx_done); in r8152_submit_rx()
2659 spin_unlock_irqrestore(&tp->rx_lock, flags); in r8152_submit_rx()
2661 netif_err(tp, rx_err, tp->netdev, in r8152_submit_rx()
2664 napi_schedule(&tp->napi); in r8152_submit_rx()
2672 struct net_device_stats *stats = &tp->netdev->stats; in rtl_drop_queued_tx()
2673 struct sk_buff_head skb_head, *tx_queue = &tp->tx_queue; in rtl_drop_queued_tx()
2680 spin_lock_bh(&tx_queue->lock); in rtl_drop_queued_tx()
2682 spin_unlock_bh(&tx_queue->lock); in rtl_drop_queued_tx()
2686 stats->tx_dropped++; in rtl_drop_queued_tx()
2696 usb_queue_reset_device(tp->intf); in rtl8152_tx_timeout()
2704 set_bit(RTL8152_SET_RX_MODE, &tp->flags); in rtl8152_set_rx_mode()
2705 schedule_delayed_work(&tp->schedule, 0); in rtl8152_set_rx_mode()
2721 if (netdev->flags & IFF_PROMISC) { in _rtl8152_set_rx_mode()
2728 (netdev->flags & IFF_ALLMULTI)) { in _rtl8152_set_rx_mode()
2729 /* Too many to filter perfectly -- accept all multicasts. */ in _rtl8152_set_rx_mode()
2739 int bit_nr = ether_crc(ETH_ALEN, ha->addr) >> 26; in _rtl8152_set_rx_mode()
2741 mc_filter[bit_nr >> 5] |= 1 << (bit_nr & 31); in _rtl8152_set_rx_mode()
2758 u32 mss = skb_shinfo(skb)->gso_size; in rtl8152_features_check()
2762 if ((mss || skb->ip_summed == CHECKSUM_PARTIAL) && offset > max_offset) in rtl8152_features_check()
2764 else if ((skb->len + sizeof(struct tx_desc)) > agg_buf_sz) in rtl8152_features_check()
2777 skb_queue_tail(&tp->tx_queue, skb); in rtl8152_start_xmit()
2779 if (!list_empty(&tp->tx_free)) { in rtl8152_start_xmit()
2780 if (test_bit(SELECTIVE_SUSPEND, &tp->flags)) { in rtl8152_start_xmit()
2781 set_bit(SCHEDULE_TASKLET, &tp->flags); in rtl8152_start_xmit()
2782 schedule_delayed_work(&tp->schedule, 0); in rtl8152_start_xmit()
2784 usb_mark_last_busy(tp->udev); in rtl8152_start_xmit()
2785 tasklet_schedule(&tp->tx_tl); in rtl8152_start_xmit()
2787 } else if (skb_queue_len(&tp->tx_queue) > tp->tx_qlen) { in rtl8152_start_xmit()
2810 switch (tp->version) { in rtl8152_nic_reset()
2853 tp->tx_qlen = agg_buf_sz / (mtu_to_size(tp->netdev->mtu) + sizeof(struct tx_desc)); in set_tx_qlen()
2902 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_start_rx()
2904 INIT_LIST_HEAD(&tp->rx_done); in rtl_start_rx()
2905 INIT_LIST_HEAD(&tp->rx_used); in rtl_start_rx()
2907 list_splice_init(&tp->rx_info, &tmp_list); in rtl_start_rx()
2909 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_start_rx()
2912 INIT_LIST_HEAD(&agg->list); in rtl_start_rx()
2916 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_start_rx()
2917 list_add_tail(&agg->list, &tp->rx_used); in rtl_start_rx()
2918 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_start_rx()
2920 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_start_rx()
2921 list_add_tail(&agg->list, &tp->rx_done); in rtl_start_rx()
2922 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_start_rx()
2928 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_start_rx()
2929 WARN_ON(!list_empty(&tp->rx_info)); in rtl_start_rx()
2930 list_splice(&tmp_list, &tp->rx_info); in rtl_start_rx()
2931 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_start_rx()
2950 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_stop_rx()
2951 list_splice_init(&tp->rx_info, &tmp_list); in rtl_stop_rx()
2952 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_stop_rx()
2958 if (page_count(agg->page) > 1) in rtl_stop_rx()
2961 usb_kill_urb(agg->urb); in rtl_stop_rx()
2965 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_stop_rx()
2966 WARN_ON(!list_empty(&tp->rx_info)); in rtl_stop_rx()
2967 list_splice(&tmp_list, &tp->rx_info); in rtl_stop_rx()
2968 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_stop_rx()
2970 while (!skb_queue_empty(&tp->rx_queue)) in rtl_stop_rx()
2971 dev_kfree_skb(__skb_dequeue(&tp->rx_queue)); in rtl_stop_rx()
3015 switch (tp->version) { in rtl_enable()
3032 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8152_enable()
3033 return -ENODEV; in rtl8152_enable()
3043 u32 ocp_data = tp->coalesce / 8; in r8153_set_rx_early_timeout()
3045 switch (tp->version) { in r8153_set_rx_early_timeout()
3085 u32 ocp_data = tp->rx_buf_sz - rx_reserved_size(tp->netdev->mtu); in r8153_set_rx_early_size()
3087 switch (tp->version) { in r8153_set_rx_early_size()
3121 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8153_enable()
3122 return -ENODEV; in rtl8153_enable()
3131 switch (tp->version) { in rtl8153_enable()
3153 if (test_bit(RTL8152_UNPLUG, &tp->flags)) { in rtl_disable()
3165 usb_kill_urb(tp->tx_info[i].urb); in rtl_disable()
3207 switch (tp->version) { in rtl_rx_vlan_en()
3246 netdev_features_t changed = features ^ dev->features; in rtl8152_set_features()
3250 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_features()
3254 mutex_lock(&tp->control); in rtl8152_set_features()
3263 mutex_unlock(&tp->control); in rtl8152_set_features()
3265 usb_autopm_put_interface(tp->intf); in rtl8152_set_features()
3328 device_set_wakeup_enable(&tp->udev->dev, true); in __rtl_set_wol()
3330 device_set_wakeup_enable(&tp->udev->dev, false); in __rtl_set_wol()
3408 if (tp->ups_info.green) in r8153b_ups_flags()
3411 if (tp->ups_info.aldps) in r8153b_ups_flags()
3414 if (tp->ups_info.eee) in r8153b_ups_flags()
3417 if (tp->ups_info.flow_control) in r8153b_ups_flags()
3420 if (tp->ups_info.eee_ckdiv) in r8153b_ups_flags()
3423 if (tp->ups_info.eee_cmod_lv) in r8153b_ups_flags()
3426 if (tp->ups_info.r_tune) in r8153b_ups_flags()
3429 if (tp->ups_info._10m_ckdiv) in r8153b_ups_flags()
3432 if (tp->ups_info.eee_plloff_100) in r8153b_ups_flags()
3435 if (tp->ups_info.eee_plloff_giga) in r8153b_ups_flags()
3438 if (tp->ups_info._250m_ckdiv) in r8153b_ups_flags()
3441 if (tp->ups_info.ctap_short_off) in r8153b_ups_flags()
3444 switch (tp->ups_info.speed_duplex) { in r8153b_ups_flags()
3458 ups_flags |= ups_flags_speed(5); in r8153b_ups_flags()
3483 if (tp->ups_info.green) in r8156_ups_flags()
3486 if (tp->ups_info.aldps) in r8156_ups_flags()
3489 if (tp->ups_info.eee) in r8156_ups_flags()
3492 if (tp->ups_info.flow_control) in r8156_ups_flags()
3495 if (tp->ups_info.eee_ckdiv) in r8156_ups_flags()
3498 if (tp->ups_info._10m_ckdiv) in r8156_ups_flags()
3501 if (tp->ups_info.eee_plloff_100) in r8156_ups_flags()
3504 if (tp->ups_info.eee_plloff_giga) in r8156_ups_flags()
3507 if (tp->ups_info._250m_ckdiv) in r8156_ups_flags()
3510 switch (tp->ups_info.speed_duplex) { in r8156_ups_flags()
3527 ups_flags |= ups_flags_speed(5); in r8156_ups_flags()
3545 switch (tp->ups_info.lite_mode) { in r8156_ups_flags()
3547 ups_flags |= 0 << 5; in r8156_ups_flags()
3550 ups_flags |= 2 << 5; in r8156_ups_flags()
3554 ups_flags |= 1 << 5; in r8156_ups_flags()
3572 tp->ups_info.green = enable; in rtl_green_en()
3607 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8153_phy_status()
3645 tp->rtl_ops.hw_phy_cfg(tp); in r8153b_ups_en()
3647 rtl8152_set_speed(tp, tp->autoneg, tp->speed, in r8153b_ups_en()
3648 tp->duplex, tp->advertising); in r8153b_ups_en()
3685 tp->rtl_ops.hw_phy_cfg(tp); in r8153c_ups_en()
3687 rtl8152_set_speed(tp, tp->autoneg, tp->speed, in r8153c_ups_en()
3688 tp->duplex, tp->advertising); in r8153c_ups_en()
3715 switch (tp->version) { in r8156_ups_en()
3734 tp->rtl_ops.hw_phy_cfg(tp); in r8156_ups_en()
3736 rtl8152_set_speed(tp, tp->autoneg, tp->speed, in r8156_ups_en()
3737 tp->duplex, tp->advertising); in r8156_ups_en()
3796 struct usb_device *udev = tp->udev; in rtl_can_wakeup()
3798 return (udev->actconfig->desc.bmAttributes & USB_CONFIG_ATT_WAKEUP); in rtl_can_wakeup()
3818 __rtl_set_wol(tp, tp->saved_wolopts); in rtl_runtime_suspend_enable()
3839 switch (tp->version) { in rtl8153_runtime_enable()
3866 if (tp->udev->speed >= USB_SPEED_SUPER) in rtl8153b_runtime_enable()
3898 if (tp->udev->speed >= USB_SPEED_SUPER) in rtl8156_runtime_enable()
3907 switch (tp->version) { in r8153_teredo_off()
3957 switch (tp->version) { in rtl_clear_bp()
4045 dev_err(&tp->intf->dev, "PHY patch request fail\n"); in rtl_phy_patch_request()
4047 return -ETIME; in rtl_phy_patch_request()
4077 return -ETIME; in rtl_pre_ram_code()
4090 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, tp->ocp_base); in rtl_post_ram_code()
4101 switch (tp->version) { in rtl8152_is_fw_phy_speed_up_ok()
4122 fw_offset = __le16_to_cpu(phy->fw_offset); in rtl8152_is_fw_phy_speed_up_ok()
4123 length = __le32_to_cpu(phy->blk_hdr.length); in rtl8152_is_fw_phy_speed_up_ok()
4125 dev_err(&tp->intf->dev, "invalid fw_offset\n"); in rtl8152_is_fw_phy_speed_up_ok()
4129 length -= fw_offset; in rtl8152_is_fw_phy_speed_up_ok()
4131 dev_err(&tp->intf->dev, "invalid block length\n"); in rtl8152_is_fw_phy_speed_up_ok()
4135 if (__le16_to_cpu(phy->fw_reg) != 0x9A00) { in rtl8152_is_fw_phy_speed_up_ok()
4136 dev_err(&tp->intf->dev, "invalid register to load firmware\n"); in rtl8152_is_fw_phy_speed_up_ok()
4149 switch (tp->version) { in rtl8152_is_fw_phy_ver_ok()
4160 if (__le32_to_cpu(ver->blk_hdr.length) != sizeof(*ver)) { in rtl8152_is_fw_phy_ver_ok()
4161 dev_err(&tp->intf->dev, "invalid block length\n"); in rtl8152_is_fw_phy_ver_ok()
4165 if (__le16_to_cpu(ver->ver.addr) != SRAM_GPHY_FW_VER) { in rtl8152_is_fw_phy_ver_ok()
4166 dev_err(&tp->intf->dev, "invalid phy ver addr\n"); in rtl8152_is_fw_phy_ver_ok()
4179 switch (tp->version) { in rtl8152_is_fw_phy_fixup_ok()
4190 if (__le32_to_cpu(fix->blk_hdr.length) != sizeof(*fix)) { in rtl8152_is_fw_phy_fixup_ok()
4191 dev_err(&tp->intf->dev, "invalid block length\n"); in rtl8152_is_fw_phy_fixup_ok()
4195 if (__le16_to_cpu(fix->setting.addr) != OCP_PHY_PATCH_CMD || in rtl8152_is_fw_phy_fixup_ok()
4196 __le16_to_cpu(fix->setting.data) != BIT(7)) { in rtl8152_is_fw_phy_fixup_ok()
4197 dev_err(&tp->intf->dev, "invalid phy fixup\n"); in rtl8152_is_fw_phy_fixup_ok()
4212 switch (tp->version) { in rtl8152_is_fw_phy_union_ok()
4223 fw_offset = __le16_to_cpu(phy->fw_offset); in rtl8152_is_fw_phy_union_ok()
4224 length = __le32_to_cpu(phy->blk_hdr.length); in rtl8152_is_fw_phy_union_ok()
4226 dev_err(&tp->intf->dev, "invalid fw_offset\n"); in rtl8152_is_fw_phy_union_ok()
4230 length -= fw_offset; in rtl8152_is_fw_phy_union_ok()
4232 dev_err(&tp->intf->dev, "invalid block length\n"); in rtl8152_is_fw_phy_union_ok()
4236 if (phy->pre_num > 2) { in rtl8152_is_fw_phy_union_ok()
4237 dev_err(&tp->intf->dev, "invalid pre_num %d\n", phy->pre_num); in rtl8152_is_fw_phy_union_ok()
4241 if (phy->bp_num > 8) { in rtl8152_is_fw_phy_union_ok()
4242 dev_err(&tp->intf->dev, "invalid bp_num %d\n", phy->bp_num); in rtl8152_is_fw_phy_union_ok()
4257 switch (tp->version) { in rtl8152_is_fw_phy_nc_ok()
4271 fw_offset = __le16_to_cpu(phy->fw_offset); in rtl8152_is_fw_phy_nc_ok()
4273 dev_err(&tp->intf->dev, "fw_offset too small\n"); in rtl8152_is_fw_phy_nc_ok()
4277 length = __le32_to_cpu(phy->blk_hdr.length); in rtl8152_is_fw_phy_nc_ok()
4279 dev_err(&tp->intf->dev, "invalid fw_offset\n"); in rtl8152_is_fw_phy_nc_ok()
4283 length -= __le16_to_cpu(phy->fw_offset); in rtl8152_is_fw_phy_nc_ok()
4285 dev_err(&tp->intf->dev, "invalid block length\n"); in rtl8152_is_fw_phy_nc_ok()
4289 if (__le16_to_cpu(phy->fw_reg) != fw_reg) { in rtl8152_is_fw_phy_nc_ok()
4290 dev_err(&tp->intf->dev, "invalid register to load firmware\n"); in rtl8152_is_fw_phy_nc_ok()
4294 if (__le16_to_cpu(phy->ba_reg) != ba_reg) { in rtl8152_is_fw_phy_nc_ok()
4295 dev_err(&tp->intf->dev, "invalid base address register\n"); in rtl8152_is_fw_phy_nc_ok()
4299 if (__le16_to_cpu(phy->patch_en_addr) != patch_en_addr) { in rtl8152_is_fw_phy_nc_ok()
4300 dev_err(&tp->intf->dev, in rtl8152_is_fw_phy_nc_ok()
4305 if (__le16_to_cpu(phy->mode_reg) != mode_reg) { in rtl8152_is_fw_phy_nc_ok()
4306 dev_err(&tp->intf->dev, in rtl8152_is_fw_phy_nc_ok()
4311 if (__le16_to_cpu(phy->bp_start) != bp_start) { in rtl8152_is_fw_phy_nc_ok()
4312 dev_err(&tp->intf->dev, in rtl8152_is_fw_phy_nc_ok()
4317 if (__le16_to_cpu(phy->bp_num) > 4) { in rtl8152_is_fw_phy_nc_ok()
4318 dev_err(&tp->intf->dev, "invalid break point number\n"); in rtl8152_is_fw_phy_nc_ok()
4334 type = __le32_to_cpu(mac->blk_hdr.type); in rtl8152_is_fw_mac_ok()
4336 switch (tp->version) { in rtl8152_is_fw_mac_ok()
4373 switch (tp->version) { in rtl8152_is_fw_mac_ok()
4407 fw_offset = __le16_to_cpu(mac->fw_offset); in rtl8152_is_fw_mac_ok()
4409 dev_err(&tp->intf->dev, "fw_offset too small\n"); in rtl8152_is_fw_mac_ok()
4413 length = __le32_to_cpu(mac->blk_hdr.length); in rtl8152_is_fw_mac_ok()
4415 dev_err(&tp->intf->dev, "invalid fw_offset\n"); in rtl8152_is_fw_mac_ok()
4419 length -= fw_offset; in rtl8152_is_fw_mac_ok()
4421 dev_err(&tp->intf->dev, "invalid block length\n"); in rtl8152_is_fw_mac_ok()
4425 if (__le16_to_cpu(mac->fw_reg) != fw_reg) { in rtl8152_is_fw_mac_ok()
4426 dev_err(&tp->intf->dev, "invalid register to load firmware\n"); in rtl8152_is_fw_mac_ok()
4430 if (__le16_to_cpu(mac->bp_ba_addr) != bp_ba_addr) { in rtl8152_is_fw_mac_ok()
4431 dev_err(&tp->intf->dev, "invalid base address register\n"); in rtl8152_is_fw_mac_ok()
4435 if (__le16_to_cpu(mac->bp_en_addr) != bp_en_addr) { in rtl8152_is_fw_mac_ok()
4436 dev_err(&tp->intf->dev, "invalid enabled mask register\n"); in rtl8152_is_fw_mac_ok()
4440 if (__le16_to_cpu(mac->bp_start) != bp_start) { in rtl8152_is_fw_mac_ok()
4441 dev_err(&tp->intf->dev, in rtl8152_is_fw_mac_ok()
4446 if (__le16_to_cpu(mac->bp_num) > max_bp) { in rtl8152_is_fw_mac_ok()
4447 dev_err(&tp->intf->dev, "invalid break point number\n"); in rtl8152_is_fw_mac_ok()
4451 for (i = __le16_to_cpu(mac->bp_num); i < max_bp; i++) { in rtl8152_is_fw_mac_ok()
4452 if (mac->bp[i]) { in rtl8152_is_fw_mac_ok()
4453 dev_err(&tp->intf->dev, "unused bp%u is not zero\n", i); in rtl8152_is_fw_mac_ok()
4470 unsigned char checksum[sizeof(fw_hdr->checksum)]; in rtl8152_fw_verify_checksum()
4482 if (crypto_shash_digestsize(alg) != sizeof(fw_hdr->checksum)) { in rtl8152_fw_verify_checksum()
4483 rc = -EFAULT; in rtl8152_fw_verify_checksum()
4484 dev_err(&tp->intf->dev, "digestsize incorrect (%u)\n", in rtl8152_fw_verify_checksum()
4492 rc = -ENOMEM; in rtl8152_fw_verify_checksum()
4495 sdesc->tfm = alg; in rtl8152_fw_verify_checksum()
4497 len = size - sizeof(fw_hdr->checksum); in rtl8152_fw_verify_checksum()
4498 rc = crypto_shash_digest(sdesc, fw_hdr->version, len, checksum); in rtl8152_fw_verify_checksum()
4503 if (memcmp(fw_hdr->checksum, checksum, sizeof(fw_hdr->checksum))) { in rtl8152_fw_verify_checksum()
4504 dev_err(&tp->intf->dev, "checksum fail\n"); in rtl8152_fw_verify_checksum()
4505 rc = -EFAULT; in rtl8152_fw_verify_checksum()
4516 const struct firmware *fw = rtl_fw->fw; in rtl8152_check_firmware()
4517 struct fw_header *fw_hdr = (struct fw_header *)fw->data; in rtl8152_check_firmware()
4519 long ret = -EFAULT; in rtl8152_check_firmware()
4522 if (fw->size < sizeof(*fw_hdr)) { in rtl8152_check_firmware()
4523 dev_err(&tp->intf->dev, "file too small\n"); in rtl8152_check_firmware()
4527 ret = rtl8152_fw_verify_checksum(tp, fw_hdr, fw->size); in rtl8152_check_firmware()
4531 ret = -EFAULT; in rtl8152_check_firmware()
4533 for (i = sizeof(*fw_hdr); i < fw->size;) { in rtl8152_check_firmware()
4534 struct fw_block *block = (struct fw_block *)&fw->data[i]; in rtl8152_check_firmware()
4537 if ((i + sizeof(*block)) > fw->size) in rtl8152_check_firmware()
4540 type = __le32_to_cpu(block->type); in rtl8152_check_firmware()
4543 if (__le32_to_cpu(block->length) != sizeof(*block)) in rtl8152_check_firmware()
4548 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4554 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4562 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4568 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4582 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4587 if (__le32_to_cpu(block->length) != sizeof(struct fw_phy_patch_key)) { in rtl8152_check_firmware()
4588 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4597 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4602 if (__le32_to_cpu(block->length) != sizeof(*block)) { in rtl8152_check_firmware()
4603 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4612 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4618 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4624 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4637 dev_err(&tp->intf->dev, "PHY_UNION_NC out of order\n"); in rtl8152_check_firmware()
4642 dev_err(&tp->intf->dev, "multiple PHY_UNION_NC encountered\n"); in rtl8152_check_firmware()
4647 dev_err(&tp->intf->dev, "check PHY_UNION_NC failed\n"); in rtl8152_check_firmware()
4658 dev_err(&tp->intf->dev, "PHY_UNION_NC1 out of order\n"); in rtl8152_check_firmware()
4663 dev_err(&tp->intf->dev, "multiple PHY NC1 encountered\n"); in rtl8152_check_firmware()
4668 dev_err(&tp->intf->dev, "check PHY_UNION_NC1 failed\n"); in rtl8152_check_firmware()
4678 dev_err(&tp->intf->dev, "PHY_UNION_NC2 out of order\n"); in rtl8152_check_firmware()
4683 dev_err(&tp->intf->dev, "multiple PHY NC2 encountered\n"); in rtl8152_check_firmware()
4688 dev_err(&tp->intf->dev, "check PHY_UNION_NC2 failed\n"); in rtl8152_check_firmware()
4697 dev_err(&tp->intf->dev, "PHY_UNION_UC2 out of order\n"); in rtl8152_check_firmware()
4702 dev_err(&tp->intf->dev, "multiple PHY UC2 encountered\n"); in rtl8152_check_firmware()
4707 dev_err(&tp->intf->dev, "check PHY_UNION_UC2 failed\n"); in rtl8152_check_firmware()
4715 dev_err(&tp->intf->dev, "PHY_UNION_UC out of order\n"); in rtl8152_check_firmware()
4720 dev_err(&tp->intf->dev, "multiple PHY UC encountered\n"); in rtl8152_check_firmware()
4725 dev_err(&tp->intf->dev, "check PHY_UNION_UC failed\n"); in rtl8152_check_firmware()
4732 dev_err(&tp->intf->dev, "check RTL_FW_PHY_UNION_MISC failed\n"); in rtl8152_check_firmware()
4738 dev_err(&tp->intf->dev, "check PHY fixup failed\n"); in rtl8152_check_firmware()
4744 dev_err(&tp->intf->dev, "multiple PHY firmware encountered"); in rtl8152_check_firmware()
4749 dev_err(&tp->intf->dev, "check PHY speed up failed\n"); in rtl8152_check_firmware()
4762 dev_err(&tp->intf->dev, "Invalid order to set PHY version\n"); in rtl8152_check_firmware()
4767 dev_err(&tp->intf->dev, "multiple PHY version encountered"); in rtl8152_check_firmware()
4772 dev_err(&tp->intf->dev, "check PHY version failed\n"); in rtl8152_check_firmware()
4778 dev_warn(&tp->intf->dev, "Unknown type %u is found\n", in rtl8152_check_firmware()
4784 i += ALIGN(__le32_to_cpu(block->length), 8); in rtl8152_check_firmware()
4789 dev_err(&tp->intf->dev, "without PHY_STOP\n"); in rtl8152_check_firmware()
4803 if (sram_read(tp, SRAM_GPHY_FW_VER) >= __le16_to_cpu(phy->version)) { in rtl_ram_code_speed_up()
4804 dev_dbg(&tp->intf->dev, "PHY firmware has been the newest\n"); in rtl_ram_code_speed_up()
4808 len = __le32_to_cpu(phy->blk_hdr.length); in rtl_ram_code_speed_up()
4809 len -= __le16_to_cpu(phy->fw_offset); in rtl_ram_code_speed_up()
4810 data = (u8 *)phy + __le16_to_cpu(phy->fw_offset); in rtl_ram_code_speed_up()
4828 generic_ocp_write(tp, __le16_to_cpu(phy->fw_reg), 0xff, size, data, MCU_TYPE_USB); in rtl_ram_code_speed_up()
4831 len -= size; in rtl_ram_code_speed_up()
4843 dev_err(&tp->intf->dev, "ram code speedup mode timeout\n"); in rtl_ram_code_speed_up()
4848 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, tp->ocp_base); in rtl_ram_code_speed_up()
4851 if (sram_read(tp, SRAM_GPHY_FW_VER) == __le16_to_cpu(phy->version)) in rtl_ram_code_speed_up()
4852 dev_dbg(&tp->intf->dev, "successfully applied %s\n", phy->info); in rtl_ram_code_speed_up()
4854 dev_err(&tp->intf->dev, "ram code speedup mode fail\n"); in rtl_ram_code_speed_up()
4861 ver_addr = __le16_to_cpu(phy_ver->ver.addr); in rtl8152_fw_phy_ver()
4862 ver = __le16_to_cpu(phy_ver->ver.data); in rtl8152_fw_phy_ver()
4865 dev_dbg(&tp->intf->dev, "PHY firmware has been the newest\n"); in rtl8152_fw_phy_ver()
4871 dev_dbg(&tp->intf->dev, "PHY firmware version %x\n", ver); in rtl8152_fw_phy_ver()
4880 addr = __le16_to_cpu(fix->setting.addr); in rtl8152_fw_phy_fixup()
4883 switch (__le16_to_cpu(fix->bit_cmd)) { in rtl8152_fw_phy_fixup()
4885 data &= __le16_to_cpu(fix->setting.data); in rtl8152_fw_phy_fixup()
4888 data |= __le16_to_cpu(fix->setting.data); in rtl8152_fw_phy_fixup()
4891 data &= ~__le16_to_cpu(fix->setting.data); in rtl8152_fw_phy_fixup()
4894 data ^= __le16_to_cpu(fix->setting.data); in rtl8152_fw_phy_fixup()
4902 dev_dbg(&tp->intf->dev, "applied ocp %x %x\n", addr, data); in rtl8152_fw_phy_fixup()
4911 num = phy->pre_num; in rtl8152_fw_phy_union_apply()
4913 sram_write(tp, __le16_to_cpu(phy->pre_set[i].addr), in rtl8152_fw_phy_union_apply()
4914 __le16_to_cpu(phy->pre_set[i].data)); in rtl8152_fw_phy_union_apply()
4916 length = __le32_to_cpu(phy->blk_hdr.length); in rtl8152_fw_phy_union_apply()
4917 length -= __le16_to_cpu(phy->fw_offset); in rtl8152_fw_phy_union_apply()
4919 data = (__le16 *)((u8 *)phy + __le16_to_cpu(phy->fw_offset)); in rtl8152_fw_phy_union_apply()
4921 ocp_reg_write(tp, OCP_SRAM_ADDR, __le16_to_cpu(phy->fw_reg)); in rtl8152_fw_phy_union_apply()
4925 num = phy->bp_num; in rtl8152_fw_phy_union_apply()
4927 sram_write(tp, __le16_to_cpu(phy->bp[i].addr), __le16_to_cpu(phy->bp[i].data)); in rtl8152_fw_phy_union_apply()
4929 if (phy->bp_num && phy->bp_en.addr) in rtl8152_fw_phy_union_apply()
4930 sram_write(tp, __le16_to_cpu(phy->bp_en.addr), __le16_to_cpu(phy->bp_en.data)); in rtl8152_fw_phy_union_apply()
4932 dev_dbg(&tp->intf->dev, "successfully applied %s\n", phy->info); in rtl8152_fw_phy_union_apply()
4941 mode_reg = __le16_to_cpu(phy->mode_reg); in rtl8152_fw_phy_nc_apply()
4942 sram_write(tp, mode_reg, __le16_to_cpu(phy->mode_pre)); in rtl8152_fw_phy_nc_apply()
4943 sram_write(tp, __le16_to_cpu(phy->ba_reg), in rtl8152_fw_phy_nc_apply()
4944 __le16_to_cpu(phy->ba_data)); in rtl8152_fw_phy_nc_apply()
4946 length = __le32_to_cpu(phy->blk_hdr.length); in rtl8152_fw_phy_nc_apply()
4947 length -= __le16_to_cpu(phy->fw_offset); in rtl8152_fw_phy_nc_apply()
4949 data = (__le16 *)((u8 *)phy + __le16_to_cpu(phy->fw_offset)); in rtl8152_fw_phy_nc_apply()
4951 ocp_reg_write(tp, OCP_SRAM_ADDR, __le16_to_cpu(phy->fw_reg)); in rtl8152_fw_phy_nc_apply()
4955 sram_write(tp, __le16_to_cpu(phy->patch_en_addr), in rtl8152_fw_phy_nc_apply()
4956 __le16_to_cpu(phy->patch_en_value)); in rtl8152_fw_phy_nc_apply()
4958 bp_index = __le16_to_cpu(phy->bp_start); in rtl8152_fw_phy_nc_apply()
4959 num = __le16_to_cpu(phy->bp_num); in rtl8152_fw_phy_nc_apply()
4961 sram_write(tp, bp_index, __le16_to_cpu(phy->bp[i])); in rtl8152_fw_phy_nc_apply()
4965 sram_write(tp, mode_reg, __le16_to_cpu(phy->mode_post)); in rtl8152_fw_phy_nc_apply()
4967 dev_dbg(&tp->intf->dev, "successfully applied %s\n", phy->info); in rtl8152_fw_phy_nc_apply()
4977 switch (__le32_to_cpu(mac->blk_hdr.type)) { in rtl8152_fw_mac_apply()
4988 fw_ver_reg = __le16_to_cpu(mac->fw_ver_reg); in rtl8152_fw_mac_apply()
4989 if (fw_ver_reg && ocp_read_byte(tp, MCU_TYPE_USB, fw_ver_reg) >= mac->fw_ver_data) { in rtl8152_fw_mac_apply()
4990 dev_dbg(&tp->intf->dev, "%s firmware has been the newest\n", type ? "PLA" : "USB"); in rtl8152_fw_mac_apply()
4999 if (tp->version == RTL_VER_04 && type == MCU_TYPE_PLA && in rtl8152_fw_mac_apply()
5005 length = __le32_to_cpu(mac->blk_hdr.length); in rtl8152_fw_mac_apply()
5006 length -= __le16_to_cpu(mac->fw_offset); in rtl8152_fw_mac_apply()
5009 data += __le16_to_cpu(mac->fw_offset); in rtl8152_fw_mac_apply()
5011 generic_ocp_write(tp, __le16_to_cpu(mac->fw_reg), 0xff, length, data, in rtl8152_fw_mac_apply()
5014 ocp_write_word(tp, type, __le16_to_cpu(mac->bp_ba_addr), in rtl8152_fw_mac_apply()
5015 __le16_to_cpu(mac->bp_ba_value)); in rtl8152_fw_mac_apply()
5017 bp_index = __le16_to_cpu(mac->bp_start); in rtl8152_fw_mac_apply()
5018 bp_num = __le16_to_cpu(mac->bp_num); in rtl8152_fw_mac_apply()
5020 ocp_write_word(tp, type, bp_index, __le16_to_cpu(mac->bp[i])); in rtl8152_fw_mac_apply()
5024 bp_en_addr = __le16_to_cpu(mac->bp_en_addr); in rtl8152_fw_mac_apply()
5027 __le16_to_cpu(mac->bp_en_value)); in rtl8152_fw_mac_apply()
5031 mac->fw_ver_data); in rtl8152_fw_mac_apply()
5033 dev_dbg(&tp->intf->dev, "successfully applied %s\n", mac->info); in rtl8152_fw_mac_apply()
5038 struct rtl_fw *rtl_fw = &tp->rtl_fw; in rtl8152_apply_firmware()
5045 if (IS_ERR_OR_NULL(rtl_fw->fw)) in rtl8152_apply_firmware()
5048 fw = rtl_fw->fw; in rtl8152_apply_firmware()
5049 fw_hdr = (struct fw_header *)fw->data; in rtl8152_apply_firmware()
5051 if (rtl_fw->pre_fw) in rtl8152_apply_firmware()
5052 rtl_fw->pre_fw(tp); in rtl8152_apply_firmware()
5054 for (i = offsetof(struct fw_header, blocks); i < fw->size;) { in rtl8152_apply_firmware()
5055 struct fw_block *block = (struct fw_block *)&fw->data[i]; in rtl8152_apply_firmware()
5057 switch (__le32_to_cpu(block->type)) { in rtl8152_apply_firmware()
5068 key_addr = __le16_to_cpu(key->key_reg); in rtl8152_apply_firmware()
5069 rtl_pre_ram_code(tp, key_addr, __le16_to_cpu(key->key_data), !power_cut); in rtl8152_apply_firmware()
5103 i += ALIGN(__le32_to_cpu(block->length), 8); in rtl8152_apply_firmware()
5107 if (rtl_fw->post_fw) in rtl8152_apply_firmware()
5108 rtl_fw->post_fw(tp); in rtl8152_apply_firmware()
5110 strscpy(rtl_fw->version, fw_hdr->version, RTL_VER_SIZE); in rtl8152_apply_firmware()
5111 dev_info(&tp->intf->dev, "load %s successfully\n", rtl_fw->version); in rtl8152_apply_firmware()
5116 struct rtl_fw *rtl_fw = &tp->rtl_fw; in rtl8152_release_firmware()
5118 if (!IS_ERR_OR_NULL(rtl_fw->fw)) { in rtl8152_release_firmware()
5119 release_firmware(rtl_fw->fw); in rtl8152_release_firmware()
5120 rtl_fw->fw = NULL; in rtl8152_release_firmware()
5126 struct rtl_fw *rtl_fw = &tp->rtl_fw; in rtl8152_request_firmware()
5129 if (rtl_fw->fw || !rtl_fw->fw_name) { in rtl8152_request_firmware()
5130 dev_info(&tp->intf->dev, "skip request firmware\n"); in rtl8152_request_firmware()
5135 rc = request_firmware(&rtl_fw->fw, rtl_fw->fw_name, &tp->intf->dev); in rtl8152_request_firmware()
5141 release_firmware(rtl_fw->fw); in rtl8152_request_firmware()
5145 rtl_fw->fw = ERR_PTR(rc); in rtl8152_request_firmware()
5147 dev_warn(&tp->intf->dev, in rtl8152_request_firmware()
5149 rtl_fw->fw_name, rc); in rtl8152_request_firmware()
5242 tp->ups_info.eee = enable; in r8153_eee_en()
5263 switch (tp->version) { in rtl_eee_enable()
5270 tp->eee_adv); in rtl_eee_enable()
5285 ocp_reg_write(tp, OCP_EEE_ADV, tp->eee_adv); in rtl_eee_enable()
5298 ocp_reg_write(tp, OCP_EEE_ADV, tp->eee_adv); in rtl_eee_enable()
5317 tp->ups_info.flow_control = true; in r8152b_enable_fc()
5330 rtl_eee_enable(tp, tp->eee_en); in r8152b_hw_phy_cfg()
5334 set_bit(PHY_RESET, &tp->flags); in r8152b_hw_phy_cfg()
5398 if (tp->udev->speed == USB_SPEED_FULL || in r8152b_exit_oob()
5399 tp->udev->speed == USB_SPEED_LOW) { in r8152b_exit_oob()
5421 rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX); in r8152b_exit_oob()
5568 /* enable bp0 for RTL8153-BND */ in r8153b_post_firmware_1()
5641 tp->ups_info.aldps = enable; in r8153_aldps_en()
5657 if (tp->version == RTL_VER_03) { in r8153_hw_phy_cfg()
5686 if (tp->eee_en) in r8153_hw_phy_cfg()
5692 switch (tp->version) { in r8153_hw_phy_cfg()
5703 set_bit(PHY_RESET, &tp->flags); in r8153_hw_phy_cfg()
5755 r8153b_green_en(tp, test_bit(GREEN_ETHERNET, &tp->flags)); in r8153b_hw_phy_cfg()
5765 * read efuse offset 0x7d to get a 17-bit data. Remove the dummy/fake in r8153b_hw_phy_cfg()
5766 * bit (bit3) to rebuild the real 16-bit data. Write the data to the in r8153b_hw_phy_cfg()
5774 /* ups mode tx-link-pulse timing adjustment: in r8153b_hw_phy_cfg()
5798 tp->ups_info.eee_ckdiv = true; in r8153b_hw_phy_cfg()
5803 tp->ups_info.eee_cmod_lv = true; in r8153b_hw_phy_cfg()
5804 tp->ups_info._10m_ckdiv = true; in r8153b_hw_phy_cfg()
5805 tp->ups_info.eee_plloff_giga = true; in r8153b_hw_phy_cfg()
5808 ocp_reg_write(tp, OCP_SYSCLK_CFG, clk_div_expo(5)); in r8153b_hw_phy_cfg()
5809 tp->ups_info._250m_ckdiv = true; in r8153b_hw_phy_cfg()
5814 if (tp->eee_en) in r8153b_hw_phy_cfg()
5820 set_bit(PHY_RESET, &tp->flags); in r8153b_hw_phy_cfg()
5827 tp->ups_info.r_tune = true; in r8153c_hw_phy_cfg()
5832 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, mtu_to_size(tp->netdev->mtu)); in rtl8153_change_mtu()
5866 rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX); in r8153_first_init()
5903 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, mtu_to_size(tp->netdev->mtu)); in r8153_enter_oob()
5905 switch (tp->version) { in r8153_enter_oob()
5959 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8156_enable()
5960 return -ENODEV; in rtl8156_enable()
5982 if (tp->udev->speed == USB_SPEED_HIGH) { in rtl8156_enable()
6001 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8156b_enable()
6002 return -ENODEV; in rtl8156b_enable()
6024 if (tp->udev->speed == USB_SPEED_HIGH) { in rtl8156b_enable()
6052 return -EINVAL; in rtl8152_set_speed()
6059 tp->ups_info.speed_duplex = FORCE_10M_FULL; in rtl8152_set_speed()
6061 tp->ups_info.speed_duplex = FORCE_10M_HALF; in rtl8152_set_speed()
6068 tp->ups_info.speed_duplex = FORCE_100M_FULL; in rtl8152_set_speed()
6070 tp->ups_info.speed_duplex = FORCE_100M_HALF; in rtl8152_set_speed()
6074 if (tp->mii.supports_gmii) { in rtl8152_set_speed()
6076 tp->ups_info.speed_duplex = NWAY_1000M_FULL; in rtl8152_set_speed()
6081 ret = -EINVAL; in rtl8152_set_speed()
6086 tp->mii.full_duplex = 1; in rtl8152_set_speed()
6088 tp->mii.full_duplex = 0; in rtl8152_set_speed()
6090 tp->mii.force_media = 1; in rtl8152_set_speed()
6098 if (tp->mii.supports_gmii) { in rtl8152_set_speed()
6101 if (tp->support_2500full) in rtl8152_set_speed()
6106 return -EINVAL; in rtl8152_set_speed()
6113 tp->ups_info.speed_duplex = NWAY_10M_HALF; in rtl8152_set_speed()
6117 tp->ups_info.speed_duplex = NWAY_10M_FULL; in rtl8152_set_speed()
6122 tp->ups_info.speed_duplex = NWAY_100M_HALF; in rtl8152_set_speed()
6126 tp->ups_info.speed_duplex = NWAY_100M_FULL; in rtl8152_set_speed()
6131 tp->mii.advertising = new1; in rtl8152_set_speed()
6134 if (tp->mii.supports_gmii) { in rtl8152_set_speed()
6141 tp->ups_info.speed_duplex = NWAY_1000M_FULL; in rtl8152_set_speed()
6148 if (tp->support_2500full) { in rtl8152_set_speed()
6154 tp->ups_info.speed_duplex = NWAY_2500M_FULL; in rtl8152_set_speed()
6163 tp->mii.force_media = 0; in rtl8152_set_speed()
6166 if (test_and_clear_bit(PHY_RESET, &tp->flags)) in rtl8152_set_speed()
6187 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8152_up()
6197 if (test_bit(RTL8152_UNPLUG, &tp->flags)) { in rtl8152_down()
6212 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8153_up()
6234 switch (tp->version) { in rtl8153_up()
6252 if (test_bit(RTL8152_UNPLUG, &tp->flags)) { in rtl8153_down()
6273 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8153b_up()
6289 if (tp->udev->speed >= USB_SPEED_SUPER) in rtl8153b_up()
6297 if (test_bit(RTL8152_UNPLUG, &tp->flags)) { in rtl8153b_down()
6316 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, mtu_to_size(tp->netdev->mtu)); in rtl8153c_change_mtu()
6324 if (tp->netdev->mtu < 8000) in rtl8153c_change_mtu()
6334 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8153c_up()
6367 rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX); in rtl8153c_up()
6399 return (ALIGN(mtu_to_size(tp->netdev->mtu), 1024) + 6 * 1024); in fc_pause_on_auto()
6404 return (ALIGN(mtu_to_size(tp->netdev->mtu), 1024) + 14 * 1024); in fc_pause_off_auto()
6409 u32 pause_on = tp->fc_pause_on ? tp->fc_pause_on : fc_pause_on_auto(tp); in r8156_fc_parameter()
6410 u32 pause_off = tp->fc_pause_off ? tp->fc_pause_off : fc_pause_off_auto(tp); in r8156_fc_parameter()
6412 switch (tp->version) { in r8156_fc_parameter()
6431 u32 rx_max_size = mtu_to_size(tp->netdev->mtu); in rtl8156_change_mtu()
6447 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8156_up()
6472 rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX); in rtl8156_up()
6476 switch (tp->version) { in rtl8156_up()
6504 if (tp->saved_wolopts != __rtl_get_wol(tp)) { in rtl8156_up()
6505 netif_warn(tp, ifup, tp->netdev, "wol setting is changed\n"); in rtl8156_up()
6506 __rtl_set_wol(tp, tp->saved_wolopts); in rtl8156_up()
6512 if (tp->udev->speed >= USB_SPEED_SUPER) in rtl8156_up()
6520 if (test_bit(RTL8152_UNPLUG, &tp->flags)) { in rtl8156_down()
6566 tp->ocp_base = 0x2000; in rtl8152_in_nway()
6589 struct net_device *netdev = tp->netdev; in set_carrier()
6590 struct napi_struct *napi = &tp->napi; in set_carrier()
6597 tp->rtl_ops.enable(tp); in set_carrier()
6602 clear_bit(RTL8152_SET_RX_MODE, &tp->flags); in set_carrier()
6608 skb_queue_len(&tp->tx_queue) < tp->tx_qlen) { in set_carrier()
6614 tasklet_disable(&tp->tx_tl); in set_carrier()
6616 tp->rtl_ops.disable(tp); in set_carrier()
6618 tasklet_enable(&tp->tx_tl); in set_carrier()
6631 if (test_bit(RTL8152_UNPLUG, &tp->flags) || !netif_running(tp->netdev)) in rtl_work_func_t()
6634 if (usb_autopm_get_interface(tp->intf) < 0) in rtl_work_func_t()
6637 if (!test_bit(WORK_ENABLE, &tp->flags)) in rtl_work_func_t()
6640 if (!mutex_trylock(&tp->control)) { in rtl_work_func_t()
6641 schedule_delayed_work(&tp->schedule, 0); in rtl_work_func_t()
6645 if (test_and_clear_bit(RTL8152_LINK_CHG, &tp->flags)) in rtl_work_func_t()
6648 if (test_and_clear_bit(RTL8152_SET_RX_MODE, &tp->flags)) in rtl_work_func_t()
6649 _rtl8152_set_rx_mode(tp->netdev); in rtl_work_func_t()
6652 if (test_and_clear_bit(SCHEDULE_TASKLET, &tp->flags) && in rtl_work_func_t()
6653 netif_carrier_ok(tp->netdev)) in rtl_work_func_t()
6654 tasklet_schedule(&tp->tx_tl); in rtl_work_func_t()
6656 if (test_and_clear_bit(RX_EPROTO, &tp->flags) && in rtl_work_func_t()
6657 !list_empty(&tp->rx_done)) in rtl_work_func_t()
6658 napi_schedule(&tp->napi); in rtl_work_func_t()
6660 mutex_unlock(&tp->control); in rtl_work_func_t()
6663 usb_autopm_put_interface(tp->intf); in rtl_work_func_t()
6670 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl_hw_phy_work_func_t()
6673 if (usb_autopm_get_interface(tp->intf) < 0) in rtl_hw_phy_work_func_t()
6676 mutex_lock(&tp->control); in rtl_hw_phy_work_func_t()
6678 if (rtl8152_request_firmware(tp) == -ENODEV && tp->rtl_fw.retry) { in rtl_hw_phy_work_func_t()
6679 tp->rtl_fw.retry = false; in rtl_hw_phy_work_func_t()
6680 tp->rtl_fw.fw = NULL; in rtl_hw_phy_work_func_t()
6684 queue_delayed_work(system_long_wq, &tp->hw_phy_work, HZ * 10); in rtl_hw_phy_work_func_t()
6688 tp->rtl_ops.hw_phy_cfg(tp); in rtl_hw_phy_work_func_t()
6690 rtl8152_set_speed(tp, tp->autoneg, tp->speed, tp->duplex, in rtl_hw_phy_work_func_t()
6691 tp->advertising); in rtl_hw_phy_work_func_t()
6694 mutex_unlock(&tp->control); in rtl_hw_phy_work_func_t()
6696 usb_autopm_put_interface(tp->intf); in rtl_hw_phy_work_func_t()
6708 usb_autopm_get_interface(tp->intf); in rtl_notifier()
6713 usb_autopm_put_interface(tp->intf); in rtl_notifier()
6731 if (work_busy(&tp->hw_phy_work.work) & WORK_BUSY_PENDING) { in rtl8152_open()
6732 cancel_delayed_work_sync(&tp->hw_phy_work); in rtl8152_open()
6733 rtl_hw_phy_work_func_t(&tp->hw_phy_work.work); in rtl8152_open()
6740 res = usb_autopm_get_interface(tp->intf); in rtl8152_open()
6744 mutex_lock(&tp->control); in rtl8152_open()
6746 tp->rtl_ops.up(tp); in rtl8152_open()
6750 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_open()
6752 res = usb_submit_urb(tp->intr_urb, GFP_KERNEL); in rtl8152_open()
6754 if (res == -ENODEV) in rtl8152_open()
6755 netif_device_detach(tp->netdev); in rtl8152_open()
6760 napi_enable(&tp->napi); in rtl8152_open()
6761 tasklet_enable(&tp->tx_tl); in rtl8152_open()
6763 mutex_unlock(&tp->control); in rtl8152_open()
6765 usb_autopm_put_interface(tp->intf); in rtl8152_open()
6767 tp->pm_notifier.notifier_call = rtl_notifier; in rtl8152_open()
6768 register_pm_notifier(&tp->pm_notifier); in rtl8152_open()
6773 mutex_unlock(&tp->control); in rtl8152_open()
6774 usb_autopm_put_interface(tp->intf); in rtl8152_open()
6787 unregister_pm_notifier(&tp->pm_notifier); in rtl8152_close()
6789 tasklet_disable(&tp->tx_tl); in rtl8152_close()
6790 clear_bit(WORK_ENABLE, &tp->flags); in rtl8152_close()
6791 usb_kill_urb(tp->intr_urb); in rtl8152_close()
6792 cancel_delayed_work_sync(&tp->schedule); in rtl8152_close()
6793 napi_disable(&tp->napi); in rtl8152_close()
6796 res = usb_autopm_get_interface(tp->intf); in rtl8152_close()
6797 if (res < 0 || test_bit(RTL8152_UNPLUG, &tp->flags)) { in rtl8152_close()
6801 mutex_lock(&tp->control); in rtl8152_close()
6803 tp->rtl_ops.down(tp); in rtl8152_close()
6805 mutex_unlock(&tp->control); in rtl8152_close()
6809 usb_autopm_put_interface(tp->intf); in rtl8152_close()
6830 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8152b_init()
6841 if (tp->version == RTL_VER_01) { in r8152b_init()
6874 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8153_init()
6885 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8153_init()
6891 if (tp->version == RTL_VER_03 || tp->version == RTL_VER_04 || in r8153_init()
6892 tp->version == RTL_VER_05) in r8153_init()
6905 if (tp->version == RTL_VER_04) { in r8153_init()
6914 } else if (tp->version == RTL_VER_05) { in r8153_init()
6925 } else if (tp->version == RTL_VER_06) { in r8153_init()
6957 if (tp->version == RTL_VER_04 && tp->udev->speed < USB_SPEED_SUPER) in r8153_init()
6974 usb_enable_lpm(tp->udev); in r8153_init()
6987 if (tp->dell_tb_rx_agg_bug) in r8153_init()
6994 switch (tp->udev->speed) { in r8153_init()
6997 tp->coalesce = COALESCE_SUPER; in r8153_init()
7000 tp->coalesce = COALESCE_HIGH; in r8153_init()
7003 tp->coalesce = COALESCE_SLOW; in r8153_init()
7014 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8153b_init()
7025 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8153b_init()
7057 if (tp->udev->speed >= USB_SPEED_SUPER) in r8153b_init()
7060 usb_enable_lpm(tp->udev); in r8153b_init()
7069 if (tp->version == RTL_VER_09) { in r8153b_init()
7071 if (ocp_read_byte(tp, MCU_TYPE_PLA, 0xdc00) & BIT(5)) { in r8153b_init()
7078 set_bit(GREEN_ETHERNET, &tp->flags); in r8153b_init()
7087 tp->coalesce = 15000; /* 15 us */ in r8153b_init()
7096 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8153c_init()
7116 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8153c_init()
7151 usb_enable_lpm(tp->udev); in r8153c_init()
7160 set_bit(GREEN_ETHERNET, &tp->flags); in r8153c_init()
7169 tp->coalesce = 15000; /* 15 us */ in r8153c_init()
7212 switch (tp->version) { in r8156_hw_phy_cfg()
7349 data |= BIT(4) | BIT(5); in r8156_hw_phy_cfg()
7390 tp->ups_info._10m_ckdiv = true; in r8156_hw_phy_cfg()
7391 tp->ups_info.eee_plloff_100 = false; in r8156_hw_phy_cfg()
7392 tp->ups_info.eee_plloff_giga = false; in r8156_hw_phy_cfg()
7397 tp->ups_info.eee_ckdiv = false; in r8156_hw_phy_cfg()
7400 ocp_reg_write(tp, OCP_SYSCLK_CFG, sysclk_div_expo(5)); in r8156_hw_phy_cfg()
7401 tp->ups_info._250m_ckdiv = false; in r8156_hw_phy_cfg()
7497 rtl_green_en(tp, test_bit(GREEN_ETHERNET, &tp->flags)); in r8156_hw_phy_cfg()
7505 tp->ups_info.lite_mode = 0; in r8156_hw_phy_cfg()
7507 if (tp->eee_en) in r8156_hw_phy_cfg()
7514 set_bit(PHY_RESET, &tp->flags); in r8156_hw_phy_cfg()
7522 switch (tp->version) { in r8156b_hw_phy_cfg()
7594 switch (tp->version) { in r8156b_hw_phy_cfg()
7826 data &= ~BIT(5); in r8156b_hw_phy_cfg()
7865 /* Green Table-PGA, 1G full viterbi */ in r8156b_hw_phy_cfg()
7898 tp->ups_info._10m_ckdiv = true; in r8156b_hw_phy_cfg()
7899 tp->ups_info.eee_plloff_100 = false; in r8156b_hw_phy_cfg()
7900 tp->ups_info.eee_plloff_giga = false; in r8156b_hw_phy_cfg()
7905 tp->ups_info.eee_ckdiv = false; in r8156b_hw_phy_cfg()
7909 rtl_green_en(tp, test_bit(GREEN_ETHERNET, &tp->flags)); in r8156b_hw_phy_cfg()
7917 tp->ups_info.lite_mode = 0; in r8156b_hw_phy_cfg()
7919 if (tp->eee_en) in r8156b_hw_phy_cfg()
7926 set_bit(PHY_RESET, &tp->flags); in r8156b_hw_phy_cfg()
7935 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8156_init()
7956 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8156_init()
7989 if (tp->udev->speed >= USB_SPEED_SUPER) in r8156_init()
7992 usb_enable_lpm(tp->udev); in r8156_init()
8008 set_bit(GREEN_ETHERNET, &tp->flags); in r8156_init()
8021 tp->coalesce = 15000; /* 15 us */ in r8156_init()
8030 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8156b_init()
8049 switch (tp->version) { in r8156b_init()
8064 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8156b_init()
8100 if (tp->udev->speed >= USB_SPEED_SUPER) in r8156b_init()
8103 usb_enable_lpm(tp->udev); in r8156b_init()
8141 set_bit(GREEN_ETHERNET, &tp->flags); in r8156b_init()
8150 tp->coalesce = 15000; /* 15 us */ in r8156b_init()
8155 struct usb_host_interface *alt = intf->cur_altsetting; in rtl_check_vendor_ok()
8159 dev_err(&intf->dev, "Expected endpoints are not found\n"); in rtl_check_vendor_ok()
8165 dev_err(&intf->dev, "Invalid Rx endpoint address\n"); in rtl_check_vendor_ok()
8171 dev_err(&intf->dev, "Invalid Tx endpoint address\n"); in rtl_check_vendor_ok()
8177 dev_err(&intf->dev, "Invalid interrupt endpoint address\n"); in rtl_check_vendor_ok()
8186 struct usb_host_interface *alt = intf->cur_altsetting; in rtl_vendor_mode()
8191 if (alt->desc.bInterfaceClass == USB_CLASS_VENDOR_SPEC) in rtl_vendor_mode()
8196 c = udev->config; in rtl_vendor_mode()
8197 num_configs = udev->descriptor.bNumConfigurations; in rtl_vendor_mode()
8204 if (c->desc.bNumInterfaces > 0) in rtl_vendor_mode()
8205 desc = &c->intf_cache[0]->altsetting->desc; in rtl_vendor_mode()
8209 if (desc->bInterfaceClass == USB_CLASS_VENDOR_SPEC) { in rtl_vendor_mode()
8210 usb_driver_set_configuration(udev, c->desc.bConfigurationValue); in rtl_vendor_mode()
8216 dev_err(&intf->dev, "Unexpected Device\n"); in rtl_vendor_mode()
8229 netdev = tp->netdev; in rtl8152_pre_reset()
8234 tasklet_disable(&tp->tx_tl); in rtl8152_pre_reset()
8235 clear_bit(WORK_ENABLE, &tp->flags); in rtl8152_pre_reset()
8236 usb_kill_urb(tp->intr_urb); in rtl8152_pre_reset()
8237 cancel_delayed_work_sync(&tp->schedule); in rtl8152_pre_reset()
8238 napi_disable(&tp->napi); in rtl8152_pre_reset()
8240 mutex_lock(&tp->control); in rtl8152_pre_reset()
8241 tp->rtl_ops.disable(tp); in rtl8152_pre_reset()
8242 mutex_unlock(&tp->control); in rtl8152_pre_reset()
8260 dev_set_mac_address (tp->netdev, &sa, NULL); in rtl8152_post_reset()
8264 netdev = tp->netdev; in rtl8152_post_reset()
8268 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_post_reset()
8270 mutex_lock(&tp->control); in rtl8152_post_reset()
8271 tp->rtl_ops.enable(tp); in rtl8152_post_reset()
8274 mutex_unlock(&tp->control); in rtl8152_post_reset()
8277 napi_enable(&tp->napi); in rtl8152_post_reset()
8278 tasklet_enable(&tp->tx_tl); in rtl8152_post_reset()
8280 usb_submit_urb(tp->intr_urb, GFP_KERNEL); in rtl8152_post_reset()
8282 if (!list_empty(&tp->rx_done)) in rtl8152_post_reset()
8283 napi_schedule(&tp->napi); in rtl8152_post_reset()
8290 bool sw_linking = !!netif_carrier_ok(tp->netdev); in delay_autosuspend()
8297 if (work_busy(&tp->schedule.work) || sw_linking != hw_linking) in delay_autosuspend()
8303 if (!sw_linking && tp->rtl_ops.in_nway(tp)) in delay_autosuspend()
8305 else if (!skb_queue_empty(&tp->tx_queue)) in delay_autosuspend()
8313 struct net_device *netdev = tp->netdev; in rtl8152_runtime_resume()
8315 if (netif_running(netdev) && netdev->flags & IFF_UP) { in rtl8152_runtime_resume()
8316 struct napi_struct *napi = &tp->napi; in rtl8152_runtime_resume()
8318 tp->rtl_ops.autosuspend_en(tp, false); in rtl8152_runtime_resume()
8320 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_runtime_resume()
8327 tp->rtl_ops.disable(tp); in rtl8152_runtime_resume()
8333 clear_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_runtime_resume()
8336 if (!list_empty(&tp->rx_done)) in rtl8152_runtime_resume()
8337 napi_schedule(&tp->napi); in rtl8152_runtime_resume()
8339 usb_submit_urb(tp->intr_urb, GFP_NOIO); in rtl8152_runtime_resume()
8341 if (netdev->flags & IFF_UP) in rtl8152_runtime_resume()
8342 tp->rtl_ops.autosuspend_en(tp, false); in rtl8152_runtime_resume()
8344 clear_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_runtime_resume()
8352 struct net_device *netdev = tp->netdev; in rtl8152_system_resume()
8356 if (netif_running(netdev) && (netdev->flags & IFF_UP)) { in rtl8152_system_resume()
8357 tp->rtl_ops.up(tp); in rtl8152_system_resume()
8359 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_system_resume()
8360 usb_submit_urb(tp->intr_urb, GFP_NOIO); in rtl8152_system_resume()
8368 struct net_device *netdev = tp->netdev; in rtl8152_runtime_suspend()
8371 if (!tp->rtl_ops.autosuspend_en) in rtl8152_runtime_suspend()
8372 return -EBUSY; in rtl8152_runtime_suspend()
8374 set_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_runtime_suspend()
8377 if (netif_running(netdev) && test_bit(WORK_ENABLE, &tp->flags)) { in rtl8152_runtime_suspend()
8392 clear_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_runtime_suspend()
8394 ret = -EBUSY; in rtl8152_runtime_suspend()
8399 clear_bit(WORK_ENABLE, &tp->flags); in rtl8152_runtime_suspend()
8400 usb_kill_urb(tp->intr_urb); in rtl8152_runtime_suspend()
8402 tp->rtl_ops.autosuspend_en(tp, true); in rtl8152_runtime_suspend()
8405 struct napi_struct *napi = &tp->napi; in rtl8152_runtime_suspend()
8416 ret = -EBUSY; in rtl8152_runtime_suspend()
8426 struct net_device *netdev = tp->netdev; in rtl8152_system_suspend()
8430 if (netif_running(netdev) && test_bit(WORK_ENABLE, &tp->flags)) { in rtl8152_system_suspend()
8431 struct napi_struct *napi = &tp->napi; in rtl8152_system_suspend()
8433 clear_bit(WORK_ENABLE, &tp->flags); in rtl8152_system_suspend()
8434 usb_kill_urb(tp->intr_urb); in rtl8152_system_suspend()
8435 tasklet_disable(&tp->tx_tl); in rtl8152_system_suspend()
8437 cancel_delayed_work_sync(&tp->schedule); in rtl8152_system_suspend()
8438 tp->rtl_ops.down(tp); in rtl8152_system_suspend()
8440 tasklet_enable(&tp->tx_tl); in rtl8152_system_suspend()
8451 mutex_lock(&tp->control); in rtl8152_suspend()
8458 mutex_unlock(&tp->control); in rtl8152_suspend()
8468 mutex_lock(&tp->control); in rtl8152_resume()
8470 if (test_bit(SELECTIVE_SUSPEND, &tp->flags)) in rtl8152_resume()
8475 mutex_unlock(&tp->control); in rtl8152_resume()
8484 clear_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_reset_resume()
8485 tp->rtl_ops.init(tp); in rtl8152_reset_resume()
8486 queue_delayed_work(system_long_wq, &tp->hw_phy_work, 0); in rtl8152_reset_resume()
8495 if (usb_autopm_get_interface(tp->intf) < 0) in rtl8152_get_wol()
8499 wol->supported = 0; in rtl8152_get_wol()
8500 wol->wolopts = 0; in rtl8152_get_wol()
8502 mutex_lock(&tp->control); in rtl8152_get_wol()
8503 wol->supported = WAKE_ANY; in rtl8152_get_wol()
8504 wol->wolopts = __rtl_get_wol(tp); in rtl8152_get_wol()
8505 mutex_unlock(&tp->control); in rtl8152_get_wol()
8508 usb_autopm_put_interface(tp->intf); in rtl8152_get_wol()
8517 return -EOPNOTSUPP; in rtl8152_set_wol()
8519 if (wol->wolopts & ~WAKE_ANY) in rtl8152_set_wol()
8520 return -EINVAL; in rtl8152_set_wol()
8522 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_wol()
8526 mutex_lock(&tp->control); in rtl8152_set_wol()
8528 __rtl_set_wol(tp, wol->wolopts); in rtl8152_set_wol()
8529 tp->saved_wolopts = wol->wolopts & WAKE_ANY; in rtl8152_set_wol()
8531 mutex_unlock(&tp->control); in rtl8152_set_wol()
8533 usb_autopm_put_interface(tp->intf); in rtl8152_set_wol()
8543 return tp->msg_enable; in rtl8152_get_msglevel()
8550 tp->msg_enable = value; in rtl8152_set_msglevel()
8558 strlcpy(info->driver, MODULENAME, sizeof(info->driver)); in rtl8152_get_drvinfo()
8559 strlcpy(info->version, DRIVER_VERSION, sizeof(info->version)); in rtl8152_get_drvinfo()
8560 usb_make_path(tp->udev, info->bus_info, sizeof(info->bus_info)); in rtl8152_get_drvinfo()
8561 if (!IS_ERR_OR_NULL(tp->rtl_fw.fw)) in rtl8152_get_drvinfo()
8562 strlcpy(info->fw_version, tp->rtl_fw.version, in rtl8152_get_drvinfo()
8563 sizeof(info->fw_version)); in rtl8152_get_drvinfo()
8573 if (!tp->mii.mdio_read) in rtl8152_get_link_ksettings()
8574 return -EOPNOTSUPP; in rtl8152_get_link_ksettings()
8576 ret = usb_autopm_get_interface(tp->intf); in rtl8152_get_link_ksettings()
8580 mutex_lock(&tp->control); in rtl8152_get_link_ksettings()
8582 mii_ethtool_get_link_ksettings(&tp->mii, cmd); in rtl8152_get_link_ksettings()
8585 cmd->link_modes.supported, tp->support_2500full); in rtl8152_get_link_ksettings()
8587 if (tp->support_2500full) { in rtl8152_get_link_ksettings()
8589 cmd->link_modes.advertising, in rtl8152_get_link_ksettings()
8593 cmd->link_modes.lp_advertising, in rtl8152_get_link_ksettings()
8597 cmd->base.speed = SPEED_2500; in rtl8152_get_link_ksettings()
8600 mutex_unlock(&tp->control); in rtl8152_get_link_ksettings()
8602 usb_autopm_put_interface(tp->intf); in rtl8152_get_link_ksettings()
8615 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_link_ksettings()
8620 cmd->link_modes.advertising)) in rtl8152_set_link_ksettings()
8624 cmd->link_modes.advertising)) in rtl8152_set_link_ksettings()
8628 cmd->link_modes.advertising)) in rtl8152_set_link_ksettings()
8632 cmd->link_modes.advertising)) in rtl8152_set_link_ksettings()
8636 cmd->link_modes.advertising)) in rtl8152_set_link_ksettings()
8640 cmd->link_modes.advertising)) in rtl8152_set_link_ksettings()
8644 cmd->link_modes.advertising)) in rtl8152_set_link_ksettings()
8647 mutex_lock(&tp->control); in rtl8152_set_link_ksettings()
8649 ret = rtl8152_set_speed(tp, cmd->base.autoneg, cmd->base.speed, in rtl8152_set_link_ksettings()
8650 cmd->base.duplex, advertising); in rtl8152_set_link_ksettings()
8652 tp->autoneg = cmd->base.autoneg; in rtl8152_set_link_ksettings()
8653 tp->speed = cmd->base.speed; in rtl8152_set_link_ksettings()
8654 tp->duplex = cmd->base.duplex; in rtl8152_set_link_ksettings()
8655 tp->advertising = advertising; in rtl8152_set_link_ksettings()
8658 mutex_unlock(&tp->control); in rtl8152_set_link_ksettings()
8660 usb_autopm_put_interface(tp->intf); in rtl8152_set_link_ksettings()
8688 return -EOPNOTSUPP; in rtl8152_get_sset_count()
8698 if (usb_autopm_get_interface(tp->intf) < 0) in rtl8152_get_ethtool_stats()
8703 usb_autopm_put_interface(tp->intf); in rtl8152_get_ethtool_stats()
8710 data[5] = le16_to_cpu(tally.align_errors); in rtl8152_get_ethtool_stats()
8743 eee->eee_enabled = tp->eee_en; in r8152_get_eee()
8744 eee->eee_active = !!(supported & adv & lp); in r8152_get_eee()
8745 eee->supported = supported; in r8152_get_eee()
8746 eee->advertised = tp->eee_adv; in r8152_get_eee()
8747 eee->lp_advertised = lp; in r8152_get_eee()
8754 u16 val = ethtool_adv_to_mmd_eee_adv_t(eee->advertised); in r8152_set_eee()
8756 tp->eee_en = eee->eee_enabled; in r8152_set_eee()
8757 tp->eee_adv = val; in r8152_set_eee()
8759 rtl_eee_enable(tp, tp->eee_en); in r8152_set_eee()
8778 eee->eee_enabled = tp->eee_en; in r8153_get_eee()
8779 eee->eee_active = !!(supported & adv & lp); in r8153_get_eee()
8780 eee->supported = supported; in r8153_get_eee()
8781 eee->advertised = tp->eee_adv; in r8153_get_eee()
8782 eee->lp_advertised = lp; in r8153_get_eee()
8793 if (!tp->rtl_ops.eee_get) { in rtl_ethtool_get_eee()
8794 ret = -EOPNOTSUPP; in rtl_ethtool_get_eee()
8798 ret = usb_autopm_get_interface(tp->intf); in rtl_ethtool_get_eee()
8802 mutex_lock(&tp->control); in rtl_ethtool_get_eee()
8804 ret = tp->rtl_ops.eee_get(tp, edata); in rtl_ethtool_get_eee()
8806 mutex_unlock(&tp->control); in rtl_ethtool_get_eee()
8808 usb_autopm_put_interface(tp->intf); in rtl_ethtool_get_eee()
8820 if (!tp->rtl_ops.eee_set) { in rtl_ethtool_set_eee()
8821 ret = -EOPNOTSUPP; in rtl_ethtool_set_eee()
8825 ret = usb_autopm_get_interface(tp->intf); in rtl_ethtool_set_eee()
8829 mutex_lock(&tp->control); in rtl_ethtool_set_eee()
8831 ret = tp->rtl_ops.eee_set(tp, edata); in rtl_ethtool_set_eee()
8833 ret = mii_nway_restart(&tp->mii); in rtl_ethtool_set_eee()
8835 mutex_unlock(&tp->control); in rtl_ethtool_set_eee()
8837 usb_autopm_put_interface(tp->intf); in rtl_ethtool_set_eee()
8848 ret = usb_autopm_get_interface(tp->intf); in rtl8152_nway_reset()
8852 mutex_lock(&tp->control); in rtl8152_nway_reset()
8854 ret = mii_nway_restart(&tp->mii); in rtl8152_nway_reset()
8856 mutex_unlock(&tp->control); in rtl8152_nway_reset()
8858 usb_autopm_put_interface(tp->intf); in rtl8152_nway_reset()
8871 switch (tp->version) { in rtl8152_get_coalesce()
8875 return -EOPNOTSUPP; in rtl8152_get_coalesce()
8880 coalesce->rx_coalesce_usecs = tp->coalesce; in rtl8152_get_coalesce()
8893 switch (tp->version) { in rtl8152_set_coalesce()
8897 return -EOPNOTSUPP; in rtl8152_set_coalesce()
8902 if (coalesce->rx_coalesce_usecs > COALESCE_SLOW) in rtl8152_set_coalesce()
8903 return -EINVAL; in rtl8152_set_coalesce()
8905 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_coalesce()
8909 mutex_lock(&tp->control); in rtl8152_set_coalesce()
8911 if (tp->coalesce != coalesce->rx_coalesce_usecs) { in rtl8152_set_coalesce()
8912 tp->coalesce = coalesce->rx_coalesce_usecs; in rtl8152_set_coalesce()
8916 napi_disable(&tp->napi); in rtl8152_set_coalesce()
8917 tp->rtl_ops.disable(tp); in rtl8152_set_coalesce()
8918 tp->rtl_ops.enable(tp); in rtl8152_set_coalesce()
8920 clear_bit(RTL8152_SET_RX_MODE, &tp->flags); in rtl8152_set_coalesce()
8922 napi_enable(&tp->napi); in rtl8152_set_coalesce()
8927 mutex_unlock(&tp->control); in rtl8152_set_coalesce()
8929 usb_autopm_put_interface(tp->intf); in rtl8152_set_coalesce()
8939 switch (tunable->id) { in rtl8152_get_tunable()
8941 *(u32 *)d = tp->rx_copybreak; in rtl8152_get_tunable()
8944 return -EOPNOTSUPP; in rtl8152_get_tunable()
8957 switch (tunable->id) { in rtl8152_set_tunable()
8963 return -EINVAL; in rtl8152_set_tunable()
8966 if (tp->rx_copybreak != val) { in rtl8152_set_tunable()
8967 if (netdev->flags & IFF_UP) { in rtl8152_set_tunable()
8968 mutex_lock(&tp->control); in rtl8152_set_tunable()
8969 napi_disable(&tp->napi); in rtl8152_set_tunable()
8970 tp->rx_copybreak = val; in rtl8152_set_tunable()
8971 napi_enable(&tp->napi); in rtl8152_set_tunable()
8972 mutex_unlock(&tp->control); in rtl8152_set_tunable()
8974 tp->rx_copybreak = val; in rtl8152_set_tunable()
8979 return -EOPNOTSUPP; in rtl8152_set_tunable()
8990 ring->rx_max_pending = RTL8152_RX_MAX_PENDING; in rtl8152_get_ringparam()
8991 ring->rx_pending = tp->rx_pending; in rtl8152_get_ringparam()
8999 if (ring->rx_pending < (RTL8152_MAX_RX * 2)) in rtl8152_set_ringparam()
9000 return -EINVAL; in rtl8152_set_ringparam()
9002 if (tp->rx_pending != ring->rx_pending) { in rtl8152_set_ringparam()
9003 if (netdev->flags & IFF_UP) { in rtl8152_set_ringparam()
9004 mutex_lock(&tp->control); in rtl8152_set_ringparam()
9005 napi_disable(&tp->napi); in rtl8152_set_ringparam()
9006 tp->rx_pending = ring->rx_pending; in rtl8152_set_ringparam()
9007 napi_enable(&tp->napi); in rtl8152_set_ringparam()
9008 mutex_unlock(&tp->control); in rtl8152_set_ringparam()
9010 tp->rx_pending = ring->rx_pending; in rtl8152_set_ringparam()
9023 if (usb_autopm_get_interface(tp->intf) < 0) in rtl8152_get_pauseparam()
9026 mutex_lock(&tp->control); in rtl8152_get_pauseparam()
9032 mutex_unlock(&tp->control); in rtl8152_get_pauseparam()
9034 usb_autopm_put_interface(tp->intf); in rtl8152_get_pauseparam()
9037 pause->autoneg = 0; in rtl8152_get_pauseparam()
9038 pause->rx_pause = 0; in rtl8152_get_pauseparam()
9039 pause->tx_pause = 0; in rtl8152_get_pauseparam()
9043 pause->autoneg = 1; in rtl8152_get_pauseparam()
9048 pause->rx_pause = 1; in rtl8152_get_pauseparam()
9051 pause->tx_pause = 1; in rtl8152_get_pauseparam()
9061 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_pauseparam()
9065 mutex_lock(&tp->control); in rtl8152_set_pauseparam()
9067 if (pause->autoneg && !(r8152_mdio_read(tp, MII_BMCR) & BMCR_ANENABLE)) { in rtl8152_set_pauseparam()
9068 ret = -EINVAL; in rtl8152_set_pauseparam()
9072 if (pause->rx_pause) in rtl8152_set_pauseparam()
9075 if (pause->tx_pause) in rtl8152_set_pauseparam()
9084 mutex_unlock(&tp->control); in rtl8152_set_pauseparam()
9085 usb_autopm_put_interface(tp->intf); in rtl8152_set_pauseparam()
9122 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8152_ioctl()
9123 return -ENODEV; in rtl8152_ioctl()
9125 res = usb_autopm_get_interface(tp->intf); in rtl8152_ioctl()
9131 data->phy_id = R8152_PHY_ID; /* Internal PHY */ in rtl8152_ioctl()
9135 mutex_lock(&tp->control); in rtl8152_ioctl()
9136 data->val_out = r8152_mdio_read(tp, data->reg_num); in rtl8152_ioctl()
9137 mutex_unlock(&tp->control); in rtl8152_ioctl()
9142 res = -EPERM; in rtl8152_ioctl()
9145 mutex_lock(&tp->control); in rtl8152_ioctl()
9146 r8152_mdio_write(tp, data->reg_num, data->val_in); in rtl8152_ioctl()
9147 mutex_unlock(&tp->control); in rtl8152_ioctl()
9151 res = -EOPNOTSUPP; in rtl8152_ioctl()
9154 usb_autopm_put_interface(tp->intf); in rtl8152_ioctl()
9165 switch (tp->version) { in rtl8152_change_mtu()
9169 dev->mtu = new_mtu; in rtl8152_change_mtu()
9175 ret = usb_autopm_get_interface(tp->intf); in rtl8152_change_mtu()
9179 mutex_lock(&tp->control); in rtl8152_change_mtu()
9181 dev->mtu = new_mtu; in rtl8152_change_mtu()
9184 if (tp->rtl_ops.change_mtu) in rtl8152_change_mtu()
9185 tp->rtl_ops.change_mtu(tp); in rtl8152_change_mtu()
9189 napi_disable(&tp->napi); in rtl8152_change_mtu()
9190 tasklet_disable(&tp->tx_tl); in rtl8152_change_mtu()
9191 tp->rtl_ops.disable(tp); in rtl8152_change_mtu()
9192 tp->rtl_ops.enable(tp); in rtl8152_change_mtu()
9194 tasklet_enable(&tp->tx_tl); in rtl8152_change_mtu()
9195 napi_enable(&tp->napi); in rtl8152_change_mtu()
9201 mutex_unlock(&tp->control); in rtl8152_change_mtu()
9203 usb_autopm_put_interface(tp->intf); in rtl8152_change_mtu()
9224 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8152_unload()
9227 if (tp->version != RTL_VER_01) in rtl8152_unload()
9233 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8153_unload()
9241 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8153b_unload()
9249 struct rtl_ops *ops = &tp->rtl_ops; in rtl_ops_init()
9252 switch (tp->version) { in rtl_ops_init()
9256 ops->init = r8152b_init; in rtl_ops_init()
9257 ops->enable = rtl8152_enable; in rtl_ops_init()
9258 ops->disable = rtl8152_disable; in rtl_ops_init()
9259 ops->up = rtl8152_up; in rtl_ops_init()
9260 ops->down = rtl8152_down; in rtl_ops_init()
9261 ops->unload = rtl8152_unload; in rtl_ops_init()
9262 ops->eee_get = r8152_get_eee; in rtl_ops_init()
9263 ops->eee_set = r8152_set_eee; in rtl_ops_init()
9264 ops->in_nway = rtl8152_in_nway; in rtl_ops_init()
9265 ops->hw_phy_cfg = r8152b_hw_phy_cfg; in rtl_ops_init()
9266 ops->autosuspend_en = rtl_runtime_suspend_enable; in rtl_ops_init()
9267 tp->rx_buf_sz = 16 * 1024; in rtl_ops_init()
9268 tp->eee_en = true; in rtl_ops_init()
9269 tp->eee_adv = MDIO_EEE_100TX; in rtl_ops_init()
9276 ops->init = r8153_init; in rtl_ops_init()
9277 ops->enable = rtl8153_enable; in rtl_ops_init()
9278 ops->disable = rtl8153_disable; in rtl_ops_init()
9279 ops->up = rtl8153_up; in rtl_ops_init()
9280 ops->down = rtl8153_down; in rtl_ops_init()
9281 ops->unload = rtl8153_unload; in rtl_ops_init()
9282 ops->eee_get = r8153_get_eee; in rtl_ops_init()
9283 ops->eee_set = r8152_set_eee; in rtl_ops_init()
9284 ops->in_nway = rtl8153_in_nway; in rtl_ops_init()
9285 ops->hw_phy_cfg = r8153_hw_phy_cfg; in rtl_ops_init()
9286 ops->autosuspend_en = rtl8153_runtime_enable; in rtl_ops_init()
9287 ops->change_mtu = rtl8153_change_mtu; in rtl_ops_init()
9288 if (tp->udev->speed < USB_SPEED_SUPER) in rtl_ops_init()
9289 tp->rx_buf_sz = 16 * 1024; in rtl_ops_init()
9291 tp->rx_buf_sz = 32 * 1024; in rtl_ops_init()
9292 tp->eee_en = true; in rtl_ops_init()
9293 tp->eee_adv = MDIO_EEE_1000T | MDIO_EEE_100TX; in rtl_ops_init()
9298 ops->init = r8153b_init; in rtl_ops_init()
9299 ops->enable = rtl8153_enable; in rtl_ops_init()
9300 ops->disable = rtl8153_disable; in rtl_ops_init()
9301 ops->up = rtl8153b_up; in rtl_ops_init()
9302 ops->down = rtl8153b_down; in rtl_ops_init()
9303 ops->unload = rtl8153b_unload; in rtl_ops_init()
9304 ops->eee_get = r8153_get_eee; in rtl_ops_init()
9305 ops->eee_set = r8152_set_eee; in rtl_ops_init()
9306 ops->in_nway = rtl8153_in_nway; in rtl_ops_init()
9307 ops->hw_phy_cfg = r8153b_hw_phy_cfg; in rtl_ops_init()
9308 ops->autosuspend_en = rtl8153b_runtime_enable; in rtl_ops_init()
9309 ops->change_mtu = rtl8153_change_mtu; in rtl_ops_init()
9310 tp->rx_buf_sz = 32 * 1024; in rtl_ops_init()
9311 tp->eee_en = true; in rtl_ops_init()
9312 tp->eee_adv = MDIO_EEE_1000T | MDIO_EEE_100TX; in rtl_ops_init()
9316 tp->eee_en = true; in rtl_ops_init()
9317 tp->eee_adv = MDIO_EEE_1000T | MDIO_EEE_100TX; in rtl_ops_init()
9320 ops->init = r8156_init; in rtl_ops_init()
9321 ops->enable = rtl8156_enable; in rtl_ops_init()
9322 ops->disable = rtl8153_disable; in rtl_ops_init()
9323 ops->up = rtl8156_up; in rtl_ops_init()
9324 ops->down = rtl8156_down; in rtl_ops_init()
9325 ops->unload = rtl8153_unload; in rtl_ops_init()
9326 ops->eee_get = r8153_get_eee; in rtl_ops_init()
9327 ops->eee_set = r8152_set_eee; in rtl_ops_init()
9328 ops->in_nway = rtl8153_in_nway; in rtl_ops_init()
9329 ops->hw_phy_cfg = r8156_hw_phy_cfg; in rtl_ops_init()
9330 ops->autosuspend_en = rtl8156_runtime_enable; in rtl_ops_init()
9331 ops->change_mtu = rtl8156_change_mtu; in rtl_ops_init()
9332 tp->rx_buf_sz = 48 * 1024; in rtl_ops_init()
9333 tp->support_2500full = 1; in rtl_ops_init()
9338 tp->support_2500full = 1; in rtl_ops_init()
9341 tp->eee_en = true; in rtl_ops_init()
9342 tp->eee_adv = MDIO_EEE_1000T | MDIO_EEE_100TX; in rtl_ops_init()
9343 ops->init = r8156b_init; in rtl_ops_init()
9344 ops->enable = rtl8156b_enable; in rtl_ops_init()
9345 ops->disable = rtl8153_disable; in rtl_ops_init()
9346 ops->up = rtl8156_up; in rtl_ops_init()
9347 ops->down = rtl8156_down; in rtl_ops_init()
9348 ops->unload = rtl8153_unload; in rtl_ops_init()
9349 ops->eee_get = r8153_get_eee; in rtl_ops_init()
9350 ops->eee_set = r8152_set_eee; in rtl_ops_init()
9351 ops->in_nway = rtl8153_in_nway; in rtl_ops_init()
9352 ops->hw_phy_cfg = r8156b_hw_phy_cfg; in rtl_ops_init()
9353 ops->autosuspend_en = rtl8156_runtime_enable; in rtl_ops_init()
9354 ops->change_mtu = rtl8156_change_mtu; in rtl_ops_init()
9355 tp->rx_buf_sz = 48 * 1024; in rtl_ops_init()
9359 ops->init = r8153c_init; in rtl_ops_init()
9360 ops->enable = rtl8153_enable; in rtl_ops_init()
9361 ops->disable = rtl8153_disable; in rtl_ops_init()
9362 ops->up = rtl8153c_up; in rtl_ops_init()
9363 ops->down = rtl8153b_down; in rtl_ops_init()
9364 ops->unload = rtl8153_unload; in rtl_ops_init()
9365 ops->eee_get = r8153_get_eee; in rtl_ops_init()
9366 ops->eee_set = r8152_set_eee; in rtl_ops_init()
9367 ops->in_nway = rtl8153_in_nway; in rtl_ops_init()
9368 ops->hw_phy_cfg = r8153c_hw_phy_cfg; in rtl_ops_init()
9369 ops->autosuspend_en = rtl8153c_runtime_enable; in rtl_ops_init()
9370 ops->change_mtu = rtl8153c_change_mtu; in rtl_ops_init()
9371 tp->rx_buf_sz = 32 * 1024; in rtl_ops_init()
9372 tp->eee_en = true; in rtl_ops_init()
9373 tp->eee_adv = MDIO_EEE_1000T | MDIO_EEE_100TX; in rtl_ops_init()
9377 ret = -ENODEV; in rtl_ops_init()
9378 dev_err(&tp->intf->dev, "Unknown Device\n"); in rtl_ops_init()
9385 #define FIRMWARE_8153A_2 "rtl_nic/rtl8153a-2.fw"
9386 #define FIRMWARE_8153A_3 "rtl_nic/rtl8153a-3.fw"
9387 #define FIRMWARE_8153A_4 "rtl_nic/rtl8153a-4.fw"
9388 #define FIRMWARE_8153B_2 "rtl_nic/rtl8153b-2.fw"
9389 #define FIRMWARE_8153C_1 "rtl_nic/rtl8153c-1.fw"
9390 #define FIRMWARE_8156A_2 "rtl_nic/rtl8156a-2.fw"
9391 #define FIRMWARE_8156B_2 "rtl_nic/rtl8156b-2.fw"
9403 struct rtl_fw *rtl_fw = &tp->rtl_fw; in rtl_fw_init()
9405 switch (tp->version) { in rtl_fw_init()
9407 rtl_fw->fw_name = FIRMWARE_8153A_2; in rtl_fw_init()
9408 rtl_fw->pre_fw = r8153_pre_firmware_1; in rtl_fw_init()
9409 rtl_fw->post_fw = r8153_post_firmware_1; in rtl_fw_init()
9412 rtl_fw->fw_name = FIRMWARE_8153A_3; in rtl_fw_init()
9413 rtl_fw->pre_fw = r8153_pre_firmware_2; in rtl_fw_init()
9414 rtl_fw->post_fw = r8153_post_firmware_2; in rtl_fw_init()
9417 rtl_fw->fw_name = FIRMWARE_8153A_4; in rtl_fw_init()
9418 rtl_fw->post_fw = r8153_post_firmware_3; in rtl_fw_init()
9421 rtl_fw->fw_name = FIRMWARE_8153B_2; in rtl_fw_init()
9422 rtl_fw->pre_fw = r8153b_pre_firmware_1; in rtl_fw_init()
9423 rtl_fw->post_fw = r8153b_post_firmware_1; in rtl_fw_init()
9426 rtl_fw->fw_name = FIRMWARE_8156A_2; in rtl_fw_init()
9427 rtl_fw->post_fw = r8156a_post_firmware_1; in rtl_fw_init()
9431 rtl_fw->fw_name = FIRMWARE_8156B_2; in rtl_fw_init()
9434 rtl_fw->fw_name = FIRMWARE_8153C_1; in rtl_fw_init()
9435 rtl_fw->pre_fw = r8153b_pre_firmware_1; in rtl_fw_init()
9436 rtl_fw->post_fw = r8153c_post_firmware_1; in rtl_fw_init()
9516 dev_info(&intf->dev, "Unknown version 0x%04x\n", ocp_data); in rtl8152_get_version()
9520 dev_dbg(&intf->dev, "Detected version 0x%04x\n", version); in rtl8152_get_version()
9536 return -ENODEV; in rtl8152_probe()
9539 return -ENODEV; in rtl8152_probe()
9544 dev_err(&intf->dev, "Out of memory\n"); in rtl8152_probe()
9545 return -ENOMEM; in rtl8152_probe()
9548 SET_NETDEV_DEV(netdev, &intf->dev); in rtl8152_probe()
9550 tp->msg_enable = 0x7FFF; in rtl8152_probe()
9552 tp->udev = udev; in rtl8152_probe()
9553 tp->netdev = netdev; in rtl8152_probe()
9554 tp->intf = intf; in rtl8152_probe()
9555 tp->version = version; in rtl8152_probe()
9557 tp->pipe_ctrl_in = usb_rcvctrlpipe(udev, 0); in rtl8152_probe()
9558 tp->pipe_ctrl_out = usb_sndctrlpipe(udev, 0); in rtl8152_probe()
9559 tp->pipe_in = usb_rcvbulkpipe(udev, 1); in rtl8152_probe()
9560 tp->pipe_out = usb_sndbulkpipe(udev, 2); in rtl8152_probe()
9561 tp->pipe_intr = usb_rcvintpipe(udev, 3); in rtl8152_probe()
9567 tp->mii.supports_gmii = 0; in rtl8152_probe()
9570 tp->mii.supports_gmii = 1; in rtl8152_probe()
9580 mutex_init(&tp->control); in rtl8152_probe()
9581 INIT_DELAYED_WORK(&tp->schedule, rtl_work_func_t); in rtl8152_probe()
9582 INIT_DELAYED_WORK(&tp->hw_phy_work, rtl_hw_phy_work_func_t); in rtl8152_probe()
9583 tasklet_setup(&tp->tx_tl, bottom_half); in rtl8152_probe()
9584 tasklet_disable(&tp->tx_tl); in rtl8152_probe()
9586 netdev->netdev_ops = &rtl8152_netdev_ops; in rtl8152_probe()
9587 netdev->watchdog_timeo = RTL8152_TX_TIMEOUT; in rtl8152_probe()
9589 netdev->features |= NETIF_F_RXCSUM | NETIF_F_IP_CSUM | NETIF_F_SG | in rtl8152_probe()
9593 netdev->hw_features = NETIF_F_RXCSUM | NETIF_F_IP_CSUM | NETIF_F_SG | in rtl8152_probe()
9597 netdev->vlan_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO | in rtl8152_probe()
9601 if (tp->version == RTL_VER_01) { in rtl8152_probe()
9602 netdev->features &= ~NETIF_F_RXCSUM; in rtl8152_probe()
9603 netdev->hw_features &= ~NETIF_F_RXCSUM; in rtl8152_probe()
9606 if (le16_to_cpu(udev->descriptor.idVendor) == VENDOR_ID_LENOVO) { in rtl8152_probe()
9607 switch (le16_to_cpu(udev->descriptor.idProduct)) { in rtl8152_probe()
9610 tp->lenovo_macpassthru = 1; in rtl8152_probe()
9614 if (le16_to_cpu(udev->descriptor.bcdDevice) == 0x3011 && udev->serial && in rtl8152_probe()
9615 (!strcmp(udev->serial, "000001000000") || in rtl8152_probe()
9616 !strcmp(udev->serial, "000002000000"))) { in rtl8152_probe()
9617 dev_info(&udev->dev, "Dell TB16 Dock, disable RX aggregation"); in rtl8152_probe()
9618 tp->dell_tb_rx_agg_bug = 1; in rtl8152_probe()
9621 netdev->ethtool_ops = &ops; in rtl8152_probe()
9624 /* MTU range: 68 - 1500 or 9194 */ in rtl8152_probe()
9625 netdev->min_mtu = ETH_MIN_MTU; in rtl8152_probe()
9626 switch (tp->version) { in rtl8152_probe()
9634 netdev->max_mtu = size_to_mtu(9 * 1024); in rtl8152_probe()
9638 netdev->max_mtu = size_to_mtu(15 * 1024); in rtl8152_probe()
9643 netdev->max_mtu = size_to_mtu(16 * 1024); in rtl8152_probe()
9649 netdev->max_mtu = ETH_DATA_LEN; in rtl8152_probe()
9653 tp->mii.dev = netdev; in rtl8152_probe()
9654 tp->mii.mdio_read = read_mii_word; in rtl8152_probe()
9655 tp->mii.mdio_write = write_mii_word; in rtl8152_probe()
9656 tp->mii.phy_id_mask = 0x3f; in rtl8152_probe()
9657 tp->mii.reg_num_mask = 0x1f; in rtl8152_probe()
9658 tp->mii.phy_id = R8152_PHY_ID; in rtl8152_probe()
9660 tp->autoneg = AUTONEG_ENABLE; in rtl8152_probe()
9661 tp->speed = SPEED_100; in rtl8152_probe()
9662 tp->advertising = RTL_ADVERTISED_10_HALF | RTL_ADVERTISED_10_FULL | in rtl8152_probe()
9664 if (tp->mii.supports_gmii) { in rtl8152_probe()
9665 if (tp->support_2500full && in rtl8152_probe()
9666 tp->udev->speed >= USB_SPEED_SUPER) { in rtl8152_probe()
9667 tp->speed = SPEED_2500; in rtl8152_probe()
9668 tp->advertising |= RTL_ADVERTISED_2500_FULL; in rtl8152_probe()
9670 tp->speed = SPEED_1000; in rtl8152_probe()
9672 tp->advertising |= RTL_ADVERTISED_1000_FULL; in rtl8152_probe()
9674 tp->duplex = DUPLEX_FULL; in rtl8152_probe()
9676 tp->rx_copybreak = RTL8152_RXFG_HEADSZ; in rtl8152_probe()
9677 tp->rx_pending = 10 * RTL8152_MAX_RX; in rtl8152_probe()
9679 intf->needs_remote_wakeup = 1; in rtl8152_probe()
9684 tp->saved_wolopts = __rtl_get_wol(tp); in rtl8152_probe()
9686 tp->rtl_ops.init(tp); in rtl8152_probe()
9689 tp->rtl_fw.retry = true; in rtl8152_probe()
9691 queue_delayed_work(system_long_wq, &tp->hw_phy_work, 0); in rtl8152_probe()
9696 if (tp->support_2500full) in rtl8152_probe()
9697 netif_napi_add(netdev, &tp->napi, r8152_poll, 256); in rtl8152_probe()
9699 netif_napi_add(netdev, &tp->napi, r8152_poll, 64); in rtl8152_probe()
9703 dev_err(&intf->dev, "couldn't register the device\n"); in rtl8152_probe()
9707 if (tp->saved_wolopts) in rtl8152_probe()
9708 device_set_wakeup_enable(&udev->dev, true); in rtl8152_probe()
9710 device_set_wakeup_enable(&udev->dev, false); in rtl8152_probe()
9717 tasklet_kill(&tp->tx_tl); in rtl8152_probe()
9732 unregister_netdev(tp->netdev); in rtl8152_disconnect()
9733 tasklet_kill(&tp->tx_tl); in rtl8152_disconnect()
9734 cancel_delayed_work_sync(&tp->hw_phy_work); in rtl8152_disconnect()
9735 if (tp->rtl_ops.unload) in rtl8152_disconnect()
9736 tp->rtl_ops.unload(tp); in rtl8152_disconnect()
9738 free_netdev(tp->netdev); in rtl8152_disconnect()