plan9fox/sys/src/cmd/nusb/usbd/dat.h
2011-07-27 20:07:30 +02:00

129 lines
2.9 KiB
C

typedef struct Rule Rule;
typedef struct Cond Cond;
typedef struct Hub Hub;
typedef struct DHub DHub;
typedef struct Port Port;
struct Rule {
char **argv;
int argc;
Cond *cond;
Rule *next;
} *rulefirst, *rulelast;
RWLock rulelock;
struct Cond {
int field;
u32int value;
Cond *and, *or;
};
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 = 1000, /* how often may we re-spawn a driver */
Spawndelay = 250, /* how often may we re-spawn a driver */
// Connectdelay = 1000, /* how much to wait after a connect */
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 */
};