Lines Matching +full:ocp +full:- +full:retry +full:- +full:delay
1 // SPDX-License-Identifier: GPL-2.0-only
30 /* Information for net-next */
172 /* OCP Registers */
669 #define RTL8153_MAX_MTU (RTL8153_MAX_PACKET - VLAN_ETH_HLEN - \
847 bool retry; member
873 * struct fw_block - block type and total length
884 * struct fw_header - header of the firmware file
898 * struct fw_mac - a firmware block used by RTL_FW_PLA and RTL_FW_USB.
937 * struct fw_phy_patch_key - a firmware block used by RTL_FW_PHY_START.
950 * struct fw_phy_nc - a firmware block used by RTL_FW_PHY_NC.
1024 /* Maximum number of multicast addresses to filter (vs. Rx-all-multicast).
1030 #define RTL_LIMITED_TSO_SIZE (agg_buf_sz - sizeof(struct tx_desc) - \
1031 VLAN_ETH_HLEN - ETH_FCS_LEN)
1041 return -ENOMEM; in get_registers()
1043 ret = usb_control_msg(tp->udev, usb_rcvctrlpipe(tp->udev, 0), in get_registers()
1064 return -ENOMEM; in set_registers()
1066 ret = usb_control_msg(tp->udev, usb_sndctrlpipe(tp->udev, 0), in set_registers()
1077 if (tp->udev->state == USB_STATE_NOTATTACHED) { in rtl_set_unplug()
1078 set_bit(RTL8152_UNPLUG, &tp->flags); in rtl_set_unplug()
1089 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in generic_ocp_read()
1090 return -ENODEV; in generic_ocp_read()
1094 return -EPERM; in generic_ocp_read()
1097 return -EPERM; in generic_ocp_read()
1107 size -= limit; in generic_ocp_read()
1120 if (ret == -ENODEV) in generic_ocp_read()
1133 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in generic_ocp_write()
1134 return -ENODEV; in generic_ocp_write()
1138 return -EPERM; in generic_ocp_write()
1141 return -EPERM; in generic_ocp_write()
1153 size -= 4; in generic_ocp_write()
1156 size -= 4; in generic_ocp_write()
1168 size -= limit; in generic_ocp_write()
1190 if (ret == -ENODEV) in generic_ocp_write()
1313 if (ocp_base != tp->ocp_base) { in ocp_reg_read()
1315 tp->ocp_base = ocp_base; in ocp_reg_read()
1327 if (ocp_base != tp->ocp_base) { in ocp_reg_write()
1329 tp->ocp_base = ocp_base; in ocp_reg_write()
1363 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in read_mii_word()
1364 return -ENODEV; in read_mii_word()
1367 return -EINVAL; in read_mii_word()
1379 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in write_mii_word()
1395 int ret = -EADDRNOTAVAIL; in rtl8152_set_mac_address()
1397 if (!is_valid_ether_addr(addr->sa_data)) in rtl8152_set_mac_address()
1400 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_mac_address()
1404 mutex_lock(&tp->control); in rtl8152_set_mac_address()
1406 memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len); in rtl8152_set_mac_address()
1409 pla_ocp_write(tp, PLA_IDR, BYTE_EN_SIX_BYTES, 8, addr->sa_data); in rtl8152_set_mac_address()
1412 mutex_unlock(&tp->control); in rtl8152_set_mac_address()
1414 usb_autopm_put_interface(tp->intf); in rtl8152_set_mac_address()
1428 int ret = -EINVAL; in vendor_mac_passthru_addr_read()
1435 if (test_bit(LENOVO_MACPASSTHRU, &tp->flags)) { in vendor_mac_passthru_addr_read()
1440 /* test for -AD variant of RTL8153 */ in vendor_mac_passthru_addr_read()
1443 /* test for MAC address pass-through bit */ in vendor_mac_passthru_addr_read()
1446 netif_dbg(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1447 "No efuse for RTL8153-AD MAC pass through\n"); in vendor_mac_passthru_addr_read()
1448 return -ENODEV; in vendor_mac_passthru_addr_read()
1451 /* test for RTL8153-BND and RTL8153-BD */ in vendor_mac_passthru_addr_read()
1454 netif_dbg(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1456 return -ENODEV; in vendor_mac_passthru_addr_read()
1469 return -ENODEV; in vendor_mac_passthru_addr_read()
1470 if (obj->type != mac_obj_type || obj->string.length != mac_strlen) { in vendor_mac_passthru_addr_read()
1471 netif_warn(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1472 "Invalid buffer for pass-thru MAC addr: (%d, %d)\n", in vendor_mac_passthru_addr_read()
1473 obj->type, obj->string.length); in vendor_mac_passthru_addr_read()
1477 if (strncmp(obj->string.pointer, "_AUXMAC_#", 9) != 0 || in vendor_mac_passthru_addr_read()
1478 strncmp(obj->string.pointer + 0x15, "#", 1) != 0) { in vendor_mac_passthru_addr_read()
1479 netif_warn(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1480 "Invalid header when reading pass-thru MAC addr\n"); in vendor_mac_passthru_addr_read()
1483 ret = hex2bin(buf, obj->string.pointer + 9, 6); in vendor_mac_passthru_addr_read()
1485 netif_warn(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1486 "Invalid MAC for pass-thru MAC addr: %d, %pM\n", in vendor_mac_passthru_addr_read()
1488 ret = -EINVAL; in vendor_mac_passthru_addr_read()
1491 memcpy(sa->sa_data, buf, 6); in vendor_mac_passthru_addr_read()
1492 netif_info(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1493 "Using pass-thru MAC addr %pM\n", sa->sa_data); in vendor_mac_passthru_addr_read()
1502 struct net_device *dev = tp->netdev; in determine_ethernet_addr()
1505 sa->sa_family = dev->type; in determine_ethernet_addr()
1507 ret = eth_platform_get_mac_address(&tp->udev->dev, sa->sa_data); in determine_ethernet_addr()
1509 if (tp->version == RTL_VER_01) { in determine_ethernet_addr()
1510 ret = pla_ocp_read(tp, PLA_IDR, 8, sa->sa_data); in determine_ethernet_addr()
1513 * be expected to be non-zero in determine_ethernet_addr()
1518 sa->sa_data); in determine_ethernet_addr()
1524 } else if (!is_valid_ether_addr(sa->sa_data)) { in determine_ethernet_addr()
1526 sa->sa_data); in determine_ethernet_addr()
1528 ether_addr_copy(sa->sa_data, dev->dev_addr); in determine_ethernet_addr()
1530 sa->sa_data); in determine_ethernet_addr()
1539 struct net_device *dev = tp->netdev; in set_ethernet_addr()
1547 if (tp->version == RTL_VER_01) in set_ethernet_addr()
1548 ether_addr_copy(dev->dev_addr, sa.sa_data); in set_ethernet_addr()
1558 int status = urb->status; in read_bulk_callback()
1563 agg = urb->context; in read_bulk_callback()
1567 tp = agg->context; in read_bulk_callback()
1571 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in read_bulk_callback()
1574 if (!test_bit(WORK_ENABLE, &tp->flags)) in read_bulk_callback()
1577 netdev = tp->netdev; in read_bulk_callback()
1580 /* This avoid the re-submitting bulk */ in read_bulk_callback()
1584 usb_mark_last_busy(tp->udev); in read_bulk_callback()
1588 if (urb->actual_length < ETH_ZLEN) in read_bulk_callback()
1591 spin_lock_irqsave(&tp->rx_lock, flags); in read_bulk_callback()
1592 list_add_tail(&agg->list, &tp->rx_done); in read_bulk_callback()
1593 spin_unlock_irqrestore(&tp->rx_lock, flags); in read_bulk_callback()
1594 napi_schedule(&tp->napi); in read_bulk_callback()
1596 case -ESHUTDOWN: in read_bulk_callback()
1598 netif_device_detach(tp->netdev); in read_bulk_callback()
1600 case -ENOENT: in read_bulk_callback()
1602 case -ETIME: in read_bulk_callback()
1622 int status = urb->status; in write_bulk_callback()
1624 agg = urb->context; in write_bulk_callback()
1628 tp = agg->context; in write_bulk_callback()
1632 netdev = tp->netdev; in write_bulk_callback()
1633 stats = &netdev->stats; in write_bulk_callback()
1637 stats->tx_errors += agg->skb_num; in write_bulk_callback()
1639 stats->tx_packets += agg->skb_num; in write_bulk_callback()
1640 stats->tx_bytes += agg->skb_len; in write_bulk_callback()
1643 spin_lock_irqsave(&tp->tx_lock, flags); in write_bulk_callback()
1644 list_add_tail(&agg->list, &tp->tx_free); in write_bulk_callback()
1645 spin_unlock_irqrestore(&tp->tx_lock, flags); in write_bulk_callback()
1647 usb_autopm_put_interface_async(tp->intf); in write_bulk_callback()
1652 if (!test_bit(WORK_ENABLE, &tp->flags)) in write_bulk_callback()
1655 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in write_bulk_callback()
1658 if (!skb_queue_empty(&tp->tx_queue)) in write_bulk_callback()
1659 tasklet_schedule(&tp->tx_tl); in write_bulk_callback()
1666 int status = urb->status; in intr_callback()
1669 tp = urb->context; in intr_callback()
1673 if (!test_bit(WORK_ENABLE, &tp->flags)) in intr_callback()
1676 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in intr_callback()
1682 case -ECONNRESET: /* unlink */ in intr_callback()
1683 case -ESHUTDOWN: in intr_callback()
1684 netif_device_detach(tp->netdev); in intr_callback()
1686 case -ENOENT: in intr_callback()
1687 case -EPROTO: in intr_callback()
1688 netif_info(tp, intr, tp->netdev, in intr_callback()
1691 case -EOVERFLOW: in intr_callback()
1693 netif_info(tp, intr, tp->netdev, in intr_callback()
1694 "intr status -EOVERFLOW\n"); in intr_callback()
1696 /* -EPIPE: should clear the halt */ in intr_callback()
1698 netif_info(tp, intr, tp->netdev, "intr status %d\n", status); in intr_callback()
1702 d = urb->transfer_buffer; in intr_callback()
1704 if (!netif_carrier_ok(tp->netdev)) { in intr_callback()
1705 set_bit(RTL8152_LINK_CHG, &tp->flags); in intr_callback()
1706 schedule_delayed_work(&tp->schedule, 0); in intr_callback()
1709 if (netif_carrier_ok(tp->netdev)) { in intr_callback()
1710 netif_stop_queue(tp->netdev); in intr_callback()
1711 set_bit(RTL8152_LINK_CHG, &tp->flags); in intr_callback()
1712 schedule_delayed_work(&tp->schedule, 0); in intr_callback()
1718 if (res == -ENODEV) { in intr_callback()
1720 netif_device_detach(tp->netdev); in intr_callback()
1722 netif_err(tp, intr, tp->netdev, in intr_callback()
1739 list_del(&agg->info_list); in free_rx_agg()
1741 usb_free_urb(agg->urb); in free_rx_agg()
1742 put_page(agg->page); in free_rx_agg()
1745 atomic_dec(&tp->rx_count); in free_rx_agg()
1750 struct net_device *netdev = tp->netdev; in alloc_rx_agg()
1751 int node = netdev->dev.parent ? dev_to_node(netdev->dev.parent) : -1; in alloc_rx_agg()
1752 unsigned int order = get_order(tp->rx_buf_sz); in alloc_rx_agg()
1760 rx_agg->page = alloc_pages(mflags | __GFP_COMP, order); in alloc_rx_agg()
1761 if (!rx_agg->page) in alloc_rx_agg()
1764 rx_agg->buffer = page_address(rx_agg->page); in alloc_rx_agg()
1766 rx_agg->urb = usb_alloc_urb(0, mflags); in alloc_rx_agg()
1767 if (!rx_agg->urb) in alloc_rx_agg()
1770 rx_agg->context = tp; in alloc_rx_agg()
1772 INIT_LIST_HEAD(&rx_agg->list); in alloc_rx_agg()
1773 INIT_LIST_HEAD(&rx_agg->info_list); in alloc_rx_agg()
1774 spin_lock_irqsave(&tp->rx_lock, flags); in alloc_rx_agg()
1775 list_add_tail(&rx_agg->info_list, &tp->rx_info); in alloc_rx_agg()
1776 spin_unlock_irqrestore(&tp->rx_lock, flags); in alloc_rx_agg()
1778 atomic_inc(&tp->rx_count); in alloc_rx_agg()
1783 __free_pages(rx_agg->page, order); in alloc_rx_agg()
1795 spin_lock_irqsave(&tp->rx_lock, flags); in free_all_mem()
1797 list_for_each_entry_safe(agg, agg_next, &tp->rx_info, info_list) in free_all_mem()
1800 spin_unlock_irqrestore(&tp->rx_lock, flags); in free_all_mem()
1802 WARN_ON(atomic_read(&tp->rx_count)); in free_all_mem()
1805 usb_free_urb(tp->tx_info[i].urb); in free_all_mem()
1806 tp->tx_info[i].urb = NULL; in free_all_mem()
1808 kfree(tp->tx_info[i].buffer); in free_all_mem()
1809 tp->tx_info[i].buffer = NULL; in free_all_mem()
1810 tp->tx_info[i].head = NULL; in free_all_mem()
1813 usb_free_urb(tp->intr_urb); in free_all_mem()
1814 tp->intr_urb = NULL; in free_all_mem()
1816 kfree(tp->intr_buff); in free_all_mem()
1817 tp->intr_buff = NULL; in free_all_mem()
1822 struct net_device *netdev = tp->netdev; in alloc_all_mem()
1823 struct usb_interface *intf = tp->intf; in alloc_all_mem()
1824 struct usb_host_interface *alt = intf->cur_altsetting; in alloc_all_mem()
1825 struct usb_host_endpoint *ep_intr = alt->endpoint + 2; in alloc_all_mem()
1828 node = netdev->dev.parent ? dev_to_node(netdev->dev.parent) : -1; in alloc_all_mem()
1830 spin_lock_init(&tp->rx_lock); in alloc_all_mem()
1831 spin_lock_init(&tp->tx_lock); in alloc_all_mem()
1832 INIT_LIST_HEAD(&tp->rx_info); in alloc_all_mem()
1833 INIT_LIST_HEAD(&tp->tx_free); in alloc_all_mem()
1834 INIT_LIST_HEAD(&tp->rx_done); in alloc_all_mem()
1835 skb_queue_head_init(&tp->tx_queue); in alloc_all_mem()
1836 skb_queue_head_init(&tp->rx_queue); in alloc_all_mem()
1837 atomic_set(&tp->rx_count, 0); in alloc_all_mem()
1866 INIT_LIST_HEAD(&tp->tx_info[i].list); in alloc_all_mem()
1867 tp->tx_info[i].context = tp; in alloc_all_mem()
1868 tp->tx_info[i].urb = urb; in alloc_all_mem()
1869 tp->tx_info[i].buffer = buf; in alloc_all_mem()
1870 tp->tx_info[i].head = tx_agg_align(buf); in alloc_all_mem()
1872 list_add_tail(&tp->tx_info[i].list, &tp->tx_free); in alloc_all_mem()
1875 tp->intr_urb = usb_alloc_urb(0, GFP_KERNEL); in alloc_all_mem()
1876 if (!tp->intr_urb) in alloc_all_mem()
1879 tp->intr_buff = kmalloc(INTBUFSIZE, GFP_KERNEL); in alloc_all_mem()
1880 if (!tp->intr_buff) in alloc_all_mem()
1883 tp->intr_interval = (int)ep_intr->desc.bInterval; in alloc_all_mem()
1884 usb_fill_int_urb(tp->intr_urb, tp->udev, usb_rcvintpipe(tp->udev, 3), in alloc_all_mem()
1885 tp->intr_buff, INTBUFSIZE, intr_callback, in alloc_all_mem()
1886 tp, tp->intr_interval); in alloc_all_mem()
1892 return -ENOMEM; in alloc_all_mem()
1900 if (list_empty(&tp->tx_free)) in r8152_get_tx_agg()
1903 spin_lock_irqsave(&tp->tx_lock, flags); in r8152_get_tx_agg()
1904 if (!list_empty(&tp->tx_free)) { in r8152_get_tx_agg()
1907 cursor = tp->tx_free.next; in r8152_get_tx_agg()
1911 spin_unlock_irqrestore(&tp->tx_lock, flags); in r8152_get_tx_agg()
1923 if (skb_shinfo(skb)->gso_size) { in r8152_csum_workaround()
1924 netdev_features_t features = tp->netdev->features; in r8152_csum_workaround()
1942 } else if (skb->ip_summed == CHECKSUM_PARTIAL) { in r8152_csum_workaround()
1951 stats = &tp->netdev->stats; in r8152_csum_workaround()
1952 stats->tx_dropped++; in r8152_csum_workaround()
1963 desc->opts2 |= cpu_to_le32(opts2); in rtl_tx_vlan_tag()
1969 u32 opts2 = le32_to_cpu(desc->opts2); in rtl_rx_vlan_tag()
1979 u32 mss = skb_shinfo(skb)->gso_size; in r8152_tx_csum()
1989 netif_warn(tp, tx_err, tp->netdev, in r8152_tx_csum()
2017 } else if (skb->ip_summed == CHECKSUM_PARTIAL) { in r8152_tx_csum()
2021 netif_warn(tp, tx_err, tp->netdev, in r8152_tx_csum()
2031 ip_protocol = ip_hdr(skb)->protocol; in r8152_tx_csum()
2036 ip_protocol = ipv6_hdr(skb)->nexthdr; in r8152_tx_csum()
2054 desc->opts2 = cpu_to_le32(opts2); in r8152_tx_csum()
2055 desc->opts1 = cpu_to_le32(opts1); in r8152_tx_csum()
2063 struct sk_buff_head skb_head, *tx_queue = &tp->tx_queue; in r8152_tx_agg_fill()
2068 spin_lock(&tx_queue->lock); in r8152_tx_agg_fill()
2070 spin_unlock(&tx_queue->lock); in r8152_tx_agg_fill()
2072 tx_data = agg->head; in r8152_tx_agg_fill()
2073 agg->skb_num = 0; in r8152_tx_agg_fill()
2074 agg->skb_len = 0; in r8152_tx_agg_fill()
2087 len = skb->len + sizeof(*tx_desc); in r8152_tx_agg_fill()
2099 if (r8152_tx_csum(tp, tx_desc, skb, skb->len, offset)) { in r8152_tx_agg_fill()
2108 len = skb->len; in r8152_tx_agg_fill()
2110 struct net_device_stats *stats = &tp->netdev->stats; in r8152_tx_agg_fill()
2112 stats->tx_dropped++; in r8152_tx_agg_fill()
2114 tx_data -= sizeof(*tx_desc); in r8152_tx_agg_fill()
2119 agg->skb_len += len; in r8152_tx_agg_fill()
2120 agg->skb_num += skb_shinfo(skb)->gso_segs ?: 1; in r8152_tx_agg_fill()
2124 remain = agg_buf_sz - (int)(tx_agg_align(tx_data) - agg->head); in r8152_tx_agg_fill()
2126 if (test_bit(DELL_TB_RX_AGG_BUG, &tp->flags)) in r8152_tx_agg_fill()
2131 spin_lock(&tx_queue->lock); in r8152_tx_agg_fill()
2133 spin_unlock(&tx_queue->lock); in r8152_tx_agg_fill()
2136 netif_tx_lock(tp->netdev); in r8152_tx_agg_fill()
2138 if (netif_queue_stopped(tp->netdev) && in r8152_tx_agg_fill()
2139 skb_queue_len(&tp->tx_queue) < tp->tx_qlen) in r8152_tx_agg_fill()
2140 netif_wake_queue(tp->netdev); in r8152_tx_agg_fill()
2142 netif_tx_unlock(tp->netdev); in r8152_tx_agg_fill()
2144 ret = usb_autopm_get_interface_async(tp->intf); in r8152_tx_agg_fill()
2148 usb_fill_bulk_urb(agg->urb, tp->udev, usb_sndbulkpipe(tp->udev, 2), in r8152_tx_agg_fill()
2149 agg->head, (int)(tx_data - (u8 *)agg->head), in r8152_tx_agg_fill()
2152 ret = usb_submit_urb(agg->urb, GFP_ATOMIC); in r8152_tx_agg_fill()
2154 usb_autopm_put_interface_async(tp->intf); in r8152_tx_agg_fill()
2165 if (!(tp->netdev->features & NETIF_F_RXCSUM)) in r8152_rx_csum()
2168 opts2 = le32_to_cpu(rx_desc->opts2); in r8152_rx_csum()
2169 opts3 = le32_to_cpu(rx_desc->opts3); in r8152_rx_csum()
2191 return atomic_read(&tp->rx_count) > RTL8152_MAX_RX; in rx_count_exceed()
2196 return (int)(addr - agg->buffer); in agg_offset()
2204 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_get_free_rx()
2206 list_for_each_entry_safe(agg, agg_next, &tp->rx_used, list) { in rtl_get_free_rx()
2207 if (page_count(agg->page) == 1) { in rtl_get_free_rx()
2209 list_del_init(&agg->list); in rtl_get_free_rx()
2214 list_del_init(&agg->list); in rtl_get_free_rx()
2221 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_get_free_rx()
2223 if (!agg_free && atomic_read(&tp->rx_count) < tp->rx_pending) in rtl_get_free_rx()
2234 struct napi_struct *napi = &tp->napi; in rx_bottom()
2236 if (!skb_queue_empty(&tp->rx_queue)) { in rx_bottom()
2238 struct sk_buff *skb = __skb_dequeue(&tp->rx_queue); in rx_bottom()
2239 struct net_device *netdev = tp->netdev; in rx_bottom()
2240 struct net_device_stats *stats = &netdev->stats; in rx_bottom()
2246 pkt_len = skb->len; in rx_bottom()
2249 stats->rx_packets++; in rx_bottom()
2250 stats->rx_bytes += pkt_len; in rx_bottom()
2254 if (list_empty(&tp->rx_done)) in rx_bottom()
2258 spin_lock_irqsave(&tp->rx_lock, flags); in rx_bottom()
2259 list_splice_init(&tp->rx_done, &rx_queue); in rx_bottom()
2260 spin_unlock_irqrestore(&tp->rx_lock, flags); in rx_bottom()
2272 urb = agg->urb; in rx_bottom()
2273 if (urb->actual_length < ETH_ZLEN) in rx_bottom()
2278 rx_desc = agg->buffer; in rx_bottom()
2279 rx_data = agg->buffer; in rx_bottom()
2282 while (urb->actual_length > len_used) { in rx_bottom()
2283 struct net_device *netdev = tp->netdev; in rx_bottom()
2284 struct net_device_stats *stats = &netdev->stats; in rx_bottom()
2289 if (unlikely(skb_queue_len(&tp->rx_queue) >= 1000)) in rx_bottom()
2292 pkt_len = le32_to_cpu(rx_desc->opts1) & RX_LEN_MASK; in rx_bottom()
2297 if (urb->actual_length < len_used) in rx_bottom()
2300 pkt_len -= ETH_FCS_LEN; in rx_bottom()
2303 if (!agg_free || tp->rx_copybreak > pkt_len) in rx_bottom()
2306 rx_frag_head_sz = tp->rx_copybreak; in rx_bottom()
2310 stats->rx_dropped++; in rx_bottom()
2314 skb->ip_summed = r8152_rx_csum(tp, rx_desc); in rx_bottom()
2315 memcpy(skb->data, rx_data, rx_frag_head_sz); in rx_bottom()
2317 pkt_len -= rx_frag_head_sz; in rx_bottom()
2320 skb_add_rx_frag(skb, 0, agg->page, in rx_bottom()
2324 get_page(agg->page); in rx_bottom()
2327 skb->protocol = eth_type_trans(skb, netdev); in rx_bottom()
2331 stats->rx_packets++; in rx_bottom()
2332 stats->rx_bytes += skb->len; in rx_bottom()
2335 __skb_queue_tail(&tp->rx_queue, skb); in rx_bottom()
2345 WARN_ON(!agg_free && page_count(agg->page) > 1); in rx_bottom()
2348 spin_lock_irqsave(&tp->rx_lock, flags); in rx_bottom()
2349 if (page_count(agg->page) == 1) { in rx_bottom()
2350 list_add(&agg_free->list, &tp->rx_used); in rx_bottom()
2352 list_add_tail(&agg->list, &tp->rx_used); in rx_bottom()
2354 urb = agg->urb; in rx_bottom()
2356 spin_unlock_irqrestore(&tp->rx_lock, flags); in rx_bottom()
2363 urb->actual_length = 0; in rx_bottom()
2364 list_add_tail(&agg->list, next); in rx_bottom()
2369 spin_lock_irqsave(&tp->rx_lock, flags); in rx_bottom()
2370 list_splice_tail(&rx_queue, &tp->rx_done); in rx_bottom()
2371 spin_unlock_irqrestore(&tp->rx_lock, flags); in rx_bottom()
2383 struct net_device *netdev = tp->netdev; in tx_bottom()
2386 if (skb_queue_empty(&tp->tx_queue)) in tx_bottom()
2397 if (res == -ENODEV) { in tx_bottom()
2401 struct net_device_stats *stats = &netdev->stats; in tx_bottom()
2406 stats->tx_dropped += agg->skb_num; in tx_bottom()
2408 spin_lock_irqsave(&tp->tx_lock, flags); in tx_bottom()
2409 list_add_tail(&agg->list, &tp->tx_free); in tx_bottom()
2410 spin_unlock_irqrestore(&tp->tx_lock, flags); in tx_bottom()
2421 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in bottom_half()
2424 if (!test_bit(WORK_ENABLE, &tp->flags)) in bottom_half()
2428 /* This avoid the re-submitting bulk */ in bottom_half()
2429 if (!netif_carrier_ok(tp->netdev)) in bottom_half()
2432 clear_bit(SCHEDULE_TASKLET, &tp->flags); in bottom_half()
2450 if (!list_empty(&tp->rx_done)) in r8152_poll()
2464 if (test_bit(RTL8152_UNPLUG, &tp->flags) || in r8152_submit_rx()
2465 !test_bit(WORK_ENABLE, &tp->flags) || !netif_carrier_ok(tp->netdev)) in r8152_submit_rx()
2468 usb_fill_bulk_urb(agg->urb, tp->udev, usb_rcvbulkpipe(tp->udev, 1), in r8152_submit_rx()
2469 agg->buffer, tp->rx_buf_sz, in r8152_submit_rx()
2472 ret = usb_submit_urb(agg->urb, mem_flags); in r8152_submit_rx()
2473 if (ret == -ENODEV) { in r8152_submit_rx()
2475 netif_device_detach(tp->netdev); in r8152_submit_rx()
2477 struct urb *urb = agg->urb; in r8152_submit_rx()
2480 urb->actual_length = 0; in r8152_submit_rx()
2481 spin_lock_irqsave(&tp->rx_lock, flags); in r8152_submit_rx()
2482 list_add_tail(&agg->list, &tp->rx_done); in r8152_submit_rx()
2483 spin_unlock_irqrestore(&tp->rx_lock, flags); in r8152_submit_rx()
2485 netif_err(tp, rx_err, tp->netdev, in r8152_submit_rx()
2488 napi_schedule(&tp->napi); in r8152_submit_rx()
2496 struct net_device_stats *stats = &tp->netdev->stats; in rtl_drop_queued_tx()
2497 struct sk_buff_head skb_head, *tx_queue = &tp->tx_queue; in rtl_drop_queued_tx()
2504 spin_lock_bh(&tx_queue->lock); in rtl_drop_queued_tx()
2506 spin_unlock_bh(&tx_queue->lock); in rtl_drop_queued_tx()
2510 stats->tx_dropped++; in rtl_drop_queued_tx()
2520 usb_queue_reset_device(tp->intf); in rtl8152_tx_timeout()
2528 set_bit(RTL8152_SET_RX_MODE, &tp->flags); in rtl8152_set_rx_mode()
2529 schedule_delayed_work(&tp->schedule, 0); in rtl8152_set_rx_mode()
2545 if (netdev->flags & IFF_PROMISC) { in _rtl8152_set_rx_mode()
2552 (netdev->flags & IFF_ALLMULTI)) { in _rtl8152_set_rx_mode()
2553 /* Too many to filter perfectly -- accept all multicasts. */ in _rtl8152_set_rx_mode()
2563 int bit_nr = ether_crc(ETH_ALEN, ha->addr) >> 26; in _rtl8152_set_rx_mode()
2582 u32 mss = skb_shinfo(skb)->gso_size; in rtl8152_features_check()
2586 if ((mss || skb->ip_summed == CHECKSUM_PARTIAL) && offset > max_offset) in rtl8152_features_check()
2588 else if ((skb->len + sizeof(struct tx_desc)) > agg_buf_sz) in rtl8152_features_check()
2601 skb_queue_tail(&tp->tx_queue, skb); in rtl8152_start_xmit()
2603 if (!list_empty(&tp->tx_free)) { in rtl8152_start_xmit()
2604 if (test_bit(SELECTIVE_SUSPEND, &tp->flags)) { in rtl8152_start_xmit()
2605 set_bit(SCHEDULE_TASKLET, &tp->flags); in rtl8152_start_xmit()
2606 schedule_delayed_work(&tp->schedule, 0); in rtl8152_start_xmit()
2608 usb_mark_last_busy(tp->udev); in rtl8152_start_xmit()
2609 tasklet_schedule(&tp->tx_tl); in rtl8152_start_xmit()
2611 } else if (skb_queue_len(&tp->tx_queue) > tp->tx_qlen) { in rtl8152_start_xmit()
2644 struct net_device *netdev = tp->netdev; in set_tx_qlen()
2646 tp->tx_qlen = agg_buf_sz / (netdev->mtu + VLAN_ETH_HLEN + ETH_FCS_LEN + in set_tx_qlen()
2693 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_start_rx()
2695 INIT_LIST_HEAD(&tp->rx_done); in rtl_start_rx()
2696 INIT_LIST_HEAD(&tp->rx_used); in rtl_start_rx()
2698 list_splice_init(&tp->rx_info, &tmp_list); in rtl_start_rx()
2700 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_start_rx()
2703 INIT_LIST_HEAD(&agg->list); in rtl_start_rx()
2707 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_start_rx()
2708 list_add_tail(&agg->list, &tp->rx_used); in rtl_start_rx()
2709 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_start_rx()
2711 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_start_rx()
2712 list_add_tail(&agg->list, &tp->rx_done); in rtl_start_rx()
2713 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_start_rx()
2719 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_start_rx()
2720 WARN_ON(!list_empty(&tp->rx_info)); in rtl_start_rx()
2721 list_splice(&tmp_list, &tp->rx_info); in rtl_start_rx()
2722 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_start_rx()
2741 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_stop_rx()
2742 list_splice_init(&tp->rx_info, &tmp_list); in rtl_stop_rx()
2743 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_stop_rx()
2749 if (page_count(agg->page) > 1) in rtl_stop_rx()
2752 usb_kill_urb(agg->urb); in rtl_stop_rx()
2756 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_stop_rx()
2757 WARN_ON(!list_empty(&tp->rx_info)); in rtl_stop_rx()
2758 list_splice(&tmp_list, &tp->rx_info); in rtl_stop_rx()
2759 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_stop_rx()
2761 while (!skb_queue_empty(&tp->rx_queue)) in rtl_stop_rx()
2762 dev_kfree_skb(__skb_dequeue(&tp->rx_queue)); in rtl_stop_rx()
2783 switch (tp->version) { in rtl_enable()
2799 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8152_enable()
2800 return -ENODEV; in rtl8152_enable()
2810 u32 ocp_data = tp->coalesce / 8; in r8153_set_rx_early_timeout()
2812 switch (tp->version) { in r8153_set_rx_early_timeout()
2839 u32 ocp_data = tp->rx_buf_sz - rx_reserved_size(tp->netdev->mtu); in r8153_set_rx_early_size()
2841 switch (tp->version) { in r8153_set_rx_early_size()
2862 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8153_enable()
2863 return -ENODEV; in rtl8153_enable()
2870 if (tp->version == RTL_VER_09) { in rtl8153_enable()
2889 if (test_bit(RTL8152_UNPLUG, &tp->flags)) { in rtl_disable()
2901 usb_kill_urb(tp->tx_info[i].urb); in rtl_disable()
2954 netdev_features_t changed = features ^ dev->features; in rtl8152_set_features()
2958 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_features()
2962 mutex_lock(&tp->control); in rtl8152_set_features()
2971 mutex_unlock(&tp->control); in rtl8152_set_features()
2973 usb_autopm_put_interface(tp->intf); in rtl8152_set_features()
3036 device_set_wakeup_enable(&tp->udev->dev, true); in __rtl_set_wol()
3038 device_set_wakeup_enable(&tp->udev->dev, false); in __rtl_set_wol()
3082 if (tp->ups_info.green) in r8153b_ups_flags()
3085 if (tp->ups_info.aldps) in r8153b_ups_flags()
3088 if (tp->ups_info.eee) in r8153b_ups_flags()
3091 if (tp->ups_info.flow_control) in r8153b_ups_flags()
3094 if (tp->ups_info.eee_ckdiv) in r8153b_ups_flags()
3097 if (tp->ups_info.eee_cmod_lv) in r8153b_ups_flags()
3100 if (tp->ups_info._10m_ckdiv) in r8153b_ups_flags()
3103 if (tp->ups_info.eee_plloff_100) in r8153b_ups_flags()
3106 if (tp->ups_info.eee_plloff_giga) in r8153b_ups_flags()
3109 if (tp->ups_info._250m_ckdiv) in r8153b_ups_flags()
3112 if (tp->ups_info.ctap_short_off) in r8153b_ups_flags()
3115 switch (tp->ups_info.speed_duplex) { in r8153b_ups_flags()
3168 tp->ups_info.green = enable; in r8153b_green_en()
3188 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8153_phy_status()
3228 test_bit(GREEN_ETHERNET, &tp->flags)); in r8153b_ups_en()
3240 netif_warn(tp, link, tp->netdev, in r8153b_ups_en()
3301 struct usb_device *udev = tp->udev; in rtl_can_wakeup()
3303 return (udev->actconfig->desc.bmAttributes & USB_CONFIG_ATT_WAKEUP); in rtl_can_wakeup()
3323 __rtl_set_wol(tp, tp->saved_wolopts); in rtl_runtime_suspend_enable()
3344 switch (tp->version) { in rtl8153_runtime_enable()
3371 if (tp->udev->speed != USB_SPEED_HIGH) in rtl8153b_runtime_enable()
3380 switch (tp->version) { in r8153_teredo_off()
3425 switch (tp->version) { in rtl_clear_bp()
3489 netif_err(tp, drv, tp->netdev, "patch request fail\n"); in r8153_patch_request()
3491 return -ETIME; in r8153_patch_request()
3500 dev_err(&tp->intf->dev, "patch request fail\n"); in r8153_pre_ram_code()
3501 return -ETIME; in r8153_pre_ram_code()
3524 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, tp->ocp_base); in r8153_post_ram_code()
3535 switch (tp->version) { in rtl8152_is_fw_phy_nc_ok()
3549 fw_offset = __le16_to_cpu(phy->fw_offset); in rtl8152_is_fw_phy_nc_ok()
3551 dev_err(&tp->intf->dev, "fw_offset too small\n"); in rtl8152_is_fw_phy_nc_ok()
3555 length = __le32_to_cpu(phy->blk_hdr.length); in rtl8152_is_fw_phy_nc_ok()
3557 dev_err(&tp->intf->dev, "invalid fw_offset\n"); in rtl8152_is_fw_phy_nc_ok()
3561 length -= __le16_to_cpu(phy->fw_offset); in rtl8152_is_fw_phy_nc_ok()
3563 dev_err(&tp->intf->dev, "invalid block length\n"); in rtl8152_is_fw_phy_nc_ok()
3567 if (__le16_to_cpu(phy->fw_reg) != fw_reg) { in rtl8152_is_fw_phy_nc_ok()
3568 dev_err(&tp->intf->dev, "invalid register to load firmware\n"); in rtl8152_is_fw_phy_nc_ok()
3572 if (__le16_to_cpu(phy->ba_reg) != ba_reg) { in rtl8152_is_fw_phy_nc_ok()
3573 dev_err(&tp->intf->dev, "invalid base address register\n"); in rtl8152_is_fw_phy_nc_ok()
3577 if (__le16_to_cpu(phy->patch_en_addr) != patch_en_addr) { in rtl8152_is_fw_phy_nc_ok()
3578 dev_err(&tp->intf->dev, in rtl8152_is_fw_phy_nc_ok()
3583 if (__le16_to_cpu(phy->mode_reg) != mode_reg) { in rtl8152_is_fw_phy_nc_ok()
3584 dev_err(&tp->intf->dev, in rtl8152_is_fw_phy_nc_ok()
3589 if (__le16_to_cpu(phy->bp_start) != bp_start) { in rtl8152_is_fw_phy_nc_ok()
3590 dev_err(&tp->intf->dev, in rtl8152_is_fw_phy_nc_ok()
3595 if (__le16_to_cpu(phy->bp_num) > 4) { in rtl8152_is_fw_phy_nc_ok()
3596 dev_err(&tp->intf->dev, "invalid break point number\n"); in rtl8152_is_fw_phy_nc_ok()
3612 type = __le32_to_cpu(mac->blk_hdr.type); in rtl8152_is_fw_mac_ok()
3614 switch (tp->version) { in rtl8152_is_fw_mac_ok()
3640 switch (tp->version) { in rtl8152_is_fw_mac_ok()
3669 fw_offset = __le16_to_cpu(mac->fw_offset); in rtl8152_is_fw_mac_ok()
3671 dev_err(&tp->intf->dev, "fw_offset too small\n"); in rtl8152_is_fw_mac_ok()
3675 length = __le32_to_cpu(mac->blk_hdr.length); in rtl8152_is_fw_mac_ok()
3677 dev_err(&tp->intf->dev, "invalid fw_offset\n"); in rtl8152_is_fw_mac_ok()
3681 length -= fw_offset; in rtl8152_is_fw_mac_ok()
3683 dev_err(&tp->intf->dev, "invalid block length\n"); in rtl8152_is_fw_mac_ok()
3687 if (__le16_to_cpu(mac->fw_reg) != fw_reg) { in rtl8152_is_fw_mac_ok()
3688 dev_err(&tp->intf->dev, "invalid register to load firmware\n"); in rtl8152_is_fw_mac_ok()
3692 if (__le16_to_cpu(mac->bp_ba_addr) != bp_ba_addr) { in rtl8152_is_fw_mac_ok()
3693 dev_err(&tp->intf->dev, "invalid base address register\n"); in rtl8152_is_fw_mac_ok()
3697 if (__le16_to_cpu(mac->bp_en_addr) != bp_en_addr) { in rtl8152_is_fw_mac_ok()
3698 dev_err(&tp->intf->dev, "invalid enabled mask register\n"); in rtl8152_is_fw_mac_ok()
3702 if (__le16_to_cpu(mac->bp_start) != bp_start) { in rtl8152_is_fw_mac_ok()
3703 dev_err(&tp->intf->dev, in rtl8152_is_fw_mac_ok()
3708 if (__le16_to_cpu(mac->bp_num) > max_bp) { in rtl8152_is_fw_mac_ok()
3709 dev_err(&tp->intf->dev, "invalid break point number\n"); in rtl8152_is_fw_mac_ok()
3713 for (i = __le16_to_cpu(mac->bp_num); i < max_bp; i++) { in rtl8152_is_fw_mac_ok()
3714 if (mac->bp[i]) { in rtl8152_is_fw_mac_ok()
3715 dev_err(&tp->intf->dev, "unused bp%u is not zero\n", i); in rtl8152_is_fw_mac_ok()
3732 unsigned char checksum[sizeof(fw_hdr->checksum)]; in rtl8152_fw_verify_checksum()
3744 if (crypto_shash_digestsize(alg) != sizeof(fw_hdr->checksum)) { in rtl8152_fw_verify_checksum()
3745 rc = -EFAULT; in rtl8152_fw_verify_checksum()
3746 dev_err(&tp->intf->dev, "digestsize incorrect (%u)\n", in rtl8152_fw_verify_checksum()
3754 rc = -ENOMEM; in rtl8152_fw_verify_checksum()
3757 sdesc->tfm = alg; in rtl8152_fw_verify_checksum()
3759 len = size - sizeof(fw_hdr->checksum); in rtl8152_fw_verify_checksum()
3760 rc = crypto_shash_digest(sdesc, fw_hdr->version, len, checksum); in rtl8152_fw_verify_checksum()
3765 if (memcmp(fw_hdr->checksum, checksum, sizeof(fw_hdr->checksum))) { in rtl8152_fw_verify_checksum()
3766 dev_err(&tp->intf->dev, "checksum fail\n"); in rtl8152_fw_verify_checksum()
3767 rc = -EFAULT; in rtl8152_fw_verify_checksum()
3778 const struct firmware *fw = rtl_fw->fw; in rtl8152_check_firmware()
3779 struct fw_header *fw_hdr = (struct fw_header *)fw->data; in rtl8152_check_firmware()
3784 long ret = -EFAULT; in rtl8152_check_firmware()
3787 if (fw->size < sizeof(*fw_hdr)) { in rtl8152_check_firmware()
3788 dev_err(&tp->intf->dev, "file too small\n"); in rtl8152_check_firmware()
3792 ret = rtl8152_fw_verify_checksum(tp, fw_hdr, fw->size); in rtl8152_check_firmware()
3796 ret = -EFAULT; in rtl8152_check_firmware()
3798 for (i = sizeof(*fw_hdr); i < fw->size;) { in rtl8152_check_firmware()
3799 struct fw_block *block = (struct fw_block *)&fw->data[i]; in rtl8152_check_firmware()
3802 if ((i + sizeof(*block)) > fw->size) in rtl8152_check_firmware()
3805 type = __le32_to_cpu(block->type); in rtl8152_check_firmware()
3808 if (__le32_to_cpu(block->length) != sizeof(*block)) in rtl8152_check_firmware()
3813 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
3820 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
3827 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
3834 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
3841 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
3846 if (__le32_to_cpu(block->length) != sizeof(*start)) { in rtl8152_check_firmware()
3847 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
3856 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
3861 if (__le32_to_cpu(block->length) != sizeof(*block)) { in rtl8152_check_firmware()
3862 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
3871 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
3877 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
3884 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
3891 dev_warn(&tp->intf->dev, "Unknown type %u is found\n", in rtl8152_check_firmware()
3897 i += ALIGN(__le32_to_cpu(block->length), 8); in rtl8152_check_firmware()
3902 dev_err(&tp->intf->dev, "without PHY_STOP\n"); in rtl8152_check_firmware()
3917 mode_reg = __le16_to_cpu(phy->mode_reg); in rtl8152_fw_phy_nc_apply()
3918 sram_write(tp, mode_reg, __le16_to_cpu(phy->mode_pre)); in rtl8152_fw_phy_nc_apply()
3919 sram_write(tp, __le16_to_cpu(phy->ba_reg), in rtl8152_fw_phy_nc_apply()
3920 __le16_to_cpu(phy->ba_data)); in rtl8152_fw_phy_nc_apply()
3922 length = __le32_to_cpu(phy->blk_hdr.length); in rtl8152_fw_phy_nc_apply()
3923 length -= __le16_to_cpu(phy->fw_offset); in rtl8152_fw_phy_nc_apply()
3925 data = (__le16 *)((u8 *)phy + __le16_to_cpu(phy->fw_offset)); in rtl8152_fw_phy_nc_apply()
3927 ocp_reg_write(tp, OCP_SRAM_ADDR, __le16_to_cpu(phy->fw_reg)); in rtl8152_fw_phy_nc_apply()
3931 sram_write(tp, __le16_to_cpu(phy->patch_en_addr), in rtl8152_fw_phy_nc_apply()
3932 __le16_to_cpu(phy->patch_en_value)); in rtl8152_fw_phy_nc_apply()
3934 bp_index = __le16_to_cpu(phy->bp_start); in rtl8152_fw_phy_nc_apply()
3935 num = __le16_to_cpu(phy->bp_num); in rtl8152_fw_phy_nc_apply()
3937 sram_write(tp, bp_index, __le16_to_cpu(phy->bp[i])); in rtl8152_fw_phy_nc_apply()
3941 sram_write(tp, mode_reg, __le16_to_cpu(phy->mode_post)); in rtl8152_fw_phy_nc_apply()
3943 dev_dbg(&tp->intf->dev, "successfully applied %s\n", phy->info); in rtl8152_fw_phy_nc_apply()
3953 switch (__le32_to_cpu(mac->blk_hdr.type)) { in rtl8152_fw_mac_apply()
3969 if (tp->version == RTL_VER_04 && type == MCU_TYPE_PLA && in rtl8152_fw_mac_apply()
3975 length = __le32_to_cpu(mac->blk_hdr.length); in rtl8152_fw_mac_apply()
3976 length -= __le16_to_cpu(mac->fw_offset); in rtl8152_fw_mac_apply()
3979 data += __le16_to_cpu(mac->fw_offset); in rtl8152_fw_mac_apply()
3981 generic_ocp_write(tp, __le16_to_cpu(mac->fw_reg), 0xff, length, data, in rtl8152_fw_mac_apply()
3984 ocp_write_word(tp, type, __le16_to_cpu(mac->bp_ba_addr), in rtl8152_fw_mac_apply()
3985 __le16_to_cpu(mac->bp_ba_value)); in rtl8152_fw_mac_apply()
3987 bp_index = __le16_to_cpu(mac->bp_start); in rtl8152_fw_mac_apply()
3988 bp_num = __le16_to_cpu(mac->bp_num); in rtl8152_fw_mac_apply()
3990 ocp_write_word(tp, type, bp_index, __le16_to_cpu(mac->bp[i])); in rtl8152_fw_mac_apply()
3994 bp_en_addr = __le16_to_cpu(mac->bp_en_addr); in rtl8152_fw_mac_apply()
3997 __le16_to_cpu(mac->bp_en_value)); in rtl8152_fw_mac_apply()
3999 fw_ver_reg = __le16_to_cpu(mac->fw_ver_reg); in rtl8152_fw_mac_apply()
4002 mac->fw_ver_data); in rtl8152_fw_mac_apply()
4004 dev_dbg(&tp->intf->dev, "successfully applied %s\n", mac->info); in rtl8152_fw_mac_apply()
4009 struct rtl_fw *rtl_fw = &tp->rtl_fw; in rtl8152_apply_firmware()
4016 if (IS_ERR_OR_NULL(rtl_fw->fw)) in rtl8152_apply_firmware()
4019 fw = rtl_fw->fw; in rtl8152_apply_firmware()
4020 fw_hdr = (struct fw_header *)fw->data; in rtl8152_apply_firmware()
4022 if (rtl_fw->pre_fw) in rtl8152_apply_firmware()
4023 rtl_fw->pre_fw(tp); in rtl8152_apply_firmware()
4025 for (i = offsetof(struct fw_header, blocks); i < fw->size;) { in rtl8152_apply_firmware()
4026 struct fw_block *block = (struct fw_block *)&fw->data[i]; in rtl8152_apply_firmware()
4028 switch (__le32_to_cpu(block->type)) { in rtl8152_apply_firmware()
4037 key_addr = __le16_to_cpu(key->key_reg); in rtl8152_apply_firmware()
4039 __le16_to_cpu(key->key_data)); in rtl8152_apply_firmware()
4052 i += ALIGN(__le32_to_cpu(block->length), 8); in rtl8152_apply_firmware()
4056 if (rtl_fw->post_fw) in rtl8152_apply_firmware()
4057 rtl_fw->post_fw(tp); in rtl8152_apply_firmware()
4059 strscpy(rtl_fw->version, fw_hdr->version, RTL_VER_SIZE); in rtl8152_apply_firmware()
4060 dev_info(&tp->intf->dev, "load %s successfully\n", rtl_fw->version); in rtl8152_apply_firmware()
4065 struct rtl_fw *rtl_fw = &tp->rtl_fw; in rtl8152_release_firmware()
4067 if (!IS_ERR_OR_NULL(rtl_fw->fw)) { in rtl8152_release_firmware()
4068 release_firmware(rtl_fw->fw); in rtl8152_release_firmware()
4069 rtl_fw->fw = NULL; in rtl8152_release_firmware()
4075 struct rtl_fw *rtl_fw = &tp->rtl_fw; in rtl8152_request_firmware()
4078 if (rtl_fw->fw || !rtl_fw->fw_name) { in rtl8152_request_firmware()
4079 dev_info(&tp->intf->dev, "skip request firmware\n"); in rtl8152_request_firmware()
4084 rc = request_firmware(&rtl_fw->fw, rtl_fw->fw_name, &tp->intf->dev); in rtl8152_request_firmware()
4090 release_firmware(rtl_fw->fw); in rtl8152_request_firmware()
4094 rtl_fw->fw = ERR_PTR(rc); in rtl8152_request_firmware()
4096 dev_warn(&tp->intf->dev, in rtl8152_request_firmware()
4098 rtl_fw->fw_name, rc); in rtl8152_request_firmware()
4191 tp->ups_info.eee = enable; in r8153_eee_en()
4196 switch (tp->version) { in rtl_eee_enable()
4203 tp->eee_adv); in rtl_eee_enable()
4217 ocp_reg_write(tp, OCP_EEE_ADV, tp->eee_adv); in rtl_eee_enable()
4236 tp->ups_info.flow_control = true; in r8152b_enable_fc()
4249 rtl_eee_enable(tp, tp->eee_en); in r8152b_hw_phy_cfg()
4253 set_bit(PHY_RESET, &tp->flags); in r8152b_hw_phy_cfg()
4303 if (tp->udev->speed == USB_SPEED_FULL || in r8152b_exit_oob()
4304 tp->udev->speed == USB_SPEED_LOW) { in r8152b_exit_oob()
4326 rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX); in r8152b_exit_oob()
4473 /* enable bp0 for RTL8153-BND */ in r8153b_post_firmware_1()
4516 tp->ups_info.aldps = enable; in r8153_aldps_en()
4532 if (tp->version == RTL_VER_03) { in r8153_hw_phy_cfg()
4561 if (tp->eee_en) in r8153_hw_phy_cfg()
4567 switch (tp->version) { in r8153_hw_phy_cfg()
4578 set_bit(PHY_RESET, &tp->flags); in r8153_hw_phy_cfg()
4606 r8153b_green_en(tp, test_bit(GREEN_ETHERNET, &tp->flags)); in r8153b_hw_phy_cfg()
4616 * read efuse offset 0x7d to get a 17-bit data. Remove the dummy/fake in r8153b_hw_phy_cfg()
4617 * bit (bit3) to rebuild the real 16-bit data. Write the data to the in r8153b_hw_phy_cfg()
4625 /* ups mode tx-link-pulse timing adjustment: in r8153b_hw_phy_cfg()
4626 * rg_saw_cnt = OCP reg 0xC426 Bit[13:0] in r8153b_hw_phy_cfg()
4649 tp->ups_info.eee_ckdiv = true; in r8153b_hw_phy_cfg()
4654 tp->ups_info.eee_cmod_lv = true; in r8153b_hw_phy_cfg()
4655 tp->ups_info._10m_ckdiv = true; in r8153b_hw_phy_cfg()
4656 tp->ups_info.eee_plloff_giga = true; in r8153b_hw_phy_cfg()
4660 tp->ups_info._250m_ckdiv = true; in r8153b_hw_phy_cfg()
4665 if (tp->eee_en) in r8153b_hw_phy_cfg()
4671 set_bit(PHY_RESET, &tp->flags); in r8153b_hw_phy_cfg()
4704 rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX); in r8153_first_init()
4706 ocp_data = tp->netdev->mtu + VLAN_ETH_HLEN + ETH_FCS_LEN; in r8153_first_init()
4743 ocp_data = tp->netdev->mtu + VLAN_ETH_HLEN + ETH_FCS_LEN; in r8153_enter_oob()
4746 switch (tp->version) { in r8153_enter_oob()
4802 return -EINVAL; in rtl8152_set_speed()
4809 tp->ups_info.speed_duplex = FORCE_10M_FULL; in rtl8152_set_speed()
4811 tp->ups_info.speed_duplex = FORCE_10M_HALF; in rtl8152_set_speed()
4818 tp->ups_info.speed_duplex = FORCE_100M_FULL; in rtl8152_set_speed()
4820 tp->ups_info.speed_duplex = FORCE_100M_HALF; in rtl8152_set_speed()
4824 if (tp->mii.supports_gmii) { in rtl8152_set_speed()
4826 tp->ups_info.speed_duplex = NWAY_1000M_FULL; in rtl8152_set_speed()
4831 ret = -EINVAL; in rtl8152_set_speed()
4836 tp->mii.full_duplex = 1; in rtl8152_set_speed()
4838 tp->mii.full_duplex = 0; in rtl8152_set_speed()
4840 tp->mii.force_media = 1; in rtl8152_set_speed()
4848 if (tp->mii.supports_gmii) in rtl8152_set_speed()
4852 return -EINVAL; in rtl8152_set_speed()
4859 tp->ups_info.speed_duplex = NWAY_10M_HALF; in rtl8152_set_speed()
4863 tp->ups_info.speed_duplex = NWAY_10M_FULL; in rtl8152_set_speed()
4868 tp->ups_info.speed_duplex = NWAY_100M_HALF; in rtl8152_set_speed()
4872 tp->ups_info.speed_duplex = NWAY_100M_FULL; in rtl8152_set_speed()
4877 tp->mii.advertising = tmp1; in rtl8152_set_speed()
4880 if (tp->mii.supports_gmii) { in rtl8152_set_speed()
4889 tp->ups_info.speed_duplex = NWAY_1000M_FULL; in rtl8152_set_speed()
4898 tp->mii.force_media = 0; in rtl8152_set_speed()
4901 if (test_and_clear_bit(PHY_RESET, &tp->flags)) in rtl8152_set_speed()
4922 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8152_up()
4932 if (test_bit(RTL8152_UNPLUG, &tp->flags)) { in rtl8152_down()
4947 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8153_up()
4969 switch (tp->version) { in rtl8153_up()
4987 if (test_bit(RTL8152_UNPLUG, &tp->flags)) { in rtl8153_down()
5008 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8153b_up()
5024 if (tp->udev->speed != USB_SPEED_HIGH) in rtl8153b_up()
5032 if (test_bit(RTL8152_UNPLUG, &tp->flags)) { in rtl8153b_down()
5054 tp->ocp_base = 0x2000; in rtl8152_in_nway()
5077 struct net_device *netdev = tp->netdev; in set_carrier()
5078 struct napi_struct *napi = &tp->napi; in set_carrier()
5085 tp->rtl_ops.enable(tp); in set_carrier()
5090 clear_bit(RTL8152_SET_RX_MODE, &tp->flags); in set_carrier()
5092 napi_enable(&tp->napi); in set_carrier()
5096 skb_queue_len(&tp->tx_queue) < tp->tx_qlen) { in set_carrier()
5102 tasklet_disable(&tp->tx_tl); in set_carrier()
5104 tp->rtl_ops.disable(tp); in set_carrier()
5106 tasklet_enable(&tp->tx_tl); in set_carrier()
5119 if (test_bit(RTL8152_UNPLUG, &tp->flags) || !netif_running(tp->netdev)) in rtl_work_func_t()
5122 if (usb_autopm_get_interface(tp->intf) < 0) in rtl_work_func_t()
5125 if (!test_bit(WORK_ENABLE, &tp->flags)) in rtl_work_func_t()
5128 if (!mutex_trylock(&tp->control)) { in rtl_work_func_t()
5129 schedule_delayed_work(&tp->schedule, 0); in rtl_work_func_t()
5133 if (test_and_clear_bit(RTL8152_LINK_CHG, &tp->flags)) in rtl_work_func_t()
5136 if (test_and_clear_bit(RTL8152_SET_RX_MODE, &tp->flags)) in rtl_work_func_t()
5137 _rtl8152_set_rx_mode(tp->netdev); in rtl_work_func_t()
5140 if (test_and_clear_bit(SCHEDULE_TASKLET, &tp->flags) && in rtl_work_func_t()
5141 netif_carrier_ok(tp->netdev)) in rtl_work_func_t()
5142 tasklet_schedule(&tp->tx_tl); in rtl_work_func_t()
5144 mutex_unlock(&tp->control); in rtl_work_func_t()
5147 usb_autopm_put_interface(tp->intf); in rtl_work_func_t()
5154 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl_hw_phy_work_func_t()
5157 if (usb_autopm_get_interface(tp->intf) < 0) in rtl_hw_phy_work_func_t()
5160 mutex_lock(&tp->control); in rtl_hw_phy_work_func_t()
5162 if (rtl8152_request_firmware(tp) == -ENODEV && tp->rtl_fw.retry) { in rtl_hw_phy_work_func_t()
5163 tp->rtl_fw.retry = false; in rtl_hw_phy_work_func_t()
5164 tp->rtl_fw.fw = NULL; in rtl_hw_phy_work_func_t()
5166 /* Delay execution in case request_firmware() is not ready yet. in rtl_hw_phy_work_func_t()
5168 queue_delayed_work(system_long_wq, &tp->hw_phy_work, HZ * 10); in rtl_hw_phy_work_func_t()
5172 tp->rtl_ops.hw_phy_cfg(tp); in rtl_hw_phy_work_func_t()
5174 rtl8152_set_speed(tp, tp->autoneg, tp->speed, tp->duplex, in rtl_hw_phy_work_func_t()
5175 tp->advertising); in rtl_hw_phy_work_func_t()
5178 mutex_unlock(&tp->control); in rtl_hw_phy_work_func_t()
5180 usb_autopm_put_interface(tp->intf); in rtl_hw_phy_work_func_t()
5192 usb_autopm_get_interface(tp->intf); in rtl_notifier()
5197 usb_autopm_put_interface(tp->intf); in rtl_notifier()
5215 if (work_busy(&tp->hw_phy_work.work) & WORK_BUSY_PENDING) { in rtl8152_open()
5216 cancel_delayed_work_sync(&tp->hw_phy_work); in rtl8152_open()
5217 rtl_hw_phy_work_func_t(&tp->hw_phy_work.work); in rtl8152_open()
5224 res = usb_autopm_get_interface(tp->intf); in rtl8152_open()
5228 mutex_lock(&tp->control); in rtl8152_open()
5230 tp->rtl_ops.up(tp); in rtl8152_open()
5234 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_open()
5236 res = usb_submit_urb(tp->intr_urb, GFP_KERNEL); in rtl8152_open()
5238 if (res == -ENODEV) in rtl8152_open()
5239 netif_device_detach(tp->netdev); in rtl8152_open()
5244 napi_enable(&tp->napi); in rtl8152_open()
5245 tasklet_enable(&tp->tx_tl); in rtl8152_open()
5247 mutex_unlock(&tp->control); in rtl8152_open()
5249 usb_autopm_put_interface(tp->intf); in rtl8152_open()
5251 tp->pm_notifier.notifier_call = rtl_notifier; in rtl8152_open()
5252 register_pm_notifier(&tp->pm_notifier); in rtl8152_open()
5257 mutex_unlock(&tp->control); in rtl8152_open()
5258 usb_autopm_put_interface(tp->intf); in rtl8152_open()
5271 unregister_pm_notifier(&tp->pm_notifier); in rtl8152_close()
5273 tasklet_disable(&tp->tx_tl); in rtl8152_close()
5274 clear_bit(WORK_ENABLE, &tp->flags); in rtl8152_close()
5275 usb_kill_urb(tp->intr_urb); in rtl8152_close()
5276 cancel_delayed_work_sync(&tp->schedule); in rtl8152_close()
5277 napi_disable(&tp->napi); in rtl8152_close()
5280 res = usb_autopm_get_interface(tp->intf); in rtl8152_close()
5281 if (res < 0 || test_bit(RTL8152_UNPLUG, &tp->flags)) { in rtl8152_close()
5285 mutex_lock(&tp->control); in rtl8152_close()
5287 tp->rtl_ops.down(tp); in rtl8152_close()
5289 mutex_unlock(&tp->control); in rtl8152_close()
5293 usb_autopm_put_interface(tp->intf); in rtl8152_close()
5314 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8152b_init()
5325 if (tp->version == RTL_VER_01) { in r8152b_init()
5358 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8153_init()
5369 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8153_init()
5375 if (tp->version == RTL_VER_03 || tp->version == RTL_VER_04 || in r8153_init()
5376 tp->version == RTL_VER_05) in r8153_init()
5389 if (tp->version == RTL_VER_04) { in r8153_init()
5398 } else if (tp->version == RTL_VER_05) { in r8153_init()
5409 } else if (tp->version == RTL_VER_06) { in r8153_init()
5441 if (tp->version == RTL_VER_04 && tp->udev->speed < USB_SPEED_SUPER) in r8153_init()
5463 usb_enable_lpm(tp->udev); in r8153_init()
5476 if (test_bit(DELL_TB_RX_AGG_BUG, &tp->flags)) in r8153_init()
5483 switch (tp->udev->speed) { in r8153_init()
5486 tp->coalesce = COALESCE_SUPER; in r8153_init()
5489 tp->coalesce = COALESCE_HIGH; in r8153_init()
5492 tp->coalesce = COALESCE_SLOW; in r8153_init()
5503 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8153b_init()
5514 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8153b_init()
5549 if (tp->udev->speed != USB_SPEED_HIGH) in r8153b_init()
5551 usb_enable_lpm(tp->udev); in r8153b_init()
5562 if (tp->version == RTL_VER_09) { in r8153b_init()
5571 set_bit(GREEN_ETHERNET, &tp->flags); in r8153b_init()
5580 tp->coalesce = 15000; /* 15 us */ in r8153b_init()
5591 netdev = tp->netdev; in rtl8152_pre_reset()
5596 tasklet_disable(&tp->tx_tl); in rtl8152_pre_reset()
5597 clear_bit(WORK_ENABLE, &tp->flags); in rtl8152_pre_reset()
5598 usb_kill_urb(tp->intr_urb); in rtl8152_pre_reset()
5599 cancel_delayed_work_sync(&tp->schedule); in rtl8152_pre_reset()
5600 napi_disable(&tp->napi); in rtl8152_pre_reset()
5602 mutex_lock(&tp->control); in rtl8152_pre_reset()
5603 tp->rtl_ops.disable(tp); in rtl8152_pre_reset()
5604 mutex_unlock(&tp->control); in rtl8152_pre_reset()
5622 dev_set_mac_address (tp->netdev, &sa, NULL); in rtl8152_post_reset()
5626 netdev = tp->netdev; in rtl8152_post_reset()
5630 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_post_reset()
5632 mutex_lock(&tp->control); in rtl8152_post_reset()
5633 tp->rtl_ops.enable(tp); in rtl8152_post_reset()
5636 mutex_unlock(&tp->control); in rtl8152_post_reset()
5639 napi_enable(&tp->napi); in rtl8152_post_reset()
5640 tasklet_enable(&tp->tx_tl); in rtl8152_post_reset()
5642 usb_submit_urb(tp->intr_urb, GFP_KERNEL); in rtl8152_post_reset()
5644 if (!list_empty(&tp->rx_done)) in rtl8152_post_reset()
5645 napi_schedule(&tp->napi); in rtl8152_post_reset()
5652 bool sw_linking = !!netif_carrier_ok(tp->netdev); in delay_autosuspend()
5659 if (work_busy(&tp->schedule.work) || sw_linking != hw_linking) in delay_autosuspend()
5665 if (!sw_linking && tp->rtl_ops.in_nway(tp)) in delay_autosuspend()
5667 else if (!skb_queue_empty(&tp->tx_queue)) in delay_autosuspend()
5675 struct net_device *netdev = tp->netdev; in rtl8152_runtime_resume()
5677 if (netif_running(netdev) && netdev->flags & IFF_UP) { in rtl8152_runtime_resume()
5678 struct napi_struct *napi = &tp->napi; in rtl8152_runtime_resume()
5680 tp->rtl_ops.autosuspend_en(tp, false); in rtl8152_runtime_resume()
5682 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_runtime_resume()
5689 tp->rtl_ops.disable(tp); in rtl8152_runtime_resume()
5695 clear_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_runtime_resume()
5698 if (!list_empty(&tp->rx_done)) in rtl8152_runtime_resume()
5699 napi_schedule(&tp->napi); in rtl8152_runtime_resume()
5701 usb_submit_urb(tp->intr_urb, GFP_NOIO); in rtl8152_runtime_resume()
5703 if (netdev->flags & IFF_UP) in rtl8152_runtime_resume()
5704 tp->rtl_ops.autosuspend_en(tp, false); in rtl8152_runtime_resume()
5706 clear_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_runtime_resume()
5714 struct net_device *netdev = tp->netdev; in rtl8152_system_resume()
5718 if (netif_running(netdev) && (netdev->flags & IFF_UP)) { in rtl8152_system_resume()
5719 tp->rtl_ops.up(tp); in rtl8152_system_resume()
5721 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_system_resume()
5722 usb_submit_urb(tp->intr_urb, GFP_NOIO); in rtl8152_system_resume()
5730 struct net_device *netdev = tp->netdev; in rtl8152_runtime_suspend()
5733 set_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_runtime_suspend()
5736 if (netif_running(netdev) && test_bit(WORK_ENABLE, &tp->flags)) { in rtl8152_runtime_suspend()
5751 clear_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_runtime_suspend()
5753 ret = -EBUSY; in rtl8152_runtime_suspend()
5758 clear_bit(WORK_ENABLE, &tp->flags); in rtl8152_runtime_suspend()
5759 usb_kill_urb(tp->intr_urb); in rtl8152_runtime_suspend()
5761 tp->rtl_ops.autosuspend_en(tp, true); in rtl8152_runtime_suspend()
5764 struct napi_struct *napi = &tp->napi; in rtl8152_runtime_suspend()
5775 ret = -EBUSY; in rtl8152_runtime_suspend()
5785 struct net_device *netdev = tp->netdev; in rtl8152_system_suspend()
5789 if (netif_running(netdev) && test_bit(WORK_ENABLE, &tp->flags)) { in rtl8152_system_suspend()
5790 struct napi_struct *napi = &tp->napi; in rtl8152_system_suspend()
5792 clear_bit(WORK_ENABLE, &tp->flags); in rtl8152_system_suspend()
5793 usb_kill_urb(tp->intr_urb); in rtl8152_system_suspend()
5794 tasklet_disable(&tp->tx_tl); in rtl8152_system_suspend()
5796 cancel_delayed_work_sync(&tp->schedule); in rtl8152_system_suspend()
5797 tp->rtl_ops.down(tp); in rtl8152_system_suspend()
5799 tasklet_enable(&tp->tx_tl); in rtl8152_system_suspend()
5810 mutex_lock(&tp->control); in rtl8152_suspend()
5817 mutex_unlock(&tp->control); in rtl8152_suspend()
5827 mutex_lock(&tp->control); in rtl8152_resume()
5829 if (test_bit(SELECTIVE_SUSPEND, &tp->flags)) in rtl8152_resume()
5834 mutex_unlock(&tp->control); in rtl8152_resume()
5843 clear_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_reset_resume()
5844 tp->rtl_ops.init(tp); in rtl8152_reset_resume()
5845 queue_delayed_work(system_long_wq, &tp->hw_phy_work, 0); in rtl8152_reset_resume()
5854 if (usb_autopm_get_interface(tp->intf) < 0) in rtl8152_get_wol()
5858 wol->supported = 0; in rtl8152_get_wol()
5859 wol->wolopts = 0; in rtl8152_get_wol()
5861 mutex_lock(&tp->control); in rtl8152_get_wol()
5862 wol->supported = WAKE_ANY; in rtl8152_get_wol()
5863 wol->wolopts = __rtl_get_wol(tp); in rtl8152_get_wol()
5864 mutex_unlock(&tp->control); in rtl8152_get_wol()
5867 usb_autopm_put_interface(tp->intf); in rtl8152_get_wol()
5876 return -EOPNOTSUPP; in rtl8152_set_wol()
5878 if (wol->wolopts & ~WAKE_ANY) in rtl8152_set_wol()
5879 return -EINVAL; in rtl8152_set_wol()
5881 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_wol()
5885 mutex_lock(&tp->control); in rtl8152_set_wol()
5887 __rtl_set_wol(tp, wol->wolopts); in rtl8152_set_wol()
5888 tp->saved_wolopts = wol->wolopts & WAKE_ANY; in rtl8152_set_wol()
5890 mutex_unlock(&tp->control); in rtl8152_set_wol()
5892 usb_autopm_put_interface(tp->intf); in rtl8152_set_wol()
5902 return tp->msg_enable; in rtl8152_get_msglevel()
5909 tp->msg_enable = value; in rtl8152_set_msglevel()
5917 strlcpy(info->driver, MODULENAME, sizeof(info->driver)); in rtl8152_get_drvinfo()
5918 strlcpy(info->version, DRIVER_VERSION, sizeof(info->version)); in rtl8152_get_drvinfo()
5919 usb_make_path(tp->udev, info->bus_info, sizeof(info->bus_info)); in rtl8152_get_drvinfo()
5920 if (!IS_ERR_OR_NULL(tp->rtl_fw.fw)) in rtl8152_get_drvinfo()
5921 strlcpy(info->fw_version, tp->rtl_fw.version, in rtl8152_get_drvinfo()
5922 sizeof(info->fw_version)); in rtl8152_get_drvinfo()
5932 if (!tp->mii.mdio_read) in rtl8152_get_link_ksettings()
5933 return -EOPNOTSUPP; in rtl8152_get_link_ksettings()
5935 ret = usb_autopm_get_interface(tp->intf); in rtl8152_get_link_ksettings()
5939 mutex_lock(&tp->control); in rtl8152_get_link_ksettings()
5941 mii_ethtool_get_link_ksettings(&tp->mii, cmd); in rtl8152_get_link_ksettings()
5943 mutex_unlock(&tp->control); in rtl8152_get_link_ksettings()
5945 usb_autopm_put_interface(tp->intf); in rtl8152_get_link_ksettings()
5958 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_link_ksettings()
5963 cmd->link_modes.advertising)) in rtl8152_set_link_ksettings()
5967 cmd->link_modes.advertising)) in rtl8152_set_link_ksettings()
5971 cmd->link_modes.advertising)) in rtl8152_set_link_ksettings()
5975 cmd->link_modes.advertising)) in rtl8152_set_link_ksettings()
5979 cmd->link_modes.advertising)) in rtl8152_set_link_ksettings()
5983 cmd->link_modes.advertising)) in rtl8152_set_link_ksettings()
5986 mutex_lock(&tp->control); in rtl8152_set_link_ksettings()
5988 ret = rtl8152_set_speed(tp, cmd->base.autoneg, cmd->base.speed, in rtl8152_set_link_ksettings()
5989 cmd->base.duplex, advertising); in rtl8152_set_link_ksettings()
5991 tp->autoneg = cmd->base.autoneg; in rtl8152_set_link_ksettings()
5992 tp->speed = cmd->base.speed; in rtl8152_set_link_ksettings()
5993 tp->duplex = cmd->base.duplex; in rtl8152_set_link_ksettings()
5994 tp->advertising = advertising; in rtl8152_set_link_ksettings()
5997 mutex_unlock(&tp->control); in rtl8152_set_link_ksettings()
5999 usb_autopm_put_interface(tp->intf); in rtl8152_set_link_ksettings()
6027 return -EOPNOTSUPP; in rtl8152_get_sset_count()
6037 if (usb_autopm_get_interface(tp->intf) < 0) in rtl8152_get_ethtool_stats()
6042 usb_autopm_put_interface(tp->intf); in rtl8152_get_ethtool_stats()
6082 eee->eee_enabled = tp->eee_en; in r8152_get_eee()
6083 eee->eee_active = !!(supported & adv & lp); in r8152_get_eee()
6084 eee->supported = supported; in r8152_get_eee()
6085 eee->advertised = tp->eee_adv; in r8152_get_eee()
6086 eee->lp_advertised = lp; in r8152_get_eee()
6093 u16 val = ethtool_adv_to_mmd_eee_adv_t(eee->advertised); in r8152_set_eee()
6095 tp->eee_en = eee->eee_enabled; in r8152_set_eee()
6096 tp->eee_adv = val; in r8152_set_eee()
6098 rtl_eee_enable(tp, tp->eee_en); in r8152_set_eee()
6117 eee->eee_enabled = tp->eee_en; in r8153_get_eee()
6118 eee->eee_active = !!(supported & adv & lp); in r8153_get_eee()
6119 eee->supported = supported; in r8153_get_eee()
6120 eee->advertised = tp->eee_adv; in r8153_get_eee()
6121 eee->lp_advertised = lp; in r8153_get_eee()
6132 ret = usb_autopm_get_interface(tp->intf); in rtl_ethtool_get_eee()
6136 mutex_lock(&tp->control); in rtl_ethtool_get_eee()
6138 ret = tp->rtl_ops.eee_get(tp, edata); in rtl_ethtool_get_eee()
6140 mutex_unlock(&tp->control); in rtl_ethtool_get_eee()
6142 usb_autopm_put_interface(tp->intf); in rtl_ethtool_get_eee()
6154 ret = usb_autopm_get_interface(tp->intf); in rtl_ethtool_set_eee()
6158 mutex_lock(&tp->control); in rtl_ethtool_set_eee()
6160 ret = tp->rtl_ops.eee_set(tp, edata); in rtl_ethtool_set_eee()
6162 ret = mii_nway_restart(&tp->mii); in rtl_ethtool_set_eee()
6164 mutex_unlock(&tp->control); in rtl_ethtool_set_eee()
6166 usb_autopm_put_interface(tp->intf); in rtl_ethtool_set_eee()
6177 ret = usb_autopm_get_interface(tp->intf); in rtl8152_nway_reset()
6181 mutex_lock(&tp->control); in rtl8152_nway_reset()
6183 ret = mii_nway_restart(&tp->mii); in rtl8152_nway_reset()
6185 mutex_unlock(&tp->control); in rtl8152_nway_reset()
6187 usb_autopm_put_interface(tp->intf); in rtl8152_nway_reset()
6198 switch (tp->version) { in rtl8152_get_coalesce()
6202 return -EOPNOTSUPP; in rtl8152_get_coalesce()
6207 coalesce->rx_coalesce_usecs = tp->coalesce; in rtl8152_get_coalesce()
6218 switch (tp->version) { in rtl8152_set_coalesce()
6222 return -EOPNOTSUPP; in rtl8152_set_coalesce()
6227 if (coalesce->rx_coalesce_usecs > COALESCE_SLOW) in rtl8152_set_coalesce()
6228 return -EINVAL; in rtl8152_set_coalesce()
6230 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_coalesce()
6234 mutex_lock(&tp->control); in rtl8152_set_coalesce()
6236 if (tp->coalesce != coalesce->rx_coalesce_usecs) { in rtl8152_set_coalesce()
6237 tp->coalesce = coalesce->rx_coalesce_usecs; in rtl8152_set_coalesce()
6241 napi_disable(&tp->napi); in rtl8152_set_coalesce()
6242 tp->rtl_ops.disable(tp); in rtl8152_set_coalesce()
6243 tp->rtl_ops.enable(tp); in rtl8152_set_coalesce()
6245 clear_bit(RTL8152_SET_RX_MODE, &tp->flags); in rtl8152_set_coalesce()
6247 napi_enable(&tp->napi); in rtl8152_set_coalesce()
6252 mutex_unlock(&tp->control); in rtl8152_set_coalesce()
6254 usb_autopm_put_interface(tp->intf); in rtl8152_set_coalesce()
6264 switch (tunable->id) { in rtl8152_get_tunable()
6266 *(u32 *)d = tp->rx_copybreak; in rtl8152_get_tunable()
6269 return -EOPNOTSUPP; in rtl8152_get_tunable()
6282 switch (tunable->id) { in rtl8152_set_tunable()
6288 return -EINVAL; in rtl8152_set_tunable()
6291 if (tp->rx_copybreak != val) { in rtl8152_set_tunable()
6292 if (netdev->flags & IFF_UP) { in rtl8152_set_tunable()
6293 mutex_lock(&tp->control); in rtl8152_set_tunable()
6294 napi_disable(&tp->napi); in rtl8152_set_tunable()
6295 tp->rx_copybreak = val; in rtl8152_set_tunable()
6296 napi_enable(&tp->napi); in rtl8152_set_tunable()
6297 mutex_unlock(&tp->control); in rtl8152_set_tunable()
6299 tp->rx_copybreak = val; in rtl8152_set_tunable()
6304 return -EOPNOTSUPP; in rtl8152_set_tunable()
6315 ring->rx_max_pending = RTL8152_RX_MAX_PENDING; in rtl8152_get_ringparam()
6316 ring->rx_pending = tp->rx_pending; in rtl8152_get_ringparam()
6324 if (ring->rx_pending < (RTL8152_MAX_RX * 2)) in rtl8152_set_ringparam()
6325 return -EINVAL; in rtl8152_set_ringparam()
6327 if (tp->rx_pending != ring->rx_pending) { in rtl8152_set_ringparam()
6328 if (netdev->flags & IFF_UP) { in rtl8152_set_ringparam()
6329 mutex_lock(&tp->control); in rtl8152_set_ringparam()
6330 napi_disable(&tp->napi); in rtl8152_set_ringparam()
6331 tp->rx_pending = ring->rx_pending; in rtl8152_set_ringparam()
6332 napi_enable(&tp->napi); in rtl8152_set_ringparam()
6333 mutex_unlock(&tp->control); in rtl8152_set_ringparam()
6335 tp->rx_pending = ring->rx_pending; in rtl8152_set_ringparam()
6372 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8152_ioctl()
6373 return -ENODEV; in rtl8152_ioctl()
6375 res = usb_autopm_get_interface(tp->intf); in rtl8152_ioctl()
6381 data->phy_id = R8152_PHY_ID; /* Internal PHY */ in rtl8152_ioctl()
6385 mutex_lock(&tp->control); in rtl8152_ioctl()
6386 data->val_out = r8152_mdio_read(tp, data->reg_num); in rtl8152_ioctl()
6387 mutex_unlock(&tp->control); in rtl8152_ioctl()
6392 res = -EPERM; in rtl8152_ioctl()
6395 mutex_lock(&tp->control); in rtl8152_ioctl()
6396 r8152_mdio_write(tp, data->reg_num, data->val_in); in rtl8152_ioctl()
6397 mutex_unlock(&tp->control); in rtl8152_ioctl()
6401 res = -EOPNOTSUPP; in rtl8152_ioctl()
6404 usb_autopm_put_interface(tp->intf); in rtl8152_ioctl()
6415 switch (tp->version) { in rtl8152_change_mtu()
6419 dev->mtu = new_mtu; in rtl8152_change_mtu()
6425 ret = usb_autopm_get_interface(tp->intf); in rtl8152_change_mtu()
6429 mutex_lock(&tp->control); in rtl8152_change_mtu()
6431 dev->mtu = new_mtu; in rtl8152_change_mtu()
6442 mutex_unlock(&tp->control); in rtl8152_change_mtu()
6444 usb_autopm_put_interface(tp->intf); in rtl8152_change_mtu()
6465 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8152_unload()
6468 if (tp->version != RTL_VER_01) in rtl8152_unload()
6474 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8153_unload()
6482 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8153b_unload()
6490 struct rtl_ops *ops = &tp->rtl_ops; in rtl_ops_init()
6493 switch (tp->version) { in rtl_ops_init()
6497 ops->init = r8152b_init; in rtl_ops_init()
6498 ops->enable = rtl8152_enable; in rtl_ops_init()
6499 ops->disable = rtl8152_disable; in rtl_ops_init()
6500 ops->up = rtl8152_up; in rtl_ops_init()
6501 ops->down = rtl8152_down; in rtl_ops_init()
6502 ops->unload = rtl8152_unload; in rtl_ops_init()
6503 ops->eee_get = r8152_get_eee; in rtl_ops_init()
6504 ops->eee_set = r8152_set_eee; in rtl_ops_init()
6505 ops->in_nway = rtl8152_in_nway; in rtl_ops_init()
6506 ops->hw_phy_cfg = r8152b_hw_phy_cfg; in rtl_ops_init()
6507 ops->autosuspend_en = rtl_runtime_suspend_enable; in rtl_ops_init()
6508 tp->rx_buf_sz = 16 * 1024; in rtl_ops_init()
6509 tp->eee_en = true; in rtl_ops_init()
6510 tp->eee_adv = MDIO_EEE_100TX; in rtl_ops_init()
6517 ops->init = r8153_init; in rtl_ops_init()
6518 ops->enable = rtl8153_enable; in rtl_ops_init()
6519 ops->disable = rtl8153_disable; in rtl_ops_init()
6520 ops->up = rtl8153_up; in rtl_ops_init()
6521 ops->down = rtl8153_down; in rtl_ops_init()
6522 ops->unload = rtl8153_unload; in rtl_ops_init()
6523 ops->eee_get = r8153_get_eee; in rtl_ops_init()
6524 ops->eee_set = r8152_set_eee; in rtl_ops_init()
6525 ops->in_nway = rtl8153_in_nway; in rtl_ops_init()
6526 ops->hw_phy_cfg = r8153_hw_phy_cfg; in rtl_ops_init()
6527 ops->autosuspend_en = rtl8153_runtime_enable; in rtl_ops_init()
6528 if (tp->udev->speed < USB_SPEED_SUPER) in rtl_ops_init()
6529 tp->rx_buf_sz = 16 * 1024; in rtl_ops_init()
6531 tp->rx_buf_sz = 32 * 1024; in rtl_ops_init()
6532 tp->eee_en = true; in rtl_ops_init()
6533 tp->eee_adv = MDIO_EEE_1000T | MDIO_EEE_100TX; in rtl_ops_init()
6538 ops->init = r8153b_init; in rtl_ops_init()
6539 ops->enable = rtl8153_enable; in rtl_ops_init()
6540 ops->disable = rtl8153_disable; in rtl_ops_init()
6541 ops->up = rtl8153b_up; in rtl_ops_init()
6542 ops->down = rtl8153b_down; in rtl_ops_init()
6543 ops->unload = rtl8153b_unload; in rtl_ops_init()
6544 ops->eee_get = r8153_get_eee; in rtl_ops_init()
6545 ops->eee_set = r8152_set_eee; in rtl_ops_init()
6546 ops->in_nway = rtl8153_in_nway; in rtl_ops_init()
6547 ops->hw_phy_cfg = r8153b_hw_phy_cfg; in rtl_ops_init()
6548 ops->autosuspend_en = rtl8153b_runtime_enable; in rtl_ops_init()
6549 tp->rx_buf_sz = 32 * 1024; in rtl_ops_init()
6550 tp->eee_en = true; in rtl_ops_init()
6551 tp->eee_adv = MDIO_EEE_1000T | MDIO_EEE_100TX; in rtl_ops_init()
6555 ret = -ENODEV; in rtl_ops_init()
6556 netif_err(tp, probe, tp->netdev, "Unknown Device\n"); in rtl_ops_init()
6563 #define FIRMWARE_8153A_2 "rtl_nic/rtl8153a-2.fw"
6564 #define FIRMWARE_8153A_3 "rtl_nic/rtl8153a-3.fw"
6565 #define FIRMWARE_8153A_4 "rtl_nic/rtl8153a-4.fw"
6566 #define FIRMWARE_8153B_2 "rtl_nic/rtl8153b-2.fw"
6575 struct rtl_fw *rtl_fw = &tp->rtl_fw; in rtl_fw_init()
6577 switch (tp->version) { in rtl_fw_init()
6579 rtl_fw->fw_name = FIRMWARE_8153A_2; in rtl_fw_init()
6580 rtl_fw->pre_fw = r8153_pre_firmware_1; in rtl_fw_init()
6581 rtl_fw->post_fw = r8153_post_firmware_1; in rtl_fw_init()
6584 rtl_fw->fw_name = FIRMWARE_8153A_3; in rtl_fw_init()
6585 rtl_fw->pre_fw = r8153_pre_firmware_2; in rtl_fw_init()
6586 rtl_fw->post_fw = r8153_post_firmware_2; in rtl_fw_init()
6589 rtl_fw->fw_name = FIRMWARE_8153A_4; in rtl_fw_init()
6590 rtl_fw->post_fw = r8153_post_firmware_3; in rtl_fw_init()
6593 rtl_fw->fw_name = FIRMWARE_8153B_2; in rtl_fw_init()
6594 rtl_fw->pre_fw = r8153b_pre_firmware_1; in rtl_fw_init()
6595 rtl_fw->post_fw = r8153b_post_firmware_1; in rtl_fw_init()
6655 dev_info(&intf->dev, "Unknown version 0x%04x\n", ocp_data); in rtl_get_version()
6659 dev_dbg(&intf->dev, "Detected version 0x%04x\n", version); in rtl_get_version()
6674 return -ENODEV; in rtl8152_probe()
6676 if (udev->actconfig->desc.bConfigurationValue != 1) { in rtl8152_probe()
6678 return -ENODEV; in rtl8152_probe()
6681 if (intf->cur_altsetting->desc.bNumEndpoints < 3) in rtl8152_probe()
6682 return -ENODEV; in rtl8152_probe()
6687 dev_err(&intf->dev, "Out of memory\n"); in rtl8152_probe()
6688 return -ENOMEM; in rtl8152_probe()
6691 SET_NETDEV_DEV(netdev, &intf->dev); in rtl8152_probe()
6693 tp->msg_enable = 0x7FFF; in rtl8152_probe()
6695 tp->udev = udev; in rtl8152_probe()
6696 tp->netdev = netdev; in rtl8152_probe()
6697 tp->intf = intf; in rtl8152_probe()
6698 tp->version = version; in rtl8152_probe()
6704 tp->mii.supports_gmii = 0; in rtl8152_probe()
6707 tp->mii.supports_gmii = 1; in rtl8152_probe()
6717 mutex_init(&tp->control); in rtl8152_probe()
6718 INIT_DELAYED_WORK(&tp->schedule, rtl_work_func_t); in rtl8152_probe()
6719 INIT_DELAYED_WORK(&tp->hw_phy_work, rtl_hw_phy_work_func_t); in rtl8152_probe()
6720 tasklet_init(&tp->tx_tl, bottom_half, (unsigned long)tp); in rtl8152_probe()
6721 tasklet_disable(&tp->tx_tl); in rtl8152_probe()
6723 netdev->netdev_ops = &rtl8152_netdev_ops; in rtl8152_probe()
6724 netdev->watchdog_timeo = RTL8152_TX_TIMEOUT; in rtl8152_probe()
6726 netdev->features |= NETIF_F_RXCSUM | NETIF_F_IP_CSUM | NETIF_F_SG | in rtl8152_probe()
6730 netdev->hw_features = NETIF_F_RXCSUM | NETIF_F_IP_CSUM | NETIF_F_SG | in rtl8152_probe()
6734 netdev->vlan_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO | in rtl8152_probe()
6738 if (tp->version == RTL_VER_01) { in rtl8152_probe()
6739 netdev->features &= ~NETIF_F_RXCSUM; in rtl8152_probe()
6740 netdev->hw_features &= ~NETIF_F_RXCSUM; in rtl8152_probe()
6743 if (le16_to_cpu(udev->descriptor.idVendor) == VENDOR_ID_LENOVO) { in rtl8152_probe()
6744 switch (le16_to_cpu(udev->descriptor.idProduct)) { in rtl8152_probe()
6747 set_bit(LENOVO_MACPASSTHRU, &tp->flags); in rtl8152_probe()
6751 if (le16_to_cpu(udev->descriptor.bcdDevice) == 0x3011 && udev->serial && in rtl8152_probe()
6752 (!strcmp(udev->serial, "000001000000") || in rtl8152_probe()
6753 !strcmp(udev->serial, "000002000000"))) { in rtl8152_probe()
6754 dev_info(&udev->dev, "Dell TB16 Dock, disable RX aggregation"); in rtl8152_probe()
6755 set_bit(DELL_TB_RX_AGG_BUG, &tp->flags); in rtl8152_probe()
6758 netdev->ethtool_ops = &ops; in rtl8152_probe()
6761 /* MTU range: 68 - 1500 or 9194 */ in rtl8152_probe()
6762 netdev->min_mtu = ETH_MIN_MTU; in rtl8152_probe()
6763 switch (tp->version) { in rtl8152_probe()
6766 netdev->max_mtu = ETH_DATA_LEN; in rtl8152_probe()
6769 netdev->max_mtu = RTL8153_MAX_MTU; in rtl8152_probe()
6773 tp->mii.dev = netdev; in rtl8152_probe()
6774 tp->mii.mdio_read = read_mii_word; in rtl8152_probe()
6775 tp->mii.mdio_write = write_mii_word; in rtl8152_probe()
6776 tp->mii.phy_id_mask = 0x3f; in rtl8152_probe()
6777 tp->mii.reg_num_mask = 0x1f; in rtl8152_probe()
6778 tp->mii.phy_id = R8152_PHY_ID; in rtl8152_probe()
6780 tp->autoneg = AUTONEG_ENABLE; in rtl8152_probe()
6781 tp->speed = SPEED_100; in rtl8152_probe()
6782 tp->advertising = RTL_ADVERTISED_10_HALF | RTL_ADVERTISED_10_FULL | in rtl8152_probe()
6784 if (tp->mii.supports_gmii) { in rtl8152_probe()
6785 tp->speed = SPEED_1000; in rtl8152_probe()
6786 tp->advertising |= RTL_ADVERTISED_1000_FULL; in rtl8152_probe()
6788 tp->duplex = DUPLEX_FULL; in rtl8152_probe()
6790 tp->rx_copybreak = RTL8152_RXFG_HEADSZ; in rtl8152_probe()
6791 tp->rx_pending = 10 * RTL8152_MAX_RX; in rtl8152_probe()
6793 intf->needs_remote_wakeup = 1; in rtl8152_probe()
6798 tp->saved_wolopts = __rtl_get_wol(tp); in rtl8152_probe()
6800 tp->rtl_ops.init(tp); in rtl8152_probe()
6802 /* Retry in case request_firmware() is not ready yet. */ in rtl8152_probe()
6803 tp->rtl_fw.retry = true; in rtl8152_probe()
6805 queue_delayed_work(system_long_wq, &tp->hw_phy_work, 0); in rtl8152_probe()
6809 netif_napi_add(netdev, &tp->napi, r8152_poll, RTL8152_NAPI_WEIGHT); in rtl8152_probe()
6817 if (tp->saved_wolopts) in rtl8152_probe()
6818 device_set_wakeup_enable(&udev->dev, true); in rtl8152_probe()
6820 device_set_wakeup_enable(&udev->dev, false); in rtl8152_probe()
6827 tasklet_kill(&tp->tx_tl); in rtl8152_probe()
6828 cancel_delayed_work_sync(&tp->hw_phy_work); in rtl8152_probe()
6829 if (tp->rtl_ops.unload) in rtl8152_probe()
6830 tp->rtl_ops.unload(tp); in rtl8152_probe()
6846 unregister_netdev(tp->netdev); in rtl8152_disconnect()
6847 tasklet_kill(&tp->tx_tl); in rtl8152_disconnect()
6848 cancel_delayed_work_sync(&tp->hw_phy_work); in rtl8152_disconnect()
6849 tp->rtl_ops.unload(tp); in rtl8152_disconnect()
6851 free_netdev(tp->netdev); in rtl8152_disconnect()