blob: dbab36d64d48f2b15aa6be7dea09e9feb91f869f [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001/* two abstractions specific to kernel/smpboot.c, mainly to cater to visws
2 * which needs to alter them. */
3
4static inline void smpboot_clear_io_apic_irqs(void)
5{
Ingo Molnar6a64b5d2008-07-10 15:09:04 +02006#ifdef CONFIG_X86_IO_APIC
Linus Torvalds1da177e2005-04-16 15:20:36 -07007 io_apic_irqs = 0;
Ingo Molnar6a64b5d2008-07-10 15:09:04 +02008#endif
Linus Torvalds1da177e2005-04-16 15:20:36 -07009}
10
11static inline void smpboot_setup_warm_reset_vector(unsigned long start_eip)
12{
13 CMOS_WRITE(0xa, 0xf);
14 local_flush_tlb();
Thomas Gleixnercfc1b9a2008-07-21 21:35:38 +020015 pr_debug("1.\n");
Linus Torvalds1da177e2005-04-16 15:20:36 -070016 *((volatile unsigned short *) TRAMPOLINE_HIGH) = start_eip >> 4;
Thomas Gleixnercfc1b9a2008-07-21 21:35:38 +020017 pr_debug("2.\n");
Linus Torvalds1da177e2005-04-16 15:20:36 -070018 *((volatile unsigned short *) TRAMPOLINE_LOW) = start_eip & 0xf;
Thomas Gleixnercfc1b9a2008-07-21 21:35:38 +020019 pr_debug("3.\n");
Linus Torvalds1da177e2005-04-16 15:20:36 -070020}
21
22static inline void smpboot_restore_warm_reset_vector(void)
23{
24 /*
25 * Install writable page 0 entry to set BIOS data area.
26 */
27 local_flush_tlb();
28
29 /*
30 * Paranoid: Set warm reset code and vector here back
31 * to default values.
32 */
33 CMOS_WRITE(0, 0xf);
34
35 *((volatile long *) phys_to_virt(0x467)) = 0;
36}
37
Jacek Luczakb6dbf332008-04-11 13:28:49 +020038static inline void __init smpboot_setup_io_apic(void)
Linus Torvalds1da177e2005-04-16 15:20:36 -070039{
Ingo Molnar6a64b5d2008-07-10 15:09:04 +020040#ifdef CONFIG_X86_IO_APIC
Linus Torvalds1da177e2005-04-16 15:20:36 -070041 /*
42 * Here we can be sure that there is an IO-APIC in the system. Let's
43 * go and set it up:
44 */
45 if (!skip_ioapic_setup && nr_ioapics)
46 setup_IO_APIC();
Maciej W. Rozyckid788bad2008-06-06 03:28:13 +010047 else {
Glauber de Oliveira Costa3fa7b342008-03-19 14:26:06 -030048 nr_ioapics = 0;
Maciej W. Rozyckid788bad2008-06-06 03:28:13 +010049 localise_nmi_watchdog();
50 }
Ingo Molnar6a64b5d2008-07-10 15:09:04 +020051#endif
Linus Torvalds1da177e2005-04-16 15:20:36 -070052}
Glauber de Oliveira Costa9f3734f2008-03-19 14:26:10 -030053
54static inline void smpboot_clear_io_apic(void)
55{
Ingo Molnar6a64b5d2008-07-10 15:09:04 +020056#ifdef CONFIG_X86_IO_APIC
Glauber de Oliveira Costa9f3734f2008-03-19 14:26:10 -030057 nr_ioapics = 0;
Ingo Molnar6a64b5d2008-07-10 15:09:04 +020058#endif
Glauber de Oliveira Costa9f3734f2008-03-19 14:26:10 -030059}