2008-10-22 22:26:29 -07:00
# ifndef _ASM_X86_GENAPIC_64_H
# define _ASM_X86_GENAPIC_64_H
2005-04-16 15:20:36 -07:00
2008-12-16 17:33:52 -08:00
# include <linux/cpumask.h>
2005-04-16 15:20:36 -07:00
/*
* Copyright 2004 James Cleverdon , IBM .
* Subject to the GNU Public License , v .2
*
* Generic APIC sub - arch data struct .
*
* Hacked for x86 - 64 by James Cleverdon from i386 architecture code by
* Martin Bligh , Andi Kleen , James Bottomley , John Stultz , and
* James Cleverdon .
*/
struct genapic {
char * name ;
2008-07-21 22:08:21 -07:00
int ( * acpi_madt_oem_check ) ( char * oem_id , char * oem_table_id ) ;
2005-04-16 15:20:36 -07:00
u32 int_delivery_mode ;
u32 int_dest_mode ;
int ( * apic_id_registered ) ( void ) ;
2008-12-16 17:33:59 -08:00
const struct cpumask * ( * target_cpus ) ( void ) ;
void ( * vector_allocation_domain ) ( int cpu , struct cpumask * retmask ) ;
2005-04-16 15:20:36 -07:00
void ( * init_apic_ldr ) ( void ) ;
/* ipi */
2008-12-16 17:33:59 -08:00
void ( * send_IPI_mask ) ( const struct cpumask * mask , int vector ) ;
void ( * send_IPI_mask_allbutself ) ( const struct cpumask * mask ,
int vector ) ;
2005-04-16 15:20:36 -07:00
void ( * send_IPI_allbutself ) ( int vector ) ;
void ( * send_IPI_all ) ( int vector ) ;
2008-07-10 11:16:53 -07:00
void ( * send_IPI_self ) ( int vector ) ;
2005-04-16 15:20:36 -07:00
/* */
2008-12-16 17:33:59 -08:00
unsigned int ( * cpu_mask_to_apicid ) ( const struct cpumask * cpumask ) ;
2008-12-16 17:33:55 -08:00
unsigned int ( * cpu_mask_to_apicid_and ) ( const struct cpumask * cpumask ,
const struct cpumask * andmask ) ;
2005-04-16 15:20:36 -07:00
unsigned int ( * phys_pkg_id ) ( int index_msb ) ;
2008-07-12 01:01:20 -07:00
unsigned int ( * get_apic_id ) ( unsigned long x ) ;
unsigned long ( * set_apic_id ) ( unsigned int id ) ;
unsigned long apic_id_mask ;
2008-11-17 15:19:53 -08:00
/* wakeup_secondary_cpu */
int ( * wakeup_cpu ) ( int apicid , unsigned long start_eip ) ;
2005-04-16 15:20:36 -07:00
} ;
2007-05-02 19:27:04 +02:00
extern struct genapic * genapic ;
2005-04-16 15:20:36 -07:00
2007-05-02 19:27:04 +02:00
extern struct genapic apic_flat ;
extern struct genapic apic_physflat ;
2008-07-10 11:16:54 -07:00
extern struct genapic apic_x2apic_cluster ;
2008-07-10 11:16:59 -07:00
extern struct genapic apic_x2apic_phys ;
2008-03-28 14:12:06 -05:00
extern int acpi_madt_oem_check ( char * , char * ) ;
2008-07-10 11:16:53 -07:00
extern void apic_send_IPI_self ( int vector ) ;
2008-03-28 14:12:06 -05:00
enum uv_system_type { UV_NONE , UV_LEGACY_APIC , UV_X2APIC , UV_NON_UNIQUE_APIC } ;
extern enum uv_system_type get_uv_system_type ( void ) ;
extern int is_uv_system ( void ) ;
2007-05-02 19:27:04 +02:00
2008-03-28 14:12:16 -05:00
extern struct genapic apic_x2apic_uv_x ;
DECLARE_PER_CPU ( int , x2apic_extra_bits ) ;
extern void uv_cpu_init ( void ) ;
2008-08-21 20:49:05 +02:00
extern void uv_system_init ( void ) ;
2008-03-28 14:12:16 -05:00
extern int uv_wakeup_secondary ( int phys_apicid , unsigned int start_rip ) ;
2008-05-02 23:19:26 +02:00
extern void setup_apic_routing ( void ) ;
2008-10-22 22:26:29 -07:00
# endif /* _ASM_X86_GENAPIC_64_H */