2008-03-03 14:12:29 -03:00
# ifndef _ASM_X86_SMP_H_
# define _ASM_X86_SMP_H_
# ifndef __ASSEMBLY__
2008-03-03 14:12:31 -03:00
# include <linux/cpumask.h>
2008-03-03 14:12:40 -03:00
# include <linux/init.h>
2008-03-03 14:12:31 -03:00
extern cpumask_t cpu_callout_map ;
extern int smp_num_siblings ;
extern unsigned int num_processors ;
2008-03-03 14:12:29 -03:00
2008-03-03 14:13:09 -03:00
/*
* Trampoline 80 x86 program as an array .
*/
extern const unsigned char trampoline_data [ ] ;
extern const unsigned char trampoline_end [ ] ;
2008-03-03 14:12:32 -03:00
struct smp_ops {
void ( * smp_prepare_boot_cpu ) ( void ) ;
void ( * smp_prepare_cpus ) ( unsigned max_cpus ) ;
int ( * cpu_up ) ( unsigned cpu ) ;
void ( * smp_cpus_done ) ( unsigned max_cpus ) ;
void ( * smp_send_stop ) ( void ) ;
void ( * smp_send_reschedule ) ( int cpu ) ;
int ( * smp_call_function_mask ) ( cpumask_t mask ,
void ( * func ) ( void * info ) , void * info ,
int wait ) ;
} ;
2008-03-03 14:12:59 -03:00
/* Globals due to paravirt */
extern void set_cpu_sibling_map ( int cpu ) ;
2008-03-03 14:12:33 -03:00
# ifdef CONFIG_SMP
extern struct smp_ops smp_ops ;
2008-03-03 14:12:34 -03:00
2008-03-03 14:12:51 -03:00
static inline void smp_send_stop ( void )
{
smp_ops . smp_send_stop ( ) ;
}
2008-03-03 14:12:37 -03:00
static inline void smp_prepare_boot_cpu ( void )
{
smp_ops . smp_prepare_boot_cpu ( ) ;
}
2008-03-03 14:12:38 -03:00
static inline void smp_prepare_cpus ( unsigned int max_cpus )
{
smp_ops . smp_prepare_cpus ( max_cpus ) ;
}
2008-03-03 14:12:39 -03:00
static inline void smp_cpus_done ( unsigned int max_cpus )
{
smp_ops . smp_cpus_done ( max_cpus ) ;
}
2008-03-03 14:12:36 -03:00
static inline int __cpu_up ( unsigned int cpu )
{
return smp_ops . cpu_up ( cpu ) ;
}
2008-03-03 14:12:34 -03:00
static inline void smp_send_reschedule ( int cpu )
{
smp_ops . smp_send_reschedule ( cpu ) ;
}
2008-03-03 14:12:35 -03:00
static inline int smp_call_function_mask ( cpumask_t mask ,
void ( * func ) ( void * info ) , void * info ,
int wait )
{
return smp_ops . smp_call_function_mask ( mask , func , info , wait ) ;
}
2008-03-03 14:12:36 -03:00
2008-03-03 14:12:37 -03:00
void native_smp_prepare_boot_cpu ( void ) ;
2008-03-03 14:12:38 -03:00
void native_smp_prepare_cpus ( unsigned int max_cpus ) ;
2008-03-03 14:12:39 -03:00
void native_smp_cpus_done ( unsigned int max_cpus ) ;
2008-03-03 14:12:36 -03:00
int native_cpu_up ( unsigned int cpunum ) ;
2008-03-03 14:12:40 -03:00
2008-03-03 14:13:07 -03:00
extern int __cpu_disable ( void ) ;
extern void __cpu_die ( unsigned int cpu ) ;
2008-03-03 14:12:40 -03:00
extern unsigned disabled_cpus ;
2008-03-03 14:12:42 -03:00
extern void prefill_possible_map ( void ) ;
2008-03-03 14:12:33 -03:00
# endif
2008-03-03 14:12:32 -03:00
2007-10-11 11:20:03 +02:00
# ifdef CONFIG_X86_32
# include "smp_32.h"
# else
# include "smp_64.h"
# endif
2008-03-03 14:12:29 -03:00
2008-03-03 14:13:01 -03:00
# ifdef CONFIG_HOTPLUG_CPU
extern void cpu_exit_clear ( void ) ;
extern void cpu_uninit ( void ) ;
extern void remove_siblinginfo ( int cpu ) ;
# endif
2008-03-03 14:12:30 -03:00
extern void smp_alloc_memory ( void ) ;
extern void lock_ipi_call_lock ( void ) ;
extern void unlock_ipi_call_lock ( void ) ;
2008-03-03 14:12:29 -03:00
# endif /* __ASSEMBLY__ */
# endif