Home | History | Annotate | Line # | Download | only in include
i82093reg.h revision 1.4.4.1
      1  1.4.4.1  simonb /*	 $NetBSD: i82093reg.h,v 1.4.4.1 2008/07/03 18:37:51 simonb 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.4     skd #define ioapic_asm_lock(num) 			        \
     17      1.4     skd 	movb	$1,%bl				;	\
     18      1.4     skd 76:							\
     19      1.4     skd         xchgb	%bl,PIC_LOCK(%rdi)		;	\
     20      1.4     skd 	testb	%bl,%bl				;	\
     21      1.4     skd 	jz	78f				;	\
     22      1.4     skd 77:							\
     23      1.4     skd 	pause					;	\
     24      1.4     skd 	nop					;	\
     25      1.4     skd 	nop					;	\
     26      1.4     skd 	cmpb	$0,PIC_LOCK(%rdi)		;	\
     27      1.4     skd 	jne	77b				;	\
     28      1.4     skd 	jmp	76b				;	\
     29      1.4     skd 78:
     30      1.2    fvdl 
     31      1.2    fvdl #define ioapic_asm_unlock(num) \
     32      1.4     skd 	movb	$0,PIC_LOCK(%rdi)
     33      1.2    fvdl 
     34      1.2    fvdl #else
     35      1.2    fvdl 
     36      1.2    fvdl #define ioapic_asm_lock(num)
     37      1.2    fvdl #define ioapic_asm_unlock(num)
     38      1.2    fvdl 
     39      1.2    fvdl #endif	/* MULTIPROCESSOR */
     40      1.2    fvdl 
     41      1.2    fvdl 
     42      1.2    fvdl #define ioapic_mask(num) \
     43      1.2    fvdl 	movq	IS_PIC(%r14),%rdi				;\
     44      1.2    fvdl 	ioapic_asm_lock(num)					;\
     45      1.2    fvdl 	movl	IS_PIN(%r14),%esi				;\
     46      1.2    fvdl 	leaq	0x10(%rsi,%rsi,1),%rsi				;\
     47  1.4.4.1  simonb 	movq	PIC_IOAPIC(%rdi),%rdi				;\
     48      1.2    fvdl 	movq	IOAPIC_SC_REG(%rdi),%r15			;\
     49      1.2    fvdl 	movl	%esi, (%r15)					;\
     50      1.2    fvdl 	movq	IOAPIC_SC_DATA(%rdi),%r15			;\
     51      1.2    fvdl 	movl	(%r15),%esi					;\
     52      1.2    fvdl 	orl	$IOAPIC_REDLO_MASK,%esi				;\
     53      1.2    fvdl 	movl	%esi,(%r15)					;\
     54  1.4.4.1  simonb 	movq	IS_PIC(%r14),%rdi				;\
     55      1.2    fvdl 	ioapic_asm_unlock(num)
     56      1.2    fvdl 
     57      1.2    fvdl #define ioapic_unmask(num) \
     58      1.2    fvdl 	cmpq	$IREENT_MAGIC,(TF_ERR+8)(%rsp)			;\
     59      1.2    fvdl 	jne	79f						;\
     60      1.2    fvdl 	movq	IS_PIC(%r14),%rdi				;\
     61      1.2    fvdl 	ioapic_asm_lock(num)					;\
     62      1.2    fvdl 	movl	IS_PIN(%r14),%esi				;\
     63      1.2    fvdl 	leaq	0x10(%rsi,%rsi,1),%rsi				;\
     64  1.4.4.1  simonb 	movq	PIC_IOAPIC(%rdi),%rdi				;\
     65      1.2    fvdl 	movq	IOAPIC_SC_REG(%rdi),%r15			;\
     66      1.3    fvdl 	movq	IOAPIC_SC_DATA(%rdi),%r13			;\
     67      1.2    fvdl 	movl	%esi, (%r15)					;\
     68      1.3    fvdl 	movl	(%r13),%r12d					;\
     69      1.3    fvdl 	andl	$~IOAPIC_REDLO_MASK,%r12d			;\
     70      1.2    fvdl 	movl	%esi,(%r15)					;\
     71      1.3    fvdl 	movl	%r12d,(%r13)					;\
     72  1.4.4.1  simonb 	movq	IS_PIC(%r14),%rdi				;\
     73      1.2    fvdl 	ioapic_asm_unlock(num)					;\
     74      1.2    fvdl 79:
     75      1.2    fvdl 
     76      1.2    fvdl #endif
     77