plan 9 kernel history: overview | file list | diff list

1992/0411/pc/devether.c (diff list | history)

1992/0410/sys/src/9/pc/devether.c:26,321992/0411/sys/src/9/pc/devether.c:26,32 (short | long | prev | next)
1992/0403    
 
enum { 
	IObase		= 0x360, 
1992/0410    
	RAMbase		= 0xD0000, 
1992/0411    
	RAMbase		= 0xC8000, 
1992/0404    
	RAMsize		= 8*1024, 
	BUFsize		= 256, 
1992/0403    
 
1992/0410/sys/src/9/pc/devether.c:143,1481992/0411/sys/src/9/pc/devether.c:143,172
1992/0403    
}; 
static Ctlr ctlr[Nctlr]; 
 
1992/0411    
static Etherpkt txpkt; 
 
static void 
xmemmove(void *to, void *from, long len) 
{ 
	ushort *t, *f; 
	int s; 
	Ctlr *cp = &ctlr[0]; 
	uchar reg; 
 
	t = to; 
	f = from; 
	len = (len+1)/2; 
	s = splhi(); 
	reg = inb(cp->iobase+0x05); 
	outb(cp->iobase+Imr, 0); 
	outb(cp->iobase+0x05, 0x80|reg); 
	while(len--) 
		*t++ = *f++; 
	outb(cp->iobase+0x05, reg); 
	outb(cp->iobase+Imr, 0x1F); 
	splx(s); 
} 
 
1992/0407    
static int 
isxfree(void *arg) 
{ 
1992/0410/sys/src/9/pc/devether.c:208,2131992/0411/sys/src/9/pc/devether.c:232,238
1992/0403    
	 */ 
1992/0407    
	qlock(&cp->xl); 
1992/0403    
	if(waserror()){ 
1992/0411    
		freeb(bp); 
1992/0407    
		qunlock(&cp->xl); 
1992/0403    
		nexterror(); 
	} 
1992/0410/sys/src/9/pc/devether.c:215,2221992/0411/sys/src/9/pc/devether.c:240,249
1992/0403    
	/* 
1992/0407    
	 * Wait till we get an output buffer 
1992/0403    
	 */ 
1992/0407    
	sleep(&cp->xr, isxfree, cp); 
	p = cp->xpkt; 
1992/0411    
	tsleep(&cp->xr, isxfree, cp, 1000); 
	if(isxfree(cp) == 0) 
		print("Tx wedged\n"); 
	p = &txpkt; 
1992/0403    
 
	/* 
	 * copy message into buffer 
1992/0410/sys/src/9/pc/devether.c:244,2491992/0411/sys/src/9/pc/devether.c:271,277
1992/0407    
	 * give packet a local address 
1992/0403    
	 */ 
1992/0407    
	memmove(p->s, cp->ea, sizeof(cp->ea)); 
1992/0411    
	xmemmove(cp->xpkt, p, len); 
1992/0403    
 
	/* 
1992/0407    
	 * start the transmission 
1992/0410/sys/src/9/pc/devether.c:445,4621992/0411/sys/src/9/pc/devether.c:473,488
1992/0403    
{ 
1992/0404    
	Ctlr *cp = &ctlr[0]; 
1992/0403    
	int i; 
1992/0409    
	uchar msr; 
1992/0411    
	uchar reg; 
1992/0403    
 
1992/0404    
	cp->iobase = IObase; 
1992/0409    
	msr = 0x40|inb(cp->iobase); 
	outb(cp->iobase, msr); 
1992/0410    
msr=0x40|inb(cp->iobase+0x05); 
outb(cp->iobase+0x05, msr); 
1992/0411    
	reg = 0x40|inb(cp->iobase); 
	outb(cp->iobase, reg); 
	reg = 0x40|inb(cp->iobase+0x05); 
	outb(cp->iobase+0x05, reg); 
1992/0409    
for(i = 0; i < 0x10; i++) 
    print("#%2.2ux ", inb(cp->iobase+i)); 
print("\n"); 
1992/0410    
msr=0x40|inb(cp->iobase+0x05); 
outb(cp->iobase+0x05, msr); 
1992/0404    
	for(i = 0; i < sizeof(cp->ea); i++) 
		cp->ea[i] = inb(cp->iobase+EA+i); 
1992/0408    
	init(cp); 
1992/0410/sys/src/9/pc/devether.c:512,5201992/0411/sys/src/9/pc/devether.c:538,546
1992/0404    
		} 
		if(waserror() == 0){ 
1992/0410    
			bp = allocb(len0+len1); 
			memmove(bp->rptr, d0, len0); 
1992/0411    
			xmemmove(bp->rptr, d0, len0); 
1992/0410    
			if(len1) 
				memmove(bp->rptr+len0, d1, len1); 
1992/0411    
				xmemmove(bp->rptr+len0, d1, len1); 
1992/0410    
			bp->wptr += len0+len1; 
1992/0404    
			bp->flags |= S_DELIM; 
1992/0410    
			PUTNEXT(tp->q, bp); 
1992/0410/sys/src/9/pc/devether.c:683,6891992/0411/sys/src/9/pc/devether.c:709,715
1992/0409    
} 
 
void 
etherdump(void) 
1992/0411    
consdebug(void) 
1992/0409    
{ 
	Ctlr *cp = &ctlr[0]; 
	uchar bnry, curr, isr; 


source code copyright © 1990-2005 Lucent Technologies; see license
Plan 9 distribution
comments to russ cox (rsc@swtch.com)