Commit | Line | Data |
---|---|---|
c7e7964c YL |
1 | #ifndef __ASM_ES7000_WAKECPU_H |
2 | #define __ASM_ES7000_WAKECPU_H | |
1da177e4 | 3 | |
c7e7964c | 4 | /* |
1da177e4 LT |
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 | |
62be9001 SS |
34 | while (!atomic_read(deassert)) |
35 | cpu_relax(); | |
1da177e4 LT |
36 | #endif |
37 | return; | |
38 | } | |
39 | ||
40 | /* Nothing to do for most platforms, since cleared by the INIT cycle */ | |
41 | static inline void smp_callin_clear_local_apic(void) | |
42 | { | |
43 | } | |
44 | ||
45 | static inline void store_NMI_vector(unsigned short *high, unsigned short *low) | |
46 | { | |
47 | } | |
48 | ||
49 | static inline void restore_NMI_vector(unsigned short *high, unsigned short *low) | |
50 | { | |
51 | } | |
52 | ||
1281675e YL |
53 | #define inquire_remote_apic(apicid) do { \ |
54 | if (apic_verbosity >= APIC_DEBUG) \ | |
55 | __inquire_remote_apic(apicid); \ | |
56 | } while (0) | |
1da177e4 | 57 | |
c7e7964c | 58 | #endif /* __ASM_MACH_WAKECPU_H */ |