xref: /kvm-unit-tests/lib/powerpc/asm/smp.h (revision 93c847c1e5cbe266496ee66dc83dcfa24c401c96)
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 Piggin static inline struct cpu *current_cpu(void)
25c76b0d0aSNicholas Piggin {
26c76b0d0aSNicholas Piggin 	return __current_cpu;
27c76b0d0aSNicholas Piggin }
28d129d8a1SSuraj Jitindar Singh 
smp_processor_id(void)29c76b0d0aSNicholas Piggin static 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