Lines Matching refs:tp
807 void (*init)(struct r8152 *tp);
808 int (*enable)(struct r8152 *tp);
809 void (*disable)(struct r8152 *tp);
810 void (*up)(struct r8152 *tp);
811 void (*down)(struct r8152 *tp);
812 void (*unload)(struct r8152 *tp);
813 int (*eee_get)(struct r8152 *tp, struct ethtool_eee *eee);
814 int (*eee_set)(struct r8152 *tp, struct ethtool_eee *eee);
815 bool (*in_nway)(struct r8152 *tp);
816 void (*hw_phy_cfg)(struct r8152 *tp);
817 void (*autosuspend_en)(struct r8152 *tp, bool enable);
844 int (*pre_fw)(struct r8152 *tp);
845 int (*post_fw)(struct r8152 *tp);
1034 int get_registers(struct r8152 *tp, u16 value, u16 index, u16 size, void *data) in get_registers() argument
1043 ret = usb_control_msg(tp->udev, usb_rcvctrlpipe(tp->udev, 0), in get_registers()
1057 int set_registers(struct r8152 *tp, u16 value, u16 index, u16 size, void *data) in set_registers() argument
1066 ret = usb_control_msg(tp->udev, usb_sndctrlpipe(tp->udev, 0), in set_registers()
1075 static void rtl_set_unplug(struct r8152 *tp) in rtl_set_unplug() argument
1077 if (tp->udev->state == USB_STATE_NOTATTACHED) { in rtl_set_unplug()
1078 set_bit(RTL8152_UNPLUG, &tp->flags); in rtl_set_unplug()
1083 static int generic_ocp_read(struct r8152 *tp, u16 index, u16 size, in generic_ocp_read() argument
1089 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in generic_ocp_read()
1101 ret = get_registers(tp, index, type, limit, data); in generic_ocp_read()
1109 ret = get_registers(tp, index, type, size, data); in generic_ocp_read()
1121 rtl_set_unplug(tp); in generic_ocp_read()
1126 static int generic_ocp_write(struct r8152 *tp, u16 index, u16 byteen, in generic_ocp_write() argument
1133 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in generic_ocp_write()
1147 ret = set_registers(tp, index, type | byen, 4, data); in generic_ocp_write()
1160 ret = set_registers(tp, index, in generic_ocp_write()
1170 ret = set_registers(tp, index, in generic_ocp_write()
1184 ret = set_registers(tp, index, type | byen, 4, data); in generic_ocp_write()
1191 rtl_set_unplug(tp); in generic_ocp_write()
1197 int pla_ocp_read(struct r8152 *tp, u16 index, u16 size, void *data) in pla_ocp_read() argument
1199 return generic_ocp_read(tp, index, size, data, MCU_TYPE_PLA); in pla_ocp_read()
1203 int pla_ocp_write(struct r8152 *tp, u16 index, u16 byteen, u16 size, void *data) in pla_ocp_write() argument
1205 return generic_ocp_write(tp, index, byteen, size, data, MCU_TYPE_PLA); in pla_ocp_write()
1209 int usb_ocp_write(struct r8152 *tp, u16 index, u16 byteen, u16 size, void *data) in usb_ocp_write() argument
1211 return generic_ocp_write(tp, index, byteen, size, data, MCU_TYPE_USB); in usb_ocp_write()
1214 static u32 ocp_read_dword(struct r8152 *tp, u16 type, u16 index) in ocp_read_dword() argument
1218 generic_ocp_read(tp, index, sizeof(data), &data, type); in ocp_read_dword()
1223 static void ocp_write_dword(struct r8152 *tp, u16 type, u16 index, u32 data) in ocp_write_dword() argument
1227 generic_ocp_write(tp, index, BYTE_EN_DWORD, sizeof(tmp), &tmp, type); in ocp_write_dword()
1230 static u16 ocp_read_word(struct r8152 *tp, u16 type, u16 index) in ocp_read_word() argument
1240 generic_ocp_read(tp, index, sizeof(tmp), &tmp, type | byen); in ocp_read_word()
1249 static void ocp_write_word(struct r8152 *tp, u16 type, u16 index, u32 data) in ocp_write_word() argument
1267 generic_ocp_write(tp, index, byen, sizeof(tmp), &tmp, type); in ocp_write_word()
1270 static u8 ocp_read_byte(struct r8152 *tp, u16 type, u16 index) in ocp_read_byte() argument
1278 generic_ocp_read(tp, index, sizeof(tmp), &tmp, type); in ocp_read_byte()
1287 static void ocp_write_byte(struct r8152 *tp, u16 type, u16 index, u32 data) in ocp_write_byte() argument
1305 generic_ocp_write(tp, index, byen, sizeof(tmp), &tmp, type); in ocp_write_byte()
1308 static u16 ocp_reg_read(struct r8152 *tp, u16 addr) in ocp_reg_read() argument
1313 if (ocp_base != tp->ocp_base) { in ocp_reg_read()
1314 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, ocp_base); in ocp_reg_read()
1315 tp->ocp_base = ocp_base; in ocp_reg_read()
1319 return ocp_read_word(tp, MCU_TYPE_PLA, ocp_index); in ocp_reg_read()
1322 static void ocp_reg_write(struct r8152 *tp, u16 addr, u16 data) in ocp_reg_write() argument
1327 if (ocp_base != tp->ocp_base) { in ocp_reg_write()
1328 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, ocp_base); in ocp_reg_write()
1329 tp->ocp_base = ocp_base; in ocp_reg_write()
1333 ocp_write_word(tp, MCU_TYPE_PLA, ocp_index, data); in ocp_reg_write()
1336 static inline void r8152_mdio_write(struct r8152 *tp, u32 reg_addr, u32 value) in r8152_mdio_write() argument
1338 ocp_reg_write(tp, OCP_BASE_MII + reg_addr * 2, value); in r8152_mdio_write()
1341 static inline int r8152_mdio_read(struct r8152 *tp, u32 reg_addr) in r8152_mdio_read() argument
1343 return ocp_reg_read(tp, OCP_BASE_MII + reg_addr * 2); in r8152_mdio_read()
1346 static void sram_write(struct r8152 *tp, u16 addr, u16 data) in sram_write() argument
1348 ocp_reg_write(tp, OCP_SRAM_ADDR, addr); in sram_write()
1349 ocp_reg_write(tp, OCP_SRAM_DATA, data); in sram_write()
1352 static u16 sram_read(struct r8152 *tp, u16 addr) in sram_read() argument
1354 ocp_reg_write(tp, OCP_SRAM_ADDR, addr); in sram_read()
1355 return ocp_reg_read(tp, OCP_SRAM_DATA); in sram_read()
1360 struct r8152 *tp = netdev_priv(netdev); in read_mii_word() local
1363 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in read_mii_word()
1369 ret = r8152_mdio_read(tp, reg); in read_mii_word()
1377 struct r8152 *tp = netdev_priv(netdev); in write_mii_word() local
1379 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in write_mii_word()
1385 r8152_mdio_write(tp, reg, val); in write_mii_word()
1389 r8152_submit_rx(struct r8152 *tp, struct rx_agg *agg, gfp_t mem_flags);
1393 struct r8152 *tp = netdev_priv(netdev); in rtl8152_set_mac_address() local
1400 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_mac_address()
1404 mutex_lock(&tp->control); in rtl8152_set_mac_address()
1408 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG); in rtl8152_set_mac_address()
1409 pla_ocp_write(tp, PLA_IDR, BYTE_EN_SIX_BYTES, 8, addr->sa_data); in rtl8152_set_mac_address()
1410 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); in rtl8152_set_mac_address()
1412 mutex_unlock(&tp->control); in rtl8152_set_mac_address()
1414 usb_autopm_put_interface(tp->intf); in rtl8152_set_mac_address()
1423 static int vendor_mac_passthru_addr_read(struct r8152 *tp, struct sockaddr *sa) in vendor_mac_passthru_addr_read() argument
1435 if (test_bit(LENOVO_MACPASSTHRU, &tp->flags)) { in vendor_mac_passthru_addr_read()
1441 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0); in vendor_mac_passthru_addr_read()
1444 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, EFUSE); in vendor_mac_passthru_addr_read()
1446 netif_dbg(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1452 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_MISC_1); in vendor_mac_passthru_addr_read()
1454 netif_dbg(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1471 netif_warn(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1479 netif_warn(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1485 netif_warn(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1492 netif_info(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1500 static int determine_ethernet_addr(struct r8152 *tp, struct sockaddr *sa) in determine_ethernet_addr() argument
1502 struct net_device *dev = tp->netdev; in determine_ethernet_addr()
1507 ret = eth_platform_get_mac_address(&tp->udev->dev, sa->sa_data); in determine_ethernet_addr()
1509 if (tp->version == RTL_VER_01) { in determine_ethernet_addr()
1510 ret = pla_ocp_read(tp, PLA_IDR, 8, sa->sa_data); in determine_ethernet_addr()
1515 ret = vendor_mac_passthru_addr_read(tp, sa); in determine_ethernet_addr()
1517 ret = pla_ocp_read(tp, PLA_BACKUP, 8, in determine_ethernet_addr()
1523 netif_err(tp, probe, dev, "Get ether addr fail\n"); in determine_ethernet_addr()
1525 netif_err(tp, probe, dev, "Invalid ether addr %pM\n", in determine_ethernet_addr()
1529 netif_info(tp, probe, dev, "Random ether addr %pM\n", in determine_ethernet_addr()
1537 static int set_ethernet_addr(struct r8152 *tp) in set_ethernet_addr() argument
1539 struct net_device *dev = tp->netdev; in set_ethernet_addr()
1543 ret = determine_ethernet_addr(tp, &sa); in set_ethernet_addr()
1547 if (tp->version == RTL_VER_01) in set_ethernet_addr()
1560 struct r8152 *tp; in read_bulk_callback() local
1567 tp = agg->context; in read_bulk_callback()
1568 if (!tp) in read_bulk_callback()
1571 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in read_bulk_callback()
1574 if (!test_bit(WORK_ENABLE, &tp->flags)) in read_bulk_callback()
1577 netdev = tp->netdev; in read_bulk_callback()
1584 usb_mark_last_busy(tp->udev); in read_bulk_callback()
1591 spin_lock_irqsave(&tp->rx_lock, flags); in read_bulk_callback()
1592 list_add_tail(&agg->list, &tp->rx_done); in read_bulk_callback()
1593 spin_unlock_irqrestore(&tp->rx_lock, flags); in read_bulk_callback()
1594 napi_schedule(&tp->napi); in read_bulk_callback()
1597 rtl_set_unplug(tp); in read_bulk_callback()
1598 netif_device_detach(tp->netdev); in read_bulk_callback()
1612 r8152_submit_rx(tp, agg, GFP_ATOMIC); in read_bulk_callback()
1620 struct r8152 *tp; in write_bulk_callback() local
1628 tp = agg->context; in write_bulk_callback()
1629 if (!tp) in write_bulk_callback()
1632 netdev = tp->netdev; in write_bulk_callback()
1643 spin_lock_irqsave(&tp->tx_lock, flags); in write_bulk_callback()
1644 list_add_tail(&agg->list, &tp->tx_free); in write_bulk_callback()
1645 spin_unlock_irqrestore(&tp->tx_lock, flags); in write_bulk_callback()
1647 usb_autopm_put_interface_async(tp->intf); in write_bulk_callback()
1652 if (!test_bit(WORK_ENABLE, &tp->flags)) in write_bulk_callback()
1655 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in write_bulk_callback()
1658 if (!skb_queue_empty(&tp->tx_queue)) in write_bulk_callback()
1659 tasklet_schedule(&tp->tx_tl); in write_bulk_callback()
1664 struct r8152 *tp; in intr_callback() local
1669 tp = urb->context; in intr_callback()
1670 if (!tp) in intr_callback()
1673 if (!test_bit(WORK_ENABLE, &tp->flags)) in intr_callback()
1676 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in intr_callback()
1684 netif_device_detach(tp->netdev); in intr_callback()
1688 netif_info(tp, intr, tp->netdev, in intr_callback()
1693 netif_info(tp, intr, tp->netdev, in intr_callback()
1698 netif_info(tp, intr, tp->netdev, "intr status %d\n", status); in intr_callback()
1704 if (!netif_carrier_ok(tp->netdev)) { in intr_callback()
1705 set_bit(RTL8152_LINK_CHG, &tp->flags); in intr_callback()
1706 schedule_delayed_work(&tp->schedule, 0); in intr_callback()
1709 if (netif_carrier_ok(tp->netdev)) { in intr_callback()
1710 netif_stop_queue(tp->netdev); in intr_callback()
1711 set_bit(RTL8152_LINK_CHG, &tp->flags); in intr_callback()
1712 schedule_delayed_work(&tp->schedule, 0); in intr_callback()
1719 rtl_set_unplug(tp); in intr_callback()
1720 netif_device_detach(tp->netdev); in intr_callback()
1722 netif_err(tp, intr, tp->netdev, in intr_callback()
1737 static void free_rx_agg(struct r8152 *tp, struct rx_agg *agg) in free_rx_agg() argument
1745 atomic_dec(&tp->rx_count); in free_rx_agg()
1748 static struct rx_agg *alloc_rx_agg(struct r8152 *tp, gfp_t mflags) in alloc_rx_agg() argument
1750 struct net_device *netdev = tp->netdev; in alloc_rx_agg()
1752 unsigned int order = get_order(tp->rx_buf_sz); in alloc_rx_agg()
1770 rx_agg->context = tp; in alloc_rx_agg()
1774 spin_lock_irqsave(&tp->rx_lock, flags); in alloc_rx_agg()
1775 list_add_tail(&rx_agg->info_list, &tp->rx_info); in alloc_rx_agg()
1776 spin_unlock_irqrestore(&tp->rx_lock, flags); in alloc_rx_agg()
1778 atomic_inc(&tp->rx_count); in alloc_rx_agg()
1789 static void free_all_mem(struct r8152 *tp) in free_all_mem() argument
1795 spin_lock_irqsave(&tp->rx_lock, flags); in free_all_mem()
1797 list_for_each_entry_safe(agg, agg_next, &tp->rx_info, info_list) in free_all_mem()
1798 free_rx_agg(tp, agg); in free_all_mem()
1800 spin_unlock_irqrestore(&tp->rx_lock, flags); in free_all_mem()
1802 WARN_ON(atomic_read(&tp->rx_count)); in free_all_mem()
1805 usb_free_urb(tp->tx_info[i].urb); in free_all_mem()
1806 tp->tx_info[i].urb = NULL; in free_all_mem()
1808 kfree(tp->tx_info[i].buffer); in free_all_mem()
1809 tp->tx_info[i].buffer = NULL; in free_all_mem()
1810 tp->tx_info[i].head = NULL; in free_all_mem()
1813 usb_free_urb(tp->intr_urb); in free_all_mem()
1814 tp->intr_urb = NULL; in free_all_mem()
1816 kfree(tp->intr_buff); in free_all_mem()
1817 tp->intr_buff = NULL; in free_all_mem()
1820 static int alloc_all_mem(struct r8152 *tp) in alloc_all_mem() argument
1822 struct net_device *netdev = tp->netdev; in alloc_all_mem()
1823 struct usb_interface *intf = tp->intf; in alloc_all_mem()
1830 spin_lock_init(&tp->rx_lock); in alloc_all_mem()
1831 spin_lock_init(&tp->tx_lock); in alloc_all_mem()
1832 INIT_LIST_HEAD(&tp->rx_info); in alloc_all_mem()
1833 INIT_LIST_HEAD(&tp->tx_free); in alloc_all_mem()
1834 INIT_LIST_HEAD(&tp->rx_done); in alloc_all_mem()
1835 skb_queue_head_init(&tp->tx_queue); in alloc_all_mem()
1836 skb_queue_head_init(&tp->rx_queue); in alloc_all_mem()
1837 atomic_set(&tp->rx_count, 0); in alloc_all_mem()
1840 if (!alloc_rx_agg(tp, GFP_KERNEL)) in alloc_all_mem()
1866 INIT_LIST_HEAD(&tp->tx_info[i].list); in alloc_all_mem()
1867 tp->tx_info[i].context = tp; in alloc_all_mem()
1868 tp->tx_info[i].urb = urb; in alloc_all_mem()
1869 tp->tx_info[i].buffer = buf; in alloc_all_mem()
1870 tp->tx_info[i].head = tx_agg_align(buf); in alloc_all_mem()
1872 list_add_tail(&tp->tx_info[i].list, &tp->tx_free); in alloc_all_mem()
1875 tp->intr_urb = usb_alloc_urb(0, GFP_KERNEL); in alloc_all_mem()
1876 if (!tp->intr_urb) in alloc_all_mem()
1879 tp->intr_buff = kmalloc(INTBUFSIZE, GFP_KERNEL); in alloc_all_mem()
1880 if (!tp->intr_buff) in alloc_all_mem()
1883 tp->intr_interval = (int)ep_intr->desc.bInterval; in alloc_all_mem()
1884 usb_fill_int_urb(tp->intr_urb, tp->udev, usb_rcvintpipe(tp->udev, 3), in alloc_all_mem()
1885 tp->intr_buff, INTBUFSIZE, intr_callback, in alloc_all_mem()
1886 tp, tp->intr_interval); in alloc_all_mem()
1891 free_all_mem(tp); in alloc_all_mem()
1895 static struct tx_agg *r8152_get_tx_agg(struct r8152 *tp) in r8152_get_tx_agg() argument
1900 if (list_empty(&tp->tx_free)) in r8152_get_tx_agg()
1903 spin_lock_irqsave(&tp->tx_lock, flags); in r8152_get_tx_agg()
1904 if (!list_empty(&tp->tx_free)) { in r8152_get_tx_agg()
1907 cursor = tp->tx_free.next; in r8152_get_tx_agg()
1911 spin_unlock_irqrestore(&tp->tx_lock, flags); in r8152_get_tx_agg()
1920 static void r8152_csum_workaround(struct r8152 *tp, struct sk_buff *skb, in r8152_csum_workaround() argument
1924 netdev_features_t features = tp->netdev->features; in r8152_csum_workaround()
1951 stats = &tp->netdev->stats; in r8152_csum_workaround()
1976 static int r8152_tx_csum(struct r8152 *tp, struct tx_desc *desc, in r8152_tx_csum() argument
1989 netif_warn(tp, tx_err, tp->netdev, in r8152_tx_csum()
2021 netif_warn(tp, tx_err, tp->netdev, in r8152_tx_csum()
2061 static int r8152_tx_agg_fill(struct r8152 *tp, struct tx_agg *agg) in r8152_tx_agg_fill() argument
2063 struct sk_buff_head skb_head, *tx_queue = &tp->tx_queue; in r8152_tx_agg_fill()
2099 if (r8152_tx_csum(tp, tx_desc, skb, skb->len, offset)) { in r8152_tx_agg_fill()
2100 r8152_csum_workaround(tp, skb, &skb_head); in r8152_tx_agg_fill()
2110 struct net_device_stats *stats = &tp->netdev->stats; in r8152_tx_agg_fill()
2126 if (test_bit(DELL_TB_RX_AGG_BUG, &tp->flags)) in r8152_tx_agg_fill()
2136 netif_tx_lock(tp->netdev); in r8152_tx_agg_fill()
2138 if (netif_queue_stopped(tp->netdev) && in r8152_tx_agg_fill()
2139 skb_queue_len(&tp->tx_queue) < tp->tx_qlen) in r8152_tx_agg_fill()
2140 netif_wake_queue(tp->netdev); in r8152_tx_agg_fill()
2142 netif_tx_unlock(tp->netdev); in r8152_tx_agg_fill()
2144 ret = usb_autopm_get_interface_async(tp->intf); in r8152_tx_agg_fill()
2148 usb_fill_bulk_urb(agg->urb, tp->udev, usb_sndbulkpipe(tp->udev, 2), in r8152_tx_agg_fill()
2154 usb_autopm_put_interface_async(tp->intf); in r8152_tx_agg_fill()
2160 static u8 r8152_rx_csum(struct r8152 *tp, struct rx_desc *rx_desc) in r8152_rx_csum() argument
2165 if (!(tp->netdev->features & NETIF_F_RXCSUM)) in r8152_rx_csum()
2189 static inline bool rx_count_exceed(struct r8152 *tp) in rx_count_exceed() argument
2191 return atomic_read(&tp->rx_count) > RTL8152_MAX_RX; in rx_count_exceed()
2199 static struct rx_agg *rtl_get_free_rx(struct r8152 *tp, gfp_t mflags) in rtl_get_free_rx() argument
2204 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_get_free_rx()
2206 list_for_each_entry_safe(agg, agg_next, &tp->rx_used, list) { in rtl_get_free_rx()
2213 if (rx_count_exceed(tp)) { in rtl_get_free_rx()
2215 free_rx_agg(tp, agg); in rtl_get_free_rx()
2221 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_get_free_rx()
2223 if (!agg_free && atomic_read(&tp->rx_count) < tp->rx_pending) in rtl_get_free_rx()
2224 agg_free = alloc_rx_agg(tp, mflags); in rtl_get_free_rx()
2229 static int rx_bottom(struct r8152 *tp, int budget) in rx_bottom() argument
2234 struct napi_struct *napi = &tp->napi; in rx_bottom()
2236 if (!skb_queue_empty(&tp->rx_queue)) { in rx_bottom()
2238 struct sk_buff *skb = __skb_dequeue(&tp->rx_queue); in rx_bottom()
2239 struct net_device *netdev = tp->netdev; in rx_bottom()
2254 if (list_empty(&tp->rx_done)) in rx_bottom()
2258 spin_lock_irqsave(&tp->rx_lock, flags); in rx_bottom()
2259 list_splice_init(&tp->rx_done, &rx_queue); in rx_bottom()
2260 spin_unlock_irqrestore(&tp->rx_lock, flags); in rx_bottom()
2276 agg_free = rtl_get_free_rx(tp, GFP_ATOMIC); in rx_bottom()
2283 struct net_device *netdev = tp->netdev; in rx_bottom()
2289 if (unlikely(skb_queue_len(&tp->rx_queue) >= 1000)) in rx_bottom()
2303 if (!agg_free || tp->rx_copybreak > pkt_len) in rx_bottom()
2306 rx_frag_head_sz = tp->rx_copybreak; in rx_bottom()
2314 skb->ip_summed = r8152_rx_csum(tp, rx_desc); in rx_bottom()
2335 __skb_queue_tail(&tp->rx_queue, skb); in rx_bottom()
2348 spin_lock_irqsave(&tp->rx_lock, flags); in rx_bottom()
2350 list_add(&agg_free->list, &tp->rx_used); in rx_bottom()
2352 list_add_tail(&agg->list, &tp->rx_used); in rx_bottom()
2356 spin_unlock_irqrestore(&tp->rx_lock, flags); in rx_bottom()
2361 ret = r8152_submit_rx(tp, agg, GFP_ATOMIC); in rx_bottom()
2369 spin_lock_irqsave(&tp->rx_lock, flags); in rx_bottom()
2370 list_splice_tail(&rx_queue, &tp->rx_done); in rx_bottom()
2371 spin_unlock_irqrestore(&tp->rx_lock, flags); in rx_bottom()
2378 static void tx_bottom(struct r8152 *tp) in tx_bottom() argument
2383 struct net_device *netdev = tp->netdev; in tx_bottom()
2386 if (skb_queue_empty(&tp->tx_queue)) in tx_bottom()
2389 agg = r8152_get_tx_agg(tp); in tx_bottom()
2393 res = r8152_tx_agg_fill(tp, agg); in tx_bottom()
2398 rtl_set_unplug(tp); in tx_bottom()
2404 netif_warn(tp, tx_err, netdev, in tx_bottom()
2408 spin_lock_irqsave(&tp->tx_lock, flags); in tx_bottom()
2409 list_add_tail(&agg->list, &tp->tx_free); in tx_bottom()
2410 spin_unlock_irqrestore(&tp->tx_lock, flags); in tx_bottom()
2417 struct r8152 *tp; in bottom_half() local
2419 tp = (struct r8152 *)data; in bottom_half()
2421 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in bottom_half()
2424 if (!test_bit(WORK_ENABLE, &tp->flags)) in bottom_half()
2429 if (!netif_carrier_ok(tp->netdev)) in bottom_half()
2432 clear_bit(SCHEDULE_TASKLET, &tp->flags); in bottom_half()
2434 tx_bottom(tp); in bottom_half()
2439 struct r8152 *tp = container_of(napi, struct r8152, napi); in r8152_poll() local
2442 work_done = rx_bottom(tp, budget); in r8152_poll()
2447 if (!list_empty(&tp->rx_done)) in r8152_poll()
2456 int r8152_submit_rx(struct r8152 *tp, struct rx_agg *agg, gfp_t mem_flags) in r8152_submit_rx() argument
2461 if (test_bit(RTL8152_UNPLUG, &tp->flags) || in r8152_submit_rx()
2462 !test_bit(WORK_ENABLE, &tp->flags) || !netif_carrier_ok(tp->netdev)) in r8152_submit_rx()
2465 usb_fill_bulk_urb(agg->urb, tp->udev, usb_rcvbulkpipe(tp->udev, 1), in r8152_submit_rx()
2466 agg->buffer, tp->rx_buf_sz, in r8152_submit_rx()
2471 rtl_set_unplug(tp); in r8152_submit_rx()
2472 netif_device_detach(tp->netdev); in r8152_submit_rx()
2478 spin_lock_irqsave(&tp->rx_lock, flags); in r8152_submit_rx()
2479 list_add_tail(&agg->list, &tp->rx_done); in r8152_submit_rx()
2480 spin_unlock_irqrestore(&tp->rx_lock, flags); in r8152_submit_rx()
2482 netif_err(tp, rx_err, tp->netdev, in r8152_submit_rx()
2485 napi_schedule(&tp->napi); in r8152_submit_rx()
2491 static void rtl_drop_queued_tx(struct r8152 *tp) in rtl_drop_queued_tx() argument
2493 struct net_device_stats *stats = &tp->netdev->stats; in rtl_drop_queued_tx()
2494 struct sk_buff_head skb_head, *tx_queue = &tp->tx_queue; in rtl_drop_queued_tx()
2513 struct r8152 *tp = netdev_priv(netdev); in rtl8152_tx_timeout() local
2515 netif_warn(tp, tx_err, netdev, "Tx timeout\n"); in rtl8152_tx_timeout()
2517 usb_queue_reset_device(tp->intf); in rtl8152_tx_timeout()
2522 struct r8152 *tp = netdev_priv(netdev); in rtl8152_set_rx_mode() local
2525 set_bit(RTL8152_SET_RX_MODE, &tp->flags); in rtl8152_set_rx_mode()
2526 schedule_delayed_work(&tp->schedule, 0); in rtl8152_set_rx_mode()
2532 struct r8152 *tp = netdev_priv(netdev); in _rtl8152_set_rx_mode() local
2538 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in _rtl8152_set_rx_mode()
2544 netif_notice(tp, link, netdev, "Promiscuous mode enabled\n"); in _rtl8152_set_rx_mode()
2570 pla_ocp_write(tp, PLA_MAR, BYTE_EN_DWORD, sizeof(tmp), tmp); in _rtl8152_set_rx_mode()
2571 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in _rtl8152_set_rx_mode()
2594 struct r8152 *tp = netdev_priv(netdev); in rtl8152_start_xmit() local
2598 skb_queue_tail(&tp->tx_queue, skb); in rtl8152_start_xmit()
2600 if (!list_empty(&tp->tx_free)) { in rtl8152_start_xmit()
2601 if (test_bit(SELECTIVE_SUSPEND, &tp->flags)) { in rtl8152_start_xmit()
2602 set_bit(SCHEDULE_TASKLET, &tp->flags); in rtl8152_start_xmit()
2603 schedule_delayed_work(&tp->schedule, 0); in rtl8152_start_xmit()
2605 usb_mark_last_busy(tp->udev); in rtl8152_start_xmit()
2606 tasklet_schedule(&tp->tx_tl); in rtl8152_start_xmit()
2608 } else if (skb_queue_len(&tp->tx_queue) > tp->tx_qlen) { in rtl8152_start_xmit()
2615 static void r8152b_reset_packet_filter(struct r8152 *tp) in r8152b_reset_packet_filter() argument
2619 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_FMC); in r8152b_reset_packet_filter()
2621 ocp_write_word(tp, MCU_TYPE_PLA, PLA_FMC, ocp_data); in r8152b_reset_packet_filter()
2623 ocp_write_word(tp, MCU_TYPE_PLA, PLA_FMC, ocp_data); in r8152b_reset_packet_filter()
2626 static void rtl8152_nic_reset(struct r8152 *tp) in rtl8152_nic_reset() argument
2630 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, CR_RST); in rtl8152_nic_reset()
2633 if (!(ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CR) & CR_RST)) in rtl8152_nic_reset()
2639 static void set_tx_qlen(struct r8152 *tp) in set_tx_qlen() argument
2641 struct net_device *netdev = tp->netdev; in set_tx_qlen()
2643 tp->tx_qlen = agg_buf_sz / (netdev->mtu + VLAN_ETH_HLEN + ETH_FCS_LEN + in set_tx_qlen()
2647 static inline u8 rtl8152_get_speed(struct r8152 *tp) in rtl8152_get_speed() argument
2649 return ocp_read_byte(tp, MCU_TYPE_PLA, PLA_PHYSTATUS); in rtl8152_get_speed()
2652 static void rtl_set_eee_plus(struct r8152 *tp) in rtl_set_eee_plus() argument
2657 speed = rtl8152_get_speed(tp); in rtl_set_eee_plus()
2659 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEEP_CR); in rtl_set_eee_plus()
2661 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEEP_CR, ocp_data); in rtl_set_eee_plus()
2663 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEEP_CR); in rtl_set_eee_plus()
2665 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEEP_CR, ocp_data); in rtl_set_eee_plus()
2669 static void rxdy_gated_en(struct r8152 *tp, bool enable) in rxdy_gated_en() argument
2673 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MISC_1); in rxdy_gated_en()
2678 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MISC_1, ocp_data); in rxdy_gated_en()
2681 static int rtl_start_rx(struct r8152 *tp) in rtl_start_rx() argument
2690 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_start_rx()
2692 INIT_LIST_HEAD(&tp->rx_done); in rtl_start_rx()
2693 INIT_LIST_HEAD(&tp->rx_used); in rtl_start_rx()
2695 list_splice_init(&tp->rx_info, &tmp_list); in rtl_start_rx()
2697 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_start_rx()
2704 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_start_rx()
2705 list_add_tail(&agg->list, &tp->rx_used); in rtl_start_rx()
2706 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_start_rx()
2708 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_start_rx()
2709 list_add_tail(&agg->list, &tp->rx_done); in rtl_start_rx()
2710 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_start_rx()
2712 ret = r8152_submit_rx(tp, agg, GFP_KERNEL); in rtl_start_rx()
2716 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_start_rx()
2717 WARN_ON(!list_empty(&tp->rx_info)); in rtl_start_rx()
2718 list_splice(&tmp_list, &tp->rx_info); in rtl_start_rx()
2719 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_start_rx()
2724 static int rtl_stop_rx(struct r8152 *tp) in rtl_stop_rx() argument
2738 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_stop_rx()
2739 list_splice_init(&tp->rx_info, &tmp_list); in rtl_stop_rx()
2740 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_stop_rx()
2747 free_rx_agg(tp, agg); in rtl_stop_rx()
2753 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_stop_rx()
2754 WARN_ON(!list_empty(&tp->rx_info)); in rtl_stop_rx()
2755 list_splice(&tmp_list, &tp->rx_info); in rtl_stop_rx()
2756 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_stop_rx()
2758 while (!skb_queue_empty(&tp->rx_queue)) in rtl_stop_rx()
2759 dev_kfree_skb(__skb_dequeue(&tp->rx_queue)); in rtl_stop_rx()
2764 static inline void r8153b_rx_agg_chg_indicate(struct r8152 *tp) in r8153b_rx_agg_chg_indicate() argument
2766 ocp_write_byte(tp, MCU_TYPE_USB, USB_UPT_RXDMA_OWN, in r8153b_rx_agg_chg_indicate()
2770 static int rtl_enable(struct r8152 *tp) in rtl_enable() argument
2774 r8152b_reset_packet_filter(tp); in rtl_enable()
2776 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CR); in rtl_enable()
2778 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, ocp_data); in rtl_enable()
2780 switch (tp->version) { in rtl_enable()
2783 r8153b_rx_agg_chg_indicate(tp); in rtl_enable()
2789 rxdy_gated_en(tp, false); in rtl_enable()
2794 static int rtl8152_enable(struct r8152 *tp) in rtl8152_enable() argument
2796 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8152_enable()
2799 set_tx_qlen(tp); in rtl8152_enable()
2800 rtl_set_eee_plus(tp); in rtl8152_enable()
2802 return rtl_enable(tp); in rtl8152_enable()
2805 static void r8153_set_rx_early_timeout(struct r8152 *tp) in r8153_set_rx_early_timeout() argument
2807 u32 ocp_data = tp->coalesce / 8; in r8153_set_rx_early_timeout()
2809 switch (tp->version) { in r8153_set_rx_early_timeout()
2814 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_TIMEOUT, in r8153_set_rx_early_timeout()
2823 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_TIMEOUT, in r8153_set_rx_early_timeout()
2825 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EXTRA_AGGR_TMR, in r8153_set_rx_early_timeout()
2834 static void r8153_set_rx_early_size(struct r8152 *tp) in r8153_set_rx_early_size() argument
2836 u32 ocp_data = tp->rx_buf_sz - rx_reserved_size(tp->netdev->mtu); in r8153_set_rx_early_size()
2838 switch (tp->version) { in r8153_set_rx_early_size()
2843 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_SIZE, in r8153_set_rx_early_size()
2848 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_SIZE, in r8153_set_rx_early_size()
2857 static int rtl8153_enable(struct r8152 *tp) in rtl8153_enable() argument
2859 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8153_enable()
2862 set_tx_qlen(tp); in rtl8153_enable()
2863 rtl_set_eee_plus(tp); in rtl8153_enable()
2864 r8153_set_rx_early_timeout(tp); in rtl8153_enable()
2865 r8153_set_rx_early_size(tp); in rtl8153_enable()
2867 if (tp->version == RTL_VER_09) { in rtl8153_enable()
2870 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_TASK); in rtl8153_enable()
2872 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_TASK, ocp_data); in rtl8153_enable()
2875 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_TASK, ocp_data); in rtl8153_enable()
2878 return rtl_enable(tp); in rtl8153_enable()
2881 static void rtl_disable(struct r8152 *tp) in rtl_disable() argument
2886 if (test_bit(RTL8152_UNPLUG, &tp->flags)) { in rtl_disable()
2887 rtl_drop_queued_tx(tp); in rtl_disable()
2891 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in rtl_disable()
2893 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in rtl_disable()
2895 rtl_drop_queued_tx(tp); in rtl_disable()
2898 usb_kill_urb(tp->tx_info[i].urb); in rtl_disable()
2900 rxdy_gated_en(tp, true); in rtl_disable()
2903 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in rtl_disable()
2910 if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR0) & TCR0_TX_EMPTY) in rtl_disable()
2915 rtl_stop_rx(tp); in rtl_disable()
2917 rtl8152_nic_reset(tp); in rtl_disable()
2920 static void r8152_power_cut_en(struct r8152 *tp, bool enable) in r8152_power_cut_en() argument
2924 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_UPS_CTRL); in r8152_power_cut_en()
2929 ocp_write_word(tp, MCU_TYPE_USB, USB_UPS_CTRL, ocp_data); in r8152_power_cut_en()
2931 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_PM_CTRL_STATUS); in r8152_power_cut_en()
2933 ocp_write_word(tp, MCU_TYPE_USB, USB_PM_CTRL_STATUS, ocp_data); in r8152_power_cut_en()
2936 static void rtl_rx_vlan_en(struct r8152 *tp, bool enable) in rtl_rx_vlan_en() argument
2940 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CPCR); in rtl_rx_vlan_en()
2945 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CPCR, ocp_data); in rtl_rx_vlan_en()
2952 struct r8152 *tp = netdev_priv(dev); in rtl8152_set_features() local
2955 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_features()
2959 mutex_lock(&tp->control); in rtl8152_set_features()
2963 rtl_rx_vlan_en(tp, true); in rtl8152_set_features()
2965 rtl_rx_vlan_en(tp, false); in rtl8152_set_features()
2968 mutex_unlock(&tp->control); in rtl8152_set_features()
2970 usb_autopm_put_interface(tp->intf); in rtl8152_set_features()
2978 static u32 __rtl_get_wol(struct r8152 *tp) in __rtl_get_wol() argument
2983 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34); in __rtl_get_wol()
2987 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG5); in __rtl_get_wol()
2995 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CFG_WOL); in __rtl_get_wol()
3002 static void __rtl_set_wol(struct r8152 *tp, u32 wolopts) in __rtl_set_wol() argument
3006 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG); in __rtl_set_wol()
3008 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34); in __rtl_set_wol()
3012 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG34, ocp_data); in __rtl_set_wol()
3014 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG5); in __rtl_set_wol()
3022 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG5, ocp_data); in __rtl_set_wol()
3024 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); in __rtl_set_wol()
3026 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CFG_WOL); in __rtl_set_wol()
3030 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CFG_WOL, ocp_data); in __rtl_set_wol()
3033 device_set_wakeup_enable(&tp->udev->dev, true); in __rtl_set_wol()
3035 device_set_wakeup_enable(&tp->udev->dev, false); in __rtl_set_wol()
3038 static void r8153_u1u2en(struct r8152 *tp, bool enable) in r8153_u1u2en() argument
3047 usb_ocp_write(tp, USB_TOLERANCE, BYTE_EN_SIX_BYTES, sizeof(u1u2), u1u2); in r8153_u1u2en()
3050 static void r8153b_u1u2en(struct r8152 *tp, bool enable) in r8153b_u1u2en() argument
3054 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_LPM_CONFIG); in r8153b_u1u2en()
3060 ocp_write_word(tp, MCU_TYPE_USB, USB_LPM_CONFIG, ocp_data); in r8153b_u1u2en()
3063 static void r8153_u2p3en(struct r8152 *tp, bool enable) in r8153_u2p3en() argument
3067 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_U2P3_CTRL); in r8153_u2p3en()
3072 ocp_write_word(tp, MCU_TYPE_USB, USB_U2P3_CTRL, ocp_data); in r8153_u2p3en()
3075 static void r8153b_ups_flags(struct r8152 *tp) in r8153b_ups_flags() argument
3079 if (tp->ups_info.green) in r8153b_ups_flags()
3082 if (tp->ups_info.aldps) in r8153b_ups_flags()
3085 if (tp->ups_info.eee) in r8153b_ups_flags()
3088 if (tp->ups_info.flow_control) in r8153b_ups_flags()
3091 if (tp->ups_info.eee_ckdiv) in r8153b_ups_flags()
3094 if (tp->ups_info.eee_cmod_lv) in r8153b_ups_flags()
3097 if (tp->ups_info._10m_ckdiv) in r8153b_ups_flags()
3100 if (tp->ups_info.eee_plloff_100) in r8153b_ups_flags()
3103 if (tp->ups_info.eee_plloff_giga) in r8153b_ups_flags()
3106 if (tp->ups_info._250m_ckdiv) in r8153b_ups_flags()
3109 if (tp->ups_info.ctap_short_off) in r8153b_ups_flags()
3112 switch (tp->ups_info.speed_duplex) { in r8153b_ups_flags()
3144 ocp_write_dword(tp, MCU_TYPE_USB, USB_UPS_FLAGS, ups_flags); in r8153b_ups_flags()
3147 static void r8153b_green_en(struct r8152 *tp, bool enable) in r8153b_green_en() argument
3152 sram_write(tp, 0x8045, 0); /* 10M abiq&ldvbias */ in r8153b_green_en()
3153 sram_write(tp, 0x804d, 0x1222); /* 100M short abiq&ldvbias */ in r8153b_green_en()
3154 sram_write(tp, 0x805d, 0x0022); /* 1000M short abiq&ldvbias */ in r8153b_green_en()
3156 sram_write(tp, 0x8045, 0x2444); /* 10M abiq&ldvbias */ in r8153b_green_en()
3157 sram_write(tp, 0x804d, 0x2444); /* 100M short abiq&ldvbias */ in r8153b_green_en()
3158 sram_write(tp, 0x805d, 0x2444); /* 1000M short abiq&ldvbias */ in r8153b_green_en()
3161 data = sram_read(tp, SRAM_GREEN_CFG); in r8153b_green_en()
3163 sram_write(tp, SRAM_GREEN_CFG, data); in r8153b_green_en()
3165 tp->ups_info.green = enable; in r8153b_green_en()
3168 static u16 r8153_phy_status(struct r8152 *tp, u16 desired) in r8153_phy_status() argument
3174 data = ocp_reg_read(tp, OCP_PHY_STATUS); in r8153_phy_status()
3185 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8153_phy_status()
3192 static void r8153b_ups_en(struct r8152 *tp, bool enable) in r8153b_ups_en() argument
3194 u32 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_POWER_CUT); in r8153b_ups_en()
3197 r8153b_ups_flags(tp); in r8153b_ups_en()
3200 ocp_write_byte(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data); in r8153b_ups_en()
3202 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, 0xcfff); in r8153b_ups_en()
3204 ocp_write_byte(tp, MCU_TYPE_USB, 0xcfff, ocp_data); in r8153b_ups_en()
3209 ocp_write_byte(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data); in r8153b_ups_en()
3211 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, 0xcfff); in r8153b_ups_en()
3213 ocp_write_byte(tp, MCU_TYPE_USB, 0xcfff, ocp_data); in r8153b_ups_en()
3215 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0); in r8153b_ups_en()
3217 ocp_write_word(tp, MCU_TYPE_USB, USB_MISC_0, ocp_data); in r8153b_ups_en()
3219 data = r8153_phy_status(tp, 0); in r8153b_ups_en()
3224 r8153b_green_en(tp, in r8153b_ups_en()
3225 test_bit(GREEN_ETHERNET, &tp->flags)); in r8153b_ups_en()
3227 data = r8152_mdio_read(tp, MII_BMCR); in r8153b_ups_en()
3230 r8152_mdio_write(tp, MII_BMCR, data); in r8153b_ups_en()
3232 data = r8153_phy_status(tp, PHY_STAT_LAN_ON); in r8153b_ups_en()
3237 netif_warn(tp, link, tp->netdev, in r8153b_ups_en()
3244 static void r8153_power_cut_en(struct r8152 *tp, bool enable) in r8153_power_cut_en() argument
3248 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_POWER_CUT); in r8153_power_cut_en()
3253 ocp_write_word(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data); in r8153_power_cut_en()
3255 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0); in r8153_power_cut_en()
3257 ocp_write_word(tp, MCU_TYPE_USB, USB_MISC_0, ocp_data); in r8153_power_cut_en()
3260 static void r8153b_power_cut_en(struct r8152 *tp, bool enable) in r8153b_power_cut_en() argument
3264 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_POWER_CUT); in r8153b_power_cut_en()
3269 ocp_write_word(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data); in r8153b_power_cut_en()
3271 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0); in r8153b_power_cut_en()
3273 ocp_write_word(tp, MCU_TYPE_USB, USB_MISC_0, ocp_data); in r8153b_power_cut_en()
3276 static void r8153_queue_wake(struct r8152 *tp, bool enable) in r8153_queue_wake() argument
3280 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_INDICATE_FALG); in r8153_queue_wake()
3285 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_INDICATE_FALG, ocp_data); in r8153_queue_wake()
3287 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_SUSPEND_FLAG); in r8153_queue_wake()
3289 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_SUSPEND_FLAG, ocp_data); in r8153_queue_wake()
3291 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS); in r8153_queue_wake()
3293 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS, ocp_data); in r8153_queue_wake()
3296 static bool rtl_can_wakeup(struct r8152 *tp) in rtl_can_wakeup() argument
3298 struct usb_device *udev = tp->udev; in rtl_can_wakeup()
3303 static void rtl_runtime_suspend_enable(struct r8152 *tp, bool enable) in rtl_runtime_suspend_enable() argument
3308 __rtl_set_wol(tp, WAKE_ANY); in rtl_runtime_suspend_enable()
3310 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG); in rtl_runtime_suspend_enable()
3312 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34); in rtl_runtime_suspend_enable()
3314 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG34, ocp_data); in rtl_runtime_suspend_enable()
3316 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); in rtl_runtime_suspend_enable()
3320 __rtl_set_wol(tp, tp->saved_wolopts); in rtl_runtime_suspend_enable()
3322 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG); in rtl_runtime_suspend_enable()
3324 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34); in rtl_runtime_suspend_enable()
3326 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG34, ocp_data); in rtl_runtime_suspend_enable()
3328 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); in rtl_runtime_suspend_enable()
3332 static void rtl8153_runtime_enable(struct r8152 *tp, bool enable) in rtl8153_runtime_enable() argument
3335 r8153_u1u2en(tp, false); in rtl8153_runtime_enable()
3336 r8153_u2p3en(tp, false); in rtl8153_runtime_enable()
3337 rtl_runtime_suspend_enable(tp, true); in rtl8153_runtime_enable()
3339 rtl_runtime_suspend_enable(tp, false); in rtl8153_runtime_enable()
3341 switch (tp->version) { in rtl8153_runtime_enable()
3348 r8153_u2p3en(tp, true); in rtl8153_runtime_enable()
3352 r8153_u1u2en(tp, true); in rtl8153_runtime_enable()
3356 static void rtl8153b_runtime_enable(struct r8152 *tp, bool enable) in rtl8153b_runtime_enable() argument
3359 r8153_queue_wake(tp, true); in rtl8153b_runtime_enable()
3360 r8153b_u1u2en(tp, false); in rtl8153b_runtime_enable()
3361 r8153_u2p3en(tp, false); in rtl8153b_runtime_enable()
3362 rtl_runtime_suspend_enable(tp, true); in rtl8153b_runtime_enable()
3363 r8153b_ups_en(tp, true); in rtl8153b_runtime_enable()
3365 r8153b_ups_en(tp, false); in rtl8153b_runtime_enable()
3366 r8153_queue_wake(tp, false); in rtl8153b_runtime_enable()
3367 rtl_runtime_suspend_enable(tp, false); in rtl8153b_runtime_enable()
3368 if (tp->udev->speed != USB_SPEED_HIGH) in rtl8153b_runtime_enable()
3369 r8153b_u1u2en(tp, true); in rtl8153b_runtime_enable()
3373 static void r8153_teredo_off(struct r8152 *tp) in r8153_teredo_off() argument
3377 switch (tp->version) { in r8153_teredo_off()
3385 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG); in r8153_teredo_off()
3388 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG, ocp_data); in r8153_teredo_off()
3396 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG, 0xff); in r8153_teredo_off()
3403 ocp_write_word(tp, MCU_TYPE_PLA, PLA_WDT6_CTRL, WDT6_SET_MODE); in r8153_teredo_off()
3404 ocp_write_word(tp, MCU_TYPE_PLA, PLA_REALWOW_TIMER, 0); in r8153_teredo_off()
3405 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_TEREDO_TIMER, 0); in r8153_teredo_off()
3408 static void rtl_reset_bmu(struct r8152 *tp) in rtl_reset_bmu() argument
3412 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_BMU_RESET); in rtl_reset_bmu()
3414 ocp_write_byte(tp, MCU_TYPE_USB, USB_BMU_RESET, ocp_data); in rtl_reset_bmu()
3416 ocp_write_byte(tp, MCU_TYPE_USB, USB_BMU_RESET, ocp_data); in rtl_reset_bmu()
3420 static void rtl_clear_bp(struct r8152 *tp, u16 type) in rtl_clear_bp() argument
3422 switch (tp->version) { in rtl_clear_bp()
3431 ocp_write_byte(tp, type, PLA_BP_EN, 0); in rtl_clear_bp()
3437 ocp_write_word(tp, MCU_TYPE_USB, USB_BP2_EN, 0); in rtl_clear_bp()
3439 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_8, 0); in rtl_clear_bp()
3440 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_9, 0); in rtl_clear_bp()
3441 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_10, 0); in rtl_clear_bp()
3442 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_11, 0); in rtl_clear_bp()
3443 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_12, 0); in rtl_clear_bp()
3444 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_13, 0); in rtl_clear_bp()
3445 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_14, 0); in rtl_clear_bp()
3446 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_15, 0); in rtl_clear_bp()
3448 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_BP_EN, 0); in rtl_clear_bp()
3453 ocp_write_word(tp, type, PLA_BP_0, 0); in rtl_clear_bp()
3454 ocp_write_word(tp, type, PLA_BP_1, 0); in rtl_clear_bp()
3455 ocp_write_word(tp, type, PLA_BP_2, 0); in rtl_clear_bp()
3456 ocp_write_word(tp, type, PLA_BP_3, 0); in rtl_clear_bp()
3457 ocp_write_word(tp, type, PLA_BP_4, 0); in rtl_clear_bp()
3458 ocp_write_word(tp, type, PLA_BP_5, 0); in rtl_clear_bp()
3459 ocp_write_word(tp, type, PLA_BP_6, 0); in rtl_clear_bp()
3460 ocp_write_word(tp, type, PLA_BP_7, 0); in rtl_clear_bp()
3464 ocp_write_word(tp, type, PLA_BP_BA, 0); in rtl_clear_bp()
3467 static int r8153_patch_request(struct r8152 *tp, bool request) in r8153_patch_request() argument
3472 data = ocp_reg_read(tp, OCP_PHY_PATCH_CMD); in r8153_patch_request()
3477 ocp_reg_write(tp, OCP_PHY_PATCH_CMD, data); in r8153_patch_request()
3481 if (ocp_reg_read(tp, OCP_PHY_PATCH_STAT) & PATCH_READY) in r8153_patch_request()
3485 if (request && !(ocp_reg_read(tp, OCP_PHY_PATCH_STAT) & PATCH_READY)) { in r8153_patch_request()
3486 netif_err(tp, drv, tp->netdev, "patch request fail\n"); in r8153_patch_request()
3487 r8153_patch_request(tp, false); in r8153_patch_request()
3494 static int r8153_pre_ram_code(struct r8152 *tp, u16 key_addr, u16 patch_key) in r8153_pre_ram_code() argument
3496 if (r8153_patch_request(tp, true)) { in r8153_pre_ram_code()
3497 dev_err(&tp->intf->dev, "patch request fail\n"); in r8153_pre_ram_code()
3501 sram_write(tp, key_addr, patch_key); in r8153_pre_ram_code()
3502 sram_write(tp, SRAM_PHY_LOCK, PHY_PATCH_LOCK); in r8153_pre_ram_code()
3507 static int r8153_post_ram_code(struct r8152 *tp, u16 key_addr) in r8153_post_ram_code() argument
3511 sram_write(tp, 0x0000, 0x0000); in r8153_post_ram_code()
3513 data = ocp_reg_read(tp, OCP_PHY_LOCK); in r8153_post_ram_code()
3515 ocp_reg_write(tp, OCP_PHY_LOCK, data); in r8153_post_ram_code()
3517 sram_write(tp, key_addr, 0x0000); in r8153_post_ram_code()
3519 r8153_patch_request(tp, false); in r8153_post_ram_code()
3521 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, tp->ocp_base); in r8153_post_ram_code()
3526 static bool rtl8152_is_fw_phy_nc_ok(struct r8152 *tp, struct fw_phy_nc *phy) in rtl8152_is_fw_phy_nc_ok() argument
3532 switch (tp->version) { in rtl8152_is_fw_phy_nc_ok()
3548 dev_err(&tp->intf->dev, "fw_offset too small\n"); in rtl8152_is_fw_phy_nc_ok()
3554 dev_err(&tp->intf->dev, "invalid fw_offset\n"); in rtl8152_is_fw_phy_nc_ok()
3560 dev_err(&tp->intf->dev, "invalid block length\n"); in rtl8152_is_fw_phy_nc_ok()
3565 dev_err(&tp->intf->dev, "invalid register to load firmware\n"); in rtl8152_is_fw_phy_nc_ok()
3570 dev_err(&tp->intf->dev, "invalid base address register\n"); in rtl8152_is_fw_phy_nc_ok()
3575 dev_err(&tp->intf->dev, in rtl8152_is_fw_phy_nc_ok()
3581 dev_err(&tp->intf->dev, in rtl8152_is_fw_phy_nc_ok()
3587 dev_err(&tp->intf->dev, in rtl8152_is_fw_phy_nc_ok()
3593 dev_err(&tp->intf->dev, "invalid break point number\n"); in rtl8152_is_fw_phy_nc_ok()
3602 static bool rtl8152_is_fw_mac_ok(struct r8152 *tp, struct fw_mac *mac) in rtl8152_is_fw_mac_ok() argument
3611 switch (tp->version) { in rtl8152_is_fw_mac_ok()
3637 switch (tp->version) { in rtl8152_is_fw_mac_ok()
3668 dev_err(&tp->intf->dev, "fw_offset too small\n"); in rtl8152_is_fw_mac_ok()
3674 dev_err(&tp->intf->dev, "invalid fw_offset\n"); in rtl8152_is_fw_mac_ok()
3680 dev_err(&tp->intf->dev, "invalid block length\n"); in rtl8152_is_fw_mac_ok()
3685 dev_err(&tp->intf->dev, "invalid register to load firmware\n"); in rtl8152_is_fw_mac_ok()
3690 dev_err(&tp->intf->dev, "invalid base address register\n"); in rtl8152_is_fw_mac_ok()
3695 dev_err(&tp->intf->dev, "invalid enabled mask register\n"); in rtl8152_is_fw_mac_ok()
3700 dev_err(&tp->intf->dev, in rtl8152_is_fw_mac_ok()
3706 dev_err(&tp->intf->dev, "invalid break point number\n"); in rtl8152_is_fw_mac_ok()
3712 dev_err(&tp->intf->dev, "unused bp%u is not zero\n", i); in rtl8152_is_fw_mac_ok()
3726 static long rtl8152_fw_verify_checksum(struct r8152 *tp, in rtl8152_fw_verify_checksum() argument
3743 dev_err(&tp->intf->dev, "digestsize incorrect (%u)\n", in rtl8152_fw_verify_checksum()
3763 dev_err(&tp->intf->dev, "checksum fail\n"); in rtl8152_fw_verify_checksum()
3773 static long rtl8152_check_firmware(struct r8152 *tp, struct rtl_fw *rtl_fw) in rtl8152_check_firmware() argument
3785 dev_err(&tp->intf->dev, "file too small\n"); in rtl8152_check_firmware()
3789 ret = rtl8152_fw_verify_checksum(tp, fw_hdr, fw->size); in rtl8152_check_firmware()
3810 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
3816 if (!rtl8152_is_fw_mac_ok(tp, pla)) { in rtl8152_check_firmware()
3817 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
3824 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
3830 if (!rtl8152_is_fw_mac_ok(tp, usb)) { in rtl8152_check_firmware()
3831 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
3838 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
3844 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
3853 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
3859 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
3868 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
3874 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
3880 if (!rtl8152_is_fw_phy_nc_ok(tp, phy_nc)) { in rtl8152_check_firmware()
3881 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
3888 dev_warn(&tp->intf->dev, "Unknown type %u is found\n", in rtl8152_check_firmware()
3899 dev_err(&tp->intf->dev, "without PHY_STOP\n"); in rtl8152_check_firmware()
3908 static void rtl8152_fw_phy_nc_apply(struct r8152 *tp, struct fw_phy_nc *phy) in rtl8152_fw_phy_nc_apply() argument
3915 sram_write(tp, mode_reg, __le16_to_cpu(phy->mode_pre)); in rtl8152_fw_phy_nc_apply()
3916 sram_write(tp, __le16_to_cpu(phy->ba_reg), in rtl8152_fw_phy_nc_apply()
3924 ocp_reg_write(tp, OCP_SRAM_ADDR, __le16_to_cpu(phy->fw_reg)); in rtl8152_fw_phy_nc_apply()
3926 ocp_reg_write(tp, OCP_SRAM_DATA, __le16_to_cpu(data[i])); in rtl8152_fw_phy_nc_apply()
3928 sram_write(tp, __le16_to_cpu(phy->patch_en_addr), in rtl8152_fw_phy_nc_apply()
3934 sram_write(tp, bp_index, __le16_to_cpu(phy->bp[i])); in rtl8152_fw_phy_nc_apply()
3938 sram_write(tp, mode_reg, __le16_to_cpu(phy->mode_post)); in rtl8152_fw_phy_nc_apply()
3940 dev_dbg(&tp->intf->dev, "successfully applied %s\n", phy->info); in rtl8152_fw_phy_nc_apply()
3943 static void rtl8152_fw_mac_apply(struct r8152 *tp, struct fw_mac *mac) in rtl8152_fw_mac_apply() argument
3961 rtl_clear_bp(tp, type); in rtl8152_fw_mac_apply()
3966 if (tp->version == RTL_VER_04 && type == MCU_TYPE_PLA && in rtl8152_fw_mac_apply()
3967 !(ocp_read_word(tp, MCU_TYPE_PLA, PLA_MACDBG_POST) & DEBUG_OE)) { in rtl8152_fw_mac_apply()
3968 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MACDBG_PRE, DEBUG_LTSSM); in rtl8152_fw_mac_apply()
3969 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MACDBG_POST, DEBUG_LTSSM); in rtl8152_fw_mac_apply()
3978 generic_ocp_write(tp, __le16_to_cpu(mac->fw_reg), 0xff, length, data, in rtl8152_fw_mac_apply()
3981 ocp_write_word(tp, type, __le16_to_cpu(mac->bp_ba_addr), in rtl8152_fw_mac_apply()
3987 ocp_write_word(tp, type, bp_index, __le16_to_cpu(mac->bp[i])); in rtl8152_fw_mac_apply()
3993 ocp_write_word(tp, type, bp_en_addr, in rtl8152_fw_mac_apply()
3998 ocp_write_byte(tp, MCU_TYPE_USB, fw_ver_reg, in rtl8152_fw_mac_apply()
4001 dev_dbg(&tp->intf->dev, "successfully applied %s\n", mac->info); in rtl8152_fw_mac_apply()
4004 static void rtl8152_apply_firmware(struct r8152 *tp) in rtl8152_apply_firmware() argument
4006 struct rtl_fw *rtl_fw = &tp->rtl_fw; in rtl8152_apply_firmware()
4020 rtl_fw->pre_fw(tp); in rtl8152_apply_firmware()
4030 rtl8152_fw_mac_apply(tp, (struct fw_mac *)block); in rtl8152_apply_firmware()
4035 r8153_pre_ram_code(tp, key_addr, in rtl8152_apply_firmware()
4040 r8153_post_ram_code(tp, key_addr); in rtl8152_apply_firmware()
4043 rtl8152_fw_phy_nc_apply(tp, (struct fw_phy_nc *)block); in rtl8152_apply_firmware()
4054 rtl_fw->post_fw(tp); in rtl8152_apply_firmware()
4057 dev_info(&tp->intf->dev, "load %s successfully\n", rtl_fw->version); in rtl8152_apply_firmware()
4060 static void rtl8152_release_firmware(struct r8152 *tp) in rtl8152_release_firmware() argument
4062 struct rtl_fw *rtl_fw = &tp->rtl_fw; in rtl8152_release_firmware()
4070 static int rtl8152_request_firmware(struct r8152 *tp) in rtl8152_request_firmware() argument
4072 struct rtl_fw *rtl_fw = &tp->rtl_fw; in rtl8152_request_firmware()
4076 dev_info(&tp->intf->dev, "skip request firmware\n"); in rtl8152_request_firmware()
4081 rc = request_firmware(&rtl_fw->fw, rtl_fw->fw_name, &tp->intf->dev); in rtl8152_request_firmware()
4085 rc = rtl8152_check_firmware(tp, rtl_fw); in rtl8152_request_firmware()
4093 dev_warn(&tp->intf->dev, in rtl8152_request_firmware()
4101 static void r8152_aldps_en(struct r8152 *tp, bool enable) in r8152_aldps_en() argument
4104 ocp_reg_write(tp, OCP_ALDPS_CONFIG, ENPWRSAVE | ENPDNPS | in r8152_aldps_en()
4107 ocp_reg_write(tp, OCP_ALDPS_CONFIG, ENPDNPS | LINKENA | in r8152_aldps_en()
4113 static inline void r8152_mmd_indirect(struct r8152 *tp, u16 dev, u16 reg) in r8152_mmd_indirect() argument
4115 ocp_reg_write(tp, OCP_EEE_AR, FUN_ADDR | dev); in r8152_mmd_indirect()
4116 ocp_reg_write(tp, OCP_EEE_DATA, reg); in r8152_mmd_indirect()
4117 ocp_reg_write(tp, OCP_EEE_AR, FUN_DATA | dev); in r8152_mmd_indirect()
4120 static u16 r8152_mmd_read(struct r8152 *tp, u16 dev, u16 reg) in r8152_mmd_read() argument
4124 r8152_mmd_indirect(tp, dev, reg); in r8152_mmd_read()
4125 data = ocp_reg_read(tp, OCP_EEE_DATA); in r8152_mmd_read()
4126 ocp_reg_write(tp, OCP_EEE_AR, 0x0000); in r8152_mmd_read()
4131 static void r8152_mmd_write(struct r8152 *tp, u16 dev, u16 reg, u16 data) in r8152_mmd_write() argument
4133 r8152_mmd_indirect(tp, dev, reg); in r8152_mmd_write()
4134 ocp_reg_write(tp, OCP_EEE_DATA, data); in r8152_mmd_write()
4135 ocp_reg_write(tp, OCP_EEE_AR, 0x0000); in r8152_mmd_write()
4138 static void r8152_eee_en(struct r8152 *tp, bool enable) in r8152_eee_en() argument
4143 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEE_CR); in r8152_eee_en()
4144 config1 = ocp_reg_read(tp, OCP_EEE_CONFIG1) & ~sd_rise_time_mask; in r8152_eee_en()
4145 config2 = ocp_reg_read(tp, OCP_EEE_CONFIG2); in r8152_eee_en()
4146 config3 = ocp_reg_read(tp, OCP_EEE_CONFIG3) & ~fast_snr_mask; in r8152_eee_en()
4163 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEE_CR, ocp_data); in r8152_eee_en()
4164 ocp_reg_write(tp, OCP_EEE_CONFIG1, config1); in r8152_eee_en()
4165 ocp_reg_write(tp, OCP_EEE_CONFIG2, config2); in r8152_eee_en()
4166 ocp_reg_write(tp, OCP_EEE_CONFIG3, config3); in r8152_eee_en()
4169 static void r8153_eee_en(struct r8152 *tp, bool enable) in r8153_eee_en() argument
4174 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEE_CR); in r8153_eee_en()
4175 config = ocp_reg_read(tp, OCP_EEE_CFG); in r8153_eee_en()
4185 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEE_CR, ocp_data); in r8153_eee_en()
4186 ocp_reg_write(tp, OCP_EEE_CFG, config); in r8153_eee_en()
4188 tp->ups_info.eee = enable; in r8153_eee_en()
4191 static void rtl_eee_enable(struct r8152 *tp, bool enable) in rtl_eee_enable() argument
4193 switch (tp->version) { in rtl_eee_enable()
4198 r8152_eee_en(tp, true); in rtl_eee_enable()
4199 r8152_mmd_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, in rtl_eee_enable()
4200 tp->eee_adv); in rtl_eee_enable()
4202 r8152_eee_en(tp, false); in rtl_eee_enable()
4203 r8152_mmd_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, 0); in rtl_eee_enable()
4213 r8153_eee_en(tp, true); in rtl_eee_enable()
4214 ocp_reg_write(tp, OCP_EEE_ADV, tp->eee_adv); in rtl_eee_enable()
4216 r8153_eee_en(tp, false); in rtl_eee_enable()
4217 ocp_reg_write(tp, OCP_EEE_ADV, 0); in rtl_eee_enable()
4225 static void r8152b_enable_fc(struct r8152 *tp) in r8152b_enable_fc() argument
4229 anar = r8152_mdio_read(tp, MII_ADVERTISE); in r8152b_enable_fc()
4231 r8152_mdio_write(tp, MII_ADVERTISE, anar); in r8152b_enable_fc()
4233 tp->ups_info.flow_control = true; in r8152b_enable_fc()
4236 static void rtl8152_disable(struct r8152 *tp) in rtl8152_disable() argument
4238 r8152_aldps_en(tp, false); in rtl8152_disable()
4239 rtl_disable(tp); in rtl8152_disable()
4240 r8152_aldps_en(tp, true); in rtl8152_disable()
4243 static void r8152b_hw_phy_cfg(struct r8152 *tp) in r8152b_hw_phy_cfg() argument
4245 rtl8152_apply_firmware(tp); in r8152b_hw_phy_cfg()
4246 rtl_eee_enable(tp, tp->eee_en); in r8152b_hw_phy_cfg()
4247 r8152_aldps_en(tp, true); in r8152b_hw_phy_cfg()
4248 r8152b_enable_fc(tp); in r8152b_hw_phy_cfg()
4250 set_bit(PHY_RESET, &tp->flags); in r8152b_hw_phy_cfg()
4253 static void wait_oob_link_list_ready(struct r8152 *tp) in wait_oob_link_list_ready() argument
4259 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in wait_oob_link_list_ready()
4266 static void r8152b_exit_oob(struct r8152 *tp) in r8152b_exit_oob() argument
4270 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in r8152b_exit_oob()
4272 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in r8152b_exit_oob()
4274 rxdy_gated_en(tp, true); in r8152b_exit_oob()
4275 r8153_teredo_off(tp); in r8152b_exit_oob()
4276 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); in r8152b_exit_oob()
4277 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, 0x00); in r8152b_exit_oob()
4279 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8152b_exit_oob()
4281 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8152b_exit_oob()
4283 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8152b_exit_oob()
4285 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8152b_exit_oob()
4287 wait_oob_link_list_ready(tp); in r8152b_exit_oob()
4289 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8152b_exit_oob()
4291 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8152b_exit_oob()
4293 wait_oob_link_list_ready(tp); in r8152b_exit_oob()
4295 rtl8152_nic_reset(tp); in r8152b_exit_oob()
4298 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL0, RXFIFO_THR1_NORMAL); in r8152b_exit_oob()
4300 if (tp->udev->speed == USB_SPEED_FULL || in r8152b_exit_oob()
4301 tp->udev->speed == USB_SPEED_LOW) { in r8152b_exit_oob()
4303 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, in r8152b_exit_oob()
4305 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, in r8152b_exit_oob()
4309 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, in r8152b_exit_oob()
4311 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, in r8152b_exit_oob()
4316 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_TXFIFO_CTRL, TXFIFO_THR_NORMAL); in r8152b_exit_oob()
4318 ocp_write_byte(tp, MCU_TYPE_USB, USB_TX_AGG, TX_AGG_MAX_THRESHOLD); in r8152b_exit_oob()
4319 ocp_write_dword(tp, MCU_TYPE_USB, USB_RX_BUF_TH, RX_THR_HIGH); in r8152b_exit_oob()
4320 ocp_write_dword(tp, MCU_TYPE_USB, USB_TX_DMA, in r8152b_exit_oob()
4323 rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX); in r8152b_exit_oob()
4325 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, RTL8152_RMS); in r8152b_exit_oob()
4327 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR0); in r8152b_exit_oob()
4329 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TCR0, ocp_data); in r8152b_exit_oob()
4332 static void r8152b_enter_oob(struct r8152 *tp) in r8152b_enter_oob() argument
4336 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8152b_enter_oob()
4338 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8152b_enter_oob()
4340 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL0, RXFIFO_THR1_OOB); in r8152b_enter_oob()
4341 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, RXFIFO_THR2_OOB); in r8152b_enter_oob()
4342 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, RXFIFO_THR3_OOB); in r8152b_enter_oob()
4344 rtl_disable(tp); in r8152b_enter_oob()
4346 wait_oob_link_list_ready(tp); in r8152b_enter_oob()
4348 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8152b_enter_oob()
4350 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8152b_enter_oob()
4352 wait_oob_link_list_ready(tp); in r8152b_enter_oob()
4354 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, RTL8152_RMS); in r8152b_enter_oob()
4356 rtl_rx_vlan_en(tp, true); in r8152b_enter_oob()
4358 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_BDC_CR); in r8152b_enter_oob()
4360 ocp_write_word(tp, MCU_TYPE_PLA, PLA_BDC_CR, ocp_data); in r8152b_enter_oob()
4362 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8152b_enter_oob()
4364 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8152b_enter_oob()
4366 rxdy_gated_en(tp, false); in r8152b_enter_oob()
4368 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in r8152b_enter_oob()
4370 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in r8152b_enter_oob()
4373 static int r8153_pre_firmware_1(struct r8152 *tp) in r8153_pre_firmware_1() argument
4379 u32 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_WDT1_CTRL); in r8153_pre_firmware_1()
4389 static int r8153_post_firmware_1(struct r8152 *tp) in r8153_post_firmware_1() argument
4392 if (ocp_read_byte(tp, MCU_TYPE_USB, USB_CSTMR) & FORCE_SUPER) in r8153_post_firmware_1()
4393 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_4, BP4_SUPER_ONLY); in r8153_post_firmware_1()
4396 ocp_write_word(tp, MCU_TYPE_PLA, PLA_UPHY_TIMER, 36000 / 16); in r8153_post_firmware_1()
4401 static int r8153_pre_firmware_2(struct r8152 *tp) in r8153_pre_firmware_2() argument
4405 r8153_pre_firmware_1(tp); in r8153_pre_firmware_2()
4407 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN0); in r8153_pre_firmware_2()
4409 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN0, ocp_data); in r8153_pre_firmware_2()
4414 static int r8153_post_firmware_2(struct r8152 *tp) in r8153_post_firmware_2() argument
4419 if (ocp_read_byte(tp, MCU_TYPE_USB, USB_CSTMR) & FORCE_SUPER) { in r8153_post_firmware_2()
4420 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_BP_EN); in r8153_post_firmware_2()
4422 ocp_write_word(tp, MCU_TYPE_PLA, PLA_BP_EN, ocp_data); in r8153_post_firmware_2()
4426 ocp_write_word(tp, MCU_TYPE_PLA, PLA_UPHY_TIMER, 36000 / 16); in r8153_post_firmware_2()
4429 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS, U3P3_CHECK_EN | 4); in r8153_post_firmware_2()
4431 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN0); in r8153_post_firmware_2()
4433 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN0, ocp_data); in r8153_post_firmware_2()
4435 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_USB2PHY); in r8153_post_firmware_2()
4437 ocp_write_byte(tp, MCU_TYPE_USB, USB_USB2PHY, ocp_data); in r8153_post_firmware_2()
4442 static int r8153_post_firmware_3(struct r8152 *tp) in r8153_post_firmware_3() argument
4446 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_USB2PHY); in r8153_post_firmware_3()
4448 ocp_write_byte(tp, MCU_TYPE_USB, USB_USB2PHY, ocp_data); in r8153_post_firmware_3()
4450 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1); in r8153_post_firmware_3()
4452 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1, ocp_data); in r8153_post_firmware_3()
4457 static int r8153b_pre_firmware_1(struct r8152 *tp) in r8153b_pre_firmware_1() argument
4460 ocp_write_word(tp, MCU_TYPE_USB, USB_FC_TIMER, in r8153b_pre_firmware_1()
4466 static int r8153b_post_firmware_1(struct r8152 *tp) in r8153b_post_firmware_1() argument
4471 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_MISC_1); in r8153b_post_firmware_1()
4473 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_BP_EN); in r8153b_post_firmware_1()
4475 ocp_write_word(tp, MCU_TYPE_PLA, PLA_BP_EN, ocp_data); in r8153b_post_firmware_1()
4478 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_CTRL); in r8153b_post_firmware_1()
4480 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_CTRL, ocp_data); in r8153b_post_firmware_1()
4482 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_TASK); in r8153b_post_firmware_1()
4484 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_TASK, ocp_data); in r8153b_post_firmware_1()
4486 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1); in r8153b_post_firmware_1()
4488 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1, ocp_data); in r8153b_post_firmware_1()
4493 static void r8153_aldps_en(struct r8152 *tp, bool enable) in r8153_aldps_en() argument
4497 data = ocp_reg_read(tp, OCP_POWER_CFG); in r8153_aldps_en()
4500 ocp_reg_write(tp, OCP_POWER_CFG, data); in r8153_aldps_en()
4505 ocp_reg_write(tp, OCP_POWER_CFG, data); in r8153_aldps_en()
4508 if (ocp_read_word(tp, MCU_TYPE_PLA, 0xe000) & 0x0100) in r8153_aldps_en()
4513 tp->ups_info.aldps = enable; in r8153_aldps_en()
4516 static void r8153_hw_phy_cfg(struct r8152 *tp) in r8153_hw_phy_cfg() argument
4522 r8153_aldps_en(tp, false); in r8153_hw_phy_cfg()
4525 rtl_eee_enable(tp, false); in r8153_hw_phy_cfg()
4527 rtl8152_apply_firmware(tp); in r8153_hw_phy_cfg()
4529 if (tp->version == RTL_VER_03) { in r8153_hw_phy_cfg()
4530 data = ocp_reg_read(tp, OCP_EEE_CFG); in r8153_hw_phy_cfg()
4532 ocp_reg_write(tp, OCP_EEE_CFG, data); in r8153_hw_phy_cfg()
4535 data = ocp_reg_read(tp, OCP_POWER_CFG); in r8153_hw_phy_cfg()
4537 ocp_reg_write(tp, OCP_POWER_CFG, data); in r8153_hw_phy_cfg()
4539 data = ocp_reg_read(tp, OCP_DOWN_SPEED); in r8153_hw_phy_cfg()
4541 ocp_reg_write(tp, OCP_DOWN_SPEED, data); in r8153_hw_phy_cfg()
4542 data = ocp_reg_read(tp, OCP_POWER_CFG); in r8153_hw_phy_cfg()
4544 ocp_reg_write(tp, OCP_POWER_CFG, data); in r8153_hw_phy_cfg()
4545 sram_write(tp, SRAM_IMPEDANCE, 0x0b13); in r8153_hw_phy_cfg()
4547 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR); in r8153_hw_phy_cfg()
4549 ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data); in r8153_hw_phy_cfg()
4552 sram_write(tp, SRAM_LPF_CFG, 0xf70f); in r8153_hw_phy_cfg()
4555 sram_write(tp, SRAM_10M_AMP1, 0x00af); in r8153_hw_phy_cfg()
4556 sram_write(tp, SRAM_10M_AMP2, 0x0208); in r8153_hw_phy_cfg()
4558 if (tp->eee_en) in r8153_hw_phy_cfg()
4559 rtl_eee_enable(tp, true); in r8153_hw_phy_cfg()
4561 r8153_aldps_en(tp, true); in r8153_hw_phy_cfg()
4562 r8152b_enable_fc(tp); in r8153_hw_phy_cfg()
4564 switch (tp->version) { in r8153_hw_phy_cfg()
4571 r8153_u2p3en(tp, true); in r8153_hw_phy_cfg()
4575 set_bit(PHY_RESET, &tp->flags); in r8153_hw_phy_cfg()
4578 static u32 r8152_efuse_read(struct r8152 *tp, u8 addr) in r8152_efuse_read() argument
4582 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EFUSE_CMD, EFUSE_READ_CMD | addr); in r8152_efuse_read()
4583 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EFUSE_CMD); in r8152_efuse_read()
4585 ocp_data |= ocp_read_word(tp, MCU_TYPE_PLA, PLA_EFUSE_DATA); in r8152_efuse_read()
4590 static void r8153b_hw_phy_cfg(struct r8152 *tp) in r8153b_hw_phy_cfg() argument
4596 r8153_aldps_en(tp, false); in r8153b_hw_phy_cfg()
4599 rtl_eee_enable(tp, false); in r8153b_hw_phy_cfg()
4601 rtl8152_apply_firmware(tp); in r8153b_hw_phy_cfg()
4603 r8153b_green_en(tp, test_bit(GREEN_ETHERNET, &tp->flags)); in r8153b_hw_phy_cfg()
4605 data = sram_read(tp, SRAM_GREEN_CFG); in r8153b_hw_phy_cfg()
4607 sram_write(tp, SRAM_GREEN_CFG, data); in r8153b_hw_phy_cfg()
4608 data = ocp_reg_read(tp, OCP_NCTL_CFG); in r8153b_hw_phy_cfg()
4610 ocp_reg_write(tp, OCP_NCTL_CFG, data); in r8153b_hw_phy_cfg()
4617 ocp_data = r8152_efuse_read(tp, 0x7d); in r8153b_hw_phy_cfg()
4620 ocp_reg_write(tp, OCP_ADC_IOFFSET, data); in r8153b_hw_phy_cfg()
4626 ocp_data = ocp_reg_read(tp, 0xc426); in r8153b_hw_phy_cfg()
4632 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_UPS_CFG); in r8153b_hw_phy_cfg()
4634 ocp_write_word(tp, MCU_TYPE_USB, USB_UPS_CFG, ocp_data); in r8153b_hw_phy_cfg()
4637 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR); in r8153b_hw_phy_cfg()
4639 ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data); in r8153b_hw_phy_cfg()
4642 if (!r8153_patch_request(tp, true)) { in r8153b_hw_phy_cfg()
4643 data = ocp_reg_read(tp, OCP_POWER_CFG); in r8153b_hw_phy_cfg()
4645 ocp_reg_write(tp, OCP_POWER_CFG, data); in r8153b_hw_phy_cfg()
4646 tp->ups_info.eee_ckdiv = true; in r8153b_hw_phy_cfg()
4648 data = ocp_reg_read(tp, OCP_DOWN_SPEED); in r8153b_hw_phy_cfg()
4650 ocp_reg_write(tp, OCP_DOWN_SPEED, data); in r8153b_hw_phy_cfg()
4651 tp->ups_info.eee_cmod_lv = true; in r8153b_hw_phy_cfg()
4652 tp->ups_info._10m_ckdiv = true; in r8153b_hw_phy_cfg()
4653 tp->ups_info.eee_plloff_giga = true; in r8153b_hw_phy_cfg()
4655 ocp_reg_write(tp, OCP_SYSCLK_CFG, 0); in r8153b_hw_phy_cfg()
4656 ocp_reg_write(tp, OCP_SYSCLK_CFG, clk_div_expo(5)); in r8153b_hw_phy_cfg()
4657 tp->ups_info._250m_ckdiv = true; in r8153b_hw_phy_cfg()
4659 r8153_patch_request(tp, false); in r8153b_hw_phy_cfg()
4662 if (tp->eee_en) in r8153b_hw_phy_cfg()
4663 rtl_eee_enable(tp, true); in r8153b_hw_phy_cfg()
4665 r8153_aldps_en(tp, true); in r8153b_hw_phy_cfg()
4666 r8152b_enable_fc(tp); in r8153b_hw_phy_cfg()
4668 set_bit(PHY_RESET, &tp->flags); in r8153b_hw_phy_cfg()
4671 static void r8153_first_init(struct r8152 *tp) in r8153_first_init() argument
4675 rxdy_gated_en(tp, true); in r8153_first_init()
4676 r8153_teredo_off(tp); in r8153_first_init()
4678 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in r8153_first_init()
4680 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in r8153_first_init()
4682 rtl8152_nic_reset(tp); in r8153_first_init()
4683 rtl_reset_bmu(tp); in r8153_first_init()
4685 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8153_first_init()
4687 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8153_first_init()
4689 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8153_first_init()
4691 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8153_first_init()
4693 wait_oob_link_list_ready(tp); in r8153_first_init()
4695 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8153_first_init()
4697 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8153_first_init()
4699 wait_oob_link_list_ready(tp); in r8153_first_init()
4701 rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX); in r8153_first_init()
4703 ocp_data = tp->netdev->mtu + VLAN_ETH_HLEN + ETH_FCS_LEN; in r8153_first_init()
4704 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, ocp_data); in r8153_first_init()
4705 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_MTPS, MTPS_JUMBO); in r8153_first_init()
4707 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR0); in r8153_first_init()
4709 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TCR0, ocp_data); in r8153_first_init()
4711 rtl8152_nic_reset(tp); in r8153_first_init()
4714 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL0, RXFIFO_THR1_NORMAL); in r8153_first_init()
4715 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, RXFIFO_THR2_NORMAL); in r8153_first_init()
4716 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, RXFIFO_THR3_NORMAL); in r8153_first_init()
4718 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_TXFIFO_CTRL, TXFIFO_THR_NORMAL2); in r8153_first_init()
4721 static void r8153_enter_oob(struct r8152 *tp) in r8153_enter_oob() argument
4725 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8153_enter_oob()
4727 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8153_enter_oob()
4729 rtl_disable(tp); in r8153_enter_oob()
4730 rtl_reset_bmu(tp); in r8153_enter_oob()
4732 wait_oob_link_list_ready(tp); in r8153_enter_oob()
4734 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8153_enter_oob()
4736 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8153_enter_oob()
4738 wait_oob_link_list_ready(tp); in r8153_enter_oob()
4740 ocp_data = tp->netdev->mtu + VLAN_ETH_HLEN + ETH_FCS_LEN; in r8153_enter_oob()
4741 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, ocp_data); in r8153_enter_oob()
4743 switch (tp->version) { in r8153_enter_oob()
4748 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG); in r8153_enter_oob()
4750 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG, ocp_data); in r8153_enter_oob()
4759 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TEREDO_WAKE_BASE, 0x00ff); in r8153_enter_oob()
4766 rtl_rx_vlan_en(tp, true); in r8153_enter_oob()
4768 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_BDC_CR); in r8153_enter_oob()
4770 ocp_write_word(tp, MCU_TYPE_PLA, PLA_BDC_CR, ocp_data); in r8153_enter_oob()
4772 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8153_enter_oob()
4774 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8153_enter_oob()
4776 rxdy_gated_en(tp, false); in r8153_enter_oob()
4778 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in r8153_enter_oob()
4780 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in r8153_enter_oob()
4783 static void rtl8153_disable(struct r8152 *tp) in rtl8153_disable() argument
4785 r8153_aldps_en(tp, false); in rtl8153_disable()
4786 rtl_disable(tp); in rtl8153_disable()
4787 rtl_reset_bmu(tp); in rtl8153_disable()
4788 r8153_aldps_en(tp, true); in rtl8153_disable()
4791 static int rtl8152_set_speed(struct r8152 *tp, u8 autoneg, u32 speed, u8 duplex, in rtl8152_set_speed() argument
4806 tp->ups_info.speed_duplex = FORCE_10M_FULL; in rtl8152_set_speed()
4808 tp->ups_info.speed_duplex = FORCE_10M_HALF; in rtl8152_set_speed()
4815 tp->ups_info.speed_duplex = FORCE_100M_FULL; in rtl8152_set_speed()
4817 tp->ups_info.speed_duplex = FORCE_100M_HALF; in rtl8152_set_speed()
4821 if (tp->mii.supports_gmii) { in rtl8152_set_speed()
4823 tp->ups_info.speed_duplex = NWAY_1000M_FULL; in rtl8152_set_speed()
4833 tp->mii.full_duplex = 1; in rtl8152_set_speed()
4835 tp->mii.full_duplex = 0; in rtl8152_set_speed()
4837 tp->mii.force_media = 1; in rtl8152_set_speed()
4845 if (tp->mii.supports_gmii) in rtl8152_set_speed()
4851 anar = r8152_mdio_read(tp, MII_ADVERTISE); in rtl8152_set_speed()
4856 tp->ups_info.speed_duplex = NWAY_10M_HALF; in rtl8152_set_speed()
4860 tp->ups_info.speed_duplex = NWAY_10M_FULL; in rtl8152_set_speed()
4865 tp->ups_info.speed_duplex = NWAY_100M_HALF; in rtl8152_set_speed()
4869 tp->ups_info.speed_duplex = NWAY_100M_FULL; in rtl8152_set_speed()
4873 r8152_mdio_write(tp, MII_ADVERTISE, tmp1); in rtl8152_set_speed()
4874 tp->mii.advertising = tmp1; in rtl8152_set_speed()
4877 if (tp->mii.supports_gmii) { in rtl8152_set_speed()
4880 gbcr = r8152_mdio_read(tp, MII_CTRL1000); in rtl8152_set_speed()
4886 tp->ups_info.speed_duplex = NWAY_1000M_FULL; in rtl8152_set_speed()
4890 r8152_mdio_write(tp, MII_CTRL1000, tmp1); in rtl8152_set_speed()
4895 tp->mii.force_media = 0; in rtl8152_set_speed()
4898 if (test_and_clear_bit(PHY_RESET, &tp->flags)) in rtl8152_set_speed()
4901 r8152_mdio_write(tp, MII_BMCR, bmcr); in rtl8152_set_speed()
4908 if ((r8152_mdio_read(tp, MII_BMCR) & BMCR_RESET) == 0) in rtl8152_set_speed()
4917 static void rtl8152_up(struct r8152 *tp) in rtl8152_up() argument
4919 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8152_up()
4922 r8152_aldps_en(tp, false); in rtl8152_up()
4923 r8152b_exit_oob(tp); in rtl8152_up()
4924 r8152_aldps_en(tp, true); in rtl8152_up()
4927 static void rtl8152_down(struct r8152 *tp) in rtl8152_down() argument
4929 if (test_bit(RTL8152_UNPLUG, &tp->flags)) { in rtl8152_down()
4930 rtl_drop_queued_tx(tp); in rtl8152_down()
4934 r8152_power_cut_en(tp, false); in rtl8152_down()
4935 r8152_aldps_en(tp, false); in rtl8152_down()
4936 r8152b_enter_oob(tp); in rtl8152_down()
4937 r8152_aldps_en(tp, true); in rtl8152_down()
4940 static void rtl8153_up(struct r8152 *tp) in rtl8153_up() argument
4944 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8153_up()
4947 r8153_u1u2en(tp, false); in rtl8153_up()
4948 r8153_u2p3en(tp, false); in rtl8153_up()
4949 r8153_aldps_en(tp, false); in rtl8153_up()
4950 r8153_first_init(tp); in rtl8153_up()
4952 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CONFIG6); in rtl8153_up()
4954 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CONFIG6, ocp_data); in rtl8153_up()
4956 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_LWAKE_CTRL_REG); in rtl8153_up()
4958 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_LWAKE_CTRL_REG, ocp_data); in rtl8153_up()
4960 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_SSPHYLINK1); in rtl8153_up()
4962 ocp_write_word(tp, MCU_TYPE_USB, USB_SSPHYLINK1, ocp_data); in rtl8153_up()
4964 r8153_aldps_en(tp, true); in rtl8153_up()
4966 switch (tp->version) { in rtl8153_up()
4973 r8153_u2p3en(tp, true); in rtl8153_up()
4977 r8153_u1u2en(tp, true); in rtl8153_up()
4980 static void rtl8153_down(struct r8152 *tp) in rtl8153_down() argument
4984 if (test_bit(RTL8152_UNPLUG, &tp->flags)) { in rtl8153_down()
4985 rtl_drop_queued_tx(tp); in rtl8153_down()
4989 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CONFIG6); in rtl8153_down()
4991 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CONFIG6, ocp_data); in rtl8153_down()
4993 r8153_u1u2en(tp, false); in rtl8153_down()
4994 r8153_u2p3en(tp, false); in rtl8153_down()
4995 r8153_power_cut_en(tp, false); in rtl8153_down()
4996 r8153_aldps_en(tp, false); in rtl8153_down()
4997 r8153_enter_oob(tp); in rtl8153_down()
4998 r8153_aldps_en(tp, true); in rtl8153_down()
5001 static void rtl8153b_up(struct r8152 *tp) in rtl8153b_up() argument
5005 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8153b_up()
5008 r8153b_u1u2en(tp, false); in rtl8153b_up()
5009 r8153_u2p3en(tp, false); in rtl8153b_up()
5010 r8153_aldps_en(tp, false); in rtl8153b_up()
5012 r8153_first_init(tp); in rtl8153b_up()
5013 ocp_write_dword(tp, MCU_TYPE_USB, USB_RX_BUF_TH, RX_THR_B); in rtl8153b_up()
5015 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3); in rtl8153b_up()
5017 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, ocp_data); in rtl8153b_up()
5019 r8153_aldps_en(tp, true); in rtl8153b_up()
5021 if (tp->udev->speed != USB_SPEED_HIGH) in rtl8153b_up()
5022 r8153b_u1u2en(tp, true); in rtl8153b_up()
5025 static void rtl8153b_down(struct r8152 *tp) in rtl8153b_down() argument
5029 if (test_bit(RTL8152_UNPLUG, &tp->flags)) { in rtl8153b_down()
5030 rtl_drop_queued_tx(tp); in rtl8153b_down()
5034 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3); in rtl8153b_down()
5036 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, ocp_data); in rtl8153b_down()
5038 r8153b_u1u2en(tp, false); in rtl8153b_down()
5039 r8153_u2p3en(tp, false); in rtl8153b_down()
5040 r8153b_power_cut_en(tp, false); in rtl8153b_down()
5041 r8153_aldps_en(tp, false); in rtl8153b_down()
5042 r8153_enter_oob(tp); in rtl8153b_down()
5043 r8153_aldps_en(tp, true); in rtl8153b_down()
5046 static bool rtl8152_in_nway(struct r8152 *tp) in rtl8152_in_nway() argument
5050 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, 0x2000); in rtl8152_in_nway()
5051 tp->ocp_base = 0x2000; in rtl8152_in_nway()
5052 ocp_write_byte(tp, MCU_TYPE_PLA, 0xb014, 0x4c); /* phy state */ in rtl8152_in_nway()
5053 nway_state = ocp_read_word(tp, MCU_TYPE_PLA, 0xb01a); in rtl8152_in_nway()
5062 static bool rtl8153_in_nway(struct r8152 *tp) in rtl8153_in_nway() argument
5064 u16 phy_state = ocp_reg_read(tp, OCP_PHY_STATE) & 0xff; in rtl8153_in_nway()
5072 static void set_carrier(struct r8152 *tp) in set_carrier() argument
5074 struct net_device *netdev = tp->netdev; in set_carrier()
5075 struct napi_struct *napi = &tp->napi; in set_carrier()
5078 speed = rtl8152_get_speed(tp); in set_carrier()
5082 tp->rtl_ops.enable(tp); in set_carrier()
5086 rtl_start_rx(tp); in set_carrier()
5087 clear_bit(RTL8152_SET_RX_MODE, &tp->flags); in set_carrier()
5089 napi_enable(&tp->napi); in set_carrier()
5091 netif_info(tp, link, netdev, "carrier on\n"); in set_carrier()
5093 skb_queue_len(&tp->tx_queue) < tp->tx_qlen) { in set_carrier()
5099 tasklet_disable(&tp->tx_tl); in set_carrier()
5101 tp->rtl_ops.disable(tp); in set_carrier()
5103 tasklet_enable(&tp->tx_tl); in set_carrier()
5104 netif_info(tp, link, netdev, "carrier off\n"); in set_carrier()
5111 struct r8152 *tp = container_of(work, struct r8152, schedule.work); in rtl_work_func_t() local
5116 if (test_bit(RTL8152_UNPLUG, &tp->flags) || !netif_running(tp->netdev)) in rtl_work_func_t()
5119 if (usb_autopm_get_interface(tp->intf) < 0) in rtl_work_func_t()
5122 if (!test_bit(WORK_ENABLE, &tp->flags)) in rtl_work_func_t()
5125 if (!mutex_trylock(&tp->control)) { in rtl_work_func_t()
5126 schedule_delayed_work(&tp->schedule, 0); in rtl_work_func_t()
5130 if (test_and_clear_bit(RTL8152_LINK_CHG, &tp->flags)) in rtl_work_func_t()
5131 set_carrier(tp); in rtl_work_func_t()
5133 if (test_and_clear_bit(RTL8152_SET_RX_MODE, &tp->flags)) in rtl_work_func_t()
5134 _rtl8152_set_rx_mode(tp->netdev); in rtl_work_func_t()
5137 if (test_and_clear_bit(SCHEDULE_TASKLET, &tp->flags) && in rtl_work_func_t()
5138 netif_carrier_ok(tp->netdev)) in rtl_work_func_t()
5139 tasklet_schedule(&tp->tx_tl); in rtl_work_func_t()
5141 mutex_unlock(&tp->control); in rtl_work_func_t()
5144 usb_autopm_put_interface(tp->intf); in rtl_work_func_t()
5149 struct r8152 *tp = container_of(work, struct r8152, hw_phy_work.work); in rtl_hw_phy_work_func_t() local
5151 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl_hw_phy_work_func_t()
5154 if (usb_autopm_get_interface(tp->intf) < 0) in rtl_hw_phy_work_func_t()
5157 mutex_lock(&tp->control); in rtl_hw_phy_work_func_t()
5159 if (rtl8152_request_firmware(tp) == -ENODEV && tp->rtl_fw.retry) { in rtl_hw_phy_work_func_t()
5160 tp->rtl_fw.retry = false; in rtl_hw_phy_work_func_t()
5161 tp->rtl_fw.fw = NULL; in rtl_hw_phy_work_func_t()
5165 queue_delayed_work(system_long_wq, &tp->hw_phy_work, HZ * 10); in rtl_hw_phy_work_func_t()
5169 tp->rtl_ops.hw_phy_cfg(tp); in rtl_hw_phy_work_func_t()
5171 rtl8152_set_speed(tp, tp->autoneg, tp->speed, tp->duplex, in rtl_hw_phy_work_func_t()
5172 tp->advertising); in rtl_hw_phy_work_func_t()
5175 mutex_unlock(&tp->control); in rtl_hw_phy_work_func_t()
5177 usb_autopm_put_interface(tp->intf); in rtl_hw_phy_work_func_t()
5184 struct r8152 *tp = container_of(nb, struct r8152, pm_notifier); in rtl_notifier() local
5189 usb_autopm_get_interface(tp->intf); in rtl_notifier()
5194 usb_autopm_put_interface(tp->intf); in rtl_notifier()
5209 struct r8152 *tp = netdev_priv(netdev); in rtl8152_open() local
5212 if (work_busy(&tp->hw_phy_work.work) & WORK_BUSY_PENDING) { in rtl8152_open()
5213 cancel_delayed_work_sync(&tp->hw_phy_work); in rtl8152_open()
5214 rtl_hw_phy_work_func_t(&tp->hw_phy_work.work); in rtl8152_open()
5217 res = alloc_all_mem(tp); in rtl8152_open()
5221 res = usb_autopm_get_interface(tp->intf); in rtl8152_open()
5225 mutex_lock(&tp->control); in rtl8152_open()
5227 tp->rtl_ops.up(tp); in rtl8152_open()
5231 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_open()
5233 res = usb_submit_urb(tp->intr_urb, GFP_KERNEL); in rtl8152_open()
5236 netif_device_detach(tp->netdev); in rtl8152_open()
5237 netif_warn(tp, ifup, netdev, "intr_urb submit failed: %d\n", in rtl8152_open()
5241 napi_enable(&tp->napi); in rtl8152_open()
5242 tasklet_enable(&tp->tx_tl); in rtl8152_open()
5244 mutex_unlock(&tp->control); in rtl8152_open()
5246 usb_autopm_put_interface(tp->intf); in rtl8152_open()
5248 tp->pm_notifier.notifier_call = rtl_notifier; in rtl8152_open()
5249 register_pm_notifier(&tp->pm_notifier); in rtl8152_open()
5254 mutex_unlock(&tp->control); in rtl8152_open()
5255 usb_autopm_put_interface(tp->intf); in rtl8152_open()
5257 free_all_mem(tp); in rtl8152_open()
5264 struct r8152 *tp = netdev_priv(netdev); in rtl8152_close() local
5268 unregister_pm_notifier(&tp->pm_notifier); in rtl8152_close()
5270 tasklet_disable(&tp->tx_tl); in rtl8152_close()
5271 clear_bit(WORK_ENABLE, &tp->flags); in rtl8152_close()
5272 usb_kill_urb(tp->intr_urb); in rtl8152_close()
5273 cancel_delayed_work_sync(&tp->schedule); in rtl8152_close()
5274 napi_disable(&tp->napi); in rtl8152_close()
5277 res = usb_autopm_get_interface(tp->intf); in rtl8152_close()
5278 if (res < 0 || test_bit(RTL8152_UNPLUG, &tp->flags)) { in rtl8152_close()
5279 rtl_drop_queued_tx(tp); in rtl8152_close()
5280 rtl_stop_rx(tp); in rtl8152_close()
5282 mutex_lock(&tp->control); in rtl8152_close()
5284 tp->rtl_ops.down(tp); in rtl8152_close()
5286 mutex_unlock(&tp->control); in rtl8152_close()
5290 usb_autopm_put_interface(tp->intf); in rtl8152_close()
5292 free_all_mem(tp); in rtl8152_close()
5297 static void rtl_tally_reset(struct r8152 *tp) in rtl_tally_reset() argument
5301 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_RSTTALLY); in rtl_tally_reset()
5303 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RSTTALLY, ocp_data); in rtl_tally_reset()
5306 static void r8152b_init(struct r8152 *tp) in r8152b_init() argument
5311 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8152b_init()
5314 data = r8152_mdio_read(tp, MII_BMCR); in r8152b_init()
5317 r8152_mdio_write(tp, MII_BMCR, data); in r8152b_init()
5320 r8152_aldps_en(tp, false); in r8152b_init()
5322 if (tp->version == RTL_VER_01) { in r8152b_init()
5323 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE); in r8152b_init()
5325 ocp_write_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE, ocp_data); in r8152b_init()
5328 r8152_power_cut_en(tp, false); in r8152b_init()
5330 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR); in r8152b_init()
5332 ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data); in r8152b_init()
5333 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL); in r8152b_init()
5336 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL, ocp_data); in r8152b_init()
5339 ocp_write_word(tp, MCU_TYPE_PLA, PLA_GPHY_INTR_IMR, ocp_data); in r8152b_init()
5341 rtl_tally_reset(tp); in r8152b_init()
5344 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL); in r8152b_init()
5346 ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data); in r8152b_init()
5349 static void r8153_init(struct r8152 *tp) in r8153_init() argument
5355 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8153_init()
5358 r8153_u1u2en(tp, false); in r8153_init()
5361 if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_BOOT_CTRL) & in r8153_init()
5366 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8153_init()
5370 data = r8153_phy_status(tp, 0); in r8153_init()
5372 if (tp->version == RTL_VER_03 || tp->version == RTL_VER_04 || in r8153_init()
5373 tp->version == RTL_VER_05) in r8153_init()
5374 ocp_reg_write(tp, OCP_ADC_CFG, CKADSEL_L | ADC_EN | EN_EMI_L); in r8153_init()
5376 data = r8152_mdio_read(tp, MII_BMCR); in r8153_init()
5379 r8152_mdio_write(tp, MII_BMCR, data); in r8153_init()
5382 data = r8153_phy_status(tp, PHY_STAT_LAN_ON); in r8153_init()
5384 r8153_u2p3en(tp, false); in r8153_init()
5386 if (tp->version == RTL_VER_04) { in r8153_init()
5387 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_SSPHYLINK2); in r8153_init()
5390 ocp_write_word(tp, MCU_TYPE_USB, USB_SSPHYLINK2, ocp_data); in r8153_init()
5392 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_USB2PHY); in r8153_init()
5394 ocp_write_byte(tp, MCU_TYPE_USB, USB_USB2PHY, ocp_data); in r8153_init()
5395 } else if (tp->version == RTL_VER_05) { in r8153_init()
5396 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_DMY_REG0); in r8153_init()
5398 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_DMY_REG0, ocp_data); in r8153_init()
5400 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY1); in r8153_init()
5401 if (ocp_read_word(tp, MCU_TYPE_USB, USB_BURST_SIZE) == 0) in r8153_init()
5405 ocp_write_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY1, ocp_data); in r8153_init()
5406 } else if (tp->version == RTL_VER_06) { in r8153_init()
5407 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY1); in r8153_init()
5408 if (ocp_read_word(tp, MCU_TYPE_USB, USB_BURST_SIZE) == 0) in r8153_init()
5412 ocp_write_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY1, ocp_data); in r8153_init()
5414 r8153_queue_wake(tp, false); in r8153_init()
5416 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS); in r8153_init()
5417 if (rtl8152_get_speed(tp) & LINK_STATUS) in r8153_init()
5422 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS, ocp_data); in r8153_init()
5425 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY2); in r8153_init()
5427 ocp_write_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY2, ocp_data); in r8153_init()
5429 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_WDT11_CTRL); in r8153_init()
5431 ocp_write_word(tp, MCU_TYPE_USB, USB_WDT11_CTRL, ocp_data); in r8153_init()
5433 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE); in r8153_init()
5435 ocp_write_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE, ocp_data); in r8153_init()
5438 if (tp->version == RTL_VER_04 && tp->udev->speed < USB_SPEED_SUPER) in r8153_init()
5442 ocp_write_byte(tp, MCU_TYPE_USB, USB_LPM_CTRL, ocp_data); in r8153_init()
5444 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_AFE_CTRL2); in r8153_init()
5447 ocp_write_word(tp, MCU_TYPE_USB, USB_AFE_CTRL2, ocp_data); in r8153_init()
5449 ocp_write_word(tp, MCU_TYPE_USB, USB_CONNECT_TIMER, 0x0001); in r8153_init()
5452 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL, 0); in r8153_init()
5453 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL2, 0); in r8153_init()
5454 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, 0); in r8153_init()
5455 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4, 0); in r8153_init()
5457 r8153_power_cut_en(tp, false); in r8153_init()
5458 rtl_runtime_suspend_enable(tp, false); in r8153_init()
5459 r8153_u1u2en(tp, true); in r8153_init()
5460 usb_enable_lpm(tp->udev); in r8153_init()
5462 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CONFIG6); in r8153_init()
5464 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CONFIG6, ocp_data); in r8153_init()
5466 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_LWAKE_CTRL_REG); in r8153_init()
5468 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_LWAKE_CTRL_REG, ocp_data); in r8153_init()
5471 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL); in r8153_init()
5473 if (test_bit(DELL_TB_RX_AGG_BUG, &tp->flags)) in r8153_init()
5476 ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data); in r8153_init()
5478 rtl_tally_reset(tp); in r8153_init()
5480 switch (tp->udev->speed) { in r8153_init()
5483 tp->coalesce = COALESCE_SUPER; in r8153_init()
5486 tp->coalesce = COALESCE_HIGH; in r8153_init()
5489 tp->coalesce = COALESCE_SLOW; in r8153_init()
5494 static void r8153b_init(struct r8152 *tp) in r8153b_init() argument
5500 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8153b_init()
5503 r8153b_u1u2en(tp, false); in r8153b_init()
5506 if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_BOOT_CTRL) & in r8153b_init()
5511 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8153b_init()
5515 data = r8153_phy_status(tp, 0); in r8153b_init()
5517 data = r8152_mdio_read(tp, MII_BMCR); in r8153b_init()
5520 r8152_mdio_write(tp, MII_BMCR, data); in r8153b_init()
5523 data = r8153_phy_status(tp, PHY_STAT_LAN_ON); in r8153b_init()
5525 r8153_u2p3en(tp, false); in r8153b_init()
5528 ocp_write_word(tp, MCU_TYPE_USB, USB_MSC_TIMER, 0x0fff); in r8153b_init()
5531 ocp_write_word(tp, MCU_TYPE_USB, USB_U1U2_TIMER, 500); in r8153b_init()
5533 r8153b_power_cut_en(tp, false); in r8153b_init()
5534 r8153b_ups_en(tp, false); in r8153b_init()
5535 r8153_queue_wake(tp, false); in r8153b_init()
5536 rtl_runtime_suspend_enable(tp, false); in r8153b_init()
5538 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS); in r8153b_init()
5539 if (rtl8152_get_speed(tp) & LINK_STATUS) in r8153b_init()
5544 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS, ocp_data); in r8153b_init()
5546 if (tp->udev->speed != USB_SPEED_HIGH) in r8153b_init()
5547 r8153b_u1u2en(tp, true); in r8153b_init()
5548 usb_enable_lpm(tp->udev); in r8153b_init()
5551 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL2); in r8153b_init()
5553 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL2, ocp_data); in r8153b_init()
5555 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3); in r8153b_init()
5557 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, ocp_data); in r8153b_init()
5559 if (tp->version == RTL_VER_09) { in r8153b_init()
5561 if (ocp_read_byte(tp, MCU_TYPE_PLA, 0xdc00) & BIT(5)) { in r8153b_init()
5562 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR); in r8153b_init()
5564 ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data); in r8153b_init()
5568 set_bit(GREEN_ETHERNET, &tp->flags); in r8153b_init()
5571 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL); in r8153b_init()
5573 ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data); in r8153b_init()
5575 rtl_tally_reset(tp); in r8153b_init()
5577 tp->coalesce = 15000; /* 15 us */ in r8153b_init()
5582 struct r8152 *tp = usb_get_intfdata(intf); in rtl8152_pre_reset() local
5585 if (!tp) in rtl8152_pre_reset()
5588 netdev = tp->netdev; in rtl8152_pre_reset()
5593 tasklet_disable(&tp->tx_tl); in rtl8152_pre_reset()
5594 clear_bit(WORK_ENABLE, &tp->flags); in rtl8152_pre_reset()
5595 usb_kill_urb(tp->intr_urb); in rtl8152_pre_reset()
5596 cancel_delayed_work_sync(&tp->schedule); in rtl8152_pre_reset()
5597 napi_disable(&tp->napi); in rtl8152_pre_reset()
5599 mutex_lock(&tp->control); in rtl8152_pre_reset()
5600 tp->rtl_ops.disable(tp); in rtl8152_pre_reset()
5601 mutex_unlock(&tp->control); in rtl8152_pre_reset()
5609 struct r8152 *tp = usb_get_intfdata(intf); in rtl8152_post_reset() local
5613 if (!tp) in rtl8152_post_reset()
5617 if (determine_ethernet_addr(tp, &sa) >= 0) { in rtl8152_post_reset()
5619 dev_set_mac_address (tp->netdev, &sa, NULL); in rtl8152_post_reset()
5623 netdev = tp->netdev; in rtl8152_post_reset()
5627 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_post_reset()
5629 mutex_lock(&tp->control); in rtl8152_post_reset()
5630 tp->rtl_ops.enable(tp); in rtl8152_post_reset()
5631 rtl_start_rx(tp); in rtl8152_post_reset()
5633 mutex_unlock(&tp->control); in rtl8152_post_reset()
5636 napi_enable(&tp->napi); in rtl8152_post_reset()
5637 tasklet_enable(&tp->tx_tl); in rtl8152_post_reset()
5639 usb_submit_urb(tp->intr_urb, GFP_KERNEL); in rtl8152_post_reset()
5641 if (!list_empty(&tp->rx_done)) in rtl8152_post_reset()
5642 napi_schedule(&tp->napi); in rtl8152_post_reset()
5647 static bool delay_autosuspend(struct r8152 *tp) in delay_autosuspend() argument
5649 bool sw_linking = !!netif_carrier_ok(tp->netdev); in delay_autosuspend()
5650 bool hw_linking = !!(rtl8152_get_speed(tp) & LINK_STATUS); in delay_autosuspend()
5656 if (work_busy(&tp->schedule.work) || sw_linking != hw_linking) in delay_autosuspend()
5662 if (!sw_linking && tp->rtl_ops.in_nway(tp)) in delay_autosuspend()
5664 else if (!skb_queue_empty(&tp->tx_queue)) in delay_autosuspend()
5670 static int rtl8152_runtime_resume(struct r8152 *tp) in rtl8152_runtime_resume() argument
5672 struct net_device *netdev = tp->netdev; in rtl8152_runtime_resume()
5675 struct napi_struct *napi = &tp->napi; in rtl8152_runtime_resume()
5677 tp->rtl_ops.autosuspend_en(tp, false); in rtl8152_runtime_resume()
5679 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_runtime_resume()
5682 if (rtl8152_get_speed(tp) & LINK_STATUS) { in rtl8152_runtime_resume()
5683 rtl_start_rx(tp); in rtl8152_runtime_resume()
5686 tp->rtl_ops.disable(tp); in rtl8152_runtime_resume()
5687 netif_info(tp, link, netdev, "linking down\n"); in rtl8152_runtime_resume()
5692 clear_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_runtime_resume()
5695 if (!list_empty(&tp->rx_done)) in rtl8152_runtime_resume()
5696 napi_schedule(&tp->napi); in rtl8152_runtime_resume()
5698 usb_submit_urb(tp->intr_urb, GFP_NOIO); in rtl8152_runtime_resume()
5701 tp->rtl_ops.autosuspend_en(tp, false); in rtl8152_runtime_resume()
5703 clear_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_runtime_resume()
5709 static int rtl8152_system_resume(struct r8152 *tp) in rtl8152_system_resume() argument
5711 struct net_device *netdev = tp->netdev; in rtl8152_system_resume()
5716 tp->rtl_ops.up(tp); in rtl8152_system_resume()
5718 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_system_resume()
5719 usb_submit_urb(tp->intr_urb, GFP_NOIO); in rtl8152_system_resume()
5725 static int rtl8152_runtime_suspend(struct r8152 *tp) in rtl8152_runtime_suspend() argument
5727 struct net_device *netdev = tp->netdev; in rtl8152_runtime_suspend()
5730 set_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_runtime_suspend()
5733 if (netif_running(netdev) && test_bit(WORK_ENABLE, &tp->flags)) { in rtl8152_runtime_suspend()
5739 rcr = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in rtl8152_runtime_suspend()
5741 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in rtl8152_runtime_suspend()
5742 rxdy_gated_en(tp, true); in rtl8152_runtime_suspend()
5743 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, in rtl8152_runtime_suspend()
5746 rxdy_gated_en(tp, false); in rtl8152_runtime_suspend()
5747 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, rcr); in rtl8152_runtime_suspend()
5748 clear_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_runtime_suspend()
5755 clear_bit(WORK_ENABLE, &tp->flags); in rtl8152_runtime_suspend()
5756 usb_kill_urb(tp->intr_urb); in rtl8152_runtime_suspend()
5758 tp->rtl_ops.autosuspend_en(tp, true); in rtl8152_runtime_suspend()
5761 struct napi_struct *napi = &tp->napi; in rtl8152_runtime_suspend()
5764 rtl_stop_rx(tp); in rtl8152_runtime_suspend()
5765 rxdy_gated_en(tp, false); in rtl8152_runtime_suspend()
5766 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, rcr); in rtl8152_runtime_suspend()
5770 if (delay_autosuspend(tp)) { in rtl8152_runtime_suspend()
5771 rtl8152_runtime_resume(tp); in rtl8152_runtime_suspend()
5780 static int rtl8152_system_suspend(struct r8152 *tp) in rtl8152_system_suspend() argument
5782 struct net_device *netdev = tp->netdev; in rtl8152_system_suspend()
5786 if (netif_running(netdev) && test_bit(WORK_ENABLE, &tp->flags)) { in rtl8152_system_suspend()
5787 struct napi_struct *napi = &tp->napi; in rtl8152_system_suspend()
5789 clear_bit(WORK_ENABLE, &tp->flags); in rtl8152_system_suspend()
5790 usb_kill_urb(tp->intr_urb); in rtl8152_system_suspend()
5791 tasklet_disable(&tp->tx_tl); in rtl8152_system_suspend()
5793 cancel_delayed_work_sync(&tp->schedule); in rtl8152_system_suspend()
5794 tp->rtl_ops.down(tp); in rtl8152_system_suspend()
5796 tasklet_enable(&tp->tx_tl); in rtl8152_system_suspend()
5804 struct r8152 *tp = usb_get_intfdata(intf); in rtl8152_suspend() local
5807 mutex_lock(&tp->control); in rtl8152_suspend()
5810 ret = rtl8152_runtime_suspend(tp); in rtl8152_suspend()
5812 ret = rtl8152_system_suspend(tp); in rtl8152_suspend()
5814 mutex_unlock(&tp->control); in rtl8152_suspend()
5821 struct r8152 *tp = usb_get_intfdata(intf); in rtl8152_resume() local
5824 mutex_lock(&tp->control); in rtl8152_resume()
5826 if (test_bit(SELECTIVE_SUSPEND, &tp->flags)) in rtl8152_resume()
5827 ret = rtl8152_runtime_resume(tp); in rtl8152_resume()
5829 ret = rtl8152_system_resume(tp); in rtl8152_resume()
5831 mutex_unlock(&tp->control); in rtl8152_resume()
5838 struct r8152 *tp = usb_get_intfdata(intf); in rtl8152_reset_resume() local
5840 clear_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_reset_resume()
5841 tp->rtl_ops.init(tp); in rtl8152_reset_resume()
5842 queue_delayed_work(system_long_wq, &tp->hw_phy_work, 0); in rtl8152_reset_resume()
5843 set_ethernet_addr(tp); in rtl8152_reset_resume()
5849 struct r8152 *tp = netdev_priv(dev); in rtl8152_get_wol() local
5851 if (usb_autopm_get_interface(tp->intf) < 0) in rtl8152_get_wol()
5854 if (!rtl_can_wakeup(tp)) { in rtl8152_get_wol()
5858 mutex_lock(&tp->control); in rtl8152_get_wol()
5860 wol->wolopts = __rtl_get_wol(tp); in rtl8152_get_wol()
5861 mutex_unlock(&tp->control); in rtl8152_get_wol()
5864 usb_autopm_put_interface(tp->intf); in rtl8152_get_wol()
5869 struct r8152 *tp = netdev_priv(dev); in rtl8152_set_wol() local
5872 if (!rtl_can_wakeup(tp)) in rtl8152_set_wol()
5878 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_wol()
5882 mutex_lock(&tp->control); in rtl8152_set_wol()
5884 __rtl_set_wol(tp, wol->wolopts); in rtl8152_set_wol()
5885 tp->saved_wolopts = wol->wolopts & WAKE_ANY; in rtl8152_set_wol()
5887 mutex_unlock(&tp->control); in rtl8152_set_wol()
5889 usb_autopm_put_interface(tp->intf); in rtl8152_set_wol()
5897 struct r8152 *tp = netdev_priv(dev); in rtl8152_get_msglevel() local
5899 return tp->msg_enable; in rtl8152_get_msglevel()
5904 struct r8152 *tp = netdev_priv(dev); in rtl8152_set_msglevel() local
5906 tp->msg_enable = value; in rtl8152_set_msglevel()
5912 struct r8152 *tp = netdev_priv(netdev); in rtl8152_get_drvinfo() local
5916 usb_make_path(tp->udev, info->bus_info, sizeof(info->bus_info)); in rtl8152_get_drvinfo()
5917 if (!IS_ERR_OR_NULL(tp->rtl_fw.fw)) in rtl8152_get_drvinfo()
5918 strlcpy(info->fw_version, tp->rtl_fw.version, in rtl8152_get_drvinfo()
5926 struct r8152 *tp = netdev_priv(netdev); in rtl8152_get_link_ksettings() local
5929 if (!tp->mii.mdio_read) in rtl8152_get_link_ksettings()
5932 ret = usb_autopm_get_interface(tp->intf); in rtl8152_get_link_ksettings()
5936 mutex_lock(&tp->control); in rtl8152_get_link_ksettings()
5938 mii_ethtool_get_link_ksettings(&tp->mii, cmd); in rtl8152_get_link_ksettings()
5940 mutex_unlock(&tp->control); in rtl8152_get_link_ksettings()
5942 usb_autopm_put_interface(tp->intf); in rtl8152_get_link_ksettings()
5951 struct r8152 *tp = netdev_priv(dev); in rtl8152_set_link_ksettings() local
5955 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_link_ksettings()
5983 mutex_lock(&tp->control); in rtl8152_set_link_ksettings()
5985 ret = rtl8152_set_speed(tp, cmd->base.autoneg, cmd->base.speed, in rtl8152_set_link_ksettings()
5988 tp->autoneg = cmd->base.autoneg; in rtl8152_set_link_ksettings()
5989 tp->speed = cmd->base.speed; in rtl8152_set_link_ksettings()
5990 tp->duplex = cmd->base.duplex; in rtl8152_set_link_ksettings()
5991 tp->advertising = advertising; in rtl8152_set_link_ksettings()
5994 mutex_unlock(&tp->control); in rtl8152_set_link_ksettings()
5996 usb_autopm_put_interface(tp->intf); in rtl8152_set_link_ksettings()
6031 struct r8152 *tp = netdev_priv(dev); in rtl8152_get_ethtool_stats() local
6034 if (usb_autopm_get_interface(tp->intf) < 0) in rtl8152_get_ethtool_stats()
6037 generic_ocp_read(tp, PLA_TALLYCNT, sizeof(tally), &tally, MCU_TYPE_PLA); in rtl8152_get_ethtool_stats()
6039 usb_autopm_put_interface(tp->intf); in rtl8152_get_ethtool_stats()
6065 static int r8152_get_eee(struct r8152 *tp, struct ethtool_eee *eee) in r8152_get_eee() argument
6070 val = r8152_mmd_read(tp, MDIO_MMD_PCS, MDIO_PCS_EEE_ABLE); in r8152_get_eee()
6073 val = r8152_mmd_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV); in r8152_get_eee()
6076 val = r8152_mmd_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_LPABLE); in r8152_get_eee()
6079 eee->eee_enabled = tp->eee_en; in r8152_get_eee()
6082 eee->advertised = tp->eee_adv; in r8152_get_eee()
6088 static int r8152_set_eee(struct r8152 *tp, struct ethtool_eee *eee) in r8152_set_eee() argument
6092 tp->eee_en = eee->eee_enabled; in r8152_set_eee()
6093 tp->eee_adv = val; in r8152_set_eee()
6095 rtl_eee_enable(tp, tp->eee_en); in r8152_set_eee()
6100 static int r8153_get_eee(struct r8152 *tp, struct ethtool_eee *eee) in r8153_get_eee() argument
6105 val = ocp_reg_read(tp, OCP_EEE_ABLE); in r8153_get_eee()
6108 val = ocp_reg_read(tp, OCP_EEE_ADV); in r8153_get_eee()
6111 val = ocp_reg_read(tp, OCP_EEE_LPABLE); in r8153_get_eee()
6114 eee->eee_enabled = tp->eee_en; in r8153_get_eee()
6117 eee->advertised = tp->eee_adv; in r8153_get_eee()
6126 struct r8152 *tp = netdev_priv(net); in rtl_ethtool_get_eee() local
6129 ret = usb_autopm_get_interface(tp->intf); in rtl_ethtool_get_eee()
6133 mutex_lock(&tp->control); in rtl_ethtool_get_eee()
6135 ret = tp->rtl_ops.eee_get(tp, edata); in rtl_ethtool_get_eee()
6137 mutex_unlock(&tp->control); in rtl_ethtool_get_eee()
6139 usb_autopm_put_interface(tp->intf); in rtl_ethtool_get_eee()
6148 struct r8152 *tp = netdev_priv(net); in rtl_ethtool_set_eee() local
6151 ret = usb_autopm_get_interface(tp->intf); in rtl_ethtool_set_eee()
6155 mutex_lock(&tp->control); in rtl_ethtool_set_eee()
6157 ret = tp->rtl_ops.eee_set(tp, edata); in rtl_ethtool_set_eee()
6159 ret = mii_nway_restart(&tp->mii); in rtl_ethtool_set_eee()
6161 mutex_unlock(&tp->control); in rtl_ethtool_set_eee()
6163 usb_autopm_put_interface(tp->intf); in rtl_ethtool_set_eee()
6171 struct r8152 *tp = netdev_priv(dev); in rtl8152_nway_reset() local
6174 ret = usb_autopm_get_interface(tp->intf); in rtl8152_nway_reset()
6178 mutex_lock(&tp->control); in rtl8152_nway_reset()
6180 ret = mii_nway_restart(&tp->mii); in rtl8152_nway_reset()
6182 mutex_unlock(&tp->control); in rtl8152_nway_reset()
6184 usb_autopm_put_interface(tp->intf); in rtl8152_nway_reset()
6193 struct r8152 *tp = netdev_priv(netdev); in rtl8152_get_coalesce() local
6195 switch (tp->version) { in rtl8152_get_coalesce()
6204 coalesce->rx_coalesce_usecs = tp->coalesce; in rtl8152_get_coalesce()
6212 struct r8152 *tp = netdev_priv(netdev); in rtl8152_set_coalesce() local
6215 switch (tp->version) { in rtl8152_set_coalesce()
6227 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_coalesce()
6231 mutex_lock(&tp->control); in rtl8152_set_coalesce()
6233 if (tp->coalesce != coalesce->rx_coalesce_usecs) { in rtl8152_set_coalesce()
6234 tp->coalesce = coalesce->rx_coalesce_usecs; in rtl8152_set_coalesce()
6238 napi_disable(&tp->napi); in rtl8152_set_coalesce()
6239 tp->rtl_ops.disable(tp); in rtl8152_set_coalesce()
6240 tp->rtl_ops.enable(tp); in rtl8152_set_coalesce()
6241 rtl_start_rx(tp); in rtl8152_set_coalesce()
6242 clear_bit(RTL8152_SET_RX_MODE, &tp->flags); in rtl8152_set_coalesce()
6244 napi_enable(&tp->napi); in rtl8152_set_coalesce()
6249 mutex_unlock(&tp->control); in rtl8152_set_coalesce()
6251 usb_autopm_put_interface(tp->intf); in rtl8152_set_coalesce()
6259 struct r8152 *tp = netdev_priv(netdev); in rtl8152_get_tunable() local
6263 *(u32 *)d = tp->rx_copybreak; in rtl8152_get_tunable()
6276 struct r8152 *tp = netdev_priv(netdev); in rtl8152_set_tunable() local
6283 netif_err(tp, rx_err, netdev, in rtl8152_set_tunable()
6288 if (tp->rx_copybreak != val) { in rtl8152_set_tunable()
6290 mutex_lock(&tp->control); in rtl8152_set_tunable()
6291 napi_disable(&tp->napi); in rtl8152_set_tunable()
6292 tp->rx_copybreak = val; in rtl8152_set_tunable()
6293 napi_enable(&tp->napi); in rtl8152_set_tunable()
6294 mutex_unlock(&tp->control); in rtl8152_set_tunable()
6296 tp->rx_copybreak = val; in rtl8152_set_tunable()
6310 struct r8152 *tp = netdev_priv(netdev); in rtl8152_get_ringparam() local
6313 ring->rx_pending = tp->rx_pending; in rtl8152_get_ringparam()
6319 struct r8152 *tp = netdev_priv(netdev); in rtl8152_set_ringparam() local
6324 if (tp->rx_pending != ring->rx_pending) { in rtl8152_set_ringparam()
6326 mutex_lock(&tp->control); in rtl8152_set_ringparam()
6327 napi_disable(&tp->napi); in rtl8152_set_ringparam()
6328 tp->rx_pending = ring->rx_pending; in rtl8152_set_ringparam()
6329 napi_enable(&tp->napi); in rtl8152_set_ringparam()
6330 mutex_unlock(&tp->control); in rtl8152_set_ringparam()
6332 tp->rx_pending = ring->rx_pending; in rtl8152_set_ringparam()
6365 struct r8152 *tp = netdev_priv(netdev); in rtl8152_ioctl() local
6369 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8152_ioctl()
6372 res = usb_autopm_get_interface(tp->intf); in rtl8152_ioctl()
6382 mutex_lock(&tp->control); in rtl8152_ioctl()
6383 data->val_out = r8152_mdio_read(tp, data->reg_num); in rtl8152_ioctl()
6384 mutex_unlock(&tp->control); in rtl8152_ioctl()
6392 mutex_lock(&tp->control); in rtl8152_ioctl()
6393 r8152_mdio_write(tp, data->reg_num, data->val_in); in rtl8152_ioctl()
6394 mutex_unlock(&tp->control); in rtl8152_ioctl()
6401 usb_autopm_put_interface(tp->intf); in rtl8152_ioctl()
6409 struct r8152 *tp = netdev_priv(dev); in rtl8152_change_mtu() local
6412 switch (tp->version) { in rtl8152_change_mtu()
6422 ret = usb_autopm_get_interface(tp->intf); in rtl8152_change_mtu()
6426 mutex_lock(&tp->control); in rtl8152_change_mtu()
6433 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, rms); in rtl8152_change_mtu()
6436 r8153_set_rx_early_size(tp); in rtl8152_change_mtu()
6439 mutex_unlock(&tp->control); in rtl8152_change_mtu()
6441 usb_autopm_put_interface(tp->intf); in rtl8152_change_mtu()
6460 static void rtl8152_unload(struct r8152 *tp) in rtl8152_unload() argument
6462 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8152_unload()
6465 if (tp->version != RTL_VER_01) in rtl8152_unload()
6466 r8152_power_cut_en(tp, true); in rtl8152_unload()
6469 static void rtl8153_unload(struct r8152 *tp) in rtl8153_unload() argument
6471 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8153_unload()
6474 r8153_power_cut_en(tp, false); in rtl8153_unload()
6477 static void rtl8153b_unload(struct r8152 *tp) in rtl8153b_unload() argument
6479 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8153b_unload()
6482 r8153b_power_cut_en(tp, false); in rtl8153b_unload()
6485 static int rtl_ops_init(struct r8152 *tp) in rtl_ops_init() argument
6487 struct rtl_ops *ops = &tp->rtl_ops; in rtl_ops_init()
6490 switch (tp->version) { in rtl_ops_init()
6505 tp->rx_buf_sz = 16 * 1024; in rtl_ops_init()
6506 tp->eee_en = true; in rtl_ops_init()
6507 tp->eee_adv = MDIO_EEE_100TX; in rtl_ops_init()
6525 if (tp->udev->speed < USB_SPEED_SUPER) in rtl_ops_init()
6526 tp->rx_buf_sz = 16 * 1024; in rtl_ops_init()
6528 tp->rx_buf_sz = 32 * 1024; in rtl_ops_init()
6529 tp->eee_en = true; in rtl_ops_init()
6530 tp->eee_adv = MDIO_EEE_1000T | MDIO_EEE_100TX; in rtl_ops_init()
6546 tp->rx_buf_sz = 32 * 1024; in rtl_ops_init()
6547 tp->eee_en = true; in rtl_ops_init()
6548 tp->eee_adv = MDIO_EEE_1000T | MDIO_EEE_100TX; in rtl_ops_init()
6553 netif_err(tp, probe, tp->netdev, "Unknown Device\n"); in rtl_ops_init()
6570 static int rtl_fw_init(struct r8152 *tp) in rtl_fw_init() argument
6572 struct rtl_fw *rtl_fw = &tp->rtl_fw; in rtl_fw_init()
6574 switch (tp->version) { in rtl_fw_init()
6665 struct r8152 *tp; in rtl8152_probe() local
6688 tp = netdev_priv(netdev); in rtl8152_probe()
6689 tp->msg_enable = 0x7FFF; in rtl8152_probe()
6691 tp->udev = udev; in rtl8152_probe()
6692 tp->netdev = netdev; in rtl8152_probe()
6693 tp->intf = intf; in rtl8152_probe()
6694 tp->version = version; in rtl8152_probe()
6700 tp->mii.supports_gmii = 0; in rtl8152_probe()
6703 tp->mii.supports_gmii = 1; in rtl8152_probe()
6707 ret = rtl_ops_init(tp); in rtl8152_probe()
6711 rtl_fw_init(tp); in rtl8152_probe()
6713 mutex_init(&tp->control); in rtl8152_probe()
6714 INIT_DELAYED_WORK(&tp->schedule, rtl_work_func_t); in rtl8152_probe()
6715 INIT_DELAYED_WORK(&tp->hw_phy_work, rtl_hw_phy_work_func_t); in rtl8152_probe()
6716 tasklet_init(&tp->tx_tl, bottom_half, (unsigned long)tp); in rtl8152_probe()
6717 tasklet_disable(&tp->tx_tl); in rtl8152_probe()
6734 if (tp->version == RTL_VER_01) { in rtl8152_probe()
6743 set_bit(LENOVO_MACPASSTHRU, &tp->flags); in rtl8152_probe()
6751 set_bit(DELL_TB_RX_AGG_BUG, &tp->flags); in rtl8152_probe()
6759 switch (tp->version) { in rtl8152_probe()
6769 tp->mii.dev = netdev; in rtl8152_probe()
6770 tp->mii.mdio_read = read_mii_word; in rtl8152_probe()
6771 tp->mii.mdio_write = write_mii_word; in rtl8152_probe()
6772 tp->mii.phy_id_mask = 0x3f; in rtl8152_probe()
6773 tp->mii.reg_num_mask = 0x1f; in rtl8152_probe()
6774 tp->mii.phy_id = R8152_PHY_ID; in rtl8152_probe()
6776 tp->autoneg = AUTONEG_ENABLE; in rtl8152_probe()
6777 tp->speed = SPEED_100; in rtl8152_probe()
6778 tp->advertising = RTL_ADVERTISED_10_HALF | RTL_ADVERTISED_10_FULL | in rtl8152_probe()
6780 if (tp->mii.supports_gmii) { in rtl8152_probe()
6781 tp->speed = SPEED_1000; in rtl8152_probe()
6782 tp->advertising |= RTL_ADVERTISED_1000_FULL; in rtl8152_probe()
6784 tp->duplex = DUPLEX_FULL; in rtl8152_probe()
6786 tp->rx_copybreak = RTL8152_RXFG_HEADSZ; in rtl8152_probe()
6787 tp->rx_pending = 10 * RTL8152_MAX_RX; in rtl8152_probe()
6791 if (!rtl_can_wakeup(tp)) in rtl8152_probe()
6792 __rtl_set_wol(tp, 0); in rtl8152_probe()
6794 tp->saved_wolopts = __rtl_get_wol(tp); in rtl8152_probe()
6796 tp->rtl_ops.init(tp); in rtl8152_probe()
6799 tp->rtl_fw.retry = true; in rtl8152_probe()
6801 queue_delayed_work(system_long_wq, &tp->hw_phy_work, 0); in rtl8152_probe()
6802 set_ethernet_addr(tp); in rtl8152_probe()
6804 usb_set_intfdata(intf, tp); in rtl8152_probe()
6805 netif_napi_add(netdev, &tp->napi, r8152_poll, RTL8152_NAPI_WEIGHT); in rtl8152_probe()
6809 netif_err(tp, probe, netdev, "couldn't register the device\n"); in rtl8152_probe()
6813 if (tp->saved_wolopts) in rtl8152_probe()
6818 netif_info(tp, probe, netdev, "%s\n", DRIVER_VERSION); in rtl8152_probe()
6823 tasklet_kill(&tp->tx_tl); in rtl8152_probe()
6832 struct r8152 *tp = usb_get_intfdata(intf); in rtl8152_disconnect() local
6835 if (tp) { in rtl8152_disconnect()
6836 rtl_set_unplug(tp); in rtl8152_disconnect()
6838 unregister_netdev(tp->netdev); in rtl8152_disconnect()
6839 tasklet_kill(&tp->tx_tl); in rtl8152_disconnect()
6840 cancel_delayed_work_sync(&tp->hw_phy_work); in rtl8152_disconnect()
6841 tp->rtl_ops.unload(tp); in rtl8152_disconnect()
6842 rtl8152_release_firmware(tp); in rtl8152_disconnect()
6843 free_netdev(tp->netdev); in rtl8152_disconnect()