Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v2.6.15 120 lines 3.0 kB view raw
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 Dprintk(x...) 11 12/* 13 * Debugging macros 14 */ 15#define APIC_QUIET 0 16#define APIC_VERBOSE 1 17#define APIC_DEBUG 2 18 19extern int apic_verbosity; 20 21/* 22 * Define the default level of output to be very little 23 * This can be turned up by using apic=verbose for more 24 * information and apic=debug for _lots_ of information. 25 * apic_verbosity is defined in apic.c 26 */ 27#define apic_printk(v, s, a...) do { \ 28 if ((v) <= apic_verbosity) \ 29 printk(s, ##a); \ 30 } while (0) 31 32#ifdef CONFIG_X86_LOCAL_APIC 33 34struct pt_regs; 35 36/* 37 * Basic functions accessing APICs. 38 */ 39 40static __inline void apic_write(unsigned long reg, unsigned int v) 41{ 42 *((volatile unsigned int *)(APIC_BASE+reg)) = v; 43} 44 45static __inline void apic_write_atomic(unsigned long reg, unsigned int v) 46{ 47 xchg((volatile unsigned int *)(APIC_BASE+reg), v); 48} 49 50static __inline unsigned int apic_read(unsigned long reg) 51{ 52 return *((volatile unsigned int *)(APIC_BASE+reg)); 53} 54 55static __inline__ void apic_wait_icr_idle(void) 56{ 57 while ( apic_read( APIC_ICR ) & APIC_ICR_BUSY ); 58} 59 60#define FORCE_READ_AROUND_WRITE 0 61#define apic_read_around(x) 62#define apic_write_around(x,y) apic_write((x),(y)) 63 64static inline void ack_APIC_irq(void) 65{ 66 /* 67 * ack_APIC_irq() actually gets compiled as a single instruction: 68 * - a single rmw on Pentium/82489DX 69 * - a single write on P6+ cores (CONFIG_X86_GOOD_APIC) 70 * ... yummie. 71 */ 72 73 /* Docs say use 0 for future compatibility */ 74 apic_write_around(APIC_EOI, 0); 75} 76 77extern int get_maxlvt (void); 78extern void clear_local_APIC (void); 79extern void connect_bsp_APIC (void); 80extern void disconnect_bsp_APIC (int virt_wire_setup); 81extern void disable_local_APIC (void); 82extern int verify_local_APIC (void); 83extern void cache_APIC_registers (void); 84extern void sync_Arb_IDs (void); 85extern void init_bsp_APIC (void); 86extern void setup_local_APIC (void); 87extern void init_apic_mappings (void); 88extern void smp_local_timer_interrupt (struct pt_regs * regs); 89extern void setup_boot_APIC_clock (void); 90extern void setup_secondary_APIC_clock (void); 91extern void setup_apic_nmi_watchdog (void); 92extern int reserve_lapic_nmi(void); 93extern void release_lapic_nmi(void); 94extern void disable_timer_nmi_watchdog(void); 95extern void enable_timer_nmi_watchdog(void); 96extern void nmi_watchdog_tick (struct pt_regs * regs, unsigned reason); 97extern int APIC_init_uniprocessor (void); 98extern void disable_APIC_timer(void); 99extern void enable_APIC_timer(void); 100extern void clustered_apic_check(void); 101 102extern void nmi_watchdog_default(void); 103extern int setup_nmi_watchdog(char *); 104 105extern unsigned int nmi_watchdog; 106#define NMI_DEFAULT -1 107#define NMI_NONE 0 108#define NMI_IO_APIC 1 109#define NMI_LOCAL_APIC 2 110#define NMI_INVALID 3 111 112extern int disable_timer_pin_1; 113 114extern void setup_threshold_lvt(unsigned long lvt_off); 115 116#endif /* CONFIG_X86_LOCAL_APIC */ 117 118extern unsigned boot_cpu_id; 119 120#endif /* __ASM_APIC_H */