4 #include <linux/config.h>
5 #include <asm/apicdef.h>
6 #include <asm/system.h>
10 #ifdef CONFIG_X86_LOCAL_APIC
13 #define Dprintk(x...) printk(x)
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))
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))
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)
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);