Lines Matching +full:ld +full:- +full:pulse +full:- +full:delay +full:- +full:us
1 // SPDX-License-Identifier: GPL-2.0-only
33 /* Information for net-next */
568 #define LPM_TIMER_500US 0x0c /* 500 us */
680 #define RTL_ADV2_5G_F_R BIT(5) /* Advertise 2.5GBASE-T fast-retrain */
763 #define size_to_mtu(s) ((s) - VLAN_ETH_HLEN - ETH_FCS_LEN)
966 * struct fw_block - block type and total length
977 * struct fw_header - header of the firmware file
1051 * struct fw_mac - a firmware block used by RTL_FW_PLA and RTL_FW_USB.
1092 * struct fw_phy_patch_key - a firmware block used by RTL_FW_PHY_START.
1107 * struct fw_phy_nc - a firmware block used by RTL_FW_PHY_NC.
1202 /* Maximum number of multicast addresses to filter (vs. Rx-all-multicast).
1208 #define RTL_LIMITED_TSO_SIZE (size_to_mtu(agg_buf_sz) - sizeof(struct tx_desc))
1218 set_bit(RTL8152_INACCESSIBLE, &tp->flags); in rtl_set_inaccessible()
1224 clear_bit(RTL8152_INACCESSIBLE, &tp->flags); in rtl_set_accessible()
1233 struct usb_device *udev = tp->udev; in r8152_control_msg()
1236 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8152_control_msg()
1237 return -ENODEV; in r8152_control_msg()
1246 if (ret == -ENODEV) in r8152_control_msg()
1251 tp->reg_access_reset_count = 0; in r8152_control_msg()
1255 dev_err(&udev->dev, in r8152_control_msg()
1272 if (!test_bit(PROBED_WITH_NO_ERRORS, &tp->flags)) { in r8152_control_msg()
1273 set_bit(PROBE_SHOULD_RETRY, &tp->flags); in r8152_control_msg()
1277 /* Failing to access registers in pre-reset is not surprising since we in r8152_control_msg()
1279 * access we do in pre-reset isn't truly mandatory--we're just reusing in r8152_control_msg()
1281 * adapter down before resetting it. Thus, if we're in pre-reset, in r8152_control_msg()
1283 * We know the post-reset is already coming. in r8152_control_msg()
1285 if (test_bit(IN_PRE_RESET, &tp->flags)) in r8152_control_msg()
1288 if (tp->reg_access_reset_count < REGISTER_ACCESS_MAX_RESETS) { in r8152_control_msg()
1289 usb_queue_reset_device(tp->intf); in r8152_control_msg()
1290 tp->reg_access_reset_count++; in r8152_control_msg()
1291 } else if (tp->reg_access_reset_count == REGISTER_ACCESS_MAX_RESETS) { in r8152_control_msg()
1292 dev_err(&udev->dev, in r8152_control_msg()
1308 return -ENOMEM; in get_registers()
1310 ret = r8152_control_msg(tp, tp->pipe_ctrl_in, in get_registers()
1332 return -ENOMEM; in set_registers()
1334 ret = r8152_control_msg(tp, tp->pipe_ctrl_out, in set_registers()
1345 if (tp->udev->state == USB_STATE_NOTATTACHED) in rtl_set_unplug()
1355 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in generic_ocp_read()
1356 return -ENODEV; in generic_ocp_read()
1360 return -EPERM; in generic_ocp_read()
1363 return -EPERM; in generic_ocp_read()
1373 size -= limit; in generic_ocp_read()
1386 if (ret == -ENODEV) in generic_ocp_read()
1399 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in generic_ocp_write()
1400 return -ENODEV; in generic_ocp_write()
1404 return -EPERM; in generic_ocp_write()
1407 return -EPERM; in generic_ocp_write()
1422 size -= 4; in generic_ocp_write()
1430 size -= 4; in generic_ocp_write()
1442 size -= limit; in generic_ocp_write()
1463 if (ret == -ENODEV) in generic_ocp_write()
1586 if (ocp_base != tp->ocp_base) { in ocp_reg_read()
1588 tp->ocp_base = ocp_base; in ocp_reg_read()
1600 if (ocp_base != tp->ocp_base) { in ocp_reg_write()
1602 tp->ocp_base = ocp_base; in ocp_reg_write()
1636 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in read_mii_word()
1637 return -ENODEV; in read_mii_word()
1640 return -EINVAL; in read_mii_word()
1652 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in write_mii_word()
1673 int ret = -EADDRNOTAVAIL; in __rtl8152_set_mac_address()
1675 if (!is_valid_ether_addr(addr->sa_data)) in __rtl8152_set_mac_address()
1679 ret = usb_autopm_get_interface(tp->intf); in __rtl8152_set_mac_address()
1684 mutex_lock(&tp->control); in __rtl8152_set_mac_address()
1686 eth_hw_addr_set(netdev, addr->sa_data); in __rtl8152_set_mac_address()
1689 pla_ocp_write(tp, PLA_IDR, BYTE_EN_SIX_BYTES, 8, addr->sa_data); in __rtl8152_set_mac_address()
1692 mutex_unlock(&tp->control); in __rtl8152_set_mac_address()
1695 usb_autopm_put_interface(tp->intf); in __rtl8152_set_mac_address()
1714 int ret = -EINVAL; in vendor_mac_passthru_addr_read()
1721 if (tp->lenovo_macpassthru) { in vendor_mac_passthru_addr_read()
1726 /* test for -AD variant of RTL8153 */ in vendor_mac_passthru_addr_read()
1729 /* test for MAC address pass-through bit */ in vendor_mac_passthru_addr_read()
1732 netif_dbg(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1733 "No efuse for RTL8153-AD MAC pass through\n"); in vendor_mac_passthru_addr_read()
1734 return -ENODEV; in vendor_mac_passthru_addr_read()
1737 /* test for RTL8153-BND and RTL8153-BD */ in vendor_mac_passthru_addr_read()
1740 netif_dbg(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1742 return -ENODEV; in vendor_mac_passthru_addr_read()
1755 return -ENODEV; in vendor_mac_passthru_addr_read()
1756 if (obj->type != mac_obj_type || obj->string.length != mac_strlen) { in vendor_mac_passthru_addr_read()
1757 netif_warn(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1758 "Invalid buffer for pass-thru MAC addr: (%d, %d)\n", in vendor_mac_passthru_addr_read()
1759 obj->type, obj->string.length); in vendor_mac_passthru_addr_read()
1763 if (strncmp(obj->string.pointer, "_AUXMAC_#", 9) != 0 || in vendor_mac_passthru_addr_read()
1764 strncmp(obj->string.pointer + 0x15, "#", 1) != 0) { in vendor_mac_passthru_addr_read()
1765 netif_warn(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1766 "Invalid header when reading pass-thru MAC addr\n"); in vendor_mac_passthru_addr_read()
1769 ret = hex2bin(buf, obj->string.pointer + 9, 6); in vendor_mac_passthru_addr_read()
1771 netif_warn(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1772 "Invalid MAC for pass-thru MAC addr: %d, %pM\n", in vendor_mac_passthru_addr_read()
1774 ret = -EINVAL; in vendor_mac_passthru_addr_read()
1777 memcpy(sa->sa_data, buf, 6); in vendor_mac_passthru_addr_read()
1778 tp->netdev->addr_assign_type = NET_ADDR_STOLEN; in vendor_mac_passthru_addr_read()
1779 netif_info(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1780 "Using pass-thru MAC addr %pM\n", sa->sa_data); in vendor_mac_passthru_addr_read()
1789 struct net_device *dev = tp->netdev; in determine_ethernet_addr()
1792 sa->sa_family = dev->type; in determine_ethernet_addr()
1794 ret = eth_platform_get_mac_address(&tp->udev->dev, sa->sa_data); in determine_ethernet_addr()
1796 if (tp->version == RTL_VER_01) { in determine_ethernet_addr()
1797 ret = pla_ocp_read(tp, PLA_IDR, 8, sa->sa_data); in determine_ethernet_addr()
1800 * be expected to be non-zero in determine_ethernet_addr()
1805 sa->sa_data); in determine_ethernet_addr()
1811 } else if (!is_valid_ether_addr(sa->sa_data)) { in determine_ethernet_addr()
1813 sa->sa_data); in determine_ethernet_addr()
1815 ether_addr_copy(sa->sa_data, dev->dev_addr); in determine_ethernet_addr()
1817 sa->sa_data); in determine_ethernet_addr()
1826 struct net_device *dev = tp->netdev; in set_ethernet_addr()
1834 if (tp->version == RTL_VER_01) in set_ethernet_addr()
1845 int status = urb->status; in read_bulk_callback()
1850 agg = urb->context; in read_bulk_callback()
1854 tp = agg->context; in read_bulk_callback()
1858 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in read_bulk_callback()
1861 if (!test_bit(WORK_ENABLE, &tp->flags)) in read_bulk_callback()
1864 netdev = tp->netdev; in read_bulk_callback()
1867 /* This avoid the re-submitting bulk */ in read_bulk_callback()
1871 usb_mark_last_busy(tp->udev); in read_bulk_callback()
1875 if (urb->actual_length < ETH_ZLEN) in read_bulk_callback()
1878 spin_lock_irqsave(&tp->rx_lock, flags); in read_bulk_callback()
1879 list_add_tail(&agg->list, &tp->rx_done); in read_bulk_callback()
1880 spin_unlock_irqrestore(&tp->rx_lock, flags); in read_bulk_callback()
1881 napi_schedule(&tp->napi); in read_bulk_callback()
1883 case -ESHUTDOWN: in read_bulk_callback()
1885 netif_device_detach(tp->netdev); in read_bulk_callback()
1887 case -EPROTO: in read_bulk_callback()
1888 urb->actual_length = 0; in read_bulk_callback()
1889 spin_lock_irqsave(&tp->rx_lock, flags); in read_bulk_callback()
1890 list_add_tail(&agg->list, &tp->rx_done); in read_bulk_callback()
1891 spin_unlock_irqrestore(&tp->rx_lock, flags); in read_bulk_callback()
1892 set_bit(RX_EPROTO, &tp->flags); in read_bulk_callback()
1893 schedule_delayed_work(&tp->schedule, 1); in read_bulk_callback()
1895 case -ENOENT: in read_bulk_callback()
1897 case -ETIME: in read_bulk_callback()
1917 int status = urb->status; in write_bulk_callback()
1919 agg = urb->context; in write_bulk_callback()
1923 tp = agg->context; in write_bulk_callback()
1927 netdev = tp->netdev; in write_bulk_callback()
1928 stats = &netdev->stats; in write_bulk_callback()
1932 stats->tx_errors += agg->skb_num; in write_bulk_callback()
1934 stats->tx_packets += agg->skb_num; in write_bulk_callback()
1935 stats->tx_bytes += agg->skb_len; in write_bulk_callback()
1938 spin_lock_irqsave(&tp->tx_lock, flags); in write_bulk_callback()
1939 list_add_tail(&agg->list, &tp->tx_free); in write_bulk_callback()
1940 spin_unlock_irqrestore(&tp->tx_lock, flags); in write_bulk_callback()
1942 usb_autopm_put_interface_async(tp->intf); in write_bulk_callback()
1947 if (!test_bit(WORK_ENABLE, &tp->flags)) in write_bulk_callback()
1950 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in write_bulk_callback()
1953 if (!skb_queue_empty(&tp->tx_queue)) in write_bulk_callback()
1954 tasklet_schedule(&tp->tx_tl); in write_bulk_callback()
1961 int status = urb->status; in intr_callback()
1964 tp = urb->context; in intr_callback()
1968 if (!test_bit(WORK_ENABLE, &tp->flags)) in intr_callback()
1971 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in intr_callback()
1977 case -ECONNRESET: /* unlink */ in intr_callback()
1978 case -ESHUTDOWN: in intr_callback()
1979 netif_device_detach(tp->netdev); in intr_callback()
1981 case -ENOENT: in intr_callback()
1982 case -EPROTO: in intr_callback()
1983 netif_info(tp, intr, tp->netdev, in intr_callback()
1986 case -EOVERFLOW: in intr_callback()
1988 netif_info(tp, intr, tp->netdev, in intr_callback()
1989 "intr status -EOVERFLOW\n"); in intr_callback()
1991 /* -EPIPE: should clear the halt */ in intr_callback()
1993 netif_info(tp, intr, tp->netdev, "intr status %d\n", status); in intr_callback()
1997 d = urb->transfer_buffer; in intr_callback()
1999 if (!netif_carrier_ok(tp->netdev)) { in intr_callback()
2000 set_bit(RTL8152_LINK_CHG, &tp->flags); in intr_callback()
2001 schedule_delayed_work(&tp->schedule, 0); in intr_callback()
2004 if (netif_carrier_ok(tp->netdev)) { in intr_callback()
2005 netif_stop_queue(tp->netdev); in intr_callback()
2006 set_bit(RTL8152_LINK_CHG, &tp->flags); in intr_callback()
2007 schedule_delayed_work(&tp->schedule, 0); in intr_callback()
2013 if (res == -ENODEV) { in intr_callback()
2015 netif_device_detach(tp->netdev); in intr_callback()
2017 netif_err(tp, intr, tp->netdev, in intr_callback()
2034 list_del(&agg->info_list); in free_rx_agg()
2036 usb_free_urb(agg->urb); in free_rx_agg()
2037 put_page(agg->page); in free_rx_agg()
2040 atomic_dec(&tp->rx_count); in free_rx_agg()
2045 struct net_device *netdev = tp->netdev; in alloc_rx_agg()
2046 int node = netdev->dev.parent ? dev_to_node(netdev->dev.parent) : -1; in alloc_rx_agg()
2047 unsigned int order = get_order(tp->rx_buf_sz); in alloc_rx_agg()
2055 rx_agg->page = alloc_pages(mflags | __GFP_COMP | __GFP_NOWARN, order); in alloc_rx_agg()
2056 if (!rx_agg->page) in alloc_rx_agg()
2059 rx_agg->buffer = page_address(rx_agg->page); in alloc_rx_agg()
2061 rx_agg->urb = usb_alloc_urb(0, mflags); in alloc_rx_agg()
2062 if (!rx_agg->urb) in alloc_rx_agg()
2065 rx_agg->context = tp; in alloc_rx_agg()
2067 INIT_LIST_HEAD(&rx_agg->list); in alloc_rx_agg()
2068 INIT_LIST_HEAD(&rx_agg->info_list); in alloc_rx_agg()
2069 spin_lock_irqsave(&tp->rx_lock, flags); in alloc_rx_agg()
2070 list_add_tail(&rx_agg->info_list, &tp->rx_info); in alloc_rx_agg()
2071 spin_unlock_irqrestore(&tp->rx_lock, flags); in alloc_rx_agg()
2073 atomic_inc(&tp->rx_count); in alloc_rx_agg()
2078 __free_pages(rx_agg->page, order); in alloc_rx_agg()
2090 spin_lock_irqsave(&tp->rx_lock, flags); in free_all_mem()
2092 list_for_each_entry_safe(agg, agg_next, &tp->rx_info, info_list) in free_all_mem()
2095 spin_unlock_irqrestore(&tp->rx_lock, flags); in free_all_mem()
2097 WARN_ON(atomic_read(&tp->rx_count)); in free_all_mem()
2100 usb_free_urb(tp->tx_info[i].urb); in free_all_mem()
2101 tp->tx_info[i].urb = NULL; in free_all_mem()
2103 kfree(tp->tx_info[i].buffer); in free_all_mem()
2104 tp->tx_info[i].buffer = NULL; in free_all_mem()
2105 tp->tx_info[i].head = NULL; in free_all_mem()
2108 usb_free_urb(tp->intr_urb); in free_all_mem()
2109 tp->intr_urb = NULL; in free_all_mem()
2111 kfree(tp->intr_buff); in free_all_mem()
2112 tp->intr_buff = NULL; in free_all_mem()
2117 struct net_device *netdev = tp->netdev; in alloc_all_mem()
2118 struct usb_interface *intf = tp->intf; in alloc_all_mem()
2119 struct usb_host_interface *alt = intf->cur_altsetting; in alloc_all_mem()
2120 struct usb_host_endpoint *ep_intr = alt->endpoint + 2; in alloc_all_mem()
2123 node = netdev->dev.parent ? dev_to_node(netdev->dev.parent) : -1; in alloc_all_mem()
2125 spin_lock_init(&tp->rx_lock); in alloc_all_mem()
2126 spin_lock_init(&tp->tx_lock); in alloc_all_mem()
2127 INIT_LIST_HEAD(&tp->rx_info); in alloc_all_mem()
2128 INIT_LIST_HEAD(&tp->tx_free); in alloc_all_mem()
2129 INIT_LIST_HEAD(&tp->rx_done); in alloc_all_mem()
2130 skb_queue_head_init(&tp->tx_queue); in alloc_all_mem()
2131 skb_queue_head_init(&tp->rx_queue); in alloc_all_mem()
2132 atomic_set(&tp->rx_count, 0); in alloc_all_mem()
2161 INIT_LIST_HEAD(&tp->tx_info[i].list); in alloc_all_mem()
2162 tp->tx_info[i].context = tp; in alloc_all_mem()
2163 tp->tx_info[i].urb = urb; in alloc_all_mem()
2164 tp->tx_info[i].buffer = buf; in alloc_all_mem()
2165 tp->tx_info[i].head = tx_agg_align(buf); in alloc_all_mem()
2167 list_add_tail(&tp->tx_info[i].list, &tp->tx_free); in alloc_all_mem()
2170 tp->intr_urb = usb_alloc_urb(0, GFP_KERNEL); in alloc_all_mem()
2171 if (!tp->intr_urb) in alloc_all_mem()
2174 tp->intr_buff = kmalloc(INTBUFSIZE, GFP_KERNEL); in alloc_all_mem()
2175 if (!tp->intr_buff) in alloc_all_mem()
2178 tp->intr_interval = (int)ep_intr->desc.bInterval; in alloc_all_mem()
2179 usb_fill_int_urb(tp->intr_urb, tp->udev, tp->pipe_intr, in alloc_all_mem()
2180 tp->intr_buff, INTBUFSIZE, intr_callback, in alloc_all_mem()
2181 tp, tp->intr_interval); in alloc_all_mem()
2187 return -ENOMEM; in alloc_all_mem()
2195 if (list_empty(&tp->tx_free)) in r8152_get_tx_agg()
2198 spin_lock_irqsave(&tp->tx_lock, flags); in r8152_get_tx_agg()
2199 if (!list_empty(&tp->tx_free)) { in r8152_get_tx_agg()
2202 cursor = tp->tx_free.next; in r8152_get_tx_agg()
2206 spin_unlock_irqrestore(&tp->tx_lock, flags); in r8152_get_tx_agg()
2218 if (skb_shinfo(skb)->gso_size) { in r8152_csum_workaround()
2219 netdev_features_t features = tp->netdev->features; in r8152_csum_workaround()
2237 } else if (skb->ip_summed == CHECKSUM_PARTIAL) { in r8152_csum_workaround()
2246 stats = &tp->netdev->stats; in r8152_csum_workaround()
2247 stats->tx_dropped++; in r8152_csum_workaround()
2258 desc->opts2 |= cpu_to_le32(opts2); in rtl_tx_vlan_tag()
2264 u32 opts2 = le32_to_cpu(desc->opts2); in rtl_rx_vlan_tag()
2274 u32 mss = skb_shinfo(skb)->gso_size; in r8152_tx_csum()
2286 netif_warn(tp, tx_err, tp->netdev, in r8152_tx_csum()
2314 } else if (skb->ip_summed == CHECKSUM_PARTIAL) { in r8152_tx_csum()
2319 netif_warn(tp, tx_err, tp->netdev, in r8152_tx_csum()
2329 ip_protocol = ip_hdr(skb)->protocol; in r8152_tx_csum()
2334 ip_protocol = ipv6_hdr(skb)->nexthdr; in r8152_tx_csum()
2352 desc->opts2 = cpu_to_le32(opts2); in r8152_tx_csum()
2353 desc->opts1 = cpu_to_le32(opts1); in r8152_tx_csum()
2361 struct sk_buff_head skb_head, *tx_queue = &tp->tx_queue; in r8152_tx_agg_fill()
2366 spin_lock(&tx_queue->lock); in r8152_tx_agg_fill()
2368 spin_unlock(&tx_queue->lock); in r8152_tx_agg_fill()
2370 tx_data = agg->head; in r8152_tx_agg_fill()
2371 agg->skb_num = 0; in r8152_tx_agg_fill()
2372 agg->skb_len = 0; in r8152_tx_agg_fill()
2384 len = skb->len + sizeof(*tx_desc); in r8152_tx_agg_fill()
2394 if (r8152_tx_csum(tp, tx_desc, skb, skb->len)) { in r8152_tx_agg_fill()
2403 len = skb->len; in r8152_tx_agg_fill()
2405 struct net_device_stats *stats = &tp->netdev->stats; in r8152_tx_agg_fill()
2407 stats->tx_dropped++; in r8152_tx_agg_fill()
2409 tx_data -= sizeof(*tx_desc); in r8152_tx_agg_fill()
2414 agg->skb_len += len; in r8152_tx_agg_fill()
2415 agg->skb_num += skb_shinfo(skb)->gso_segs ?: 1; in r8152_tx_agg_fill()
2419 remain = agg_buf_sz - (int)(tx_agg_align(tx_data) - agg->head); in r8152_tx_agg_fill()
2421 if (tp->dell_tb_rx_agg_bug) in r8152_tx_agg_fill()
2426 spin_lock(&tx_queue->lock); in r8152_tx_agg_fill()
2428 spin_unlock(&tx_queue->lock); in r8152_tx_agg_fill()
2431 netif_tx_lock(tp->netdev); in r8152_tx_agg_fill()
2433 if (netif_queue_stopped(tp->netdev) && in r8152_tx_agg_fill()
2434 skb_queue_len(&tp->tx_queue) < tp->tx_qlen) in r8152_tx_agg_fill()
2435 netif_wake_queue(tp->netdev); in r8152_tx_agg_fill()
2437 netif_tx_unlock(tp->netdev); in r8152_tx_agg_fill()
2439 ret = usb_autopm_get_interface_async(tp->intf); in r8152_tx_agg_fill()
2443 usb_fill_bulk_urb(agg->urb, tp->udev, tp->pipe_out, in r8152_tx_agg_fill()
2444 agg->head, (int)(tx_data - (u8 *)agg->head), in r8152_tx_agg_fill()
2447 ret = usb_submit_urb(agg->urb, GFP_ATOMIC); in r8152_tx_agg_fill()
2449 usb_autopm_put_interface_async(tp->intf); in r8152_tx_agg_fill()
2460 if (!(tp->netdev->features & NETIF_F_RXCSUM)) in r8152_rx_csum()
2463 opts2 = le32_to_cpu(rx_desc->opts2); in r8152_rx_csum()
2464 opts3 = le32_to_cpu(rx_desc->opts3); in r8152_rx_csum()
2486 return atomic_read(&tp->rx_count) > RTL8152_MAX_RX; in rx_count_exceed()
2491 return (int)(addr - agg->buffer); in agg_offset()
2499 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_get_free_rx()
2501 list_for_each_entry_safe(agg, agg_next, &tp->rx_used, list) { in rtl_get_free_rx()
2502 if (page_count(agg->page) == 1) { in rtl_get_free_rx()
2504 list_del_init(&agg->list); in rtl_get_free_rx()
2509 list_del_init(&agg->list); in rtl_get_free_rx()
2516 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_get_free_rx()
2518 if (!agg_free && atomic_read(&tp->rx_count) < tp->rx_pending) in rtl_get_free_rx()
2529 struct napi_struct *napi = &tp->napi; in rx_bottom()
2531 if (!skb_queue_empty(&tp->rx_queue)) { in rx_bottom()
2533 struct sk_buff *skb = __skb_dequeue(&tp->rx_queue); in rx_bottom()
2534 struct net_device *netdev = tp->netdev; in rx_bottom()
2535 struct net_device_stats *stats = &netdev->stats; in rx_bottom()
2541 pkt_len = skb->len; in rx_bottom()
2544 stats->rx_packets++; in rx_bottom()
2545 stats->rx_bytes += pkt_len; in rx_bottom()
2549 if (list_empty(&tp->rx_done) || work_done >= budget) in rx_bottom()
2552 clear_bit(RX_EPROTO, &tp->flags); in rx_bottom()
2554 spin_lock_irqsave(&tp->rx_lock, flags); in rx_bottom()
2555 list_splice_init(&tp->rx_done, &rx_queue); in rx_bottom()
2556 spin_unlock_irqrestore(&tp->rx_lock, flags); in rx_bottom()
2577 urb = agg->urb; in rx_bottom()
2578 if (urb->status != 0 || urb->actual_length < ETH_ZLEN) in rx_bottom()
2583 rx_desc = agg->buffer; in rx_bottom()
2584 rx_data = agg->buffer; in rx_bottom()
2587 while (urb->actual_length > len_used) { in rx_bottom()
2588 struct net_device *netdev = tp->netdev; in rx_bottom()
2589 struct net_device_stats *stats = &netdev->stats; in rx_bottom()
2594 WARN_ON_ONCE(skb_queue_len(&tp->rx_queue) >= 1000); in rx_bottom()
2596 pkt_len = le32_to_cpu(rx_desc->opts1) & RX_LEN_MASK; in rx_bottom()
2601 if (urb->actual_length < len_used) in rx_bottom()
2604 pkt_len -= ETH_FCS_LEN; in rx_bottom()
2608 if (!agg_free || tp->rx_copybreak > len) in rx_bottom()
2620 rx_frag_head_sz = tp->rx_copybreak; in rx_bottom()
2633 stats->rx_dropped++; in rx_bottom()
2637 skb->ip_summed = r8152_rx_csum(tp, rx_desc); in rx_bottom()
2642 memcpy(skb->data, rx_data, in rx_bottom()
2645 len -= rx_frag_head_sz; in rx_bottom()
2647 skb->protocol = eth_type_trans(skb, in rx_bottom()
2651 skb_add_rx_frag(skb, 0, agg->page, in rx_bottom()
2654 get_page(agg->page); in rx_bottom()
2656 memcpy(skb->data, rx_data, len); in rx_bottom()
2658 skb->protocol = eth_type_trans(skb, netdev); in rx_bottom()
2668 stats->rx_packets++; in rx_bottom()
2669 stats->rx_bytes += pkt_len; in rx_bottom()
2671 __skb_queue_tail(&tp->rx_queue, skb); in rx_bottom()
2681 WARN_ON(!agg_free && page_count(agg->page) > 1); in rx_bottom()
2684 spin_lock_irqsave(&tp->rx_lock, flags); in rx_bottom()
2685 if (page_count(agg->page) == 1) { in rx_bottom()
2686 list_add(&agg_free->list, &tp->rx_used); in rx_bottom()
2688 list_add_tail(&agg->list, &tp->rx_used); in rx_bottom()
2690 urb = agg->urb; in rx_bottom()
2692 spin_unlock_irqrestore(&tp->rx_lock, flags); in rx_bottom()
2699 urb->actual_length = 0; in rx_bottom()
2700 list_add_tail(&agg->list, next); in rx_bottom()
2706 spin_lock_irqsave(&tp->rx_lock, flags); in rx_bottom()
2707 list_splice(&rx_queue, &tp->rx_done); in rx_bottom()
2708 spin_unlock_irqrestore(&tp->rx_lock, flags); in rx_bottom()
2720 struct net_device *netdev = tp->netdev; in tx_bottom()
2723 if (skb_queue_empty(&tp->tx_queue)) in tx_bottom()
2734 if (res == -ENODEV) { in tx_bottom()
2738 struct net_device_stats *stats = &netdev->stats; in tx_bottom()
2743 stats->tx_dropped += agg->skb_num; in tx_bottom()
2745 spin_lock_irqsave(&tp->tx_lock, flags); in tx_bottom()
2746 list_add_tail(&agg->list, &tp->tx_free); in tx_bottom()
2747 spin_unlock_irqrestore(&tp->tx_lock, flags); in tx_bottom()
2756 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in bottom_half()
2759 if (!test_bit(WORK_ENABLE, &tp->flags)) in bottom_half()
2763 /* This avoid the re-submitting bulk */ in bottom_half()
2764 if (!netif_carrier_ok(tp->netdev)) in bottom_half()
2767 clear_bit(SCHEDULE_TASKLET, &tp->flags); in bottom_half()
2785 if (!list_empty(&tp->rx_done)) in r8152_poll()
2799 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags) || in r8152_submit_rx()
2800 !test_bit(WORK_ENABLE, &tp->flags) || !netif_carrier_ok(tp->netdev)) in r8152_submit_rx()
2803 usb_fill_bulk_urb(agg->urb, tp->udev, tp->pipe_in, in r8152_submit_rx()
2804 agg->buffer, tp->rx_buf_sz, in r8152_submit_rx()
2807 ret = usb_submit_urb(agg->urb, mem_flags); in r8152_submit_rx()
2808 if (ret == -ENODEV) { in r8152_submit_rx()
2810 netif_device_detach(tp->netdev); in r8152_submit_rx()
2812 struct urb *urb = agg->urb; in r8152_submit_rx()
2815 urb->actual_length = 0; in r8152_submit_rx()
2816 spin_lock_irqsave(&tp->rx_lock, flags); in r8152_submit_rx()
2817 list_add_tail(&agg->list, &tp->rx_done); in r8152_submit_rx()
2818 spin_unlock_irqrestore(&tp->rx_lock, flags); in r8152_submit_rx()
2820 netif_err(tp, rx_err, tp->netdev, in r8152_submit_rx()
2823 napi_schedule(&tp->napi); in r8152_submit_rx()
2831 struct net_device_stats *stats = &tp->netdev->stats; in rtl_drop_queued_tx()
2832 struct sk_buff_head skb_head, *tx_queue = &tp->tx_queue; in rtl_drop_queued_tx()
2839 spin_lock_bh(&tx_queue->lock); in rtl_drop_queued_tx()
2841 spin_unlock_bh(&tx_queue->lock); in rtl_drop_queued_tx()
2845 stats->tx_dropped++; in rtl_drop_queued_tx()
2855 usb_queue_reset_device(tp->intf); in rtl8152_tx_timeout()
2863 set_bit(RTL8152_SET_RX_MODE, &tp->flags); in rtl8152_set_rx_mode()
2864 schedule_delayed_work(&tp->schedule, 0); in rtl8152_set_rx_mode()
2880 if (netdev->flags & IFF_PROMISC) { in _rtl8152_set_rx_mode()
2886 } else if ((netdev->flags & IFF_MULTICAST && in _rtl8152_set_rx_mode()
2888 (netdev->flags & IFF_ALLMULTI)) { in _rtl8152_set_rx_mode()
2889 /* Too many to filter perfectly -- accept all multicasts. */ in _rtl8152_set_rx_mode()
2897 if (netdev->flags & IFF_MULTICAST) { in _rtl8152_set_rx_mode()
2901 int bit_nr = ether_crc(ETH_ALEN, ha->addr) >> 26; in _rtl8152_set_rx_mode()
2921 u32 mss = skb_shinfo(skb)->gso_size; in rtl8152_features_check()
2924 if ((mss || skb->ip_summed == CHECKSUM_PARTIAL) && in rtl8152_features_check()
2927 else if ((skb->len + sizeof(struct tx_desc)) > agg_buf_sz) in rtl8152_features_check()
2940 skb_queue_tail(&tp->tx_queue, skb); in rtl8152_start_xmit()
2942 if (!list_empty(&tp->tx_free)) { in rtl8152_start_xmit()
2943 if (test_bit(SELECTIVE_SUSPEND, &tp->flags)) { in rtl8152_start_xmit()
2944 set_bit(SCHEDULE_TASKLET, &tp->flags); in rtl8152_start_xmit()
2945 schedule_delayed_work(&tp->schedule, 0); in rtl8152_start_xmit()
2947 usb_mark_last_busy(tp->udev); in rtl8152_start_xmit()
2948 tasklet_schedule(&tp->tx_tl); in rtl8152_start_xmit()
2950 } else if (skb_queue_len(&tp->tx_queue) > tp->tx_qlen) { in rtl8152_start_xmit()
2973 switch (tp->version) { in rtl8152_nic_reset()
3006 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl8152_nic_reset()
3018 tp->tx_qlen = agg_buf_sz / (mtu_to_size(tp->netdev->mtu) + sizeof(struct tx_desc)); in set_tx_qlen()
3067 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_start_rx()
3069 INIT_LIST_HEAD(&tp->rx_done); in rtl_start_rx()
3070 INIT_LIST_HEAD(&tp->rx_used); in rtl_start_rx()
3072 list_splice_init(&tp->rx_info, &tmp_list); in rtl_start_rx()
3074 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_start_rx()
3077 INIT_LIST_HEAD(&agg->list); in rtl_start_rx()
3081 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_start_rx()
3082 list_add_tail(&agg->list, &tp->rx_used); in rtl_start_rx()
3083 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_start_rx()
3085 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_start_rx()
3086 list_add_tail(&agg->list, &tp->rx_done); in rtl_start_rx()
3087 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_start_rx()
3093 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_start_rx()
3094 WARN_ON(!list_empty(&tp->rx_info)); in rtl_start_rx()
3095 list_splice(&tmp_list, &tp->rx_info); in rtl_start_rx()
3096 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_start_rx()
3115 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_stop_rx()
3116 list_splice_init(&tp->rx_info, &tmp_list); in rtl_stop_rx()
3117 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_stop_rx()
3123 if (page_count(agg->page) > 1) in rtl_stop_rx()
3126 usb_kill_urb(agg->urb); in rtl_stop_rx()
3130 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_stop_rx()
3131 WARN_ON(!list_empty(&tp->rx_info)); in rtl_stop_rx()
3132 list_splice(&tmp_list, &tp->rx_info); in rtl_stop_rx()
3133 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_stop_rx()
3135 while (!skb_queue_empty(&tp->rx_queue)) in rtl_stop_rx()
3136 dev_kfree_skb(__skb_dequeue(&tp->rx_queue)); in rtl_stop_rx()
3180 switch (tp->version) { in rtl_enable()
3201 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl8152_enable()
3202 return -ENODEV; in rtl8152_enable()
3212 u32 ocp_data = tp->coalesce / 8; in r8153_set_rx_early_timeout()
3214 switch (tp->version) { in r8153_set_rx_early_timeout()
3253 u32 ocp_data = tp->rx_buf_sz - rx_reserved_size(tp->netdev->mtu); in r8153_set_rx_early_size()
3255 switch (tp->version) { in r8153_set_rx_early_size()
3288 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl8153_enable()
3289 return -ENODEV; in rtl8153_enable()
3298 switch (tp->version) { in rtl8153_enable()
3320 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) { in rtl_disable()
3332 usb_kill_urb(tp->tx_info[i].urb); in rtl_disable()
3337 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl_disable()
3346 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl_disable()
3378 switch (tp->version) { in rtl_rx_vlan_en()
3417 netdev_features_t changed = features ^ dev->features; in rtl8152_set_features()
3421 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_features()
3425 mutex_lock(&tp->control); in rtl8152_set_features()
3434 mutex_unlock(&tp->control); in rtl8152_set_features()
3436 usb_autopm_put_interface(tp->intf); in rtl8152_set_features()
3499 device_set_wakeup_enable(&tp->udev->dev, true); in __rtl_set_wol()
3501 device_set_wakeup_enable(&tp->udev->dev, false); in __rtl_set_wol()
3579 if (tp->ups_info.green) in r8153b_ups_flags()
3582 if (tp->ups_info.aldps) in r8153b_ups_flags()
3585 if (tp->ups_info.eee) in r8153b_ups_flags()
3588 if (tp->ups_info.flow_control) in r8153b_ups_flags()
3591 if (tp->ups_info.eee_ckdiv) in r8153b_ups_flags()
3594 if (tp->ups_info.eee_cmod_lv) in r8153b_ups_flags()
3597 if (tp->ups_info.r_tune) in r8153b_ups_flags()
3600 if (tp->ups_info._10m_ckdiv) in r8153b_ups_flags()
3603 if (tp->ups_info.eee_plloff_100) in r8153b_ups_flags()
3606 if (tp->ups_info.eee_plloff_giga) in r8153b_ups_flags()
3609 if (tp->ups_info._250m_ckdiv) in r8153b_ups_flags()
3612 if (tp->ups_info.ctap_short_off) in r8153b_ups_flags()
3615 switch (tp->ups_info.speed_duplex) { in r8153b_ups_flags()
3654 if (tp->ups_info.green) in r8156_ups_flags()
3657 if (tp->ups_info.aldps) in r8156_ups_flags()
3660 if (tp->ups_info.eee) in r8156_ups_flags()
3663 if (tp->ups_info.flow_control) in r8156_ups_flags()
3666 if (tp->ups_info.eee_ckdiv) in r8156_ups_flags()
3669 if (tp->ups_info._10m_ckdiv) in r8156_ups_flags()
3672 if (tp->ups_info.eee_plloff_100) in r8156_ups_flags()
3675 if (tp->ups_info.eee_plloff_giga) in r8156_ups_flags()
3678 if (tp->ups_info._250m_ckdiv) in r8156_ups_flags()
3681 switch (tp->ups_info.speed_duplex) { in r8156_ups_flags()
3716 switch (tp->ups_info.lite_mode) { in r8156_ups_flags()
3743 tp->ups_info.green = enable; in rtl_green_en()
3778 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8153_phy_status()
3810 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8153b_ups_en()
3818 tp->rtl_ops.hw_phy_cfg(tp); in r8153b_ups_en()
3820 rtl8152_set_speed(tp, tp->autoneg, tp->speed, in r8153b_ups_en()
3821 tp->duplex, tp->advertising); in r8153b_ups_en()
3852 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8153c_ups_en()
3860 tp->rtl_ops.hw_phy_cfg(tp); in r8153c_ups_en()
3862 rtl8152_set_speed(tp, tp->autoneg, tp->speed, in r8153c_ups_en()
3863 tp->duplex, tp->advertising); in r8153c_ups_en()
3890 switch (tp->version) { in r8156_ups_en()
3909 tp->rtl_ops.hw_phy_cfg(tp); in r8156_ups_en()
3911 rtl8152_set_speed(tp, tp->autoneg, tp->speed, in r8156_ups_en()
3912 tp->duplex, tp->advertising); in r8156_ups_en()
3971 struct usb_device *udev = tp->udev; in rtl_can_wakeup()
3973 return (udev->actconfig->desc.bmAttributes & USB_CONFIG_ATT_WAKEUP); in rtl_can_wakeup()
3993 __rtl_set_wol(tp, tp->saved_wolopts); in rtl_runtime_suspend_enable()
4014 switch (tp->version) { in rtl8153_runtime_enable()
4041 if (tp->udev->speed >= USB_SPEED_SUPER) in rtl8153b_runtime_enable()
4073 if (tp->udev->speed >= USB_SPEED_SUPER) in rtl8156_runtime_enable()
4082 switch (tp->version) { in r8153_teredo_off()
4135 switch (tp->version) { in rtl_clear_bp()
4176 tp->ocp_base = -1; in rtl_reset_ocp_base()
4197 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl_phy_patch_request()
4198 return -ENODEV; in rtl_phy_patch_request()
4208 dev_err(&tp->intf->dev, "PHY patch request fail\n"); in rtl_phy_patch_request()
4210 return -ETIME; in rtl_phy_patch_request()
4240 return -ETIME; in rtl_pre_ram_code()
4262 switch (tp->version) { in rtl8152_is_fw_phy_speed_up_ok()
4283 fw_offset = __le16_to_cpu(phy->fw_offset); in rtl8152_is_fw_phy_speed_up_ok()
4284 length = __le32_to_cpu(phy->blk_hdr.length); in rtl8152_is_fw_phy_speed_up_ok()
4286 dev_err(&tp->intf->dev, "invalid fw_offset\n"); in rtl8152_is_fw_phy_speed_up_ok()
4290 length -= fw_offset; in rtl8152_is_fw_phy_speed_up_ok()
4292 dev_err(&tp->intf->dev, "invalid block length\n"); in rtl8152_is_fw_phy_speed_up_ok()
4296 if (__le16_to_cpu(phy->fw_reg) != 0x9A00) { in rtl8152_is_fw_phy_speed_up_ok()
4297 dev_err(&tp->intf->dev, "invalid register to load firmware\n"); in rtl8152_is_fw_phy_speed_up_ok()
4310 switch (tp->version) { in rtl8152_is_fw_phy_ver_ok()
4321 if (__le32_to_cpu(ver->blk_hdr.length) != sizeof(*ver)) { in rtl8152_is_fw_phy_ver_ok()
4322 dev_err(&tp->intf->dev, "invalid block length\n"); in rtl8152_is_fw_phy_ver_ok()
4326 if (__le16_to_cpu(ver->ver.addr) != SRAM_GPHY_FW_VER) { in rtl8152_is_fw_phy_ver_ok()
4327 dev_err(&tp->intf->dev, "invalid phy ver addr\n"); in rtl8152_is_fw_phy_ver_ok()
4340 switch (tp->version) { in rtl8152_is_fw_phy_fixup_ok()
4351 if (__le32_to_cpu(fix->blk_hdr.length) != sizeof(*fix)) { in rtl8152_is_fw_phy_fixup_ok()
4352 dev_err(&tp->intf->dev, "invalid block length\n"); in rtl8152_is_fw_phy_fixup_ok()
4356 if (__le16_to_cpu(fix->setting.addr) != OCP_PHY_PATCH_CMD || in rtl8152_is_fw_phy_fixup_ok()
4357 __le16_to_cpu(fix->setting.data) != BIT(7)) { in rtl8152_is_fw_phy_fixup_ok()
4358 dev_err(&tp->intf->dev, "invalid phy fixup\n"); in rtl8152_is_fw_phy_fixup_ok()
4373 switch (tp->version) { in rtl8152_is_fw_phy_union_ok()
4384 fw_offset = __le16_to_cpu(phy->fw_offset); in rtl8152_is_fw_phy_union_ok()
4385 length = __le32_to_cpu(phy->blk_hdr.length); in rtl8152_is_fw_phy_union_ok()
4387 dev_err(&tp->intf->dev, "invalid fw_offset\n"); in rtl8152_is_fw_phy_union_ok()
4391 length -= fw_offset; in rtl8152_is_fw_phy_union_ok()
4393 dev_err(&tp->intf->dev, "invalid block length\n"); in rtl8152_is_fw_phy_union_ok()
4397 if (phy->pre_num > 2) { in rtl8152_is_fw_phy_union_ok()
4398 dev_err(&tp->intf->dev, "invalid pre_num %d\n", phy->pre_num); in rtl8152_is_fw_phy_union_ok()
4402 if (phy->bp_num > 8) { in rtl8152_is_fw_phy_union_ok()
4403 dev_err(&tp->intf->dev, "invalid bp_num %d\n", phy->bp_num); in rtl8152_is_fw_phy_union_ok()
4418 switch (tp->version) { in rtl8152_is_fw_phy_nc_ok()
4432 fw_offset = __le16_to_cpu(phy->fw_offset); in rtl8152_is_fw_phy_nc_ok()
4434 dev_err(&tp->intf->dev, "fw_offset too small\n"); in rtl8152_is_fw_phy_nc_ok()
4438 length = __le32_to_cpu(phy->blk_hdr.length); in rtl8152_is_fw_phy_nc_ok()
4440 dev_err(&tp->intf->dev, "invalid fw_offset\n"); in rtl8152_is_fw_phy_nc_ok()
4444 length -= __le16_to_cpu(phy->fw_offset); in rtl8152_is_fw_phy_nc_ok()
4446 dev_err(&tp->intf->dev, "invalid block length\n"); in rtl8152_is_fw_phy_nc_ok()
4450 if (__le16_to_cpu(phy->fw_reg) != fw_reg) { in rtl8152_is_fw_phy_nc_ok()
4451 dev_err(&tp->intf->dev, "invalid register to load firmware\n"); in rtl8152_is_fw_phy_nc_ok()
4455 if (__le16_to_cpu(phy->ba_reg) != ba_reg) { in rtl8152_is_fw_phy_nc_ok()
4456 dev_err(&tp->intf->dev, "invalid base address register\n"); in rtl8152_is_fw_phy_nc_ok()
4460 if (__le16_to_cpu(phy->patch_en_addr) != patch_en_addr) { in rtl8152_is_fw_phy_nc_ok()
4461 dev_err(&tp->intf->dev, in rtl8152_is_fw_phy_nc_ok()
4466 if (__le16_to_cpu(phy->mode_reg) != mode_reg) { in rtl8152_is_fw_phy_nc_ok()
4467 dev_err(&tp->intf->dev, in rtl8152_is_fw_phy_nc_ok()
4472 if (__le16_to_cpu(phy->bp_start) != bp_start) { in rtl8152_is_fw_phy_nc_ok()
4473 dev_err(&tp->intf->dev, in rtl8152_is_fw_phy_nc_ok()
4478 if (__le16_to_cpu(phy->bp_num) > 4) { in rtl8152_is_fw_phy_nc_ok()
4479 dev_err(&tp->intf->dev, "invalid break point number\n"); in rtl8152_is_fw_phy_nc_ok()
4495 type = __le32_to_cpu(mac->blk_hdr.type); in rtl8152_is_fw_mac_ok()
4497 switch (tp->version) { in rtl8152_is_fw_mac_ok()
4534 switch (tp->version) { in rtl8152_is_fw_mac_ok()
4568 fw_offset = __le16_to_cpu(mac->fw_offset); in rtl8152_is_fw_mac_ok()
4570 dev_err(&tp->intf->dev, "fw_offset too small\n"); in rtl8152_is_fw_mac_ok()
4574 length = __le32_to_cpu(mac->blk_hdr.length); in rtl8152_is_fw_mac_ok()
4576 dev_err(&tp->intf->dev, "invalid fw_offset\n"); in rtl8152_is_fw_mac_ok()
4580 length -= fw_offset; in rtl8152_is_fw_mac_ok()
4582 dev_err(&tp->intf->dev, "invalid block length\n"); in rtl8152_is_fw_mac_ok()
4586 if (__le16_to_cpu(mac->fw_reg) != fw_reg) { in rtl8152_is_fw_mac_ok()
4587 dev_err(&tp->intf->dev, "invalid register to load firmware\n"); in rtl8152_is_fw_mac_ok()
4591 if (__le16_to_cpu(mac->bp_ba_addr) != bp_ba_addr) { in rtl8152_is_fw_mac_ok()
4592 dev_err(&tp->intf->dev, "invalid base address register\n"); in rtl8152_is_fw_mac_ok()
4596 if (__le16_to_cpu(mac->bp_en_addr) != bp_en_addr) { in rtl8152_is_fw_mac_ok()
4597 dev_err(&tp->intf->dev, "invalid enabled mask register\n"); in rtl8152_is_fw_mac_ok()
4601 if (__le16_to_cpu(mac->bp_start) != bp_start) { in rtl8152_is_fw_mac_ok()
4602 dev_err(&tp->intf->dev, in rtl8152_is_fw_mac_ok()
4607 if (__le16_to_cpu(mac->bp_num) > max_bp) { in rtl8152_is_fw_mac_ok()
4608 dev_err(&tp->intf->dev, "invalid break point number\n"); in rtl8152_is_fw_mac_ok()
4612 for (i = __le16_to_cpu(mac->bp_num); i < max_bp; i++) { in rtl8152_is_fw_mac_ok()
4613 if (mac->bp[i]) { in rtl8152_is_fw_mac_ok()
4614 dev_err(&tp->intf->dev, "unused bp%u is not zero\n", i); in rtl8152_is_fw_mac_ok()
4631 unsigned char checksum[sizeof(fw_hdr->checksum)]; in rtl8152_fw_verify_checksum()
4643 if (crypto_shash_digestsize(alg) != sizeof(fw_hdr->checksum)) { in rtl8152_fw_verify_checksum()
4644 rc = -EFAULT; in rtl8152_fw_verify_checksum()
4645 dev_err(&tp->intf->dev, "digestsize incorrect (%u)\n", in rtl8152_fw_verify_checksum()
4653 rc = -ENOMEM; in rtl8152_fw_verify_checksum()
4656 sdesc->tfm = alg; in rtl8152_fw_verify_checksum()
4658 len = size - sizeof(fw_hdr->checksum); in rtl8152_fw_verify_checksum()
4659 rc = crypto_shash_digest(sdesc, fw_hdr->version, len, checksum); in rtl8152_fw_verify_checksum()
4664 if (memcmp(fw_hdr->checksum, checksum, sizeof(fw_hdr->checksum))) { in rtl8152_fw_verify_checksum()
4665 dev_err(&tp->intf->dev, "checksum fail\n"); in rtl8152_fw_verify_checksum()
4666 rc = -EFAULT; in rtl8152_fw_verify_checksum()
4677 const struct firmware *fw = rtl_fw->fw; in rtl8152_check_firmware()
4678 struct fw_header *fw_hdr = (struct fw_header *)fw->data; in rtl8152_check_firmware()
4680 long ret = -EFAULT; in rtl8152_check_firmware()
4683 if (fw->size < sizeof(*fw_hdr)) { in rtl8152_check_firmware()
4684 dev_err(&tp->intf->dev, "file too small\n"); in rtl8152_check_firmware()
4688 ret = rtl8152_fw_verify_checksum(tp, fw_hdr, fw->size); in rtl8152_check_firmware()
4692 ret = -EFAULT; in rtl8152_check_firmware()
4694 for (i = sizeof(*fw_hdr); i < fw->size;) { in rtl8152_check_firmware()
4695 struct fw_block *block = (struct fw_block *)&fw->data[i]; in rtl8152_check_firmware()
4698 if ((i + sizeof(*block)) > fw->size) in rtl8152_check_firmware()
4701 type = __le32_to_cpu(block->type); in rtl8152_check_firmware()
4704 if (__le32_to_cpu(block->length) != sizeof(*block)) in rtl8152_check_firmware()
4709 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4715 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4723 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4729 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4743 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4748 if (__le32_to_cpu(block->length) != sizeof(struct fw_phy_patch_key)) { in rtl8152_check_firmware()
4749 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4758 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4763 if (__le32_to_cpu(block->length) != sizeof(*block)) { in rtl8152_check_firmware()
4764 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4773 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4779 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4785 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4798 dev_err(&tp->intf->dev, "PHY_UNION_NC out of order\n"); in rtl8152_check_firmware()
4803 dev_err(&tp->intf->dev, "multiple PHY_UNION_NC encountered\n"); in rtl8152_check_firmware()
4808 dev_err(&tp->intf->dev, "check PHY_UNION_NC failed\n"); in rtl8152_check_firmware()
4819 dev_err(&tp->intf->dev, "PHY_UNION_NC1 out of order\n"); in rtl8152_check_firmware()
4824 dev_err(&tp->intf->dev, "multiple PHY NC1 encountered\n"); in rtl8152_check_firmware()
4829 dev_err(&tp->intf->dev, "check PHY_UNION_NC1 failed\n"); in rtl8152_check_firmware()
4839 dev_err(&tp->intf->dev, "PHY_UNION_NC2 out of order\n"); in rtl8152_check_firmware()
4844 dev_err(&tp->intf->dev, "multiple PHY NC2 encountered\n"); in rtl8152_check_firmware()
4849 dev_err(&tp->intf->dev, "check PHY_UNION_NC2 failed\n"); in rtl8152_check_firmware()
4858 dev_err(&tp->intf->dev, "PHY_UNION_UC2 out of order\n"); in rtl8152_check_firmware()
4863 dev_err(&tp->intf->dev, "multiple PHY UC2 encountered\n"); in rtl8152_check_firmware()
4868 dev_err(&tp->intf->dev, "check PHY_UNION_UC2 failed\n"); in rtl8152_check_firmware()
4876 dev_err(&tp->intf->dev, "PHY_UNION_UC out of order\n"); in rtl8152_check_firmware()
4881 dev_err(&tp->intf->dev, "multiple PHY UC encountered\n"); in rtl8152_check_firmware()
4886 dev_err(&tp->intf->dev, "check PHY_UNION_UC failed\n"); in rtl8152_check_firmware()
4893 dev_err(&tp->intf->dev, "check RTL_FW_PHY_UNION_MISC failed\n"); in rtl8152_check_firmware()
4899 dev_err(&tp->intf->dev, "check PHY fixup failed\n"); in rtl8152_check_firmware()
4905 dev_err(&tp->intf->dev, "multiple PHY firmware encountered"); in rtl8152_check_firmware()
4910 dev_err(&tp->intf->dev, "check PHY speed up failed\n"); in rtl8152_check_firmware()
4923 dev_err(&tp->intf->dev, "Invalid order to set PHY version\n"); in rtl8152_check_firmware()
4928 dev_err(&tp->intf->dev, "multiple PHY version encountered"); in rtl8152_check_firmware()
4933 dev_err(&tp->intf->dev, "check PHY version failed\n"); in rtl8152_check_firmware()
4939 dev_warn(&tp->intf->dev, "Unknown type %u is found\n", in rtl8152_check_firmware()
4945 i += ALIGN(__le32_to_cpu(block->length), 8); in rtl8152_check_firmware()
4950 dev_err(&tp->intf->dev, "without PHY_STOP\n"); in rtl8152_check_firmware()
4966 if (sram_read(tp, SRAM_GPHY_FW_VER) >= __le16_to_cpu(phy->version)) { in rtl_ram_code_speed_up()
4967 dev_dbg(&tp->intf->dev, "PHY firmware has been the newest\n"); in rtl_ram_code_speed_up()
4971 len = __le32_to_cpu(phy->blk_hdr.length); in rtl_ram_code_speed_up()
4972 len -= __le16_to_cpu(phy->fw_offset); in rtl_ram_code_speed_up()
4973 data = (u8 *)phy + __le16_to_cpu(phy->fw_offset); in rtl_ram_code_speed_up()
4991 generic_ocp_write(tp, __le16_to_cpu(phy->fw_reg), 0xff, size, data, MCU_TYPE_USB); in rtl_ram_code_speed_up()
4994 len -= size; in rtl_ram_code_speed_up()
5006 dev_err(&tp->intf->dev, "ram code speedup mode timeout\n"); in rtl_ram_code_speed_up()
5015 if (sram_read(tp, SRAM_GPHY_FW_VER) == __le16_to_cpu(phy->version)) in rtl_ram_code_speed_up()
5016 dev_dbg(&tp->intf->dev, "successfully applied %s\n", phy->info); in rtl_ram_code_speed_up()
5018 dev_err(&tp->intf->dev, "ram code speedup mode fail\n"); in rtl_ram_code_speed_up()
5025 ver_addr = __le16_to_cpu(phy_ver->ver.addr); in rtl8152_fw_phy_ver()
5026 ver = __le16_to_cpu(phy_ver->ver.data); in rtl8152_fw_phy_ver()
5031 dev_dbg(&tp->intf->dev, "PHY firmware has been the newest\n"); in rtl8152_fw_phy_ver()
5037 dev_dbg(&tp->intf->dev, "PHY firmware version %x\n", ver); in rtl8152_fw_phy_ver()
5048 addr = __le16_to_cpu(fix->setting.addr); in rtl8152_fw_phy_fixup()
5051 switch (__le16_to_cpu(fix->bit_cmd)) { in rtl8152_fw_phy_fixup()
5053 data &= __le16_to_cpu(fix->setting.data); in rtl8152_fw_phy_fixup()
5056 data |= __le16_to_cpu(fix->setting.data); in rtl8152_fw_phy_fixup()
5059 data &= ~__le16_to_cpu(fix->setting.data); in rtl8152_fw_phy_fixup()
5062 data ^= __le16_to_cpu(fix->setting.data); in rtl8152_fw_phy_fixup()
5070 dev_dbg(&tp->intf->dev, "applied ocp %x %x\n", addr, data); in rtl8152_fw_phy_fixup()
5081 num = phy->pre_num; in rtl8152_fw_phy_union_apply()
5083 sram_write(tp, __le16_to_cpu(phy->pre_set[i].addr), in rtl8152_fw_phy_union_apply()
5084 __le16_to_cpu(phy->pre_set[i].data)); in rtl8152_fw_phy_union_apply()
5086 length = __le32_to_cpu(phy->blk_hdr.length); in rtl8152_fw_phy_union_apply()
5087 length -= __le16_to_cpu(phy->fw_offset); in rtl8152_fw_phy_union_apply()
5089 data = (__le16 *)((u8 *)phy + __le16_to_cpu(phy->fw_offset)); in rtl8152_fw_phy_union_apply()
5091 ocp_reg_write(tp, OCP_SRAM_ADDR, __le16_to_cpu(phy->fw_reg)); in rtl8152_fw_phy_union_apply()
5095 num = phy->bp_num; in rtl8152_fw_phy_union_apply()
5097 sram_write(tp, __le16_to_cpu(phy->bp[i].addr), __le16_to_cpu(phy->bp[i].data)); in rtl8152_fw_phy_union_apply()
5099 if (phy->bp_num && phy->bp_en.addr) in rtl8152_fw_phy_union_apply()
5100 sram_write(tp, __le16_to_cpu(phy->bp_en.addr), __le16_to_cpu(phy->bp_en.data)); in rtl8152_fw_phy_union_apply()
5102 dev_dbg(&tp->intf->dev, "successfully applied %s\n", phy->info); in rtl8152_fw_phy_union_apply()
5113 mode_reg = __le16_to_cpu(phy->mode_reg); in rtl8152_fw_phy_nc_apply()
5114 sram_write(tp, mode_reg, __le16_to_cpu(phy->mode_pre)); in rtl8152_fw_phy_nc_apply()
5115 sram_write(tp, __le16_to_cpu(phy->ba_reg), in rtl8152_fw_phy_nc_apply()
5116 __le16_to_cpu(phy->ba_data)); in rtl8152_fw_phy_nc_apply()
5118 length = __le32_to_cpu(phy->blk_hdr.length); in rtl8152_fw_phy_nc_apply()
5119 length -= __le16_to_cpu(phy->fw_offset); in rtl8152_fw_phy_nc_apply()
5121 data = (__le16 *)((u8 *)phy + __le16_to_cpu(phy->fw_offset)); in rtl8152_fw_phy_nc_apply()
5123 ocp_reg_write(tp, OCP_SRAM_ADDR, __le16_to_cpu(phy->fw_reg)); in rtl8152_fw_phy_nc_apply()
5127 sram_write(tp, __le16_to_cpu(phy->patch_en_addr), in rtl8152_fw_phy_nc_apply()
5128 __le16_to_cpu(phy->patch_en_value)); in rtl8152_fw_phy_nc_apply()
5130 bp_index = __le16_to_cpu(phy->bp_start); in rtl8152_fw_phy_nc_apply()
5131 num = __le16_to_cpu(phy->bp_num); in rtl8152_fw_phy_nc_apply()
5133 sram_write(tp, bp_index, __le16_to_cpu(phy->bp[i])); in rtl8152_fw_phy_nc_apply()
5137 sram_write(tp, mode_reg, __le16_to_cpu(phy->mode_post)); in rtl8152_fw_phy_nc_apply()
5139 dev_dbg(&tp->intf->dev, "successfully applied %s\n", phy->info); in rtl8152_fw_phy_nc_apply()
5148 switch (__le32_to_cpu(mac->blk_hdr.type)) { in rtl8152_fw_mac_apply()
5159 fw_ver_reg = __le16_to_cpu(mac->fw_ver_reg); in rtl8152_fw_mac_apply()
5160 if (fw_ver_reg && ocp_read_byte(tp, MCU_TYPE_USB, fw_ver_reg) >= mac->fw_ver_data) { in rtl8152_fw_mac_apply()
5161 dev_dbg(&tp->intf->dev, "%s firmware has been the newest\n", type ? "PLA" : "USB"); in rtl8152_fw_mac_apply()
5170 if (tp->version == RTL_VER_04 && type == MCU_TYPE_PLA && in rtl8152_fw_mac_apply()
5176 length = __le32_to_cpu(mac->blk_hdr.length); in rtl8152_fw_mac_apply()
5177 length -= __le16_to_cpu(mac->fw_offset); in rtl8152_fw_mac_apply()
5180 data += __le16_to_cpu(mac->fw_offset); in rtl8152_fw_mac_apply()
5182 if (generic_ocp_write(tp, __le16_to_cpu(mac->fw_reg), 0xff, length, in rtl8152_fw_mac_apply()
5184 dev_err(&tp->intf->dev, "Write %s fw fail\n", in rtl8152_fw_mac_apply()
5189 ocp_write_word(tp, type, __le16_to_cpu(mac->bp_ba_addr), in rtl8152_fw_mac_apply()
5190 __le16_to_cpu(mac->bp_ba_value)); in rtl8152_fw_mac_apply()
5192 if (generic_ocp_write(tp, __le16_to_cpu(mac->bp_start), BYTE_EN_DWORD, in rtl8152_fw_mac_apply()
5193 ALIGN(__le16_to_cpu(mac->bp_num) << 1, 4), in rtl8152_fw_mac_apply()
5194 mac->bp, type) < 0) { in rtl8152_fw_mac_apply()
5195 dev_err(&tp->intf->dev, "Write %s bp fail\n", in rtl8152_fw_mac_apply()
5200 bp_en_addr = __le16_to_cpu(mac->bp_en_addr); in rtl8152_fw_mac_apply()
5203 __le16_to_cpu(mac->bp_en_value)); in rtl8152_fw_mac_apply()
5207 mac->fw_ver_data); in rtl8152_fw_mac_apply()
5209 dev_dbg(&tp->intf->dev, "successfully applied %s\n", mac->info); in rtl8152_fw_mac_apply()
5214 struct rtl_fw *rtl_fw = &tp->rtl_fw; in rtl8152_apply_firmware()
5221 if (IS_ERR_OR_NULL(rtl_fw->fw)) in rtl8152_apply_firmware()
5224 fw = rtl_fw->fw; in rtl8152_apply_firmware()
5225 fw_hdr = (struct fw_header *)fw->data; in rtl8152_apply_firmware()
5227 if (rtl_fw->pre_fw) in rtl8152_apply_firmware()
5228 rtl_fw->pre_fw(tp); in rtl8152_apply_firmware()
5230 for (i = offsetof(struct fw_header, blocks); i < fw->size;) { in rtl8152_apply_firmware()
5231 struct fw_block *block = (struct fw_block *)&fw->data[i]; in rtl8152_apply_firmware()
5233 switch (__le32_to_cpu(block->type)) { in rtl8152_apply_firmware()
5244 key_addr = __le16_to_cpu(key->key_reg); in rtl8152_apply_firmware()
5245 rtl_pre_ram_code(tp, key_addr, __le16_to_cpu(key->key_data), !power_cut); in rtl8152_apply_firmware()
5279 i += ALIGN(__le32_to_cpu(block->length), 8); in rtl8152_apply_firmware()
5283 if (rtl_fw->post_fw) in rtl8152_apply_firmware()
5284 rtl_fw->post_fw(tp); in rtl8152_apply_firmware()
5287 strscpy(rtl_fw->version, fw_hdr->version, RTL_VER_SIZE); in rtl8152_apply_firmware()
5288 dev_dbg(&tp->intf->dev, "load %s successfully\n", rtl_fw->version); in rtl8152_apply_firmware()
5293 struct rtl_fw *rtl_fw = &tp->rtl_fw; in rtl8152_release_firmware()
5295 if (!IS_ERR_OR_NULL(rtl_fw->fw)) { in rtl8152_release_firmware()
5296 release_firmware(rtl_fw->fw); in rtl8152_release_firmware()
5297 rtl_fw->fw = NULL; in rtl8152_release_firmware()
5303 struct rtl_fw *rtl_fw = &tp->rtl_fw; in rtl8152_request_firmware()
5306 if (rtl_fw->fw || !rtl_fw->fw_name) { in rtl8152_request_firmware()
5307 dev_info(&tp->intf->dev, "skip request firmware\n"); in rtl8152_request_firmware()
5312 rc = request_firmware(&rtl_fw->fw, rtl_fw->fw_name, &tp->intf->dev); in rtl8152_request_firmware()
5318 release_firmware(rtl_fw->fw); in rtl8152_request_firmware()
5322 rtl_fw->fw = ERR_PTR(rc); in rtl8152_request_firmware()
5324 dev_warn(&tp->intf->dev, in rtl8152_request_firmware()
5325 "unable to load firmware patch %s (%ld)\n", in rtl8152_request_firmware()
5326 rtl_fw->fw_name, rc); in rtl8152_request_firmware()
5419 tp->ups_info.eee = enable; in r8153_eee_en()
5440 switch (tp->version) { in rtl_eee_enable()
5447 tp->eee_adv); in rtl_eee_enable()
5462 ocp_reg_write(tp, OCP_EEE_ADV, tp->eee_adv); in rtl_eee_enable()
5475 ocp_reg_write(tp, OCP_EEE_ADV, tp->eee_adv); in rtl_eee_enable()
5494 tp->ups_info.flow_control = true; in r8152b_enable_fc()
5507 rtl_eee_enable(tp, tp->eee_en); in r8152b_hw_phy_cfg()
5511 set_bit(PHY_RESET, &tp->flags); in r8152b_hw_phy_cfg()
5520 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in wait_oob_link_list_ready()
5536 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8156b_wait_loading_flash()
5579 if (tp->udev->speed == USB_SPEED_FULL || in r8152b_exit_oob()
5580 tp->udev->speed == USB_SPEED_LOW) { in r8152b_exit_oob()
5602 rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX); in r8152b_exit_oob()
5660 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8153_pre_firmware_1()
5661 return -ENODEV; in r8153_pre_firmware_1()
5751 /* enable bp0 for RTL8153-BND */ in r8153b_post_firmware_1()
5818 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8153_aldps_en()
5826 tp->ups_info.aldps = enable; in r8153_aldps_en()
5842 if (tp->version == RTL_VER_03) { in r8153_hw_phy_cfg()
5871 if (tp->eee_en) in r8153_hw_phy_cfg()
5877 switch (tp->version) { in r8153_hw_phy_cfg()
5888 set_bit(PHY_RESET, &tp->flags); in r8153_hw_phy_cfg()
5920 /* U1/U2/L1 idle timer. 500 us */ in r8153b_hw_phy_cfg()
5940 r8153b_green_en(tp, test_bit(GREEN_ETHERNET, &tp->flags)); in r8153b_hw_phy_cfg()
5950 * read efuse offset 0x7d to get a 17-bit data. Remove the dummy/fake in r8153b_hw_phy_cfg()
5951 * bit (bit3) to rebuild the real 16-bit data. Write the data to the in r8153b_hw_phy_cfg()
5959 /* ups mode tx-link-pulse timing adjustment: in r8153b_hw_phy_cfg()
5983 tp->ups_info.eee_ckdiv = true; in r8153b_hw_phy_cfg()
5988 tp->ups_info.eee_cmod_lv = true; in r8153b_hw_phy_cfg()
5989 tp->ups_info._10m_ckdiv = true; in r8153b_hw_phy_cfg()
5990 tp->ups_info.eee_plloff_giga = true; in r8153b_hw_phy_cfg()
5994 tp->ups_info._250m_ckdiv = true; in r8153b_hw_phy_cfg()
5999 if (tp->eee_en) in r8153b_hw_phy_cfg()
6005 set_bit(PHY_RESET, &tp->flags); in r8153b_hw_phy_cfg()
6012 tp->ups_info.r_tune = true; in r8153c_hw_phy_cfg()
6017 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, mtu_to_size(tp->netdev->mtu)); in rtl8153_change_mtu()
6051 rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX); in r8153_first_init()
6096 switch (tp->version) { in r8153_enter_oob()
6151 return (ALIGN(mtu_to_size(tp->netdev->mtu), 1024) + 6 * 1024); in fc_pause_on_auto()
6156 return (ALIGN(mtu_to_size(tp->netdev->mtu), 1024) + 14 * 1024); in fc_pause_off_auto()
6161 u32 pause_on = tp->fc_pause_on ? tp->fc_pause_on : fc_pause_on_auto(tp); in r8156_fc_parameter()
6162 u32 pause_off = tp->fc_pause_off ? tp->fc_pause_off : fc_pause_off_auto(tp); in r8156_fc_parameter()
6173 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl8156_enable()
6174 return -ENODEV; in rtl8156_enable()
6197 if (tp->udev->speed == USB_SPEED_HIGH) { in rtl8156_enable()
6231 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl8156b_enable()
6232 return -ENODEV; in rtl8156b_enable()
6254 if (tp->udev->speed == USB_SPEED_HIGH) { in rtl8156b_enable()
6282 return -EINVAL; in rtl8152_set_speed()
6289 tp->ups_info.speed_duplex = FORCE_10M_FULL; in rtl8152_set_speed()
6291 tp->ups_info.speed_duplex = FORCE_10M_HALF; in rtl8152_set_speed()
6298 tp->ups_info.speed_duplex = FORCE_100M_FULL; in rtl8152_set_speed()
6300 tp->ups_info.speed_duplex = FORCE_100M_HALF; in rtl8152_set_speed()
6304 if (tp->mii.supports_gmii) { in rtl8152_set_speed()
6306 tp->ups_info.speed_duplex = NWAY_1000M_FULL; in rtl8152_set_speed()
6311 ret = -EINVAL; in rtl8152_set_speed()
6316 tp->mii.full_duplex = 1; in rtl8152_set_speed()
6318 tp->mii.full_duplex = 0; in rtl8152_set_speed()
6320 tp->mii.force_media = 1; in rtl8152_set_speed()
6328 if (tp->mii.supports_gmii) { in rtl8152_set_speed()
6331 if (tp->support_2500full) in rtl8152_set_speed()
6336 return -EINVAL; in rtl8152_set_speed()
6343 tp->ups_info.speed_duplex = NWAY_10M_HALF; in rtl8152_set_speed()
6347 tp->ups_info.speed_duplex = NWAY_10M_FULL; in rtl8152_set_speed()
6352 tp->ups_info.speed_duplex = NWAY_100M_HALF; in rtl8152_set_speed()
6356 tp->ups_info.speed_duplex = NWAY_100M_FULL; in rtl8152_set_speed()
6361 tp->mii.advertising = new1; in rtl8152_set_speed()
6364 if (tp->mii.supports_gmii) { in rtl8152_set_speed()
6371 tp->ups_info.speed_duplex = NWAY_1000M_FULL; in rtl8152_set_speed()
6378 if (tp->support_2500full) { in rtl8152_set_speed()
6384 tp->ups_info.speed_duplex = NWAY_2500M_FULL; in rtl8152_set_speed()
6393 tp->mii.force_media = 0; in rtl8152_set_speed()
6396 if (test_and_clear_bit(PHY_RESET, &tp->flags)) in rtl8152_set_speed()
6417 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl8152_up()
6427 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) { in rtl8152_down()
6442 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl8153_up()
6464 switch (tp->version) { in rtl8153_up()
6482 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) { in rtl8153_down()
6503 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl8153b_up()
6519 if (tp->udev->speed >= USB_SPEED_SUPER) in rtl8153b_up()
6527 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) { in rtl8153b_down()
6546 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, mtu_to_size(tp->netdev->mtu)); in rtl8153c_change_mtu()
6554 if (tp->netdev->mtu < 8000) in rtl8153c_change_mtu()
6564 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl8153c_up()
6597 rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX); in rtl8153c_up()
6629 u32 rx_max_size = mtu_to_size(tp->netdev->mtu); in rtl8156_change_mtu()
6645 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl8156_up()
6670 rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX); in rtl8156_up()
6674 switch (tp->version) { in rtl8156_up()
6702 if (tp->saved_wolopts != __rtl_get_wol(tp)) { in rtl8156_up()
6703 netif_warn(tp, ifup, tp->netdev, "wol setting is changed\n"); in rtl8156_up()
6704 __rtl_set_wol(tp, tp->saved_wolopts); in rtl8156_up()
6710 if (tp->udev->speed >= USB_SPEED_SUPER) in rtl8156_up()
6718 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) { in rtl8156_down()
6776 tp->ocp_base = 0x2000; in rtl8152_in_nway()
6814 struct net_device *netdev = tp->netdev; in set_carrier()
6815 struct napi_struct *napi = &tp->napi; in set_carrier()
6822 tp->rtl_ops.enable(tp); in set_carrier()
6827 clear_bit(RTL8152_SET_RX_MODE, &tp->flags); in set_carrier()
6833 skb_queue_len(&tp->tx_queue) < tp->tx_qlen) { in set_carrier()
6839 tasklet_disable(&tp->tx_tl); in set_carrier()
6841 tp->rtl_ops.disable(tp); in set_carrier()
6843 tasklet_enable(&tp->tx_tl); in set_carrier()
6856 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags) || !netif_running(tp->netdev)) in rtl_work_func_t()
6859 if (usb_autopm_get_interface(tp->intf) < 0) in rtl_work_func_t()
6862 if (!test_bit(WORK_ENABLE, &tp->flags)) in rtl_work_func_t()
6865 if (!mutex_trylock(&tp->control)) { in rtl_work_func_t()
6866 schedule_delayed_work(&tp->schedule, 0); in rtl_work_func_t()
6870 if (test_and_clear_bit(RTL8152_LINK_CHG, &tp->flags)) in rtl_work_func_t()
6873 if (test_and_clear_bit(RTL8152_SET_RX_MODE, &tp->flags)) in rtl_work_func_t()
6874 _rtl8152_set_rx_mode(tp->netdev); in rtl_work_func_t()
6877 if (test_and_clear_bit(SCHEDULE_TASKLET, &tp->flags) && in rtl_work_func_t()
6878 netif_carrier_ok(tp->netdev)) in rtl_work_func_t()
6879 tasklet_schedule(&tp->tx_tl); in rtl_work_func_t()
6881 if (test_and_clear_bit(RX_EPROTO, &tp->flags) && in rtl_work_func_t()
6882 !list_empty(&tp->rx_done)) in rtl_work_func_t()
6883 napi_schedule(&tp->napi); in rtl_work_func_t()
6885 mutex_unlock(&tp->control); in rtl_work_func_t()
6888 usb_autopm_put_interface(tp->intf); in rtl_work_func_t()
6895 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl_hw_phy_work_func_t()
6898 if (usb_autopm_get_interface(tp->intf) < 0) in rtl_hw_phy_work_func_t()
6901 mutex_lock(&tp->control); in rtl_hw_phy_work_func_t()
6903 if (rtl8152_request_firmware(tp) == -ENODEV && tp->rtl_fw.retry) { in rtl_hw_phy_work_func_t()
6904 tp->rtl_fw.retry = false; in rtl_hw_phy_work_func_t()
6905 tp->rtl_fw.fw = NULL; in rtl_hw_phy_work_func_t()
6907 /* Delay execution in case request_firmware() is not ready yet. in rtl_hw_phy_work_func_t()
6909 queue_delayed_work(system_long_wq, &tp->hw_phy_work, HZ * 10); in rtl_hw_phy_work_func_t()
6913 tp->rtl_ops.hw_phy_cfg(tp); in rtl_hw_phy_work_func_t()
6915 rtl8152_set_speed(tp, tp->autoneg, tp->speed, tp->duplex, in rtl_hw_phy_work_func_t()
6916 tp->advertising); in rtl_hw_phy_work_func_t()
6919 mutex_unlock(&tp->control); in rtl_hw_phy_work_func_t()
6921 usb_autopm_put_interface(tp->intf); in rtl_hw_phy_work_func_t()
6933 usb_autopm_get_interface(tp->intf); in rtl_notifier()
6938 usb_autopm_put_interface(tp->intf); in rtl_notifier()
6956 if (work_busy(&tp->hw_phy_work.work) & WORK_BUSY_PENDING) { in rtl8152_open()
6957 cancel_delayed_work_sync(&tp->hw_phy_work); in rtl8152_open()
6958 rtl_hw_phy_work_func_t(&tp->hw_phy_work.work); in rtl8152_open()
6965 res = usb_autopm_get_interface(tp->intf); in rtl8152_open()
6969 mutex_lock(&tp->control); in rtl8152_open()
6971 tp->rtl_ops.up(tp); in rtl8152_open()
6975 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_open()
6977 res = usb_submit_urb(tp->intr_urb, GFP_KERNEL); in rtl8152_open()
6979 if (res == -ENODEV) in rtl8152_open()
6980 netif_device_detach(tp->netdev); in rtl8152_open()
6985 napi_enable(&tp->napi); in rtl8152_open()
6986 tasklet_enable(&tp->tx_tl); in rtl8152_open()
6988 mutex_unlock(&tp->control); in rtl8152_open()
6990 usb_autopm_put_interface(tp->intf); in rtl8152_open()
6992 tp->pm_notifier.notifier_call = rtl_notifier; in rtl8152_open()
6993 register_pm_notifier(&tp->pm_notifier); in rtl8152_open()
6998 mutex_unlock(&tp->control); in rtl8152_open()
6999 usb_autopm_put_interface(tp->intf); in rtl8152_open()
7012 unregister_pm_notifier(&tp->pm_notifier); in rtl8152_close()
7014 tasklet_disable(&tp->tx_tl); in rtl8152_close()
7015 clear_bit(WORK_ENABLE, &tp->flags); in rtl8152_close()
7016 usb_kill_urb(tp->intr_urb); in rtl8152_close()
7017 cancel_delayed_work_sync(&tp->schedule); in rtl8152_close()
7018 napi_disable(&tp->napi); in rtl8152_close()
7021 res = usb_autopm_get_interface(tp->intf); in rtl8152_close()
7022 if (res < 0 || test_bit(RTL8152_INACCESSIBLE, &tp->flags)) { in rtl8152_close()
7026 mutex_lock(&tp->control); in rtl8152_close()
7028 tp->rtl_ops.down(tp); in rtl8152_close()
7030 mutex_unlock(&tp->control); in rtl8152_close()
7034 usb_autopm_put_interface(tp->intf); in rtl8152_close()
7055 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8152b_init()
7066 if (tp->version == RTL_VER_01) { in r8152b_init()
7099 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8153_init()
7110 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8153_init()
7116 if (tp->version == RTL_VER_03 || tp->version == RTL_VER_04 || in r8153_init()
7117 tp->version == RTL_VER_05) in r8153_init()
7130 if (tp->version == RTL_VER_04) { in r8153_init()
7139 } else if (tp->version == RTL_VER_05) { in r8153_init()
7150 } else if (tp->version == RTL_VER_06) { in r8153_init()
7182 if (tp->version == RTL_VER_04 && tp->udev->speed < USB_SPEED_SUPER) in r8153_init()
7199 usb_enable_lpm(tp->udev); in r8153_init()
7212 if (tp->dell_tb_rx_agg_bug) in r8153_init()
7219 switch (tp->udev->speed) { in r8153_init()
7222 tp->coalesce = COALESCE_SUPER; in r8153_init()
7225 tp->coalesce = COALESCE_HIGH; in r8153_init()
7228 tp->coalesce = COALESCE_SLOW; in r8153_init()
7239 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8153b_init()
7250 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8153b_init()
7282 if (tp->udev->speed >= USB_SPEED_SUPER) in r8153b_init()
7285 usb_enable_lpm(tp->udev); in r8153b_init()
7294 if (tp->version == RTL_VER_09) { in r8153b_init()
7303 set_bit(GREEN_ETHERNET, &tp->flags); in r8153b_init()
7312 tp->coalesce = 15000; /* 15 us */ in r8153b_init()
7321 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8153c_init()
7341 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8153c_init()
7376 usb_enable_lpm(tp->udev); in r8153c_init()
7385 set_bit(GREEN_ETHERNET, &tp->flags); in r8153c_init()
7394 tp->coalesce = 15000; /* 15 us */ in r8153c_init()
7437 switch (tp->version) { in r8156_hw_phy_cfg()
7615 tp->ups_info._10m_ckdiv = true; in r8156_hw_phy_cfg()
7616 tp->ups_info.eee_plloff_100 = false; in r8156_hw_phy_cfg()
7617 tp->ups_info.eee_plloff_giga = false; in r8156_hw_phy_cfg()
7622 tp->ups_info.eee_ckdiv = false; in r8156_hw_phy_cfg()
7626 tp->ups_info._250m_ckdiv = false; in r8156_hw_phy_cfg()
7727 rtl_green_en(tp, test_bit(GREEN_ETHERNET, &tp->flags)); in r8156_hw_phy_cfg()
7735 tp->ups_info.lite_mode = 0; in r8156_hw_phy_cfg()
7737 if (tp->eee_en) in r8156_hw_phy_cfg()
7744 set_bit(PHY_RESET, &tp->flags); in r8156_hw_phy_cfg()
7752 switch (tp->version) { in r8156b_hw_phy_cfg()
7824 switch (tp->version) { in r8156b_hw_phy_cfg()
8095 /* Green Table-PGA, 1G full viterbi */ in r8156b_hw_phy_cfg()
8133 tp->ups_info._10m_ckdiv = true; in r8156b_hw_phy_cfg()
8134 tp->ups_info.eee_plloff_100 = false; in r8156b_hw_phy_cfg()
8135 tp->ups_info.eee_plloff_giga = false; in r8156b_hw_phy_cfg()
8140 tp->ups_info.eee_ckdiv = false; in r8156b_hw_phy_cfg()
8144 rtl_green_en(tp, test_bit(GREEN_ETHERNET, &tp->flags)); in r8156b_hw_phy_cfg()
8152 tp->ups_info.lite_mode = 0; in r8156b_hw_phy_cfg()
8154 if (tp->eee_en) in r8156b_hw_phy_cfg()
8161 set_bit(PHY_RESET, &tp->flags); in r8156b_hw_phy_cfg()
8170 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8156_init()
8191 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8156_init()
8216 /* U1/U2/L1 idle timer. 500 us */ in r8156_init()
8224 if (tp->udev->speed >= USB_SPEED_SUPER) in r8156_init()
8227 usb_enable_lpm(tp->udev); in r8156_init()
8243 set_bit(GREEN_ETHERNET, &tp->flags); in r8156_init()
8257 tp->coalesce = 15000; /* 15 us */ in r8156_init()
8266 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8156b_init()
8285 switch (tp->version) { in r8156b_init()
8300 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8156b_init()
8328 /* U1/U2/L1 idle timer. 500 us */ in r8156b_init()
8336 if (tp->udev->speed >= USB_SPEED_SUPER) in r8156b_init()
8339 usb_enable_lpm(tp->udev); in r8156b_init()
8377 set_bit(GREEN_ETHERNET, &tp->flags); in r8156b_init()
8387 tp->coalesce = 15000; /* 15 us */ in r8156b_init()
8392 struct usb_host_interface *alt = intf->cur_altsetting; in rtl_check_vendor_ok()
8396 dev_err(&intf->dev, "Expected endpoints are not found\n"); in rtl_check_vendor_ok()
8402 dev_err(&intf->dev, "Invalid Rx endpoint address\n"); in rtl_check_vendor_ok()
8408 dev_err(&intf->dev, "Invalid Tx endpoint address\n"); in rtl_check_vendor_ok()
8414 dev_err(&intf->dev, "Invalid interrupt endpoint address\n"); in rtl_check_vendor_ok()
8428 if (!tp || !test_bit(PROBED_WITH_NO_ERRORS, &tp->flags)) in rtl8152_pre_reset()
8431 netdev = tp->netdev; in rtl8152_pre_reset()
8436 tasklet_disable(&tp->tx_tl); in rtl8152_pre_reset()
8437 clear_bit(WORK_ENABLE, &tp->flags); in rtl8152_pre_reset()
8438 usb_kill_urb(tp->intr_urb); in rtl8152_pre_reset()
8439 cancel_delayed_work_sync(&tp->schedule); in rtl8152_pre_reset()
8440 napi_disable(&tp->napi); in rtl8152_pre_reset()
8442 mutex_lock(&tp->control); in rtl8152_pre_reset()
8443 set_bit(IN_PRE_RESET, &tp->flags); in rtl8152_pre_reset()
8444 tp->rtl_ops.disable(tp); in rtl8152_pre_reset()
8445 clear_bit(IN_PRE_RESET, &tp->flags); in rtl8152_pre_reset()
8446 mutex_unlock(&tp->control); in rtl8152_pre_reset()
8458 if (!tp || !test_bit(PROBED_WITH_NO_ERRORS, &tp->flags)) in rtl8152_post_reset()
8465 dev_set_mac_address (tp->netdev, &sa, NULL); in rtl8152_post_reset()
8467 netdev = tp->netdev; in rtl8152_post_reset()
8471 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_post_reset()
8473 mutex_lock(&tp->control); in rtl8152_post_reset()
8474 tp->rtl_ops.enable(tp); in rtl8152_post_reset()
8477 mutex_unlock(&tp->control); in rtl8152_post_reset()
8480 napi_enable(&tp->napi); in rtl8152_post_reset()
8481 tasklet_enable(&tp->tx_tl); in rtl8152_post_reset()
8483 usb_submit_urb(tp->intr_urb, GFP_KERNEL); in rtl8152_post_reset()
8485 if (!list_empty(&tp->rx_done)) in rtl8152_post_reset()
8486 napi_schedule(&tp->napi); in rtl8152_post_reset()
8495 bool sw_linking = !!netif_carrier_ok(tp->netdev); in delay_autosuspend()
8502 if (work_busy(&tp->schedule.work) || sw_linking != hw_linking) in delay_autosuspend()
8508 if (!sw_linking && tp->rtl_ops.in_nway(tp)) in delay_autosuspend()
8510 else if (!skb_queue_empty(&tp->tx_queue)) in delay_autosuspend()
8518 struct net_device *netdev = tp->netdev; in rtl8152_runtime_resume()
8520 if (netif_running(netdev) && netdev->flags & IFF_UP) { in rtl8152_runtime_resume()
8521 struct napi_struct *napi = &tp->napi; in rtl8152_runtime_resume()
8523 tp->rtl_ops.autosuspend_en(tp, false); in rtl8152_runtime_resume()
8525 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_runtime_resume()
8532 tp->rtl_ops.disable(tp); in rtl8152_runtime_resume()
8538 clear_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_runtime_resume()
8541 if (!list_empty(&tp->rx_done)) in rtl8152_runtime_resume()
8542 napi_schedule(&tp->napi); in rtl8152_runtime_resume()
8544 usb_submit_urb(tp->intr_urb, GFP_NOIO); in rtl8152_runtime_resume()
8546 if (netdev->flags & IFF_UP) in rtl8152_runtime_resume()
8547 tp->rtl_ops.autosuspend_en(tp, false); in rtl8152_runtime_resume()
8549 clear_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_runtime_resume()
8557 struct net_device *netdev = tp->netdev; in rtl8152_system_resume()
8561 if (netif_running(netdev) && (netdev->flags & IFF_UP)) { in rtl8152_system_resume()
8562 tp->rtl_ops.up(tp); in rtl8152_system_resume()
8564 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_system_resume()
8565 usb_submit_urb(tp->intr_urb, GFP_NOIO); in rtl8152_system_resume()
8575 * wrapper over device_lock() and device_resume() (which calls us) in rtl8152_system_resume()
8576 * does that for us. in rtl8152_system_resume()
8578 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl8152_system_resume()
8579 usb_reset_device(tp->udev); in rtl8152_system_resume()
8586 struct net_device *netdev = tp->netdev; in rtl8152_runtime_suspend()
8589 if (!tp->rtl_ops.autosuspend_en) in rtl8152_runtime_suspend()
8590 return -EBUSY; in rtl8152_runtime_suspend()
8592 set_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_runtime_suspend()
8595 if (netif_running(netdev) && test_bit(WORK_ENABLE, &tp->flags)) { in rtl8152_runtime_suspend()
8610 clear_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_runtime_suspend()
8612 ret = -EBUSY; in rtl8152_runtime_suspend()
8617 clear_bit(WORK_ENABLE, &tp->flags); in rtl8152_runtime_suspend()
8618 usb_kill_urb(tp->intr_urb); in rtl8152_runtime_suspend()
8620 tp->rtl_ops.autosuspend_en(tp, true); in rtl8152_runtime_suspend()
8623 struct napi_struct *napi = &tp->napi; in rtl8152_runtime_suspend()
8634 ret = -EBUSY; in rtl8152_runtime_suspend()
8644 struct net_device *netdev = tp->netdev; in rtl8152_system_suspend()
8648 if (netif_running(netdev) && test_bit(WORK_ENABLE, &tp->flags)) { in rtl8152_system_suspend()
8649 struct napi_struct *napi = &tp->napi; in rtl8152_system_suspend()
8651 clear_bit(WORK_ENABLE, &tp->flags); in rtl8152_system_suspend()
8652 usb_kill_urb(tp->intr_urb); in rtl8152_system_suspend()
8653 tasklet_disable(&tp->tx_tl); in rtl8152_system_suspend()
8655 cancel_delayed_work_sync(&tp->schedule); in rtl8152_system_suspend()
8656 tp->rtl_ops.down(tp); in rtl8152_system_suspend()
8658 tasklet_enable(&tp->tx_tl); in rtl8152_system_suspend()
8665 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl8152_system_suspend()
8666 pm_wakeup_event(&tp->udev->dev, 0); in rtl8152_system_suspend()
8676 mutex_lock(&tp->control); in rtl8152_suspend()
8683 mutex_unlock(&tp->control); in rtl8152_suspend()
8693 mutex_lock(&tp->control); in rtl8152_resume()
8697 if (test_bit(SELECTIVE_SUSPEND, &tp->flags)) in rtl8152_resume()
8702 mutex_unlock(&tp->control); in rtl8152_resume()
8711 clear_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_reset_resume()
8713 tp->rtl_ops.init(tp); in rtl8152_reset_resume()
8714 queue_delayed_work(system_long_wq, &tp->hw_phy_work, 0); in rtl8152_reset_resume()
8723 if (usb_autopm_get_interface(tp->intf) < 0) in rtl8152_get_wol()
8727 wol->supported = 0; in rtl8152_get_wol()
8728 wol->wolopts = 0; in rtl8152_get_wol()
8730 mutex_lock(&tp->control); in rtl8152_get_wol()
8731 wol->supported = WAKE_ANY; in rtl8152_get_wol()
8732 wol->wolopts = __rtl_get_wol(tp); in rtl8152_get_wol()
8733 mutex_unlock(&tp->control); in rtl8152_get_wol()
8736 usb_autopm_put_interface(tp->intf); in rtl8152_get_wol()
8745 return -EOPNOTSUPP; in rtl8152_set_wol()
8747 if (wol->wolopts & ~WAKE_ANY) in rtl8152_set_wol()
8748 return -EINVAL; in rtl8152_set_wol()
8750 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_wol()
8754 mutex_lock(&tp->control); in rtl8152_set_wol()
8756 __rtl_set_wol(tp, wol->wolopts); in rtl8152_set_wol()
8757 tp->saved_wolopts = wol->wolopts & WAKE_ANY; in rtl8152_set_wol()
8759 mutex_unlock(&tp->control); in rtl8152_set_wol()
8761 usb_autopm_put_interface(tp->intf); in rtl8152_set_wol()
8771 return tp->msg_enable; in rtl8152_get_msglevel()
8778 tp->msg_enable = value; in rtl8152_set_msglevel()
8786 strscpy(info->driver, MODULENAME, sizeof(info->driver)); in rtl8152_get_drvinfo()
8787 strscpy(info->version, DRIVER_VERSION, sizeof(info->version)); in rtl8152_get_drvinfo()
8788 usb_make_path(tp->udev, info->bus_info, sizeof(info->bus_info)); in rtl8152_get_drvinfo()
8789 if (!IS_ERR_OR_NULL(tp->rtl_fw.fw)) in rtl8152_get_drvinfo()
8790 strscpy(info->fw_version, tp->rtl_fw.version, in rtl8152_get_drvinfo()
8791 sizeof(info->fw_version)); in rtl8152_get_drvinfo()
8801 if (!tp->mii.mdio_read) in rtl8152_get_link_ksettings()
8802 return -EOPNOTSUPP; in rtl8152_get_link_ksettings()
8804 ret = usb_autopm_get_interface(tp->intf); in rtl8152_get_link_ksettings()
8808 mutex_lock(&tp->control); in rtl8152_get_link_ksettings()
8810 mii_ethtool_get_link_ksettings(&tp->mii, cmd); in rtl8152_get_link_ksettings()
8813 cmd->link_modes.supported, tp->support_2500full); in rtl8152_get_link_ksettings()
8815 if (tp->support_2500full) { in rtl8152_get_link_ksettings()
8817 cmd->link_modes.advertising, in rtl8152_get_link_ksettings()
8821 cmd->link_modes.lp_advertising, in rtl8152_get_link_ksettings()
8825 cmd->base.speed = SPEED_2500; in rtl8152_get_link_ksettings()
8828 mutex_unlock(&tp->control); in rtl8152_get_link_ksettings()
8830 usb_autopm_put_interface(tp->intf); in rtl8152_get_link_ksettings()
8843 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_link_ksettings()
8848 cmd->link_modes.advertising)) in rtl8152_set_link_ksettings()
8852 cmd->link_modes.advertising)) in rtl8152_set_link_ksettings()
8856 cmd->link_modes.advertising)) in rtl8152_set_link_ksettings()
8860 cmd->link_modes.advertising)) in rtl8152_set_link_ksettings()
8864 cmd->link_modes.advertising)) in rtl8152_set_link_ksettings()
8868 cmd->link_modes.advertising)) in rtl8152_set_link_ksettings()
8872 cmd->link_modes.advertising)) in rtl8152_set_link_ksettings()
8875 mutex_lock(&tp->control); in rtl8152_set_link_ksettings()
8877 ret = rtl8152_set_speed(tp, cmd->base.autoneg, cmd->base.speed, in rtl8152_set_link_ksettings()
8878 cmd->base.duplex, advertising); in rtl8152_set_link_ksettings()
8880 tp->autoneg = cmd->base.autoneg; in rtl8152_set_link_ksettings()
8881 tp->speed = cmd->base.speed; in rtl8152_set_link_ksettings()
8882 tp->duplex = cmd->base.duplex; in rtl8152_set_link_ksettings()
8883 tp->advertising = advertising; in rtl8152_set_link_ksettings()
8886 mutex_unlock(&tp->control); in rtl8152_set_link_ksettings()
8888 usb_autopm_put_interface(tp->intf); in rtl8152_set_link_ksettings()
8916 return -EOPNOTSUPP; in rtl8152_get_sset_count()
8926 if (usb_autopm_get_interface(tp->intf) < 0) in rtl8152_get_ethtool_stats()
8931 usb_autopm_put_interface(tp->intf); in rtl8152_get_ethtool_stats()
8963 mii_eee_cap1_mod_linkmode_t(eee->supported, val); in r8152_get_eee()
8966 mii_eee_cap1_mod_linkmode_t(eee->advertised, val); in r8152_get_eee()
8969 mii_eee_cap1_mod_linkmode_t(eee->lp_advertised, val); in r8152_get_eee()
8971 eee->eee_enabled = tp->eee_en; in r8152_get_eee()
8973 linkmode_and(common, eee->advertised, eee->lp_advertised); in r8152_get_eee()
8974 eee->eee_active = phy_check_valid(tp->speed, tp->duplex, common); in r8152_get_eee()
8981 u16 val = linkmode_to_mii_eee_cap1_t(eee->advertised); in r8152_set_eee()
8983 tp->eee_en = eee->eee_enabled; in r8152_set_eee()
8984 tp->eee_adv = val; in r8152_set_eee()
8986 rtl_eee_enable(tp, tp->eee_en); in r8152_set_eee()
8997 mii_eee_cap1_mod_linkmode_t(eee->supported, val); in r8153_get_eee()
9000 mii_eee_cap1_mod_linkmode_t(eee->advertised, val); in r8153_get_eee()
9003 mii_eee_cap1_mod_linkmode_t(eee->lp_advertised, val); in r8153_get_eee()
9005 eee->eee_enabled = tp->eee_en; in r8153_get_eee()
9007 linkmode_and(common, eee->advertised, eee->lp_advertised); in r8153_get_eee()
9008 eee->eee_active = phy_check_valid(tp->speed, tp->duplex, common); in r8153_get_eee()
9019 if (!tp->rtl_ops.eee_get) { in rtl_ethtool_get_eee()
9020 ret = -EOPNOTSUPP; in rtl_ethtool_get_eee()
9024 ret = usb_autopm_get_interface(tp->intf); in rtl_ethtool_get_eee()
9028 mutex_lock(&tp->control); in rtl_ethtool_get_eee()
9030 ret = tp->rtl_ops.eee_get(tp, edata); in rtl_ethtool_get_eee()
9032 mutex_unlock(&tp->control); in rtl_ethtool_get_eee()
9034 usb_autopm_put_interface(tp->intf); in rtl_ethtool_get_eee()
9046 if (!tp->rtl_ops.eee_set) { in rtl_ethtool_set_eee()
9047 ret = -EOPNOTSUPP; in rtl_ethtool_set_eee()
9051 ret = usb_autopm_get_interface(tp->intf); in rtl_ethtool_set_eee()
9055 mutex_lock(&tp->control); in rtl_ethtool_set_eee()
9057 ret = tp->rtl_ops.eee_set(tp, edata); in rtl_ethtool_set_eee()
9059 ret = mii_nway_restart(&tp->mii); in rtl_ethtool_set_eee()
9061 mutex_unlock(&tp->control); in rtl_ethtool_set_eee()
9063 usb_autopm_put_interface(tp->intf); in rtl_ethtool_set_eee()
9074 ret = usb_autopm_get_interface(tp->intf); in rtl8152_nway_reset()
9078 mutex_lock(&tp->control); in rtl8152_nway_reset()
9080 ret = mii_nway_restart(&tp->mii); in rtl8152_nway_reset()
9082 mutex_unlock(&tp->control); in rtl8152_nway_reset()
9084 usb_autopm_put_interface(tp->intf); in rtl8152_nway_reset()
9097 switch (tp->version) { in rtl8152_get_coalesce()
9101 return -EOPNOTSUPP; in rtl8152_get_coalesce()
9106 coalesce->rx_coalesce_usecs = tp->coalesce; in rtl8152_get_coalesce()
9119 switch (tp->version) { in rtl8152_set_coalesce()
9123 return -EOPNOTSUPP; in rtl8152_set_coalesce()
9128 if (coalesce->rx_coalesce_usecs > COALESCE_SLOW) in rtl8152_set_coalesce()
9129 return -EINVAL; in rtl8152_set_coalesce()
9131 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_coalesce()
9135 mutex_lock(&tp->control); in rtl8152_set_coalesce()
9137 if (tp->coalesce != coalesce->rx_coalesce_usecs) { in rtl8152_set_coalesce()
9138 tp->coalesce = coalesce->rx_coalesce_usecs; in rtl8152_set_coalesce()
9142 napi_disable(&tp->napi); in rtl8152_set_coalesce()
9143 tp->rtl_ops.disable(tp); in rtl8152_set_coalesce()
9144 tp->rtl_ops.enable(tp); in rtl8152_set_coalesce()
9146 clear_bit(RTL8152_SET_RX_MODE, &tp->flags); in rtl8152_set_coalesce()
9148 napi_enable(&tp->napi); in rtl8152_set_coalesce()
9153 mutex_unlock(&tp->control); in rtl8152_set_coalesce()
9155 usb_autopm_put_interface(tp->intf); in rtl8152_set_coalesce()
9165 switch (tunable->id) { in rtl8152_get_tunable()
9167 *(u32 *)d = tp->rx_copybreak; in rtl8152_get_tunable()
9170 return -EOPNOTSUPP; in rtl8152_get_tunable()
9183 switch (tunable->id) { in rtl8152_set_tunable()
9189 return -EINVAL; in rtl8152_set_tunable()
9192 if (tp->rx_copybreak != val) { in rtl8152_set_tunable()
9193 if (netdev->flags & IFF_UP) { in rtl8152_set_tunable()
9194 mutex_lock(&tp->control); in rtl8152_set_tunable()
9195 napi_disable(&tp->napi); in rtl8152_set_tunable()
9196 tp->rx_copybreak = val; in rtl8152_set_tunable()
9197 napi_enable(&tp->napi); in rtl8152_set_tunable()
9198 mutex_unlock(&tp->control); in rtl8152_set_tunable()
9200 tp->rx_copybreak = val; in rtl8152_set_tunable()
9205 return -EOPNOTSUPP; in rtl8152_set_tunable()
9218 ring->rx_max_pending = RTL8152_RX_MAX_PENDING; in rtl8152_get_ringparam()
9219 ring->rx_pending = tp->rx_pending; in rtl8152_get_ringparam()
9229 if (ring->rx_pending < (RTL8152_MAX_RX * 2)) in rtl8152_set_ringparam()
9230 return -EINVAL; in rtl8152_set_ringparam()
9232 if (tp->rx_pending != ring->rx_pending) { in rtl8152_set_ringparam()
9233 if (netdev->flags & IFF_UP) { in rtl8152_set_ringparam()
9234 mutex_lock(&tp->control); in rtl8152_set_ringparam()
9235 napi_disable(&tp->napi); in rtl8152_set_ringparam()
9236 tp->rx_pending = ring->rx_pending; in rtl8152_set_ringparam()
9237 napi_enable(&tp->napi); in rtl8152_set_ringparam()
9238 mutex_unlock(&tp->control); in rtl8152_set_ringparam()
9240 tp->rx_pending = ring->rx_pending; in rtl8152_set_ringparam()
9253 if (usb_autopm_get_interface(tp->intf) < 0) in rtl8152_get_pauseparam()
9256 mutex_lock(&tp->control); in rtl8152_get_pauseparam()
9262 mutex_unlock(&tp->control); in rtl8152_get_pauseparam()
9264 usb_autopm_put_interface(tp->intf); in rtl8152_get_pauseparam()
9267 pause->autoneg = 0; in rtl8152_get_pauseparam()
9268 pause->rx_pause = 0; in rtl8152_get_pauseparam()
9269 pause->tx_pause = 0; in rtl8152_get_pauseparam()
9273 pause->autoneg = 1; in rtl8152_get_pauseparam()
9278 pause->rx_pause = 1; in rtl8152_get_pauseparam()
9281 pause->tx_pause = 1; in rtl8152_get_pauseparam()
9291 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_pauseparam()
9295 mutex_lock(&tp->control); in rtl8152_set_pauseparam()
9297 if (pause->autoneg && !(r8152_mdio_read(tp, MII_BMCR) & BMCR_ANENABLE)) { in rtl8152_set_pauseparam()
9298 ret = -EINVAL; in rtl8152_set_pauseparam()
9302 if (pause->rx_pause) in rtl8152_set_pauseparam()
9305 if (pause->tx_pause) in rtl8152_set_pauseparam()
9314 mutex_unlock(&tp->control); in rtl8152_set_pauseparam()
9315 usb_autopm_put_interface(tp->intf); in rtl8152_set_pauseparam()
9352 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl8152_ioctl()
9353 return -ENODEV; in rtl8152_ioctl()
9355 res = usb_autopm_get_interface(tp->intf); in rtl8152_ioctl()
9361 data->phy_id = R8152_PHY_ID; /* Internal PHY */ in rtl8152_ioctl()
9365 mutex_lock(&tp->control); in rtl8152_ioctl()
9366 data->val_out = r8152_mdio_read(tp, data->reg_num); in rtl8152_ioctl()
9367 mutex_unlock(&tp->control); in rtl8152_ioctl()
9372 res = -EPERM; in rtl8152_ioctl()
9375 mutex_lock(&tp->control); in rtl8152_ioctl()
9376 r8152_mdio_write(tp, data->reg_num, data->val_in); in rtl8152_ioctl()
9377 mutex_unlock(&tp->control); in rtl8152_ioctl()
9381 res = -EOPNOTSUPP; in rtl8152_ioctl()
9384 usb_autopm_put_interface(tp->intf); in rtl8152_ioctl()
9395 switch (tp->version) { in rtl8152_change_mtu()
9399 WRITE_ONCE(dev->mtu, new_mtu); in rtl8152_change_mtu()
9405 ret = usb_autopm_get_interface(tp->intf); in rtl8152_change_mtu()
9409 mutex_lock(&tp->control); in rtl8152_change_mtu()
9411 WRITE_ONCE(dev->mtu, new_mtu); in rtl8152_change_mtu()
9414 if (tp->rtl_ops.change_mtu) in rtl8152_change_mtu()
9415 tp->rtl_ops.change_mtu(tp); in rtl8152_change_mtu()
9419 napi_disable(&tp->napi); in rtl8152_change_mtu()
9420 tasklet_disable(&tp->tx_tl); in rtl8152_change_mtu()
9421 tp->rtl_ops.disable(tp); in rtl8152_change_mtu()
9422 tp->rtl_ops.enable(tp); in rtl8152_change_mtu()
9424 tasklet_enable(&tp->tx_tl); in rtl8152_change_mtu()
9425 napi_enable(&tp->napi); in rtl8152_change_mtu()
9431 mutex_unlock(&tp->control); in rtl8152_change_mtu()
9433 usb_autopm_put_interface(tp->intf); in rtl8152_change_mtu()
9454 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl8152_unload()
9457 if (tp->version != RTL_VER_01) in rtl8152_unload()
9463 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl8153_unload()
9471 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl8153b_unload()
9479 struct rtl_ops *ops = &tp->rtl_ops; in rtl_ops_init()
9482 switch (tp->version) { in rtl_ops_init()
9486 ops->init = r8152b_init; in rtl_ops_init()
9487 ops->enable = rtl8152_enable; in rtl_ops_init()
9488 ops->disable = rtl8152_disable; in rtl_ops_init()
9489 ops->up = rtl8152_up; in rtl_ops_init()
9490 ops->down = rtl8152_down; in rtl_ops_init()
9491 ops->unload = rtl8152_unload; in rtl_ops_init()
9492 ops->eee_get = r8152_get_eee; in rtl_ops_init()
9493 ops->eee_set = r8152_set_eee; in rtl_ops_init()
9494 ops->in_nway = rtl8152_in_nway; in rtl_ops_init()
9495 ops->hw_phy_cfg = r8152b_hw_phy_cfg; in rtl_ops_init()
9496 ops->autosuspend_en = rtl_runtime_suspend_enable; in rtl_ops_init()
9497 tp->rx_buf_sz = 16 * 1024; in rtl_ops_init()
9498 tp->eee_en = true; in rtl_ops_init()
9499 tp->eee_adv = MDIO_EEE_100TX; in rtl_ops_init()
9506 ops->init = r8153_init; in rtl_ops_init()
9507 ops->enable = rtl8153_enable; in rtl_ops_init()
9508 ops->disable = rtl8153_disable; in rtl_ops_init()
9509 ops->up = rtl8153_up; in rtl_ops_init()
9510 ops->down = rtl8153_down; in rtl_ops_init()
9511 ops->unload = rtl8153_unload; in rtl_ops_init()
9512 ops->eee_get = r8153_get_eee; in rtl_ops_init()
9513 ops->eee_set = r8152_set_eee; in rtl_ops_init()
9514 ops->in_nway = rtl8153_in_nway; in rtl_ops_init()
9515 ops->hw_phy_cfg = r8153_hw_phy_cfg; in rtl_ops_init()
9516 ops->autosuspend_en = rtl8153_runtime_enable; in rtl_ops_init()
9517 ops->change_mtu = rtl8153_change_mtu; in rtl_ops_init()
9518 if (tp->udev->speed < USB_SPEED_SUPER) in rtl_ops_init()
9519 tp->rx_buf_sz = 16 * 1024; in rtl_ops_init()
9521 tp->rx_buf_sz = 32 * 1024; in rtl_ops_init()
9522 tp->eee_en = true; in rtl_ops_init()
9523 tp->eee_adv = MDIO_EEE_1000T | MDIO_EEE_100TX; in rtl_ops_init()
9528 ops->init = r8153b_init; in rtl_ops_init()
9529 ops->enable = rtl8153_enable; in rtl_ops_init()
9530 ops->disable = rtl8153_disable; in rtl_ops_init()
9531 ops->up = rtl8153b_up; in rtl_ops_init()
9532 ops->down = rtl8153b_down; in rtl_ops_init()
9533 ops->unload = rtl8153b_unload; in rtl_ops_init()
9534 ops->eee_get = r8153_get_eee; in rtl_ops_init()
9535 ops->eee_set = r8152_set_eee; in rtl_ops_init()
9536 ops->in_nway = rtl8153_in_nway; in rtl_ops_init()
9537 ops->hw_phy_cfg = r8153b_hw_phy_cfg; in rtl_ops_init()
9538 ops->autosuspend_en = rtl8153b_runtime_enable; in rtl_ops_init()
9539 ops->change_mtu = rtl8153_change_mtu; in rtl_ops_init()
9540 tp->rx_buf_sz = 32 * 1024; in rtl_ops_init()
9541 tp->eee_en = true; in rtl_ops_init()
9542 tp->eee_adv = MDIO_EEE_1000T | MDIO_EEE_100TX; in rtl_ops_init()
9546 tp->eee_en = true; in rtl_ops_init()
9547 tp->eee_adv = MDIO_EEE_1000T | MDIO_EEE_100TX; in rtl_ops_init()
9550 ops->init = r8156_init; in rtl_ops_init()
9551 ops->enable = rtl8156_enable; in rtl_ops_init()
9552 ops->disable = rtl8156_disable; in rtl_ops_init()
9553 ops->up = rtl8156_up; in rtl_ops_init()
9554 ops->down = rtl8156_down; in rtl_ops_init()
9555 ops->unload = rtl8153_unload; in rtl_ops_init()
9556 ops->eee_get = r8153_get_eee; in rtl_ops_init()
9557 ops->eee_set = r8152_set_eee; in rtl_ops_init()
9558 ops->in_nway = rtl8153_in_nway; in rtl_ops_init()
9559 ops->hw_phy_cfg = r8156_hw_phy_cfg; in rtl_ops_init()
9560 ops->autosuspend_en = rtl8156_runtime_enable; in rtl_ops_init()
9561 ops->change_mtu = rtl8156_change_mtu; in rtl_ops_init()
9562 tp->rx_buf_sz = 48 * 1024; in rtl_ops_init()
9563 tp->support_2500full = 1; in rtl_ops_init()
9568 tp->support_2500full = 1; in rtl_ops_init()
9571 tp->eee_en = true; in rtl_ops_init()
9572 tp->eee_adv = MDIO_EEE_1000T | MDIO_EEE_100TX; in rtl_ops_init()
9573 ops->init = r8156b_init; in rtl_ops_init()
9574 ops->enable = rtl8156b_enable; in rtl_ops_init()
9575 ops->disable = rtl8153_disable; in rtl_ops_init()
9576 ops->up = rtl8156_up; in rtl_ops_init()
9577 ops->down = rtl8156_down; in rtl_ops_init()
9578 ops->unload = rtl8153_unload; in rtl_ops_init()
9579 ops->eee_get = r8153_get_eee; in rtl_ops_init()
9580 ops->eee_set = r8152_set_eee; in rtl_ops_init()
9581 ops->in_nway = rtl8153_in_nway; in rtl_ops_init()
9582 ops->hw_phy_cfg = r8156b_hw_phy_cfg; in rtl_ops_init()
9583 ops->autosuspend_en = rtl8156_runtime_enable; in rtl_ops_init()
9584 ops->change_mtu = rtl8156_change_mtu; in rtl_ops_init()
9585 tp->rx_buf_sz = 48 * 1024; in rtl_ops_init()
9589 ops->init = r8153c_init; in rtl_ops_init()
9590 ops->enable = rtl8153_enable; in rtl_ops_init()
9591 ops->disable = rtl8153_disable; in rtl_ops_init()
9592 ops->up = rtl8153c_up; in rtl_ops_init()
9593 ops->down = rtl8153b_down; in rtl_ops_init()
9594 ops->unload = rtl8153_unload; in rtl_ops_init()
9595 ops->eee_get = r8153_get_eee; in rtl_ops_init()
9596 ops->eee_set = r8152_set_eee; in rtl_ops_init()
9597 ops->in_nway = rtl8153_in_nway; in rtl_ops_init()
9598 ops->hw_phy_cfg = r8153c_hw_phy_cfg; in rtl_ops_init()
9599 ops->autosuspend_en = rtl8153c_runtime_enable; in rtl_ops_init()
9600 ops->change_mtu = rtl8153c_change_mtu; in rtl_ops_init()
9601 tp->rx_buf_sz = 32 * 1024; in rtl_ops_init()
9602 tp->eee_en = true; in rtl_ops_init()
9603 tp->eee_adv = MDIO_EEE_1000T | MDIO_EEE_100TX; in rtl_ops_init()
9607 ret = -ENODEV; in rtl_ops_init()
9608 dev_err(&tp->intf->dev, "Unknown Device\n"); in rtl_ops_init()
9615 #define FIRMWARE_8153A_2 "rtl_nic/rtl8153a-2.fw"
9616 #define FIRMWARE_8153A_3 "rtl_nic/rtl8153a-3.fw"
9617 #define FIRMWARE_8153A_4 "rtl_nic/rtl8153a-4.fw"
9618 #define FIRMWARE_8153B_2 "rtl_nic/rtl8153b-2.fw"
9619 #define FIRMWARE_8153C_1 "rtl_nic/rtl8153c-1.fw"
9620 #define FIRMWARE_8156A_2 "rtl_nic/rtl8156a-2.fw"
9621 #define FIRMWARE_8156B_2 "rtl_nic/rtl8156b-2.fw"
9633 struct rtl_fw *rtl_fw = &tp->rtl_fw; in rtl_fw_init()
9635 switch (tp->version) { in rtl_fw_init()
9637 rtl_fw->fw_name = FIRMWARE_8153A_2; in rtl_fw_init()
9638 rtl_fw->pre_fw = r8153_pre_firmware_1; in rtl_fw_init()
9639 rtl_fw->post_fw = r8153_post_firmware_1; in rtl_fw_init()
9642 rtl_fw->fw_name = FIRMWARE_8153A_3; in rtl_fw_init()
9643 rtl_fw->pre_fw = r8153_pre_firmware_2; in rtl_fw_init()
9644 rtl_fw->post_fw = r8153_post_firmware_2; in rtl_fw_init()
9647 rtl_fw->fw_name = FIRMWARE_8153A_4; in rtl_fw_init()
9648 rtl_fw->post_fw = r8153_post_firmware_3; in rtl_fw_init()
9651 rtl_fw->fw_name = FIRMWARE_8153B_2; in rtl_fw_init()
9652 rtl_fw->pre_fw = r8153b_pre_firmware_1; in rtl_fw_init()
9653 rtl_fw->post_fw = r8153b_post_firmware_1; in rtl_fw_init()
9656 rtl_fw->fw_name = FIRMWARE_8156A_2; in rtl_fw_init()
9657 rtl_fw->post_fw = r8156a_post_firmware_1; in rtl_fw_init()
9661 rtl_fw->fw_name = FIRMWARE_8156B_2; in rtl_fw_init()
9664 rtl_fw->fw_name = FIRMWARE_8153C_1; in rtl_fw_init()
9665 rtl_fw->pre_fw = r8153b_pre_firmware_1; in rtl_fw_init()
9666 rtl_fw->post_fw = r8153c_post_firmware_1; in rtl_fw_init()
9703 dev_warn(&udev->dev, "Needed %d retries to read version\n", i); in __rtl_get_hw_ver()
9758 dev_info(&udev->dev, "Unknown version 0x%04x\n", ocp_data); in __rtl_get_hw_ver()
9771 dev_dbg(&intf->dev, "Detected version 0x%04x\n", version); in rtl8152_get_version()
9779 int parent_vendor_id = le16_to_cpu(udev->parent->descriptor.idVendor); in rtl8152_supports_lenovo_macpassthru()
9780 int product_id = le16_to_cpu(udev->descriptor.idProduct); in rtl8152_supports_lenovo_macpassthru()
9781 int vendor_id = le16_to_cpu(udev->descriptor.idVendor); in rtl8152_supports_lenovo_macpassthru()
9814 dev_err(&intf->dev, "Out of memory\n"); in rtl8152_probe_once()
9815 return -ENOMEM; in rtl8152_probe_once()
9818 SET_NETDEV_DEV(netdev, &intf->dev); in rtl8152_probe_once()
9820 tp->msg_enable = 0x7FFF; in rtl8152_probe_once()
9822 tp->udev = udev; in rtl8152_probe_once()
9823 tp->netdev = netdev; in rtl8152_probe_once()
9824 tp->intf = intf; in rtl8152_probe_once()
9825 tp->version = version; in rtl8152_probe_once()
9827 tp->pipe_ctrl_in = usb_rcvctrlpipe(udev, 0); in rtl8152_probe_once()
9828 tp->pipe_ctrl_out = usb_sndctrlpipe(udev, 0); in rtl8152_probe_once()
9829 tp->pipe_in = usb_rcvbulkpipe(udev, 1); in rtl8152_probe_once()
9830 tp->pipe_out = usb_sndbulkpipe(udev, 2); in rtl8152_probe_once()
9831 tp->pipe_intr = usb_rcvintpipe(udev, 3); in rtl8152_probe_once()
9837 tp->mii.supports_gmii = 0; in rtl8152_probe_once()
9840 tp->mii.supports_gmii = 1; in rtl8152_probe_once()
9850 mutex_init(&tp->control); in rtl8152_probe_once()
9851 INIT_DELAYED_WORK(&tp->schedule, rtl_work_func_t); in rtl8152_probe_once()
9852 INIT_DELAYED_WORK(&tp->hw_phy_work, rtl_hw_phy_work_func_t); in rtl8152_probe_once()
9853 tasklet_setup(&tp->tx_tl, bottom_half); in rtl8152_probe_once()
9854 tasklet_disable(&tp->tx_tl); in rtl8152_probe_once()
9856 netdev->netdev_ops = &rtl8152_netdev_ops; in rtl8152_probe_once()
9857 netdev->watchdog_timeo = RTL8152_TX_TIMEOUT; in rtl8152_probe_once()
9859 netdev->features |= NETIF_F_RXCSUM | NETIF_F_IP_CSUM | NETIF_F_SG | in rtl8152_probe_once()
9863 netdev->hw_features = NETIF_F_RXCSUM | NETIF_F_IP_CSUM | NETIF_F_SG | in rtl8152_probe_once()
9867 netdev->vlan_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO | in rtl8152_probe_once()
9871 if (tp->version == RTL_VER_01) { in rtl8152_probe_once()
9872 netdev->features &= ~NETIF_F_RXCSUM; in rtl8152_probe_once()
9873 netdev->hw_features &= ~NETIF_F_RXCSUM; in rtl8152_probe_once()
9876 tp->lenovo_macpassthru = rtl8152_supports_lenovo_macpassthru(udev); in rtl8152_probe_once()
9878 if (le16_to_cpu(udev->descriptor.bcdDevice) == 0x3011 && udev->serial && in rtl8152_probe_once()
9879 (!strcmp(udev->serial, "000001000000") || in rtl8152_probe_once()
9880 !strcmp(udev->serial, "000002000000"))) { in rtl8152_probe_once()
9881 dev_info(&udev->dev, "Dell TB16 Dock, disable RX aggregation"); in rtl8152_probe_once()
9882 tp->dell_tb_rx_agg_bug = 1; in rtl8152_probe_once()
9885 netdev->ethtool_ops = &ops; in rtl8152_probe_once()
9888 /* MTU range: 68 - 1500 or 9194 */ in rtl8152_probe_once()
9889 netdev->min_mtu = ETH_MIN_MTU; in rtl8152_probe_once()
9890 switch (tp->version) { in rtl8152_probe_once()
9898 netdev->max_mtu = size_to_mtu(9 * 1024); in rtl8152_probe_once()
9902 netdev->max_mtu = size_to_mtu(15 * 1024); in rtl8152_probe_once()
9907 netdev->max_mtu = size_to_mtu(16 * 1024); in rtl8152_probe_once()
9913 netdev->max_mtu = ETH_DATA_LEN; in rtl8152_probe_once()
9917 tp->mii.dev = netdev; in rtl8152_probe_once()
9918 tp->mii.mdio_read = read_mii_word; in rtl8152_probe_once()
9919 tp->mii.mdio_write = write_mii_word; in rtl8152_probe_once()
9920 tp->mii.phy_id_mask = 0x3f; in rtl8152_probe_once()
9921 tp->mii.reg_num_mask = 0x1f; in rtl8152_probe_once()
9922 tp->mii.phy_id = R8152_PHY_ID; in rtl8152_probe_once()
9924 tp->autoneg = AUTONEG_ENABLE; in rtl8152_probe_once()
9925 tp->speed = SPEED_100; in rtl8152_probe_once()
9926 tp->advertising = RTL_ADVERTISED_10_HALF | RTL_ADVERTISED_10_FULL | in rtl8152_probe_once()
9928 if (tp->mii.supports_gmii) { in rtl8152_probe_once()
9929 if (tp->support_2500full && in rtl8152_probe_once()
9930 tp->udev->speed >= USB_SPEED_SUPER) { in rtl8152_probe_once()
9931 tp->speed = SPEED_2500; in rtl8152_probe_once()
9932 tp->advertising |= RTL_ADVERTISED_2500_FULL; in rtl8152_probe_once()
9934 tp->speed = SPEED_1000; in rtl8152_probe_once()
9936 tp->advertising |= RTL_ADVERTISED_1000_FULL; in rtl8152_probe_once()
9938 tp->duplex = DUPLEX_FULL; in rtl8152_probe_once()
9940 tp->rx_copybreak = RTL8152_RXFG_HEADSZ; in rtl8152_probe_once()
9941 tp->rx_pending = 10 * RTL8152_MAX_RX; in rtl8152_probe_once()
9943 intf->needs_remote_wakeup = 1; in rtl8152_probe_once()
9948 tp->saved_wolopts = __rtl_get_wol(tp); in rtl8152_probe_once()
9950 tp->rtl_ops.init(tp); in rtl8152_probe_once()
9953 tp->rtl_fw.retry = true; in rtl8152_probe_once()
9955 queue_delayed_work(system_long_wq, &tp->hw_phy_work, 0); in rtl8152_probe_once()
9960 netif_napi_add(netdev, &tp->napi, r8152_poll); in rtl8152_probe_once()
9964 dev_err(&intf->dev, "couldn't register the device\n"); in rtl8152_probe_once()
9968 if (tp->saved_wolopts) in rtl8152_probe_once()
9969 device_set_wakeup_enable(&udev->dev, true); in rtl8152_probe_once()
9971 device_set_wakeup_enable(&udev->dev, false); in rtl8152_probe_once()
9976 if (test_bit(PROBE_SHOULD_RETRY, &tp->flags)) in rtl8152_probe_once()
9979 set_bit(PROBED_WITH_NO_ERRORS, &tp->flags); in rtl8152_probe_once()
9988 tasklet_kill(&tp->tx_tl); in rtl8152_probe_once()
9989 cancel_delayed_work_sync(&tp->hw_phy_work); in rtl8152_probe_once()
9990 if (tp->rtl_ops.unload) in rtl8152_probe_once()
9991 tp->rtl_ops.unload(tp); in rtl8152_probe_once()
9995 if (test_bit(PROBE_SHOULD_RETRY, &tp->flags)) in rtl8152_probe_once()
9996 ret = -EAGAIN; in rtl8152_probe_once()
10011 if (intf->cur_altsetting->desc.bInterfaceClass != USB_CLASS_VENDOR_SPEC) in rtl8152_probe()
10012 return -ENODEV; in rtl8152_probe()
10015 return -ENODEV; in rtl8152_probe()
10019 return -ENODEV; in rtl8152_probe()
10023 if (ret != -EAGAIN) in rtl8152_probe()
10026 if (ret == -EAGAIN) { in rtl8152_probe()
10027 dev_err(&intf->dev, in rtl8152_probe()
10029 return -ENODEV; in rtl8152_probe()
10043 unregister_netdev(tp->netdev); in rtl8152_disconnect()
10044 tasklet_kill(&tp->tx_tl); in rtl8152_disconnect()
10045 cancel_delayed_work_sync(&tp->hw_phy_work); in rtl8152_disconnect()
10046 if (tp->rtl_ops.unload) in rtl8152_disconnect()
10047 tp->rtl_ops.unload(tp); in rtl8152_disconnect()
10049 free_netdev(tp->netdev); in rtl8152_disconnect()
10117 return -ENODEV; in rtl8152_cfgselector_choose_configuration()
10120 c = udev->config; in rtl8152_cfgselector_choose_configuration()
10121 num_configs = udev->descriptor.bNumConfigurations; in rtl8152_cfgselector_choose_configuration()
10125 if (!c->desc.bNumInterfaces) in rtl8152_cfgselector_choose_configuration()
10127 desc = &c->intf_cache[0]->altsetting->desc; in rtl8152_cfgselector_choose_configuration()
10128 if (desc->bInterfaceClass == USB_CLASS_VENDOR_SPEC) in rtl8152_cfgselector_choose_configuration()
10133 return -ENODEV; in rtl8152_cfgselector_choose_configuration()
10135 return c->desc.bConfigurationValue; in rtl8152_cfgselector_choose_configuration()
10139 .name = MODULENAME "-cfgselector",