arch/x86/include/asm/genapic_32.h
changeset 0 aa628870c1d3
child 2 d1f6d8b6f81c
equal deleted inserted replaced
-1:000000000000 0:aa628870c1d3
       
     1 #ifndef _ASM_X86_GENAPIC_32_H
       
     2 #define _ASM_X86_GENAPIC_32_H
       
     3 
       
     4 #include <asm/mpspec.h>
       
     5 
       
     6 /*
       
     7  * Generic APIC driver interface.
       
     8  *
       
     9  * An straight forward mapping of the APIC related parts of the
       
    10  * x86 subarchitecture interface to a dynamic object.
       
    11  *
       
    12  * This is used by the "generic" x86 subarchitecture.
       
    13  *
       
    14  * Copyright 2003 Andi Kleen, SuSE Labs.
       
    15  */
       
    16 
       
    17 struct mpc_config_bus;
       
    18 struct mp_config_table;
       
    19 struct mpc_config_processor;
       
    20 
       
    21 struct genapic {
       
    22 	char *name;
       
    23 	int (*probe)(void);
       
    24 
       
    25 	int (*apic_id_registered)(void);
       
    26 	cpumask_t (*target_cpus)(void);
       
    27 	int int_delivery_mode;
       
    28 	int int_dest_mode;
       
    29 	int ESR_DISABLE;
       
    30 	int apic_destination_logical;
       
    31 	unsigned long (*check_apicid_used)(physid_mask_t bitmap, int apicid);
       
    32 	unsigned long (*check_apicid_present)(int apicid);
       
    33 	int no_balance_irq;
       
    34 	int no_ioapic_check;
       
    35 	void (*init_apic_ldr)(void);
       
    36 	physid_mask_t (*ioapic_phys_id_map)(physid_mask_t map);
       
    37 
       
    38 	void (*setup_apic_routing)(void);
       
    39 	int (*multi_timer_check)(int apic, int irq);
       
    40 	int (*apicid_to_node)(int logical_apicid);
       
    41 	int (*cpu_to_logical_apicid)(int cpu);
       
    42 	int (*cpu_present_to_apicid)(int mps_cpu);
       
    43 	physid_mask_t (*apicid_to_cpu_present)(int phys_apicid);
       
    44 	void (*setup_portio_remap)(void);
       
    45 	int (*check_phys_apicid_present)(int boot_cpu_physical_apicid);
       
    46 	void (*enable_apic_mode)(void);
       
    47 	u32 (*phys_pkg_id)(u32 cpuid_apic, int index_msb);
       
    48 
       
    49 	/* mpparse */
       
    50 	/* When one of the next two hooks returns 1 the genapic
       
    51 	   is switched to this. Essentially they are additional probe
       
    52 	   functions. */
       
    53 	int (*mps_oem_check)(struct mp_config_table *mpc, char *oem,
       
    54 			     char *productid);
       
    55 	int (*acpi_madt_oem_check)(char *oem_id, char *oem_table_id);
       
    56 
       
    57 	unsigned (*get_apic_id)(unsigned long x);
       
    58 	unsigned long apic_id_mask;
       
    59 	unsigned int (*cpu_mask_to_apicid)(cpumask_t cpumask);
       
    60 	cpumask_t (*vector_allocation_domain)(int cpu);
       
    61 
       
    62 #ifdef CONFIG_SMP
       
    63 	/* ipi */
       
    64 	void (*send_IPI_mask)(cpumask_t mask, int vector);
       
    65 	void (*send_IPI_allbutself)(int vector);
       
    66 	void (*send_IPI_all)(int vector);
       
    67 #endif
       
    68 };
       
    69 
       
    70 #define APICFUNC(x) .x = x,
       
    71 
       
    72 /* More functions could be probably marked IPIFUNC and save some space
       
    73    in UP GENERICARCH kernels, but I don't have the nerve right now
       
    74    to untangle this mess. -AK  */
       
    75 #ifdef CONFIG_SMP
       
    76 #define IPIFUNC(x) APICFUNC(x)
       
    77 #else
       
    78 #define IPIFUNC(x)
       
    79 #endif
       
    80 
       
    81 #define APIC_INIT(aname, aprobe)			\
       
    82 {							\
       
    83 	.name = aname,					\
       
    84 	.probe = aprobe,				\
       
    85 	.int_delivery_mode = INT_DELIVERY_MODE,		\
       
    86 	.int_dest_mode = INT_DEST_MODE,			\
       
    87 	.no_balance_irq = NO_BALANCE_IRQ,		\
       
    88 	.ESR_DISABLE = esr_disable,			\
       
    89 	.apic_destination_logical = APIC_DEST_LOGICAL,	\
       
    90 	APICFUNC(apic_id_registered)			\
       
    91 	APICFUNC(target_cpus)				\
       
    92 	APICFUNC(check_apicid_used)			\
       
    93 	APICFUNC(check_apicid_present)			\
       
    94 	APICFUNC(init_apic_ldr)				\
       
    95 	APICFUNC(ioapic_phys_id_map)			\
       
    96 	APICFUNC(setup_apic_routing)			\
       
    97 	APICFUNC(multi_timer_check)			\
       
    98 	APICFUNC(apicid_to_node)			\
       
    99 	APICFUNC(cpu_to_logical_apicid)			\
       
   100 	APICFUNC(cpu_present_to_apicid)			\
       
   101 	APICFUNC(apicid_to_cpu_present)			\
       
   102 	APICFUNC(setup_portio_remap)			\
       
   103 	APICFUNC(check_phys_apicid_present)		\
       
   104 	APICFUNC(mps_oem_check)				\
       
   105 	APICFUNC(get_apic_id)				\
       
   106 	.apic_id_mask = APIC_ID_MASK,			\
       
   107 	APICFUNC(cpu_mask_to_apicid)			\
       
   108 	APICFUNC(vector_allocation_domain)			\
       
   109 	APICFUNC(acpi_madt_oem_check)			\
       
   110 	IPIFUNC(send_IPI_mask)				\
       
   111 	IPIFUNC(send_IPI_allbutself)			\
       
   112 	IPIFUNC(send_IPI_all)				\
       
   113 	APICFUNC(enable_apic_mode)			\
       
   114 	APICFUNC(phys_pkg_id)				\
       
   115 }
       
   116 
       
   117 extern struct genapic *genapic;
       
   118 
       
   119 enum uv_system_type {UV_NONE, UV_LEGACY_APIC, UV_X2APIC, UV_NON_UNIQUE_APIC};
       
   120 #define get_uv_system_type()		UV_NONE
       
   121 #define is_uv_system()			0
       
   122 #define uv_wakeup_secondary(a, b)	1
       
   123 #define uv_system_init()		do {} while (0)
       
   124 
       
   125 
       
   126 #endif /* _ASM_X86_GENAPIC_32_H */