diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-04-18 11:25:51 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-04-18 11:25:51 -0400 |
commit | 9e9abecfc0ff3a9ad2ead954b37bbfcb863c775e (patch) | |
tree | 0c3ffda953b82750638a06507591ad587b565ff2 /include/asm-x86/mach-default | |
parent | d7bb545d86825e635cab33a1dd81ca0ad7b92887 (diff) | |
parent | 77ad386e596c6b0930cc2e09e3cce485e3ee7f72 (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/x86/linux-2.6-x86
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/x86/linux-2.6-x86: (613 commits)
x86: standalone trampoline code
x86: move suspend wakeup code to C
x86: coding style fixes to arch/x86/kernel/acpi/sleep.c
x86: setup_trampoline() - fix section mismatch warning
x86: section mismatch fixes, #1
x86: fix paranoia about using BIOS quickboot mechanism.
x86: print out buggy mptable
x86: use cpu_online()
x86: use cpumask_of_cpu()
x86: remove unnecessary tmp local variable
x86: remove unnecessary memset()
x86: use ioapic_read_entry() and ioapic_write_entry()
x86: avoid redundant loop in io_apic_level_ack_pending()
x86: remove superfluous initialisation in boot code.
x86: merge mpparse_{32,64}.c
x86: unify mp_register_gsi
x86: unify mp_config_acpi_legacy_irqs
x86: unify mp_register_ioapic
x86: unify uniq_io_apic_id
x86: unify smp_scan_config
...
Diffstat (limited to 'include/asm-x86/mach-default')
-rw-r--r-- | include/asm-x86/mach-default/bios_ebda.h | 15 | ||||
-rw-r--r-- | include/asm-x86/mach-default/mach_apic.h | 95 | ||||
-rw-r--r-- | include/asm-x86/mach-default/mach_apicdef.h | 9 | ||||
-rw-r--r-- | include/asm-x86/mach-default/mach_ipi.h | 10 | ||||
-rw-r--r-- | include/asm-x86/mach-default/mach_mpparse.h | 11 | ||||
-rw-r--r-- | include/asm-x86/mach-default/mach_reboot.h | 61 | ||||
-rw-r--r-- | include/asm-x86/mach-default/smpboot_hooks.h | 7 |
7 files changed, 77 insertions, 131 deletions
diff --git a/include/asm-x86/mach-default/bios_ebda.h b/include/asm-x86/mach-default/bios_ebda.h deleted file mode 100644 index 9cbd9a668af8..000000000000 --- a/include/asm-x86/mach-default/bios_ebda.h +++ /dev/null | |||
@@ -1,15 +0,0 @@ | |||
1 | #ifndef _MACH_BIOS_EBDA_H | ||
2 | #define _MACH_BIOS_EBDA_H | ||
3 | |||
4 | /* | ||
5 | * there is a real-mode segmented pointer pointing to the | ||
6 | * 4K EBDA area at 0x40E. | ||
7 | */ | ||
8 | static inline unsigned int get_bios_ebda(void) | ||
9 | { | ||
10 | unsigned int address = *(unsigned short *)phys_to_virt(0x40E); | ||
11 | address <<= 4; | ||
12 | return address; /* 0 means none */ | ||
13 | } | ||
14 | |||
15 | #endif /* _MACH_BIOS_EBDA_H */ | ||
diff --git a/include/asm-x86/mach-default/mach_apic.h b/include/asm-x86/mach-default/mach_apic.h index e3c2c1012c1c..0a6634f62abe 100644 --- a/include/asm-x86/mach-default/mach_apic.h +++ b/include/asm-x86/mach-default/mach_apic.h | |||
@@ -1,6 +1,8 @@ | |||
1 | #ifndef __ASM_MACH_APIC_H | 1 | #ifndef __ASM_MACH_APIC_H |
2 | #define __ASM_MACH_APIC_H | 2 | #define __ASM_MACH_APIC_H |
3 | 3 | ||
4 | #ifdef CONFIG_X86_LOCAL_APIC | ||
5 | |||
4 | #include <mach_apicdef.h> | 6 | #include <mach_apicdef.h> |
5 | #include <asm/smp.h> | 7 | #include <asm/smp.h> |
6 | 8 | ||
@@ -14,24 +16,25 @@ static inline cpumask_t target_cpus(void) | |||
14 | return cpumask_of_cpu(0); | 16 | return cpumask_of_cpu(0); |
15 | #endif | 17 | #endif |
16 | } | 18 | } |
17 | #define TARGET_CPUS (target_cpus()) | ||
18 | 19 | ||
19 | #define NO_BALANCE_IRQ (0) | 20 | #define NO_BALANCE_IRQ (0) |
20 | #define esr_disable (0) | 21 | #define esr_disable (0) |
21 | 22 | ||
23 | #ifdef CONFIG_X86_64 | ||
24 | #include <asm/genapic.h> | ||
25 | #define INT_DELIVERY_MODE (genapic->int_delivery_mode) | ||
26 | #define INT_DEST_MODE (genapic->int_dest_mode) | ||
27 | #define TARGET_CPUS (genapic->target_cpus()) | ||
28 | #define apic_id_registered (genapic->apic_id_registered) | ||
29 | #define init_apic_ldr (genapic->init_apic_ldr) | ||
30 | #define cpu_mask_to_apicid (genapic->cpu_mask_to_apicid) | ||
31 | #define phys_pkg_id (genapic->phys_pkg_id) | ||
32 | #define vector_allocation_domain (genapic->vector_allocation_domain) | ||
33 | extern void setup_apic_routing(void); | ||
34 | #else | ||
22 | #define INT_DELIVERY_MODE dest_LowestPrio | 35 | #define INT_DELIVERY_MODE dest_LowestPrio |
23 | #define INT_DEST_MODE 1 /* logical delivery broadcast to all procs */ | 36 | #define INT_DEST_MODE 1 /* logical delivery broadcast to all procs */ |
24 | 37 | #define TARGET_CPUS (target_cpus()) | |
25 | static inline unsigned long check_apicid_used(physid_mask_t bitmap, int apicid) | ||
26 | { | ||
27 | return physid_isset(apicid, bitmap); | ||
28 | } | ||
29 | |||
30 | static inline unsigned long check_apicid_present(int bit) | ||
31 | { | ||
32 | return physid_isset(bit, phys_cpu_present_map); | ||
33 | } | ||
34 | |||
35 | /* | 38 | /* |
36 | * Set up the logical destination ID. | 39 | * Set up the logical destination ID. |
37 | * | 40 | * |
@@ -49,23 +52,51 @@ static inline void init_apic_ldr(void) | |||
49 | apic_write_around(APIC_LDR, val); | 52 | apic_write_around(APIC_LDR, val); |
50 | } | 53 | } |
51 | 54 | ||
52 | static inline physid_mask_t ioapic_phys_id_map(physid_mask_t phys_map) | 55 | static inline int apic_id_registered(void) |
53 | { | 56 | { |
54 | return phys_map; | 57 | return physid_isset(GET_APIC_ID(read_apic_id()), phys_cpu_present_map); |
58 | } | ||
59 | |||
60 | static inline unsigned int cpu_mask_to_apicid(cpumask_t cpumask) | ||
61 | { | ||
62 | return cpus_addr(cpumask)[0]; | ||
63 | } | ||
64 | |||
65 | static inline u32 phys_pkg_id(u32 cpuid_apic, int index_msb) | ||
66 | { | ||
67 | return cpuid_apic >> index_msb; | ||
55 | } | 68 | } |
56 | 69 | ||
57 | static inline void setup_apic_routing(void) | 70 | static inline void setup_apic_routing(void) |
58 | { | 71 | { |
72 | #ifdef CONFIG_X86_IO_APIC | ||
59 | printk("Enabling APIC mode: %s. Using %d I/O APICs\n", | 73 | printk("Enabling APIC mode: %s. Using %d I/O APICs\n", |
60 | "Flat", nr_ioapics); | 74 | "Flat", nr_ioapics); |
75 | #endif | ||
61 | } | 76 | } |
62 | 77 | ||
63 | static inline int multi_timer_check(int apic, int irq) | 78 | static inline int apicid_to_node(int logical_apicid) |
64 | { | 79 | { |
65 | return 0; | 80 | return 0; |
66 | } | 81 | } |
82 | #endif | ||
67 | 83 | ||
68 | static inline int apicid_to_node(int logical_apicid) | 84 | static inline unsigned long check_apicid_used(physid_mask_t bitmap, int apicid) |
85 | { | ||
86 | return physid_isset(apicid, bitmap); | ||
87 | } | ||
88 | |||
89 | static inline unsigned long check_apicid_present(int bit) | ||
90 | { | ||
91 | return physid_isset(bit, phys_cpu_present_map); | ||
92 | } | ||
93 | |||
94 | static inline physid_mask_t ioapic_phys_id_map(physid_mask_t phys_map) | ||
95 | { | ||
96 | return phys_map; | ||
97 | } | ||
98 | |||
99 | static inline int multi_timer_check(int apic, int irq) | ||
69 | { | 100 | { |
70 | return 0; | 101 | return 0; |
71 | } | 102 | } |
@@ -78,8 +109,13 @@ static inline int cpu_to_logical_apicid(int cpu) | |||
78 | 109 | ||
79 | static inline int cpu_present_to_apicid(int mps_cpu) | 110 | static inline int cpu_present_to_apicid(int mps_cpu) |
80 | { | 111 | { |
112 | #ifdef CONFIG_X86_64 | ||
113 | if (cpu_present(mps_cpu)) | ||
114 | return (int)per_cpu(x86_bios_cpu_apicid, mps_cpu); | ||
115 | #else | ||
81 | if (mps_cpu < get_physical_broadcast()) | 116 | if (mps_cpu < get_physical_broadcast()) |
82 | return mps_cpu; | 117 | return mps_cpu; |
118 | #endif | ||
83 | else | 119 | else |
84 | return BAD_APICID; | 120 | return BAD_APICID; |
85 | } | 121 | } |
@@ -89,17 +125,6 @@ static inline physid_mask_t apicid_to_cpu_present(int phys_apicid) | |||
89 | return physid_mask_of_physid(phys_apicid); | 125 | return physid_mask_of_physid(phys_apicid); |
90 | } | 126 | } |
91 | 127 | ||
92 | static inline int mpc_apic_id(struct mpc_config_processor *m, | ||
93 | struct mpc_config_translation *translation_record) | ||
94 | { | ||
95 | printk("Processor #%d %u:%u APIC version %d\n", | ||
96 | m->mpc_apicid, | ||
97 | (m->mpc_cpufeature & CPU_FAMILY_MASK) >> 8, | ||
98 | (m->mpc_cpufeature & CPU_MODEL_MASK) >> 4, | ||
99 | m->mpc_apicver); | ||
100 | return m->mpc_apicid; | ||
101 | } | ||
102 | |||
103 | static inline void setup_portio_remap(void) | 128 | static inline void setup_portio_remap(void) |
104 | { | 129 | { |
105 | } | 130 | } |
@@ -109,23 +134,9 @@ static inline int check_phys_apicid_present(int boot_cpu_physical_apicid) | |||
109 | return physid_isset(boot_cpu_physical_apicid, phys_cpu_present_map); | 134 | return physid_isset(boot_cpu_physical_apicid, phys_cpu_present_map); |
110 | } | 135 | } |
111 | 136 | ||
112 | static inline int apic_id_registered(void) | ||
113 | { | ||
114 | return physid_isset(GET_APIC_ID(apic_read(APIC_ID)), phys_cpu_present_map); | ||
115 | } | ||
116 | |||
117 | static inline unsigned int cpu_mask_to_apicid(cpumask_t cpumask) | ||
118 | { | ||
119 | return cpus_addr(cpumask)[0]; | ||
120 | } | ||
121 | |||
122 | static inline void enable_apic_mode(void) | 137 | static inline void enable_apic_mode(void) |
123 | { | 138 | { |
124 | } | 139 | } |
125 | 140 | ||
126 | static inline u32 phys_pkg_id(u32 cpuid_apic, int index_msb) | 141 | #endif /* CONFIG_X86_LOCAL_APIC */ |
127 | { | ||
128 | return cpuid_apic >> index_msb; | ||
129 | } | ||
130 | |||
131 | #endif /* __ASM_MACH_APIC_H */ | 142 | #endif /* __ASM_MACH_APIC_H */ |
diff --git a/include/asm-x86/mach-default/mach_apicdef.h b/include/asm-x86/mach-default/mach_apicdef.h index ae9841319094..e4b29ba37de6 100644 --- a/include/asm-x86/mach-default/mach_apicdef.h +++ b/include/asm-x86/mach-default/mach_apicdef.h | |||
@@ -3,10 +3,14 @@ | |||
3 | 3 | ||
4 | #include <asm/apic.h> | 4 | #include <asm/apic.h> |
5 | 5 | ||
6 | #ifdef CONFIG_X86_64 | ||
7 | #define APIC_ID_MASK (0xFFu<<24) | ||
8 | #define GET_APIC_ID(x) (((x)>>24)&0xFFu) | ||
9 | #define SET_APIC_ID(x) (((x)<<24)) | ||
10 | #else | ||
6 | #define APIC_ID_MASK (0xF<<24) | 11 | #define APIC_ID_MASK (0xF<<24) |
7 | |||
8 | static inline unsigned get_apic_id(unsigned long x) | 12 | static inline unsigned get_apic_id(unsigned long x) |
9 | { | 13 | { |
10 | unsigned int ver = GET_APIC_VERSION(apic_read(APIC_LVR)); | 14 | unsigned int ver = GET_APIC_VERSION(apic_read(APIC_LVR)); |
11 | if (APIC_XAPIC(ver)) | 15 | if (APIC_XAPIC(ver)) |
12 | return (((x)>>24)&0xFF); | 16 | return (((x)>>24)&0xFF); |
@@ -15,5 +19,6 @@ static inline unsigned get_apic_id(unsigned long x) | |||
15 | } | 19 | } |
16 | 20 | ||
17 | #define GET_APIC_ID(x) get_apic_id(x) | 21 | #define GET_APIC_ID(x) get_apic_id(x) |
22 | #endif | ||
18 | 23 | ||
19 | #endif | 24 | #endif |
diff --git a/include/asm-x86/mach-default/mach_ipi.h b/include/asm-x86/mach-default/mach_ipi.h index 0dba244c86db..be323364e68f 100644 --- a/include/asm-x86/mach-default/mach_ipi.h +++ b/include/asm-x86/mach-default/mach_ipi.h | |||
@@ -9,10 +9,15 @@ void __send_IPI_shortcut(unsigned int shortcut, int vector); | |||
9 | 9 | ||
10 | extern int no_broadcast; | 10 | extern int no_broadcast; |
11 | 11 | ||
12 | #ifdef CONFIG_X86_64 | ||
13 | #include <asm/genapic.h> | ||
14 | #define send_IPI_mask (genapic->send_IPI_mask) | ||
15 | #else | ||
12 | static inline void send_IPI_mask(cpumask_t mask, int vector) | 16 | static inline void send_IPI_mask(cpumask_t mask, int vector) |
13 | { | 17 | { |
14 | send_IPI_mask_bitmask(mask, vector); | 18 | send_IPI_mask_bitmask(mask, vector); |
15 | } | 19 | } |
20 | #endif | ||
16 | 21 | ||
17 | static inline void __local_send_IPI_allbutself(int vector) | 22 | static inline void __local_send_IPI_allbutself(int vector) |
18 | { | 23 | { |
@@ -33,6 +38,10 @@ static inline void __local_send_IPI_all(int vector) | |||
33 | __send_IPI_shortcut(APIC_DEST_ALLINC, vector); | 38 | __send_IPI_shortcut(APIC_DEST_ALLINC, vector); |
34 | } | 39 | } |
35 | 40 | ||
41 | #ifdef CONFIG_X86_64 | ||
42 | #define send_IPI_allbutself (genapic->send_IPI_allbutself) | ||
43 | #define send_IPI_all (genapic->send_IPI_all) | ||
44 | #else | ||
36 | static inline void send_IPI_allbutself(int vector) | 45 | static inline void send_IPI_allbutself(int vector) |
37 | { | 46 | { |
38 | /* | 47 | /* |
@@ -50,5 +59,6 @@ static inline void send_IPI_all(int vector) | |||
50 | { | 59 | { |
51 | __local_send_IPI_all(vector); | 60 | __local_send_IPI_all(vector); |
52 | } | 61 | } |
62 | #endif | ||
53 | 63 | ||
54 | #endif /* __ASM_MACH_IPI_H */ | 64 | #endif /* __ASM_MACH_IPI_H */ |
diff --git a/include/asm-x86/mach-default/mach_mpparse.h b/include/asm-x86/mach-default/mach_mpparse.h index 1d3832482580..d14108505bb8 100644 --- a/include/asm-x86/mach-default/mach_mpparse.h +++ b/include/asm-x86/mach-default/mach_mpparse.h | |||
@@ -1,17 +1,6 @@ | |||
1 | #ifndef __ASM_MACH_MPPARSE_H | 1 | #ifndef __ASM_MACH_MPPARSE_H |
2 | #define __ASM_MACH_MPPARSE_H | 2 | #define __ASM_MACH_MPPARSE_H |
3 | 3 | ||
4 | static inline void mpc_oem_bus_info(struct mpc_config_bus *m, char *name, | ||
5 | struct mpc_config_translation *translation) | ||
6 | { | ||
7 | // Dprintk("Bus #%d is %s\n", m->mpc_busid, name); | ||
8 | } | ||
9 | |||
10 | static inline void mpc_oem_pci_bus(struct mpc_config_bus *m, | ||
11 | struct mpc_config_translation *translation) | ||
12 | { | ||
13 | } | ||
14 | |||
15 | static inline int mps_oem_check(struct mp_config_table *mpc, char *oem, | 4 | static inline int mps_oem_check(struct mp_config_table *mpc, char *oem, |
16 | char *productid) | 5 | char *productid) |
17 | { | 6 | { |
diff --git a/include/asm-x86/mach-default/mach_reboot.h b/include/asm-x86/mach-default/mach_reboot.h deleted file mode 100644 index 6adee6a97dec..000000000000 --- a/include/asm-x86/mach-default/mach_reboot.h +++ /dev/null | |||
@@ -1,61 +0,0 @@ | |||
1 | /* | ||
2 | * arch/i386/mach-generic/mach_reboot.h | ||
3 | * | ||
4 | * Machine specific reboot functions for generic. | ||
5 | * Split out from reboot.c by Osamu Tomita <tomita@cinet.co.jp> | ||
6 | */ | ||
7 | #ifndef _MACH_REBOOT_H | ||
8 | #define _MACH_REBOOT_H | ||
9 | |||
10 | static inline void kb_wait(void) | ||
11 | { | ||
12 | int i; | ||
13 | |||
14 | for (i = 0; i < 0x10000; i++) | ||
15 | if ((inb_p(0x64) & 0x02) == 0) | ||
16 | break; | ||
17 | } | ||
18 | |||
19 | static inline void mach_reboot(void) | ||
20 | { | ||
21 | int i; | ||
22 | |||
23 | /* old method, works on most machines */ | ||
24 | for (i = 0; i < 10; i++) { | ||
25 | kb_wait(); | ||
26 | udelay(50); | ||
27 | outb(0xfe, 0x64); /* pulse reset low */ | ||
28 | udelay(50); | ||
29 | } | ||
30 | |||
31 | /* New method: sets the "System flag" which, when set, indicates | ||
32 | * successful completion of the keyboard controller self-test (Basic | ||
33 | * Assurance Test, BAT). This is needed for some machines with no | ||
34 | * keyboard plugged in. This read-modify-write sequence sets only the | ||
35 | * system flag | ||
36 | */ | ||
37 | for (i = 0; i < 10; i++) { | ||
38 | int cmd; | ||
39 | |||
40 | outb(0x20, 0x64); /* read Controller Command Byte */ | ||
41 | udelay(50); | ||
42 | kb_wait(); | ||
43 | udelay(50); | ||
44 | cmd = inb(0x60); | ||
45 | udelay(50); | ||
46 | kb_wait(); | ||
47 | udelay(50); | ||
48 | outb(0x60, 0x64); /* write Controller Command Byte */ | ||
49 | udelay(50); | ||
50 | kb_wait(); | ||
51 | udelay(50); | ||
52 | outb(cmd | 0x14, 0x60); /* set "System flag" and "Keyboard Disabled" */ | ||
53 | udelay(50); | ||
54 | kb_wait(); | ||
55 | udelay(50); | ||
56 | outb(0xfe, 0x64); /* pulse reset low */ | ||
57 | udelay(50); | ||
58 | } | ||
59 | } | ||
60 | |||
61 | #endif /* !_MACH_REBOOT_H */ | ||
diff --git a/include/asm-x86/mach-default/smpboot_hooks.h b/include/asm-x86/mach-default/smpboot_hooks.h index 7f45f6311059..3ff2c5bff93a 100644 --- a/include/asm-x86/mach-default/smpboot_hooks.h +++ b/include/asm-x86/mach-default/smpboot_hooks.h | |||
@@ -41,4 +41,11 @@ static inline void smpboot_setup_io_apic(void) | |||
41 | */ | 41 | */ |
42 | if (!skip_ioapic_setup && nr_ioapics) | 42 | if (!skip_ioapic_setup && nr_ioapics) |
43 | setup_IO_APIC(); | 43 | setup_IO_APIC(); |
44 | else | ||
45 | nr_ioapics = 0; | ||
46 | } | ||
47 | |||
48 | static inline void smpboot_clear_io_apic(void) | ||
49 | { | ||
50 | nr_ioapics = 0; | ||
44 | } | 51 | } |