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

1999/0123/mpc/devuart.c (diff list | history)

1999/0122/sys/src/9/mpc/devuart.c:297,3031999/0123/sys/src/9/mpc/devuart.c:297,303 (short | long | prev | next)
1999/0122    
	smc->smcm = BSY|RXB|TXB;	/* enable all possible interrupts */ 
	up->smc = smc; 
	smc->smcmr = ((1+8+1-1)<<11)|(2<<4);	/* 8-bit, 1 stop, no parity; UART mode */ 
//	intrenable(VectorCPIC+4, smcuintr, up, BUSUNKNOWN); 
1999/0123    
	intrenable(VectorCPIC+4, smcuintr, up, BUSUNKNOWN); 
1999/0122    
	smc->smcmr |= 3;	/* enable rx/tx */ 
} 
 
1999/0122/sys/src/9/mpc/devuart.c:763,7721999/0123/sys/src/9/mpc/devuart.c:763,774
1999/0122    
txstart(Uart *p) 
{ 
	Block *b; 
	int n, flags; 
1999/0123    
	int n, flags, s; 
1999/0122    
 
1999/0123    
 
1999/0122    
	if(!p->cts || p->blocked || p->txb->status & BDReady) 
		return; 
1999/0123    
 
1999/0122    
	if((b = p->outb) == nil){ 
		if((b = qget(p->oq)) == nil) 
			return; 
1999/0122/sys/src/9/mpc/devuart.c:785,7921999/0123/sys/src/9/mpc/devuart.c:787,794
1999/0122    
		} 
	} 
	n = BLEN(b); 
	if(n <= 0) 
		print("txstart: 0\n"); 
1999/0123    
//	if(n <= 0) 
//		print("txstart: 0\n"); 
1999/0122    
	if(p->bpc > 8){ 
		/* half-word alignment and length if chars are long */ 
		if(PADDR(b->rp)&1){	/* must be even if chars are long */ 
1999/0122/sys/src/9/mpc/devuart.c:810,8201999/0123/sys/src/9/mpc/devuart.c:812,819
1999/0122    
	p->txb->addr = PADDR(b->rp); 
	p->txb->length = n; 
	eieio(); 
	p->txb->status = (p->txb->status & BDWrap) | flags | BDReady/*|BDInt */; 
1999/0123    
	p->txb->status = (p->txb->status & BDWrap) | flags | BDReady | BDInt; 
1999/0122    
	eieio(); 
                 
	while(p->txb->status & BDReady) 
		flash(); 
} 
 
/* 
1999/0122/sys/src/9/mpc/devuart.c:991,10011999/0123/sys/src/9/mpc/devuart.c:990,1000
1999/0122    
	int dokick; 
	BD *bd; 
	Block *b; 
                 
	if(events & BSY) 
		p->overrun++; 
	p->interrupts++; 
	dokick = 0; 
1999/0123    
/* 
1999/0122    
	while(p->rxb != nil && ((bd = &p->rxb[p->rdrx])->status & BDEmpty) == 0){ 
		if(p->mode) 
			framedinput(p, bd); 
1999/0122/sys/src/9/mpc/devuart.c:1006,10111999/0123/sys/src/9/mpc/devuart.c:1005,1011
1999/0122    
		bd->status = (bd->status & BDWrap) | BDEmpty|BDInt; 
		p->rdrx ^= 1; 
	} 
1999/0123    
*/ 
1999/0122    
	if((bd = p->txb) != nil){ 
		if((bd->status & BDReady) == 0){ 
			ilock(&p->plock); 


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