1d129d8a1SSuraj Jitindar Singh #ifndef _ASMPOWERPC_SMP_H_ 2d129d8a1SSuraj Jitindar Singh #define _ASMPOWERPC_SMP_H_ 3d129d8a1SSuraj Jitindar Singh 4d129d8a1SSuraj Jitindar Singh #include <libcflat.h> 5c76b0d0aSNicholas Piggin #include <asm/processor.h> 6d4c8e725SNicholas Piggin #include <asm/page.h> 7d129d8a1SSuraj Jitindar Singh 8c76b0d0aSNicholas Piggin typedef void (*secondary_entry_fn)(int cpu_id); 9d129d8a1SSuraj Jitindar Singh 10c76b0d0aSNicholas Piggin struct cpu { 11c76b0d0aSNicholas Piggin unsigned long server_no; 12c76b0d0aSNicholas Piggin unsigned long stack; 13c76b0d0aSNicholas Piggin unsigned long exception_stack; 14*93c847c1SNicholas Piggin bool in_user; 15c76b0d0aSNicholas Piggin secondary_entry_fn entry; 16d4c8e725SNicholas Piggin pgd_t *pgtable; 17d129d8a1SSuraj Jitindar Singh }; 18d129d8a1SSuraj Jitindar Singh 19c76b0d0aSNicholas Piggin extern int nr_cpus_present; 20c76b0d0aSNicholas Piggin extern int nr_cpus_online; 21c76b0d0aSNicholas Piggin extern struct cpu cpus[]; 22d129d8a1SSuraj Jitindar Singh 23c76b0d0aSNicholas Piggin register struct cpu *__current_cpu asm("r13"); current_cpu(void)24c76b0d0aSNicholas Pigginstatic inline struct cpu *current_cpu(void) 25c76b0d0aSNicholas Piggin { 26c76b0d0aSNicholas Piggin return __current_cpu; 27c76b0d0aSNicholas Piggin } 28d129d8a1SSuraj Jitindar Singh smp_processor_id(void)29c76b0d0aSNicholas Pigginstatic inline int smp_processor_id(void) 30c76b0d0aSNicholas Piggin { 31c76b0d0aSNicholas Piggin return current_cpu()->server_no; 32c76b0d0aSNicholas Piggin } 33c76b0d0aSNicholas Piggin 34c76b0d0aSNicholas Piggin void cpu_init(struct cpu *cpu, int cpu_id); 35c76b0d0aSNicholas Piggin 36c76b0d0aSNicholas Piggin extern void halt(int cpu_id); 37c76b0d0aSNicholas Piggin 38c76b0d0aSNicholas Piggin extern bool start_all_cpus(secondary_entry_fn entry); 39c76b0d0aSNicholas Piggin extern void stop_all_cpus(void); 40c76b0d0aSNicholas Piggin 41c76b0d0aSNicholas Piggin struct pt_regs; 42c76b0d0aSNicholas Piggin void register_ipi(void (*fn)(struct pt_regs *, void *), void *data); 43c76b0d0aSNicholas Piggin void unregister_ipi(void); 44c76b0d0aSNicholas Piggin void cpu_init_ipis(void); 45c76b0d0aSNicholas Piggin void local_ipi_enable(void); 46c76b0d0aSNicholas Piggin void local_ipi_disable(void); 47c76b0d0aSNicholas Piggin void send_ipi(int cpu_id); 48d129d8a1SSuraj Jitindar Singh 49d129d8a1SSuraj Jitindar Singh #endif /* _ASMPOWERPC_SMP_H_ */ 50