Lines Matching refs:tp

733 		void (*autosuspend_en)(struct r8152 *tp, bool enable);
779 int get_registers(struct r8152 *tp, u16 value, u16 index, u16 size, void *data) in get_registers() argument
788 ret = usb_control_msg(tp->udev, usb_rcvctrlpipe(tp->udev, 0), in get_registers()
799 int set_registers(struct r8152 *tp, u16 value, u16 index, u16 size, void *data) in set_registers() argument
808 ret = usb_control_msg(tp->udev, usb_sndctrlpipe(tp->udev, 0), in set_registers()
817 static int generic_ocp_read(struct r8152 *tp, u16 index, u16 size, in generic_ocp_read() argument
823 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in generic_ocp_read()
835 ret = get_registers(tp, index, type, limit, data); in generic_ocp_read()
843 ret = get_registers(tp, index, type, size, data); in generic_ocp_read()
855 set_bit(RTL8152_UNPLUG, &tp->flags); in generic_ocp_read()
860 static int generic_ocp_write(struct r8152 *tp, u16 index, u16 byteen, in generic_ocp_write() argument
867 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in generic_ocp_write()
881 ret = set_registers(tp, index, type | byen, 4, data); in generic_ocp_write()
894 ret = set_registers(tp, index, in generic_ocp_write()
904 ret = set_registers(tp, index, in generic_ocp_write()
918 ret = set_registers(tp, index, type | byen, 4, data); in generic_ocp_write()
925 set_bit(RTL8152_UNPLUG, &tp->flags); in generic_ocp_write()
931 int pla_ocp_read(struct r8152 *tp, u16 index, u16 size, void *data) in pla_ocp_read() argument
933 return generic_ocp_read(tp, index, size, data, MCU_TYPE_PLA); in pla_ocp_read()
937 int pla_ocp_write(struct r8152 *tp, u16 index, u16 byteen, u16 size, void *data) in pla_ocp_write() argument
939 return generic_ocp_write(tp, index, byteen, size, data, MCU_TYPE_PLA); in pla_ocp_write()
943 int usb_ocp_write(struct r8152 *tp, u16 index, u16 byteen, u16 size, void *data) in usb_ocp_write() argument
945 return generic_ocp_write(tp, index, byteen, size, data, MCU_TYPE_USB); in usb_ocp_write()
948 static u32 ocp_read_dword(struct r8152 *tp, u16 type, u16 index) in ocp_read_dword() argument
952 generic_ocp_read(tp, index, sizeof(data), &data, type); in ocp_read_dword()
957 static void ocp_write_dword(struct r8152 *tp, u16 type, u16 index, u32 data) in ocp_write_dword() argument
961 generic_ocp_write(tp, index, BYTE_EN_DWORD, sizeof(tmp), &tmp, type); in ocp_write_dword()
964 static u16 ocp_read_word(struct r8152 *tp, u16 type, u16 index) in ocp_read_word() argument
974 generic_ocp_read(tp, index, sizeof(tmp), &tmp, type | byen); in ocp_read_word()
983 static void ocp_write_word(struct r8152 *tp, u16 type, u16 index, u32 data) in ocp_write_word() argument
1001 generic_ocp_write(tp, index, byen, sizeof(tmp), &tmp, type); in ocp_write_word()
1004 static u8 ocp_read_byte(struct r8152 *tp, u16 type, u16 index) in ocp_read_byte() argument
1012 generic_ocp_read(tp, index, sizeof(tmp), &tmp, type); in ocp_read_byte()
1021 static void ocp_write_byte(struct r8152 *tp, u16 type, u16 index, u32 data) in ocp_write_byte() argument
1039 generic_ocp_write(tp, index, byen, sizeof(tmp), &tmp, type); in ocp_write_byte()
1042 static u16 ocp_reg_read(struct r8152 *tp, u16 addr) in ocp_reg_read() argument
1047 if (ocp_base != tp->ocp_base) { in ocp_reg_read()
1048 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, ocp_base); in ocp_reg_read()
1049 tp->ocp_base = ocp_base; in ocp_reg_read()
1053 return ocp_read_word(tp, MCU_TYPE_PLA, ocp_index); in ocp_reg_read()
1056 static void ocp_reg_write(struct r8152 *tp, u16 addr, u16 data) in ocp_reg_write() argument
1061 if (ocp_base != tp->ocp_base) { in ocp_reg_write()
1062 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, ocp_base); in ocp_reg_write()
1063 tp->ocp_base = ocp_base; in ocp_reg_write()
1067 ocp_write_word(tp, MCU_TYPE_PLA, ocp_index, data); in ocp_reg_write()
1070 static inline void r8152_mdio_write(struct r8152 *tp, u32 reg_addr, u32 value) in r8152_mdio_write() argument
1072 ocp_reg_write(tp, OCP_BASE_MII + reg_addr * 2, value); in r8152_mdio_write()
1075 static inline int r8152_mdio_read(struct r8152 *tp, u32 reg_addr) in r8152_mdio_read() argument
1077 return ocp_reg_read(tp, OCP_BASE_MII + reg_addr * 2); in r8152_mdio_read()
1080 static void sram_write(struct r8152 *tp, u16 addr, u16 data) in sram_write() argument
1082 ocp_reg_write(tp, OCP_SRAM_ADDR, addr); in sram_write()
1083 ocp_reg_write(tp, OCP_SRAM_DATA, data); in sram_write()
1086 static u16 sram_read(struct r8152 *tp, u16 addr) in sram_read() argument
1088 ocp_reg_write(tp, OCP_SRAM_ADDR, addr); in sram_read()
1089 return ocp_reg_read(tp, OCP_SRAM_DATA); in sram_read()
1094 struct r8152 *tp = netdev_priv(netdev); in read_mii_word() local
1097 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in read_mii_word()
1103 ret = r8152_mdio_read(tp, reg); in read_mii_word()
1111 struct r8152 *tp = netdev_priv(netdev); in write_mii_word() local
1113 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in write_mii_word()
1119 r8152_mdio_write(tp, reg, val); in write_mii_word()
1123 r8152_submit_rx(struct r8152 *tp, struct rx_agg *agg, gfp_t mem_flags);
1127 struct r8152 *tp = netdev_priv(netdev); in rtl8152_set_mac_address() local
1134 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_mac_address()
1138 mutex_lock(&tp->control); in rtl8152_set_mac_address()
1142 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG); in rtl8152_set_mac_address()
1143 pla_ocp_write(tp, PLA_IDR, BYTE_EN_SIX_BYTES, 8, addr->sa_data); in rtl8152_set_mac_address()
1144 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); in rtl8152_set_mac_address()
1146 mutex_unlock(&tp->control); in rtl8152_set_mac_address()
1148 usb_autopm_put_interface(tp->intf); in rtl8152_set_mac_address()
1157 static int vendor_mac_passthru_addr_read(struct r8152 *tp, struct sockaddr *sa) in vendor_mac_passthru_addr_read() argument
1167 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0); in vendor_mac_passthru_addr_read()
1172 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, EFUSE); in vendor_mac_passthru_addr_read()
1182 netif_warn(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1189 netif_warn(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1195 netif_warn(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1202 ether_addr_copy(tp->netdev->dev_addr, sa->sa_data); in vendor_mac_passthru_addr_read()
1203 netif_info(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1211 static int set_ethernet_addr(struct r8152 *tp) in set_ethernet_addr() argument
1213 struct net_device *dev = tp->netdev; in set_ethernet_addr()
1217 if (tp->version == RTL_VER_01) { in set_ethernet_addr()
1218 ret = pla_ocp_read(tp, PLA_IDR, 8, sa.sa_data); in set_ethernet_addr()
1224 ret = vendor_mac_passthru_addr_read(tp, &sa); in set_ethernet_addr()
1226 ret = pla_ocp_read(tp, PLA_BACKUP, 8, sa.sa_data); in set_ethernet_addr()
1230 netif_err(tp, probe, dev, "Get ether addr fail\n"); in set_ethernet_addr()
1232 netif_err(tp, probe, dev, "Invalid ether addr %pM\n", in set_ethernet_addr()
1237 netif_info(tp, probe, dev, "Random ether addr %pM\n", in set_ethernet_addr()
1240 if (tp->version == RTL_VER_01) in set_ethernet_addr()
1254 struct r8152 *tp; in read_bulk_callback() local
1261 tp = agg->context; in read_bulk_callback()
1262 if (!tp) in read_bulk_callback()
1265 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in read_bulk_callback()
1268 if (!test_bit(WORK_ENABLE, &tp->flags)) in read_bulk_callback()
1271 netdev = tp->netdev; in read_bulk_callback()
1278 usb_mark_last_busy(tp->udev); in read_bulk_callback()
1285 spin_lock_irqsave(&tp->rx_lock, flags); in read_bulk_callback()
1286 list_add_tail(&agg->list, &tp->rx_done); in read_bulk_callback()
1287 spin_unlock_irqrestore(&tp->rx_lock, flags); in read_bulk_callback()
1288 napi_schedule(&tp->napi); in read_bulk_callback()
1291 set_bit(RTL8152_UNPLUG, &tp->flags); in read_bulk_callback()
1292 netif_device_detach(tp->netdev); in read_bulk_callback()
1306 r8152_submit_rx(tp, agg, GFP_ATOMIC); in read_bulk_callback()
1314 struct r8152 *tp; in write_bulk_callback() local
1322 tp = agg->context; in write_bulk_callback()
1323 if (!tp) in write_bulk_callback()
1326 netdev = tp->netdev; in write_bulk_callback()
1337 spin_lock_irqsave(&tp->tx_lock, flags); in write_bulk_callback()
1338 list_add_tail(&agg->list, &tp->tx_free); in write_bulk_callback()
1339 spin_unlock_irqrestore(&tp->tx_lock, flags); in write_bulk_callback()
1341 usb_autopm_put_interface_async(tp->intf); in write_bulk_callback()
1346 if (!test_bit(WORK_ENABLE, &tp->flags)) in write_bulk_callback()
1349 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in write_bulk_callback()
1352 if (!skb_queue_empty(&tp->tx_queue)) in write_bulk_callback()
1353 napi_schedule(&tp->napi); in write_bulk_callback()
1358 struct r8152 *tp; in intr_callback() local
1363 tp = urb->context; in intr_callback()
1364 if (!tp) in intr_callback()
1367 if (!test_bit(WORK_ENABLE, &tp->flags)) in intr_callback()
1370 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in intr_callback()
1378 netif_device_detach(tp->netdev); in intr_callback()
1382 netif_info(tp, intr, tp->netdev, in intr_callback()
1386 netif_info(tp, intr, tp->netdev, "intr status -EOVERFLOW\n"); in intr_callback()
1390 netif_info(tp, intr, tp->netdev, "intr status %d\n", status); in intr_callback()
1396 if (!netif_carrier_ok(tp->netdev)) { in intr_callback()
1397 set_bit(RTL8152_LINK_CHG, &tp->flags); in intr_callback()
1398 schedule_delayed_work(&tp->schedule, 0); in intr_callback()
1401 if (netif_carrier_ok(tp->netdev)) { in intr_callback()
1402 netif_stop_queue(tp->netdev); in intr_callback()
1403 set_bit(RTL8152_LINK_CHG, &tp->flags); in intr_callback()
1404 schedule_delayed_work(&tp->schedule, 0); in intr_callback()
1411 set_bit(RTL8152_UNPLUG, &tp->flags); in intr_callback()
1412 netif_device_detach(tp->netdev); in intr_callback()
1414 netif_err(tp, intr, tp->netdev, in intr_callback()
1429 static void free_all_mem(struct r8152 *tp) in free_all_mem() argument
1434 usb_free_urb(tp->rx_info[i].urb); in free_all_mem()
1435 tp->rx_info[i].urb = NULL; in free_all_mem()
1437 kfree(tp->rx_info[i].buffer); in free_all_mem()
1438 tp->rx_info[i].buffer = NULL; in free_all_mem()
1439 tp->rx_info[i].head = NULL; in free_all_mem()
1443 usb_free_urb(tp->tx_info[i].urb); in free_all_mem()
1444 tp->tx_info[i].urb = NULL; in free_all_mem()
1446 kfree(tp->tx_info[i].buffer); in free_all_mem()
1447 tp->tx_info[i].buffer = NULL; in free_all_mem()
1448 tp->tx_info[i].head = NULL; in free_all_mem()
1451 usb_free_urb(tp->intr_urb); in free_all_mem()
1452 tp->intr_urb = NULL; in free_all_mem()
1454 kfree(tp->intr_buff); in free_all_mem()
1455 tp->intr_buff = NULL; in free_all_mem()
1458 static int alloc_all_mem(struct r8152 *tp) in alloc_all_mem() argument
1460 struct net_device *netdev = tp->netdev; in alloc_all_mem()
1461 struct usb_interface *intf = tp->intf; in alloc_all_mem()
1470 spin_lock_init(&tp->rx_lock); in alloc_all_mem()
1471 spin_lock_init(&tp->tx_lock); in alloc_all_mem()
1472 INIT_LIST_HEAD(&tp->tx_free); in alloc_all_mem()
1473 INIT_LIST_HEAD(&tp->rx_done); in alloc_all_mem()
1474 skb_queue_head_init(&tp->tx_queue); in alloc_all_mem()
1475 skb_queue_head_init(&tp->rx_queue); in alloc_all_mem()
1496 INIT_LIST_HEAD(&tp->rx_info[i].list); in alloc_all_mem()
1497 tp->rx_info[i].context = tp; in alloc_all_mem()
1498 tp->rx_info[i].urb = urb; in alloc_all_mem()
1499 tp->rx_info[i].buffer = buf; in alloc_all_mem()
1500 tp->rx_info[i].head = rx_agg_align(buf); in alloc_all_mem()
1522 INIT_LIST_HEAD(&tp->tx_info[i].list); in alloc_all_mem()
1523 tp->tx_info[i].context = tp; in alloc_all_mem()
1524 tp->tx_info[i].urb = urb; in alloc_all_mem()
1525 tp->tx_info[i].buffer = buf; in alloc_all_mem()
1526 tp->tx_info[i].head = tx_agg_align(buf); in alloc_all_mem()
1528 list_add_tail(&tp->tx_info[i].list, &tp->tx_free); in alloc_all_mem()
1531 tp->intr_urb = usb_alloc_urb(0, GFP_KERNEL); in alloc_all_mem()
1532 if (!tp->intr_urb) in alloc_all_mem()
1535 tp->intr_buff = kmalloc(INTBUFSIZE, GFP_KERNEL); in alloc_all_mem()
1536 if (!tp->intr_buff) in alloc_all_mem()
1539 tp->intr_interval = (int)ep_intr->desc.bInterval; in alloc_all_mem()
1540 usb_fill_int_urb(tp->intr_urb, tp->udev, usb_rcvintpipe(tp->udev, 3), in alloc_all_mem()
1541 tp->intr_buff, INTBUFSIZE, intr_callback, in alloc_all_mem()
1542 tp, tp->intr_interval); in alloc_all_mem()
1547 free_all_mem(tp); in alloc_all_mem()
1551 static struct tx_agg *r8152_get_tx_agg(struct r8152 *tp) in r8152_get_tx_agg() argument
1556 if (list_empty(&tp->tx_free)) in r8152_get_tx_agg()
1559 spin_lock_irqsave(&tp->tx_lock, flags); in r8152_get_tx_agg()
1560 if (!list_empty(&tp->tx_free)) { in r8152_get_tx_agg()
1563 cursor = tp->tx_free.next; in r8152_get_tx_agg()
1567 spin_unlock_irqrestore(&tp->tx_lock, flags); in r8152_get_tx_agg()
1576 static void r8152_csum_workaround(struct r8152 *tp, struct sk_buff *skb, in r8152_csum_workaround() argument
1580 netdev_features_t features = tp->netdev->features; in r8152_csum_workaround()
1609 stats = &tp->netdev->stats; in r8152_csum_workaround()
1657 static int r8152_tx_csum(struct r8152 *tp, struct tx_desc *desc, in r8152_tx_csum() argument
1670 netif_warn(tp, tx_err, tp->netdev, in r8152_tx_csum()
1701 netif_warn(tp, tx_err, tp->netdev, in r8152_tx_csum()
1741 static int r8152_tx_agg_fill(struct r8152 *tp, struct tx_agg *agg) in r8152_tx_agg_fill() argument
1743 struct sk_buff_head skb_head, *tx_queue = &tp->tx_queue; in r8152_tx_agg_fill()
1779 if (r8152_tx_csum(tp, tx_desc, skb, skb->len, offset)) { in r8152_tx_agg_fill()
1780 r8152_csum_workaround(tp, skb, &skb_head); in r8152_tx_agg_fill()
1790 struct net_device_stats *stats = &tp->netdev->stats; in r8152_tx_agg_fill()
1806 if (test_bit(DELL_TB_RX_AGG_BUG, &tp->flags)) in r8152_tx_agg_fill()
1816 netif_tx_lock(tp->netdev); in r8152_tx_agg_fill()
1818 if (netif_queue_stopped(tp->netdev) && in r8152_tx_agg_fill()
1819 skb_queue_len(&tp->tx_queue) < tp->tx_qlen) in r8152_tx_agg_fill()
1820 netif_wake_queue(tp->netdev); in r8152_tx_agg_fill()
1822 netif_tx_unlock(tp->netdev); in r8152_tx_agg_fill()
1824 ret = usb_autopm_get_interface_async(tp->intf); in r8152_tx_agg_fill()
1828 usb_fill_bulk_urb(agg->urb, tp->udev, usb_sndbulkpipe(tp->udev, 2), in r8152_tx_agg_fill()
1834 usb_autopm_put_interface_async(tp->intf); in r8152_tx_agg_fill()
1840 static u8 r8152_rx_csum(struct r8152 *tp, struct rx_desc *rx_desc) in r8152_rx_csum() argument
1845 if (!(tp->netdev->features & NETIF_F_RXCSUM)) in r8152_rx_csum()
1869 static int rx_bottom(struct r8152 *tp, int budget) in rx_bottom() argument
1874 struct napi_struct *napi = &tp->napi; in rx_bottom()
1876 if (!skb_queue_empty(&tp->rx_queue)) { in rx_bottom()
1878 struct sk_buff *skb = __skb_dequeue(&tp->rx_queue); in rx_bottom()
1879 struct net_device *netdev = tp->netdev; in rx_bottom()
1894 if (list_empty(&tp->rx_done)) in rx_bottom()
1898 spin_lock_irqsave(&tp->rx_lock, flags); in rx_bottom()
1899 list_splice_init(&tp->rx_done, &rx_queue); in rx_bottom()
1900 spin_unlock_irqrestore(&tp->rx_lock, flags); in rx_bottom()
1921 struct net_device *netdev = tp->netdev; in rx_bottom()
1927 if (unlikely(skb_queue_len(&tp->rx_queue) >= 1000)) in rx_bottom()
1947 skb->ip_summed = r8152_rx_csum(tp, rx_desc); in rx_bottom()
1958 __skb_queue_tail(&tp->rx_queue, skb); in rx_bottom()
1970 ret = r8152_submit_rx(tp, agg, GFP_ATOMIC); in rx_bottom()
1978 spin_lock_irqsave(&tp->rx_lock, flags); in rx_bottom()
1979 list_splice_tail(&rx_queue, &tp->rx_done); in rx_bottom()
1980 spin_unlock_irqrestore(&tp->rx_lock, flags); in rx_bottom()
1987 static void tx_bottom(struct r8152 *tp) in tx_bottom() argument
1994 if (skb_queue_empty(&tp->tx_queue)) in tx_bottom()
1997 agg = r8152_get_tx_agg(tp); in tx_bottom()
2001 res = r8152_tx_agg_fill(tp, agg); in tx_bottom()
2003 struct net_device *netdev = tp->netdev; in tx_bottom()
2006 set_bit(RTL8152_UNPLUG, &tp->flags); in tx_bottom()
2012 netif_warn(tp, tx_err, netdev, in tx_bottom()
2016 spin_lock_irqsave(&tp->tx_lock, flags); in tx_bottom()
2017 list_add_tail(&agg->list, &tp->tx_free); in tx_bottom()
2018 spin_unlock_irqrestore(&tp->tx_lock, flags); in tx_bottom()
2024 static void bottom_half(struct r8152 *tp) in bottom_half() argument
2026 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in bottom_half()
2029 if (!test_bit(WORK_ENABLE, &tp->flags)) in bottom_half()
2034 if (!netif_carrier_ok(tp->netdev)) in bottom_half()
2037 clear_bit(SCHEDULE_NAPI, &tp->flags); in bottom_half()
2039 tx_bottom(tp); in bottom_half()
2044 struct r8152 *tp = container_of(napi, struct r8152, napi); in r8152_poll() local
2047 work_done = rx_bottom(tp, budget); in r8152_poll()
2048 bottom_half(tp); in r8152_poll()
2053 if (!list_empty(&tp->rx_done)) in r8152_poll()
2055 else if (!skb_queue_empty(&tp->tx_queue) && in r8152_poll()
2056 !list_empty(&tp->tx_free)) in r8152_poll()
2065 int r8152_submit_rx(struct r8152 *tp, struct rx_agg *agg, gfp_t mem_flags) in r8152_submit_rx() argument
2070 if (test_bit(RTL8152_UNPLUG, &tp->flags) || in r8152_submit_rx()
2071 !test_bit(WORK_ENABLE, &tp->flags) || !netif_carrier_ok(tp->netdev)) in r8152_submit_rx()
2074 usb_fill_bulk_urb(agg->urb, tp->udev, usb_rcvbulkpipe(tp->udev, 1), in r8152_submit_rx()
2080 set_bit(RTL8152_UNPLUG, &tp->flags); in r8152_submit_rx()
2081 netif_device_detach(tp->netdev); in r8152_submit_rx()
2087 spin_lock_irqsave(&tp->rx_lock, flags); in r8152_submit_rx()
2088 list_add_tail(&agg->list, &tp->rx_done); in r8152_submit_rx()
2089 spin_unlock_irqrestore(&tp->rx_lock, flags); in r8152_submit_rx()
2091 netif_err(tp, rx_err, tp->netdev, in r8152_submit_rx()
2094 napi_schedule(&tp->napi); in r8152_submit_rx()
2100 static void rtl_drop_queued_tx(struct r8152 *tp) in rtl_drop_queued_tx() argument
2102 struct net_device_stats *stats = &tp->netdev->stats; in rtl_drop_queued_tx()
2103 struct sk_buff_head skb_head, *tx_queue = &tp->tx_queue; in rtl_drop_queued_tx()
2122 struct r8152 *tp = netdev_priv(netdev); in rtl8152_tx_timeout() local
2124 netif_warn(tp, tx_err, netdev, "Tx timeout\n"); in rtl8152_tx_timeout()
2126 usb_queue_reset_device(tp->intf); in rtl8152_tx_timeout()
2131 struct r8152 *tp = netdev_priv(netdev); in rtl8152_set_rx_mode() local
2134 set_bit(RTL8152_SET_RX_MODE, &tp->flags); in rtl8152_set_rx_mode()
2135 schedule_delayed_work(&tp->schedule, 0); in rtl8152_set_rx_mode()
2141 struct r8152 *tp = netdev_priv(netdev); in _rtl8152_set_rx_mode() local
2147 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in _rtl8152_set_rx_mode()
2153 netif_notice(tp, link, netdev, "Promiscuous mode enabled\n"); in _rtl8152_set_rx_mode()
2179 pla_ocp_write(tp, PLA_MAR, BYTE_EN_DWORD, sizeof(tmp), tmp); in _rtl8152_set_rx_mode()
2180 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in _rtl8152_set_rx_mode()
2203 struct r8152 *tp = netdev_priv(netdev); in rtl8152_start_xmit() local
2207 skb_queue_tail(&tp->tx_queue, skb); in rtl8152_start_xmit()
2209 if (!list_empty(&tp->tx_free)) { in rtl8152_start_xmit()
2210 if (test_bit(SELECTIVE_SUSPEND, &tp->flags)) { in rtl8152_start_xmit()
2211 set_bit(SCHEDULE_NAPI, &tp->flags); in rtl8152_start_xmit()
2212 schedule_delayed_work(&tp->schedule, 0); in rtl8152_start_xmit()
2214 usb_mark_last_busy(tp->udev); in rtl8152_start_xmit()
2215 napi_schedule(&tp->napi); in rtl8152_start_xmit()
2217 } else if (skb_queue_len(&tp->tx_queue) > tp->tx_qlen) { in rtl8152_start_xmit()
2224 static void r8152b_reset_packet_filter(struct r8152 *tp) in r8152b_reset_packet_filter() argument
2228 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_FMC); in r8152b_reset_packet_filter()
2230 ocp_write_word(tp, MCU_TYPE_PLA, PLA_FMC, ocp_data); in r8152b_reset_packet_filter()
2232 ocp_write_word(tp, MCU_TYPE_PLA, PLA_FMC, ocp_data); in r8152b_reset_packet_filter()
2235 static void rtl8152_nic_reset(struct r8152 *tp) in rtl8152_nic_reset() argument
2239 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, CR_RST); in rtl8152_nic_reset()
2242 if (!(ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CR) & CR_RST)) in rtl8152_nic_reset()
2248 static void set_tx_qlen(struct r8152 *tp) in set_tx_qlen() argument
2250 struct net_device *netdev = tp->netdev; in set_tx_qlen()
2252 tp->tx_qlen = agg_buf_sz / (netdev->mtu + VLAN_ETH_HLEN + ETH_FCS_LEN + in set_tx_qlen()
2256 static inline u8 rtl8152_get_speed(struct r8152 *tp) in rtl8152_get_speed() argument
2258 return ocp_read_byte(tp, MCU_TYPE_PLA, PLA_PHYSTATUS); in rtl8152_get_speed()
2261 static void rtl_set_eee_plus(struct r8152 *tp) in rtl_set_eee_plus() argument
2266 speed = rtl8152_get_speed(tp); in rtl_set_eee_plus()
2268 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEEP_CR); in rtl_set_eee_plus()
2270 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEEP_CR, ocp_data); in rtl_set_eee_plus()
2272 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEEP_CR); in rtl_set_eee_plus()
2274 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEEP_CR, ocp_data); in rtl_set_eee_plus()
2278 static void rxdy_gated_en(struct r8152 *tp, bool enable) in rxdy_gated_en() argument
2282 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MISC_1); in rxdy_gated_en()
2287 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MISC_1, ocp_data); in rxdy_gated_en()
2290 static int rtl_start_rx(struct r8152 *tp) in rtl_start_rx() argument
2294 INIT_LIST_HEAD(&tp->rx_done); in rtl_start_rx()
2296 INIT_LIST_HEAD(&tp->rx_info[i].list); in rtl_start_rx()
2297 ret = r8152_submit_rx(tp, &tp->rx_info[i], GFP_KERNEL); in rtl_start_rx()
2309 struct rx_agg *agg = &tp->rx_info[i++]; in rtl_start_rx()
2316 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_start_rx()
2317 list_splice_tail(&rx_queue, &tp->rx_done); in rtl_start_rx()
2318 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_start_rx()
2324 static int rtl_stop_rx(struct r8152 *tp) in rtl_stop_rx() argument
2329 usb_kill_urb(tp->rx_info[i].urb); in rtl_stop_rx()
2331 while (!skb_queue_empty(&tp->rx_queue)) in rtl_stop_rx()
2332 dev_kfree_skb(__skb_dequeue(&tp->rx_queue)); in rtl_stop_rx()
2337 static int rtl_enable(struct r8152 *tp) in rtl_enable() argument
2341 r8152b_reset_packet_filter(tp); in rtl_enable()
2343 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CR); in rtl_enable()
2345 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, ocp_data); in rtl_enable()
2347 rxdy_gated_en(tp, false); in rtl_enable()
2352 static int rtl8152_enable(struct r8152 *tp) in rtl8152_enable() argument
2354 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8152_enable()
2357 set_tx_qlen(tp); in rtl8152_enable()
2358 rtl_set_eee_plus(tp); in rtl8152_enable()
2360 return rtl_enable(tp); in rtl8152_enable()
2363 static inline void r8153b_rx_agg_chg_indicate(struct r8152 *tp) in r8153b_rx_agg_chg_indicate() argument
2365 ocp_write_byte(tp, MCU_TYPE_USB, USB_UPT_RXDMA_OWN, in r8153b_rx_agg_chg_indicate()
2369 static void r8153_set_rx_early_timeout(struct r8152 *tp) in r8153_set_rx_early_timeout() argument
2371 u32 ocp_data = tp->coalesce / 8; in r8153_set_rx_early_timeout()
2373 switch (tp->version) { in r8153_set_rx_early_timeout()
2378 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_TIMEOUT, in r8153_set_rx_early_timeout()
2387 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_TIMEOUT, in r8153_set_rx_early_timeout()
2389 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EXTRA_AGGR_TMR, in r8153_set_rx_early_timeout()
2391 r8153b_rx_agg_chg_indicate(tp); in r8153_set_rx_early_timeout()
2399 static void r8153_set_rx_early_size(struct r8152 *tp) in r8153_set_rx_early_size() argument
2401 u32 ocp_data = agg_buf_sz - rx_reserved_size(tp->netdev->mtu); in r8153_set_rx_early_size()
2403 switch (tp->version) { in r8153_set_rx_early_size()
2408 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_SIZE, in r8153_set_rx_early_size()
2413 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_SIZE, in r8153_set_rx_early_size()
2415 r8153b_rx_agg_chg_indicate(tp); in r8153_set_rx_early_size()
2423 static int rtl8153_enable(struct r8152 *tp) in rtl8153_enable() argument
2425 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8153_enable()
2428 set_tx_qlen(tp); in rtl8153_enable()
2429 rtl_set_eee_plus(tp); in rtl8153_enable()
2430 r8153_set_rx_early_timeout(tp); in rtl8153_enable()
2431 r8153_set_rx_early_size(tp); in rtl8153_enable()
2433 return rtl_enable(tp); in rtl8153_enable()
2436 static void rtl_disable(struct r8152 *tp) in rtl_disable() argument
2441 if (test_bit(RTL8152_UNPLUG, &tp->flags)) { in rtl_disable()
2442 rtl_drop_queued_tx(tp); in rtl_disable()
2446 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in rtl_disable()
2448 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in rtl_disable()
2450 rtl_drop_queued_tx(tp); in rtl_disable()
2453 usb_kill_urb(tp->tx_info[i].urb); in rtl_disable()
2455 rxdy_gated_en(tp, true); in rtl_disable()
2458 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in rtl_disable()
2465 if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR0) & TCR0_TX_EMPTY) in rtl_disable()
2470 rtl_stop_rx(tp); in rtl_disable()
2472 rtl8152_nic_reset(tp); in rtl_disable()
2475 static void r8152_power_cut_en(struct r8152 *tp, bool enable) in r8152_power_cut_en() argument
2479 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_UPS_CTRL); in r8152_power_cut_en()
2484 ocp_write_word(tp, MCU_TYPE_USB, USB_UPS_CTRL, ocp_data); in r8152_power_cut_en()
2486 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_PM_CTRL_STATUS); in r8152_power_cut_en()
2488 ocp_write_word(tp, MCU_TYPE_USB, USB_PM_CTRL_STATUS, ocp_data); in r8152_power_cut_en()
2491 static void rtl_rx_vlan_en(struct r8152 *tp, bool enable) in rtl_rx_vlan_en() argument
2495 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CPCR); in rtl_rx_vlan_en()
2500 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CPCR, ocp_data); in rtl_rx_vlan_en()
2507 struct r8152 *tp = netdev_priv(dev); in rtl8152_set_features() local
2510 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_features()
2514 mutex_lock(&tp->control); in rtl8152_set_features()
2518 rtl_rx_vlan_en(tp, true); in rtl8152_set_features()
2520 rtl_rx_vlan_en(tp, false); in rtl8152_set_features()
2523 mutex_unlock(&tp->control); in rtl8152_set_features()
2525 usb_autopm_put_interface(tp->intf); in rtl8152_set_features()
2533 static u32 __rtl_get_wol(struct r8152 *tp) in __rtl_get_wol() argument
2538 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34); in __rtl_get_wol()
2542 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG5); in __rtl_get_wol()
2550 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CFG_WOL); in __rtl_get_wol()
2557 static void __rtl_set_wol(struct r8152 *tp, u32 wolopts) in __rtl_set_wol() argument
2561 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG); in __rtl_set_wol()
2563 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34); in __rtl_set_wol()
2567 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG34, ocp_data); in __rtl_set_wol()
2569 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG5); in __rtl_set_wol()
2577 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG5, ocp_data); in __rtl_set_wol()
2579 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); in __rtl_set_wol()
2581 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CFG_WOL); in __rtl_set_wol()
2585 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CFG_WOL, ocp_data); in __rtl_set_wol()
2588 device_set_wakeup_enable(&tp->udev->dev, true); in __rtl_set_wol()
2590 device_set_wakeup_enable(&tp->udev->dev, false); in __rtl_set_wol()
2593 static void r8153_mac_clk_spd(struct r8152 *tp, bool enable) in r8153_mac_clk_spd() argument
2597 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL, in r8153_mac_clk_spd()
2599 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL2, in r8153_mac_clk_spd()
2601 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, in r8153_mac_clk_spd()
2604 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4, in r8153_mac_clk_spd()
2609 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL, 0); in r8153_mac_clk_spd()
2610 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL2, 0); in r8153_mac_clk_spd()
2611 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, 0); in r8153_mac_clk_spd()
2612 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4, 0); in r8153_mac_clk_spd()
2616 static void r8153_u1u2en(struct r8152 *tp, bool enable) in r8153_u1u2en() argument
2625 usb_ocp_write(tp, USB_TOLERANCE, BYTE_EN_SIX_BYTES, sizeof(u1u2), u1u2); in r8153_u1u2en()
2628 static void r8153b_u1u2en(struct r8152 *tp, bool enable) in r8153b_u1u2en() argument
2632 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_LPM_CONFIG); in r8153b_u1u2en()
2638 ocp_write_word(tp, MCU_TYPE_USB, USB_LPM_CONFIG, ocp_data); in r8153b_u1u2en()
2641 static void r8153_u2p3en(struct r8152 *tp, bool enable) in r8153_u2p3en() argument
2645 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_U2P3_CTRL); in r8153_u2p3en()
2650 ocp_write_word(tp, MCU_TYPE_USB, USB_U2P3_CTRL, ocp_data); in r8153_u2p3en()
2653 static void r8153b_ups_flags_w1w0(struct r8152 *tp, u32 set, u32 clear) in r8153b_ups_flags_w1w0() argument
2657 ocp_data = ocp_read_dword(tp, MCU_TYPE_USB, USB_UPS_FLAGS); in r8153b_ups_flags_w1w0()
2660 ocp_write_dword(tp, MCU_TYPE_USB, USB_UPS_FLAGS, ocp_data); in r8153b_ups_flags_w1w0()
2663 static void r8153b_green_en(struct r8152 *tp, bool enable) in r8153b_green_en() argument
2668 sram_write(tp, 0x8045, 0); /* 10M abiq&ldvbias */ in r8153b_green_en()
2669 sram_write(tp, 0x804d, 0x1222); /* 100M short abiq&ldvbias */ in r8153b_green_en()
2670 sram_write(tp, 0x805d, 0x0022); /* 1000M short abiq&ldvbias */ in r8153b_green_en()
2672 sram_write(tp, 0x8045, 0x2444); /* 10M abiq&ldvbias */ in r8153b_green_en()
2673 sram_write(tp, 0x804d, 0x2444); /* 100M short abiq&ldvbias */ in r8153b_green_en()
2674 sram_write(tp, 0x805d, 0x2444); /* 1000M short abiq&ldvbias */ in r8153b_green_en()
2677 data = sram_read(tp, SRAM_GREEN_CFG); in r8153b_green_en()
2679 sram_write(tp, SRAM_GREEN_CFG, data); in r8153b_green_en()
2681 r8153b_ups_flags_w1w0(tp, UPS_FLAGS_EN_GREEN, 0); in r8153b_green_en()
2684 static u16 r8153_phy_status(struct r8152 *tp, u16 desired) in r8153_phy_status() argument
2690 data = ocp_reg_read(tp, OCP_PHY_STATUS); in r8153_phy_status()
2706 static void r8153b_ups_en(struct r8152 *tp, bool enable) in r8153b_ups_en() argument
2708 u32 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_POWER_CUT); in r8153b_ups_en()
2712 ocp_write_byte(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data); in r8153b_ups_en()
2714 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, 0xcfff); in r8153b_ups_en()
2716 ocp_write_byte(tp, MCU_TYPE_USB, 0xcfff, ocp_data); in r8153b_ups_en()
2721 ocp_write_byte(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data); in r8153b_ups_en()
2723 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, 0xcfff); in r8153b_ups_en()
2725 ocp_write_byte(tp, MCU_TYPE_USB, 0xcfff, ocp_data); in r8153b_ups_en()
2727 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0); in r8153b_ups_en()
2729 ocp_write_word(tp, MCU_TYPE_USB, USB_MISC_0, ocp_data); in r8153b_ups_en()
2731 data = r8153_phy_status(tp, 0); in r8153b_ups_en()
2736 r8153b_green_en(tp, in r8153b_ups_en()
2737 test_bit(GREEN_ETHERNET, &tp->flags)); in r8153b_ups_en()
2739 data = r8152_mdio_read(tp, MII_BMCR); in r8153b_ups_en()
2742 r8152_mdio_write(tp, MII_BMCR, data); in r8153b_ups_en()
2744 data = r8153_phy_status(tp, PHY_STAT_LAN_ON); in r8153b_ups_en()
2749 netif_warn(tp, link, tp->netdev, in r8153b_ups_en()
2756 static void r8153_power_cut_en(struct r8152 *tp, bool enable) in r8153_power_cut_en() argument
2760 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_POWER_CUT); in r8153_power_cut_en()
2765 ocp_write_word(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data); in r8153_power_cut_en()
2767 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0); in r8153_power_cut_en()
2769 ocp_write_word(tp, MCU_TYPE_USB, USB_MISC_0, ocp_data); in r8153_power_cut_en()
2772 static void r8153b_power_cut_en(struct r8152 *tp, bool enable) in r8153b_power_cut_en() argument
2776 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_POWER_CUT); in r8153b_power_cut_en()
2781 ocp_write_word(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data); in r8153b_power_cut_en()
2783 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0); in r8153b_power_cut_en()
2785 ocp_write_word(tp, MCU_TYPE_USB, USB_MISC_0, ocp_data); in r8153b_power_cut_en()
2788 static void r8153b_queue_wake(struct r8152 *tp, bool enable) in r8153b_queue_wake() argument
2792 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, 0xd38a); in r8153b_queue_wake()
2797 ocp_write_byte(tp, MCU_TYPE_PLA, 0xd38a, ocp_data); in r8153b_queue_wake()
2799 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, 0xd38c); in r8153b_queue_wake()
2801 ocp_write_byte(tp, MCU_TYPE_PLA, 0xd38c, ocp_data); in r8153b_queue_wake()
2804 static bool rtl_can_wakeup(struct r8152 *tp) in rtl_can_wakeup() argument
2806 struct usb_device *udev = tp->udev; in rtl_can_wakeup()
2811 static void rtl_runtime_suspend_enable(struct r8152 *tp, bool enable) in rtl_runtime_suspend_enable() argument
2816 __rtl_set_wol(tp, WAKE_ANY); in rtl_runtime_suspend_enable()
2818 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG); in rtl_runtime_suspend_enable()
2820 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34); in rtl_runtime_suspend_enable()
2822 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG34, ocp_data); in rtl_runtime_suspend_enable()
2824 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); in rtl_runtime_suspend_enable()
2828 __rtl_set_wol(tp, tp->saved_wolopts); in rtl_runtime_suspend_enable()
2830 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG); in rtl_runtime_suspend_enable()
2832 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34); in rtl_runtime_suspend_enable()
2834 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG34, ocp_data); in rtl_runtime_suspend_enable()
2836 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); in rtl_runtime_suspend_enable()
2840 static void rtl8153_runtime_enable(struct r8152 *tp, bool enable) in rtl8153_runtime_enable() argument
2843 r8153_u1u2en(tp, false); in rtl8153_runtime_enable()
2844 r8153_u2p3en(tp, false); in rtl8153_runtime_enable()
2845 r8153_mac_clk_spd(tp, true); in rtl8153_runtime_enable()
2846 rtl_runtime_suspend_enable(tp, true); in rtl8153_runtime_enable()
2848 rtl_runtime_suspend_enable(tp, false); in rtl8153_runtime_enable()
2849 r8153_mac_clk_spd(tp, false); in rtl8153_runtime_enable()
2851 switch (tp->version) { in rtl8153_runtime_enable()
2858 r8153_u2p3en(tp, true); in rtl8153_runtime_enable()
2862 r8153_u1u2en(tp, true); in rtl8153_runtime_enable()
2866 static void rtl8153b_runtime_enable(struct r8152 *tp, bool enable) in rtl8153b_runtime_enable() argument
2869 r8153b_queue_wake(tp, true); in rtl8153b_runtime_enable()
2870 r8153b_u1u2en(tp, false); in rtl8153b_runtime_enable()
2871 r8153_u2p3en(tp, false); in rtl8153b_runtime_enable()
2872 rtl_runtime_suspend_enable(tp, true); in rtl8153b_runtime_enable()
2873 r8153b_ups_en(tp, true); in rtl8153b_runtime_enable()
2875 r8153b_ups_en(tp, false); in rtl8153b_runtime_enable()
2876 r8153b_queue_wake(tp, false); in rtl8153b_runtime_enable()
2877 rtl_runtime_suspend_enable(tp, false); in rtl8153b_runtime_enable()
2878 r8153_u2p3en(tp, true); in rtl8153b_runtime_enable()
2879 r8153b_u1u2en(tp, true); in rtl8153b_runtime_enable()
2883 static void r8153_teredo_off(struct r8152 *tp) in r8153_teredo_off() argument
2887 switch (tp->version) { in r8153_teredo_off()
2895 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG); in r8153_teredo_off()
2898 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG, ocp_data); in r8153_teredo_off()
2906 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG, 0xff); in r8153_teredo_off()
2913 ocp_write_word(tp, MCU_TYPE_PLA, PLA_WDT6_CTRL, WDT6_SET_MODE); in r8153_teredo_off()
2914 ocp_write_word(tp, MCU_TYPE_PLA, PLA_REALWOW_TIMER, 0); in r8153_teredo_off()
2915 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_TEREDO_TIMER, 0); in r8153_teredo_off()
2918 static void rtl_reset_bmu(struct r8152 *tp) in rtl_reset_bmu() argument
2922 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_BMU_RESET); in rtl_reset_bmu()
2924 ocp_write_byte(tp, MCU_TYPE_USB, USB_BMU_RESET, ocp_data); in rtl_reset_bmu()
2926 ocp_write_byte(tp, MCU_TYPE_USB, USB_BMU_RESET, ocp_data); in rtl_reset_bmu()
2929 static void r8152_aldps_en(struct r8152 *tp, bool enable) in r8152_aldps_en() argument
2932 ocp_reg_write(tp, OCP_ALDPS_CONFIG, ENPWRSAVE | ENPDNPS | in r8152_aldps_en()
2935 ocp_reg_write(tp, OCP_ALDPS_CONFIG, ENPDNPS | LINKENA | in r8152_aldps_en()
2941 static inline void r8152_mmd_indirect(struct r8152 *tp, u16 dev, u16 reg) in r8152_mmd_indirect() argument
2943 ocp_reg_write(tp, OCP_EEE_AR, FUN_ADDR | dev); in r8152_mmd_indirect()
2944 ocp_reg_write(tp, OCP_EEE_DATA, reg); in r8152_mmd_indirect()
2945 ocp_reg_write(tp, OCP_EEE_AR, FUN_DATA | dev); in r8152_mmd_indirect()
2948 static u16 r8152_mmd_read(struct r8152 *tp, u16 dev, u16 reg) in r8152_mmd_read() argument
2952 r8152_mmd_indirect(tp, dev, reg); in r8152_mmd_read()
2953 data = ocp_reg_read(tp, OCP_EEE_DATA); in r8152_mmd_read()
2954 ocp_reg_write(tp, OCP_EEE_AR, 0x0000); in r8152_mmd_read()
2959 static void r8152_mmd_write(struct r8152 *tp, u16 dev, u16 reg, u16 data) in r8152_mmd_write() argument
2961 r8152_mmd_indirect(tp, dev, reg); in r8152_mmd_write()
2962 ocp_reg_write(tp, OCP_EEE_DATA, data); in r8152_mmd_write()
2963 ocp_reg_write(tp, OCP_EEE_AR, 0x0000); in r8152_mmd_write()
2966 static void r8152_eee_en(struct r8152 *tp, bool enable) in r8152_eee_en() argument
2971 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEE_CR); in r8152_eee_en()
2972 config1 = ocp_reg_read(tp, OCP_EEE_CONFIG1) & ~sd_rise_time_mask; in r8152_eee_en()
2973 config2 = ocp_reg_read(tp, OCP_EEE_CONFIG2); in r8152_eee_en()
2974 config3 = ocp_reg_read(tp, OCP_EEE_CONFIG3) & ~fast_snr_mask; in r8152_eee_en()
2991 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEE_CR, ocp_data); in r8152_eee_en()
2992 ocp_reg_write(tp, OCP_EEE_CONFIG1, config1); in r8152_eee_en()
2993 ocp_reg_write(tp, OCP_EEE_CONFIG2, config2); in r8152_eee_en()
2994 ocp_reg_write(tp, OCP_EEE_CONFIG3, config3); in r8152_eee_en()
2997 static void r8152b_enable_eee(struct r8152 *tp) in r8152b_enable_eee() argument
2999 r8152_eee_en(tp, true); in r8152b_enable_eee()
3000 r8152_mmd_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, MDIO_EEE_100TX); in r8152b_enable_eee()
3003 static void r8152b_enable_fc(struct r8152 *tp) in r8152b_enable_fc() argument
3007 anar = r8152_mdio_read(tp, MII_ADVERTISE); in r8152b_enable_fc()
3009 r8152_mdio_write(tp, MII_ADVERTISE, anar); in r8152b_enable_fc()
3012 static void rtl8152_disable(struct r8152 *tp) in rtl8152_disable() argument
3014 r8152_aldps_en(tp, false); in rtl8152_disable()
3015 rtl_disable(tp); in rtl8152_disable()
3016 r8152_aldps_en(tp, true); in rtl8152_disable()
3019 static void r8152b_hw_phy_cfg(struct r8152 *tp) in r8152b_hw_phy_cfg() argument
3021 r8152b_enable_eee(tp); in r8152b_hw_phy_cfg()
3022 r8152_aldps_en(tp, true); in r8152b_hw_phy_cfg()
3023 r8152b_enable_fc(tp); in r8152b_hw_phy_cfg()
3025 set_bit(PHY_RESET, &tp->flags); in r8152b_hw_phy_cfg()
3028 static void r8152b_exit_oob(struct r8152 *tp) in r8152b_exit_oob() argument
3033 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in r8152b_exit_oob()
3035 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in r8152b_exit_oob()
3037 rxdy_gated_en(tp, true); in r8152b_exit_oob()
3038 r8153_teredo_off(tp); in r8152b_exit_oob()
3039 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); in r8152b_exit_oob()
3040 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, 0x00); in r8152b_exit_oob()
3042 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8152b_exit_oob()
3044 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8152b_exit_oob()
3046 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8152b_exit_oob()
3048 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8152b_exit_oob()
3051 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8152b_exit_oob()
3057 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8152b_exit_oob()
3059 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8152b_exit_oob()
3062 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8152b_exit_oob()
3068 rtl8152_nic_reset(tp); in r8152b_exit_oob()
3071 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL0, RXFIFO_THR1_NORMAL); in r8152b_exit_oob()
3073 if (tp->udev->speed == USB_SPEED_FULL || in r8152b_exit_oob()
3074 tp->udev->speed == USB_SPEED_LOW) { in r8152b_exit_oob()
3076 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, in r8152b_exit_oob()
3078 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, in r8152b_exit_oob()
3082 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, in r8152b_exit_oob()
3084 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, in r8152b_exit_oob()
3089 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_TXFIFO_CTRL, TXFIFO_THR_NORMAL); in r8152b_exit_oob()
3091 ocp_write_byte(tp, MCU_TYPE_USB, USB_TX_AGG, TX_AGG_MAX_THRESHOLD); in r8152b_exit_oob()
3092 ocp_write_dword(tp, MCU_TYPE_USB, USB_RX_BUF_TH, RX_THR_HIGH); in r8152b_exit_oob()
3093 ocp_write_dword(tp, MCU_TYPE_USB, USB_TX_DMA, in r8152b_exit_oob()
3096 rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX); in r8152b_exit_oob()
3098 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, RTL8152_RMS); in r8152b_exit_oob()
3100 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR0); in r8152b_exit_oob()
3102 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TCR0, ocp_data); in r8152b_exit_oob()
3105 static void r8152b_enter_oob(struct r8152 *tp) in r8152b_enter_oob() argument
3110 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8152b_enter_oob()
3112 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8152b_enter_oob()
3114 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL0, RXFIFO_THR1_OOB); in r8152b_enter_oob()
3115 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, RXFIFO_THR2_OOB); in r8152b_enter_oob()
3116 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, RXFIFO_THR3_OOB); in r8152b_enter_oob()
3118 rtl_disable(tp); in r8152b_enter_oob()
3121 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8152b_enter_oob()
3127 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8152b_enter_oob()
3129 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8152b_enter_oob()
3132 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8152b_enter_oob()
3138 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, RTL8152_RMS); in r8152b_enter_oob()
3140 rtl_rx_vlan_en(tp, true); in r8152b_enter_oob()
3142 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PAL_BDC_CR); in r8152b_enter_oob()
3144 ocp_write_word(tp, MCU_TYPE_PLA, PAL_BDC_CR, ocp_data); in r8152b_enter_oob()
3146 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8152b_enter_oob()
3148 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8152b_enter_oob()
3150 rxdy_gated_en(tp, false); in r8152b_enter_oob()
3152 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in r8152b_enter_oob()
3154 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in r8152b_enter_oob()
3157 static int r8153_patch_request(struct r8152 *tp, bool request) in r8153_patch_request() argument
3162 data = ocp_reg_read(tp, OCP_PHY_PATCH_CMD); in r8153_patch_request()
3167 ocp_reg_write(tp, OCP_PHY_PATCH_CMD, data); in r8153_patch_request()
3171 if (ocp_reg_read(tp, OCP_PHY_PATCH_STAT) & PATCH_READY) in r8153_patch_request()
3175 if (request && !(ocp_reg_read(tp, OCP_PHY_PATCH_STAT) & PATCH_READY)) { in r8153_patch_request()
3176 netif_err(tp, drv, tp->netdev, "patch request fail\n"); in r8153_patch_request()
3177 r8153_patch_request(tp, false); in r8153_patch_request()
3184 static void r8153_aldps_en(struct r8152 *tp, bool enable) in r8153_aldps_en() argument
3188 data = ocp_reg_read(tp, OCP_POWER_CFG); in r8153_aldps_en()
3191 ocp_reg_write(tp, OCP_POWER_CFG, data); in r8153_aldps_en()
3196 ocp_reg_write(tp, OCP_POWER_CFG, data); in r8153_aldps_en()
3199 if (ocp_read_word(tp, MCU_TYPE_PLA, 0xe000) & 0x0100) in r8153_aldps_en()
3205 static void r8153b_aldps_en(struct r8152 *tp, bool enable) in r8153b_aldps_en() argument
3207 r8153_aldps_en(tp, enable); in r8153b_aldps_en()
3210 r8153b_ups_flags_w1w0(tp, UPS_FLAGS_EN_ALDPS, 0); in r8153b_aldps_en()
3212 r8153b_ups_flags_w1w0(tp, 0, UPS_FLAGS_EN_ALDPS); in r8153b_aldps_en()
3215 static void r8153_eee_en(struct r8152 *tp, bool enable) in r8153_eee_en() argument
3220 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEE_CR); in r8153_eee_en()
3221 config = ocp_reg_read(tp, OCP_EEE_CFG); in r8153_eee_en()
3231 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEE_CR, ocp_data); in r8153_eee_en()
3232 ocp_reg_write(tp, OCP_EEE_CFG, config); in r8153_eee_en()
3235 static void r8153b_eee_en(struct r8152 *tp, bool enable) in r8153b_eee_en() argument
3237 r8153_eee_en(tp, enable); in r8153b_eee_en()
3240 r8153b_ups_flags_w1w0(tp, UPS_FLAGS_EN_EEE, 0); in r8153b_eee_en()
3242 r8153b_ups_flags_w1w0(tp, 0, UPS_FLAGS_EN_EEE); in r8153b_eee_en()
3245 static void r8153b_enable_fc(struct r8152 *tp) in r8153b_enable_fc() argument
3247 r8152b_enable_fc(tp); in r8153b_enable_fc()
3248 r8153b_ups_flags_w1w0(tp, UPS_FLAGS_EN_FLOW_CTR, 0); in r8153b_enable_fc()
3251 static void r8153_hw_phy_cfg(struct r8152 *tp) in r8153_hw_phy_cfg() argument
3257 r8153_aldps_en(tp, false); in r8153_hw_phy_cfg()
3260 r8153_eee_en(tp, false); in r8153_hw_phy_cfg()
3261 ocp_reg_write(tp, OCP_EEE_ADV, 0); in r8153_hw_phy_cfg()
3263 if (tp->version == RTL_VER_03) { in r8153_hw_phy_cfg()
3264 data = ocp_reg_read(tp, OCP_EEE_CFG); in r8153_hw_phy_cfg()
3266 ocp_reg_write(tp, OCP_EEE_CFG, data); in r8153_hw_phy_cfg()
3269 data = ocp_reg_read(tp, OCP_POWER_CFG); in r8153_hw_phy_cfg()
3271 ocp_reg_write(tp, OCP_POWER_CFG, data); in r8153_hw_phy_cfg()
3273 data = ocp_reg_read(tp, OCP_DOWN_SPEED); in r8153_hw_phy_cfg()
3275 ocp_reg_write(tp, OCP_DOWN_SPEED, data); in r8153_hw_phy_cfg()
3276 data = ocp_reg_read(tp, OCP_POWER_CFG); in r8153_hw_phy_cfg()
3278 ocp_reg_write(tp, OCP_POWER_CFG, data); in r8153_hw_phy_cfg()
3279 sram_write(tp, SRAM_IMPEDANCE, 0x0b13); in r8153_hw_phy_cfg()
3281 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR); in r8153_hw_phy_cfg()
3283 ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data); in r8153_hw_phy_cfg()
3286 sram_write(tp, SRAM_LPF_CFG, 0xf70f); in r8153_hw_phy_cfg()
3289 sram_write(tp, SRAM_10M_AMP1, 0x00af); in r8153_hw_phy_cfg()
3290 sram_write(tp, SRAM_10M_AMP2, 0x0208); in r8153_hw_phy_cfg()
3292 r8153_eee_en(tp, true); in r8153_hw_phy_cfg()
3293 ocp_reg_write(tp, OCP_EEE_ADV, MDIO_EEE_1000T | MDIO_EEE_100TX); in r8153_hw_phy_cfg()
3295 r8153_aldps_en(tp, true); in r8153_hw_phy_cfg()
3296 r8152b_enable_fc(tp); in r8153_hw_phy_cfg()
3298 switch (tp->version) { in r8153_hw_phy_cfg()
3305 r8153_u2p3en(tp, true); in r8153_hw_phy_cfg()
3309 set_bit(PHY_RESET, &tp->flags); in r8153_hw_phy_cfg()
3312 static u32 r8152_efuse_read(struct r8152 *tp, u8 addr) in r8152_efuse_read() argument
3316 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EFUSE_CMD, EFUSE_READ_CMD | addr); in r8152_efuse_read()
3317 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EFUSE_CMD); in r8152_efuse_read()
3319 ocp_data |= ocp_read_word(tp, MCU_TYPE_PLA, PLA_EFUSE_DATA); in r8152_efuse_read()
3324 static void r8153b_hw_phy_cfg(struct r8152 *tp) in r8153b_hw_phy_cfg() argument
3330 r8153b_aldps_en(tp, false); in r8153b_hw_phy_cfg()
3333 r8153b_eee_en(tp, false); in r8153b_hw_phy_cfg()
3334 ocp_reg_write(tp, OCP_EEE_ADV, 0); in r8153b_hw_phy_cfg()
3336 r8153b_green_en(tp, test_bit(GREEN_ETHERNET, &tp->flags)); in r8153b_hw_phy_cfg()
3338 data = sram_read(tp, SRAM_GREEN_CFG); in r8153b_hw_phy_cfg()
3340 sram_write(tp, SRAM_GREEN_CFG, data); in r8153b_hw_phy_cfg()
3341 data = ocp_reg_read(tp, OCP_NCTL_CFG); in r8153b_hw_phy_cfg()
3343 ocp_reg_write(tp, OCP_NCTL_CFG, data); in r8153b_hw_phy_cfg()
3350 ocp_data = r8152_efuse_read(tp, 0x7d); in r8153b_hw_phy_cfg()
3353 ocp_reg_write(tp, OCP_ADC_IOFFSET, data); in r8153b_hw_phy_cfg()
3359 ocp_data = ocp_reg_read(tp, 0xc426); in r8153b_hw_phy_cfg()
3365 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_UPS_CFG); in r8153b_hw_phy_cfg()
3367 ocp_write_word(tp, MCU_TYPE_USB, USB_UPS_CFG, ocp_data); in r8153b_hw_phy_cfg()
3370 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR); in r8153b_hw_phy_cfg()
3372 ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data); in r8153b_hw_phy_cfg()
3375 if (!r8153_patch_request(tp, true)) { in r8153b_hw_phy_cfg()
3376 data = ocp_reg_read(tp, OCP_POWER_CFG); in r8153b_hw_phy_cfg()
3378 ocp_reg_write(tp, OCP_POWER_CFG, data); in r8153b_hw_phy_cfg()
3380 data = ocp_reg_read(tp, OCP_DOWN_SPEED); in r8153b_hw_phy_cfg()
3382 ocp_reg_write(tp, OCP_DOWN_SPEED, data); in r8153b_hw_phy_cfg()
3384 ocp_reg_write(tp, OCP_SYSCLK_CFG, 0); in r8153b_hw_phy_cfg()
3385 ocp_reg_write(tp, OCP_SYSCLK_CFG, clk_div_expo(5)); in r8153b_hw_phy_cfg()
3391 r8153_patch_request(tp, false); in r8153b_hw_phy_cfg()
3394 r8153b_ups_flags_w1w0(tp, ups_flags, 0); in r8153b_hw_phy_cfg()
3396 r8153b_eee_en(tp, true); in r8153b_hw_phy_cfg()
3397 ocp_reg_write(tp, OCP_EEE_ADV, MDIO_EEE_1000T | MDIO_EEE_100TX); in r8153b_hw_phy_cfg()
3399 r8153b_aldps_en(tp, true); in r8153b_hw_phy_cfg()
3400 r8153b_enable_fc(tp); in r8153b_hw_phy_cfg()
3401 r8153_u2p3en(tp, true); in r8153b_hw_phy_cfg()
3403 set_bit(PHY_RESET, &tp->flags); in r8153b_hw_phy_cfg()
3406 static void r8153_first_init(struct r8152 *tp) in r8153_first_init() argument
3411 r8153_mac_clk_spd(tp, false); in r8153_first_init()
3412 rxdy_gated_en(tp, true); in r8153_first_init()
3413 r8153_teredo_off(tp); in r8153_first_init()
3415 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in r8153_first_init()
3417 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in r8153_first_init()
3419 rtl8152_nic_reset(tp); in r8153_first_init()
3420 rtl_reset_bmu(tp); in r8153_first_init()
3422 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8153_first_init()
3424 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8153_first_init()
3426 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8153_first_init()
3428 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8153_first_init()
3431 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8153_first_init()
3437 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8153_first_init()
3439 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8153_first_init()
3442 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8153_first_init()
3448 rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX); in r8153_first_init()
3450 ocp_data = tp->netdev->mtu + VLAN_ETH_HLEN + ETH_FCS_LEN; in r8153_first_init()
3451 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, ocp_data); in r8153_first_init()
3452 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_MTPS, MTPS_JUMBO); in r8153_first_init()
3454 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR0); in r8153_first_init()
3456 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TCR0, ocp_data); in r8153_first_init()
3458 rtl8152_nic_reset(tp); in r8153_first_init()
3461 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL0, RXFIFO_THR1_NORMAL); in r8153_first_init()
3462 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, RXFIFO_THR2_NORMAL); in r8153_first_init()
3463 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, RXFIFO_THR3_NORMAL); in r8153_first_init()
3465 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_TXFIFO_CTRL, TXFIFO_THR_NORMAL2); in r8153_first_init()
3468 static void r8153_enter_oob(struct r8152 *tp) in r8153_enter_oob() argument
3473 r8153_mac_clk_spd(tp, true); in r8153_enter_oob()
3475 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8153_enter_oob()
3477 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8153_enter_oob()
3479 rtl_disable(tp); in r8153_enter_oob()
3480 rtl_reset_bmu(tp); in r8153_enter_oob()
3483 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8153_enter_oob()
3489 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8153_enter_oob()
3491 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8153_enter_oob()
3494 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8153_enter_oob()
3500 ocp_data = tp->netdev->mtu + VLAN_ETH_HLEN + ETH_FCS_LEN; in r8153_enter_oob()
3501 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, ocp_data); in r8153_enter_oob()
3503 switch (tp->version) { in r8153_enter_oob()
3508 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG); in r8153_enter_oob()
3510 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG, ocp_data); in r8153_enter_oob()
3519 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TEREDO_WAKE_BASE, 0x00ff); in r8153_enter_oob()
3526 rtl_rx_vlan_en(tp, true); in r8153_enter_oob()
3528 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PAL_BDC_CR); in r8153_enter_oob()
3530 ocp_write_word(tp, MCU_TYPE_PLA, PAL_BDC_CR, ocp_data); in r8153_enter_oob()
3532 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8153_enter_oob()
3534 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8153_enter_oob()
3536 rxdy_gated_en(tp, false); in r8153_enter_oob()
3538 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in r8153_enter_oob()
3540 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in r8153_enter_oob()
3543 static void rtl8153_disable(struct r8152 *tp) in rtl8153_disable() argument
3545 r8153_aldps_en(tp, false); in rtl8153_disable()
3546 rtl_disable(tp); in rtl8153_disable()
3547 rtl_reset_bmu(tp); in rtl8153_disable()
3548 r8153_aldps_en(tp, true); in rtl8153_disable()
3551 static void rtl8153b_disable(struct r8152 *tp) in rtl8153b_disable() argument
3553 r8153b_aldps_en(tp, false); in rtl8153b_disable()
3554 rtl_disable(tp); in rtl8153b_disable()
3555 rtl_reset_bmu(tp); in rtl8153b_disable()
3556 r8153b_aldps_en(tp, true); in rtl8153b_disable()
3559 static int rtl8152_set_speed(struct r8152 *tp, u8 autoneg, u16 speed, u8 duplex) in rtl8152_set_speed() argument
3565 anar = r8152_mdio_read(tp, MII_ADVERTISE); in rtl8152_set_speed()
3568 if (tp->mii.supports_gmii) { in rtl8152_set_speed()
3569 gbcr = r8152_mdio_read(tp, MII_CTRL1000); in rtl8152_set_speed()
3584 } else if (speed == SPEED_1000 && tp->mii.supports_gmii) { in rtl8152_set_speed()
3617 } else if (speed == SPEED_1000 && tp->mii.supports_gmii) { in rtl8152_set_speed()
3636 if (test_and_clear_bit(PHY_RESET, &tp->flags)) in rtl8152_set_speed()
3639 if (tp->mii.supports_gmii) in rtl8152_set_speed()
3640 r8152_mdio_write(tp, MII_CTRL1000, gbcr); in rtl8152_set_speed()
3642 r8152_mdio_write(tp, MII_ADVERTISE, anar); in rtl8152_set_speed()
3643 r8152_mdio_write(tp, MII_BMCR, bmcr); in rtl8152_set_speed()
3645 switch (tp->version) { in rtl8152_set_speed()
3648 r8153b_ups_flags_w1w0(tp, ups_flags_speed(speed_duplex), in rtl8152_set_speed()
3661 if ((r8152_mdio_read(tp, MII_BMCR) & BMCR_RESET) == 0) in rtl8152_set_speed()
3670 static void rtl8152_up(struct r8152 *tp) in rtl8152_up() argument
3672 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8152_up()
3675 r8152_aldps_en(tp, false); in rtl8152_up()
3676 r8152b_exit_oob(tp); in rtl8152_up()
3677 r8152_aldps_en(tp, true); in rtl8152_up()
3680 static void rtl8152_down(struct r8152 *tp) in rtl8152_down() argument
3682 if (test_bit(RTL8152_UNPLUG, &tp->flags)) { in rtl8152_down()
3683 rtl_drop_queued_tx(tp); in rtl8152_down()
3687 r8152_power_cut_en(tp, false); in rtl8152_down()
3688 r8152_aldps_en(tp, false); in rtl8152_down()
3689 r8152b_enter_oob(tp); in rtl8152_down()
3690 r8152_aldps_en(tp, true); in rtl8152_down()
3693 static void rtl8153_up(struct r8152 *tp) in rtl8153_up() argument
3695 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8153_up()
3698 r8153_u1u2en(tp, false); in rtl8153_up()
3699 r8153_u2p3en(tp, false); in rtl8153_up()
3700 r8153_aldps_en(tp, false); in rtl8153_up()
3701 r8153_first_init(tp); in rtl8153_up()
3702 r8153_aldps_en(tp, true); in rtl8153_up()
3704 switch (tp->version) { in rtl8153_up()
3711 r8153_u2p3en(tp, true); in rtl8153_up()
3715 r8153_u1u2en(tp, true); in rtl8153_up()
3718 static void rtl8153_down(struct r8152 *tp) in rtl8153_down() argument
3720 if (test_bit(RTL8152_UNPLUG, &tp->flags)) { in rtl8153_down()
3721 rtl_drop_queued_tx(tp); in rtl8153_down()
3725 r8153_u1u2en(tp, false); in rtl8153_down()
3726 r8153_u2p3en(tp, false); in rtl8153_down()
3727 r8153_power_cut_en(tp, false); in rtl8153_down()
3728 r8153_aldps_en(tp, false); in rtl8153_down()
3729 r8153_enter_oob(tp); in rtl8153_down()
3730 r8153_aldps_en(tp, true); in rtl8153_down()
3733 static void rtl8153b_up(struct r8152 *tp) in rtl8153b_up() argument
3735 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8153b_up()
3738 r8153b_u1u2en(tp, false); in rtl8153b_up()
3739 r8153_u2p3en(tp, false); in rtl8153b_up()
3740 r8153b_aldps_en(tp, false); in rtl8153b_up()
3742 r8153_first_init(tp); in rtl8153b_up()
3743 ocp_write_dword(tp, MCU_TYPE_USB, USB_RX_BUF_TH, RX_THR_B); in rtl8153b_up()
3745 r8153b_aldps_en(tp, true); in rtl8153b_up()
3746 r8153_u2p3en(tp, true); in rtl8153b_up()
3747 r8153b_u1u2en(tp, true); in rtl8153b_up()
3750 static void rtl8153b_down(struct r8152 *tp) in rtl8153b_down() argument
3752 if (test_bit(RTL8152_UNPLUG, &tp->flags)) { in rtl8153b_down()
3753 rtl_drop_queued_tx(tp); in rtl8153b_down()
3757 r8153b_u1u2en(tp, false); in rtl8153b_down()
3758 r8153_u2p3en(tp, false); in rtl8153b_down()
3759 r8153b_power_cut_en(tp, false); in rtl8153b_down()
3760 r8153b_aldps_en(tp, false); in rtl8153b_down()
3761 r8153_enter_oob(tp); in rtl8153b_down()
3762 r8153b_aldps_en(tp, true); in rtl8153b_down()
3765 static bool rtl8152_in_nway(struct r8152 *tp) in rtl8152_in_nway() argument
3769 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, 0x2000); in rtl8152_in_nway()
3770 tp->ocp_base = 0x2000; in rtl8152_in_nway()
3771 ocp_write_byte(tp, MCU_TYPE_PLA, 0xb014, 0x4c); /* phy state */ in rtl8152_in_nway()
3772 nway_state = ocp_read_word(tp, MCU_TYPE_PLA, 0xb01a); in rtl8152_in_nway()
3781 static bool rtl8153_in_nway(struct r8152 *tp) in rtl8153_in_nway() argument
3783 u16 phy_state = ocp_reg_read(tp, OCP_PHY_STATE) & 0xff; in rtl8153_in_nway()
3791 static void set_carrier(struct r8152 *tp) in set_carrier() argument
3793 struct net_device *netdev = tp->netdev; in set_carrier()
3794 struct napi_struct *napi = &tp->napi; in set_carrier()
3797 speed = rtl8152_get_speed(tp); in set_carrier()
3801 tp->rtl_ops.enable(tp); in set_carrier()
3805 rtl_start_rx(tp); in set_carrier()
3806 clear_bit(RTL8152_SET_RX_MODE, &tp->flags); in set_carrier()
3808 napi_enable(&tp->napi); in set_carrier()
3810 netif_info(tp, link, netdev, "carrier on\n"); in set_carrier()
3812 skb_queue_len(&tp->tx_queue) < tp->tx_qlen) { in set_carrier()
3819 tp->rtl_ops.disable(tp); in set_carrier()
3821 netif_info(tp, link, netdev, "carrier off\n"); in set_carrier()
3828 struct r8152 *tp = container_of(work, struct r8152, schedule.work); in rtl_work_func_t() local
3833 if (test_bit(RTL8152_UNPLUG, &tp->flags) || !netif_running(tp->netdev)) in rtl_work_func_t()
3836 if (usb_autopm_get_interface(tp->intf) < 0) in rtl_work_func_t()
3839 if (!test_bit(WORK_ENABLE, &tp->flags)) in rtl_work_func_t()
3842 if (!mutex_trylock(&tp->control)) { in rtl_work_func_t()
3843 schedule_delayed_work(&tp->schedule, 0); in rtl_work_func_t()
3847 if (test_and_clear_bit(RTL8152_LINK_CHG, &tp->flags)) in rtl_work_func_t()
3848 set_carrier(tp); in rtl_work_func_t()
3850 if (test_and_clear_bit(RTL8152_SET_RX_MODE, &tp->flags)) in rtl_work_func_t()
3851 _rtl8152_set_rx_mode(tp->netdev); in rtl_work_func_t()
3854 if (test_and_clear_bit(SCHEDULE_NAPI, &tp->flags) && in rtl_work_func_t()
3855 netif_carrier_ok(tp->netdev)) in rtl_work_func_t()
3856 napi_schedule(&tp->napi); in rtl_work_func_t()
3858 mutex_unlock(&tp->control); in rtl_work_func_t()
3861 usb_autopm_put_interface(tp->intf); in rtl_work_func_t()
3866 struct r8152 *tp = container_of(work, struct r8152, hw_phy_work.work); in rtl_hw_phy_work_func_t() local
3868 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl_hw_phy_work_func_t()
3871 if (usb_autopm_get_interface(tp->intf) < 0) in rtl_hw_phy_work_func_t()
3874 mutex_lock(&tp->control); in rtl_hw_phy_work_func_t()
3876 tp->rtl_ops.hw_phy_cfg(tp); in rtl_hw_phy_work_func_t()
3878 rtl8152_set_speed(tp, tp->autoneg, tp->speed, tp->duplex); in rtl_hw_phy_work_func_t()
3880 mutex_unlock(&tp->control); in rtl_hw_phy_work_func_t()
3882 usb_autopm_put_interface(tp->intf); in rtl_hw_phy_work_func_t()
3889 struct r8152 *tp = container_of(nb, struct r8152, pm_notifier); in rtl_notifier() local
3894 usb_autopm_get_interface(tp->intf); in rtl_notifier()
3899 usb_autopm_put_interface(tp->intf); in rtl_notifier()
3914 struct r8152 *tp = netdev_priv(netdev); in rtl8152_open() local
3917 res = alloc_all_mem(tp); in rtl8152_open()
3921 res = usb_autopm_get_interface(tp->intf); in rtl8152_open()
3925 mutex_lock(&tp->control); in rtl8152_open()
3927 tp->rtl_ops.up(tp); in rtl8152_open()
3931 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_open()
3933 res = usb_submit_urb(tp->intr_urb, GFP_KERNEL); in rtl8152_open()
3936 netif_device_detach(tp->netdev); in rtl8152_open()
3937 netif_warn(tp, ifup, netdev, "intr_urb submit failed: %d\n", in rtl8152_open()
3941 napi_enable(&tp->napi); in rtl8152_open()
3943 mutex_unlock(&tp->control); in rtl8152_open()
3945 usb_autopm_put_interface(tp->intf); in rtl8152_open()
3947 tp->pm_notifier.notifier_call = rtl_notifier; in rtl8152_open()
3948 register_pm_notifier(&tp->pm_notifier); in rtl8152_open()
3953 mutex_unlock(&tp->control); in rtl8152_open()
3954 usb_autopm_put_interface(tp->intf); in rtl8152_open()
3956 free_all_mem(tp); in rtl8152_open()
3963 struct r8152 *tp = netdev_priv(netdev); in rtl8152_close() local
3967 unregister_pm_notifier(&tp->pm_notifier); in rtl8152_close()
3969 if (!test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8152_close()
3970 napi_disable(&tp->napi); in rtl8152_close()
3971 clear_bit(WORK_ENABLE, &tp->flags); in rtl8152_close()
3972 usb_kill_urb(tp->intr_urb); in rtl8152_close()
3973 cancel_delayed_work_sync(&tp->schedule); in rtl8152_close()
3976 res = usb_autopm_get_interface(tp->intf); in rtl8152_close()
3977 if (res < 0 || test_bit(RTL8152_UNPLUG, &tp->flags)) { in rtl8152_close()
3978 rtl_drop_queued_tx(tp); in rtl8152_close()
3979 rtl_stop_rx(tp); in rtl8152_close()
3981 mutex_lock(&tp->control); in rtl8152_close()
3983 tp->rtl_ops.down(tp); in rtl8152_close()
3985 mutex_unlock(&tp->control); in rtl8152_close()
3987 usb_autopm_put_interface(tp->intf); in rtl8152_close()
3990 free_all_mem(tp); in rtl8152_close()
3995 static void rtl_tally_reset(struct r8152 *tp) in rtl_tally_reset() argument
3999 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_RSTTALLY); in rtl_tally_reset()
4001 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RSTTALLY, ocp_data); in rtl_tally_reset()
4004 static void r8152b_init(struct r8152 *tp) in r8152b_init() argument
4009 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8152b_init()
4012 data = r8152_mdio_read(tp, MII_BMCR); in r8152b_init()
4015 r8152_mdio_write(tp, MII_BMCR, data); in r8152b_init()
4018 r8152_aldps_en(tp, false); in r8152b_init()
4020 if (tp->version == RTL_VER_01) { in r8152b_init()
4021 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE); in r8152b_init()
4023 ocp_write_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE, ocp_data); in r8152b_init()
4026 r8152_power_cut_en(tp, false); in r8152b_init()
4028 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR); in r8152b_init()
4030 ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data); in r8152b_init()
4031 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL); in r8152b_init()
4034 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL, ocp_data); in r8152b_init()
4037 ocp_write_word(tp, MCU_TYPE_PLA, PLA_GPHY_INTR_IMR, ocp_data); in r8152b_init()
4039 rtl_tally_reset(tp); in r8152b_init()
4042 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL); in r8152b_init()
4044 ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data); in r8152b_init()
4047 static void r8153_init(struct r8152 *tp) in r8153_init() argument
4053 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8153_init()
4056 r8153_u1u2en(tp, false); in r8153_init()
4059 if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_BOOT_CTRL) & in r8153_init()
4065 data = r8153_phy_status(tp, 0); in r8153_init()
4067 if (tp->version == RTL_VER_03 || tp->version == RTL_VER_04 || in r8153_init()
4068 tp->version == RTL_VER_05) in r8153_init()
4069 ocp_reg_write(tp, OCP_ADC_CFG, CKADSEL_L | ADC_EN | EN_EMI_L); in r8153_init()
4071 data = r8152_mdio_read(tp, MII_BMCR); in r8153_init()
4074 r8152_mdio_write(tp, MII_BMCR, data); in r8153_init()
4077 data = r8153_phy_status(tp, PHY_STAT_LAN_ON); in r8153_init()
4079 r8153_u2p3en(tp, false); in r8153_init()
4081 if (tp->version == RTL_VER_04) { in r8153_init()
4082 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_SSPHYLINK2); in r8153_init()
4085 ocp_write_word(tp, MCU_TYPE_USB, USB_SSPHYLINK2, ocp_data); in r8153_init()
4087 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_USB2PHY); in r8153_init()
4089 ocp_write_byte(tp, MCU_TYPE_USB, USB_USB2PHY, ocp_data); in r8153_init()
4090 } else if (tp->version == RTL_VER_05) { in r8153_init()
4091 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_DMY_REG0); in r8153_init()
4093 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_DMY_REG0, ocp_data); in r8153_init()
4095 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY1); in r8153_init()
4096 if (ocp_read_word(tp, MCU_TYPE_USB, USB_BURST_SIZE) == 0) in r8153_init()
4100 ocp_write_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY1, ocp_data); in r8153_init()
4101 } else if (tp->version == RTL_VER_06) { in r8153_init()
4102 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY1); in r8153_init()
4103 if (ocp_read_word(tp, MCU_TYPE_USB, USB_BURST_SIZE) == 0) in r8153_init()
4107 ocp_write_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY1, ocp_data); in r8153_init()
4110 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY2); in r8153_init()
4112 ocp_write_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY2, ocp_data); in r8153_init()
4114 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_WDT11_CTRL); in r8153_init()
4116 ocp_write_word(tp, MCU_TYPE_USB, USB_WDT11_CTRL, ocp_data); in r8153_init()
4118 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE); in r8153_init()
4120 ocp_write_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE, ocp_data); in r8153_init()
4123 if (tp->version == RTL_VER_04 && tp->udev->speed < USB_SPEED_SUPER) in r8153_init()
4127 ocp_write_byte(tp, MCU_TYPE_USB, USB_LPM_CTRL, ocp_data); in r8153_init()
4129 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_AFE_CTRL2); in r8153_init()
4132 ocp_write_word(tp, MCU_TYPE_USB, USB_AFE_CTRL2, ocp_data); in r8153_init()
4134 ocp_write_word(tp, MCU_TYPE_USB, USB_CONNECT_TIMER, 0x0001); in r8153_init()
4136 r8153_power_cut_en(tp, false); in r8153_init()
4137 r8153_u1u2en(tp, true); in r8153_init()
4138 r8153_mac_clk_spd(tp, false); in r8153_init()
4139 usb_enable_lpm(tp->udev); in r8153_init()
4142 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL); in r8153_init()
4144 if (test_bit(DELL_TB_RX_AGG_BUG, &tp->flags)) in r8153_init()
4147 ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data); in r8153_init()
4149 rtl_tally_reset(tp); in r8153_init()
4151 switch (tp->udev->speed) { in r8153_init()
4154 tp->coalesce = COALESCE_SUPER; in r8153_init()
4157 tp->coalesce = COALESCE_HIGH; in r8153_init()
4160 tp->coalesce = COALESCE_SLOW; in r8153_init()
4165 static void r8153b_init(struct r8152 *tp) in r8153b_init() argument
4171 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8153b_init()
4174 r8153b_u1u2en(tp, false); in r8153b_init()
4177 if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_BOOT_CTRL) & in r8153b_init()
4183 data = r8153_phy_status(tp, 0); in r8153b_init()
4185 data = r8152_mdio_read(tp, MII_BMCR); in r8153b_init()
4188 r8152_mdio_write(tp, MII_BMCR, data); in r8153b_init()
4191 data = r8153_phy_status(tp, PHY_STAT_LAN_ON); in r8153b_init()
4193 r8153_u2p3en(tp, false); in r8153b_init()
4196 ocp_write_word(tp, MCU_TYPE_USB, USB_MSC_TIMER, 0x0fff); in r8153b_init()
4199 ocp_write_word(tp, MCU_TYPE_USB, USB_U1U2_TIMER, 500); in r8153b_init()
4201 r8153b_power_cut_en(tp, false); in r8153b_init()
4202 r8153b_ups_en(tp, false); in r8153b_init()
4203 r8153b_queue_wake(tp, false); in r8153b_init()
4204 rtl_runtime_suspend_enable(tp, false); in r8153b_init()
4205 r8153b_u1u2en(tp, true); in r8153b_init()
4206 usb_enable_lpm(tp->udev); in r8153b_init()
4209 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL2); in r8153b_init()
4211 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL2, ocp_data); in r8153b_init()
4213 set_bit(GREEN_ETHERNET, &tp->flags); in r8153b_init()
4216 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL); in r8153b_init()
4218 ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data); in r8153b_init()
4220 rtl_tally_reset(tp); in r8153b_init()
4222 tp->coalesce = 15000; /* 15 us */ in r8153b_init()
4227 struct r8152 *tp = usb_get_intfdata(intf); in rtl8152_pre_reset() local
4230 if (!tp) in rtl8152_pre_reset()
4233 netdev = tp->netdev; in rtl8152_pre_reset()
4238 napi_disable(&tp->napi); in rtl8152_pre_reset()
4239 clear_bit(WORK_ENABLE, &tp->flags); in rtl8152_pre_reset()
4240 usb_kill_urb(tp->intr_urb); in rtl8152_pre_reset()
4241 cancel_delayed_work_sync(&tp->schedule); in rtl8152_pre_reset()
4243 mutex_lock(&tp->control); in rtl8152_pre_reset()
4244 tp->rtl_ops.disable(tp); in rtl8152_pre_reset()
4245 mutex_unlock(&tp->control); in rtl8152_pre_reset()
4253 struct r8152 *tp = usb_get_intfdata(intf); in rtl8152_post_reset() local
4256 if (!tp) in rtl8152_post_reset()
4259 netdev = tp->netdev; in rtl8152_post_reset()
4263 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_post_reset()
4265 mutex_lock(&tp->control); in rtl8152_post_reset()
4266 tp->rtl_ops.enable(tp); in rtl8152_post_reset()
4267 rtl_start_rx(tp); in rtl8152_post_reset()
4269 mutex_unlock(&tp->control); in rtl8152_post_reset()
4272 napi_enable(&tp->napi); in rtl8152_post_reset()
4274 usb_submit_urb(tp->intr_urb, GFP_KERNEL); in rtl8152_post_reset()
4276 if (!list_empty(&tp->rx_done)) in rtl8152_post_reset()
4277 napi_schedule(&tp->napi); in rtl8152_post_reset()
4282 static bool delay_autosuspend(struct r8152 *tp) in delay_autosuspend() argument
4284 bool sw_linking = !!netif_carrier_ok(tp->netdev); in delay_autosuspend()
4285 bool hw_linking = !!(rtl8152_get_speed(tp) & LINK_STATUS); in delay_autosuspend()
4291 if (work_busy(&tp->schedule.work) || sw_linking != hw_linking) in delay_autosuspend()
4297 if (!sw_linking && tp->rtl_ops.in_nway(tp)) in delay_autosuspend()
4299 else if (!skb_queue_empty(&tp->tx_queue)) in delay_autosuspend()
4305 static int rtl8152_runtime_resume(struct r8152 *tp) in rtl8152_runtime_resume() argument
4307 struct net_device *netdev = tp->netdev; in rtl8152_runtime_resume()
4310 struct napi_struct *napi = &tp->napi; in rtl8152_runtime_resume()
4312 tp->rtl_ops.autosuspend_en(tp, false); in rtl8152_runtime_resume()
4314 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_runtime_resume()
4317 if (rtl8152_get_speed(tp) & LINK_STATUS) { in rtl8152_runtime_resume()
4318 rtl_start_rx(tp); in rtl8152_runtime_resume()
4321 tp->rtl_ops.disable(tp); in rtl8152_runtime_resume()
4322 netif_info(tp, link, netdev, "linking down\n"); in rtl8152_runtime_resume()
4327 clear_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_runtime_resume()
4330 if (!list_empty(&tp->rx_done)) in rtl8152_runtime_resume()
4331 napi_schedule(&tp->napi); in rtl8152_runtime_resume()
4333 usb_submit_urb(tp->intr_urb, GFP_NOIO); in rtl8152_runtime_resume()
4336 tp->rtl_ops.autosuspend_en(tp, false); in rtl8152_runtime_resume()
4338 clear_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_runtime_resume()
4344 static int rtl8152_system_resume(struct r8152 *tp) in rtl8152_system_resume() argument
4346 struct net_device *netdev = tp->netdev; in rtl8152_system_resume()
4351 tp->rtl_ops.up(tp); in rtl8152_system_resume()
4353 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_system_resume()
4354 usb_submit_urb(tp->intr_urb, GFP_NOIO); in rtl8152_system_resume()
4360 static int rtl8152_runtime_suspend(struct r8152 *tp) in rtl8152_runtime_suspend() argument
4362 struct net_device *netdev = tp->netdev; in rtl8152_runtime_suspend()
4365 set_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_runtime_suspend()
4368 if (netif_running(netdev) && test_bit(WORK_ENABLE, &tp->flags)) { in rtl8152_runtime_suspend()
4374 rcr = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in rtl8152_runtime_suspend()
4376 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in rtl8152_runtime_suspend()
4377 rxdy_gated_en(tp, true); in rtl8152_runtime_suspend()
4378 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, in rtl8152_runtime_suspend()
4381 rxdy_gated_en(tp, false); in rtl8152_runtime_suspend()
4382 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, rcr); in rtl8152_runtime_suspend()
4383 clear_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_runtime_suspend()
4390 clear_bit(WORK_ENABLE, &tp->flags); in rtl8152_runtime_suspend()
4391 usb_kill_urb(tp->intr_urb); in rtl8152_runtime_suspend()
4393 tp->rtl_ops.autosuspend_en(tp, true); in rtl8152_runtime_suspend()
4396 struct napi_struct *napi = &tp->napi; in rtl8152_runtime_suspend()
4399 rtl_stop_rx(tp); in rtl8152_runtime_suspend()
4400 rxdy_gated_en(tp, false); in rtl8152_runtime_suspend()
4401 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, rcr); in rtl8152_runtime_suspend()
4405 if (delay_autosuspend(tp)) { in rtl8152_runtime_suspend()
4406 rtl8152_runtime_resume(tp); in rtl8152_runtime_suspend()
4415 static int rtl8152_system_suspend(struct r8152 *tp) in rtl8152_system_suspend() argument
4417 struct net_device *netdev = tp->netdev; in rtl8152_system_suspend()
4421 if (netif_running(netdev) && test_bit(WORK_ENABLE, &tp->flags)) { in rtl8152_system_suspend()
4422 struct napi_struct *napi = &tp->napi; in rtl8152_system_suspend()
4424 clear_bit(WORK_ENABLE, &tp->flags); in rtl8152_system_suspend()
4425 usb_kill_urb(tp->intr_urb); in rtl8152_system_suspend()
4427 cancel_delayed_work_sync(&tp->schedule); in rtl8152_system_suspend()
4428 tp->rtl_ops.down(tp); in rtl8152_system_suspend()
4437 struct r8152 *tp = usb_get_intfdata(intf); in rtl8152_suspend() local
4440 mutex_lock(&tp->control); in rtl8152_suspend()
4443 ret = rtl8152_runtime_suspend(tp); in rtl8152_suspend()
4445 ret = rtl8152_system_suspend(tp); in rtl8152_suspend()
4447 mutex_unlock(&tp->control); in rtl8152_suspend()
4454 struct r8152 *tp = usb_get_intfdata(intf); in rtl8152_resume() local
4457 mutex_lock(&tp->control); in rtl8152_resume()
4459 if (test_bit(SELECTIVE_SUSPEND, &tp->flags)) in rtl8152_resume()
4460 ret = rtl8152_runtime_resume(tp); in rtl8152_resume()
4462 ret = rtl8152_system_resume(tp); in rtl8152_resume()
4464 mutex_unlock(&tp->control); in rtl8152_resume()
4471 struct r8152 *tp = usb_get_intfdata(intf); in rtl8152_reset_resume() local
4473 clear_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_reset_resume()
4474 mutex_lock(&tp->control); in rtl8152_reset_resume()
4475 tp->rtl_ops.init(tp); in rtl8152_reset_resume()
4476 queue_delayed_work(system_long_wq, &tp->hw_phy_work, 0); in rtl8152_reset_resume()
4477 mutex_unlock(&tp->control); in rtl8152_reset_resume()
4483 struct r8152 *tp = netdev_priv(dev); in rtl8152_get_wol() local
4485 if (usb_autopm_get_interface(tp->intf) < 0) in rtl8152_get_wol()
4488 if (!rtl_can_wakeup(tp)) { in rtl8152_get_wol()
4492 mutex_lock(&tp->control); in rtl8152_get_wol()
4494 wol->wolopts = __rtl_get_wol(tp); in rtl8152_get_wol()
4495 mutex_unlock(&tp->control); in rtl8152_get_wol()
4498 usb_autopm_put_interface(tp->intf); in rtl8152_get_wol()
4503 struct r8152 *tp = netdev_priv(dev); in rtl8152_set_wol() local
4506 if (!rtl_can_wakeup(tp)) in rtl8152_set_wol()
4512 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_wol()
4516 mutex_lock(&tp->control); in rtl8152_set_wol()
4518 __rtl_set_wol(tp, wol->wolopts); in rtl8152_set_wol()
4519 tp->saved_wolopts = wol->wolopts & WAKE_ANY; in rtl8152_set_wol()
4521 mutex_unlock(&tp->control); in rtl8152_set_wol()
4523 usb_autopm_put_interface(tp->intf); in rtl8152_set_wol()
4531 struct r8152 *tp = netdev_priv(dev); in rtl8152_get_msglevel() local
4533 return tp->msg_enable; in rtl8152_get_msglevel()
4538 struct r8152 *tp = netdev_priv(dev); in rtl8152_set_msglevel() local
4540 tp->msg_enable = value; in rtl8152_set_msglevel()
4546 struct r8152 *tp = netdev_priv(netdev); in rtl8152_get_drvinfo() local
4550 usb_make_path(tp->udev, info->bus_info, sizeof(info->bus_info)); in rtl8152_get_drvinfo()
4557 struct r8152 *tp = netdev_priv(netdev); in rtl8152_get_link_ksettings() local
4560 if (!tp->mii.mdio_read) in rtl8152_get_link_ksettings()
4563 ret = usb_autopm_get_interface(tp->intf); in rtl8152_get_link_ksettings()
4567 mutex_lock(&tp->control); in rtl8152_get_link_ksettings()
4569 mii_ethtool_get_link_ksettings(&tp->mii, cmd); in rtl8152_get_link_ksettings()
4571 mutex_unlock(&tp->control); in rtl8152_get_link_ksettings()
4573 usb_autopm_put_interface(tp->intf); in rtl8152_get_link_ksettings()
4582 struct r8152 *tp = netdev_priv(dev); in rtl8152_set_link_ksettings() local
4585 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_link_ksettings()
4589 mutex_lock(&tp->control); in rtl8152_set_link_ksettings()
4591 ret = rtl8152_set_speed(tp, cmd->base.autoneg, cmd->base.speed, in rtl8152_set_link_ksettings()
4594 tp->autoneg = cmd->base.autoneg; in rtl8152_set_link_ksettings()
4595 tp->speed = cmd->base.speed; in rtl8152_set_link_ksettings()
4596 tp->duplex = cmd->base.duplex; in rtl8152_set_link_ksettings()
4599 mutex_unlock(&tp->control); in rtl8152_set_link_ksettings()
4601 usb_autopm_put_interface(tp->intf); in rtl8152_set_link_ksettings()
4636 struct r8152 *tp = netdev_priv(dev); in rtl8152_get_ethtool_stats() local
4639 if (usb_autopm_get_interface(tp->intf) < 0) in rtl8152_get_ethtool_stats()
4642 generic_ocp_read(tp, PLA_TALLYCNT, sizeof(tally), &tally, MCU_TYPE_PLA); in rtl8152_get_ethtool_stats()
4644 usb_autopm_put_interface(tp->intf); in rtl8152_get_ethtool_stats()
4670 static int r8152_get_eee(struct r8152 *tp, struct ethtool_eee *eee) in r8152_get_eee() argument
4675 val = r8152_mmd_read(tp, MDIO_MMD_PCS, MDIO_PCS_EEE_ABLE); in r8152_get_eee()
4678 val = r8152_mmd_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV); in r8152_get_eee()
4681 val = r8152_mmd_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_LPABLE); in r8152_get_eee()
4684 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEE_CR); in r8152_get_eee()
4696 static int r8152_set_eee(struct r8152 *tp, struct ethtool_eee *eee) in r8152_set_eee() argument
4700 r8152_eee_en(tp, eee->eee_enabled); in r8152_set_eee()
4705 r8152_mmd_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, val); in r8152_set_eee()
4710 static int r8153_get_eee(struct r8152 *tp, struct ethtool_eee *eee) in r8153_get_eee() argument
4715 val = ocp_reg_read(tp, OCP_EEE_ABLE); in r8153_get_eee()
4718 val = ocp_reg_read(tp, OCP_EEE_ADV); in r8153_get_eee()
4721 val = ocp_reg_read(tp, OCP_EEE_LPABLE); in r8153_get_eee()
4724 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEE_CR); in r8153_get_eee()
4736 static int r8153_set_eee(struct r8152 *tp, struct ethtool_eee *eee) in r8153_set_eee() argument
4740 r8153_eee_en(tp, eee->eee_enabled); in r8153_set_eee()
4745 ocp_reg_write(tp, OCP_EEE_ADV, val); in r8153_set_eee()
4750 static int r8153b_set_eee(struct r8152 *tp, struct ethtool_eee *eee) in r8153b_set_eee() argument
4754 r8153b_eee_en(tp, eee->eee_enabled); in r8153b_set_eee()
4759 ocp_reg_write(tp, OCP_EEE_ADV, val); in r8153b_set_eee()
4767 struct r8152 *tp = netdev_priv(net); in rtl_ethtool_get_eee() local
4770 ret = usb_autopm_get_interface(tp->intf); in rtl_ethtool_get_eee()
4774 mutex_lock(&tp->control); in rtl_ethtool_get_eee()
4776 ret = tp->rtl_ops.eee_get(tp, edata); in rtl_ethtool_get_eee()
4778 mutex_unlock(&tp->control); in rtl_ethtool_get_eee()
4780 usb_autopm_put_interface(tp->intf); in rtl_ethtool_get_eee()
4789 struct r8152 *tp = netdev_priv(net); in rtl_ethtool_set_eee() local
4792 ret = usb_autopm_get_interface(tp->intf); in rtl_ethtool_set_eee()
4796 mutex_lock(&tp->control); in rtl_ethtool_set_eee()
4798 ret = tp->rtl_ops.eee_set(tp, edata); in rtl_ethtool_set_eee()
4800 ret = mii_nway_restart(&tp->mii); in rtl_ethtool_set_eee()
4802 mutex_unlock(&tp->control); in rtl_ethtool_set_eee()
4804 usb_autopm_put_interface(tp->intf); in rtl_ethtool_set_eee()
4812 struct r8152 *tp = netdev_priv(dev); in rtl8152_nway_reset() local
4815 ret = usb_autopm_get_interface(tp->intf); in rtl8152_nway_reset()
4819 mutex_lock(&tp->control); in rtl8152_nway_reset()
4821 ret = mii_nway_restart(&tp->mii); in rtl8152_nway_reset()
4823 mutex_unlock(&tp->control); in rtl8152_nway_reset()
4825 usb_autopm_put_interface(tp->intf); in rtl8152_nway_reset()
4834 struct r8152 *tp = netdev_priv(netdev); in rtl8152_get_coalesce() local
4836 switch (tp->version) { in rtl8152_get_coalesce()
4845 coalesce->rx_coalesce_usecs = tp->coalesce; in rtl8152_get_coalesce()
4853 struct r8152 *tp = netdev_priv(netdev); in rtl8152_set_coalesce() local
4856 switch (tp->version) { in rtl8152_set_coalesce()
4868 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_coalesce()
4872 mutex_lock(&tp->control); in rtl8152_set_coalesce()
4874 if (tp->coalesce != coalesce->rx_coalesce_usecs) { in rtl8152_set_coalesce()
4875 tp->coalesce = coalesce->rx_coalesce_usecs; in rtl8152_set_coalesce()
4877 if (netif_running(tp->netdev) && netif_carrier_ok(netdev)) in rtl8152_set_coalesce()
4878 r8153_set_rx_early_timeout(tp); in rtl8152_set_coalesce()
4881 mutex_unlock(&tp->control); in rtl8152_set_coalesce()
4883 usb_autopm_put_interface(tp->intf); in rtl8152_set_coalesce()
4909 struct r8152 *tp = netdev_priv(netdev); in rtl8152_ioctl() local
4913 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8152_ioctl()
4916 res = usb_autopm_get_interface(tp->intf); in rtl8152_ioctl()
4926 mutex_lock(&tp->control); in rtl8152_ioctl()
4927 data->val_out = r8152_mdio_read(tp, data->reg_num); in rtl8152_ioctl()
4928 mutex_unlock(&tp->control); in rtl8152_ioctl()
4936 mutex_lock(&tp->control); in rtl8152_ioctl()
4937 r8152_mdio_write(tp, data->reg_num, data->val_in); in rtl8152_ioctl()
4938 mutex_unlock(&tp->control); in rtl8152_ioctl()
4945 usb_autopm_put_interface(tp->intf); in rtl8152_ioctl()
4953 struct r8152 *tp = netdev_priv(dev); in rtl8152_change_mtu() local
4956 switch (tp->version) { in rtl8152_change_mtu()
4966 ret = usb_autopm_get_interface(tp->intf); in rtl8152_change_mtu()
4970 mutex_lock(&tp->control); in rtl8152_change_mtu()
4977 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, rms); in rtl8152_change_mtu()
4980 r8153_set_rx_early_size(tp); in rtl8152_change_mtu()
4983 mutex_unlock(&tp->control); in rtl8152_change_mtu()
4985 usb_autopm_put_interface(tp->intf); in rtl8152_change_mtu()
5004 static void rtl8152_unload(struct r8152 *tp) in rtl8152_unload() argument
5006 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8152_unload()
5009 if (tp->version != RTL_VER_01) in rtl8152_unload()
5010 r8152_power_cut_en(tp, true); in rtl8152_unload()
5013 static void rtl8153_unload(struct r8152 *tp) in rtl8153_unload() argument
5015 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8153_unload()
5018 r8153_power_cut_en(tp, false); in rtl8153_unload()
5021 static void rtl8153b_unload(struct r8152 *tp) in rtl8153b_unload() argument
5023 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8153b_unload()
5026 r8153b_power_cut_en(tp, false); in rtl8153b_unload()
5029 static int rtl_ops_init(struct r8152 *tp) in rtl_ops_init() argument
5031 struct rtl_ops *ops = &tp->rtl_ops; in rtl_ops_init()
5034 switch (tp->version) { in rtl_ops_init()
5085 netif_err(tp, probe, tp->netdev, "Unknown Device\n"); in rtl_ops_init()
5156 struct r8152 *tp; in rtl8152_probe() local
5176 tp = netdev_priv(netdev); in rtl8152_probe()
5177 tp->msg_enable = 0x7FFF; in rtl8152_probe()
5179 tp->udev = udev; in rtl8152_probe()
5180 tp->netdev = netdev; in rtl8152_probe()
5181 tp->intf = intf; in rtl8152_probe()
5182 tp->version = version; in rtl8152_probe()
5188 tp->mii.supports_gmii = 0; in rtl8152_probe()
5191 tp->mii.supports_gmii = 1; in rtl8152_probe()
5195 ret = rtl_ops_init(tp); in rtl8152_probe()
5199 mutex_init(&tp->control); in rtl8152_probe()
5200 INIT_DELAYED_WORK(&tp->schedule, rtl_work_func_t); in rtl8152_probe()
5201 INIT_DELAYED_WORK(&tp->hw_phy_work, rtl_hw_phy_work_func_t); in rtl8152_probe()
5218 if (tp->version == RTL_VER_01) { in rtl8152_probe()
5226 set_bit(DELL_TB_RX_AGG_BUG, &tp->flags); in rtl8152_probe()
5234 switch (tp->version) { in rtl8152_probe()
5244 tp->mii.dev = netdev; in rtl8152_probe()
5245 tp->mii.mdio_read = read_mii_word; in rtl8152_probe()
5246 tp->mii.mdio_write = write_mii_word; in rtl8152_probe()
5247 tp->mii.phy_id_mask = 0x3f; in rtl8152_probe()
5248 tp->mii.reg_num_mask = 0x1f; in rtl8152_probe()
5249 tp->mii.phy_id = R8152_PHY_ID; in rtl8152_probe()
5251 tp->autoneg = AUTONEG_ENABLE; in rtl8152_probe()
5252 tp->speed = tp->mii.supports_gmii ? SPEED_1000 : SPEED_100; in rtl8152_probe()
5253 tp->duplex = DUPLEX_FULL; in rtl8152_probe()
5257 tp->rtl_ops.init(tp); in rtl8152_probe()
5258 queue_delayed_work(system_long_wq, &tp->hw_phy_work, 0); in rtl8152_probe()
5259 set_ethernet_addr(tp); in rtl8152_probe()
5261 usb_set_intfdata(intf, tp); in rtl8152_probe()
5262 netif_napi_add(netdev, &tp->napi, r8152_poll, RTL8152_NAPI_WEIGHT); in rtl8152_probe()
5266 netif_err(tp, probe, netdev, "couldn't register the device\n"); in rtl8152_probe()
5270 if (!rtl_can_wakeup(tp)) in rtl8152_probe()
5271 __rtl_set_wol(tp, 0); in rtl8152_probe()
5273 tp->saved_wolopts = __rtl_get_wol(tp); in rtl8152_probe()
5274 if (tp->saved_wolopts) in rtl8152_probe()
5279 netif_info(tp, probe, netdev, "%s\n", DRIVER_VERSION); in rtl8152_probe()
5284 netif_napi_del(&tp->napi); in rtl8152_probe()
5293 struct r8152 *tp = usb_get_intfdata(intf); in rtl8152_disconnect() local
5296 if (tp) { in rtl8152_disconnect()
5297 struct usb_device *udev = tp->udev; in rtl8152_disconnect()
5300 set_bit(RTL8152_UNPLUG, &tp->flags); in rtl8152_disconnect()
5302 netif_napi_del(&tp->napi); in rtl8152_disconnect()
5303 unregister_netdev(tp->netdev); in rtl8152_disconnect()
5304 cancel_delayed_work_sync(&tp->hw_phy_work); in rtl8152_disconnect()
5305 tp->rtl_ops.unload(tp); in rtl8152_disconnect()
5306 free_netdev(tp->netdev); in rtl8152_disconnect()