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 a902a0d3ae0..880b8c1e6e5 100644 --- a/arch/powerpc/include/asm/smp.h +++ b/arch/powerpc/include/asm/smp.h @@ -20,6 +20,7 @@  #include <linux/threads.h>  #include <linux/cpumask.h>  #include <linux/kernel.h> +#include <linux/irqreturn.h>  #ifndef __ASSEMBLY__ @@ -29,14 +30,32 @@  #include <asm/percpu.h>  extern int boot_cpuid; +extern int boot_cpu_count;  extern void cpu_die(void);  #ifdef CONFIG_SMP -extern void smp_send_debugger_break(int cpu); -extern void smp_message_recv(int); +struct smp_ops_t { +	void  (*message_pass)(int cpu, int msg); +#ifdef CONFIG_PPC_SMP_MUXED_IPI +	void  (*cause_ipi)(int cpu, unsigned long data); +#endif +	int   (*probe)(void); +	int   (*kick_cpu)(int nr); +	void  (*setup_cpu)(int nr); +	void  (*bringup_done)(void); +	void  (*take_timebase)(void); +	void  (*give_timebase)(void); +	int   (*cpu_disable)(void); +	void  (*cpu_die)(unsigned int nr); +	int   (*cpu_bootable)(unsigned int nr); +}; + +extern void smp_send_debugger_break(void);  extern void start_secondary_resume(void); +extern void __devinit smp_generic_give_timebase(void); +extern void __devinit smp_generic_take_timebase(void);  DECLARE_PER_CPU(unsigned int, cpu_pvr); @@ -93,13 +112,16 @@ extern int cpu_to_core_id(int cpu);  #define PPC_MSG_CALL_FUNC_SINGLE	2  #define PPC_MSG_DEBUGGER_BREAK  3 -/* - * irq controllers that have dedicated ipis per message and don't - * need additional code in the action handler may use this - */ +/* for irq controllers that have dedicated ipis per message (4) */  extern int smp_request_message_ipi(int virq, int message);  extern const char *smp_ipi_name[]; +/* for irq controllers with only a single ipi */ +extern void smp_muxed_ipi_set_data(int cpu, unsigned long data); +extern void smp_muxed_ipi_message_pass(int cpu, int msg); +extern void smp_muxed_ipi_resend(void); +extern irqreturn_t smp_ipi_demux(void); +  void smp_init_iSeries(void);  void smp_init_pSeries(void);  void smp_init_cell(void); @@ -149,7 +171,7 @@ extern int smt_enabled_at_boot;  extern int smp_mpic_probe(void);  extern void smp_mpic_setup_cpu(int cpu); -extern void smp_generic_kick_cpu(int nr); +extern int smp_generic_kick_cpu(int nr);  extern void smp_generic_give_timebase(void);  extern void smp_generic_take_timebase(void); @@ -169,6 +191,8 @@ extern unsigned long __secondary_hold_spinloop;  extern unsigned long __secondary_hold_acknowledge;  extern char __secondary_hold; +extern irqreturn_t debug_ipi_action(int irq, void *data); +  #endif /* __ASSEMBLY__ */  #endif /* __KERNEL__ */  |