- Add suline() for the new trap.c (Shouldn't this move to m68k/copy.s?)

- Fix some bugs in the interrupt handlers introduced by the new mapping
  of the st io-area.
This commit is contained in:
leo 1996-09-10 08:58:42 +00:00
parent 7a87b91e9b
commit 2340b495ce
1 changed files with 37 additions and 4 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: locore.s,v 1.19 1996/07/12 13:12:40 leo Exp $ */
/* $NetBSD: locore.s,v 1.20 1996/09/10 08:58:42 leo Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@ -604,6 +604,8 @@ sccint:
_lev1intr:
moveb #0, SOFTINT_ADDR | Turn off software interrupt
moveml d0-d1/a0-a1,sp@-
movl _stio_addr, a0 | get KVA of ST-IO area
moveb #0, a0@(SCU_SOFTINT) | Turn off software interrupt
addql #1,_intrcnt+16 | add another software interrupt
jbsr _softint | handle software interrupts
moveml sp@+,d0-d1/a0-a1
@ -621,10 +623,13 @@ _lev7intr:
* Note that the nmi has to be turned off while handling it because
* the hardware modification has no de-bouncing logic....
*/
movb SYSMASK_ADDR, sp@- | save current sysmask
movb #0, SYSMASK_ADDR | disable all interrupts
movl a0, sp@- | save a0
movl _stio_addr, a0 | get KVA of ST-IO area
movb a0@(SCU_SYSMASK), sp@- | save current sysmask
movb #0, a0@(SCU_SYSMASK) | disable all interrupts
trap #15 | drop into the debugger
movb sp@+, SYSMASK_ADDR | restore sysmask
movb sp@+, a0@(SCU_SYSMASK) | restore sysmask
movl sp@+, a0 | restore a0
#endif
addql #1,_intrcnt+28 | add another nmi interrupt
rte | all done
@ -1360,6 +1365,34 @@ Lsavedone:
moveq #0,d0 | return 0
rts
#if defined(M68040)
ENTRY(suline)
movl sp@(4),a0 | address to write
movl _curpcb,a1 | current pcb
movl #Lslerr,a1@(PCB_ONFAULT) | where to return to on a fault
movl sp@(8),a1 | address of line
movl a1@+,d0 | get lword
movsl d0,a0@+ | put lword
nop | sync
movl a1@+,d0 | get lword
movsl d0,a0@+ | put lword
nop | sync
movl a1@+,d0 | get lword
movsl d0,a0@+ | put lword
nop | sync
movl a1@+,d0 | get lword
movsl d0,a0@+ | put lword
nop | sync
moveq #0,d0 | indicate no fault
jra Lsldone
Lslerr:
moveq #-1,d0
Lsldone:
movl _curpcb,a1 | current pcb
clrl a1@(PCB_ONFAULT) | clear fault address
rts
#endif /* defined(M68040) */
/*
* Copy 1 relocation unit (NBPG bytes)
* from user virtual address to physical address