Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | /* two abstractions specific to kernel/smpboot.c, mainly to cater to visws |
2 | * which needs to alter them. */ | |
3 | ||
1e4c85f9 LT |
4 | static inline void smpboot_clear_io_apic_irqs(void) |
5 | { | |
6 | io_apic_irqs = 0; | |
7 | } | |
8 | ||
1da177e4 LT |
9 | static inline void smpboot_setup_warm_reset_vector(unsigned long start_eip) |
10 | { | |
11 | CMOS_WRITE(0xa, 0xf); | |
12 | local_flush_tlb(); | |
13 | Dprintk("1.\n"); | |
14 | *((volatile unsigned short *) TRAMPOLINE_HIGH) = start_eip >> 4; | |
15 | Dprintk("2.\n"); | |
16 | *((volatile unsigned short *) TRAMPOLINE_LOW) = start_eip & 0xf; | |
17 | Dprintk("3.\n"); | |
18 | } | |
19 | ||
20 | static inline void smpboot_restore_warm_reset_vector(void) | |
21 | { | |
22 | /* | |
23 | * Install writable page 0 entry to set BIOS data area. | |
24 | */ | |
25 | local_flush_tlb(); | |
26 | ||
27 | /* | |
28 | * Paranoid: Set warm reset code and vector here back | |
29 | * to default values. | |
30 | */ | |
31 | CMOS_WRITE(0, 0xf); | |
32 | ||
33 | *((volatile long *) phys_to_virt(0x467)) = 0; | |
34 | } | |
1e4c85f9 LT |
35 | |
36 | static inline void smpboot_setup_io_apic(void) | |
37 | { | |
38 | /* | |
39 | * Here we can be sure that there is an IO-APIC in the system. Let's | |
40 | * go and set it up: | |
41 | */ | |
42 | if (!skip_ioapic_setup && nr_ioapics) | |
43 | setup_IO_APIC(); | |
44 | } |