diff options
author | bde <bde@FreeBSD.org> | 1998-08-11 15:08:13 +0000 |
---|---|---|
committer | bde <bde@FreeBSD.org> | 1998-08-11 15:08:13 +0000 |
commit | 577b83a70e2314aad91a8a8eb2701588bab8fd3a (patch) | |
tree | 0f2f845400de37f9f238c9632765a0ba01b2e2c0 /sys/i386/isa/apic_ipl.s | |
parent | fd999b742a2a451bcfed8559f11c67a9cf60851e (diff) | |
download | FreeBSD-src-577b83a70e2314aad91a8a8eb2701588bab8fd3a.zip FreeBSD-src-577b83a70e2314aad91a8a8eb2701588bab8fd3a.tar.gz |
Implemented dynamic registration of software interrupt handlers. Not
used yet.
Use dummy SWI handlers to avoid some checks for null pointers.
Diffstat (limited to 'sys/i386/isa/apic_ipl.s')
-rw-r--r-- | sys/i386/isa/apic_ipl.s | 24 |
1 files changed, 8 insertions, 16 deletions
diff --git a/sys/i386/isa/apic_ipl.s b/sys/i386/isa/apic_ipl.s index fa83c9f..5bbdca6 100644 --- a/sys/i386/isa/apic_ipl.s +++ b/sys/i386/isa/apic_ipl.s @@ -22,7 +22,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: apic_ipl.s,v 1.19 1998/03/05 21:45:50 tegge Exp $ + * $Id: apic_ipl.s,v 1.20 1998/04/22 22:49:29 tegge Exp $ */ @@ -116,21 +116,10 @@ splz_next: ALIGN_TEXT splz_unpend: bsfl %ecx,%ecx - btrl %ecx, _ipending + btrl %ecx,_ipending jnc splz_next - /* - * HWIs: will JUMP thru *_vec[], see comments below. - * SWIs: setup CALL of swi_tty, swi_net, _softclock, swi_ast. - */ - movl ihandlers(,%ecx,4),%edx - testl %edx,%edx - je splz_next /* "can't happen" */ cmpl $NHWI,%ecx jae splz_swi - pushl %ecx - AICPL_UNLOCK - popl %ecx - /* * We would prefer to call the intr handler directly here but that * doesn't work for badly behaved handlers that want the interrupt @@ -141,6 +130,9 @@ splz_unpend: * The vec[] routines build the proper frame on the stack, * then call one of _Xintr0 thru _XintrNN. */ + pushl %ecx + AICPL_UNLOCK + popl %ecx jmp *_vec(,%ecx,4) ALIGN_TEXT @@ -150,10 +142,10 @@ splz_swi: pushl %eax orl imasks(,%ecx,4),%eax movl %eax,_cpl - pushl %edx + pushl %ecx AICPL_UNLOCK - popl %edx - call %edx + popl %ecx + call *_ihandlers(,%ecx,4) AICPL_LOCK popl %eax movl %eax,_cpl |