diff options
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_ */ |
