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

1991/0807/pc/devuart.c (diff list | history)

1991/0806/sys/src/9/pc/devuart.c:51,561991/0807/sys/src/9/pc/devuart.c:51,57 (short | long | prev | next)
1991/0801    
	int	port; 
1991/0804    
	uchar	sticky[8];	/* sticky write register values */ 
1991/0801    
	int	printing;	/* true if printing */ 
1991/0807    
	int	enabled; 
1991/0801    
 
	/* console interface */ 
	int	nostream;	/* can't use the stream interface */ 
1991/0806/sys/src/9/pc/devuart.c:185,1911991/0807/sys/src/9/pc/devuart.c:186,191
1991/0801    
	puts(cq, s, n); 
	if(up->printing == 0){ 
		ch = getc(cq); 
print("<start %2.2ux>", ch);/**/ 
		if(ch >= 0){ 
			up->printing = 1; 
1991/0803    
			for(tries = 0; tries<10000 && !(uartrdreg(up, Lstat)&Outready); 
1991/0806/sys/src/9/pc/devuart.c:214,2201991/0807/sys/src/9/pc/devuart.c:214,219
1991/0806    
	cq = up->iq; 
	while(l & Inready){ 
		ch = uartrdreg(up, Data) & 0xff; 
print("<get %2.2ux>", ch); 
		if(cq->putc) 
			(*cq->putc)(cq, ch); 
		else { 
1991/0806/sys/src/9/pc/devuart.c:232,2381991/0807/sys/src/9/pc/devuart.c:231,236
1991/0806    
		cq = up->oq; 
		lock(cq); 
		ch = getc(cq); 
print("<put %2.2ux>", ch);/**/ 
		if(ch < 0){ 
			up->printing = 0; 
			wakeup(&cq->r); 
1991/0806/sys/src/9/pc/devuart.c:244,2501991/0807/sys/src/9/pc/devuart.c:242,249
1991/0801    
void 
uartintr0(Ureg *ur) 
{ 
	uartintr(&uart[0]); 
1991/0807    
	if(uart[0].enabled) 
		uartintr(&uart[0]); 
1991/0801    
} 
void 
uartintr1(Ureg *ur) 
1991/0806/sys/src/9/pc/devuart.c:261,2661991/0807/sys/src/9/pc/devuart.c:260,273
1991/0806    
	int x; 
 
1991/0801    
	/* 
1991/0807    
	 *  turn on power to the port 
	 */ 
	if(up == &uart[0]){ 
		if(serial(0) < 0) 
			print("can't turn on serial port power\n"); 
	} 
 
	/* 
1991/0801    
	 *  set up i/o routines 
	 */ 
	if(up->oq){ 
1991/0806/sys/src/9/pc/devuart.c:272,2771991/0807/sys/src/9/pc/devuart.c:279,285
1991/0801    
		up->iq->ptr = up; 
		up->sticky[Iena] |= Ircv; 
	} 
1991/0807    
	up->enabled = 1; 
1991/0803    
	up->sticky[Iena] |= (1<<2) | (1<<3); 
1991/0801    
 
	/* 
1991/0806/sys/src/9/pc/devuart.c:284,2971991/0807/sys/src/9/pc/devuart.c:292,324
1991/0801    
	 */ 
	uartdtr(up, 1); 
	uartrts(up, 1); 
1991/0807    
} 
1991/0806    
 
1991/0807    
/* 
 *  turn off the uart 
 */ 
uartdisable(Uart *up) 
{ 
 
1991/0806    
	/* 
	 *  read interrupt status till there aren't any pending 
1991/0807    
 	 *  turn off interrupts 
1991/0806    
	 */ 
	while(uartrdreg(up, Istat) != 1){ 
		x = splhi(); 
		uartintr(up); 
		splx(x); 
1991/0807    
	up->sticky[Iena] = 0; 
	uartwrreg(up, Iena, 0); 
 
	/* 
	 *  turn off DTR and RTS 
	 */ 
	uartdtr(up, 0); 
	uartrts(up, 0); 
	up->enabled = 0; 
 
	/* 
	 *  turn off power 
	 */ 
	if(up == &uart[0]){ 
		if(serial(1) < 0) 
			print("can't turn off serial power\n"); 
1991/0806    
	} 
1991/0801    
} 
 
1991/0806/sys/src/9/pc/devuart.c:309,3181991/0807/sys/src/9/pc/devuart.c:336,341
1991/0801    
	up->iq = iq; 
	uartenable(up); 
	uartsetbaud(up, baud); 
1991/0806    
	if(port == 0){ 
		if(serial(0) < 0) 
			print("can't turn on serial port power\n"); 
	} 
1991/0801    
 
	if(iq){ 
		/* 
1991/0806/sys/src/9/pc/devuart.c:381,3881991/0807/sys/src/9/pc/devuart.c:404,409
1991/0806    
 
1991/0801    
	up = &uart[s->id]; 
1991/0806    
	uartenable(up); 
	if(s->id==0 && serial(0)<0) 
		print("can't turn on serial power\n"); 
 
1991/0801    
	qlock(up); 
	up->wq = WR(q); 
1991/0806/sys/src/9/pc/devuart.c:407,4121991/0807/sys/src/9/pc/devuart.c:428,435
1991/0801    
{ 
	Uart *up = q->ptr; 
 
1991/0807    
	uartdisable(up); 
 
1991/0801    
	qlock(up); 
	kprint("uartstclose: q=0x%ux, id=%d\n", q, up-uart); 
	up->wq = 0; 
1991/0806/sys/src/9/pc/devuart.c:414,4221991/0807/sys/src/9/pc/devuart.c:437,442
1991/0801    
	WR(q)->ptr = 0; 
	RD(q)->ptr = 0; 
	qunlock(up); 
1991/0806    
                 
	if(serial(1) < 0) 
		print("can't turn off serial power\n"); 
1991/0801    
} 
 
static void 


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