Lines Matching refs:tp

643 int get_registers(struct r8152 *tp, u16 value, u16 index, u16 size, void *data)  in get_registers()  argument
652 ret = usb_control_msg(tp->udev, usb_rcvctrlpipe(tp->udev, 0), in get_registers()
663 int set_registers(struct r8152 *tp, u16 value, u16 index, u16 size, void *data) in set_registers() argument
672 ret = usb_control_msg(tp->udev, usb_sndctrlpipe(tp->udev, 0), in set_registers()
681 static int generic_ocp_read(struct r8152 *tp, u16 index, u16 size, in generic_ocp_read() argument
687 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in generic_ocp_read()
699 ret = get_registers(tp, index, type, limit, data); in generic_ocp_read()
707 ret = get_registers(tp, index, type, size, data); in generic_ocp_read()
719 set_bit(RTL8152_UNPLUG, &tp->flags); in generic_ocp_read()
724 static int generic_ocp_write(struct r8152 *tp, u16 index, u16 byteen, in generic_ocp_write() argument
731 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in generic_ocp_write()
745 ret = set_registers(tp, index, type | byen, 4, data); in generic_ocp_write()
758 ret = set_registers(tp, index, in generic_ocp_write()
768 ret = set_registers(tp, index, in generic_ocp_write()
782 ret = set_registers(tp, index, type | byen, 4, data); in generic_ocp_write()
789 set_bit(RTL8152_UNPLUG, &tp->flags); in generic_ocp_write()
795 int pla_ocp_read(struct r8152 *tp, u16 index, u16 size, void *data) in pla_ocp_read() argument
797 return generic_ocp_read(tp, index, size, data, MCU_TYPE_PLA); in pla_ocp_read()
801 int pla_ocp_write(struct r8152 *tp, u16 index, u16 byteen, u16 size, void *data) in pla_ocp_write() argument
803 return generic_ocp_write(tp, index, byteen, size, data, MCU_TYPE_PLA); in pla_ocp_write()
807 int usb_ocp_read(struct r8152 *tp, u16 index, u16 size, void *data) in usb_ocp_read() argument
809 return generic_ocp_read(tp, index, size, data, MCU_TYPE_USB); in usb_ocp_read()
813 int usb_ocp_write(struct r8152 *tp, u16 index, u16 byteen, u16 size, void *data) in usb_ocp_write() argument
815 return generic_ocp_write(tp, index, byteen, size, data, MCU_TYPE_USB); in usb_ocp_write()
818 static u32 ocp_read_dword(struct r8152 *tp, u16 type, u16 index) in ocp_read_dword() argument
822 generic_ocp_read(tp, index, sizeof(data), &data, type); in ocp_read_dword()
827 static void ocp_write_dword(struct r8152 *tp, u16 type, u16 index, u32 data) in ocp_write_dword() argument
831 generic_ocp_write(tp, index, BYTE_EN_DWORD, sizeof(tmp), &tmp, type); in ocp_write_dword()
834 static u16 ocp_read_word(struct r8152 *tp, u16 type, u16 index) in ocp_read_word() argument
842 generic_ocp_read(tp, index, sizeof(tmp), &tmp, type); in ocp_read_word()
851 static void ocp_write_word(struct r8152 *tp, u16 type, u16 index, u32 data) in ocp_write_word() argument
869 generic_ocp_write(tp, index, byen, sizeof(tmp), &tmp, type); in ocp_write_word()
872 static u8 ocp_read_byte(struct r8152 *tp, u16 type, u16 index) in ocp_read_byte() argument
880 generic_ocp_read(tp, index, sizeof(tmp), &tmp, type); in ocp_read_byte()
889 static void ocp_write_byte(struct r8152 *tp, u16 type, u16 index, u32 data) in ocp_write_byte() argument
907 generic_ocp_write(tp, index, byen, sizeof(tmp), &tmp, type); in ocp_write_byte()
910 static u16 ocp_reg_read(struct r8152 *tp, u16 addr) in ocp_reg_read() argument
915 if (ocp_base != tp->ocp_base) { in ocp_reg_read()
916 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, ocp_base); in ocp_reg_read()
917 tp->ocp_base = ocp_base; in ocp_reg_read()
921 return ocp_read_word(tp, MCU_TYPE_PLA, ocp_index); in ocp_reg_read()
924 static void ocp_reg_write(struct r8152 *tp, u16 addr, u16 data) in ocp_reg_write() argument
929 if (ocp_base != tp->ocp_base) { in ocp_reg_write()
930 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, ocp_base); in ocp_reg_write()
931 tp->ocp_base = ocp_base; in ocp_reg_write()
935 ocp_write_word(tp, MCU_TYPE_PLA, ocp_index, data); in ocp_reg_write()
938 static inline void r8152_mdio_write(struct r8152 *tp, u32 reg_addr, u32 value) in r8152_mdio_write() argument
940 ocp_reg_write(tp, OCP_BASE_MII + reg_addr * 2, value); in r8152_mdio_write()
943 static inline int r8152_mdio_read(struct r8152 *tp, u32 reg_addr) in r8152_mdio_read() argument
945 return ocp_reg_read(tp, OCP_BASE_MII + reg_addr * 2); in r8152_mdio_read()
948 static void sram_write(struct r8152 *tp, u16 addr, u16 data) in sram_write() argument
950 ocp_reg_write(tp, OCP_SRAM_ADDR, addr); in sram_write()
951 ocp_reg_write(tp, OCP_SRAM_DATA, data); in sram_write()
956 struct r8152 *tp = netdev_priv(netdev); in read_mii_word() local
959 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in read_mii_word()
965 ret = r8152_mdio_read(tp, reg); in read_mii_word()
973 struct r8152 *tp = netdev_priv(netdev); in write_mii_word() local
975 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in write_mii_word()
981 r8152_mdio_write(tp, reg, val); in write_mii_word()
985 r8152_submit_rx(struct r8152 *tp, struct rx_agg *agg, gfp_t mem_flags);
989 struct r8152 *tp = netdev_priv(netdev); in rtl8152_set_mac_address() local
996 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_mac_address()
1000 mutex_lock(&tp->control); in rtl8152_set_mac_address()
1004 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG); in rtl8152_set_mac_address()
1005 pla_ocp_write(tp, PLA_IDR, BYTE_EN_SIX_BYTES, 8, addr->sa_data); in rtl8152_set_mac_address()
1006 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); in rtl8152_set_mac_address()
1008 mutex_unlock(&tp->control); in rtl8152_set_mac_address()
1010 usb_autopm_put_interface(tp->intf); in rtl8152_set_mac_address()
1015 static int set_ethernet_addr(struct r8152 *tp) in set_ethernet_addr() argument
1017 struct net_device *dev = tp->netdev; in set_ethernet_addr()
1021 if (tp->version == RTL_VER_01) in set_ethernet_addr()
1022 ret = pla_ocp_read(tp, PLA_IDR, 8, sa.sa_data); in set_ethernet_addr()
1024 ret = pla_ocp_read(tp, PLA_BACKUP, 8, sa.sa_data); in set_ethernet_addr()
1027 netif_err(tp, probe, dev, "Get ether addr fail\n"); in set_ethernet_addr()
1029 netif_err(tp, probe, dev, "Invalid ether addr %pM\n", in set_ethernet_addr()
1034 netif_info(tp, probe, dev, "Random ether addr %pM\n", in set_ethernet_addr()
1037 if (tp->version == RTL_VER_01) in set_ethernet_addr()
1051 struct r8152 *tp; in read_bulk_callback() local
1057 tp = agg->context; in read_bulk_callback()
1058 if (!tp) in read_bulk_callback()
1061 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in read_bulk_callback()
1064 if (!test_bit(WORK_ENABLE, &tp->flags)) in read_bulk_callback()
1067 netdev = tp->netdev; in read_bulk_callback()
1074 usb_mark_last_busy(tp->udev); in read_bulk_callback()
1081 spin_lock(&tp->rx_lock); in read_bulk_callback()
1082 list_add_tail(&agg->list, &tp->rx_done); in read_bulk_callback()
1083 spin_unlock(&tp->rx_lock); in read_bulk_callback()
1084 napi_schedule(&tp->napi); in read_bulk_callback()
1087 set_bit(RTL8152_UNPLUG, &tp->flags); in read_bulk_callback()
1088 netif_device_detach(tp->netdev); in read_bulk_callback()
1102 r8152_submit_rx(tp, agg, GFP_ATOMIC); in read_bulk_callback()
1110 struct r8152 *tp; in write_bulk_callback() local
1117 tp = agg->context; in write_bulk_callback()
1118 if (!tp) in write_bulk_callback()
1121 netdev = tp->netdev; in write_bulk_callback()
1132 spin_lock(&tp->tx_lock); in write_bulk_callback()
1133 list_add_tail(&agg->list, &tp->tx_free); in write_bulk_callback()
1134 spin_unlock(&tp->tx_lock); in write_bulk_callback()
1136 usb_autopm_put_interface_async(tp->intf); in write_bulk_callback()
1141 if (!test_bit(WORK_ENABLE, &tp->flags)) in write_bulk_callback()
1144 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in write_bulk_callback()
1147 if (!skb_queue_empty(&tp->tx_queue)) in write_bulk_callback()
1148 napi_schedule(&tp->napi); in write_bulk_callback()
1153 struct r8152 *tp; in intr_callback() local
1158 tp = urb->context; in intr_callback()
1159 if (!tp) in intr_callback()
1162 if (!test_bit(WORK_ENABLE, &tp->flags)) in intr_callback()
1165 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in intr_callback()
1173 netif_device_detach(tp->netdev); in intr_callback()
1176 netif_info(tp, intr, tp->netdev, in intr_callback()
1180 netif_info(tp, intr, tp->netdev, "intr status -EOVERFLOW\n"); in intr_callback()
1184 netif_info(tp, intr, tp->netdev, "intr status %d\n", status); in intr_callback()
1190 if (!netif_carrier_ok(tp->netdev)) { in intr_callback()
1191 set_bit(RTL8152_LINK_CHG, &tp->flags); in intr_callback()
1192 schedule_delayed_work(&tp->schedule, 0); in intr_callback()
1195 if (netif_carrier_ok(tp->netdev)) { in intr_callback()
1196 set_bit(RTL8152_LINK_CHG, &tp->flags); in intr_callback()
1197 schedule_delayed_work(&tp->schedule, 0); in intr_callback()
1204 set_bit(RTL8152_UNPLUG, &tp->flags); in intr_callback()
1205 netif_device_detach(tp->netdev); in intr_callback()
1207 netif_err(tp, intr, tp->netdev, in intr_callback()
1222 static void free_all_mem(struct r8152 *tp) in free_all_mem() argument
1227 usb_free_urb(tp->rx_info[i].urb); in free_all_mem()
1228 tp->rx_info[i].urb = NULL; in free_all_mem()
1230 kfree(tp->rx_info[i].buffer); in free_all_mem()
1231 tp->rx_info[i].buffer = NULL; in free_all_mem()
1232 tp->rx_info[i].head = NULL; in free_all_mem()
1236 usb_free_urb(tp->tx_info[i].urb); in free_all_mem()
1237 tp->tx_info[i].urb = NULL; in free_all_mem()
1239 kfree(tp->tx_info[i].buffer); in free_all_mem()
1240 tp->tx_info[i].buffer = NULL; in free_all_mem()
1241 tp->tx_info[i].head = NULL; in free_all_mem()
1244 usb_free_urb(tp->intr_urb); in free_all_mem()
1245 tp->intr_urb = NULL; in free_all_mem()
1247 kfree(tp->intr_buff); in free_all_mem()
1248 tp->intr_buff = NULL; in free_all_mem()
1251 static int alloc_all_mem(struct r8152 *tp) in alloc_all_mem() argument
1253 struct net_device *netdev = tp->netdev; in alloc_all_mem()
1254 struct usb_interface *intf = tp->intf; in alloc_all_mem()
1263 spin_lock_init(&tp->rx_lock); in alloc_all_mem()
1264 spin_lock_init(&tp->tx_lock); in alloc_all_mem()
1265 INIT_LIST_HEAD(&tp->tx_free); in alloc_all_mem()
1266 skb_queue_head_init(&tp->tx_queue); in alloc_all_mem()
1267 skb_queue_head_init(&tp->rx_queue); in alloc_all_mem()
1288 INIT_LIST_HEAD(&tp->rx_info[i].list); in alloc_all_mem()
1289 tp->rx_info[i].context = tp; in alloc_all_mem()
1290 tp->rx_info[i].urb = urb; in alloc_all_mem()
1291 tp->rx_info[i].buffer = buf; in alloc_all_mem()
1292 tp->rx_info[i].head = rx_agg_align(buf); in alloc_all_mem()
1314 INIT_LIST_HEAD(&tp->tx_info[i].list); in alloc_all_mem()
1315 tp->tx_info[i].context = tp; in alloc_all_mem()
1316 tp->tx_info[i].urb = urb; in alloc_all_mem()
1317 tp->tx_info[i].buffer = buf; in alloc_all_mem()
1318 tp->tx_info[i].head = tx_agg_align(buf); in alloc_all_mem()
1320 list_add_tail(&tp->tx_info[i].list, &tp->tx_free); in alloc_all_mem()
1323 tp->intr_urb = usb_alloc_urb(0, GFP_KERNEL); in alloc_all_mem()
1324 if (!tp->intr_urb) in alloc_all_mem()
1327 tp->intr_buff = kmalloc(INTBUFSIZE, GFP_KERNEL); in alloc_all_mem()
1328 if (!tp->intr_buff) in alloc_all_mem()
1331 tp->intr_interval = (int)ep_intr->desc.bInterval; in alloc_all_mem()
1332 usb_fill_int_urb(tp->intr_urb, tp->udev, usb_rcvintpipe(tp->udev, 3), in alloc_all_mem()
1333 tp->intr_buff, INTBUFSIZE, intr_callback, in alloc_all_mem()
1334 tp, tp->intr_interval); in alloc_all_mem()
1339 free_all_mem(tp); in alloc_all_mem()
1343 static struct tx_agg *r8152_get_tx_agg(struct r8152 *tp) in r8152_get_tx_agg() argument
1348 if (list_empty(&tp->tx_free)) in r8152_get_tx_agg()
1351 spin_lock_irqsave(&tp->tx_lock, flags); in r8152_get_tx_agg()
1352 if (!list_empty(&tp->tx_free)) { in r8152_get_tx_agg()
1355 cursor = tp->tx_free.next; in r8152_get_tx_agg()
1359 spin_unlock_irqrestore(&tp->tx_lock, flags); in r8152_get_tx_agg()
1368 static void r8152_csum_workaround(struct r8152 *tp, struct sk_buff *skb, in r8152_csum_workaround() argument
1372 netdev_features_t features = tp->netdev->features; in r8152_csum_workaround()
1401 stats = &tp->netdev->stats; in r8152_csum_workaround()
1449 static int r8152_tx_csum(struct r8152 *tp, struct tx_desc *desc, in r8152_tx_csum() argument
1462 netif_warn(tp, tx_err, tp->netdev, in r8152_tx_csum()
1493 netif_warn(tp, tx_err, tp->netdev, in r8152_tx_csum()
1533 static int r8152_tx_agg_fill(struct r8152 *tp, struct tx_agg *agg) in r8152_tx_agg_fill() argument
1535 struct sk_buff_head skb_head, *tx_queue = &tp->tx_queue; in r8152_tx_agg_fill()
1571 if (r8152_tx_csum(tp, tx_desc, skb, skb->len, offset)) { in r8152_tx_agg_fill()
1572 r8152_csum_workaround(tp, skb, &skb_head); in r8152_tx_agg_fill()
1582 struct net_device_stats *stats = &tp->netdev->stats; in r8152_tx_agg_fill()
1605 netif_tx_lock(tp->netdev); in r8152_tx_agg_fill()
1607 if (netif_queue_stopped(tp->netdev) && in r8152_tx_agg_fill()
1608 skb_queue_len(&tp->tx_queue) < tp->tx_qlen) in r8152_tx_agg_fill()
1609 netif_wake_queue(tp->netdev); in r8152_tx_agg_fill()
1611 netif_tx_unlock(tp->netdev); in r8152_tx_agg_fill()
1613 ret = usb_autopm_get_interface_async(tp->intf); in r8152_tx_agg_fill()
1617 usb_fill_bulk_urb(agg->urb, tp->udev, usb_sndbulkpipe(tp->udev, 2), in r8152_tx_agg_fill()
1623 usb_autopm_put_interface_async(tp->intf); in r8152_tx_agg_fill()
1629 static u8 r8152_rx_csum(struct r8152 *tp, struct rx_desc *rx_desc) in r8152_rx_csum() argument
1634 if (tp->version == RTL_VER_01) in r8152_rx_csum()
1660 static int rx_bottom(struct r8152 *tp, int budget) in rx_bottom() argument
1666 if (!skb_queue_empty(&tp->rx_queue)) { in rx_bottom()
1668 struct sk_buff *skb = __skb_dequeue(&tp->rx_queue); in rx_bottom()
1669 struct net_device *netdev = tp->netdev; in rx_bottom()
1677 napi_gro_receive(&tp->napi, skb); in rx_bottom()
1684 if (list_empty(&tp->rx_done)) in rx_bottom()
1688 spin_lock_irqsave(&tp->rx_lock, flags); in rx_bottom()
1689 list_splice_init(&tp->rx_done, &rx_queue); in rx_bottom()
1690 spin_unlock_irqrestore(&tp->rx_lock, flags); in rx_bottom()
1711 struct net_device *netdev = tp->netdev; in rx_bottom()
1733 skb->ip_summed = r8152_rx_csum(tp, rx_desc); in rx_bottom()
1739 napi_gro_receive(&tp->napi, skb); in rx_bottom()
1744 __skb_queue_tail(&tp->rx_queue, skb); in rx_bottom()
1756 ret = r8152_submit_rx(tp, agg, GFP_ATOMIC); in rx_bottom()
1764 spin_lock_irqsave(&tp->rx_lock, flags); in rx_bottom()
1765 list_splice_tail(&rx_queue, &tp->rx_done); in rx_bottom()
1766 spin_unlock_irqrestore(&tp->rx_lock, flags); in rx_bottom()
1773 static void tx_bottom(struct r8152 *tp) in tx_bottom() argument
1780 if (skb_queue_empty(&tp->tx_queue)) in tx_bottom()
1783 agg = r8152_get_tx_agg(tp); in tx_bottom()
1787 res = r8152_tx_agg_fill(tp, agg); in tx_bottom()
1789 struct net_device *netdev = tp->netdev; in tx_bottom()
1792 set_bit(RTL8152_UNPLUG, &tp->flags); in tx_bottom()
1798 netif_warn(tp, tx_err, netdev, in tx_bottom()
1802 spin_lock_irqsave(&tp->tx_lock, flags); in tx_bottom()
1803 list_add_tail(&agg->list, &tp->tx_free); in tx_bottom()
1804 spin_unlock_irqrestore(&tp->tx_lock, flags); in tx_bottom()
1810 static void bottom_half(struct r8152 *tp) in bottom_half() argument
1812 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in bottom_half()
1815 if (!test_bit(WORK_ENABLE, &tp->flags)) in bottom_half()
1820 if (!netif_carrier_ok(tp->netdev)) in bottom_half()
1823 clear_bit(SCHEDULE_NAPI, &tp->flags); in bottom_half()
1825 tx_bottom(tp); in bottom_half()
1830 struct r8152 *tp = container_of(napi, struct r8152, napi); in r8152_poll() local
1833 work_done = rx_bottom(tp, budget); in r8152_poll()
1834 bottom_half(tp); in r8152_poll()
1838 if (!list_empty(&tp->rx_done)) in r8152_poll()
1846 int r8152_submit_rx(struct r8152 *tp, struct rx_agg *agg, gfp_t mem_flags) in r8152_submit_rx() argument
1851 if (test_bit(RTL8152_UNPLUG, &tp->flags) || in r8152_submit_rx()
1852 !test_bit(WORK_ENABLE, &tp->flags) || !netif_carrier_ok(tp->netdev)) in r8152_submit_rx()
1855 usb_fill_bulk_urb(agg->urb, tp->udev, usb_rcvbulkpipe(tp->udev, 1), in r8152_submit_rx()
1861 set_bit(RTL8152_UNPLUG, &tp->flags); in r8152_submit_rx()
1862 netif_device_detach(tp->netdev); in r8152_submit_rx()
1868 spin_lock_irqsave(&tp->rx_lock, flags); in r8152_submit_rx()
1869 list_add_tail(&agg->list, &tp->rx_done); in r8152_submit_rx()
1870 spin_unlock_irqrestore(&tp->rx_lock, flags); in r8152_submit_rx()
1872 netif_err(tp, rx_err, tp->netdev, in r8152_submit_rx()
1875 napi_schedule(&tp->napi); in r8152_submit_rx()
1881 static void rtl_drop_queued_tx(struct r8152 *tp) in rtl_drop_queued_tx() argument
1883 struct net_device_stats *stats = &tp->netdev->stats; in rtl_drop_queued_tx()
1884 struct sk_buff_head skb_head, *tx_queue = &tp->tx_queue; in rtl_drop_queued_tx()
1903 struct r8152 *tp = netdev_priv(netdev); in rtl8152_tx_timeout() local
1906 netif_warn(tp, tx_err, netdev, "Tx timeout\n"); in rtl8152_tx_timeout()
1908 usb_unlink_urb(tp->tx_info[i].urb); in rtl8152_tx_timeout()
1913 struct r8152 *tp = netdev_priv(netdev); in rtl8152_set_rx_mode() local
1916 set_bit(RTL8152_SET_RX_MODE, &tp->flags); in rtl8152_set_rx_mode()
1917 schedule_delayed_work(&tp->schedule, 0); in rtl8152_set_rx_mode()
1923 struct r8152 *tp = netdev_priv(netdev); in _rtl8152_set_rx_mode() local
1928 clear_bit(RTL8152_SET_RX_MODE, &tp->flags); in _rtl8152_set_rx_mode()
1930 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in _rtl8152_set_rx_mode()
1936 netif_notice(tp, link, netdev, "Promiscuous mode enabled\n"); in _rtl8152_set_rx_mode()
1962 pla_ocp_write(tp, PLA_MAR, BYTE_EN_DWORD, sizeof(tmp), tmp); in _rtl8152_set_rx_mode()
1963 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in _rtl8152_set_rx_mode()
1986 struct r8152 *tp = netdev_priv(netdev); in rtl8152_start_xmit() local
1990 skb_queue_tail(&tp->tx_queue, skb); in rtl8152_start_xmit()
1992 if (!list_empty(&tp->tx_free)) { in rtl8152_start_xmit()
1993 if (test_bit(SELECTIVE_SUSPEND, &tp->flags)) { in rtl8152_start_xmit()
1994 set_bit(SCHEDULE_NAPI, &tp->flags); in rtl8152_start_xmit()
1995 schedule_delayed_work(&tp->schedule, 0); in rtl8152_start_xmit()
1997 usb_mark_last_busy(tp->udev); in rtl8152_start_xmit()
1998 napi_schedule(&tp->napi); in rtl8152_start_xmit()
2000 } else if (skb_queue_len(&tp->tx_queue) > tp->tx_qlen) { in rtl8152_start_xmit()
2007 static void r8152b_reset_packet_filter(struct r8152 *tp) in r8152b_reset_packet_filter() argument
2011 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_FMC); in r8152b_reset_packet_filter()
2013 ocp_write_word(tp, MCU_TYPE_PLA, PLA_FMC, ocp_data); in r8152b_reset_packet_filter()
2015 ocp_write_word(tp, MCU_TYPE_PLA, PLA_FMC, ocp_data); in r8152b_reset_packet_filter()
2018 static void rtl8152_nic_reset(struct r8152 *tp) in rtl8152_nic_reset() argument
2022 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, CR_RST); in rtl8152_nic_reset()
2025 if (!(ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CR) & CR_RST)) in rtl8152_nic_reset()
2031 static void set_tx_qlen(struct r8152 *tp) in set_tx_qlen() argument
2033 struct net_device *netdev = tp->netdev; in set_tx_qlen()
2035 tp->tx_qlen = agg_buf_sz / (netdev->mtu + VLAN_ETH_HLEN + VLAN_HLEN + in set_tx_qlen()
2039 static inline u8 rtl8152_get_speed(struct r8152 *tp) in rtl8152_get_speed() argument
2041 return ocp_read_byte(tp, MCU_TYPE_PLA, PLA_PHYSTATUS); in rtl8152_get_speed()
2044 static void rtl_set_eee_plus(struct r8152 *tp) in rtl_set_eee_plus() argument
2049 speed = rtl8152_get_speed(tp); in rtl_set_eee_plus()
2051 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEEP_CR); in rtl_set_eee_plus()
2053 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEEP_CR, ocp_data); in rtl_set_eee_plus()
2055 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEEP_CR); in rtl_set_eee_plus()
2057 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEEP_CR, ocp_data); in rtl_set_eee_plus()
2061 static void rxdy_gated_en(struct r8152 *tp, bool enable) in rxdy_gated_en() argument
2065 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MISC_1); in rxdy_gated_en()
2070 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MISC_1, ocp_data); in rxdy_gated_en()
2073 static int rtl_start_rx(struct r8152 *tp) in rtl_start_rx() argument
2077 napi_disable(&tp->napi); in rtl_start_rx()
2078 INIT_LIST_HEAD(&tp->rx_done); in rtl_start_rx()
2080 INIT_LIST_HEAD(&tp->rx_info[i].list); in rtl_start_rx()
2081 ret = r8152_submit_rx(tp, &tp->rx_info[i], GFP_KERNEL); in rtl_start_rx()
2085 napi_enable(&tp->napi); in rtl_start_rx()
2094 struct rx_agg *agg = &tp->rx_info[i++]; in rtl_start_rx()
2101 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_start_rx()
2102 list_splice_tail(&rx_queue, &tp->rx_done); in rtl_start_rx()
2103 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_start_rx()
2109 static int rtl_stop_rx(struct r8152 *tp) in rtl_stop_rx() argument
2114 usb_kill_urb(tp->rx_info[i].urb); in rtl_stop_rx()
2116 while (!skb_queue_empty(&tp->rx_queue)) in rtl_stop_rx()
2117 dev_kfree_skb(__skb_dequeue(&tp->rx_queue)); in rtl_stop_rx()
2122 static int rtl_enable(struct r8152 *tp) in rtl_enable() argument
2126 r8152b_reset_packet_filter(tp); in rtl_enable()
2128 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CR); in rtl_enable()
2130 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, ocp_data); in rtl_enable()
2132 rxdy_gated_en(tp, false); in rtl_enable()
2137 static int rtl8152_enable(struct r8152 *tp) in rtl8152_enable() argument
2139 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8152_enable()
2142 set_tx_qlen(tp); in rtl8152_enable()
2143 rtl_set_eee_plus(tp); in rtl8152_enable()
2145 return rtl_enable(tp); in rtl8152_enable()
2148 static void r8153_set_rx_early_timeout(struct r8152 *tp) in r8153_set_rx_early_timeout() argument
2150 u32 ocp_data = tp->coalesce / 8; in r8153_set_rx_early_timeout()
2152 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_TIMEOUT, ocp_data); in r8153_set_rx_early_timeout()
2155 static void r8153_set_rx_early_size(struct r8152 *tp) in r8153_set_rx_early_size() argument
2157 u32 mtu = tp->netdev->mtu; in r8153_set_rx_early_size()
2160 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_SIZE, ocp_data); in r8153_set_rx_early_size()
2163 static int rtl8153_enable(struct r8152 *tp) in rtl8153_enable() argument
2165 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8153_enable()
2168 set_tx_qlen(tp); in rtl8153_enable()
2169 rtl_set_eee_plus(tp); in rtl8153_enable()
2170 r8153_set_rx_early_timeout(tp); in rtl8153_enable()
2171 r8153_set_rx_early_size(tp); in rtl8153_enable()
2173 return rtl_enable(tp); in rtl8153_enable()
2176 static void rtl_disable(struct r8152 *tp) in rtl_disable() argument
2181 if (test_bit(RTL8152_UNPLUG, &tp->flags)) { in rtl_disable()
2182 rtl_drop_queued_tx(tp); in rtl_disable()
2186 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in rtl_disable()
2188 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in rtl_disable()
2190 rtl_drop_queued_tx(tp); in rtl_disable()
2193 usb_kill_urb(tp->tx_info[i].urb); in rtl_disable()
2195 rxdy_gated_en(tp, true); in rtl_disable()
2198 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in rtl_disable()
2205 if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR0) & TCR0_TX_EMPTY) in rtl_disable()
2210 rtl_stop_rx(tp); in rtl_disable()
2212 rtl8152_nic_reset(tp); in rtl_disable()
2215 static void r8152_power_cut_en(struct r8152 *tp, bool enable) in r8152_power_cut_en() argument
2219 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_UPS_CTRL); in r8152_power_cut_en()
2224 ocp_write_word(tp, MCU_TYPE_USB, USB_UPS_CTRL, ocp_data); in r8152_power_cut_en()
2226 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_PM_CTRL_STATUS); in r8152_power_cut_en()
2228 ocp_write_word(tp, MCU_TYPE_USB, USB_PM_CTRL_STATUS, ocp_data); in r8152_power_cut_en()
2231 static void rtl_rx_vlan_en(struct r8152 *tp, bool enable) in rtl_rx_vlan_en() argument
2235 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CPCR); in rtl_rx_vlan_en()
2240 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CPCR, ocp_data); in rtl_rx_vlan_en()
2247 struct r8152 *tp = netdev_priv(dev); in rtl8152_set_features() local
2250 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_features()
2254 mutex_lock(&tp->control); in rtl8152_set_features()
2258 rtl_rx_vlan_en(tp, true); in rtl8152_set_features()
2260 rtl_rx_vlan_en(tp, false); in rtl8152_set_features()
2263 mutex_unlock(&tp->control); in rtl8152_set_features()
2265 usb_autopm_put_interface(tp->intf); in rtl8152_set_features()
2273 static u32 __rtl_get_wol(struct r8152 *tp) in __rtl_get_wol() argument
2278 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CONFIG5); in __rtl_get_wol()
2282 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34); in __rtl_get_wol()
2286 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG5); in __rtl_get_wol()
2294 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CFG_WOL); in __rtl_get_wol()
2301 static void __rtl_set_wol(struct r8152 *tp, u32 wolopts) in __rtl_set_wol() argument
2305 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG); in __rtl_set_wol()
2307 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34); in __rtl_set_wol()
2311 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG34, ocp_data); in __rtl_set_wol()
2313 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG5); in __rtl_set_wol()
2323 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG5, ocp_data); in __rtl_set_wol()
2325 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); in __rtl_set_wol()
2327 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CFG_WOL); in __rtl_set_wol()
2331 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CFG_WOL, ocp_data); in __rtl_set_wol()
2334 device_set_wakeup_enable(&tp->udev->dev, true); in __rtl_set_wol()
2336 device_set_wakeup_enable(&tp->udev->dev, false); in __rtl_set_wol()
2339 static void rtl_runtime_suspend_enable(struct r8152 *tp, bool enable) in rtl_runtime_suspend_enable() argument
2344 __rtl_set_wol(tp, WAKE_ANY); in rtl_runtime_suspend_enable()
2346 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG); in rtl_runtime_suspend_enable()
2348 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34); in rtl_runtime_suspend_enable()
2350 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG34, ocp_data); in rtl_runtime_suspend_enable()
2352 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); in rtl_runtime_suspend_enable()
2354 __rtl_set_wol(tp, tp->saved_wolopts); in rtl_runtime_suspend_enable()
2358 static void rtl_phy_reset(struct r8152 *tp) in rtl_phy_reset() argument
2363 clear_bit(PHY_RESET, &tp->flags); in rtl_phy_reset()
2365 data = r8152_mdio_read(tp, MII_BMCR); in rtl_phy_reset()
2372 r8152_mdio_write(tp, MII_BMCR, data); in rtl_phy_reset()
2376 if ((r8152_mdio_read(tp, MII_BMCR) & BMCR_RESET) == 0) in rtl_phy_reset()
2381 static void r8153_teredo_off(struct r8152 *tp) in r8153_teredo_off() argument
2385 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG); in r8153_teredo_off()
2387 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG, ocp_data); in r8153_teredo_off()
2389 ocp_write_word(tp, MCU_TYPE_PLA, PLA_WDT6_CTRL, WDT6_SET_MODE); in r8153_teredo_off()
2390 ocp_write_word(tp, MCU_TYPE_PLA, PLA_REALWOW_TIMER, 0); in r8153_teredo_off()
2391 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_TEREDO_TIMER, 0); in r8153_teredo_off()
2394 static void r8152b_disable_aldps(struct r8152 *tp) in r8152b_disable_aldps() argument
2396 ocp_reg_write(tp, OCP_ALDPS_CONFIG, ENPDNPS | LINKENA | DIS_SDSAVE); in r8152b_disable_aldps()
2400 static inline void r8152b_enable_aldps(struct r8152 *tp) in r8152b_enable_aldps() argument
2402 ocp_reg_write(tp, OCP_ALDPS_CONFIG, ENPWRSAVE | ENPDNPS | in r8152b_enable_aldps()
2406 static void rtl8152_disable(struct r8152 *tp) in rtl8152_disable() argument
2408 r8152b_disable_aldps(tp); in rtl8152_disable()
2409 rtl_disable(tp); in rtl8152_disable()
2410 r8152b_enable_aldps(tp); in rtl8152_disable()
2413 static void r8152b_hw_phy_cfg(struct r8152 *tp) in r8152b_hw_phy_cfg() argument
2417 data = r8152_mdio_read(tp, MII_BMCR); in r8152b_hw_phy_cfg()
2420 r8152_mdio_write(tp, MII_BMCR, data); in r8152b_hw_phy_cfg()
2423 set_bit(PHY_RESET, &tp->flags); in r8152b_hw_phy_cfg()
2426 static void r8152b_exit_oob(struct r8152 *tp) in r8152b_exit_oob() argument
2431 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in r8152b_exit_oob()
2433 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in r8152b_exit_oob()
2435 rxdy_gated_en(tp, true); in r8152b_exit_oob()
2436 r8153_teredo_off(tp); in r8152b_exit_oob()
2437 r8152b_hw_phy_cfg(tp); in r8152b_exit_oob()
2439 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); in r8152b_exit_oob()
2440 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, 0x00); in r8152b_exit_oob()
2442 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8152b_exit_oob()
2444 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8152b_exit_oob()
2446 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8152b_exit_oob()
2448 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8152b_exit_oob()
2451 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8152b_exit_oob()
2457 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8152b_exit_oob()
2459 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8152b_exit_oob()
2462 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8152b_exit_oob()
2468 rtl8152_nic_reset(tp); in r8152b_exit_oob()
2471 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL0, RXFIFO_THR1_NORMAL); in r8152b_exit_oob()
2473 if (tp->udev->speed == USB_SPEED_FULL || in r8152b_exit_oob()
2474 tp->udev->speed == USB_SPEED_LOW) { in r8152b_exit_oob()
2476 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, in r8152b_exit_oob()
2478 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, in r8152b_exit_oob()
2482 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, in r8152b_exit_oob()
2484 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, in r8152b_exit_oob()
2489 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_TXFIFO_CTRL, TXFIFO_THR_NORMAL); in r8152b_exit_oob()
2491 ocp_write_byte(tp, MCU_TYPE_USB, USB_TX_AGG, TX_AGG_MAX_THRESHOLD); in r8152b_exit_oob()
2492 ocp_write_dword(tp, MCU_TYPE_USB, USB_RX_BUF_TH, RX_THR_HIGH); in r8152b_exit_oob()
2493 ocp_write_dword(tp, MCU_TYPE_USB, USB_TX_DMA, in r8152b_exit_oob()
2496 rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX); in r8152b_exit_oob()
2498 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, RTL8152_RMS); in r8152b_exit_oob()
2500 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR0); in r8152b_exit_oob()
2502 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TCR0, ocp_data); in r8152b_exit_oob()
2505 static void r8152b_enter_oob(struct r8152 *tp) in r8152b_enter_oob() argument
2510 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8152b_enter_oob()
2512 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8152b_enter_oob()
2514 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL0, RXFIFO_THR1_OOB); in r8152b_enter_oob()
2515 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, RXFIFO_THR2_OOB); in r8152b_enter_oob()
2516 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, RXFIFO_THR3_OOB); in r8152b_enter_oob()
2518 rtl_disable(tp); in r8152b_enter_oob()
2521 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8152b_enter_oob()
2527 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8152b_enter_oob()
2529 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8152b_enter_oob()
2532 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8152b_enter_oob()
2538 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, RTL8152_RMS); in r8152b_enter_oob()
2540 rtl_rx_vlan_en(tp, true); in r8152b_enter_oob()
2542 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PAL_BDC_CR); in r8152b_enter_oob()
2544 ocp_write_word(tp, MCU_TYPE_PLA, PAL_BDC_CR, ocp_data); in r8152b_enter_oob()
2546 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8152b_enter_oob()
2548 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8152b_enter_oob()
2550 rxdy_gated_en(tp, false); in r8152b_enter_oob()
2552 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in r8152b_enter_oob()
2554 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in r8152b_enter_oob()
2557 static void r8153_hw_phy_cfg(struct r8152 *tp) in r8153_hw_phy_cfg() argument
2562 ocp_reg_write(tp, OCP_ADC_CFG, CKADSEL_L | ADC_EN | EN_EMI_L); in r8153_hw_phy_cfg()
2563 data = r8152_mdio_read(tp, MII_BMCR); in r8153_hw_phy_cfg()
2566 r8152_mdio_write(tp, MII_BMCR, data); in r8153_hw_phy_cfg()
2569 if (tp->version == RTL_VER_03) { in r8153_hw_phy_cfg()
2570 data = ocp_reg_read(tp, OCP_EEE_CFG); in r8153_hw_phy_cfg()
2572 ocp_reg_write(tp, OCP_EEE_CFG, data); in r8153_hw_phy_cfg()
2575 data = ocp_reg_read(tp, OCP_POWER_CFG); in r8153_hw_phy_cfg()
2577 ocp_reg_write(tp, OCP_POWER_CFG, data); in r8153_hw_phy_cfg()
2579 data = ocp_reg_read(tp, OCP_DOWN_SPEED); in r8153_hw_phy_cfg()
2581 ocp_reg_write(tp, OCP_DOWN_SPEED, data); in r8153_hw_phy_cfg()
2582 data = ocp_reg_read(tp, OCP_POWER_CFG); in r8153_hw_phy_cfg()
2584 ocp_reg_write(tp, OCP_POWER_CFG, data); in r8153_hw_phy_cfg()
2585 sram_write(tp, SRAM_IMPEDANCE, 0x0b13); in r8153_hw_phy_cfg()
2587 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR); in r8153_hw_phy_cfg()
2589 ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data); in r8153_hw_phy_cfg()
2592 sram_write(tp, SRAM_LPF_CFG, 0xf70f); in r8153_hw_phy_cfg()
2595 sram_write(tp, SRAM_10M_AMP1, 0x00af); in r8153_hw_phy_cfg()
2596 sram_write(tp, SRAM_10M_AMP2, 0x0208); in r8153_hw_phy_cfg()
2598 set_bit(PHY_RESET, &tp->flags); in r8153_hw_phy_cfg()
2601 static void r8153_u1u2en(struct r8152 *tp, bool enable) in r8153_u1u2en() argument
2610 usb_ocp_write(tp, USB_TOLERANCE, BYTE_EN_SIX_BYTES, sizeof(u1u2), u1u2); in r8153_u1u2en()
2613 static void r8153_u2p3en(struct r8152 *tp, bool enable) in r8153_u2p3en() argument
2617 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_U2P3_CTRL); in r8153_u2p3en()
2622 ocp_write_word(tp, MCU_TYPE_USB, USB_U2P3_CTRL, ocp_data); in r8153_u2p3en()
2625 static void r8153_power_cut_en(struct r8152 *tp, bool enable) in r8153_power_cut_en() argument
2629 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_POWER_CUT); in r8153_power_cut_en()
2634 ocp_write_word(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data); in r8153_power_cut_en()
2636 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0); in r8153_power_cut_en()
2638 ocp_write_word(tp, MCU_TYPE_USB, USB_MISC_0, ocp_data); in r8153_power_cut_en()
2641 static void r8153_first_init(struct r8152 *tp) in r8153_first_init() argument
2646 rxdy_gated_en(tp, true); in r8153_first_init()
2647 r8153_teredo_off(tp); in r8153_first_init()
2649 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in r8153_first_init()
2651 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in r8153_first_init()
2653 r8153_hw_phy_cfg(tp); in r8153_first_init()
2655 rtl8152_nic_reset(tp); in r8153_first_init()
2657 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8153_first_init()
2659 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8153_first_init()
2661 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8153_first_init()
2663 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8153_first_init()
2666 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8153_first_init()
2672 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8153_first_init()
2674 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8153_first_init()
2677 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8153_first_init()
2683 rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX); in r8153_first_init()
2685 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, RTL8153_RMS); in r8153_first_init()
2686 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_MTPS, MTPS_JUMBO); in r8153_first_init()
2688 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR0); in r8153_first_init()
2690 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TCR0, ocp_data); in r8153_first_init()
2692 rtl8152_nic_reset(tp); in r8153_first_init()
2695 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL0, RXFIFO_THR1_NORMAL); in r8153_first_init()
2696 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, RXFIFO_THR2_NORMAL); in r8153_first_init()
2697 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, RXFIFO_THR3_NORMAL); in r8153_first_init()
2699 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_TXFIFO_CTRL, TXFIFO_THR_NORMAL2); in r8153_first_init()
2702 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL); in r8153_first_init()
2704 ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data); in r8153_first_init()
2707 static void r8153_enter_oob(struct r8152 *tp) in r8153_enter_oob() argument
2712 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8153_enter_oob()
2714 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8153_enter_oob()
2716 rtl_disable(tp); in r8153_enter_oob()
2719 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8153_enter_oob()
2725 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8153_enter_oob()
2727 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8153_enter_oob()
2730 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8153_enter_oob()
2736 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, RTL8153_RMS); in r8153_enter_oob()
2738 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG); in r8153_enter_oob()
2740 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG, ocp_data); in r8153_enter_oob()
2742 rtl_rx_vlan_en(tp, true); in r8153_enter_oob()
2744 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PAL_BDC_CR); in r8153_enter_oob()
2746 ocp_write_word(tp, MCU_TYPE_PLA, PAL_BDC_CR, ocp_data); in r8153_enter_oob()
2748 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8153_enter_oob()
2750 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8153_enter_oob()
2752 rxdy_gated_en(tp, false); in r8153_enter_oob()
2754 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in r8153_enter_oob()
2756 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in r8153_enter_oob()
2759 static void r8153_disable_aldps(struct r8152 *tp) in r8153_disable_aldps() argument
2763 data = ocp_reg_read(tp, OCP_POWER_CFG); in r8153_disable_aldps()
2765 ocp_reg_write(tp, OCP_POWER_CFG, data); in r8153_disable_aldps()
2769 static void r8153_enable_aldps(struct r8152 *tp) in r8153_enable_aldps() argument
2773 data = ocp_reg_read(tp, OCP_POWER_CFG); in r8153_enable_aldps()
2775 ocp_reg_write(tp, OCP_POWER_CFG, data); in r8153_enable_aldps()
2778 static void rtl8153_disable(struct r8152 *tp) in rtl8153_disable() argument
2780 r8153_disable_aldps(tp); in rtl8153_disable()
2781 rtl_disable(tp); in rtl8153_disable()
2782 r8153_enable_aldps(tp); in rtl8153_disable()
2785 static int rtl8152_set_speed(struct r8152 *tp, u8 autoneg, u16 speed, u8 duplex) in rtl8152_set_speed() argument
2790 cancel_delayed_work_sync(&tp->schedule); in rtl8152_set_speed()
2791 anar = r8152_mdio_read(tp, MII_ADVERTISE); in rtl8152_set_speed()
2794 if (tp->mii.supports_gmii) { in rtl8152_set_speed()
2795 gbcr = r8152_mdio_read(tp, MII_CTRL1000); in rtl8152_set_speed()
2808 } else if (speed == SPEED_1000 && tp->mii.supports_gmii) { in rtl8152_set_speed()
2832 } else if (speed == SPEED_1000 && tp->mii.supports_gmii) { in rtl8152_set_speed()
2850 if (test_bit(PHY_RESET, &tp->flags)) in rtl8152_set_speed()
2853 if (tp->mii.supports_gmii) in rtl8152_set_speed()
2854 r8152_mdio_write(tp, MII_CTRL1000, gbcr); in rtl8152_set_speed()
2856 r8152_mdio_write(tp, MII_ADVERTISE, anar); in rtl8152_set_speed()
2857 r8152_mdio_write(tp, MII_BMCR, bmcr); in rtl8152_set_speed()
2859 if (test_bit(PHY_RESET, &tp->flags)) { in rtl8152_set_speed()
2862 clear_bit(PHY_RESET, &tp->flags); in rtl8152_set_speed()
2865 if ((r8152_mdio_read(tp, MII_BMCR) & BMCR_RESET) == 0) in rtl8152_set_speed()
2875 static void rtl8152_up(struct r8152 *tp) in rtl8152_up() argument
2877 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8152_up()
2880 r8152b_disable_aldps(tp); in rtl8152_up()
2881 r8152b_exit_oob(tp); in rtl8152_up()
2882 r8152b_enable_aldps(tp); in rtl8152_up()
2885 static void rtl8152_down(struct r8152 *tp) in rtl8152_down() argument
2887 if (test_bit(RTL8152_UNPLUG, &tp->flags)) { in rtl8152_down()
2888 rtl_drop_queued_tx(tp); in rtl8152_down()
2892 r8152_power_cut_en(tp, false); in rtl8152_down()
2893 r8152b_disable_aldps(tp); in rtl8152_down()
2894 r8152b_enter_oob(tp); in rtl8152_down()
2895 r8152b_enable_aldps(tp); in rtl8152_down()
2898 static void rtl8153_up(struct r8152 *tp) in rtl8153_up() argument
2900 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8153_up()
2903 r8153_disable_aldps(tp); in rtl8153_up()
2904 r8153_first_init(tp); in rtl8153_up()
2905 r8153_enable_aldps(tp); in rtl8153_up()
2908 static void rtl8153_down(struct r8152 *tp) in rtl8153_down() argument
2910 if (test_bit(RTL8152_UNPLUG, &tp->flags)) { in rtl8153_down()
2911 rtl_drop_queued_tx(tp); in rtl8153_down()
2915 r8153_u1u2en(tp, false); in rtl8153_down()
2916 r8153_power_cut_en(tp, false); in rtl8153_down()
2917 r8153_disable_aldps(tp); in rtl8153_down()
2918 r8153_enter_oob(tp); in rtl8153_down()
2919 r8153_enable_aldps(tp); in rtl8153_down()
2922 static void set_carrier(struct r8152 *tp) in set_carrier() argument
2924 struct net_device *netdev = tp->netdev; in set_carrier()
2927 clear_bit(RTL8152_LINK_CHG, &tp->flags); in set_carrier()
2928 speed = rtl8152_get_speed(tp); in set_carrier()
2932 tp->rtl_ops.enable(tp); in set_carrier()
2933 set_bit(RTL8152_SET_RX_MODE, &tp->flags); in set_carrier()
2935 rtl_start_rx(tp); in set_carrier()
2940 napi_disable(&tp->napi); in set_carrier()
2941 tp->rtl_ops.disable(tp); in set_carrier()
2942 napi_enable(&tp->napi); in set_carrier()
2949 struct r8152 *tp = container_of(work, struct r8152, schedule.work); in rtl_work_func_t() local
2954 if (test_bit(RTL8152_UNPLUG, &tp->flags) || !netif_running(tp->netdev)) in rtl_work_func_t()
2957 if (usb_autopm_get_interface(tp->intf) < 0) in rtl_work_func_t()
2960 if (!test_bit(WORK_ENABLE, &tp->flags)) in rtl_work_func_t()
2963 if (!mutex_trylock(&tp->control)) { in rtl_work_func_t()
2964 schedule_delayed_work(&tp->schedule, 0); in rtl_work_func_t()
2968 if (test_bit(RTL8152_LINK_CHG, &tp->flags)) in rtl_work_func_t()
2969 set_carrier(tp); in rtl_work_func_t()
2971 if (test_bit(RTL8152_SET_RX_MODE, &tp->flags)) in rtl_work_func_t()
2972 _rtl8152_set_rx_mode(tp->netdev); in rtl_work_func_t()
2975 if (test_bit(SCHEDULE_NAPI, &tp->flags) && in rtl_work_func_t()
2976 netif_carrier_ok(tp->netdev)) { in rtl_work_func_t()
2977 clear_bit(SCHEDULE_NAPI, &tp->flags); in rtl_work_func_t()
2978 napi_schedule(&tp->napi); in rtl_work_func_t()
2981 if (test_bit(PHY_RESET, &tp->flags)) in rtl_work_func_t()
2982 rtl_phy_reset(tp); in rtl_work_func_t()
2984 mutex_unlock(&tp->control); in rtl_work_func_t()
2987 usb_autopm_put_interface(tp->intf); in rtl_work_func_t()
2992 struct r8152 *tp = netdev_priv(netdev); in rtl8152_open() local
2995 res = alloc_all_mem(tp); in rtl8152_open()
3001 res = usb_autopm_get_interface(tp->intf); in rtl8152_open()
3003 free_all_mem(tp); in rtl8152_open()
3007 mutex_lock(&tp->control); in rtl8152_open()
3009 tp->rtl_ops.up(tp); in rtl8152_open()
3011 rtl8152_set_speed(tp, AUTONEG_ENABLE, in rtl8152_open()
3012 tp->mii.supports_gmii ? SPEED_1000 : SPEED_100, in rtl8152_open()
3016 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_open()
3018 res = usb_submit_urb(tp->intr_urb, GFP_KERNEL); in rtl8152_open()
3021 netif_device_detach(tp->netdev); in rtl8152_open()
3022 netif_warn(tp, ifup, netdev, "intr_urb submit failed: %d\n", in rtl8152_open()
3024 free_all_mem(tp); in rtl8152_open()
3026 napi_enable(&tp->napi); in rtl8152_open()
3029 mutex_unlock(&tp->control); in rtl8152_open()
3031 usb_autopm_put_interface(tp->intf); in rtl8152_open()
3039 struct r8152 *tp = netdev_priv(netdev); in rtl8152_close() local
3042 napi_disable(&tp->napi); in rtl8152_close()
3043 clear_bit(WORK_ENABLE, &tp->flags); in rtl8152_close()
3044 usb_kill_urb(tp->intr_urb); in rtl8152_close()
3045 cancel_delayed_work_sync(&tp->schedule); in rtl8152_close()
3048 res = usb_autopm_get_interface(tp->intf); in rtl8152_close()
3049 if (res < 0 || test_bit(RTL8152_UNPLUG, &tp->flags)) { in rtl8152_close()
3050 rtl_drop_queued_tx(tp); in rtl8152_close()
3051 rtl_stop_rx(tp); in rtl8152_close()
3053 mutex_lock(&tp->control); in rtl8152_close()
3055 tp->rtl_ops.down(tp); in rtl8152_close()
3057 mutex_unlock(&tp->control); in rtl8152_close()
3059 usb_autopm_put_interface(tp->intf); in rtl8152_close()
3062 free_all_mem(tp); in rtl8152_close()
3067 static inline void r8152_mmd_indirect(struct r8152 *tp, u16 dev, u16 reg) in r8152_mmd_indirect() argument
3069 ocp_reg_write(tp, OCP_EEE_AR, FUN_ADDR | dev); in r8152_mmd_indirect()
3070 ocp_reg_write(tp, OCP_EEE_DATA, reg); in r8152_mmd_indirect()
3071 ocp_reg_write(tp, OCP_EEE_AR, FUN_DATA | dev); in r8152_mmd_indirect()
3074 static u16 r8152_mmd_read(struct r8152 *tp, u16 dev, u16 reg) in r8152_mmd_read() argument
3078 r8152_mmd_indirect(tp, dev, reg); in r8152_mmd_read()
3079 data = ocp_reg_read(tp, OCP_EEE_DATA); in r8152_mmd_read()
3080 ocp_reg_write(tp, OCP_EEE_AR, 0x0000); in r8152_mmd_read()
3085 static void r8152_mmd_write(struct r8152 *tp, u16 dev, u16 reg, u16 data) in r8152_mmd_write() argument
3087 r8152_mmd_indirect(tp, dev, reg); in r8152_mmd_write()
3088 ocp_reg_write(tp, OCP_EEE_DATA, data); in r8152_mmd_write()
3089 ocp_reg_write(tp, OCP_EEE_AR, 0x0000); in r8152_mmd_write()
3092 static void r8152_eee_en(struct r8152 *tp, bool enable) in r8152_eee_en() argument
3097 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEE_CR); in r8152_eee_en()
3098 config1 = ocp_reg_read(tp, OCP_EEE_CONFIG1) & ~sd_rise_time_mask; in r8152_eee_en()
3099 config2 = ocp_reg_read(tp, OCP_EEE_CONFIG2); in r8152_eee_en()
3100 config3 = ocp_reg_read(tp, OCP_EEE_CONFIG3) & ~fast_snr_mask; in r8152_eee_en()
3117 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEE_CR, ocp_data); in r8152_eee_en()
3118 ocp_reg_write(tp, OCP_EEE_CONFIG1, config1); in r8152_eee_en()
3119 ocp_reg_write(tp, OCP_EEE_CONFIG2, config2); in r8152_eee_en()
3120 ocp_reg_write(tp, OCP_EEE_CONFIG3, config3); in r8152_eee_en()
3123 static void r8152b_enable_eee(struct r8152 *tp) in r8152b_enable_eee() argument
3125 r8152_eee_en(tp, true); in r8152b_enable_eee()
3126 r8152_mmd_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, MDIO_EEE_100TX); in r8152b_enable_eee()
3129 static void r8153_eee_en(struct r8152 *tp, bool enable) in r8153_eee_en() argument
3134 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEE_CR); in r8153_eee_en()
3135 config = ocp_reg_read(tp, OCP_EEE_CFG); in r8153_eee_en()
3145 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEE_CR, ocp_data); in r8153_eee_en()
3146 ocp_reg_write(tp, OCP_EEE_CFG, config); in r8153_eee_en()
3149 static void r8153_enable_eee(struct r8152 *tp) in r8153_enable_eee() argument
3151 r8153_eee_en(tp, true); in r8153_enable_eee()
3152 ocp_reg_write(tp, OCP_EEE_ADV, MDIO_EEE_1000T | MDIO_EEE_100TX); in r8153_enable_eee()
3155 static void r8152b_enable_fc(struct r8152 *tp) in r8152b_enable_fc() argument
3159 anar = r8152_mdio_read(tp, MII_ADVERTISE); in r8152b_enable_fc()
3161 r8152_mdio_write(tp, MII_ADVERTISE, anar); in r8152b_enable_fc()
3164 static void rtl_tally_reset(struct r8152 *tp) in rtl_tally_reset() argument
3168 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_RSTTALLY); in rtl_tally_reset()
3170 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RSTTALLY, ocp_data); in rtl_tally_reset()
3173 static void r8152b_init(struct r8152 *tp) in r8152b_init() argument
3177 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8152b_init()
3180 r8152b_disable_aldps(tp); in r8152b_init()
3182 if (tp->version == RTL_VER_01) { in r8152b_init()
3183 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE); in r8152b_init()
3185 ocp_write_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE, ocp_data); in r8152b_init()
3188 r8152_power_cut_en(tp, false); in r8152b_init()
3190 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR); in r8152b_init()
3192 ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data); in r8152b_init()
3193 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL); in r8152b_init()
3196 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL, ocp_data); in r8152b_init()
3199 ocp_write_word(tp, MCU_TYPE_PLA, PLA_GPHY_INTR_IMR, ocp_data); in r8152b_init()
3201 r8152b_enable_eee(tp); in r8152b_init()
3202 r8152b_enable_aldps(tp); in r8152b_init()
3203 r8152b_enable_fc(tp); in r8152b_init()
3204 rtl_tally_reset(tp); in r8152b_init()
3207 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL); in r8152b_init()
3209 ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data); in r8152b_init()
3212 static void r8153_init(struct r8152 *tp) in r8153_init() argument
3217 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8153_init()
3220 r8153_disable_aldps(tp); in r8153_init()
3221 r8153_u1u2en(tp, false); in r8153_init()
3224 if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_BOOT_CTRL) & in r8153_init()
3231 ocp_data = ocp_reg_read(tp, OCP_PHY_STATUS) & PHY_STAT_MASK; in r8153_init()
3237 r8153_u2p3en(tp, false); in r8153_init()
3239 if (tp->version == RTL_VER_04) { in r8153_init()
3240 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_SSPHYLINK2); in r8153_init()
3243 ocp_write_word(tp, MCU_TYPE_USB, USB_SSPHYLINK2, ocp_data); in r8153_init()
3245 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_USB2PHY); in r8153_init()
3247 ocp_write_byte(tp, MCU_TYPE_USB, USB_USB2PHY, ocp_data); in r8153_init()
3248 } else if (tp->version == RTL_VER_05) { in r8153_init()
3249 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_DMY_REG0); in r8153_init()
3251 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_DMY_REG0, ocp_data); in r8153_init()
3253 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY1); in r8153_init()
3254 if (ocp_read_word(tp, MCU_TYPE_USB, USB_BURST_SIZE) == 0) in r8153_init()
3258 ocp_write_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY1, ocp_data); in r8153_init()
3261 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY2); in r8153_init()
3263 ocp_write_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY2, ocp_data); in r8153_init()
3265 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_WDT11_CTRL); in r8153_init()
3267 ocp_write_word(tp, MCU_TYPE_USB, USB_WDT11_CTRL, ocp_data); in r8153_init()
3269 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE); in r8153_init()
3271 ocp_write_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE, ocp_data); in r8153_init()
3274 if (tp->version == RTL_VER_04 && tp->udev->speed != USB_SPEED_SUPER) in r8153_init()
3278 ocp_write_byte(tp, MCU_TYPE_USB, USB_LPM_CTRL, ocp_data); in r8153_init()
3280 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_AFE_CTRL2); in r8153_init()
3283 ocp_write_word(tp, MCU_TYPE_USB, USB_AFE_CTRL2, ocp_data); in r8153_init()
3285 ocp_write_word(tp, MCU_TYPE_USB, USB_CONNECT_TIMER, 0x0001); in r8153_init()
3287 r8153_power_cut_en(tp, false); in r8153_init()
3288 r8153_u1u2en(tp, true); in r8153_init()
3290 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL, ALDPS_SPDWN_RATIO); in r8153_init()
3291 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL2, EEE_SPDWN_RATIO); in r8153_init()
3292 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, in r8153_init()
3295 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4, in r8153_init()
3300 r8153_enable_eee(tp); in r8153_init()
3301 r8153_enable_aldps(tp); in r8153_init()
3302 r8152b_enable_fc(tp); in r8153_init()
3303 rtl_tally_reset(tp); in r8153_init()
3308 struct r8152 *tp = usb_get_intfdata(intf); in rtl8152_suspend() local
3309 struct net_device *netdev = tp->netdev; in rtl8152_suspend()
3312 mutex_lock(&tp->control); in rtl8152_suspend()
3315 if (netif_running(netdev) && work_busy(&tp->schedule.work)) { in rtl8152_suspend()
3320 set_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_suspend()
3325 if (netif_running(netdev) && test_bit(WORK_ENABLE, &tp->flags)) { in rtl8152_suspend()
3326 clear_bit(WORK_ENABLE, &tp->flags); in rtl8152_suspend()
3327 usb_kill_urb(tp->intr_urb); in rtl8152_suspend()
3328 napi_disable(&tp->napi); in rtl8152_suspend()
3329 if (test_bit(SELECTIVE_SUSPEND, &tp->flags)) { in rtl8152_suspend()
3330 rtl_stop_rx(tp); in rtl8152_suspend()
3331 rtl_runtime_suspend_enable(tp, true); in rtl8152_suspend()
3333 cancel_delayed_work_sync(&tp->schedule); in rtl8152_suspend()
3334 tp->rtl_ops.down(tp); in rtl8152_suspend()
3336 napi_enable(&tp->napi); in rtl8152_suspend()
3339 mutex_unlock(&tp->control); in rtl8152_suspend()
3346 struct r8152 *tp = usb_get_intfdata(intf); in rtl8152_resume() local
3348 mutex_lock(&tp->control); in rtl8152_resume()
3350 if (!test_bit(SELECTIVE_SUSPEND, &tp->flags)) { in rtl8152_resume()
3351 tp->rtl_ops.init(tp); in rtl8152_resume()
3352 netif_device_attach(tp->netdev); in rtl8152_resume()
3355 if (netif_running(tp->netdev) && tp->netdev->flags & IFF_UP) { in rtl8152_resume()
3356 if (test_bit(SELECTIVE_SUSPEND, &tp->flags)) { in rtl8152_resume()
3357 rtl_runtime_suspend_enable(tp, false); in rtl8152_resume()
3358 clear_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_resume()
3359 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_resume()
3360 if (netif_carrier_ok(tp->netdev)) in rtl8152_resume()
3361 rtl_start_rx(tp); in rtl8152_resume()
3363 tp->rtl_ops.up(tp); in rtl8152_resume()
3364 rtl8152_set_speed(tp, AUTONEG_ENABLE, in rtl8152_resume()
3365 tp->mii.supports_gmii ? in rtl8152_resume()
3368 netif_carrier_off(tp->netdev); in rtl8152_resume()
3369 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_resume()
3371 usb_submit_urb(tp->intr_urb, GFP_KERNEL); in rtl8152_resume()
3372 } else if (test_bit(SELECTIVE_SUSPEND, &tp->flags)) { in rtl8152_resume()
3373 if (tp->netdev->flags & IFF_UP) in rtl8152_resume()
3374 rtl_runtime_suspend_enable(tp, false); in rtl8152_resume()
3375 clear_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_resume()
3378 mutex_unlock(&tp->control); in rtl8152_resume()
3385 struct r8152 *tp = netdev_priv(dev); in rtl8152_get_wol() local
3387 if (usb_autopm_get_interface(tp->intf) < 0) in rtl8152_get_wol()
3390 mutex_lock(&tp->control); in rtl8152_get_wol()
3393 wol->wolopts = __rtl_get_wol(tp); in rtl8152_get_wol()
3395 mutex_unlock(&tp->control); in rtl8152_get_wol()
3397 usb_autopm_put_interface(tp->intf); in rtl8152_get_wol()
3402 struct r8152 *tp = netdev_priv(dev); in rtl8152_set_wol() local
3405 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_wol()
3409 mutex_lock(&tp->control); in rtl8152_set_wol()
3411 __rtl_set_wol(tp, wol->wolopts); in rtl8152_set_wol()
3412 tp->saved_wolopts = wol->wolopts & WAKE_ANY; in rtl8152_set_wol()
3414 mutex_unlock(&tp->control); in rtl8152_set_wol()
3416 usb_autopm_put_interface(tp->intf); in rtl8152_set_wol()
3424 struct r8152 *tp = netdev_priv(dev); in rtl8152_get_msglevel() local
3426 return tp->msg_enable; in rtl8152_get_msglevel()
3431 struct r8152 *tp = netdev_priv(dev); in rtl8152_set_msglevel() local
3433 tp->msg_enable = value; in rtl8152_set_msglevel()
3439 struct r8152 *tp = netdev_priv(netdev); in rtl8152_get_drvinfo() local
3443 usb_make_path(tp->udev, info->bus_info, sizeof(info->bus_info)); in rtl8152_get_drvinfo()
3449 struct r8152 *tp = netdev_priv(netdev); in rtl8152_get_settings() local
3452 if (!tp->mii.mdio_read) in rtl8152_get_settings()
3455 ret = usb_autopm_get_interface(tp->intf); in rtl8152_get_settings()
3459 mutex_lock(&tp->control); in rtl8152_get_settings()
3461 ret = mii_ethtool_gset(&tp->mii, cmd); in rtl8152_get_settings()
3463 mutex_unlock(&tp->control); in rtl8152_get_settings()
3465 usb_autopm_put_interface(tp->intf); in rtl8152_get_settings()
3473 struct r8152 *tp = netdev_priv(dev); in rtl8152_set_settings() local
3476 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_settings()
3480 mutex_lock(&tp->control); in rtl8152_set_settings()
3482 ret = rtl8152_set_speed(tp, cmd->autoneg, cmd->speed, cmd->duplex); in rtl8152_set_settings()
3484 mutex_unlock(&tp->control); in rtl8152_set_settings()
3486 usb_autopm_put_interface(tp->intf); in rtl8152_set_settings()
3521 struct r8152 *tp = netdev_priv(dev); in rtl8152_get_ethtool_stats() local
3524 if (usb_autopm_get_interface(tp->intf) < 0) in rtl8152_get_ethtool_stats()
3527 generic_ocp_read(tp, PLA_TALLYCNT, sizeof(tally), &tally, MCU_TYPE_PLA); in rtl8152_get_ethtool_stats()
3529 usb_autopm_put_interface(tp->intf); in rtl8152_get_ethtool_stats()
3555 static int r8152_get_eee(struct r8152 *tp, struct ethtool_eee *eee) in r8152_get_eee() argument
3560 val = r8152_mmd_read(tp, MDIO_MMD_PCS, MDIO_PCS_EEE_ABLE); in r8152_get_eee()
3563 val = r8152_mmd_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV); in r8152_get_eee()
3566 val = r8152_mmd_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_LPABLE); in r8152_get_eee()
3569 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEE_CR); in r8152_get_eee()
3581 static int r8152_set_eee(struct r8152 *tp, struct ethtool_eee *eee) in r8152_set_eee() argument
3585 r8152_eee_en(tp, eee->eee_enabled); in r8152_set_eee()
3590 r8152_mmd_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, val); in r8152_set_eee()
3595 static int r8153_get_eee(struct r8152 *tp, struct ethtool_eee *eee) in r8153_get_eee() argument
3600 val = ocp_reg_read(tp, OCP_EEE_ABLE); in r8153_get_eee()
3603 val = ocp_reg_read(tp, OCP_EEE_ADV); in r8153_get_eee()
3606 val = ocp_reg_read(tp, OCP_EEE_LPABLE); in r8153_get_eee()
3609 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEE_CR); in r8153_get_eee()
3621 static int r8153_set_eee(struct r8152 *tp, struct ethtool_eee *eee) in r8153_set_eee() argument
3625 r8153_eee_en(tp, eee->eee_enabled); in r8153_set_eee()
3630 ocp_reg_write(tp, OCP_EEE_ADV, val); in r8153_set_eee()
3638 struct r8152 *tp = netdev_priv(net); in rtl_ethtool_get_eee() local
3641 ret = usb_autopm_get_interface(tp->intf); in rtl_ethtool_get_eee()
3645 mutex_lock(&tp->control); in rtl_ethtool_get_eee()
3647 ret = tp->rtl_ops.eee_get(tp, edata); in rtl_ethtool_get_eee()
3649 mutex_unlock(&tp->control); in rtl_ethtool_get_eee()
3651 usb_autopm_put_interface(tp->intf); in rtl_ethtool_get_eee()
3660 struct r8152 *tp = netdev_priv(net); in rtl_ethtool_set_eee() local
3663 ret = usb_autopm_get_interface(tp->intf); in rtl_ethtool_set_eee()
3667 mutex_lock(&tp->control); in rtl_ethtool_set_eee()
3669 ret = tp->rtl_ops.eee_set(tp, edata); in rtl_ethtool_set_eee()
3671 ret = mii_nway_restart(&tp->mii); in rtl_ethtool_set_eee()
3673 mutex_unlock(&tp->control); in rtl_ethtool_set_eee()
3675 usb_autopm_put_interface(tp->intf); in rtl_ethtool_set_eee()
3683 struct r8152 *tp = netdev_priv(dev); in rtl8152_nway_reset() local
3686 ret = usb_autopm_get_interface(tp->intf); in rtl8152_nway_reset()
3690 mutex_lock(&tp->control); in rtl8152_nway_reset()
3692 ret = mii_nway_restart(&tp->mii); in rtl8152_nway_reset()
3694 mutex_unlock(&tp->control); in rtl8152_nway_reset()
3696 usb_autopm_put_interface(tp->intf); in rtl8152_nway_reset()
3705 struct r8152 *tp = netdev_priv(netdev); in rtl8152_get_coalesce() local
3707 switch (tp->version) { in rtl8152_get_coalesce()
3715 coalesce->rx_coalesce_usecs = tp->coalesce; in rtl8152_get_coalesce()
3723 struct r8152 *tp = netdev_priv(netdev); in rtl8152_set_coalesce() local
3726 switch (tp->version) { in rtl8152_set_coalesce()
3737 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_coalesce()
3741 mutex_lock(&tp->control); in rtl8152_set_coalesce()
3743 if (tp->coalesce != coalesce->rx_coalesce_usecs) { in rtl8152_set_coalesce()
3744 tp->coalesce = coalesce->rx_coalesce_usecs; in rtl8152_set_coalesce()
3746 if (netif_running(tp->netdev) && netif_carrier_ok(netdev)) in rtl8152_set_coalesce()
3747 r8153_set_rx_early_timeout(tp); in rtl8152_set_coalesce()
3750 mutex_unlock(&tp->control); in rtl8152_set_coalesce()
3752 usb_autopm_put_interface(tp->intf); in rtl8152_set_coalesce()
3778 struct r8152 *tp = netdev_priv(netdev); in rtl8152_ioctl() local
3782 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8152_ioctl()
3785 res = usb_autopm_get_interface(tp->intf); in rtl8152_ioctl()
3795 mutex_lock(&tp->control); in rtl8152_ioctl()
3796 data->val_out = r8152_mdio_read(tp, data->reg_num); in rtl8152_ioctl()
3797 mutex_unlock(&tp->control); in rtl8152_ioctl()
3805 mutex_lock(&tp->control); in rtl8152_ioctl()
3806 r8152_mdio_write(tp, data->reg_num, data->val_in); in rtl8152_ioctl()
3807 mutex_unlock(&tp->control); in rtl8152_ioctl()
3814 usb_autopm_put_interface(tp->intf); in rtl8152_ioctl()
3822 struct r8152 *tp = netdev_priv(dev); in rtl8152_change_mtu() local
3825 switch (tp->version) { in rtl8152_change_mtu()
3836 ret = usb_autopm_get_interface(tp->intf); in rtl8152_change_mtu()
3840 mutex_lock(&tp->control); in rtl8152_change_mtu()
3845 r8153_set_rx_early_size(tp); in rtl8152_change_mtu()
3847 mutex_unlock(&tp->control); in rtl8152_change_mtu()
3849 usb_autopm_put_interface(tp->intf); in rtl8152_change_mtu()
3868 static void r8152b_get_version(struct r8152 *tp) in r8152b_get_version() argument
3873 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR1); in r8152b_get_version()
3878 tp->version = RTL_VER_01; in r8152b_get_version()
3881 tp->version = RTL_VER_02; in r8152b_get_version()
3884 tp->version = RTL_VER_03; in r8152b_get_version()
3885 tp->mii.supports_gmii = 1; in r8152b_get_version()
3888 tp->version = RTL_VER_04; in r8152b_get_version()
3889 tp->mii.supports_gmii = 1; in r8152b_get_version()
3892 tp->version = RTL_VER_05; in r8152b_get_version()
3893 tp->mii.supports_gmii = 1; in r8152b_get_version()
3896 netif_info(tp, probe, tp->netdev, in r8152b_get_version()
3902 static void rtl8152_unload(struct r8152 *tp) in rtl8152_unload() argument
3904 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8152_unload()
3907 if (tp->version != RTL_VER_01) in rtl8152_unload()
3908 r8152_power_cut_en(tp, true); in rtl8152_unload()
3911 static void rtl8153_unload(struct r8152 *tp) in rtl8153_unload() argument
3913 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8153_unload()
3916 r8153_power_cut_en(tp, false); in rtl8153_unload()
3919 static int rtl_ops_init(struct r8152 *tp) in rtl_ops_init() argument
3921 struct rtl_ops *ops = &tp->rtl_ops; in rtl_ops_init()
3924 switch (tp->version) { in rtl_ops_init()
3952 netif_err(tp, probe, tp->netdev, "Unknown Device\n"); in rtl_ops_init()
3963 struct r8152 *tp; in rtl8152_probe() local
3980 tp = netdev_priv(netdev); in rtl8152_probe()
3981 tp->msg_enable = 0x7FFF; in rtl8152_probe()
3983 tp->udev = udev; in rtl8152_probe()
3984 tp->netdev = netdev; in rtl8152_probe()
3985 tp->intf = intf; in rtl8152_probe()
3987 r8152b_get_version(tp); in rtl8152_probe()
3988 ret = rtl_ops_init(tp); in rtl8152_probe()
3992 mutex_init(&tp->control); in rtl8152_probe()
3993 INIT_DELAYED_WORK(&tp->schedule, rtl_work_func_t); in rtl8152_probe()
4013 tp->mii.dev = netdev; in rtl8152_probe()
4014 tp->mii.mdio_read = read_mii_word; in rtl8152_probe()
4015 tp->mii.mdio_write = write_mii_word; in rtl8152_probe()
4016 tp->mii.phy_id_mask = 0x3f; in rtl8152_probe()
4017 tp->mii.reg_num_mask = 0x1f; in rtl8152_probe()
4018 tp->mii.phy_id = R8152_PHY_ID; in rtl8152_probe()
4022 tp->coalesce = COALESCE_SUPER; in rtl8152_probe()
4025 tp->coalesce = COALESCE_HIGH; in rtl8152_probe()
4028 tp->coalesce = COALESCE_SLOW; in rtl8152_probe()
4034 tp->rtl_ops.init(tp); in rtl8152_probe()
4035 set_ethernet_addr(tp); in rtl8152_probe()
4037 usb_set_intfdata(intf, tp); in rtl8152_probe()
4038 netif_napi_add(netdev, &tp->napi, r8152_poll, RTL8152_NAPI_WEIGHT); in rtl8152_probe()
4042 netif_err(tp, probe, netdev, "couldn't register the device\n"); in rtl8152_probe()
4046 tp->saved_wolopts = __rtl_get_wol(tp); in rtl8152_probe()
4047 if (tp->saved_wolopts) in rtl8152_probe()
4052 netif_info(tp, probe, netdev, "%s\n", DRIVER_VERSION); in rtl8152_probe()
4057 netif_napi_del(&tp->napi); in rtl8152_probe()
4066 struct r8152 *tp = usb_get_intfdata(intf); in rtl8152_disconnect() local
4069 if (tp) { in rtl8152_disconnect()
4070 struct usb_device *udev = tp->udev; in rtl8152_disconnect()
4073 set_bit(RTL8152_UNPLUG, &tp->flags); in rtl8152_disconnect()
4075 netif_napi_del(&tp->napi); in rtl8152_disconnect()
4076 unregister_netdev(tp->netdev); in rtl8152_disconnect()
4077 tp->rtl_ops.unload(tp); in rtl8152_disconnect()
4078 free_netdev(tp->netdev); in rtl8152_disconnect()