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

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

1999/1006/sys/src/9/pc/devusb.c:369,3771999/1007/sys/src/9/pc/devusb.c:369,377 (short | long | prev | next)
1999/1005    
		if(t->status & LowSpeed) 
			*s++ = 'L'; 
		*s = 0; 
		print("td %8.8lux: l=%8.8lux s=%8.8lux d=%8.8lux b=%8.8lux %8.8lux f=%8.8lux\n", 
1999/1007    
		XPRINT("td %8.8lux: l=%8.8lux s=%8.8lux d=%8.8lux b=%8.8lux %8.8lux f=%8.8lux\n", 
1999/1005    
			t, t->link, t->status, t->dev, t->buffer, t->bp?(ulong)t->bp->rp:0, t->flags); 
		print("\ts=%s,ep=%ld,d=%ld,D=%ld\n", buf, (t->dev>>15)&0xF, (t->dev>>8)&0xFF, (t->dev>>19)&1); 
1999/1007    
		XPRINT("\ts=%s,ep=%ld,d=%ld,D=%ld\n", buf, (t->dev>>15)&0xF, (t->dev>>8)&0xFF, (t->dev>>19)&1); 
1999/1005    
		if(t->bp) 
			dumpdata(t->bp, n); 
		if(!follow || t->link & Terminate || t->link & IsQH) 
1999/1006/sys/src/9/pc/devusb.c:401,4441999/1007/sys/src/9/pc/devusb.c:401,406
1999/1005    
	return t; 
} 
 
static TD * 
alloctdring(int nbuf, Endpt *e, int pid, int maxn) 
{ 
	TD *t, *lt, *ft; 
	int id, i; 
	ulong status, dev; 
                 
	if(!e->iso) 
		nbuf = (nbuf+1)&~1; 
	id = (e->x<<7)|(e->dev->x&0x7F); 
	dev = ((maxn-1)<<21) | ((id&0x7FF)<<8) | pid; 
	status = 0; 
	if(e->dev->ls) 
		status |= LowSpeed; 
	ft = lt = nil; 
	for(i=0; i<nbuf; i++){ 
		t = alloctd(&ubus); 
		t->ep = e; 
		t->status = status; 
		t->dev =  dev; 
		if(!e->iso) 
			dev ^= IsDATA1; 
		if(pid == TokIN){ 
			t->bp = allocb(maxn); 
			t->buffer = PADDR(t->bp->wp); 
		} 
		if(ft != nil){ 
			lt->next = t; 
			lt->link = PADDR(t); 
		}else 
			ft = t; 
		lt = t; 
	} 
	if(lt != nil) 
		lt->link = PADDR(ft);	/* loop to form ring */ 
	return ft; 
} 
                 
static QH * 
allocqh(Ctlr *ub) 
{ 
1999/1006/sys/src/9/pc/devusb.c:475,4871999/1007/sys/src/9/pc/devusb.c:437,449
1999/1005    
 
	q0 = q; 
	for(i = 0; q != nil && i < 10; i++){ 
		pprint("qh %8.8lux: %8.8lux %8.8lux\n", q, q->head, q->entries); 
1999/1007    
		XPRINT("qh %8.8lux: %8.8lux %8.8lux\n", q, q->head, q->entries); 
1999/1005    
		if((q->entries & Terminate) == 0) 
			dumptd(TFOL(q->entries), 1); 
		if(q->head & Terminate) 
			break; 
		if((q->head & IsQH) == 0){ 
			pprint("head:"); 
1999/1007    
			XPRINT("head:"); 
1999/1005    
			dumptd(TFOL(q->head), 1); 
			break; 
		} 
1999/1006/sys/src/9/pc/devusb.c:525,5311999/1007/sys/src/9/pc/devusb.c:487,493
1999/1005    
	err = t->status & (AnyError&~NAKed); 
	/* TO DO: on t->status&AnyError, q->entries will not have advanced */ 
	if (err) 
		print("cleanTD: Error %8.8lux %8.8lux %8.8lux %8.8lux\n", t->link, t->status, t->dev, t->buffer); 
1999/1007    
		XPRINT("cleanTD: Error %8.8lux %8.8lux %8.8lux %8.8lux\n", t->link, t->status, t->dev, t->buffer); 
1999/1005    
	switch(t->dev&0xFF){ 
	case TokIN: 
		if(discard || (t->flags & CancelTD) || t->ep == nil || t->ep->x!=0&&err){ 
1999/1006/sys/src/9/pc/devusb.c:624,6301999/1007/sys/src/9/pc/devusb.c:586,592
1999/1005    
			if(t->ep == e) 
				t->flags |= CancelTD; 
		iunlock(ub); 
		pprint("cancel:\n"); 
1999/1007    
		XPRINT("cancel:\n"); 
1999/1005    
		dumpqh(q); 
	} 
} 
1999/1006/sys/src/9/pc/devusb.c:805,8111999/1007/sys/src/9/pc/devusb.c:767,773
1999/1005    
				o |= 1; 
		} 
		if(leaf0+o >= n){ 
			pprint("leaf0=%d o=%d i=%d n=%d\n", leaf0, o, i, n); 
1999/1007    
			XPRINT("leaf0=%d o=%d i=%d n=%d\n", leaf0, o, i, n); 
1999/1005    
			break; 
		} 
		frame[i] = PADDR(&tree[leaf0+o]) | IsQH; 
1999/1006/sys/src/9/pc/devusb.c:828,8411999/1007/sys/src/9/pc/devusb.c:790,803
1999/1005    
	if(t < 0) 
		t = 32; 
	for(i=f; i<t; i++){ 
		pprint("F%.2d %8.8lux %8.8lux\n", i, frame[i], QFOL(frame[i])->head); 
1999/1007    
		XPRINT("F%.2d %8.8lux %8.8lux\n", i, frame[i], QFOL(frame[i])->head); 
1999/1005    
		for(p=frame[i]; (p & IsQH) && (p &Terminate) == 0; p = q->head){ 
			q = QFOL(p); 
			if(!(q >= tree && q < &tree[n])){ 
				pprint("Q: p=%8.8lux out of range\n", p); 
1999/1007    
				XPRINT("Q: p=%8.8lux out of range\n", p); 
1999/1005    
				break; 
			} 
			pprint("  -> %8.8lux h=%8.8lux e=%8.8lux\n", p, q->head, q->entries); 
1999/1007    
			XPRINT("  -> %8.8lux h=%8.8lux e=%8.8lux\n", p, q->head, q->entries); 
1999/1005    
		} 
	} 
} 
1999/1006/sys/src/9/pc/devusb.c:1104,11121999/1007/sys/src/9/pc/devusb.c:1066,1074
1999/1005    
	ub = a; 
	s = IN(Status); 
	if (s & 0x1a) { 
		print("usbint: #%x f%d\n", s, IN(Frnum)); 
		print("cmd #%x sofmod #%x\n", IN(Cmd), inb(ub->io+SOFMod)); 
		print("sc0 #%x sc1 #%x\n", IN(Portsc0), IN(Portsc1)); 
1999/1007    
		XPRINT("usbint: #%x f%d\n", s, IN(Frnum)); 
		XPRINT("cmd #%x sofmod #%x\n", IN(Cmd), inb(ub->io+SOFMod)); 
		XPRINT("sc0 #%x sc1 #%x\n", IN(Portsc0), IN(Portsc1)); 
1999/1005    
	} 
	OUT(Status, s); 
 
1999/1006/sys/src/9/pc/devusb.c:1570,15761999/1007/sys/src/9/pc/devusb.c:1532,1538
1999/1005    
	p = a; 
	do { 
		if(e->eof) { 
			pprint("e->eof\n"); 
1999/1007    
			XPRINT("e->eof\n"); 
1999/1005    
			break; 
		} 
		if(e->err) 
1999/1006/sys/src/9/pc/devusb.c:1583,15891999/1007/sys/src/9/pc/devusb.c:1545,1551
1999/1005    
			error(e->err); 
		b = qget(e->rq);	/* TO DO */ 
		if(b == nil) { 
			pprint("b == nil\n"); 
1999/1007    
			XPRINT("b == nil\n"); 
1999/1005    
			break; 
		} 
		if(waserror()){ 
1999/1006/sys/src/9/pc/devusb.c:1846,18521999/1007/sys/src/9/pc/devusb.c:1808,1814
1999/1005    
			/* ep n maxpkt mode poll nbuf */ 
			i = strtoul(fields[1], nil, 0); 
1999/1006    
			if(i < 0 || i >= nelem(d->ep)) { 
				pprint("field 1: 0 <= %d < %d\n", i, nelem(d->ep)); 
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) 
1999/1006/sys/src/9/pc/devusb.c:1869,18751999/1007/sys/src/9/pc/devusb.c:1831,1837
1999/1005    
				if(i > 0 && i <= 1000) 
					e->pollms = i; 
1999/1006    
				else { 
					pprint("field 4: 0 <= %d <= 1000\n", i); 
1999/1007    
					XPRINT("field 4: 0 <= %d <= 1000\n", i); 
1999/1005    
					error(Ebadarg); 
1999/1006    
				} 
1999/1005    
			} 
1999/1006/sys/src/9/pc/devusb.c:1878,18841999/1007/sys/src/9/pc/devusb.c:1840,1846
1999/1005    
				e->nbuf = i; 
			poperror(); 
1999/1006    
		}else { 
			pprint("command %s, fields %d\n", fields[0], nf); 
1999/1007    
			XPRINT("command %s, fields %d\n", fields[0], nf); 
1999/1005    
			error(Ebadarg); 
1999/1006    
		} 
1999/1005    
		return n; 


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