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