~kris/9p

9hist

51f2d9ca33976fa7f3d06790306bc654b3b6a0df — David du Colombier 25 years ago 15415d2
Plan 9 from Bell Labs 2000-10-31
3 files changed, 85 insertions(+), 12 deletions(-)

A bitsy/devflash.c
M bitsy/devµc.c
M bitsy/trap.c
A bitsy/devflash.c => bitsy/devflash.c +17 -0
@@ 0,0 1,17 @@
#include	"u.h"
#include	"../port/lib.h"
#include	"mem.h"
#include	"dat.h"
#include	"fns.h"
#include	"io.h"
#include	"../port/error.h"

/* flash partitions */
typedef struct FlashPart FlashPart;
struct FlashPart
{
	QLock;
	char	name[NAMELEN];
	ulong	start;		/* byte offsets */
	ulong	end;
};

M bitsy/devµc.c => bitsy/devµc.c +22 -4
@@ 10,6 10,7 @@ enum{
	Qbacklight = 1,
	Qbattery,
	Qbuttons,
	Qkbdin,
	Qled,
	Qversion,



@@ 34,6 35,7 @@ Dirtab µcdir[]={
	"backlight",	{ Qbacklight, 0 },	0,	0664,
	"battery",	{ Qbattery, 0 },	0,	0664,
	"buttons",	{ Qbuttons, 0 },	0,	0664,
	"kbdin",	{ Qkbdin, 0 },		0,	0664,
	"led",		{ Qled, 0 },		0,	0664,
	"version",	{ Qversion, 0 },	0,	0664,
};


@@ 71,6 73,7 @@ int
	int i, len, b, up;
	uchar cksum;
	uchar *p;
	static int samseq;

	if(ctlr.n > sizeof(ctlr.buf))
		panic("µcputc");


@@ 130,10 133,13 @@ int
			}
			break;
		case BLtouch:
			if(len == 4)
				pentrackxy((p[0]<<8)|p[1], (p[2]<<8)|p[3]);
			else
			if(len == 4) {
				if (samseq++ > 10)
					pentrackxy((p[0]<<8)|p[1], (p[2]<<8)|p[3]);
			} else {
				samseq = 0;
				pentrackxy(-1, -1);
			}
			break;
		case BLled:
			wakeup(&ctlr.r);


@@ 302,7 308,9 @@ static long
{
	Cmdbuf *cmd;
	uchar data[16];
	int i;
	char str[64];
	int i, j;
	Rune r;

	if(off != 0)
		error(Ebadarg);


@@ 314,6 322,16 @@ static long
		data[i] = atoi(cmd->f[i]);

	switch(c->qid.path){
	case Qkbdin:
		if(n >= sizeof(str))
			n = sizeof(str)-1;
		memmove(str, a, n);
		str[n] = 0;
		for(i = 0; i < n; i += j){
          		j = chartorune(&r, &str[i]);
			kbdputc(nil, r);
		}
		break;
	case Qled:
		sendmsgwithack(BLled, data, cmd->nf);
		break;

M bitsy/trap.c => bitsy/trap.c +46 -8
@@ 91,7 91,7 @@ warnregs(Ureg *ur, char *tag)
	char *p;

	p = seprint(buf, e, "%s:\n", tag);
	p = seprint(p, e, "type %.8lux psr %.8lux pc %.8lux\n",
	p = seprint(p, e, "type 0x%.8lux psr 0x%.8lux pc 0x%.8lux\n",
		ur->type, ur->psr, ur->pc);
	p = seprint(p, e, "r0  0x%.8lux r1  0x%.8lux r2  0x%.8lux r3  0x%.8lux\n",
		ur->r0, ur->r1, ur->r2, ur->r3);


@@ 283,10 283,9 @@ trap(Ureg *ureg)
	}

out:
	if(user && (up->procctl || up->nnote)){
		splhi();
	splhi();
	if(user && (up->procctl || up->nnote))
		notify(ureg);
	}
}

/*


@@ 358,10 357,9 @@ syscall(Ureg* ureg)
	if(scallnr == NOTED)
		noted(ureg, *(ulong*)(sp+BY2WD));

	if(scallnr != RFORK && (up->procctl || up->nnote)){
		splhi();
	splhi();
	if(scallnr != RFORK && (up->procctl || up->nnote))
		notify(ureg);
	}
}

/*


@@ 617,11 615,51 @@ execregs(ulong entry, ulong ssize, ulong nargs)
}

/*
 *  dump the processor stack for this process
 * Fill in enough of Ureg to get a stack trace, and call a function.
 * Used by debugging interface rdb.
 */
void
callwithureg(void (*fn)(Ureg*))
{
	Ureg ureg;
	ureg.pc = getcallerpc(&fn);
	ureg.sp = (ulong)&fn;
	fn(&ureg);
}

static void
_dumpstack(Ureg *ureg)
{
	ulong l, v, i;
	ulong *p;
	extern ulong etext;

	if(up == 0)
		return;

	print("ktrace /kernel/path %.8lux %.8lux\n", ureg->pc, ureg->sp);
	i = 0;
	for(l=(ulong)&l; l<(ulong)(up->kstack+KSTACK); l+=4){
		v = *(ulong*)l;
		if(KTZERO < v && v < (ulong)&etext && (v&3)==0){
			v -= 4;
			p = (ulong*)v;
			if((*p & 0x0f000000) == 0x0b000000)
				print("%.8lux=%.8lux ", l, v);
		}
		if(i == 4){
			i = 0;
			print("\n");
		}
	}
	if(i)
		print("\n");
}

void
dumpstack(void)
{
	callwithureg(_dumpstack);
}

/*