This source file includes following definitions.
- ehci_itd_t
- ehci_sitd_t
- ehci_qtd_t
- ehci_qh_t
- ehci_fstn_t
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 #ifndef _DEV_PCI_EHCIREG_H_
48 #define _DEV_PCI_EHCIREG_H_
49
50
51
52 #define PCI_CBMEM 0x10
53
54 #define PCI_INTERFACE_EHCI 0x20
55
56 #define PCI_USBREV 0x60
57 #define PCI_USBREV_MASK 0xff
58 #define PCI_USBREV_PRE_1_0 0x00
59 #define PCI_USBREV_1_0 0x10
60 #define PCI_USBREV_1_1 0x11
61 #define PCI_USBREV_2_0 0x20
62
63 #define PCI_EHCI_FLADJ 0x61
64
65 #define PCI_EHCI_PORTWAKECAP 0x62
66
67
68 #define EHCI_EC_LEGSUP 0x01
69
70 #define EHCI_EECP_NEXT(x) (((x) >> 8) & 0xff)
71 #define EHCI_EECP_ID(x) ((x) & 0xff)
72
73 #define EHCI_LEGSUP_LEGSUP 0x00
74 #define EHCI_LEGSUP_OSOWNED 0x01000000
75 #define EHCI_LEGSUP_BIOSOWNED 0x00010000
76 #define PCI_LEGSUP_USBLEGCTLSTS 0x04
77
78
79
80 #define EHCI_CAPLENGTH 0x00
81
82 #define EHCI_HCIVERSION 0x02
83
84 #define EHCI_HCSPARAMS 0x04
85 #define EHCI_HCS_DEBUGPORT(x) (((x) >> 20) & 0xf)
86 #define EHCI_HCS_P_INDICATOR(x) ((x) & 0x10000)
87 #define EHCI_HCS_N_CC(x) (((x) >> 12) & 0xf)
88 #define EHCI_HCS_N_PCC(x) (((x) >> 8) & 0xf)
89 #define EHCI_HCS_PRR(x) ((x) & 0x80)
90 #define EHCI_HCS_PPC(x) ((x) & 0x10)
91 #define EHCI_HCS_N_PORTS(x) ((x) & 0xf)
92
93 #define EHCI_HCCPARAMS 0x08
94 #define EHCI_HCC_EECP(x) (((x) >> 8) & 0xff)
95 #define EHCI_HCC_IST(x) (((x) >> 4) & 0xf)
96 #define EHCI_HCC_ASPC(x) ((x) & 0x4)
97 #define EHCI_HCC_PFLF(x) ((x) & 0x2)
98 #define EHCI_HCC_64BIT(x) ((x) & 0x1)
99
100 #define EHCI_HCSP_PORTROUTE 0x0c
101
102
103 #define EHCI_USBCMD 0x00
104 #define EHCI_CMD_ITC_M 0x00ff0000
105 #define EHCI_CMD_ITC_1 0x00010000
106 #define EHCI_CMD_ITC_2 0x00020000
107 #define EHCI_CMD_ITC_4 0x00040000
108 #define EHCI_CMD_ITC_8 0x00080000
109 #define EHCI_CMD_ITC_16 0x00100000
110 #define EHCI_CMD_ITC_32 0x00200000
111 #define EHCI_CMD_ITC_64 0x00400000
112 #define EHCI_CMD_ASPME 0x00000800
113 #define EHCI_CMD_ASPMC 0x00000300
114 #define EHCI_CMD_LHCR 0x00000080
115 #define EHCI_CMD_IAAD 0x00000040
116 #define EHCI_CMD_ASE 0x00000020
117 #define EHCI_CMD_PSE 0x00000010
118 #define EHCI_CMD_FLS_M 0x0000000c
119 #define EHCI_CMD_FLS(x) (((x) >> 2) & 3)
120 #define EHCI_CMD_HCRESET 0x00000002
121 #define EHCI_CMD_RS 0x00000001
122
123 #define EHCI_USBSTS 0x04
124 #define EHCI_STS_ASS 0x00008000
125 #define EHCI_STS_PSS 0x00004000
126 #define EHCI_STS_REC 0x00002000
127 #define EHCI_STS_HCH 0x00001000
128 #define EHCI_STS_IAA 0x00000020
129 #define EHCI_STS_HSE 0x00000010
130 #define EHCI_STS_FLR 0x00000008
131 #define EHCI_STS_PCD 0x00000004
132 #define EHCI_STS_ERRINT 0x00000002
133 #define EHCI_STS_INT 0x00000001
134 #define EHCI_STS_INTRS(x) ((x) & 0x3f)
135
136 #define EHCI_NORMAL_INTRS (EHCI_STS_IAA | EHCI_STS_HSE | EHCI_STS_PCD | EHCI_STS_ERRINT | EHCI_STS_INT)
137
138 #define EHCI_USBINTR 0x08
139 #define EHCI_INTR_IAAE 0x00000020
140 #define EHCI_INTR_HSEE 0x00000010
141 #define EHCI_INTR_FLRE 0x00000008
142 #define EHCI_INTR_PCIE 0x00000004
143 #define EHCI_INTR_UEIE 0x00000002
144 #define EHCI_INTR_UIE 0x00000001
145
146 #define EHCI_FRINDEX 0x0c
147
148 #define EHCI_CTRLDSSEGMENT 0x10
149
150 #define EHCI_PERIODICLISTBASE 0x14
151 #define EHCI_ASYNCLISTADDR 0x18
152
153 #define EHCI_CONFIGFLAG 0x40
154 #define EHCI_CONF_CF 0x00000001
155
156 #define EHCI_PORTSC(n) (0x40+4*(n))
157 #define EHCI_PS_WKOC_E 0x00400000
158 #define EHCI_PS_WKDSCNNT_E 0x00200000
159 #define EHCI_PS_WKCNNT_E 0x00100000
160 #define EHCI_PS_PTC 0x000f0000
161 #define EHCI_PS_PIC 0x0000c000
162 #define EHCI_PS_PO 0x00002000
163 #define EHCI_PS_PP 0x00001000
164 #define EHCI_PS_LS 0x00000c00
165 #define EHCI_PS_IS_LOWSPEED(x) (((x) & EHCI_PS_LS) == 0x00000400)
166 #define EHCI_PS_PR 0x00000100
167 #define EHCI_PS_SUSP 0x00000080
168 #define EHCI_PS_FPR 0x00000040
169 #define EHCI_PS_OCC 0x00000020
170 #define EHCI_PS_OCA 0x00000010
171 #define EHCI_PS_PEC 0x00000008
172 #define EHCI_PS_PE 0x00000004
173 #define EHCI_PS_CSC 0x00000002
174 #define EHCI_PS_CS 0x00000001
175 #define EHCI_PS_CLEAR (EHCI_PS_OCC|EHCI_PS_PEC|EHCI_PS_CSC)
176
177 #define EHCI_PORT_RESET_COMPLETE 2
178
179 #define EHCI_FLALIGN_ALIGN 0x1000
180
181
182 #define EHCI_PAGE_SIZE 0x1000
183 #define EHCI_PAGE(x) ((x) &~ 0xfff)
184 #define EHCI_PAGE_OFFSET(x) ((x) & 0xfff)
185
186 typedef u_int32_t ehci_link_t;
187 #define EHCI_LINK_TERMINATE 0x00000001
188 #define EHCI_LINK_TYPE(x) ((x) & 0x00000006)
189 #define EHCI_LINK_ITD 0x0
190 #define EHCI_LINK_QH 0x2
191 #define EHCI_LINK_SITD 0x4
192 #define EHCI_LINK_FSTN 0x6
193 #define EHCI_LINK_ADDR(x) ((x) &~ 0x1f)
194
195 typedef u_int32_t ehci_physaddr_t;
196 #define EHCI_BUFPTR_MASK 0xfffff000
197
198
199 #define EHCI_ITD_NTRANS 8
200 #define EHCI_ITD_NBUFFERS 7
201 typedef struct {
202 ehci_link_t itd_next;
203 u_int32_t itd_trans[EHCI_ITD_NTRANS];
204 #define EHCI_ITD_GET_OFFSET(x) (((x) >> 0) & 0xfff)
205 #define EHCI_ITD_SET_OFFSET(x) (x)
206 #define EHCI_ITD_GET_PG(x) (((x) >> 12) & 0x7)
207 #define EHCI_ITD_SET_PG(x) ((x) << 12)
208 #define EHCI_ITD_GET_IOC(x) (((x) >> 15) & 0x1)
209 #define EHCI_ITD_IOC 0x00008000
210 #define EHCI_ITD_GET_XLEN(x) (((x) >> 16) & 0xfff)
211 #define EHCI_ITD_SET_XLEN(x) ((x) << 12)
212 #define EHCI_ITD_GET_STATUS(x) (((x) >> 28) & 0xf)
213 #define EHCI_ITD_SET_STATUS(x) ((x) << 28)
214 #define EHCI_ITD_ACTIVE 0x8
215 #define EHCI_ITD_BUFERR 0x4
216 #define EHCI_ITD_BABBLE 0x2
217 #define EHCI_ITD_XACTERR 0x1
218 ehci_physaddr_t itd_buffer[EHCI_ITD_NBUFFERS];
219
220 #define EHCI_ITD_GET_ADDR(x) (((x) >> 0) & 0x7f)
221 #define EHCI_ITD_SET_ADDR(x) (x)
222 #define EHCI_ITD_GET_ENDPT(x) (((x) >> 8) & 0xf)
223 #define EHCI_ITD_SET_ENDPT(x) ((x) << 8)
224
225 #define EHCI_ITD_GET_MPS(x) (((x) >> 0) & 0x7ff)
226 #define EHCI_ITD_SET_MPS(x) (x)
227 #define EHCI_ITD_DIRECTION 0x00000800
228
229 #define EHCI_ITD_GET_MULTI(x) (((x) >> 0) & 0x3)
230 #define EHCI_ITD_SET_MULTI(x) (x)
231 ehci_physaddr_t itd_buffer_hi[EHCI_ITD_NBUFFERS];
232 } ehci_itd_t;
233 #define EHCI_ITD_ALIGN 32
234
235
236 #define EHCI_SITD_NBUFFERS 2
237 typedef struct {
238 ehci_link_t sitd_next;
239 u_int32_t sitd_endp;
240 #define EHCI_SITD_GET_ADDR(x) (((x) >> 0) & 0x7f)
241 #define EHCI_SITD_SET_ADDR(x) (x)
242 #define EHCI_SITD_GET_ENDPT(x) (((x) >> 8) & 0xf)
243 #define EHCI_SITD_SET_ENDPT(x) ((x) << 8)
244 #define EHCI_SITD_GET_HUBA(x) (((x) >> 16) & 0x7f)
245 #define EHCI_SITD_SET_HUBA(x) ((x) << 16)
246 #define EHCI_SITD_GET_PORT(x) (((x) >> 23) & 0x7f)
247 #define EHCI_SITD_SET_PORT(x) ((x) << 23)
248 u_int32_t sitd_sched;
249 #define EHCI_QH_GET_SMASK(x) (((x) >> 0) & 0xff)
250 #define EHCI_QH_SET_SMASK(x) ((x) << 0)
251 #define EHCI_QH_GET_CMASK(x) (((x) >> 8) & 0xff)
252 #define EHCI_QH_SET_CMASK(x) ((x) << 8)
253 u_int32_t sitd_trans;
254 #define EHCI_SITD_GET_STATUS(x) (((x) >> 0) & 0xff)
255 #define EHCI_SITD_ACTIVE 0x80
256 #define EHCI_SITD_ERR 0x40
257 #define EHCI_SITD_BUFERR 0x20
258 #define EHCI_SITD_BABBLE 0x10
259 #define EHCI_SITD_XACTERR 0x08
260 #define EHCI_SITD_MISSEDMICRO 0x04
261 #define EHCI_SITD_SPLITXSTATE 0x02
262 #define EHCI_SITD_GET_CPROG(x) (((x) >> 8) & 0xff)
263 #define EHCI_SITD_SET_CPROG(x) (((x) >> 8) & 0xff)
264 #define EHCI_SITD_GET_BYTES(x) (((x) >> 16) & 0x7ff)
265 #define EHCI_SITD_SET_BYTES(x) ((x) << 16)
266 #define EHCI_SITD_GET_PG(x) (((x) >> 30) & 0x1)
267 #define EHCI_SITD_SET_PG(x) ((x) << 30)
268 #define EHCI_SITD_IOC 0x80000000
269 ehci_physaddr_t sitd_buffer[EHCI_SITD_NBUFFERS];
270
271 #define EHCI_SITD_GET_OFFSET(x) (((x) >> 0) & 0xfff)
272
273 #define EHCI_SITD_GET_TCOUNT(x) (((x) >> 0) & 0x3)
274 #define EHCI_SITD_GET_TP(x) (((x) >> 3) & 0x3)
275 #define EHCI_SITD_SET_TP(x) ((x) << 3)
276 #define EHCI_SITD_TP_ALL 0x0
277 #define EHCI_SITD_TP_BEGIN 0x1
278 #define EHCI_SITD_TP_MIDDLE 0x2
279 #define EHCI_SITD_TP_END 0x3
280 ehci_link_t sitd_back;
281 ehci_physaddr_t sitd_buffer_hi[EHCI_SITD_NBUFFERS];
282 } ehci_sitd_t;
283 #define EHCI_SITD_ALIGN 32
284
285
286 #define EHCI_QTD_NBUFFERS 5
287 typedef struct {
288 ehci_link_t qtd_next;
289 ehci_link_t qtd_altnext;
290 u_int32_t qtd_status;
291 #define EHCI_QTD_GET_STATUS(x) (((x) >> 0) & 0xff)
292 #define EHCI_QTD_SET_STATUS(x) ((x) << 0)
293 #define EHCI_QTD_ACTIVE 0x80
294 #define EHCI_QTD_HALTED 0x40
295 #define EHCI_QTD_BUFERR 0x20
296 #define EHCI_QTD_BABBLE 0x10
297 #define EHCI_QTD_XACTERR 0x08
298 #define EHCI_QTD_MISSEDMICRO 0x04
299 #define EHCI_QTD_SPLITXSTATE 0x02
300 #define EHCI_QTD_PINGSTATE 0x01
301 #define EHCI_QTD_STATERRS 0x7c
302 #define EHCI_QTD_GET_PID(x) (((x) >> 8) & 0x3)
303 #define EHCI_QTD_SET_PID(x) ((x) << 8)
304 #define EHCI_QTD_PID_OUT 0x0
305 #define EHCI_QTD_PID_IN 0x1
306 #define EHCI_QTD_PID_SETUP 0x2
307 #define EHCI_QTD_GET_CERR(x) (((x) >> 10) & 0x3)
308 #define EHCI_QTD_SET_CERR(x) ((x) << 10)
309 #define EHCI_QTD_GET_C_PAGE(x) (((x) >> 12) & 0x7)
310 #define EHCI_QTD_SET_C_PAGE(x) ((x) << 12)
311 #define EHCI_QTD_GET_IOC(x) (((x) >> 15) & 0x1)
312 #define EHCI_QTD_IOC 0x00008000
313 #define EHCI_QTD_GET_BYTES(x) (((x) >> 16) & 0x7fff)
314 #define EHCI_QTD_SET_BYTES(x) ((x) << 16)
315 #define EHCI_QTD_GET_TOGGLE(x) (((x) >> 31) & 0x1)
316 #define EHCI_QTD_SET_TOGGLE(x) ((x) << 31)
317 #define EHCI_QTD_TOGGLE_MASK 0x80000000
318 ehci_physaddr_t qtd_buffer[EHCI_QTD_NBUFFERS];
319 ehci_physaddr_t qtd_buffer_hi[EHCI_QTD_NBUFFERS];
320 } ehci_qtd_t;
321 #define EHCI_QTD_ALIGN 32
322
323
324 typedef struct {
325 ehci_link_t qh_link;
326 u_int32_t qh_endp;
327 #define EHCI_QH_GET_ADDR(x) (((x) >> 0) & 0x7f)
328 #define EHCI_QH_SET_ADDR(x) (x)
329 #define EHCI_QH_ADDRMASK 0x0000007f
330 #define EHCI_QH_GET_INACT(x) (((x) >> 7) & 0x01)
331 #define EHCI_QH_INACT 0x00000080
332 #define EHCI_QH_GET_ENDPT(x) (((x) >> 8) & 0x0f)
333 #define EHCI_QH_SET_ENDPT(x) ((x) << 8)
334 #define EHCI_QH_GET_EPS(x) (((x) >> 12) & 0x03)
335 #define EHCI_QH_SET_EPS(x) ((x) << 12)
336 #define EHCI_QH_SPEED_FULL 0x0
337 #define EHCI_QH_SPEED_LOW 0x1
338 #define EHCI_QH_SPEED_HIGH 0x2
339 #define EHCI_QH_GET_DTC(x) (((x) >> 14) & 0x01)
340 #define EHCI_QH_DTC 0x00004000
341 #define EHCI_QH_GET_HRECL(x) (((x) >> 15) & 0x01)
342 #define EHCI_QH_HRECL 0x00008000
343 #define EHCI_QH_GET_MPL(x) (((x) >> 16) & 0x7ff)
344 #define EHCI_QH_SET_MPL(x) ((x) << 16)
345 #define EHCI_QH_MPLMASK 0x07ff0000
346 #define EHCI_QH_GET_CTL(x) (((x) >> 27) & 0x01)
347 #define EHCI_QH_CTL 0x08000000
348 #define EHCI_QH_GET_NRL(x) (((x) >> 28) & 0x0f)
349 #define EHCI_QH_SET_NRL(x) ((x) << 28)
350 u_int32_t qh_endphub;
351 #define EHCI_QH_GET_SMASK(x) (((x) >> 0) & 0xff)
352 #define EHCI_QH_SET_SMASK(x) ((x) << 0)
353 #define EHCI_QH_GET_CMASK(x) (((x) >> 8) & 0xff)
354 #define EHCI_QH_SET_CMASK(x) ((x) << 8)
355 #define EHCI_QH_GET_HUBA(x) (((x) >> 16) & 0x7f)
356 #define EHCI_QH_SET_HUBA(x) ((x) << 16)
357 #define EHCI_QH_GET_PORT(x) (((x) >> 23) & 0x7f)
358 #define EHCI_QH_SET_PORT(x) ((x) << 23)
359 #define EHCI_QH_GET_MULT(x) (((x) >> 30) & 0x03)
360 #define EHCI_QH_SET_MULT(x) ((x) << 30)
361 ehci_link_t qh_curqtd;
362 ehci_qtd_t qh_qtd;
363 } ehci_qh_t;
364 #define EHCI_QH_ALIGN 32
365
366
367 typedef struct {
368 ehci_link_t fstn_link;
369 ehci_link_t fstn_back;
370 } ehci_fstn_t;
371 #define EHCI_FSTN_ALIGN 32
372
373 #endif