diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/i386/defconfig | 3 | ||||
-rw-r--r-- | arch/i386/kernel/acpi/boot.c | 235 | ||||
-rw-r--r-- | arch/i386/kernel/acpi/earlyquirk.c | 4 | ||||
-rw-r--r-- | arch/i386/kernel/cpu/cpufreq/longhaul.c | 15 | ||||
-rw-r--r-- | arch/i386/kernel/mpparse.c | 4 | ||||
-rw-r--r-- | arch/i386/kernel/srat.c | 84 | ||||
-rw-r--r-- | arch/i386/mach-es7000/es7000.h | 9 | ||||
-rw-r--r-- | arch/i386/mach-es7000/es7000plat.c | 53 | ||||
-rw-r--r-- | arch/i386/pci/mmconfig.c | 24 | ||||
-rw-r--r-- | arch/ia64/kernel/acpi.c | 200 | ||||
-rw-r--r-- | arch/ia64/sn/kernel/io_acpi_init.c | 314 | ||||
-rw-r--r-- | arch/ia64/sn/kernel/io_common.c | 90 | ||||
-rw-r--r-- | arch/ia64/sn/kernel/io_init.c | 54 | ||||
-rw-r--r-- | arch/ia64/sn/kernel/iomv.c | 5 | ||||
-rw-r--r-- | arch/ia64/sn/pci/pcibr/pcibr_provider.c | 6 | ||||
-rw-r--r-- | arch/x86_64/kernel/early-quirks.c | 4 | ||||
-rw-r--r-- | arch/x86_64/kernel/genapic.c | 4 | ||||
-rw-r--r-- | arch/x86_64/kernel/mpparse.c | 2 | ||||
-rw-r--r-- | arch/x86_64/kernel/time.c | 18 | ||||
-rw-r--r-- | arch/x86_64/mm/srat.c | 48 | ||||
-rw-r--r-- | arch/x86_64/pci/mmconfig.c | 29 |
21 files changed, 689 insertions, 516 deletions
diff --git a/arch/i386/defconfig b/arch/i386/defconfig index 5d80edfc61b7..bb0c376b62b3 100644 --- a/arch/i386/defconfig +++ b/arch/i386/defconfig | |||
@@ -466,7 +466,8 @@ CONFIG_FW_LOADER=y | |||
466 | # | 466 | # |
467 | # Plug and Play support | 467 | # Plug and Play support |
468 | # | 468 | # |
469 | # CONFIG_PNP is not set | 469 | CONFIG_PNP=y |
470 | CONFIG_PNPACPI=y | ||
470 | 471 | ||
471 | # | 472 | # |
472 | # Block devices | 473 | # Block devices |
diff --git a/arch/i386/kernel/acpi/boot.c b/arch/i386/kernel/acpi/boot.c index cbcb2c27f48b..e94aff6888ca 100644 --- a/arch/i386/kernel/acpi/boot.c +++ b/arch/i386/kernel/acpi/boot.c | |||
@@ -66,7 +66,7 @@ static inline int acpi_madt_oem_check(char *oem_id, char *oem_table_id) { return | |||
66 | 66 | ||
67 | #define BAD_MADT_ENTRY(entry, end) ( \ | 67 | #define BAD_MADT_ENTRY(entry, end) ( \ |
68 | (!entry) || (unsigned long)entry + sizeof(*entry) > end || \ | 68 | (!entry) || (unsigned long)entry + sizeof(*entry) > end || \ |
69 | ((acpi_table_entry_header *)entry)->length < sizeof(*entry)) | 69 | ((struct acpi_subtable_header *)entry)->length < sizeof(*entry)) |
70 | 70 | ||
71 | #define PREFIX "ACPI: " | 71 | #define PREFIX "ACPI: " |
72 | 72 | ||
@@ -79,7 +79,7 @@ int acpi_ioapic; | |||
79 | int acpi_strict; | 79 | int acpi_strict; |
80 | EXPORT_SYMBOL(acpi_strict); | 80 | EXPORT_SYMBOL(acpi_strict); |
81 | 81 | ||
82 | acpi_interrupt_flags acpi_sci_flags __initdata; | 82 | u8 acpi_sci_flags __initdata; |
83 | int acpi_sci_override_gsi __initdata; | 83 | int acpi_sci_override_gsi __initdata; |
84 | int acpi_skip_timer_override __initdata; | 84 | int acpi_skip_timer_override __initdata; |
85 | int acpi_use_timer_override __initdata; | 85 | int acpi_use_timer_override __initdata; |
@@ -92,11 +92,6 @@ static u64 acpi_lapic_addr __initdata = APIC_DEFAULT_PHYS_BASE; | |||
92 | #warning ACPI uses CMPXCHG, i486 and later hardware | 92 | #warning ACPI uses CMPXCHG, i486 and later hardware |
93 | #endif | 93 | #endif |
94 | 94 | ||
95 | #define MAX_MADT_ENTRIES 256 | ||
96 | u8 x86_acpiid_to_apicid[MAX_MADT_ENTRIES] = | ||
97 | {[0 ... MAX_MADT_ENTRIES - 1] = 0xff }; | ||
98 | EXPORT_SYMBOL(x86_acpiid_to_apicid); | ||
99 | |||
100 | /* -------------------------------------------------------------------------- | 95 | /* -------------------------------------------------------------------------- |
101 | Boot-time Configuration | 96 | Boot-time Configuration |
102 | -------------------------------------------------------------------------- */ | 97 | -------------------------------------------------------------------------- */ |
@@ -166,30 +161,26 @@ char *__acpi_map_table(unsigned long phys, unsigned long size) | |||
166 | 161 | ||
167 | #ifdef CONFIG_PCI_MMCONFIG | 162 | #ifdef CONFIG_PCI_MMCONFIG |
168 | /* The physical address of the MMCONFIG aperture. Set from ACPI tables. */ | 163 | /* The physical address of the MMCONFIG aperture. Set from ACPI tables. */ |
169 | struct acpi_table_mcfg_config *pci_mmcfg_config; | 164 | struct acpi_mcfg_allocation *pci_mmcfg_config; |
170 | int pci_mmcfg_config_num; | 165 | int pci_mmcfg_config_num; |
171 | 166 | ||
172 | int __init acpi_parse_mcfg(unsigned long phys_addr, unsigned long size) | 167 | int __init acpi_parse_mcfg(struct acpi_table_header *header) |
173 | { | 168 | { |
174 | struct acpi_table_mcfg *mcfg; | 169 | struct acpi_table_mcfg *mcfg; |
175 | unsigned long i; | 170 | unsigned long i; |
176 | int config_size; | 171 | int config_size; |
177 | 172 | ||
178 | if (!phys_addr || !size) | 173 | if (!header) |
179 | return -EINVAL; | 174 | return -EINVAL; |
180 | 175 | ||
181 | mcfg = (struct acpi_table_mcfg *)__acpi_map_table(phys_addr, size); | 176 | mcfg = (struct acpi_table_mcfg *)header; |
182 | if (!mcfg) { | ||
183 | printk(KERN_WARNING PREFIX "Unable to map MCFG\n"); | ||
184 | return -ENODEV; | ||
185 | } | ||
186 | 177 | ||
187 | /* how many config structures do we have */ | 178 | /* how many config structures do we have */ |
188 | pci_mmcfg_config_num = 0; | 179 | pci_mmcfg_config_num = 0; |
189 | i = size - sizeof(struct acpi_table_mcfg); | 180 | i = header->length - sizeof(struct acpi_table_mcfg); |
190 | while (i >= sizeof(struct acpi_table_mcfg_config)) { | 181 | while (i >= sizeof(struct acpi_mcfg_allocation)) { |
191 | ++pci_mmcfg_config_num; | 182 | ++pci_mmcfg_config_num; |
192 | i -= sizeof(struct acpi_table_mcfg_config); | 183 | i -= sizeof(struct acpi_mcfg_allocation); |
193 | }; | 184 | }; |
194 | if (pci_mmcfg_config_num == 0) { | 185 | if (pci_mmcfg_config_num == 0) { |
195 | printk(KERN_ERR PREFIX "MMCONFIG has no entries\n"); | 186 | printk(KERN_ERR PREFIX "MMCONFIG has no entries\n"); |
@@ -204,9 +195,9 @@ int __init acpi_parse_mcfg(unsigned long phys_addr, unsigned long size) | |||
204 | return -ENOMEM; | 195 | return -ENOMEM; |
205 | } | 196 | } |
206 | 197 | ||
207 | memcpy(pci_mmcfg_config, &mcfg->config, config_size); | 198 | memcpy(pci_mmcfg_config, &mcfg[1], config_size); |
208 | for (i = 0; i < pci_mmcfg_config_num; ++i) { | 199 | for (i = 0; i < pci_mmcfg_config_num; ++i) { |
209 | if (mcfg->config[i].base_reserved) { | 200 | if (pci_mmcfg_config[i].address > 0xFFFFFFFF) { |
210 | printk(KERN_ERR PREFIX | 201 | printk(KERN_ERR PREFIX |
211 | "MMCONFIG not in low 4GB of memory\n"); | 202 | "MMCONFIG not in low 4GB of memory\n"); |
212 | kfree(pci_mmcfg_config); | 203 | kfree(pci_mmcfg_config); |
@@ -220,24 +211,24 @@ int __init acpi_parse_mcfg(unsigned long phys_addr, unsigned long size) | |||
220 | #endif /* CONFIG_PCI_MMCONFIG */ | 211 | #endif /* CONFIG_PCI_MMCONFIG */ |
221 | 212 | ||
222 | #ifdef CONFIG_X86_LOCAL_APIC | 213 | #ifdef CONFIG_X86_LOCAL_APIC |
223 | static int __init acpi_parse_madt(unsigned long phys_addr, unsigned long size) | 214 | static int __init acpi_parse_madt(struct acpi_table_header *table) |
224 | { | 215 | { |
225 | struct acpi_table_madt *madt = NULL; | 216 | struct acpi_table_madt *madt = NULL; |
226 | 217 | ||
227 | if (!phys_addr || !size || !cpu_has_apic) | 218 | if (!cpu_has_apic) |
228 | return -EINVAL; | 219 | return -EINVAL; |
229 | 220 | ||
230 | madt = (struct acpi_table_madt *)__acpi_map_table(phys_addr, size); | 221 | madt = (struct acpi_table_madt *)table; |
231 | if (!madt) { | 222 | if (!madt) { |
232 | printk(KERN_WARNING PREFIX "Unable to map MADT\n"); | 223 | printk(KERN_WARNING PREFIX "Unable to map MADT\n"); |
233 | return -ENODEV; | 224 | return -ENODEV; |
234 | } | 225 | } |
235 | 226 | ||
236 | if (madt->lapic_address) { | 227 | if (madt->address) { |
237 | acpi_lapic_addr = (u64) madt->lapic_address; | 228 | acpi_lapic_addr = (u64) madt->address; |
238 | 229 | ||
239 | printk(KERN_DEBUG PREFIX "Local APIC address 0x%08x\n", | 230 | printk(KERN_DEBUG PREFIX "Local APIC address 0x%08x\n", |
240 | madt->lapic_address); | 231 | madt->address); |
241 | } | 232 | } |
242 | 233 | ||
243 | acpi_madt_oem_check(madt->header.oem_id, madt->header.oem_table_id); | 234 | acpi_madt_oem_check(madt->header.oem_id, madt->header.oem_table_id); |
@@ -246,21 +237,17 @@ static int __init acpi_parse_madt(unsigned long phys_addr, unsigned long size) | |||
246 | } | 237 | } |
247 | 238 | ||
248 | static int __init | 239 | static int __init |
249 | acpi_parse_lapic(acpi_table_entry_header * header, const unsigned long end) | 240 | acpi_parse_lapic(struct acpi_subtable_header * header, const unsigned long end) |
250 | { | 241 | { |
251 | struct acpi_table_lapic *processor = NULL; | 242 | struct acpi_madt_local_apic *processor = NULL; |
252 | 243 | ||
253 | processor = (struct acpi_table_lapic *)header; | 244 | processor = (struct acpi_madt_local_apic *)header; |
254 | 245 | ||
255 | if (BAD_MADT_ENTRY(processor, end)) | 246 | if (BAD_MADT_ENTRY(processor, end)) |
256 | return -EINVAL; | 247 | return -EINVAL; |
257 | 248 | ||
258 | acpi_table_print_madt_entry(header); | 249 | acpi_table_print_madt_entry(header); |
259 | 250 | ||
260 | /* Record local apic id only when enabled */ | ||
261 | if (processor->flags.enabled) | ||
262 | x86_acpiid_to_apicid[processor->acpi_id] = processor->id; | ||
263 | |||
264 | /* | 251 | /* |
265 | * We need to register disabled CPU as well to permit | 252 | * We need to register disabled CPU as well to permit |
266 | * counting disabled CPUs. This allows us to size | 253 | * counting disabled CPUs. This allows us to size |
@@ -269,18 +256,18 @@ acpi_parse_lapic(acpi_table_entry_header * header, const unsigned long end) | |||
269 | * when we use CPU hotplug. | 256 | * when we use CPU hotplug. |
270 | */ | 257 | */ |
271 | mp_register_lapic(processor->id, /* APIC ID */ | 258 | mp_register_lapic(processor->id, /* APIC ID */ |
272 | processor->flags.enabled); /* Enabled? */ | 259 | processor->lapic_flags & ACPI_MADT_ENABLED); /* Enabled? */ |
273 | 260 | ||
274 | return 0; | 261 | return 0; |
275 | } | 262 | } |
276 | 263 | ||
277 | static int __init | 264 | static int __init |
278 | acpi_parse_lapic_addr_ovr(acpi_table_entry_header * header, | 265 | acpi_parse_lapic_addr_ovr(struct acpi_subtable_header * header, |
279 | const unsigned long end) | 266 | const unsigned long end) |
280 | { | 267 | { |
281 | struct acpi_table_lapic_addr_ovr *lapic_addr_ovr = NULL; | 268 | struct acpi_madt_local_apic_override *lapic_addr_ovr = NULL; |
282 | 269 | ||
283 | lapic_addr_ovr = (struct acpi_table_lapic_addr_ovr *)header; | 270 | lapic_addr_ovr = (struct acpi_madt_local_apic_override *)header; |
284 | 271 | ||
285 | if (BAD_MADT_ENTRY(lapic_addr_ovr, end)) | 272 | if (BAD_MADT_ENTRY(lapic_addr_ovr, end)) |
286 | return -EINVAL; | 273 | return -EINVAL; |
@@ -291,11 +278,11 @@ acpi_parse_lapic_addr_ovr(acpi_table_entry_header * header, | |||
291 | } | 278 | } |
292 | 279 | ||
293 | static int __init | 280 | static int __init |
294 | acpi_parse_lapic_nmi(acpi_table_entry_header * header, const unsigned long end) | 281 | acpi_parse_lapic_nmi(struct acpi_subtable_header * header, const unsigned long end) |
295 | { | 282 | { |
296 | struct acpi_table_lapic_nmi *lapic_nmi = NULL; | 283 | struct acpi_madt_local_apic_nmi *lapic_nmi = NULL; |
297 | 284 | ||
298 | lapic_nmi = (struct acpi_table_lapic_nmi *)header; | 285 | lapic_nmi = (struct acpi_madt_local_apic_nmi *)header; |
299 | 286 | ||
300 | if (BAD_MADT_ENTRY(lapic_nmi, end)) | 287 | if (BAD_MADT_ENTRY(lapic_nmi, end)) |
301 | return -EINVAL; | 288 | return -EINVAL; |
@@ -313,11 +300,11 @@ acpi_parse_lapic_nmi(acpi_table_entry_header * header, const unsigned long end) | |||
313 | #ifdef CONFIG_X86_IO_APIC | 300 | #ifdef CONFIG_X86_IO_APIC |
314 | 301 | ||
315 | static int __init | 302 | static int __init |
316 | acpi_parse_ioapic(acpi_table_entry_header * header, const unsigned long end) | 303 | acpi_parse_ioapic(struct acpi_subtable_header * header, const unsigned long end) |
317 | { | 304 | { |
318 | struct acpi_table_ioapic *ioapic = NULL; | 305 | struct acpi_madt_io_apic *ioapic = NULL; |
319 | 306 | ||
320 | ioapic = (struct acpi_table_ioapic *)header; | 307 | ioapic = (struct acpi_madt_io_apic *)header; |
321 | 308 | ||
322 | if (BAD_MADT_ENTRY(ioapic, end)) | 309 | if (BAD_MADT_ENTRY(ioapic, end)) |
323 | return -EINVAL; | 310 | return -EINVAL; |
@@ -342,11 +329,11 @@ static void __init acpi_sci_ioapic_setup(u32 gsi, u16 polarity, u16 trigger) | |||
342 | polarity = 3; | 329 | polarity = 3; |
343 | 330 | ||
344 | /* Command-line over-ride via acpi_sci= */ | 331 | /* Command-line over-ride via acpi_sci= */ |
345 | if (acpi_sci_flags.trigger) | 332 | if (acpi_sci_flags & ACPI_MADT_TRIGGER_MASK) |
346 | trigger = acpi_sci_flags.trigger; | 333 | trigger = (acpi_sci_flags & ACPI_MADT_TRIGGER_MASK) >> 2; |
347 | 334 | ||
348 | if (acpi_sci_flags.polarity) | 335 | if (acpi_sci_flags & ACPI_MADT_POLARITY_MASK) |
349 | polarity = acpi_sci_flags.polarity; | 336 | polarity = acpi_sci_flags & ACPI_MADT_POLARITY_MASK; |
350 | 337 | ||
351 | /* | 338 | /* |
352 | * mp_config_acpi_legacy_irqs() already setup IRQs < 16 | 339 | * mp_config_acpi_legacy_irqs() already setup IRQs < 16 |
@@ -357,51 +344,52 @@ static void __init acpi_sci_ioapic_setup(u32 gsi, u16 polarity, u16 trigger) | |||
357 | 344 | ||
358 | /* | 345 | /* |
359 | * stash over-ride to indicate we've been here | 346 | * stash over-ride to indicate we've been here |
360 | * and for later update of acpi_fadt | 347 | * and for later update of acpi_gbl_FADT |
361 | */ | 348 | */ |
362 | acpi_sci_override_gsi = gsi; | 349 | acpi_sci_override_gsi = gsi; |
363 | return; | 350 | return; |
364 | } | 351 | } |
365 | 352 | ||
366 | static int __init | 353 | static int __init |
367 | acpi_parse_int_src_ovr(acpi_table_entry_header * header, | 354 | acpi_parse_int_src_ovr(struct acpi_subtable_header * header, |
368 | const unsigned long end) | 355 | const unsigned long end) |
369 | { | 356 | { |
370 | struct acpi_table_int_src_ovr *intsrc = NULL; | 357 | struct acpi_madt_interrupt_override *intsrc = NULL; |
371 | 358 | ||
372 | intsrc = (struct acpi_table_int_src_ovr *)header; | 359 | intsrc = (struct acpi_madt_interrupt_override *)header; |
373 | 360 | ||
374 | if (BAD_MADT_ENTRY(intsrc, end)) | 361 | if (BAD_MADT_ENTRY(intsrc, end)) |
375 | return -EINVAL; | 362 | return -EINVAL; |
376 | 363 | ||
377 | acpi_table_print_madt_entry(header); | 364 | acpi_table_print_madt_entry(header); |
378 | 365 | ||
379 | if (intsrc->bus_irq == acpi_fadt.sci_int) { | 366 | if (intsrc->source_irq == acpi_gbl_FADT.sci_interrupt) { |
380 | acpi_sci_ioapic_setup(intsrc->global_irq, | 367 | acpi_sci_ioapic_setup(intsrc->global_irq, |
381 | intsrc->flags.polarity, | 368 | intsrc->inti_flags & ACPI_MADT_POLARITY_MASK, |
382 | intsrc->flags.trigger); | 369 | (intsrc->inti_flags & ACPI_MADT_TRIGGER_MASK) >> 2); |
383 | return 0; | 370 | return 0; |
384 | } | 371 | } |
385 | 372 | ||
386 | if (acpi_skip_timer_override && | 373 | if (acpi_skip_timer_override && |
387 | intsrc->bus_irq == 0 && intsrc->global_irq == 2) { | 374 | intsrc->source_irq == 0 && intsrc->global_irq == 2) { |
388 | printk(PREFIX "BIOS IRQ0 pin2 override ignored.\n"); | 375 | printk(PREFIX "BIOS IRQ0 pin2 override ignored.\n"); |
389 | return 0; | 376 | return 0; |
390 | } | 377 | } |
391 | 378 | ||
392 | mp_override_legacy_irq(intsrc->bus_irq, | 379 | mp_override_legacy_irq(intsrc->source_irq, |
393 | intsrc->flags.polarity, | 380 | intsrc->inti_flags & ACPI_MADT_POLARITY_MASK, |
394 | intsrc->flags.trigger, intsrc->global_irq); | 381 | (intsrc->inti_flags & ACPI_MADT_TRIGGER_MASK) >> 2, |
382 | intsrc->global_irq); | ||
395 | 383 | ||
396 | return 0; | 384 | return 0; |
397 | } | 385 | } |
398 | 386 | ||
399 | static int __init | 387 | static int __init |
400 | acpi_parse_nmi_src(acpi_table_entry_header * header, const unsigned long end) | 388 | acpi_parse_nmi_src(struct acpi_subtable_header * header, const unsigned long end) |
401 | { | 389 | { |
402 | struct acpi_table_nmi_src *nmi_src = NULL; | 390 | struct acpi_madt_nmi_source *nmi_src = NULL; |
403 | 391 | ||
404 | nmi_src = (struct acpi_table_nmi_src *)header; | 392 | nmi_src = (struct acpi_madt_nmi_source *)header; |
405 | 393 | ||
406 | if (BAD_MADT_ENTRY(nmi_src, end)) | 394 | if (BAD_MADT_ENTRY(nmi_src, end)) |
407 | return -EINVAL; | 395 | return -EINVAL; |
@@ -417,7 +405,7 @@ acpi_parse_nmi_src(acpi_table_entry_header * header, const unsigned long end) | |||
417 | 405 | ||
418 | /* | 406 | /* |
419 | * acpi_pic_sci_set_trigger() | 407 | * acpi_pic_sci_set_trigger() |
420 | * | 408 | * |
421 | * use ELCR to set PIC-mode trigger type for SCI | 409 | * use ELCR to set PIC-mode trigger type for SCI |
422 | * | 410 | * |
423 | * If a PIC-mode SCI is not recognized or gives spurious IRQ7's | 411 | * If a PIC-mode SCI is not recognized or gives spurious IRQ7's |
@@ -511,7 +499,7 @@ int acpi_map_lsapic(acpi_handle handle, int *pcpu) | |||
511 | { | 499 | { |
512 | struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; | 500 | struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; |
513 | union acpi_object *obj; | 501 | union acpi_object *obj; |
514 | struct acpi_table_lapic *lapic; | 502 | struct acpi_madt_local_apic *lapic; |
515 | cpumask_t tmp_map, new_map; | 503 | cpumask_t tmp_map, new_map; |
516 | u8 physid; | 504 | u8 physid; |
517 | int cpu; | 505 | int cpu; |
@@ -529,10 +517,10 @@ int acpi_map_lsapic(acpi_handle handle, int *pcpu) | |||
529 | return -EINVAL; | 517 | return -EINVAL; |
530 | } | 518 | } |
531 | 519 | ||
532 | lapic = (struct acpi_table_lapic *)obj->buffer.pointer; | 520 | lapic = (struct acpi_madt_local_apic *)obj->buffer.pointer; |
533 | 521 | ||
534 | if ((lapic->header.type != ACPI_MADT_LAPIC) || | 522 | if (lapic->header.type != ACPI_MADT_TYPE_LOCAL_APIC || |
535 | (!lapic->flags.enabled)) { | 523 | !(lapic->lapic_flags & ACPI_MADT_ENABLED)) { |
536 | kfree(buffer.pointer); | 524 | kfree(buffer.pointer); |
537 | return -EINVAL; | 525 | return -EINVAL; |
538 | } | 526 | } |
@@ -544,7 +532,7 @@ int acpi_map_lsapic(acpi_handle handle, int *pcpu) | |||
544 | buffer.pointer = NULL; | 532 | buffer.pointer = NULL; |
545 | 533 | ||
546 | tmp_map = cpu_present_map; | 534 | tmp_map = cpu_present_map; |
547 | mp_register_lapic(physid, lapic->flags.enabled); | 535 | mp_register_lapic(physid, lapic->lapic_flags & ACPI_MADT_ENABLED); |
548 | 536 | ||
549 | /* | 537 | /* |
550 | * If mp_register_lapic successfully generates a new logical cpu | 538 | * If mp_register_lapic successfully generates a new logical cpu |
@@ -566,14 +554,6 @@ EXPORT_SYMBOL(acpi_map_lsapic); | |||
566 | 554 | ||
567 | int acpi_unmap_lsapic(int cpu) | 555 | int acpi_unmap_lsapic(int cpu) |
568 | { | 556 | { |
569 | int i; | ||
570 | |||
571 | for_each_possible_cpu(i) { | ||
572 | if (x86_acpiid_to_apicid[i] == x86_cpu_to_apicid[cpu]) { | ||
573 | x86_acpiid_to_apicid[i] = -1; | ||
574 | break; | ||
575 | } | ||
576 | } | ||
577 | x86_cpu_to_apicid[cpu] = -1; | 557 | x86_cpu_to_apicid[cpu] = -1; |
578 | cpu_clear(cpu, cpu_present_map); | 558 | cpu_clear(cpu, cpu_present_map); |
579 | num_processors--; | 559 | num_processors--; |
@@ -619,42 +599,36 @@ acpi_scan_rsdp(unsigned long start, unsigned long length) | |||
619 | return 0; | 599 | return 0; |
620 | } | 600 | } |
621 | 601 | ||
622 | static int __init acpi_parse_sbf(unsigned long phys_addr, unsigned long size) | 602 | static int __init acpi_parse_sbf(struct acpi_table_header *table) |
623 | { | 603 | { |
624 | struct acpi_table_sbf *sb; | 604 | struct acpi_table_boot *sb; |
625 | |||
626 | if (!phys_addr || !size) | ||
627 | return -EINVAL; | ||
628 | 605 | ||
629 | sb = (struct acpi_table_sbf *)__acpi_map_table(phys_addr, size); | 606 | sb = (struct acpi_table_boot *)table; |
630 | if (!sb) { | 607 | if (!sb) { |
631 | printk(KERN_WARNING PREFIX "Unable to map SBF\n"); | 608 | printk(KERN_WARNING PREFIX "Unable to map SBF\n"); |
632 | return -ENODEV; | 609 | return -ENODEV; |
633 | } | 610 | } |
634 | 611 | ||
635 | sbf_port = sb->sbf_cmos; /* Save CMOS port */ | 612 | sbf_port = sb->cmos_index; /* Save CMOS port */ |
636 | 613 | ||
637 | return 0; | 614 | return 0; |
638 | } | 615 | } |
639 | 616 | ||
640 | #ifdef CONFIG_HPET_TIMER | 617 | #ifdef CONFIG_HPET_TIMER |
641 | 618 | ||
642 | static int __init acpi_parse_hpet(unsigned long phys, unsigned long size) | 619 | static int __init acpi_parse_hpet(struct acpi_table_header *table) |
643 | { | 620 | { |
644 | struct acpi_table_hpet *hpet_tbl; | 621 | struct acpi_table_hpet *hpet_tbl; |
645 | struct resource *hpet_res; | 622 | struct resource *hpet_res; |
646 | resource_size_t res_start; | 623 | resource_size_t res_start; |
647 | 624 | ||
648 | if (!phys || !size) | 625 | hpet_tbl = (struct acpi_table_hpet *)table; |
649 | return -EINVAL; | ||
650 | |||
651 | hpet_tbl = (struct acpi_table_hpet *)__acpi_map_table(phys, size); | ||
652 | if (!hpet_tbl) { | 626 | if (!hpet_tbl) { |
653 | printk(KERN_WARNING PREFIX "Unable to map HPET\n"); | 627 | printk(KERN_WARNING PREFIX "Unable to map HPET\n"); |
654 | return -ENODEV; | 628 | return -ENODEV; |
655 | } | 629 | } |
656 | 630 | ||
657 | if (hpet_tbl->addr.space_id != ACPI_SPACE_MEM) { | 631 | if (hpet_tbl->address.space_id != ACPI_SPACE_MEM) { |
658 | printk(KERN_WARNING PREFIX "HPET timers must be located in " | 632 | printk(KERN_WARNING PREFIX "HPET timers must be located in " |
659 | "memory.\n"); | 633 | "memory.\n"); |
660 | return -1; | 634 | return -1; |
@@ -667,29 +641,28 @@ static int __init acpi_parse_hpet(unsigned long phys, unsigned long size) | |||
667 | hpet_res->name = (void *)&hpet_res[1]; | 641 | hpet_res->name = (void *)&hpet_res[1]; |
668 | hpet_res->flags = IORESOURCE_MEM | IORESOURCE_BUSY; | 642 | hpet_res->flags = IORESOURCE_MEM | IORESOURCE_BUSY; |
669 | snprintf((char *)hpet_res->name, HPET_RESOURCE_NAME_SIZE, | 643 | snprintf((char *)hpet_res->name, HPET_RESOURCE_NAME_SIZE, |
670 | "HPET %u", hpet_tbl->number); | 644 | "HPET %u", hpet_tbl->sequence); |
671 | hpet_res->end = (1 * 1024) - 1; | 645 | hpet_res->end = (1 * 1024) - 1; |
672 | } | 646 | } |
673 | 647 | ||
674 | #ifdef CONFIG_X86_64 | 648 | #ifdef CONFIG_X86_64 |
675 | vxtime.hpet_address = hpet_tbl->addr.addrl | | 649 | vxtime.hpet_address = hpet_tbl->address.address; |
676 | ((long)hpet_tbl->addr.addrh << 32); | ||
677 | 650 | ||
678 | printk(KERN_INFO PREFIX "HPET id: %#x base: %#lx\n", | 651 | printk(KERN_INFO PREFIX "HPET id: %#x base: %#lx\n", |
679 | hpet_tbl->id, vxtime.hpet_address); | 652 | hpet_tbl->id, vxtime.hpet_address); |
680 | 653 | ||
681 | res_start = vxtime.hpet_address; | 654 | res_start = vxtime.hpet_address; |
682 | #else /* X86 */ | 655 | #else /* X86 */ |
683 | { | 656 | { |
684 | extern unsigned long hpet_address; | 657 | extern unsigned long hpet_address; |
685 | 658 | ||
686 | hpet_address = hpet_tbl->addr.addrl; | 659 | hpet_address = hpet_tbl->address.address; |
687 | printk(KERN_INFO PREFIX "HPET id: %#x base: %#lx\n", | 660 | printk(KERN_INFO PREFIX "HPET id: %#x base: %#lx\n", |
688 | hpet_tbl->id, hpet_address); | 661 | hpet_tbl->id, hpet_address); |
689 | 662 | ||
690 | res_start = hpet_address; | 663 | res_start = hpet_address; |
691 | } | 664 | } |
692 | #endif /* X86 */ | 665 | #endif /* X86 */ |
693 | 666 | ||
694 | if (hpet_res) { | 667 | if (hpet_res) { |
695 | hpet_res->start = res_start; | 668 | hpet_res->start = res_start; |
@@ -707,42 +680,28 @@ static int __init acpi_parse_hpet(unsigned long phys, unsigned long size) | |||
707 | extern u32 pmtmr_ioport; | 680 | extern u32 pmtmr_ioport; |
708 | #endif | 681 | #endif |
709 | 682 | ||
710 | static int __init acpi_parse_fadt(unsigned long phys, unsigned long size) | 683 | static int __init acpi_parse_fadt(struct acpi_table_header *table) |
711 | { | 684 | { |
712 | struct fadt_descriptor *fadt = NULL; | ||
713 | |||
714 | fadt = (struct fadt_descriptor *)__acpi_map_table(phys, size); | ||
715 | if (!fadt) { | ||
716 | printk(KERN_WARNING PREFIX "Unable to map FADT\n"); | ||
717 | return 0; | ||
718 | } | ||
719 | /* initialize sci_int early for INT_SRC_OVR MADT parsing */ | ||
720 | acpi_fadt.sci_int = fadt->sci_int; | ||
721 | |||
722 | /* initialize rev and apic_phys_dest_mode for x86_64 genapic */ | ||
723 | acpi_fadt.revision = fadt->revision; | ||
724 | acpi_fadt.force_apic_physical_destination_mode = | ||
725 | fadt->force_apic_physical_destination_mode; | ||
726 | 685 | ||
727 | #ifdef CONFIG_X86_PM_TIMER | 686 | #ifdef CONFIG_X86_PM_TIMER |
728 | /* detect the location of the ACPI PM Timer */ | 687 | /* detect the location of the ACPI PM Timer */ |
729 | if (fadt->revision >= FADT2_REVISION_ID) { | 688 | if (acpi_gbl_FADT.header.revision >= FADT2_REVISION_ID) { |
730 | /* FADT rev. 2 */ | 689 | /* FADT rev. 2 */ |
731 | if (fadt->xpm_tmr_blk.address_space_id != | 690 | if (acpi_gbl_FADT.xpm_timer_block.space_id != |
732 | ACPI_ADR_SPACE_SYSTEM_IO) | 691 | ACPI_ADR_SPACE_SYSTEM_IO) |
733 | return 0; | 692 | return 0; |
734 | 693 | ||
735 | pmtmr_ioport = fadt->xpm_tmr_blk.address; | 694 | pmtmr_ioport = acpi_gbl_FADT.xpm_timer_block.address; |
736 | /* | 695 | /* |
737 | * "X" fields are optional extensions to the original V1.0 | 696 | * "X" fields are optional extensions to the original V1.0 |
738 | * fields, so we must selectively expand V1.0 fields if the | 697 | * fields, so we must selectively expand V1.0 fields if the |
739 | * corresponding X field is zero. | 698 | * corresponding X field is zero. |
740 | */ | 699 | */ |
741 | if (!pmtmr_ioport) | 700 | if (!pmtmr_ioport) |
742 | pmtmr_ioport = fadt->V1_pm_tmr_blk; | 701 | pmtmr_ioport = acpi_gbl_FADT.pm_timer_block; |
743 | } else { | 702 | } else { |
744 | /* FADT rev. 1 */ | 703 | /* FADT rev. 1 */ |
745 | pmtmr_ioport = fadt->V1_pm_tmr_blk; | 704 | pmtmr_ioport = acpi_gbl_FADT.pm_timer_block; |
746 | } | 705 | } |
747 | if (pmtmr_ioport) | 706 | if (pmtmr_ioport) |
748 | printk(KERN_INFO PREFIX "PM-Timer IO Port: %#x\n", | 707 | printk(KERN_INFO PREFIX "PM-Timer IO Port: %#x\n", |
@@ -784,13 +743,13 @@ static int __init acpi_parse_madt_lapic_entries(void) | |||
784 | if (!cpu_has_apic) | 743 | if (!cpu_has_apic) |
785 | return -ENODEV; | 744 | return -ENODEV; |
786 | 745 | ||
787 | /* | 746 | /* |
788 | * Note that the LAPIC address is obtained from the MADT (32-bit value) | 747 | * Note that the LAPIC address is obtained from the MADT (32-bit value) |
789 | * and (optionally) overriden by a LAPIC_ADDR_OVR entry (64-bit value). | 748 | * and (optionally) overriden by a LAPIC_ADDR_OVR entry (64-bit value). |
790 | */ | 749 | */ |
791 | 750 | ||
792 | count = | 751 | count = |
793 | acpi_table_parse_madt(ACPI_MADT_LAPIC_ADDR_OVR, | 752 | acpi_table_parse_madt(ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE, |
794 | acpi_parse_lapic_addr_ovr, 0); | 753 | acpi_parse_lapic_addr_ovr, 0); |
795 | if (count < 0) { | 754 | if (count < 0) { |
796 | printk(KERN_ERR PREFIX | 755 | printk(KERN_ERR PREFIX |
@@ -800,7 +759,7 @@ static int __init acpi_parse_madt_lapic_entries(void) | |||
800 | 759 | ||
801 | mp_register_lapic_address(acpi_lapic_addr); | 760 | mp_register_lapic_address(acpi_lapic_addr); |
802 | 761 | ||
803 | count = acpi_table_parse_madt(ACPI_MADT_LAPIC, acpi_parse_lapic, | 762 | count = acpi_table_parse_madt(ACPI_MADT_TYPE_LOCAL_APIC, acpi_parse_lapic, |
804 | MAX_APICS); | 763 | MAX_APICS); |
805 | if (!count) { | 764 | if (!count) { |
806 | printk(KERN_ERR PREFIX "No LAPIC entries present\n"); | 765 | printk(KERN_ERR PREFIX "No LAPIC entries present\n"); |
@@ -813,7 +772,7 @@ static int __init acpi_parse_madt_lapic_entries(void) | |||
813 | } | 772 | } |
814 | 773 | ||
815 | count = | 774 | count = |
816 | acpi_table_parse_madt(ACPI_MADT_LAPIC_NMI, acpi_parse_lapic_nmi, 0); | 775 | acpi_table_parse_madt(ACPI_MADT_TYPE_LOCAL_APIC_NMI, acpi_parse_lapic_nmi, 0); |
817 | if (count < 0) { | 776 | if (count < 0) { |
818 | printk(KERN_ERR PREFIX "Error parsing LAPIC NMI entry\n"); | 777 | printk(KERN_ERR PREFIX "Error parsing LAPIC NMI entry\n"); |
819 | /* TBD: Cleanup to allow fallback to MPS */ | 778 | /* TBD: Cleanup to allow fallback to MPS */ |
@@ -842,7 +801,7 @@ static int __init acpi_parse_madt_ioapic_entries(void) | |||
842 | return -ENODEV; | 801 | return -ENODEV; |
843 | } | 802 | } |
844 | 803 | ||
845 | if (!cpu_has_apic) | 804 | if (!cpu_has_apic) |
846 | return -ENODEV; | 805 | return -ENODEV; |
847 | 806 | ||
848 | /* | 807 | /* |
@@ -855,7 +814,7 @@ static int __init acpi_parse_madt_ioapic_entries(void) | |||
855 | } | 814 | } |
856 | 815 | ||
857 | count = | 816 | count = |
858 | acpi_table_parse_madt(ACPI_MADT_IOAPIC, acpi_parse_ioapic, | 817 | acpi_table_parse_madt(ACPI_MADT_TYPE_IO_APIC, acpi_parse_ioapic, |
859 | MAX_IO_APICS); | 818 | MAX_IO_APICS); |
860 | if (!count) { | 819 | if (!count) { |
861 | printk(KERN_ERR PREFIX "No IOAPIC entries present\n"); | 820 | printk(KERN_ERR PREFIX "No IOAPIC entries present\n"); |
@@ -866,7 +825,7 @@ static int __init acpi_parse_madt_ioapic_entries(void) | |||
866 | } | 825 | } |
867 | 826 | ||
868 | count = | 827 | count = |
869 | acpi_table_parse_madt(ACPI_MADT_INT_SRC_OVR, acpi_parse_int_src_ovr, | 828 | acpi_table_parse_madt(ACPI_MADT_TYPE_INTERRUPT_OVERRIDE, acpi_parse_int_src_ovr, |
870 | NR_IRQ_VECTORS); | 829 | NR_IRQ_VECTORS); |
871 | if (count < 0) { | 830 | if (count < 0) { |
872 | printk(KERN_ERR PREFIX | 831 | printk(KERN_ERR PREFIX |
@@ -880,13 +839,13 @@ static int __init acpi_parse_madt_ioapic_entries(void) | |||
880 | * pretend we got one so we can set the SCI flags. | 839 | * pretend we got one so we can set the SCI flags. |
881 | */ | 840 | */ |
882 | if (!acpi_sci_override_gsi) | 841 | if (!acpi_sci_override_gsi) |
883 | acpi_sci_ioapic_setup(acpi_fadt.sci_int, 0, 0); | 842 | acpi_sci_ioapic_setup(acpi_gbl_FADT.sci_interrupt, 0, 0); |
884 | 843 | ||
885 | /* Fill in identity legacy mapings where no override */ | 844 | /* Fill in identity legacy mapings where no override */ |
886 | mp_config_acpi_legacy_irqs(); | 845 | mp_config_acpi_legacy_irqs(); |
887 | 846 | ||
888 | count = | 847 | count = |
889 | acpi_table_parse_madt(ACPI_MADT_NMI_SRC, acpi_parse_nmi_src, | 848 | acpi_table_parse_madt(ACPI_MADT_TYPE_NMI_SOURCE, acpi_parse_nmi_src, |
890 | NR_IRQ_VECTORS); | 849 | NR_IRQ_VECTORS); |
891 | if (count < 0) { | 850 | if (count < 0) { |
892 | printk(KERN_ERR PREFIX "Error parsing NMI SRC entry\n"); | 851 | printk(KERN_ERR PREFIX "Error parsing NMI SRC entry\n"); |
@@ -908,7 +867,7 @@ static void __init acpi_process_madt(void) | |||
908 | #ifdef CONFIG_X86_LOCAL_APIC | 867 | #ifdef CONFIG_X86_LOCAL_APIC |
909 | int count, error; | 868 | int count, error; |
910 | 869 | ||
911 | count = acpi_table_parse(ACPI_APIC, acpi_parse_madt); | 870 | count = acpi_table_parse(ACPI_SIG_MADT, acpi_parse_madt); |
912 | if (count >= 1) { | 871 | if (count >= 1) { |
913 | 872 | ||
914 | /* | 873 | /* |
@@ -1195,7 +1154,7 @@ int __init acpi_boot_table_init(void) | |||
1195 | if (acpi_disabled && !acpi_ht) | 1154 | if (acpi_disabled && !acpi_ht) |
1196 | return 1; | 1155 | return 1; |
1197 | 1156 | ||
1198 | /* | 1157 | /* |
1199 | * Initialize the ACPI boot-time table parser. | 1158 | * Initialize the ACPI boot-time table parser. |
1200 | */ | 1159 | */ |
1201 | error = acpi_table_init(); | 1160 | error = acpi_table_init(); |
@@ -1204,7 +1163,7 @@ int __init acpi_boot_table_init(void) | |||
1204 | return error; | 1163 | return error; |
1205 | } | 1164 | } |
1206 | 1165 | ||
1207 | acpi_table_parse(ACPI_BOOT, acpi_parse_sbf); | 1166 | acpi_table_parse(ACPI_SIG_BOOT, acpi_parse_sbf); |
1208 | 1167 | ||
1209 | /* | 1168 | /* |
1210 | * blacklist may disable ACPI entirely | 1169 | * blacklist may disable ACPI entirely |
@@ -1232,19 +1191,19 @@ int __init acpi_boot_init(void) | |||
1232 | if (acpi_disabled && !acpi_ht) | 1191 | if (acpi_disabled && !acpi_ht) |
1233 | return 1; | 1192 | return 1; |
1234 | 1193 | ||
1235 | acpi_table_parse(ACPI_BOOT, acpi_parse_sbf); | 1194 | acpi_table_parse(ACPI_SIG_BOOT, acpi_parse_sbf); |
1236 | 1195 | ||
1237 | /* | 1196 | /* |
1238 | * set sci_int and PM timer address | 1197 | * set sci_int and PM timer address |
1239 | */ | 1198 | */ |
1240 | acpi_table_parse(ACPI_FADT, acpi_parse_fadt); | 1199 | acpi_table_parse(ACPI_SIG_FADT, acpi_parse_fadt); |
1241 | 1200 | ||
1242 | /* | 1201 | /* |
1243 | * Process the Multiple APIC Description Table (MADT), if present | 1202 | * Process the Multiple APIC Description Table (MADT), if present |
1244 | */ | 1203 | */ |
1245 | acpi_process_madt(); | 1204 | acpi_process_madt(); |
1246 | 1205 | ||
1247 | acpi_table_parse(ACPI_HPET, acpi_parse_hpet); | 1206 | acpi_table_parse(ACPI_SIG_HPET, acpi_parse_hpet); |
1248 | 1207 | ||
1249 | return 0; | 1208 | return 0; |
1250 | } | 1209 | } |
@@ -1315,13 +1274,17 @@ static int __init setup_acpi_sci(char *s) | |||
1315 | if (!s) | 1274 | if (!s) |
1316 | return -EINVAL; | 1275 | return -EINVAL; |
1317 | if (!strcmp(s, "edge")) | 1276 | if (!strcmp(s, "edge")) |
1318 | acpi_sci_flags.trigger = 1; | 1277 | acpi_sci_flags = ACPI_MADT_TRIGGER_EDGE | |
1278 | (acpi_sci_flags & ~ACPI_MADT_TRIGGER_MASK); | ||
1319 | else if (!strcmp(s, "level")) | 1279 | else if (!strcmp(s, "level")) |
1320 | acpi_sci_flags.trigger = 3; | 1280 | acpi_sci_flags = ACPI_MADT_TRIGGER_LEVEL | |
1281 | (acpi_sci_flags & ~ACPI_MADT_TRIGGER_MASK); | ||
1321 | else if (!strcmp(s, "high")) | 1282 | else if (!strcmp(s, "high")) |
1322 | acpi_sci_flags.polarity = 1; | 1283 | acpi_sci_flags = ACPI_MADT_POLARITY_ACTIVE_HIGH | |
1284 | (acpi_sci_flags & ~ACPI_MADT_POLARITY_MASK); | ||
1323 | else if (!strcmp(s, "low")) | 1285 | else if (!strcmp(s, "low")) |
1324 | acpi_sci_flags.polarity = 3; | 1286 | acpi_sci_flags = ACPI_MADT_POLARITY_ACTIVE_LOW | |
1287 | (acpi_sci_flags & ~ACPI_MADT_POLARITY_MASK); | ||
1325 | else | 1288 | else |
1326 | return -EINVAL; | 1289 | return -EINVAL; |
1327 | return 0; | 1290 | return 0; |
diff --git a/arch/i386/kernel/acpi/earlyquirk.c b/arch/i386/kernel/acpi/earlyquirk.c index 4b60af7f91dd..bf86f7662d8b 100644 --- a/arch/i386/kernel/acpi/earlyquirk.c +++ b/arch/i386/kernel/acpi/earlyquirk.c | |||
@@ -16,7 +16,7 @@ | |||
16 | 16 | ||
17 | static int nvidia_hpet_detected __initdata; | 17 | static int nvidia_hpet_detected __initdata; |
18 | 18 | ||
19 | static int __init nvidia_hpet_check(unsigned long phys, unsigned long size) | 19 | static int __init nvidia_hpet_check(struct acpi_table_header *header) |
20 | { | 20 | { |
21 | nvidia_hpet_detected = 1; | 21 | nvidia_hpet_detected = 1; |
22 | return 0; | 22 | return 0; |
@@ -30,7 +30,7 @@ static int __init check_bridge(int vendor, int device) | |||
30 | is enabled. */ | 30 | is enabled. */ |
31 | if (!acpi_use_timer_override && vendor == PCI_VENDOR_ID_NVIDIA) { | 31 | if (!acpi_use_timer_override && vendor == PCI_VENDOR_ID_NVIDIA) { |
32 | nvidia_hpet_detected = 0; | 32 | nvidia_hpet_detected = 0; |
33 | acpi_table_parse(ACPI_HPET, nvidia_hpet_check); | 33 | acpi_table_parse(ACPI_SIG_HPET, nvidia_hpet_check); |
34 | if (nvidia_hpet_detected == 0) { | 34 | if (nvidia_hpet_detected == 0) { |
35 | acpi_skip_timer_override = 1; | 35 | acpi_skip_timer_override = 1; |
36 | printk(KERN_INFO "Nvidia board " | 36 | printk(KERN_INFO "Nvidia board " |
diff --git a/arch/i386/kernel/cpu/cpufreq/longhaul.c b/arch/i386/kernel/cpu/cpufreq/longhaul.c index e940e00b96c9..a3db9332d652 100644 --- a/arch/i386/kernel/cpu/cpufreq/longhaul.c +++ b/arch/i386/kernel/cpu/cpufreq/longhaul.c | |||
@@ -190,7 +190,7 @@ static void do_powersaver(int cx_address, unsigned int clock_ratio_index) | |||
190 | /* Invoke C3 */ | 190 | /* Invoke C3 */ |
191 | inb(cx_address); | 191 | inb(cx_address); |
192 | /* Dummy op - must do something useless after P_LVL3 read */ | 192 | /* Dummy op - must do something useless after P_LVL3 read */ |
193 | t = inl(acpi_fadt.xpm_tmr_blk.address); | 193 | t = inl(acpi_gbl_FADT.xpm_timer_block.address); |
194 | } | 194 | } |
195 | /* Disable bus ratio bit */ | 195 | /* Disable bus ratio bit */ |
196 | local_irq_disable(); | 196 | local_irq_disable(); |
@@ -250,8 +250,7 @@ static void longhaul_setstate(unsigned int clock_ratio_index) | |||
250 | outb(3, 0x22); | 250 | outb(3, 0x22); |
251 | } else if ((pr != NULL) && pr->flags.bm_control) { | 251 | } else if ((pr != NULL) && pr->flags.bm_control) { |
252 | /* Disable bus master arbitration */ | 252 | /* Disable bus master arbitration */ |
253 | acpi_set_register(ACPI_BITREG_ARB_DISABLE, 1, | 253 | acpi_set_register(ACPI_BITREG_ARB_DISABLE, 1); |
254 | ACPI_MTX_DO_NOT_LOCK); | ||
255 | } | 254 | } |
256 | switch (longhaul_version) { | 255 | switch (longhaul_version) { |
257 | 256 | ||
@@ -281,8 +280,7 @@ static void longhaul_setstate(unsigned int clock_ratio_index) | |||
281 | case TYPE_POWERSAVER: | 280 | case TYPE_POWERSAVER: |
282 | if (longhaul_flags & USE_ACPI_C3) { | 281 | if (longhaul_flags & USE_ACPI_C3) { |
283 | /* Don't allow wakeup */ | 282 | /* Don't allow wakeup */ |
284 | acpi_set_register(ACPI_BITREG_BUS_MASTER_RLD, 0, | 283 | acpi_set_register(ACPI_BITREG_BUS_MASTER_RLD, 0); |
285 | ACPI_MTX_DO_NOT_LOCK); | ||
286 | do_powersaver(cx->address, clock_ratio_index); | 284 | do_powersaver(cx->address, clock_ratio_index); |
287 | } else { | 285 | } else { |
288 | do_powersaver(0, clock_ratio_index); | 286 | do_powersaver(0, clock_ratio_index); |
@@ -295,8 +293,7 @@ static void longhaul_setstate(unsigned int clock_ratio_index) | |||
295 | outb(0, 0x22); | 293 | outb(0, 0x22); |
296 | } else if ((pr != NULL) && pr->flags.bm_control) { | 294 | } else if ((pr != NULL) && pr->flags.bm_control) { |
297 | /* Enable bus master arbitration */ | 295 | /* Enable bus master arbitration */ |
298 | acpi_set_register(ACPI_BITREG_ARB_DISABLE, 0, | 296 | acpi_set_register(ACPI_BITREG_ARB_DISABLE, 0); |
299 | ACPI_MTX_DO_NOT_LOCK); | ||
300 | } | 297 | } |
301 | outb(pic2_mask,0xA1); /* restore mask */ | 298 | outb(pic2_mask,0xA1); /* restore mask */ |
302 | outb(pic1_mask,0x21); | 299 | outb(pic1_mask,0x21); |
@@ -414,7 +411,7 @@ static int __init longhaul_get_ranges(void) | |||
414 | highest_speed = calc_speed(maxmult); | 411 | highest_speed = calc_speed(maxmult); |
415 | lowest_speed = calc_speed(minmult); | 412 | lowest_speed = calc_speed(minmult); |
416 | dprintk ("FSB:%dMHz Lowest speed: %s Highest speed:%s\n", fsb, | 413 | dprintk ("FSB:%dMHz Lowest speed: %s Highest speed:%s\n", fsb, |
417 | print_speed(lowest_speed/1000), | 414 | print_speed(lowest_speed/1000), |
418 | print_speed(highest_speed/1000)); | 415 | print_speed(highest_speed/1000)); |
419 | 416 | ||
420 | if (lowest_speed == highest_speed) { | 417 | if (lowest_speed == highest_speed) { |
@@ -498,7 +495,7 @@ static void __init longhaul_setup_voltagescaling(void) | |||
498 | maxvid.mV/1000, maxvid.mV%1000, | 495 | maxvid.mV/1000, maxvid.mV%1000, |
499 | minvid.mV/1000, minvid.mV%1000, | 496 | minvid.mV/1000, minvid.mV%1000, |
500 | numvscales); | 497 | numvscales); |
501 | 498 | ||
502 | j = 0; | 499 | j = 0; |
503 | while (longhaul_table[j].frequency != CPUFREQ_TABLE_END) { | 500 | while (longhaul_table[j].frequency != CPUFREQ_TABLE_END) { |
504 | speed = longhaul_table[j].frequency; | 501 | speed = longhaul_table[j].frequency; |
diff --git a/arch/i386/kernel/mpparse.c b/arch/i386/kernel/mpparse.c index 49bff3596bff..4f5983c98669 100644 --- a/arch/i386/kernel/mpparse.c +++ b/arch/i386/kernel/mpparse.c | |||
@@ -1057,7 +1057,7 @@ int mp_register_gsi(u32 gsi, int triggering, int polarity) | |||
1057 | static int gsi_to_irq[MAX_GSI_NUM]; | 1057 | static int gsi_to_irq[MAX_GSI_NUM]; |
1058 | 1058 | ||
1059 | /* Don't set up the ACPI SCI because it's already set up */ | 1059 | /* Don't set up the ACPI SCI because it's already set up */ |
1060 | if (acpi_fadt.sci_int == gsi) | 1060 | if (acpi_gbl_FADT.sci_interrupt == gsi) |
1061 | return gsi; | 1061 | return gsi; |
1062 | 1062 | ||
1063 | ioapic = mp_find_ioapic(gsi); | 1063 | ioapic = mp_find_ioapic(gsi); |
@@ -1114,7 +1114,7 @@ int mp_register_gsi(u32 gsi, int triggering, int polarity) | |||
1114 | /* | 1114 | /* |
1115 | * Don't assign IRQ used by ACPI SCI | 1115 | * Don't assign IRQ used by ACPI SCI |
1116 | */ | 1116 | */ |
1117 | if (gsi == acpi_fadt.sci_int) | 1117 | if (gsi == acpi_gbl_FADT.sci_interrupt) |
1118 | gsi = pci_irq++; | 1118 | gsi = pci_irq++; |
1119 | gsi_to_irq[irq] = gsi; | 1119 | gsi_to_irq[irq] = gsi; |
1120 | } else { | 1120 | } else { |
diff --git a/arch/i386/kernel/srat.c b/arch/i386/kernel/srat.c index f7e735c077c3..2a8713ec0f9a 100644 --- a/arch/i386/kernel/srat.c +++ b/arch/i386/kernel/srat.c | |||
@@ -62,19 +62,19 @@ extern void * boot_ioremap(unsigned long, unsigned long); | |||
62 | /* Identify CPU proximity domains */ | 62 | /* Identify CPU proximity domains */ |
63 | static void __init parse_cpu_affinity_structure(char *p) | 63 | static void __init parse_cpu_affinity_structure(char *p) |
64 | { | 64 | { |
65 | struct acpi_table_processor_affinity *cpu_affinity = | 65 | struct acpi_srat_cpu_affinity *cpu_affinity = |
66 | (struct acpi_table_processor_affinity *) p; | 66 | (struct acpi_srat_cpu_affinity *) p; |
67 | 67 | ||
68 | if (!cpu_affinity->flags.enabled) | 68 | if ((cpu_affinity->flags & ACPI_SRAT_CPU_ENABLED) == 0) |
69 | return; /* empty entry */ | 69 | return; /* empty entry */ |
70 | 70 | ||
71 | /* mark this node as "seen" in node bitmap */ | 71 | /* mark this node as "seen" in node bitmap */ |
72 | BMAP_SET(pxm_bitmap, cpu_affinity->proximity_domain); | 72 | BMAP_SET(pxm_bitmap, cpu_affinity->proximity_domain_lo); |
73 | 73 | ||
74 | apicid_to_pxm[cpu_affinity->apic_id] = cpu_affinity->proximity_domain; | 74 | apicid_to_pxm[cpu_affinity->apic_id] = cpu_affinity->proximity_domain_lo; |
75 | 75 | ||
76 | printk("CPU 0x%02X in proximity domain 0x%02X\n", | 76 | printk("CPU 0x%02X in proximity domain 0x%02X\n", |
77 | cpu_affinity->apic_id, cpu_affinity->proximity_domain); | 77 | cpu_affinity->apic_id, cpu_affinity->proximity_domain_lo); |
78 | } | 78 | } |
79 | 79 | ||
80 | /* | 80 | /* |
@@ -84,28 +84,27 @@ static void __init parse_cpu_affinity_structure(char *p) | |||
84 | static void __init parse_memory_affinity_structure (char *sratp) | 84 | static void __init parse_memory_affinity_structure (char *sratp) |
85 | { | 85 | { |
86 | unsigned long long paddr, size; | 86 | unsigned long long paddr, size; |
87 | unsigned long start_pfn, end_pfn; | 87 | unsigned long start_pfn, end_pfn; |
88 | u8 pxm; | 88 | u8 pxm; |
89 | struct node_memory_chunk_s *p, *q, *pend; | 89 | struct node_memory_chunk_s *p, *q, *pend; |
90 | struct acpi_table_memory_affinity *memory_affinity = | 90 | struct acpi_srat_mem_affinity *memory_affinity = |
91 | (struct acpi_table_memory_affinity *) sratp; | 91 | (struct acpi_srat_mem_affinity *) sratp; |
92 | 92 | ||
93 | if (!memory_affinity->flags.enabled) | 93 | if ((memory_affinity->flags & ACPI_SRAT_MEM_ENABLED) == 0) |
94 | return; /* empty entry */ | 94 | return; /* empty entry */ |
95 | 95 | ||
96 | pxm = memory_affinity->proximity_domain & 0xff; | ||
97 | |||
96 | /* mark this node as "seen" in node bitmap */ | 98 | /* mark this node as "seen" in node bitmap */ |
97 | BMAP_SET(pxm_bitmap, memory_affinity->proximity_domain); | 99 | BMAP_SET(pxm_bitmap, pxm); |
98 | 100 | ||
99 | /* calculate info for memory chunk structure */ | 101 | /* calculate info for memory chunk structure */ |
100 | paddr = memory_affinity->base_addr_hi; | 102 | paddr = memory_affinity->base_address; |
101 | paddr = (paddr << 32) | memory_affinity->base_addr_lo; | 103 | size = memory_affinity->length; |
102 | size = memory_affinity->length_hi; | 104 | |
103 | size = (size << 32) | memory_affinity->length_lo; | ||
104 | |||
105 | start_pfn = paddr >> PAGE_SHIFT; | 105 | start_pfn = paddr >> PAGE_SHIFT; |
106 | end_pfn = (paddr + size) >> PAGE_SHIFT; | 106 | end_pfn = (paddr + size) >> PAGE_SHIFT; |
107 | 107 | ||
108 | pxm = memory_affinity->proximity_domain; | ||
109 | 108 | ||
110 | if (num_memory_chunks >= MAXCHUNKS) { | 109 | if (num_memory_chunks >= MAXCHUNKS) { |
111 | printk("Too many mem chunks in SRAT. Ignoring %lld MBytes at %llx\n", | 110 | printk("Too many mem chunks in SRAT. Ignoring %lld MBytes at %llx\n", |
@@ -132,8 +131,8 @@ static void __init parse_memory_affinity_structure (char *sratp) | |||
132 | printk("Memory range 0x%lX to 0x%lX (type 0x%X) in proximity domain 0x%02X %s\n", | 131 | printk("Memory range 0x%lX to 0x%lX (type 0x%X) in proximity domain 0x%02X %s\n", |
133 | start_pfn, end_pfn, | 132 | start_pfn, end_pfn, |
134 | memory_affinity->memory_type, | 133 | memory_affinity->memory_type, |
135 | memory_affinity->proximity_domain, | 134 | pxm, |
136 | (memory_affinity->flags.hot_pluggable ? | 135 | ((memory_affinity->flags & ACPI_SRAT_MEM_HOT_PLUGGABLE) ? |
137 | "enabled and removable" : "enabled" ) ); | 136 | "enabled and removable" : "enabled" ) ); |
138 | } | 137 | } |
139 | 138 | ||
@@ -185,10 +184,10 @@ static int __init acpi20_parse_srat(struct acpi_table_srat *sratp) | |||
185 | num_memory_chunks = 0; | 184 | num_memory_chunks = 0; |
186 | while (p < end) { | 185 | while (p < end) { |
187 | switch (*p) { | 186 | switch (*p) { |
188 | case ACPI_SRAT_PROCESSOR_AFFINITY: | 187 | case ACPI_SRAT_TYPE_CPU_AFFINITY: |
189 | parse_cpu_affinity_structure(p); | 188 | parse_cpu_affinity_structure(p); |
190 | break; | 189 | break; |
191 | case ACPI_SRAT_MEMORY_AFFINITY: | 190 | case ACPI_SRAT_TYPE_MEMORY_AFFINITY: |
192 | parse_memory_affinity_structure(p); | 191 | parse_memory_affinity_structure(p); |
193 | break; | 192 | break; |
194 | default: | 193 | default: |
@@ -262,31 +261,30 @@ out_fail: | |||
262 | return 0; | 261 | return 0; |
263 | } | 262 | } |
264 | 263 | ||
264 | struct acpi_static_rsdt { | ||
265 | struct acpi_table_rsdt table; | ||
266 | u32 padding[7]; /* Allow for 7 more table entries */ | ||
267 | }; | ||
268 | |||
265 | int __init get_memcfg_from_srat(void) | 269 | int __init get_memcfg_from_srat(void) |
266 | { | 270 | { |
267 | struct acpi_table_header *header = NULL; | 271 | struct acpi_table_header *header = NULL; |
268 | struct acpi_table_rsdp *rsdp = NULL; | 272 | struct acpi_table_rsdp *rsdp = NULL; |
269 | struct acpi_table_rsdt *rsdt = NULL; | 273 | struct acpi_table_rsdt *rsdt = NULL; |
270 | struct acpi_pointer *rsdp_address = NULL; | 274 | acpi_native_uint rsdp_address = 0; |
271 | struct acpi_table_rsdt saved_rsdt; | 275 | struct acpi_static_rsdt saved_rsdt; |
272 | int tables = 0; | 276 | int tables = 0; |
273 | int i = 0; | 277 | int i = 0; |
274 | 278 | ||
275 | if (ACPI_FAILURE(acpi_find_root_pointer(ACPI_PHYSICAL_ADDRESSING, | 279 | rsdp_address = acpi_find_rsdp(); |
276 | rsdp_address))) { | 280 | if (!rsdp_address) { |
277 | printk("%s: System description tables not found\n", | 281 | printk("%s: System description tables not found\n", |
278 | __FUNCTION__); | 282 | __FUNCTION__); |
279 | goto out_err; | 283 | goto out_err; |
280 | } | 284 | } |
281 | 285 | ||
282 | if (rsdp_address->pointer_type == ACPI_PHYSICAL_POINTER) { | 286 | printk("%s: assigning address to rsdp\n", __FUNCTION__); |
283 | printk("%s: assigning address to rsdp\n", __FUNCTION__); | 287 | rsdp = (struct acpi_table_rsdp *)(u32)rsdp_address; |
284 | rsdp = (struct acpi_table_rsdp *) | ||
285 | (u32)rsdp_address->pointer.physical; | ||
286 | } else { | ||
287 | printk("%s: rsdp_address is not a physical pointer\n", __FUNCTION__); | ||
288 | goto out_err; | ||
289 | } | ||
290 | if (!rsdp) { | 288 | if (!rsdp) { |
291 | printk("%s: Didn't find ACPI root!\n", __FUNCTION__); | 289 | printk("%s: Didn't find ACPI root!\n", __FUNCTION__); |
292 | goto out_err; | 290 | goto out_err; |
@@ -295,13 +293,13 @@ int __init get_memcfg_from_srat(void) | |||
295 | printk(KERN_INFO "%.8s v%d [%.6s]\n", rsdp->signature, rsdp->revision, | 293 | printk(KERN_INFO "%.8s v%d [%.6s]\n", rsdp->signature, rsdp->revision, |
296 | rsdp->oem_id); | 294 | rsdp->oem_id); |
297 | 295 | ||
298 | if (strncmp(rsdp->signature, RSDP_SIG,strlen(RSDP_SIG))) { | 296 | if (strncmp(rsdp->signature, ACPI_SIG_RSDP,strlen(ACPI_SIG_RSDP))) { |
299 | printk(KERN_WARNING "%s: RSDP table signature incorrect\n", __FUNCTION__); | 297 | printk(KERN_WARNING "%s: RSDP table signature incorrect\n", __FUNCTION__); |
300 | goto out_err; | 298 | goto out_err; |
301 | } | 299 | } |
302 | 300 | ||
303 | rsdt = (struct acpi_table_rsdt *) | 301 | rsdt = (struct acpi_table_rsdt *) |
304 | boot_ioremap(rsdp->rsdt_address, sizeof(struct acpi_table_rsdt)); | 302 | boot_ioremap(rsdp->rsdt_physical_address, sizeof(struct acpi_table_rsdt)); |
305 | 303 | ||
306 | if (!rsdt) { | 304 | if (!rsdt) { |
307 | printk(KERN_WARNING | 305 | printk(KERN_WARNING |
@@ -310,9 +308,9 @@ int __init get_memcfg_from_srat(void) | |||
310 | goto out_err; | 308 | goto out_err; |
311 | } | 309 | } |
312 | 310 | ||
313 | header = & rsdt->header; | 311 | header = &rsdt->header; |
314 | 312 | ||
315 | if (strncmp(header->signature, RSDT_SIG, strlen(RSDT_SIG))) { | 313 | if (strncmp(header->signature, ACPI_SIG_RSDT, strlen(ACPI_SIG_RSDT))) { |
316 | printk(KERN_WARNING "ACPI: RSDT signature incorrect\n"); | 314 | printk(KERN_WARNING "ACPI: RSDT signature incorrect\n"); |
317 | goto out_err; | 315 | goto out_err; |
318 | } | 316 | } |
@@ -330,9 +328,9 @@ int __init get_memcfg_from_srat(void) | |||
330 | 328 | ||
331 | memcpy(&saved_rsdt, rsdt, sizeof(saved_rsdt)); | 329 | memcpy(&saved_rsdt, rsdt, sizeof(saved_rsdt)); |
332 | 330 | ||
333 | if (saved_rsdt.header.length > sizeof(saved_rsdt)) { | 331 | if (saved_rsdt.table.header.length > sizeof(saved_rsdt)) { |
334 | printk(KERN_WARNING "ACPI: Too big length in RSDT: %d\n", | 332 | printk(KERN_WARNING "ACPI: Too big length in RSDT: %d\n", |
335 | saved_rsdt.header.length); | 333 | saved_rsdt.table.header.length); |
336 | goto out_err; | 334 | goto out_err; |
337 | } | 335 | } |
338 | 336 | ||
@@ -341,15 +339,15 @@ int __init get_memcfg_from_srat(void) | |||
341 | for (i = 0; i < tables; i++) { | 339 | for (i = 0; i < tables; i++) { |
342 | /* Map in header, then map in full table length. */ | 340 | /* Map in header, then map in full table length. */ |
343 | header = (struct acpi_table_header *) | 341 | header = (struct acpi_table_header *) |
344 | boot_ioremap(saved_rsdt.entry[i], sizeof(struct acpi_table_header)); | 342 | boot_ioremap(saved_rsdt.table.table_offset_entry[i], sizeof(struct acpi_table_header)); |
345 | if (!header) | 343 | if (!header) |
346 | break; | 344 | break; |
347 | header = (struct acpi_table_header *) | 345 | header = (struct acpi_table_header *) |
348 | boot_ioremap(saved_rsdt.entry[i], header->length); | 346 | boot_ioremap(saved_rsdt.table.table_offset_entry[i], header->length); |
349 | if (!header) | 347 | if (!header) |
350 | break; | 348 | break; |
351 | 349 | ||
352 | if (strncmp((char *) &header->signature, "SRAT", 4)) | 350 | if (strncmp((char *) &header->signature, ACPI_SIG_SRAT, 4)) |
353 | continue; | 351 | continue; |
354 | 352 | ||
355 | /* we've found the srat table. don't need to look at any more tables */ | 353 | /* we've found the srat table. don't need to look at any more tables */ |
diff --git a/arch/i386/mach-es7000/es7000.h b/arch/i386/mach-es7000/es7000.h index 80566ca4a80a..c8d5aa132fa0 100644 --- a/arch/i386/mach-es7000/es7000.h +++ b/arch/i386/mach-es7000/es7000.h | |||
@@ -84,15 +84,6 @@ struct es7000_oem_table { | |||
84 | }; | 84 | }; |
85 | 85 | ||
86 | #ifdef CONFIG_ACPI | 86 | #ifdef CONFIG_ACPI |
87 | struct acpi_table_sdt { | ||
88 | unsigned long pa; | ||
89 | unsigned long count; | ||
90 | struct { | ||
91 | unsigned long pa; | ||
92 | enum acpi_table_id id; | ||
93 | unsigned long size; | ||
94 | } entry[50]; | ||
95 | }; | ||
96 | 87 | ||
97 | struct oem_table { | 88 | struct oem_table { |
98 | struct acpi_table_header Header; | 89 | struct acpi_table_header Header; |
diff --git a/arch/i386/mach-es7000/es7000plat.c b/arch/i386/mach-es7000/es7000plat.c index 3d0fc853516d..9be6ceabf042 100644 --- a/arch/i386/mach-es7000/es7000plat.c +++ b/arch/i386/mach-es7000/es7000plat.c | |||
@@ -160,51 +160,14 @@ parse_unisys_oem (char *oemptr) | |||
160 | int __init | 160 | int __init |
161 | find_unisys_acpi_oem_table(unsigned long *oem_addr) | 161 | find_unisys_acpi_oem_table(unsigned long *oem_addr) |
162 | { | 162 | { |
163 | struct acpi_table_rsdp *rsdp = NULL; | 163 | struct acpi_table_header *header = NULL; |
164 | unsigned long rsdp_phys = 0; | 164 | int i = 0; |
165 | struct acpi_table_header *header = NULL; | 165 | while (ACPI_SUCCESS(acpi_get_table("OEM1", i++, &header))) { |
166 | int i; | 166 | if (!memcmp((char *) &header->oem_id, "UNISYS", 6)) { |
167 | struct acpi_table_sdt sdt; | 167 | struct oem_table *t = (struct oem_table *)header; |
168 | 168 | *oem_addr = (unsigned long)__acpi_map_table(t->OEMTableAddr, | |
169 | rsdp_phys = acpi_find_rsdp(); | 169 | t->OEMTableSize); |
170 | rsdp = __va(rsdp_phys); | 170 | return 0; |
171 | if (rsdp->rsdt_address) { | ||
172 | struct acpi_table_rsdt *mapped_rsdt = NULL; | ||
173 | sdt.pa = rsdp->rsdt_address; | ||
174 | |||
175 | header = (struct acpi_table_header *) | ||
176 | __acpi_map_table(sdt.pa, sizeof(struct acpi_table_header)); | ||
177 | if (!header) | ||
178 | return -ENODEV; | ||
179 | |||
180 | sdt.count = (header->length - sizeof(struct acpi_table_header)) >> 3; | ||
181 | mapped_rsdt = (struct acpi_table_rsdt *) | ||
182 | __acpi_map_table(sdt.pa, header->length); | ||
183 | if (!mapped_rsdt) | ||
184 | return -ENODEV; | ||
185 | |||
186 | header = &mapped_rsdt->header; | ||
187 | |||
188 | for (i = 0; i < sdt.count; i++) | ||
189 | sdt.entry[i].pa = (unsigned long) mapped_rsdt->entry[i]; | ||
190 | }; | ||
191 | for (i = 0; i < sdt.count; i++) { | ||
192 | |||
193 | header = (struct acpi_table_header *) | ||
194 | __acpi_map_table(sdt.entry[i].pa, | ||
195 | sizeof(struct acpi_table_header)); | ||
196 | if (!header) | ||
197 | continue; | ||
198 | if (!strncmp((char *) &header->signature, "OEM1", 4)) { | ||
199 | if (!strncmp((char *) &header->oem_id, "UNISYS", 6)) { | ||
200 | void *addr; | ||
201 | struct oem_table *t; | ||
202 | acpi_table_print(header, sdt.entry[i].pa); | ||
203 | t = (struct oem_table *) __acpi_map_table(sdt.entry[i].pa, header->length); | ||
204 | addr = (void *) __acpi_map_table(t->OEMTableAddr, t->OEMTableSize); | ||
205 | *oem_addr = (unsigned long) addr; | ||
206 | return 0; | ||
207 | } | ||
208 | } | 171 | } |
209 | } | 172 | } |
210 | return -1; | 173 | return -1; |
diff --git a/arch/i386/pci/mmconfig.c b/arch/i386/pci/mmconfig.c index e2616a266e13..5700220dcf5f 100644 --- a/arch/i386/pci/mmconfig.c +++ b/arch/i386/pci/mmconfig.c | |||
@@ -36,7 +36,7 @@ static DECLARE_BITMAP(fallback_slots, MAX_CHECK_BUS*32); | |||
36 | static u32 get_base_addr(unsigned int seg, int bus, unsigned devfn) | 36 | static u32 get_base_addr(unsigned int seg, int bus, unsigned devfn) |
37 | { | 37 | { |
38 | int cfg_num = -1; | 38 | int cfg_num = -1; |
39 | struct acpi_table_mcfg_config *cfg; | 39 | struct acpi_mcfg_allocation *cfg; |
40 | 40 | ||
41 | if (seg == 0 && bus < MAX_CHECK_BUS && | 41 | if (seg == 0 && bus < MAX_CHECK_BUS && |
42 | test_bit(PCI_SLOT(devfn) + 32*bus, fallback_slots)) | 42 | test_bit(PCI_SLOT(devfn) + 32*bus, fallback_slots)) |
@@ -48,11 +48,11 @@ static u32 get_base_addr(unsigned int seg, int bus, unsigned devfn) | |||
48 | break; | 48 | break; |
49 | } | 49 | } |
50 | cfg = &pci_mmcfg_config[cfg_num]; | 50 | cfg = &pci_mmcfg_config[cfg_num]; |
51 | if (cfg->pci_segment_group_number != seg) | 51 | if (cfg->pci_segment != seg) |
52 | continue; | 52 | continue; |
53 | if ((cfg->start_bus_number <= bus) && | 53 | if ((cfg->start_bus_number <= bus) && |
54 | (cfg->end_bus_number >= bus)) | 54 | (cfg->end_bus_number >= bus)) |
55 | return cfg->base_address; | 55 | return cfg->address; |
56 | } | 56 | } |
57 | 57 | ||
58 | /* Handle more broken MCFG tables on Asus etc. | 58 | /* Handle more broken MCFG tables on Asus etc. |
@@ -60,9 +60,9 @@ static u32 get_base_addr(unsigned int seg, int bus, unsigned devfn) | |||
60 | this applies to all busses. */ | 60 | this applies to all busses. */ |
61 | cfg = &pci_mmcfg_config[0]; | 61 | cfg = &pci_mmcfg_config[0]; |
62 | if (pci_mmcfg_config_num == 1 && | 62 | if (pci_mmcfg_config_num == 1 && |
63 | cfg->pci_segment_group_number == 0 && | 63 | cfg->pci_segment == 0 && |
64 | (cfg->start_bus_number | cfg->end_bus_number) == 0) | 64 | (cfg->start_bus_number | cfg->end_bus_number) == 0) |
65 | return cfg->base_address; | 65 | return cfg->address; |
66 | 66 | ||
67 | /* Fall back to type 0 */ | 67 | /* Fall back to type 0 */ |
68 | return 0; | 68 | return 0; |
@@ -125,7 +125,7 @@ static int pci_mmcfg_write(unsigned int seg, unsigned int bus, | |||
125 | unsigned long flags; | 125 | unsigned long flags; |
126 | u32 base; | 126 | u32 base; |
127 | 127 | ||
128 | if ((bus > 255) || (devfn > 255) || (reg > 4095)) | 128 | if ((bus > 255) || (devfn > 255) || (reg > 4095)) |
129 | return -EINVAL; | 129 | return -EINVAL; |
130 | 130 | ||
131 | base = get_base_addr(seg, bus, devfn); | 131 | base = get_base_addr(seg, bus, devfn); |
@@ -199,19 +199,19 @@ void __init pci_mmcfg_init(int type) | |||
199 | if ((pci_probe & PCI_PROBE_MMCONF) == 0) | 199 | if ((pci_probe & PCI_PROBE_MMCONF) == 0) |
200 | return; | 200 | return; |
201 | 201 | ||
202 | acpi_table_parse(ACPI_MCFG, acpi_parse_mcfg); | 202 | acpi_table_parse(ACPI_SIG_MCFG, acpi_parse_mcfg); |
203 | if ((pci_mmcfg_config_num == 0) || | 203 | if ((pci_mmcfg_config_num == 0) || |
204 | (pci_mmcfg_config == NULL) || | 204 | (pci_mmcfg_config == NULL) || |
205 | (pci_mmcfg_config[0].base_address == 0)) | 205 | (pci_mmcfg_config[0].address == 0)) |
206 | return; | 206 | return; |
207 | 207 | ||
208 | /* Only do this check when type 1 works. If it doesn't work | 208 | /* Only do this check when type 1 works. If it doesn't work |
209 | assume we run on a Mac and always use MCFG */ | 209 | assume we run on a Mac and always use MCFG */ |
210 | if (type == 1 && !e820_all_mapped(pci_mmcfg_config[0].base_address, | 210 | if (type == 1 && !e820_all_mapped(pci_mmcfg_config[0].address, |
211 | pci_mmcfg_config[0].base_address + MMCONFIG_APER_MIN, | 211 | pci_mmcfg_config[0].address + MMCONFIG_APER_MIN, |
212 | E820_RESERVED)) { | 212 | E820_RESERVED)) { |
213 | printk(KERN_ERR "PCI: BIOS Bug: MCFG area at %x is not E820-reserved\n", | 213 | printk(KERN_ERR "PCI: BIOS Bug: MCFG area at %lx is not E820-reserved\n", |
214 | pci_mmcfg_config[0].base_address); | 214 | (unsigned long)pci_mmcfg_config[0].address); |
215 | printk(KERN_ERR "PCI: Not using MMCONFIG.\n"); | 215 | printk(KERN_ERR "PCI: Not using MMCONFIG.\n"); |
216 | return; | 216 | return; |
217 | } | 217 | } |
diff --git a/arch/ia64/kernel/acpi.c b/arch/ia64/kernel/acpi.c index 29f05d4b68cd..9197d7b361b3 100644 --- a/arch/ia64/kernel/acpi.c +++ b/arch/ia64/kernel/acpi.c | |||
@@ -55,7 +55,7 @@ | |||
55 | 55 | ||
56 | #define BAD_MADT_ENTRY(entry, end) ( \ | 56 | #define BAD_MADT_ENTRY(entry, end) ( \ |
57 | (!entry) || (unsigned long)entry + sizeof(*entry) > end || \ | 57 | (!entry) || (unsigned long)entry + sizeof(*entry) > end || \ |
58 | ((acpi_table_entry_header *)entry)->length < sizeof(*entry)) | 58 | ((struct acpi_subtable_header *)entry)->length < sizeof(*entry)) |
59 | 59 | ||
60 | #define PREFIX "ACPI: " | 60 | #define PREFIX "ACPI: " |
61 | 61 | ||
@@ -67,16 +67,11 @@ EXPORT_SYMBOL(pm_power_off); | |||
67 | unsigned int acpi_cpei_override; | 67 | unsigned int acpi_cpei_override; |
68 | unsigned int acpi_cpei_phys_cpuid; | 68 | unsigned int acpi_cpei_phys_cpuid; |
69 | 69 | ||
70 | #define MAX_SAPICS 256 | ||
71 | u16 ia64_acpiid_to_sapicid[MAX_SAPICS] = {[0 ... MAX_SAPICS - 1] = -1 }; | ||
72 | |||
73 | EXPORT_SYMBOL(ia64_acpiid_to_sapicid); | ||
74 | |||
75 | const char *acpi_get_sysname(void) | 70 | const char *acpi_get_sysname(void) |
76 | { | 71 | { |
77 | #ifdef CONFIG_IA64_GENERIC | 72 | #ifdef CONFIG_IA64_GENERIC |
78 | unsigned long rsdp_phys; | 73 | unsigned long rsdp_phys; |
79 | struct acpi20_table_rsdp *rsdp; | 74 | struct acpi_table_rsdp *rsdp; |
80 | struct acpi_table_xsdt *xsdt; | 75 | struct acpi_table_xsdt *xsdt; |
81 | struct acpi_table_header *hdr; | 76 | struct acpi_table_header *hdr; |
82 | 77 | ||
@@ -87,16 +82,16 @@ const char *acpi_get_sysname(void) | |||
87 | return "dig"; | 82 | return "dig"; |
88 | } | 83 | } |
89 | 84 | ||
90 | rsdp = (struct acpi20_table_rsdp *)__va(rsdp_phys); | 85 | rsdp = (struct acpi_table_rsdp *)__va(rsdp_phys); |
91 | if (strncmp(rsdp->signature, RSDP_SIG, sizeof(RSDP_SIG) - 1)) { | 86 | if (strncmp(rsdp->signature, ACPI_SIG_RSDP, sizeof(ACPI_SIG_RSDP) - 1)) { |
92 | printk(KERN_ERR | 87 | printk(KERN_ERR |
93 | "ACPI 2.0 RSDP signature incorrect, default to \"dig\"\n"); | 88 | "ACPI 2.0 RSDP signature incorrect, default to \"dig\"\n"); |
94 | return "dig"; | 89 | return "dig"; |
95 | } | 90 | } |
96 | 91 | ||
97 | xsdt = (struct acpi_table_xsdt *)__va(rsdp->xsdt_address); | 92 | xsdt = (struct acpi_table_xsdt *)__va(rsdp->xsdt_physical_address); |
98 | hdr = &xsdt->header; | 93 | hdr = &xsdt->header; |
99 | if (strncmp(hdr->signature, XSDT_SIG, sizeof(XSDT_SIG) - 1)) { | 94 | if (strncmp(hdr->signature, ACPI_SIG_XSDT, sizeof(ACPI_SIG_XSDT) - 1)) { |
100 | printk(KERN_ERR | 95 | printk(KERN_ERR |
101 | "ACPI 2.0 XSDT signature incorrect, default to \"dig\"\n"); | 96 | "ACPI 2.0 XSDT signature incorrect, default to \"dig\"\n"); |
102 | return "dig"; | 97 | return "dig"; |
@@ -169,12 +164,12 @@ struct acpi_table_madt *acpi_madt __initdata; | |||
169 | static u8 has_8259; | 164 | static u8 has_8259; |
170 | 165 | ||
171 | static int __init | 166 | static int __init |
172 | acpi_parse_lapic_addr_ovr(acpi_table_entry_header * header, | 167 | acpi_parse_lapic_addr_ovr(struct acpi_subtable_header * header, |
173 | const unsigned long end) | 168 | const unsigned long end) |
174 | { | 169 | { |
175 | struct acpi_table_lapic_addr_ovr *lapic; | 170 | struct acpi_madt_local_apic_override *lapic; |
176 | 171 | ||
177 | lapic = (struct acpi_table_lapic_addr_ovr *)header; | 172 | lapic = (struct acpi_madt_local_apic_override *)header; |
178 | 173 | ||
179 | if (BAD_MADT_ENTRY(lapic, end)) | 174 | if (BAD_MADT_ENTRY(lapic, end)) |
180 | return -EINVAL; | 175 | return -EINVAL; |
@@ -187,22 +182,19 @@ acpi_parse_lapic_addr_ovr(acpi_table_entry_header * header, | |||
187 | } | 182 | } |
188 | 183 | ||
189 | static int __init | 184 | static int __init |
190 | acpi_parse_lsapic(acpi_table_entry_header * header, const unsigned long end) | 185 | acpi_parse_lsapic(struct acpi_subtable_header * header, const unsigned long end) |
191 | { | 186 | { |
192 | struct acpi_table_lsapic *lsapic; | 187 | struct acpi_madt_local_sapic *lsapic; |
193 | 188 | ||
194 | lsapic = (struct acpi_table_lsapic *)header; | 189 | lsapic = (struct acpi_madt_local_sapic *)header; |
195 | 190 | ||
196 | if (BAD_MADT_ENTRY(lsapic, end)) | 191 | /*Skip BAD_MADT_ENTRY check, as lsapic size could vary */ |
197 | return -EINVAL; | ||
198 | 192 | ||
199 | if (lsapic->flags.enabled) { | 193 | if (lsapic->lapic_flags & ACPI_MADT_ENABLED) { |
200 | #ifdef CONFIG_SMP | 194 | #ifdef CONFIG_SMP |
201 | smp_boot_data.cpu_phys_id[available_cpus] = | 195 | smp_boot_data.cpu_phys_id[available_cpus] = |
202 | (lsapic->id << 8) | lsapic->eid; | 196 | (lsapic->id << 8) | lsapic->eid; |
203 | #endif | 197 | #endif |
204 | ia64_acpiid_to_sapicid[lsapic->acpi_id] = | ||
205 | (lsapic->id << 8) | lsapic->eid; | ||
206 | ++available_cpus; | 198 | ++available_cpus; |
207 | } | 199 | } |
208 | 200 | ||
@@ -211,11 +203,11 @@ acpi_parse_lsapic(acpi_table_entry_header * header, const unsigned long end) | |||
211 | } | 203 | } |
212 | 204 | ||
213 | static int __init | 205 | static int __init |
214 | acpi_parse_lapic_nmi(acpi_table_entry_header * header, const unsigned long end) | 206 | acpi_parse_lapic_nmi(struct acpi_subtable_header * header, const unsigned long end) |
215 | { | 207 | { |
216 | struct acpi_table_lapic_nmi *lacpi_nmi; | 208 | struct acpi_madt_local_apic_nmi *lacpi_nmi; |
217 | 209 | ||
218 | lacpi_nmi = (struct acpi_table_lapic_nmi *)header; | 210 | lacpi_nmi = (struct acpi_madt_local_apic_nmi *)header; |
219 | 211 | ||
220 | if (BAD_MADT_ENTRY(lacpi_nmi, end)) | 212 | if (BAD_MADT_ENTRY(lacpi_nmi, end)) |
221 | return -EINVAL; | 213 | return -EINVAL; |
@@ -225,11 +217,11 @@ acpi_parse_lapic_nmi(acpi_table_entry_header * header, const unsigned long end) | |||
225 | } | 217 | } |
226 | 218 | ||
227 | static int __init | 219 | static int __init |
228 | acpi_parse_iosapic(acpi_table_entry_header * header, const unsigned long end) | 220 | acpi_parse_iosapic(struct acpi_subtable_header * header, const unsigned long end) |
229 | { | 221 | { |
230 | struct acpi_table_iosapic *iosapic; | 222 | struct acpi_madt_io_sapic *iosapic; |
231 | 223 | ||
232 | iosapic = (struct acpi_table_iosapic *)header; | 224 | iosapic = (struct acpi_madt_io_sapic *)header; |
233 | 225 | ||
234 | if (BAD_MADT_ENTRY(iosapic, end)) | 226 | if (BAD_MADT_ENTRY(iosapic, end)) |
235 | return -EINVAL; | 227 | return -EINVAL; |
@@ -240,13 +232,13 @@ acpi_parse_iosapic(acpi_table_entry_header * header, const unsigned long end) | |||
240 | static unsigned int __initdata acpi_madt_rev; | 232 | static unsigned int __initdata acpi_madt_rev; |
241 | 233 | ||
242 | static int __init | 234 | static int __init |
243 | acpi_parse_plat_int_src(acpi_table_entry_header * header, | 235 | acpi_parse_plat_int_src(struct acpi_subtable_header * header, |
244 | const unsigned long end) | 236 | const unsigned long end) |
245 | { | 237 | { |
246 | struct acpi_table_plat_int_src *plintsrc; | 238 | struct acpi_madt_interrupt_source *plintsrc; |
247 | int vector; | 239 | int vector; |
248 | 240 | ||
249 | plintsrc = (struct acpi_table_plat_int_src *)header; | 241 | plintsrc = (struct acpi_madt_interrupt_source *)header; |
250 | 242 | ||
251 | if (BAD_MADT_ENTRY(plintsrc, end)) | 243 | if (BAD_MADT_ENTRY(plintsrc, end)) |
252 | return -EINVAL; | 244 | return -EINVAL; |
@@ -257,19 +249,19 @@ acpi_parse_plat_int_src(acpi_table_entry_header * header, | |||
257 | */ | 249 | */ |
258 | vector = iosapic_register_platform_intr(plintsrc->type, | 250 | vector = iosapic_register_platform_intr(plintsrc->type, |
259 | plintsrc->global_irq, | 251 | plintsrc->global_irq, |
260 | plintsrc->iosapic_vector, | 252 | plintsrc->io_sapic_vector, |
261 | plintsrc->eid, | 253 | plintsrc->eid, |
262 | plintsrc->id, | 254 | plintsrc->id, |
263 | (plintsrc->flags.polarity == | 255 | ((plintsrc->inti_flags & ACPI_MADT_POLARITY_MASK) == |
264 | 1) ? IOSAPIC_POL_HIGH : | 256 | ACPI_MADT_POLARITY_ACTIVE_HIGH) ? |
265 | IOSAPIC_POL_LOW, | 257 | IOSAPIC_POL_HIGH : IOSAPIC_POL_LOW, |
266 | (plintsrc->flags.trigger == | 258 | ((plintsrc->inti_flags & ACPI_MADT_TRIGGER_MASK) == |
267 | 1) ? IOSAPIC_EDGE : | 259 | ACPI_MADT_TRIGGER_EDGE) ? |
268 | IOSAPIC_LEVEL); | 260 | IOSAPIC_EDGE : IOSAPIC_LEVEL); |
269 | 261 | ||
270 | platform_intr_list[plintsrc->type] = vector; | 262 | platform_intr_list[plintsrc->type] = vector; |
271 | if (acpi_madt_rev > 1) { | 263 | if (acpi_madt_rev > 1) { |
272 | acpi_cpei_override = plintsrc->plint_flags.cpei_override_flag; | 264 | acpi_cpei_override = plintsrc->flags & ACPI_MADT_CPEI_OVERRIDE; |
273 | } | 265 | } |
274 | 266 | ||
275 | /* | 267 | /* |
@@ -324,30 +316,32 @@ unsigned int get_cpei_target_cpu(void) | |||
324 | } | 316 | } |
325 | 317 | ||
326 | static int __init | 318 | static int __init |
327 | acpi_parse_int_src_ovr(acpi_table_entry_header * header, | 319 | acpi_parse_int_src_ovr(struct acpi_subtable_header * header, |
328 | const unsigned long end) | 320 | const unsigned long end) |
329 | { | 321 | { |
330 | struct acpi_table_int_src_ovr *p; | 322 | struct acpi_madt_interrupt_override *p; |
331 | 323 | ||
332 | p = (struct acpi_table_int_src_ovr *)header; | 324 | p = (struct acpi_madt_interrupt_override *)header; |
333 | 325 | ||
334 | if (BAD_MADT_ENTRY(p, end)) | 326 | if (BAD_MADT_ENTRY(p, end)) |
335 | return -EINVAL; | 327 | return -EINVAL; |
336 | 328 | ||
337 | iosapic_override_isa_irq(p->bus_irq, p->global_irq, | 329 | iosapic_override_isa_irq(p->source_irq, p->global_irq, |
338 | (p->flags.polarity == | 330 | ((p->inti_flags & ACPI_MADT_POLARITY_MASK) == |
339 | 1) ? IOSAPIC_POL_HIGH : IOSAPIC_POL_LOW, | 331 | ACPI_MADT_POLARITY_ACTIVE_HIGH) ? |
340 | (p->flags.trigger == | 332 | IOSAPIC_POL_HIGH : IOSAPIC_POL_LOW, |
341 | 1) ? IOSAPIC_EDGE : IOSAPIC_LEVEL); | 333 | ((p->inti_flags & ACPI_MADT_TRIGGER_MASK) == |
334 | ACPI_MADT_TRIGGER_EDGE) ? | ||
335 | IOSAPIC_EDGE : IOSAPIC_LEVEL); | ||
342 | return 0; | 336 | return 0; |
343 | } | 337 | } |
344 | 338 | ||
345 | static int __init | 339 | static int __init |
346 | acpi_parse_nmi_src(acpi_table_entry_header * header, const unsigned long end) | 340 | acpi_parse_nmi_src(struct acpi_subtable_header * header, const unsigned long end) |
347 | { | 341 | { |
348 | struct acpi_table_nmi_src *nmi_src; | 342 | struct acpi_madt_nmi_source *nmi_src; |
349 | 343 | ||
350 | nmi_src = (struct acpi_table_nmi_src *)header; | 344 | nmi_src = (struct acpi_madt_nmi_source *)header; |
351 | 345 | ||
352 | if (BAD_MADT_ENTRY(nmi_src, end)) | 346 | if (BAD_MADT_ENTRY(nmi_src, end)) |
353 | return -EINVAL; | 347 | return -EINVAL; |
@@ -371,12 +365,12 @@ static void __init acpi_madt_oem_check(char *oem_id, char *oem_table_id) | |||
371 | } | 365 | } |
372 | } | 366 | } |
373 | 367 | ||
374 | static int __init acpi_parse_madt(unsigned long phys_addr, unsigned long size) | 368 | static int __init acpi_parse_madt(struct acpi_table_header *table) |
375 | { | 369 | { |
376 | if (!phys_addr || !size) | 370 | if (!table) |
377 | return -EINVAL; | 371 | return -EINVAL; |
378 | 372 | ||
379 | acpi_madt = (struct acpi_table_madt *)__va(phys_addr); | 373 | acpi_madt = (struct acpi_table_madt *)table; |
380 | 374 | ||
381 | acpi_madt_rev = acpi_madt->header.revision; | 375 | acpi_madt_rev = acpi_madt->header.revision; |
382 | 376 | ||
@@ -384,14 +378,14 @@ static int __init acpi_parse_madt(unsigned long phys_addr, unsigned long size) | |||
384 | #ifdef CONFIG_ITANIUM | 378 | #ifdef CONFIG_ITANIUM |
385 | has_8259 = 1; /* Firmware on old Itanium systems is broken */ | 379 | has_8259 = 1; /* Firmware on old Itanium systems is broken */ |
386 | #else | 380 | #else |
387 | has_8259 = acpi_madt->flags.pcat_compat; | 381 | has_8259 = acpi_madt->flags & ACPI_MADT_PCAT_COMPAT; |
388 | #endif | 382 | #endif |
389 | iosapic_system_init(has_8259); | 383 | iosapic_system_init(has_8259); |
390 | 384 | ||
391 | /* Get base address of IPI Message Block */ | 385 | /* Get base address of IPI Message Block */ |
392 | 386 | ||
393 | if (acpi_madt->lapic_address) | 387 | if (acpi_madt->address) |
394 | ipi_base_addr = ioremap(acpi_madt->lapic_address, 0); | 388 | ipi_base_addr = ioremap(acpi_madt->address, 0); |
395 | 389 | ||
396 | printk(KERN_INFO PREFIX "Local APIC address %p\n", ipi_base_addr); | 390 | printk(KERN_INFO PREFIX "Local APIC address %p\n", ipi_base_addr); |
397 | 391 | ||
@@ -413,23 +407,24 @@ static u32 __devinitdata pxm_flag[PXM_FLAG_LEN]; | |||
413 | #define pxm_bit_test(bit) (test_bit(bit,(void *)pxm_flag)) | 407 | #define pxm_bit_test(bit) (test_bit(bit,(void *)pxm_flag)) |
414 | static struct acpi_table_slit __initdata *slit_table; | 408 | static struct acpi_table_slit __initdata *slit_table; |
415 | 409 | ||
416 | static int get_processor_proximity_domain(struct acpi_table_processor_affinity *pa) | 410 | static int get_processor_proximity_domain(struct acpi_srat_cpu_affinity *pa) |
417 | { | 411 | { |
418 | int pxm; | 412 | int pxm; |
419 | 413 | ||
420 | pxm = pa->proximity_domain; | 414 | pxm = pa->proximity_domain_lo; |
421 | if (ia64_platform_is("sn2")) | 415 | if (ia64_platform_is("sn2")) |
422 | pxm += pa->reserved[0] << 8; | 416 | pxm += pa->proximity_domain_hi[0] << 8; |
423 | return pxm; | 417 | return pxm; |
424 | } | 418 | } |
425 | 419 | ||
426 | static int get_memory_proximity_domain(struct acpi_table_memory_affinity *ma) | 420 | static int get_memory_proximity_domain(struct acpi_srat_mem_affinity *ma) |
427 | { | 421 | { |
428 | int pxm; | 422 | int pxm; |
429 | 423 | ||
430 | pxm = ma->proximity_domain; | 424 | pxm = ma->proximity_domain; |
431 | if (ia64_platform_is("sn2")) | 425 | if (!ia64_platform_is("sn2")) |
432 | pxm += ma->reserved1[0] << 8; | 426 | pxm &= 0xff; |
427 | |||
433 | return pxm; | 428 | return pxm; |
434 | } | 429 | } |
435 | 430 | ||
@@ -442,7 +437,7 @@ void __init acpi_numa_slit_init(struct acpi_table_slit *slit) | |||
442 | u32 len; | 437 | u32 len; |
443 | 438 | ||
444 | len = sizeof(struct acpi_table_header) + 8 | 439 | len = sizeof(struct acpi_table_header) + 8 |
445 | + slit->localities * slit->localities; | 440 | + slit->locality_count * slit->locality_count; |
446 | if (slit->header.length != len) { | 441 | if (slit->header.length != len) { |
447 | printk(KERN_ERR | 442 | printk(KERN_ERR |
448 | "ACPI 2.0 SLIT: size mismatch: %d expected, %d actual\n", | 443 | "ACPI 2.0 SLIT: size mismatch: %d expected, %d actual\n", |
@@ -454,11 +449,11 @@ void __init acpi_numa_slit_init(struct acpi_table_slit *slit) | |||
454 | } | 449 | } |
455 | 450 | ||
456 | void __init | 451 | void __init |
457 | acpi_numa_processor_affinity_init(struct acpi_table_processor_affinity *pa) | 452 | acpi_numa_processor_affinity_init(struct acpi_srat_cpu_affinity *pa) |
458 | { | 453 | { |
459 | int pxm; | 454 | int pxm; |
460 | 455 | ||
461 | if (!pa->flags.enabled) | 456 | if (!(pa->flags & ACPI_SRAT_CPU_ENABLED)) |
462 | return; | 457 | return; |
463 | 458 | ||
464 | pxm = get_processor_proximity_domain(pa); | 459 | pxm = get_processor_proximity_domain(pa); |
@@ -467,14 +462,14 @@ acpi_numa_processor_affinity_init(struct acpi_table_processor_affinity *pa) | |||
467 | pxm_bit_set(pxm); | 462 | pxm_bit_set(pxm); |
468 | 463 | ||
469 | node_cpuid[srat_num_cpus].phys_id = | 464 | node_cpuid[srat_num_cpus].phys_id = |
470 | (pa->apic_id << 8) | (pa->lsapic_eid); | 465 | (pa->apic_id << 8) | (pa->local_sapic_eid); |
471 | /* nid should be overridden as logical node id later */ | 466 | /* nid should be overridden as logical node id later */ |
472 | node_cpuid[srat_num_cpus].nid = pxm; | 467 | node_cpuid[srat_num_cpus].nid = pxm; |
473 | srat_num_cpus++; | 468 | srat_num_cpus++; |
474 | } | 469 | } |
475 | 470 | ||
476 | void __init | 471 | void __init |
477 | acpi_numa_memory_affinity_init(struct acpi_table_memory_affinity *ma) | 472 | acpi_numa_memory_affinity_init(struct acpi_srat_mem_affinity *ma) |
478 | { | 473 | { |
479 | unsigned long paddr, size; | 474 | unsigned long paddr, size; |
480 | int pxm; | 475 | int pxm; |
@@ -483,13 +478,11 @@ acpi_numa_memory_affinity_init(struct acpi_table_memory_affinity *ma) | |||
483 | pxm = get_memory_proximity_domain(ma); | 478 | pxm = get_memory_proximity_domain(ma); |
484 | 479 | ||
485 | /* fill node memory chunk structure */ | 480 | /* fill node memory chunk structure */ |
486 | paddr = ma->base_addr_hi; | 481 | paddr = ma->base_address; |
487 | paddr = (paddr << 32) | ma->base_addr_lo; | 482 | size = ma->length; |
488 | size = ma->length_hi; | ||
489 | size = (size << 32) | ma->length_lo; | ||
490 | 483 | ||
491 | /* Ignore disabled entries */ | 484 | /* Ignore disabled entries */ |
492 | if (!ma->flags.enabled) | 485 | if (!(ma->flags & ACPI_SRAT_MEM_ENABLED)) |
493 | return; | 486 | return; |
494 | 487 | ||
495 | /* record this node in proximity bitmap */ | 488 | /* record this node in proximity bitmap */ |
@@ -560,16 +553,16 @@ void __init acpi_numa_arch_fixup(void) | |||
560 | if (!slit_table) | 553 | if (!slit_table) |
561 | return; | 554 | return; |
562 | memset(numa_slit, -1, sizeof(numa_slit)); | 555 | memset(numa_slit, -1, sizeof(numa_slit)); |
563 | for (i = 0; i < slit_table->localities; i++) { | 556 | for (i = 0; i < slit_table->locality_count; i++) { |
564 | if (!pxm_bit_test(i)) | 557 | if (!pxm_bit_test(i)) |
565 | continue; | 558 | continue; |
566 | node_from = pxm_to_node(i); | 559 | node_from = pxm_to_node(i); |
567 | for (j = 0; j < slit_table->localities; j++) { | 560 | for (j = 0; j < slit_table->locality_count; j++) { |
568 | if (!pxm_bit_test(j)) | 561 | if (!pxm_bit_test(j)) |
569 | continue; | 562 | continue; |
570 | node_to = pxm_to_node(j); | 563 | node_to = pxm_to_node(j); |
571 | node_distance(node_from, node_to) = | 564 | node_distance(node_from, node_to) = |
572 | slit_table->entry[i * slit_table->localities + j]; | 565 | slit_table->entry[i * slit_table->locality_count + j]; |
573 | } | 566 | } |
574 | } | 567 | } |
575 | 568 | ||
@@ -617,21 +610,21 @@ void acpi_unregister_gsi(u32 gsi) | |||
617 | 610 | ||
618 | EXPORT_SYMBOL(acpi_unregister_gsi); | 611 | EXPORT_SYMBOL(acpi_unregister_gsi); |
619 | 612 | ||
620 | static int __init acpi_parse_fadt(unsigned long phys_addr, unsigned long size) | 613 | static int __init acpi_parse_fadt(struct acpi_table_header *table) |
621 | { | 614 | { |
622 | struct acpi_table_header *fadt_header; | 615 | struct acpi_table_header *fadt_header; |
623 | struct fadt_descriptor *fadt; | 616 | struct acpi_table_fadt *fadt; |
624 | 617 | ||
625 | if (!phys_addr || !size) | 618 | if (!table) |
626 | return -EINVAL; | 619 | return -EINVAL; |
627 | 620 | ||
628 | fadt_header = (struct acpi_table_header *)__va(phys_addr); | 621 | fadt_header = (struct acpi_table_header *)table; |
629 | if (fadt_header->revision != 3) | 622 | if (fadt_header->revision != 3) |
630 | return -ENODEV; /* Only deal with ACPI 2.0 FADT */ | 623 | return -ENODEV; /* Only deal with ACPI 2.0 FADT */ |
631 | 624 | ||
632 | fadt = (struct fadt_descriptor *)fadt_header; | 625 | fadt = (struct acpi_table_fadt *)fadt_header; |
633 | 626 | ||
634 | acpi_register_gsi(fadt->sci_int, ACPI_LEVEL_SENSITIVE, ACPI_ACTIVE_LOW); | 627 | acpi_register_gsi(fadt->sci_interrupt, ACPI_LEVEL_SENSITIVE, ACPI_ACTIVE_LOW); |
635 | return 0; | 628 | return 0; |
636 | } | 629 | } |
637 | 630 | ||
@@ -658,7 +651,7 @@ int __init acpi_boot_init(void) | |||
658 | * information -- the successor to MPS tables. | 651 | * information -- the successor to MPS tables. |
659 | */ | 652 | */ |
660 | 653 | ||
661 | if (acpi_table_parse(ACPI_APIC, acpi_parse_madt) < 1) { | 654 | if (acpi_table_parse(ACPI_SIG_MADT, acpi_parse_madt) < 1) { |
662 | printk(KERN_ERR PREFIX "Can't find MADT\n"); | 655 | printk(KERN_ERR PREFIX "Can't find MADT\n"); |
663 | goto skip_madt; | 656 | goto skip_madt; |
664 | } | 657 | } |
@@ -666,40 +659,40 @@ int __init acpi_boot_init(void) | |||
666 | /* Local APIC */ | 659 | /* Local APIC */ |
667 | 660 | ||
668 | if (acpi_table_parse_madt | 661 | if (acpi_table_parse_madt |
669 | (ACPI_MADT_LAPIC_ADDR_OVR, acpi_parse_lapic_addr_ovr, 0) < 0) | 662 | (ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE, acpi_parse_lapic_addr_ovr, 0) < 0) |
670 | printk(KERN_ERR PREFIX | 663 | printk(KERN_ERR PREFIX |
671 | "Error parsing LAPIC address override entry\n"); | 664 | "Error parsing LAPIC address override entry\n"); |
672 | 665 | ||
673 | if (acpi_table_parse_madt(ACPI_MADT_LSAPIC, acpi_parse_lsapic, NR_CPUS) | 666 | if (acpi_table_parse_madt(ACPI_MADT_TYPE_LOCAL_SAPIC, acpi_parse_lsapic, NR_CPUS) |
674 | < 1) | 667 | < 1) |
675 | printk(KERN_ERR PREFIX | 668 | printk(KERN_ERR PREFIX |
676 | "Error parsing MADT - no LAPIC entries\n"); | 669 | "Error parsing MADT - no LAPIC entries\n"); |
677 | 670 | ||
678 | if (acpi_table_parse_madt(ACPI_MADT_LAPIC_NMI, acpi_parse_lapic_nmi, 0) | 671 | if (acpi_table_parse_madt(ACPI_MADT_TYPE_LOCAL_APIC_NMI, acpi_parse_lapic_nmi, 0) |
679 | < 0) | 672 | < 0) |
680 | printk(KERN_ERR PREFIX "Error parsing LAPIC NMI entry\n"); | 673 | printk(KERN_ERR PREFIX "Error parsing LAPIC NMI entry\n"); |
681 | 674 | ||
682 | /* I/O APIC */ | 675 | /* I/O APIC */ |
683 | 676 | ||
684 | if (acpi_table_parse_madt | 677 | if (acpi_table_parse_madt |
685 | (ACPI_MADT_IOSAPIC, acpi_parse_iosapic, NR_IOSAPICS) < 1) | 678 | (ACPI_MADT_TYPE_IO_SAPIC, acpi_parse_iosapic, NR_IOSAPICS) < 1) |
686 | printk(KERN_ERR PREFIX | 679 | printk(KERN_ERR PREFIX |
687 | "Error parsing MADT - no IOSAPIC entries\n"); | 680 | "Error parsing MADT - no IOSAPIC entries\n"); |
688 | 681 | ||
689 | /* System-Level Interrupt Routing */ | 682 | /* System-Level Interrupt Routing */ |
690 | 683 | ||
691 | if (acpi_table_parse_madt | 684 | if (acpi_table_parse_madt |
692 | (ACPI_MADT_PLAT_INT_SRC, acpi_parse_plat_int_src, | 685 | (ACPI_MADT_TYPE_INTERRUPT_SOURCE, acpi_parse_plat_int_src, |
693 | ACPI_MAX_PLATFORM_INTERRUPTS) < 0) | 686 | ACPI_MAX_PLATFORM_INTERRUPTS) < 0) |
694 | printk(KERN_ERR PREFIX | 687 | printk(KERN_ERR PREFIX |
695 | "Error parsing platform interrupt source entry\n"); | 688 | "Error parsing platform interrupt source entry\n"); |
696 | 689 | ||
697 | if (acpi_table_parse_madt | 690 | if (acpi_table_parse_madt |
698 | (ACPI_MADT_INT_SRC_OVR, acpi_parse_int_src_ovr, 0) < 0) | 691 | (ACPI_MADT_TYPE_INTERRUPT_OVERRIDE, acpi_parse_int_src_ovr, 0) < 0) |
699 | printk(KERN_ERR PREFIX | 692 | printk(KERN_ERR PREFIX |
700 | "Error parsing interrupt source overrides entry\n"); | 693 | "Error parsing interrupt source overrides entry\n"); |
701 | 694 | ||
702 | if (acpi_table_parse_madt(ACPI_MADT_NMI_SRC, acpi_parse_nmi_src, 0) < 0) | 695 | if (acpi_table_parse_madt(ACPI_MADT_TYPE_NMI_SOURCE, acpi_parse_nmi_src, 0) < 0) |
703 | printk(KERN_ERR PREFIX "Error parsing NMI SRC entry\n"); | 696 | printk(KERN_ERR PREFIX "Error parsing NMI SRC entry\n"); |
704 | skip_madt: | 697 | skip_madt: |
705 | 698 | ||
@@ -709,7 +702,7 @@ int __init acpi_boot_init(void) | |||
709 | * gets interrupts such as power and sleep buttons. If it's not | 702 | * gets interrupts such as power and sleep buttons. If it's not |
710 | * on a Legacy interrupt, it needs to be setup. | 703 | * on a Legacy interrupt, it needs to be setup. |
711 | */ | 704 | */ |
712 | if (acpi_table_parse(ACPI_FADT, acpi_parse_fadt) < 1) | 705 | if (acpi_table_parse(ACPI_SIG_FADT, acpi_parse_fadt) < 1) |
713 | printk(KERN_ERR PREFIX "Can't find FADT\n"); | 706 | printk(KERN_ERR PREFIX "Can't find FADT\n"); |
714 | 707 | ||
715 | #ifdef CONFIG_SMP | 708 | #ifdef CONFIG_SMP |
@@ -842,7 +835,7 @@ int acpi_map_lsapic(acpi_handle handle, int *pcpu) | |||
842 | { | 835 | { |
843 | struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; | 836 | struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; |
844 | union acpi_object *obj; | 837 | union acpi_object *obj; |
845 | struct acpi_table_lsapic *lsapic; | 838 | struct acpi_madt_local_sapic *lsapic; |
846 | cpumask_t tmp_map; | 839 | cpumask_t tmp_map; |
847 | long physid; | 840 | long physid; |
848 | int cpu; | 841 | int cpu; |
@@ -854,16 +847,16 @@ int acpi_map_lsapic(acpi_handle handle, int *pcpu) | |||
854 | return -EINVAL; | 847 | return -EINVAL; |
855 | 848 | ||
856 | obj = buffer.pointer; | 849 | obj = buffer.pointer; |
857 | if (obj->type != ACPI_TYPE_BUFFER || | 850 | if (obj->type != ACPI_TYPE_BUFFER) |
858 | obj->buffer.length < sizeof(*lsapic)) { | 851 | { |
859 | kfree(buffer.pointer); | 852 | kfree(buffer.pointer); |
860 | return -EINVAL; | 853 | return -EINVAL; |
861 | } | 854 | } |
862 | 855 | ||
863 | lsapic = (struct acpi_table_lsapic *)obj->buffer.pointer; | 856 | lsapic = (struct acpi_madt_local_sapic *)obj->buffer.pointer; |
864 | 857 | ||
865 | if ((lsapic->header.type != ACPI_MADT_LSAPIC) || | 858 | if ((lsapic->header.type != ACPI_MADT_TYPE_LOCAL_SAPIC) || |
866 | (!lsapic->flags.enabled)) { | 859 | (!lsapic->lapic_flags & ACPI_MADT_ENABLED)) { |
867 | kfree(buffer.pointer); | 860 | kfree(buffer.pointer); |
868 | return -EINVAL; | 861 | return -EINVAL; |
869 | } | 862 | } |
@@ -883,7 +876,6 @@ int acpi_map_lsapic(acpi_handle handle, int *pcpu) | |||
883 | 876 | ||
884 | cpu_set(cpu, cpu_present_map); | 877 | cpu_set(cpu, cpu_present_map); |
885 | ia64_cpu_to_sapicid[cpu] = physid; | 878 | ia64_cpu_to_sapicid[cpu] = physid; |
886 | ia64_acpiid_to_sapicid[lsapic->acpi_id] = ia64_cpu_to_sapicid[cpu]; | ||
887 | 879 | ||
888 | *pcpu = cpu; | 880 | *pcpu = cpu; |
889 | return (0); | 881 | return (0); |
@@ -893,14 +885,6 @@ EXPORT_SYMBOL(acpi_map_lsapic); | |||
893 | 885 | ||
894 | int acpi_unmap_lsapic(int cpu) | 886 | int acpi_unmap_lsapic(int cpu) |
895 | { | 887 | { |
896 | int i; | ||
897 | |||
898 | for (i = 0; i < MAX_SAPICS; i++) { | ||
899 | if (ia64_acpiid_to_sapicid[i] == ia64_cpu_to_sapicid[cpu]) { | ||
900 | ia64_acpiid_to_sapicid[i] = -1; | ||
901 | break; | ||
902 | } | ||
903 | } | ||
904 | ia64_cpu_to_sapicid[cpu] = -1; | 888 | ia64_cpu_to_sapicid[cpu] = -1; |
905 | cpu_clear(cpu, cpu_present_map); | 889 | cpu_clear(cpu, cpu_present_map); |
906 | 890 | ||
@@ -920,7 +904,7 @@ acpi_map_iosapic(acpi_handle handle, u32 depth, void *context, void **ret) | |||
920 | { | 904 | { |
921 | struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; | 905 | struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; |
922 | union acpi_object *obj; | 906 | union acpi_object *obj; |
923 | struct acpi_table_iosapic *iosapic; | 907 | struct acpi_madt_io_sapic *iosapic; |
924 | unsigned int gsi_base; | 908 | unsigned int gsi_base; |
925 | int pxm, node; | 909 | int pxm, node; |
926 | 910 | ||
@@ -938,9 +922,9 @@ acpi_map_iosapic(acpi_handle handle, u32 depth, void *context, void **ret) | |||
938 | return AE_OK; | 922 | return AE_OK; |
939 | } | 923 | } |
940 | 924 | ||
941 | iosapic = (struct acpi_table_iosapic *)obj->buffer.pointer; | 925 | iosapic = (struct acpi_madt_io_sapic *)obj->buffer.pointer; |
942 | 926 | ||
943 | if (iosapic->header.type != ACPI_MADT_IOSAPIC) { | 927 | if (iosapic->header.type != ACPI_MADT_TYPE_IO_SAPIC) { |
944 | kfree(buffer.pointer); | 928 | kfree(buffer.pointer); |
945 | return AE_OK; | 929 | return AE_OK; |
946 | } | 930 | } |
diff --git a/arch/ia64/sn/kernel/io_acpi_init.c b/arch/ia64/sn/kernel/io_acpi_init.c index cb96b4ea7df6..8c331ca6e5c9 100644 --- a/arch/ia64/sn/kernel/io_acpi_init.c +++ b/arch/ia64/sn/kernel/io_acpi_init.c | |||
@@ -13,6 +13,7 @@ | |||
13 | #include <asm/sn/sn_sal.h> | 13 | #include <asm/sn/sn_sal.h> |
14 | #include "xtalk/hubdev.h" | 14 | #include "xtalk/hubdev.h" |
15 | #include <linux/acpi.h> | 15 | #include <linux/acpi.h> |
16 | #include <acpi/acnamesp.h> | ||
16 | 17 | ||
17 | 18 | ||
18 | /* | 19 | /* |
@@ -31,6 +32,12 @@ struct acpi_vendor_uuid sn_uuid = { | |||
31 | 0xa2, 0x7c, 0x08, 0x00, 0x69, 0x13, 0xea, 0x51 }, | 32 | 0xa2, 0x7c, 0x08, 0x00, 0x69, 0x13, 0xea, 0x51 }, |
32 | }; | 33 | }; |
33 | 34 | ||
35 | struct sn_pcidev_match { | ||
36 | u8 bus; | ||
37 | unsigned int devfn; | ||
38 | acpi_handle handle; | ||
39 | }; | ||
40 | |||
34 | /* | 41 | /* |
35 | * Perform the early IO init in PROM. | 42 | * Perform the early IO init in PROM. |
36 | */ | 43 | */ |
@@ -119,9 +126,11 @@ sn_get_bussoft_ptr(struct pci_bus *bus) | |||
119 | status = acpi_get_vendor_resource(handle, METHOD_NAME__CRS, | 126 | status = acpi_get_vendor_resource(handle, METHOD_NAME__CRS, |
120 | &sn_uuid, &buffer); | 127 | &sn_uuid, &buffer); |
121 | if (ACPI_FAILURE(status)) { | 128 | if (ACPI_FAILURE(status)) { |
122 | printk(KERN_ERR "get_acpi_pcibus_ptr: " | 129 | printk(KERN_ERR "%s: " |
123 | "get_acpi_bussoft_info() failed: %d\n", | 130 | "acpi_get_vendor_resource() failed (0x%x) for: ", |
124 | status); | 131 | __FUNCTION__, status); |
132 | acpi_ns_print_node_pathname(handle, NULL); | ||
133 | printk("\n"); | ||
125 | return NULL; | 134 | return NULL; |
126 | } | 135 | } |
127 | resource = buffer.pointer; | 136 | resource = buffer.pointer; |
@@ -130,8 +139,8 @@ sn_get_bussoft_ptr(struct pci_bus *bus) | |||
130 | if ((vendor->byte_length - sizeof(struct acpi_vendor_uuid)) != | 139 | if ((vendor->byte_length - sizeof(struct acpi_vendor_uuid)) != |
131 | sizeof(struct pcibus_bussoft *)) { | 140 | sizeof(struct pcibus_bussoft *)) { |
132 | printk(KERN_ERR | 141 | printk(KERN_ERR |
133 | "get_acpi_bussoft_ptr: Invalid vendor data " | 142 | "%s: Invalid vendor data length %d\n", |
134 | "length %d\n", vendor->byte_length); | 143 | __FUNCTION__, vendor->byte_length); |
135 | kfree(buffer.pointer); | 144 | kfree(buffer.pointer); |
136 | return NULL; | 145 | return NULL; |
137 | } | 146 | } |
@@ -143,34 +152,254 @@ sn_get_bussoft_ptr(struct pci_bus *bus) | |||
143 | } | 152 | } |
144 | 153 | ||
145 | /* | 154 | /* |
146 | * sn_acpi_bus_fixup | 155 | * sn_extract_device_info - Extract the pcidev_info and the sn_irq_info |
156 | * pointers from the vendor resource using the | ||
157 | * provided acpi handle, and copy the structures | ||
158 | * into the argument buffers. | ||
147 | */ | 159 | */ |
148 | void | 160 | static int |
149 | sn_acpi_bus_fixup(struct pci_bus *bus) | 161 | sn_extract_device_info(acpi_handle handle, struct pcidev_info **pcidev_info, |
162 | struct sn_irq_info **sn_irq_info) | ||
150 | { | 163 | { |
151 | struct pci_dev *pci_dev = NULL; | 164 | u64 addr; |
152 | struct pcibus_bussoft *prom_bussoft_ptr; | 165 | struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; |
153 | extern void sn_common_bus_fixup(struct pci_bus *, | 166 | struct sn_irq_info *irq_info, *irq_info_prom; |
154 | struct pcibus_bussoft *); | 167 | struct pcidev_info *pcidev_ptr, *pcidev_prom_ptr; |
168 | struct acpi_resource *resource; | ||
169 | int ret = 0; | ||
170 | acpi_status status; | ||
171 | struct acpi_resource_vendor_typed *vendor; | ||
155 | 172 | ||
156 | if (!bus->parent) { /* If root bus */ | 173 | /* |
157 | prom_bussoft_ptr = sn_get_bussoft_ptr(bus); | 174 | * The pointer to this device's pcidev_info structure in |
158 | if (prom_bussoft_ptr == NULL) { | 175 | * the PROM, is in the vendor resource. |
176 | */ | ||
177 | status = acpi_get_vendor_resource(handle, METHOD_NAME__CRS, | ||
178 | &sn_uuid, &buffer); | ||
179 | if (ACPI_FAILURE(status)) { | ||
180 | printk(KERN_ERR | ||
181 | "%s: acpi_get_vendor_resource() failed (0x%x) for: ", | ||
182 | __FUNCTION__, status); | ||
183 | acpi_ns_print_node_pathname(handle, NULL); | ||
184 | printk("\n"); | ||
185 | return 1; | ||
186 | } | ||
187 | |||
188 | resource = buffer.pointer; | ||
189 | vendor = &resource->data.vendor_typed; | ||
190 | if ((vendor->byte_length - sizeof(struct acpi_vendor_uuid)) != | ||
191 | sizeof(struct pci_devdev_info *)) { | ||
192 | printk(KERN_ERR | ||
193 | "%s: Invalid vendor data length: %d for: ", | ||
194 | __FUNCTION__, vendor->byte_length); | ||
195 | acpi_ns_print_node_pathname(handle, NULL); | ||
196 | printk("\n"); | ||
197 | ret = 1; | ||
198 | goto exit; | ||
199 | } | ||
200 | |||
201 | pcidev_ptr = kzalloc(sizeof(struct pcidev_info), GFP_KERNEL); | ||
202 | if (!pcidev_ptr) | ||
203 | panic("%s: Unable to alloc memory for pcidev_info", __FUNCTION__); | ||
204 | |||
205 | memcpy(&addr, vendor->byte_data, sizeof(struct pcidev_info *)); | ||
206 | pcidev_prom_ptr = __va(addr); | ||
207 | memcpy(pcidev_ptr, pcidev_prom_ptr, sizeof(struct pcidev_info)); | ||
208 | |||
209 | /* Get the IRQ info */ | ||
210 | irq_info = kzalloc(sizeof(struct sn_irq_info), GFP_KERNEL); | ||
211 | if (!irq_info) | ||
212 | panic("%s: Unable to alloc memory for sn_irq_info", __FUNCTION__); | ||
213 | |||
214 | if (pcidev_ptr->pdi_sn_irq_info) { | ||
215 | irq_info_prom = __va(pcidev_ptr->pdi_sn_irq_info); | ||
216 | memcpy(irq_info, irq_info_prom, sizeof(struct sn_irq_info)); | ||
217 | } | ||
218 | |||
219 | *pcidev_info = pcidev_ptr; | ||
220 | *sn_irq_info = irq_info; | ||
221 | |||
222 | exit: | ||
223 | kfree(buffer.pointer); | ||
224 | return ret; | ||
225 | } | ||
226 | |||
227 | static unsigned int | ||
228 | get_host_devfn(acpi_handle device_handle, acpi_handle rootbus_handle) | ||
229 | { | ||
230 | unsigned long adr; | ||
231 | acpi_handle child; | ||
232 | unsigned int devfn; | ||
233 | int function; | ||
234 | acpi_handle parent; | ||
235 | int slot; | ||
236 | acpi_status status; | ||
237 | |||
238 | /* | ||
239 | * Do an upward search to find the root bus device, and | ||
240 | * obtain the host devfn from the previous child device. | ||
241 | */ | ||
242 | child = device_handle; | ||
243 | while (child) { | ||
244 | status = acpi_get_parent(child, &parent); | ||
245 | if (ACPI_FAILURE(status)) { | ||
246 | printk(KERN_ERR "%s: acpi_get_parent() failed " | ||
247 | "(0x%x) for: ", __FUNCTION__, status); | ||
248 | acpi_ns_print_node_pathname(child, NULL); | ||
249 | printk("\n"); | ||
250 | panic("%s: Unable to find host devfn\n", __FUNCTION__); | ||
251 | } | ||
252 | if (parent == rootbus_handle) | ||
253 | break; | ||
254 | child = parent; | ||
255 | } | ||
256 | if (!child) { | ||
257 | printk(KERN_ERR "%s: Unable to find root bus for: ", | ||
258 | __FUNCTION__); | ||
259 | acpi_ns_print_node_pathname(device_handle, NULL); | ||
260 | printk("\n"); | ||
261 | BUG(); | ||
262 | } | ||
263 | |||
264 | status = acpi_evaluate_integer(child, METHOD_NAME__ADR, NULL, &adr); | ||
265 | if (ACPI_FAILURE(status)) { | ||
266 | printk(KERN_ERR "%s: Unable to get _ADR (0x%x) for: ", | ||
267 | __FUNCTION__, status); | ||
268 | acpi_ns_print_node_pathname(child, NULL); | ||
269 | printk("\n"); | ||
270 | panic("%s: Unable to find host devfn\n", __FUNCTION__); | ||
271 | } | ||
272 | |||
273 | slot = (adr >> 16) & 0xffff; | ||
274 | function = adr & 0xffff; | ||
275 | devfn = PCI_DEVFN(slot, function); | ||
276 | return devfn; | ||
277 | } | ||
278 | |||
279 | /* | ||
280 | * find_matching_device - Callback routine to find the ACPI device | ||
281 | * that matches up with our pci_dev device. | ||
282 | * Matching is done on bus number and devfn. | ||
283 | * To find the bus number for a particular | ||
284 | * ACPI device, we must look at the _BBN method | ||
285 | * of its parent. | ||
286 | */ | ||
287 | static acpi_status | ||
288 | find_matching_device(acpi_handle handle, u32 lvl, void *context, void **rv) | ||
289 | { | ||
290 | unsigned long bbn = -1; | ||
291 | unsigned long adr; | ||
292 | acpi_handle parent = NULL; | ||
293 | acpi_status status; | ||
294 | unsigned int devfn; | ||
295 | int function; | ||
296 | int slot; | ||
297 | struct sn_pcidev_match *info = context; | ||
298 | |||
299 | status = acpi_evaluate_integer(handle, METHOD_NAME__ADR, NULL, | ||
300 | &adr); | ||
301 | if (ACPI_SUCCESS(status)) { | ||
302 | status = acpi_get_parent(handle, &parent); | ||
303 | if (ACPI_FAILURE(status)) { | ||
159 | printk(KERN_ERR | 304 | printk(KERN_ERR |
160 | "sn_pci_fixup_bus: 0x%04x:0x%02x Unable to " | 305 | "%s: acpi_get_parent() failed (0x%x) for: ", |
161 | "obtain prom_bussoft_ptr\n", | 306 | __FUNCTION__, status); |
162 | pci_domain_nr(bus), bus->number); | 307 | acpi_ns_print_node_pathname(handle, NULL); |
163 | return; | 308 | printk("\n"); |
309 | return AE_OK; | ||
310 | } | ||
311 | status = acpi_evaluate_integer(parent, METHOD_NAME__BBN, | ||
312 | NULL, &bbn); | ||
313 | if (ACPI_FAILURE(status)) { | ||
314 | printk(KERN_ERR | ||
315 | "%s: Failed to find _BBN in parent of: ", | ||
316 | __FUNCTION__); | ||
317 | acpi_ns_print_node_pathname(handle, NULL); | ||
318 | printk("\n"); | ||
319 | return AE_OK; | ||
320 | } | ||
321 | |||
322 | slot = (adr >> 16) & 0xffff; | ||
323 | function = adr & 0xffff; | ||
324 | devfn = PCI_DEVFN(slot, function); | ||
325 | if ((info->devfn == devfn) && (info->bus == bbn)) { | ||
326 | /* We have a match! */ | ||
327 | info->handle = handle; | ||
328 | return 1; | ||
164 | } | 329 | } |
165 | sn_common_bus_fixup(bus, prom_bussoft_ptr); | ||
166 | } | 330 | } |
167 | list_for_each_entry(pci_dev, &bus->devices, bus_list) { | 331 | return AE_OK; |
168 | sn_pci_fixup_slot(pci_dev); | 332 | } |
333 | |||
334 | /* | ||
335 | * sn_acpi_get_pcidev_info - Search ACPI namespace for the acpi | ||
336 | * device matching the specified pci_dev, | ||
337 | * and return the pcidev info and irq info. | ||
338 | */ | ||
339 | int | ||
340 | sn_acpi_get_pcidev_info(struct pci_dev *dev, struct pcidev_info **pcidev_info, | ||
341 | struct sn_irq_info **sn_irq_info) | ||
342 | { | ||
343 | unsigned int host_devfn; | ||
344 | struct sn_pcidev_match pcidev_match; | ||
345 | acpi_handle rootbus_handle; | ||
346 | unsigned long segment; | ||
347 | acpi_status status; | ||
348 | |||
349 | rootbus_handle = PCI_CONTROLLER(dev)->acpi_handle; | ||
350 | status = acpi_evaluate_integer(rootbus_handle, METHOD_NAME__SEG, NULL, | ||
351 | &segment); | ||
352 | if (ACPI_SUCCESS(status)) { | ||
353 | if (segment != pci_domain_nr(dev)) { | ||
354 | printk(KERN_ERR | ||
355 | "%s: Segment number mismatch, 0x%lx vs 0x%x for: ", | ||
356 | __FUNCTION__, segment, pci_domain_nr(dev)); | ||
357 | acpi_ns_print_node_pathname(rootbus_handle, NULL); | ||
358 | printk("\n"); | ||
359 | return 1; | ||
360 | } | ||
361 | } else { | ||
362 | printk(KERN_ERR "%s: Unable to get __SEG from: ", | ||
363 | __FUNCTION__); | ||
364 | acpi_ns_print_node_pathname(rootbus_handle, NULL); | ||
365 | printk("\n"); | ||
366 | return 1; | ||
367 | } | ||
368 | |||
369 | /* | ||
370 | * We want to search all devices in this segment/domain | ||
371 | * of the ACPI namespace for the matching ACPI device, | ||
372 | * which holds the pcidev_info pointer in its vendor resource. | ||
373 | */ | ||
374 | pcidev_match.bus = dev->bus->number; | ||
375 | pcidev_match.devfn = dev->devfn; | ||
376 | pcidev_match.handle = NULL; | ||
377 | |||
378 | acpi_walk_namespace(ACPI_TYPE_DEVICE, rootbus_handle, ACPI_UINT32_MAX, | ||
379 | find_matching_device, &pcidev_match, NULL); | ||
380 | |||
381 | if (!pcidev_match.handle) { | ||
382 | printk(KERN_ERR | ||
383 | "%s: Could not find matching ACPI device for %s.\n", | ||
384 | __FUNCTION__, pci_name(dev)); | ||
385 | return 1; | ||
169 | } | 386 | } |
387 | |||
388 | if (sn_extract_device_info(pcidev_match.handle, pcidev_info, sn_irq_info)) | ||
389 | return 1; | ||
390 | |||
391 | /* Build up the pcidev_info.pdi_slot_host_handle */ | ||
392 | host_devfn = get_host_devfn(pcidev_match.handle, rootbus_handle); | ||
393 | (*pcidev_info)->pdi_slot_host_handle = | ||
394 | ((unsigned long) pci_domain_nr(dev) << 40) | | ||
395 | /* bus == 0 */ | ||
396 | host_devfn; | ||
397 | return 0; | ||
170 | } | 398 | } |
171 | 399 | ||
172 | /* | 400 | /* |
173 | * sn_acpi_slot_fixup - Perform any SN specific slot fixup. | 401 | * sn_acpi_slot_fixup - Obtain the pcidev_info and sn_irq_info. |
402 | * Perform any SN specific slot fixup. | ||
174 | * At present there does not appear to be | 403 | * At present there does not appear to be |
175 | * any generic way to handle a ROM image | 404 | * any generic way to handle a ROM image |
176 | * that has been shadowed by the PROM, so | 405 | * that has been shadowed by the PROM, so |
@@ -179,11 +408,18 @@ sn_acpi_bus_fixup(struct pci_bus *bus) | |||
179 | */ | 408 | */ |
180 | 409 | ||
181 | void | 410 | void |
182 | sn_acpi_slot_fixup(struct pci_dev *dev, struct pcidev_info *pcidev_info) | 411 | sn_acpi_slot_fixup(struct pci_dev *dev) |
183 | { | 412 | { |
184 | void __iomem *addr; | 413 | void __iomem *addr; |
414 | struct pcidev_info *pcidev_info = NULL; | ||
415 | struct sn_irq_info *sn_irq_info = NULL; | ||
185 | size_t size; | 416 | size_t size; |
186 | 417 | ||
418 | if (sn_acpi_get_pcidev_info(dev, &pcidev_info, &sn_irq_info)) { | ||
419 | panic("%s: Failure obtaining pcidev_info for %s\n", | ||
420 | __FUNCTION__, pci_name(dev)); | ||
421 | } | ||
422 | |||
187 | if (pcidev_info->pdi_pio_mapped_addr[PCI_ROM_RESOURCE]) { | 423 | if (pcidev_info->pdi_pio_mapped_addr[PCI_ROM_RESOURCE]) { |
188 | /* | 424 | /* |
189 | * A valid ROM image exists and has been shadowed by the | 425 | * A valid ROM image exists and has been shadowed by the |
@@ -200,8 +436,11 @@ sn_acpi_slot_fixup(struct pci_dev *dev, struct pcidev_info *pcidev_info) | |||
200 | (unsigned long) addr + size; | 436 | (unsigned long) addr + size; |
201 | dev->resource[PCI_ROM_RESOURCE].flags |= IORESOURCE_ROM_BIOS_COPY; | 437 | dev->resource[PCI_ROM_RESOURCE].flags |= IORESOURCE_ROM_BIOS_COPY; |
202 | } | 438 | } |
439 | sn_pci_fixup_slot(dev, pcidev_info, sn_irq_info); | ||
203 | } | 440 | } |
204 | 441 | ||
442 | EXPORT_SYMBOL(sn_acpi_slot_fixup); | ||
443 | |||
205 | static struct acpi_driver acpi_sn_hubdev_driver = { | 444 | static struct acpi_driver acpi_sn_hubdev_driver = { |
206 | .name = "SGI HUBDEV Driver", | 445 | .name = "SGI HUBDEV Driver", |
207 | .ids = "SGIHUB,SGITIO", | 446 | .ids = "SGIHUB,SGITIO", |
@@ -212,6 +451,33 @@ static struct acpi_driver acpi_sn_hubdev_driver = { | |||
212 | 451 | ||
213 | 452 | ||
214 | /* | 453 | /* |
454 | * sn_acpi_bus_fixup - Perform SN specific setup of software structs | ||
455 | * (pcibus_bussoft, pcidev_info) and hardware | ||
456 | * registers, for the specified bus and devices under it. | ||
457 | */ | ||
458 | void | ||
459 | sn_acpi_bus_fixup(struct pci_bus *bus) | ||
460 | { | ||
461 | struct pci_dev *pci_dev = NULL; | ||
462 | struct pcibus_bussoft *prom_bussoft_ptr; | ||
463 | |||
464 | if (!bus->parent) { /* If root bus */ | ||
465 | prom_bussoft_ptr = sn_get_bussoft_ptr(bus); | ||
466 | if (prom_bussoft_ptr == NULL) { | ||
467 | printk(KERN_ERR | ||
468 | "%s: 0x%04x:0x%02x Unable to " | ||
469 | "obtain prom_bussoft_ptr\n", | ||
470 | __FUNCTION__, pci_domain_nr(bus), bus->number); | ||
471 | return; | ||
472 | } | ||
473 | sn_common_bus_fixup(bus, prom_bussoft_ptr); | ||
474 | } | ||
475 | list_for_each_entry(pci_dev, &bus->devices, bus_list) { | ||
476 | sn_acpi_slot_fixup(pci_dev); | ||
477 | } | ||
478 | } | ||
479 | |||
480 | /* | ||
215 | * sn_io_acpi_init - PROM has ACPI support for IO, defining at a minimum the | 481 | * sn_io_acpi_init - PROM has ACPI support for IO, defining at a minimum the |
216 | * nodes and root buses in the DSDT. As a result, bus scanning | 482 | * nodes and root buses in the DSDT. As a result, bus scanning |
217 | * will be initiated by the Linux ACPI code. | 483 | * will be initiated by the Linux ACPI code. |
diff --git a/arch/ia64/sn/kernel/io_common.c b/arch/ia64/sn/kernel/io_common.c index d4dd8f4b6b8d..d48bcd83253c 100644 --- a/arch/ia64/sn/kernel/io_common.c +++ b/arch/ia64/sn/kernel/io_common.c | |||
@@ -26,14 +26,10 @@ | |||
26 | #include <linux/acpi.h> | 26 | #include <linux/acpi.h> |
27 | #include <asm/sn/sn2/sn_hwperf.h> | 27 | #include <asm/sn/sn2/sn_hwperf.h> |
28 | #include <asm/sn/acpi.h> | 28 | #include <asm/sn/acpi.h> |
29 | #include "acpi/acglobal.h" | ||
29 | 30 | ||
30 | extern void sn_init_cpei_timer(void); | 31 | extern void sn_init_cpei_timer(void); |
31 | extern void register_sn_procfs(void); | 32 | extern void register_sn_procfs(void); |
32 | extern void sn_acpi_bus_fixup(struct pci_bus *); | ||
33 | extern void sn_bus_fixup(struct pci_bus *); | ||
34 | extern void sn_acpi_slot_fixup(struct pci_dev *, struct pcidev_info *); | ||
35 | extern void sn_more_slot_fixup(struct pci_dev *, struct pcidev_info *); | ||
36 | extern void sn_legacy_pci_window_fixup(struct pci_controller *, u64, u64); | ||
37 | extern void sn_io_acpi_init(void); | 33 | extern void sn_io_acpi_init(void); |
38 | extern void sn_io_init(void); | 34 | extern void sn_io_init(void); |
39 | 35 | ||
@@ -48,6 +44,9 @@ struct sysdata_el { | |||
48 | 44 | ||
49 | int sn_ioif_inited; /* SN I/O infrastructure initialized? */ | 45 | int sn_ioif_inited; /* SN I/O infrastructure initialized? */ |
50 | 46 | ||
47 | int sn_acpi_rev; /* SN ACPI revision */ | ||
48 | EXPORT_SYMBOL_GPL(sn_acpi_rev); | ||
49 | |||
51 | struct sn_pcibus_provider *sn_pci_provider[PCIIO_ASIC_MAX_TYPES]; /* indexed by asic type */ | 50 | struct sn_pcibus_provider *sn_pci_provider[PCIIO_ASIC_MAX_TYPES]; /* indexed by asic type */ |
52 | 51 | ||
53 | /* | 52 | /* |
@@ -99,25 +98,6 @@ sal_get_device_dmaflush_list(u64 nasid, u64 widget_num, u64 device_num, | |||
99 | } | 98 | } |
100 | 99 | ||
101 | /* | 100 | /* |
102 | * Retrieve the pci device information given the bus and device|function number. | ||
103 | */ | ||
104 | static inline u64 | ||
105 | sal_get_pcidev_info(u64 segment, u64 bus_number, u64 devfn, u64 pci_dev, | ||
106 | u64 sn_irq_info) | ||
107 | { | ||
108 | struct ia64_sal_retval ret_stuff; | ||
109 | ret_stuff.status = 0; | ||
110 | ret_stuff.v0 = 0; | ||
111 | |||
112 | SAL_CALL_NOLOCK(ret_stuff, | ||
113 | (u64) SN_SAL_IOIF_GET_PCIDEV_INFO, | ||
114 | (u64) segment, (u64) bus_number, (u64) devfn, | ||
115 | (u64) pci_dev, | ||
116 | sn_irq_info, 0, 0); | ||
117 | return ret_stuff.v0; | ||
118 | } | ||
119 | |||
120 | /* | ||
121 | * sn_pcidev_info_get() - Retrieve the pcidev_info struct for the specified | 101 | * sn_pcidev_info_get() - Retrieve the pcidev_info struct for the specified |
122 | * device. | 102 | * device. |
123 | */ | 103 | */ |
@@ -249,50 +229,25 @@ void sn_pci_unfixup_slot(struct pci_dev *dev) | |||
249 | } | 229 | } |
250 | 230 | ||
251 | /* | 231 | /* |
252 | * sn_pci_fixup_slot() - This routine sets up a slot's resources consistent | 232 | * sn_pci_fixup_slot() |
253 | * with the Linux PCI abstraction layer. Resources | ||
254 | * acquired from our PCI provider include PIO maps | ||
255 | * to BAR space and interrupt objects. | ||
256 | */ | 233 | */ |
257 | void sn_pci_fixup_slot(struct pci_dev *dev) | 234 | void sn_pci_fixup_slot(struct pci_dev *dev, struct pcidev_info *pcidev_info, |
235 | struct sn_irq_info *sn_irq_info) | ||
258 | { | 236 | { |
259 | int segment = pci_domain_nr(dev->bus); | 237 | int segment = pci_domain_nr(dev->bus); |
260 | int status = 0; | ||
261 | struct pcibus_bussoft *bs; | 238 | struct pcibus_bussoft *bs; |
262 | struct pci_bus *host_pci_bus; | 239 | struct pci_bus *host_pci_bus; |
263 | struct pci_dev *host_pci_dev; | 240 | struct pci_dev *host_pci_dev; |
264 | struct pcidev_info *pcidev_info; | 241 | unsigned int bus_no, devfn; |
265 | struct sn_irq_info *sn_irq_info; | ||
266 | unsigned int bus_no, devfn; | ||
267 | 242 | ||
268 | pci_dev_get(dev); /* for the sysdata pointer */ | 243 | pci_dev_get(dev); /* for the sysdata pointer */ |
269 | pcidev_info = kzalloc(sizeof(struct pcidev_info), GFP_KERNEL); | ||
270 | if (!pcidev_info) | ||
271 | BUG(); /* Cannot afford to run out of memory */ | ||
272 | |||
273 | sn_irq_info = kzalloc(sizeof(struct sn_irq_info), GFP_KERNEL); | ||
274 | if (!sn_irq_info) | ||
275 | BUG(); /* Cannot afford to run out of memory */ | ||
276 | |||
277 | /* Call to retrieve pci device information needed by kernel. */ | ||
278 | status = sal_get_pcidev_info((u64) segment, (u64) dev->bus->number, | ||
279 | dev->devfn, | ||
280 | (u64) __pa(pcidev_info), | ||
281 | (u64) __pa(sn_irq_info)); | ||
282 | if (status) | ||
283 | BUG(); /* Cannot get platform pci device information */ | ||
284 | 244 | ||
285 | /* Add pcidev_info to list in pci_controller.platform_data */ | 245 | /* Add pcidev_info to list in pci_controller.platform_data */ |
286 | list_add_tail(&pcidev_info->pdi_list, | 246 | list_add_tail(&pcidev_info->pdi_list, |
287 | &(SN_PLATFORM_DATA(dev->bus)->pcidev_info)); | 247 | &(SN_PLATFORM_DATA(dev->bus)->pcidev_info)); |
288 | |||
289 | if (SN_ACPI_BASE_SUPPORT()) | ||
290 | sn_acpi_slot_fixup(dev, pcidev_info); | ||
291 | else | ||
292 | sn_more_slot_fixup(dev, pcidev_info); | ||
293 | /* | 248 | /* |
294 | * Using the PROMs values for the PCI host bus, get the Linux | 249 | * Using the PROMs values for the PCI host bus, get the Linux |
295 | * PCI host_pci_dev struct and set up host bus linkages | 250 | * PCI host_pci_dev struct and set up host bus linkages |
296 | */ | 251 | */ |
297 | 252 | ||
298 | bus_no = (pcidev_info->pdi_slot_host_handle >> 32) & 0xff; | 253 | bus_no = (pcidev_info->pdi_slot_host_handle >> 32) & 0xff; |
@@ -489,11 +444,6 @@ void sn_generate_path(struct pci_bus *pci_bus, char *address) | |||
489 | sprintf(address, "%s^%d", address, geo_slot(geoid)); | 444 | sprintf(address, "%s^%d", address, geo_slot(geoid)); |
490 | } | 445 | } |
491 | 446 | ||
492 | /* | ||
493 | * sn_pci_fixup_bus() - Perform SN specific setup of software structs | ||
494 | * (pcibus_bussoft, pcidev_info) and hardware | ||
495 | * registers, for the specified bus and devices under it. | ||
496 | */ | ||
497 | void __devinit | 447 | void __devinit |
498 | sn_pci_fixup_bus(struct pci_bus *bus) | 448 | sn_pci_fixup_bus(struct pci_bus *bus) |
499 | { | 449 | { |
@@ -519,6 +469,15 @@ sn_io_early_init(void) | |||
519 | if (!ia64_platform_is("sn2") || IS_RUNNING_ON_FAKE_PROM()) | 469 | if (!ia64_platform_is("sn2") || IS_RUNNING_ON_FAKE_PROM()) |
520 | return 0; | 470 | return 0; |
521 | 471 | ||
472 | /* we set the acpi revision to that of the DSDT table OEM rev. */ | ||
473 | { | ||
474 | struct acpi_table_header *header = NULL; | ||
475 | |||
476 | acpi_get_table_by_index(ACPI_TABLE_INDEX_DSDT, &header); | ||
477 | BUG_ON(header == NULL); | ||
478 | sn_acpi_rev = header->oem_revision; | ||
479 | } | ||
480 | |||
522 | /* | 481 | /* |
523 | * prime sn_pci_provider[]. Individial provider init routines will | 482 | * prime sn_pci_provider[]. Individial provider init routines will |
524 | * override their respective default entries. | 483 | * override their respective default entries. |
@@ -544,8 +503,12 @@ sn_io_early_init(void) | |||
544 | register_sn_procfs(); | 503 | register_sn_procfs(); |
545 | #endif | 504 | #endif |
546 | 505 | ||
547 | printk(KERN_INFO "ACPI DSDT OEM Rev 0x%x\n", | 506 | { |
548 | acpi_gbl_DSDT->oem_revision); | 507 | struct acpi_table_header *header; |
508 | (void)acpi_get_table_by_index(ACPI_TABLE_INDEX_DSDT, &header); | ||
509 | printk(KERN_INFO "ACPI DSDT OEM Rev 0x%x\n", | ||
510 | header->oem_revision); | ||
511 | } | ||
549 | if (SN_ACPI_BASE_SUPPORT()) | 512 | if (SN_ACPI_BASE_SUPPORT()) |
550 | sn_io_acpi_init(); | 513 | sn_io_acpi_init(); |
551 | else | 514 | else |
@@ -605,7 +568,6 @@ sn_io_late_init(void) | |||
605 | 568 | ||
606 | fs_initcall(sn_io_late_init); | 569 | fs_initcall(sn_io_late_init); |
607 | 570 | ||
608 | EXPORT_SYMBOL(sn_pci_fixup_slot); | ||
609 | EXPORT_SYMBOL(sn_pci_unfixup_slot); | 571 | EXPORT_SYMBOL(sn_pci_unfixup_slot); |
610 | EXPORT_SYMBOL(sn_bus_store_sysdata); | 572 | EXPORT_SYMBOL(sn_bus_store_sysdata); |
611 | EXPORT_SYMBOL(sn_bus_free_sysdata); | 573 | EXPORT_SYMBOL(sn_bus_free_sysdata); |
diff --git a/arch/ia64/sn/kernel/io_init.c b/arch/ia64/sn/kernel/io_init.c index 9ad843e0383b..600be3ebae05 100644 --- a/arch/ia64/sn/kernel/io_init.c +++ b/arch/ia64/sn/kernel/io_init.c | |||
@@ -56,6 +56,25 @@ static inline u64 sal_get_pcibus_info(u64 segment, u64 busnum, u64 address) | |||
56 | return ret_stuff.v0; | 56 | return ret_stuff.v0; |
57 | } | 57 | } |
58 | 58 | ||
59 | /* | ||
60 | * Retrieve the pci device information given the bus and device|function number. | ||
61 | */ | ||
62 | static inline u64 | ||
63 | sal_get_pcidev_info(u64 segment, u64 bus_number, u64 devfn, u64 pci_dev, | ||
64 | u64 sn_irq_info) | ||
65 | { | ||
66 | struct ia64_sal_retval ret_stuff; | ||
67 | ret_stuff.status = 0; | ||
68 | ret_stuff.v0 = 0; | ||
69 | |||
70 | SAL_CALL_NOLOCK(ret_stuff, | ||
71 | (u64) SN_SAL_IOIF_GET_PCIDEV_INFO, | ||
72 | (u64) segment, (u64) bus_number, (u64) devfn, | ||
73 | (u64) pci_dev, | ||
74 | sn_irq_info, 0, 0); | ||
75 | return ret_stuff.v0; | ||
76 | } | ||
77 | |||
59 | 78 | ||
60 | /* | 79 | /* |
61 | * sn_fixup_ionodes() - This routine initializes the HUB data structure for | 80 | * sn_fixup_ionodes() - This routine initializes the HUB data structure for |
@@ -172,18 +191,40 @@ sn_pci_window_fixup(struct pci_dev *dev, unsigned int count, | |||
172 | } | 191 | } |
173 | 192 | ||
174 | /* | 193 | /* |
175 | * sn_more_slot_fixup() - We are not running with an ACPI capable PROM, | 194 | * sn_io_slot_fixup() - We are not running with an ACPI capable PROM, |
176 | * and need to convert the pci_dev->resource | 195 | * and need to convert the pci_dev->resource |
177 | * 'start' and 'end' addresses to mapped addresses, | 196 | * 'start' and 'end' addresses to mapped addresses, |
178 | * and setup the pci_controller->window array entries. | 197 | * and setup the pci_controller->window array entries. |
179 | */ | 198 | */ |
180 | void | 199 | void |
181 | sn_more_slot_fixup(struct pci_dev *dev, struct pcidev_info *pcidev_info) | 200 | sn_io_slot_fixup(struct pci_dev *dev) |
182 | { | 201 | { |
183 | unsigned int count = 0; | 202 | unsigned int count = 0; |
184 | int idx; | 203 | int idx; |
185 | s64 pci_addrs[PCI_ROM_RESOURCE + 1]; | 204 | s64 pci_addrs[PCI_ROM_RESOURCE + 1]; |
186 | unsigned long addr, end, size, start; | 205 | unsigned long addr, end, size, start; |
206 | struct pcidev_info *pcidev_info; | ||
207 | struct sn_irq_info *sn_irq_info; | ||
208 | int status; | ||
209 | |||
210 | pcidev_info = kzalloc(sizeof(struct pcidev_info), GFP_KERNEL); | ||
211 | if (!pcidev_info) | ||
212 | panic("%s: Unable to alloc memory for pcidev_info", __FUNCTION__); | ||
213 | |||
214 | sn_irq_info = kzalloc(sizeof(struct sn_irq_info), GFP_KERNEL); | ||
215 | if (!sn_irq_info) | ||
216 | panic("%s: Unable to alloc memory for sn_irq_info", __FUNCTION__); | ||
217 | |||
218 | /* Call to retrieve pci device information needed by kernel. */ | ||
219 | status = sal_get_pcidev_info((u64) pci_domain_nr(dev), | ||
220 | (u64) dev->bus->number, | ||
221 | dev->devfn, | ||
222 | (u64) __pa(pcidev_info), | ||
223 | (u64) __pa(sn_irq_info)); | ||
224 | |||
225 | if (status) | ||
226 | BUG(); /* Cannot get platform pci device information */ | ||
227 | |||
187 | 228 | ||
188 | /* Copy over PIO Mapped Addresses */ | 229 | /* Copy over PIO Mapped Addresses */ |
189 | for (idx = 0; idx <= PCI_ROM_RESOURCE; idx++) { | 230 | for (idx = 0; idx <= PCI_ROM_RESOURCE; idx++) { |
@@ -219,8 +260,12 @@ sn_more_slot_fixup(struct pci_dev *dev, struct pcidev_info *pcidev_info) | |||
219 | */ | 260 | */ |
220 | if (count > 0) | 261 | if (count > 0) |
221 | sn_pci_window_fixup(dev, count, pci_addrs); | 262 | sn_pci_window_fixup(dev, count, pci_addrs); |
263 | |||
264 | sn_pci_fixup_slot(dev, pcidev_info, sn_irq_info); | ||
222 | } | 265 | } |
223 | 266 | ||
267 | EXPORT_SYMBOL(sn_io_slot_fixup); | ||
268 | |||
224 | /* | 269 | /* |
225 | * sn_pci_controller_fixup() - This routine sets up a bus's resources | 270 | * sn_pci_controller_fixup() - This routine sets up a bus's resources |
226 | * consistent with the Linux PCI abstraction layer. | 271 | * consistent with the Linux PCI abstraction layer. |
@@ -272,9 +317,6 @@ sn_bus_fixup(struct pci_bus *bus) | |||
272 | { | 317 | { |
273 | struct pci_dev *pci_dev = NULL; | 318 | struct pci_dev *pci_dev = NULL; |
274 | struct pcibus_bussoft *prom_bussoft_ptr; | 319 | struct pcibus_bussoft *prom_bussoft_ptr; |
275 | extern void sn_common_bus_fixup(struct pci_bus *, | ||
276 | struct pcibus_bussoft *); | ||
277 | |||
278 | 320 | ||
279 | if (!bus->parent) { /* If root bus */ | 321 | if (!bus->parent) { /* If root bus */ |
280 | prom_bussoft_ptr = PCI_CONTROLLER(bus)->platform_data; | 322 | prom_bussoft_ptr = PCI_CONTROLLER(bus)->platform_data; |
@@ -291,7 +333,7 @@ sn_bus_fixup(struct pci_bus *bus) | |||
291 | prom_bussoft_ptr->bs_legacy_mem); | 333 | prom_bussoft_ptr->bs_legacy_mem); |
292 | } | 334 | } |
293 | list_for_each_entry(pci_dev, &bus->devices, bus_list) { | 335 | list_for_each_entry(pci_dev, &bus->devices, bus_list) { |
294 | sn_pci_fixup_slot(pci_dev); | 336 | sn_io_slot_fixup(pci_dev); |
295 | } | 337 | } |
296 | 338 | ||
297 | } | 339 | } |
diff --git a/arch/ia64/sn/kernel/iomv.c b/arch/ia64/sn/kernel/iomv.c index 4aa4f301d56d..ab7e2fd40798 100644 --- a/arch/ia64/sn/kernel/iomv.c +++ b/arch/ia64/sn/kernel/iomv.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* | 1 | /* |
2 | * This file is subject to the terms and conditions of the GNU General Public | 2 | * This file is subject to the terms and conditions of the GNU General Public |
3 | * License. See the file "COPYING" in the main directory of this archive | 3 | * License. See the file "COPYING" in the main directory of this archive |
4 | * for more details. | 4 | * for more details. |
@@ -26,9 +26,10 @@ | |||
26 | * @port: port to convert | 26 | * @port: port to convert |
27 | * | 27 | * |
28 | * Legacy in/out instructions are converted to ld/st instructions | 28 | * Legacy in/out instructions are converted to ld/st instructions |
29 | * on IA64. This routine will convert a port number into a valid | 29 | * on IA64. This routine will convert a port number into a valid |
30 | * SN i/o address. Used by sn_in*() and sn_out*(). | 30 | * SN i/o address. Used by sn_in*() and sn_out*(). |
31 | */ | 31 | */ |
32 | |||
32 | void *sn_io_addr(unsigned long port) | 33 | void *sn_io_addr(unsigned long port) |
33 | { | 34 | { |
34 | if (!IS_RUNNING_ON_SIMULATOR()) { | 35 | if (!IS_RUNNING_ON_SIMULATOR()) { |
diff --git a/arch/ia64/sn/pci/pcibr/pcibr_provider.c b/arch/ia64/sn/pci/pcibr/pcibr_provider.c index 6846dc9b432d..04a8256017eb 100644 --- a/arch/ia64/sn/pci/pcibr/pcibr_provider.c +++ b/arch/ia64/sn/pci/pcibr/pcibr_provider.c | |||
@@ -20,7 +20,8 @@ | |||
20 | #include "xtalk/hubdev.h" | 20 | #include "xtalk/hubdev.h" |
21 | 21 | ||
22 | int | 22 | int |
23 | sal_pcibr_slot_enable(struct pcibus_info *soft, int device, void *resp) | 23 | sal_pcibr_slot_enable(struct pcibus_info *soft, int device, void *resp, |
24 | char **ssdt) | ||
24 | { | 25 | { |
25 | struct ia64_sal_retval ret_stuff; | 26 | struct ia64_sal_retval ret_stuff; |
26 | u64 busnum; | 27 | u64 busnum; |
@@ -32,7 +33,8 @@ sal_pcibr_slot_enable(struct pcibus_info *soft, int device, void *resp) | |||
32 | segment = soft->pbi_buscommon.bs_persist_segment; | 33 | segment = soft->pbi_buscommon.bs_persist_segment; |
33 | busnum = soft->pbi_buscommon.bs_persist_busnum; | 34 | busnum = soft->pbi_buscommon.bs_persist_busnum; |
34 | SAL_CALL_NOLOCK(ret_stuff, (u64) SN_SAL_IOIF_SLOT_ENABLE, segment, | 35 | SAL_CALL_NOLOCK(ret_stuff, (u64) SN_SAL_IOIF_SLOT_ENABLE, segment, |
35 | busnum, (u64) device, (u64) resp, 0, 0, 0); | 36 | busnum, (u64) device, (u64) resp, (u64)ia64_tpa(ssdt), |
37 | 0, 0); | ||
36 | 38 | ||
37 | return (int)ret_stuff.v0; | 39 | return (int)ret_stuff.v0; |
38 | } | 40 | } |
diff --git a/arch/x86_64/kernel/early-quirks.c b/arch/x86_64/kernel/early-quirks.c index 49802f1bee94..bd30d138113f 100644 --- a/arch/x86_64/kernel/early-quirks.c +++ b/arch/x86_64/kernel/early-quirks.c | |||
@@ -32,7 +32,7 @@ static void via_bugs(void) | |||
32 | 32 | ||
33 | static int nvidia_hpet_detected __initdata; | 33 | static int nvidia_hpet_detected __initdata; |
34 | 34 | ||
35 | static int __init nvidia_hpet_check(unsigned long phys, unsigned long size) | 35 | static int __init nvidia_hpet_check(struct acpi_table_header *header) |
36 | { | 36 | { |
37 | nvidia_hpet_detected = 1; | 37 | nvidia_hpet_detected = 1; |
38 | return 0; | 38 | return 0; |
@@ -53,7 +53,7 @@ static void nvidia_bugs(void) | |||
53 | return; | 53 | return; |
54 | 54 | ||
55 | nvidia_hpet_detected = 0; | 55 | nvidia_hpet_detected = 0; |
56 | acpi_table_parse(ACPI_HPET, nvidia_hpet_check); | 56 | acpi_table_parse(ACPI_SIG_HPET, nvidia_hpet_check); |
57 | if (nvidia_hpet_detected == 0) { | 57 | if (nvidia_hpet_detected == 0) { |
58 | acpi_skip_timer_override = 1; | 58 | acpi_skip_timer_override = 1; |
59 | printk(KERN_INFO "Nvidia board " | 59 | printk(KERN_INFO "Nvidia board " |
diff --git a/arch/x86_64/kernel/genapic.c b/arch/x86_64/kernel/genapic.c index b007433f96bb..0b3603adf56d 100644 --- a/arch/x86_64/kernel/genapic.c +++ b/arch/x86_64/kernel/genapic.c | |||
@@ -58,8 +58,8 @@ void __init clustered_apic_check(void) | |||
58 | * Some x86_64 machines use physical APIC mode regardless of how many | 58 | * Some x86_64 machines use physical APIC mode regardless of how many |
59 | * procs/clusters are present (x86_64 ES7000 is an example). | 59 | * procs/clusters are present (x86_64 ES7000 is an example). |
60 | */ | 60 | */ |
61 | if (acpi_fadt.revision > FADT2_REVISION_ID) | 61 | if (acpi_gbl_FADT.header.revision > FADT2_REVISION_ID) |
62 | if (acpi_fadt.force_apic_physical_destination_mode) { | 62 | if (acpi_gbl_FADT.flags & ACPI_FADT_APIC_PHYSICAL) { |
63 | genapic = &apic_cluster; | 63 | genapic = &apic_cluster; |
64 | goto print; | 64 | goto print; |
65 | } | 65 | } |
diff --git a/arch/x86_64/kernel/mpparse.c b/arch/x86_64/kernel/mpparse.c index 08072568847d..50dd8bef850e 100644 --- a/arch/x86_64/kernel/mpparse.c +++ b/arch/x86_64/kernel/mpparse.c | |||
@@ -798,7 +798,7 @@ int mp_register_gsi(u32 gsi, int triggering, int polarity) | |||
798 | return gsi; | 798 | return gsi; |
799 | 799 | ||
800 | /* Don't set up the ACPI SCI because it's already set up */ | 800 | /* Don't set up the ACPI SCI because it's already set up */ |
801 | if (acpi_fadt.sci_int == gsi) | 801 | if (acpi_gbl_FADT.sci_interrupt == gsi) |
802 | return gsi; | 802 | return gsi; |
803 | 803 | ||
804 | ioapic = mp_find_ioapic(gsi); | 804 | ioapic = mp_find_ioapic(gsi); |
diff --git a/arch/x86_64/kernel/time.c b/arch/x86_64/kernel/time.c index 5cc76d0d331f..335cc91c49b7 100644 --- a/arch/x86_64/kernel/time.c +++ b/arch/x86_64/kernel/time.c | |||
@@ -498,7 +498,7 @@ static unsigned long get_cmos_time(void) | |||
498 | { | 498 | { |
499 | unsigned int year, mon, day, hour, min, sec; | 499 | unsigned int year, mon, day, hour, min, sec; |
500 | unsigned long flags; | 500 | unsigned long flags; |
501 | unsigned extyear = 0; | 501 | unsigned century = 0; |
502 | 502 | ||
503 | spin_lock_irqsave(&rtc_lock, flags); | 503 | spin_lock_irqsave(&rtc_lock, flags); |
504 | 504 | ||
@@ -510,9 +510,9 @@ static unsigned long get_cmos_time(void) | |||
510 | mon = CMOS_READ(RTC_MONTH); | 510 | mon = CMOS_READ(RTC_MONTH); |
511 | year = CMOS_READ(RTC_YEAR); | 511 | year = CMOS_READ(RTC_YEAR); |
512 | #ifdef CONFIG_ACPI | 512 | #ifdef CONFIG_ACPI |
513 | if (acpi_fadt.revision >= FADT2_REVISION_ID && | 513 | if (acpi_gbl_FADT.header.revision >= FADT2_REVISION_ID && |
514 | acpi_fadt.century) | 514 | acpi_gbl_FADT.century) |
515 | extyear = CMOS_READ(acpi_fadt.century); | 515 | century = CMOS_READ(acpi_gbl_FADT.century); |
516 | #endif | 516 | #endif |
517 | } while (sec != CMOS_READ(RTC_SECONDS)); | 517 | } while (sec != CMOS_READ(RTC_SECONDS)); |
518 | 518 | ||
@@ -530,10 +530,10 @@ static unsigned long get_cmos_time(void) | |||
530 | BCD_TO_BIN(mon); | 530 | BCD_TO_BIN(mon); |
531 | BCD_TO_BIN(year); | 531 | BCD_TO_BIN(year); |
532 | 532 | ||
533 | if (extyear) { | 533 | if (century) { |
534 | BCD_TO_BIN(extyear); | 534 | BCD_TO_BIN(century); |
535 | year += extyear; | 535 | year += century * 100; |
536 | printk(KERN_INFO "Extended CMOS year: %d\n", extyear); | 536 | printk(KERN_INFO "Extended CMOS year: %d\n", century * 100); |
537 | } else { | 537 | } else { |
538 | /* | 538 | /* |
539 | * x86-64 systems only exists since 2002. | 539 | * x86-64 systems only exists since 2002. |
@@ -954,7 +954,7 @@ __cpuinit int unsynchronized_tsc(void) | |||
954 | if (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL) { | 954 | if (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL) { |
955 | #ifdef CONFIG_ACPI | 955 | #ifdef CONFIG_ACPI |
956 | /* But TSC doesn't tick in C3 so don't use it there */ | 956 | /* But TSC doesn't tick in C3 so don't use it there */ |
957 | if (acpi_fadt.length > 0 && acpi_fadt.plvl3_lat < 1000) | 957 | if (acpi_gbl_FADT.header.length > 0 && acpi_gbl_FADT.C3latency < 1000) |
958 | return 1; | 958 | return 1; |
959 | #endif | 959 | #endif |
960 | return 0; | 960 | return 0; |
diff --git a/arch/x86_64/mm/srat.c b/arch/x86_64/mm/srat.c index 1087e150a218..2efe215fc76a 100644 --- a/arch/x86_64/mm/srat.c +++ b/arch/x86_64/mm/srat.c | |||
@@ -101,7 +101,7 @@ static __init inline int srat_disabled(void) | |||
101 | static __init int slit_valid(struct acpi_table_slit *slit) | 101 | static __init int slit_valid(struct acpi_table_slit *slit) |
102 | { | 102 | { |
103 | int i, j; | 103 | int i, j; |
104 | int d = slit->localities; | 104 | int d = slit->locality_count; |
105 | for (i = 0; i < d; i++) { | 105 | for (i = 0; i < d; i++) { |
106 | for (j = 0; j < d; j++) { | 106 | for (j = 0; j < d; j++) { |
107 | u8 val = slit->entry[d*i + j]; | 107 | u8 val = slit->entry[d*i + j]; |
@@ -127,18 +127,18 @@ void __init acpi_numa_slit_init(struct acpi_table_slit *slit) | |||
127 | 127 | ||
128 | /* Callback for Proximity Domain -> LAPIC mapping */ | 128 | /* Callback for Proximity Domain -> LAPIC mapping */ |
129 | void __init | 129 | void __init |
130 | acpi_numa_processor_affinity_init(struct acpi_table_processor_affinity *pa) | 130 | acpi_numa_processor_affinity_init(struct acpi_srat_cpu_affinity *pa) |
131 | { | 131 | { |
132 | int pxm, node; | 132 | int pxm, node; |
133 | if (srat_disabled()) | 133 | if (srat_disabled()) |
134 | return; | 134 | return; |
135 | if (pa->header.length != sizeof(struct acpi_table_processor_affinity)) { | 135 | if (pa->header.length != sizeof(struct acpi_srat_cpu_affinity)) { |
136 | bad_srat(); | 136 | bad_srat(); |
137 | return; | 137 | return; |
138 | } | 138 | } |
139 | if (pa->flags.enabled == 0) | 139 | if ((pa->flags & ACPI_SRAT_CPU_ENABLED) == 0) |
140 | return; | 140 | return; |
141 | pxm = pa->proximity_domain; | 141 | pxm = pa->proximity_domain_lo; |
142 | node = setup_node(pxm); | 142 | node = setup_node(pxm); |
143 | if (node < 0) { | 143 | if (node < 0) { |
144 | printk(KERN_ERR "SRAT: Too many proximity domains %x\n", pxm); | 144 | printk(KERN_ERR "SRAT: Too many proximity domains %x\n", pxm); |
@@ -254,21 +254,21 @@ static int reserve_hotadd(int node, unsigned long start, unsigned long end) | |||
254 | /* Looks good */ | 254 | /* Looks good */ |
255 | 255 | ||
256 | if (nd->start == nd->end) { | 256 | if (nd->start == nd->end) { |
257 | nd->start = start; | 257 | nd->start = start; |
258 | nd->end = end; | 258 | nd->end = end; |
259 | changed = 1; | 259 | changed = 1; |
260 | } else { | 260 | } else { |
261 | if (nd->start == end) { | 261 | if (nd->start == end) { |
262 | nd->start = start; | 262 | nd->start = start; |
263 | changed = 1; | 263 | changed = 1; |
264 | } | 264 | } |
265 | if (nd->end == start) { | 265 | if (nd->end == start) { |
266 | nd->end = end; | 266 | nd->end = end; |
267 | changed = 1; | 267 | changed = 1; |
268 | } | 268 | } |
269 | if (!changed) | 269 | if (!changed) |
270 | printk(KERN_ERR "SRAT: Hotplug zone not continuous. Partly ignored\n"); | 270 | printk(KERN_ERR "SRAT: Hotplug zone not continuous. Partly ignored\n"); |
271 | } | 271 | } |
272 | 272 | ||
273 | ret = update_end_of_memory(nd->end); | 273 | ret = update_end_of_memory(nd->end); |
274 | 274 | ||
@@ -279,7 +279,7 @@ static int reserve_hotadd(int node, unsigned long start, unsigned long end) | |||
279 | 279 | ||
280 | /* Callback for parsing of the Proximity Domain <-> Memory Area mappings */ | 280 | /* Callback for parsing of the Proximity Domain <-> Memory Area mappings */ |
281 | void __init | 281 | void __init |
282 | acpi_numa_memory_affinity_init(struct acpi_table_memory_affinity *ma) | 282 | acpi_numa_memory_affinity_init(struct acpi_srat_mem_affinity *ma) |
283 | { | 283 | { |
284 | struct bootnode *nd, oldnode; | 284 | struct bootnode *nd, oldnode; |
285 | unsigned long start, end; | 285 | unsigned long start, end; |
@@ -288,16 +288,17 @@ acpi_numa_memory_affinity_init(struct acpi_table_memory_affinity *ma) | |||
288 | 288 | ||
289 | if (srat_disabled()) | 289 | if (srat_disabled()) |
290 | return; | 290 | return; |
291 | if (ma->header.length != sizeof(struct acpi_table_memory_affinity)) { | 291 | if (ma->header.length != sizeof(struct acpi_srat_mem_affinity)) { |
292 | bad_srat(); | 292 | bad_srat(); |
293 | return; | 293 | return; |
294 | } | 294 | } |
295 | if (ma->flags.enabled == 0) | 295 | if ((ma->flags & ACPI_SRAT_MEM_ENABLED) == 0) |
296 | return; | 296 | return; |
297 | if (ma->flags.hot_pluggable && !save_add_info()) | 297 | |
298 | if ((ma->flags & ACPI_SRAT_MEM_HOT_PLUGGABLE) && !save_add_info()) | ||
298 | return; | 299 | return; |
299 | start = ma->base_addr_lo | ((u64)ma->base_addr_hi << 32); | 300 | start = ma->base_address; |
300 | end = start + (ma->length_lo | ((u64)ma->length_hi << 32)); | 301 | end = start + ma->length; |
301 | pxm = ma->proximity_domain; | 302 | pxm = ma->proximity_domain; |
302 | node = setup_node(pxm); | 303 | node = setup_node(pxm); |
303 | if (node < 0) { | 304 | if (node < 0) { |
@@ -337,7 +338,8 @@ acpi_numa_memory_affinity_init(struct acpi_table_memory_affinity *ma) | |||
337 | push_node_boundaries(node, nd->start >> PAGE_SHIFT, | 338 | push_node_boundaries(node, nd->start >> PAGE_SHIFT, |
338 | nd->end >> PAGE_SHIFT); | 339 | nd->end >> PAGE_SHIFT); |
339 | 340 | ||
340 | if (ma->flags.hot_pluggable && (reserve_hotadd(node, start, end) < 0)) { | 341 | if ((ma->flags & ACPI_SRAT_MEM_HOT_PLUGGABLE) && |
342 | (reserve_hotadd(node, start, end) < 0)) { | ||
341 | /* Ignore hotadd region. Undo damage */ | 343 | /* Ignore hotadd region. Undo damage */ |
342 | printk(KERN_NOTICE "SRAT: Hotplug region ignored\n"); | 344 | printk(KERN_NOTICE "SRAT: Hotplug region ignored\n"); |
343 | *nd = oldnode; | 345 | *nd = oldnode; |
@@ -394,7 +396,7 @@ int __init acpi_scan_nodes(unsigned long start, unsigned long end) | |||
394 | 396 | ||
395 | /* First clean up the node list */ | 397 | /* First clean up the node list */ |
396 | for (i = 0; i < MAX_NUMNODES; i++) { | 398 | for (i = 0; i < MAX_NUMNODES; i++) { |
397 | cutoff_node(i, start, end); | 399 | cutoff_node(i, start, end); |
398 | if ((nodes[i].end - nodes[i].start) < NODE_MIN_SIZE) { | 400 | if ((nodes[i].end - nodes[i].start) < NODE_MIN_SIZE) { |
399 | unparse_node(i); | 401 | unparse_node(i); |
400 | node_set_offline(i); | 402 | node_set_offline(i); |
@@ -426,7 +428,7 @@ int __init acpi_scan_nodes(unsigned long start, unsigned long end) | |||
426 | if (!node_online(i)) | 428 | if (!node_online(i)) |
427 | setup_node_bootmem(i, nodes[i].start, nodes[i].end); | 429 | setup_node_bootmem(i, nodes[i].start, nodes[i].end); |
428 | 430 | ||
429 | for (i = 0; i < NR_CPUS; i++) { | 431 | for (i = 0; i < NR_CPUS; i++) { |
430 | if (cpu_to_node[i] == NUMA_NO_NODE) | 432 | if (cpu_to_node[i] == NUMA_NO_NODE) |
431 | continue; | 433 | continue; |
432 | if (!node_isset(cpu_to_node[i], nodes_parsed)) | 434 | if (!node_isset(cpu_to_node[i], nodes_parsed)) |
@@ -461,7 +463,7 @@ int __node_distance(int a, int b) | |||
461 | 463 | ||
462 | if (!acpi_slit) | 464 | if (!acpi_slit) |
463 | return a == b ? 10 : 20; | 465 | return a == b ? 10 : 20; |
464 | index = acpi_slit->localities * node_to_pxm(a); | 466 | index = acpi_slit->locality_count * node_to_pxm(a); |
465 | return acpi_slit->entry[index + node_to_pxm(b)]; | 467 | return acpi_slit->entry[index + node_to_pxm(b)]; |
466 | } | 468 | } |
467 | 469 | ||
diff --git a/arch/x86_64/pci/mmconfig.c b/arch/x86_64/pci/mmconfig.c index f8b6b2800a62..faabb6e87f12 100644 --- a/arch/x86_64/pci/mmconfig.c +++ b/arch/x86_64/pci/mmconfig.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | * mmconfig.c - Low-level direct PCI config space access via MMCONFIG | 2 | * mmconfig.c - Low-level direct PCI config space access via MMCONFIG |
3 | * | 3 | * |
4 | * This is an 64bit optimized version that always keeps the full mmconfig | 4 | * This is an 64bit optimized version that always keeps the full mmconfig |
5 | * space mapped. This allows lockless config space operation. | 5 | * space mapped. This allows lockless config space operation. |
6 | */ | 6 | */ |
@@ -25,7 +25,7 @@ static DECLARE_BITMAP(fallback_slots, 32*MAX_CHECK_BUS); | |||
25 | 25 | ||
26 | /* Static virtual mapping of the MMCONFIG aperture */ | 26 | /* Static virtual mapping of the MMCONFIG aperture */ |
27 | struct mmcfg_virt { | 27 | struct mmcfg_virt { |
28 | struct acpi_table_mcfg_config *cfg; | 28 | struct acpi_mcfg_allocation *cfg; |
29 | char __iomem *virt; | 29 | char __iomem *virt; |
30 | }; | 30 | }; |
31 | static struct mmcfg_virt *pci_mmcfg_virt; | 31 | static struct mmcfg_virt *pci_mmcfg_virt; |
@@ -33,14 +33,14 @@ static struct mmcfg_virt *pci_mmcfg_virt; | |||
33 | static char __iomem *get_virt(unsigned int seg, unsigned bus) | 33 | static char __iomem *get_virt(unsigned int seg, unsigned bus) |
34 | { | 34 | { |
35 | int cfg_num = -1; | 35 | int cfg_num = -1; |
36 | struct acpi_table_mcfg_config *cfg; | 36 | struct acpi_mcfg_allocation *cfg; |
37 | 37 | ||
38 | while (1) { | 38 | while (1) { |
39 | ++cfg_num; | 39 | ++cfg_num; |
40 | if (cfg_num >= pci_mmcfg_config_num) | 40 | if (cfg_num >= pci_mmcfg_config_num) |
41 | break; | 41 | break; |
42 | cfg = pci_mmcfg_virt[cfg_num].cfg; | 42 | cfg = pci_mmcfg_virt[cfg_num].cfg; |
43 | if (cfg->pci_segment_group_number != seg) | 43 | if (cfg->pci_segment != seg) |
44 | continue; | 44 | continue; |
45 | if ((cfg->start_bus_number <= bus) && | 45 | if ((cfg->start_bus_number <= bus) && |
46 | (cfg->end_bus_number >= bus)) | 46 | (cfg->end_bus_number >= bus)) |
@@ -52,7 +52,7 @@ static char __iomem *get_virt(unsigned int seg, unsigned bus) | |||
52 | this applies to all busses. */ | 52 | this applies to all busses. */ |
53 | cfg = &pci_mmcfg_config[0]; | 53 | cfg = &pci_mmcfg_config[0]; |
54 | if (pci_mmcfg_config_num == 1 && | 54 | if (pci_mmcfg_config_num == 1 && |
55 | cfg->pci_segment_group_number == 0 && | 55 | cfg->pci_segment == 0 && |
56 | (cfg->start_bus_number | cfg->end_bus_number) == 0) | 56 | (cfg->start_bus_number | cfg->end_bus_number) == 0) |
57 | return pci_mmcfg_virt[0].virt; | 57 | return pci_mmcfg_virt[0].virt; |
58 | 58 | ||
@@ -170,19 +170,19 @@ void __init pci_mmcfg_init(int type) | |||
170 | if ((pci_probe & PCI_PROBE_MMCONF) == 0) | 170 | if ((pci_probe & PCI_PROBE_MMCONF) == 0) |
171 | return; | 171 | return; |
172 | 172 | ||
173 | acpi_table_parse(ACPI_MCFG, acpi_parse_mcfg); | 173 | acpi_table_parse(ACPI_SIG_MCFG, acpi_parse_mcfg); |
174 | if ((pci_mmcfg_config_num == 0) || | 174 | if ((pci_mmcfg_config_num == 0) || |
175 | (pci_mmcfg_config == NULL) || | 175 | (pci_mmcfg_config == NULL) || |
176 | (pci_mmcfg_config[0].base_address == 0)) | 176 | (pci_mmcfg_config[0].address == 0)) |
177 | return; | 177 | return; |
178 | 178 | ||
179 | /* Only do this check when type 1 works. If it doesn't work | 179 | /* Only do this check when type 1 works. If it doesn't work |
180 | assume we run on a Mac and always use MCFG */ | 180 | assume we run on a Mac and always use MCFG */ |
181 | if (type == 1 && !e820_all_mapped(pci_mmcfg_config[0].base_address, | 181 | if (type == 1 && !e820_all_mapped(pci_mmcfg_config[0].address, |
182 | pci_mmcfg_config[0].base_address + MMCONFIG_APER_MIN, | 182 | pci_mmcfg_config[0].address + MMCONFIG_APER_MIN, |
183 | E820_RESERVED)) { | 183 | E820_RESERVED)) { |
184 | printk(KERN_ERR "PCI: BIOS Bug: MCFG area at %x is not E820-reserved\n", | 184 | printk(KERN_ERR "PCI: BIOS Bug: MCFG area at %lx is not E820-reserved\n", |
185 | pci_mmcfg_config[0].base_address); | 185 | (unsigned long)pci_mmcfg_config[0].address); |
186 | printk(KERN_ERR "PCI: Not using MMCONFIG.\n"); | 186 | printk(KERN_ERR "PCI: Not using MMCONFIG.\n"); |
187 | return; | 187 | return; |
188 | } | 188 | } |
@@ -194,15 +194,16 @@ void __init pci_mmcfg_init(int type) | |||
194 | } | 194 | } |
195 | for (i = 0; i < pci_mmcfg_config_num; ++i) { | 195 | for (i = 0; i < pci_mmcfg_config_num; ++i) { |
196 | pci_mmcfg_virt[i].cfg = &pci_mmcfg_config[i]; | 196 | pci_mmcfg_virt[i].cfg = &pci_mmcfg_config[i]; |
197 | pci_mmcfg_virt[i].virt = ioremap_nocache(pci_mmcfg_config[i].base_address, | 197 | pci_mmcfg_virt[i].virt = ioremap_nocache(pci_mmcfg_config[i].address, |
198 | MMCONFIG_APER_MAX); | 198 | MMCONFIG_APER_MAX); |
199 | if (!pci_mmcfg_virt[i].virt) { | 199 | if (!pci_mmcfg_virt[i].virt) { |
200 | printk(KERN_ERR "PCI: Cannot map mmconfig aperture for " | 200 | printk(KERN_ERR "PCI: Cannot map mmconfig aperture for " |
201 | "segment %d\n", | 201 | "segment %d\n", |
202 | pci_mmcfg_config[i].pci_segment_group_number); | 202 | pci_mmcfg_config[i].pci_segment); |
203 | return; | 203 | return; |
204 | } | 204 | } |
205 | printk(KERN_INFO "PCI: Using MMCONFIG at %x\n", pci_mmcfg_config[i].base_address); | 205 | printk(KERN_INFO "PCI: Using MMCONFIG at %lx\n", |
206 | (unsigned long)pci_mmcfg_config[i].address); | ||
206 | } | 207 | } |
207 | 208 | ||
208 | unreachable_devices(); | 209 | unreachable_devices(); |