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 11static __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 27struct 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 40extern 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 45extern int smp_num_cpus; 46 47extern void arch_send_call_function_single_ipi(int cpu); 48extern 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