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

1990/0725/port/sturp.c (diff list | history)

1990/0722/sys/src/9/port/sturp.c:68,731990/0725/sys/src/9/port/sturp.c:68,79 (short | long | prev | next)
1990/0312    
#define NEXT(x) (((x)+1)&Nmask) 
1990/0227    
 
/* 
1990/0725    
 *  Alarm for urptiming 
 */ 
Alarm	*urptiming; 
Lock	urptlock; 
 
/* 
1990/0227    
 *  Protocol control bytes 
 */ 
#define	SEQ	0010		/* sequence number, ends trailers */ 
1990/0722/sys/src/9/port/sturp.c:116,1211990/0725/sys/src/9/port/sturp.c:122,128
1990/0227    
static void	initoutput(Urp*, int); 
static void	initinput(Urp*, int); 
1990/0312    
static void	urpkproc(void *arg); 
1990/0725    
static void	urptimer(Alarm*); 
1990/0629    
static void	urpvomit(char*, Urp*); 
1990/0227    
 
1990/0312    
Qinfo urpinfo = { urpciput, urpoput, urpopen, urpclose, "urp" }; 
1990/0722/sys/src/9/port/sturp.c:165,1701990/0725/sys/src/9/port/sturp.c:172,188
1990/0722    
		sprint(name, "urp%d", up - urp); 
1990/0312    
		kproc(name, urpkproc, up); 
	} 
1990/0725    
 
	/* 
	 *  start the urptimer if it isn't already 
	 */ 
	if(urptiming==0){ 
		if(canlock(&urptlock)){ 
			if(urptiming == 0) 
				urptiming = alarm(500, urptimer, 0); 
			unlock(&urptlock); 
		} 
	} 
1990/0227    
} 
 
/* 
1990/0722/sys/src/9/port/sturp.c:589,5941990/0725/sys/src/9/port/sturp.c:607,623
1990/0312    
	int n; 
1990/0511    
	int i; 
1990/0227    
 
1990/0725    
	/* 
	 *  start the urptimer if it isn't already 
	 */ 
	if(urptiming==0){ 
		if(canlock(&urptlock)){ 
			if(urptiming == 0) 
				urptiming = alarm(500, urptimer, 0); 
			unlock(&urptlock); 
		} 
	} 
 
1990/0312    
	if(!canqlock(&up->xmit)) 
		return; 
1990/0227    
 
1990/0722/sys/src/9/port/sturp.c:967,9771990/0725/sys/src/9/port/sturp.c:996,1028
1990/0511    
		if(!QFULL(up->rq->next)) 
			sendack(up); 
1990/0312    
		output(up); 
		tsleep(&up->rq->r, todo, up, MSrexmit/2); 
1990/0725    
		sleep(&up->rq->r, todo, up); 
1990/0312    
	} 
	up->state = 0; 
1990/0403    
	up->kstarted = 0; 
1990/0511    
	DPRINT("urpkproc %ux\n", up); 
1990/0725    
} 
 
/* 
 *  timer to wakeup urpkproc's for retransmissions 
 */ 
static void 
urptimer(Alarm *a) 
{ 
	Urp *up; 
	Urp *last; 
	Queue *q; 
 
	urptiming = 0; 
	for(up = urp, last = &urp[conf.nurp]; up < last; up++){ 
		if(up->state==0) 
			continue; 
		if(up->unacked!=up->next && NOW>up->timer){ 
			q = up->rq; 
			if(q) 
				wakeup(&q->r); 
		} 
	} 
1990/0629    
} 
 
/* 


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