| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | #ifndef __ASM_SMP_H | 
 | 2 | #define __ASM_SMP_H | 
 | 3 |  | 
 | 4 | /* | 
 | 5 |  * We need the APIC definitions automatically as part of 'smp.h' | 
 | 6 |  */ | 
 | 7 | #ifndef __ASSEMBLY__ | 
 | 8 | #include <linux/config.h> | 
 | 9 | #include <linux/kernel.h> | 
 | 10 | #include <linux/threads.h> | 
 | 11 | #include <linux/cpumask.h> | 
 | 12 | #endif | 
 | 13 |  | 
 | 14 | #ifdef CONFIG_X86_LOCAL_APIC | 
 | 15 | #ifndef __ASSEMBLY__ | 
 | 16 | #include <asm/fixmap.h> | 
 | 17 | #include <asm/bitops.h> | 
 | 18 | #include <asm/mpspec.h> | 
 | 19 | #ifdef CONFIG_X86_IO_APIC | 
 | 20 | #include <asm/io_apic.h> | 
 | 21 | #endif | 
 | 22 | #include <asm/apic.h> | 
 | 23 | #endif | 
 | 24 | #endif | 
 | 25 |  | 
 | 26 | #define BAD_APICID 0xFFu | 
 | 27 | #ifdef CONFIG_SMP | 
 | 28 | #ifndef __ASSEMBLY__ | 
 | 29 |  | 
 | 30 | /* | 
 | 31 |  * Private routines/data | 
 | 32 |  */ | 
 | 33 |   | 
 | 34 | extern void smp_alloc_memory(void); | 
 | 35 | extern int pic_mode; | 
 | 36 | extern int smp_num_siblings; | 
 | 37 | extern cpumask_t cpu_sibling_map[]; | 
| Andi Kleen | 3dd9d51 | 2005-04-16 15:25:15 -0700 | [diff] [blame] | 38 | extern cpumask_t cpu_core_map[]; | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 39 |  | 
 | 40 | extern void smp_flush_tlb(void); | 
 | 41 | extern void smp_message_irq(int cpl, void *dev_id, struct pt_regs *regs); | 
 | 42 | extern void smp_invalidate_rcv(void);		/* Process an NMI */ | 
 | 43 | extern void (*mtrr_hook) (void); | 
 | 44 | extern void zap_low_mappings (void); | 
| Li Shaohua | 6fe940d | 2005-06-25 14:54:53 -0700 | [diff] [blame] | 45 | extern void lock_ipi_call_lock(void); | 
 | 46 | extern void unlock_ipi_call_lock(void); | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 47 |  | 
 | 48 | #define MAX_APICID 256 | 
 | 49 | extern u8 x86_cpu_to_apicid[]; | 
 | 50 |  | 
| Li Shaohua | e1367da | 2005-06-25 14:54:56 -0700 | [diff] [blame] | 51 | #ifdef CONFIG_HOTPLUG_CPU | 
 | 52 | extern void cpu_exit_clear(void); | 
 | 53 | extern void cpu_uninit(void); | 
| Li Shaohua | e1367da | 2005-06-25 14:54:56 -0700 | [diff] [blame] | 54 | #endif | 
 | 55 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 56 | /* | 
 | 57 |  * This function is needed by all SMP systems. It must _always_ be valid | 
 | 58 |  * from the initial startup. We map APIC_BASE very early in page_setup(), | 
 | 59 |  * so this is correct in the x86 case. | 
 | 60 |  */ | 
| Ingo Molnar | 39c715b | 2005-06-21 17:14:34 -0700 | [diff] [blame] | 61 | #define raw_smp_processor_id() (current_thread_info()->cpu) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 62 |  | 
 | 63 | extern cpumask_t cpu_callout_map; | 
 | 64 | extern cpumask_t cpu_callin_map; | 
 | 65 | #define cpu_possible_map cpu_callout_map | 
 | 66 |  | 
 | 67 | /* We don't mark CPUs online until __cpu_up(), so we need another measure */ | 
 | 68 | static inline int num_booting_cpus(void) | 
 | 69 | { | 
 | 70 | 	return cpus_weight(cpu_callout_map); | 
 | 71 | } | 
 | 72 |  | 
 | 73 | #ifdef CONFIG_X86_LOCAL_APIC | 
 | 74 |  | 
 | 75 | #ifdef APIC_DEFINITION | 
 | 76 | extern int hard_smp_processor_id(void); | 
 | 77 | #else | 
 | 78 | #include <mach_apicdef.h> | 
 | 79 | static inline int hard_smp_processor_id(void) | 
 | 80 | { | 
 | 81 | 	/* we don't want to mark this access volatile - bad code generation */ | 
 | 82 | 	return GET_APIC_ID(*(unsigned long *)(APIC_BASE+APIC_ID)); | 
 | 83 | } | 
 | 84 | #endif | 
 | 85 |  | 
 | 86 | static __inline int logical_smp_processor_id(void) | 
 | 87 | { | 
 | 88 | 	/* we don't want to mark this access volatile - bad code generation */ | 
 | 89 | 	return GET_APIC_LOGICAL_ID(*(unsigned long *)(APIC_BASE+APIC_LDR)); | 
 | 90 | } | 
 | 91 |  | 
 | 92 | #endif | 
| Zwane Mwaikambo | f370513 | 2005-06-25 14:54:50 -0700 | [diff] [blame] | 93 |  | 
 | 94 | extern int __cpu_disable(void); | 
 | 95 | extern void __cpu_die(unsigned int cpu); | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 96 | #endif /* !__ASSEMBLY__ */ | 
 | 97 |  | 
 | 98 | #define NO_PROC_ID		0xFF		/* No processor magic marker */ | 
 | 99 |  | 
 | 100 | #endif | 
 | 101 | #endif |