Lines Matching refs:tp

657 int get_registers(struct r8152 *tp, u16 value, u16 index, u16 size, void *data)  in get_registers()  argument
666 ret = usb_control_msg(tp->udev, usb_rcvctrlpipe(tp->udev, 0), in get_registers()
677 int set_registers(struct r8152 *tp, u16 value, u16 index, u16 size, void *data) in set_registers() argument
686 ret = usb_control_msg(tp->udev, usb_sndctrlpipe(tp->udev, 0), in set_registers()
695 static int generic_ocp_read(struct r8152 *tp, u16 index, u16 size, in generic_ocp_read() argument
701 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in generic_ocp_read()
713 ret = get_registers(tp, index, type, limit, data); in generic_ocp_read()
721 ret = get_registers(tp, index, type, size, data); in generic_ocp_read()
733 set_bit(RTL8152_UNPLUG, &tp->flags); in generic_ocp_read()
738 static int generic_ocp_write(struct r8152 *tp, u16 index, u16 byteen, in generic_ocp_write() argument
745 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in generic_ocp_write()
759 ret = set_registers(tp, index, type | byen, 4, data); in generic_ocp_write()
772 ret = set_registers(tp, index, in generic_ocp_write()
782 ret = set_registers(tp, index, in generic_ocp_write()
796 ret = set_registers(tp, index, type | byen, 4, data); in generic_ocp_write()
803 set_bit(RTL8152_UNPLUG, &tp->flags); in generic_ocp_write()
809 int pla_ocp_read(struct r8152 *tp, u16 index, u16 size, void *data) in pla_ocp_read() argument
811 return generic_ocp_read(tp, index, size, data, MCU_TYPE_PLA); in pla_ocp_read()
815 int pla_ocp_write(struct r8152 *tp, u16 index, u16 byteen, u16 size, void *data) in pla_ocp_write() argument
817 return generic_ocp_write(tp, index, byteen, size, data, MCU_TYPE_PLA); in pla_ocp_write()
821 int usb_ocp_read(struct r8152 *tp, u16 index, u16 size, void *data) in usb_ocp_read() argument
823 return generic_ocp_read(tp, index, size, data, MCU_TYPE_USB); in usb_ocp_read()
827 int usb_ocp_write(struct r8152 *tp, u16 index, u16 byteen, u16 size, void *data) in usb_ocp_write() argument
829 return generic_ocp_write(tp, index, byteen, size, data, MCU_TYPE_USB); in usb_ocp_write()
832 static u32 ocp_read_dword(struct r8152 *tp, u16 type, u16 index) in ocp_read_dword() argument
836 generic_ocp_read(tp, index, sizeof(data), &data, type); in ocp_read_dword()
841 static void ocp_write_dword(struct r8152 *tp, u16 type, u16 index, u32 data) in ocp_write_dword() argument
845 generic_ocp_write(tp, index, BYTE_EN_DWORD, sizeof(tmp), &tmp, type); in ocp_write_dword()
848 static u16 ocp_read_word(struct r8152 *tp, u16 type, u16 index) in ocp_read_word() argument
856 generic_ocp_read(tp, index, sizeof(tmp), &tmp, type); in ocp_read_word()
865 static void ocp_write_word(struct r8152 *tp, u16 type, u16 index, u32 data) in ocp_write_word() argument
883 generic_ocp_write(tp, index, byen, sizeof(tmp), &tmp, type); in ocp_write_word()
886 static u8 ocp_read_byte(struct r8152 *tp, u16 type, u16 index) in ocp_read_byte() argument
894 generic_ocp_read(tp, index, sizeof(tmp), &tmp, type); in ocp_read_byte()
903 static void ocp_write_byte(struct r8152 *tp, u16 type, u16 index, u32 data) in ocp_write_byte() argument
921 generic_ocp_write(tp, index, byen, sizeof(tmp), &tmp, type); in ocp_write_byte()
924 static u16 ocp_reg_read(struct r8152 *tp, u16 addr) in ocp_reg_read() argument
929 if (ocp_base != tp->ocp_base) { in ocp_reg_read()
930 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, ocp_base); in ocp_reg_read()
931 tp->ocp_base = ocp_base; in ocp_reg_read()
935 return ocp_read_word(tp, MCU_TYPE_PLA, ocp_index); in ocp_reg_read()
938 static void ocp_reg_write(struct r8152 *tp, u16 addr, u16 data) in ocp_reg_write() argument
943 if (ocp_base != tp->ocp_base) { in ocp_reg_write()
944 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, ocp_base); in ocp_reg_write()
945 tp->ocp_base = ocp_base; in ocp_reg_write()
949 ocp_write_word(tp, MCU_TYPE_PLA, ocp_index, data); in ocp_reg_write()
952 static inline void r8152_mdio_write(struct r8152 *tp, u32 reg_addr, u32 value) in r8152_mdio_write() argument
954 ocp_reg_write(tp, OCP_BASE_MII + reg_addr * 2, value); in r8152_mdio_write()
957 static inline int r8152_mdio_read(struct r8152 *tp, u32 reg_addr) in r8152_mdio_read() argument
959 return ocp_reg_read(tp, OCP_BASE_MII + reg_addr * 2); in r8152_mdio_read()
962 static void sram_write(struct r8152 *tp, u16 addr, u16 data) in sram_write() argument
964 ocp_reg_write(tp, OCP_SRAM_ADDR, addr); in sram_write()
965 ocp_reg_write(tp, OCP_SRAM_DATA, data); in sram_write()
970 struct r8152 *tp = netdev_priv(netdev); in read_mii_word() local
973 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in read_mii_word()
979 ret = r8152_mdio_read(tp, reg); in read_mii_word()
987 struct r8152 *tp = netdev_priv(netdev); in write_mii_word() local
989 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in write_mii_word()
995 r8152_mdio_write(tp, reg, val); in write_mii_word()
999 r8152_submit_rx(struct r8152 *tp, struct rx_agg *agg, gfp_t mem_flags);
1003 struct r8152 *tp = netdev_priv(netdev); in rtl8152_set_mac_address() local
1010 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_mac_address()
1014 mutex_lock(&tp->control); in rtl8152_set_mac_address()
1018 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG); in rtl8152_set_mac_address()
1019 pla_ocp_write(tp, PLA_IDR, BYTE_EN_SIX_BYTES, 8, addr->sa_data); in rtl8152_set_mac_address()
1020 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); in rtl8152_set_mac_address()
1022 mutex_unlock(&tp->control); in rtl8152_set_mac_address()
1024 usb_autopm_put_interface(tp->intf); in rtl8152_set_mac_address()
1029 static int set_ethernet_addr(struct r8152 *tp) in set_ethernet_addr() argument
1031 struct net_device *dev = tp->netdev; in set_ethernet_addr()
1035 if (tp->version == RTL_VER_01) in set_ethernet_addr()
1036 ret = pla_ocp_read(tp, PLA_IDR, 8, sa.sa_data); in set_ethernet_addr()
1038 ret = pla_ocp_read(tp, PLA_BACKUP, 8, sa.sa_data); in set_ethernet_addr()
1041 netif_err(tp, probe, dev, "Get ether addr fail\n"); in set_ethernet_addr()
1043 netif_err(tp, probe, dev, "Invalid ether addr %pM\n", in set_ethernet_addr()
1048 netif_info(tp, probe, dev, "Random ether addr %pM\n", in set_ethernet_addr()
1051 if (tp->version == RTL_VER_01) in set_ethernet_addr()
1065 struct r8152 *tp; in read_bulk_callback() local
1071 tp = agg->context; in read_bulk_callback()
1072 if (!tp) in read_bulk_callback()
1075 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in read_bulk_callback()
1078 if (!test_bit(WORK_ENABLE, &tp->flags)) in read_bulk_callback()
1081 netdev = tp->netdev; in read_bulk_callback()
1088 usb_mark_last_busy(tp->udev); in read_bulk_callback()
1095 spin_lock(&tp->rx_lock); in read_bulk_callback()
1096 list_add_tail(&agg->list, &tp->rx_done); in read_bulk_callback()
1097 spin_unlock(&tp->rx_lock); in read_bulk_callback()
1098 napi_schedule(&tp->napi); in read_bulk_callback()
1101 set_bit(RTL8152_UNPLUG, &tp->flags); in read_bulk_callback()
1102 netif_device_detach(tp->netdev); in read_bulk_callback()
1116 r8152_submit_rx(tp, agg, GFP_ATOMIC); in read_bulk_callback()
1124 struct r8152 *tp; in write_bulk_callback() local
1131 tp = agg->context; in write_bulk_callback()
1132 if (!tp) in write_bulk_callback()
1135 netdev = tp->netdev; in write_bulk_callback()
1146 spin_lock(&tp->tx_lock); in write_bulk_callback()
1147 list_add_tail(&agg->list, &tp->tx_free); in write_bulk_callback()
1148 spin_unlock(&tp->tx_lock); in write_bulk_callback()
1150 usb_autopm_put_interface_async(tp->intf); in write_bulk_callback()
1155 if (!test_bit(WORK_ENABLE, &tp->flags)) in write_bulk_callback()
1158 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in write_bulk_callback()
1161 if (!skb_queue_empty(&tp->tx_queue)) in write_bulk_callback()
1162 napi_schedule(&tp->napi); in write_bulk_callback()
1167 struct r8152 *tp; in intr_callback() local
1172 tp = urb->context; in intr_callback()
1173 if (!tp) in intr_callback()
1176 if (!test_bit(WORK_ENABLE, &tp->flags)) in intr_callback()
1179 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in intr_callback()
1187 netif_device_detach(tp->netdev); in intr_callback()
1190 netif_info(tp, intr, tp->netdev, in intr_callback()
1194 netif_info(tp, intr, tp->netdev, "intr status -EOVERFLOW\n"); in intr_callback()
1198 netif_info(tp, intr, tp->netdev, "intr status %d\n", status); in intr_callback()
1204 if (!netif_carrier_ok(tp->netdev)) { in intr_callback()
1205 set_bit(RTL8152_LINK_CHG, &tp->flags); in intr_callback()
1206 schedule_delayed_work(&tp->schedule, 0); in intr_callback()
1209 if (netif_carrier_ok(tp->netdev)) { in intr_callback()
1210 set_bit(RTL8152_LINK_CHG, &tp->flags); in intr_callback()
1211 schedule_delayed_work(&tp->schedule, 0); in intr_callback()
1218 set_bit(RTL8152_UNPLUG, &tp->flags); in intr_callback()
1219 netif_device_detach(tp->netdev); in intr_callback()
1221 netif_err(tp, intr, tp->netdev, in intr_callback()
1236 static void free_all_mem(struct r8152 *tp) in free_all_mem() argument
1241 usb_free_urb(tp->rx_info[i].urb); in free_all_mem()
1242 tp->rx_info[i].urb = NULL; in free_all_mem()
1244 kfree(tp->rx_info[i].buffer); in free_all_mem()
1245 tp->rx_info[i].buffer = NULL; in free_all_mem()
1246 tp->rx_info[i].head = NULL; in free_all_mem()
1250 usb_free_urb(tp->tx_info[i].urb); in free_all_mem()
1251 tp->tx_info[i].urb = NULL; in free_all_mem()
1253 kfree(tp->tx_info[i].buffer); in free_all_mem()
1254 tp->tx_info[i].buffer = NULL; in free_all_mem()
1255 tp->tx_info[i].head = NULL; in free_all_mem()
1258 usb_free_urb(tp->intr_urb); in free_all_mem()
1259 tp->intr_urb = NULL; in free_all_mem()
1261 kfree(tp->intr_buff); in free_all_mem()
1262 tp->intr_buff = NULL; in free_all_mem()
1265 static int alloc_all_mem(struct r8152 *tp) in alloc_all_mem() argument
1267 struct net_device *netdev = tp->netdev; in alloc_all_mem()
1268 struct usb_interface *intf = tp->intf; in alloc_all_mem()
1277 spin_lock_init(&tp->rx_lock); in alloc_all_mem()
1278 spin_lock_init(&tp->tx_lock); in alloc_all_mem()
1279 INIT_LIST_HEAD(&tp->tx_free); in alloc_all_mem()
1280 skb_queue_head_init(&tp->tx_queue); in alloc_all_mem()
1281 skb_queue_head_init(&tp->rx_queue); in alloc_all_mem()
1302 INIT_LIST_HEAD(&tp->rx_info[i].list); in alloc_all_mem()
1303 tp->rx_info[i].context = tp; in alloc_all_mem()
1304 tp->rx_info[i].urb = urb; in alloc_all_mem()
1305 tp->rx_info[i].buffer = buf; in alloc_all_mem()
1306 tp->rx_info[i].head = rx_agg_align(buf); in alloc_all_mem()
1328 INIT_LIST_HEAD(&tp->tx_info[i].list); in alloc_all_mem()
1329 tp->tx_info[i].context = tp; in alloc_all_mem()
1330 tp->tx_info[i].urb = urb; in alloc_all_mem()
1331 tp->tx_info[i].buffer = buf; in alloc_all_mem()
1332 tp->tx_info[i].head = tx_agg_align(buf); in alloc_all_mem()
1334 list_add_tail(&tp->tx_info[i].list, &tp->tx_free); in alloc_all_mem()
1337 tp->intr_urb = usb_alloc_urb(0, GFP_KERNEL); in alloc_all_mem()
1338 if (!tp->intr_urb) in alloc_all_mem()
1341 tp->intr_buff = kmalloc(INTBUFSIZE, GFP_KERNEL); in alloc_all_mem()
1342 if (!tp->intr_buff) in alloc_all_mem()
1345 tp->intr_interval = (int)ep_intr->desc.bInterval; in alloc_all_mem()
1346 usb_fill_int_urb(tp->intr_urb, tp->udev, usb_rcvintpipe(tp->udev, 3), in alloc_all_mem()
1347 tp->intr_buff, INTBUFSIZE, intr_callback, in alloc_all_mem()
1348 tp, tp->intr_interval); in alloc_all_mem()
1353 free_all_mem(tp); in alloc_all_mem()
1357 static struct tx_agg *r8152_get_tx_agg(struct r8152 *tp) in r8152_get_tx_agg() argument
1362 if (list_empty(&tp->tx_free)) in r8152_get_tx_agg()
1365 spin_lock_irqsave(&tp->tx_lock, flags); in r8152_get_tx_agg()
1366 if (!list_empty(&tp->tx_free)) { in r8152_get_tx_agg()
1369 cursor = tp->tx_free.next; in r8152_get_tx_agg()
1373 spin_unlock_irqrestore(&tp->tx_lock, flags); in r8152_get_tx_agg()
1382 static void r8152_csum_workaround(struct r8152 *tp, struct sk_buff *skb, in r8152_csum_workaround() argument
1386 netdev_features_t features = tp->netdev->features; in r8152_csum_workaround()
1415 stats = &tp->netdev->stats; in r8152_csum_workaround()
1463 static int r8152_tx_csum(struct r8152 *tp, struct tx_desc *desc, in r8152_tx_csum() argument
1476 netif_warn(tp, tx_err, tp->netdev, in r8152_tx_csum()
1507 netif_warn(tp, tx_err, tp->netdev, in r8152_tx_csum()
1547 static int r8152_tx_agg_fill(struct r8152 *tp, struct tx_agg *agg) in r8152_tx_agg_fill() argument
1549 struct sk_buff_head skb_head, *tx_queue = &tp->tx_queue; in r8152_tx_agg_fill()
1585 if (r8152_tx_csum(tp, tx_desc, skb, skb->len, offset)) { in r8152_tx_agg_fill()
1586 r8152_csum_workaround(tp, skb, &skb_head); in r8152_tx_agg_fill()
1596 struct net_device_stats *stats = &tp->netdev->stats; in r8152_tx_agg_fill()
1619 netif_tx_lock(tp->netdev); in r8152_tx_agg_fill()
1621 if (netif_queue_stopped(tp->netdev) && in r8152_tx_agg_fill()
1622 skb_queue_len(&tp->tx_queue) < tp->tx_qlen) in r8152_tx_agg_fill()
1623 netif_wake_queue(tp->netdev); in r8152_tx_agg_fill()
1625 netif_tx_unlock(tp->netdev); in r8152_tx_agg_fill()
1627 ret = usb_autopm_get_interface_async(tp->intf); in r8152_tx_agg_fill()
1631 usb_fill_bulk_urb(agg->urb, tp->udev, usb_sndbulkpipe(tp->udev, 2), in r8152_tx_agg_fill()
1637 usb_autopm_put_interface_async(tp->intf); in r8152_tx_agg_fill()
1643 static u8 r8152_rx_csum(struct r8152 *tp, struct rx_desc *rx_desc) in r8152_rx_csum() argument
1648 if (tp->version == RTL_VER_01) in r8152_rx_csum()
1674 static int rx_bottom(struct r8152 *tp, int budget) in rx_bottom() argument
1680 if (!skb_queue_empty(&tp->rx_queue)) { in rx_bottom()
1682 struct sk_buff *skb = __skb_dequeue(&tp->rx_queue); in rx_bottom()
1683 struct net_device *netdev = tp->netdev; in rx_bottom()
1691 napi_gro_receive(&tp->napi, skb); in rx_bottom()
1698 if (list_empty(&tp->rx_done)) in rx_bottom()
1702 spin_lock_irqsave(&tp->rx_lock, flags); in rx_bottom()
1703 list_splice_init(&tp->rx_done, &rx_queue); in rx_bottom()
1704 spin_unlock_irqrestore(&tp->rx_lock, flags); in rx_bottom()
1725 struct net_device *netdev = tp->netdev; in rx_bottom()
1747 skb->ip_summed = r8152_rx_csum(tp, rx_desc); in rx_bottom()
1753 napi_gro_receive(&tp->napi, skb); in rx_bottom()
1758 __skb_queue_tail(&tp->rx_queue, skb); in rx_bottom()
1770 ret = r8152_submit_rx(tp, agg, GFP_ATOMIC); in rx_bottom()
1778 spin_lock_irqsave(&tp->rx_lock, flags); in rx_bottom()
1779 list_splice_tail(&rx_queue, &tp->rx_done); in rx_bottom()
1780 spin_unlock_irqrestore(&tp->rx_lock, flags); in rx_bottom()
1787 static void tx_bottom(struct r8152 *tp) in tx_bottom() argument
1794 if (skb_queue_empty(&tp->tx_queue)) in tx_bottom()
1797 agg = r8152_get_tx_agg(tp); in tx_bottom()
1801 res = r8152_tx_agg_fill(tp, agg); in tx_bottom()
1803 struct net_device *netdev = tp->netdev; in tx_bottom()
1806 set_bit(RTL8152_UNPLUG, &tp->flags); in tx_bottom()
1812 netif_warn(tp, tx_err, netdev, in tx_bottom()
1816 spin_lock_irqsave(&tp->tx_lock, flags); in tx_bottom()
1817 list_add_tail(&agg->list, &tp->tx_free); in tx_bottom()
1818 spin_unlock_irqrestore(&tp->tx_lock, flags); in tx_bottom()
1824 static void bottom_half(struct r8152 *tp) in bottom_half() argument
1826 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in bottom_half()
1829 if (!test_bit(WORK_ENABLE, &tp->flags)) in bottom_half()
1834 if (!netif_carrier_ok(tp->netdev)) in bottom_half()
1837 clear_bit(SCHEDULE_NAPI, &tp->flags); in bottom_half()
1839 tx_bottom(tp); in bottom_half()
1844 struct r8152 *tp = container_of(napi, struct r8152, napi); in r8152_poll() local
1847 work_done = rx_bottom(tp, budget); in r8152_poll()
1848 bottom_half(tp); in r8152_poll()
1852 if (!list_empty(&tp->rx_done)) in r8152_poll()
1860 int r8152_submit_rx(struct r8152 *tp, struct rx_agg *agg, gfp_t mem_flags) in r8152_submit_rx() argument
1865 if (test_bit(RTL8152_UNPLUG, &tp->flags) || in r8152_submit_rx()
1866 !test_bit(WORK_ENABLE, &tp->flags) || !netif_carrier_ok(tp->netdev)) in r8152_submit_rx()
1869 usb_fill_bulk_urb(agg->urb, tp->udev, usb_rcvbulkpipe(tp->udev, 1), in r8152_submit_rx()
1875 set_bit(RTL8152_UNPLUG, &tp->flags); in r8152_submit_rx()
1876 netif_device_detach(tp->netdev); in r8152_submit_rx()
1882 spin_lock_irqsave(&tp->rx_lock, flags); in r8152_submit_rx()
1883 list_add_tail(&agg->list, &tp->rx_done); in r8152_submit_rx()
1884 spin_unlock_irqrestore(&tp->rx_lock, flags); in r8152_submit_rx()
1886 netif_err(tp, rx_err, tp->netdev, in r8152_submit_rx()
1889 napi_schedule(&tp->napi); in r8152_submit_rx()
1895 static void rtl_drop_queued_tx(struct r8152 *tp) in rtl_drop_queued_tx() argument
1897 struct net_device_stats *stats = &tp->netdev->stats; in rtl_drop_queued_tx()
1898 struct sk_buff_head skb_head, *tx_queue = &tp->tx_queue; in rtl_drop_queued_tx()
1917 struct r8152 *tp = netdev_priv(netdev); in rtl8152_tx_timeout() local
1919 netif_warn(tp, tx_err, netdev, "Tx timeout\n"); in rtl8152_tx_timeout()
1921 usb_queue_reset_device(tp->intf); in rtl8152_tx_timeout()
1926 struct r8152 *tp = netdev_priv(netdev); in rtl8152_set_rx_mode() local
1929 set_bit(RTL8152_SET_RX_MODE, &tp->flags); in rtl8152_set_rx_mode()
1930 schedule_delayed_work(&tp->schedule, 0); in rtl8152_set_rx_mode()
1936 struct r8152 *tp = netdev_priv(netdev); in _rtl8152_set_rx_mode() local
1941 clear_bit(RTL8152_SET_RX_MODE, &tp->flags); in _rtl8152_set_rx_mode()
1943 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in _rtl8152_set_rx_mode()
1949 netif_notice(tp, link, netdev, "Promiscuous mode enabled\n"); in _rtl8152_set_rx_mode()
1975 pla_ocp_write(tp, PLA_MAR, BYTE_EN_DWORD, sizeof(tmp), tmp); in _rtl8152_set_rx_mode()
1976 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in _rtl8152_set_rx_mode()
1999 struct r8152 *tp = netdev_priv(netdev); in rtl8152_start_xmit() local
2003 skb_queue_tail(&tp->tx_queue, skb); in rtl8152_start_xmit()
2005 if (!list_empty(&tp->tx_free)) { in rtl8152_start_xmit()
2006 if (test_bit(SELECTIVE_SUSPEND, &tp->flags)) { in rtl8152_start_xmit()
2007 set_bit(SCHEDULE_NAPI, &tp->flags); in rtl8152_start_xmit()
2008 schedule_delayed_work(&tp->schedule, 0); in rtl8152_start_xmit()
2010 usb_mark_last_busy(tp->udev); in rtl8152_start_xmit()
2011 napi_schedule(&tp->napi); in rtl8152_start_xmit()
2013 } else if (skb_queue_len(&tp->tx_queue) > tp->tx_qlen) { in rtl8152_start_xmit()
2020 static void r8152b_reset_packet_filter(struct r8152 *tp) in r8152b_reset_packet_filter() argument
2024 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_FMC); in r8152b_reset_packet_filter()
2026 ocp_write_word(tp, MCU_TYPE_PLA, PLA_FMC, ocp_data); in r8152b_reset_packet_filter()
2028 ocp_write_word(tp, MCU_TYPE_PLA, PLA_FMC, ocp_data); in r8152b_reset_packet_filter()
2031 static void rtl8152_nic_reset(struct r8152 *tp) in rtl8152_nic_reset() argument
2035 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, CR_RST); in rtl8152_nic_reset()
2038 if (!(ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CR) & CR_RST)) in rtl8152_nic_reset()
2044 static void set_tx_qlen(struct r8152 *tp) in set_tx_qlen() argument
2046 struct net_device *netdev = tp->netdev; in set_tx_qlen()
2048 tp->tx_qlen = agg_buf_sz / (netdev->mtu + VLAN_ETH_HLEN + VLAN_HLEN + in set_tx_qlen()
2052 static inline u8 rtl8152_get_speed(struct r8152 *tp) in rtl8152_get_speed() argument
2054 return ocp_read_byte(tp, MCU_TYPE_PLA, PLA_PHYSTATUS); in rtl8152_get_speed()
2057 static void rtl_set_eee_plus(struct r8152 *tp) in rtl_set_eee_plus() argument
2062 speed = rtl8152_get_speed(tp); in rtl_set_eee_plus()
2064 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEEP_CR); in rtl_set_eee_plus()
2066 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEEP_CR, ocp_data); in rtl_set_eee_plus()
2068 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEEP_CR); in rtl_set_eee_plus()
2070 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEEP_CR, ocp_data); in rtl_set_eee_plus()
2074 static void rxdy_gated_en(struct r8152 *tp, bool enable) in rxdy_gated_en() argument
2078 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MISC_1); in rxdy_gated_en()
2083 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MISC_1, ocp_data); in rxdy_gated_en()
2086 static int rtl_start_rx(struct r8152 *tp) in rtl_start_rx() argument
2090 INIT_LIST_HEAD(&tp->rx_done); in rtl_start_rx()
2092 INIT_LIST_HEAD(&tp->rx_info[i].list); in rtl_start_rx()
2093 ret = r8152_submit_rx(tp, &tp->rx_info[i], GFP_KERNEL); in rtl_start_rx()
2105 struct rx_agg *agg = &tp->rx_info[i++]; in rtl_start_rx()
2112 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_start_rx()
2113 list_splice_tail(&rx_queue, &tp->rx_done); in rtl_start_rx()
2114 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_start_rx()
2120 static int rtl_stop_rx(struct r8152 *tp) in rtl_stop_rx() argument
2125 usb_kill_urb(tp->rx_info[i].urb); in rtl_stop_rx()
2127 while (!skb_queue_empty(&tp->rx_queue)) in rtl_stop_rx()
2128 dev_kfree_skb(__skb_dequeue(&tp->rx_queue)); in rtl_stop_rx()
2133 static int rtl_enable(struct r8152 *tp) in rtl_enable() argument
2137 r8152b_reset_packet_filter(tp); in rtl_enable()
2139 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CR); in rtl_enable()
2141 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, ocp_data); in rtl_enable()
2143 rxdy_gated_en(tp, false); in rtl_enable()
2148 static int rtl8152_enable(struct r8152 *tp) in rtl8152_enable() argument
2150 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8152_enable()
2153 set_tx_qlen(tp); in rtl8152_enable()
2154 rtl_set_eee_plus(tp); in rtl8152_enable()
2156 return rtl_enable(tp); in rtl8152_enable()
2159 static void r8153_set_rx_early_timeout(struct r8152 *tp) in r8153_set_rx_early_timeout() argument
2161 u32 ocp_data = tp->coalesce / 8; in r8153_set_rx_early_timeout()
2163 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_TIMEOUT, ocp_data); in r8153_set_rx_early_timeout()
2166 static void r8153_set_rx_early_size(struct r8152 *tp) in r8153_set_rx_early_size() argument
2168 u32 mtu = tp->netdev->mtu; in r8153_set_rx_early_size()
2171 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_SIZE, ocp_data); in r8153_set_rx_early_size()
2174 static int rtl8153_enable(struct r8152 *tp) in rtl8153_enable() argument
2176 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8153_enable()
2179 usb_disable_lpm(tp->udev); in rtl8153_enable()
2180 set_tx_qlen(tp); in rtl8153_enable()
2181 rtl_set_eee_plus(tp); in rtl8153_enable()
2182 r8153_set_rx_early_timeout(tp); in rtl8153_enable()
2183 r8153_set_rx_early_size(tp); in rtl8153_enable()
2185 return rtl_enable(tp); in rtl8153_enable()
2188 static void rtl_disable(struct r8152 *tp) in rtl_disable() argument
2193 if (test_bit(RTL8152_UNPLUG, &tp->flags)) { in rtl_disable()
2194 rtl_drop_queued_tx(tp); in rtl_disable()
2198 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in rtl_disable()
2200 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in rtl_disable()
2202 rtl_drop_queued_tx(tp); in rtl_disable()
2205 usb_kill_urb(tp->tx_info[i].urb); in rtl_disable()
2207 rxdy_gated_en(tp, true); in rtl_disable()
2210 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in rtl_disable()
2217 if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR0) & TCR0_TX_EMPTY) in rtl_disable()
2222 rtl_stop_rx(tp); in rtl_disable()
2224 rtl8152_nic_reset(tp); in rtl_disable()
2227 static void r8152_power_cut_en(struct r8152 *tp, bool enable) in r8152_power_cut_en() argument
2231 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_UPS_CTRL); in r8152_power_cut_en()
2236 ocp_write_word(tp, MCU_TYPE_USB, USB_UPS_CTRL, ocp_data); in r8152_power_cut_en()
2238 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_PM_CTRL_STATUS); in r8152_power_cut_en()
2240 ocp_write_word(tp, MCU_TYPE_USB, USB_PM_CTRL_STATUS, ocp_data); in r8152_power_cut_en()
2243 static void rtl_rx_vlan_en(struct r8152 *tp, bool enable) in rtl_rx_vlan_en() argument
2247 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CPCR); in rtl_rx_vlan_en()
2252 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CPCR, ocp_data); in rtl_rx_vlan_en()
2259 struct r8152 *tp = netdev_priv(dev); in rtl8152_set_features() local
2262 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_features()
2266 mutex_lock(&tp->control); in rtl8152_set_features()
2270 rtl_rx_vlan_en(tp, true); in rtl8152_set_features()
2272 rtl_rx_vlan_en(tp, false); in rtl8152_set_features()
2275 mutex_unlock(&tp->control); in rtl8152_set_features()
2277 usb_autopm_put_interface(tp->intf); in rtl8152_set_features()
2285 static u32 __rtl_get_wol(struct r8152 *tp) in __rtl_get_wol() argument
2290 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CONFIG5); in __rtl_get_wol()
2294 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34); in __rtl_get_wol()
2298 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG5); in __rtl_get_wol()
2306 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CFG_WOL); in __rtl_get_wol()
2313 static void __rtl_set_wol(struct r8152 *tp, u32 wolopts) in __rtl_set_wol() argument
2317 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG); in __rtl_set_wol()
2319 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34); in __rtl_set_wol()
2323 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG34, ocp_data); in __rtl_set_wol()
2325 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG5); in __rtl_set_wol()
2335 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG5, ocp_data); in __rtl_set_wol()
2337 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); in __rtl_set_wol()
2339 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CFG_WOL); in __rtl_set_wol()
2343 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CFG_WOL, ocp_data); in __rtl_set_wol()
2346 device_set_wakeup_enable(&tp->udev->dev, true); in __rtl_set_wol()
2348 device_set_wakeup_enable(&tp->udev->dev, false); in __rtl_set_wol()
2351 static void r8153_u1u2en(struct r8152 *tp, bool enable) in r8153_u1u2en() argument
2360 usb_ocp_write(tp, USB_TOLERANCE, BYTE_EN_SIX_BYTES, sizeof(u1u2), u1u2); in r8153_u1u2en()
2363 static void r8153_u2p3en(struct r8152 *tp, bool enable) in r8153_u2p3en() argument
2367 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_U2P3_CTRL); in r8153_u2p3en()
2368 if (enable && tp->version != RTL_VER_03 && tp->version != RTL_VER_04) in r8153_u2p3en()
2372 ocp_write_word(tp, MCU_TYPE_USB, USB_U2P3_CTRL, ocp_data); in r8153_u2p3en()
2375 static void r8153_power_cut_en(struct r8152 *tp, bool enable) in r8153_power_cut_en() argument
2379 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_POWER_CUT); in r8153_power_cut_en()
2384 ocp_write_word(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data); in r8153_power_cut_en()
2386 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0); in r8153_power_cut_en()
2388 ocp_write_word(tp, MCU_TYPE_USB, USB_MISC_0, ocp_data); in r8153_power_cut_en()
2391 static bool rtl_can_wakeup(struct r8152 *tp) in rtl_can_wakeup() argument
2393 struct usb_device *udev = tp->udev; in rtl_can_wakeup()
2398 static void rtl_runtime_suspend_enable(struct r8152 *tp, bool enable) in rtl_runtime_suspend_enable() argument
2403 r8153_u1u2en(tp, false); in rtl_runtime_suspend_enable()
2404 r8153_u2p3en(tp, false); in rtl_runtime_suspend_enable()
2406 __rtl_set_wol(tp, WAKE_ANY); in rtl_runtime_suspend_enable()
2408 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG); in rtl_runtime_suspend_enable()
2410 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34); in rtl_runtime_suspend_enable()
2412 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG34, ocp_data); in rtl_runtime_suspend_enable()
2414 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); in rtl_runtime_suspend_enable()
2416 __rtl_set_wol(tp, tp->saved_wolopts); in rtl_runtime_suspend_enable()
2417 r8153_u2p3en(tp, true); in rtl_runtime_suspend_enable()
2418 r8153_u1u2en(tp, true); in rtl_runtime_suspend_enable()
2422 static void rtl_phy_reset(struct r8152 *tp) in rtl_phy_reset() argument
2427 clear_bit(PHY_RESET, &tp->flags); in rtl_phy_reset()
2429 data = r8152_mdio_read(tp, MII_BMCR); in rtl_phy_reset()
2436 r8152_mdio_write(tp, MII_BMCR, data); in rtl_phy_reset()
2440 if ((r8152_mdio_read(tp, MII_BMCR) & BMCR_RESET) == 0) in rtl_phy_reset()
2445 static void r8153_teredo_off(struct r8152 *tp) in r8153_teredo_off() argument
2449 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG); in r8153_teredo_off()
2451 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG, ocp_data); in r8153_teredo_off()
2453 ocp_write_word(tp, MCU_TYPE_PLA, PLA_WDT6_CTRL, WDT6_SET_MODE); in r8153_teredo_off()
2454 ocp_write_word(tp, MCU_TYPE_PLA, PLA_REALWOW_TIMER, 0); in r8153_teredo_off()
2455 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_TEREDO_TIMER, 0); in r8153_teredo_off()
2458 static void r8152b_disable_aldps(struct r8152 *tp) in r8152b_disable_aldps() argument
2460 ocp_reg_write(tp, OCP_ALDPS_CONFIG, ENPDNPS | LINKENA | DIS_SDSAVE); in r8152b_disable_aldps()
2464 static inline void r8152b_enable_aldps(struct r8152 *tp) in r8152b_enable_aldps() argument
2466 ocp_reg_write(tp, OCP_ALDPS_CONFIG, ENPWRSAVE | ENPDNPS | in r8152b_enable_aldps()
2470 static void rtl8152_disable(struct r8152 *tp) in rtl8152_disable() argument
2472 r8152b_disable_aldps(tp); in rtl8152_disable()
2473 rtl_disable(tp); in rtl8152_disable()
2474 r8152b_enable_aldps(tp); in rtl8152_disable()
2477 static void r8152b_hw_phy_cfg(struct r8152 *tp) in r8152b_hw_phy_cfg() argument
2481 data = r8152_mdio_read(tp, MII_BMCR); in r8152b_hw_phy_cfg()
2484 r8152_mdio_write(tp, MII_BMCR, data); in r8152b_hw_phy_cfg()
2487 set_bit(PHY_RESET, &tp->flags); in r8152b_hw_phy_cfg()
2490 static void r8152b_exit_oob(struct r8152 *tp) in r8152b_exit_oob() argument
2495 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in r8152b_exit_oob()
2497 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in r8152b_exit_oob()
2499 rxdy_gated_en(tp, true); in r8152b_exit_oob()
2500 r8153_teredo_off(tp); in r8152b_exit_oob()
2501 r8152b_hw_phy_cfg(tp); in r8152b_exit_oob()
2503 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); in r8152b_exit_oob()
2504 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, 0x00); in r8152b_exit_oob()
2506 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8152b_exit_oob()
2508 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8152b_exit_oob()
2510 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8152b_exit_oob()
2512 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8152b_exit_oob()
2515 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8152b_exit_oob()
2521 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8152b_exit_oob()
2523 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8152b_exit_oob()
2526 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8152b_exit_oob()
2532 rtl8152_nic_reset(tp); in r8152b_exit_oob()
2535 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL0, RXFIFO_THR1_NORMAL); in r8152b_exit_oob()
2537 if (tp->udev->speed == USB_SPEED_FULL || in r8152b_exit_oob()
2538 tp->udev->speed == USB_SPEED_LOW) { in r8152b_exit_oob()
2540 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, in r8152b_exit_oob()
2542 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, in r8152b_exit_oob()
2546 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, in r8152b_exit_oob()
2548 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, in r8152b_exit_oob()
2553 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_TXFIFO_CTRL, TXFIFO_THR_NORMAL); in r8152b_exit_oob()
2555 ocp_write_byte(tp, MCU_TYPE_USB, USB_TX_AGG, TX_AGG_MAX_THRESHOLD); in r8152b_exit_oob()
2556 ocp_write_dword(tp, MCU_TYPE_USB, USB_RX_BUF_TH, RX_THR_HIGH); in r8152b_exit_oob()
2557 ocp_write_dword(tp, MCU_TYPE_USB, USB_TX_DMA, in r8152b_exit_oob()
2560 rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX); in r8152b_exit_oob()
2562 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, RTL8152_RMS); in r8152b_exit_oob()
2564 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR0); in r8152b_exit_oob()
2566 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TCR0, ocp_data); in r8152b_exit_oob()
2569 static void r8152b_enter_oob(struct r8152 *tp) in r8152b_enter_oob() argument
2574 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8152b_enter_oob()
2576 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8152b_enter_oob()
2578 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL0, RXFIFO_THR1_OOB); in r8152b_enter_oob()
2579 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, RXFIFO_THR2_OOB); in r8152b_enter_oob()
2580 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, RXFIFO_THR3_OOB); in r8152b_enter_oob()
2582 rtl_disable(tp); in r8152b_enter_oob()
2585 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8152b_enter_oob()
2591 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8152b_enter_oob()
2593 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8152b_enter_oob()
2596 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8152b_enter_oob()
2602 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, RTL8152_RMS); in r8152b_enter_oob()
2604 rtl_rx_vlan_en(tp, true); in r8152b_enter_oob()
2606 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PAL_BDC_CR); in r8152b_enter_oob()
2608 ocp_write_word(tp, MCU_TYPE_PLA, PAL_BDC_CR, ocp_data); in r8152b_enter_oob()
2610 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8152b_enter_oob()
2612 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8152b_enter_oob()
2614 rxdy_gated_en(tp, false); in r8152b_enter_oob()
2616 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in r8152b_enter_oob()
2618 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in r8152b_enter_oob()
2621 static void r8153_hw_phy_cfg(struct r8152 *tp) in r8153_hw_phy_cfg() argument
2626 if (tp->version == RTL_VER_03 || tp->version == RTL_VER_04 || in r8153_hw_phy_cfg()
2627 tp->version == RTL_VER_05) in r8153_hw_phy_cfg()
2628 ocp_reg_write(tp, OCP_ADC_CFG, CKADSEL_L | ADC_EN | EN_EMI_L); in r8153_hw_phy_cfg()
2630 data = r8152_mdio_read(tp, MII_BMCR); in r8153_hw_phy_cfg()
2633 r8152_mdio_write(tp, MII_BMCR, data); in r8153_hw_phy_cfg()
2636 if (tp->version == RTL_VER_03) { in r8153_hw_phy_cfg()
2637 data = ocp_reg_read(tp, OCP_EEE_CFG); in r8153_hw_phy_cfg()
2639 ocp_reg_write(tp, OCP_EEE_CFG, data); in r8153_hw_phy_cfg()
2642 data = ocp_reg_read(tp, OCP_POWER_CFG); in r8153_hw_phy_cfg()
2644 ocp_reg_write(tp, OCP_POWER_CFG, data); in r8153_hw_phy_cfg()
2646 data = ocp_reg_read(tp, OCP_DOWN_SPEED); in r8153_hw_phy_cfg()
2648 ocp_reg_write(tp, OCP_DOWN_SPEED, data); in r8153_hw_phy_cfg()
2649 data = ocp_reg_read(tp, OCP_POWER_CFG); in r8153_hw_phy_cfg()
2651 ocp_reg_write(tp, OCP_POWER_CFG, data); in r8153_hw_phy_cfg()
2652 sram_write(tp, SRAM_IMPEDANCE, 0x0b13); in r8153_hw_phy_cfg()
2654 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR); in r8153_hw_phy_cfg()
2656 ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data); in r8153_hw_phy_cfg()
2659 sram_write(tp, SRAM_LPF_CFG, 0xf70f); in r8153_hw_phy_cfg()
2662 sram_write(tp, SRAM_10M_AMP1, 0x00af); in r8153_hw_phy_cfg()
2663 sram_write(tp, SRAM_10M_AMP2, 0x0208); in r8153_hw_phy_cfg()
2665 set_bit(PHY_RESET, &tp->flags); in r8153_hw_phy_cfg()
2668 static void r8153_first_init(struct r8152 *tp) in r8153_first_init() argument
2673 rxdy_gated_en(tp, true); in r8153_first_init()
2674 r8153_teredo_off(tp); in r8153_first_init()
2676 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in r8153_first_init()
2678 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in r8153_first_init()
2680 r8153_hw_phy_cfg(tp); in r8153_first_init()
2682 rtl8152_nic_reset(tp); in r8153_first_init()
2684 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8153_first_init()
2686 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8153_first_init()
2688 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8153_first_init()
2690 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8153_first_init()
2693 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8153_first_init()
2699 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8153_first_init()
2701 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8153_first_init()
2704 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8153_first_init()
2710 rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX); in r8153_first_init()
2712 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, RTL8153_RMS); in r8153_first_init()
2713 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_MTPS, MTPS_JUMBO); in r8153_first_init()
2715 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR0); in r8153_first_init()
2717 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TCR0, ocp_data); in r8153_first_init()
2719 rtl8152_nic_reset(tp); in r8153_first_init()
2722 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL0, RXFIFO_THR1_NORMAL); in r8153_first_init()
2723 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, RXFIFO_THR2_NORMAL); in r8153_first_init()
2724 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, RXFIFO_THR3_NORMAL); in r8153_first_init()
2726 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_TXFIFO_CTRL, TXFIFO_THR_NORMAL2); in r8153_first_init()
2729 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL); in r8153_first_init()
2731 ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data); in r8153_first_init()
2734 static void r8153_enter_oob(struct r8152 *tp) in r8153_enter_oob() argument
2739 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8153_enter_oob()
2741 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8153_enter_oob()
2743 rtl_disable(tp); in r8153_enter_oob()
2746 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8153_enter_oob()
2752 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8153_enter_oob()
2754 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8153_enter_oob()
2757 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8153_enter_oob()
2763 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, RTL8153_RMS); in r8153_enter_oob()
2765 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG); in r8153_enter_oob()
2767 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG, ocp_data); in r8153_enter_oob()
2769 rtl_rx_vlan_en(tp, true); in r8153_enter_oob()
2771 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PAL_BDC_CR); in r8153_enter_oob()
2773 ocp_write_word(tp, MCU_TYPE_PLA, PAL_BDC_CR, ocp_data); in r8153_enter_oob()
2775 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8153_enter_oob()
2777 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8153_enter_oob()
2779 rxdy_gated_en(tp, false); in r8153_enter_oob()
2781 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in r8153_enter_oob()
2783 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in r8153_enter_oob()
2786 static void r8153_disable_aldps(struct r8152 *tp) in r8153_disable_aldps() argument
2790 data = ocp_reg_read(tp, OCP_POWER_CFG); in r8153_disable_aldps()
2792 ocp_reg_write(tp, OCP_POWER_CFG, data); in r8153_disable_aldps()
2796 static void r8153_enable_aldps(struct r8152 *tp) in r8153_enable_aldps() argument
2800 data = ocp_reg_read(tp, OCP_POWER_CFG); in r8153_enable_aldps()
2802 ocp_reg_write(tp, OCP_POWER_CFG, data); in r8153_enable_aldps()
2805 static void rtl8153_disable(struct r8152 *tp) in rtl8153_disable() argument
2807 r8153_disable_aldps(tp); in rtl8153_disable()
2808 rtl_disable(tp); in rtl8153_disable()
2809 r8153_enable_aldps(tp); in rtl8153_disable()
2810 usb_enable_lpm(tp->udev); in rtl8153_disable()
2813 static int rtl8152_set_speed(struct r8152 *tp, u8 autoneg, u16 speed, u8 duplex) in rtl8152_set_speed() argument
2818 cancel_delayed_work_sync(&tp->schedule); in rtl8152_set_speed()
2819 anar = r8152_mdio_read(tp, MII_ADVERTISE); in rtl8152_set_speed()
2822 if (tp->mii.supports_gmii) { in rtl8152_set_speed()
2823 gbcr = r8152_mdio_read(tp, MII_CTRL1000); in rtl8152_set_speed()
2836 } else if (speed == SPEED_1000 && tp->mii.supports_gmii) { in rtl8152_set_speed()
2860 } else if (speed == SPEED_1000 && tp->mii.supports_gmii) { in rtl8152_set_speed()
2878 if (test_bit(PHY_RESET, &tp->flags)) in rtl8152_set_speed()
2881 if (tp->mii.supports_gmii) in rtl8152_set_speed()
2882 r8152_mdio_write(tp, MII_CTRL1000, gbcr); in rtl8152_set_speed()
2884 r8152_mdio_write(tp, MII_ADVERTISE, anar); in rtl8152_set_speed()
2885 r8152_mdio_write(tp, MII_BMCR, bmcr); in rtl8152_set_speed()
2887 if (test_bit(PHY_RESET, &tp->flags)) { in rtl8152_set_speed()
2890 clear_bit(PHY_RESET, &tp->flags); in rtl8152_set_speed()
2893 if ((r8152_mdio_read(tp, MII_BMCR) & BMCR_RESET) == 0) in rtl8152_set_speed()
2903 static void rtl8152_up(struct r8152 *tp) in rtl8152_up() argument
2905 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8152_up()
2908 r8152b_disable_aldps(tp); in rtl8152_up()
2909 r8152b_exit_oob(tp); in rtl8152_up()
2910 r8152b_enable_aldps(tp); in rtl8152_up()
2913 static void rtl8152_down(struct r8152 *tp) in rtl8152_down() argument
2915 if (test_bit(RTL8152_UNPLUG, &tp->flags)) { in rtl8152_down()
2916 rtl_drop_queued_tx(tp); in rtl8152_down()
2920 r8152_power_cut_en(tp, false); in rtl8152_down()
2921 r8152b_disable_aldps(tp); in rtl8152_down()
2922 r8152b_enter_oob(tp); in rtl8152_down()
2923 r8152b_enable_aldps(tp); in rtl8152_down()
2926 static void rtl8153_up(struct r8152 *tp) in rtl8153_up() argument
2928 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8153_up()
2931 r8153_u1u2en(tp, false); in rtl8153_up()
2932 r8153_disable_aldps(tp); in rtl8153_up()
2933 r8153_first_init(tp); in rtl8153_up()
2934 r8153_enable_aldps(tp); in rtl8153_up()
2935 r8153_u2p3en(tp, true); in rtl8153_up()
2936 r8153_u1u2en(tp, true); in rtl8153_up()
2937 usb_enable_lpm(tp->udev); in rtl8153_up()
2940 static void rtl8153_down(struct r8152 *tp) in rtl8153_down() argument
2942 if (test_bit(RTL8152_UNPLUG, &tp->flags)) { in rtl8153_down()
2943 rtl_drop_queued_tx(tp); in rtl8153_down()
2947 r8153_u1u2en(tp, false); in rtl8153_down()
2948 r8153_u2p3en(tp, false); in rtl8153_down()
2949 r8153_power_cut_en(tp, false); in rtl8153_down()
2950 r8153_disable_aldps(tp); in rtl8153_down()
2951 r8153_enter_oob(tp); in rtl8153_down()
2952 r8153_enable_aldps(tp); in rtl8153_down()
2955 static bool rtl8152_in_nway(struct r8152 *tp) in rtl8152_in_nway() argument
2959 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, 0x2000); in rtl8152_in_nway()
2960 tp->ocp_base = 0x2000; in rtl8152_in_nway()
2961 ocp_write_byte(tp, MCU_TYPE_PLA, 0xb014, 0x4c); /* phy state */ in rtl8152_in_nway()
2962 nway_state = ocp_read_word(tp, MCU_TYPE_PLA, 0xb01a); in rtl8152_in_nway()
2971 static bool rtl8153_in_nway(struct r8152 *tp) in rtl8153_in_nway() argument
2973 u16 phy_state = ocp_reg_read(tp, OCP_PHY_STATE) & 0xff; in rtl8153_in_nway()
2981 static void set_carrier(struct r8152 *tp) in set_carrier() argument
2983 struct net_device *netdev = tp->netdev; in set_carrier()
2986 clear_bit(RTL8152_LINK_CHG, &tp->flags); in set_carrier()
2987 speed = rtl8152_get_speed(tp); in set_carrier()
2991 tp->rtl_ops.enable(tp); in set_carrier()
2992 set_bit(RTL8152_SET_RX_MODE, &tp->flags); in set_carrier()
2993 napi_disable(&tp->napi); in set_carrier()
2995 rtl_start_rx(tp); in set_carrier()
2996 napi_enable(&tp->napi); in set_carrier()
3001 napi_disable(&tp->napi); in set_carrier()
3002 tp->rtl_ops.disable(tp); in set_carrier()
3003 napi_enable(&tp->napi); in set_carrier()
3010 struct r8152 *tp = container_of(work, struct r8152, schedule.work); in rtl_work_func_t() local
3015 if (test_bit(RTL8152_UNPLUG, &tp->flags) || !netif_running(tp->netdev)) in rtl_work_func_t()
3018 if (usb_autopm_get_interface(tp->intf) < 0) in rtl_work_func_t()
3021 if (!test_bit(WORK_ENABLE, &tp->flags)) in rtl_work_func_t()
3024 if (!mutex_trylock(&tp->control)) { in rtl_work_func_t()
3025 schedule_delayed_work(&tp->schedule, 0); in rtl_work_func_t()
3029 if (test_bit(RTL8152_LINK_CHG, &tp->flags)) in rtl_work_func_t()
3030 set_carrier(tp); in rtl_work_func_t()
3032 if (test_bit(RTL8152_SET_RX_MODE, &tp->flags)) in rtl_work_func_t()
3033 _rtl8152_set_rx_mode(tp->netdev); in rtl_work_func_t()
3036 if (test_bit(SCHEDULE_NAPI, &tp->flags) && in rtl_work_func_t()
3037 netif_carrier_ok(tp->netdev)) { in rtl_work_func_t()
3038 clear_bit(SCHEDULE_NAPI, &tp->flags); in rtl_work_func_t()
3039 napi_schedule(&tp->napi); in rtl_work_func_t()
3042 if (test_bit(PHY_RESET, &tp->flags)) in rtl_work_func_t()
3043 rtl_phy_reset(tp); in rtl_work_func_t()
3045 mutex_unlock(&tp->control); in rtl_work_func_t()
3048 usb_autopm_put_interface(tp->intf); in rtl_work_func_t()
3053 struct r8152 *tp = netdev_priv(netdev); in rtl8152_open() local
3056 res = alloc_all_mem(tp); in rtl8152_open()
3062 res = usb_autopm_get_interface(tp->intf); in rtl8152_open()
3064 free_all_mem(tp); in rtl8152_open()
3068 mutex_lock(&tp->control); in rtl8152_open()
3070 tp->rtl_ops.up(tp); in rtl8152_open()
3072 rtl8152_set_speed(tp, AUTONEG_ENABLE, in rtl8152_open()
3073 tp->mii.supports_gmii ? SPEED_1000 : SPEED_100, in rtl8152_open()
3077 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_open()
3079 res = usb_submit_urb(tp->intr_urb, GFP_KERNEL); in rtl8152_open()
3082 netif_device_detach(tp->netdev); in rtl8152_open()
3083 netif_warn(tp, ifup, netdev, "intr_urb submit failed: %d\n", in rtl8152_open()
3085 free_all_mem(tp); in rtl8152_open()
3087 napi_enable(&tp->napi); in rtl8152_open()
3090 mutex_unlock(&tp->control); in rtl8152_open()
3092 usb_autopm_put_interface(tp->intf); in rtl8152_open()
3100 struct r8152 *tp = netdev_priv(netdev); in rtl8152_close() local
3103 napi_disable(&tp->napi); in rtl8152_close()
3104 clear_bit(WORK_ENABLE, &tp->flags); in rtl8152_close()
3105 usb_kill_urb(tp->intr_urb); in rtl8152_close()
3106 cancel_delayed_work_sync(&tp->schedule); in rtl8152_close()
3109 res = usb_autopm_get_interface(tp->intf); in rtl8152_close()
3110 if (res < 0 || test_bit(RTL8152_UNPLUG, &tp->flags)) { in rtl8152_close()
3111 rtl_drop_queued_tx(tp); in rtl8152_close()
3112 rtl_stop_rx(tp); in rtl8152_close()
3114 mutex_lock(&tp->control); in rtl8152_close()
3116 tp->rtl_ops.down(tp); in rtl8152_close()
3118 mutex_unlock(&tp->control); in rtl8152_close()
3120 usb_autopm_put_interface(tp->intf); in rtl8152_close()
3123 free_all_mem(tp); in rtl8152_close()
3128 static inline void r8152_mmd_indirect(struct r8152 *tp, u16 dev, u16 reg) in r8152_mmd_indirect() argument
3130 ocp_reg_write(tp, OCP_EEE_AR, FUN_ADDR | dev); in r8152_mmd_indirect()
3131 ocp_reg_write(tp, OCP_EEE_DATA, reg); in r8152_mmd_indirect()
3132 ocp_reg_write(tp, OCP_EEE_AR, FUN_DATA | dev); in r8152_mmd_indirect()
3135 static u16 r8152_mmd_read(struct r8152 *tp, u16 dev, u16 reg) in r8152_mmd_read() argument
3139 r8152_mmd_indirect(tp, dev, reg); in r8152_mmd_read()
3140 data = ocp_reg_read(tp, OCP_EEE_DATA); in r8152_mmd_read()
3141 ocp_reg_write(tp, OCP_EEE_AR, 0x0000); in r8152_mmd_read()
3146 static void r8152_mmd_write(struct r8152 *tp, u16 dev, u16 reg, u16 data) in r8152_mmd_write() argument
3148 r8152_mmd_indirect(tp, dev, reg); in r8152_mmd_write()
3149 ocp_reg_write(tp, OCP_EEE_DATA, data); in r8152_mmd_write()
3150 ocp_reg_write(tp, OCP_EEE_AR, 0x0000); in r8152_mmd_write()
3153 static void r8152_eee_en(struct r8152 *tp, bool enable) in r8152_eee_en() argument
3158 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEE_CR); in r8152_eee_en()
3159 config1 = ocp_reg_read(tp, OCP_EEE_CONFIG1) & ~sd_rise_time_mask; in r8152_eee_en()
3160 config2 = ocp_reg_read(tp, OCP_EEE_CONFIG2); in r8152_eee_en()
3161 config3 = ocp_reg_read(tp, OCP_EEE_CONFIG3) & ~fast_snr_mask; in r8152_eee_en()
3178 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEE_CR, ocp_data); in r8152_eee_en()
3179 ocp_reg_write(tp, OCP_EEE_CONFIG1, config1); in r8152_eee_en()
3180 ocp_reg_write(tp, OCP_EEE_CONFIG2, config2); in r8152_eee_en()
3181 ocp_reg_write(tp, OCP_EEE_CONFIG3, config3); in r8152_eee_en()
3184 static void r8152b_enable_eee(struct r8152 *tp) in r8152b_enable_eee() argument
3186 r8152_eee_en(tp, true); in r8152b_enable_eee()
3187 r8152_mmd_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, MDIO_EEE_100TX); in r8152b_enable_eee()
3190 static void r8153_eee_en(struct r8152 *tp, bool enable) in r8153_eee_en() argument
3195 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEE_CR); in r8153_eee_en()
3196 config = ocp_reg_read(tp, OCP_EEE_CFG); in r8153_eee_en()
3206 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEE_CR, ocp_data); in r8153_eee_en()
3207 ocp_reg_write(tp, OCP_EEE_CFG, config); in r8153_eee_en()
3210 static void r8153_enable_eee(struct r8152 *tp) in r8153_enable_eee() argument
3212 r8153_eee_en(tp, true); in r8153_enable_eee()
3213 ocp_reg_write(tp, OCP_EEE_ADV, MDIO_EEE_1000T | MDIO_EEE_100TX); in r8153_enable_eee()
3216 static void r8152b_enable_fc(struct r8152 *tp) in r8152b_enable_fc() argument
3220 anar = r8152_mdio_read(tp, MII_ADVERTISE); in r8152b_enable_fc()
3222 r8152_mdio_write(tp, MII_ADVERTISE, anar); in r8152b_enable_fc()
3225 static void rtl_tally_reset(struct r8152 *tp) in rtl_tally_reset() argument
3229 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_RSTTALLY); in rtl_tally_reset()
3231 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RSTTALLY, ocp_data); in rtl_tally_reset()
3234 static void r8152b_init(struct r8152 *tp) in r8152b_init() argument
3238 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8152b_init()
3241 r8152b_disable_aldps(tp); in r8152b_init()
3243 if (tp->version == RTL_VER_01) { in r8152b_init()
3244 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE); in r8152b_init()
3246 ocp_write_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE, ocp_data); in r8152b_init()
3249 r8152_power_cut_en(tp, false); in r8152b_init()
3251 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR); in r8152b_init()
3253 ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data); in r8152b_init()
3254 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL); in r8152b_init()
3257 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL, ocp_data); in r8152b_init()
3260 ocp_write_word(tp, MCU_TYPE_PLA, PLA_GPHY_INTR_IMR, ocp_data); in r8152b_init()
3262 r8152b_enable_eee(tp); in r8152b_init()
3263 r8152b_enable_aldps(tp); in r8152b_init()
3264 r8152b_enable_fc(tp); in r8152b_init()
3265 rtl_tally_reset(tp); in r8152b_init()
3268 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL); in r8152b_init()
3270 ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data); in r8152b_init()
3273 static void r8153_init(struct r8152 *tp) in r8153_init() argument
3278 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8153_init()
3281 r8153_disable_aldps(tp); in r8153_init()
3282 r8153_u1u2en(tp, false); in r8153_init()
3285 if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_BOOT_CTRL) & in r8153_init()
3292 ocp_data = ocp_reg_read(tp, OCP_PHY_STATUS) & PHY_STAT_MASK; in r8153_init()
3298 usb_disable_lpm(tp->udev); in r8153_init()
3299 r8153_u2p3en(tp, false); in r8153_init()
3301 if (tp->version == RTL_VER_04) { in r8153_init()
3302 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_SSPHYLINK2); in r8153_init()
3305 ocp_write_word(tp, MCU_TYPE_USB, USB_SSPHYLINK2, ocp_data); in r8153_init()
3307 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_USB2PHY); in r8153_init()
3309 ocp_write_byte(tp, MCU_TYPE_USB, USB_USB2PHY, ocp_data); in r8153_init()
3310 } else if (tp->version == RTL_VER_05) { in r8153_init()
3311 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_DMY_REG0); in r8153_init()
3313 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_DMY_REG0, ocp_data); in r8153_init()
3315 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY1); in r8153_init()
3316 if (ocp_read_word(tp, MCU_TYPE_USB, USB_BURST_SIZE) == 0) in r8153_init()
3320 ocp_write_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY1, ocp_data); in r8153_init()
3321 } else if (tp->version == RTL_VER_06) { in r8153_init()
3322 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY1); in r8153_init()
3323 if (ocp_read_word(tp, MCU_TYPE_USB, USB_BURST_SIZE) == 0) in r8153_init()
3327 ocp_write_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY1, ocp_data); in r8153_init()
3330 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY2); in r8153_init()
3332 ocp_write_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY2, ocp_data); in r8153_init()
3334 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_WDT11_CTRL); in r8153_init()
3336 ocp_write_word(tp, MCU_TYPE_USB, USB_WDT11_CTRL, ocp_data); in r8153_init()
3338 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE); in r8153_init()
3340 ocp_write_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE, ocp_data); in r8153_init()
3343 if (tp->version == RTL_VER_04 && tp->udev->speed != USB_SPEED_SUPER) in r8153_init()
3347 ocp_write_byte(tp, MCU_TYPE_USB, USB_LPM_CTRL, ocp_data); in r8153_init()
3349 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_AFE_CTRL2); in r8153_init()
3352 ocp_write_word(tp, MCU_TYPE_USB, USB_AFE_CTRL2, ocp_data); in r8153_init()
3354 ocp_write_word(tp, MCU_TYPE_USB, USB_CONNECT_TIMER, 0x0001); in r8153_init()
3356 r8153_power_cut_en(tp, false); in r8153_init()
3357 r8153_u1u2en(tp, true); in r8153_init()
3359 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL, ALDPS_SPDWN_RATIO); in r8153_init()
3360 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL2, EEE_SPDWN_RATIO); in r8153_init()
3361 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, in r8153_init()
3364 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4, in r8153_init()
3369 r8153_enable_eee(tp); in r8153_init()
3370 r8153_enable_aldps(tp); in r8153_init()
3371 r8152b_enable_fc(tp); in r8153_init()
3372 rtl_tally_reset(tp); in r8153_init()
3373 r8153_u2p3en(tp, true); in r8153_init()
3378 struct r8152 *tp = usb_get_intfdata(intf); in rtl8152_pre_reset() local
3381 if (!tp) in rtl8152_pre_reset()
3384 netdev = tp->netdev; in rtl8152_pre_reset()
3388 napi_disable(&tp->napi); in rtl8152_pre_reset()
3389 clear_bit(WORK_ENABLE, &tp->flags); in rtl8152_pre_reset()
3390 usb_kill_urb(tp->intr_urb); in rtl8152_pre_reset()
3391 cancel_delayed_work_sync(&tp->schedule); in rtl8152_pre_reset()
3394 mutex_lock(&tp->control); in rtl8152_pre_reset()
3395 tp->rtl_ops.disable(tp); in rtl8152_pre_reset()
3396 mutex_unlock(&tp->control); in rtl8152_pre_reset()
3404 struct r8152 *tp = usb_get_intfdata(intf); in rtl8152_post_reset() local
3407 if (!tp) in rtl8152_post_reset()
3410 netdev = tp->netdev; in rtl8152_post_reset()
3414 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_post_reset()
3416 mutex_lock(&tp->control); in rtl8152_post_reset()
3417 tp->rtl_ops.enable(tp); in rtl8152_post_reset()
3419 mutex_unlock(&tp->control); in rtl8152_post_reset()
3423 napi_enable(&tp->napi); in rtl8152_post_reset()
3428 static bool delay_autosuspend(struct r8152 *tp) in delay_autosuspend() argument
3430 bool sw_linking = !!netif_carrier_ok(tp->netdev); in delay_autosuspend()
3431 bool hw_linking = !!(rtl8152_get_speed(tp) & LINK_STATUS); in delay_autosuspend()
3437 if (work_busy(&tp->schedule.work) || sw_linking != hw_linking) in delay_autosuspend()
3443 if (!sw_linking && tp->rtl_ops.in_nway(tp)) in delay_autosuspend()
3451 struct r8152 *tp = usb_get_intfdata(intf); in rtl8152_suspend() local
3452 struct net_device *netdev = tp->netdev; in rtl8152_suspend()
3455 mutex_lock(&tp->control); in rtl8152_suspend()
3458 if (netif_running(netdev) && delay_autosuspend(tp)) { in rtl8152_suspend()
3463 set_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_suspend()
3468 if (netif_running(netdev) && test_bit(WORK_ENABLE, &tp->flags)) { in rtl8152_suspend()
3469 clear_bit(WORK_ENABLE, &tp->flags); in rtl8152_suspend()
3470 usb_kill_urb(tp->intr_urb); in rtl8152_suspend()
3471 napi_disable(&tp->napi); in rtl8152_suspend()
3472 if (test_bit(SELECTIVE_SUSPEND, &tp->flags)) { in rtl8152_suspend()
3473 rtl_stop_rx(tp); in rtl8152_suspend()
3474 rtl_runtime_suspend_enable(tp, true); in rtl8152_suspend()
3476 cancel_delayed_work_sync(&tp->schedule); in rtl8152_suspend()
3477 tp->rtl_ops.down(tp); in rtl8152_suspend()
3479 napi_enable(&tp->napi); in rtl8152_suspend()
3482 mutex_unlock(&tp->control); in rtl8152_suspend()
3489 struct r8152 *tp = usb_get_intfdata(intf); in rtl8152_resume() local
3491 mutex_lock(&tp->control); in rtl8152_resume()
3493 if (!test_bit(SELECTIVE_SUSPEND, &tp->flags)) { in rtl8152_resume()
3494 tp->rtl_ops.init(tp); in rtl8152_resume()
3495 netif_device_attach(tp->netdev); in rtl8152_resume()
3498 if (netif_running(tp->netdev) && tp->netdev->flags & IFF_UP) { in rtl8152_resume()
3499 if (test_bit(SELECTIVE_SUSPEND, &tp->flags)) { in rtl8152_resume()
3500 rtl_runtime_suspend_enable(tp, false); in rtl8152_resume()
3501 clear_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_resume()
3502 napi_disable(&tp->napi); in rtl8152_resume()
3503 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_resume()
3504 if (netif_carrier_ok(tp->netdev)) in rtl8152_resume()
3505 rtl_start_rx(tp); in rtl8152_resume()
3506 napi_enable(&tp->napi); in rtl8152_resume()
3508 tp->rtl_ops.up(tp); in rtl8152_resume()
3509 rtl8152_set_speed(tp, AUTONEG_ENABLE, in rtl8152_resume()
3510 tp->mii.supports_gmii ? in rtl8152_resume()
3513 netif_carrier_off(tp->netdev); in rtl8152_resume()
3514 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_resume()
3516 usb_submit_urb(tp->intr_urb, GFP_KERNEL); in rtl8152_resume()
3517 } else if (test_bit(SELECTIVE_SUSPEND, &tp->flags)) { in rtl8152_resume()
3518 if (tp->netdev->flags & IFF_UP) in rtl8152_resume()
3519 rtl_runtime_suspend_enable(tp, false); in rtl8152_resume()
3520 clear_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_resume()
3523 mutex_unlock(&tp->control); in rtl8152_resume()
3530 struct r8152 *tp = usb_get_intfdata(intf); in rtl8152_reset_resume() local
3532 clear_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_reset_resume()
3538 struct r8152 *tp = netdev_priv(dev); in rtl8152_get_wol() local
3540 if (usb_autopm_get_interface(tp->intf) < 0) in rtl8152_get_wol()
3543 if (!rtl_can_wakeup(tp)) { in rtl8152_get_wol()
3547 mutex_lock(&tp->control); in rtl8152_get_wol()
3549 wol->wolopts = __rtl_get_wol(tp); in rtl8152_get_wol()
3550 mutex_unlock(&tp->control); in rtl8152_get_wol()
3553 usb_autopm_put_interface(tp->intf); in rtl8152_get_wol()
3558 struct r8152 *tp = netdev_priv(dev); in rtl8152_set_wol() local
3561 if (!rtl_can_wakeup(tp)) in rtl8152_set_wol()
3564 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_wol()
3568 mutex_lock(&tp->control); in rtl8152_set_wol()
3570 __rtl_set_wol(tp, wol->wolopts); in rtl8152_set_wol()
3571 tp->saved_wolopts = wol->wolopts & WAKE_ANY; in rtl8152_set_wol()
3573 mutex_unlock(&tp->control); in rtl8152_set_wol()
3575 usb_autopm_put_interface(tp->intf); in rtl8152_set_wol()
3583 struct r8152 *tp = netdev_priv(dev); in rtl8152_get_msglevel() local
3585 return tp->msg_enable; in rtl8152_get_msglevel()
3590 struct r8152 *tp = netdev_priv(dev); in rtl8152_set_msglevel() local
3592 tp->msg_enable = value; in rtl8152_set_msglevel()
3598 struct r8152 *tp = netdev_priv(netdev); in rtl8152_get_drvinfo() local
3602 usb_make_path(tp->udev, info->bus_info, sizeof(info->bus_info)); in rtl8152_get_drvinfo()
3608 struct r8152 *tp = netdev_priv(netdev); in rtl8152_get_settings() local
3611 if (!tp->mii.mdio_read) in rtl8152_get_settings()
3614 ret = usb_autopm_get_interface(tp->intf); in rtl8152_get_settings()
3618 mutex_lock(&tp->control); in rtl8152_get_settings()
3620 ret = mii_ethtool_gset(&tp->mii, cmd); in rtl8152_get_settings()
3622 mutex_unlock(&tp->control); in rtl8152_get_settings()
3624 usb_autopm_put_interface(tp->intf); in rtl8152_get_settings()
3632 struct r8152 *tp = netdev_priv(dev); in rtl8152_set_settings() local
3635 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_settings()
3639 mutex_lock(&tp->control); in rtl8152_set_settings()
3641 ret = rtl8152_set_speed(tp, cmd->autoneg, cmd->speed, cmd->duplex); in rtl8152_set_settings()
3643 mutex_unlock(&tp->control); in rtl8152_set_settings()
3645 usb_autopm_put_interface(tp->intf); in rtl8152_set_settings()
3680 struct r8152 *tp = netdev_priv(dev); in rtl8152_get_ethtool_stats() local
3683 if (usb_autopm_get_interface(tp->intf) < 0) in rtl8152_get_ethtool_stats()
3686 generic_ocp_read(tp, PLA_TALLYCNT, sizeof(tally), &tally, MCU_TYPE_PLA); in rtl8152_get_ethtool_stats()
3688 usb_autopm_put_interface(tp->intf); in rtl8152_get_ethtool_stats()
3714 static int r8152_get_eee(struct r8152 *tp, struct ethtool_eee *eee) in r8152_get_eee() argument
3719 val = r8152_mmd_read(tp, MDIO_MMD_PCS, MDIO_PCS_EEE_ABLE); in r8152_get_eee()
3722 val = r8152_mmd_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV); in r8152_get_eee()
3725 val = r8152_mmd_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_LPABLE); in r8152_get_eee()
3728 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEE_CR); in r8152_get_eee()
3740 static int r8152_set_eee(struct r8152 *tp, struct ethtool_eee *eee) in r8152_set_eee() argument
3744 r8152_eee_en(tp, eee->eee_enabled); in r8152_set_eee()
3749 r8152_mmd_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, val); in r8152_set_eee()
3754 static int r8153_get_eee(struct r8152 *tp, struct ethtool_eee *eee) in r8153_get_eee() argument
3759 val = ocp_reg_read(tp, OCP_EEE_ABLE); in r8153_get_eee()
3762 val = ocp_reg_read(tp, OCP_EEE_ADV); in r8153_get_eee()
3765 val = ocp_reg_read(tp, OCP_EEE_LPABLE); in r8153_get_eee()
3768 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEE_CR); in r8153_get_eee()
3780 static int r8153_set_eee(struct r8152 *tp, struct ethtool_eee *eee) in r8153_set_eee() argument
3784 r8153_eee_en(tp, eee->eee_enabled); in r8153_set_eee()
3789 ocp_reg_write(tp, OCP_EEE_ADV, val); in r8153_set_eee()
3797 struct r8152 *tp = netdev_priv(net); in rtl_ethtool_get_eee() local
3800 ret = usb_autopm_get_interface(tp->intf); in rtl_ethtool_get_eee()
3804 mutex_lock(&tp->control); in rtl_ethtool_get_eee()
3806 ret = tp->rtl_ops.eee_get(tp, edata); in rtl_ethtool_get_eee()
3808 mutex_unlock(&tp->control); in rtl_ethtool_get_eee()
3810 usb_autopm_put_interface(tp->intf); in rtl_ethtool_get_eee()
3819 struct r8152 *tp = netdev_priv(net); in rtl_ethtool_set_eee() local
3822 ret = usb_autopm_get_interface(tp->intf); in rtl_ethtool_set_eee()
3826 mutex_lock(&tp->control); in rtl_ethtool_set_eee()
3828 ret = tp->rtl_ops.eee_set(tp, edata); in rtl_ethtool_set_eee()
3830 ret = mii_nway_restart(&tp->mii); in rtl_ethtool_set_eee()
3832 mutex_unlock(&tp->control); in rtl_ethtool_set_eee()
3834 usb_autopm_put_interface(tp->intf); in rtl_ethtool_set_eee()
3842 struct r8152 *tp = netdev_priv(dev); in rtl8152_nway_reset() local
3845 ret = usb_autopm_get_interface(tp->intf); in rtl8152_nway_reset()
3849 mutex_lock(&tp->control); in rtl8152_nway_reset()
3851 ret = mii_nway_restart(&tp->mii); in rtl8152_nway_reset()
3853 mutex_unlock(&tp->control); in rtl8152_nway_reset()
3855 usb_autopm_put_interface(tp->intf); in rtl8152_nway_reset()
3864 struct r8152 *tp = netdev_priv(netdev); in rtl8152_get_coalesce() local
3866 switch (tp->version) { in rtl8152_get_coalesce()
3874 coalesce->rx_coalesce_usecs = tp->coalesce; in rtl8152_get_coalesce()
3882 struct r8152 *tp = netdev_priv(netdev); in rtl8152_set_coalesce() local
3885 switch (tp->version) { in rtl8152_set_coalesce()
3896 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_coalesce()
3900 mutex_lock(&tp->control); in rtl8152_set_coalesce()
3902 if (tp->coalesce != coalesce->rx_coalesce_usecs) { in rtl8152_set_coalesce()
3903 tp->coalesce = coalesce->rx_coalesce_usecs; in rtl8152_set_coalesce()
3905 if (netif_running(tp->netdev) && netif_carrier_ok(netdev)) in rtl8152_set_coalesce()
3906 r8153_set_rx_early_timeout(tp); in rtl8152_set_coalesce()
3909 mutex_unlock(&tp->control); in rtl8152_set_coalesce()
3911 usb_autopm_put_interface(tp->intf); in rtl8152_set_coalesce()
3937 struct r8152 *tp = netdev_priv(netdev); in rtl8152_ioctl() local
3941 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8152_ioctl()
3944 res = usb_autopm_get_interface(tp->intf); in rtl8152_ioctl()
3954 mutex_lock(&tp->control); in rtl8152_ioctl()
3955 data->val_out = r8152_mdio_read(tp, data->reg_num); in rtl8152_ioctl()
3956 mutex_unlock(&tp->control); in rtl8152_ioctl()
3964 mutex_lock(&tp->control); in rtl8152_ioctl()
3965 r8152_mdio_write(tp, data->reg_num, data->val_in); in rtl8152_ioctl()
3966 mutex_unlock(&tp->control); in rtl8152_ioctl()
3973 usb_autopm_put_interface(tp->intf); in rtl8152_ioctl()
3981 struct r8152 *tp = netdev_priv(dev); in rtl8152_change_mtu() local
3984 switch (tp->version) { in rtl8152_change_mtu()
3995 ret = usb_autopm_get_interface(tp->intf); in rtl8152_change_mtu()
3999 mutex_lock(&tp->control); in rtl8152_change_mtu()
4004 r8153_set_rx_early_size(tp); in rtl8152_change_mtu()
4006 mutex_unlock(&tp->control); in rtl8152_change_mtu()
4008 usb_autopm_put_interface(tp->intf); in rtl8152_change_mtu()
4027 static void r8152b_get_version(struct r8152 *tp) in r8152b_get_version() argument
4032 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR1); in r8152b_get_version()
4037 tp->version = RTL_VER_01; in r8152b_get_version()
4040 tp->version = RTL_VER_02; in r8152b_get_version()
4043 tp->version = RTL_VER_03; in r8152b_get_version()
4044 tp->mii.supports_gmii = 1; in r8152b_get_version()
4047 tp->version = RTL_VER_04; in r8152b_get_version()
4048 tp->mii.supports_gmii = 1; in r8152b_get_version()
4051 tp->version = RTL_VER_05; in r8152b_get_version()
4052 tp->mii.supports_gmii = 1; in r8152b_get_version()
4055 tp->version = RTL_VER_06; in r8152b_get_version()
4056 tp->mii.supports_gmii = 1; in r8152b_get_version()
4059 netif_info(tp, probe, tp->netdev, in r8152b_get_version()
4065 static void rtl8152_unload(struct r8152 *tp) in rtl8152_unload() argument
4067 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8152_unload()
4070 if (tp->version != RTL_VER_01) in rtl8152_unload()
4071 r8152_power_cut_en(tp, true); in rtl8152_unload()
4074 static void rtl8153_unload(struct r8152 *tp) in rtl8153_unload() argument
4076 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8153_unload()
4079 r8153_power_cut_en(tp, false); in rtl8153_unload()
4082 static int rtl_ops_init(struct r8152 *tp) in rtl_ops_init() argument
4084 struct rtl_ops *ops = &tp->rtl_ops; in rtl_ops_init()
4087 switch (tp->version) { in rtl_ops_init()
4118 netif_err(tp, probe, tp->netdev, "Unknown Device\n"); in rtl_ops_init()
4129 struct r8152 *tp; in rtl8152_probe() local
4146 tp = netdev_priv(netdev); in rtl8152_probe()
4147 tp->msg_enable = 0x7FFF; in rtl8152_probe()
4149 tp->udev = udev; in rtl8152_probe()
4150 tp->netdev = netdev; in rtl8152_probe()
4151 tp->intf = intf; in rtl8152_probe()
4153 r8152b_get_version(tp); in rtl8152_probe()
4154 ret = rtl_ops_init(tp); in rtl8152_probe()
4158 mutex_init(&tp->control); in rtl8152_probe()
4159 INIT_DELAYED_WORK(&tp->schedule, rtl_work_func_t); in rtl8152_probe()
4179 tp->mii.dev = netdev; in rtl8152_probe()
4180 tp->mii.mdio_read = read_mii_word; in rtl8152_probe()
4181 tp->mii.mdio_write = write_mii_word; in rtl8152_probe()
4182 tp->mii.phy_id_mask = 0x3f; in rtl8152_probe()
4183 tp->mii.reg_num_mask = 0x1f; in rtl8152_probe()
4184 tp->mii.phy_id = R8152_PHY_ID; in rtl8152_probe()
4188 tp->coalesce = COALESCE_SUPER; in rtl8152_probe()
4191 tp->coalesce = COALESCE_HIGH; in rtl8152_probe()
4194 tp->coalesce = COALESCE_SLOW; in rtl8152_probe()
4200 tp->rtl_ops.init(tp); in rtl8152_probe()
4201 set_ethernet_addr(tp); in rtl8152_probe()
4203 usb_set_intfdata(intf, tp); in rtl8152_probe()
4204 netif_napi_add(netdev, &tp->napi, r8152_poll, RTL8152_NAPI_WEIGHT); in rtl8152_probe()
4208 netif_err(tp, probe, netdev, "couldn't register the device\n"); in rtl8152_probe()
4212 if (!rtl_can_wakeup(tp)) in rtl8152_probe()
4213 __rtl_set_wol(tp, 0); in rtl8152_probe()
4215 tp->saved_wolopts = __rtl_get_wol(tp); in rtl8152_probe()
4216 if (tp->saved_wolopts) in rtl8152_probe()
4221 netif_info(tp, probe, netdev, "%s\n", DRIVER_VERSION); in rtl8152_probe()
4226 netif_napi_del(&tp->napi); in rtl8152_probe()
4235 struct r8152 *tp = usb_get_intfdata(intf); in rtl8152_disconnect() local
4238 if (tp) { in rtl8152_disconnect()
4239 struct usb_device *udev = tp->udev; in rtl8152_disconnect()
4242 set_bit(RTL8152_UNPLUG, &tp->flags); in rtl8152_disconnect()
4244 netif_napi_del(&tp->napi); in rtl8152_disconnect()
4245 unregister_netdev(tp->netdev); in rtl8152_disconnect()
4246 tp->rtl_ops.unload(tp); in rtl8152_disconnect()
4247 free_netdev(tp->netdev); in rtl8152_disconnect()