diff options
Diffstat (limited to 'arch/ia64/kernel/acpi.c')
-rw-r--r-- | arch/ia64/kernel/acpi.c | 17 |
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 |