1 /* smp.h: PPC specific SMP stuff. 2 * 3 * Original was a copy of sparc smp.h. Now heavily modified 4 * for PPC. 5 * 6 * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu) 7 * Copyright (C) 1996-2001 Cort Dougan <cort@fsmlabs.com> 8 */ 9 #ifdef __KERNEL__ 10 #ifndef _PPC_SMP_H 11 #define _PPC_SMP_H 12 13 #include <linux/config.h> 14 #include <linux/kernel.h> 15 16 #ifdef CONFIG_SMP 17 18 #ifndef __ASSEMBLY__ 19 20 struct cpuinfo_PPC { 21 unsigned long loops_per_jiffy; 22 unsigned long pvr; 23 unsigned long *pgd_cache; 24 unsigned long *pte_cache; 25 unsigned long pgtable_cache_sz; 26 }; 27 28 extern struct cpuinfo_PPC cpu_data[NR_CPUS]; 29 extern unsigned long cpu_online_map; 30 extern unsigned long smp_proc_in_lock[NR_CPUS]; 31 extern volatile unsigned long cpu_callin_map[NR_CPUS]; 32 extern int smp_tb_synchronized; 33 34 extern void smp_store_cpu_info(int id); 35 extern void smp_send_tlb_invalidate(int); 36 extern void smp_send_xmon_break(int cpu); 37 struct pt_regs; 38 extern void smp_message_recv(int, struct pt_regs *); 39 extern void smp_local_timer_interrupt(struct pt_regs *); 40 41 #define NO_PROC_ID 0xFF /* No processor magic marker */ 42 #define PROC_CHANGE_PENALTY 20 43 44 /* 1 to 1 mapping on PPC -- Cort */ 45 #define cpu_logical_map(cpu) (cpu) 46 #define cpu_number_map(x) (x) 47 48 #define smp_processor_id() (current->processor) 49 50 extern int smp_hw_index[NR_CPUS]; 51 #define hard_smp_processor_id() (smp_hw_index[smp_processor_id()]) 52 53 struct klock_info_struct { 54 unsigned long kernel_flag; 55 unsigned char akp; 56 }; 57 58 extern struct klock_info_struct klock_info; 59 #define KLOCK_HELD 0xffffffff 60 #define KLOCK_CLEAR 0x0 61 62 #ifdef CONFIG_750_SMP 63 #define smp_send_tlb_invalidate(x) smp_ppc750_send_tlb_invalidate(x) 64 #else 65 #define smp_send_tlb_invalidate(x) do {} while(0) 66 #endif 67 68 #endif /* __ASSEMBLY__ */ 69 70 #else /* !(CONFIG_SMP) */ 71 72 #endif /* !(CONFIG_SMP) */ 73 74 #endif /* !(_PPC_SMP_H) */ 75 #endif /* __KERNEL__ */ 76