2 * ECHI portable hardware definitions
5 typedef struct Ecapio Ecapio;
6 typedef struct Edbgio Edbgio;
8 #pragma incomplete Ecapio;
9 #pragma incomplete Edbgio;
12 * EHCI interface registers and bits
16 /* Ecapio->parms reg. */
17 Cnports = 0xF, /* nport bits */
18 Cdbgportshift = 20, /* debug port */
21 /* Ecapio->capparms bits */
22 C64 = 1<<0, /* 64-bits */
23 Cpfl = 1<<1, /* program'ble frame list: can be <1024 */
24 Casp = 1<<2, /* asynch. sched. park */
25 Ceecpshift = 8, /* extended capabilities ptr. */
26 Ceecpmask = (1<<8) - 1,
28 Clegacy = 1, /* legacy support cap. id */
29 CLbiossem = 2, /* legacy cap. bios sem. */
30 CLossem = 3, /* legacy cap. os sem */
31 CLcontrol = 4, /* legacy support control & status */
38 Lfstn = 3<<1, /* we don't use these */
41 Cstop = 0x00000, /* stop running */
42 Crun = 0x00001, /* start operation */
43 Chcreset = 0x00002, /* host controller reset */
44 Cflsmask = 0x0000C, /* frame list size bits */
45 Cfls1024 = 0x00000, /* frame list size 1024 */
46 Cfls512 = 0x00004, /* frame list size 512 frames */
47 Cfls256 = 0x00008, /* frame list size 256 frames */
48 Cpse = 0x00010, /* periodic sched. enable */
49 Case = 0x00020, /* async sched. enable */
50 Ciasync = 0x00040, /* interrupt on async advance doorbell */
51 /* interrupt threshold ctl. in µframes (1-32 in powers of 2) */
53 Citcmask = 0xff << Citcshift,
56 Sasyncss = 0x08000, /* aync schedule status */
57 Speriodss = 0x04000, /* periodic schedule status */
58 Srecl = 0x02000, /* reclamnation (empty async sched.) */
59 Shalted = 0x01000, /* h.c. is halted */
60 Sasync = 0x00020, /* interrupt on async advance */
61 Sherr = 0x00010, /* host system error */
62 Sfrroll = 0x00008, /* frame list roll over */
63 Sportchg = 0x00004, /* port change detect */
64 Serrintr = 0x00002, /* error interrupt */
65 Sintr = 0x00001, /* interrupt */
66 Sintrs = 0x0003F, /* interrupts status */
69 Iusb = 0x01, /* intr. on usb */
70 Ierr = 0x02, /* intr. on usb error */
71 Iportchg = 0x04, /* intr. on port change */
72 Ifrroll = 0x08, /* intr. on frlist roll over */
73 Ihcerr = 0x10, /* intr. on host error */
74 Iasync = 0x20, /* intr. on async advance enable */
75 Iall = 0x3F, /* all interrupts */
78 Callmine = 1, /* route all ports to us */
81 Pspresent = 0x00000001, /* device present */
82 Psstatuschg = 0x00000002, /* Pspresent changed */
83 Psenable = 0x00000004, /* device enabled */
84 Pschange = 0x00000008, /* Psenable changed */
85 Psresume = 0x00000040, /* resume detected */
86 Pssuspend = 0x00000080, /* port suspended */
87 Psreset = 0x00000100, /* port reset */
88 Pspower = 0x00001000, /* port power on */
89 Psowner = 0x00002000, /* port owned by companion */
90 Pslinemask = 0x00000C00, /* line status bits */
91 Pslow = 0x00000400, /* low speed device */
93 /* Debug port csw reg. */
94 Cowner = 0x40000000, /* port owned by ehci */
95 Cenable = 0x10000000, /* debug port enabled */
96 Cdone = 0x00010000, /* request is done */
97 Cbusy = 0x00000400, /* port in use by a driver */
98 Cerrmask= 0x00000380, /* error code bits */
99 Chwerr = 0x00000100, /* hardware error */
100 Cterr = 0x00000080, /* transaction error */
101 Cfailed = 0x00000040, /* transaction did fail */
102 Cgo = 0x00000020, /* execute the transaction */
103 Cwrite = 0x00000010, /* request is a write */
104 Clen = 0x0000000F, /* data len */
106 /* Debug port pid reg. */
107 Prpidshift = 16, /* received pid */
109 Pspidshift = 8, /* sent pid */
111 Ptokshift = 0, /* token pid */
114 Ptoggle = 0x00008800, /* to update toggles */
115 Ptogglemask = 0x0000FF00,
117 /* Debug port addr reg. */
118 Adevshift = 8, /* device address */
120 Aepshift = 0, /* endpoint number */
125 * Capability registers (hw)
129 ulong cap; /* 00 controller capability register */
130 ulong parms; /* 04 structural parameters register */
131 ulong capparms; /* 08 capability parameters */
132 ulong portroute; /* 0c not on the CS5536 */
136 * Debug port registers (hw)
140 ulong csw; /* control and status */
141 ulong pid; /* USB pid */
142 uchar data[8]; /* data buffer */
143 ulong addr; /* device and endpoint addresses */