1 /* two abstractions specific to kernel/smpboot.c, mainly to cater to visws
2 * which needs to alter them. */
4 static inline void smpboot_clear_io_apic_irqs(void)
9 static inline void smpboot_setup_warm_reset_vector(unsigned long start_eip)
11 /* reset code is stored in 8255 on PC-9800. */
12 outb(0x0e, 0x37); /* SHUT0 = 0 */
15 *((volatile unsigned short *) TRAMPOLINE_HIGH) = start_eip >> 4;
17 *((volatile unsigned short *) TRAMPOLINE_LOW) = start_eip & 0xf;
20 * On PC-9800, continuation on warm reset is done by loading
21 * %ss:%sp from 0x0000:0404 and executing 'lret', so:
23 /* 0x3f0 is on unused interrupt vector and should be safe... */
24 *((volatile unsigned long *) phys_to_virt(0x404)) = 0x000003f0;
28 static inline void smpboot_restore_warm_reset_vector(void)
31 * Install writable page 0 entry to set BIOS data area.
36 * Paranoid: Set warm reset code and vector here back
39 outb(0x0f, 0x37); /* SHUT0 = 1 */
41 *((volatile long *) phys_to_virt(0x404)) = 0;
44 static inline void smpboot_setup_io_apic(void)
47 * Here we can be sure that there is an IO-APIC in the system. Let's
50 if (!skip_ioapic_setup && nr_ioapics)