Commit | Line | Data |
---|---|---|
08e875c1 CM |
1 | /* |
2 | * Copyright (C) 2012 ARM Ltd. | |
3 | * | |
4 | * This program is free software; you can redistribute it and/or modify | |
5 | * it under the terms of the GNU General Public License version 2 as | |
6 | * published by the Free Software Foundation. | |
7 | * | |
8 | * This program is distributed in the hope that it will be useful, | |
9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
11 | * GNU General Public License for more details. | |
12 | * | |
13 | * You should have received a copy of the GNU General Public License | |
14 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | |
15 | */ | |
16 | #ifndef __ASM_SMP_H | |
17 | #define __ASM_SMP_H | |
18 | ||
19 | #include <linux/threads.h> | |
20 | #include <linux/cpumask.h> | |
21 | #include <linux/thread_info.h> | |
22 | ||
23 | #ifndef CONFIG_SMP | |
24 | # error "<asm/smp.h> included in non-SMP build" | |
25 | #endif | |
26 | ||
27 | #define raw_smp_processor_id() (current_thread_info()->cpu) | |
28 | ||
29 | struct seq_file; | |
30 | ||
31 | /* | |
32 | * generate IPI list text | |
33 | */ | |
34 | extern void show_ipi_list(struct seq_file *p, int prec); | |
35 | ||
36 | /* | |
37 | * Called from C code, this handles an IPI. | |
38 | */ | |
39 | extern void handle_IPI(int ipinr, struct pt_regs *regs); | |
40 | ||
41 | /* | |
42 | * Setup the set of possible CPUs (via set_cpu_possible) | |
43 | */ | |
44 | extern void smp_init_cpus(void); | |
45 | ||
46 | /* | |
47 | * Provide a function to raise an IPI cross call on CPUs in callmap. | |
48 | */ | |
49 | extern void set_smp_cross_call(void (*)(const struct cpumask *, unsigned int)); | |
50 | ||
51 | /* | |
52 | * Called from the secondary holding pen, this is the secondary CPU entry point. | |
53 | */ | |
54 | asmlinkage void secondary_start_kernel(void); | |
55 | ||
56 | /* | |
57 | * Initial data for bringing up a secondary CPU. | |
58 | */ | |
59 | struct secondary_data { | |
60 | void *stack; | |
61 | }; | |
62 | extern struct secondary_data secondary_data; | |
652af899 | 63 | extern void secondary_entry(void); |
08e875c1 CM |
64 | |
65 | extern void arch_send_call_function_single_ipi(int cpu); | |
66 | extern void arch_send_call_function_ipi_mask(const struct cpumask *mask); | |
67 | ||
9327e2c6 MR |
68 | extern int __cpu_disable(void); |
69 | ||
70 | extern void __cpu_die(unsigned int cpu); | |
71 | extern void cpu_die(void); | |
72 | ||
08e875c1 | 73 | #endif /* ifndef __ASM_SMP_H */ |