summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTheo de Raadt <deraadt@cvs.openbsd.org>1995-12-01 20:39:27 +0000
committerTheo de Raadt <deraadt@cvs.openbsd.org>1995-12-01 20:39:27 +0000
commite58e619e6b204d246338fe3b9acc8434e1ea015d (patch)
tree3bf41b6c3b02af383334a381885f7c5bc5ad8d5c
parent47e291c43fc7fc1d8b213155c92d2b4e81ceec00 (diff)
we cannot jump into ddb until the interrupt has been acknowledged to the
chip. set a flag and defer calling ddb till end of interrupt routine.
-rw-r--r--sys/arch/mvme68k/dev/cl.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/sys/arch/mvme68k/dev/cl.c b/sys/arch/mvme68k/dev/cl.c
index 83a0c78d9bd..32628dbb56e 100644
--- a/sys/arch/mvme68k/dev/cl.c
+++ b/sys/arch/mvme68k/dev/cl.c
@@ -1,4 +1,4 @@
-/* $Id: cl.c,v 1.7 1995/12/01 19:26:41 deraadt Exp $ */
+/* $Id: cl.c,v 1.8 1995/12/01 20:39:26 deraadt Exp $ */
/*
* Copyright (c) 1995 Dale Rahn. All rights reserved.
@@ -1593,6 +1593,9 @@ cl_rxintr(sc)
int i;
u_char reoir;
u_char buffer[CL_FIFO_MAX +1];
+#ifdef CONSOLEBREAKDDB
+ int wantddb = 0;
+#endif
rir = sc->cl_reg->cl_rir;
if((rir & 0x40) == 0x0) {
@@ -1625,6 +1628,10 @@ cl_rxintr(sc)
reoir = 0x08;
} else
if (risrl & 0x01) {
+#ifdef CONSOLEBREAKDDB
+ if (sc->sc_cl[channel].cl_consio)
+ wantddb = 1;
+#endif
cl_break(sc, channel);
reoir = 0x08;
}
@@ -1740,6 +1747,10 @@ channel, nbuf, cnt, status);
reoir = 0x08;
sc->cl_reg->cl_reoir = reoir;
}
+#ifdef CONSOLEBREAKDDB
+ if (wantddb)
+ Debugger();
+#endif
return 1;
}
@@ -1783,10 +1794,6 @@ cl_break (sc, channel)
struct clsoftc *sc;
int channel;
{
-#ifdef CONSOLEBREAKDDB
- if (sc->sc_cl[channel].cl_consio)
- Debugger();
-#endif
log(LOG_WARNING, "%s%d[%d]: break detected\n", clcd.cd_name, 0, channel);
return;
}