1 #ifndef __ASM_SMP_H 2 #define __ASM_SMP_H 3 4 #include <linux/threads.h> 5 #include <linux/cpumask.h> 6 #include <linux/bitops.h> 7 #include <asm/pal.h> 8 9 /* HACK: Cabrio WHAMI return value is bogus if more than 8 bits used.. :-( */ 10 11 static __inline__ unsigned char 12 __hard_smp_processor_id(void) 13 { 14 register unsigned char __r0 __asm__("$0"); 15 __asm__ __volatile__( 16 "call_pal %1 #whami" 17 : "=r"(__r0) 18 :"i" (PAL_whami) 19 : "$1", "$22", "$23", "$24", "$25"); 20 return __r0; 21 } 22 23 #ifdef CONFIG_SMP 24 25 #include <asm/irq.h> 26 27 struct cpuinfo_alpha { 28 unsigned long loops_per_jiffy; 29 unsigned long last_asn; 30 int need_new_asn; 31 int asn_lock; 32 unsigned long ipi_count; 33 unsigned long prof_multiplier; 34 unsigned long prof_counter; 35 unsigned char mcheck_expected; 36 unsigned char mcheck_taken; 37 unsigned char mcheck_extra; 38 } __attribute__((aligned(64))); 39 40 extern struct cpuinfo_alpha cpu_data[NR_CPUS]; 41 42 #define hard_smp_processor_id() __hard_smp_processor_id() 43 #define raw_smp_processor_id() (current_thread_info()->cpu) 44 45 extern int smp_num_cpus; 46 47 extern void arch_send_call_function_single_ipi(int cpu); 48 extern void arch_send_call_function_ipi_mask(const struct cpumask *mask); 49 50 #else /* CONFIG_SMP */ 51 52 #define hard_smp_processor_id() 0 53 #define smp_call_function_on_cpu(func,info,wait,cpu) ({ 0; }) 54 55 #endif /* CONFIG_SMP */ 56 57 #define NO_PROC_ID (-1) 58 59 #endif 60