Home | History | Annotate | Line # | Download | only in include
i82093reg.h revision 1.8.40.1
      1  1.8.40.1  jdolecek /*	 $NetBSD: i82093reg.h,v 1.8.40.1 2017/12/03 11:36:18 jdolecek 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.8.40.1  jdolecek 	movl	_C_LABEL(local_apic_va),%eax	; \
     13  1.8.40.1  jdolecek 	movl	$0,LAPIC_EOI(%eax)
     14  1.8.40.1  jdolecek 
     15  1.8.40.1  jdolecek #define x2apic_asm_ack(num) \
     16  1.8.40.1  jdolecek 	movl	$(MSR_X2APIC_BASE + MSR_X2APIC_EOI),%ecx ; \
     17  1.8.40.1  jdolecek 	xorl	%eax,%eax			; \
     18  1.8.40.1  jdolecek 	xorl	%edx,%edx			; \
     19  1.8.40.1  jdolecek 	wrmsr
     20       1.5      fvdl 
     21       1.5      fvdl #ifdef MULTIPROCESSOR
     22       1.5      fvdl 
     23       1.5      fvdl #define ioapic_asm_lock(num) \
     24       1.5      fvdl 	movl	$1,%esi						;\
     25       1.5      fvdl 77:								\
     26       1.5      fvdl 	xchgl	%esi,PIC_LOCK(%edi)				;\
     27       1.5      fvdl 	testl	%esi,%esi					;\
     28       1.5      fvdl 	jne	77b
     29       1.5      fvdl 
     30       1.5      fvdl #define ioapic_asm_unlock(num) \
     31       1.5      fvdl 	movl	$0,PIC_LOCK(%edi)
     32       1.5      fvdl 
     33       1.5      fvdl #else
     34       1.5      fvdl 
     35       1.5      fvdl #define ioapic_asm_lock(num)
     36       1.5      fvdl #define ioapic_asm_unlock(num)
     37       1.5      fvdl 
     38       1.5      fvdl #endif	/* MULTIPROCESSOR */
     39       1.5      fvdl 
     40       1.5      fvdl #define ioapic_mask(num) \
     41       1.5      fvdl 	movl	IS_PIC(%ebp),%edi				;\
     42       1.5      fvdl 	ioapic_asm_lock(num)					;\
     43       1.5      fvdl 	movl	IS_PIN(%ebp),%esi				;\
     44       1.5      fvdl 	leal	0x10(%esi,%esi,1),%esi				;\
     45       1.8  drochner 	movl	PIC_IOAPIC(%edi),%edi				;\
     46       1.5      fvdl 	movl	IOAPIC_SC_REG(%edi),%ebx			;\
     47       1.5      fvdl 	movl	%esi, (%ebx)					;\
     48       1.5      fvdl 	movl	IOAPIC_SC_DATA(%edi),%ebx			;\
     49       1.5      fvdl 	movl	(%ebx),%esi					;\
     50       1.5      fvdl 	orl	$IOAPIC_REDLO_MASK,%esi				;\
     51  1.8.40.1  jdolecek 	andl	$~IOAPIC_REDLO_RIRR,%esi			;\
     52       1.5      fvdl 	movl	%esi,(%ebx)					;\
     53       1.8  drochner 	movl	IS_PIC(%ebp),%edi				;\
     54       1.5      fvdl 	ioapic_asm_unlock(num)
     55       1.5      fvdl 
     56       1.6      fvdl /*
     57       1.6      fvdl  * Since this is called just before the interrupt stub exits, AND
     58       1.6      fvdl  * because the apic ACK doesn't use any registers, all registers
     59       1.6      fvdl  * can be used here.
     60       1.6      fvdl  * XXX this is not obvious
     61       1.6      fvdl  */
     62       1.5      fvdl #define ioapic_unmask(num) \
     63       1.7      yamt 	movl    (%esp),%eax					;\
     64       1.7      yamt 	cmpl    $IREENT_MAGIC,(TF_ERR+4)(%eax)			;\
     65       1.6      fvdl 	jne     79f						;\
     66       1.5      fvdl 	movl	IS_PIC(%ebp),%edi				;\
     67       1.5      fvdl 	ioapic_asm_lock(num)					;\
     68       1.5      fvdl 	movl	IS_PIN(%ebp),%esi				;\
     69       1.5      fvdl 	leal	0x10(%esi,%esi,1),%esi				;\
     70       1.8  drochner 	movl	PIC_IOAPIC(%edi),%edi				;\
     71       1.5      fvdl 	movl	IOAPIC_SC_REG(%edi),%ebx			;\
     72       1.6      fvdl 	movl	IOAPIC_SC_DATA(%edi),%eax			;\
     73       1.6      fvdl 	movl	%esi, (%ebx)					;\
     74       1.6      fvdl 	movl	(%eax),%edx					;\
     75  1.8.40.1  jdolecek 	andl	$~(IOAPIC_REDLO_MASK|IOAPIC_REDLO_RIRR),%edx	;\
     76       1.5      fvdl 	movl	%esi, (%ebx)					;\
     77       1.6      fvdl 	movl	%edx,(%eax)					;\
     78       1.8  drochner 	movl	IS_PIC(%ebp),%edi				;\
     79       1.5      fvdl 	ioapic_asm_unlock(num)					;\
     80       1.5      fvdl 79:
     81       1.5      fvdl 
     82       1.5      fvdl #endif
     83