diff options
Diffstat (limited to 'include/asm-x86/apic.h')
-rw-r--r-- | include/asm-x86/apic.h | 42 |
1 files changed, 16 insertions, 26 deletions
diff --git a/include/asm-x86/apic.h b/include/asm-x86/apic.h index be9639a9a186..133c998161ca 100644 --- a/include/asm-x86/apic.h +++ b/include/asm-x86/apic.h | |||
@@ -3,6 +3,8 @@ | |||
3 | 3 | ||
4 | #include <linux/pm.h> | 4 | #include <linux/pm.h> |
5 | #include <linux/delay.h> | 5 | #include <linux/delay.h> |
6 | |||
7 | #include <asm/alternative.h> | ||
6 | #include <asm/fixmap.h> | 8 | #include <asm/fixmap.h> |
7 | #include <asm/apicdef.h> | 9 | #include <asm/apicdef.h> |
8 | #include <asm/processor.h> | 10 | #include <asm/processor.h> |
@@ -10,8 +12,6 @@ | |||
10 | 12 | ||
11 | #define ARCH_APICTIMER_STOPS_ON_C3 1 | 13 | #define ARCH_APICTIMER_STOPS_ON_C3 1 |
12 | 14 | ||
13 | #define Dprintk(x...) | ||
14 | |||
15 | /* | 15 | /* |
16 | * Debugging macros | 16 | * Debugging macros |
17 | */ | 17 | */ |
@@ -35,16 +35,12 @@ extern void generic_apic_probe(void); | |||
35 | 35 | ||
36 | #ifdef CONFIG_X86_LOCAL_APIC | 36 | #ifdef CONFIG_X86_LOCAL_APIC |
37 | 37 | ||
38 | extern int apic_verbosity; | 38 | extern unsigned int apic_verbosity; |
39 | extern int timer_over_8254; | ||
40 | extern int local_apic_timer_c2_ok; | 39 | extern int local_apic_timer_c2_ok; |
41 | extern int local_apic_timer_disabled; | ||
42 | 40 | ||
43 | extern int apic_runs_main_timer; | ||
44 | extern int ioapic_force; | 41 | extern int ioapic_force; |
45 | extern int disable_apic; | ||
46 | extern int disable_apic_timer; | ||
47 | 42 | ||
43 | extern int disable_apic; | ||
48 | /* | 44 | /* |
49 | * Basic functions accessing APICs. | 45 | * Basic functions accessing APICs. |
50 | */ | 46 | */ |
@@ -52,7 +48,6 @@ extern int disable_apic_timer; | |||
52 | #include <asm/paravirt.h> | 48 | #include <asm/paravirt.h> |
53 | #else | 49 | #else |
54 | #define apic_write native_apic_write | 50 | #define apic_write native_apic_write |
55 | #define apic_write_atomic native_apic_write_atomic | ||
56 | #define apic_read native_apic_read | 51 | #define apic_read native_apic_read |
57 | #define setup_boot_clock setup_boot_APIC_clock | 52 | #define setup_boot_clock setup_boot_APIC_clock |
58 | #define setup_secondary_clock setup_secondary_APIC_clock | 53 | #define setup_secondary_clock setup_secondary_APIC_clock |
@@ -62,12 +57,11 @@ extern int is_vsmp_box(void); | |||
62 | 57 | ||
63 | static inline void native_apic_write(unsigned long reg, u32 v) | 58 | static inline void native_apic_write(unsigned long reg, u32 v) |
64 | { | 59 | { |
65 | *((volatile u32 *)(APIC_BASE + reg)) = v; | 60 | volatile u32 *addr = (volatile u32 *)(APIC_BASE + reg); |
66 | } | ||
67 | 61 | ||
68 | static inline void native_apic_write_atomic(unsigned long reg, u32 v) | 62 | alternative_io("movl %0, %1", "xchgl %0, %1", X86_FEATURE_11AP, |
69 | { | 63 | ASM_OUTPUT2("=r" (v), "=m" (*addr)), |
70 | (void)xchg((u32 *)(APIC_BASE + reg), v); | 64 | ASM_OUTPUT2("0" (v), "m" (*addr))); |
71 | } | 65 | } |
72 | 66 | ||
73 | static inline u32 native_apic_read(unsigned long reg) | 67 | static inline u32 native_apic_read(unsigned long reg) |
@@ -79,16 +73,6 @@ extern void apic_wait_icr_idle(void); | |||
79 | extern u32 safe_apic_wait_icr_idle(void); | 73 | extern u32 safe_apic_wait_icr_idle(void); |
80 | extern int get_physical_broadcast(void); | 74 | extern int get_physical_broadcast(void); |
81 | 75 | ||
82 | #ifdef CONFIG_X86_GOOD_APIC | ||
83 | # define FORCE_READ_AROUND_WRITE 0 | ||
84 | # define apic_read_around(x) | ||
85 | # define apic_write_around(x, y) apic_write((x), (y)) | ||
86 | #else | ||
87 | # define FORCE_READ_AROUND_WRITE 1 | ||
88 | # define apic_read_around(x) apic_read(x) | ||
89 | # define apic_write_around(x, y) apic_write_atomic((x), (y)) | ||
90 | #endif | ||
91 | |||
92 | static inline void ack_APIC_irq(void) | 76 | static inline void ack_APIC_irq(void) |
93 | { | 77 | { |
94 | /* | 78 | /* |
@@ -99,7 +83,7 @@ static inline void ack_APIC_irq(void) | |||
99 | */ | 83 | */ |
100 | 84 | ||
101 | /* Docs say use 0 for future compatibility */ | 85 | /* Docs say use 0 for future compatibility */ |
102 | apic_write_around(APIC_EOI, 0); | 86 | apic_write(APIC_EOI, 0); |
103 | } | 87 | } |
104 | 88 | ||
105 | extern int lapic_get_maxlvt(void); | 89 | extern int lapic_get_maxlvt(void); |
@@ -125,16 +109,22 @@ extern void enable_NMI_through_LVT0(void); | |||
125 | */ | 109 | */ |
126 | #ifdef CONFIG_X86_64 | 110 | #ifdef CONFIG_X86_64 |
127 | extern void early_init_lapic_mapping(void); | 111 | extern void early_init_lapic_mapping(void); |
112 | extern int apic_is_clustered_box(void); | ||
113 | #else | ||
114 | static inline int apic_is_clustered_box(void) | ||
115 | { | ||
116 | return 0; | ||
117 | } | ||
128 | #endif | 118 | #endif |
129 | 119 | ||
130 | extern u8 setup_APIC_eilvt_mce(u8 vector, u8 msg_type, u8 mask); | 120 | extern u8 setup_APIC_eilvt_mce(u8 vector, u8 msg_type, u8 mask); |
131 | extern u8 setup_APIC_eilvt_ibs(u8 vector, u8 msg_type, u8 mask); | 121 | extern u8 setup_APIC_eilvt_ibs(u8 vector, u8 msg_type, u8 mask); |
132 | 122 | ||
133 | extern int apic_is_clustered_box(void); | ||
134 | 123 | ||
135 | #else /* !CONFIG_X86_LOCAL_APIC */ | 124 | #else /* !CONFIG_X86_LOCAL_APIC */ |
136 | static inline void lapic_shutdown(void) { } | 125 | static inline void lapic_shutdown(void) { } |
137 | #define local_apic_timer_c2_ok 1 | 126 | #define local_apic_timer_c2_ok 1 |
127 | static inline void init_apic_mappings(void) { } | ||
138 | 128 | ||
139 | #endif /* !CONFIG_X86_LOCAL_APIC */ | 129 | #endif /* !CONFIG_X86_LOCAL_APIC */ |
140 | 130 | ||