i82093reg.h revision 1.2 1 1.2 fvdl /* $NetBSD: i82093reg.h,v 1.2 2003/05/04 23:46:41 fvdl Exp $ */
2 1.1 fvdl
3 1.1 fvdl #include <x86/i82093reg.h>
4 1.1 fvdl
5 1.2 fvdl #ifdef _KERNEL
6 1.2 fvdl
7 1.2 fvdl #if defined(_KERNEL_OPT)
8 1.2 fvdl #include "opt_multiprocessor.h"
9 1.2 fvdl #endif
10 1.2 fvdl
11 1.1 fvdl #define ioapic_asm_ack(num) \
12 1.1 fvdl movl $0,(_C_LABEL(local_apic)+LAPIC_EOI)(%rip)
13 1.2 fvdl
14 1.2 fvdl #ifdef MULTIPROCESSOR
15 1.2 fvdl
16 1.2 fvdl #define ioapic_asm_lock(num) \
17 1.2 fvdl movl $1,%esi ;\
18 1.2 fvdl 77: \
19 1.2 fvdl xchgl %esi,PIC_LOCK(%rdi) ;\
20 1.2 fvdl testl %esi,%esi ;\
21 1.2 fvdl jne 77b
22 1.2 fvdl
23 1.2 fvdl #define ioapic_asm_unlock(num) \
24 1.2 fvdl movl $0,PIC_LOCK(%rdi)
25 1.2 fvdl
26 1.2 fvdl #else
27 1.2 fvdl
28 1.2 fvdl #define ioapic_asm_lock(num)
29 1.2 fvdl #define ioapic_asm_unlock(num)
30 1.2 fvdl
31 1.2 fvdl #endif /* MULTIPROCESSOR */
32 1.2 fvdl
33 1.2 fvdl
34 1.2 fvdl #define ioapic_mask(num) \
35 1.2 fvdl movq IS_PIC(%r14),%rdi ;\
36 1.2 fvdl ioapic_asm_lock(num) ;\
37 1.2 fvdl movl IS_PIN(%r14),%esi ;\
38 1.2 fvdl leaq 0x10(%rsi,%rsi,1),%rsi ;\
39 1.2 fvdl movq IOAPIC_SC_REG(%rdi),%r15 ;\
40 1.2 fvdl movl %esi, (%r15) ;\
41 1.2 fvdl movq IOAPIC_SC_DATA(%rdi),%r15 ;\
42 1.2 fvdl movl (%r15),%esi ;\
43 1.2 fvdl orl $IOAPIC_REDLO_MASK,%esi ;\
44 1.2 fvdl movl %esi,(%r15) ;\
45 1.2 fvdl ioapic_asm_unlock(num)
46 1.2 fvdl
47 1.2 fvdl #define ioapic_unmask(num) \
48 1.2 fvdl cmpq $IREENT_MAGIC,(TF_ERR+8)(%rsp) ;\
49 1.2 fvdl jne 79f ;\
50 1.2 fvdl movq IS_PIC(%r14),%rdi ;\
51 1.2 fvdl ioapic_asm_lock(num) ;\
52 1.2 fvdl movl IS_PIN(%r14),%esi ;\
53 1.2 fvdl leaq 0x10(%rsi,%rsi,1),%rsi ;\
54 1.2 fvdl movq IOAPIC_SC_REG(%rdi),%r15 ;\
55 1.2 fvdl movl %esi, (%r15) ;\
56 1.2 fvdl movq IOAPIC_SC_DATA(%rdi),%r15 ;\
57 1.2 fvdl movl (%r15),%esi ;\
58 1.2 fvdl andl $~IOAPIC_REDLO_MASK,%esi ;\
59 1.2 fvdl movl %esi,(%r15) ;\
60 1.2 fvdl ioapic_asm_unlock(num) ;\
61 1.2 fvdl 79:
62 1.2 fvdl
63 1.2 fvdl #endif
64