| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | #ifndef __ASM_SMP_H | 
|  | 2 | #define __ASM_SMP_H | 
|  | 3 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 PROC_CHANGE_PENALTY     20 | 
|  | 43 |  | 
|  | 44 | #define hard_smp_processor_id()	__hard_smp_processor_id() | 
| Ingo Molnar | 39c715b | 2005-06-21 17:14:34 -0700 | [diff] [blame] | 45 | #define raw_smp_processor_id()	(current_thread_info()->cpu) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 46 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 47 | extern int smp_num_cpus; | 
| Ivan Kokshaysky | c7d2d28 | 2006-06-04 02:51:34 -0700 | [diff] [blame] | 48 | #define cpu_possible_map	cpu_present_map | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 49 |  | 
| Linus Torvalds | 2ac6608 | 2005-07-28 10:34:47 -0700 | [diff] [blame] | 50 | int smp_call_function_on_cpu(void (*func) (void *info), void *info,int retry, int wait, cpumask_t cpu); | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 51 |  | 
|  | 52 | #else /* CONFIG_SMP */ | 
|  | 53 |  | 
| Linus Torvalds | 2ac6608 | 2005-07-28 10:34:47 -0700 | [diff] [blame] | 54 | #define smp_call_function_on_cpu(func,info,retry,wait,cpu)    ({ 0; }) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 55 |  | 
|  | 56 | #endif /* CONFIG_SMP */ | 
|  | 57 |  | 
|  | 58 | #define NO_PROC_ID	(-1) | 
|  | 59 |  | 
|  | 60 | #endif |