Lines Matching refs:tp
749 void (*autosuspend_en)(struct r8152 *tp, bool enable);
828 int get_registers(struct r8152 *tp, u16 value, u16 index, u16 size, void *data) in get_registers() argument
837 ret = usb_control_msg(tp->udev, usb_rcvctrlpipe(tp->udev, 0), in get_registers()
851 int set_registers(struct r8152 *tp, u16 value, u16 index, u16 size, void *data) in set_registers() argument
860 ret = usb_control_msg(tp->udev, usb_sndctrlpipe(tp->udev, 0), in set_registers()
869 static void rtl_set_unplug(struct r8152 *tp) in rtl_set_unplug() argument
871 if (tp->udev->state == USB_STATE_NOTATTACHED) { in rtl_set_unplug()
872 set_bit(RTL8152_UNPLUG, &tp->flags); in rtl_set_unplug()
877 static int generic_ocp_read(struct r8152 *tp, u16 index, u16 size, in generic_ocp_read() argument
883 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in generic_ocp_read()
895 ret = get_registers(tp, index, type, limit, data); in generic_ocp_read()
903 ret = get_registers(tp, index, type, size, data); in generic_ocp_read()
915 rtl_set_unplug(tp); in generic_ocp_read()
920 static int generic_ocp_write(struct r8152 *tp, u16 index, u16 byteen, in generic_ocp_write() argument
927 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in generic_ocp_write()
941 ret = set_registers(tp, index, type | byen, 4, data); in generic_ocp_write()
954 ret = set_registers(tp, index, in generic_ocp_write()
964 ret = set_registers(tp, index, in generic_ocp_write()
978 ret = set_registers(tp, index, type | byen, 4, data); in generic_ocp_write()
985 rtl_set_unplug(tp); in generic_ocp_write()
991 int pla_ocp_read(struct r8152 *tp, u16 index, u16 size, void *data) in pla_ocp_read() argument
993 return generic_ocp_read(tp, index, size, data, MCU_TYPE_PLA); in pla_ocp_read()
997 int pla_ocp_write(struct r8152 *tp, u16 index, u16 byteen, u16 size, void *data) in pla_ocp_write() argument
999 return generic_ocp_write(tp, index, byteen, size, data, MCU_TYPE_PLA); in pla_ocp_write()
1003 int usb_ocp_write(struct r8152 *tp, u16 index, u16 byteen, u16 size, void *data) in usb_ocp_write() argument
1005 return generic_ocp_write(tp, index, byteen, size, data, MCU_TYPE_USB); in usb_ocp_write()
1008 static u32 ocp_read_dword(struct r8152 *tp, u16 type, u16 index) in ocp_read_dword() argument
1012 generic_ocp_read(tp, index, sizeof(data), &data, type); in ocp_read_dword()
1017 static void ocp_write_dword(struct r8152 *tp, u16 type, u16 index, u32 data) in ocp_write_dword() argument
1021 generic_ocp_write(tp, index, BYTE_EN_DWORD, sizeof(tmp), &tmp, type); in ocp_write_dword()
1024 static u16 ocp_read_word(struct r8152 *tp, u16 type, u16 index) in ocp_read_word() argument
1034 generic_ocp_read(tp, index, sizeof(tmp), &tmp, type | byen); in ocp_read_word()
1043 static void ocp_write_word(struct r8152 *tp, u16 type, u16 index, u32 data) in ocp_write_word() argument
1061 generic_ocp_write(tp, index, byen, sizeof(tmp), &tmp, type); in ocp_write_word()
1064 static u8 ocp_read_byte(struct r8152 *tp, u16 type, u16 index) in ocp_read_byte() argument
1072 generic_ocp_read(tp, index, sizeof(tmp), &tmp, type); in ocp_read_byte()
1081 static void ocp_write_byte(struct r8152 *tp, u16 type, u16 index, u32 data) in ocp_write_byte() argument
1099 generic_ocp_write(tp, index, byen, sizeof(tmp), &tmp, type); in ocp_write_byte()
1102 static u16 ocp_reg_read(struct r8152 *tp, u16 addr) in ocp_reg_read() argument
1107 if (ocp_base != tp->ocp_base) { in ocp_reg_read()
1108 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, ocp_base); in ocp_reg_read()
1109 tp->ocp_base = ocp_base; in ocp_reg_read()
1113 return ocp_read_word(tp, MCU_TYPE_PLA, ocp_index); in ocp_reg_read()
1116 static void ocp_reg_write(struct r8152 *tp, u16 addr, u16 data) in ocp_reg_write() argument
1121 if (ocp_base != tp->ocp_base) { in ocp_reg_write()
1122 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, ocp_base); in ocp_reg_write()
1123 tp->ocp_base = ocp_base; in ocp_reg_write()
1127 ocp_write_word(tp, MCU_TYPE_PLA, ocp_index, data); in ocp_reg_write()
1130 static inline void r8152_mdio_write(struct r8152 *tp, u32 reg_addr, u32 value) in r8152_mdio_write() argument
1132 ocp_reg_write(tp, OCP_BASE_MII + reg_addr * 2, value); in r8152_mdio_write()
1135 static inline int r8152_mdio_read(struct r8152 *tp, u32 reg_addr) in r8152_mdio_read() argument
1137 return ocp_reg_read(tp, OCP_BASE_MII + reg_addr * 2); in r8152_mdio_read()
1140 static void sram_write(struct r8152 *tp, u16 addr, u16 data) in sram_write() argument
1142 ocp_reg_write(tp, OCP_SRAM_ADDR, addr); in sram_write()
1143 ocp_reg_write(tp, OCP_SRAM_DATA, data); in sram_write()
1146 static u16 sram_read(struct r8152 *tp, u16 addr) in sram_read() argument
1148 ocp_reg_write(tp, OCP_SRAM_ADDR, addr); in sram_read()
1149 return ocp_reg_read(tp, OCP_SRAM_DATA); in sram_read()
1154 struct r8152 *tp = netdev_priv(netdev); in read_mii_word() local
1157 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in read_mii_word()
1163 ret = r8152_mdio_read(tp, reg); in read_mii_word()
1171 struct r8152 *tp = netdev_priv(netdev); in write_mii_word() local
1173 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in write_mii_word()
1179 r8152_mdio_write(tp, reg, val); in write_mii_word()
1183 r8152_submit_rx(struct r8152 *tp, struct rx_agg *agg, gfp_t mem_flags);
1187 struct r8152 *tp = netdev_priv(netdev); in rtl8152_set_mac_address() local
1194 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_mac_address()
1198 mutex_lock(&tp->control); in rtl8152_set_mac_address()
1202 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG); in rtl8152_set_mac_address()
1203 pla_ocp_write(tp, PLA_IDR, BYTE_EN_SIX_BYTES, 8, addr->sa_data); in rtl8152_set_mac_address()
1204 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); in rtl8152_set_mac_address()
1206 mutex_unlock(&tp->control); in rtl8152_set_mac_address()
1208 usb_autopm_put_interface(tp->intf); in rtl8152_set_mac_address()
1217 static int vendor_mac_passthru_addr_read(struct r8152 *tp, struct sockaddr *sa) in vendor_mac_passthru_addr_read() argument
1227 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0); in vendor_mac_passthru_addr_read()
1230 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, EFUSE); in vendor_mac_passthru_addr_read()
1232 netif_dbg(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1238 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_MISC_1); in vendor_mac_passthru_addr_read()
1240 netif_dbg(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1252 netif_warn(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1259 netif_warn(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1265 netif_warn(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1272 netif_info(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1280 static int determine_ethernet_addr(struct r8152 *tp, struct sockaddr *sa) in determine_ethernet_addr() argument
1282 struct net_device *dev = tp->netdev; in determine_ethernet_addr()
1287 if (tp->version == RTL_VER_01) { in determine_ethernet_addr()
1288 ret = pla_ocp_read(tp, PLA_IDR, 8, sa->sa_data); in determine_ethernet_addr()
1293 ret = vendor_mac_passthru_addr_read(tp, sa); in determine_ethernet_addr()
1295 ret = pla_ocp_read(tp, PLA_BACKUP, 8, sa->sa_data); in determine_ethernet_addr()
1299 netif_err(tp, probe, dev, "Get ether addr fail\n"); in determine_ethernet_addr()
1301 netif_err(tp, probe, dev, "Invalid ether addr %pM\n", in determine_ethernet_addr()
1305 netif_info(tp, probe, dev, "Random ether addr %pM\n", in determine_ethernet_addr()
1313 static int set_ethernet_addr(struct r8152 *tp) in set_ethernet_addr() argument
1315 struct net_device *dev = tp->netdev; in set_ethernet_addr()
1319 ret = determine_ethernet_addr(tp, &sa); in set_ethernet_addr()
1323 if (tp->version == RTL_VER_01) in set_ethernet_addr()
1336 struct r8152 *tp; in read_bulk_callback() local
1343 tp = agg->context; in read_bulk_callback()
1344 if (!tp) in read_bulk_callback()
1347 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in read_bulk_callback()
1350 if (!test_bit(WORK_ENABLE, &tp->flags)) in read_bulk_callback()
1353 netdev = tp->netdev; in read_bulk_callback()
1360 usb_mark_last_busy(tp->udev); in read_bulk_callback()
1367 spin_lock_irqsave(&tp->rx_lock, flags); in read_bulk_callback()
1368 list_add_tail(&agg->list, &tp->rx_done); in read_bulk_callback()
1369 spin_unlock_irqrestore(&tp->rx_lock, flags); in read_bulk_callback()
1370 napi_schedule(&tp->napi); in read_bulk_callback()
1373 rtl_set_unplug(tp); in read_bulk_callback()
1374 netif_device_detach(tp->netdev); in read_bulk_callback()
1388 r8152_submit_rx(tp, agg, GFP_ATOMIC); in read_bulk_callback()
1396 struct r8152 *tp; in write_bulk_callback() local
1404 tp = agg->context; in write_bulk_callback()
1405 if (!tp) in write_bulk_callback()
1408 netdev = tp->netdev; in write_bulk_callback()
1419 spin_lock_irqsave(&tp->tx_lock, flags); in write_bulk_callback()
1420 list_add_tail(&agg->list, &tp->tx_free); in write_bulk_callback()
1421 spin_unlock_irqrestore(&tp->tx_lock, flags); in write_bulk_callback()
1423 usb_autopm_put_interface_async(tp->intf); in write_bulk_callback()
1428 if (!test_bit(WORK_ENABLE, &tp->flags)) in write_bulk_callback()
1431 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in write_bulk_callback()
1434 if (!skb_queue_empty(&tp->tx_queue)) in write_bulk_callback()
1435 tasklet_schedule(&tp->tx_tl); in write_bulk_callback()
1440 struct r8152 *tp; in intr_callback() local
1445 tp = urb->context; in intr_callback()
1446 if (!tp) in intr_callback()
1449 if (!test_bit(WORK_ENABLE, &tp->flags)) in intr_callback()
1452 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in intr_callback()
1460 netif_device_detach(tp->netdev); in intr_callback()
1464 netif_info(tp, intr, tp->netdev, in intr_callback()
1468 netif_info(tp, intr, tp->netdev, "intr status -EOVERFLOW\n"); in intr_callback()
1472 netif_info(tp, intr, tp->netdev, "intr status %d\n", status); in intr_callback()
1478 if (!netif_carrier_ok(tp->netdev)) { in intr_callback()
1479 set_bit(RTL8152_LINK_CHG, &tp->flags); in intr_callback()
1480 schedule_delayed_work(&tp->schedule, 0); in intr_callback()
1483 if (netif_carrier_ok(tp->netdev)) { in intr_callback()
1484 netif_stop_queue(tp->netdev); in intr_callback()
1485 set_bit(RTL8152_LINK_CHG, &tp->flags); in intr_callback()
1486 schedule_delayed_work(&tp->schedule, 0); in intr_callback()
1493 rtl_set_unplug(tp); in intr_callback()
1494 netif_device_detach(tp->netdev); in intr_callback()
1496 netif_err(tp, intr, tp->netdev, in intr_callback()
1511 static void free_rx_agg(struct r8152 *tp, struct rx_agg *agg) in free_rx_agg() argument
1519 atomic_dec(&tp->rx_count); in free_rx_agg()
1522 static struct rx_agg *alloc_rx_agg(struct r8152 *tp, gfp_t mflags) in alloc_rx_agg() argument
1524 struct net_device *netdev = tp->netdev; in alloc_rx_agg()
1526 unsigned int order = get_order(tp->rx_buf_sz); in alloc_rx_agg()
1544 rx_agg->context = tp; in alloc_rx_agg()
1548 spin_lock_irqsave(&tp->rx_lock, flags); in alloc_rx_agg()
1549 list_add_tail(&rx_agg->info_list, &tp->rx_info); in alloc_rx_agg()
1550 spin_unlock_irqrestore(&tp->rx_lock, flags); in alloc_rx_agg()
1552 atomic_inc(&tp->rx_count); in alloc_rx_agg()
1563 static void free_all_mem(struct r8152 *tp) in free_all_mem() argument
1569 spin_lock_irqsave(&tp->rx_lock, flags); in free_all_mem()
1571 list_for_each_entry_safe(agg, agg_next, &tp->rx_info, info_list) in free_all_mem()
1572 free_rx_agg(tp, agg); in free_all_mem()
1574 spin_unlock_irqrestore(&tp->rx_lock, flags); in free_all_mem()
1576 WARN_ON(atomic_read(&tp->rx_count)); in free_all_mem()
1579 usb_free_urb(tp->tx_info[i].urb); in free_all_mem()
1580 tp->tx_info[i].urb = NULL; in free_all_mem()
1582 kfree(tp->tx_info[i].buffer); in free_all_mem()
1583 tp->tx_info[i].buffer = NULL; in free_all_mem()
1584 tp->tx_info[i].head = NULL; in free_all_mem()
1587 usb_free_urb(tp->intr_urb); in free_all_mem()
1588 tp->intr_urb = NULL; in free_all_mem()
1590 kfree(tp->intr_buff); in free_all_mem()
1591 tp->intr_buff = NULL; in free_all_mem()
1594 static int alloc_all_mem(struct r8152 *tp) in alloc_all_mem() argument
1596 struct net_device *netdev = tp->netdev; in alloc_all_mem()
1597 struct usb_interface *intf = tp->intf; in alloc_all_mem()
1604 spin_lock_init(&tp->rx_lock); in alloc_all_mem()
1605 spin_lock_init(&tp->tx_lock); in alloc_all_mem()
1606 INIT_LIST_HEAD(&tp->rx_info); in alloc_all_mem()
1607 INIT_LIST_HEAD(&tp->tx_free); in alloc_all_mem()
1608 INIT_LIST_HEAD(&tp->rx_done); in alloc_all_mem()
1609 skb_queue_head_init(&tp->tx_queue); in alloc_all_mem()
1610 skb_queue_head_init(&tp->rx_queue); in alloc_all_mem()
1611 atomic_set(&tp->rx_count, 0); in alloc_all_mem()
1614 if (!alloc_rx_agg(tp, GFP_KERNEL)) in alloc_all_mem()
1640 INIT_LIST_HEAD(&tp->tx_info[i].list); in alloc_all_mem()
1641 tp->tx_info[i].context = tp; in alloc_all_mem()
1642 tp->tx_info[i].urb = urb; in alloc_all_mem()
1643 tp->tx_info[i].buffer = buf; in alloc_all_mem()
1644 tp->tx_info[i].head = tx_agg_align(buf); in alloc_all_mem()
1646 list_add_tail(&tp->tx_info[i].list, &tp->tx_free); in alloc_all_mem()
1649 tp->intr_urb = usb_alloc_urb(0, GFP_KERNEL); in alloc_all_mem()
1650 if (!tp->intr_urb) in alloc_all_mem()
1653 tp->intr_buff = kmalloc(INTBUFSIZE, GFP_KERNEL); in alloc_all_mem()
1654 if (!tp->intr_buff) in alloc_all_mem()
1657 tp->intr_interval = (int)ep_intr->desc.bInterval; in alloc_all_mem()
1658 usb_fill_int_urb(tp->intr_urb, tp->udev, usb_rcvintpipe(tp->udev, 3), in alloc_all_mem()
1659 tp->intr_buff, INTBUFSIZE, intr_callback, in alloc_all_mem()
1660 tp, tp->intr_interval); in alloc_all_mem()
1665 free_all_mem(tp); in alloc_all_mem()
1669 static struct tx_agg *r8152_get_tx_agg(struct r8152 *tp) in r8152_get_tx_agg() argument
1674 if (list_empty(&tp->tx_free)) in r8152_get_tx_agg()
1677 spin_lock_irqsave(&tp->tx_lock, flags); in r8152_get_tx_agg()
1678 if (!list_empty(&tp->tx_free)) { in r8152_get_tx_agg()
1681 cursor = tp->tx_free.next; in r8152_get_tx_agg()
1685 spin_unlock_irqrestore(&tp->tx_lock, flags); in r8152_get_tx_agg()
1694 static void r8152_csum_workaround(struct r8152 *tp, struct sk_buff *skb, in r8152_csum_workaround() argument
1698 netdev_features_t features = tp->netdev->features; in r8152_csum_workaround()
1727 stats = &tp->netdev->stats; in r8152_csum_workaround()
1775 static int r8152_tx_csum(struct r8152 *tp, struct tx_desc *desc, in r8152_tx_csum() argument
1788 netif_warn(tp, tx_err, tp->netdev, in r8152_tx_csum()
1819 netif_warn(tp, tx_err, tp->netdev, in r8152_tx_csum()
1859 static int r8152_tx_agg_fill(struct r8152 *tp, struct tx_agg *agg) in r8152_tx_agg_fill() argument
1861 struct sk_buff_head skb_head, *tx_queue = &tp->tx_queue; in r8152_tx_agg_fill()
1897 if (r8152_tx_csum(tp, tx_desc, skb, skb->len, offset)) { in r8152_tx_agg_fill()
1898 r8152_csum_workaround(tp, skb, &skb_head); in r8152_tx_agg_fill()
1908 struct net_device_stats *stats = &tp->netdev->stats; in r8152_tx_agg_fill()
1924 if (test_bit(DELL_TB_RX_AGG_BUG, &tp->flags)) in r8152_tx_agg_fill()
1934 netif_tx_lock(tp->netdev); in r8152_tx_agg_fill()
1936 if (netif_queue_stopped(tp->netdev) && in r8152_tx_agg_fill()
1937 skb_queue_len(&tp->tx_queue) < tp->tx_qlen) in r8152_tx_agg_fill()
1938 netif_wake_queue(tp->netdev); in r8152_tx_agg_fill()
1940 netif_tx_unlock(tp->netdev); in r8152_tx_agg_fill()
1942 ret = usb_autopm_get_interface_async(tp->intf); in r8152_tx_agg_fill()
1946 usb_fill_bulk_urb(agg->urb, tp->udev, usb_sndbulkpipe(tp->udev, 2), in r8152_tx_agg_fill()
1952 usb_autopm_put_interface_async(tp->intf); in r8152_tx_agg_fill()
1958 static u8 r8152_rx_csum(struct r8152 *tp, struct rx_desc *rx_desc) in r8152_rx_csum() argument
1963 if (!(tp->netdev->features & NETIF_F_RXCSUM)) in r8152_rx_csum()
1987 static inline bool rx_count_exceed(struct r8152 *tp) in rx_count_exceed() argument
1989 return atomic_read(&tp->rx_count) > RTL8152_MAX_RX; in rx_count_exceed()
1997 static struct rx_agg *rtl_get_free_rx(struct r8152 *tp, gfp_t mflags) in rtl_get_free_rx() argument
2002 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_get_free_rx()
2004 list_for_each_entry_safe(agg, agg_next, &tp->rx_used, list) { in rtl_get_free_rx()
2011 if (rx_count_exceed(tp)) { in rtl_get_free_rx()
2013 free_rx_agg(tp, agg); in rtl_get_free_rx()
2019 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_get_free_rx()
2021 if (!agg_free && atomic_read(&tp->rx_count) < tp->rx_pending) in rtl_get_free_rx()
2022 agg_free = alloc_rx_agg(tp, mflags); in rtl_get_free_rx()
2027 static int rx_bottom(struct r8152 *tp, int budget) in rx_bottom() argument
2032 struct napi_struct *napi = &tp->napi; in rx_bottom()
2034 if (!skb_queue_empty(&tp->rx_queue)) { in rx_bottom()
2036 struct sk_buff *skb = __skb_dequeue(&tp->rx_queue); in rx_bottom()
2037 struct net_device *netdev = tp->netdev; in rx_bottom()
2052 if (list_empty(&tp->rx_done)) in rx_bottom()
2056 spin_lock_irqsave(&tp->rx_lock, flags); in rx_bottom()
2057 list_splice_init(&tp->rx_done, &rx_queue); in rx_bottom()
2058 spin_unlock_irqrestore(&tp->rx_lock, flags); in rx_bottom()
2074 agg_free = rtl_get_free_rx(tp, GFP_ATOMIC); in rx_bottom()
2081 struct net_device *netdev = tp->netdev; in rx_bottom()
2087 if (unlikely(skb_queue_len(&tp->rx_queue) >= 1000)) in rx_bottom()
2101 if (!agg_free || tp->rx_copybreak > pkt_len) in rx_bottom()
2104 rx_frag_head_sz = tp->rx_copybreak; in rx_bottom()
2112 skb->ip_summed = r8152_rx_csum(tp, rx_desc); in rx_bottom()
2133 __skb_queue_tail(&tp->rx_queue, skb); in rx_bottom()
2146 spin_lock_irqsave(&tp->rx_lock, flags); in rx_bottom()
2148 list_add(&agg_free->list, &tp->rx_used); in rx_bottom()
2150 list_add_tail(&agg->list, &tp->rx_used); in rx_bottom()
2154 spin_unlock_irqrestore(&tp->rx_lock, flags); in rx_bottom()
2159 ret = r8152_submit_rx(tp, agg, GFP_ATOMIC); in rx_bottom()
2167 spin_lock_irqsave(&tp->rx_lock, flags); in rx_bottom()
2168 list_splice_tail(&rx_queue, &tp->rx_done); in rx_bottom()
2169 spin_unlock_irqrestore(&tp->rx_lock, flags); in rx_bottom()
2176 static void tx_bottom(struct r8152 *tp) in tx_bottom() argument
2183 if (skb_queue_empty(&tp->tx_queue)) in tx_bottom()
2186 agg = r8152_get_tx_agg(tp); in tx_bottom()
2190 res = r8152_tx_agg_fill(tp, agg); in tx_bottom()
2192 struct net_device *netdev = tp->netdev; in tx_bottom()
2195 rtl_set_unplug(tp); in tx_bottom()
2201 netif_warn(tp, tx_err, netdev, in tx_bottom()
2205 spin_lock_irqsave(&tp->tx_lock, flags); in tx_bottom()
2206 list_add_tail(&agg->list, &tp->tx_free); in tx_bottom()
2207 spin_unlock_irqrestore(&tp->tx_lock, flags); in tx_bottom()
2215 struct r8152 *tp; in bottom_half() local
2217 tp = (struct r8152 *)data; in bottom_half()
2219 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in bottom_half()
2222 if (!test_bit(WORK_ENABLE, &tp->flags)) in bottom_half()
2227 if (!netif_carrier_ok(tp->netdev)) in bottom_half()
2230 clear_bit(SCHEDULE_TASKLET, &tp->flags); in bottom_half()
2232 tx_bottom(tp); in bottom_half()
2237 struct r8152 *tp = container_of(napi, struct r8152, napi); in r8152_poll() local
2240 work_done = rx_bottom(tp, budget); in r8152_poll()
2245 if (!list_empty(&tp->rx_done)) in r8152_poll()
2254 int r8152_submit_rx(struct r8152 *tp, struct rx_agg *agg, gfp_t mem_flags) in r8152_submit_rx() argument
2259 if (test_bit(RTL8152_UNPLUG, &tp->flags) || in r8152_submit_rx()
2260 !test_bit(WORK_ENABLE, &tp->flags) || !netif_carrier_ok(tp->netdev)) in r8152_submit_rx()
2263 usb_fill_bulk_urb(agg->urb, tp->udev, usb_rcvbulkpipe(tp->udev, 1), in r8152_submit_rx()
2264 agg->buffer, tp->rx_buf_sz, in r8152_submit_rx()
2269 rtl_set_unplug(tp); in r8152_submit_rx()
2270 netif_device_detach(tp->netdev); in r8152_submit_rx()
2276 spin_lock_irqsave(&tp->rx_lock, flags); in r8152_submit_rx()
2277 list_add_tail(&agg->list, &tp->rx_done); in r8152_submit_rx()
2278 spin_unlock_irqrestore(&tp->rx_lock, flags); in r8152_submit_rx()
2280 netif_err(tp, rx_err, tp->netdev, in r8152_submit_rx()
2283 napi_schedule(&tp->napi); in r8152_submit_rx()
2289 static void rtl_drop_queued_tx(struct r8152 *tp) in rtl_drop_queued_tx() argument
2291 struct net_device_stats *stats = &tp->netdev->stats; in rtl_drop_queued_tx()
2292 struct sk_buff_head skb_head, *tx_queue = &tp->tx_queue; in rtl_drop_queued_tx()
2311 struct r8152 *tp = netdev_priv(netdev); in rtl8152_tx_timeout() local
2313 netif_warn(tp, tx_err, netdev, "Tx timeout\n"); in rtl8152_tx_timeout()
2315 usb_queue_reset_device(tp->intf); in rtl8152_tx_timeout()
2320 struct r8152 *tp = netdev_priv(netdev); in rtl8152_set_rx_mode() local
2323 set_bit(RTL8152_SET_RX_MODE, &tp->flags); in rtl8152_set_rx_mode()
2324 schedule_delayed_work(&tp->schedule, 0); in rtl8152_set_rx_mode()
2330 struct r8152 *tp = netdev_priv(netdev); in _rtl8152_set_rx_mode() local
2336 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in _rtl8152_set_rx_mode()
2342 netif_notice(tp, link, netdev, "Promiscuous mode enabled\n"); in _rtl8152_set_rx_mode()
2368 pla_ocp_write(tp, PLA_MAR, BYTE_EN_DWORD, sizeof(tmp), tmp); in _rtl8152_set_rx_mode()
2369 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in _rtl8152_set_rx_mode()
2392 struct r8152 *tp = netdev_priv(netdev); in rtl8152_start_xmit() local
2396 skb_queue_tail(&tp->tx_queue, skb); in rtl8152_start_xmit()
2398 if (!list_empty(&tp->tx_free)) { in rtl8152_start_xmit()
2399 if (test_bit(SELECTIVE_SUSPEND, &tp->flags)) { in rtl8152_start_xmit()
2400 set_bit(SCHEDULE_TASKLET, &tp->flags); in rtl8152_start_xmit()
2401 schedule_delayed_work(&tp->schedule, 0); in rtl8152_start_xmit()
2403 usb_mark_last_busy(tp->udev); in rtl8152_start_xmit()
2404 tasklet_schedule(&tp->tx_tl); in rtl8152_start_xmit()
2406 } else if (skb_queue_len(&tp->tx_queue) > tp->tx_qlen) { in rtl8152_start_xmit()
2413 static void r8152b_reset_packet_filter(struct r8152 *tp) in r8152b_reset_packet_filter() argument
2417 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_FMC); in r8152b_reset_packet_filter()
2419 ocp_write_word(tp, MCU_TYPE_PLA, PLA_FMC, ocp_data); in r8152b_reset_packet_filter()
2421 ocp_write_word(tp, MCU_TYPE_PLA, PLA_FMC, ocp_data); in r8152b_reset_packet_filter()
2424 static void rtl8152_nic_reset(struct r8152 *tp) in rtl8152_nic_reset() argument
2428 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, CR_RST); in rtl8152_nic_reset()
2431 if (!(ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CR) & CR_RST)) in rtl8152_nic_reset()
2437 static void set_tx_qlen(struct r8152 *tp) in set_tx_qlen() argument
2439 struct net_device *netdev = tp->netdev; in set_tx_qlen()
2441 tp->tx_qlen = agg_buf_sz / (netdev->mtu + VLAN_ETH_HLEN + ETH_FCS_LEN + in set_tx_qlen()
2445 static inline u8 rtl8152_get_speed(struct r8152 *tp) in rtl8152_get_speed() argument
2447 return ocp_read_byte(tp, MCU_TYPE_PLA, PLA_PHYSTATUS); in rtl8152_get_speed()
2450 static void rtl_set_eee_plus(struct r8152 *tp) in rtl_set_eee_plus() argument
2455 speed = rtl8152_get_speed(tp); in rtl_set_eee_plus()
2457 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEEP_CR); in rtl_set_eee_plus()
2459 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEEP_CR, ocp_data); in rtl_set_eee_plus()
2461 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEEP_CR); in rtl_set_eee_plus()
2463 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEEP_CR, ocp_data); in rtl_set_eee_plus()
2467 static void rxdy_gated_en(struct r8152 *tp, bool enable) in rxdy_gated_en() argument
2471 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MISC_1); in rxdy_gated_en()
2476 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MISC_1, ocp_data); in rxdy_gated_en()
2479 static int rtl_start_rx(struct r8152 *tp) in rtl_start_rx() argument
2488 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_start_rx()
2490 INIT_LIST_HEAD(&tp->rx_done); in rtl_start_rx()
2491 INIT_LIST_HEAD(&tp->rx_used); in rtl_start_rx()
2493 list_splice_init(&tp->rx_info, &tmp_list); in rtl_start_rx()
2495 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_start_rx()
2502 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_start_rx()
2503 list_add_tail(&agg->list, &tp->rx_used); in rtl_start_rx()
2504 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_start_rx()
2506 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_start_rx()
2507 list_add_tail(&agg->list, &tp->rx_done); in rtl_start_rx()
2508 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_start_rx()
2510 ret = r8152_submit_rx(tp, agg, GFP_KERNEL); in rtl_start_rx()
2514 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_start_rx()
2515 WARN_ON(!list_empty(&tp->rx_info)); in rtl_start_rx()
2516 list_splice(&tmp_list, &tp->rx_info); in rtl_start_rx()
2517 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_start_rx()
2522 static int rtl_stop_rx(struct r8152 *tp) in rtl_stop_rx() argument
2536 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_stop_rx()
2537 list_splice_init(&tp->rx_info, &tmp_list); in rtl_stop_rx()
2538 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_stop_rx()
2545 free_rx_agg(tp, agg); in rtl_stop_rx()
2551 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_stop_rx()
2552 WARN_ON(!list_empty(&tp->rx_info)); in rtl_stop_rx()
2553 list_splice(&tmp_list, &tp->rx_info); in rtl_stop_rx()
2554 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_stop_rx()
2556 while (!skb_queue_empty(&tp->rx_queue)) in rtl_stop_rx()
2557 dev_kfree_skb(__skb_dequeue(&tp->rx_queue)); in rtl_stop_rx()
2562 static inline void r8153b_rx_agg_chg_indicate(struct r8152 *tp) in r8153b_rx_agg_chg_indicate() argument
2564 ocp_write_byte(tp, MCU_TYPE_USB, USB_UPT_RXDMA_OWN, in r8153b_rx_agg_chg_indicate()
2568 static int rtl_enable(struct r8152 *tp) in rtl_enable() argument
2572 r8152b_reset_packet_filter(tp); in rtl_enable()
2574 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CR); in rtl_enable()
2576 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, ocp_data); in rtl_enable()
2578 switch (tp->version) { in rtl_enable()
2581 r8153b_rx_agg_chg_indicate(tp); in rtl_enable()
2587 rxdy_gated_en(tp, false); in rtl_enable()
2592 static int rtl8152_enable(struct r8152 *tp) in rtl8152_enable() argument
2594 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8152_enable()
2597 set_tx_qlen(tp); in rtl8152_enable()
2598 rtl_set_eee_plus(tp); in rtl8152_enable()
2600 return rtl_enable(tp); in rtl8152_enable()
2603 static void r8153_set_rx_early_timeout(struct r8152 *tp) in r8153_set_rx_early_timeout() argument
2605 u32 ocp_data = tp->coalesce / 8; in r8153_set_rx_early_timeout()
2607 switch (tp->version) { in r8153_set_rx_early_timeout()
2612 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_TIMEOUT, in r8153_set_rx_early_timeout()
2621 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_TIMEOUT, in r8153_set_rx_early_timeout()
2623 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EXTRA_AGGR_TMR, in r8153_set_rx_early_timeout()
2632 static void r8153_set_rx_early_size(struct r8152 *tp) in r8153_set_rx_early_size() argument
2634 u32 ocp_data = tp->rx_buf_sz - rx_reserved_size(tp->netdev->mtu); in r8153_set_rx_early_size()
2636 switch (tp->version) { in r8153_set_rx_early_size()
2641 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_SIZE, in r8153_set_rx_early_size()
2646 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_SIZE, in r8153_set_rx_early_size()
2655 static int rtl8153_enable(struct r8152 *tp) in rtl8153_enable() argument
2657 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8153_enable()
2660 set_tx_qlen(tp); in rtl8153_enable()
2661 rtl_set_eee_plus(tp); in rtl8153_enable()
2662 r8153_set_rx_early_timeout(tp); in rtl8153_enable()
2663 r8153_set_rx_early_size(tp); in rtl8153_enable()
2665 return rtl_enable(tp); in rtl8153_enable()
2668 static void rtl_disable(struct r8152 *tp) in rtl_disable() argument
2673 if (test_bit(RTL8152_UNPLUG, &tp->flags)) { in rtl_disable()
2674 rtl_drop_queued_tx(tp); in rtl_disable()
2678 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in rtl_disable()
2680 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in rtl_disable()
2682 rtl_drop_queued_tx(tp); in rtl_disable()
2685 usb_kill_urb(tp->tx_info[i].urb); in rtl_disable()
2687 rxdy_gated_en(tp, true); in rtl_disable()
2690 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in rtl_disable()
2697 if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR0) & TCR0_TX_EMPTY) in rtl_disable()
2702 rtl_stop_rx(tp); in rtl_disable()
2704 rtl8152_nic_reset(tp); in rtl_disable()
2707 static void r8152_power_cut_en(struct r8152 *tp, bool enable) in r8152_power_cut_en() argument
2711 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_UPS_CTRL); in r8152_power_cut_en()
2716 ocp_write_word(tp, MCU_TYPE_USB, USB_UPS_CTRL, ocp_data); in r8152_power_cut_en()
2718 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_PM_CTRL_STATUS); in r8152_power_cut_en()
2720 ocp_write_word(tp, MCU_TYPE_USB, USB_PM_CTRL_STATUS, ocp_data); in r8152_power_cut_en()
2723 static void rtl_rx_vlan_en(struct r8152 *tp, bool enable) in rtl_rx_vlan_en() argument
2727 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CPCR); in rtl_rx_vlan_en()
2732 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CPCR, ocp_data); in rtl_rx_vlan_en()
2739 struct r8152 *tp = netdev_priv(dev); in rtl8152_set_features() local
2742 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_features()
2746 mutex_lock(&tp->control); in rtl8152_set_features()
2750 rtl_rx_vlan_en(tp, true); in rtl8152_set_features()
2752 rtl_rx_vlan_en(tp, false); in rtl8152_set_features()
2755 mutex_unlock(&tp->control); in rtl8152_set_features()
2757 usb_autopm_put_interface(tp->intf); in rtl8152_set_features()
2765 static u32 __rtl_get_wol(struct r8152 *tp) in __rtl_get_wol() argument
2770 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34); in __rtl_get_wol()
2774 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG5); in __rtl_get_wol()
2782 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CFG_WOL); in __rtl_get_wol()
2789 static void __rtl_set_wol(struct r8152 *tp, u32 wolopts) in __rtl_set_wol() argument
2793 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG); in __rtl_set_wol()
2795 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34); in __rtl_set_wol()
2799 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG34, ocp_data); in __rtl_set_wol()
2801 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG5); in __rtl_set_wol()
2809 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG5, ocp_data); in __rtl_set_wol()
2811 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); in __rtl_set_wol()
2813 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CFG_WOL); in __rtl_set_wol()
2817 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CFG_WOL, ocp_data); in __rtl_set_wol()
2820 device_set_wakeup_enable(&tp->udev->dev, true); in __rtl_set_wol()
2822 device_set_wakeup_enable(&tp->udev->dev, false); in __rtl_set_wol()
2825 static void r8153_mac_clk_spd(struct r8152 *tp, bool enable) in r8153_mac_clk_spd() argument
2829 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL, in r8153_mac_clk_spd()
2831 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL2, in r8153_mac_clk_spd()
2833 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, in r8153_mac_clk_spd()
2836 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4, in r8153_mac_clk_spd()
2841 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL, 0); in r8153_mac_clk_spd()
2842 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL2, 0); in r8153_mac_clk_spd()
2843 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, 0); in r8153_mac_clk_spd()
2844 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4, 0); in r8153_mac_clk_spd()
2848 static void r8153_u1u2en(struct r8152 *tp, bool enable) in r8153_u1u2en() argument
2857 usb_ocp_write(tp, USB_TOLERANCE, BYTE_EN_SIX_BYTES, sizeof(u1u2), u1u2); in r8153_u1u2en()
2860 static void r8153b_u1u2en(struct r8152 *tp, bool enable) in r8153b_u1u2en() argument
2864 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_LPM_CONFIG); in r8153b_u1u2en()
2870 ocp_write_word(tp, MCU_TYPE_USB, USB_LPM_CONFIG, ocp_data); in r8153b_u1u2en()
2873 static void r8153_u2p3en(struct r8152 *tp, bool enable) in r8153_u2p3en() argument
2877 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_U2P3_CTRL); in r8153_u2p3en()
2882 ocp_write_word(tp, MCU_TYPE_USB, USB_U2P3_CTRL, ocp_data); in r8153_u2p3en()
2885 static void r8153b_ups_flags(struct r8152 *tp) in r8153b_ups_flags() argument
2889 if (tp->ups_info.green) in r8153b_ups_flags()
2892 if (tp->ups_info.aldps) in r8153b_ups_flags()
2895 if (tp->ups_info.eee) in r8153b_ups_flags()
2898 if (tp->ups_info.flow_control) in r8153b_ups_flags()
2901 if (tp->ups_info.eee_ckdiv) in r8153b_ups_flags()
2904 if (tp->ups_info.eee_cmod_lv) in r8153b_ups_flags()
2907 if (tp->ups_info._10m_ckdiv) in r8153b_ups_flags()
2910 if (tp->ups_info.eee_plloff_100) in r8153b_ups_flags()
2913 if (tp->ups_info.eee_plloff_giga) in r8153b_ups_flags()
2916 if (tp->ups_info._250m_ckdiv) in r8153b_ups_flags()
2919 if (tp->ups_info.ctap_short_off) in r8153b_ups_flags()
2922 switch (tp->ups_info.speed_duplex) { in r8153b_ups_flags()
2954 ocp_write_dword(tp, MCU_TYPE_USB, USB_UPS_FLAGS, ups_flags); in r8153b_ups_flags()
2957 static void r8153b_green_en(struct r8152 *tp, bool enable) in r8153b_green_en() argument
2962 sram_write(tp, 0x8045, 0); /* 10M abiq&ldvbias */ in r8153b_green_en()
2963 sram_write(tp, 0x804d, 0x1222); /* 100M short abiq&ldvbias */ in r8153b_green_en()
2964 sram_write(tp, 0x805d, 0x0022); /* 1000M short abiq&ldvbias */ in r8153b_green_en()
2966 sram_write(tp, 0x8045, 0x2444); /* 10M abiq&ldvbias */ in r8153b_green_en()
2967 sram_write(tp, 0x804d, 0x2444); /* 100M short abiq&ldvbias */ in r8153b_green_en()
2968 sram_write(tp, 0x805d, 0x2444); /* 1000M short abiq&ldvbias */ in r8153b_green_en()
2971 data = sram_read(tp, SRAM_GREEN_CFG); in r8153b_green_en()
2973 sram_write(tp, SRAM_GREEN_CFG, data); in r8153b_green_en()
2975 tp->ups_info.green = enable; in r8153b_green_en()
2978 static u16 r8153_phy_status(struct r8152 *tp, u16 desired) in r8153_phy_status() argument
2984 data = ocp_reg_read(tp, OCP_PHY_STATUS); in r8153_phy_status()
3000 static void r8153b_ups_en(struct r8152 *tp, bool enable) in r8153b_ups_en() argument
3002 u32 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_POWER_CUT); in r8153b_ups_en()
3005 r8153b_ups_flags(tp); in r8153b_ups_en()
3008 ocp_write_byte(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data); in r8153b_ups_en()
3010 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, 0xcfff); in r8153b_ups_en()
3012 ocp_write_byte(tp, MCU_TYPE_USB, 0xcfff, ocp_data); in r8153b_ups_en()
3017 ocp_write_byte(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data); in r8153b_ups_en()
3019 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, 0xcfff); in r8153b_ups_en()
3021 ocp_write_byte(tp, MCU_TYPE_USB, 0xcfff, ocp_data); in r8153b_ups_en()
3023 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0); in r8153b_ups_en()
3025 ocp_write_word(tp, MCU_TYPE_USB, USB_MISC_0, ocp_data); in r8153b_ups_en()
3027 data = r8153_phy_status(tp, 0); in r8153b_ups_en()
3032 r8153b_green_en(tp, in r8153b_ups_en()
3033 test_bit(GREEN_ETHERNET, &tp->flags)); in r8153b_ups_en()
3035 data = r8152_mdio_read(tp, MII_BMCR); in r8153b_ups_en()
3038 r8152_mdio_write(tp, MII_BMCR, data); in r8153b_ups_en()
3040 data = r8153_phy_status(tp, PHY_STAT_LAN_ON); in r8153b_ups_en()
3045 netif_warn(tp, link, tp->netdev, in r8153b_ups_en()
3052 static void r8153_power_cut_en(struct r8152 *tp, bool enable) in r8153_power_cut_en() argument
3056 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_POWER_CUT); in r8153_power_cut_en()
3061 ocp_write_word(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data); in r8153_power_cut_en()
3063 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0); in r8153_power_cut_en()
3065 ocp_write_word(tp, MCU_TYPE_USB, USB_MISC_0, ocp_data); in r8153_power_cut_en()
3068 static void r8153b_power_cut_en(struct r8152 *tp, bool enable) in r8153b_power_cut_en() argument
3072 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_POWER_CUT); in r8153b_power_cut_en()
3077 ocp_write_word(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data); in r8153b_power_cut_en()
3079 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0); in r8153b_power_cut_en()
3081 ocp_write_word(tp, MCU_TYPE_USB, USB_MISC_0, ocp_data); in r8153b_power_cut_en()
3084 static void r8153_queue_wake(struct r8152 *tp, bool enable) in r8153_queue_wake() argument
3088 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_INDICATE_FALG); in r8153_queue_wake()
3093 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_INDICATE_FALG, ocp_data); in r8153_queue_wake()
3095 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_SUSPEND_FLAG); in r8153_queue_wake()
3097 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_SUSPEND_FLAG, ocp_data); in r8153_queue_wake()
3099 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS); in r8153_queue_wake()
3101 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS, ocp_data); in r8153_queue_wake()
3104 static bool rtl_can_wakeup(struct r8152 *tp) in rtl_can_wakeup() argument
3106 struct usb_device *udev = tp->udev; in rtl_can_wakeup()
3111 static void rtl_runtime_suspend_enable(struct r8152 *tp, bool enable) in rtl_runtime_suspend_enable() argument
3116 __rtl_set_wol(tp, WAKE_ANY); in rtl_runtime_suspend_enable()
3118 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG); in rtl_runtime_suspend_enable()
3120 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34); in rtl_runtime_suspend_enable()
3122 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG34, ocp_data); in rtl_runtime_suspend_enable()
3124 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); in rtl_runtime_suspend_enable()
3128 __rtl_set_wol(tp, tp->saved_wolopts); in rtl_runtime_suspend_enable()
3130 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG); in rtl_runtime_suspend_enable()
3132 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34); in rtl_runtime_suspend_enable()
3134 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG34, ocp_data); in rtl_runtime_suspend_enable()
3136 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); in rtl_runtime_suspend_enable()
3140 static void rtl8153_runtime_enable(struct r8152 *tp, bool enable) in rtl8153_runtime_enable() argument
3143 r8153_u1u2en(tp, false); in rtl8153_runtime_enable()
3144 r8153_u2p3en(tp, false); in rtl8153_runtime_enable()
3145 r8153_mac_clk_spd(tp, true); in rtl8153_runtime_enable()
3146 rtl_runtime_suspend_enable(tp, true); in rtl8153_runtime_enable()
3148 rtl_runtime_suspend_enable(tp, false); in rtl8153_runtime_enable()
3149 r8153_mac_clk_spd(tp, false); in rtl8153_runtime_enable()
3151 switch (tp->version) { in rtl8153_runtime_enable()
3158 r8153_u2p3en(tp, true); in rtl8153_runtime_enable()
3162 r8153_u1u2en(tp, true); in rtl8153_runtime_enable()
3166 static void rtl8153b_runtime_enable(struct r8152 *tp, bool enable) in rtl8153b_runtime_enable() argument
3169 r8153_queue_wake(tp, true); in rtl8153b_runtime_enable()
3170 r8153b_u1u2en(tp, false); in rtl8153b_runtime_enable()
3171 r8153_u2p3en(tp, false); in rtl8153b_runtime_enable()
3172 rtl_runtime_suspend_enable(tp, true); in rtl8153b_runtime_enable()
3173 r8153b_ups_en(tp, true); in rtl8153b_runtime_enable()
3175 r8153b_ups_en(tp, false); in rtl8153b_runtime_enable()
3176 r8153_queue_wake(tp, false); in rtl8153b_runtime_enable()
3177 rtl_runtime_suspend_enable(tp, false); in rtl8153b_runtime_enable()
3178 r8153_u2p3en(tp, true); in rtl8153b_runtime_enable()
3179 r8153b_u1u2en(tp, true); in rtl8153b_runtime_enable()
3183 static void r8153_teredo_off(struct r8152 *tp) in r8153_teredo_off() argument
3187 switch (tp->version) { in r8153_teredo_off()
3195 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG); in r8153_teredo_off()
3198 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG, ocp_data); in r8153_teredo_off()
3206 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG, 0xff); in r8153_teredo_off()
3213 ocp_write_word(tp, MCU_TYPE_PLA, PLA_WDT6_CTRL, WDT6_SET_MODE); in r8153_teredo_off()
3214 ocp_write_word(tp, MCU_TYPE_PLA, PLA_REALWOW_TIMER, 0); in r8153_teredo_off()
3215 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_TEREDO_TIMER, 0); in r8153_teredo_off()
3218 static void rtl_reset_bmu(struct r8152 *tp) in rtl_reset_bmu() argument
3222 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_BMU_RESET); in rtl_reset_bmu()
3224 ocp_write_byte(tp, MCU_TYPE_USB, USB_BMU_RESET, ocp_data); in rtl_reset_bmu()
3226 ocp_write_byte(tp, MCU_TYPE_USB, USB_BMU_RESET, ocp_data); in rtl_reset_bmu()
3229 static void r8152_aldps_en(struct r8152 *tp, bool enable) in r8152_aldps_en() argument
3232 ocp_reg_write(tp, OCP_ALDPS_CONFIG, ENPWRSAVE | ENPDNPS | in r8152_aldps_en()
3235 ocp_reg_write(tp, OCP_ALDPS_CONFIG, ENPDNPS | LINKENA | in r8152_aldps_en()
3241 static inline void r8152_mmd_indirect(struct r8152 *tp, u16 dev, u16 reg) in r8152_mmd_indirect() argument
3243 ocp_reg_write(tp, OCP_EEE_AR, FUN_ADDR | dev); in r8152_mmd_indirect()
3244 ocp_reg_write(tp, OCP_EEE_DATA, reg); in r8152_mmd_indirect()
3245 ocp_reg_write(tp, OCP_EEE_AR, FUN_DATA | dev); in r8152_mmd_indirect()
3248 static u16 r8152_mmd_read(struct r8152 *tp, u16 dev, u16 reg) in r8152_mmd_read() argument
3252 r8152_mmd_indirect(tp, dev, reg); in r8152_mmd_read()
3253 data = ocp_reg_read(tp, OCP_EEE_DATA); in r8152_mmd_read()
3254 ocp_reg_write(tp, OCP_EEE_AR, 0x0000); in r8152_mmd_read()
3259 static void r8152_mmd_write(struct r8152 *tp, u16 dev, u16 reg, u16 data) in r8152_mmd_write() argument
3261 r8152_mmd_indirect(tp, dev, reg); in r8152_mmd_write()
3262 ocp_reg_write(tp, OCP_EEE_DATA, data); in r8152_mmd_write()
3263 ocp_reg_write(tp, OCP_EEE_AR, 0x0000); in r8152_mmd_write()
3266 static void r8152_eee_en(struct r8152 *tp, bool enable) in r8152_eee_en() argument
3271 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEE_CR); in r8152_eee_en()
3272 config1 = ocp_reg_read(tp, OCP_EEE_CONFIG1) & ~sd_rise_time_mask; in r8152_eee_en()
3273 config2 = ocp_reg_read(tp, OCP_EEE_CONFIG2); in r8152_eee_en()
3274 config3 = ocp_reg_read(tp, OCP_EEE_CONFIG3) & ~fast_snr_mask; in r8152_eee_en()
3291 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEE_CR, ocp_data); in r8152_eee_en()
3292 ocp_reg_write(tp, OCP_EEE_CONFIG1, config1); in r8152_eee_en()
3293 ocp_reg_write(tp, OCP_EEE_CONFIG2, config2); in r8152_eee_en()
3294 ocp_reg_write(tp, OCP_EEE_CONFIG3, config3); in r8152_eee_en()
3297 static void r8153_eee_en(struct r8152 *tp, bool enable) in r8153_eee_en() argument
3302 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEE_CR); in r8153_eee_en()
3303 config = ocp_reg_read(tp, OCP_EEE_CFG); in r8153_eee_en()
3313 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEE_CR, ocp_data); in r8153_eee_en()
3314 ocp_reg_write(tp, OCP_EEE_CFG, config); in r8153_eee_en()
3316 tp->ups_info.eee = enable; in r8153_eee_en()
3319 static void rtl_eee_enable(struct r8152 *tp, bool enable) in rtl_eee_enable() argument
3321 switch (tp->version) { in rtl_eee_enable()
3326 r8152_eee_en(tp, true); in rtl_eee_enable()
3327 r8152_mmd_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, in rtl_eee_enable()
3328 tp->eee_adv); in rtl_eee_enable()
3330 r8152_eee_en(tp, false); in rtl_eee_enable()
3331 r8152_mmd_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, 0); in rtl_eee_enable()
3341 r8153_eee_en(tp, true); in rtl_eee_enable()
3342 ocp_reg_write(tp, OCP_EEE_ADV, tp->eee_adv); in rtl_eee_enable()
3344 r8153_eee_en(tp, false); in rtl_eee_enable()
3345 ocp_reg_write(tp, OCP_EEE_ADV, 0); in rtl_eee_enable()
3353 static void r8152b_enable_fc(struct r8152 *tp) in r8152b_enable_fc() argument
3357 anar = r8152_mdio_read(tp, MII_ADVERTISE); in r8152b_enable_fc()
3359 r8152_mdio_write(tp, MII_ADVERTISE, anar); in r8152b_enable_fc()
3361 tp->ups_info.flow_control = true; in r8152b_enable_fc()
3364 static void rtl8152_disable(struct r8152 *tp) in rtl8152_disable() argument
3366 r8152_aldps_en(tp, false); in rtl8152_disable()
3367 rtl_disable(tp); in rtl8152_disable()
3368 r8152_aldps_en(tp, true); in rtl8152_disable()
3371 static void r8152b_hw_phy_cfg(struct r8152 *tp) in r8152b_hw_phy_cfg() argument
3373 rtl_eee_enable(tp, tp->eee_en); in r8152b_hw_phy_cfg()
3374 r8152_aldps_en(tp, true); in r8152b_hw_phy_cfg()
3375 r8152b_enable_fc(tp); in r8152b_hw_phy_cfg()
3377 set_bit(PHY_RESET, &tp->flags); in r8152b_hw_phy_cfg()
3380 static void r8152b_exit_oob(struct r8152 *tp) in r8152b_exit_oob() argument
3385 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in r8152b_exit_oob()
3387 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in r8152b_exit_oob()
3389 rxdy_gated_en(tp, true); in r8152b_exit_oob()
3390 r8153_teredo_off(tp); in r8152b_exit_oob()
3391 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); in r8152b_exit_oob()
3392 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, 0x00); in r8152b_exit_oob()
3394 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8152b_exit_oob()
3396 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8152b_exit_oob()
3398 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8152b_exit_oob()
3400 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8152b_exit_oob()
3403 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8152b_exit_oob()
3409 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8152b_exit_oob()
3411 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8152b_exit_oob()
3414 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8152b_exit_oob()
3420 rtl8152_nic_reset(tp); in r8152b_exit_oob()
3423 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL0, RXFIFO_THR1_NORMAL); in r8152b_exit_oob()
3425 if (tp->udev->speed == USB_SPEED_FULL || in r8152b_exit_oob()
3426 tp->udev->speed == USB_SPEED_LOW) { in r8152b_exit_oob()
3428 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, in r8152b_exit_oob()
3430 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, in r8152b_exit_oob()
3434 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, in r8152b_exit_oob()
3436 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, in r8152b_exit_oob()
3441 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_TXFIFO_CTRL, TXFIFO_THR_NORMAL); in r8152b_exit_oob()
3443 ocp_write_byte(tp, MCU_TYPE_USB, USB_TX_AGG, TX_AGG_MAX_THRESHOLD); in r8152b_exit_oob()
3444 ocp_write_dword(tp, MCU_TYPE_USB, USB_RX_BUF_TH, RX_THR_HIGH); in r8152b_exit_oob()
3445 ocp_write_dword(tp, MCU_TYPE_USB, USB_TX_DMA, in r8152b_exit_oob()
3448 rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX); in r8152b_exit_oob()
3450 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, RTL8152_RMS); in r8152b_exit_oob()
3452 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR0); in r8152b_exit_oob()
3454 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TCR0, ocp_data); in r8152b_exit_oob()
3457 static void r8152b_enter_oob(struct r8152 *tp) in r8152b_enter_oob() argument
3462 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8152b_enter_oob()
3464 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8152b_enter_oob()
3466 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL0, RXFIFO_THR1_OOB); in r8152b_enter_oob()
3467 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, RXFIFO_THR2_OOB); in r8152b_enter_oob()
3468 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, RXFIFO_THR3_OOB); in r8152b_enter_oob()
3470 rtl_disable(tp); in r8152b_enter_oob()
3473 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8152b_enter_oob()
3479 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8152b_enter_oob()
3481 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8152b_enter_oob()
3484 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8152b_enter_oob()
3490 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, RTL8152_RMS); in r8152b_enter_oob()
3492 rtl_rx_vlan_en(tp, true); in r8152b_enter_oob()
3494 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_BDC_CR); in r8152b_enter_oob()
3496 ocp_write_word(tp, MCU_TYPE_PLA, PLA_BDC_CR, ocp_data); in r8152b_enter_oob()
3498 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8152b_enter_oob()
3500 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8152b_enter_oob()
3502 rxdy_gated_en(tp, false); in r8152b_enter_oob()
3504 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in r8152b_enter_oob()
3506 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in r8152b_enter_oob()
3509 static int r8153_patch_request(struct r8152 *tp, bool request) in r8153_patch_request() argument
3514 data = ocp_reg_read(tp, OCP_PHY_PATCH_CMD); in r8153_patch_request()
3519 ocp_reg_write(tp, OCP_PHY_PATCH_CMD, data); in r8153_patch_request()
3523 if (ocp_reg_read(tp, OCP_PHY_PATCH_STAT) & PATCH_READY) in r8153_patch_request()
3527 if (request && !(ocp_reg_read(tp, OCP_PHY_PATCH_STAT) & PATCH_READY)) { in r8153_patch_request()
3528 netif_err(tp, drv, tp->netdev, "patch request fail\n"); in r8153_patch_request()
3529 r8153_patch_request(tp, false); in r8153_patch_request()
3536 static void r8153_aldps_en(struct r8152 *tp, bool enable) in r8153_aldps_en() argument
3540 data = ocp_reg_read(tp, OCP_POWER_CFG); in r8153_aldps_en()
3543 ocp_reg_write(tp, OCP_POWER_CFG, data); in r8153_aldps_en()
3548 ocp_reg_write(tp, OCP_POWER_CFG, data); in r8153_aldps_en()
3551 if (ocp_read_word(tp, MCU_TYPE_PLA, 0xe000) & 0x0100) in r8153_aldps_en()
3556 tp->ups_info.aldps = enable; in r8153_aldps_en()
3559 static void r8153_hw_phy_cfg(struct r8152 *tp) in r8153_hw_phy_cfg() argument
3565 r8153_aldps_en(tp, false); in r8153_hw_phy_cfg()
3568 rtl_eee_enable(tp, false); in r8153_hw_phy_cfg()
3570 if (tp->version == RTL_VER_03) { in r8153_hw_phy_cfg()
3571 data = ocp_reg_read(tp, OCP_EEE_CFG); in r8153_hw_phy_cfg()
3573 ocp_reg_write(tp, OCP_EEE_CFG, data); in r8153_hw_phy_cfg()
3576 data = ocp_reg_read(tp, OCP_POWER_CFG); in r8153_hw_phy_cfg()
3578 ocp_reg_write(tp, OCP_POWER_CFG, data); in r8153_hw_phy_cfg()
3580 data = ocp_reg_read(tp, OCP_DOWN_SPEED); in r8153_hw_phy_cfg()
3582 ocp_reg_write(tp, OCP_DOWN_SPEED, data); in r8153_hw_phy_cfg()
3583 data = ocp_reg_read(tp, OCP_POWER_CFG); in r8153_hw_phy_cfg()
3585 ocp_reg_write(tp, OCP_POWER_CFG, data); in r8153_hw_phy_cfg()
3586 sram_write(tp, SRAM_IMPEDANCE, 0x0b13); in r8153_hw_phy_cfg()
3588 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR); in r8153_hw_phy_cfg()
3590 ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data); in r8153_hw_phy_cfg()
3593 sram_write(tp, SRAM_LPF_CFG, 0xf70f); in r8153_hw_phy_cfg()
3596 sram_write(tp, SRAM_10M_AMP1, 0x00af); in r8153_hw_phy_cfg()
3597 sram_write(tp, SRAM_10M_AMP2, 0x0208); in r8153_hw_phy_cfg()
3599 if (tp->eee_en) in r8153_hw_phy_cfg()
3600 rtl_eee_enable(tp, true); in r8153_hw_phy_cfg()
3602 r8153_aldps_en(tp, true); in r8153_hw_phy_cfg()
3603 r8152b_enable_fc(tp); in r8153_hw_phy_cfg()
3605 switch (tp->version) { in r8153_hw_phy_cfg()
3612 r8153_u2p3en(tp, true); in r8153_hw_phy_cfg()
3616 set_bit(PHY_RESET, &tp->flags); in r8153_hw_phy_cfg()
3619 static u32 r8152_efuse_read(struct r8152 *tp, u8 addr) in r8152_efuse_read() argument
3623 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EFUSE_CMD, EFUSE_READ_CMD | addr); in r8152_efuse_read()
3624 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EFUSE_CMD); in r8152_efuse_read()
3626 ocp_data |= ocp_read_word(tp, MCU_TYPE_PLA, PLA_EFUSE_DATA); in r8152_efuse_read()
3631 static void r8153b_hw_phy_cfg(struct r8152 *tp) in r8153b_hw_phy_cfg() argument
3637 r8153_aldps_en(tp, false); in r8153b_hw_phy_cfg()
3640 rtl_eee_enable(tp, false); in r8153b_hw_phy_cfg()
3642 r8153b_green_en(tp, test_bit(GREEN_ETHERNET, &tp->flags)); in r8153b_hw_phy_cfg()
3644 data = sram_read(tp, SRAM_GREEN_CFG); in r8153b_hw_phy_cfg()
3646 sram_write(tp, SRAM_GREEN_CFG, data); in r8153b_hw_phy_cfg()
3647 data = ocp_reg_read(tp, OCP_NCTL_CFG); in r8153b_hw_phy_cfg()
3649 ocp_reg_write(tp, OCP_NCTL_CFG, data); in r8153b_hw_phy_cfg()
3656 ocp_data = r8152_efuse_read(tp, 0x7d); in r8153b_hw_phy_cfg()
3659 ocp_reg_write(tp, OCP_ADC_IOFFSET, data); in r8153b_hw_phy_cfg()
3665 ocp_data = ocp_reg_read(tp, 0xc426); in r8153b_hw_phy_cfg()
3671 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_UPS_CFG); in r8153b_hw_phy_cfg()
3673 ocp_write_word(tp, MCU_TYPE_USB, USB_UPS_CFG, ocp_data); in r8153b_hw_phy_cfg()
3676 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR); in r8153b_hw_phy_cfg()
3678 ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data); in r8153b_hw_phy_cfg()
3681 if (!r8153_patch_request(tp, true)) { in r8153b_hw_phy_cfg()
3682 data = ocp_reg_read(tp, OCP_POWER_CFG); in r8153b_hw_phy_cfg()
3684 ocp_reg_write(tp, OCP_POWER_CFG, data); in r8153b_hw_phy_cfg()
3685 tp->ups_info.eee_ckdiv = true; in r8153b_hw_phy_cfg()
3687 data = ocp_reg_read(tp, OCP_DOWN_SPEED); in r8153b_hw_phy_cfg()
3689 ocp_reg_write(tp, OCP_DOWN_SPEED, data); in r8153b_hw_phy_cfg()
3690 tp->ups_info.eee_cmod_lv = true; in r8153b_hw_phy_cfg()
3691 tp->ups_info._10m_ckdiv = true; in r8153b_hw_phy_cfg()
3692 tp->ups_info.eee_plloff_giga = true; in r8153b_hw_phy_cfg()
3694 ocp_reg_write(tp, OCP_SYSCLK_CFG, 0); in r8153b_hw_phy_cfg()
3695 ocp_reg_write(tp, OCP_SYSCLK_CFG, clk_div_expo(5)); in r8153b_hw_phy_cfg()
3696 tp->ups_info._250m_ckdiv = true; in r8153b_hw_phy_cfg()
3698 r8153_patch_request(tp, false); in r8153b_hw_phy_cfg()
3701 if (tp->eee_en) in r8153b_hw_phy_cfg()
3702 rtl_eee_enable(tp, true); in r8153b_hw_phy_cfg()
3704 r8153_aldps_en(tp, true); in r8153b_hw_phy_cfg()
3705 r8152b_enable_fc(tp); in r8153b_hw_phy_cfg()
3706 r8153_u2p3en(tp, true); in r8153b_hw_phy_cfg()
3708 set_bit(PHY_RESET, &tp->flags); in r8153b_hw_phy_cfg()
3711 static void r8153_first_init(struct r8152 *tp) in r8153_first_init() argument
3716 r8153_mac_clk_spd(tp, false); in r8153_first_init()
3717 rxdy_gated_en(tp, true); in r8153_first_init()
3718 r8153_teredo_off(tp); in r8153_first_init()
3720 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in r8153_first_init()
3722 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in r8153_first_init()
3724 rtl8152_nic_reset(tp); in r8153_first_init()
3725 rtl_reset_bmu(tp); in r8153_first_init()
3727 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8153_first_init()
3729 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8153_first_init()
3731 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8153_first_init()
3733 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8153_first_init()
3736 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8153_first_init()
3742 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8153_first_init()
3744 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8153_first_init()
3747 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8153_first_init()
3753 rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX); in r8153_first_init()
3755 ocp_data = tp->netdev->mtu + VLAN_ETH_HLEN + ETH_FCS_LEN; in r8153_first_init()
3756 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, ocp_data); in r8153_first_init()
3757 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_MTPS, MTPS_JUMBO); in r8153_first_init()
3759 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR0); in r8153_first_init()
3761 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TCR0, ocp_data); in r8153_first_init()
3763 rtl8152_nic_reset(tp); in r8153_first_init()
3766 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL0, RXFIFO_THR1_NORMAL); in r8153_first_init()
3767 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, RXFIFO_THR2_NORMAL); in r8153_first_init()
3768 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, RXFIFO_THR3_NORMAL); in r8153_first_init()
3770 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_TXFIFO_CTRL, TXFIFO_THR_NORMAL2); in r8153_first_init()
3773 static void r8153_enter_oob(struct r8152 *tp) in r8153_enter_oob() argument
3778 r8153_mac_clk_spd(tp, true); in r8153_enter_oob()
3780 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8153_enter_oob()
3782 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8153_enter_oob()
3784 rtl_disable(tp); in r8153_enter_oob()
3785 rtl_reset_bmu(tp); in r8153_enter_oob()
3788 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8153_enter_oob()
3794 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8153_enter_oob()
3796 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8153_enter_oob()
3799 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8153_enter_oob()
3805 ocp_data = tp->netdev->mtu + VLAN_ETH_HLEN + ETH_FCS_LEN; in r8153_enter_oob()
3806 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, ocp_data); in r8153_enter_oob()
3808 switch (tp->version) { in r8153_enter_oob()
3813 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG); in r8153_enter_oob()
3815 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG, ocp_data); in r8153_enter_oob()
3824 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TEREDO_WAKE_BASE, 0x00ff); in r8153_enter_oob()
3831 rtl_rx_vlan_en(tp, true); in r8153_enter_oob()
3833 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_BDC_CR); in r8153_enter_oob()
3835 ocp_write_word(tp, MCU_TYPE_PLA, PLA_BDC_CR, ocp_data); in r8153_enter_oob()
3837 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8153_enter_oob()
3839 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8153_enter_oob()
3841 rxdy_gated_en(tp, false); in r8153_enter_oob()
3843 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in r8153_enter_oob()
3845 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in r8153_enter_oob()
3848 static void rtl8153_disable(struct r8152 *tp) in rtl8153_disable() argument
3850 r8153_aldps_en(tp, false); in rtl8153_disable()
3851 rtl_disable(tp); in rtl8153_disable()
3852 rtl_reset_bmu(tp); in rtl8153_disable()
3853 r8153_aldps_en(tp, true); in rtl8153_disable()
3856 static int rtl8152_set_speed(struct r8152 *tp, u8 autoneg, u32 speed, u8 duplex, in rtl8152_set_speed() argument
3871 tp->ups_info.speed_duplex = FORCE_10M_FULL; in rtl8152_set_speed()
3873 tp->ups_info.speed_duplex = FORCE_10M_HALF; in rtl8152_set_speed()
3880 tp->ups_info.speed_duplex = FORCE_100M_FULL; in rtl8152_set_speed()
3882 tp->ups_info.speed_duplex = FORCE_100M_HALF; in rtl8152_set_speed()
3886 if (tp->mii.supports_gmii) { in rtl8152_set_speed()
3888 tp->ups_info.speed_duplex = NWAY_1000M_FULL; in rtl8152_set_speed()
3898 tp->mii.full_duplex = 1; in rtl8152_set_speed()
3900 tp->mii.full_duplex = 0; in rtl8152_set_speed()
3902 tp->mii.force_media = 1; in rtl8152_set_speed()
3910 if (tp->mii.supports_gmii) in rtl8152_set_speed()
3916 anar = r8152_mdio_read(tp, MII_ADVERTISE); in rtl8152_set_speed()
3921 tp->ups_info.speed_duplex = NWAY_10M_HALF; in rtl8152_set_speed()
3925 tp->ups_info.speed_duplex = NWAY_10M_FULL; in rtl8152_set_speed()
3930 tp->ups_info.speed_duplex = NWAY_100M_HALF; in rtl8152_set_speed()
3934 tp->ups_info.speed_duplex = NWAY_100M_FULL; in rtl8152_set_speed()
3938 r8152_mdio_write(tp, MII_ADVERTISE, tmp1); in rtl8152_set_speed()
3939 tp->mii.advertising = tmp1; in rtl8152_set_speed()
3942 if (tp->mii.supports_gmii) { in rtl8152_set_speed()
3945 gbcr = r8152_mdio_read(tp, MII_CTRL1000); in rtl8152_set_speed()
3951 tp->ups_info.speed_duplex = NWAY_1000M_FULL; in rtl8152_set_speed()
3955 r8152_mdio_write(tp, MII_CTRL1000, tmp1); in rtl8152_set_speed()
3960 tp->mii.force_media = 0; in rtl8152_set_speed()
3963 if (test_and_clear_bit(PHY_RESET, &tp->flags)) in rtl8152_set_speed()
3966 r8152_mdio_write(tp, MII_BMCR, bmcr); in rtl8152_set_speed()
3973 if ((r8152_mdio_read(tp, MII_BMCR) & BMCR_RESET) == 0) in rtl8152_set_speed()
3982 static void rtl8152_up(struct r8152 *tp) in rtl8152_up() argument
3984 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8152_up()
3987 r8152_aldps_en(tp, false); in rtl8152_up()
3988 r8152b_exit_oob(tp); in rtl8152_up()
3989 r8152_aldps_en(tp, true); in rtl8152_up()
3992 static void rtl8152_down(struct r8152 *tp) in rtl8152_down() argument
3994 if (test_bit(RTL8152_UNPLUG, &tp->flags)) { in rtl8152_down()
3995 rtl_drop_queued_tx(tp); in rtl8152_down()
3999 r8152_power_cut_en(tp, false); in rtl8152_down()
4000 r8152_aldps_en(tp, false); in rtl8152_down()
4001 r8152b_enter_oob(tp); in rtl8152_down()
4002 r8152_aldps_en(tp, true); in rtl8152_down()
4005 static void rtl8153_up(struct r8152 *tp) in rtl8153_up() argument
4007 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8153_up()
4010 r8153_u1u2en(tp, false); in rtl8153_up()
4011 r8153_u2p3en(tp, false); in rtl8153_up()
4012 r8153_aldps_en(tp, false); in rtl8153_up()
4013 r8153_first_init(tp); in rtl8153_up()
4014 r8153_aldps_en(tp, true); in rtl8153_up()
4016 switch (tp->version) { in rtl8153_up()
4023 r8153_u2p3en(tp, true); in rtl8153_up()
4027 r8153_u1u2en(tp, true); in rtl8153_up()
4030 static void rtl8153_down(struct r8152 *tp) in rtl8153_down() argument
4032 if (test_bit(RTL8152_UNPLUG, &tp->flags)) { in rtl8153_down()
4033 rtl_drop_queued_tx(tp); in rtl8153_down()
4037 r8153_u1u2en(tp, false); in rtl8153_down()
4038 r8153_u2p3en(tp, false); in rtl8153_down()
4039 r8153_power_cut_en(tp, false); in rtl8153_down()
4040 r8153_aldps_en(tp, false); in rtl8153_down()
4041 r8153_enter_oob(tp); in rtl8153_down()
4042 r8153_aldps_en(tp, true); in rtl8153_down()
4045 static void rtl8153b_up(struct r8152 *tp) in rtl8153b_up() argument
4047 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8153b_up()
4050 r8153b_u1u2en(tp, false); in rtl8153b_up()
4051 r8153_u2p3en(tp, false); in rtl8153b_up()
4052 r8153_aldps_en(tp, false); in rtl8153b_up()
4054 r8153_first_init(tp); in rtl8153b_up()
4055 ocp_write_dword(tp, MCU_TYPE_USB, USB_RX_BUF_TH, RX_THR_B); in rtl8153b_up()
4057 r8153_aldps_en(tp, true); in rtl8153b_up()
4058 r8153_u2p3en(tp, true); in rtl8153b_up()
4059 r8153b_u1u2en(tp, true); in rtl8153b_up()
4062 static void rtl8153b_down(struct r8152 *tp) in rtl8153b_down() argument
4064 if (test_bit(RTL8152_UNPLUG, &tp->flags)) { in rtl8153b_down()
4065 rtl_drop_queued_tx(tp); in rtl8153b_down()
4069 r8153b_u1u2en(tp, false); in rtl8153b_down()
4070 r8153_u2p3en(tp, false); in rtl8153b_down()
4071 r8153b_power_cut_en(tp, false); in rtl8153b_down()
4072 r8153_aldps_en(tp, false); in rtl8153b_down()
4073 r8153_enter_oob(tp); in rtl8153b_down()
4074 r8153_aldps_en(tp, true); in rtl8153b_down()
4077 static bool rtl8152_in_nway(struct r8152 *tp) in rtl8152_in_nway() argument
4081 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, 0x2000); in rtl8152_in_nway()
4082 tp->ocp_base = 0x2000; in rtl8152_in_nway()
4083 ocp_write_byte(tp, MCU_TYPE_PLA, 0xb014, 0x4c); /* phy state */ in rtl8152_in_nway()
4084 nway_state = ocp_read_word(tp, MCU_TYPE_PLA, 0xb01a); in rtl8152_in_nway()
4093 static bool rtl8153_in_nway(struct r8152 *tp) in rtl8153_in_nway() argument
4095 u16 phy_state = ocp_reg_read(tp, OCP_PHY_STATE) & 0xff; in rtl8153_in_nway()
4103 static void set_carrier(struct r8152 *tp) in set_carrier() argument
4105 struct net_device *netdev = tp->netdev; in set_carrier()
4106 struct napi_struct *napi = &tp->napi; in set_carrier()
4109 speed = rtl8152_get_speed(tp); in set_carrier()
4113 tp->rtl_ops.enable(tp); in set_carrier()
4117 rtl_start_rx(tp); in set_carrier()
4118 clear_bit(RTL8152_SET_RX_MODE, &tp->flags); in set_carrier()
4120 napi_enable(&tp->napi); in set_carrier()
4122 netif_info(tp, link, netdev, "carrier on\n"); in set_carrier()
4124 skb_queue_len(&tp->tx_queue) < tp->tx_qlen) { in set_carrier()
4130 tasklet_disable(&tp->tx_tl); in set_carrier()
4132 tp->rtl_ops.disable(tp); in set_carrier()
4134 tasklet_enable(&tp->tx_tl); in set_carrier()
4135 netif_info(tp, link, netdev, "carrier off\n"); in set_carrier()
4142 struct r8152 *tp = container_of(work, struct r8152, schedule.work); in rtl_work_func_t() local
4147 if (test_bit(RTL8152_UNPLUG, &tp->flags) || !netif_running(tp->netdev)) in rtl_work_func_t()
4150 if (usb_autopm_get_interface(tp->intf) < 0) in rtl_work_func_t()
4153 if (!test_bit(WORK_ENABLE, &tp->flags)) in rtl_work_func_t()
4156 if (!mutex_trylock(&tp->control)) { in rtl_work_func_t()
4157 schedule_delayed_work(&tp->schedule, 0); in rtl_work_func_t()
4161 if (test_and_clear_bit(RTL8152_LINK_CHG, &tp->flags)) in rtl_work_func_t()
4162 set_carrier(tp); in rtl_work_func_t()
4164 if (test_and_clear_bit(RTL8152_SET_RX_MODE, &tp->flags)) in rtl_work_func_t()
4165 _rtl8152_set_rx_mode(tp->netdev); in rtl_work_func_t()
4168 if (test_and_clear_bit(SCHEDULE_TASKLET, &tp->flags) && in rtl_work_func_t()
4169 netif_carrier_ok(tp->netdev)) in rtl_work_func_t()
4170 tasklet_schedule(&tp->tx_tl); in rtl_work_func_t()
4172 mutex_unlock(&tp->control); in rtl_work_func_t()
4175 usb_autopm_put_interface(tp->intf); in rtl_work_func_t()
4180 struct r8152 *tp = container_of(work, struct r8152, hw_phy_work.work); in rtl_hw_phy_work_func_t() local
4182 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl_hw_phy_work_func_t()
4185 if (usb_autopm_get_interface(tp->intf) < 0) in rtl_hw_phy_work_func_t()
4188 mutex_lock(&tp->control); in rtl_hw_phy_work_func_t()
4190 tp->rtl_ops.hw_phy_cfg(tp); in rtl_hw_phy_work_func_t()
4192 rtl8152_set_speed(tp, tp->autoneg, tp->speed, tp->duplex, in rtl_hw_phy_work_func_t()
4193 tp->advertising); in rtl_hw_phy_work_func_t()
4195 mutex_unlock(&tp->control); in rtl_hw_phy_work_func_t()
4197 usb_autopm_put_interface(tp->intf); in rtl_hw_phy_work_func_t()
4204 struct r8152 *tp = container_of(nb, struct r8152, pm_notifier); in rtl_notifier() local
4209 usb_autopm_get_interface(tp->intf); in rtl_notifier()
4214 usb_autopm_put_interface(tp->intf); in rtl_notifier()
4229 struct r8152 *tp = netdev_priv(netdev); in rtl8152_open() local
4232 res = alloc_all_mem(tp); in rtl8152_open()
4236 res = usb_autopm_get_interface(tp->intf); in rtl8152_open()
4240 mutex_lock(&tp->control); in rtl8152_open()
4242 tp->rtl_ops.up(tp); in rtl8152_open()
4246 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_open()
4248 res = usb_submit_urb(tp->intr_urb, GFP_KERNEL); in rtl8152_open()
4251 netif_device_detach(tp->netdev); in rtl8152_open()
4252 netif_warn(tp, ifup, netdev, "intr_urb submit failed: %d\n", in rtl8152_open()
4256 napi_enable(&tp->napi); in rtl8152_open()
4257 tasklet_enable(&tp->tx_tl); in rtl8152_open()
4259 mutex_unlock(&tp->control); in rtl8152_open()
4261 usb_autopm_put_interface(tp->intf); in rtl8152_open()
4263 tp->pm_notifier.notifier_call = rtl_notifier; in rtl8152_open()
4264 register_pm_notifier(&tp->pm_notifier); in rtl8152_open()
4269 mutex_unlock(&tp->control); in rtl8152_open()
4270 usb_autopm_put_interface(tp->intf); in rtl8152_open()
4272 free_all_mem(tp); in rtl8152_open()
4279 struct r8152 *tp = netdev_priv(netdev); in rtl8152_close() local
4283 unregister_pm_notifier(&tp->pm_notifier); in rtl8152_close()
4285 tasklet_disable(&tp->tx_tl); in rtl8152_close()
4286 clear_bit(WORK_ENABLE, &tp->flags); in rtl8152_close()
4287 usb_kill_urb(tp->intr_urb); in rtl8152_close()
4288 cancel_delayed_work_sync(&tp->schedule); in rtl8152_close()
4289 napi_disable(&tp->napi); in rtl8152_close()
4292 res = usb_autopm_get_interface(tp->intf); in rtl8152_close()
4293 if (res < 0 || test_bit(RTL8152_UNPLUG, &tp->flags)) { in rtl8152_close()
4294 rtl_drop_queued_tx(tp); in rtl8152_close()
4295 rtl_stop_rx(tp); in rtl8152_close()
4297 mutex_lock(&tp->control); in rtl8152_close()
4299 tp->rtl_ops.down(tp); in rtl8152_close()
4301 mutex_unlock(&tp->control); in rtl8152_close()
4303 usb_autopm_put_interface(tp->intf); in rtl8152_close()
4306 free_all_mem(tp); in rtl8152_close()
4311 static void rtl_tally_reset(struct r8152 *tp) in rtl_tally_reset() argument
4315 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_RSTTALLY); in rtl_tally_reset()
4317 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RSTTALLY, ocp_data); in rtl_tally_reset()
4320 static void r8152b_init(struct r8152 *tp) in r8152b_init() argument
4325 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8152b_init()
4328 data = r8152_mdio_read(tp, MII_BMCR); in r8152b_init()
4331 r8152_mdio_write(tp, MII_BMCR, data); in r8152b_init()
4334 r8152_aldps_en(tp, false); in r8152b_init()
4336 if (tp->version == RTL_VER_01) { in r8152b_init()
4337 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE); in r8152b_init()
4339 ocp_write_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE, ocp_data); in r8152b_init()
4342 r8152_power_cut_en(tp, false); in r8152b_init()
4344 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR); in r8152b_init()
4346 ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data); in r8152b_init()
4347 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL); in r8152b_init()
4350 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL, ocp_data); in r8152b_init()
4353 ocp_write_word(tp, MCU_TYPE_PLA, PLA_GPHY_INTR_IMR, ocp_data); in r8152b_init()
4355 rtl_tally_reset(tp); in r8152b_init()
4358 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL); in r8152b_init()
4360 ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data); in r8152b_init()
4363 static void r8153_init(struct r8152 *tp) in r8153_init() argument
4369 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8153_init()
4372 r8153_u1u2en(tp, false); in r8153_init()
4375 if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_BOOT_CTRL) & in r8153_init()
4381 data = r8153_phy_status(tp, 0); in r8153_init()
4383 if (tp->version == RTL_VER_03 || tp->version == RTL_VER_04 || in r8153_init()
4384 tp->version == RTL_VER_05) in r8153_init()
4385 ocp_reg_write(tp, OCP_ADC_CFG, CKADSEL_L | ADC_EN | EN_EMI_L); in r8153_init()
4387 data = r8152_mdio_read(tp, MII_BMCR); in r8153_init()
4390 r8152_mdio_write(tp, MII_BMCR, data); in r8153_init()
4393 data = r8153_phy_status(tp, PHY_STAT_LAN_ON); in r8153_init()
4395 r8153_u2p3en(tp, false); in r8153_init()
4397 if (tp->version == RTL_VER_04) { in r8153_init()
4398 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_SSPHYLINK2); in r8153_init()
4401 ocp_write_word(tp, MCU_TYPE_USB, USB_SSPHYLINK2, ocp_data); in r8153_init()
4403 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_USB2PHY); in r8153_init()
4405 ocp_write_byte(tp, MCU_TYPE_USB, USB_USB2PHY, ocp_data); in r8153_init()
4406 } else if (tp->version == RTL_VER_05) { in r8153_init()
4407 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_DMY_REG0); in r8153_init()
4409 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_DMY_REG0, ocp_data); in r8153_init()
4411 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY1); in r8153_init()
4412 if (ocp_read_word(tp, MCU_TYPE_USB, USB_BURST_SIZE) == 0) in r8153_init()
4416 ocp_write_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY1, ocp_data); in r8153_init()
4417 } else if (tp->version == RTL_VER_06) { in r8153_init()
4418 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY1); in r8153_init()
4419 if (ocp_read_word(tp, MCU_TYPE_USB, USB_BURST_SIZE) == 0) in r8153_init()
4423 ocp_write_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY1, ocp_data); in r8153_init()
4426 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY2); in r8153_init()
4428 ocp_write_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY2, ocp_data); in r8153_init()
4430 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_WDT11_CTRL); in r8153_init()
4432 ocp_write_word(tp, MCU_TYPE_USB, USB_WDT11_CTRL, ocp_data); in r8153_init()
4434 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE); in r8153_init()
4436 ocp_write_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE, ocp_data); in r8153_init()
4439 if (tp->version == RTL_VER_04 && tp->udev->speed < USB_SPEED_SUPER) in r8153_init()
4443 ocp_write_byte(tp, MCU_TYPE_USB, USB_LPM_CTRL, ocp_data); in r8153_init()
4445 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_AFE_CTRL2); in r8153_init()
4448 ocp_write_word(tp, MCU_TYPE_USB, USB_AFE_CTRL2, ocp_data); in r8153_init()
4450 ocp_write_word(tp, MCU_TYPE_USB, USB_CONNECT_TIMER, 0x0001); in r8153_init()
4452 r8153_power_cut_en(tp, false); in r8153_init()
4453 r8153_u1u2en(tp, true); in r8153_init()
4454 r8153_mac_clk_spd(tp, false); in r8153_init()
4455 usb_enable_lpm(tp->udev); in r8153_init()
4458 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL); in r8153_init()
4460 if (test_bit(DELL_TB_RX_AGG_BUG, &tp->flags)) in r8153_init()
4463 ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data); in r8153_init()
4465 rtl_tally_reset(tp); in r8153_init()
4467 switch (tp->udev->speed) { in r8153_init()
4470 tp->coalesce = COALESCE_SUPER; in r8153_init()
4473 tp->coalesce = COALESCE_HIGH; in r8153_init()
4476 tp->coalesce = COALESCE_SLOW; in r8153_init()
4481 static void r8153b_init(struct r8152 *tp) in r8153b_init() argument
4487 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8153b_init()
4490 r8153b_u1u2en(tp, false); in r8153b_init()
4493 if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_BOOT_CTRL) & in r8153b_init()
4499 data = r8153_phy_status(tp, 0); in r8153b_init()
4501 data = r8152_mdio_read(tp, MII_BMCR); in r8153b_init()
4504 r8152_mdio_write(tp, MII_BMCR, data); in r8153b_init()
4507 data = r8153_phy_status(tp, PHY_STAT_LAN_ON); in r8153b_init()
4509 r8153_u2p3en(tp, false); in r8153b_init()
4512 ocp_write_word(tp, MCU_TYPE_USB, USB_MSC_TIMER, 0x0fff); in r8153b_init()
4515 ocp_write_word(tp, MCU_TYPE_USB, USB_U1U2_TIMER, 500); in r8153b_init()
4517 r8153b_power_cut_en(tp, false); in r8153b_init()
4518 r8153b_ups_en(tp, false); in r8153b_init()
4519 r8153_queue_wake(tp, false); in r8153b_init()
4520 rtl_runtime_suspend_enable(tp, false); in r8153b_init()
4521 r8153b_u1u2en(tp, true); in r8153b_init()
4522 usb_enable_lpm(tp->udev); in r8153b_init()
4525 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL2); in r8153b_init()
4527 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL2, ocp_data); in r8153b_init()
4529 set_bit(GREEN_ETHERNET, &tp->flags); in r8153b_init()
4532 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL); in r8153b_init()
4534 ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data); in r8153b_init()
4536 rtl_tally_reset(tp); in r8153b_init()
4538 tp->coalesce = 15000; /* 15 us */ in r8153b_init()
4543 struct r8152 *tp = usb_get_intfdata(intf); in rtl8152_pre_reset() local
4546 if (!tp) in rtl8152_pre_reset()
4549 netdev = tp->netdev; in rtl8152_pre_reset()
4554 tasklet_disable(&tp->tx_tl); in rtl8152_pre_reset()
4555 clear_bit(WORK_ENABLE, &tp->flags); in rtl8152_pre_reset()
4556 usb_kill_urb(tp->intr_urb); in rtl8152_pre_reset()
4557 cancel_delayed_work_sync(&tp->schedule); in rtl8152_pre_reset()
4558 napi_disable(&tp->napi); in rtl8152_pre_reset()
4560 mutex_lock(&tp->control); in rtl8152_pre_reset()
4561 tp->rtl_ops.disable(tp); in rtl8152_pre_reset()
4562 mutex_unlock(&tp->control); in rtl8152_pre_reset()
4570 struct r8152 *tp = usb_get_intfdata(intf); in rtl8152_post_reset() local
4574 if (!tp) in rtl8152_post_reset()
4578 if (determine_ethernet_addr(tp, &sa) >= 0) { in rtl8152_post_reset()
4580 dev_set_mac_address (tp->netdev, &sa, NULL); in rtl8152_post_reset()
4584 netdev = tp->netdev; in rtl8152_post_reset()
4588 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_post_reset()
4590 mutex_lock(&tp->control); in rtl8152_post_reset()
4591 tp->rtl_ops.enable(tp); in rtl8152_post_reset()
4592 rtl_start_rx(tp); in rtl8152_post_reset()
4594 mutex_unlock(&tp->control); in rtl8152_post_reset()
4597 napi_enable(&tp->napi); in rtl8152_post_reset()
4598 tasklet_enable(&tp->tx_tl); in rtl8152_post_reset()
4600 usb_submit_urb(tp->intr_urb, GFP_KERNEL); in rtl8152_post_reset()
4602 if (!list_empty(&tp->rx_done)) in rtl8152_post_reset()
4603 napi_schedule(&tp->napi); in rtl8152_post_reset()
4608 static bool delay_autosuspend(struct r8152 *tp) in delay_autosuspend() argument
4610 bool sw_linking = !!netif_carrier_ok(tp->netdev); in delay_autosuspend()
4611 bool hw_linking = !!(rtl8152_get_speed(tp) & LINK_STATUS); in delay_autosuspend()
4617 if (work_busy(&tp->schedule.work) || sw_linking != hw_linking) in delay_autosuspend()
4623 if (!sw_linking && tp->rtl_ops.in_nway(tp)) in delay_autosuspend()
4625 else if (!skb_queue_empty(&tp->tx_queue)) in delay_autosuspend()
4631 static int rtl8152_runtime_resume(struct r8152 *tp) in rtl8152_runtime_resume() argument
4633 struct net_device *netdev = tp->netdev; in rtl8152_runtime_resume()
4636 struct napi_struct *napi = &tp->napi; in rtl8152_runtime_resume()
4638 tp->rtl_ops.autosuspend_en(tp, false); in rtl8152_runtime_resume()
4640 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_runtime_resume()
4643 if (rtl8152_get_speed(tp) & LINK_STATUS) { in rtl8152_runtime_resume()
4644 rtl_start_rx(tp); in rtl8152_runtime_resume()
4647 tp->rtl_ops.disable(tp); in rtl8152_runtime_resume()
4648 netif_info(tp, link, netdev, "linking down\n"); in rtl8152_runtime_resume()
4653 clear_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_runtime_resume()
4656 if (!list_empty(&tp->rx_done)) in rtl8152_runtime_resume()
4657 napi_schedule(&tp->napi); in rtl8152_runtime_resume()
4659 usb_submit_urb(tp->intr_urb, GFP_NOIO); in rtl8152_runtime_resume()
4662 tp->rtl_ops.autosuspend_en(tp, false); in rtl8152_runtime_resume()
4664 clear_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_runtime_resume()
4670 static int rtl8152_system_resume(struct r8152 *tp) in rtl8152_system_resume() argument
4672 struct net_device *netdev = tp->netdev; in rtl8152_system_resume()
4677 tp->rtl_ops.up(tp); in rtl8152_system_resume()
4679 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_system_resume()
4680 usb_submit_urb(tp->intr_urb, GFP_NOIO); in rtl8152_system_resume()
4686 static int rtl8152_runtime_suspend(struct r8152 *tp) in rtl8152_runtime_suspend() argument
4688 struct net_device *netdev = tp->netdev; in rtl8152_runtime_suspend()
4691 set_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_runtime_suspend()
4694 if (netif_running(netdev) && test_bit(WORK_ENABLE, &tp->flags)) { in rtl8152_runtime_suspend()
4700 rcr = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in rtl8152_runtime_suspend()
4702 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in rtl8152_runtime_suspend()
4703 rxdy_gated_en(tp, true); in rtl8152_runtime_suspend()
4704 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, in rtl8152_runtime_suspend()
4707 rxdy_gated_en(tp, false); in rtl8152_runtime_suspend()
4708 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, rcr); in rtl8152_runtime_suspend()
4709 clear_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_runtime_suspend()
4716 clear_bit(WORK_ENABLE, &tp->flags); in rtl8152_runtime_suspend()
4717 usb_kill_urb(tp->intr_urb); in rtl8152_runtime_suspend()
4719 tp->rtl_ops.autosuspend_en(tp, true); in rtl8152_runtime_suspend()
4722 struct napi_struct *napi = &tp->napi; in rtl8152_runtime_suspend()
4725 rtl_stop_rx(tp); in rtl8152_runtime_suspend()
4726 rxdy_gated_en(tp, false); in rtl8152_runtime_suspend()
4727 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, rcr); in rtl8152_runtime_suspend()
4731 if (delay_autosuspend(tp)) { in rtl8152_runtime_suspend()
4732 rtl8152_runtime_resume(tp); in rtl8152_runtime_suspend()
4741 static int rtl8152_system_suspend(struct r8152 *tp) in rtl8152_system_suspend() argument
4743 struct net_device *netdev = tp->netdev; in rtl8152_system_suspend()
4747 if (netif_running(netdev) && test_bit(WORK_ENABLE, &tp->flags)) { in rtl8152_system_suspend()
4748 struct napi_struct *napi = &tp->napi; in rtl8152_system_suspend()
4750 clear_bit(WORK_ENABLE, &tp->flags); in rtl8152_system_suspend()
4751 usb_kill_urb(tp->intr_urb); in rtl8152_system_suspend()
4752 tasklet_disable(&tp->tx_tl); in rtl8152_system_suspend()
4754 cancel_delayed_work_sync(&tp->schedule); in rtl8152_system_suspend()
4755 tp->rtl_ops.down(tp); in rtl8152_system_suspend()
4757 tasklet_enable(&tp->tx_tl); in rtl8152_system_suspend()
4765 struct r8152 *tp = usb_get_intfdata(intf); in rtl8152_suspend() local
4768 mutex_lock(&tp->control); in rtl8152_suspend()
4771 ret = rtl8152_runtime_suspend(tp); in rtl8152_suspend()
4773 ret = rtl8152_system_suspend(tp); in rtl8152_suspend()
4775 mutex_unlock(&tp->control); in rtl8152_suspend()
4782 struct r8152 *tp = usb_get_intfdata(intf); in rtl8152_resume() local
4785 mutex_lock(&tp->control); in rtl8152_resume()
4787 if (test_bit(SELECTIVE_SUSPEND, &tp->flags)) in rtl8152_resume()
4788 ret = rtl8152_runtime_resume(tp); in rtl8152_resume()
4790 ret = rtl8152_system_resume(tp); in rtl8152_resume()
4792 mutex_unlock(&tp->control); in rtl8152_resume()
4799 struct r8152 *tp = usb_get_intfdata(intf); in rtl8152_reset_resume() local
4801 clear_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_reset_resume()
4802 tp->rtl_ops.init(tp); in rtl8152_reset_resume()
4803 queue_delayed_work(system_long_wq, &tp->hw_phy_work, 0); in rtl8152_reset_resume()
4804 set_ethernet_addr(tp); in rtl8152_reset_resume()
4810 struct r8152 *tp = netdev_priv(dev); in rtl8152_get_wol() local
4812 if (usb_autopm_get_interface(tp->intf) < 0) in rtl8152_get_wol()
4815 if (!rtl_can_wakeup(tp)) { in rtl8152_get_wol()
4819 mutex_lock(&tp->control); in rtl8152_get_wol()
4821 wol->wolopts = __rtl_get_wol(tp); in rtl8152_get_wol()
4822 mutex_unlock(&tp->control); in rtl8152_get_wol()
4825 usb_autopm_put_interface(tp->intf); in rtl8152_get_wol()
4830 struct r8152 *tp = netdev_priv(dev); in rtl8152_set_wol() local
4833 if (!rtl_can_wakeup(tp)) in rtl8152_set_wol()
4839 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_wol()
4843 mutex_lock(&tp->control); in rtl8152_set_wol()
4845 __rtl_set_wol(tp, wol->wolopts); in rtl8152_set_wol()
4846 tp->saved_wolopts = wol->wolopts & WAKE_ANY; in rtl8152_set_wol()
4848 mutex_unlock(&tp->control); in rtl8152_set_wol()
4850 usb_autopm_put_interface(tp->intf); in rtl8152_set_wol()
4858 struct r8152 *tp = netdev_priv(dev); in rtl8152_get_msglevel() local
4860 return tp->msg_enable; in rtl8152_get_msglevel()
4865 struct r8152 *tp = netdev_priv(dev); in rtl8152_set_msglevel() local
4867 tp->msg_enable = value; in rtl8152_set_msglevel()
4873 struct r8152 *tp = netdev_priv(netdev); in rtl8152_get_drvinfo() local
4877 usb_make_path(tp->udev, info->bus_info, sizeof(info->bus_info)); in rtl8152_get_drvinfo()
4884 struct r8152 *tp = netdev_priv(netdev); in rtl8152_get_link_ksettings() local
4887 if (!tp->mii.mdio_read) in rtl8152_get_link_ksettings()
4890 ret = usb_autopm_get_interface(tp->intf); in rtl8152_get_link_ksettings()
4894 mutex_lock(&tp->control); in rtl8152_get_link_ksettings()
4896 mii_ethtool_get_link_ksettings(&tp->mii, cmd); in rtl8152_get_link_ksettings()
4898 mutex_unlock(&tp->control); in rtl8152_get_link_ksettings()
4900 usb_autopm_put_interface(tp->intf); in rtl8152_get_link_ksettings()
4909 struct r8152 *tp = netdev_priv(dev); in rtl8152_set_link_ksettings() local
4913 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_link_ksettings()
4941 mutex_lock(&tp->control); in rtl8152_set_link_ksettings()
4943 ret = rtl8152_set_speed(tp, cmd->base.autoneg, cmd->base.speed, in rtl8152_set_link_ksettings()
4946 tp->autoneg = cmd->base.autoneg; in rtl8152_set_link_ksettings()
4947 tp->speed = cmd->base.speed; in rtl8152_set_link_ksettings()
4948 tp->duplex = cmd->base.duplex; in rtl8152_set_link_ksettings()
4949 tp->advertising = advertising; in rtl8152_set_link_ksettings()
4952 mutex_unlock(&tp->control); in rtl8152_set_link_ksettings()
4954 usb_autopm_put_interface(tp->intf); in rtl8152_set_link_ksettings()
4989 struct r8152 *tp = netdev_priv(dev); in rtl8152_get_ethtool_stats() local
4992 if (usb_autopm_get_interface(tp->intf) < 0) in rtl8152_get_ethtool_stats()
4995 generic_ocp_read(tp, PLA_TALLYCNT, sizeof(tally), &tally, MCU_TYPE_PLA); in rtl8152_get_ethtool_stats()
4997 usb_autopm_put_interface(tp->intf); in rtl8152_get_ethtool_stats()
5023 static int r8152_get_eee(struct r8152 *tp, struct ethtool_eee *eee) in r8152_get_eee() argument
5028 val = r8152_mmd_read(tp, MDIO_MMD_PCS, MDIO_PCS_EEE_ABLE); in r8152_get_eee()
5031 val = r8152_mmd_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV); in r8152_get_eee()
5034 val = r8152_mmd_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_LPABLE); in r8152_get_eee()
5037 eee->eee_enabled = tp->eee_en; in r8152_get_eee()
5040 eee->advertised = tp->eee_adv; in r8152_get_eee()
5046 static int r8152_set_eee(struct r8152 *tp, struct ethtool_eee *eee) in r8152_set_eee() argument
5050 tp->eee_en = eee->eee_enabled; in r8152_set_eee()
5051 tp->eee_adv = val; in r8152_set_eee()
5053 rtl_eee_enable(tp, tp->eee_en); in r8152_set_eee()
5058 static int r8153_get_eee(struct r8152 *tp, struct ethtool_eee *eee) in r8153_get_eee() argument
5063 val = ocp_reg_read(tp, OCP_EEE_ABLE); in r8153_get_eee()
5066 val = ocp_reg_read(tp, OCP_EEE_ADV); in r8153_get_eee()
5069 val = ocp_reg_read(tp, OCP_EEE_LPABLE); in r8153_get_eee()
5072 eee->eee_enabled = tp->eee_en; in r8153_get_eee()
5075 eee->advertised = tp->eee_adv; in r8153_get_eee()
5084 struct r8152 *tp = netdev_priv(net); in rtl_ethtool_get_eee() local
5087 ret = usb_autopm_get_interface(tp->intf); in rtl_ethtool_get_eee()
5091 mutex_lock(&tp->control); in rtl_ethtool_get_eee()
5093 ret = tp->rtl_ops.eee_get(tp, edata); in rtl_ethtool_get_eee()
5095 mutex_unlock(&tp->control); in rtl_ethtool_get_eee()
5097 usb_autopm_put_interface(tp->intf); in rtl_ethtool_get_eee()
5106 struct r8152 *tp = netdev_priv(net); in rtl_ethtool_set_eee() local
5109 ret = usb_autopm_get_interface(tp->intf); in rtl_ethtool_set_eee()
5113 mutex_lock(&tp->control); in rtl_ethtool_set_eee()
5115 ret = tp->rtl_ops.eee_set(tp, edata); in rtl_ethtool_set_eee()
5117 ret = mii_nway_restart(&tp->mii); in rtl_ethtool_set_eee()
5119 mutex_unlock(&tp->control); in rtl_ethtool_set_eee()
5121 usb_autopm_put_interface(tp->intf); in rtl_ethtool_set_eee()
5129 struct r8152 *tp = netdev_priv(dev); in rtl8152_nway_reset() local
5132 ret = usb_autopm_get_interface(tp->intf); in rtl8152_nway_reset()
5136 mutex_lock(&tp->control); in rtl8152_nway_reset()
5138 ret = mii_nway_restart(&tp->mii); in rtl8152_nway_reset()
5140 mutex_unlock(&tp->control); in rtl8152_nway_reset()
5142 usb_autopm_put_interface(tp->intf); in rtl8152_nway_reset()
5151 struct r8152 *tp = netdev_priv(netdev); in rtl8152_get_coalesce() local
5153 switch (tp->version) { in rtl8152_get_coalesce()
5162 coalesce->rx_coalesce_usecs = tp->coalesce; in rtl8152_get_coalesce()
5170 struct r8152 *tp = netdev_priv(netdev); in rtl8152_set_coalesce() local
5173 switch (tp->version) { in rtl8152_set_coalesce()
5185 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_coalesce()
5189 mutex_lock(&tp->control); in rtl8152_set_coalesce()
5191 if (tp->coalesce != coalesce->rx_coalesce_usecs) { in rtl8152_set_coalesce()
5192 tp->coalesce = coalesce->rx_coalesce_usecs; in rtl8152_set_coalesce()
5196 napi_disable(&tp->napi); in rtl8152_set_coalesce()
5197 tp->rtl_ops.disable(tp); in rtl8152_set_coalesce()
5198 tp->rtl_ops.enable(tp); in rtl8152_set_coalesce()
5199 rtl_start_rx(tp); in rtl8152_set_coalesce()
5200 clear_bit(RTL8152_SET_RX_MODE, &tp->flags); in rtl8152_set_coalesce()
5202 napi_enable(&tp->napi); in rtl8152_set_coalesce()
5207 mutex_unlock(&tp->control); in rtl8152_set_coalesce()
5209 usb_autopm_put_interface(tp->intf); in rtl8152_set_coalesce()
5217 struct r8152 *tp = netdev_priv(netdev); in rtl8152_get_tunable() local
5221 *(u32 *)d = tp->rx_copybreak; in rtl8152_get_tunable()
5234 struct r8152 *tp = netdev_priv(netdev); in rtl8152_set_tunable() local
5241 netif_err(tp, rx_err, netdev, in rtl8152_set_tunable()
5246 if (tp->rx_copybreak != val) { in rtl8152_set_tunable()
5248 mutex_lock(&tp->control); in rtl8152_set_tunable()
5249 napi_disable(&tp->napi); in rtl8152_set_tunable()
5250 tp->rx_copybreak = val; in rtl8152_set_tunable()
5251 napi_enable(&tp->napi); in rtl8152_set_tunable()
5252 mutex_unlock(&tp->control); in rtl8152_set_tunable()
5254 tp->rx_copybreak = val; in rtl8152_set_tunable()
5268 struct r8152 *tp = netdev_priv(netdev); in rtl8152_get_ringparam() local
5271 ring->rx_pending = tp->rx_pending; in rtl8152_get_ringparam()
5277 struct r8152 *tp = netdev_priv(netdev); in rtl8152_set_ringparam() local
5282 if (tp->rx_pending != ring->rx_pending) { in rtl8152_set_ringparam()
5284 mutex_lock(&tp->control); in rtl8152_set_ringparam()
5285 napi_disable(&tp->napi); in rtl8152_set_ringparam()
5286 tp->rx_pending = ring->rx_pending; in rtl8152_set_ringparam()
5287 napi_enable(&tp->napi); in rtl8152_set_ringparam()
5288 mutex_unlock(&tp->control); in rtl8152_set_ringparam()
5290 tp->rx_pending = ring->rx_pending; in rtl8152_set_ringparam()
5322 struct r8152 *tp = netdev_priv(netdev); in rtl8152_ioctl() local
5326 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8152_ioctl()
5329 res = usb_autopm_get_interface(tp->intf); in rtl8152_ioctl()
5339 mutex_lock(&tp->control); in rtl8152_ioctl()
5340 data->val_out = r8152_mdio_read(tp, data->reg_num); in rtl8152_ioctl()
5341 mutex_unlock(&tp->control); in rtl8152_ioctl()
5349 mutex_lock(&tp->control); in rtl8152_ioctl()
5350 r8152_mdio_write(tp, data->reg_num, data->val_in); in rtl8152_ioctl()
5351 mutex_unlock(&tp->control); in rtl8152_ioctl()
5358 usb_autopm_put_interface(tp->intf); in rtl8152_ioctl()
5366 struct r8152 *tp = netdev_priv(dev); in rtl8152_change_mtu() local
5369 switch (tp->version) { in rtl8152_change_mtu()
5379 ret = usb_autopm_get_interface(tp->intf); in rtl8152_change_mtu()
5383 mutex_lock(&tp->control); in rtl8152_change_mtu()
5390 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, rms); in rtl8152_change_mtu()
5393 r8153_set_rx_early_size(tp); in rtl8152_change_mtu()
5396 mutex_unlock(&tp->control); in rtl8152_change_mtu()
5398 usb_autopm_put_interface(tp->intf); in rtl8152_change_mtu()
5417 static void rtl8152_unload(struct r8152 *tp) in rtl8152_unload() argument
5419 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8152_unload()
5422 if (tp->version != RTL_VER_01) in rtl8152_unload()
5423 r8152_power_cut_en(tp, true); in rtl8152_unload()
5426 static void rtl8153_unload(struct r8152 *tp) in rtl8153_unload() argument
5428 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8153_unload()
5431 r8153_power_cut_en(tp, false); in rtl8153_unload()
5434 static void rtl8153b_unload(struct r8152 *tp) in rtl8153b_unload() argument
5436 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8153b_unload()
5439 r8153b_power_cut_en(tp, false); in rtl8153b_unload()
5442 static int rtl_ops_init(struct r8152 *tp) in rtl_ops_init() argument
5444 struct rtl_ops *ops = &tp->rtl_ops; in rtl_ops_init()
5447 switch (tp->version) { in rtl_ops_init()
5462 tp->rx_buf_sz = 16 * 1024; in rtl_ops_init()
5463 tp->eee_en = true; in rtl_ops_init()
5464 tp->eee_adv = MDIO_EEE_100TX; in rtl_ops_init()
5482 tp->rx_buf_sz = 32 * 1024; in rtl_ops_init()
5483 tp->eee_en = true; in rtl_ops_init()
5484 tp->eee_adv = MDIO_EEE_1000T | MDIO_EEE_100TX; in rtl_ops_init()
5500 tp->rx_buf_sz = 32 * 1024; in rtl_ops_init()
5501 tp->eee_en = true; in rtl_ops_init()
5502 tp->eee_adv = MDIO_EEE_1000T | MDIO_EEE_100TX; in rtl_ops_init()
5507 netif_err(tp, probe, tp->netdev, "Unknown Device\n"); in rtl_ops_init()
5578 struct r8152 *tp; in rtl8152_probe() local
5598 tp = netdev_priv(netdev); in rtl8152_probe()
5599 tp->msg_enable = 0x7FFF; in rtl8152_probe()
5601 tp->udev = udev; in rtl8152_probe()
5602 tp->netdev = netdev; in rtl8152_probe()
5603 tp->intf = intf; in rtl8152_probe()
5604 tp->version = version; in rtl8152_probe()
5610 tp->mii.supports_gmii = 0; in rtl8152_probe()
5613 tp->mii.supports_gmii = 1; in rtl8152_probe()
5617 ret = rtl_ops_init(tp); in rtl8152_probe()
5621 mutex_init(&tp->control); in rtl8152_probe()
5622 INIT_DELAYED_WORK(&tp->schedule, rtl_work_func_t); in rtl8152_probe()
5623 INIT_DELAYED_WORK(&tp->hw_phy_work, rtl_hw_phy_work_func_t); in rtl8152_probe()
5624 tasklet_init(&tp->tx_tl, bottom_half, (unsigned long)tp); in rtl8152_probe()
5625 tasklet_disable(&tp->tx_tl); in rtl8152_probe()
5642 if (tp->version == RTL_VER_01) { in rtl8152_probe()
5650 set_bit(DELL_TB_RX_AGG_BUG, &tp->flags); in rtl8152_probe()
5658 switch (tp->version) { in rtl8152_probe()
5668 tp->mii.dev = netdev; in rtl8152_probe()
5669 tp->mii.mdio_read = read_mii_word; in rtl8152_probe()
5670 tp->mii.mdio_write = write_mii_word; in rtl8152_probe()
5671 tp->mii.phy_id_mask = 0x3f; in rtl8152_probe()
5672 tp->mii.reg_num_mask = 0x1f; in rtl8152_probe()
5673 tp->mii.phy_id = R8152_PHY_ID; in rtl8152_probe()
5675 tp->autoneg = AUTONEG_ENABLE; in rtl8152_probe()
5676 tp->speed = SPEED_100; in rtl8152_probe()
5677 tp->advertising = RTL_ADVERTISED_10_HALF | RTL_ADVERTISED_10_FULL | in rtl8152_probe()
5679 if (tp->mii.supports_gmii) { in rtl8152_probe()
5680 tp->speed = SPEED_1000; in rtl8152_probe()
5681 tp->advertising |= RTL_ADVERTISED_1000_FULL; in rtl8152_probe()
5683 tp->duplex = DUPLEX_FULL; in rtl8152_probe()
5685 tp->rx_copybreak = RTL8152_RXFG_HEADSZ; in rtl8152_probe()
5686 tp->rx_pending = 10 * RTL8152_MAX_RX; in rtl8152_probe()
5690 tp->rtl_ops.init(tp); in rtl8152_probe()
5691 queue_delayed_work(system_long_wq, &tp->hw_phy_work, 0); in rtl8152_probe()
5692 set_ethernet_addr(tp); in rtl8152_probe()
5694 usb_set_intfdata(intf, tp); in rtl8152_probe()
5695 netif_napi_add(netdev, &tp->napi, r8152_poll, RTL8152_NAPI_WEIGHT); in rtl8152_probe()
5699 netif_err(tp, probe, netdev, "couldn't register the device\n"); in rtl8152_probe()
5703 if (!rtl_can_wakeup(tp)) in rtl8152_probe()
5704 __rtl_set_wol(tp, 0); in rtl8152_probe()
5706 tp->saved_wolopts = __rtl_get_wol(tp); in rtl8152_probe()
5707 if (tp->saved_wolopts) in rtl8152_probe()
5712 netif_info(tp, probe, netdev, "%s\n", DRIVER_VERSION); in rtl8152_probe()
5717 tasklet_kill(&tp->tx_tl); in rtl8152_probe()
5726 struct r8152 *tp = usb_get_intfdata(intf); in rtl8152_disconnect() local
5729 if (tp) { in rtl8152_disconnect()
5730 rtl_set_unplug(tp); in rtl8152_disconnect()
5732 unregister_netdev(tp->netdev); in rtl8152_disconnect()
5733 tasklet_kill(&tp->tx_tl); in rtl8152_disconnect()
5734 cancel_delayed_work_sync(&tp->hw_phy_work); in rtl8152_disconnect()
5735 tp->rtl_ops.unload(tp); in rtl8152_disconnect()
5736 free_netdev(tp->netdev); in rtl8152_disconnect()