diff options
author | Niklas Hallqvist <niklas@cvs.openbsd.org> | 2001-12-04 00:00:37 +0000 |
---|---|---|
committer | Niklas Hallqvist <niklas@cvs.openbsd.org> | 2001-12-04 00:00:37 +0000 |
commit | 9bf62191c2a2e2d5aeb7537858d4a8164ea9ebcc (patch) | |
tree | 2bdc2c594e23844416a8dc77a6c5a4b0f5517b74 /sys/arch/i386/isa/vector.s | |
parent | 1354afe4470c3aeace3d9c3ea0857e8ba5499de4 (diff) |
New try at a level based irq system.
Diffstat (limited to 'sys/arch/i386/isa/vector.s')
-rw-r--r-- | sys/arch/i386/isa/vector.s | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/sys/arch/i386/isa/vector.s b/sys/arch/i386/isa/vector.s index 664477530e9..b445c720ef1 100644 --- a/sys/arch/i386/isa/vector.s +++ b/sys/arch/i386/isa/vector.s @@ -1,4 +1,4 @@ -/* $OpenBSD: vector.s,v 1.13 2001/11/18 20:46:49 aaron Exp $ */ +/* $OpenBSD: vector.s,v 1.14 2001/12/04 00:00:36 niklas Exp $ */ /* $NetBSD: vector.s,v 1.32 1996/01/07 21:29:47 mycroft Exp $ */ /* @@ -218,13 +218,15 @@ _Xintr/**/irq_num/**/: ;\ MASK(irq_num, icu) /* mask it in hardware */ ;\ ack(irq_num) /* and allow other intrs */ ;\ incl MY_COUNT+V_INTR /* statistical info */ ;\ - testb $IRQ_BIT(irq_num),_cpl + IRQ_BYTE(irq_num) ;\ - jnz _Xhold/**/irq_num /* currently masked; hold it */ ;\ + movl _C_LABEL(iminlevel) + (irq_num) * 4, %eax ;\ + movzbl _C_LABEL(cpl),%ebx ;\ + cmpl %eax,%ebx ;\ + jae _C_LABEL(Xhold/**/irq_num)/* currently masked; hold it */;\ _Xresume/**/irq_num/**/: ;\ - movl _cpl,%eax /* cpl to restore on exit */ ;\ + movzbl _C_LABEL(cpl),%eax /* cpl to restore on exit */ ;\ pushl %eax ;\ - orl _intrmask + (irq_num) * 4,%eax ;\ - movl %eax,_cpl /* add in this intr's mask */ ;\ + movl _C_LABEL(imaxlevel) + (irq_num) * 4,%eax ;\ + movl %eax,_C_LABEL(cpl) /* block enough for this irq */ ;\ sti /* safe to take intrs now */ ;\ movl _intrhand + (irq_num) * 4,%ebx /* head of chain */ ;\ testl %ebx,%ebx ;\ |