diff options
author | Ingo Molnar <mingo@elte.hu> | 2009-02-17 14:35:16 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-02-17 14:35:47 -0500 |
commit | 2a05180fe2e5b414f0cb2ccfc80e6c90563e3c67 (patch) | |
tree | 5c14afab81ee44b44ec7ff7faf08fee2c165bf50 /arch/x86/kernel/apic/probe_64.c | |
parent | f62bae5009c1ba596cd475cafbc83e0570a36e26 (diff) |
x86, apic: move remaining APIC drivers to arch/x86/kernel/apic/*
Move the 32-bit extended-arch APIC drivers to arch/x86/kernel/apic/
too, and rename apic_64.c to probe_64.c.
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/kernel/apic/probe_64.c')
-rw-r--r-- | arch/x86/kernel/apic/probe_64.c | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/arch/x86/kernel/apic/probe_64.c b/arch/x86/kernel/apic/probe_64.c new file mode 100644 index 000000000000..70935dd904db --- /dev/null +++ b/arch/x86/kernel/apic/probe_64.c | |||
@@ -0,0 +1,89 @@ | |||
1 | /* | ||
2 | * Copyright 2004 James Cleverdon, IBM. | ||
3 | * Subject to the GNU Public License, v.2 | ||
4 | * | ||
5 | * Generic APIC sub-arch probe layer. | ||
6 | * | ||
7 | * Hacked for x86-64 by James Cleverdon from i386 architecture code by | ||
8 | * Martin Bligh, Andi Kleen, James Bottomley, John Stultz, and | ||
9 | * James Cleverdon. | ||
10 | */ | ||
11 | #include <linux/threads.h> | ||
12 | #include <linux/cpumask.h> | ||
13 | #include <linux/string.h> | ||
14 | #include <linux/module.h> | ||
15 | #include <linux/kernel.h> | ||
16 | #include <linux/ctype.h> | ||
17 | #include <linux/init.h> | ||
18 | #include <linux/hardirq.h> | ||
19 | #include <linux/dmar.h> | ||
20 | |||
21 | #include <asm/smp.h> | ||
22 | #include <asm/apic.h> | ||
23 | #include <asm/ipi.h> | ||
24 | #include <asm/setup.h> | ||
25 | |||
26 | extern struct apic apic_flat; | ||
27 | extern struct apic apic_physflat; | ||
28 | extern struct apic apic_x2xpic_uv_x; | ||
29 | extern struct apic apic_x2apic_phys; | ||
30 | extern struct apic apic_x2apic_cluster; | ||
31 | |||
32 | struct apic __read_mostly *apic = &apic_flat; | ||
33 | EXPORT_SYMBOL_GPL(apic); | ||
34 | |||
35 | static struct apic *apic_probe[] __initdata = { | ||
36 | #ifdef CONFIG_X86_UV | ||
37 | &apic_x2apic_uv_x, | ||
38 | #endif | ||
39 | #ifdef CONFIG_X86_X2APIC | ||
40 | &apic_x2apic_phys, | ||
41 | &apic_x2apic_cluster, | ||
42 | #endif | ||
43 | &apic_physflat, | ||
44 | NULL, | ||
45 | }; | ||
46 | |||
47 | /* | ||
48 | * Check the APIC IDs in bios_cpu_apicid and choose the APIC mode. | ||
49 | */ | ||
50 | void __init default_setup_apic_routing(void) | ||
51 | { | ||
52 | #ifdef CONFIG_X86_X2APIC | ||
53 | if (apic == &apic_x2apic_phys || apic == &apic_x2apic_cluster) { | ||
54 | if (!intr_remapping_enabled) | ||
55 | apic = &apic_flat; | ||
56 | } | ||
57 | #endif | ||
58 | |||
59 | if (apic == &apic_flat) { | ||
60 | if (max_physical_apicid >= 8) | ||
61 | apic = &apic_physflat; | ||
62 | printk(KERN_INFO "Setting APIC routing to %s\n", apic->name); | ||
63 | } | ||
64 | |||
65 | if (x86_quirks->update_apic) | ||
66 | x86_quirks->update_apic(); | ||
67 | } | ||
68 | |||
69 | /* Same for both flat and physical. */ | ||
70 | |||
71 | void apic_send_IPI_self(int vector) | ||
72 | { | ||
73 | __default_send_IPI_shortcut(APIC_DEST_SELF, vector, APIC_DEST_PHYSICAL); | ||
74 | } | ||
75 | |||
76 | int __init default_acpi_madt_oem_check(char *oem_id, char *oem_table_id) | ||
77 | { | ||
78 | int i; | ||
79 | |||
80 | for (i = 0; apic_probe[i]; ++i) { | ||
81 | if (apic_probe[i]->acpi_madt_oem_check(oem_id, oem_table_id)) { | ||
82 | apic = apic_probe[i]; | ||
83 | printk(KERN_INFO "Setting APIC routing to %s.\n", | ||
84 | apic->name); | ||
85 | return 1; | ||
86 | } | ||
87 | } | ||
88 | return 0; | ||
89 | } | ||