142 lines · 3.3 KB · C
RawDownload
/*  * This file is part of the UCB release of Plan 9. It is subject to the license * terms in the LICENSE file found in the top-level directory of this * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No * part of the UCB release of Plan 9, including this file, may be copied, * modified, propagated, or distributed except according to the terms contained * in the LICENSE file. */ typedef struct Hub Hub;typedef struct Port Port;typedef struct DHub DHub;typedef struct Devtab Devtab;typedef struct Usbfs Usbfs; enum{	Stack	= 32*1024, 	Dhub	= 0x29,		/* hub descriptor type */	Dhublen = 9,		/* hub descriptor length */ 	/* hub class feature selectors */	Fhublocalpower	= 0,	Fhubovercurrent	= 1, 	Fportconnection	= 0,	Fportenable	= 1,	Fportsuspend	= 2,	Fportovercurrent = 3,	Fportreset	= 4,	Fportpower	= 8,	Fportlowspeed	= 9,	Fcportconnection	= 16,	Fcportenable	= 17,	Fcportsuspend	= 18,	Fcportovercurrent= 19,	Fcportreset	= 20,	Fportindicator	= 22, 	/* Port status and status change bits	 * Constants at /sys/src/9/pc/usb.h starting with HP-	 * must have the same values or root hubs won't work.	 */	PSpresent	= 0x0001,	PSenable	= 0x0002,	PSsuspend	= 0x0004,	PSovercurrent	= 0x0008,	PSreset		= 0x0010,	PSpower		= 0x0100,	PSslow		= 0x0200,	PShigh		= 0x0400, 	PSstatuschg	= 0x10000,	/* PSpresent changed */	PSchange	= 0x20000,	/* PSenable changed */  	/* port/device state */	Pdisabled = 0,		/* must be 0 */	Pattached,	Pconfiged, 	/* Delays, timeouts (ms) */	Spawndelay	= 100,		/* how often may we re-spawn a driver */	Connectdelay	= 500,		/* how much to wait after a connect */	Resetdelay	= 20,		/* how much to wait after a reset */	Enabledelay	= 20,		/* how much to wait after an enable */	Powerdelay	= 100,		/* after powering up ports */	Pollms		= 250, 		/* port poll interval */	Chgdelay	= 100,		/* waiting for port become stable */	Chgtmout	= 1000,		/* ...but at most this much */ 	/*	 * device tab for embedded usb drivers.	 */	DCL = 0x01000000,		/* csp identifies just class */	DSC = 0x02000000,		/* csp identifies just subclass */	DPT = 0x04000000,		/* csp identifies just proto */ }; struct Hub{	uchar	pwrmode;	uchar	compound;	uchar	pwrms;		/* time to wait in ms */	uchar	maxcurrent;	/*    after powering port*/	int	leds;		/* has port indicators? */	int	maxpkt;	uchar	nport;	Port	*port;	int	failed;		/* I/O error while enumerating */	int	isroot;		/* set if root hub */	Dev	*dev;		/* for this hub */	Hub	*next;		/* in list of hubs */}; struct Port{	int	state;		/* state of the device */	int	sts;		/* old port status */	uchar	removable;	uchar	pwrctl;	Dev	*dev;		/* attached device (if non-nil) */	Hub	*hub;		/* non-nil if hub attached */	int	devnb;		/* device number */	uvlong	*devmaskp;	/* ptr to dev mask */};  /* USB HUB descriptor */struct DHub{	uchar	bLength;	uchar	bDescriptorType;	uchar	bNbrPorts;	uchar	wHubCharacteristics[2];	uchar	bPwrOn2PwrGood;	uchar	bHubContrCurrent;	uchar	DeviceRemovable[1];	/* variable length */}; struct Devtab{	char	*name;	int	(*init)(Dev*, int, char**);	/* nil if external */	int	csps[4];	int	vid;	int	did;	char	*args;	uvlong	devmask;	int	noauto;};  Hub*	newhub(char *fn, Dev *d);int	startdev(Port *pp);int	getdevnb(uvlong *maskp);void	putdevnb(uvlong *maskp, int nb);void	threadmain(int argc, char **argv); extern Usbfs usbdfsops;

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t