- David Miller: sparc and net updates. Fix merge_segments.
[davej-history.git] / include / asm-i386 / apic.h
blobabb627a4128056c57c3abf385effa04477d116c6
1 #ifndef __ASM_APIC_H
2 #define __ASM_APIC_H
4 #include <linux/config.h>
5 #include <asm/apicdef.h>
6 #include <asm/system.h>
8 #define APIC_DEBUG 1
10 #ifdef CONFIG_X86_LOCAL_APIC
12 #if APIC_DEBUG
13 #define Dprintk(x...) printk(x)
14 #else
15 #define Dprintk(x...)
16 #endif
19 * Basic functions accessing APICs.
22 extern __inline void apic_write(unsigned long reg, unsigned long v)
24 *((volatile unsigned long *)(APIC_BASE+reg)) = v;
27 extern __inline void apic_write_atomic(unsigned long reg, unsigned long v)
29 xchg((volatile unsigned long *)(APIC_BASE+reg), v);
32 extern __inline unsigned long apic_read(unsigned long reg)
34 return *((volatile unsigned long *)(APIC_BASE+reg));
37 static __inline__ void apic_wait_icr_idle(void)
39 do { } while ( apic_read( APIC_ICR ) & APIC_ICR_BUSY );
42 extern unsigned int apic_timer_irqs [NR_CPUS];
44 #ifdef CONFIG_X86_GOOD_APIC
45 # define FORCE_READ_AROUND_WRITE 0
46 # define apic_read_around(x)
47 # define apic_write_around(x,y) apic_write((x),(y))
48 #else
49 # define FORCE_READ_AROUND_WRITE 1
50 # define apic_read_around(x) apic_read(x)
51 # define apic_write_around(x,y) apic_write_atomic((x),(y))
52 #endif
54 extern inline void ack_APIC_irq(void)
57 * ack_APIC_irq() actually gets compiled as a single instruction:
58 * - a single rmw on Pentium/82489DX
59 * - a single write on P6+ cores (CONFIG_X86_GOOD_APIC)
60 * ... yummie.
63 /* Docs say use 0 for future compatibility */
64 apic_write_around(APIC_EOI, 0);
67 extern int get_maxlvt(void);
68 extern void connect_bsp_APIC (void);
69 extern void disconnect_bsp_APIC (void);
70 extern void disable_local_APIC (void);
71 extern int verify_local_APIC (void);
72 extern void cache_APIC_registers (void);
73 extern void sync_Arb_IDs(void);
74 extern void setup_local_APIC (void);
75 extern void init_apic_mappings(void);
76 extern void smp_local_timer_interrupt(struct pt_regs * regs);
77 extern void setup_APIC_clocks(void);
78 #endif
80 #endif