2005-04-16 15:20:36 -07:00
# ifndef _ASM_GENAPIC_H
# define _ASM_GENAPIC_H 1
2006-09-26 10:52:26 +02:00
# include <asm/mpspec.h>
2005-04-16 15:20:36 -07:00
/*
* Generic APIC driver interface .
*
* An straight forward mapping of the APIC related parts of the
* x86 subarchitecture interface to a dynamic object .
*
* This is used by the " generic " x86 subarchitecture .
*
* Copyright 2003 Andi Kleen , SuSE Labs .
*/
struct mpc_config_translation ;
struct mpc_config_bus ;
struct mp_config_table ;
struct mpc_config_processor ;
struct genapic {
char * name ;
int ( * probe ) ( void ) ;
int ( * apic_id_registered ) ( void ) ;
cpumask_t ( * target_cpus ) ( void ) ;
int int_delivery_mode ;
int int_dest_mode ;
int ESR_DISABLE ;
int apic_destination_logical ;
unsigned long ( * check_apicid_used ) ( physid_mask_t bitmap , int apicid ) ;
unsigned long ( * check_apicid_present ) ( int apicid ) ;
int no_balance_irq ;
int no_ioapic_check ;
void ( * init_apic_ldr ) ( void ) ;
physid_mask_t ( * ioapic_phys_id_map ) ( physid_mask_t map ) ;
2007-05-02 19:27:04 +02:00
void ( * setup_apic_routing ) ( void ) ;
2005-04-16 15:20:36 -07:00
int ( * multi_timer_check ) ( int apic , int irq ) ;
int ( * apicid_to_node ) ( int logical_apicid ) ;
int ( * cpu_to_logical_apicid ) ( int cpu ) ;
int ( * cpu_present_to_apicid ) ( int mps_cpu ) ;
physid_mask_t ( * apicid_to_cpu_present ) ( int phys_apicid ) ;
void ( * setup_portio_remap ) ( void ) ;
int ( * check_phys_apicid_present ) ( int boot_cpu_physical_apicid ) ;
void ( * enable_apic_mode ) ( void ) ;
u32 ( * phys_pkg_id ) ( u32 cpuid_apic , int index_msb ) ;
/* mpparse */
void ( * mpc_oem_bus_info ) ( struct mpc_config_bus * , char * ,
struct mpc_config_translation * ) ;
/* When one of the next two hooks returns 1 the genapic
is switched to this . Essentially they are additional probe
functions . */
int ( * mps_oem_check ) ( struct mp_config_table * mpc , char * oem ,
char * productid ) ;
int ( * acpi_madt_oem_check ) ( char * oem_id , char * oem_table_id ) ;
unsigned ( * get_apic_id ) ( unsigned long x ) ;
unsigned long apic_id_mask ;
unsigned int ( * cpu_mask_to_apicid ) ( cpumask_t cpumask ) ;
2006-09-26 10:52:26 +02:00
# ifdef CONFIG_SMP
2005-04-16 15:20:36 -07:00
/* ipi */
void ( * send_IPI_mask ) ( cpumask_t mask , int vector ) ;
void ( * send_IPI_allbutself ) ( int vector ) ;
void ( * send_IPI_all ) ( int vector ) ;
2006-09-26 10:52:26 +02:00
# endif
2005-04-16 15:20:36 -07:00
} ;
2006-09-26 10:52:26 +02:00
# define APICFUNC(x) .x = x,
/* More functions could be probably marked IPIFUNC and save some space
in UP GENERICARCH kernels , but I don ' t have the nerve right now
to untangle this mess . - AK */
# ifdef CONFIG_SMP
# define IPIFUNC(x) APICFUNC(x)
# else
# define IPIFUNC(x)
# endif
2005-04-16 15:20:36 -07:00
# define APIC_INIT(aname, aprobe) { \
. name = aname , \
. probe = aprobe , \
. int_delivery_mode = INT_DELIVERY_MODE , \
. int_dest_mode = INT_DEST_MODE , \
. no_balance_irq = NO_BALANCE_IRQ , \
. ESR_DISABLE = esr_disable , \
. apic_destination_logical = APIC_DEST_LOGICAL , \
2006-09-26 10:52:26 +02:00
APICFUNC ( apic_id_registered ) \
APICFUNC ( target_cpus ) \
APICFUNC ( check_apicid_used ) \
APICFUNC ( check_apicid_present ) \
APICFUNC ( init_apic_ldr ) \
APICFUNC ( ioapic_phys_id_map ) \
2007-05-02 19:27:04 +02:00
APICFUNC ( setup_apic_routing ) \
2006-09-26 10:52:26 +02:00
APICFUNC ( multi_timer_check ) \
APICFUNC ( apicid_to_node ) \
APICFUNC ( cpu_to_logical_apicid ) \
APICFUNC ( cpu_present_to_apicid ) \
APICFUNC ( apicid_to_cpu_present ) \
APICFUNC ( setup_portio_remap ) \
APICFUNC ( check_phys_apicid_present ) \
APICFUNC ( mpc_oem_bus_info ) \
APICFUNC ( mps_oem_check ) \
APICFUNC ( get_apic_id ) \
2005-04-16 15:20:36 -07:00
. apic_id_mask = APIC_ID_MASK , \
2006-09-26 10:52:26 +02:00
APICFUNC ( cpu_mask_to_apicid ) \
APICFUNC ( acpi_madt_oem_check ) \
IPIFUNC ( send_IPI_mask ) \
IPIFUNC ( send_IPI_allbutself ) \
IPIFUNC ( send_IPI_all ) \
APICFUNC ( enable_apic_mode ) \
APICFUNC ( phys_pkg_id ) \
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
# endif