#include <xen/pci_regs.h>
#include <xen/paging.h>
#include <xen/softirq.h>
+#include <asm/acpi.h>
#include <asm/amd-iommu.h>
#include <asm/hvm/svm/amd-iommu-proto.h>
#include "../ats.h"
}
}
-int __init amd_iov_detect(void)
+int __init acpi_ivrs_init(void)
{
INIT_LIST_HEAD(&amd_iommu_head);
return -ENODEV;
}
+ return 0;
+}
+
+int __init amd_iov_detect(void)
+{
+ if ( !iommu_enable && !iommu_intremap )
+ return 0;
+
iommu_ops = amd_iommu_ops;
if ( amd_iommu_init() != 0 )
#include <acpi/pdc_intel.h>
#include <acpi/acconfig.h>
#include <acpi/actbl.h>
+#include <xen/errno.h>
#define COMPILER_DEPENDENT_INT64 long long
#define COMPILER_DEPENDENT_UINT64 unsigned long long
extern unsigned int pmtmr_width;
int acpi_dmar_init(void);
+int acpi_ivrs_init(void);
+
+static inline int acpi_iommu_init(void)
+{
+ int ret = acpi_dmar_init();
+
+ return ret == -ENODEV ? acpi_ivrs_init() : ret;
+}
+
void acpi_mmcfg_init(void);
/* Incremented whenever we transition through S3. Value is 1 during boot. */