aboutsummaryrefslogtreecommitdiffstats
path: root/arch/ia64/kernel/acpi.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/ia64/kernel/acpi.c')
-rw-r--r--arch/ia64/kernel/acpi.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/arch/ia64/kernel/acpi.c b/arch/ia64/kernel/acpi.c
index 00936491933e..0635015d0aaa 100644
--- a/arch/ia64/kernel/acpi.c
+++ b/arch/ia64/kernel/acpi.c
@@ -92,6 +92,9 @@ acpi_get_sysname(void)
92 struct acpi_table_rsdp *rsdp; 92 struct acpi_table_rsdp *rsdp;
93 struct acpi_table_xsdt *xsdt; 93 struct acpi_table_xsdt *xsdt;
94 struct acpi_table_header *hdr; 94 struct acpi_table_header *hdr;
95#ifdef CONFIG_DMAR
96 u64 i, nentries;
97#endif
95 98
96 rsdp_phys = acpi_find_rsdp(); 99 rsdp_phys = acpi_find_rsdp();
97 if (!rsdp_phys) { 100 if (!rsdp_phys) {
@@ -126,6 +129,18 @@ acpi_get_sysname(void)
126 return "xen"; 129 return "xen";
127 } 130 }
128 131
132#ifdef CONFIG_DMAR
133 /* Look for Intel IOMMU */
134 nentries = (hdr->length - sizeof(*hdr)) /
135 sizeof(xsdt->table_offset_entry[0]);
136 for (i = 0; i < nentries; i++) {
137 hdr = __va(xsdt->table_offset_entry[i]);
138 if (strncmp(hdr->signature, ACPI_SIG_DMAR,
139 sizeof(ACPI_SIG_DMAR) - 1) == 0)
140 return "dig_vtd";
141 }
142#endif
143
129 return "dig"; 144 return "dig";
130#else 145#else
131# if defined (CONFIG_IA64_HP_SIM) 146# if defined (CONFIG_IA64_HP_SIM)
@@ -142,6 +157,8 @@ acpi_get_sysname(void)
142 return "dig"; 157 return "dig";
143# elif defined (CONFIG_IA64_XEN_GUEST) 158# elif defined (CONFIG_IA64_XEN_GUEST)
144 return "xen"; 159 return "xen";
160# elif defined(CONFIG_IA64_DIG_VTD)
161 return "dig_vtd";
145# else 162# else
146# error Unknown platform. Fix acpi.c. 163# error Unknown platform. Fix acpi.c.
147# endif 164# endif