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 16extern int es7000_start_cpu(int cpu, unsigned long eip); 17static inline int 18wakeup_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 31static 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 */ 40static inline void smp_callin_clear_local_apic(void) 41{ 42} 43 44static inline void store_NMI_vector(unsigned short *high, unsigned short *low) 45{ 46} 47 48static 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 */ 59