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> 6*d4c8e725SNicholas 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; 14c76b0d0aSNicholas Piggin secondary_entry_fn entry; 15*d4c8e725SNicholas Piggin pgd_t *pgtable; 16d129d8a1SSuraj Jitindar Singh }; 17d129d8a1SSuraj Jitindar Singh 18c76b0d0aSNicholas Piggin extern int nr_cpus_present; 19c76b0d0aSNicholas Piggin extern int nr_cpus_online; 20c76b0d0aSNicholas Piggin extern struct cpu cpus[]; 21d129d8a1SSuraj Jitindar Singh 22c76b0d0aSNicholas Piggin register struct cpu *__current_cpu asm("r13"); 23c76b0d0aSNicholas Piggin static inline struct cpu *current_cpu(void) 24c76b0d0aSNicholas Piggin { 25c76b0d0aSNicholas Piggin return __current_cpu; 26c76b0d0aSNicholas Piggin } 27d129d8a1SSuraj Jitindar Singh 28c76b0d0aSNicholas Piggin static inline int smp_processor_id(void) 29c76b0d0aSNicholas Piggin { 30c76b0d0aSNicholas Piggin return current_cpu()->server_no; 31c76b0d0aSNicholas Piggin } 32c76b0d0aSNicholas Piggin 33c76b0d0aSNicholas Piggin void cpu_init(struct cpu *cpu, int cpu_id); 34c76b0d0aSNicholas Piggin 35c76b0d0aSNicholas Piggin extern void halt(int cpu_id); 36c76b0d0aSNicholas Piggin 37c76b0d0aSNicholas Piggin extern bool start_all_cpus(secondary_entry_fn entry); 38c76b0d0aSNicholas Piggin extern void stop_all_cpus(void); 39c76b0d0aSNicholas Piggin 40c76b0d0aSNicholas Piggin struct pt_regs; 41c76b0d0aSNicholas Piggin void register_ipi(void (*fn)(struct pt_regs *, void *), void *data); 42c76b0d0aSNicholas Piggin void unregister_ipi(void); 43c76b0d0aSNicholas Piggin void cpu_init_ipis(void); 44c76b0d0aSNicholas Piggin void local_ipi_enable(void); 45c76b0d0aSNicholas Piggin void local_ipi_disable(void); 46c76b0d0aSNicholas Piggin void send_ipi(int cpu_id); 47d129d8a1SSuraj Jitindar Singh 48d129d8a1SSuraj Jitindar Singh #endif /* _ASMPOWERPC_SMP_H_ */ 49