diff options
author | dg <dg@FreeBSD.org> | 1994-08-18 05:09:36 +0000 |
---|---|---|
committer | dg <dg@FreeBSD.org> | 1994-08-18 05:09:36 +0000 |
commit | 7b3218c89f6c5e1d72625d3be9db3a221ea7f330 (patch) | |
tree | 1abd0f0dcf193ac24dd552de50221c9fb30b3610 /sys/i386/isa/icu.s | |
parent | c87abe4536bb366a683e0f2b5fcaaa67d072ba75 (diff) | |
download | FreeBSD-src-7b3218c89f6c5e1d72625d3be9db3a221ea7f330.zip FreeBSD-src-7b3218c89f6c5e1d72625d3be9db3a221ea7f330.tar.gz |
Bruce Evans' dynamic interrupt support.
/usr/src/sys/i386/isa/clock.c:
o Garrett's statclock changes.
o Wire xxxintr, not Vclk.
o Wire using register_intr(), not setidt().
/usr/src/sys/i386/isa/icu.s:
o Garrett's statclock changes.
o Removed unused variable high_imask.
o Fake int 8 for rtc as well as int 0 for clk. Required for kernel
profiling with statclock, harmless otherwise.
/usr/src/sys/i386/isa/isa.c:
o Allow isdp->id_irq and other things in *isdp to be changed by
probes. Changing interrupts later requires direct calls to
register_intr() and unregister_intr() and more care.
ALLOW_CONFLICT_* is brought over from 1.1.5, except
ALLOW_CONFLICT_IRQ is not supported. IRQ conflict checking is
delayed until after probing so that drivers can change the IRQ
to a free one; real conflicts require more cooperation between
drivers to handle.
o Too many details to list.
o This file requires splitting and a lot more work.
/usr/src/sys/i386/isa/isa_device.h:
o Declare more things more completely.
/usr/src/sys/i386/isa/sio.c:
o Prepare to register interrupt handlers as fast.
/usr/src/sys/i386/isa/vector.s:
o Generate entry code for 16 fast interrupt handlers and 16 normal
interrupt handlers. Changed some constants to variables:
# $unit is now intr_unit[intr]. Type is int. Someday it should
be a cookie suitable for the handler (e.g., a struct com_s for
sio).
# $handler is now intr_handler[intr].
# intrcnt_actv[id_num] is now *intr_countp[intr]. The indirection
is required to get a contiguous range of counters for vmstat
and so that the drivers depend more in the driver than on the
interrupt number (drivers could take turns using an interrupt
and the counts would remain correct). There is a separate
counter for each device and for each stray interrupt. In
1.1.5, stray interrupt 7 clobbers the count for device 7 or
something worse if there is no device 7 :-(.
# mask is now intr_mask[intr] (was already indirect).
o Entry points are now _XintrI and _XfastintrI (I = intr = 0-15),
not _VdevU (U = unit).
o Removed BUILD_VECTORS stuff. There's a trace of it left for
the string table for vmstat but config now generates the
string in one piece because nothing more is required.
o Removed old handling of stray interrupts and older comments
about it.
Submitted by: Bruce Evans
Diffstat (limited to 'sys/i386/isa/icu.s')
-rw-r--r-- | sys/i386/isa/icu.s | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/sys/i386/isa/icu.s b/sys/i386/isa/icu.s index 735eeda..4956ab8 100644 --- a/sys/i386/isa/icu.s +++ b/sys/i386/isa/icu.s @@ -36,7 +36,7 @@ * * @(#)icu.s 7.2 (Berkeley) 5/21/91 * - * $Id: icu.s,v 1.10 1994/08/13 03:50:01 wollman Exp $ + * $Id: icu.s,v 1.11 1994/08/15 03:15:19 wollman Exp $ */ /* @@ -57,7 +57,6 @@ _cpl: .long HWI_MASK | SWI_MASK /* current priority (all off) */ .globl _imen _imen: .long HWI_MASK /* interrupt mask enable (all h/w off) */ -_high_imask: .long HWI_MASK | SWI_MASK .globl _stat_imask _stat_imask: .long (1 << 8) .globl _tty_imask @@ -236,8 +235,8 @@ splz_swi: jmp splz_next /* - * Fake clock IRQ so that it appears to come from our caller and not from - * vec0, so that kernel profiling works. + * Fake clock interrupt(s) so that they appear to come from our caller instead + * of from here, so that system profiling works. * XXX do this more generally (for all vectors; look up the C entry point). * XXX frame bogusness stops us from just jumping to the C entry point. */ @@ -250,7 +249,17 @@ vec0: pushl %eax cli MEXITCOUNT - jmp _Vclk + jmp _Xintr0 /* XXX might need _Xfastintr0 */ + + ALIGN_TEXT +vec8: + popl %eax + pushfl + pushl $KCSEL + pushl %eax + cli + MEXITCOUNT + jmp _Xintr8 /* XXX might need _Xfastintr8 */ #define BUILD_VEC(irq_num) \ ALIGN_TEXT ; \ @@ -265,7 +274,6 @@ vec/**/irq_num: ; \ BUILD_VEC(5) BUILD_VEC(6) BUILD_VEC(7) - BUILD_VEC(8) BUILD_VEC(9) BUILD_VEC(10) BUILD_VEC(11) |