summaryrefslogtreecommitdiffstats
path: root/sys/i386/isa/apic_ipl.s
diff options
context:
space:
mode:
authorbde <bde@FreeBSD.org>1998-08-11 15:08:13 +0000
committerbde <bde@FreeBSD.org>1998-08-11 15:08:13 +0000
commit577b83a70e2314aad91a8a8eb2701588bab8fd3a (patch)
tree0f2f845400de37f9f238c9632765a0ba01b2e2c0 /sys/i386/isa/apic_ipl.s
parentfd999b742a2a451bcfed8559f11c67a9cf60851e (diff)
downloadFreeBSD-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.s24
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
OpenPOWER on IntegriCloud