diff options
Diffstat (limited to 'arch/arm/include/asm/smp.h')
| -rw-r--r-- | arch/arm/include/asm/smp.h | 48 | 
1 files changed, 34 insertions, 14 deletions
diff --git a/arch/arm/include/asm/smp.h b/arch/arm/include/asm/smp.h index ae29293270a..2e3be16c676 100644 --- a/arch/arm/include/asm/smp.h +++ b/arch/arm/include/asm/smp.h @@ -60,15 +60,6 @@ extern int boot_secondary(unsigned int cpu, struct task_struct *);   */  asmlinkage void secondary_start_kernel(void); -/* - * Perform platform specific initialisation of the specified CPU. - */ -extern void platform_secondary_init(unsigned int cpu); - -/* - * Initialize cpu_possible map, and enable coherency - */ -extern void platform_smp_prepare_cpus(unsigned int);  /*   * Initial data for bringing up a secondary CPU. @@ -79,18 +70,47 @@ struct secondary_data {  	void *stack;  };  extern struct secondary_data secondary_data; +extern volatile int pen_release;  extern int __cpu_disable(void); -extern int platform_cpu_disable(unsigned int cpu);  extern void __cpu_die(unsigned int cpu);  extern void cpu_die(void); -extern void platform_cpu_die(unsigned int cpu); -extern int platform_cpu_kill(unsigned int cpu); -extern void platform_cpu_enable(unsigned int cpu); -  extern void arch_send_call_function_single_ipi(int cpu);  extern void arch_send_call_function_ipi_mask(const struct cpumask *mask); +struct smp_operations { +#ifdef CONFIG_SMP +	/* +	 * Setup the set of possible CPUs (via set_cpu_possible) +	 */ +	void (*smp_init_cpus)(void); +	/* +	 * Initialize cpu_possible map, and enable coherency +	 */ +	void (*smp_prepare_cpus)(unsigned int max_cpus); + +	/* +	 * Perform platform specific initialisation of the specified CPU. +	 */ +	void (*smp_secondary_init)(unsigned int cpu); +	/* +	 * Boot a secondary CPU, and assign it the specified idle task. +	 * This also gives us the initial stack to use for this CPU. +	 */ +	int  (*smp_boot_secondary)(unsigned int cpu, struct task_struct *idle); +#ifdef CONFIG_HOTPLUG_CPU +	int  (*cpu_kill)(unsigned int cpu); +	void (*cpu_die)(unsigned int cpu); +	int  (*cpu_disable)(unsigned int cpu); +#endif +#endif +}; + +/* + * set platform specific SMP operations + */ +extern void smp_set_ops(struct smp_operations *); +  #endif /* ifndef __ASM_ARM_SMP_H */  |