Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
424 | giacomo | 1 | #ifndef __ASM_MACH_WAKECPU_H |
2 | #define __ASM_MACH_WAKECPU_H |
||
3 | |||
4 | /* |
||
5 | * This file copes with machines that wakeup secondary CPUs by the |
||
6 | * INIT, INIT, STARTUP sequence. |
||
7 | */ |
||
8 | |||
9 | #ifdef CONFIG_ES7000_CLUSTERED_APIC |
||
10 | #define WAKE_SECONDARY_VIA_MIP |
||
11 | #else |
||
12 | #define WAKE_SECONDARY_VIA_INIT |
||
13 | #endif |
||
14 | |||
15 | #ifdef WAKE_SECONDARY_VIA_MIP |
||
16 | extern int es7000_start_cpu(int cpu, unsigned long eip); |
||
17 | static inline int |
||
18 | wakeup_secondary_cpu(int phys_apicid, unsigned long start_eip) |
||
19 | { |
||
20 | int boot_error = 0; |
||
21 | boot_error = es7000_start_cpu(phys_apicid, start_eip); |
||
22 | return boot_error; |
||
23 | } |
||
24 | #endif |
||
25 | |||
26 | #define TRAMPOLINE_LOW phys_to_virt(0x467) |
||
27 | #define TRAMPOLINE_HIGH phys_to_virt(0x469) |
||
28 | |||
29 | #define boot_cpu_apicid boot_cpu_physical_apicid |
||
30 | |||
31 | static inline void wait_for_init_deassert(atomic_t *deassert) |
||
32 | { |
||
33 | #ifdef WAKE_SECONDARY_VIA_INIT |
||
34 | while (!atomic_read(deassert)); |
||
35 | #endif |
||
36 | return; |
||
37 | } |
||
38 | |||
39 | /* Nothing to do for most platforms, since cleared by the INIT cycle */ |
||
40 | static inline void smp_callin_clear_local_apic(void) |
||
41 | { |
||
42 | } |
||
43 | |||
44 | static inline void store_NMI_vector(unsigned short *high, unsigned short *low) |
||
45 | { |
||
46 | } |
||
47 | |||
48 | static inline void restore_NMI_vector(unsigned short *high, unsigned short *low) |
||
49 | { |
||
50 | } |
||
51 | |||
52 | #if APIC_DEBUG |
||
53 | #define inquire_remote_apic(apicid) __inquire_remote_apic(apicid) |
||
54 | #else |
||
55 | #define inquire_remote_apic(apicid) {} |
||
56 | #endif |
||
57 | |||
58 | #endif /* __ASM_MACH_WAKECPU_H */ |