diff options
Diffstat (limited to 'arch/x86/include/asm/mach-default/smpboot_hooks.h')
| -rw-r--r-- | arch/x86/include/asm/mach-default/smpboot_hooks.h | 59 | 
1 files changed, 59 insertions, 0 deletions
diff --git a/arch/x86/include/asm/mach-default/smpboot_hooks.h b/arch/x86/include/asm/mach-default/smpboot_hooks.h new file mode 100644 index 00000000000..dbab36d64d4 --- /dev/null +++ b/arch/x86/include/asm/mach-default/smpboot_hooks.h @@ -0,0 +1,59 @@ +/* two abstractions specific to kernel/smpboot.c, mainly to cater to visws + * which needs to alter them. */ + +static inline void smpboot_clear_io_apic_irqs(void) +{ +#ifdef CONFIG_X86_IO_APIC +	io_apic_irqs = 0; +#endif +} + +static inline void smpboot_setup_warm_reset_vector(unsigned long start_eip) +{ +	CMOS_WRITE(0xa, 0xf); +	local_flush_tlb(); +	pr_debug("1.\n"); +	*((volatile unsigned short *) TRAMPOLINE_HIGH) = start_eip >> 4; +	pr_debug("2.\n"); +	*((volatile unsigned short *) TRAMPOLINE_LOW) = start_eip & 0xf; +	pr_debug("3.\n"); +} + +static inline void smpboot_restore_warm_reset_vector(void) +{ +	/* +	 * Install writable page 0 entry to set BIOS data area. +	 */ +	local_flush_tlb(); + +	/* +	 * Paranoid:  Set warm reset code and vector here back +	 * to default values. +	 */ +	CMOS_WRITE(0, 0xf); + +	*((volatile long *) phys_to_virt(0x467)) = 0; +} + +static inline void __init smpboot_setup_io_apic(void) +{ +#ifdef CONFIG_X86_IO_APIC +	/* +	 * Here we can be sure that there is an IO-APIC in the system. Let's +	 * go and set it up: +	 */ +	if (!skip_ioapic_setup && nr_ioapics) +		setup_IO_APIC(); +	else { +		nr_ioapics = 0; +		localise_nmi_watchdog(); +	} +#endif +} + +static inline void smpboot_clear_io_apic(void) +{ +#ifdef CONFIG_X86_IO_APIC +	nr_ioapics = 0; +#endif +}  | 
