Lines Matching full:nvdev

90 	struct netvsc_device *nvdev;  in netvsc_set_rx_mode()  local
99 nvdev = rcu_dereference(ndev_ctx->nvdev); in netvsc_set_rx_mode()
100 if (nvdev) in netvsc_set_rx_mode()
101 rndis_filter_update(nvdev); in netvsc_set_rx_mode()
118 struct netvsc_device *nvdev = rtnl_dereference(ndev_ctx->nvdev); in netvsc_open() local
125 ret = rndis_filter_open(nvdev); in netvsc_open()
131 rdev = nvdev->extension; in netvsc_open()
134 netvsc_tx_enable(nvdev, net); in netvsc_open()
151 static int netvsc_wait_until_empty(struct netvsc_device *nvdev) in netvsc_wait_until_empty() argument
160 for (i = 0; i < nvdev->num_chn; i++) { in netvsc_wait_until_empty()
162 = nvdev->chan_table[i].channel; in netvsc_wait_until_empty()
168 napi_synchronize(&nvdev->chan_table[i].napi); in netvsc_wait_until_empty()
205 struct netvsc_device *nvdev = rtnl_dereference(net_device_ctx->nvdev); in netvsc_close() local
208 netvsc_tx_disable(nvdev, net); in netvsc_close()
211 if (!nvdev) in netvsc_close()
214 ret = rndis_filter_close(nvdev); in netvsc_close()
220 ret = netvsc_wait_until_empty(nvdev); in netvsc_close()
917 struct netvsc_device *nvdev = rtnl_dereference(net_device_ctx->nvdev); in netvsc_get_channels() local
919 if (nvdev) { in netvsc_get_channels()
920 channel->max_combined = nvdev->max_chn; in netvsc_get_channels()
921 channel->combined_count = nvdev->num_chn; in netvsc_get_channels()
929 struct netvsc_device_info *netvsc_devinfo_get(struct netvsc_device *nvdev) in netvsc_devinfo_get() argument
939 if (nvdev) { in netvsc_devinfo_get()
942 dev_info->num_chn = nvdev->num_chn; in netvsc_devinfo_get()
943 dev_info->send_sections = nvdev->send_section_cnt; in netvsc_devinfo_get()
944 dev_info->send_section_size = nvdev->send_section_size; in netvsc_devinfo_get()
945 dev_info->recv_sections = nvdev->recv_section_cnt; in netvsc_devinfo_get()
946 dev_info->recv_section_size = nvdev->recv_section_size; in netvsc_devinfo_get()
948 memcpy(dev_info->rss_key, nvdev->extension->rss_key, in netvsc_devinfo_get()
951 prog = netvsc_xdp_get(nvdev); in netvsc_devinfo_get()
980 struct netvsc_device *nvdev) in netvsc_detach() argument
987 if (cancel_work_sync(&nvdev->subchan_work)) in netvsc_detach()
988 nvdev->num_chn = 1; in netvsc_detach()
990 netvsc_xdp_set(ndev, NULL, NULL, nvdev); in netvsc_detach()
994 netvsc_tx_disable(nvdev, ndev); in netvsc_detach()
996 ret = rndis_filter_close(nvdev); in netvsc_detach()
1003 ret = netvsc_wait_until_empty(nvdev); in netvsc_detach()
1013 rndis_filter_device_remove(hdev, nvdev); in netvsc_detach()
1023 struct netvsc_device *nvdev; in netvsc_attach() local
1028 nvdev = rndis_filter_device_add(hdev, dev_info); in netvsc_attach()
1029 if (IS_ERR(nvdev)) in netvsc_attach()
1030 return PTR_ERR(nvdev); in netvsc_attach()
1032 if (nvdev->num_chn > 1) { in netvsc_attach()
1033 ret = rndis_set_subchannel(ndev, nvdev, dev_info); in netvsc_attach()
1037 nvdev->max_chn = 1; in netvsc_attach()
1038 nvdev->num_chn = 1; in netvsc_attach()
1045 ret = netvsc_xdp_set(ndev, prog, NULL, nvdev); in netvsc_attach()
1053 nvdev->tx_disable = false; in netvsc_attach()
1060 ret = rndis_filter_open(nvdev); in netvsc_attach()
1064 rdev = nvdev->extension; in netvsc_attach()
1075 rndis_filter_device_remove(hdev, nvdev); in netvsc_attach()
1084 struct netvsc_device *nvdev = rtnl_dereference(net_device_ctx->nvdev); in netvsc_set_channels() local
1094 if (!nvdev || nvdev->destroy) in netvsc_set_channels()
1097 if (nvdev->nvsp_version < NVSP_PROTOCOL_VERSION_5) in netvsc_set_channels()
1100 if (count > nvdev->max_chn) in netvsc_set_channels()
1103 orig = nvdev->num_chn; in netvsc_set_channels()
1105 device_info = netvsc_devinfo_get(nvdev); in netvsc_set_channels()
1112 ret = netvsc_detach(net, nvdev); in netvsc_set_channels()
1180 struct netvsc_device *nvdev = rtnl_dereference(ndevctx->nvdev); in netvsc_change_mtu() local
1185 if (!nvdev || nvdev->destroy) in netvsc_change_mtu()
1188 device_info = netvsc_devinfo_get(nvdev); in netvsc_change_mtu()
1200 ret = netvsc_detach(ndev, nvdev); in netvsc_change_mtu()
1258 struct netvsc_device *nvdev = rcu_dereference_rtnl(ndev_ctx->nvdev); in netvsc_get_pcpu_stats() local
1282 for (i = 0; i < nvdev->num_chn; i++) { in netvsc_get_pcpu_stats()
1283 const struct netvsc_channel *nvchan = &nvdev->chan_table[i]; in netvsc_get_pcpu_stats()
1317 struct netvsc_device *nvdev; in netvsc_get_stats64() local
1323 nvdev = rcu_dereference(ndev_ctx->nvdev); in netvsc_get_stats64()
1324 if (!nvdev) in netvsc_get_stats64()
1336 for (i = 0; i < nvdev->num_chn; i++) { in netvsc_get_stats64()
1337 const struct netvsc_channel *nvchan = &nvdev->chan_table[i]; in netvsc_get_stats64()
1373 struct netvsc_device *nvdev = rtnl_dereference(ndc->nvdev); in netvsc_set_mac_addr() local
1381 if (!nvdev) in netvsc_set_mac_addr()
1390 err = rndis_filter_set_device_mac(nvdev, addr->__data); in netvsc_set_mac_addr()
1454 struct netvsc_device *nvdev = rtnl_dereference(ndc->nvdev); in netvsc_get_sset_count() local
1456 if (!nvdev) in netvsc_get_sset_count()
1463 + NETVSC_QUEUE_STATS_LEN(nvdev) in netvsc_get_sset_count()
1474 struct netvsc_device *nvdev = rtnl_dereference(ndc->nvdev); in netvsc_get_ethtool_stats() local
1488 if (!nvdev) in netvsc_get_ethtool_stats()
1498 for (j = 0; j < nvdev->num_chn; j++) { in netvsc_get_ethtool_stats()
1499 tx_stats = &nvdev->chan_table[j].tx_stats; in netvsc_get_ethtool_stats()
1511 rx_stats = &nvdev->chan_table[j].rx_stats; in netvsc_get_ethtool_stats()
1547 struct netvsc_device *nvdev = rtnl_dereference(ndc->nvdev); in netvsc_get_strings() local
1551 if (!nvdev) in netvsc_get_strings()
1562 for (i = 0; i < nvdev->num_chn; i++) { in netvsc_get_strings()
1632 struct netvsc_device *nvdev = rtnl_dereference(ndc->nvdev); in netvsc_get_rxnfc() local
1634 if (!nvdev) in netvsc_get_rxnfc()
1639 info->data = nvdev->num_chn; in netvsc_get_rxnfc()
1722 struct netvsc_device *ndev = rtnl_dereference(ndc->nvdev); in netvsc_get_rxfh()
1748 struct netvsc_device *ndev = rtnl_dereference(ndc->nvdev); in netvsc_set_rxfh()
1783 static void __netvsc_get_ringparam(struct netvsc_device *nvdev, in __netvsc_get_ringparam() argument
1788 ring->rx_pending = nvdev->recv_section_cnt; in __netvsc_get_ringparam()
1789 ring->tx_pending = nvdev->send_section_cnt; in __netvsc_get_ringparam()
1791 if (nvdev->nvsp_version <= NVSP_PROTOCOL_VERSION_2) in __netvsc_get_ringparam()
1796 ring->rx_max_pending = max_buf_size / nvdev->recv_section_size; in __netvsc_get_ringparam()
1798 / nvdev->send_section_size; in __netvsc_get_ringparam()
1807 struct netvsc_device *nvdev = rtnl_dereference(ndevctx->nvdev); in netvsc_get_ringparam() local
1809 if (!nvdev) in netvsc_get_ringparam()
1812 __netvsc_get_ringparam(nvdev, ring); in netvsc_get_ringparam()
1821 struct netvsc_device *nvdev = rtnl_dereference(ndevctx->nvdev); in netvsc_set_ringparam() local
1827 if (!nvdev || nvdev->destroy) in netvsc_set_ringparam()
1831 __netvsc_get_ringparam(nvdev, &orig); in netvsc_set_ringparam()
1842 device_info = netvsc_devinfo_get(nvdev); in netvsc_set_ringparam()
1850 ret = netvsc_detach(ndev, nvdev); in netvsc_set_ringparam()
1872 struct netvsc_device *nvdev = rtnl_dereference(ndevctx->nvdev); in netvsc_fix_features() local
1874 if (!nvdev || nvdev->destroy) in netvsc_fix_features()
1877 if ((features & NETIF_F_LRO) && netvsc_xdp_get(nvdev)) { in netvsc_fix_features()
1890 struct netvsc_device *nvdev = rtnl_dereference(ndevctx->nvdev); in netvsc_set_features() local
1895 if (!nvdev || nvdev->destroy) in netvsc_set_features()
1911 ret = rndis_filter_set_offload_params(ndev, nvdev, &offloads); in netvsc_set_features()
2025 net_device = rtnl_dereference(ndev_ctx->nvdev); in netvsc_link_change()
2117 if (!rtnl_dereference(net_device_ctx->nvdev)) in get_netvsc_byref()
2336 netvsc_dev = rtnl_dereference(net_device_ctx->nvdev); in netvsc_register_vf()
2404 netvsc_dev = rtnl_dereference(net_device_ctx->nvdev); in netvsc_vf_changed()
2498 struct netvsc_device *nvdev; in netvsc_probe() local
2554 /* We must get rtnl lock before scheduling nvdev->subchan_work, in netvsc_probe()
2569 nvdev = rndis_filter_device_add(dev, device_info); in netvsc_probe()
2570 if (IS_ERR(nvdev)) { in netvsc_probe()
2571 ret = PTR_ERR(nvdev); in netvsc_probe()
2578 if (nvdev->num_chn > 1) in netvsc_probe()
2579 schedule_work(&nvdev->subchan_work); in netvsc_probe()
2594 if (nvdev->nvsp_version >= NVSP_PROTOCOL_VERSION_2) in netvsc_probe()
2599 nvdev->tx_disable = false; in netvsc_probe()
2640 rndis_filter_device_remove(dev, nvdev); in netvsc_probe()
2657 struct netvsc_device *nvdev; in netvsc_remove() local
2672 nvdev = rtnl_dereference(ndev_ctx->nvdev); in netvsc_remove()
2673 if (nvdev) { in netvsc_remove()
2674 cancel_work_sync(&nvdev->subchan_work); in netvsc_remove()
2675 netvsc_xdp_set(net, NULL, NULL, nvdev); in netvsc_remove()
2686 if (nvdev) in netvsc_remove()
2687 rndis_filter_device_remove(dev, nvdev); in netvsc_remove()
2703 struct netvsc_device *nvdev; in netvsc_suspend() local
2715 nvdev = rtnl_dereference(ndev_ctx->nvdev); in netvsc_suspend()
2716 if (nvdev == NULL) { in netvsc_suspend()
2722 ndev_ctx->saved_netvsc_dev_info = netvsc_devinfo_get(nvdev); in netvsc_suspend()
2727 ret = netvsc_detach(net, nvdev); in netvsc_suspend()