Lines Matching +full:5 +full:gbase +full:- +full:x

1 // SPDX-License-Identifier: GPL-2.0-only
33 /* Information for net-next */
446 #define pwd_dn_scale(x) ((x) << 1) argument
505 #define BYPASS_MAC_RESET BIT(5)
518 #define BYPASS_FLASH BIT(5)
546 #define USP_PREWAKE BIT(5)
563 /* bit 4 ~ 5: fifo empty boundary */
581 #define MID_REVERSE BIT(5) /* RTL8156A */
590 #define ups_flags_speed(x) ((x) << 16) argument
624 #define PHY_STAT_PWRDN 5
645 #define sd_rise_time(x) (min(x, 7) << 4) /* bit 4 ~ 6 */ argument
658 #define fast_snr(x) (min(x, 0x1ff) << 7) /* bit 7 ~ 15 */ argument
659 #define RG_LFS_SEL 0x0060 /* bit 6 ~ 5 */
680 #define RTL_ADV2_5G_F_R BIT(5) /* Advertise 2.5GBASE-T fast-retrain */
701 #define sysclk_div_expo(x) (min(x, 5) << 8) argument
702 #define clk_div_expo(x) (min(x, 5) << 4) argument
737 _rx_flow = BIT(5),
761 #define RTL8152_TX_TIMEOUT (5 * HZ)
763 #define size_to_mtu(s) ((s) - VLAN_ETH_HLEN - ETH_FCS_LEN)
764 #define rx_reserved_size(x) (mtu_to_size(x) + sizeof(struct rx_desc) + RX_ALIGN) argument
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.
1199 #define RTL_ADVERTISED_1000_FULL BIT(5)
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()
1256 "Failed to %s %d bytes at %#06x/%#06x (%d)\n", 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->__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->__data); in __rtl8152_set_mac_address()
1689 pla_ocp_write(tp, PLA_IDR, BYTE_EN_SIX_BYTES, 8, addr->__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()
1715 int ret = -EINVAL; in vendor_mac_passthru_addr_read()
1722 if (tp->lenovo_macpassthru) { in vendor_mac_passthru_addr_read()
1727 /* test for -AD variant of RTL8153 */ in vendor_mac_passthru_addr_read()
1730 /* test for MAC address pass-through bit */ in vendor_mac_passthru_addr_read()
1733 netif_dbg(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1734 "No efuse for RTL8153-AD MAC pass through\n"); in vendor_mac_passthru_addr_read()
1735 return -ENODEV; in vendor_mac_passthru_addr_read()
1738 /* test for RTL8153-BND and RTL8153-BD */ in vendor_mac_passthru_addr_read()
1741 netif_dbg(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1743 return -ENODEV; in vendor_mac_passthru_addr_read()
1756 return -ENODEV; in vendor_mac_passthru_addr_read()
1757 if (obj->type != mac_obj_type || obj->string.length != mac_strlen) { in vendor_mac_passthru_addr_read()
1758 netif_warn(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1759 "Invalid buffer for pass-thru MAC addr: (%d, %d)\n", in vendor_mac_passthru_addr_read()
1760 obj->type, obj->string.length); in vendor_mac_passthru_addr_read()
1764 if (strncmp(obj->string.pointer, "_AUXMAC_#", 9) != 0 || in vendor_mac_passthru_addr_read()
1765 strncmp(obj->string.pointer + 0x15, "#", 1) != 0) { in vendor_mac_passthru_addr_read()
1766 netif_warn(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1767 "Invalid header when reading pass-thru MAC addr\n"); in vendor_mac_passthru_addr_read()
1770 ret = hex2bin(buf, obj->string.pointer + 9, 6); in vendor_mac_passthru_addr_read()
1772 netif_warn(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1773 "Invalid MAC for pass-thru MAC addr: %d, %pM\n", in vendor_mac_passthru_addr_read()
1775 ret = -EINVAL; in vendor_mac_passthru_addr_read()
1778 memcpy(ss->__data, buf, 6); in vendor_mac_passthru_addr_read()
1779 tp->netdev->addr_assign_type = NET_ADDR_STOLEN; in vendor_mac_passthru_addr_read()
1780 netif_info(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1781 "Using pass-thru MAC addr %pM\n", ss->__data); in vendor_mac_passthru_addr_read()
1791 struct net_device *dev = tp->netdev; in determine_ethernet_addr()
1794 ss->ss_family = dev->type; in determine_ethernet_addr()
1796 ret = eth_platform_get_mac_address(&tp->udev->dev, ss->__data); in determine_ethernet_addr()
1798 if (tp->version == RTL_VER_01) { in determine_ethernet_addr()
1799 ret = pla_ocp_read(tp, PLA_IDR, 8, ss->__data); in determine_ethernet_addr()
1802 * be expected to be non-zero in determine_ethernet_addr()
1807 ss->__data); in determine_ethernet_addr()
1813 } else if (!is_valid_ether_addr(ss->__data)) { in determine_ethernet_addr()
1815 ss->__data); in determine_ethernet_addr()
1817 ether_addr_copy(ss->__data, dev->dev_addr); in determine_ethernet_addr()
1819 ss->__data); in determine_ethernet_addr()
1828 struct net_device *dev = tp->netdev; in set_ethernet_addr()
1836 if (tp->version == RTL_VER_01) in set_ethernet_addr()
1847 int status = urb->status; in read_bulk_callback()
1852 agg = urb->context; in read_bulk_callback()
1856 tp = agg->context; in read_bulk_callback()
1860 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in read_bulk_callback()
1863 if (!test_bit(WORK_ENABLE, &tp->flags)) in read_bulk_callback()
1866 netdev = tp->netdev; in read_bulk_callback()
1869 /* This avoid the re-submitting bulk */ in read_bulk_callback()
1873 usb_mark_last_busy(tp->udev); in read_bulk_callback()
1877 if (urb->actual_length < ETH_ZLEN) in read_bulk_callback()
1880 spin_lock_irqsave(&tp->rx_lock, flags); in read_bulk_callback()
1881 list_add_tail(&agg->list, &tp->rx_done); in read_bulk_callback()
1882 spin_unlock_irqrestore(&tp->rx_lock, flags); in read_bulk_callback()
1883 napi_schedule(&tp->napi); in read_bulk_callback()
1885 case -ESHUTDOWN: in read_bulk_callback()
1887 netif_device_detach(tp->netdev); in read_bulk_callback()
1889 case -EPROTO: in read_bulk_callback()
1890 urb->actual_length = 0; in read_bulk_callback()
1891 spin_lock_irqsave(&tp->rx_lock, flags); in read_bulk_callback()
1892 list_add_tail(&agg->list, &tp->rx_done); in read_bulk_callback()
1893 spin_unlock_irqrestore(&tp->rx_lock, flags); in read_bulk_callback()
1894 set_bit(RX_EPROTO, &tp->flags); in read_bulk_callback()
1895 schedule_delayed_work(&tp->schedule, 1); in read_bulk_callback()
1897 case -ENOENT: in read_bulk_callback()
1899 case -ETIME: in read_bulk_callback()
1919 int status = urb->status; in write_bulk_callback()
1921 agg = urb->context; in write_bulk_callback()
1925 tp = agg->context; in write_bulk_callback()
1929 netdev = tp->netdev; in write_bulk_callback()
1930 stats = &netdev->stats; in write_bulk_callback()
1934 stats->tx_errors += agg->skb_num; in write_bulk_callback()
1936 stats->tx_packets += agg->skb_num; in write_bulk_callback()
1937 stats->tx_bytes += agg->skb_len; in write_bulk_callback()
1940 spin_lock_irqsave(&tp->tx_lock, flags); in write_bulk_callback()
1941 list_add_tail(&agg->list, &tp->tx_free); in write_bulk_callback()
1942 spin_unlock_irqrestore(&tp->tx_lock, flags); in write_bulk_callback()
1944 usb_autopm_put_interface_async(tp->intf); in write_bulk_callback()
1949 if (!test_bit(WORK_ENABLE, &tp->flags)) in write_bulk_callback()
1952 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in write_bulk_callback()
1955 if (!skb_queue_empty(&tp->tx_queue)) in write_bulk_callback()
1956 tasklet_schedule(&tp->tx_tl); in write_bulk_callback()
1963 int status = urb->status; in intr_callback()
1966 tp = urb->context; in intr_callback()
1970 if (!test_bit(WORK_ENABLE, &tp->flags)) in intr_callback()
1973 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in intr_callback()
1979 case -ECONNRESET: /* unlink */ in intr_callback()
1980 case -ESHUTDOWN: in intr_callback()
1981 netif_device_detach(tp->netdev); in intr_callback()
1983 case -ENOENT: in intr_callback()
1984 case -EPROTO: in intr_callback()
1985 netif_info(tp, intr, tp->netdev, in intr_callback()
1988 case -EOVERFLOW: in intr_callback()
1990 netif_info(tp, intr, tp->netdev, in intr_callback()
1991 "intr status -EOVERFLOW\n"); in intr_callback()
1993 /* -EPIPE: should clear the halt */ in intr_callback()
1995 netif_info(tp, intr, tp->netdev, "intr status %d\n", status); in intr_callback()
1999 d = urb->transfer_buffer; in intr_callback()
2001 if (!netif_carrier_ok(tp->netdev)) { in intr_callback()
2002 set_bit(RTL8152_LINK_CHG, &tp->flags); in intr_callback()
2003 schedule_delayed_work(&tp->schedule, 0); in intr_callback()
2006 if (netif_carrier_ok(tp->netdev)) { in intr_callback()
2007 netif_stop_queue(tp->netdev); in intr_callback()
2008 set_bit(RTL8152_LINK_CHG, &tp->flags); in intr_callback()
2009 schedule_delayed_work(&tp->schedule, 0); in intr_callback()
2015 if (res == -ENODEV) { in intr_callback()
2017 netif_device_detach(tp->netdev); in intr_callback()
2019 netif_err(tp, intr, tp->netdev, in intr_callback()
2036 list_del(&agg->info_list); in free_rx_agg()
2038 usb_free_urb(agg->urb); in free_rx_agg()
2039 put_page(agg->page); in free_rx_agg()
2042 atomic_dec(&tp->rx_count); in free_rx_agg()
2047 struct net_device *netdev = tp->netdev; in alloc_rx_agg()
2048 int node = netdev->dev.parent ? dev_to_node(netdev->dev.parent) : -1; in alloc_rx_agg()
2049 unsigned int order = get_order(tp->rx_buf_sz); in alloc_rx_agg()
2057 rx_agg->page = alloc_pages(mflags | __GFP_COMP | __GFP_NOWARN, order); in alloc_rx_agg()
2058 if (!rx_agg->page) in alloc_rx_agg()
2061 rx_agg->buffer = page_address(rx_agg->page); in alloc_rx_agg()
2063 rx_agg->urb = usb_alloc_urb(0, mflags); in alloc_rx_agg()
2064 if (!rx_agg->urb) in alloc_rx_agg()
2067 rx_agg->context = tp; in alloc_rx_agg()
2069 INIT_LIST_HEAD(&rx_agg->list); in alloc_rx_agg()
2070 INIT_LIST_HEAD(&rx_agg->info_list); in alloc_rx_agg()
2071 spin_lock_irqsave(&tp->rx_lock, flags); in alloc_rx_agg()
2072 list_add_tail(&rx_agg->info_list, &tp->rx_info); in alloc_rx_agg()
2073 spin_unlock_irqrestore(&tp->rx_lock, flags); in alloc_rx_agg()
2075 atomic_inc(&tp->rx_count); in alloc_rx_agg()
2080 __free_pages(rx_agg->page, order); in alloc_rx_agg()
2092 spin_lock_irqsave(&tp->rx_lock, flags); in free_all_mem()
2094 list_for_each_entry_safe(agg, agg_next, &tp->rx_info, info_list) in free_all_mem()
2097 spin_unlock_irqrestore(&tp->rx_lock, flags); in free_all_mem()
2099 WARN_ON(atomic_read(&tp->rx_count)); in free_all_mem()
2102 usb_free_urb(tp->tx_info[i].urb); in free_all_mem()
2103 tp->tx_info[i].urb = NULL; in free_all_mem()
2105 kfree(tp->tx_info[i].buffer); in free_all_mem()
2106 tp->tx_info[i].buffer = NULL; in free_all_mem()
2107 tp->tx_info[i].head = NULL; in free_all_mem()
2110 usb_free_urb(tp->intr_urb); in free_all_mem()
2111 tp->intr_urb = NULL; in free_all_mem()
2113 kfree(tp->intr_buff); in free_all_mem()
2114 tp->intr_buff = NULL; in free_all_mem()
2119 struct net_device *netdev = tp->netdev; in alloc_all_mem()
2120 struct usb_interface *intf = tp->intf; in alloc_all_mem()
2121 struct usb_host_interface *alt = intf->cur_altsetting; in alloc_all_mem()
2122 struct usb_host_endpoint *ep_intr = alt->endpoint + 2; in alloc_all_mem()
2125 node = netdev->dev.parent ? dev_to_node(netdev->dev.parent) : -1; in alloc_all_mem()
2127 spin_lock_init(&tp->rx_lock); in alloc_all_mem()
2128 spin_lock_init(&tp->tx_lock); in alloc_all_mem()
2129 INIT_LIST_HEAD(&tp->rx_info); in alloc_all_mem()
2130 INIT_LIST_HEAD(&tp->tx_free); in alloc_all_mem()
2131 INIT_LIST_HEAD(&tp->rx_done); in alloc_all_mem()
2132 skb_queue_head_init(&tp->tx_queue); in alloc_all_mem()
2133 skb_queue_head_init(&tp->rx_queue); in alloc_all_mem()
2134 atomic_set(&tp->rx_count, 0); in alloc_all_mem()
2163 INIT_LIST_HEAD(&tp->tx_info[i].list); in alloc_all_mem()
2164 tp->tx_info[i].context = tp; in alloc_all_mem()
2165 tp->tx_info[i].urb = urb; in alloc_all_mem()
2166 tp->tx_info[i].buffer = buf; in alloc_all_mem()
2167 tp->tx_info[i].head = tx_agg_align(buf); in alloc_all_mem()
2169 list_add_tail(&tp->tx_info[i].list, &tp->tx_free); in alloc_all_mem()
2172 tp->intr_urb = usb_alloc_urb(0, GFP_KERNEL); in alloc_all_mem()
2173 if (!tp->intr_urb) in alloc_all_mem()
2176 tp->intr_buff = kmalloc(INTBUFSIZE, GFP_KERNEL); in alloc_all_mem()
2177 if (!tp->intr_buff) in alloc_all_mem()
2180 tp->intr_interval = (int)ep_intr->desc.bInterval; in alloc_all_mem()
2181 usb_fill_int_urb(tp->intr_urb, tp->udev, tp->pipe_intr, in alloc_all_mem()
2182 tp->intr_buff, INTBUFSIZE, intr_callback, in alloc_all_mem()
2183 tp, tp->intr_interval); in alloc_all_mem()
2189 return -ENOMEM; in alloc_all_mem()
2197 if (list_empty(&tp->tx_free)) in r8152_get_tx_agg()
2200 spin_lock_irqsave(&tp->tx_lock, flags); in r8152_get_tx_agg()
2201 if (!list_empty(&tp->tx_free)) { in r8152_get_tx_agg()
2204 cursor = tp->tx_free.next; in r8152_get_tx_agg()
2208 spin_unlock_irqrestore(&tp->tx_lock, flags); in r8152_get_tx_agg()
2220 if (skb_shinfo(skb)->gso_size) { in r8152_csum_workaround()
2221 netdev_features_t features = tp->netdev->features; in r8152_csum_workaround()
2239 } else if (skb->ip_summed == CHECKSUM_PARTIAL) { in r8152_csum_workaround()
2248 stats = &tp->netdev->stats; in r8152_csum_workaround()
2249 stats->tx_dropped++; in r8152_csum_workaround()
2260 desc->opts2 |= cpu_to_le32(opts2); in rtl_tx_vlan_tag()
2266 u32 opts2 = le32_to_cpu(desc->opts2); in rtl_rx_vlan_tag()
2276 u32 mss = skb_shinfo(skb)->gso_size; in r8152_tx_csum()
2288 netif_warn(tp, tx_err, tp->netdev, in r8152_tx_csum()
2289 "Invalid transport offset 0x%x for TSO\n", in r8152_tx_csum()
2316 } else if (skb->ip_summed == CHECKSUM_PARTIAL) { in r8152_tx_csum()
2321 netif_warn(tp, tx_err, tp->netdev, in r8152_tx_csum()
2322 "Invalid transport offset 0x%x\n", in r8152_tx_csum()
2331 ip_protocol = ip_hdr(skb)->protocol; in r8152_tx_csum()
2336 ip_protocol = ipv6_hdr(skb)->nexthdr; in r8152_tx_csum()
2354 desc->opts2 = cpu_to_le32(opts2); in r8152_tx_csum()
2355 desc->opts1 = cpu_to_le32(opts1); in r8152_tx_csum()
2363 struct sk_buff_head skb_head, *tx_queue = &tp->tx_queue; in r8152_tx_agg_fill()
2368 spin_lock(&tx_queue->lock); in r8152_tx_agg_fill()
2370 spin_unlock(&tx_queue->lock); in r8152_tx_agg_fill()
2372 tx_data = agg->head; in r8152_tx_agg_fill()
2373 agg->skb_num = 0; in r8152_tx_agg_fill()
2374 agg->skb_len = 0; in r8152_tx_agg_fill()
2386 len = skb->len + sizeof(*tx_desc); in r8152_tx_agg_fill()
2396 if (r8152_tx_csum(tp, tx_desc, skb, skb->len)) { in r8152_tx_agg_fill()
2405 len = skb->len; in r8152_tx_agg_fill()
2407 struct net_device_stats *stats = &tp->netdev->stats; in r8152_tx_agg_fill()
2409 stats->tx_dropped++; in r8152_tx_agg_fill()
2411 tx_data -= sizeof(*tx_desc); in r8152_tx_agg_fill()
2416 agg->skb_len += len; in r8152_tx_agg_fill()
2417 agg->skb_num += skb_shinfo(skb)->gso_segs ?: 1; in r8152_tx_agg_fill()
2421 remain = agg_buf_sz - (int)(tx_agg_align(tx_data) - agg->head); in r8152_tx_agg_fill()
2423 if (tp->dell_tb_rx_agg_bug) in r8152_tx_agg_fill()
2428 spin_lock(&tx_queue->lock); in r8152_tx_agg_fill()
2430 spin_unlock(&tx_queue->lock); in r8152_tx_agg_fill()
2433 netif_tx_lock(tp->netdev); in r8152_tx_agg_fill()
2435 if (netif_queue_stopped(tp->netdev) && in r8152_tx_agg_fill()
2436 skb_queue_len(&tp->tx_queue) < tp->tx_qlen) in r8152_tx_agg_fill()
2437 netif_wake_queue(tp->netdev); in r8152_tx_agg_fill()
2439 netif_tx_unlock(tp->netdev); in r8152_tx_agg_fill()
2441 ret = usb_autopm_get_interface_async(tp->intf); in r8152_tx_agg_fill()
2445 usb_fill_bulk_urb(agg->urb, tp->udev, tp->pipe_out, in r8152_tx_agg_fill()
2446 agg->head, (int)(tx_data - (u8 *)agg->head), in r8152_tx_agg_fill()
2449 ret = usb_submit_urb(agg->urb, GFP_ATOMIC); in r8152_tx_agg_fill()
2451 usb_autopm_put_interface_async(tp->intf); in r8152_tx_agg_fill()
2462 if (!(tp->netdev->features & NETIF_F_RXCSUM)) in r8152_rx_csum()
2465 opts2 = le32_to_cpu(rx_desc->opts2); in r8152_rx_csum()
2466 opts3 = le32_to_cpu(rx_desc->opts3); in r8152_rx_csum()
2488 return atomic_read(&tp->rx_count) > RTL8152_MAX_RX; in rx_count_exceed()
2493 return (int)(addr - agg->buffer); in agg_offset()
2501 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_get_free_rx()
2503 list_for_each_entry_safe(agg, agg_next, &tp->rx_used, list) { in rtl_get_free_rx()
2504 if (page_count(agg->page) == 1) { in rtl_get_free_rx()
2506 list_del_init(&agg->list); in rtl_get_free_rx()
2511 list_del_init(&agg->list); in rtl_get_free_rx()
2518 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_get_free_rx()
2520 if (!agg_free && atomic_read(&tp->rx_count) < tp->rx_pending) in rtl_get_free_rx()
2531 struct napi_struct *napi = &tp->napi; in rx_bottom()
2533 if (!skb_queue_empty(&tp->rx_queue)) { in rx_bottom()
2535 struct sk_buff *skb = __skb_dequeue(&tp->rx_queue); in rx_bottom()
2536 struct net_device *netdev = tp->netdev; in rx_bottom()
2537 struct net_device_stats *stats = &netdev->stats; in rx_bottom()
2543 pkt_len = skb->len; in rx_bottom()
2546 stats->rx_packets++; in rx_bottom()
2547 stats->rx_bytes += pkt_len; in rx_bottom()
2551 if (list_empty(&tp->rx_done) || work_done >= budget) in rx_bottom()
2554 clear_bit(RX_EPROTO, &tp->flags); in rx_bottom()
2556 spin_lock_irqsave(&tp->rx_lock, flags); in rx_bottom()
2557 list_splice_init(&tp->rx_done, &rx_queue); in rx_bottom()
2558 spin_unlock_irqrestore(&tp->rx_lock, flags); in rx_bottom()
2579 urb = agg->urb; in rx_bottom()
2580 if (urb->status != 0 || urb->actual_length < ETH_ZLEN) in rx_bottom()
2585 rx_desc = agg->buffer; in rx_bottom()
2586 rx_data = agg->buffer; in rx_bottom()
2589 while (urb->actual_length > len_used) { in rx_bottom()
2590 struct net_device *netdev = tp->netdev; in rx_bottom()
2591 struct net_device_stats *stats = &netdev->stats; in rx_bottom()
2596 WARN_ON_ONCE(skb_queue_len(&tp->rx_queue) >= 1000); in rx_bottom()
2598 pkt_len = le32_to_cpu(rx_desc->opts1) & RX_LEN_MASK; in rx_bottom()
2603 if (urb->actual_length < len_used) in rx_bottom()
2606 pkt_len -= ETH_FCS_LEN; in rx_bottom()
2610 if (!agg_free || tp->rx_copybreak > len) in rx_bottom()
2622 rx_frag_head_sz = tp->rx_copybreak; in rx_bottom()
2635 stats->rx_dropped++; in rx_bottom()
2639 skb->ip_summed = r8152_rx_csum(tp, rx_desc); in rx_bottom()
2644 memcpy(skb->data, rx_data, in rx_bottom()
2647 len -= rx_frag_head_sz; in rx_bottom()
2649 skb->protocol = eth_type_trans(skb, in rx_bottom()
2653 skb_add_rx_frag(skb, 0, agg->page, in rx_bottom()
2656 get_page(agg->page); in rx_bottom()
2658 memcpy(skb->data, rx_data, len); in rx_bottom()
2660 skb->protocol = eth_type_trans(skb, netdev); in rx_bottom()
2670 stats->rx_packets++; in rx_bottom()
2671 stats->rx_bytes += pkt_len; in rx_bottom()
2673 __skb_queue_tail(&tp->rx_queue, skb); in rx_bottom()
2683 WARN_ON(!agg_free && page_count(agg->page) > 1); in rx_bottom()
2686 spin_lock_irqsave(&tp->rx_lock, flags); in rx_bottom()
2687 if (page_count(agg->page) == 1) { in rx_bottom()
2688 list_add(&agg_free->list, &tp->rx_used); in rx_bottom()
2690 list_add_tail(&agg->list, &tp->rx_used); in rx_bottom()
2692 urb = agg->urb; in rx_bottom()
2694 spin_unlock_irqrestore(&tp->rx_lock, flags); in rx_bottom()
2701 urb->actual_length = 0; in rx_bottom()
2702 list_add_tail(&agg->list, next); in rx_bottom()
2708 spin_lock_irqsave(&tp->rx_lock, flags); in rx_bottom()
2709 list_splice(&rx_queue, &tp->rx_done); in rx_bottom()
2710 spin_unlock_irqrestore(&tp->rx_lock, flags); in rx_bottom()
2722 struct net_device *netdev = tp->netdev; in tx_bottom()
2725 if (skb_queue_empty(&tp->tx_queue)) in tx_bottom()
2736 if (res == -ENODEV) { in tx_bottom()
2740 struct net_device_stats *stats = &netdev->stats; in tx_bottom()
2745 stats->tx_dropped += agg->skb_num; in tx_bottom()
2747 spin_lock_irqsave(&tp->tx_lock, flags); in tx_bottom()
2748 list_add_tail(&agg->list, &tp->tx_free); in tx_bottom()
2749 spin_unlock_irqrestore(&tp->tx_lock, flags); in tx_bottom()
2758 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in bottom_half()
2761 if (!test_bit(WORK_ENABLE, &tp->flags)) in bottom_half()
2765 /* This avoid the re-submitting bulk */ in bottom_half()
2766 if (!netif_carrier_ok(tp->netdev)) in bottom_half()
2769 clear_bit(SCHEDULE_TASKLET, &tp->flags); in bottom_half()
2787 if (!list_empty(&tp->rx_done)) in r8152_poll()
2801 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags) || in r8152_submit_rx()
2802 !test_bit(WORK_ENABLE, &tp->flags) || !netif_carrier_ok(tp->netdev)) in r8152_submit_rx()
2805 usb_fill_bulk_urb(agg->urb, tp->udev, tp->pipe_in, in r8152_submit_rx()
2806 agg->buffer, tp->rx_buf_sz, in r8152_submit_rx()
2809 ret = usb_submit_urb(agg->urb, mem_flags); in r8152_submit_rx()
2810 if (ret == -ENODEV) { in r8152_submit_rx()
2812 netif_device_detach(tp->netdev); in r8152_submit_rx()
2814 struct urb *urb = agg->urb; in r8152_submit_rx()
2817 urb->actual_length = 0; in r8152_submit_rx()
2818 spin_lock_irqsave(&tp->rx_lock, flags); in r8152_submit_rx()
2819 list_add_tail(&agg->list, &tp->rx_done); in r8152_submit_rx()
2820 spin_unlock_irqrestore(&tp->rx_lock, flags); in r8152_submit_rx()
2822 netif_err(tp, rx_err, tp->netdev, in r8152_submit_rx()
2825 napi_schedule(&tp->napi); in r8152_submit_rx()
2833 struct net_device_stats *stats = &tp->netdev->stats; in rtl_drop_queued_tx()
2834 struct sk_buff_head skb_head, *tx_queue = &tp->tx_queue; in rtl_drop_queued_tx()
2841 spin_lock_bh(&tx_queue->lock); in rtl_drop_queued_tx()
2843 spin_unlock_bh(&tx_queue->lock); in rtl_drop_queued_tx()
2847 stats->tx_dropped++; in rtl_drop_queued_tx()
2857 usb_queue_reset_device(tp->intf); in rtl8152_tx_timeout()
2865 set_bit(RTL8152_SET_RX_MODE, &tp->flags); in rtl8152_set_rx_mode()
2866 schedule_delayed_work(&tp->schedule, 0); in rtl8152_set_rx_mode()
2882 if (netdev->flags & IFF_PROMISC) { in _rtl8152_set_rx_mode()
2888 } else if ((netdev->flags & IFF_MULTICAST && in _rtl8152_set_rx_mode()
2890 (netdev->flags & IFF_ALLMULTI)) { in _rtl8152_set_rx_mode()
2891 /* Too many to filter perfectly -- accept all multicasts. */ in _rtl8152_set_rx_mode()
2899 if (netdev->flags & IFF_MULTICAST) { in _rtl8152_set_rx_mode()
2903 int bit_nr = ether_crc(ETH_ALEN, ha->addr) >> 26; in _rtl8152_set_rx_mode()
2905 mc_filter[bit_nr >> 5] |= 1 << (bit_nr & 31); in _rtl8152_set_rx_mode()
2923 u32 mss = skb_shinfo(skb)->gso_size; in rtl8152_features_check()
2926 if ((mss || skb->ip_summed == CHECKSUM_PARTIAL) && in rtl8152_features_check()
2929 else if ((skb->len + sizeof(struct tx_desc)) > agg_buf_sz) in rtl8152_features_check()
2942 skb_queue_tail(&tp->tx_queue, skb); in rtl8152_start_xmit()
2944 if (!list_empty(&tp->tx_free)) { in rtl8152_start_xmit()
2945 if (test_bit(SELECTIVE_SUSPEND, &tp->flags)) { in rtl8152_start_xmit()
2946 set_bit(SCHEDULE_TASKLET, &tp->flags); in rtl8152_start_xmit()
2947 schedule_delayed_work(&tp->schedule, 0); in rtl8152_start_xmit()
2949 usb_mark_last_busy(tp->udev); in rtl8152_start_xmit()
2950 tasklet_schedule(&tp->tx_tl); in rtl8152_start_xmit()
2952 } else if (skb_queue_len(&tp->tx_queue) > tp->tx_qlen) { in rtl8152_start_xmit()
2975 switch (tp->version) { in rtl8152_nic_reset()
3008 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl8152_nic_reset()
3020 tp->tx_qlen = agg_buf_sz / (mtu_to_size(tp->netdev->mtu) + sizeof(struct tx_desc)); in set_tx_qlen()
3069 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_start_rx()
3071 INIT_LIST_HEAD(&tp->rx_done); in rtl_start_rx()
3072 INIT_LIST_HEAD(&tp->rx_used); in rtl_start_rx()
3074 list_splice_init(&tp->rx_info, &tmp_list); in rtl_start_rx()
3076 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_start_rx()
3079 INIT_LIST_HEAD(&agg->list); in rtl_start_rx()
3083 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_start_rx()
3084 list_add_tail(&agg->list, &tp->rx_used); in rtl_start_rx()
3085 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_start_rx()
3087 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_start_rx()
3088 list_add_tail(&agg->list, &tp->rx_done); in rtl_start_rx()
3089 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_start_rx()
3095 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_start_rx()
3096 WARN_ON(!list_empty(&tp->rx_info)); in rtl_start_rx()
3097 list_splice(&tmp_list, &tp->rx_info); in rtl_start_rx()
3098 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_start_rx()
3117 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_stop_rx()
3118 list_splice_init(&tp->rx_info, &tmp_list); in rtl_stop_rx()
3119 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_stop_rx()
3125 if (page_count(agg->page) > 1) in rtl_stop_rx()
3128 usb_kill_urb(agg->urb); in rtl_stop_rx()
3132 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_stop_rx()
3133 WARN_ON(!list_empty(&tp->rx_info)); in rtl_stop_rx()
3134 list_splice(&tmp_list, &tp->rx_info); in rtl_stop_rx()
3135 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_stop_rx()
3137 while (!skb_queue_empty(&tp->rx_queue)) in rtl_stop_rx()
3138 dev_kfree_skb(__skb_dequeue(&tp->rx_queue)); in rtl_stop_rx()
3182 switch (tp->version) { in rtl_enable()
3203 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl8152_enable()
3204 return -ENODEV; in rtl8152_enable()
3214 u32 ocp_data = tp->coalesce / 8; in r8153_set_rx_early_timeout()
3216 switch (tp->version) { in r8153_set_rx_early_timeout()
3255 u32 ocp_data = tp->rx_buf_sz - rx_reserved_size(tp->netdev->mtu); in r8153_set_rx_early_size()
3257 switch (tp->version) { in r8153_set_rx_early_size()
3290 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl8153_enable()
3291 return -ENODEV; in rtl8153_enable()
3300 switch (tp->version) { in rtl8153_enable()
3322 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) { in rtl_disable()
3334 usb_kill_urb(tp->tx_info[i].urb); in rtl_disable()
3339 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl_disable()
3348 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl_disable()
3380 switch (tp->version) { in rtl_rx_vlan_en()
3419 netdev_features_t changed = features ^ dev->features; in rtl8152_set_features()
3423 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_features()
3427 mutex_lock(&tp->control); in rtl8152_set_features()
3436 mutex_unlock(&tp->control); in rtl8152_set_features()
3438 usb_autopm_put_interface(tp->intf); in rtl8152_set_features()
3501 device_set_wakeup_enable(&tp->udev->dev, true); in __rtl_set_wol()
3503 device_set_wakeup_enable(&tp->udev->dev, false); in __rtl_set_wol()
3581 if (tp->ups_info.green) in r8153b_ups_flags()
3584 if (tp->ups_info.aldps) in r8153b_ups_flags()
3587 if (tp->ups_info.eee) in r8153b_ups_flags()
3590 if (tp->ups_info.flow_control) in r8153b_ups_flags()
3593 if (tp->ups_info.eee_ckdiv) in r8153b_ups_flags()
3596 if (tp->ups_info.eee_cmod_lv) in r8153b_ups_flags()
3599 if (tp->ups_info.r_tune) in r8153b_ups_flags()
3602 if (tp->ups_info._10m_ckdiv) in r8153b_ups_flags()
3605 if (tp->ups_info.eee_plloff_100) in r8153b_ups_flags()
3608 if (tp->ups_info.eee_plloff_giga) in r8153b_ups_flags()
3611 if (tp->ups_info._250m_ckdiv) in r8153b_ups_flags()
3614 if (tp->ups_info.ctap_short_off) in r8153b_ups_flags()
3617 switch (tp->ups_info.speed_duplex) { in r8153b_ups_flags()
3631 ups_flags |= ups_flags_speed(5); in r8153b_ups_flags()
3656 if (tp->ups_info.green) in r8156_ups_flags()
3659 if (tp->ups_info.aldps) in r8156_ups_flags()
3662 if (tp->ups_info.eee) in r8156_ups_flags()
3665 if (tp->ups_info.flow_control) in r8156_ups_flags()
3668 if (tp->ups_info.eee_ckdiv) in r8156_ups_flags()
3671 if (tp->ups_info._10m_ckdiv) in r8156_ups_flags()
3674 if (tp->ups_info.eee_plloff_100) in r8156_ups_flags()
3677 if (tp->ups_info.eee_plloff_giga) in r8156_ups_flags()
3680 if (tp->ups_info._250m_ckdiv) in r8156_ups_flags()
3683 switch (tp->ups_info.speed_duplex) { in r8156_ups_flags()
3700 ups_flags |= ups_flags_speed(5); in r8156_ups_flags()
3718 switch (tp->ups_info.lite_mode) { in r8156_ups_flags()
3720 ups_flags |= 0 << 5; in r8156_ups_flags()
3723 ups_flags |= 2 << 5; in r8156_ups_flags()
3727 ups_flags |= 1 << 5; in r8156_ups_flags()
3745 tp->ups_info.green = enable; in rtl_green_en()
3780 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8153_phy_status()
3812 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8153b_ups_en()
3820 tp->rtl_ops.hw_phy_cfg(tp); in r8153b_ups_en()
3822 rtl8152_set_speed(tp, tp->autoneg, tp->speed, in r8153b_ups_en()
3823 tp->duplex, tp->advertising); in r8153b_ups_en()
3854 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8153c_ups_en()
3862 tp->rtl_ops.hw_phy_cfg(tp); in r8153c_ups_en()
3864 rtl8152_set_speed(tp, tp->autoneg, tp->speed, in r8153c_ups_en()
3865 tp->duplex, tp->advertising); in r8153c_ups_en()
3892 switch (tp->version) { in r8156_ups_en()
3911 tp->rtl_ops.hw_phy_cfg(tp); in r8156_ups_en()
3913 rtl8152_set_speed(tp, tp->autoneg, tp->speed, in r8156_ups_en()
3914 tp->duplex, tp->advertising); in r8156_ups_en()
3973 struct usb_device *udev = tp->udev; in rtl_can_wakeup()
3975 return (udev->actconfig->desc.bmAttributes & USB_CONFIG_ATT_WAKEUP); in rtl_can_wakeup()
3995 __rtl_set_wol(tp, tp->saved_wolopts); in rtl_runtime_suspend_enable()
4016 switch (tp->version) { in rtl8153_runtime_enable()
4043 if (tp->udev->speed >= USB_SPEED_SUPER) in rtl8153b_runtime_enable()
4075 if (tp->udev->speed >= USB_SPEED_SUPER) in rtl8156_runtime_enable()
4084 switch (tp->version) { in r8153_teredo_off()
4137 switch (tp->version) { in rtl_clear_bp()
4178 tp->ocp_base = -1; in rtl_reset_ocp_base()
4199 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl_phy_patch_request()
4200 return -ENODEV; in rtl_phy_patch_request()
4210 dev_err(&tp->intf->dev, "PHY patch request fail\n"); in rtl_phy_patch_request()
4212 return -ETIME; in rtl_phy_patch_request()
4242 return -ETIME; in rtl_pre_ram_code()
4264 switch (tp->version) { in rtl8152_is_fw_phy_speed_up_ok()
4285 fw_offset = __le16_to_cpu(phy->fw_offset); in rtl8152_is_fw_phy_speed_up_ok()
4286 length = __le32_to_cpu(phy->blk_hdr.length); in rtl8152_is_fw_phy_speed_up_ok()
4288 dev_err(&tp->intf->dev, "invalid fw_offset\n"); in rtl8152_is_fw_phy_speed_up_ok()
4292 length -= fw_offset; in rtl8152_is_fw_phy_speed_up_ok()
4294 dev_err(&tp->intf->dev, "invalid block length\n"); in rtl8152_is_fw_phy_speed_up_ok()
4298 if (__le16_to_cpu(phy->fw_reg) != 0x9A00) { in rtl8152_is_fw_phy_speed_up_ok()
4299 dev_err(&tp->intf->dev, "invalid register to load firmware\n"); in rtl8152_is_fw_phy_speed_up_ok()
4312 switch (tp->version) { in rtl8152_is_fw_phy_ver_ok()
4323 if (__le32_to_cpu(ver->blk_hdr.length) != sizeof(*ver)) { in rtl8152_is_fw_phy_ver_ok()
4324 dev_err(&tp->intf->dev, "invalid block length\n"); in rtl8152_is_fw_phy_ver_ok()
4328 if (__le16_to_cpu(ver->ver.addr) != SRAM_GPHY_FW_VER) { in rtl8152_is_fw_phy_ver_ok()
4329 dev_err(&tp->intf->dev, "invalid phy ver addr\n"); in rtl8152_is_fw_phy_ver_ok()
4342 switch (tp->version) { in rtl8152_is_fw_phy_fixup_ok()
4353 if (__le32_to_cpu(fix->blk_hdr.length) != sizeof(*fix)) { in rtl8152_is_fw_phy_fixup_ok()
4354 dev_err(&tp->intf->dev, "invalid block length\n"); in rtl8152_is_fw_phy_fixup_ok()
4358 if (__le16_to_cpu(fix->setting.addr) != OCP_PHY_PATCH_CMD || in rtl8152_is_fw_phy_fixup_ok()
4359 __le16_to_cpu(fix->setting.data) != BIT(7)) { in rtl8152_is_fw_phy_fixup_ok()
4360 dev_err(&tp->intf->dev, "invalid phy fixup\n"); in rtl8152_is_fw_phy_fixup_ok()
4375 switch (tp->version) { in rtl8152_is_fw_phy_union_ok()
4386 fw_offset = __le16_to_cpu(phy->fw_offset); in rtl8152_is_fw_phy_union_ok()
4387 length = __le32_to_cpu(phy->blk_hdr.length); in rtl8152_is_fw_phy_union_ok()
4389 dev_err(&tp->intf->dev, "invalid fw_offset\n"); in rtl8152_is_fw_phy_union_ok()
4393 length -= fw_offset; in rtl8152_is_fw_phy_union_ok()
4395 dev_err(&tp->intf->dev, "invalid block length\n"); in rtl8152_is_fw_phy_union_ok()
4399 if (phy->pre_num > 2) { in rtl8152_is_fw_phy_union_ok()
4400 dev_err(&tp->intf->dev, "invalid pre_num %d\n", phy->pre_num); in rtl8152_is_fw_phy_union_ok()
4404 if (phy->bp_num > 8) { in rtl8152_is_fw_phy_union_ok()
4405 dev_err(&tp->intf->dev, "invalid bp_num %d\n", phy->bp_num); in rtl8152_is_fw_phy_union_ok()
4420 switch (tp->version) { in rtl8152_is_fw_phy_nc_ok()
4434 fw_offset = __le16_to_cpu(phy->fw_offset); in rtl8152_is_fw_phy_nc_ok()
4436 dev_err(&tp->intf->dev, "fw_offset too small\n"); in rtl8152_is_fw_phy_nc_ok()
4440 length = __le32_to_cpu(phy->blk_hdr.length); in rtl8152_is_fw_phy_nc_ok()
4442 dev_err(&tp->intf->dev, "invalid fw_offset\n"); in rtl8152_is_fw_phy_nc_ok()
4446 length -= __le16_to_cpu(phy->fw_offset); in rtl8152_is_fw_phy_nc_ok()
4448 dev_err(&tp->intf->dev, "invalid block length\n"); in rtl8152_is_fw_phy_nc_ok()
4452 if (__le16_to_cpu(phy->fw_reg) != fw_reg) { in rtl8152_is_fw_phy_nc_ok()
4453 dev_err(&tp->intf->dev, "invalid register to load firmware\n"); in rtl8152_is_fw_phy_nc_ok()
4457 if (__le16_to_cpu(phy->ba_reg) != ba_reg) { in rtl8152_is_fw_phy_nc_ok()
4458 dev_err(&tp->intf->dev, "invalid base address register\n"); in rtl8152_is_fw_phy_nc_ok()
4462 if (__le16_to_cpu(phy->patch_en_addr) != patch_en_addr) { in rtl8152_is_fw_phy_nc_ok()
4463 dev_err(&tp->intf->dev, in rtl8152_is_fw_phy_nc_ok()
4468 if (__le16_to_cpu(phy->mode_reg) != mode_reg) { in rtl8152_is_fw_phy_nc_ok()
4469 dev_err(&tp->intf->dev, in rtl8152_is_fw_phy_nc_ok()
4474 if (__le16_to_cpu(phy->bp_start) != bp_start) { in rtl8152_is_fw_phy_nc_ok()
4475 dev_err(&tp->intf->dev, in rtl8152_is_fw_phy_nc_ok()
4480 if (__le16_to_cpu(phy->bp_num) > 4) { in rtl8152_is_fw_phy_nc_ok()
4481 dev_err(&tp->intf->dev, "invalid break point number\n"); in rtl8152_is_fw_phy_nc_ok()
4497 type = __le32_to_cpu(mac->blk_hdr.type); in rtl8152_is_fw_mac_ok()
4499 switch (tp->version) { in rtl8152_is_fw_mac_ok()
4536 switch (tp->version) { in rtl8152_is_fw_mac_ok()
4570 fw_offset = __le16_to_cpu(mac->fw_offset); in rtl8152_is_fw_mac_ok()
4572 dev_err(&tp->intf->dev, "fw_offset too small\n"); in rtl8152_is_fw_mac_ok()
4576 length = __le32_to_cpu(mac->blk_hdr.length); in rtl8152_is_fw_mac_ok()
4578 dev_err(&tp->intf->dev, "invalid fw_offset\n"); in rtl8152_is_fw_mac_ok()
4582 length -= fw_offset; in rtl8152_is_fw_mac_ok()
4584 dev_err(&tp->intf->dev, "invalid block length\n"); in rtl8152_is_fw_mac_ok()
4588 if (__le16_to_cpu(mac->fw_reg) != fw_reg) { in rtl8152_is_fw_mac_ok()
4589 dev_err(&tp->intf->dev, "invalid register to load firmware\n"); in rtl8152_is_fw_mac_ok()
4593 if (__le16_to_cpu(mac->bp_ba_addr) != bp_ba_addr) { in rtl8152_is_fw_mac_ok()
4594 dev_err(&tp->intf->dev, "invalid base address register\n"); in rtl8152_is_fw_mac_ok()
4598 if (__le16_to_cpu(mac->bp_en_addr) != bp_en_addr) { in rtl8152_is_fw_mac_ok()
4599 dev_err(&tp->intf->dev, "invalid enabled mask register\n"); in rtl8152_is_fw_mac_ok()
4603 if (__le16_to_cpu(mac->bp_start) != bp_start) { in rtl8152_is_fw_mac_ok()
4604 dev_err(&tp->intf->dev, in rtl8152_is_fw_mac_ok()
4609 if (__le16_to_cpu(mac->bp_num) > max_bp) { in rtl8152_is_fw_mac_ok()
4610 dev_err(&tp->intf->dev, "invalid break point number\n"); in rtl8152_is_fw_mac_ok()
4614 for (i = __le16_to_cpu(mac->bp_num); i < max_bp; i++) { in rtl8152_is_fw_mac_ok()
4615 if (mac->bp[i]) { in rtl8152_is_fw_mac_ok()
4616 dev_err(&tp->intf->dev, "unused bp%u is not zero\n", i); in rtl8152_is_fw_mac_ok()
4633 u8 checksum[sizeof(fw_hdr->checksum)]; in rtl8152_fw_verify_checksum()
4636 sha256(fw_hdr->version, size - sizeof(checksum), checksum); in rtl8152_fw_verify_checksum()
4638 if (memcmp(fw_hdr->checksum, checksum, sizeof(checksum))) { in rtl8152_fw_verify_checksum()
4639 dev_err(&tp->intf->dev, "checksum fail\n"); in rtl8152_fw_verify_checksum()
4640 return -EFAULT; in rtl8152_fw_verify_checksum()
4647 const struct firmware *fw = rtl_fw->fw; in rtl8152_check_firmware()
4648 struct fw_header *fw_hdr = (struct fw_header *)fw->data; in rtl8152_check_firmware()
4650 long ret = -EFAULT; in rtl8152_check_firmware()
4653 if (fw->size < sizeof(*fw_hdr)) { in rtl8152_check_firmware()
4654 dev_err(&tp->intf->dev, "file too small\n"); in rtl8152_check_firmware()
4658 ret = rtl8152_fw_verify_checksum(tp, fw_hdr, fw->size); in rtl8152_check_firmware()
4662 ret = -EFAULT; in rtl8152_check_firmware()
4664 for (i = sizeof(*fw_hdr); i < fw->size;) { in rtl8152_check_firmware()
4665 struct fw_block *block = (struct fw_block *)&fw->data[i]; in rtl8152_check_firmware()
4668 if ((i + sizeof(*block)) > fw->size) in rtl8152_check_firmware()
4671 type = __le32_to_cpu(block->type); in rtl8152_check_firmware()
4674 if (__le32_to_cpu(block->length) != sizeof(*block)) in rtl8152_check_firmware()
4679 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4685 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4693 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4699 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4713 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4718 if (__le32_to_cpu(block->length) != sizeof(struct fw_phy_patch_key)) { in rtl8152_check_firmware()
4719 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4728 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4733 if (__le32_to_cpu(block->length) != sizeof(*block)) { in rtl8152_check_firmware()
4734 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4743 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4749 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4755 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4768 dev_err(&tp->intf->dev, "PHY_UNION_NC out of order\n"); in rtl8152_check_firmware()
4773 dev_err(&tp->intf->dev, "multiple PHY_UNION_NC encountered\n"); in rtl8152_check_firmware()
4778 dev_err(&tp->intf->dev, "check PHY_UNION_NC failed\n"); in rtl8152_check_firmware()
4789 dev_err(&tp->intf->dev, "PHY_UNION_NC1 out of order\n"); in rtl8152_check_firmware()
4794 dev_err(&tp->intf->dev, "multiple PHY NC1 encountered\n"); in rtl8152_check_firmware()
4799 dev_err(&tp->intf->dev, "check PHY_UNION_NC1 failed\n"); in rtl8152_check_firmware()
4809 dev_err(&tp->intf->dev, "PHY_UNION_NC2 out of order\n"); in rtl8152_check_firmware()
4814 dev_err(&tp->intf->dev, "multiple PHY NC2 encountered\n"); in rtl8152_check_firmware()
4819 dev_err(&tp->intf->dev, "check PHY_UNION_NC2 failed\n"); in rtl8152_check_firmware()
4828 dev_err(&tp->intf->dev, "PHY_UNION_UC2 out of order\n"); in rtl8152_check_firmware()
4833 dev_err(&tp->intf->dev, "multiple PHY UC2 encountered\n"); in rtl8152_check_firmware()
4838 dev_err(&tp->intf->dev, "check PHY_UNION_UC2 failed\n"); in rtl8152_check_firmware()
4846 dev_err(&tp->intf->dev, "PHY_UNION_UC out of order\n"); in rtl8152_check_firmware()
4851 dev_err(&tp->intf->dev, "multiple PHY UC encountered\n"); in rtl8152_check_firmware()
4856 dev_err(&tp->intf->dev, "check PHY_UNION_UC failed\n"); in rtl8152_check_firmware()
4863 dev_err(&tp->intf->dev, "check RTL_FW_PHY_UNION_MISC failed\n"); in rtl8152_check_firmware()
4869 dev_err(&tp->intf->dev, "check PHY fixup failed\n"); in rtl8152_check_firmware()
4875 dev_err(&tp->intf->dev, "multiple PHY firmware encountered"); in rtl8152_check_firmware()
4880 dev_err(&tp->intf->dev, "check PHY speed up failed\n"); in rtl8152_check_firmware()
4893 dev_err(&tp->intf->dev, "Invalid order to set PHY version\n"); in rtl8152_check_firmware()
4898 dev_err(&tp->intf->dev, "multiple PHY version encountered"); in rtl8152_check_firmware()
4903 dev_err(&tp->intf->dev, "check PHY version failed\n"); in rtl8152_check_firmware()
4909 dev_warn(&tp->intf->dev, "Unknown type %u is found\n", in rtl8152_check_firmware()
4915 i += ALIGN(__le32_to_cpu(block->length), 8); in rtl8152_check_firmware()
4920 dev_err(&tp->intf->dev, "without PHY_STOP\n"); in rtl8152_check_firmware()
4936 if (sram_read(tp, SRAM_GPHY_FW_VER) >= __le16_to_cpu(phy->version)) { in rtl_ram_code_speed_up()
4937 dev_dbg(&tp->intf->dev, "PHY firmware has been the newest\n"); in rtl_ram_code_speed_up()
4941 len = __le32_to_cpu(phy->blk_hdr.length); in rtl_ram_code_speed_up()
4942 len -= __le16_to_cpu(phy->fw_offset); in rtl_ram_code_speed_up()
4943 data = (u8 *)phy + __le16_to_cpu(phy->fw_offset); in rtl_ram_code_speed_up()
4961 generic_ocp_write(tp, __le16_to_cpu(phy->fw_reg), 0xff, size, data, MCU_TYPE_USB); in rtl_ram_code_speed_up()
4964 len -= size; in rtl_ram_code_speed_up()
4976 dev_err(&tp->intf->dev, "ram code speedup mode timeout\n"); in rtl_ram_code_speed_up()
4985 if (sram_read(tp, SRAM_GPHY_FW_VER) == __le16_to_cpu(phy->version)) in rtl_ram_code_speed_up()
4986 dev_dbg(&tp->intf->dev, "successfully applied %s\n", phy->info); in rtl_ram_code_speed_up()
4988 dev_err(&tp->intf->dev, "ram code speedup mode fail\n"); in rtl_ram_code_speed_up()
4995 ver_addr = __le16_to_cpu(phy_ver->ver.addr); in rtl8152_fw_phy_ver()
4996 ver = __le16_to_cpu(phy_ver->ver.data); in rtl8152_fw_phy_ver()
5001 dev_dbg(&tp->intf->dev, "PHY firmware has been the newest\n"); in rtl8152_fw_phy_ver()
5007 dev_dbg(&tp->intf->dev, "PHY firmware version %x\n", ver); in rtl8152_fw_phy_ver()
5018 addr = __le16_to_cpu(fix->setting.addr); in rtl8152_fw_phy_fixup()
5021 switch (__le16_to_cpu(fix->bit_cmd)) { in rtl8152_fw_phy_fixup()
5023 data &= __le16_to_cpu(fix->setting.data); in rtl8152_fw_phy_fixup()
5026 data |= __le16_to_cpu(fix->setting.data); in rtl8152_fw_phy_fixup()
5029 data &= ~__le16_to_cpu(fix->setting.data); in rtl8152_fw_phy_fixup()
5032 data ^= __le16_to_cpu(fix->setting.data); in rtl8152_fw_phy_fixup()
5040 dev_dbg(&tp->intf->dev, "applied ocp %x %x\n", addr, data); in rtl8152_fw_phy_fixup()
5051 num = phy->pre_num; in rtl8152_fw_phy_union_apply()
5053 sram_write(tp, __le16_to_cpu(phy->pre_set[i].addr), in rtl8152_fw_phy_union_apply()
5054 __le16_to_cpu(phy->pre_set[i].data)); in rtl8152_fw_phy_union_apply()
5056 length = __le32_to_cpu(phy->blk_hdr.length); in rtl8152_fw_phy_union_apply()
5057 length -= __le16_to_cpu(phy->fw_offset); in rtl8152_fw_phy_union_apply()
5059 data = (__le16 *)((u8 *)phy + __le16_to_cpu(phy->fw_offset)); in rtl8152_fw_phy_union_apply()
5061 ocp_reg_write(tp, OCP_SRAM_ADDR, __le16_to_cpu(phy->fw_reg)); in rtl8152_fw_phy_union_apply()
5065 num = phy->bp_num; in rtl8152_fw_phy_union_apply()
5067 sram_write(tp, __le16_to_cpu(phy->bp[i].addr), __le16_to_cpu(phy->bp[i].data)); in rtl8152_fw_phy_union_apply()
5069 if (phy->bp_num && phy->bp_en.addr) in rtl8152_fw_phy_union_apply()
5070 sram_write(tp, __le16_to_cpu(phy->bp_en.addr), __le16_to_cpu(phy->bp_en.data)); in rtl8152_fw_phy_union_apply()
5072 dev_dbg(&tp->intf->dev, "successfully applied %s\n", phy->info); in rtl8152_fw_phy_union_apply()
5083 mode_reg = __le16_to_cpu(phy->mode_reg); in rtl8152_fw_phy_nc_apply()
5084 sram_write(tp, mode_reg, __le16_to_cpu(phy->mode_pre)); in rtl8152_fw_phy_nc_apply()
5085 sram_write(tp, __le16_to_cpu(phy->ba_reg), in rtl8152_fw_phy_nc_apply()
5086 __le16_to_cpu(phy->ba_data)); in rtl8152_fw_phy_nc_apply()
5088 length = __le32_to_cpu(phy->blk_hdr.length); in rtl8152_fw_phy_nc_apply()
5089 length -= __le16_to_cpu(phy->fw_offset); in rtl8152_fw_phy_nc_apply()
5091 data = (__le16 *)((u8 *)phy + __le16_to_cpu(phy->fw_offset)); in rtl8152_fw_phy_nc_apply()
5093 ocp_reg_write(tp, OCP_SRAM_ADDR, __le16_to_cpu(phy->fw_reg)); in rtl8152_fw_phy_nc_apply()
5097 sram_write(tp, __le16_to_cpu(phy->patch_en_addr), in rtl8152_fw_phy_nc_apply()
5098 __le16_to_cpu(phy->patch_en_value)); in rtl8152_fw_phy_nc_apply()
5100 bp_index = __le16_to_cpu(phy->bp_start); in rtl8152_fw_phy_nc_apply()
5101 num = __le16_to_cpu(phy->bp_num); in rtl8152_fw_phy_nc_apply()
5103 sram_write(tp, bp_index, __le16_to_cpu(phy->bp[i])); in rtl8152_fw_phy_nc_apply()
5107 sram_write(tp, mode_reg, __le16_to_cpu(phy->mode_post)); in rtl8152_fw_phy_nc_apply()
5109 dev_dbg(&tp->intf->dev, "successfully applied %s\n", phy->info); in rtl8152_fw_phy_nc_apply()
5118 switch (__le32_to_cpu(mac->blk_hdr.type)) { in rtl8152_fw_mac_apply()
5129 fw_ver_reg = __le16_to_cpu(mac->fw_ver_reg); in rtl8152_fw_mac_apply()
5130 if (fw_ver_reg && ocp_read_byte(tp, MCU_TYPE_USB, fw_ver_reg) >= mac->fw_ver_data) { in rtl8152_fw_mac_apply()
5131 dev_dbg(&tp->intf->dev, "%s firmware has been the newest\n", type ? "PLA" : "USB"); in rtl8152_fw_mac_apply()
5140 if (tp->version == RTL_VER_04 && type == MCU_TYPE_PLA && in rtl8152_fw_mac_apply()
5146 length = __le32_to_cpu(mac->blk_hdr.length); in rtl8152_fw_mac_apply()
5147 length -= __le16_to_cpu(mac->fw_offset); in rtl8152_fw_mac_apply()
5150 data += __le16_to_cpu(mac->fw_offset); in rtl8152_fw_mac_apply()
5152 if (generic_ocp_write(tp, __le16_to_cpu(mac->fw_reg), 0xff, length, in rtl8152_fw_mac_apply()
5154 dev_err(&tp->intf->dev, "Write %s fw fail\n", in rtl8152_fw_mac_apply()
5159 ocp_write_word(tp, type, __le16_to_cpu(mac->bp_ba_addr), in rtl8152_fw_mac_apply()
5160 __le16_to_cpu(mac->bp_ba_value)); in rtl8152_fw_mac_apply()
5162 if (generic_ocp_write(tp, __le16_to_cpu(mac->bp_start), BYTE_EN_DWORD, in rtl8152_fw_mac_apply()
5163 ALIGN(__le16_to_cpu(mac->bp_num) << 1, 4), in rtl8152_fw_mac_apply()
5164 mac->bp, type) < 0) { in rtl8152_fw_mac_apply()
5165 dev_err(&tp->intf->dev, "Write %s bp fail\n", in rtl8152_fw_mac_apply()
5170 bp_en_addr = __le16_to_cpu(mac->bp_en_addr); in rtl8152_fw_mac_apply()
5173 __le16_to_cpu(mac->bp_en_value)); in rtl8152_fw_mac_apply()
5177 mac->fw_ver_data); in rtl8152_fw_mac_apply()
5179 dev_dbg(&tp->intf->dev, "successfully applied %s\n", mac->info); in rtl8152_fw_mac_apply()
5184 struct rtl_fw *rtl_fw = &tp->rtl_fw; in rtl8152_apply_firmware()
5191 if (IS_ERR_OR_NULL(rtl_fw->fw)) in rtl8152_apply_firmware()
5194 fw = rtl_fw->fw; in rtl8152_apply_firmware()
5195 fw_hdr = (struct fw_header *)fw->data; in rtl8152_apply_firmware()
5197 if (rtl_fw->pre_fw) in rtl8152_apply_firmware()
5198 rtl_fw->pre_fw(tp); in rtl8152_apply_firmware()
5200 for (i = offsetof(struct fw_header, blocks); i < fw->size;) { in rtl8152_apply_firmware()
5201 struct fw_block *block = (struct fw_block *)&fw->data[i]; in rtl8152_apply_firmware()
5203 switch (__le32_to_cpu(block->type)) { in rtl8152_apply_firmware()
5214 key_addr = __le16_to_cpu(key->key_reg); in rtl8152_apply_firmware()
5215 rtl_pre_ram_code(tp, key_addr, __le16_to_cpu(key->key_data), !power_cut); in rtl8152_apply_firmware()
5249 i += ALIGN(__le32_to_cpu(block->length), 8); in rtl8152_apply_firmware()
5253 if (rtl_fw->post_fw) in rtl8152_apply_firmware()
5254 rtl_fw->post_fw(tp); in rtl8152_apply_firmware()
5257 strscpy(rtl_fw->version, fw_hdr->version, RTL_VER_SIZE); in rtl8152_apply_firmware()
5258 dev_dbg(&tp->intf->dev, "load %s successfully\n", rtl_fw->version); in rtl8152_apply_firmware()
5263 struct rtl_fw *rtl_fw = &tp->rtl_fw; in rtl8152_release_firmware()
5265 if (!IS_ERR_OR_NULL(rtl_fw->fw)) { in rtl8152_release_firmware()
5266 release_firmware(rtl_fw->fw); in rtl8152_release_firmware()
5267 rtl_fw->fw = NULL; in rtl8152_release_firmware()
5273 struct rtl_fw *rtl_fw = &tp->rtl_fw; in rtl8152_request_firmware()
5276 if (rtl_fw->fw || !rtl_fw->fw_name) { in rtl8152_request_firmware()
5277 dev_info(&tp->intf->dev, "skip request firmware\n"); in rtl8152_request_firmware()
5282 rc = request_firmware(&rtl_fw->fw, rtl_fw->fw_name, &tp->intf->dev); in rtl8152_request_firmware()
5288 release_firmware(rtl_fw->fw); in rtl8152_request_firmware()
5292 rtl_fw->fw = ERR_PTR(rc); in rtl8152_request_firmware()
5294 dev_warn(&tp->intf->dev, in rtl8152_request_firmware()
5296 rtl_fw->fw_name, rc); in rtl8152_request_firmware()
5389 tp->ups_info.eee = enable; in r8153_eee_en()
5410 switch (tp->version) { in rtl_eee_enable()
5417 tp->eee_adv); in rtl_eee_enable()
5432 ocp_reg_write(tp, OCP_EEE_ADV, tp->eee_adv); in rtl_eee_enable()
5445 ocp_reg_write(tp, OCP_EEE_ADV, tp->eee_adv); in rtl_eee_enable()
5464 tp->ups_info.flow_control = true; in r8152b_enable_fc()
5477 rtl_eee_enable(tp, tp->eee_en); in r8152b_hw_phy_cfg()
5481 set_bit(PHY_RESET, &tp->flags); in r8152b_hw_phy_cfg()
5490 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in wait_oob_link_list_ready()
5506 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8156b_wait_loading_flash()
5549 if (tp->udev->speed == USB_SPEED_FULL || in r8152b_exit_oob()
5550 tp->udev->speed == USB_SPEED_LOW) { in r8152b_exit_oob()
5572 rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX); in r8152b_exit_oob()
5630 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8153_pre_firmware_1()
5631 return -ENODEV; in r8153_pre_firmware_1()
5721 /* enable bp0 for RTL8153-BND */ in r8153b_post_firmware_1()
5788 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8153_aldps_en()
5796 tp->ups_info.aldps = enable; in r8153_aldps_en()
5812 if (tp->version == RTL_VER_03) { in r8153_hw_phy_cfg()
5841 if (tp->eee_en) in r8153_hw_phy_cfg()
5847 switch (tp->version) { in r8153_hw_phy_cfg()
5858 set_bit(PHY_RESET, &tp->flags); in r8153_hw_phy_cfg()
5910 r8153b_green_en(tp, test_bit(GREEN_ETHERNET, &tp->flags)); in r8153b_hw_phy_cfg()
5920 * read efuse offset 0x7d to get a 17-bit data. Remove the dummy/fake in r8153b_hw_phy_cfg()
5921 * bit (bit3) to rebuild the real 16-bit data. Write the data to the in r8153b_hw_phy_cfg()
5929 /* ups mode tx-link-pulse timing adjustment: in r8153b_hw_phy_cfg()
5953 tp->ups_info.eee_ckdiv = true; in r8153b_hw_phy_cfg()
5958 tp->ups_info.eee_cmod_lv = true; in r8153b_hw_phy_cfg()
5959 tp->ups_info._10m_ckdiv = true; in r8153b_hw_phy_cfg()
5960 tp->ups_info.eee_plloff_giga = true; in r8153b_hw_phy_cfg()
5963 ocp_reg_write(tp, OCP_SYSCLK_CFG, clk_div_expo(5)); in r8153b_hw_phy_cfg()
5964 tp->ups_info._250m_ckdiv = true; in r8153b_hw_phy_cfg()
5969 if (tp->eee_en) in r8153b_hw_phy_cfg()
5975 set_bit(PHY_RESET, &tp->flags); in r8153b_hw_phy_cfg()
5982 tp->ups_info.r_tune = true; in r8153c_hw_phy_cfg()
5987 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, mtu_to_size(tp->netdev->mtu)); in rtl8153_change_mtu()
6021 rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX); in r8153_first_init()
6066 switch (tp->version) { in r8153_enter_oob()
6121 return (ALIGN(mtu_to_size(tp->netdev->mtu), 1024) + 6 * 1024); in fc_pause_on_auto()
6126 return (ALIGN(mtu_to_size(tp->netdev->mtu), 1024) + 14 * 1024); in fc_pause_off_auto()
6131 u32 pause_on = tp->fc_pause_on ? tp->fc_pause_on : fc_pause_on_auto(tp); in r8156_fc_parameter()
6132 u32 pause_off = tp->fc_pause_off ? tp->fc_pause_off : fc_pause_off_auto(tp); in r8156_fc_parameter()
6143 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl8156_enable()
6144 return -ENODEV; in rtl8156_enable()
6167 if (tp->udev->speed == USB_SPEED_HIGH) { in rtl8156_enable()
6201 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl8156b_enable()
6202 return -ENODEV; in rtl8156b_enable()
6224 if (tp->udev->speed == USB_SPEED_HIGH) { in rtl8156b_enable()
6252 return -EINVAL; in rtl8152_set_speed()
6259 tp->ups_info.speed_duplex = FORCE_10M_FULL; in rtl8152_set_speed()
6261 tp->ups_info.speed_duplex = FORCE_10M_HALF; in rtl8152_set_speed()
6268 tp->ups_info.speed_duplex = FORCE_100M_FULL; in rtl8152_set_speed()
6270 tp->ups_info.speed_duplex = FORCE_100M_HALF; in rtl8152_set_speed()
6274 if (tp->mii.supports_gmii) { in rtl8152_set_speed()
6276 tp->ups_info.speed_duplex = NWAY_1000M_FULL; in rtl8152_set_speed()
6281 ret = -EINVAL; in rtl8152_set_speed()
6286 tp->mii.full_duplex = 1; in rtl8152_set_speed()
6288 tp->mii.full_duplex = 0; in rtl8152_set_speed()
6290 tp->mii.force_media = 1; in rtl8152_set_speed()
6298 if (tp->mii.supports_gmii) { in rtl8152_set_speed()
6301 if (tp->support_2500full) in rtl8152_set_speed()
6306 return -EINVAL; in rtl8152_set_speed()
6313 tp->ups_info.speed_duplex = NWAY_10M_HALF; in rtl8152_set_speed()
6317 tp->ups_info.speed_duplex = NWAY_10M_FULL; in rtl8152_set_speed()
6322 tp->ups_info.speed_duplex = NWAY_100M_HALF; in rtl8152_set_speed()
6326 tp->ups_info.speed_duplex = NWAY_100M_FULL; in rtl8152_set_speed()
6331 tp->mii.advertising = new1; in rtl8152_set_speed()
6334 if (tp->mii.supports_gmii) { in rtl8152_set_speed()
6341 tp->ups_info.speed_duplex = NWAY_1000M_FULL; in rtl8152_set_speed()
6348 if (tp->support_2500full) { in rtl8152_set_speed()
6354 tp->ups_info.speed_duplex = NWAY_2500M_FULL; in rtl8152_set_speed()
6363 tp->mii.force_media = 0; in rtl8152_set_speed()
6366 if (test_and_clear_bit(PHY_RESET, &tp->flags)) in rtl8152_set_speed()
6387 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl8152_up()
6397 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) { in rtl8152_down()
6412 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl8153_up()
6434 switch (tp->version) { in rtl8153_up()
6452 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) { in rtl8153_down()
6473 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl8153b_up()
6489 if (tp->udev->speed >= USB_SPEED_SUPER) in rtl8153b_up()
6497 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) { in rtl8153b_down()
6516 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, mtu_to_size(tp->netdev->mtu)); in rtl8153c_change_mtu()
6524 if (tp->netdev->mtu < 8000) in rtl8153c_change_mtu()
6534 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl8153c_up()
6567 rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX); in rtl8153c_up()
6599 u32 rx_max_size = mtu_to_size(tp->netdev->mtu); in rtl8156_change_mtu()
6615 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl8156_up()
6640 rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX); in rtl8156_up()
6644 switch (tp->version) { in rtl8156_up()
6672 if (tp->saved_wolopts != __rtl_get_wol(tp)) { in rtl8156_up()
6673 netif_warn(tp, ifup, tp->netdev, "wol setting is changed\n"); in rtl8156_up()
6674 __rtl_set_wol(tp, tp->saved_wolopts); in rtl8156_up()
6680 if (tp->udev->speed >= USB_SPEED_SUPER) in rtl8156_up()
6688 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) { in rtl8156_down()
6746 tp->ocp_base = 0x2000; in rtl8152_in_nway()
6784 struct net_device *netdev = tp->netdev; in set_carrier()
6785 struct napi_struct *napi = &tp->napi; in set_carrier()
6792 tp->rtl_ops.enable(tp); in set_carrier()
6797 clear_bit(RTL8152_SET_RX_MODE, &tp->flags); in set_carrier()
6803 skb_queue_len(&tp->tx_queue) < tp->tx_qlen) { in set_carrier()
6809 tasklet_disable(&tp->tx_tl); in set_carrier()
6811 tp->rtl_ops.disable(tp); in set_carrier()
6813 tasklet_enable(&tp->tx_tl); in set_carrier()
6826 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags) || !netif_running(tp->netdev)) in rtl_work_func_t()
6829 if (usb_autopm_get_interface(tp->intf) < 0) in rtl_work_func_t()
6832 if (!test_bit(WORK_ENABLE, &tp->flags)) in rtl_work_func_t()
6835 if (!mutex_trylock(&tp->control)) { in rtl_work_func_t()
6836 schedule_delayed_work(&tp->schedule, 0); in rtl_work_func_t()
6840 if (test_and_clear_bit(RTL8152_LINK_CHG, &tp->flags)) in rtl_work_func_t()
6843 if (test_and_clear_bit(RTL8152_SET_RX_MODE, &tp->flags)) in rtl_work_func_t()
6844 _rtl8152_set_rx_mode(tp->netdev); in rtl_work_func_t()
6847 if (test_and_clear_bit(SCHEDULE_TASKLET, &tp->flags) && in rtl_work_func_t()
6848 netif_carrier_ok(tp->netdev)) in rtl_work_func_t()
6849 tasklet_schedule(&tp->tx_tl); in rtl_work_func_t()
6851 if (test_and_clear_bit(RX_EPROTO, &tp->flags) && in rtl_work_func_t()
6852 !list_empty(&tp->rx_done)) in rtl_work_func_t()
6853 napi_schedule(&tp->napi); in rtl_work_func_t()
6855 mutex_unlock(&tp->control); in rtl_work_func_t()
6858 usb_autopm_put_interface(tp->intf); in rtl_work_func_t()
6865 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl_hw_phy_work_func_t()
6868 if (usb_autopm_get_interface(tp->intf) < 0) in rtl_hw_phy_work_func_t()
6871 mutex_lock(&tp->control); in rtl_hw_phy_work_func_t()
6873 if (rtl8152_request_firmware(tp) == -ENODEV && tp->rtl_fw.retry) { in rtl_hw_phy_work_func_t()
6874 tp->rtl_fw.retry = false; in rtl_hw_phy_work_func_t()
6875 tp->rtl_fw.fw = NULL; in rtl_hw_phy_work_func_t()
6879 queue_delayed_work(system_long_wq, &tp->hw_phy_work, HZ * 10); in rtl_hw_phy_work_func_t()
6883 tp->rtl_ops.hw_phy_cfg(tp); in rtl_hw_phy_work_func_t()
6885 rtl8152_set_speed(tp, tp->autoneg, tp->speed, tp->duplex, in rtl_hw_phy_work_func_t()
6886 tp->advertising); in rtl_hw_phy_work_func_t()
6889 mutex_unlock(&tp->control); in rtl_hw_phy_work_func_t()
6891 usb_autopm_put_interface(tp->intf); in rtl_hw_phy_work_func_t()
6903 usb_autopm_get_interface(tp->intf); in rtl_notifier()
6908 usb_autopm_put_interface(tp->intf); in rtl_notifier()
6926 if (work_busy(&tp->hw_phy_work.work) & WORK_BUSY_PENDING) { in rtl8152_open()
6927 cancel_delayed_work_sync(&tp->hw_phy_work); in rtl8152_open()
6928 rtl_hw_phy_work_func_t(&tp->hw_phy_work.work); in rtl8152_open()
6935 res = usb_autopm_get_interface(tp->intf); in rtl8152_open()
6939 mutex_lock(&tp->control); in rtl8152_open()
6941 tp->rtl_ops.up(tp); in rtl8152_open()
6945 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_open()
6947 res = usb_submit_urb(tp->intr_urb, GFP_KERNEL); in rtl8152_open()
6949 if (res == -ENODEV) in rtl8152_open()
6950 netif_device_detach(tp->netdev); in rtl8152_open()
6955 napi_enable(&tp->napi); in rtl8152_open()
6956 tasklet_enable(&tp->tx_tl); in rtl8152_open()
6958 mutex_unlock(&tp->control); in rtl8152_open()
6960 usb_autopm_put_interface(tp->intf); in rtl8152_open()
6962 tp->pm_notifier.notifier_call = rtl_notifier; in rtl8152_open()
6963 register_pm_notifier(&tp->pm_notifier); in rtl8152_open()
6968 mutex_unlock(&tp->control); in rtl8152_open()
6969 usb_autopm_put_interface(tp->intf); in rtl8152_open()
6982 unregister_pm_notifier(&tp->pm_notifier); in rtl8152_close()
6984 tasklet_disable(&tp->tx_tl); in rtl8152_close()
6985 clear_bit(WORK_ENABLE, &tp->flags); in rtl8152_close()
6986 usb_kill_urb(tp->intr_urb); in rtl8152_close()
6987 cancel_delayed_work_sync(&tp->schedule); in rtl8152_close()
6988 napi_disable(&tp->napi); in rtl8152_close()
6991 res = usb_autopm_get_interface(tp->intf); in rtl8152_close()
6992 if (res < 0 || test_bit(RTL8152_INACCESSIBLE, &tp->flags)) { in rtl8152_close()
6996 mutex_lock(&tp->control); in rtl8152_close()
6998 tp->rtl_ops.down(tp); in rtl8152_close()
7000 mutex_unlock(&tp->control); in rtl8152_close()
7004 usb_autopm_put_interface(tp->intf); in rtl8152_close()
7025 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8152b_init()
7036 if (tp->version == RTL_VER_01) { in r8152b_init()
7069 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8153_init()
7080 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8153_init()
7086 if (tp->version == RTL_VER_03 || tp->version == RTL_VER_04 || in r8153_init()
7087 tp->version == RTL_VER_05) in r8153_init()
7100 if (tp->version == RTL_VER_04) { in r8153_init()
7109 } else if (tp->version == RTL_VER_05) { in r8153_init()
7120 } else if (tp->version == RTL_VER_06) { in r8153_init()
7152 if (tp->version == RTL_VER_04 && tp->udev->speed < USB_SPEED_SUPER) in r8153_init()
7169 usb_enable_lpm(tp->udev); in r8153_init()
7182 if (tp->dell_tb_rx_agg_bug) in r8153_init()
7189 switch (tp->udev->speed) { in r8153_init()
7192 tp->coalesce = COALESCE_SUPER; in r8153_init()
7195 tp->coalesce = COALESCE_HIGH; in r8153_init()
7198 tp->coalesce = COALESCE_SLOW; in r8153_init()
7209 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8153b_init()
7220 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8153b_init()
7252 if (tp->udev->speed >= USB_SPEED_SUPER) in r8153b_init()
7255 usb_enable_lpm(tp->udev); in r8153b_init()
7264 if (tp->version == RTL_VER_09) { in r8153b_init()
7266 if (ocp_read_byte(tp, MCU_TYPE_PLA, 0xdc00) & BIT(5)) { in r8153b_init()
7273 set_bit(GREEN_ETHERNET, &tp->flags); in r8153b_init()
7282 tp->coalesce = 15000; /* 15 us */ in r8153b_init()
7291 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8153c_init()
7311 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8153c_init()
7346 usb_enable_lpm(tp->udev); in r8153c_init()
7355 set_bit(GREEN_ETHERNET, &tp->flags); in r8153c_init()
7364 tp->coalesce = 15000; /* 15 us */ in r8153c_init()
7407 switch (tp->version) { in r8156_hw_phy_cfg()
7544 data |= BIT(4) | BIT(5); in r8156_hw_phy_cfg()
7585 tp->ups_info._10m_ckdiv = true; in r8156_hw_phy_cfg()
7586 tp->ups_info.eee_plloff_100 = false; in r8156_hw_phy_cfg()
7587 tp->ups_info.eee_plloff_giga = false; in r8156_hw_phy_cfg()
7592 tp->ups_info.eee_ckdiv = false; in r8156_hw_phy_cfg()
7595 ocp_reg_write(tp, OCP_SYSCLK_CFG, sysclk_div_expo(5)); in r8156_hw_phy_cfg()
7596 tp->ups_info._250m_ckdiv = false; in r8156_hw_phy_cfg()
7697 rtl_green_en(tp, test_bit(GREEN_ETHERNET, &tp->flags)); in r8156_hw_phy_cfg()
7705 tp->ups_info.lite_mode = 0; in r8156_hw_phy_cfg()
7707 if (tp->eee_en) in r8156_hw_phy_cfg()
7714 set_bit(PHY_RESET, &tp->flags); in r8156_hw_phy_cfg()
7722 switch (tp->version) { in r8156b_hw_phy_cfg()
7794 switch (tp->version) { in r8156b_hw_phy_cfg()
8026 data &= ~BIT(5); in r8156b_hw_phy_cfg()
8065 /* Green Table-PGA, 1G full viterbi */ in r8156b_hw_phy_cfg()
8103 tp->ups_info._10m_ckdiv = true; in r8156b_hw_phy_cfg()
8104 tp->ups_info.eee_plloff_100 = false; in r8156b_hw_phy_cfg()
8105 tp->ups_info.eee_plloff_giga = false; in r8156b_hw_phy_cfg()
8110 tp->ups_info.eee_ckdiv = false; in r8156b_hw_phy_cfg()
8114 rtl_green_en(tp, test_bit(GREEN_ETHERNET, &tp->flags)); in r8156b_hw_phy_cfg()
8122 tp->ups_info.lite_mode = 0; in r8156b_hw_phy_cfg()
8124 if (tp->eee_en) in r8156b_hw_phy_cfg()
8131 set_bit(PHY_RESET, &tp->flags); in r8156b_hw_phy_cfg()
8140 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8156_init()
8161 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8156_init()
8194 if (tp->udev->speed >= USB_SPEED_SUPER) in r8156_init()
8197 usb_enable_lpm(tp->udev); in r8156_init()
8213 set_bit(GREEN_ETHERNET, &tp->flags); in r8156_init()
8227 tp->coalesce = 15000; /* 15 us */ in r8156_init()
8236 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8156b_init()
8255 switch (tp->version) { in r8156b_init()
8270 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8156b_init()
8306 if (tp->udev->speed >= USB_SPEED_SUPER) in r8156b_init()
8309 usb_enable_lpm(tp->udev); in r8156b_init()
8347 set_bit(GREEN_ETHERNET, &tp->flags); in r8156b_init()
8357 tp->coalesce = 15000; /* 15 us */ in r8156b_init()
8362 struct usb_host_interface *alt = intf->cur_altsetting; in rtl_check_vendor_ok()
8366 dev_err(&intf->dev, "Expected endpoints are not found\n"); in rtl_check_vendor_ok()
8372 dev_err(&intf->dev, "Invalid Rx endpoint address\n"); in rtl_check_vendor_ok()
8378 dev_err(&intf->dev, "Invalid Tx endpoint address\n"); in rtl_check_vendor_ok()
8384 dev_err(&intf->dev, "Invalid interrupt endpoint address\n"); in rtl_check_vendor_ok()
8398 if (!tp || !test_bit(PROBED_WITH_NO_ERRORS, &tp->flags)) in rtl8152_pre_reset()
8401 netdev = tp->netdev; in rtl8152_pre_reset()
8406 tasklet_disable(&tp->tx_tl); in rtl8152_pre_reset()
8407 clear_bit(WORK_ENABLE, &tp->flags); in rtl8152_pre_reset()
8408 usb_kill_urb(tp->intr_urb); in rtl8152_pre_reset()
8409 cancel_delayed_work_sync(&tp->schedule); in rtl8152_pre_reset()
8410 napi_disable(&tp->napi); in rtl8152_pre_reset()
8412 mutex_lock(&tp->control); in rtl8152_pre_reset()
8413 set_bit(IN_PRE_RESET, &tp->flags); in rtl8152_pre_reset()
8414 tp->rtl_ops.disable(tp); in rtl8152_pre_reset()
8415 clear_bit(IN_PRE_RESET, &tp->flags); in rtl8152_pre_reset()
8416 mutex_unlock(&tp->control); in rtl8152_pre_reset()
8428 if (!tp || !test_bit(PROBED_WITH_NO_ERRORS, &tp->flags)) in rtl8152_post_reset()
8435 dev_set_mac_address(tp->netdev, &ss, NULL); in rtl8152_post_reset()
8437 netdev = tp->netdev; in rtl8152_post_reset()
8441 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_post_reset()
8443 mutex_lock(&tp->control); in rtl8152_post_reset()
8444 tp->rtl_ops.enable(tp); in rtl8152_post_reset()
8447 mutex_unlock(&tp->control); in rtl8152_post_reset()
8450 napi_enable(&tp->napi); in rtl8152_post_reset()
8451 tasklet_enable(&tp->tx_tl); in rtl8152_post_reset()
8453 usb_submit_urb(tp->intr_urb, GFP_KERNEL); in rtl8152_post_reset()
8455 if (!list_empty(&tp->rx_done)) in rtl8152_post_reset()
8456 napi_schedule(&tp->napi); in rtl8152_post_reset()
8465 bool sw_linking = !!netif_carrier_ok(tp->netdev); in delay_autosuspend()
8472 if (work_busy(&tp->schedule.work) || sw_linking != hw_linking) in delay_autosuspend()
8478 if (!sw_linking && tp->rtl_ops.in_nway(tp)) in delay_autosuspend()
8480 else if (!skb_queue_empty(&tp->tx_queue)) in delay_autosuspend()
8488 struct net_device *netdev = tp->netdev; in rtl8152_runtime_resume()
8490 if (netif_running(netdev) && netdev->flags & IFF_UP) { in rtl8152_runtime_resume()
8491 struct napi_struct *napi = &tp->napi; in rtl8152_runtime_resume()
8493 tp->rtl_ops.autosuspend_en(tp, false); in rtl8152_runtime_resume()
8495 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_runtime_resume()
8502 tp->rtl_ops.disable(tp); in rtl8152_runtime_resume()
8508 clear_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_runtime_resume()
8511 if (!list_empty(&tp->rx_done)) in rtl8152_runtime_resume()
8512 napi_schedule(&tp->napi); in rtl8152_runtime_resume()
8514 usb_submit_urb(tp->intr_urb, GFP_NOIO); in rtl8152_runtime_resume()
8516 if (netdev->flags & IFF_UP) in rtl8152_runtime_resume()
8517 tp->rtl_ops.autosuspend_en(tp, false); in rtl8152_runtime_resume()
8519 clear_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_runtime_resume()
8527 struct net_device *netdev = tp->netdev; in rtl8152_system_resume()
8531 if (netif_running(netdev) && (netdev->flags & IFF_UP)) { in rtl8152_system_resume()
8532 tp->rtl_ops.up(tp); in rtl8152_system_resume()
8534 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_system_resume()
8535 usb_submit_urb(tp->intr_urb, GFP_NOIO); in rtl8152_system_resume()
8548 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl8152_system_resume()
8549 usb_reset_device(tp->udev); in rtl8152_system_resume()
8556 struct net_device *netdev = tp->netdev; in rtl8152_runtime_suspend()
8559 if (!tp->rtl_ops.autosuspend_en) in rtl8152_runtime_suspend()
8560 return -EBUSY; in rtl8152_runtime_suspend()
8562 set_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_runtime_suspend()
8565 if (netif_running(netdev) && test_bit(WORK_ENABLE, &tp->flags)) { in rtl8152_runtime_suspend()
8580 clear_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_runtime_suspend()
8582 ret = -EBUSY; in rtl8152_runtime_suspend()
8587 clear_bit(WORK_ENABLE, &tp->flags); in rtl8152_runtime_suspend()
8588 usb_kill_urb(tp->intr_urb); in rtl8152_runtime_suspend()
8590 tp->rtl_ops.autosuspend_en(tp, true); in rtl8152_runtime_suspend()
8593 struct napi_struct *napi = &tp->napi; in rtl8152_runtime_suspend()
8604 ret = -EBUSY; in rtl8152_runtime_suspend()
8614 struct net_device *netdev = tp->netdev; in rtl8152_system_suspend()
8618 if (netif_running(netdev) && test_bit(WORK_ENABLE, &tp->flags)) { in rtl8152_system_suspend()
8619 struct napi_struct *napi = &tp->napi; in rtl8152_system_suspend()
8621 clear_bit(WORK_ENABLE, &tp->flags); in rtl8152_system_suspend()
8622 usb_kill_urb(tp->intr_urb); in rtl8152_system_suspend()
8623 tasklet_disable(&tp->tx_tl); in rtl8152_system_suspend()
8625 cancel_delayed_work_sync(&tp->schedule); in rtl8152_system_suspend()
8626 tp->rtl_ops.down(tp); in rtl8152_system_suspend()
8628 tasklet_enable(&tp->tx_tl); in rtl8152_system_suspend()
8635 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl8152_system_suspend()
8636 pm_wakeup_event(&tp->udev->dev, 0); in rtl8152_system_suspend()
8646 mutex_lock(&tp->control); in rtl8152_suspend()
8653 mutex_unlock(&tp->control); in rtl8152_suspend()
8663 mutex_lock(&tp->control); in rtl8152_resume()
8667 if (test_bit(SELECTIVE_SUSPEND, &tp->flags)) in rtl8152_resume()
8672 mutex_unlock(&tp->control); in rtl8152_resume()
8681 clear_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_reset_resume()
8683 tp->rtl_ops.init(tp); in rtl8152_reset_resume()
8684 queue_delayed_work(system_long_wq, &tp->hw_phy_work, 0); in rtl8152_reset_resume()
8693 if (usb_autopm_get_interface(tp->intf) < 0) in rtl8152_get_wol()
8697 wol->supported = 0; in rtl8152_get_wol()
8698 wol->wolopts = 0; in rtl8152_get_wol()
8700 mutex_lock(&tp->control); in rtl8152_get_wol()
8701 wol->supported = WAKE_ANY; in rtl8152_get_wol()
8702 wol->wolopts = __rtl_get_wol(tp); in rtl8152_get_wol()
8703 mutex_unlock(&tp->control); in rtl8152_get_wol()
8706 usb_autopm_put_interface(tp->intf); in rtl8152_get_wol()
8715 return -EOPNOTSUPP; in rtl8152_set_wol()
8717 if (wol->wolopts & ~WAKE_ANY) in rtl8152_set_wol()
8718 return -EINVAL; in rtl8152_set_wol()
8720 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_wol()
8724 mutex_lock(&tp->control); in rtl8152_set_wol()
8726 __rtl_set_wol(tp, wol->wolopts); in rtl8152_set_wol()
8727 tp->saved_wolopts = wol->wolopts & WAKE_ANY; in rtl8152_set_wol()
8729 mutex_unlock(&tp->control); in rtl8152_set_wol()
8731 usb_autopm_put_interface(tp->intf); in rtl8152_set_wol()
8741 return tp->msg_enable; in rtl8152_get_msglevel()
8748 tp->msg_enable = value; in rtl8152_set_msglevel()
8756 strscpy(info->driver, MODULENAME, sizeof(info->driver)); in rtl8152_get_drvinfo()
8757 strscpy(info->version, DRIVER_VERSION, sizeof(info->version)); in rtl8152_get_drvinfo()
8758 usb_make_path(tp->udev, info->bus_info, sizeof(info->bus_info)); in rtl8152_get_drvinfo()
8759 if (!IS_ERR_OR_NULL(tp->rtl_fw.fw)) in rtl8152_get_drvinfo()
8760 strscpy(info->fw_version, tp->rtl_fw.version, in rtl8152_get_drvinfo()
8761 sizeof(info->fw_version)); in rtl8152_get_drvinfo()
8771 if (!tp->mii.mdio_read) in rtl8152_get_link_ksettings()
8772 return -EOPNOTSUPP; in rtl8152_get_link_ksettings()
8774 ret = usb_autopm_get_interface(tp->intf); in rtl8152_get_link_ksettings()
8778 mutex_lock(&tp->control); in rtl8152_get_link_ksettings()
8780 mii_ethtool_get_link_ksettings(&tp->mii, cmd); in rtl8152_get_link_ksettings()
8783 cmd->link_modes.supported, tp->support_2500full); in rtl8152_get_link_ksettings()
8785 if (tp->support_2500full) { in rtl8152_get_link_ksettings()
8787 cmd->link_modes.advertising, in rtl8152_get_link_ksettings()
8791 cmd->link_modes.lp_advertising, in rtl8152_get_link_ksettings()
8795 cmd->base.speed = SPEED_2500; in rtl8152_get_link_ksettings()
8798 mutex_unlock(&tp->control); in rtl8152_get_link_ksettings()
8800 usb_autopm_put_interface(tp->intf); in rtl8152_get_link_ksettings()
8813 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_link_ksettings()
8818 cmd->link_modes.advertising)) in rtl8152_set_link_ksettings()
8822 cmd->link_modes.advertising)) in rtl8152_set_link_ksettings()
8826 cmd->link_modes.advertising)) in rtl8152_set_link_ksettings()
8830 cmd->link_modes.advertising)) in rtl8152_set_link_ksettings()
8834 cmd->link_modes.advertising)) in rtl8152_set_link_ksettings()
8838 cmd->link_modes.advertising)) in rtl8152_set_link_ksettings()
8842 cmd->link_modes.advertising)) in rtl8152_set_link_ksettings()
8845 mutex_lock(&tp->control); in rtl8152_set_link_ksettings()
8847 ret = rtl8152_set_speed(tp, cmd->base.autoneg, cmd->base.speed, in rtl8152_set_link_ksettings()
8848 cmd->base.duplex, advertising); in rtl8152_set_link_ksettings()
8850 tp->autoneg = cmd->base.autoneg; in rtl8152_set_link_ksettings()
8851 tp->speed = cmd->base.speed; in rtl8152_set_link_ksettings()
8852 tp->duplex = cmd->base.duplex; in rtl8152_set_link_ksettings()
8853 tp->advertising = advertising; in rtl8152_set_link_ksettings()
8856 mutex_unlock(&tp->control); in rtl8152_set_link_ksettings()
8858 usb_autopm_put_interface(tp->intf); in rtl8152_set_link_ksettings()
8886 return -EOPNOTSUPP; in rtl8152_get_sset_count()
8896 if (usb_autopm_get_interface(tp->intf) < 0) in rtl8152_get_ethtool_stats()
8901 usb_autopm_put_interface(tp->intf); in rtl8152_get_ethtool_stats()
8908 data[5] = le16_to_cpu(tally.align_errors); in rtl8152_get_ethtool_stats()
8933 mii_eee_cap1_mod_linkmode_t(eee->supported, val); in r8152_get_eee()
8936 mii_eee_cap1_mod_linkmode_t(eee->advertised, val); in r8152_get_eee()
8939 mii_eee_cap1_mod_linkmode_t(eee->lp_advertised, val); in r8152_get_eee()
8941 eee->eee_enabled = tp->eee_en; in r8152_get_eee()
8943 linkmode_and(common, eee->advertised, eee->lp_advertised); in r8152_get_eee()
8944 eee->eee_active = phy_check_valid(tp->speed, tp->duplex, common); in r8152_get_eee()
8951 u16 val = linkmode_to_mii_eee_cap1_t(eee->advertised); in r8152_set_eee()
8953 tp->eee_en = eee->eee_enabled; in r8152_set_eee()
8954 tp->eee_adv = val; in r8152_set_eee()
8956 rtl_eee_enable(tp, tp->eee_en); in r8152_set_eee()
8967 mii_eee_cap1_mod_linkmode_t(eee->supported, val); in r8153_get_eee()
8970 mii_eee_cap1_mod_linkmode_t(eee->advertised, val); in r8153_get_eee()
8973 mii_eee_cap1_mod_linkmode_t(eee->lp_advertised, val); in r8153_get_eee()
8975 eee->eee_enabled = tp->eee_en; in r8153_get_eee()
8977 linkmode_and(common, eee->advertised, eee->lp_advertised); in r8153_get_eee()
8978 eee->eee_active = phy_check_valid(tp->speed, tp->duplex, common); in r8153_get_eee()
8989 if (!tp->rtl_ops.eee_get) { in rtl_ethtool_get_eee()
8990 ret = -EOPNOTSUPP; in rtl_ethtool_get_eee()
8994 ret = usb_autopm_get_interface(tp->intf); in rtl_ethtool_get_eee()
8998 mutex_lock(&tp->control); in rtl_ethtool_get_eee()
9000 ret = tp->rtl_ops.eee_get(tp, edata); in rtl_ethtool_get_eee()
9002 mutex_unlock(&tp->control); in rtl_ethtool_get_eee()
9004 usb_autopm_put_interface(tp->intf); in rtl_ethtool_get_eee()
9016 if (!tp->rtl_ops.eee_set) { in rtl_ethtool_set_eee()
9017 ret = -EOPNOTSUPP; in rtl_ethtool_set_eee()
9021 ret = usb_autopm_get_interface(tp->intf); in rtl_ethtool_set_eee()
9025 mutex_lock(&tp->control); in rtl_ethtool_set_eee()
9027 ret = tp->rtl_ops.eee_set(tp, edata); in rtl_ethtool_set_eee()
9029 ret = mii_nway_restart(&tp->mii); in rtl_ethtool_set_eee()
9031 mutex_unlock(&tp->control); in rtl_ethtool_set_eee()
9033 usb_autopm_put_interface(tp->intf); in rtl_ethtool_set_eee()
9044 ret = usb_autopm_get_interface(tp->intf); in rtl8152_nway_reset()
9048 mutex_lock(&tp->control); in rtl8152_nway_reset()
9050 ret = mii_nway_restart(&tp->mii); in rtl8152_nway_reset()
9052 mutex_unlock(&tp->control); in rtl8152_nway_reset()
9054 usb_autopm_put_interface(tp->intf); in rtl8152_nway_reset()
9067 switch (tp->version) { in rtl8152_get_coalesce()
9071 return -EOPNOTSUPP; in rtl8152_get_coalesce()
9076 coalesce->rx_coalesce_usecs = tp->coalesce; in rtl8152_get_coalesce()
9089 switch (tp->version) { in rtl8152_set_coalesce()
9093 return -EOPNOTSUPP; in rtl8152_set_coalesce()
9098 if (coalesce->rx_coalesce_usecs > COALESCE_SLOW) in rtl8152_set_coalesce()
9099 return -EINVAL; in rtl8152_set_coalesce()
9101 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_coalesce()
9105 mutex_lock(&tp->control); in rtl8152_set_coalesce()
9107 if (tp->coalesce != coalesce->rx_coalesce_usecs) { in rtl8152_set_coalesce()
9108 tp->coalesce = coalesce->rx_coalesce_usecs; in rtl8152_set_coalesce()
9112 napi_disable(&tp->napi); in rtl8152_set_coalesce()
9113 tp->rtl_ops.disable(tp); in rtl8152_set_coalesce()
9114 tp->rtl_ops.enable(tp); in rtl8152_set_coalesce()
9116 clear_bit(RTL8152_SET_RX_MODE, &tp->flags); in rtl8152_set_coalesce()
9118 napi_enable(&tp->napi); in rtl8152_set_coalesce()
9123 mutex_unlock(&tp->control); in rtl8152_set_coalesce()
9125 usb_autopm_put_interface(tp->intf); in rtl8152_set_coalesce()
9135 switch (tunable->id) { in rtl8152_get_tunable()
9137 *(u32 *)d = tp->rx_copybreak; in rtl8152_get_tunable()
9140 return -EOPNOTSUPP; in rtl8152_get_tunable()
9153 switch (tunable->id) { in rtl8152_set_tunable()
9159 return -EINVAL; in rtl8152_set_tunable()
9162 if (tp->rx_copybreak != val) { in rtl8152_set_tunable()
9163 if (netdev->flags & IFF_UP) { in rtl8152_set_tunable()
9164 mutex_lock(&tp->control); in rtl8152_set_tunable()
9165 napi_disable(&tp->napi); in rtl8152_set_tunable()
9166 tp->rx_copybreak = val; in rtl8152_set_tunable()
9167 napi_enable(&tp->napi); in rtl8152_set_tunable()
9168 mutex_unlock(&tp->control); in rtl8152_set_tunable()
9170 tp->rx_copybreak = val; in rtl8152_set_tunable()
9175 return -EOPNOTSUPP; in rtl8152_set_tunable()
9188 ring->rx_max_pending = RTL8152_RX_MAX_PENDING; in rtl8152_get_ringparam()
9189 ring->rx_pending = tp->rx_pending; in rtl8152_get_ringparam()
9199 if (ring->rx_pending < (RTL8152_MAX_RX * 2)) in rtl8152_set_ringparam()
9200 return -EINVAL; in rtl8152_set_ringparam()
9202 if (tp->rx_pending != ring->rx_pending) { in rtl8152_set_ringparam()
9203 if (netdev->flags & IFF_UP) { in rtl8152_set_ringparam()
9204 mutex_lock(&tp->control); in rtl8152_set_ringparam()
9205 napi_disable(&tp->napi); in rtl8152_set_ringparam()
9206 tp->rx_pending = ring->rx_pending; in rtl8152_set_ringparam()
9207 napi_enable(&tp->napi); in rtl8152_set_ringparam()
9208 mutex_unlock(&tp->control); in rtl8152_set_ringparam()
9210 tp->rx_pending = ring->rx_pending; in rtl8152_set_ringparam()
9223 if (usb_autopm_get_interface(tp->intf) < 0) in rtl8152_get_pauseparam()
9226 mutex_lock(&tp->control); in rtl8152_get_pauseparam()
9232 mutex_unlock(&tp->control); in rtl8152_get_pauseparam()
9234 usb_autopm_put_interface(tp->intf); in rtl8152_get_pauseparam()
9237 pause->autoneg = 0; in rtl8152_get_pauseparam()
9238 pause->rx_pause = 0; in rtl8152_get_pauseparam()
9239 pause->tx_pause = 0; in rtl8152_get_pauseparam()
9243 pause->autoneg = 1; in rtl8152_get_pauseparam()
9248 pause->rx_pause = 1; in rtl8152_get_pauseparam()
9251 pause->tx_pause = 1; in rtl8152_get_pauseparam()
9261 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_pauseparam()
9265 mutex_lock(&tp->control); in rtl8152_set_pauseparam()
9267 if (pause->autoneg && !(r8152_mdio_read(tp, MII_BMCR) & BMCR_ANENABLE)) { in rtl8152_set_pauseparam()
9268 ret = -EINVAL; in rtl8152_set_pauseparam()
9272 if (pause->rx_pause) in rtl8152_set_pauseparam()
9275 if (pause->tx_pause) in rtl8152_set_pauseparam()
9284 mutex_unlock(&tp->control); in rtl8152_set_pauseparam()
9285 usb_autopm_put_interface(tp->intf); in rtl8152_set_pauseparam()
9322 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl8152_ioctl()
9323 return -ENODEV; in rtl8152_ioctl()
9325 res = usb_autopm_get_interface(tp->intf); in rtl8152_ioctl()
9331 data->phy_id = R8152_PHY_ID; /* Internal PHY */ in rtl8152_ioctl()
9335 mutex_lock(&tp->control); in rtl8152_ioctl()
9336 data->val_out = r8152_mdio_read(tp, data->reg_num); in rtl8152_ioctl()
9337 mutex_unlock(&tp->control); in rtl8152_ioctl()
9342 res = -EPERM; in rtl8152_ioctl()
9345 mutex_lock(&tp->control); in rtl8152_ioctl()
9346 r8152_mdio_write(tp, data->reg_num, data->val_in); in rtl8152_ioctl()
9347 mutex_unlock(&tp->control); in rtl8152_ioctl()
9351 res = -EOPNOTSUPP; in rtl8152_ioctl()
9354 usb_autopm_put_interface(tp->intf); in rtl8152_ioctl()
9365 switch (tp->version) { in rtl8152_change_mtu()
9369 WRITE_ONCE(dev->mtu, new_mtu); in rtl8152_change_mtu()
9375 ret = usb_autopm_get_interface(tp->intf); in rtl8152_change_mtu()
9379 mutex_lock(&tp->control); in rtl8152_change_mtu()
9381 WRITE_ONCE(dev->mtu, new_mtu); in rtl8152_change_mtu()
9384 if (tp->rtl_ops.change_mtu) in rtl8152_change_mtu()
9385 tp->rtl_ops.change_mtu(tp); in rtl8152_change_mtu()
9389 napi_disable(&tp->napi); in rtl8152_change_mtu()
9390 tasklet_disable(&tp->tx_tl); in rtl8152_change_mtu()
9391 tp->rtl_ops.disable(tp); in rtl8152_change_mtu()
9392 tp->rtl_ops.enable(tp); in rtl8152_change_mtu()
9394 tasklet_enable(&tp->tx_tl); in rtl8152_change_mtu()
9395 napi_enable(&tp->napi); in rtl8152_change_mtu()
9401 mutex_unlock(&tp->control); in rtl8152_change_mtu()
9403 usb_autopm_put_interface(tp->intf); in rtl8152_change_mtu()
9424 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl8152_unload()
9427 if (tp->version != RTL_VER_01) in rtl8152_unload()
9433 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl8153_unload()
9441 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl8153b_unload()
9449 struct rtl_ops *ops = &tp->rtl_ops; in rtl_ops_init()
9452 switch (tp->version) { in rtl_ops_init()
9456 ops->init = r8152b_init; in rtl_ops_init()
9457 ops->enable = rtl8152_enable; in rtl_ops_init()
9458 ops->disable = rtl8152_disable; in rtl_ops_init()
9459 ops->up = rtl8152_up; in rtl_ops_init()
9460 ops->down = rtl8152_down; in rtl_ops_init()
9461 ops->unload = rtl8152_unload; in rtl_ops_init()
9462 ops->eee_get = r8152_get_eee; in rtl_ops_init()
9463 ops->eee_set = r8152_set_eee; in rtl_ops_init()
9464 ops->in_nway = rtl8152_in_nway; in rtl_ops_init()
9465 ops->hw_phy_cfg = r8152b_hw_phy_cfg; in rtl_ops_init()
9466 ops->autosuspend_en = rtl_runtime_suspend_enable; in rtl_ops_init()
9467 tp->rx_buf_sz = 16 * 1024; in rtl_ops_init()
9468 tp->eee_en = true; in rtl_ops_init()
9469 tp->eee_adv = MDIO_EEE_100TX; in rtl_ops_init()
9476 ops->init = r8153_init; in rtl_ops_init()
9477 ops->enable = rtl8153_enable; in rtl_ops_init()
9478 ops->disable = rtl8153_disable; in rtl_ops_init()
9479 ops->up = rtl8153_up; in rtl_ops_init()
9480 ops->down = rtl8153_down; in rtl_ops_init()
9481 ops->unload = rtl8153_unload; in rtl_ops_init()
9482 ops->eee_get = r8153_get_eee; in rtl_ops_init()
9483 ops->eee_set = r8152_set_eee; in rtl_ops_init()
9484 ops->in_nway = rtl8153_in_nway; in rtl_ops_init()
9485 ops->hw_phy_cfg = r8153_hw_phy_cfg; in rtl_ops_init()
9486 ops->autosuspend_en = rtl8153_runtime_enable; in rtl_ops_init()
9487 ops->change_mtu = rtl8153_change_mtu; in rtl_ops_init()
9488 if (tp->udev->speed < USB_SPEED_SUPER) in rtl_ops_init()
9489 tp->rx_buf_sz = 16 * 1024; in rtl_ops_init()
9491 tp->rx_buf_sz = 32 * 1024; in rtl_ops_init()
9492 tp->eee_en = true; in rtl_ops_init()
9493 tp->eee_adv = MDIO_EEE_1000T | MDIO_EEE_100TX; in rtl_ops_init()
9498 ops->init = r8153b_init; in rtl_ops_init()
9499 ops->enable = rtl8153_enable; in rtl_ops_init()
9500 ops->disable = rtl8153_disable; in rtl_ops_init()
9501 ops->up = rtl8153b_up; in rtl_ops_init()
9502 ops->down = rtl8153b_down; in rtl_ops_init()
9503 ops->unload = rtl8153b_unload; in rtl_ops_init()
9504 ops->eee_get = r8153_get_eee; in rtl_ops_init()
9505 ops->eee_set = r8152_set_eee; in rtl_ops_init()
9506 ops->in_nway = rtl8153_in_nway; in rtl_ops_init()
9507 ops->hw_phy_cfg = r8153b_hw_phy_cfg; in rtl_ops_init()
9508 ops->autosuspend_en = rtl8153b_runtime_enable; in rtl_ops_init()
9509 ops->change_mtu = rtl8153_change_mtu; in rtl_ops_init()
9510 tp->rx_buf_sz = 32 * 1024; in rtl_ops_init()
9511 tp->eee_en = true; in rtl_ops_init()
9512 tp->eee_adv = MDIO_EEE_1000T | MDIO_EEE_100TX; in rtl_ops_init()
9516 tp->eee_en = true; in rtl_ops_init()
9517 tp->eee_adv = MDIO_EEE_1000T | MDIO_EEE_100TX; in rtl_ops_init()
9520 ops->init = r8156_init; in rtl_ops_init()
9521 ops->enable = rtl8156_enable; in rtl_ops_init()
9522 ops->disable = rtl8156_disable; in rtl_ops_init()
9523 ops->up = rtl8156_up; in rtl_ops_init()
9524 ops->down = rtl8156_down; in rtl_ops_init()
9525 ops->unload = rtl8153_unload; in rtl_ops_init()
9526 ops->eee_get = r8153_get_eee; in rtl_ops_init()
9527 ops->eee_set = r8152_set_eee; in rtl_ops_init()
9528 ops->in_nway = rtl8153_in_nway; in rtl_ops_init()
9529 ops->hw_phy_cfg = r8156_hw_phy_cfg; in rtl_ops_init()
9530 ops->autosuspend_en = rtl8156_runtime_enable; in rtl_ops_init()
9531 ops->change_mtu = rtl8156_change_mtu; in rtl_ops_init()
9532 tp->rx_buf_sz = 48 * 1024; in rtl_ops_init()
9533 tp->support_2500full = 1; in rtl_ops_init()
9538 tp->support_2500full = 1; 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()
9543 ops->init = r8156b_init; in rtl_ops_init()
9544 ops->enable = rtl8156b_enable; in rtl_ops_init()
9545 ops->disable = rtl8153_disable; in rtl_ops_init()
9546 ops->up = rtl8156_up; in rtl_ops_init()
9547 ops->down = rtl8156_down; in rtl_ops_init()
9548 ops->unload = rtl8153_unload; in rtl_ops_init()
9549 ops->eee_get = r8153_get_eee; in rtl_ops_init()
9550 ops->eee_set = r8152_set_eee; in rtl_ops_init()
9551 ops->in_nway = rtl8153_in_nway; in rtl_ops_init()
9552 ops->hw_phy_cfg = r8156b_hw_phy_cfg; in rtl_ops_init()
9553 ops->autosuspend_en = rtl8156_runtime_enable; in rtl_ops_init()
9554 ops->change_mtu = rtl8156_change_mtu; in rtl_ops_init()
9555 tp->rx_buf_sz = 48 * 1024; in rtl_ops_init()
9559 ops->init = r8153c_init; in rtl_ops_init()
9560 ops->enable = rtl8153_enable; in rtl_ops_init()
9561 ops->disable = rtl8153_disable; in rtl_ops_init()
9562 ops->up = rtl8153c_up; in rtl_ops_init()
9563 ops->down = rtl8153b_down; in rtl_ops_init()
9564 ops->unload = rtl8153_unload; in rtl_ops_init()
9565 ops->eee_get = r8153_get_eee; in rtl_ops_init()
9566 ops->eee_set = r8152_set_eee; in rtl_ops_init()
9567 ops->in_nway = rtl8153_in_nway; in rtl_ops_init()
9568 ops->hw_phy_cfg = r8153c_hw_phy_cfg; in rtl_ops_init()
9569 ops->autosuspend_en = rtl8153c_runtime_enable; in rtl_ops_init()
9570 ops->change_mtu = rtl8153c_change_mtu; in rtl_ops_init()
9571 tp->rx_buf_sz = 32 * 1024; in rtl_ops_init()
9572 tp->eee_en = true; in rtl_ops_init()
9573 tp->eee_adv = MDIO_EEE_1000T | MDIO_EEE_100TX; in rtl_ops_init()
9577 ret = -ENODEV; in rtl_ops_init()
9578 dev_err(&tp->intf->dev, "Unknown Device\n"); in rtl_ops_init()
9585 #define FIRMWARE_8153A_2 "rtl_nic/rtl8153a-2.fw"
9586 #define FIRMWARE_8153A_3 "rtl_nic/rtl8153a-3.fw"
9587 #define FIRMWARE_8153A_4 "rtl_nic/rtl8153a-4.fw"
9588 #define FIRMWARE_8153B_2 "rtl_nic/rtl8153b-2.fw"
9589 #define FIRMWARE_8153C_1 "rtl_nic/rtl8153c-1.fw"
9590 #define FIRMWARE_8156A_2 "rtl_nic/rtl8156a-2.fw"
9591 #define FIRMWARE_8156B_2 "rtl_nic/rtl8156b-2.fw"
9603 struct rtl_fw *rtl_fw = &tp->rtl_fw; in rtl_fw_init()
9605 switch (tp->version) { in rtl_fw_init()
9607 rtl_fw->fw_name = FIRMWARE_8153A_2; in rtl_fw_init()
9608 rtl_fw->pre_fw = r8153_pre_firmware_1; in rtl_fw_init()
9609 rtl_fw->post_fw = r8153_post_firmware_1; in rtl_fw_init()
9612 rtl_fw->fw_name = FIRMWARE_8153A_3; in rtl_fw_init()
9613 rtl_fw->pre_fw = r8153_pre_firmware_2; in rtl_fw_init()
9614 rtl_fw->post_fw = r8153_post_firmware_2; in rtl_fw_init()
9617 rtl_fw->fw_name = FIRMWARE_8153A_4; in rtl_fw_init()
9618 rtl_fw->post_fw = r8153_post_firmware_3; in rtl_fw_init()
9621 rtl_fw->fw_name = FIRMWARE_8153B_2; in rtl_fw_init()
9622 rtl_fw->pre_fw = r8153b_pre_firmware_1; in rtl_fw_init()
9623 rtl_fw->post_fw = r8153b_post_firmware_1; in rtl_fw_init()
9626 rtl_fw->fw_name = FIRMWARE_8156A_2; in rtl_fw_init()
9627 rtl_fw->post_fw = r8156a_post_firmware_1; in rtl_fw_init()
9631 rtl_fw->fw_name = FIRMWARE_8156B_2; in rtl_fw_init()
9634 rtl_fw->fw_name = FIRMWARE_8153C_1; in rtl_fw_init()
9635 rtl_fw->pre_fw = r8153b_pre_firmware_1; in rtl_fw_init()
9636 rtl_fw->post_fw = r8153c_post_firmware_1; in rtl_fw_init()
9673 dev_warn(&udev->dev, "Needed %d retries to read version\n", i); in __rtl_get_hw_ver()
9728 dev_info(&udev->dev, "Unknown version 0x%04x\n", ocp_data); in __rtl_get_hw_ver()
9741 dev_dbg(&intf->dev, "Detected version 0x%04x\n", version); in rtl8152_get_version()
9749 int parent_vendor_id = le16_to_cpu(udev->parent->descriptor.idVendor); in rtl8152_supports_lenovo_macpassthru()
9750 int product_id = le16_to_cpu(udev->descriptor.idProduct); in rtl8152_supports_lenovo_macpassthru()
9751 int vendor_id = le16_to_cpu(udev->descriptor.idVendor); in rtl8152_supports_lenovo_macpassthru()
9784 dev_err(&intf->dev, "Out of memory\n"); in rtl8152_probe_once()
9785 return -ENOMEM; in rtl8152_probe_once()
9788 SET_NETDEV_DEV(netdev, &intf->dev); in rtl8152_probe_once()
9790 tp->msg_enable = 0x7FFF; in rtl8152_probe_once()
9792 tp->udev = udev; in rtl8152_probe_once()
9793 tp->netdev = netdev; in rtl8152_probe_once()
9794 tp->intf = intf; in rtl8152_probe_once()
9795 tp->version = version; in rtl8152_probe_once()
9797 tp->pipe_ctrl_in = usb_rcvctrlpipe(udev, 0); in rtl8152_probe_once()
9798 tp->pipe_ctrl_out = usb_sndctrlpipe(udev, 0); in rtl8152_probe_once()
9799 tp->pipe_in = usb_rcvbulkpipe(udev, 1); in rtl8152_probe_once()
9800 tp->pipe_out = usb_sndbulkpipe(udev, 2); in rtl8152_probe_once()
9801 tp->pipe_intr = usb_rcvintpipe(udev, 3); in rtl8152_probe_once()
9807 tp->mii.supports_gmii = 0; in rtl8152_probe_once()
9810 tp->mii.supports_gmii = 1; in rtl8152_probe_once()
9820 mutex_init(&tp->control); in rtl8152_probe_once()
9821 INIT_DELAYED_WORK(&tp->schedule, rtl_work_func_t); in rtl8152_probe_once()
9822 INIT_DELAYED_WORK(&tp->hw_phy_work, rtl_hw_phy_work_func_t); in rtl8152_probe_once()
9823 tasklet_setup(&tp->tx_tl, bottom_half); in rtl8152_probe_once()
9824 tasklet_disable(&tp->tx_tl); in rtl8152_probe_once()
9826 netdev->netdev_ops = &rtl8152_netdev_ops; in rtl8152_probe_once()
9827 netdev->watchdog_timeo = RTL8152_TX_TIMEOUT; in rtl8152_probe_once()
9829 netdev->features |= NETIF_F_RXCSUM | NETIF_F_IP_CSUM | NETIF_F_SG | in rtl8152_probe_once()
9833 netdev->hw_features = NETIF_F_RXCSUM | NETIF_F_IP_CSUM | NETIF_F_SG | in rtl8152_probe_once()
9837 netdev->vlan_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO | in rtl8152_probe_once()
9841 if (tp->version == RTL_VER_01) { in rtl8152_probe_once()
9842 netdev->features &= ~NETIF_F_RXCSUM; in rtl8152_probe_once()
9843 netdev->hw_features &= ~NETIF_F_RXCSUM; in rtl8152_probe_once()
9846 tp->lenovo_macpassthru = rtl8152_supports_lenovo_macpassthru(udev); in rtl8152_probe_once()
9848 if (le16_to_cpu(udev->descriptor.bcdDevice) == 0x3011 && udev->serial && in rtl8152_probe_once()
9849 (!strcmp(udev->serial, "000001000000") || in rtl8152_probe_once()
9850 !strcmp(udev->serial, "000002000000"))) { in rtl8152_probe_once()
9851 dev_info(&udev->dev, "Dell TB16 Dock, disable RX aggregation"); in rtl8152_probe_once()
9852 tp->dell_tb_rx_agg_bug = 1; in rtl8152_probe_once()
9855 netdev->ethtool_ops = &ops; in rtl8152_probe_once()
9858 /* MTU range: 68 - 1500 or 9194 */ in rtl8152_probe_once()
9859 netdev->min_mtu = ETH_MIN_MTU; in rtl8152_probe_once()
9860 switch (tp->version) { in rtl8152_probe_once()
9868 netdev->max_mtu = size_to_mtu(9 * 1024); in rtl8152_probe_once()
9872 netdev->max_mtu = size_to_mtu(15 * 1024); in rtl8152_probe_once()
9877 netdev->max_mtu = size_to_mtu(16 * 1024); in rtl8152_probe_once()
9883 netdev->max_mtu = ETH_DATA_LEN; in rtl8152_probe_once()
9887 tp->mii.dev = netdev; in rtl8152_probe_once()
9888 tp->mii.mdio_read = read_mii_word; in rtl8152_probe_once()
9889 tp->mii.mdio_write = write_mii_word; in rtl8152_probe_once()
9890 tp->mii.phy_id_mask = 0x3f; in rtl8152_probe_once()
9891 tp->mii.reg_num_mask = 0x1f; in rtl8152_probe_once()
9892 tp->mii.phy_id = R8152_PHY_ID; in rtl8152_probe_once()
9894 tp->autoneg = AUTONEG_ENABLE; in rtl8152_probe_once()
9895 tp->speed = SPEED_100; in rtl8152_probe_once()
9896 tp->advertising = RTL_ADVERTISED_10_HALF | RTL_ADVERTISED_10_FULL | in rtl8152_probe_once()
9898 if (tp->mii.supports_gmii) { in rtl8152_probe_once()
9899 if (tp->support_2500full && in rtl8152_probe_once()
9900 tp->udev->speed >= USB_SPEED_SUPER) { in rtl8152_probe_once()
9901 tp->speed = SPEED_2500; in rtl8152_probe_once()
9902 tp->advertising |= RTL_ADVERTISED_2500_FULL; in rtl8152_probe_once()
9904 tp->speed = SPEED_1000; in rtl8152_probe_once()
9906 tp->advertising |= RTL_ADVERTISED_1000_FULL; in rtl8152_probe_once()
9908 tp->duplex = DUPLEX_FULL; in rtl8152_probe_once()
9910 tp->rx_copybreak = RTL8152_RXFG_HEADSZ; in rtl8152_probe_once()
9911 tp->rx_pending = 10 * RTL8152_MAX_RX; in rtl8152_probe_once()
9913 intf->needs_remote_wakeup = 1; in rtl8152_probe_once()
9918 tp->saved_wolopts = __rtl_get_wol(tp); in rtl8152_probe_once()
9920 tp->rtl_ops.init(tp); in rtl8152_probe_once()
9923 tp->rtl_fw.retry = true; in rtl8152_probe_once()
9925 queue_delayed_work(system_long_wq, &tp->hw_phy_work, 0); in rtl8152_probe_once()
9930 netif_napi_add(netdev, &tp->napi, r8152_poll); in rtl8152_probe_once()
9934 dev_err(&intf->dev, "couldn't register the device\n"); in rtl8152_probe_once()
9938 if (tp->saved_wolopts) in rtl8152_probe_once()
9939 device_set_wakeup_enable(&udev->dev, true); in rtl8152_probe_once()
9941 device_set_wakeup_enable(&udev->dev, false); in rtl8152_probe_once()
9946 if (test_bit(PROBE_SHOULD_RETRY, &tp->flags)) in rtl8152_probe_once()
9949 set_bit(PROBED_WITH_NO_ERRORS, &tp->flags); in rtl8152_probe_once()
9958 tasklet_kill(&tp->tx_tl); in rtl8152_probe_once()
9959 cancel_delayed_work_sync(&tp->hw_phy_work); in rtl8152_probe_once()
9960 if (tp->rtl_ops.unload) in rtl8152_probe_once()
9961 tp->rtl_ops.unload(tp); in rtl8152_probe_once()
9965 if (test_bit(PROBE_SHOULD_RETRY, &tp->flags)) in rtl8152_probe_once()
9966 ret = -EAGAIN; in rtl8152_probe_once()
9981 if (intf->cur_altsetting->desc.bInterfaceClass != USB_CLASS_VENDOR_SPEC) in rtl8152_probe()
9982 return -ENODEV; in rtl8152_probe()
9985 return -ENODEV; in rtl8152_probe()
9989 return -ENODEV; in rtl8152_probe()
9993 if (ret != -EAGAIN) in rtl8152_probe()
9996 if (ret == -EAGAIN) { in rtl8152_probe()
9997 dev_err(&intf->dev, in rtl8152_probe()
9999 return -ENODEV; in rtl8152_probe()
10013 unregister_netdev(tp->netdev); in rtl8152_disconnect()
10014 tasklet_kill(&tp->tx_tl); in rtl8152_disconnect()
10015 cancel_delayed_work_sync(&tp->hw_phy_work); in rtl8152_disconnect()
10016 if (tp->rtl_ops.unload) in rtl8152_disconnect()
10017 tp->rtl_ops.unload(tp); in rtl8152_disconnect()
10019 free_netdev(tp->netdev); in rtl8152_disconnect()
10089 return -ENODEV; in rtl8152_cfgselector_choose_configuration()
10092 c = udev->config; in rtl8152_cfgselector_choose_configuration()
10093 num_configs = udev->descriptor.bNumConfigurations; in rtl8152_cfgselector_choose_configuration()
10097 if (!c->desc.bNumInterfaces) in rtl8152_cfgselector_choose_configuration()
10099 desc = &c->intf_cache[0]->altsetting->desc; in rtl8152_cfgselector_choose_configuration()
10100 if (desc->bInterfaceClass == USB_CLASS_VENDOR_SPEC) in rtl8152_cfgselector_choose_configuration()
10105 return -ENODEV; in rtl8152_cfgselector_choose_configuration()
10107 return c->desc.bConfigurationValue; in rtl8152_cfgselector_choose_configuration()
10111 .name = MODULENAME "-cfgselector",