aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/i386/kernel/acpi/boot.c536
-rw-r--r--arch/i386/kernel/acpi/earlyquirk.c40
-rw-r--r--arch/i386/kernel/acpi/sleep.c35
-rw-r--r--arch/ia64/kernel/acpi-ext.c37
-rw-r--r--arch/ia64/kernel/acpi.c328
-rw-r--r--arch/ia64/kernel/iosapic.c24
-rw-r--r--arch/x86_64/kernel/acpi/sleep.c17
7 files changed, 520 insertions, 497 deletions
diff --git a/arch/i386/kernel/acpi/boot.c b/arch/i386/kernel/acpi/boot.c
index b7808a89d945..09700d894668 100644
--- a/arch/i386/kernel/acpi/boot.c
+++ b/arch/i386/kernel/acpi/boot.c
@@ -40,19 +40,25 @@
40 40
41#ifdef CONFIG_X86_64 41#ifdef CONFIG_X86_64
42 42
43static inline void acpi_madt_oem_check(char *oem_id, char *oem_table_id) { } 43static inline void acpi_madt_oem_check(char *oem_id, char *oem_table_id)
44{
45}
44extern void __init clustered_apic_check(void); 46extern void __init clustered_apic_check(void);
45static inline int ioapic_setup_disabled(void) { return 0; } 47static inline int ioapic_setup_disabled(void)
48{
49 return 0;
50}
51
46#include <asm/proto.h> 52#include <asm/proto.h>
47 53
48#else /* X86 */ 54#else /* X86 */
49 55
50#ifdef CONFIG_X86_LOCAL_APIC 56#ifdef CONFIG_X86_LOCAL_APIC
51#include <mach_apic.h> 57#include <mach_apic.h>
52#include <mach_mpparse.h> 58#include <mach_mpparse.h>
53#endif /* CONFIG_X86_LOCAL_APIC */ 59#endif /* CONFIG_X86_LOCAL_APIC */
54 60
55#endif /* X86 */ 61#endif /* X86 */
56 62
57#define BAD_MADT_ENTRY(entry, end) ( \ 63#define BAD_MADT_ENTRY(entry, end) ( \
58 (!entry) || (unsigned long)entry + sizeof(*entry) > end || \ 64 (!entry) || (unsigned long)entry + sizeof(*entry) > end || \
@@ -62,7 +68,7 @@ static inline int ioapic_setup_disabled(void) { return 0; }
62 68
63#ifdef CONFIG_ACPI_PCI 69#ifdef CONFIG_ACPI_PCI
64int acpi_noirq __initdata; /* skip ACPI IRQ initialization */ 70int acpi_noirq __initdata; /* skip ACPI IRQ initialization */
65int acpi_pci_disabled __initdata; /* skip ACPI PCI scan and IRQ initialization */ 71int acpi_pci_disabled __initdata; /* skip ACPI PCI scan and IRQ initialization */
66#else 72#else
67int acpi_noirq __initdata = 1; 73int acpi_noirq __initdata = 1;
68int acpi_pci_disabled __initdata = 1; 74int acpi_pci_disabled __initdata = 1;
@@ -88,7 +94,7 @@ static u64 acpi_lapic_addr __initdata = APIC_DEFAULT_PHYS_BASE;
88 94
89#define MAX_MADT_ENTRIES 256 95#define MAX_MADT_ENTRIES 256
90u8 x86_acpiid_to_apicid[MAX_MADT_ENTRIES] = 96u8 x86_acpiid_to_apicid[MAX_MADT_ENTRIES] =
91 { [0 ... MAX_MADT_ENTRIES-1] = 0xff }; 97 {[0 ... MAX_MADT_ENTRIES - 1] = 0xff };
92EXPORT_SYMBOL(x86_acpiid_to_apicid); 98EXPORT_SYMBOL(x86_acpiid_to_apicid);
93 99
94/* -------------------------------------------------------------------------- 100/* --------------------------------------------------------------------------
@@ -99,7 +105,7 @@ EXPORT_SYMBOL(x86_acpiid_to_apicid);
99 * The default interrupt routing model is PIC (8259). This gets 105 * The default interrupt routing model is PIC (8259). This gets
100 * overriden if IOAPICs are enumerated (below). 106 * overriden if IOAPICs are enumerated (below).
101 */ 107 */
102enum acpi_irq_model_id acpi_irq_model = ACPI_IRQ_MODEL_PIC; 108enum acpi_irq_model_id acpi_irq_model = ACPI_IRQ_MODEL_PIC;
103 109
104#ifdef CONFIG_X86_64 110#ifdef CONFIG_X86_64
105 111
@@ -107,7 +113,7 @@ enum acpi_irq_model_id acpi_irq_model = ACPI_IRQ_MODEL_PIC;
107char *__acpi_map_table(unsigned long phys_addr, unsigned long size) 113char *__acpi_map_table(unsigned long phys_addr, unsigned long size)
108{ 114{
109 if (!phys_addr || !size) 115 if (!phys_addr || !size)
110 return NULL; 116 return NULL;
111 117
112 if (phys_addr < (end_pfn_map << PAGE_SHIFT)) 118 if (phys_addr < (end_pfn_map << PAGE_SHIFT))
113 return __va(phys_addr); 119 return __va(phys_addr);
@@ -134,8 +140,8 @@ char *__acpi_map_table(unsigned long phys, unsigned long size)
134 unsigned long base, offset, mapped_size; 140 unsigned long base, offset, mapped_size;
135 int idx; 141 int idx;
136 142
137 if (phys + size < 8*1024*1024) 143 if (phys + size < 8 * 1024 * 1024)
138 return __va(phys); 144 return __va(phys);
139 145
140 offset = phys & (PAGE_SIZE - 1); 146 offset = phys & (PAGE_SIZE - 1);
141 mapped_size = PAGE_SIZE - offset; 147 mapped_size = PAGE_SIZE - offset;
@@ -154,7 +160,7 @@ char *__acpi_map_table(unsigned long phys, unsigned long size)
154 mapped_size += PAGE_SIZE; 160 mapped_size += PAGE_SIZE;
155 } 161 }
156 162
157 return ((unsigned char *) base + offset); 163 return ((unsigned char *)base + offset);
158} 164}
159#endif 165#endif
160 166
@@ -172,7 +178,7 @@ int __init acpi_parse_mcfg(unsigned long phys_addr, unsigned long size)
172 if (!phys_addr || !size) 178 if (!phys_addr || !size)
173 return -EINVAL; 179 return -EINVAL;
174 180
175 mcfg = (struct acpi_table_mcfg *) __acpi_map_table(phys_addr, size); 181 mcfg = (struct acpi_table_mcfg *)__acpi_map_table(phys_addr, size);
176 if (!mcfg) { 182 if (!mcfg) {
177 printk(KERN_WARNING PREFIX "Unable to map MCFG\n"); 183 printk(KERN_WARNING PREFIX "Unable to map MCFG\n");
178 return -ENODEV; 184 return -ENODEV;
@@ -209,20 +215,17 @@ int __init acpi_parse_mcfg(unsigned long phys_addr, unsigned long size)
209 215
210 return 0; 216 return 0;
211} 217}
212#endif /* CONFIG_PCI_MMCONFIG */ 218#endif /* CONFIG_PCI_MMCONFIG */
213 219
214#ifdef CONFIG_X86_LOCAL_APIC 220#ifdef CONFIG_X86_LOCAL_APIC
215static int __init 221static int __init acpi_parse_madt(unsigned long phys_addr, unsigned long size)
216acpi_parse_madt (
217 unsigned long phys_addr,
218 unsigned long size)
219{ 222{
220 struct acpi_table_madt *madt = NULL; 223 struct acpi_table_madt *madt = NULL;
221 224
222 if (!phys_addr || !size) 225 if (!phys_addr || !size)
223 return -EINVAL; 226 return -EINVAL;
224 227
225 madt = (struct acpi_table_madt *) __acpi_map_table(phys_addr, size); 228 madt = (struct acpi_table_madt *)__acpi_map_table(phys_addr, size);
226 if (!madt) { 229 if (!madt) {
227 printk(KERN_WARNING PREFIX "Unable to map MADT\n"); 230 printk(KERN_WARNING PREFIX "Unable to map MADT\n");
228 return -ENODEV; 231 return -ENODEV;
@@ -232,22 +235,20 @@ acpi_parse_madt (
232 acpi_lapic_addr = (u64) madt->lapic_address; 235 acpi_lapic_addr = (u64) madt->lapic_address;
233 236
234 printk(KERN_DEBUG PREFIX "Local APIC address 0x%08x\n", 237 printk(KERN_DEBUG PREFIX "Local APIC address 0x%08x\n",
235 madt->lapic_address); 238 madt->lapic_address);
236 } 239 }
237 240
238 acpi_madt_oem_check(madt->header.oem_id, madt->header.oem_table_id); 241 acpi_madt_oem_check(madt->header.oem_id, madt->header.oem_table_id);
239 242
240 return 0; 243 return 0;
241} 244}
242 245
243
244static int __init 246static int __init
245acpi_parse_lapic ( 247acpi_parse_lapic(acpi_table_entry_header * header, const unsigned long end)
246 acpi_table_entry_header *header, const unsigned long end)
247{ 248{
248 struct acpi_table_lapic *processor = NULL; 249 struct acpi_table_lapic *processor = NULL;
249 250
250 processor = (struct acpi_table_lapic*) header; 251 processor = (struct acpi_table_lapic *)header;
251 252
252 if (BAD_MADT_ENTRY(processor, end)) 253 if (BAD_MADT_ENTRY(processor, end))
253 return -EINVAL; 254 return -EINVAL;
@@ -260,20 +261,19 @@ acpi_parse_lapic (
260 261
261 x86_acpiid_to_apicid[processor->acpi_id] = processor->id; 262 x86_acpiid_to_apicid[processor->acpi_id] = processor->id;
262 263
263 mp_register_lapic ( 264 mp_register_lapic(processor->id, /* APIC ID */
264 processor->id, /* APIC ID */ 265 processor->flags.enabled); /* Enabled? */
265 processor->flags.enabled); /* Enabled? */
266 266
267 return 0; 267 return 0;
268} 268}
269 269
270static int __init 270static int __init
271acpi_parse_lapic_addr_ovr ( 271acpi_parse_lapic_addr_ovr(acpi_table_entry_header * header,
272 acpi_table_entry_header *header, const unsigned long end) 272 const unsigned long end)
273{ 273{
274 struct acpi_table_lapic_addr_ovr *lapic_addr_ovr = NULL; 274 struct acpi_table_lapic_addr_ovr *lapic_addr_ovr = NULL;
275 275
276 lapic_addr_ovr = (struct acpi_table_lapic_addr_ovr*) header; 276 lapic_addr_ovr = (struct acpi_table_lapic_addr_ovr *)header;
277 277
278 if (BAD_MADT_ENTRY(lapic_addr_ovr, end)) 278 if (BAD_MADT_ENTRY(lapic_addr_ovr, end))
279 return -EINVAL; 279 return -EINVAL;
@@ -284,12 +284,11 @@ acpi_parse_lapic_addr_ovr (
284} 284}
285 285
286static int __init 286static int __init
287acpi_parse_lapic_nmi ( 287acpi_parse_lapic_nmi(acpi_table_entry_header * header, const unsigned long end)
288 acpi_table_entry_header *header, const unsigned long end)
289{ 288{
290 struct acpi_table_lapic_nmi *lapic_nmi = NULL; 289 struct acpi_table_lapic_nmi *lapic_nmi = NULL;
291 290
292 lapic_nmi = (struct acpi_table_lapic_nmi*) header; 291 lapic_nmi = (struct acpi_table_lapic_nmi *)header;
293 292
294 if (BAD_MADT_ENTRY(lapic_nmi, end)) 293 if (BAD_MADT_ENTRY(lapic_nmi, end))
295 return -EINVAL; 294 return -EINVAL;
@@ -302,37 +301,32 @@ acpi_parse_lapic_nmi (
302 return 0; 301 return 0;
303} 302}
304 303
305 304#endif /*CONFIG_X86_LOCAL_APIC */
306#endif /*CONFIG_X86_LOCAL_APIC*/
307 305
308#if defined(CONFIG_X86_IO_APIC) && defined(CONFIG_ACPI_INTERPRETER) 306#if defined(CONFIG_X86_IO_APIC) && defined(CONFIG_ACPI_INTERPRETER)
309 307
310static int __init 308static int __init
311acpi_parse_ioapic ( 309acpi_parse_ioapic(acpi_table_entry_header * header, const unsigned long end)
312 acpi_table_entry_header *header, const unsigned long end)
313{ 310{
314 struct acpi_table_ioapic *ioapic = NULL; 311 struct acpi_table_ioapic *ioapic = NULL;
315 312
316 ioapic = (struct acpi_table_ioapic*) header; 313 ioapic = (struct acpi_table_ioapic *)header;
317 314
318 if (BAD_MADT_ENTRY(ioapic, end)) 315 if (BAD_MADT_ENTRY(ioapic, end))
319 return -EINVAL; 316 return -EINVAL;
320 317
321 acpi_table_print_madt_entry(header); 318 acpi_table_print_madt_entry(header);
322 319
323 mp_register_ioapic ( 320 mp_register_ioapic(ioapic->id,
324 ioapic->id, 321 ioapic->address, ioapic->global_irq_base);
325 ioapic->address, 322
326 ioapic->global_irq_base);
327
328 return 0; 323 return 0;
329} 324}
330 325
331/* 326/*
332 * Parse Interrupt Source Override for the ACPI SCI 327 * Parse Interrupt Source Override for the ACPI SCI
333 */ 328 */
334static void 329static void acpi_sci_ioapic_setup(u32 gsi, u16 polarity, u16 trigger)
335acpi_sci_ioapic_setup(u32 gsi, u16 polarity, u16 trigger)
336{ 330{
337 if (trigger == 0) /* compatible SCI trigger is level */ 331 if (trigger == 0) /* compatible SCI trigger is level */
338 trigger = 3; 332 trigger = 3;
@@ -348,7 +342,7 @@ acpi_sci_ioapic_setup(u32 gsi, u16 polarity, u16 trigger)
348 polarity = acpi_sci_flags.polarity; 342 polarity = acpi_sci_flags.polarity;
349 343
350 /* 344 /*
351 * mp_config_acpi_legacy_irqs() already setup IRQs < 16 345 * mp_config_acpi_legacy_irqs() already setup IRQs < 16
352 * If GSI is < 16, this will update its flags, 346 * If GSI is < 16, this will update its flags,
353 * else it will create a new mp_irqs[] entry. 347 * else it will create a new mp_irqs[] entry.
354 */ 348 */
@@ -363,12 +357,12 @@ acpi_sci_ioapic_setup(u32 gsi, u16 polarity, u16 trigger)
363} 357}
364 358
365static int __init 359static int __init
366acpi_parse_int_src_ovr ( 360acpi_parse_int_src_ovr(acpi_table_entry_header * header,
367 acpi_table_entry_header *header, const unsigned long end) 361 const unsigned long end)
368{ 362{
369 struct acpi_table_int_src_ovr *intsrc = NULL; 363 struct acpi_table_int_src_ovr *intsrc = NULL;
370 364
371 intsrc = (struct acpi_table_int_src_ovr*) header; 365 intsrc = (struct acpi_table_int_src_ovr *)header;
372 366
373 if (BAD_MADT_ENTRY(intsrc, end)) 367 if (BAD_MADT_ENTRY(intsrc, end))
374 return -EINVAL; 368 return -EINVAL;
@@ -377,33 +371,30 @@ acpi_parse_int_src_ovr (
377 371
378 if (intsrc->bus_irq == acpi_fadt.sci_int) { 372 if (intsrc->bus_irq == acpi_fadt.sci_int) {
379 acpi_sci_ioapic_setup(intsrc->global_irq, 373 acpi_sci_ioapic_setup(intsrc->global_irq,
380 intsrc->flags.polarity, intsrc->flags.trigger); 374 intsrc->flags.polarity,
375 intsrc->flags.trigger);
381 return 0; 376 return 0;
382 } 377 }
383 378
384 if (acpi_skip_timer_override && 379 if (acpi_skip_timer_override &&
385 intsrc->bus_irq == 0 && intsrc->global_irq == 2) { 380 intsrc->bus_irq == 0 && intsrc->global_irq == 2) {
386 printk(PREFIX "BIOS IRQ0 pin2 override ignored.\n"); 381 printk(PREFIX "BIOS IRQ0 pin2 override ignored.\n");
387 return 0; 382 return 0;
388 } 383 }
389 384
390 mp_override_legacy_irq ( 385 mp_override_legacy_irq(intsrc->bus_irq,
391 intsrc->bus_irq, 386 intsrc->flags.polarity,
392 intsrc->flags.polarity, 387 intsrc->flags.trigger, intsrc->global_irq);
393 intsrc->flags.trigger,
394 intsrc->global_irq);
395 388
396 return 0; 389 return 0;
397} 390}
398 391
399
400static int __init 392static int __init
401acpi_parse_nmi_src ( 393acpi_parse_nmi_src(acpi_table_entry_header * header, const unsigned long end)
402 acpi_table_entry_header *header, const unsigned long end)
403{ 394{
404 struct acpi_table_nmi_src *nmi_src = NULL; 395 struct acpi_table_nmi_src *nmi_src = NULL;
405 396
406 nmi_src = (struct acpi_table_nmi_src*) header; 397 nmi_src = (struct acpi_table_nmi_src *)header;
407 398
408 if (BAD_MADT_ENTRY(nmi_src, end)) 399 if (BAD_MADT_ENTRY(nmi_src, end))
409 return -EINVAL; 400 return -EINVAL;
@@ -415,7 +406,7 @@ acpi_parse_nmi_src (
415 return 0; 406 return 0;
416} 407}
417 408
418#endif /* CONFIG_X86_IO_APIC */ 409#endif /* CONFIG_X86_IO_APIC */
419 410
420#ifdef CONFIG_ACPI_BUS 411#ifdef CONFIG_ACPI_BUS
421 412
@@ -433,8 +424,7 @@ acpi_parse_nmi_src (
433 * ECLR2 is IRQ's 8-15 (IRQ 8, 13 must be 0) 424 * ECLR2 is IRQ's 8-15 (IRQ 8, 13 must be 0)
434 */ 425 */
435 426
436void __init 427void __init acpi_pic_sci_set_trigger(unsigned int irq, u16 trigger)
437acpi_pic_sci_set_trigger(unsigned int irq, u16 trigger)
438{ 428{
439 unsigned int mask = 1 << irq; 429 unsigned int mask = 1 << irq;
440 unsigned int old, new; 430 unsigned int old, new;
@@ -454,10 +444,10 @@ acpi_pic_sci_set_trigger(unsigned int irq, u16 trigger)
454 * routing tables.. 444 * routing tables..
455 */ 445 */
456 switch (trigger) { 446 switch (trigger) {
457 case 1: /* Edge - clear */ 447 case 1: /* Edge - clear */
458 new &= ~mask; 448 new &= ~mask;
459 break; 449 break;
460 case 3: /* Level - set */ 450 case 3: /* Level - set */
461 new |= mask; 451 new |= mask;
462 break; 452 break;
463 } 453 }
@@ -470,21 +460,24 @@ acpi_pic_sci_set_trigger(unsigned int irq, u16 trigger)
470 outb(new >> 8, 0x4d1); 460 outb(new >> 8, 0x4d1);
471} 461}
472 462
473 463#endif /* CONFIG_ACPI_BUS */
474#endif /* CONFIG_ACPI_BUS */
475 464
476int acpi_gsi_to_irq(u32 gsi, unsigned int *irq) 465int acpi_gsi_to_irq(u32 gsi, unsigned int *irq)
477{ 466{
478#ifdef CONFIG_X86_IO_APIC 467#ifdef CONFIG_X86_IO_APIC
479 if (use_pci_vector() && !platform_legacy_irq(gsi)) 468 if (use_pci_vector() && !platform_legacy_irq(gsi))
480 *irq = IO_APIC_VECTOR(gsi); 469 *irq = IO_APIC_VECTOR(gsi);
481 else 470 else
482#endif 471#endif
483 *irq = gsi; 472 *irq = gsi;
484 return 0; 473 return 0;
485} 474}
486 475
487unsigned int acpi_register_gsi(u32 gsi, int edge_level, int active_high_low) 476/*
477 * success: return IRQ number (>=0)
478 * failure: return < 0
479 */
480int acpi_register_gsi(u32 gsi, int edge_level, int active_high_low)
488{ 481{
489 unsigned int irq; 482 unsigned int irq;
490 unsigned int plat_gsi = gsi; 483 unsigned int plat_gsi = gsi;
@@ -497,7 +490,7 @@ unsigned int acpi_register_gsi(u32 gsi, int edge_level, int active_high_low)
497 extern void eisa_set_level_irq(unsigned int irq); 490 extern void eisa_set_level_irq(unsigned int irq);
498 491
499 if (edge_level == ACPI_LEVEL_SENSITIVE) 492 if (edge_level == ACPI_LEVEL_SENSITIVE)
500 eisa_set_level_irq(gsi); 493 eisa_set_level_irq(gsi);
501 } 494 }
502#endif 495#endif
503 496
@@ -509,60 +502,58 @@ unsigned int acpi_register_gsi(u32 gsi, int edge_level, int active_high_low)
509 acpi_gsi_to_irq(plat_gsi, &irq); 502 acpi_gsi_to_irq(plat_gsi, &irq);
510 return irq; 503 return irq;
511} 504}
505
512EXPORT_SYMBOL(acpi_register_gsi); 506EXPORT_SYMBOL(acpi_register_gsi);
513 507
514/* 508/*
515 * ACPI based hotplug support for CPU 509 * ACPI based hotplug support for CPU
516 */ 510 */
517#ifdef CONFIG_ACPI_HOTPLUG_CPU 511#ifdef CONFIG_ACPI_HOTPLUG_CPU
518int 512int acpi_map_lsapic(acpi_handle handle, int *pcpu)
519acpi_map_lsapic(acpi_handle handle, int *pcpu)
520{ 513{
521 /* TBD */ 514 /* TBD */
522 return -EINVAL; 515 return -EINVAL;
523} 516}
524EXPORT_SYMBOL(acpi_map_lsapic);
525 517
518EXPORT_SYMBOL(acpi_map_lsapic);
526 519
527int 520int acpi_unmap_lsapic(int cpu)
528acpi_unmap_lsapic(int cpu)
529{ 521{
530 /* TBD */ 522 /* TBD */
531 return -EINVAL; 523 return -EINVAL;
532} 524}
525
533EXPORT_SYMBOL(acpi_unmap_lsapic); 526EXPORT_SYMBOL(acpi_unmap_lsapic);
534#endif /* CONFIG_ACPI_HOTPLUG_CPU */ 527#endif /* CONFIG_ACPI_HOTPLUG_CPU */
535 528
536int 529int acpi_register_ioapic(acpi_handle handle, u64 phys_addr, u32 gsi_base)
537acpi_register_ioapic(acpi_handle handle, u64 phys_addr, u32 gsi_base)
538{ 530{
539 /* TBD */ 531 /* TBD */
540 return -EINVAL; 532 return -EINVAL;
541} 533}
534
542EXPORT_SYMBOL(acpi_register_ioapic); 535EXPORT_SYMBOL(acpi_register_ioapic);
543 536
544int 537int acpi_unregister_ioapic(acpi_handle handle, u32 gsi_base)
545acpi_unregister_ioapic(acpi_handle handle, u32 gsi_base)
546{ 538{
547 /* TBD */ 539 /* TBD */
548 return -EINVAL; 540 return -EINVAL;
549} 541}
542
550EXPORT_SYMBOL(acpi_unregister_ioapic); 543EXPORT_SYMBOL(acpi_unregister_ioapic);
551 544
552static unsigned long __init 545static unsigned long __init
553acpi_scan_rsdp ( 546acpi_scan_rsdp(unsigned long start, unsigned long length)
554 unsigned long start,
555 unsigned long length)
556{ 547{
557 unsigned long offset = 0; 548 unsigned long offset = 0;
558 unsigned long sig_len = sizeof("RSD PTR ") - 1; 549 unsigned long sig_len = sizeof("RSD PTR ") - 1;
559 550
560 /* 551 /*
561 * Scan all 16-byte boundaries of the physical memory region for the 552 * Scan all 16-byte boundaries of the physical memory region for the
562 * RSDP signature. 553 * RSDP signature.
563 */ 554 */
564 for (offset = 0; offset < length; offset += 16) { 555 for (offset = 0; offset < length; offset += 16) {
565 if (strncmp((char *) (start + offset), "RSD PTR ", sig_len)) 556 if (strncmp((char *)(start + offset), "RSD PTR ", sig_len))
566 continue; 557 continue;
567 return (start + offset); 558 return (start + offset);
568 } 559 }
@@ -575,20 +566,19 @@ static int __init acpi_parse_sbf(unsigned long phys_addr, unsigned long size)
575 struct acpi_table_sbf *sb; 566 struct acpi_table_sbf *sb;
576 567
577 if (!phys_addr || !size) 568 if (!phys_addr || !size)
578 return -EINVAL; 569 return -EINVAL;
579 570
580 sb = (struct acpi_table_sbf *) __acpi_map_table(phys_addr, size); 571 sb = (struct acpi_table_sbf *)__acpi_map_table(phys_addr, size);
581 if (!sb) { 572 if (!sb) {
582 printk(KERN_WARNING PREFIX "Unable to map SBF\n"); 573 printk(KERN_WARNING PREFIX "Unable to map SBF\n");
583 return -ENODEV; 574 return -ENODEV;
584 } 575 }
585 576
586 sbf_port = sb->sbf_cmos; /* Save CMOS port */ 577 sbf_port = sb->sbf_cmos; /* Save CMOS port */
587 578
588 return 0; 579 return 0;
589} 580}
590 581
591
592#ifdef CONFIG_HPET_TIMER 582#ifdef CONFIG_HPET_TIMER
593 583
594static int __init acpi_parse_hpet(unsigned long phys, unsigned long size) 584static int __init acpi_parse_hpet(unsigned long phys, unsigned long size)
@@ -598,7 +588,7 @@ static int __init acpi_parse_hpet(unsigned long phys, unsigned long size)
598 if (!phys || !size) 588 if (!phys || !size)
599 return -EINVAL; 589 return -EINVAL;
600 590
601 hpet_tbl = (struct acpi_table_hpet *) __acpi_map_table(phys, size); 591 hpet_tbl = (struct acpi_table_hpet *)__acpi_map_table(phys, size);
602 if (!hpet_tbl) { 592 if (!hpet_tbl) {
603 printk(KERN_WARNING PREFIX "Unable to map HPET\n"); 593 printk(KERN_WARNING PREFIX "Unable to map HPET\n");
604 return -ENODEV; 594 return -ENODEV;
@@ -609,22 +599,21 @@ static int __init acpi_parse_hpet(unsigned long phys, unsigned long size)
609 "memory.\n"); 599 "memory.\n");
610 return -1; 600 return -1;
611 } 601 }
612
613#ifdef CONFIG_X86_64 602#ifdef CONFIG_X86_64
614 vxtime.hpet_address = hpet_tbl->addr.addrl | 603 vxtime.hpet_address = hpet_tbl->addr.addrl |
615 ((long) hpet_tbl->addr.addrh << 32); 604 ((long)hpet_tbl->addr.addrh << 32);
616 605
617 printk(KERN_INFO PREFIX "HPET id: %#x base: %#lx\n", 606 printk(KERN_INFO PREFIX "HPET id: %#x base: %#lx\n",
618 hpet_tbl->id, vxtime.hpet_address); 607 hpet_tbl->id, vxtime.hpet_address);
619#else /* X86 */ 608#else /* X86 */
620 { 609 {
621 extern unsigned long hpet_address; 610 extern unsigned long hpet_address;
622 611
623 hpet_address = hpet_tbl->addr.addrl; 612 hpet_address = hpet_tbl->addr.addrl;
624 printk(KERN_INFO PREFIX "HPET id: %#x base: %#lx\n", 613 printk(KERN_INFO PREFIX "HPET id: %#x base: %#lx\n",
625 hpet_tbl->id, hpet_address); 614 hpet_tbl->id, hpet_address);
626 } 615 }
627#endif /* X86 */ 616#endif /* X86 */
628 617
629 return 0; 618 return 0;
630} 619}
@@ -640,12 +629,11 @@ static int __init acpi_parse_fadt(unsigned long phys, unsigned long size)
640{ 629{
641 struct fadt_descriptor_rev2 *fadt = NULL; 630 struct fadt_descriptor_rev2 *fadt = NULL;
642 631
643 fadt = (struct fadt_descriptor_rev2*) __acpi_map_table(phys,size); 632 fadt = (struct fadt_descriptor_rev2 *)__acpi_map_table(phys, size);
644 if(!fadt) { 633 if (!fadt) {
645 printk(KERN_WARNING PREFIX "Unable to map FADT\n"); 634 printk(KERN_WARNING PREFIX "Unable to map FADT\n");
646 return 0; 635 return 0;
647 } 636 }
648
649#ifdef CONFIG_ACPI_INTERPRETER 637#ifdef CONFIG_ACPI_INTERPRETER
650 /* initialize sci_int early for INT_SRC_OVR MADT parsing */ 638 /* initialize sci_int early for INT_SRC_OVR MADT parsing */
651 acpi_fadt.sci_int = fadt->sci_int; 639 acpi_fadt.sci_int = fadt->sci_int;
@@ -654,14 +642,16 @@ static int __init acpi_parse_fadt(unsigned long phys, unsigned long size)
654#ifdef CONFIG_ACPI_BUS 642#ifdef CONFIG_ACPI_BUS
655 /* initialize rev and apic_phys_dest_mode for x86_64 genapic */ 643 /* initialize rev and apic_phys_dest_mode for x86_64 genapic */
656 acpi_fadt.revision = fadt->revision; 644 acpi_fadt.revision = fadt->revision;
657 acpi_fadt.force_apic_physical_destination_mode = fadt->force_apic_physical_destination_mode; 645 acpi_fadt.force_apic_physical_destination_mode =
646 fadt->force_apic_physical_destination_mode;
658#endif 647#endif
659 648
660#ifdef CONFIG_X86_PM_TIMER 649#ifdef CONFIG_X86_PM_TIMER
661 /* detect the location of the ACPI PM Timer */ 650 /* detect the location of the ACPI PM Timer */
662 if (fadt->revision >= FADT2_REVISION_ID) { 651 if (fadt->revision >= FADT2_REVISION_ID) {
663 /* FADT rev. 2 */ 652 /* FADT rev. 2 */
664 if (fadt->xpm_tmr_blk.address_space_id != ACPI_ADR_SPACE_SYSTEM_IO) 653 if (fadt->xpm_tmr_blk.address_space_id !=
654 ACPI_ADR_SPACE_SYSTEM_IO)
665 return 0; 655 return 0;
666 656
667 pmtmr_ioport = fadt->xpm_tmr_blk.address; 657 pmtmr_ioport = fadt->xpm_tmr_blk.address;
@@ -670,16 +660,15 @@ static int __init acpi_parse_fadt(unsigned long phys, unsigned long size)
670 pmtmr_ioport = fadt->V1_pm_tmr_blk; 660 pmtmr_ioport = fadt->V1_pm_tmr_blk;
671 } 661 }
672 if (pmtmr_ioport) 662 if (pmtmr_ioport)
673 printk(KERN_INFO PREFIX "PM-Timer IO Port: %#x\n", pmtmr_ioport); 663 printk(KERN_INFO PREFIX "PM-Timer IO Port: %#x\n",
664 pmtmr_ioport);
674#endif 665#endif
675 return 0; 666 return 0;
676} 667}
677 668
678 669unsigned long __init acpi_find_rsdp(void)
679unsigned long __init
680acpi_find_rsdp (void)
681{ 670{
682 unsigned long rsdp_phys = 0; 671 unsigned long rsdp_phys = 0;
683 672
684 if (efi_enabled) { 673 if (efi_enabled) {
685 if (efi.acpi20) 674 if (efi.acpi20)
@@ -691,9 +680,9 @@ acpi_find_rsdp (void)
691 * Scan memory looking for the RSDP signature. First search EBDA (low 680 * Scan memory looking for the RSDP signature. First search EBDA (low
692 * memory) paragraphs and then search upper memory (E0000-FFFFF). 681 * memory) paragraphs and then search upper memory (E0000-FFFFF).
693 */ 682 */
694 rsdp_phys = acpi_scan_rsdp (0, 0x400); 683 rsdp_phys = acpi_scan_rsdp(0, 0x400);
695 if (!rsdp_phys) 684 if (!rsdp_phys)
696 rsdp_phys = acpi_scan_rsdp (0xE0000, 0x20000); 685 rsdp_phys = acpi_scan_rsdp(0xE0000, 0x20000);
697 686
698 return rsdp_phys; 687 return rsdp_phys;
699} 688}
@@ -703,8 +692,7 @@ acpi_find_rsdp (void)
703 * Parse LAPIC entries in MADT 692 * Parse LAPIC entries in MADT
704 * returns 0 on success, < 0 on error 693 * returns 0 on success, < 0 on error
705 */ 694 */
706static int __init 695static int __init acpi_parse_madt_lapic_entries(void)
707acpi_parse_madt_lapic_entries(void)
708{ 696{
709 int count; 697 int count;
710 698
@@ -713,28 +701,31 @@ acpi_parse_madt_lapic_entries(void)
713 * and (optionally) overriden by a LAPIC_ADDR_OVR entry (64-bit value). 701 * and (optionally) overriden by a LAPIC_ADDR_OVR entry (64-bit value).
714 */ 702 */
715 703
716 count = acpi_table_parse_madt(ACPI_MADT_LAPIC_ADDR_OVR, acpi_parse_lapic_addr_ovr, 0); 704 count =
705 acpi_table_parse_madt(ACPI_MADT_LAPIC_ADDR_OVR,
706 acpi_parse_lapic_addr_ovr, 0);
717 if (count < 0) { 707 if (count < 0) {
718 printk(KERN_ERR PREFIX "Error parsing LAPIC address override entry\n"); 708 printk(KERN_ERR PREFIX
709 "Error parsing LAPIC address override entry\n");
719 return count; 710 return count;
720 } 711 }
721 712
722 mp_register_lapic_address(acpi_lapic_addr); 713 mp_register_lapic_address(acpi_lapic_addr);
723 714
724 count = acpi_table_parse_madt(ACPI_MADT_LAPIC, acpi_parse_lapic, 715 count = acpi_table_parse_madt(ACPI_MADT_LAPIC, acpi_parse_lapic,
725 MAX_APICS); 716 MAX_APICS);
726 if (!count) { 717 if (!count) {
727 printk(KERN_ERR PREFIX "No LAPIC entries present\n"); 718 printk(KERN_ERR PREFIX "No LAPIC entries present\n");
728 /* TBD: Cleanup to allow fallback to MPS */ 719 /* TBD: Cleanup to allow fallback to MPS */
729 return -ENODEV; 720 return -ENODEV;
730 } 721 } else if (count < 0) {
731 else if (count < 0) {
732 printk(KERN_ERR PREFIX "Error parsing LAPIC entry\n"); 722 printk(KERN_ERR PREFIX "Error parsing LAPIC entry\n");
733 /* TBD: Cleanup to allow fallback to MPS */ 723 /* TBD: Cleanup to allow fallback to MPS */
734 return count; 724 return count;
735 } 725 }
736 726
737 count = acpi_table_parse_madt(ACPI_MADT_LAPIC_NMI, acpi_parse_lapic_nmi, 0); 727 count =
728 acpi_table_parse_madt(ACPI_MADT_LAPIC_NMI, acpi_parse_lapic_nmi, 0);
738 if (count < 0) { 729 if (count < 0) {
739 printk(KERN_ERR PREFIX "Error parsing LAPIC NMI entry\n"); 730 printk(KERN_ERR PREFIX "Error parsing LAPIC NMI entry\n");
740 /* TBD: Cleanup to allow fallback to MPS */ 731 /* TBD: Cleanup to allow fallback to MPS */
@@ -742,15 +733,14 @@ acpi_parse_madt_lapic_entries(void)
742 } 733 }
743 return 0; 734 return 0;
744} 735}
745#endif /* CONFIG_X86_LOCAL_APIC */ 736#endif /* CONFIG_X86_LOCAL_APIC */
746 737
747#if defined(CONFIG_X86_IO_APIC) && defined(CONFIG_ACPI_INTERPRETER) 738#if defined(CONFIG_X86_IO_APIC) && defined(CONFIG_ACPI_INTERPRETER)
748/* 739/*
749 * Parse IOAPIC related entries in MADT 740 * Parse IOAPIC related entries in MADT
750 * returns 0 on success, < 0 on error 741 * returns 0 on success, < 0 on error
751 */ 742 */
752static int __init 743static int __init acpi_parse_madt_ioapic_entries(void)
753acpi_parse_madt_ioapic_entries(void)
754{ 744{
755 int count; 745 int count;
756 746
@@ -762,30 +752,34 @@ acpi_parse_madt_ioapic_entries(void)
762 */ 752 */
763 if (acpi_disabled || acpi_noirq) { 753 if (acpi_disabled || acpi_noirq) {
764 return -ENODEV; 754 return -ENODEV;
765 } 755 }
766 756
767 /* 757 /*
768 * if "noapic" boot option, don't look for IO-APICs 758 * if "noapic" boot option, don't look for IO-APICs
769 */ 759 */
770 if (skip_ioapic_setup) { 760 if (skip_ioapic_setup) {
771 printk(KERN_INFO PREFIX "Skipping IOAPIC probe " 761 printk(KERN_INFO PREFIX "Skipping IOAPIC probe "
772 "due to 'noapic' option.\n"); 762 "due to 'noapic' option.\n");
773 return -ENODEV; 763 return -ENODEV;
774 } 764 }
775 765
776 count = acpi_table_parse_madt(ACPI_MADT_IOAPIC, acpi_parse_ioapic, MAX_IO_APICS); 766 count =
767 acpi_table_parse_madt(ACPI_MADT_IOAPIC, acpi_parse_ioapic,
768 MAX_IO_APICS);
777 if (!count) { 769 if (!count) {
778 printk(KERN_ERR PREFIX "No IOAPIC entries present\n"); 770 printk(KERN_ERR PREFIX "No IOAPIC entries present\n");
779 return -ENODEV; 771 return -ENODEV;
780 } 772 } else if (count < 0) {
781 else if (count < 0) {
782 printk(KERN_ERR PREFIX "Error parsing IOAPIC entry\n"); 773 printk(KERN_ERR PREFIX "Error parsing IOAPIC entry\n");
783 return count; 774 return count;
784 } 775 }
785 776
786 count = acpi_table_parse_madt(ACPI_MADT_INT_SRC_OVR, acpi_parse_int_src_ovr, NR_IRQ_VECTORS); 777 count =
778 acpi_table_parse_madt(ACPI_MADT_INT_SRC_OVR, acpi_parse_int_src_ovr,
779 NR_IRQ_VECTORS);
787 if (count < 0) { 780 if (count < 0) {
788 printk(KERN_ERR PREFIX "Error parsing interrupt source overrides entry\n"); 781 printk(KERN_ERR PREFIX
782 "Error parsing interrupt source overrides entry\n");
789 /* TBD: Cleanup to allow fallback to MPS */ 783 /* TBD: Cleanup to allow fallback to MPS */
790 return count; 784 return count;
791 } 785 }
@@ -800,7 +794,9 @@ acpi_parse_madt_ioapic_entries(void)
800 /* Fill in identity legacy mapings where no override */ 794 /* Fill in identity legacy mapings where no override */
801 mp_config_acpi_legacy_irqs(); 795 mp_config_acpi_legacy_irqs();
802 796
803 count = acpi_table_parse_madt(ACPI_MADT_NMI_SRC, acpi_parse_nmi_src, NR_IRQ_VECTORS); 797 count =
798 acpi_table_parse_madt(ACPI_MADT_NMI_SRC, acpi_parse_nmi_src,
799 NR_IRQ_VECTORS);
804 if (count < 0) { 800 if (count < 0) {
805 printk(KERN_ERR PREFIX "Error parsing NMI SRC entry\n"); 801 printk(KERN_ERR PREFIX "Error parsing NMI SRC entry\n");
806 /* TBD: Cleanup to allow fallback to MPS */ 802 /* TBD: Cleanup to allow fallback to MPS */
@@ -814,11 +810,9 @@ static inline int acpi_parse_madt_ioapic_entries(void)
814{ 810{
815 return -1; 811 return -1;
816} 812}
817#endif /* !(CONFIG_X86_IO_APIC && CONFIG_ACPI_INTERPRETER) */ 813#endif /* !(CONFIG_X86_IO_APIC && CONFIG_ACPI_INTERPRETER) */
818
819 814
820static void __init 815static void __init acpi_process_madt(void)
821acpi_process_madt(void)
822{ 816{
823#ifdef CONFIG_X86_LOCAL_APIC 817#ifdef CONFIG_X86_LOCAL_APIC
824 int count, error; 818 int count, error;
@@ -850,7 +844,8 @@ acpi_process_madt(void)
850 /* 844 /*
851 * Dell Precision Workstation 410, 610 come here. 845 * Dell Precision Workstation 410, 610 come here.
852 */ 846 */
853 printk(KERN_ERR PREFIX "Invalid BIOS MADT, disabling ACPI\n"); 847 printk(KERN_ERR PREFIX
848 "Invalid BIOS MADT, disabling ACPI\n");
854 disable_acpi(); 849 disable_acpi();
855 } 850 }
856 } 851 }
@@ -887,7 +882,7 @@ static int __init disable_acpi_pci(struct dmi_system_id *d)
887static int __init dmi_disable_acpi(struct dmi_system_id *d) 882static int __init dmi_disable_acpi(struct dmi_system_id *d)
888{ 883{
889 if (!acpi_force) { 884 if (!acpi_force) {
890 printk(KERN_NOTICE "%s detected: acpi off\n",d->ident); 885 printk(KERN_NOTICE "%s detected: acpi off\n", d->ident);
891 disable_acpi(); 886 disable_acpi();
892 } else { 887 } else {
893 printk(KERN_NOTICE 888 printk(KERN_NOTICE
@@ -902,7 +897,8 @@ static int __init dmi_disable_acpi(struct dmi_system_id *d)
902static int __init force_acpi_ht(struct dmi_system_id *d) 897static int __init force_acpi_ht(struct dmi_system_id *d)
903{ 898{
904 if (!acpi_force) { 899 if (!acpi_force) {
905 printk(KERN_NOTICE "%s detected: force use of acpi=ht\n", d->ident); 900 printk(KERN_NOTICE "%s detected: force use of acpi=ht\n",
901 d->ident);
906 disable_acpi(); 902 disable_acpi();
907 acpi_ht = 1; 903 acpi_ht = 1;
908 } else { 904 } else {
@@ -921,155 +917,157 @@ static struct dmi_system_id __initdata acpi_dmi_table[] = {
921 * Boxes that need ACPI disabled 917 * Boxes that need ACPI disabled
922 */ 918 */
923 { 919 {
924 .callback = dmi_disable_acpi, 920 .callback = dmi_disable_acpi,
925 .ident = "IBM Thinkpad", 921 .ident = "IBM Thinkpad",
926 .matches = { 922 .matches = {
927 DMI_MATCH(DMI_BOARD_VENDOR, "IBM"), 923 DMI_MATCH(DMI_BOARD_VENDOR, "IBM"),
928 DMI_MATCH(DMI_BOARD_NAME, "2629H1G"), 924 DMI_MATCH(DMI_BOARD_NAME, "2629H1G"),
929 }, 925 },
930 }, 926 },
931 927
932 /* 928 /*
933 * Boxes that need acpi=ht 929 * Boxes that need acpi=ht
934 */ 930 */
935 { 931 {
936 .callback = force_acpi_ht, 932 .callback = force_acpi_ht,
937 .ident = "FSC Primergy T850", 933 .ident = "FSC Primergy T850",
938 .matches = { 934 .matches = {
939 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"), 935 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
940 DMI_MATCH(DMI_PRODUCT_NAME, "PRIMERGY T850"), 936 DMI_MATCH(DMI_PRODUCT_NAME, "PRIMERGY T850"),
941 }, 937 },
942 }, 938 },
943 { 939 {
944 .callback = force_acpi_ht, 940 .callback = force_acpi_ht,
945 .ident = "DELL GX240", 941 .ident = "DELL GX240",
946 .matches = { 942 .matches = {
947 DMI_MATCH(DMI_BOARD_VENDOR, "Dell Computer Corporation"), 943 DMI_MATCH(DMI_BOARD_VENDOR, "Dell Computer Corporation"),
948 DMI_MATCH(DMI_BOARD_NAME, "OptiPlex GX240"), 944 DMI_MATCH(DMI_BOARD_NAME, "OptiPlex GX240"),
949 }, 945 },
950 }, 946 },
951 { 947 {
952 .callback = force_acpi_ht, 948 .callback = force_acpi_ht,
953 .ident = "HP VISUALIZE NT Workstation", 949 .ident = "HP VISUALIZE NT Workstation",
954 .matches = { 950 .matches = {
955 DMI_MATCH(DMI_BOARD_VENDOR, "Hewlett-Packard"), 951 DMI_MATCH(DMI_BOARD_VENDOR, "Hewlett-Packard"),
956 DMI_MATCH(DMI_PRODUCT_NAME, "HP VISUALIZE NT Workstation"), 952 DMI_MATCH(DMI_PRODUCT_NAME, "HP VISUALIZE NT Workstation"),
957 }, 953 },
958 }, 954 },
959 { 955 {
960 .callback = force_acpi_ht, 956 .callback = force_acpi_ht,
961 .ident = "Compaq Workstation W8000", 957 .ident = "Compaq Workstation W8000",
962 .matches = { 958 .matches = {
963 DMI_MATCH(DMI_SYS_VENDOR, "Compaq"), 959 DMI_MATCH(DMI_SYS_VENDOR, "Compaq"),
964 DMI_MATCH(DMI_PRODUCT_NAME, "Workstation W8000"), 960 DMI_MATCH(DMI_PRODUCT_NAME, "Workstation W8000"),
965 }, 961 },
966 }, 962 },
967 { 963 {
968 .callback = force_acpi_ht, 964 .callback = force_acpi_ht,
969 .ident = "ASUS P4B266", 965 .ident = "ASUS P4B266",
970 .matches = { 966 .matches = {
971 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."), 967 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
972 DMI_MATCH(DMI_BOARD_NAME, "P4B266"), 968 DMI_MATCH(DMI_BOARD_NAME, "P4B266"),
973 }, 969 },
974 }, 970 },
975 { 971 {
976 .callback = force_acpi_ht, 972 .callback = force_acpi_ht,
977 .ident = "ASUS P2B-DS", 973 .ident = "ASUS P2B-DS",
978 .matches = { 974 .matches = {
979 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."), 975 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
980 DMI_MATCH(DMI_BOARD_NAME, "P2B-DS"), 976 DMI_MATCH(DMI_BOARD_NAME, "P2B-DS"),
981 }, 977 },
982 }, 978 },
983 { 979 {
984 .callback = force_acpi_ht, 980 .callback = force_acpi_ht,
985 .ident = "ASUS CUR-DLS", 981 .ident = "ASUS CUR-DLS",
986 .matches = { 982 .matches = {
987 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."), 983 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
988 DMI_MATCH(DMI_BOARD_NAME, "CUR-DLS"), 984 DMI_MATCH(DMI_BOARD_NAME, "CUR-DLS"),
989 }, 985 },
990 }, 986 },
991 { 987 {
992 .callback = force_acpi_ht, 988 .callback = force_acpi_ht,
993 .ident = "ABIT i440BX-W83977", 989 .ident = "ABIT i440BX-W83977",
994 .matches = { 990 .matches = {
995 DMI_MATCH(DMI_BOARD_VENDOR, "ABIT <http://www.abit.com>"), 991 DMI_MATCH(DMI_BOARD_VENDOR, "ABIT <http://www.abit.com>"),
996 DMI_MATCH(DMI_BOARD_NAME, "i440BX-W83977 (BP6)"), 992 DMI_MATCH(DMI_BOARD_NAME, "i440BX-W83977 (BP6)"),
997 }, 993 },
998 }, 994 },
999 { 995 {
1000 .callback = force_acpi_ht, 996 .callback = force_acpi_ht,
1001 .ident = "IBM Bladecenter", 997 .ident = "IBM Bladecenter",
1002 .matches = { 998 .matches = {
1003 DMI_MATCH(DMI_BOARD_VENDOR, "IBM"), 999 DMI_MATCH(DMI_BOARD_VENDOR, "IBM"),
1004 DMI_MATCH(DMI_BOARD_NAME, "IBM eServer BladeCenter HS20"), 1000 DMI_MATCH(DMI_BOARD_NAME, "IBM eServer BladeCenter HS20"),
1005 }, 1001 },
1006 }, 1002 },
1007 { 1003 {
1008 .callback = force_acpi_ht, 1004 .callback = force_acpi_ht,
1009 .ident = "IBM eServer xSeries 360", 1005 .ident = "IBM eServer xSeries 360",
1010 .matches = { 1006 .matches = {
1011 DMI_MATCH(DMI_BOARD_VENDOR, "IBM"), 1007 DMI_MATCH(DMI_BOARD_VENDOR, "IBM"),
1012 DMI_MATCH(DMI_BOARD_NAME, "eServer xSeries 360"), 1008 DMI_MATCH(DMI_BOARD_NAME, "eServer xSeries 360"),
1013 }, 1009 },
1014 }, 1010 },
1015 { 1011 {
1016 .callback = force_acpi_ht, 1012 .callback = force_acpi_ht,
1017 .ident = "IBM eserver xSeries 330", 1013 .ident = "IBM eserver xSeries 330",
1018 .matches = { 1014 .matches = {
1019 DMI_MATCH(DMI_BOARD_VENDOR, "IBM"), 1015 DMI_MATCH(DMI_BOARD_VENDOR, "IBM"),
1020 DMI_MATCH(DMI_BOARD_NAME, "eserver xSeries 330"), 1016 DMI_MATCH(DMI_BOARD_NAME, "eserver xSeries 330"),
1021 }, 1017 },
1022 }, 1018 },
1023 { 1019 {
1024 .callback = force_acpi_ht, 1020 .callback = force_acpi_ht,
1025 .ident = "IBM eserver xSeries 440", 1021 .ident = "IBM eserver xSeries 440",
1026 .matches = { 1022 .matches = {
1027 DMI_MATCH(DMI_BOARD_VENDOR, "IBM"), 1023 DMI_MATCH(DMI_BOARD_VENDOR, "IBM"),
1028 DMI_MATCH(DMI_PRODUCT_NAME, "eserver xSeries 440"), 1024 DMI_MATCH(DMI_PRODUCT_NAME, "eserver xSeries 440"),
1029 }, 1025 },
1030 }, 1026 },
1031 1027
1032#ifdef CONFIG_ACPI_PCI 1028#ifdef CONFIG_ACPI_PCI
1033 /* 1029 /*
1034 * Boxes that need ACPI PCI IRQ routing disabled 1030 * Boxes that need ACPI PCI IRQ routing disabled
1035 */ 1031 */
1036 { 1032 {
1037 .callback = disable_acpi_irq, 1033 .callback = disable_acpi_irq,
1038 .ident = "ASUS A7V", 1034 .ident = "ASUS A7V",
1039 .matches = { 1035 .matches = {
1040 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC"), 1036 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC"),
1041 DMI_MATCH(DMI_BOARD_NAME, "<A7V>"), 1037 DMI_MATCH(DMI_BOARD_NAME, "<A7V>"),
1042 /* newer BIOS, Revision 1011, does work */ 1038 /* newer BIOS, Revision 1011, does work */
1043 DMI_MATCH(DMI_BIOS_VERSION, "ASUS A7V ACPI BIOS Revision 1007"), 1039 DMI_MATCH(DMI_BIOS_VERSION,
1044 }, 1040 "ASUS A7V ACPI BIOS Revision 1007"),
1045 }, 1041 },
1042 },
1046 1043
1047 /* 1044 /*
1048 * Boxes that need ACPI PCI IRQ routing and PCI scan disabled 1045 * Boxes that need ACPI PCI IRQ routing and PCI scan disabled
1049 */ 1046 */
1050 { /* _BBN 0 bug */ 1047 { /* _BBN 0 bug */
1051 .callback = disable_acpi_pci, 1048 .callback = disable_acpi_pci,
1052 .ident = "ASUS PR-DLS", 1049 .ident = "ASUS PR-DLS",
1053 .matches = { 1050 .matches = {
1054 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."), 1051 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
1055 DMI_MATCH(DMI_BOARD_NAME, "PR-DLS"), 1052 DMI_MATCH(DMI_BOARD_NAME, "PR-DLS"),
1056 DMI_MATCH(DMI_BIOS_VERSION, "ASUS PR-DLS ACPI BIOS Revision 1010"), 1053 DMI_MATCH(DMI_BIOS_VERSION,
1057 DMI_MATCH(DMI_BIOS_DATE, "03/21/2003") 1054 "ASUS PR-DLS ACPI BIOS Revision 1010"),
1058 }, 1055 DMI_MATCH(DMI_BIOS_DATE, "03/21/2003")
1059 }, 1056 },
1057 },
1060 { 1058 {
1061 .callback = disable_acpi_pci, 1059 .callback = disable_acpi_pci,
1062 .ident = "Acer TravelMate 36x Laptop", 1060 .ident = "Acer TravelMate 36x Laptop",
1063 .matches = { 1061 .matches = {
1064 DMI_MATCH(DMI_SYS_VENDOR, "Acer"), 1062 DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
1065 DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 360"), 1063 DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 360"),
1066 }, 1064 },
1067 }, 1065 },
1068#endif 1066#endif
1069 { } 1067 {}
1070}; 1068};
1071 1069
1072#endif /* __i386__ */ 1070#endif /* __i386__ */
1073 1071
1074/* 1072/*
1075 * acpi_boot_table_init() and acpi_boot_init() 1073 * acpi_boot_table_init() and acpi_boot_init()
@@ -1094,8 +1092,7 @@ static struct dmi_system_id __initdata acpi_dmi_table[] = {
1094 * !0: failure 1092 * !0: failure
1095 */ 1093 */
1096 1094
1097int __init 1095int __init acpi_boot_table_init(void)
1098acpi_boot_table_init(void)
1099{ 1096{
1100 int error; 1097 int error;
1101 1098
@@ -1108,7 +1105,7 @@ acpi_boot_table_init(void)
1108 * One exception: acpi=ht continues far enough to enumerate LAPICs 1105 * One exception: acpi=ht continues far enough to enumerate LAPICs
1109 */ 1106 */
1110 if (acpi_disabled && !acpi_ht) 1107 if (acpi_disabled && !acpi_ht)
1111 return 1; 1108 return 1;
1112 1109
1113 /* 1110 /*
1114 * Initialize the ACPI boot-time table parser. 1111 * Initialize the ACPI boot-time table parser.
@@ -1118,7 +1115,6 @@ acpi_boot_table_init(void)
1118 disable_acpi(); 1115 disable_acpi();
1119 return error; 1116 return error;
1120 } 1117 }
1121
1122#ifdef __i386__ 1118#ifdef __i386__
1123 check_acpi_pci(); 1119 check_acpi_pci();
1124#endif 1120#endif
@@ -1142,7 +1138,6 @@ acpi_boot_table_init(void)
1142 return 0; 1138 return 0;
1143} 1139}
1144 1140
1145
1146int __init acpi_boot_init(void) 1141int __init acpi_boot_init(void)
1147{ 1142{
1148 /* 1143 /*
@@ -1150,7 +1145,7 @@ int __init acpi_boot_init(void)
1150 * One exception: acpi=ht continues far enough to enumerate LAPICs 1145 * One exception: acpi=ht continues far enough to enumerate LAPICs
1151 */ 1146 */
1152 if (acpi_disabled && !acpi_ht) 1147 if (acpi_disabled && !acpi_ht)
1153 return 1; 1148 return 1;
1154 1149
1155 acpi_table_parse(ACPI_BOOT, acpi_parse_sbf); 1150 acpi_table_parse(ACPI_BOOT, acpi_parse_sbf);
1156 1151
@@ -1168,4 +1163,3 @@ int __init acpi_boot_init(void)
1168 1163
1169 return 0; 1164 return 0;
1170} 1165}
1171
diff --git a/arch/i386/kernel/acpi/earlyquirk.c b/arch/i386/kernel/acpi/earlyquirk.c
index 726a5ca4b165..f1b9d2a46dab 100644
--- a/arch/i386/kernel/acpi/earlyquirk.c
+++ b/arch/i386/kernel/acpi/earlyquirk.c
@@ -8,44 +8,44 @@
8#include <asm/pci-direct.h> 8#include <asm/pci-direct.h>
9#include <asm/acpi.h> 9#include <asm/acpi.h>
10 10
11static int __init check_bridge(int vendor, int device) 11static int __init check_bridge(int vendor, int device)
12{ 12{
13 /* According to Nvidia all timer overrides are bogus. Just ignore 13 /* According to Nvidia all timer overrides are bogus. Just ignore
14 them all. */ 14 them all. */
15 if (vendor == PCI_VENDOR_ID_NVIDIA) { 15 if (vendor == PCI_VENDOR_ID_NVIDIA) {
16 acpi_skip_timer_override = 1; 16 acpi_skip_timer_override = 1;
17 } 17 }
18 return 0; 18 return 0;
19} 19}
20 20
21void __init check_acpi_pci(void) 21void __init check_acpi_pci(void)
22{ 22{
23 int num,slot,func; 23 int num, slot, func;
24 24
25 /* Assume the machine supports type 1. If not it will 25 /* Assume the machine supports type 1. If not it will
26 always read ffffffff and should not have any side effect. */ 26 always read ffffffff and should not have any side effect. */
27 27
28 /* Poor man's PCI discovery */ 28 /* Poor man's PCI discovery */
29 for (num = 0; num < 32; num++) { 29 for (num = 0; num < 32; num++) {
30 for (slot = 0; slot < 32; slot++) { 30 for (slot = 0; slot < 32; slot++) {
31 for (func = 0; func < 8; func++) { 31 for (func = 0; func < 8; func++) {
32 u32 class; 32 u32 class;
33 u32 vendor; 33 u32 vendor;
34 class = read_pci_config(num,slot,func, 34 class = read_pci_config(num, slot, func,
35 PCI_CLASS_REVISION); 35 PCI_CLASS_REVISION);
36 if (class == 0xffffffff) 36 if (class == 0xffffffff)
37 break; 37 break;
38 38
39 if ((class >> 16) != PCI_CLASS_BRIDGE_PCI) 39 if ((class >> 16) != PCI_CLASS_BRIDGE_PCI)
40 continue; 40 continue;
41 41
42 vendor = read_pci_config(num, slot, func, 42 vendor = read_pci_config(num, slot, func,
43 PCI_VENDOR_ID); 43 PCI_VENDOR_ID);
44 44
45 if (check_bridge(vendor&0xffff, vendor >> 16)) 45 if (check_bridge(vendor & 0xffff, vendor >> 16))
46 return; 46 return;
47 } 47 }
48 48
49 } 49 }
50 } 50 }
51} 51}
diff --git a/arch/i386/kernel/acpi/sleep.c b/arch/i386/kernel/acpi/sleep.c
index c1af93032ff3..1cb2b186a3af 100644
--- a/arch/i386/kernel/acpi/sleep.c
+++ b/arch/i386/kernel/acpi/sleep.c
@@ -20,12 +20,13 @@ extern void zap_low_mappings(void);
20 20
21extern unsigned long FASTCALL(acpi_copy_wakeup_routine(unsigned long)); 21extern unsigned long FASTCALL(acpi_copy_wakeup_routine(unsigned long));
22 22
23static void init_low_mapping(pgd_t *pgd, int pgd_limit) 23static void init_low_mapping(pgd_t * pgd, int pgd_limit)
24{ 24{
25 int pgd_ofs = 0; 25 int pgd_ofs = 0;
26 26
27 while ((pgd_ofs < pgd_limit) && (pgd_ofs + USER_PTRS_PER_PGD < PTRS_PER_PGD)) { 27 while ((pgd_ofs < pgd_limit)
28 set_pgd(pgd, *(pgd+USER_PTRS_PER_PGD)); 28 && (pgd_ofs + USER_PTRS_PER_PGD < PTRS_PER_PGD)) {
29 set_pgd(pgd, *(pgd + USER_PTRS_PER_PGD));
29 pgd_ofs++, pgd++; 30 pgd_ofs++, pgd++;
30 } 31 }
31 flush_tlb_all(); 32 flush_tlb_all();
@@ -37,12 +38,13 @@ static void init_low_mapping(pgd_t *pgd, int pgd_limit)
37 * Create an identity mapped page table and copy the wakeup routine to 38 * Create an identity mapped page table and copy the wakeup routine to
38 * low memory. 39 * low memory.
39 */ 40 */
40int acpi_save_state_mem (void) 41int acpi_save_state_mem(void)
41{ 42{
42 if (!acpi_wakeup_address) 43 if (!acpi_wakeup_address)
43 return 1; 44 return 1;
44 init_low_mapping(swapper_pg_dir, USER_PTRS_PER_PGD); 45 init_low_mapping(swapper_pg_dir, USER_PTRS_PER_PGD);
45 memcpy((void *) acpi_wakeup_address, &wakeup_start, &wakeup_end - &wakeup_start); 46 memcpy((void *)acpi_wakeup_address, &wakeup_start,
47 &wakeup_end - &wakeup_start);
46 acpi_copy_wakeup_routine(acpi_wakeup_address); 48 acpi_copy_wakeup_routine(acpi_wakeup_address);
47 49
48 return 0; 50 return 0;
@@ -51,7 +53,7 @@ int acpi_save_state_mem (void)
51/* 53/*
52 * acpi_restore_state - undo effects of acpi_save_state_mem 54 * acpi_restore_state - undo effects of acpi_save_state_mem
53 */ 55 */
54void acpi_restore_state_mem (void) 56void acpi_restore_state_mem(void)
55{ 57{
56 zap_low_mappings(); 58 zap_low_mappings();
57} 59}
@@ -67,7 +69,8 @@ void acpi_restore_state_mem (void)
67void __init acpi_reserve_bootmem(void) 69void __init acpi_reserve_bootmem(void)
68{ 70{
69 if ((&wakeup_end - &wakeup_start) > PAGE_SIZE) { 71 if ((&wakeup_end - &wakeup_start) > PAGE_SIZE) {
70 printk(KERN_ERR "ACPI: Wakeup code way too big, S3 disabled.\n"); 72 printk(KERN_ERR
73 "ACPI: Wakeup code way too big, S3 disabled.\n");
71 return; 74 return;
72 } 75 }
73 76
@@ -90,10 +93,8 @@ static int __init acpi_sleep_setup(char *str)
90 return 1; 93 return 1;
91} 94}
92 95
93
94__setup("acpi_sleep=", acpi_sleep_setup); 96__setup("acpi_sleep=", acpi_sleep_setup);
95 97
96
97static __init int reset_videomode_after_s3(struct dmi_system_id *d) 98static __init int reset_videomode_after_s3(struct dmi_system_id *d)
98{ 99{
99 acpi_video_flags |= 2; 100 acpi_video_flags |= 2;
@@ -101,14 +102,14 @@ static __init int reset_videomode_after_s3(struct dmi_system_id *d)
101} 102}
102 103
103static __initdata struct dmi_system_id acpisleep_dmi_table[] = { 104static __initdata struct dmi_system_id acpisleep_dmi_table[] = {
104 { /* Reset video mode after returning from ACPI S3 sleep */ 105 { /* Reset video mode after returning from ACPI S3 sleep */
105 .callback = reset_videomode_after_s3, 106 .callback = reset_videomode_after_s3,
106 .ident = "Toshiba Satellite 4030cdt", 107 .ident = "Toshiba Satellite 4030cdt",
107 .matches = { 108 .matches = {
108 DMI_MATCH(DMI_PRODUCT_NAME, "S4030CDT/4.3"), 109 DMI_MATCH(DMI_PRODUCT_NAME, "S4030CDT/4.3"),
109 }, 110 },
110 }, 111 },
111 { } 112 {}
112}; 113};
113 114
114static int __init acpisleep_dmi_init(void) 115static int __init acpisleep_dmi_init(void)
diff --git a/arch/ia64/kernel/acpi-ext.c b/arch/ia64/kernel/acpi-ext.c
index 2623df5e2633..13a5b3b49bf8 100644
--- a/arch/ia64/kernel/acpi-ext.c
+++ b/arch/ia64/kernel/acpi-ext.c
@@ -17,20 +17,20 @@
17#include <asm/acpi-ext.h> 17#include <asm/acpi-ext.h>
18 18
19struct acpi_vendor_descriptor { 19struct acpi_vendor_descriptor {
20 u8 guid_id; 20 u8 guid_id;
21 efi_guid_t guid; 21 efi_guid_t guid;
22}; 22};
23 23
24struct acpi_vendor_info { 24struct acpi_vendor_info {
25 struct acpi_vendor_descriptor *descriptor; 25 struct acpi_vendor_descriptor *descriptor;
26 u8 *data; 26 u8 *data;
27 u32 length; 27 u32 length;
28}; 28};
29 29
30acpi_status 30acpi_status
31acpi_vendor_resource_match(struct acpi_resource *resource, void *context) 31acpi_vendor_resource_match(struct acpi_resource *resource, void *context)
32{ 32{
33 struct acpi_vendor_info *info = (struct acpi_vendor_info *) context; 33 struct acpi_vendor_info *info = (struct acpi_vendor_info *)context;
34 struct acpi_resource_vendor *vendor; 34 struct acpi_resource_vendor *vendor;
35 struct acpi_vendor_descriptor *descriptor; 35 struct acpi_vendor_descriptor *descriptor;
36 u32 length; 36 u32 length;
@@ -38,8 +38,8 @@ acpi_vendor_resource_match(struct acpi_resource *resource, void *context)
38 if (resource->id != ACPI_RSTYPE_VENDOR) 38 if (resource->id != ACPI_RSTYPE_VENDOR)
39 return AE_OK; 39 return AE_OK;
40 40
41 vendor = (struct acpi_resource_vendor *) &resource->data; 41 vendor = (struct acpi_resource_vendor *)&resource->data;
42 descriptor = (struct acpi_vendor_descriptor *) vendor->reserved; 42 descriptor = (struct acpi_vendor_descriptor *)vendor->reserved;
43 if (vendor->length <= sizeof(*info->descriptor) || 43 if (vendor->length <= sizeof(*info->descriptor) ||
44 descriptor->guid_id != info->descriptor->guid_id || 44 descriptor->guid_id != info->descriptor->guid_id ||
45 efi_guidcmp(descriptor->guid, info->descriptor->guid)) 45 efi_guidcmp(descriptor->guid, info->descriptor->guid))
@@ -50,21 +50,24 @@ acpi_vendor_resource_match(struct acpi_resource *resource, void *context)
50 if (!info->data) 50 if (!info->data)
51 return AE_NO_MEMORY; 51 return AE_NO_MEMORY;
52 52
53 memcpy(info->data, vendor->reserved + sizeof(struct acpi_vendor_descriptor), length); 53 memcpy(info->data,
54 vendor->reserved + sizeof(struct acpi_vendor_descriptor),
55 length);
54 info->length = length; 56 info->length = length;
55 return AE_CTRL_TERMINATE; 57 return AE_CTRL_TERMINATE;
56} 58}
57 59
58acpi_status 60acpi_status
59acpi_find_vendor_resource(acpi_handle obj, struct acpi_vendor_descriptor *id, 61acpi_find_vendor_resource(acpi_handle obj, struct acpi_vendor_descriptor * id,
60 u8 **data, u32 *length) 62 u8 ** data, u32 * length)
61{ 63{
62 struct acpi_vendor_info info; 64 struct acpi_vendor_info info;
63 65
64 info.descriptor = id; 66 info.descriptor = id;
65 info.data = NULL; 67 info.data = NULL;
66 68
67 acpi_walk_resources(obj, METHOD_NAME__CRS, acpi_vendor_resource_match, &info); 69 acpi_walk_resources(obj, METHOD_NAME__CRS, acpi_vendor_resource_match,
70 &info);
68 if (!info.data) 71 if (!info.data)
69 return AE_NOT_FOUND; 72 return AE_NOT_FOUND;
70 73
@@ -75,17 +78,19 @@ acpi_find_vendor_resource(acpi_handle obj, struct acpi_vendor_descriptor *id,
75 78
76struct acpi_vendor_descriptor hp_ccsr_descriptor = { 79struct acpi_vendor_descriptor hp_ccsr_descriptor = {
77 .guid_id = 2, 80 .guid_id = 2,
78 .guid = EFI_GUID(0x69e9adf9, 0x924f, 0xab5f, 0xf6, 0x4a, 0x24, 0xd2, 0x01, 0x37, 0x0e, 0xad) 81 .guid =
82 EFI_GUID(0x69e9adf9, 0x924f, 0xab5f, 0xf6, 0x4a, 0x24, 0xd2, 0x01,
83 0x37, 0x0e, 0xad)
79}; 84};
80 85
81acpi_status 86acpi_status hp_acpi_csr_space(acpi_handle obj, u64 * csr_base, u64 * csr_length)
82hp_acpi_csr_space(acpi_handle obj, u64 *csr_base, u64 *csr_length)
83{ 87{
84 acpi_status status; 88 acpi_status status;
85 u8 *data; 89 u8 *data;
86 u32 length; 90 u32 length;
87 91
88 status = acpi_find_vendor_resource(obj, &hp_ccsr_descriptor, &data, &length); 92 status =
93 acpi_find_vendor_resource(obj, &hp_ccsr_descriptor, &data, &length);
89 94
90 if (ACPI_FAILURE(status) || length != 16) 95 if (ACPI_FAILURE(status) || length != 16)
91 return AE_NOT_FOUND; 96 return AE_NOT_FOUND;
diff --git a/arch/ia64/kernel/acpi.c b/arch/ia64/kernel/acpi.c
index 9609f243e5d0..f3046bdd4b14 100644
--- a/arch/ia64/kernel/acpi.c
+++ b/arch/ia64/kernel/acpi.c
@@ -74,12 +74,11 @@ unsigned int acpi_cpei_override;
74unsigned int acpi_cpei_phys_cpuid; 74unsigned int acpi_cpei_phys_cpuid;
75 75
76#define MAX_SAPICS 256 76#define MAX_SAPICS 256
77u16 ia64_acpiid_to_sapicid[MAX_SAPICS] = 77u16 ia64_acpiid_to_sapicid[MAX_SAPICS] = {[0...MAX_SAPICS - 1] = -1 };
78 { [0 ... MAX_SAPICS - 1] = -1 }; 78
79EXPORT_SYMBOL(ia64_acpiid_to_sapicid); 79EXPORT_SYMBOL(ia64_acpiid_to_sapicid);
80 80
81const char * 81const char *acpi_get_sysname(void)
82acpi_get_sysname (void)
83{ 82{
84#ifdef CONFIG_IA64_GENERIC 83#ifdef CONFIG_IA64_GENERIC
85 unsigned long rsdp_phys; 84 unsigned long rsdp_phys;
@@ -89,27 +88,29 @@ acpi_get_sysname (void)
89 88
90 rsdp_phys = acpi_find_rsdp(); 89 rsdp_phys = acpi_find_rsdp();
91 if (!rsdp_phys) { 90 if (!rsdp_phys) {
92 printk(KERN_ERR "ACPI 2.0 RSDP not found, default to \"dig\"\n"); 91 printk(KERN_ERR
92 "ACPI 2.0 RSDP not found, default to \"dig\"\n");
93 return "dig"; 93 return "dig";
94 } 94 }
95 95
96 rsdp = (struct acpi20_table_rsdp *) __va(rsdp_phys); 96 rsdp = (struct acpi20_table_rsdp *)__va(rsdp_phys);
97 if (strncmp(rsdp->signature, RSDP_SIG, sizeof(RSDP_SIG) - 1)) { 97 if (strncmp(rsdp->signature, RSDP_SIG, sizeof(RSDP_SIG) - 1)) {
98 printk(KERN_ERR "ACPI 2.0 RSDP signature incorrect, default to \"dig\"\n"); 98 printk(KERN_ERR
99 "ACPI 2.0 RSDP signature incorrect, default to \"dig\"\n");
99 return "dig"; 100 return "dig";
100 } 101 }
101 102
102 xsdt = (struct acpi_table_xsdt *) __va(rsdp->xsdt_address); 103 xsdt = (struct acpi_table_xsdt *)__va(rsdp->xsdt_address);
103 hdr = &xsdt->header; 104 hdr = &xsdt->header;
104 if (strncmp(hdr->signature, XSDT_SIG, sizeof(XSDT_SIG) - 1)) { 105 if (strncmp(hdr->signature, XSDT_SIG, sizeof(XSDT_SIG) - 1)) {
105 printk(KERN_ERR "ACPI 2.0 XSDT signature incorrect, default to \"dig\"\n"); 106 printk(KERN_ERR
107 "ACPI 2.0 XSDT signature incorrect, default to \"dig\"\n");
106 return "dig"; 108 return "dig";
107 } 109 }
108 110
109 if (!strcmp(hdr->oem_id, "HP")) { 111 if (!strcmp(hdr->oem_id, "HP")) {
110 return "hpzx1"; 112 return "hpzx1";
111 } 113 } else if (!strcmp(hdr->oem_id, "SGI")) {
112 else if (!strcmp(hdr->oem_id, "SGI")) {
113 return "sn2"; 114 return "sn2";
114 } 115 }
115 116
@@ -137,7 +138,7 @@ acpi_get_sysname (void)
137 138
138/* Array to record platform interrupt vectors for generic interrupt routing. */ 139/* Array to record platform interrupt vectors for generic interrupt routing. */
139int platform_intr_list[ACPI_MAX_PLATFORM_INTERRUPTS] = { 140int platform_intr_list[ACPI_MAX_PLATFORM_INTERRUPTS] = {
140 [0 ... ACPI_MAX_PLATFORM_INTERRUPTS - 1] = -1 141 [0...ACPI_MAX_PLATFORM_INTERRUPTS - 1] = -1
141}; 142};
142 143
143enum acpi_irq_model_id acpi_irq_model = ACPI_IRQ_MODEL_IOSAPIC; 144enum acpi_irq_model_id acpi_irq_model = ACPI_IRQ_MODEL_IOSAPIC;
@@ -146,8 +147,7 @@ enum acpi_irq_model_id acpi_irq_model = ACPI_IRQ_MODEL_IOSAPIC;
146 * Interrupt routing API for device drivers. Provides interrupt vector for 147 * Interrupt routing API for device drivers. Provides interrupt vector for
147 * a generic platform event. Currently only CPEI is implemented. 148 * a generic platform event. Currently only CPEI is implemented.
148 */ 149 */
149int 150int acpi_request_vector(u32 int_type)
150acpi_request_vector (u32 int_type)
151{ 151{
152 int vector = -1; 152 int vector = -1;
153 153
@@ -155,12 +155,12 @@ acpi_request_vector (u32 int_type)
155 /* corrected platform error interrupt */ 155 /* corrected platform error interrupt */
156 vector = platform_intr_list[int_type]; 156 vector = platform_intr_list[int_type];
157 } else 157 } else
158 printk(KERN_ERR "acpi_request_vector(): invalid interrupt type\n"); 158 printk(KERN_ERR
159 "acpi_request_vector(): invalid interrupt type\n");
159 return vector; 160 return vector;
160} 161}
161 162
162char * 163char *__acpi_map_table(unsigned long phys_addr, unsigned long size)
163__acpi_map_table (unsigned long phys_addr, unsigned long size)
164{ 164{
165 return __va(phys_addr); 165 return __va(phys_addr);
166} 166}
@@ -169,19 +169,18 @@ __acpi_map_table (unsigned long phys_addr, unsigned long size)
169 Boot-time Table Parsing 169 Boot-time Table Parsing
170 -------------------------------------------------------------------------- */ 170 -------------------------------------------------------------------------- */
171 171
172static int total_cpus __initdata; 172static int total_cpus __initdata;
173static int available_cpus __initdata; 173static int available_cpus __initdata;
174struct acpi_table_madt * acpi_madt __initdata; 174struct acpi_table_madt *acpi_madt __initdata;
175static u8 has_8259; 175static u8 has_8259;
176
177 176
178static int __init 177static int __init
179acpi_parse_lapic_addr_ovr ( 178acpi_parse_lapic_addr_ovr(acpi_table_entry_header * header,
180 acpi_table_entry_header *header, const unsigned long end) 179 const unsigned long end)
181{ 180{
182 struct acpi_table_lapic_addr_ovr *lapic; 181 struct acpi_table_lapic_addr_ovr *lapic;
183 182
184 lapic = (struct acpi_table_lapic_addr_ovr *) header; 183 lapic = (struct acpi_table_lapic_addr_ovr *)header;
185 184
186 if (BAD_MADT_ENTRY(lapic, end)) 185 if (BAD_MADT_ENTRY(lapic, end))
187 return -EINVAL; 186 return -EINVAL;
@@ -193,22 +192,23 @@ acpi_parse_lapic_addr_ovr (
193 return 0; 192 return 0;
194} 193}
195 194
196
197static int __init 195static int __init
198acpi_parse_lsapic (acpi_table_entry_header *header, const unsigned long end) 196acpi_parse_lsapic(acpi_table_entry_header * header, const unsigned long end)
199{ 197{
200 struct acpi_table_lsapic *lsapic; 198 struct acpi_table_lsapic *lsapic;
201 199
202 lsapic = (struct acpi_table_lsapic *) header; 200 lsapic = (struct acpi_table_lsapic *)header;
203 201
204 if (BAD_MADT_ENTRY(lsapic, end)) 202 if (BAD_MADT_ENTRY(lsapic, end))
205 return -EINVAL; 203 return -EINVAL;
206 204
207 if (lsapic->flags.enabled) { 205 if (lsapic->flags.enabled) {
208#ifdef CONFIG_SMP 206#ifdef CONFIG_SMP
209 smp_boot_data.cpu_phys_id[available_cpus] = (lsapic->id << 8) | lsapic->eid; 207 smp_boot_data.cpu_phys_id[available_cpus] =
208 (lsapic->id << 8) | lsapic->eid;
210#endif 209#endif
211 ia64_acpiid_to_sapicid[lsapic->acpi_id] = (lsapic->id << 8) | lsapic->eid; 210 ia64_acpiid_to_sapicid[lsapic->acpi_id] =
211 (lsapic->id << 8) | lsapic->eid;
212 ++available_cpus; 212 ++available_cpus;
213 } 213 }
214 214
@@ -216,13 +216,12 @@ acpi_parse_lsapic (acpi_table_entry_header *header, const unsigned long end)
216 return 0; 216 return 0;
217} 217}
218 218
219
220static int __init 219static int __init
221acpi_parse_lapic_nmi (acpi_table_entry_header *header, const unsigned long end) 220acpi_parse_lapic_nmi(acpi_table_entry_header * header, const unsigned long end)
222{ 221{
223 struct acpi_table_lapic_nmi *lacpi_nmi; 222 struct acpi_table_lapic_nmi *lacpi_nmi;
224 223
225 lacpi_nmi = (struct acpi_table_lapic_nmi*) header; 224 lacpi_nmi = (struct acpi_table_lapic_nmi *)header;
226 225
227 if (BAD_MADT_ENTRY(lacpi_nmi, end)) 226 if (BAD_MADT_ENTRY(lacpi_nmi, end))
228 return -EINVAL; 227 return -EINVAL;
@@ -231,13 +230,12 @@ acpi_parse_lapic_nmi (acpi_table_entry_header *header, const unsigned long end)
231 return 0; 230 return 0;
232} 231}
233 232
234
235static int __init 233static int __init
236acpi_parse_iosapic (acpi_table_entry_header *header, const unsigned long end) 234acpi_parse_iosapic(acpi_table_entry_header * header, const unsigned long end)
237{ 235{
238 struct acpi_table_iosapic *iosapic; 236 struct acpi_table_iosapic *iosapic;
239 237
240 iosapic = (struct acpi_table_iosapic *) header; 238 iosapic = (struct acpi_table_iosapic *)header;
241 239
242 if (BAD_MADT_ENTRY(iosapic, end)) 240 if (BAD_MADT_ENTRY(iosapic, end))
243 return -EINVAL; 241 return -EINVAL;
@@ -245,15 +243,14 @@ acpi_parse_iosapic (acpi_table_entry_header *header, const unsigned long end)
245 return iosapic_init(iosapic->address, iosapic->global_irq_base); 243 return iosapic_init(iosapic->address, iosapic->global_irq_base);
246} 244}
247 245
248
249static int __init 246static int __init
250acpi_parse_plat_int_src ( 247acpi_parse_plat_int_src(acpi_table_entry_header * header,
251 acpi_table_entry_header *header, const unsigned long end) 248 const unsigned long end)
252{ 249{
253 struct acpi_table_plat_int_src *plintsrc; 250 struct acpi_table_plat_int_src *plintsrc;
254 int vector; 251 int vector;
255 252
256 plintsrc = (struct acpi_table_plat_int_src *) header; 253 plintsrc = (struct acpi_table_plat_int_src *)header;
257 254
258 if (BAD_MADT_ENTRY(plintsrc, end)) 255 if (BAD_MADT_ENTRY(plintsrc, end))
259 return -EINVAL; 256 return -EINVAL;
@@ -267,8 +264,12 @@ acpi_parse_plat_int_src (
267 plintsrc->iosapic_vector, 264 plintsrc->iosapic_vector,
268 plintsrc->eid, 265 plintsrc->eid,
269 plintsrc->id, 266 plintsrc->id,
270 (plintsrc->flags.polarity == 1) ? IOSAPIC_POL_HIGH : IOSAPIC_POL_LOW, 267 (plintsrc->flags.polarity ==
271 (plintsrc->flags.trigger == 1) ? IOSAPIC_EDGE : IOSAPIC_LEVEL); 268 1) ? IOSAPIC_POL_HIGH :
269 IOSAPIC_POL_LOW,
270 (plintsrc->flags.trigger ==
271 1) ? IOSAPIC_EDGE :
272 IOSAPIC_LEVEL);
272 273
273 platform_intr_list[plintsrc->type] = vector; 274 platform_intr_list[plintsrc->type] = vector;
274 if (acpi_madt_rev > 1) { 275 if (acpi_madt_rev > 1) {
@@ -283,7 +284,6 @@ acpi_parse_plat_int_src (
283 return 0; 284 return 0;
284} 285}
285 286
286
287unsigned int can_cpei_retarget(void) 287unsigned int can_cpei_retarget(void)
288{ 288{
289 extern int cpe_vector; 289 extern int cpe_vector;
@@ -322,29 +322,30 @@ unsigned int get_cpei_target_cpu(void)
322} 322}
323 323
324static int __init 324static int __init
325acpi_parse_int_src_ovr ( 325acpi_parse_int_src_ovr(acpi_table_entry_header * header,
326 acpi_table_entry_header *header, const unsigned long end) 326 const unsigned long end)
327{ 327{
328 struct acpi_table_int_src_ovr *p; 328 struct acpi_table_int_src_ovr *p;
329 329
330 p = (struct acpi_table_int_src_ovr *) header; 330 p = (struct acpi_table_int_src_ovr *)header;
331 331
332 if (BAD_MADT_ENTRY(p, end)) 332 if (BAD_MADT_ENTRY(p, end))
333 return -EINVAL; 333 return -EINVAL;
334 334
335 iosapic_override_isa_irq(p->bus_irq, p->global_irq, 335 iosapic_override_isa_irq(p->bus_irq, p->global_irq,
336 (p->flags.polarity == 1) ? IOSAPIC_POL_HIGH : IOSAPIC_POL_LOW, 336 (p->flags.polarity ==
337 (p->flags.trigger == 1) ? IOSAPIC_EDGE : IOSAPIC_LEVEL); 337 1) ? IOSAPIC_POL_HIGH : IOSAPIC_POL_LOW,
338 (p->flags.trigger ==
339 1) ? IOSAPIC_EDGE : IOSAPIC_LEVEL);
338 return 0; 340 return 0;
339} 341}
340 342
341
342static int __init 343static int __init
343acpi_parse_nmi_src (acpi_table_entry_header *header, const unsigned long end) 344acpi_parse_nmi_src(acpi_table_entry_header * header, const unsigned long end)
344{ 345{
345 struct acpi_table_nmi_src *nmi_src; 346 struct acpi_table_nmi_src *nmi_src;
346 347
347 nmi_src = (struct acpi_table_nmi_src*) header; 348 nmi_src = (struct acpi_table_nmi_src *)header;
348 349
349 if (BAD_MADT_ENTRY(nmi_src, end)) 350 if (BAD_MADT_ENTRY(nmi_src, end))
350 return -EINVAL; 351 return -EINVAL;
@@ -353,11 +354,9 @@ acpi_parse_nmi_src (acpi_table_entry_header *header, const unsigned long end)
353 return 0; 354 return 0;
354} 355}
355 356
356static void __init 357static void __init acpi_madt_oem_check(char *oem_id, char *oem_table_id)
357acpi_madt_oem_check (char *oem_id, char *oem_table_id)
358{ 358{
359 if (!strncmp(oem_id, "IBM", 3) && 359 if (!strncmp(oem_id, "IBM", 3) && (!strncmp(oem_table_id, "SERMOW", 6))) {
360 (!strncmp(oem_table_id, "SERMOW", 6))) {
361 360
362 /* 361 /*
363 * Unfortunately ITC_DRIFT is not yet part of the 362 * Unfortunately ITC_DRIFT is not yet part of the
@@ -370,19 +369,18 @@ acpi_madt_oem_check (char *oem_id, char *oem_table_id)
370 } 369 }
371} 370}
372 371
373static int __init 372static int __init acpi_parse_madt(unsigned long phys_addr, unsigned long size)
374acpi_parse_madt (unsigned long phys_addr, unsigned long size)
375{ 373{
376 if (!phys_addr || !size) 374 if (!phys_addr || !size)
377 return -EINVAL; 375 return -EINVAL;
378 376
379 acpi_madt = (struct acpi_table_madt *) __va(phys_addr); 377 acpi_madt = (struct acpi_table_madt *)__va(phys_addr);
380 378
381 acpi_madt_rev = acpi_madt->header.revision; 379 acpi_madt_rev = acpi_madt->header.revision;
382 380
383 /* remember the value for reference after free_initmem() */ 381 /* remember the value for reference after free_initmem() */
384#ifdef CONFIG_ITANIUM 382#ifdef CONFIG_ITANIUM
385 has_8259 = 1; /* Firmware on old Itanium systems is broken */ 383 has_8259 = 1; /* Firmware on old Itanium systems is broken */
386#else 384#else
387 has_8259 = acpi_madt->flags.pcat_compat; 385 has_8259 = acpi_madt->flags.pcat_compat;
388#endif 386#endif
@@ -396,19 +394,18 @@ acpi_parse_madt (unsigned long phys_addr, unsigned long size)
396 printk(KERN_INFO PREFIX "Local APIC address %p\n", ipi_base_addr); 394 printk(KERN_INFO PREFIX "Local APIC address %p\n", ipi_base_addr);
397 395
398 acpi_madt_oem_check(acpi_madt->header.oem_id, 396 acpi_madt_oem_check(acpi_madt->header.oem_id,
399 acpi_madt->header.oem_table_id); 397 acpi_madt->header.oem_table_id);
400 398
401 return 0; 399 return 0;
402} 400}
403 401
404
405#ifdef CONFIG_ACPI_NUMA 402#ifdef CONFIG_ACPI_NUMA
406 403
407#undef SLIT_DEBUG 404#undef SLIT_DEBUG
408 405
409#define PXM_FLAG_LEN ((MAX_PXM_DOMAINS + 1)/32) 406#define PXM_FLAG_LEN ((MAX_PXM_DOMAINS + 1)/32)
410 407
411static int __initdata srat_num_cpus; /* number of cpus */ 408static int __initdata srat_num_cpus; /* number of cpus */
412static u32 __devinitdata pxm_flag[PXM_FLAG_LEN]; 409static u32 __devinitdata pxm_flag[PXM_FLAG_LEN];
413#define pxm_bit_set(bit) (set_bit(bit,(void *)pxm_flag)) 410#define pxm_bit_set(bit) (set_bit(bit,(void *)pxm_flag))
414#define pxm_bit_test(bit) (test_bit(bit,(void *)pxm_flag)) 411#define pxm_bit_test(bit) (test_bit(bit,(void *)pxm_flag))
@@ -421,15 +418,15 @@ static struct acpi_table_slit __initdata *slit_table;
421 * ACPI 2.0 SLIT (System Locality Information Table) 418 * ACPI 2.0 SLIT (System Locality Information Table)
422 * http://devresource.hp.com/devresource/Docs/TechPapers/IA64/slit.pdf 419 * http://devresource.hp.com/devresource/Docs/TechPapers/IA64/slit.pdf
423 */ 420 */
424void __init 421void __init acpi_numa_slit_init(struct acpi_table_slit *slit)
425acpi_numa_slit_init (struct acpi_table_slit *slit)
426{ 422{
427 u32 len; 423 u32 len;
428 424
429 len = sizeof(struct acpi_table_header) + 8 425 len = sizeof(struct acpi_table_header) + 8
430 + slit->localities * slit->localities; 426 + slit->localities * slit->localities;
431 if (slit->header.length != len) { 427 if (slit->header.length != len) {
432 printk(KERN_ERR "ACPI 2.0 SLIT: size mismatch: %d expected, %d actual\n", 428 printk(KERN_ERR
429 "ACPI 2.0 SLIT: size mismatch: %d expected, %d actual\n",
433 len, slit->header.length); 430 len, slit->header.length);
434 memset(numa_slit, 10, sizeof(numa_slit)); 431 memset(numa_slit, 10, sizeof(numa_slit));
435 return; 432 return;
@@ -438,19 +435,20 @@ acpi_numa_slit_init (struct acpi_table_slit *slit)
438} 435}
439 436
440void __init 437void __init
441acpi_numa_processor_affinity_init (struct acpi_table_processor_affinity *pa) 438acpi_numa_processor_affinity_init(struct acpi_table_processor_affinity *pa)
442{ 439{
443 /* record this node in proximity bitmap */ 440 /* record this node in proximity bitmap */
444 pxm_bit_set(pa->proximity_domain); 441 pxm_bit_set(pa->proximity_domain);
445 442
446 node_cpuid[srat_num_cpus].phys_id = (pa->apic_id << 8) | (pa->lsapic_eid); 443 node_cpuid[srat_num_cpus].phys_id =
444 (pa->apic_id << 8) | (pa->lsapic_eid);
447 /* nid should be overridden as logical node id later */ 445 /* nid should be overridden as logical node id later */
448 node_cpuid[srat_num_cpus].nid = pa->proximity_domain; 446 node_cpuid[srat_num_cpus].nid = pa->proximity_domain;
449 srat_num_cpus++; 447 srat_num_cpus++;
450} 448}
451 449
452void __init 450void __init
453acpi_numa_memory_affinity_init (struct acpi_table_memory_affinity *ma) 451acpi_numa_memory_affinity_init(struct acpi_table_memory_affinity *ma)
454{ 452{
455 unsigned long paddr, size; 453 unsigned long paddr, size;
456 u8 pxm; 454 u8 pxm;
@@ -487,8 +485,7 @@ acpi_numa_memory_affinity_init (struct acpi_table_memory_affinity *ma)
487 num_node_memblks++; 485 num_node_memblks++;
488} 486}
489 487
490void __init 488void __init acpi_numa_arch_fixup(void)
491acpi_numa_arch_fixup (void)
492{ 489{
493 int i, j, node_from, node_to; 490 int i, j, node_from, node_to;
494 491
@@ -534,21 +531,24 @@ acpi_numa_arch_fixup (void)
534 for (i = 0; i < srat_num_cpus; i++) 531 for (i = 0; i < srat_num_cpus; i++)
535 node_cpuid[i].nid = pxm_to_nid_map[node_cpuid[i].nid]; 532 node_cpuid[i].nid = pxm_to_nid_map[node_cpuid[i].nid];
536 533
537 printk(KERN_INFO "Number of logical nodes in system = %d\n", num_online_nodes()); 534 printk(KERN_INFO "Number of logical nodes in system = %d\n",
538 printk(KERN_INFO "Number of memory chunks in system = %d\n", num_node_memblks); 535 num_online_nodes());
536 printk(KERN_INFO "Number of memory chunks in system = %d\n",
537 num_node_memblks);
539 538
540 if (!slit_table) return; 539 if (!slit_table)
540 return;
541 memset(numa_slit, -1, sizeof(numa_slit)); 541 memset(numa_slit, -1, sizeof(numa_slit));
542 for (i=0; i<slit_table->localities; i++) { 542 for (i = 0; i < slit_table->localities; i++) {
543 if (!pxm_bit_test(i)) 543 if (!pxm_bit_test(i))
544 continue; 544 continue;
545 node_from = pxm_to_nid_map[i]; 545 node_from = pxm_to_nid_map[i];
546 for (j=0; j<slit_table->localities; j++) { 546 for (j = 0; j < slit_table->localities; j++) {
547 if (!pxm_bit_test(j)) 547 if (!pxm_bit_test(j))
548 continue; 548 continue;
549 node_to = pxm_to_nid_map[j]; 549 node_to = pxm_to_nid_map[j];
550 node_distance(node_from, node_to) = 550 node_distance(node_from, node_to) =
551 slit_table->entry[i*slit_table->localities + j]; 551 slit_table->entry[i * slit_table->localities + j];
552 } 552 }
553 } 553 }
554 554
@@ -556,36 +556,43 @@ acpi_numa_arch_fixup (void)
556 printk("ACPI 2.0 SLIT locality table:\n"); 556 printk("ACPI 2.0 SLIT locality table:\n");
557 for_each_online_node(i) { 557 for_each_online_node(i) {
558 for_each_online_node(j) 558 for_each_online_node(j)
559 printk("%03d ", node_distance(i,j)); 559 printk("%03d ", node_distance(i, j));
560 printk("\n"); 560 printk("\n");
561 } 561 }
562#endif 562#endif
563} 563}
564#endif /* CONFIG_ACPI_NUMA */ 564#endif /* CONFIG_ACPI_NUMA */
565 565
566unsigned int 566/*
567acpi_register_gsi (u32 gsi, int edge_level, int active_high_low) 567 * success: return IRQ number (>=0)
568 * failure: return < 0
569 */
570int acpi_register_gsi(u32 gsi, int edge_level, int active_high_low)
568{ 571{
569 if (has_8259 && gsi < 16) 572 if (has_8259 && gsi < 16)
570 return isa_irq_to_vector(gsi); 573 return isa_irq_to_vector(gsi);
571 574
572 return iosapic_register_intr(gsi, 575 return iosapic_register_intr(gsi,
573 (active_high_low == ACPI_ACTIVE_HIGH) ? IOSAPIC_POL_HIGH : IOSAPIC_POL_LOW, 576 (active_high_low ==
574 (edge_level == ACPI_EDGE_SENSITIVE) ? IOSAPIC_EDGE : IOSAPIC_LEVEL); 577 ACPI_ACTIVE_HIGH) ? IOSAPIC_POL_HIGH :
578 IOSAPIC_POL_LOW,
579 (edge_level ==
580 ACPI_EDGE_SENSITIVE) ? IOSAPIC_EDGE :
581 IOSAPIC_LEVEL);
575} 582}
583
576EXPORT_SYMBOL(acpi_register_gsi); 584EXPORT_SYMBOL(acpi_register_gsi);
577 585
578#ifdef CONFIG_ACPI_DEALLOCATE_IRQ 586#ifdef CONFIG_ACPI_DEALLOCATE_IRQ
579void 587void acpi_unregister_gsi(u32 gsi)
580acpi_unregister_gsi (u32 gsi)
581{ 588{
582 iosapic_unregister_intr(gsi); 589 iosapic_unregister_intr(gsi);
583} 590}
591
584EXPORT_SYMBOL(acpi_unregister_gsi); 592EXPORT_SYMBOL(acpi_unregister_gsi);
585#endif /* CONFIG_ACPI_DEALLOCATE_IRQ */ 593#endif /* CONFIG_ACPI_DEALLOCATE_IRQ */
586 594
587static int __init 595static int __init acpi_parse_fadt(unsigned long phys_addr, unsigned long size)
588acpi_parse_fadt (unsigned long phys_addr, unsigned long size)
589{ 596{
590 struct acpi_table_header *fadt_header; 597 struct acpi_table_header *fadt_header;
591 struct fadt_descriptor_rev2 *fadt; 598 struct fadt_descriptor_rev2 *fadt;
@@ -593,11 +600,11 @@ acpi_parse_fadt (unsigned long phys_addr, unsigned long size)
593 if (!phys_addr || !size) 600 if (!phys_addr || !size)
594 return -EINVAL; 601 return -EINVAL;
595 602
596 fadt_header = (struct acpi_table_header *) __va(phys_addr); 603 fadt_header = (struct acpi_table_header *)__va(phys_addr);
597 if (fadt_header->revision != 3) 604 if (fadt_header->revision != 3)
598 return -ENODEV; /* Only deal with ACPI 2.0 FADT */ 605 return -ENODEV; /* Only deal with ACPI 2.0 FADT */
599 606
600 fadt = (struct fadt_descriptor_rev2 *) fadt_header; 607 fadt = (struct fadt_descriptor_rev2 *)fadt_header;
601 608
602 if (!(fadt->iapc_boot_arch & BAF_8042_KEYBOARD_CONTROLLER)) 609 if (!(fadt->iapc_boot_arch & BAF_8042_KEYBOARD_CONTROLLER))
603 acpi_kbd_controller_present = 0; 610 acpi_kbd_controller_present = 0;
@@ -609,22 +616,19 @@ acpi_parse_fadt (unsigned long phys_addr, unsigned long size)
609 return 0; 616 return 0;
610} 617}
611 618
612 619unsigned long __init acpi_find_rsdp(void)
613unsigned long __init
614acpi_find_rsdp (void)
615{ 620{
616 unsigned long rsdp_phys = 0; 621 unsigned long rsdp_phys = 0;
617 622
618 if (efi.acpi20) 623 if (efi.acpi20)
619 rsdp_phys = __pa(efi.acpi20); 624 rsdp_phys = __pa(efi.acpi20);
620 else if (efi.acpi) 625 else if (efi.acpi)
621 printk(KERN_WARNING PREFIX "v1.0/r0.71 tables no longer supported\n"); 626 printk(KERN_WARNING PREFIX
627 "v1.0/r0.71 tables no longer supported\n");
622 return rsdp_phys; 628 return rsdp_phys;
623} 629}
624 630
625 631int __init acpi_boot_init(void)
626int __init
627acpi_boot_init (void)
628{ 632{
629 633
630 /* 634 /*
@@ -642,31 +646,43 @@ acpi_boot_init (void)
642 646
643 /* Local APIC */ 647 /* Local APIC */
644 648
645 if (acpi_table_parse_madt(ACPI_MADT_LAPIC_ADDR_OVR, acpi_parse_lapic_addr_ovr, 0) < 0) 649 if (acpi_table_parse_madt
646 printk(KERN_ERR PREFIX "Error parsing LAPIC address override entry\n"); 650 (ACPI_MADT_LAPIC_ADDR_OVR, acpi_parse_lapic_addr_ovr, 0) < 0)
651 printk(KERN_ERR PREFIX
652 "Error parsing LAPIC address override entry\n");
647 653
648 if (acpi_table_parse_madt(ACPI_MADT_LSAPIC, acpi_parse_lsapic, NR_CPUS) < 1) 654 if (acpi_table_parse_madt(ACPI_MADT_LSAPIC, acpi_parse_lsapic, NR_CPUS)
649 printk(KERN_ERR PREFIX "Error parsing MADT - no LAPIC entries\n"); 655 < 1)
656 printk(KERN_ERR PREFIX
657 "Error parsing MADT - no LAPIC entries\n");
650 658
651 if (acpi_table_parse_madt(ACPI_MADT_LAPIC_NMI, acpi_parse_lapic_nmi, 0) < 0) 659 if (acpi_table_parse_madt(ACPI_MADT_LAPIC_NMI, acpi_parse_lapic_nmi, 0)
660 < 0)
652 printk(KERN_ERR PREFIX "Error parsing LAPIC NMI entry\n"); 661 printk(KERN_ERR PREFIX "Error parsing LAPIC NMI entry\n");
653 662
654 /* I/O APIC */ 663 /* I/O APIC */
655 664
656 if (acpi_table_parse_madt(ACPI_MADT_IOSAPIC, acpi_parse_iosapic, NR_IOSAPICS) < 1) 665 if (acpi_table_parse_madt
657 printk(KERN_ERR PREFIX "Error parsing MADT - no IOSAPIC entries\n"); 666 (ACPI_MADT_IOSAPIC, acpi_parse_iosapic, NR_IOSAPICS) < 1)
667 printk(KERN_ERR PREFIX
668 "Error parsing MADT - no IOSAPIC entries\n");
658 669
659 /* System-Level Interrupt Routing */ 670 /* System-Level Interrupt Routing */
660 671
661 if (acpi_table_parse_madt(ACPI_MADT_PLAT_INT_SRC, acpi_parse_plat_int_src, ACPI_MAX_PLATFORM_INTERRUPTS) < 0) 672 if (acpi_table_parse_madt
662 printk(KERN_ERR PREFIX "Error parsing platform interrupt source entry\n"); 673 (ACPI_MADT_PLAT_INT_SRC, acpi_parse_plat_int_src,
674 ACPI_MAX_PLATFORM_INTERRUPTS) < 0)
675 printk(KERN_ERR PREFIX
676 "Error parsing platform interrupt source entry\n");
663 677
664 if (acpi_table_parse_madt(ACPI_MADT_INT_SRC_OVR, acpi_parse_int_src_ovr, 0) < 0) 678 if (acpi_table_parse_madt
665 printk(KERN_ERR PREFIX "Error parsing interrupt source overrides entry\n"); 679 (ACPI_MADT_INT_SRC_OVR, acpi_parse_int_src_ovr, 0) < 0)
680 printk(KERN_ERR PREFIX
681 "Error parsing interrupt source overrides entry\n");
666 682
667 if (acpi_table_parse_madt(ACPI_MADT_NMI_SRC, acpi_parse_nmi_src, 0) < 0) 683 if (acpi_table_parse_madt(ACPI_MADT_NMI_SRC, acpi_parse_nmi_src, 0) < 0)
668 printk(KERN_ERR PREFIX "Error parsing NMI SRC entry\n"); 684 printk(KERN_ERR PREFIX "Error parsing NMI SRC entry\n");
669 skip_madt: 685 skip_madt:
670 686
671 /* 687 /*
672 * FADT says whether a legacy keyboard controller is present. 688 * FADT says whether a legacy keyboard controller is present.
@@ -681,8 +697,9 @@ acpi_boot_init (void)
681 if (available_cpus == 0) { 697 if (available_cpus == 0) {
682 printk(KERN_INFO "ACPI: Found 0 CPUS; assuming 1\n"); 698 printk(KERN_INFO "ACPI: Found 0 CPUS; assuming 1\n");
683 printk(KERN_INFO "CPU 0 (0x%04x)", hard_smp_processor_id()); 699 printk(KERN_INFO "CPU 0 (0x%04x)", hard_smp_processor_id());
684 smp_boot_data.cpu_phys_id[available_cpus] = hard_smp_processor_id(); 700 smp_boot_data.cpu_phys_id[available_cpus] =
685 available_cpus = 1; /* We've got at least one of these, no? */ 701 hard_smp_processor_id();
702 available_cpus = 1; /* We've got at least one of these, no? */
686 } 703 }
687 smp_boot_data.cpu_count = available_cpus; 704 smp_boot_data.cpu_count = available_cpus;
688 705
@@ -691,8 +708,10 @@ acpi_boot_init (void)
691 if (srat_num_cpus == 0) { 708 if (srat_num_cpus == 0) {
692 int cpu, i = 1; 709 int cpu, i = 1;
693 for (cpu = 0; cpu < smp_boot_data.cpu_count; cpu++) 710 for (cpu = 0; cpu < smp_boot_data.cpu_count; cpu++)
694 if (smp_boot_data.cpu_phys_id[cpu] != hard_smp_processor_id()) 711 if (smp_boot_data.cpu_phys_id[cpu] !=
695 node_cpuid[i++].phys_id = smp_boot_data.cpu_phys_id[cpu]; 712 hard_smp_processor_id())
713 node_cpuid[i++].phys_id =
714 smp_boot_data.cpu_phys_id[cpu];
696 } 715 }
697# endif 716# endif
698#endif 717#endif
@@ -700,12 +719,12 @@ acpi_boot_init (void)
700 build_cpu_to_node_map(); 719 build_cpu_to_node_map();
701#endif 720#endif
702 /* Make boot-up look pretty */ 721 /* Make boot-up look pretty */
703 printk(KERN_INFO "%d CPUs available, %d CPUs total\n", available_cpus, total_cpus); 722 printk(KERN_INFO "%d CPUs available, %d CPUs total\n", available_cpus,
723 total_cpus);
704 return 0; 724 return 0;
705} 725}
706 726
707int 727int acpi_gsi_to_irq(u32 gsi, unsigned int *irq)
708acpi_gsi_to_irq (u32 gsi, unsigned int *irq)
709{ 728{
710 int vector; 729 int vector;
711 730
@@ -726,11 +745,10 @@ acpi_gsi_to_irq (u32 gsi, unsigned int *irq)
726 */ 745 */
727#ifdef CONFIG_ACPI_HOTPLUG_CPU 746#ifdef CONFIG_ACPI_HOTPLUG_CPU
728static 747static
729int 748int acpi_map_cpu2node(acpi_handle handle, int cpu, long physid)
730acpi_map_cpu2node(acpi_handle handle, int cpu, long physid)
731{ 749{
732#ifdef CONFIG_ACPI_NUMA 750#ifdef CONFIG_ACPI_NUMA
733 int pxm_id; 751 int pxm_id;
734 752
735 pxm_id = acpi_get_pxm(handle); 753 pxm_id = acpi_get_pxm(handle);
736 754
@@ -738,31 +756,28 @@ acpi_map_cpu2node(acpi_handle handle, int cpu, long physid)
738 * Assuming that the container driver would have set the proximity 756 * Assuming that the container driver would have set the proximity
739 * domain and would have initialized pxm_to_nid_map[pxm_id] && pxm_flag 757 * domain and would have initialized pxm_to_nid_map[pxm_id] && pxm_flag
740 */ 758 */
741 node_cpuid[cpu].nid = (pxm_id < 0) ? 0: 759 node_cpuid[cpu].nid = (pxm_id < 0) ? 0 : pxm_to_nid_map[pxm_id];
742 pxm_to_nid_map[pxm_id];
743 760
744 node_cpuid[cpu].phys_id = physid; 761 node_cpuid[cpu].phys_id = physid;
745#endif 762#endif
746 return(0); 763 return (0);
747} 764}
748 765
749 766int acpi_map_lsapic(acpi_handle handle, int *pcpu)
750int
751acpi_map_lsapic(acpi_handle handle, int *pcpu)
752{ 767{
753 struct acpi_buffer buffer = {ACPI_ALLOCATE_BUFFER, NULL}; 768 struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
754 union acpi_object *obj; 769 union acpi_object *obj;
755 struct acpi_table_lsapic *lsapic; 770 struct acpi_table_lsapic *lsapic;
756 cpumask_t tmp_map; 771 cpumask_t tmp_map;
757 long physid; 772 long physid;
758 int cpu; 773 int cpu;
759 774
760 if (ACPI_FAILURE(acpi_evaluate_object(handle, "_MAT", NULL, &buffer))) 775 if (ACPI_FAILURE(acpi_evaluate_object(handle, "_MAT", NULL, &buffer)))
761 return -EINVAL; 776 return -EINVAL;
762 777
763 if (!buffer.length || !buffer.pointer) 778 if (!buffer.length || !buffer.pointer)
764 return -EINVAL; 779 return -EINVAL;
765 780
766 obj = buffer.pointer; 781 obj = buffer.pointer;
767 if (obj->type != ACPI_TYPE_BUFFER || 782 if (obj->type != ACPI_TYPE_BUFFER ||
768 obj->buffer.length < sizeof(*lsapic)) { 783 obj->buffer.length < sizeof(*lsapic)) {
@@ -778,7 +793,7 @@ acpi_map_lsapic(acpi_handle handle, int *pcpu)
778 return -EINVAL; 793 return -EINVAL;
779 } 794 }
780 795
781 physid = ((lsapic->id <<8) | (lsapic->eid)); 796 physid = ((lsapic->id << 8) | (lsapic->eid));
782 797
783 acpi_os_free(buffer.pointer); 798 acpi_os_free(buffer.pointer);
784 buffer.length = ACPI_ALLOCATE_BUFFER; 799 buffer.length = ACPI_ALLOCATE_BUFFER;
@@ -786,50 +801,49 @@ acpi_map_lsapic(acpi_handle handle, int *pcpu)
786 801
787 cpus_complement(tmp_map, cpu_present_map); 802 cpus_complement(tmp_map, cpu_present_map);
788 cpu = first_cpu(tmp_map); 803 cpu = first_cpu(tmp_map);
789 if(cpu >= NR_CPUS) 804 if (cpu >= NR_CPUS)
790 return -EINVAL; 805 return -EINVAL;
791 806
792 acpi_map_cpu2node(handle, cpu, physid); 807 acpi_map_cpu2node(handle, cpu, physid);
793 808
794 cpu_set(cpu, cpu_present_map); 809 cpu_set(cpu, cpu_present_map);
795 ia64_cpu_to_sapicid[cpu] = physid; 810 ia64_cpu_to_sapicid[cpu] = physid;
796 ia64_acpiid_to_sapicid[lsapic->acpi_id] = ia64_cpu_to_sapicid[cpu]; 811 ia64_acpiid_to_sapicid[lsapic->acpi_id] = ia64_cpu_to_sapicid[cpu];
797 812
798 *pcpu = cpu; 813 *pcpu = cpu;
799 return(0); 814 return (0);
800} 815}
801EXPORT_SYMBOL(acpi_map_lsapic);
802 816
817EXPORT_SYMBOL(acpi_map_lsapic);
803 818
804int 819int acpi_unmap_lsapic(int cpu)
805acpi_unmap_lsapic(int cpu)
806{ 820{
807 int i; 821 int i;
808 822
809 for (i=0; i<MAX_SAPICS; i++) { 823 for (i = 0; i < MAX_SAPICS; i++) {
810 if (ia64_acpiid_to_sapicid[i] == ia64_cpu_to_sapicid[cpu]) { 824 if (ia64_acpiid_to_sapicid[i] == ia64_cpu_to_sapicid[cpu]) {
811 ia64_acpiid_to_sapicid[i] = -1; 825 ia64_acpiid_to_sapicid[i] = -1;
812 break; 826 break;
813 } 827 }
814 } 828 }
815 ia64_cpu_to_sapicid[cpu] = -1; 829 ia64_cpu_to_sapicid[cpu] = -1;
816 cpu_clear(cpu,cpu_present_map); 830 cpu_clear(cpu, cpu_present_map);
817 831
818#ifdef CONFIG_ACPI_NUMA 832#ifdef CONFIG_ACPI_NUMA
819 /* NUMA specific cleanup's */ 833 /* NUMA specific cleanup's */
820#endif 834#endif
821 835
822 return(0); 836 return (0);
823} 837}
838
824EXPORT_SYMBOL(acpi_unmap_lsapic); 839EXPORT_SYMBOL(acpi_unmap_lsapic);
825#endif /* CONFIG_ACPI_HOTPLUG_CPU */ 840#endif /* CONFIG_ACPI_HOTPLUG_CPU */
826
827 841
828#ifdef CONFIG_ACPI_NUMA 842#ifdef CONFIG_ACPI_NUMA
829acpi_status __devinit 843acpi_status __devinit
830acpi_map_iosapic (acpi_handle handle, u32 depth, void *context, void **ret) 844acpi_map_iosapic(acpi_handle handle, u32 depth, void *context, void **ret)
831{ 845{
832 struct acpi_buffer buffer = {ACPI_ALLOCATE_BUFFER, NULL}; 846 struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
833 union acpi_object *obj; 847 union acpi_object *obj;
834 struct acpi_table_iosapic *iosapic; 848 struct acpi_table_iosapic *iosapic;
835 unsigned int gsi_base; 849 unsigned int gsi_base;
@@ -878,10 +892,9 @@ acpi_map_iosapic (acpi_handle handle, u32 depth, void *context, void **ret)
878 map_iosapic_to_node(gsi_base, node); 892 map_iosapic_to_node(gsi_base, node);
879 return AE_OK; 893 return AE_OK;
880} 894}
881#endif /* CONFIG_NUMA */ 895#endif /* CONFIG_NUMA */
882 896
883int 897int acpi_register_ioapic(acpi_handle handle, u64 phys_addr, u32 gsi_base)
884acpi_register_ioapic (acpi_handle handle, u64 phys_addr, u32 gsi_base)
885{ 898{
886 int err; 899 int err;
887 900
@@ -890,17 +903,18 @@ acpi_register_ioapic (acpi_handle handle, u64 phys_addr, u32 gsi_base)
890 903
891#if CONFIG_ACPI_NUMA 904#if CONFIG_ACPI_NUMA
892 acpi_map_iosapic(handle, 0, NULL, NULL); 905 acpi_map_iosapic(handle, 0, NULL, NULL);
893#endif /* CONFIG_ACPI_NUMA */ 906#endif /* CONFIG_ACPI_NUMA */
894 907
895 return 0; 908 return 0;
896} 909}
910
897EXPORT_SYMBOL(acpi_register_ioapic); 911EXPORT_SYMBOL(acpi_register_ioapic);
898 912
899int 913int acpi_unregister_ioapic(acpi_handle handle, u32 gsi_base)
900acpi_unregister_ioapic (acpi_handle handle, u32 gsi_base)
901{ 914{
902 return iosapic_remove(gsi_base); 915 return iosapic_remove(gsi_base);
903} 916}
917
904EXPORT_SYMBOL(acpi_unregister_ioapic); 918EXPORT_SYMBOL(acpi_unregister_ioapic);
905 919
906#endif /* CONFIG_ACPI_BOOT */ 920#endif /* CONFIG_ACPI_BOOT */
diff --git a/arch/ia64/kernel/iosapic.c b/arch/ia64/kernel/iosapic.c
index 7936b62f7a2e..8f53915f4ae6 100644
--- a/arch/ia64/kernel/iosapic.c
+++ b/arch/ia64/kernel/iosapic.c
@@ -561,7 +561,7 @@ static inline int vector_is_shared (int vector)
561 return (iosapic_intr_info[vector].count > 1); 561 return (iosapic_intr_info[vector].count > 1);
562} 562}
563 563
564static void 564static int
565register_intr (unsigned int gsi, int vector, unsigned char delivery, 565register_intr (unsigned int gsi, int vector, unsigned char delivery,
566 unsigned long polarity, unsigned long trigger) 566 unsigned long polarity, unsigned long trigger)
567{ 567{
@@ -576,7 +576,7 @@ register_intr (unsigned int gsi, int vector, unsigned char delivery,
576 index = find_iosapic(gsi); 576 index = find_iosapic(gsi);
577 if (index < 0) { 577 if (index < 0) {
578 printk(KERN_WARNING "%s: No IOSAPIC for GSI %u\n", __FUNCTION__, gsi); 578 printk(KERN_WARNING "%s: No IOSAPIC for GSI %u\n", __FUNCTION__, gsi);
579 return; 579 return -ENODEV;
580 } 580 }
581 581
582 iosapic_address = iosapic_lists[index].addr; 582 iosapic_address = iosapic_lists[index].addr;
@@ -587,7 +587,7 @@ register_intr (unsigned int gsi, int vector, unsigned char delivery,
587 rte = iosapic_alloc_rte(); 587 rte = iosapic_alloc_rte();
588 if (!rte) { 588 if (!rte) {
589 printk(KERN_WARNING "%s: cannot allocate memory\n", __FUNCTION__); 589 printk(KERN_WARNING "%s: cannot allocate memory\n", __FUNCTION__);
590 return; 590 return -ENOMEM;
591 } 591 }
592 592
593 rte_index = gsi - gsi_base; 593 rte_index = gsi - gsi_base;
@@ -603,7 +603,7 @@ register_intr (unsigned int gsi, int vector, unsigned char delivery,
603 struct iosapic_intr_info *info = &iosapic_intr_info[vector]; 603 struct iosapic_intr_info *info = &iosapic_intr_info[vector];
604 if (info->trigger != trigger || info->polarity != polarity) { 604 if (info->trigger != trigger || info->polarity != polarity) {
605 printk (KERN_WARNING "%s: cannot override the interrupt\n", __FUNCTION__); 605 printk (KERN_WARNING "%s: cannot override the interrupt\n", __FUNCTION__);
606 return; 606 return -EINVAL;
607 } 607 }
608 } 608 }
609 609
@@ -623,6 +623,7 @@ register_intr (unsigned int gsi, int vector, unsigned char delivery,
623 __FUNCTION__, vector, idesc->handler->typename, irq_type->typename); 623 __FUNCTION__, vector, idesc->handler->typename, irq_type->typename);
624 idesc->handler = irq_type; 624 idesc->handler = irq_type;
625 } 625 }
626 return 0;
626} 627}
627 628
628static unsigned int 629static unsigned int
@@ -710,7 +711,7 @@ int
710iosapic_register_intr (unsigned int gsi, 711iosapic_register_intr (unsigned int gsi,
711 unsigned long polarity, unsigned long trigger) 712 unsigned long polarity, unsigned long trigger)
712{ 713{
713 int vector, mask = 1; 714 int vector, mask = 1, err;
714 unsigned int dest; 715 unsigned int dest;
715 unsigned long flags; 716 unsigned long flags;
716 struct iosapic_rte_info *rte; 717 struct iosapic_rte_info *rte;
@@ -734,11 +735,11 @@ again:
734 spin_unlock_irqrestore(&iosapic_lock, flags); 735 spin_unlock_irqrestore(&iosapic_lock, flags);
735 736
736 /* If vector is running out, we try to find a sharable vector */ 737 /* If vector is running out, we try to find a sharable vector */
737 vector = assign_irq_vector(AUTO_ASSIGN); 738 vector = assign_irq_vector_nopanic(AUTO_ASSIGN);
738 if (vector < 0) { 739 if (vector < 0) {
739 vector = iosapic_find_sharable_vector(trigger, polarity); 740 vector = iosapic_find_sharable_vector(trigger, polarity);
740 if (vector < 0) 741 if (vector < 0)
741 panic("%s: out of interrupt vectors!\n", __FUNCTION__); 742 Return -ENOSPC;
742 } 743 }
743 744
744 spin_lock_irqsave(&irq_descp(vector)->lock, flags); 745 spin_lock_irqsave(&irq_descp(vector)->lock, flags);
@@ -753,8 +754,13 @@ again:
753 } 754 }
754 755
755 dest = get_target_cpu(gsi, vector); 756 dest = get_target_cpu(gsi, vector);
756 register_intr(gsi, vector, IOSAPIC_LOWEST_PRIORITY, 757 err = register_intr(gsi, vector, IOSAPIC_LOWEST_PRIORITY,
757 polarity, trigger); 758 polarity, trigger);
759 if (err < 0) {
760 spin_unlock(&iosapic_lock);
761 spin_unlock_irqrestore(&irq_descp(vector)->lock, flags);
762 return err;
763 }
758 764
759 /* 765 /*
760 * If the vector is shared and already unmasked for 766 * If the vector is shared and already unmasked for
diff --git a/arch/x86_64/kernel/acpi/sleep.c b/arch/x86_64/kernel/acpi/sleep.c
index 7a275de6df22..148f6f7ea315 100644
--- a/arch/x86_64/kernel/acpi/sleep.c
+++ b/arch/x86_64/kernel/acpi/sleep.c
@@ -47,7 +47,6 @@
47#include <asm/proto.h> 47#include <asm/proto.h>
48#include <asm/tlbflush.h> 48#include <asm/tlbflush.h>
49 49
50
51/* -------------------------------------------------------------------------- 50/* --------------------------------------------------------------------------
52 Low-Level Sleep Support 51 Low-Level Sleep Support
53 -------------------------------------------------------------------------- */ 52 -------------------------------------------------------------------------- */
@@ -77,11 +76,12 @@ static void init_low_mapping(void)
77 * Create an identity mapped page table and copy the wakeup routine to 76 * Create an identity mapped page table and copy the wakeup routine to
78 * low memory. 77 * low memory.
79 */ 78 */
80int acpi_save_state_mem (void) 79int acpi_save_state_mem(void)
81{ 80{
82 init_low_mapping(); 81 init_low_mapping();
83 82
84 memcpy((void *) acpi_wakeup_address, &wakeup_start, &wakeup_end - &wakeup_start); 83 memcpy((void *)acpi_wakeup_address, &wakeup_start,
84 &wakeup_end - &wakeup_start);
85 acpi_copy_wakeup_routine(acpi_wakeup_address); 85 acpi_copy_wakeup_routine(acpi_wakeup_address);
86 86
87 return 0; 87 return 0;
@@ -90,7 +90,7 @@ int acpi_save_state_mem (void)
90/* 90/*
91 * acpi_restore_state 91 * acpi_restore_state
92 */ 92 */
93void acpi_restore_state_mem (void) 93void acpi_restore_state_mem(void)
94{ 94{
95 set_pgd(pgd_offset(current->mm, 0UL), low_ptr); 95 set_pgd(pgd_offset(current->mm, 0UL), low_ptr);
96 flush_tlb_all(); 96 flush_tlb_all();
@@ -108,7 +108,8 @@ void __init acpi_reserve_bootmem(void)
108{ 108{
109 acpi_wakeup_address = (unsigned long)alloc_bootmem_low(PAGE_SIZE); 109 acpi_wakeup_address = (unsigned long)alloc_bootmem_low(PAGE_SIZE);
110 if ((&wakeup_end - &wakeup_start) > PAGE_SIZE) 110 if ((&wakeup_end - &wakeup_start) > PAGE_SIZE)
111 printk(KERN_CRIT "ACPI: Wakeup code way too big, will crash on attempt to suspend\n"); 111 printk(KERN_CRIT
112 "ACPI: Wakeup code way too big, will crash on attempt to suspend\n");
112} 113}
113 114
114static int __init acpi_sleep_setup(char *str) 115static int __init acpi_sleep_setup(char *str)
@@ -127,6 +128,8 @@ static int __init acpi_sleep_setup(char *str)
127 128
128__setup("acpi_sleep=", acpi_sleep_setup); 129__setup("acpi_sleep=", acpi_sleep_setup);
129 130
130#endif /*CONFIG_ACPI_SLEEP*/ 131#endif /*CONFIG_ACPI_SLEEP */
131 132
132void acpi_pci_link_exit(void) {} 133void acpi_pci_link_exit(void)
134{
135}