aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-x86/apic.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/asm-x86/apic.h')
-rw-r--r--include/asm-x86/apic.h42
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
38extern int apic_verbosity; 38extern unsigned int apic_verbosity;
39extern int timer_over_8254;
40extern int local_apic_timer_c2_ok; 39extern int local_apic_timer_c2_ok;
41extern int local_apic_timer_disabled;
42 40
43extern int apic_runs_main_timer;
44extern int ioapic_force; 41extern int ioapic_force;
45extern int disable_apic;
46extern int disable_apic_timer;
47 42
43extern 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
63static inline void native_apic_write(unsigned long reg, u32 v) 58static 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
68static 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
73static inline u32 native_apic_read(unsigned long reg) 67static inline u32 native_apic_read(unsigned long reg)
@@ -79,16 +73,6 @@ extern void apic_wait_icr_idle(void);
79extern u32 safe_apic_wait_icr_idle(void); 73extern u32 safe_apic_wait_icr_idle(void);
80extern int get_physical_broadcast(void); 74extern 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
92static inline void ack_APIC_irq(void) 76static 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
105extern int lapic_get_maxlvt(void); 89extern 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
127extern void early_init_lapic_mapping(void); 111extern void early_init_lapic_mapping(void);
112extern int apic_is_clustered_box(void);
113#else
114static inline int apic_is_clustered_box(void)
115{
116 return 0;
117}
128#endif 118#endif
129 119
130extern u8 setup_APIC_eilvt_mce(u8 vector, u8 msg_type, u8 mask); 120extern u8 setup_APIC_eilvt_mce(u8 vector, u8 msg_type, u8 mask);
131extern u8 setup_APIC_eilvt_ibs(u8 vector, u8 msg_type, u8 mask); 121extern u8 setup_APIC_eilvt_ibs(u8 vector, u8 msg_type, u8 mask);
132 122
133extern int apic_is_clustered_box(void);
134 123
135#else /* !CONFIG_X86_LOCAL_APIC */ 124#else /* !CONFIG_X86_LOCAL_APIC */
136static inline void lapic_shutdown(void) { } 125static inline void lapic_shutdown(void) { }
137#define local_apic_timer_c2_ok 1 126#define local_apic_timer_c2_ok 1
127static inline void init_apic_mappings(void) { }
138 128
139#endif /* !CONFIG_X86_LOCAL_APIC */ 129#endif /* !CONFIG_X86_LOCAL_APIC */
140 130