1 #ifndef _ASM_X86_APIC_H
2 #define _ASM_X86_APIC_H
8 #include <asm/cpufeature.h>
9 #include <asm/processor.h>
12 #include <asm/fixmap.h>
16 #define ARCH_APICTIMER_STOPS_ON_C3 1
22 #define APIC_VERBOSE 1
31 #define apic_printk(v, s, a...) do { \
32 if ((v) <= apic_verbosity) \
37 #if defined(CONFIG_X86_LOCAL_APIC) && defined(CONFIG_X86_32)
45 #ifdef CONFIG_X86_LOCAL_APIC
61 static inline void default_inquire_remote_apic(
int apicid)
75 static inline bool apic_from_smp_config(
void)
83 #ifdef CONFIG_PARAVIRT
84 #include <asm/paravirt.h>
95 extern void xapic_wait_icr_idle(
void);
96 extern u32 safe_xapic_wait_icr_idle(
void);
97 extern void xapic_icr_write(
u32,
u32);
100 static inline void native_apic_mem_write(
u32 reg,
u32 v)
109 static inline u32 native_apic_mem_read(
u32 reg)
121 #ifdef CONFIG_X86_X2APIC
127 static inline void x2apic_wrmsr_fence(
void)
129 asm volatile(
"mfence" : : :
"memory");
132 static inline void native_apic_msr_write(
u32 reg,
u32 v)
141 static inline void native_apic_msr_eoi_write(
u32 reg,
u32 v)
146 static inline u32 native_apic_msr_read(
u32 reg)
157 static inline void native_x2apic_wait_icr_idle(
void)
163 static inline u32 native_safe_x2apic_wait_icr_idle(
void)
169 static inline void native_x2apic_icr_write(
u32 low,
u32 id)
174 static inline u64 native_x2apic_icr_read(
void)
183 extern int x2apic_preenabled;
184 extern void check_x2apic(
void);
185 extern void enable_x2apic(
void);
186 extern void x2apic_icr_write(
u32 low,
u32 id);
187 static inline int x2apic_enabled(
void)
200 #define x2apic_supported() (cpu_has_x2apic)
201 static inline void x2apic_force_phys(
void)
206 static inline void disable_x2apic(
void)
209 static inline void check_x2apic(
void)
212 static inline void enable_x2apic(
void)
215 static inline int x2apic_enabled(
void)
219 static inline void x2apic_force_phys(
void)
224 #define x2apic_preenabled 0
225 #define x2apic_supported() 0
230 extern int get_physical_broadcast(
void);
255 extern int apic_is_clustered_box(
void);
257 static inline int apic_is_clustered_box(
void)
267 #define local_apic_timer_c2_ok 1
270 # define setup_boot_APIC_clock x86_init_noop
271 # define setup_secondary_APIC_clock x86_init_noop
275 #define SET_APIC_ID(x) (apic->set_apic_id(x))
384 int (*x86_32_early_logical_apicid)(
int cpu);
392 int (*x86_32_numa_cpu_node)(
int cpu);
411 #define apic_driver(sym) \
412 static const struct apic *__apicdrivers_##sym __used \
413 __aligned(sizeof(struct apic *)) \
414 __section(.apicdrivers) = { &sym }
416 #define apic_drivers(sym1, sym2) \
417 static struct apic *__apicdrivers_##sym1##sym2[2] __used \
418 __aligned(sizeof(struct apic *)) \
419 __section(.apicdrivers) = { &sym1, &sym2 }
431 #ifdef CONFIG_X86_LOCAL_APIC
433 static inline u32 apic_read(
u32 reg)
435 return apic->
read(reg);
438 static inline void apic_write(
u32 reg,
u32 val)
440 apic->
write(reg, val);
443 static inline void apic_eoi(
void)
448 static inline u64 apic_icr_read(
void)
453 static inline void apic_icr_write(
u32 low,
u32 high)
458 static inline void apic_wait_icr_idle(
void)
463 static inline u32 safe_apic_wait_icr_idle(
void)
472 static inline u32 apic_read(
u32 reg) {
return 0; }
473 static inline void apic_write(
u32 reg,
u32 val) { }
474 static inline void apic_eoi(
void) { }
475 static inline u64 apic_icr_read(
void) {
return 0; }
476 static inline void apic_icr_write(
u32 low,
u32 high) { }
477 static inline void apic_wait_icr_idle(
void) { }
478 static inline u32 safe_apic_wait_icr_idle(
void) {
return 0; }
483 static inline void ack_APIC_irq(
void)
492 static inline unsigned default_get_apic_id(
unsigned long x)
497 return (x >> 24) & 0xFF;
499 return (x >> 24) & 0x0F;
505 #define DEFAULT_TRAMPOLINE_PHYS_LOW 0x467
506 #define DEFAULT_TRAMPOLINE_PHYS_HIGH 0x469
515 extern int default_cpu_present_to_apicid(
int mps_cpu);
516 extern int default_check_phys_apicid_present(
int phys_apicid);
519 static inline void default_wait_for_init_deassert(
atomic_t *deassert)
529 #ifdef CONFIG_X86_LOCAL_APIC
533 #define APIC_DFR_VALUE (APIC_DFR_FLAT)
535 static inline const struct cpumask *default_target_cpus(
void)
544 static inline const struct cpumask *online_target_cpus(
void)
552 static inline unsigned int read_apic_id(
void)
561 static inline int default_apic_id_valid(
int apicid)
563 return (apicid < 255);
572 static inline int noop_x86_32_early_logical_apicid(
int cpu)
586 static inline int default_apic_id_registered(
void)
591 static inline int default_phys_pkg_id(
int cpuid_apic,
int index_msb)
593 return cpuid_apic >> index_msb;
600 const struct cpumask *andmask,
601 unsigned int *apicid)
609 *apicid = (
unsigned int)cpu_mask;
618 const struct cpumask *andmask,
619 unsigned int *apicid);
622 flat_vector_allocation_domain(
int cpu,
struct cpumask *retmask,
623 const struct cpumask *
mask)
633 cpumask_clear(retmask);
638 default_vector_allocation_domain(
int cpu,
struct cpumask *retmask,
639 const struct cpumask *
mask)
644 static inline unsigned long default_check_apicid_used(
physid_mask_t *
map,
int apicid)
649 static inline unsigned long default_check_apicid_present(
int bit)
659 static inline int __default_cpu_present_to_apicid(
int mps_cpu)
662 return (
int)
per_cpu(x86_bios_cpu_apicid, mps_cpu);
668 __default_check_phys_apicid_present(
int phys_apicid)
674 static inline int default_cpu_present_to_apicid(
int mps_cpu)
676 return __default_cpu_present_to_apicid(mps_cpu);
680 default_check_phys_apicid_present(
int phys_apicid)
682 return __default_check_phys_apicid_present(phys_apicid);
685 extern int default_cpu_present_to_apicid(
int mps_cpu);
686 extern int default_check_phys_apicid_present(
int phys_apicid);