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