@@ -65,8 +65,6 @@ struct acpi_drhd_unit *ioapic_to_drhd(un
struct acpi_drhd_unit *hpet_to_drhd(unsigned int hpet_id);
struct acpi_rhsa_unit *drhd_to_rhsa(const struct acpi_drhd_unit *drhd);
-int ats_device(const struct pci_dev *, const struct acpi_drhd_unit *);
-
int dev_invalidate_iotlb(struct vtd_iommu *iommu, u16 did,
u64 addr, unsigned int size_order, u64 type);
@@ -1455,6 +1455,38 @@ static void __hwdom_init cf_check intel_
}
}
+static int ats_device(const struct pci_dev *pdev,
+ const struct acpi_drhd_unit *drhd)
+{
+ unsigned int pos, expfl = 0;
+ const struct acpi_satc_unit *satc;
+
+ if ( !opt_ats || !iommu_qinval )
+ return 0;
+
+ if ( !ecap_queued_inval(drhd->iommu->ecap) ||
+ !ecap_dev_iotlb(drhd->iommu->ecap) )
+ return 0;
+
+ pos = pci_find_cap_offset(pdev->sbdf, PCI_CAP_ID_EXP);
+ if ( pos )
+ expfl = pci_conf_read16(pdev->sbdf, pos + PCI_EXP_FLAGS);
+
+ if ( MASK_EXTR(expfl, PCI_EXP_FLAGS_TYPE) != PCI_EXP_TYPE_RC_END &&
+ !acpi_find_matched_atsr_unit(pdev) )
+ return 0;
+
+ satc = acpi_find_matched_satc_unit(pdev);
+ if ( opt_ats < 0 && (!satc || !satc->atc_required) )
+ return 0;
+
+ pos = pci_find_ext_capability(pdev->sbdf, PCI_EXT_CAP_ID_ATS);
+ if ( pos )
+ drhd->iommu->flush_dev_iotlb = true;
+
+ return pos;
+}
+
/*
* This function returns
* - a negative errno value upon error,
@@ -28,37 +28,6 @@
#include "../extern.h"
#include "../../ats.h"
-int ats_device(const struct pci_dev *pdev, const struct acpi_drhd_unit *drhd)
-{
- unsigned int pos, expfl = 0;
- const struct acpi_satc_unit *satc;
-
- if ( !opt_ats || !iommu_qinval )
- return 0;
-
- if ( !ecap_queued_inval(drhd->iommu->ecap) ||
- !ecap_dev_iotlb(drhd->iommu->ecap) )
- return 0;
-
- pos = pci_find_cap_offset(pdev->sbdf, PCI_CAP_ID_EXP);
- if ( pos )
- expfl = pci_conf_read16(pdev->sbdf, pos + PCI_EXP_FLAGS);
-
- if ( MASK_EXTR(expfl, PCI_EXP_FLAGS_TYPE) != PCI_EXP_TYPE_RC_END &&
- !acpi_find_matched_atsr_unit(pdev) )
- return 0;
-
- satc = acpi_find_matched_satc_unit(pdev);
- if ( opt_ats < 0 && (!satc || !satc->atc_required) )
- return 0;
-
- pos = pci_find_ext_capability(pdev->sbdf, PCI_EXT_CAP_ID_ATS);
- if ( pos )
- drhd->iommu->flush_dev_iotlb = true;
-
- return pos;
-}
-
static bool device_in_domain(const struct vtd_iommu *iommu,
const struct pci_dev *pdev, uint16_t did)
{