Home | History | Annotate | Line # | Download | only in include
i82093reg.h revision 1.6.18.1
      1  1.6.18.1  yamt /*	 $NetBSD: i82093reg.h,v 1.6.18.1 2006/12/30 20:46:11 yamt Exp $ */
      2       1.3  fvdl 
      3       1.4  fvdl #include <x86/i82093reg.h>
      4       1.3  fvdl 
      5       1.5  fvdl #ifdef _KERNEL
      6       1.5  fvdl 
      7       1.5  fvdl #if defined(_KERNEL_OPT)
      8       1.5  fvdl #include "opt_multiprocessor.h"
      9       1.5  fvdl #endif
     10       1.5  fvdl 
     11       1.3  fvdl #define ioapic_asm_ack(num) \
     12       1.3  fvdl 	movl	$0,_C_LABEL(local_apic)+LAPIC_EOI
     13       1.5  fvdl 
     14       1.5  fvdl #ifdef MULTIPROCESSOR
     15       1.5  fvdl 
     16       1.5  fvdl #define ioapic_asm_lock(num) \
     17       1.5  fvdl 	movl	$1,%esi						;\
     18       1.5  fvdl 77:								\
     19       1.5  fvdl 	xchgl	%esi,PIC_LOCK(%edi)				;\
     20       1.5  fvdl 	testl	%esi,%esi					;\
     21       1.5  fvdl 	jne	77b
     22       1.5  fvdl 
     23       1.5  fvdl #define ioapic_asm_unlock(num) \
     24       1.5  fvdl 	movl	$0,PIC_LOCK(%edi)
     25       1.5  fvdl 
     26       1.5  fvdl #else
     27       1.5  fvdl 
     28       1.5  fvdl #define ioapic_asm_lock(num)
     29       1.5  fvdl #define ioapic_asm_unlock(num)
     30       1.5  fvdl 
     31       1.5  fvdl #endif	/* MULTIPROCESSOR */
     32       1.5  fvdl 
     33       1.5  fvdl #define ioapic_mask(num) \
     34       1.5  fvdl 	movl	IS_PIC(%ebp),%edi				;\
     35       1.5  fvdl 	ioapic_asm_lock(num)					;\
     36       1.5  fvdl 	movl	IS_PIN(%ebp),%esi				;\
     37       1.5  fvdl 	leal	0x10(%esi,%esi,1),%esi				;\
     38       1.5  fvdl 	movl	IOAPIC_SC_REG(%edi),%ebx			;\
     39       1.5  fvdl 	movl	%esi, (%ebx)					;\
     40       1.5  fvdl 	movl	IOAPIC_SC_DATA(%edi),%ebx			;\
     41       1.5  fvdl 	movl	(%ebx),%esi					;\
     42       1.5  fvdl 	orl	$IOAPIC_REDLO_MASK,%esi				;\
     43       1.5  fvdl 	movl	%esi,(%ebx)					;\
     44       1.5  fvdl 	ioapic_asm_unlock(num)
     45       1.5  fvdl 
     46       1.6  fvdl /*
     47       1.6  fvdl  * Since this is called just before the interrupt stub exits, AND
     48       1.6  fvdl  * because the apic ACK doesn't use any registers, all registers
     49       1.6  fvdl  * can be used here.
     50       1.6  fvdl  * XXX this is not obvious
     51       1.6  fvdl  */
     52       1.5  fvdl #define ioapic_unmask(num) \
     53  1.6.18.1  yamt 	movl    (%esp),%eax					;\
     54  1.6.18.1  yamt 	cmpl    $IREENT_MAGIC,(TF_ERR+4)(%eax)			;\
     55       1.6  fvdl 	jne     79f						;\
     56       1.5  fvdl 	movl	IS_PIC(%ebp),%edi				;\
     57       1.5  fvdl 	ioapic_asm_lock(num)					;\
     58       1.5  fvdl 	movl	IS_PIN(%ebp),%esi				;\
     59       1.5  fvdl 	leal	0x10(%esi,%esi,1),%esi				;\
     60       1.5  fvdl 	movl	IOAPIC_SC_REG(%edi),%ebx			;\
     61       1.6  fvdl 	movl	IOAPIC_SC_DATA(%edi),%eax			;\
     62       1.6  fvdl 	movl	%esi, (%ebx)					;\
     63       1.6  fvdl 	movl	(%eax),%edx					;\
     64       1.6  fvdl 	andl	$~IOAPIC_REDLO_MASK,%edx			;\
     65       1.5  fvdl 	movl	%esi, (%ebx)					;\
     66       1.6  fvdl 	movl	%edx,(%eax)					;\
     67       1.5  fvdl 	ioapic_asm_unlock(num)					;\
     68       1.5  fvdl 79:
     69       1.5  fvdl 
     70       1.5  fvdl #endif
     71