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

2002/0109/pc/uarti8250.c (diff list | history)

2001/1201/sys/src/9/pc/uarti8250.c:165,1712002/0109/sys/src/9/pc/uarti8250.c:165,171 (short | long | prev | next)
Bug fix: print format. + 2 HW bugs
HW bug fix: use sticky Ier.
HW bug fix: try to unstick i8250.
rsc Fri Mar 4 12:44:25 2005
2001/0527    
	ier = ctlr->sticky[Ier]; 
	lcr = ctlr->sticky[Lcr]; 
	snprint(p, READSTR, 
		"b%d c%d d%d e%d l%d m%d p%c r%d s%d i%d\n" 
2002/0109    
		"b%d c%d d%d e%d l%d m%d p%c r%d s%d i%d ier=%ux\n" 
2001/0527    
		"dev(%d) type(%d) framing(%d) overruns(%d)%s%s%s%s\n", 
 
		uart->baud, 
2001/1201/sys/src/9/pc/uarti8250.c:178,1832002/0109/sys/src/9/pc/uarti8250.c:178,184
2001/0527    
		(mcr & Rts) != 0, 
		(lcr & Stb) ? 2: 1, 
		ctlr->fena, 
2002/0109    
		ier, 
2001/0527    
 
		uart->dev, 
		uart->type, 
2001/1201/sys/src/9/pc/uarti8250.c:269,2812002/0109/sys/src/9/pc/uarti8250.c:270,282
2001/0527    
	ilock(&uart->tlock); 
	if(on){ 
		ctlr->sticky[Ier] |= Ems; 
		csr8w(ctlr, Ier, 0); 
2002/0109    
		csr8w(ctlr, Ier, ctlr->sticky[Ier]); 
2001/0527    
		uart->modem = 1; 
		uart->cts = csr8r(ctlr, Msr) & Cts; 
	} 
	else{ 
		ctlr->sticky[Ier] &= ~Ems; 
		csr8w(ctlr, Ier, 0); 
2002/0109    
		csr8w(ctlr, Ier, ctlr->sticky[Ier]); 
2001/0527    
		uart->modem = 0; 
		uart->cts = 1; 
	} 
2001/1201/sys/src/9/pc/uarti8250.c:525,5312002/0109/sys/src/9/pc/uarti8250.c:526,532
2001/0527    
 
	ctlr = uart->regs; 
	ctlr->sticky[Ier] = 0; 
	csr8w(ctlr, Ier, 0); 
2002/0109    
	csr8w(ctlr, Ier, ctlr->sticky[Ier]); 
2001/0922    
 
	if(ctlr->iena != 0){ 
		intrdisable(ctlr->irq, i8250interrupt, uart, ctlr->tbdf, uart->name); 
2001/1201/sys/src/9/pc/uarti8250.c:562,5672002/0109/sys/src/9/pc/uarti8250.c:563,580
2001/0527    
 
	(*uart->phys->dtr)(uart, 1); 
	(*uart->phys->rts)(uart, 1); 
2002/0109    
 
 
	/* 
	 * During startup, the i8259 interrupt controler is reset. 
	 * This may result in a lost interrupt from the i8250 uart. 
	 * The i8250 thinks the interrupt is still outstanding and does not 
	 * generate any further interrupts. To work around this we call the 
	 * interrupt handler to clear any pending inerrupt events. 
	 * Note this must be donw after setting Ier. 
	 */ 
	if(ie) 
		i8250interrupt(nil, uart); 
2001/0922    
} 
 
void* 


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