From 8bae60a2e35f5e4eec0866a39c035624fd96c060 Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Mon, 13 Aug 2001 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 2001-08-13 --- bitsy/clock.c | 2 +- bitsy/mmu.c | 1 + bitsy/power.c | 39 +++++++++++++++++++++------------------ bitsy/trap.c | 4 ++++ port/devdraw.c | 4 ++-- port/devpipe.c | 2 +- 6 files changed, 30 insertions(+), 22 deletions(-) diff --git a/bitsy/clock.c b/bitsy/clock.c index 5ebe94abeaa98ce8d4440cd0bc99c8845ad0aae5..e75a2cfbf0665e5be2de4d978625821fca3f45b1 100644 --- a/bitsy/clock.c +++ b/bitsy/clock.c @@ -12,7 +12,7 @@ typedef struct OSTimer ulong osmr[4]; /* match registers */ ulong oscr; /* counter register */ ulong ossr; /* status register */ - ulong ower; /* watchdog enable register */ + ulong ower; /* watchdog enable register */ ulong oier; /* timer interrupt enable register */ } OSTimer; diff --git a/bitsy/mmu.c b/bitsy/mmu.c index d0213a230457fff75e1a66738dccdd0c59c81aaa..49c5a1fdc31744a249dc56b3b809db2fde88e13b 100644 --- a/bitsy/mmu.c +++ b/bitsy/mmu.c @@ -125,6 +125,7 @@ mmurestart(void) { /* enable mmu */ wbflush(); + icacheinvalidate(); /* you never know ... (sape) */ mmuinvalidate(); mmuenable(); cacheflush(); diff --git a/bitsy/power.c b/bitsy/power.c index 36df16998015ace4ea4bb89b0135152ad435c858..7b2751f3d1af5e6052b7c2a6bca8f6768fb3542b 100644 --- a/bitsy/power.c +++ b/bitsy/power.c @@ -51,8 +51,9 @@ dumpitall(void) iprint("dram: mdcnfg msc %lux %lux %lux mecr %lux\n", memconfregs->msc0, memconfregs->msc1,memconfregs->msc2, memconfregs->mecr); - - + iprint("powerregs: pmcr %lux pssr %lux pcfr %lux ppcr %lux pwer %lux pspr %lux pgsr %lux posr %lux\n", + powerregs->pmcr, powerregs->pssr, powerregs->pcfr, powerregs->ppcr, + powerregs->pwer, powerregs->pspr, powerregs->pgsr, powerregs->posr); } static void @@ -76,12 +77,12 @@ gpiosave(GPIOregs *to, GPIOregs *from) static void gpiorestore(GPIOregs *to, GPIOregs *from) { - to->rising = from->rising; // gpio intrs enabled - to->falling= from->falling; // gpio intrs enabled - to->altfunc = from->altfunc; to->direction = from->direction; + to->altfunc = from->altfunc; to->set = from->level & 0x0fffffff; to->clear = ~from->level & 0x0fffffff; + to->rising = from->rising; // gpio intrs enabled + to->falling= from->falling; // gpio intrs enabled } void (*restart)(void) = nil; @@ -143,19 +144,19 @@ deepsleep(void) { static int power_pl; ulong xsp, xlink; - power_pl = splhi(); - delay(50); xlink = getcallerpc(&xlink); /* Power down */ - iprint("entering suspend mode, sp = 0x%lux, pc = 0x%lux, psw = 0x%lux\n", &xsp, xlink, power_pl); - dumpitall(); - uartpower(0); - clockpower(0); irpower(0); audiopower(0); screenpower(0); µcpower(0); + power_pl = splhi(); + iprint("entering suspend mode, sp = 0x%lux, pc = 0x%lux, psw = 0x%lux\n", &xsp, xlink, power_pl); + dumpitall(); + delay(100); + uartpower(0); rs232power(0); + clockpower(0); gpiosave(&savedgpioregs, gpioregs); intrcpy(&savedintrregs, intrregs); cacheflush(); @@ -173,21 +174,23 @@ deepsleep(void) { intrregs->icip = (1<r0 = 1<<0; - µcpower(1); - screenpower(1); + rs232power(1); + uartpower(1); dumpitall(); + delay(100); xlink = getcallerpc(&xlink); iprint("\nresuming execution, sp = 0x%lux, pc = 0x%lux, psw = 0x%lux\n", &xsp, xlink, splhi()); - delay(800); splx(power_pl); +// irpower(1); +// audiopower(1); + µcpower(1); + screenpower(1); return; } + wbflush(); + delay(50); sa1100_power_off(); /* no return */ } diff --git a/bitsy/trap.c b/bitsy/trap.c index b676075b7dbd460dda00a3b29eee3c9b5262cfb9..273c884571124d7f60873efee937da2512c63d47 100644 --- a/bitsy/trap.c +++ b/bitsy/trap.c @@ -213,6 +213,10 @@ faultarm(Ureg *ureg, ulong va, int user, int read) int n, insyscall; char buf[ERRMAX]; + if (up == nil) { + warnregs(ureg, "kernel fault"); + panic("fault: nil up in faultarm, accessing 0x%lux\n", va); + } insyscall = up->insyscall; up->insyscall = 1; n = fault(va, read); diff --git a/port/devdraw.c b/port/devdraw.c index f6e4a22801d1bf771ac65fcd6161b118e5e56043..39ed80c96d86bf94f98d605695e78d4b34cecf93 100644 --- a/port/devdraw.c +++ b/port/devdraw.c @@ -255,7 +255,7 @@ drawgen(Chan *c, char*, Dirtab*, int, int s, Dir *dp) /* * Third level. */ - path = c->qid.path&~(((1<qid.path&~((1<qid.vers; q.type = QTFILE; switch(s){ @@ -860,7 +860,7 @@ initscreenimage(void) } screenimage->width = width; - screenimage->clipr = screenimage->r; + screenimage->clipr = screenimage->r; return 1; } diff --git a/port/devpipe.c b/port/devpipe.c index d5cd43d6169b8fd8101393403bb302622d81eb14..d348abc93bde16cf9c1ea8fc07693f372b3a96ac 100644 --- a/port/devpipe.c +++ b/port/devpipe.c @@ -90,9 +90,9 @@ pipeattach(char *spec) static int pipegen(Chan *c, char*, Dirtab *tab, int ntab, int i, Dir *dp) { + Qid q; int len; Pipe *p; - Qid q; if(i == DEVDOTDOT){ devdir(c, c->qid, "#|", 0, eve, DMDIR|0555, dp);