diff options
| author | Mengyuan Lou <mengyuanlou@net-swift.com> | 2025-07-04 17:49:16 +0800 |
|---|---|---|
| committer | Jakub Kicinski <kuba@kernel.org> | 2025-07-09 18:39:13 -0700 |
| commit | 4ee8afb44aeeeaa9120007d4c420bf63ac63cbc7 (patch) | |
| tree | e0dbc696a4102138686baba39c36ae3509ddb130 /drivers/net/ethernet/wangxun/libwx | |
| parent | 377d180bd71cd79f7134465d8af598ea764560da (diff) | |
net: txgbevf: add sw init pci info and reset hardware
Add sw init and reset hw for txgbevf virtual functions
which initialize basic parameters, and then register netdev.
Signed-off-by: Mengyuan Lou <mengyuanlou@net-swift.com>
Link: https://patch.msgid.link/20250704094923.652-6-mengyuanlou@net-swift.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'drivers/net/ethernet/wangxun/libwx')
| -rw-r--r-- | drivers/net/ethernet/wangxun/libwx/wx_hw.c | 3 | ||||
| -rw-r--r-- | drivers/net/ethernet/wangxun/libwx/wx_vf_common.c | 32 | ||||
| -rw-r--r-- | drivers/net/ethernet/wangxun/libwx/wx_vf_common.h | 2 |
3 files changed, 36 insertions, 1 deletions
diff --git a/drivers/net/ethernet/wangxun/libwx/wx_hw.c b/drivers/net/ethernet/wangxun/libwx/wx_hw.c index 27bb33788701..6e830436a19b 100644 --- a/drivers/net/ethernet/wangxun/libwx/wx_hw.c +++ b/drivers/net/ethernet/wangxun/libwx/wx_hw.c @@ -2369,7 +2369,8 @@ int wx_sw_init(struct wx *wx) wx->bus.device = PCI_SLOT(pdev->devfn); wx->bus.func = PCI_FUNC(pdev->devfn); - if (wx->oem_svid == PCI_VENDOR_ID_WANGXUN) { + if (wx->oem_svid == PCI_VENDOR_ID_WANGXUN || + pdev->is_virtfn) { wx->subsystem_vendor_id = pdev->subsystem_vendor; wx->subsystem_device_id = pdev->subsystem_device; } else { diff --git a/drivers/net/ethernet/wangxun/libwx/wx_vf_common.c b/drivers/net/ethernet/wangxun/libwx/wx_vf_common.c index 4a3c7d61e5fd..ed5daeec598a 100644 --- a/drivers/net/ethernet/wangxun/libwx/wx_vf_common.c +++ b/drivers/net/ethernet/wangxun/libwx/wx_vf_common.c @@ -43,6 +43,14 @@ EXPORT_SYMBOL(wxvf_resume); void wxvf_remove(struct pci_dev *pdev) { + struct wx *wx = pci_get_drvdata(pdev); + struct net_device *netdev; + + netdev = wx->netdev; + unregister_netdev(netdev); + kfree(wx->vfinfo); + kfree(wx->rss_key); + kfree(wx->mac_table); pci_release_selected_regions(pdev, pci_select_bars(pdev, IORESOURCE_MEM)); pci_disable_device(pdev); @@ -232,3 +240,27 @@ int wx_set_mac_vf(struct net_device *netdev, void *p) return 0; } EXPORT_SYMBOL(wx_set_mac_vf); + +int wxvf_open(struct net_device *netdev) +{ + return 0; +} +EXPORT_SYMBOL(wxvf_open); + +static void wxvf_down(struct wx *wx) +{ + struct net_device *netdev = wx->netdev; + + netif_tx_disable(netdev); + wx_reset_vf(wx); +} + +int wxvf_close(struct net_device *netdev) +{ + struct wx *wx = netdev_priv(netdev); + + wxvf_down(wx); + + return 0; +} +EXPORT_SYMBOL(wxvf_close); diff --git a/drivers/net/ethernet/wangxun/libwx/wx_vf_common.h b/drivers/net/ethernet/wangxun/libwx/wx_vf_common.h index f3b31f33407b..272743a3c878 100644 --- a/drivers/net/ethernet/wangxun/libwx/wx_vf_common.h +++ b/drivers/net/ethernet/wangxun/libwx/wx_vf_common.h @@ -14,5 +14,7 @@ void wx_reset_vf(struct wx *wx); void wx_set_rx_mode_vf(struct net_device *netdev); void wx_configure_vf(struct wx *wx); int wx_set_mac_vf(struct net_device *netdev, void *p); +int wxvf_open(struct net_device *netdev); +int wxvf_close(struct net_device *netdev); #endif /* _WX_VF_COMMON_H_ */ |
