M boot/boot.c => boot/boot.c +1 -1
@@ 39,7 39,7 @@ boot(int argc, char *argv[])
open("#c/cons", OREAD);
open("#c/cons", OWRITE);
open("#c/cons", OWRITE);
-/**/ print("argc=%d\n", argc);
+/* print("argc=%d\n", argc);
for(fd = 0; fd < argc; fd++)
print("%s ", argv[fd]);
print("\n");/**/
M port/devcons.c => port/devcons.c +27 -11
@@ 484,12 484,12 @@ consclose(Chan *c)
long
consread(Chan *c, void *buf, long n, ulong offset)
{
- int ch, i, j, k, id;
+ int ch, i, k, id;
ulong l;
char *cbuf = buf;
- char *chal;
+ char *chal, *b, *bp;
Block *cb;
- char tmp[6*NUMSIZE], xbuf[512];
+ char tmp[128]; /* must be >= 6*NUMSIZE */
Mach *mp;
if(n <= 0)
@@ 648,24 648,40 @@ consread(Chan *c, void *buf, long n, ulong offset)
return readnum(offset, buf, n, HZ, NUMSIZE);
case Qsysstat:
- j = 0;
- xbuf[0] = 0;
+ b = smalloc(conf.nmach*(NUMSIZE*8+1) + 1); /* +1 for NUL */
+ bp = b;
for(id = 0; id < 32; id++) {
if(active.machs & (1<<id)) {
mp = MACHP(id);
- j += sprint(&xbuf[j], "%d %d %d %d %d %d %d %d\n",
- id, mp->cs, mp->intr, mp->syscall, mp->pfault,
- mp->tlbfault, mp->tlbpurge, mp->load);
+ readnum(0, bp, NUMSIZE, id, NUMSIZE);
+ bp += NUMSIZE;
+ readnum(0, bp, NUMSIZE, mp->cs, NUMSIZE);
+ bp += NUMSIZE;
+ readnum(0, bp, NUMSIZE, mp->intr, NUMSIZE);
+ bp += NUMSIZE;
+ readnum(0, bp, NUMSIZE, mp->syscall, NUMSIZE);
+ bp += NUMSIZE;
+ readnum(0, bp, NUMSIZE, mp->pfault, NUMSIZE);
+ bp += NUMSIZE;
+ readnum(0, bp, NUMSIZE, mp->tlbfault, NUMSIZE);
+ bp += NUMSIZE;
+ readnum(0, bp, NUMSIZE, mp->tlbpurge, NUMSIZE);
+ bp += NUMSIZE;
+ readnum(0, bp, NUMSIZE, mp->load, NUMSIZE);
+ bp += NUMSIZE;
+ *bp++ = '\n';
}
}
- return readstr(offset, buf, n, xbuf);
+ n = readstr(offset, buf, n, b);
+ free(b);
+ return n;
case Qswap:
- sprint(xbuf, "%d/%d memory %d/%d swap\n",
+ sprint(tmp, "%d/%d memory %d/%d swap\n",
palloc.user-palloc.freecount, palloc.user,
conf.nswap-swapalloc.free, conf.nswap);
- return readstr(offset, buf, n, xbuf);
+ return readstr(offset, buf, n, tmp);
case Qsysname:
return readstr(offset, buf, n, sysname);
M port/devkprof.c => port/devkprof.c +15 -10
@@ 36,26 36,31 @@ void kproftimer(ulong);
void
kprofreset(void)
{
- ulong n;
-
- kprof.minpc = KTZERO;
- kprof.maxpc = (ulong)etext;
- kprof.nbuf = (kprof.maxpc-kprof.minpc) >> LRES;
- n = kprof.nbuf*SZ;
- kprof.buf = xalloc(n);
- kproftab[0].length = n;
- if(SZ != sizeof kprof.buf[0])
- panic("kprof size");
}
void
kprofinit(void)
{
+ if(SZ != sizeof kprof.buf[0])
+ panic("kprof size");
}
Chan *
kprofattach(char *spec)
{
+ ulong n;
+
+ /* allocate when first used */
+ kprof.minpc = KTZERO;
+ kprof.maxpc = (ulong)etext;
+ kprof.nbuf = (kprof.maxpc-kprof.minpc) >> LRES;
+ n = kprof.nbuf*SZ;
+ if(kprof.buf == 0) {
+ kprof.buf = xalloc(n);
+ if(kprof.buf == 0)
+ error(Enomem);
+ }
+ kproftab[0].length = n;
return devattach('T', spec);
}
Chan *
M port/devproc.c => port/devproc.c +10 -1
@@ 20,7 20,7 @@ enum{
Qtext,
};
-#define STATSIZE (2*NAMELEN+12+6*12)
+#define STATSIZE (2*NAMELEN+12+7*12)
Dirtab procdir[]={
"ctl", {Qctl}, 0, 0000,
"mem", {Qmem}, 0, 0000,
@@ 233,6 233,7 @@ procread(Chan *c, void *va, long n, ulong offset)
Proc *p;
Page *pg;
KMap *k;
+ Segment *s;
int i, j;
long l;
User *up;
@@ 345,6 346,14 @@ if((p->state < Dead) || (p->state > Rendezvous))
l = TK2MS(l);
readnum(0, statbuf+j+NUMSIZE*i, NUMSIZE, l, NUMSIZE);
}
+ /* ignore stack, which is mostly non-existent */
+ l = 0;
+ for(i=1; i<NSEG; i++){
+ s = p->seg[i];
+ if(s)
+ l += s->top - s->base;
+ }
+ readnum(0, statbuf+j+NUMSIZE*6, NUMSIZE, l>>10, NUMSIZE);
memmove(a, statbuf+offset, n);
return n;
M ss/io.h => ss/io.h +3 -3
@@ 1,6 1,6 @@
#define FRAMEBUF 0xFE000000
-#define FRAMEBUFID 0xFE000000
-#define DISPLAYRAM 0xFE800000
+#define FRAMEBUFID (FRAMEBUF+0x000000)
+#define DISPLAYRAM (FRAMEBUF+0x800000)
#define EPROM 0xF6000000
#define CLOCK 0xF3000000
#define CLOCKFREQ 1000000 /* one microsecond increments */
@@ 36,7 36,7 @@ struct SCCdev
#define NVWRITE (2048-8-32) /* minus RTC, minus ID prom */
/*
- * real-time clock (every 4th location)
+ * real-time clock
*/
typedef struct RTCdev RTCdev;
struct RTCdev
M ss/screen.c => ss/screen.c +19 -16
@@ 27,11 27,10 @@ void (*kprofp)(ulong);
typedef struct DAC DAC;
struct DAC
{
- uchar pad[16];
- ulong dacaddr; /* DAC address register */
- ulong daccolor; /* DAC color palette */
- ulong daccntrl; /* DAC control register */
- ulong dacovrl; /* DAC overlay palette */
+uchar pad[3]; uchar dacaddr; /* DAC address register */
+uchar pad[3]; uchar daccolor; /* DAC color palette */
+uchar pad[3]; uchar daccntrl; /* DAC control register */
+uchar pad[3]; uchar dacovrl; /* DAC overlay palette */
}*dac;
GBitmap gscreen;
@@ 45,7 44,7 @@ struct screens
ulong dacaddr;
}screens[] = {
{ "bwtwo", 1152, 900, 0, 0x400000 },
- { "cgsix", 1152, 900, 3, 0x400000 },
+ { "cgsix", 1152, 900, 3, 0x200000 },
{ "cgthree", 1152, 900, 3, 0x200000 },
0
};
@@ 85,7 84,7 @@ screeninit(char *str)
out.pos.x = MINX;
out.pos.y = 0;
out.bwid = defont0.info[' '].width;
- dac = (DAC*)kmappa(FRAMEBUF+s->dacaddr, PTENOCACHE|PTEIO);
+ dac = (DAC*)kmappa(FRAMEBUF+s->dacaddr, PTENOCACHE|PTEMAINMEM);
if(gscreen.ldepth == 3){
havecol = 0;
if(havecol) {
@@ 114,13 113,12 @@ dac->daccntrl = 0x40;
dac->dacaddr = 7;
dac->daccntrl = 0x00;
- dac->dacaddr = 0;
- for(i=0; i<252; i+=4) {
- dac->daccolor = ~rep(i,8);
- dac->daccolor = ~rep(i,8);
- dac->daccolor = ~rep(i,8);
+ for(i=0; i<255; i++) {
+ dac->dacaddr = i;
+ dac->daccolor = i;
+ dac->daccolor = i;
+ dac->daccolor = i;
}
-
/*
for(i = 0; i<256; i++)
setcolor(i, ~rep(i,8), ~rep(i,8), ~rep(i,8));
@@ 133,9 131,14 @@ void
mapdump(void)
{
int i;
- dac->dacaddr = 0;
- for(i=0; i<100; i++)
- print("%lux ", dac->daccolor);
+ for(i=0; i<100; i++) {
+ dac->dacaddr = i;
+ dac->daccolor = i;
+ dac->daccolor = i;
+ dac->daccolor = i;
+ dac->dacaddr = i;
+ print("%ux.%ux.%ux ", dac->daccolor, dac->daccolor, dac->daccolor);
+ }
}
void