From a6a12fae6f5fc4f8e7870d110544ec7ae096b23e Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Fri, 8 May 1992 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 1992-05-08 --- power/dat.h | 1 + power/devhotrod.c | 3 +++ power/faultmips.c | 4 ++++ power/io.h | 8 ++++++++ power/trap.c | 2 ++ 5 files changed, 18 insertions(+) diff --git a/power/dat.h b/power/dat.h index 4908199c43bc16f15c3bfda1cf28f61a6ea0ad80..7a6d30b9c6c234f07d2877793dbedb43f686539b 100644 --- a/power/dat.h +++ b/power/dat.h @@ -144,6 +144,7 @@ struct Mach int syscall; int load; int intr; + int ledval; /* value last written to LED */ int stack[1]; }; diff --git a/power/devhotrod.c b/power/devhotrod.c index 61ca1af5b73c982ffd392cb4ed9809e38005ace1..5ad01f52638f9704c023adafa41ef3c46332aa6a 100644 --- a/power/devhotrod.c +++ b/power/devhotrod.c @@ -412,9 +412,11 @@ hotrodintr(int vec) Hotmsg *hm; ulong l; + LEDON(LEDhotintr); h = &hotrod[vec - Vmevec]; if(h&hotrod[Nhotrod]){ print("bad hotrod vec\n"); + LEDOFF(LEDhotintr); return; } while(l = h->addr->replyq[h->ri]){ /* assign = */ @@ -427,4 +429,5 @@ hotrodintr(int vec) if(!hm->abort) wakeup(&hm->r); } + LEDOFF(LEDhotintr); } diff --git a/power/faultmips.c b/power/faultmips.c index 32ea727c4ba615706afd92588b078f955815bb29..66520d1214e6b538835ae1a182a623a2adaf1e90 100644 --- a/power/faultmips.c +++ b/power/faultmips.c @@ -5,6 +5,7 @@ #include "fns.h" #include "ureg.h" #include "../port/error.h" +#include "io.h" /* * find out fault address and type of access. @@ -18,6 +19,7 @@ faultmips(Ureg *ur, int user, int code) char buf[ERRLEN]; int read; + LEDON(LEDfault); addr = ur->badvaddr; addr &= ~(BY2PG-1); read = !(code==CTLBM || code==CTLBS); @@ -27,6 +29,7 @@ faultmips(Ureg *ur, int user, int code) sprint(buf, "sys: trap: fault %s addr=0x%lux", read? "read" : "write", ur->badvaddr); postnote(u->p, 1, buf, NDebug); + LEDOFF(LEDfault); return; } print("kernel %s badvaddr=0x%lux\n", excname[code], ur->badvaddr); @@ -34,6 +37,7 @@ faultmips(Ureg *ur, int user, int code) dumpregs(ur); panic("fault"); } + LEDOFF(LEDfault); } /* diff --git a/power/io.h b/power/io.h index f1a7c29eb7e5455ed39b61caaaa5d0feeda86bee..0d14f813790b44b8c9e456e478bdbb747498d492 100644 --- a/power/io.h +++ b/power/io.h @@ -7,6 +7,14 @@ #define SBSEMTOP SYNCBUS(ulong, 0x400000) #define LED ((char*)0xBF200001) +enum +{ + LEDhotintr= 1<<0, + LEDclock= 1<<1, + LEDfault= 1<<2, +}; +#define LEDON(x) { m->ledval |= x; *LED = m->ledval; } +#define LEDOFF(x) { m->ledval &= ~x; *LED = m->ledval; } typedef struct SBCC SBCC; typedef struct Timer Timer; diff --git a/power/trap.c b/power/trap.c index d16cda65cdb04d965b3da3ae60f874b8e4bed5b1..b3c91898191f4baf82b441e2dd75eb9f7cb499a0 100644 --- a/power/trap.c +++ b/power/trap.c @@ -190,7 +190,9 @@ intr(Ureg *ur) m->intr++; cause = ur->cause&(INTR5|INTR4|INTR3|INTR2|INTR1); if(cause & (INTR2|INTR4)){ + LEDON(LEDclock); clock(ur); + LEDOFF(LEDclock); cause &= ~(INTR2|INTR4); } if(cause & INTR1){