]>
Commit | Line | Data |
---|---|---|
ef7471b1 IM |
1 | #ifndef _ASM_X86_GENAPIC_H |
2 | #define _ASM_X86_GENAPIC_H | |
3 | ||
4 | #include <linux/cpumask.h> | |
5 | ||
505deeb1 IM |
6 | #include <asm/mpspec.h> |
7 | #include <asm/atomic.h> | |
8 | ||
ef7471b1 IM |
9 | /* |
10 | * Copyright 2004 James Cleverdon, IBM. | |
11 | * Subject to the GNU Public License, v.2 | |
12 | * | |
13 | * Generic APIC sub-arch data struct. | |
14 | * | |
15 | * Hacked for x86-64 by James Cleverdon from i386 architecture code by | |
16 | * Martin Bligh, Andi Kleen, James Bottomley, John Stultz, and | |
17 | * James Cleverdon. | |
18 | */ | |
ef7471b1 IM |
19 | struct genapic { |
20 | char *name; | |
21 | ||
22 | int (*probe)(void); | |
23 | int (*acpi_madt_oem_check)(char *oem_id, char *oem_table_id); | |
24 | int (*apic_id_registered)(void); | |
25 | ||
f8987a10 IM |
26 | u32 irq_delivery_mode; |
27 | u32 irq_dest_mode; | |
ef7471b1 IM |
28 | |
29 | const struct cpumask *(*target_cpus)(void); | |
30 | ||
08125d3e | 31 | int disable_esr; |
ef7471b1 | 32 | |
bdb1a9b6 | 33 | int dest_logical; |
ef7471b1 IM |
34 | unsigned long (*check_apicid_used)(physid_mask_t bitmap, int apicid); |
35 | unsigned long (*check_apicid_present)(int apicid); | |
36 | ||
ef7471b1 IM |
37 | void (*vector_allocation_domain)(int cpu, struct cpumask *retmask); |
38 | void (*init_apic_ldr)(void); | |
39 | ||
40 | physid_mask_t (*ioapic_phys_id_map)(physid_mask_t map); | |
41 | ||
42 | void (*setup_apic_routing)(void); | |
43 | int (*multi_timer_check)(int apic, int irq); | |
44 | int (*apicid_to_node)(int logical_apicid); | |
45 | int (*cpu_to_logical_apicid)(int cpu); | |
46 | int (*cpu_present_to_apicid)(int mps_cpu); | |
47 | physid_mask_t (*apicid_to_cpu_present)(int phys_apicid); | |
48 | void (*setup_portio_remap)(void); | |
49 | int (*check_phys_apicid_present)(int boot_cpu_physical_apicid); | |
50 | void (*enable_apic_mode)(void); | |
d4c9a9f3 | 51 | int (*phys_pkg_id)(int cpuid_apic, int index_msb); |
ef7471b1 IM |
52 | |
53 | /* | |
54 | * When one of the next two hooks returns 1 the genapic | |
55 | * is switched to this. Essentially they are additional | |
56 | * probe functions: | |
57 | */ | |
5f836405 | 58 | int (*mps_oem_check)(struct mpc_table *mpc, char *oem, char *productid); |
ef7471b1 IM |
59 | |
60 | unsigned int (*get_apic_id)(unsigned long x); | |
61 | unsigned long (*set_apic_id)(unsigned int id); | |
62 | unsigned long apic_id_mask; | |
63 | ||
64 | unsigned int (*cpu_mask_to_apicid)(const struct cpumask *cpumask); | |
65 | unsigned int (*cpu_mask_to_apicid_and)(const struct cpumask *cpumask, | |
66 | const struct cpumask *andmask); | |
67 | ||
ef7471b1 IM |
68 | /* ipi */ |
69 | void (*send_IPI_mask)(const struct cpumask *mask, int vector); | |
70 | void (*send_IPI_mask_allbutself)(const struct cpumask *mask, | |
71 | int vector); | |
72 | void (*send_IPI_allbutself)(int vector); | |
73 | void (*send_IPI_all)(int vector); | |
74 | void (*send_IPI_self)(int vector); | |
6781d948 | 75 | |
ef7471b1 IM |
76 | /* wakeup_secondary_cpu */ |
77 | int (*wakeup_cpu)(int apicid, unsigned long start_eip); | |
78 | ||
79 | int trampoline_phys_low; | |
80 | int trampoline_phys_high; | |
505deeb1 | 81 | |
ef7471b1 IM |
82 | void (*wait_for_init_deassert)(atomic_t *deassert); |
83 | void (*smp_callin_clear_local_apic)(void); | |
84 | void (*store_NMI_vector)(unsigned short *high, unsigned short *low); | |
85 | void (*restore_NMI_vector)(unsigned short *high, unsigned short *low); | |
86 | void (*inquire_remote_apic)(int apicid); | |
87 | }; | |
88 | ||
c8d46cf0 | 89 | extern struct genapic *apic; |
ced733ec | 90 | |
505deeb1 | 91 | #ifdef CONFIG_X86_32 |
ced733ec | 92 | extern void es7000_update_genapic_to_cluster(void); |
9a6801da | 93 | #else |
ced733ec IM |
94 | extern struct genapic apic_flat; |
95 | extern struct genapic apic_physflat; | |
96 | extern struct genapic apic_x2apic_cluster; | |
97 | extern struct genapic apic_x2apic_phys; | |
306db03b | 98 | extern int default_acpi_madt_oem_check(char *, char *); |
ced733ec IM |
99 | |
100 | extern void apic_send_IPI_self(int vector); | |
101 | ||
102 | extern struct genapic apic_x2apic_uv_x; | |
103 | DECLARE_PER_CPU(int, x2apic_extra_bits); | |
104 | ||
72ce0165 | 105 | extern void default_setup_apic_routing(void); |
a21769a4 IM |
106 | |
107 | extern int default_cpu_present_to_apicid(int mps_cpu); | |
a27a6210 | 108 | extern int default_check_phys_apicid_present(int boot_cpu_physical_apicid); |
9a6801da | 109 | #endif |
ced733ec | 110 | |
ef7471b1 | 111 | #endif /* _ASM_X86_GENAPIC_64_H */ |