diff options
Diffstat (limited to 'arch/powerpc/include/asm/smp.h')
-rw-r--r-- | arch/powerpc/include/asm/smp.h | 38 |
1 files changed, 31 insertions, 7 deletions
diff --git a/arch/powerpc/include/asm/smp.h b/arch/powerpc/include/asm/smp.h index a902a0d3ae0d..880b8c1e6e53 100644 --- a/arch/powerpc/include/asm/smp.h +++ b/arch/powerpc/include/asm/smp.h | |||
@@ -20,6 +20,7 @@ | |||
20 | #include <linux/threads.h> | 20 | #include <linux/threads.h> |
21 | #include <linux/cpumask.h> | 21 | #include <linux/cpumask.h> |
22 | #include <linux/kernel.h> | 22 | #include <linux/kernel.h> |
23 | #include <linux/irqreturn.h> | ||
23 | 24 | ||
24 | #ifndef __ASSEMBLY__ | 25 | #ifndef __ASSEMBLY__ |
25 | 26 | ||
@@ -29,14 +30,32 @@ | |||
29 | #include <asm/percpu.h> | 30 | #include <asm/percpu.h> |
30 | 31 | ||
31 | extern int boot_cpuid; | 32 | extern int boot_cpuid; |
33 | extern int boot_cpu_count; | ||
32 | 34 | ||
33 | extern void cpu_die(void); | 35 | extern void cpu_die(void); |
34 | 36 | ||
35 | #ifdef CONFIG_SMP | 37 | #ifdef CONFIG_SMP |
36 | 38 | ||
37 | extern void smp_send_debugger_break(int cpu); | 39 | struct smp_ops_t { |
38 | extern void smp_message_recv(int); | 40 | void (*message_pass)(int cpu, int msg); |
41 | #ifdef CONFIG_PPC_SMP_MUXED_IPI | ||
42 | void (*cause_ipi)(int cpu, unsigned long data); | ||
43 | #endif | ||
44 | int (*probe)(void); | ||
45 | int (*kick_cpu)(int nr); | ||
46 | void (*setup_cpu)(int nr); | ||
47 | void (*bringup_done)(void); | ||
48 | void (*take_timebase)(void); | ||
49 | void (*give_timebase)(void); | ||
50 | int (*cpu_disable)(void); | ||
51 | void (*cpu_die)(unsigned int nr); | ||
52 | int (*cpu_bootable)(unsigned int nr); | ||
53 | }; | ||
54 | |||
55 | extern void smp_send_debugger_break(void); | ||
39 | extern void start_secondary_resume(void); | 56 | extern void start_secondary_resume(void); |
57 | extern void __devinit smp_generic_give_timebase(void); | ||
58 | extern void __devinit smp_generic_take_timebase(void); | ||
40 | 59 | ||
41 | DECLARE_PER_CPU(unsigned int, cpu_pvr); | 60 | DECLARE_PER_CPU(unsigned int, cpu_pvr); |
42 | 61 | ||
@@ -93,13 +112,16 @@ extern int cpu_to_core_id(int cpu); | |||
93 | #define PPC_MSG_CALL_FUNC_SINGLE 2 | 112 | #define PPC_MSG_CALL_FUNC_SINGLE 2 |
94 | #define PPC_MSG_DEBUGGER_BREAK 3 | 113 | #define PPC_MSG_DEBUGGER_BREAK 3 |
95 | 114 | ||
96 | /* | 115 | /* for irq controllers that have dedicated ipis per message (4) */ |
97 | * irq controllers that have dedicated ipis per message and don't | ||
98 | * need additional code in the action handler may use this | ||
99 | */ | ||
100 | extern int smp_request_message_ipi(int virq, int message); | 116 | extern int smp_request_message_ipi(int virq, int message); |
101 | extern const char *smp_ipi_name[]; | 117 | extern const char *smp_ipi_name[]; |
102 | 118 | ||
119 | /* for irq controllers with only a single ipi */ | ||
120 | extern void smp_muxed_ipi_set_data(int cpu, unsigned long data); | ||
121 | extern void smp_muxed_ipi_message_pass(int cpu, int msg); | ||
122 | extern void smp_muxed_ipi_resend(void); | ||
123 | extern irqreturn_t smp_ipi_demux(void); | ||
124 | |||
103 | void smp_init_iSeries(void); | 125 | void smp_init_iSeries(void); |
104 | void smp_init_pSeries(void); | 126 | void smp_init_pSeries(void); |
105 | void smp_init_cell(void); | 127 | void smp_init_cell(void); |
@@ -149,7 +171,7 @@ extern int smt_enabled_at_boot; | |||
149 | 171 | ||
150 | extern int smp_mpic_probe(void); | 172 | extern int smp_mpic_probe(void); |
151 | extern void smp_mpic_setup_cpu(int cpu); | 173 | extern void smp_mpic_setup_cpu(int cpu); |
152 | extern void smp_generic_kick_cpu(int nr); | 174 | extern int smp_generic_kick_cpu(int nr); |
153 | 175 | ||
154 | extern void smp_generic_give_timebase(void); | 176 | extern void smp_generic_give_timebase(void); |
155 | extern void smp_generic_take_timebase(void); | 177 | extern void smp_generic_take_timebase(void); |
@@ -169,6 +191,8 @@ extern unsigned long __secondary_hold_spinloop; | |||
169 | extern unsigned long __secondary_hold_acknowledge; | 191 | extern unsigned long __secondary_hold_acknowledge; |
170 | extern char __secondary_hold; | 192 | extern char __secondary_hold; |
171 | 193 | ||
194 | extern irqreturn_t debug_ipi_action(int irq, void *data); | ||
195 | |||
172 | #endif /* __ASSEMBLY__ */ | 196 | #endif /* __ASSEMBLY__ */ |
173 | 197 | ||
174 | #endif /* __KERNEL__ */ | 198 | #endif /* __KERNEL__ */ |