1#ifndef __ASM_APIC_H 2#define __ASM_APIC_H 3 4#include <linux/config.h> 5#include <linux/pm.h> 6#include <asm/fixmap.h> 7#include <asm/apicdef.h> 8#include <asm/system.h> 9 10#define APIC_DEBUG 0 11 12#if APIC_DEBUG 13#define Dprintk(x...) printk(x) 14#else 15#define Dprintk(x...) 16#endif 17 18#ifdef CONFIG_X86_LOCAL_APIC 19 20/* 21 * Basic functions accessing APICs. 22 */ 23 24static __inline void apic_write(unsigned long reg, unsigned long v) 25{ 26 *((volatile unsigned long *)(APIC_BASE+reg)) = v; 27} 28 29static __inline void apic_write_atomic(unsigned long reg, unsigned long v) 30{ 31 xchg((volatile unsigned long *)(APIC_BASE+reg), v); 32} 33 34static __inline unsigned long apic_read(unsigned long reg) 35{ 36 return *((volatile unsigned long *)(APIC_BASE+reg)); 37} 38 39static __inline__ void apic_wait_icr_idle(void) 40{ 41 do { } while ( apic_read( APIC_ICR ) & APIC_ICR_BUSY ); 42} 43 44int get_physical_broadcast(void); 45 46#ifdef CONFIG_X86_GOOD_APIC 47# define FORCE_READ_AROUND_WRITE 0 48# define apic_read_around(x) 49# define apic_write_around(x,y) apic_write((x),(y)) 50#else 51# define FORCE_READ_AROUND_WRITE 1 52# define apic_read_around(x) apic_read(x) 53# define apic_write_around(x,y) apic_write_atomic((x),(y)) 54#endif 55 56static inline void ack_APIC_irq(void) 57{ 58 /* 59 * ack_APIC_irq() actually gets compiled as a single instruction: 60 * - a single rmw on Pentium/82489DX 61 * - a single write on P6+ cores (CONFIG_X86_GOOD_APIC) 62 * ... yummie. 63 */ 64 65 /* Docs say use 0 for future compatibility */ 66 apic_write_around(APIC_EOI, 0); 67} 68 69extern void (*wait_timer_tick)(void); 70 71extern int get_maxlvt(void); 72extern void clear_local_APIC(void); 73extern void connect_bsp_APIC (void); 74extern void disconnect_bsp_APIC (void); 75extern void disable_local_APIC (void); 76extern int verify_local_APIC (void); 77extern void cache_APIC_registers (void); 78extern void sync_Arb_IDs (void); 79extern void init_bsp_APIC (void); 80extern void setup_local_APIC (void); 81extern void init_apic_mappings (void); 82extern void smp_local_timer_interrupt (struct pt_regs * regs); 83extern void setup_boot_APIC_clock (void); 84extern void setup_secondary_APIC_clock (void); 85extern void setup_apic_nmi_watchdog (void); 86extern int reserve_lapic_nmi(void); 87extern void release_lapic_nmi(void); 88extern void disable_timer_nmi_watchdog(void); 89extern void enable_timer_nmi_watchdog(void); 90extern void nmi_watchdog_tick (struct pt_regs * regs); 91extern int APIC_init_uniprocessor (void); 92extern void disable_APIC_timer(void); 93extern void enable_APIC_timer(void); 94 95extern int check_nmi_watchdog (void); 96extern void enable_NMI_through_LVT0 (void * dummy); 97 98extern unsigned int nmi_watchdog; 99#define NMI_NONE 0 100#define NMI_IO_APIC 1 101#define NMI_LOCAL_APIC 2 102#define NMI_INVALID 3 103 104#endif /* CONFIG_X86_LOCAL_APIC */ 105 106#endif /* __ASM_APIC_H */ 107

