void qlcnic_sriov_cleanup(struct qlcnic_adapter *adapter) { if (qlcnic_sriov_pf_check(adapter)) qlcnic_sriov_pf_cleanup(adapter); if (qlcnic_sriov_vf_check(adapter)) qlcnic_sriov_vf_cleanup(adapter); }
void qlcnic_sriov_cleanup(struct qlcnic_adapter *adapter) { if (!test_bit(__QLCNIC_SRIOV_ENABLE, &adapter->state)) return; qlcnic_sriov_free_vlans(adapter); if (qlcnic_sriov_pf_check(adapter)) qlcnic_sriov_pf_cleanup(adapter); if (qlcnic_sriov_vf_check(adapter)) qlcnic_sriov_vf_cleanup(adapter); }
static int qlcnic_sriov_virtid_fn(struct qlcnic_adapter *adapter, int vf_id) { struct pci_dev *dev = adapter->pdev; int pos; u16 stride, offset; if (qlcnic_sriov_vf_check(adapter)) return 0; pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_SRIOV); pci_read_config_word(dev, pos + PCI_SRIOV_VF_OFFSET, &offset); pci_read_config_word(dev, pos + PCI_SRIOV_VF_STRIDE, &stride); return (dev->devfn + offset + stride * vf_id) & 0xff; }
int qlcnic_sriov_func_to_index(struct qlcnic_adapter *adapter, u8 pci_func) { struct qlcnic_vf_info *vf_info = adapter->ahw->sriov->vf_info; u8 i; if (qlcnic_sriov_vf_check(adapter)) return 0; for (i = 0; i < adapter->ahw->sriov->num_vfs; i++) { if (vf_info[i].pci_func == pci_func) return i; } return -EINVAL; }