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

1999/1120/pc/devusb.c (diff list | history)

1999/1119/sys/src/9/pc/devusb.c:170,1871999/1120/sys/src/9/pc/devusb.c:170,187 (short | long | prev | next)
1999/1005    
struct Udev { 
	Ref; 
	Lock; 
	int	x;	/* index in usbdev[] */ 
	int	busy; 
	int	state; 
	int	id; 
1999/1120    
	int		x;	/* index in usbdev[] */ 
	int		busy; 
	int		state; 
	int		id; 
1999/1005    
	byte	port;		/* port number on connecting hub */ 
	byte	class; 
	byte	subclass; 
	byte	proto; 
	int	ls; 
	int	npt; 
1999/1120    
	int		ls; 
	int		npt; 
1999/1005    
	Endpt*	ep[16];		/* active end points */ 
	Udev*	ports;	/* active ports, if hub */ 
1999/1120    
	Udev*	ports;		/* active ports, if hub */ 
1999/1005    
	Udev*	next;		/* next device on this hub */ 
}; 
 
1999/1119/sys/src/9/pc/devusb.c:200,2101999/1120/sys/src/9/pc/devusb.c:200,210
1999/1005    
}; 
 
static char *devstates[] = { 
	[Disabled]	"Disabled", 
	[Attached] "Attached", 
	[Enabled] "Enabled", 
	[Assigned] "Assigned", 
	[Configured] "Configured", 
1999/1120    
	[Disabled]		"Disabled", 
	[Attached]		"Attached", 
	[Enabled]		"Enabled", 
	[Assigned]		"Assigned", 
	[Configured]	"Configured", 
1999/1005    
}; 
 
/* 
1999/1119/sys/src/9/pc/devusb.c:1685,16911999/1120/sys/src/9/pc/devusb.c:1685,1691
1999/1005    
		l = snprint(s, READSTR, "%s %d %d %d\n", devstates[d->state], d->class, d->subclass, d->proto); 
		for(i=0; i<nelem(d->ep); i++) 
			if((e = d->ep[i]) != nil)	/* TO DO: freeze e */ 
				l += snprint(s+l, READSTR-l, "%d bytes %lud blocks %lud\n", i, e->nbytes, e->nblocks); 
1999/1120    
				l += snprint(s+l, READSTR-l, "%2d class 0x%2.2ux subclass 0x%2.2ux proto 0x%2.2ux bytes %10lud blocks %10lud\n", i, e->class, e->subclass, e->proto, e->nbytes, e->nblocks); 
1999/1005    
		n = readstr(offset, a, n, s); 
		poperror(); 
		free(s); 
1999/1119/sys/src/9/pc/devusb.c:1836,18461999/1120/sys/src/9/pc/devusb.c:1836,1858
1999/1005    
		nf = getfields(cmd, fields, nelem(fields)); 
		if(nf > 1 && strcmp(fields[0], "speed") == 0){ 
			d->ls = strtoul(fields[1], nil, 0) == 0; 
1999/1119    
		} else if(nf > 3 && strcmp(fields[0], "class") == 0){ 
1999/1005    
			/* class class subclass proto */ 
1999/1119    
			d->class = strtoul(fields[1], nil, 0); 
			d->subclass = strtoul(fields[2], nil, 0); 
			d->proto = strtoul(fields[3], nil, 0); 
1999/1120    
		} else if(nf > 5 && strcmp(fields[0], "class") == 0){ 
			i = strtoul(fields[2], nil, 0); 
			d->npt = strtoul(fields[1], nil, 0); 
			/* class config# class subclass proto */ 
			if (i < 0 || i >= nelem(d->ep) 
			 || d->npt > nelem(d->ep) || i >= d->npt) 
				error(Ebadarg); 
			if (i == 0) { 
				d->class = strtoul(fields[3], nil, 0); 
				d->subclass = strtoul(fields[4], nil, 0); 
				d->proto = strtoul(fields[5], nil, 0); 
			} 
			if(d->ep[i] == nil) 
				d->ep[i] = devendpt(d, i, 1); 
			d->ep[i]->class = strtoul(fields[3], nil, 0); 
			d->ep[i]->subclass = strtoul(fields[4], nil, 0); 
			d->ep[i]->proto = strtoul(fields[5], nil, 0); 
1999/1005    
		}else if(nf > 2 && strcmp(fields[0], "data") == 0){ 
			i = strtoul(fields[1], nil, 0); 
			if(i < 0 || i >= nelem(d->ep) || d->ep[i] == nil) 
1999/1119/sys/src/9/pc/devusb.c:1879,18871999/1120/sys/src/9/pc/devusb.c:1891,1898
1999/1007    
				XPRINT("field 1: 0 <= %d < %d\n", i, nelem(d->ep)); 
1999/1005    
				error(Ebadarg); 
1999/1006    
			} 
1999/1005    
			if(d->ep[i] != nil) 
				error(Einuse); 
			e = devendpt(d, i, 1); 
1999/1120    
			if((e = d->ep[i]) == nil) 
				e = devendpt(d, i, 1); 
1999/1005    
			if(waserror()){ 
				freept(e); 
				nexterror(); 


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