summary |
tags |
clone url |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
9c06022)
Changed asynchronous bus error handling.
SCCS-vsn: sys/news3400/news3400/trap.c 7.8
*
* from: Utah $Hdr: trap.c 1.32 91/04/06$
*
*
* from: Utah $Hdr: trap.c 1.32 91/04/06$
*
- * @(#)trap.c 7.7 (Berkeley) %G%
+ * @(#)trap.c 7.8 (Berkeley) %G%
*/
#include <sys/param.h>
*/
#include <sys/param.h>
#include <news3400/hbdev/dmac_0448.h>
#include <news3400/sio/scc.h>
#include <news3400/hbdev/dmac_0448.h>
#include <news3400/sio/scc.h>
-/*
- * This is a kludge to allow X windows to work.
- */
-#undef X_KLUGE
-
-#ifdef X_KLUGE
-#define USER_MAP_ADDR 0x4000
-#define NPTES 300
-static pt_entry_t UserMapPtes[NPTES];
-static unsigned nUserMapPtes;
-static pid_t UserMapPid;
-#endif
-
struct proc *machFPCurProcPtr; /* pointer to last proc to use FP */
extern void MachKernGenException();
struct proc *machFPCurProcPtr; /* pointer to last proc to use FP */
extern void MachKernGenException();
register vm_map_t map = &vm->vm_map;
int rv;
register vm_map_t map = &vm->vm_map;
int rv;
-#ifdef X_KLUGE
- if (p->p_pid == UserMapPid &&
- (va = pmax_btop(vadr - USER_MAP_ADDR)) < nUserMapPtes) {
- register pt_entry_t *pte;
-
- pte = &UserMapPtes[va];
- MachTLBWriteRandom((vadr & PG_FRAME) |
- (vm->vm_pmap.pm_tlbpid << VMMACH_TLB_PID_SHIFT),
- pte->pt_entry);
- return (pc);
- }
-#endif
va = trunc_page((vm_offset_t)vadr);
rv = vm_fault(map, va, ftype, FALSE);
if (rv != KERN_SUCCESS) {
va = trunc_page((vm_offset_t)vadr);
rv = vm_fault(map, va, ftype, FALSE);
if (rv != KERN_SUCCESS) {
printf("trap: pid %d %s sig %d adr %x pc %x ra %x\n", p->p_pid,
p->p_comm, i, vadr, pc, p->p_md.md_regs[RA]); /* XXX */
trapDump("trap");
printf("trap: pid %d %s sig %d adr %x pc %x ra %x\n", p->p_pid,
p->p_comm, i, vadr, pc, p->p_md.md_regs[RA]); /* XXX */
trapDump("trap");
#endif
#endif
panic("trap");
#endif
#endif
panic("trap");
/*
* Handle an interrupt.
* Called from MachKernIntr() or MachUserIntr()
/*
* Handle an interrupt.
* Called from MachKernIntr() or MachUserIntr()
* asynchronous bus error
*/
splx((MACH_SPL_MASK_7 & ~causeReg) | MACH_SR_INT_ENA_CUR);
* asynchronous bus error
*/
splx((MACH_SPL_MASK_7 & ~causeReg) | MACH_SR_INT_ENA_CUR);
- printf("level 4 interrupt: PC %x CR %x SR %x\n",
- pc, causeReg, statusReg);
*(char *)INTCLR0 = INTCLR0_BERR;
causeReg &= ~MACH_INT_MASK_4;
*(char *)INTCLR0 = INTCLR0_BERR;
causeReg &= ~MACH_INT_MASK_4;
+#define BADADDR 1
+ if (oonfault == BADADDR) { /* XXX */
+ badaddr_flag = 1;
+ } else {
+ printf("level 4 interrupt: PC %x CR %x SR %x\n",
+ pc, causeReg, statusReg);
+ }
}
if (mask & MACH_INT_MASK_3) { /* level 3 interrupt */
/*
}
if (mask & MACH_INT_MASK_3) { /* level 3 interrupt */
/*
-#ifdef X_KLUGE
-/*
- * This is a kludge to allow X windows to work.
- */
-caddr_t
-vmUserMap(size, pa)
- int size;
- unsigned pa;
-{
- register caddr_t v;
- unsigned off, entry;
-
- if (nUserMapPtes == 0)
- UserMapPid = curproc->p_pid;
- else if (UserMapPid != curproc->p_pid)
- return ((caddr_t)0);
- off = pa & PGOFSET;
- size = btoc(off + size);
- if (nUserMapPtes + size > NPTES)
- return ((caddr_t)0);
- v = (caddr_t)(USER_MAP_ADDR + pmax_ptob(nUserMapPtes) + off);
- entry = (pa & 0x9ffff000) | PG_V | PG_M;
- if (pa >= MACH_UNCACHED_MEMORY_ADDR)
- entry |= PG_N;
- while (size > 0) {
- UserMapPtes[nUserMapPtes].pt_entry = entry;
- entry += NBPG;
- nUserMapPtes++;
- size--;
- }
- return (v);
-}
-
-vmUserUnmap()
-{
- int id;
-
- nUserMapPtes = 0;
- if (UserMapPid == curproc->p_pid) {
- id = curproc->p_vmspace->vm_pmap.pm_tlbpid;
- if (id >= 0)
- MachTLBFlushPID(id);
- }
- UserMapPid = 0;
-}
-#endif
-
/*
* Return the resulting PC as if the branch was executed.
*/
/*
* Return the resulting PC as if the branch was executed.
*/