genapic_32.h 3.5 KB
Newer Older
V
Vegard Nossum 已提交
1 2
#ifndef ASM_X86__GENAPIC_32_H
#define ASM_X86__GENAPIC_32_H
L
Linus Torvalds 已提交
3

4 5
#include <asm/mpspec.h>

L
Linus Torvalds 已提交
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
/*
 * 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_bus;
struct mp_config_table;
struct mpc_config_processor;

21 22 23
struct genapic {
	char *name;
	int (*probe)(void);
L
Linus Torvalds 已提交
24 25 26 27

	int (*apic_id_registered)(void);
	cpumask_t (*target_cpus)(void);
	int int_delivery_mode;
28
	int int_dest_mode;
L
Linus Torvalds 已提交
29 30 31
	int ESR_DISABLE;
	int apic_destination_logical;
	unsigned long (*check_apicid_used)(physid_mask_t bitmap, int apicid);
32
	unsigned long (*check_apicid_present)(int apicid);
L
Linus Torvalds 已提交
33 34 35 36 37
	int no_balance_irq;
	int no_ioapic_check;
	void (*init_apic_ldr)(void);
	physid_mask_t (*ioapic_phys_id_map)(physid_mask_t map);

38
	void (*setup_apic_routing)(void);
L
Linus Torvalds 已提交
39
	int (*multi_timer_check)(int apic, int irq);
40
	int (*apicid_to_node)(int logical_apicid);
L
Linus Torvalds 已提交
41 42 43
	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);
44
	void (*setup_portio_remap)(void);
L
Linus Torvalds 已提交
45 46 47 48 49 50
	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 */
	/* When one of the next two hooks returns 1 the genapic
51
	   is switched to this. Essentially they are additional probe
L
Linus Torvalds 已提交
52
	   functions. */
53 54
	int (*mps_oem_check)(struct mp_config_table *mpc, char *oem,
			     char *productid);
L
Linus Torvalds 已提交
55 56 57 58 59
	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);
60 61

#ifdef CONFIG_SMP
L
Linus Torvalds 已提交
62 63 64 65
	/* ipi */
	void (*send_IPI_mask)(cpumask_t mask, int vector);
	void (*send_IPI_allbutself)(int vector);
	void (*send_IPI_all)(int vector);
66
#endif
67
};
L
Linus Torvalds 已提交
68

69 70 71 72 73 74 75 76 77 78
#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
L
Linus Torvalds 已提交
79

80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
#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,	\
	APICFUNC(apic_id_registered)			\
	APICFUNC(target_cpus)				\
	APICFUNC(check_apicid_used)			\
	APICFUNC(check_apicid_present)			\
	APICFUNC(init_apic_ldr)				\
	APICFUNC(ioapic_phys_id_map)			\
	APICFUNC(setup_apic_routing)			\
	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(mps_oem_check)				\
	APICFUNC(get_apic_id)				\
	.apic_id_mask = APIC_ID_MASK,			\
	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)				\
}
L
Linus Torvalds 已提交
114

115
extern struct genapic *genapic;
L
Linus Torvalds 已提交
116

117 118 119
enum uv_system_type {UV_NONE, UV_LEGACY_APIC, UV_X2APIC, UV_NON_UNIQUE_APIC};
#define get_uv_system_type()		UV_NONE
#define is_uv_system()			0
J
Jack Steiner 已提交
120
#define uv_wakeup_secondary(a, b)	1
121 122


V
Vegard Nossum 已提交
123
#endif /* ASM_X86__GENAPIC_32_H */