|
@@ -4553,26 +4553,32 @@ static int pci_quirk_enable_intel_spt_pch_acs(struct pci_dev *dev)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static const struct pci_dev_enable_acs {
|
|
|
+static const struct pci_dev_acs_ops {
|
|
|
u16 vendor;
|
|
|
u16 device;
|
|
|
int (*enable_acs)(struct pci_dev *dev);
|
|
|
-} pci_dev_enable_acs[] = {
|
|
|
- { PCI_VENDOR_ID_INTEL, PCI_ANY_ID, pci_quirk_enable_intel_pch_acs },
|
|
|
- { PCI_VENDOR_ID_INTEL, PCI_ANY_ID, pci_quirk_enable_intel_spt_pch_acs },
|
|
|
+ int (*disable_acs_redir)(struct pci_dev *dev);
|
|
|
+} pci_dev_acs_ops[] = {
|
|
|
+ { PCI_VENDOR_ID_INTEL, PCI_ANY_ID,
|
|
|
+ .enable_acs = pci_quirk_enable_intel_pch_acs,
|
|
|
+ },
|
|
|
+ { PCI_VENDOR_ID_INTEL, PCI_ANY_ID,
|
|
|
+ .enable_acs = pci_quirk_enable_intel_spt_pch_acs,
|
|
|
+ },
|
|
|
};
|
|
|
|
|
|
int pci_dev_specific_enable_acs(struct pci_dev *dev)
|
|
|
{
|
|
|
- const struct pci_dev_enable_acs *p;
|
|
|
+ const struct pci_dev_acs_ops *p;
|
|
|
int i, ret;
|
|
|
|
|
|
- for (i = 0; i < ARRAY_SIZE(pci_dev_enable_acs); i++) {
|
|
|
- p = &pci_dev_enable_acs[i];
|
|
|
+ for (i = 0; i < ARRAY_SIZE(pci_dev_acs_ops); i++) {
|
|
|
+ p = &pci_dev_acs_ops[i];
|
|
|
if ((p->vendor == dev->vendor ||
|
|
|
p->vendor == (u16)PCI_ANY_ID) &&
|
|
|
(p->device == dev->device ||
|
|
|
- p->device == (u16)PCI_ANY_ID)) {
|
|
|
+ p->device == (u16)PCI_ANY_ID) &&
|
|
|
+ p->enable_acs) {
|
|
|
ret = p->enable_acs(dev);
|
|
|
if (ret >= 0)
|
|
|
return ret;
|
|
@@ -4582,6 +4588,27 @@ int pci_dev_specific_enable_acs(struct pci_dev *dev)
|
|
|
return -ENOTTY;
|
|
|
}
|
|
|
|
|
|
+int pci_dev_specific_disable_acs_redir(struct pci_dev *dev)
|
|
|
+{
|
|
|
+ const struct pci_dev_acs_ops *p;
|
|
|
+ int i, ret;
|
|
|
+
|
|
|
+ for (i = 0; i < ARRAY_SIZE(pci_dev_acs_ops); i++) {
|
|
|
+ p = &pci_dev_acs_ops[i];
|
|
|
+ if ((p->vendor == dev->vendor ||
|
|
|
+ p->vendor == (u16)PCI_ANY_ID) &&
|
|
|
+ (p->device == dev->device ||
|
|
|
+ p->device == (u16)PCI_ANY_ID) &&
|
|
|
+ p->disable_acs_redir) {
|
|
|
+ ret = p->disable_acs_redir(dev);
|
|
|
+ if (ret >= 0)
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return -ENOTTY;
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* The PCI capabilities list for Intel DH895xCC VFs (device ID 0x0443) with
|
|
|
* QuickAssist Technology (QAT) is prematurely terminated in hardware. The
|