diff options
author | Ingo Molnar <mingo@elte.hu> | 2008-10-27 07:38:02 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-10-27 07:38:02 -0400 |
commit | 5292ae11babca23c3ff82593630d2d7eebc350a9 (patch) | |
tree | 30a6c8123b35686098f306ea39398b7621f42054 /arch/ia64/kernel/acpi.c | |
parent | b0f209898f1a177bd503d49215b8c6628797a81c (diff) | |
parent | 0173a3265b228da319ceb9c1ec6a5682fd1b2d92 (diff) |
Merge commit 'v2.6.28-rc2' into x86/uv
Diffstat (limited to 'arch/ia64/kernel/acpi.c')
-rw-r--r-- | arch/ia64/kernel/acpi.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/arch/ia64/kernel/acpi.c b/arch/ia64/kernel/acpi.c index 5d1eb7ee2bf6..0635015d0aaa 100644 --- a/arch/ia64/kernel/acpi.c +++ b/arch/ia64/kernel/acpi.c | |||
@@ -52,6 +52,7 @@ | |||
52 | #include <asm/numa.h> | 52 | #include <asm/numa.h> |
53 | #include <asm/sal.h> | 53 | #include <asm/sal.h> |
54 | #include <asm/cyclone.h> | 54 | #include <asm/cyclone.h> |
55 | #include <asm/xen/hypervisor.h> | ||
55 | 56 | ||
56 | #define BAD_MADT_ENTRY(entry, end) ( \ | 57 | #define BAD_MADT_ENTRY(entry, end) ( \ |
57 | (!entry) || (unsigned long)entry + sizeof(*entry) > end || \ | 58 | (!entry) || (unsigned long)entry + sizeof(*entry) > end || \ |
@@ -91,6 +92,9 @@ acpi_get_sysname(void) | |||
91 | struct acpi_table_rsdp *rsdp; | 92 | struct acpi_table_rsdp *rsdp; |
92 | struct acpi_table_xsdt *xsdt; | 93 | struct acpi_table_xsdt *xsdt; |
93 | struct acpi_table_header *hdr; | 94 | struct acpi_table_header *hdr; |
95 | #ifdef CONFIG_DMAR | ||
96 | u64 i, nentries; | ||
97 | #endif | ||
94 | 98 | ||
95 | rsdp_phys = acpi_find_rsdp(); | 99 | rsdp_phys = acpi_find_rsdp(); |
96 | if (!rsdp_phys) { | 100 | if (!rsdp_phys) { |
@@ -121,7 +125,21 @@ acpi_get_sysname(void) | |||
121 | return "uv"; | 125 | return "uv"; |
122 | else | 126 | else |
123 | return "sn2"; | 127 | return "sn2"; |
128 | } else if (xen_pv_domain() && !strcmp(hdr->oem_id, "XEN")) { | ||
129 | return "xen"; | ||
130 | } | ||
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"; | ||
124 | } | 141 | } |
142 | #endif | ||
125 | 143 | ||
126 | return "dig"; | 144 | return "dig"; |
127 | #else | 145 | #else |
@@ -137,6 +155,10 @@ acpi_get_sysname(void) | |||
137 | return "uv"; | 155 | return "uv"; |
138 | # elif defined (CONFIG_IA64_DIG) | 156 | # elif defined (CONFIG_IA64_DIG) |
139 | return "dig"; | 157 | return "dig"; |
158 | # elif defined (CONFIG_IA64_XEN_GUEST) | ||
159 | return "xen"; | ||
160 | # elif defined(CONFIG_IA64_DIG_VTD) | ||
161 | return "dig_vtd"; | ||
140 | # else | 162 | # else |
141 | # error Unknown platform. Fix acpi.c. | 163 | # error Unknown platform. Fix acpi.c. |
142 | # endif | 164 | # endif |