summaryrefslogtreecommitdiff
path: root/sys/arch/i386/isa/vector.s
diff options
context:
space:
mode:
authorNiklas Hallqvist <niklas@cvs.openbsd.org>2001-12-04 00:00:37 +0000
committerNiklas Hallqvist <niklas@cvs.openbsd.org>2001-12-04 00:00:37 +0000
commit9bf62191c2a2e2d5aeb7537858d4a8164ea9ebcc (patch)
tree2bdc2c594e23844416a8dc77a6c5a4b0f5517b74 /sys/arch/i386/isa/vector.s
parent1354afe4470c3aeace3d9c3ea0857e8ba5499de4 (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.s14
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 ;\