~kris/9p

9hist

ec592c20aa24e7df535f0fcb7e2c2daa83a01a68 — David du Colombier 27 years ago 32932a5
Plan 9 from Bell Labs 1999-08-25
5 files changed, 56 insertions(+), 50 deletions(-)

M carrera/ns16552.h
M ip/icmp.c
M ip/tcp.c
M port/alloc.c
M port/devcons.c
M carrera/ns16552.h => carrera/ns16552.h +1 -27
@@ 1,4 1,5 @@
#define outb(p, ch)			*(uchar*)((p)^7) = ch	
#define inb(p)	*(uchar*)((p)^7)
#define uartwrreg(u,r,v)	outb((u)->port + (r), (u)->sticky[r] | (v))
#define uartrdreg(u,r)		*(uchar*)(((u)->port + (r))^7)



@@ 16,30 17,3 @@ ns16552install(void)
	ns16552setup(Uart1, UartFREQ, "eia0", Ns550);
}

#define RD(r)	(*(uchar*)((Uart1+r)^7))
static void
ns16552iputc(char c)
{
	while((RD(5) & (1<<5)) == 0)
		;
	*(uchar*)(Uart1^7) = c;
	while((RD(5) & (1<<5)) == 0)
		;
}

int
iprint(char *fmt, ...)
{
	int n, i;
	char buf[512];
	va_list arg;

	va_start(arg, fmt);
	n = doprint(buf, buf+sizeof(buf), fmt, arg) - buf;
	va_end(arg);

	for(i = 0; i < n; i++)
		ns16552iputc(buf[i]);
	
	return n;
}

M ip/icmp.c => ip/icmp.c +3 -1
@@ 255,7 255,9 @@ goticmpkt(Proto *icmp, Block *bp)
		s = *c;
		if(s->lport == recid)
		if(ipcmp(s->raddr, dst) == 0){
			qpass(s->rq, bp);
			bp = concatblock(bp);
			if(bp != nil)
				qpass(s->rq, bp);
			return;
		}
	}

M ip/tcp.c => ip/tcp.c +6 -3
@@ 801,16 801,19 @@ ntohtcp(Tcp *tcph, Block **bpp)

	optr = h->tcpopt;
	for(i = TCP_HDRSIZE; i < hdrlen;) {
		switch(*optr++) {
		switch(optr[i]) {
		default:
			i += optr[i+1];
			break;
		case EOLOPT:
			return hdrlen;
		case NOOPOPT:
			i++;
			break;
		case MSSOPT:
			optlen = *optr++;
			optlen = optr[i+1];
			if(optlen == MSS_LENGTH)
				tcph->mss = nhgets(optr);
				tcph->mss = nhgets(optr+2);
			i += optlen;
			break;
		}

M port/alloc.c => port/alloc.c +40 -19
@@ 4,13 4,20 @@
#include	"dat.h"
#include	"fns.h"
#include	"error.h"
#include	"pool.h"
#include	<pool.h>

static void poolprint(Pool*, char*, ...);
static void ppanic(Pool*, char*, ...);
static void plock(Pool*);
static void punlock(Pool*);

typedef struct Private	Private;
struct Private {
	Lock		lk;
	char		msg[128];	/* a rock for messages to be printed at unlock */
};

static Private pmainpriv;
static Pool pmainmem = {
	.name=	"Main",
	.maxsize=	4*1024*1024,


@@ 24,8 31,11 @@ static Pool pmainmem = {
	.unlock=	punlock,
	.print=	poolprint,
	.panic=	ppanic,

	.private=	&pmainpriv,
};

static Private pimagpriv;
static Pool pimagmem = {
	.name=	"Image",
	.maxsize=	16*1024*1024,


@@ 39,6 49,8 @@ static Pool pimagmem = {
	.unlock=	punlock,
	.print=	poolprint,
	.panic=	ppanic,

	.private=	&pimagpriv,
};

Pool*	mainmem = &pmainmem;


@@ 53,15 65,17 @@ poolprint(Pool *p, char *fmt, ...)
{
	va_list v;
	int n;
	Private *pv;

	pv = p->private;
	va_start(v, fmt);
	n = doprint(p->msg, p->msg+sizeof p->msg, fmt, v)-p->msg;
	n = doprint(pv->msg, pv->msg+sizeof pv->msg, fmt, v)-pv->msg;
	va_end(v);
	if(n >= sizeof p->msg);
		n = sizeof(p->msg)-1;
	if(n >= sizeof pv->msg);
		n = sizeof(pv->msg)-1;
	if(n < 0)
		n = 0;
	p->msg[n] = 0;
	pv->msg[n] = 0;
}

static void


@@ 69,39 83,46 @@ ppanic(Pool *p, char *fmt, ...)
{
	va_list v;
	int n;
	Private *pv;

	pv = p->private;
	va_start(v, fmt);
	n = doprint(p->msg, p->msg+sizeof p->msg, fmt, v)-p->msg;
	n = doprint(pv->msg, pv->msg+sizeof pv->msg, fmt, v)-pv->msg;
	va_end(v);
	if(n >= sizeof p->msg);
		n = sizeof(p->msg)-1;
	if(n >= sizeof pv->msg);
		n = sizeof(pv->msg)-1;
	if(n < 0)
		n = 0;
	p->msg[n] = 0;
	iunlock(&p->lk);
	panic("%s", p->msg);
	pv->msg[n] = 0;
	iunlock(&pv->lk);
	panic("%s", pv->msg);
}

static void
plock(Pool *p)
{
	ilock(&p->lk);
	p->msg[0] = 0;
	Private *pv;

	pv = p->private;
	ilock(&pv->lk);
	pv->msg[0] = 0;
}

static void
punlock(Pool *p)
{
	char msg[sizeof p->msg];
	Private *pv;
	char msg[sizeof pv->msg];

	if(p->msg[0] == 0){
		iunlock(&p->lk);
	pv = p->private;
	if(pv->msg[0] == 0){
		iunlock(&pv->lk);
		return;
	}

	memmove(msg, p->msg, sizeof msg);
	iunlock(&p->lk);
	print("%.*s", sizeof p->msg, msg);
	memmove(msg, pv->msg, sizeof msg);
	iunlock(&pv->lk);
	print("%.*s", sizeof pv->msg, msg);
}

void

M port/devcons.c => port/devcons.c +6 -0
@@ 193,6 193,12 @@ panic(char *fmt, ...)
	exit(1);
}

void
_assert(char *fmt)
{
	panic("assert failed: %s", fmt);
}

int
pprint(char *fmt, ...)
{