xref: /kvm-unit-tests/lib/powerpc/asm/smp.h (revision d4c8e725478d05179b23be44fc61357a92da4912)
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