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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
|
/* *********************************************************************
* Broadcom Common Firmware Environment (CFE)
*
* OHCI defs File: ohci.h
*
* Open Host controller interface definitions
*
* Author: Mitch Lichtenberg (mpl@broadcom.com)
*
*********************************************************************
*
* Copyright 2000,2001,2002,2003
* Broadcom Corporation. All rights reserved.
*
* This software is furnished under license and may be used and
* copied only in accordance with the following terms and
* conditions. Subject to these conditions, you may download,
* copy, install, use, modify and distribute modified or unmodified
* copies of this software in source and/or binary form. No title
* or ownership is transferred hereby.
*
* 1) Any source code used, modified or distributed must reproduce
* and retain this copyright notice and list of conditions
* as they appear in the source file.
*
* 2) No right is granted to use any trade name, trademark, or
* logo of Broadcom Corporation. The "Broadcom Corporation"
* name may not be used to endorse or promote products derived
* from this software without the prior written permission of
* Broadcom Corporation.
*
* 3) THIS SOFTWARE IS PROVIDED "AS-IS" AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING BUT NOT LIMITED TO, ANY IMPLIED
* WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
* PURPOSE, OR NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT
* SHALL BROADCOM BE LIABLE FOR ANY DAMAGES WHATSOEVER, AND IN
* PARTICULAR, BROADCOM SHALL NOT BE LIABLE FOR DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE), EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
********************************************************************* */
/* *********************************************************************
* Macros to muck with bitfields
********************************************************************* */
#define _OHCI_MAKE32(x) ((uint32_t)(x))
/*
* Make a mask for 1 bit at position 'n'
*/
#define _OHCI_MAKEMASK1(n) (_OHCI_MAKE32(1) << _OHCI_MAKE32(n))
/*
* Make a mask for 'v' bits at position 'n'
*/
#define _OHCI_MAKEMASK(v,n) (_OHCI_MAKE32((_OHCI_MAKE32(1)<<(v))-1) << _OHCI_MAKE32(n))
/*
* Make a value at 'v' at bit position 'n'
*/
#define _OHCI_MAKEVALUE(v,n) (_OHCI_MAKE32(v) << _OHCI_MAKE32(n))
#define _OHCI_GETVALUE(v,n,m) ((_OHCI_MAKE32(v) & _OHCI_MAKE32(m)) >> _OHCI_MAKE32(n))
/* *********************************************************************
* Endpoint Descriptor (interrupt, bulk)
********************************************************************* */
#define OHCI_ED_ALIGN 32
typedef struct ohci_ed_s {
uint32_t ed_control;
uint32_t ed_tailp;
uint32_t ed_headp;
uint32_t ed_next_ed;
} ohci_ed_t;
#define S_OHCI_ED_FA 0
#define M_OHCI_ED_FA _OHCI_MAKEMASK(7,S_OHCI_ED_FA)
#define V_OHCI_ED_FA(x) _OHCI_MAKEVALUE(x,S_OHCI_ED_FA)
#define G_OHCI_ED_FA(x) _OHCI_GETVALUE(x,S_OHCI_ED_FA,M_OHCI_ED_FA)
#define S_OHCI_ED_EN 7
#define M_OHCI_ED_EN _OHCI_MAKEMASK(4,S_OHCI_ED_EN)
#define V_OHCI_ED_EN(x) _OHCI_MAKEVALUE(x,S_OHCI_ED_EN)
#define G_OHCI_ED_EN(x) _OHCI_GETVALUE(x,S_OHCI_ED_EN,M_OHCI_ED_EN)
#define S_OHCI_ED_DIR 11
#define M_OHCI_ED_DIR _OHCI_MAKEMASK(2,S_OHCI_ED_DIR)
#define V_OHCI_ED_DIR(x) _OHCI_MAKEVALUE(x,S_OHCI_ED_DIR)
#define G_OHCI_ED_DIR(x) _OHCI_GETVALUE(x,S_OHCI_ED_DIR,M_OHCI_ED_DIR)
#define K_OHCI_ED_DIR_FROMTD 0
#define K_OHCI_ED_DIR_OUT 1
#define K_OHCI_ED_DIR_IN 2
#define M_OHCI_ED_LOWSPEED _OHCI_MAKEMASK1(13)
#define M_OHCI_ED_SKIP _OHCI_MAKEMASK1(14)
#define M_OHCI_ED_ISOCFMT _OHCI_MAKEMASK1(15)
#define S_OHCI_ED_MPS 16
#define M_OHCI_ED_MPS _OHCI_MAKEMASK(11,S_OHCI_ED_MPS)
#define V_OHCI_ED_MPS(x) _OHCI_MAKEVALUE(x,S_OHCI_ED_MPS)
#define G_OHCI_ED_MPS(x) _OHCI_GETVALUE(x,S_OHCI_ED_MPS,M_OHCI_ED_MPS)
#define M_OHCI_ED_PTRMASK 0xFFFFFFF0
#define M_OHCI_ED_HALT _OHCI_MAKEMASK1(0)
#define M_OHCI_ED_TOGGLECARRY _OHCI_MAKEMASK1(1)
/* *********************************************************************
* Transfer Descriptor
********************************************************************* */
#define OHCI_TD_ALIGN 32
typedef struct ohci_td_s {
uint32_t td_control;
uint32_t td_cbp;
uint32_t td_next_td;
uint32_t td_be;
} ohci_td_t;
#define M_OHCI_TD_SHORTOK _OHCI_MAKEMASK1(18)
#define S_OHCI_TD_PID 19
#define M_OHCI_TD_PID _OHCI_MAKEMASK(2,S_OHCI_TD_PID)
#define V_OHCI_TD_PID(x) _OHCI_MAKEVALUE(x,S_OHCI_TD_PID)
#define G_OHCI_TD_PID(x) _OHCI_GETVALUE(x,S_OHCI_TD_PID,M_OHCI_TD_PID)
#define K_OHCI_TD_SETUP 0
#define K_OHCI_TD_OUT 1
#define K_OHCI_TD_IN 2
#define K_OHCI_TD_RESERVED 3
#define V_OHCI_TD_SETUP V_OHCI_TD_PID(K_OHCI_TD_SETUP)
#define V_OHCI_TD_OUT V_OHCI_TD_PID(K_OHCI_TD_OUT)
#define V_OHCI_TD_IN V_OHCI_TD_PID(K_OHCI_TD_IN)
#define V_OHCI_TD_RESERVED V_OHCI_TD_PID(K_OHCI_TD_RESERVED)
#define S_OHCI_TD_DI 21
#define M_OHCI_TD_DI _OHCI_MAKEMASK(3,S_OHCI_TD_DI)
#define V_OHCI_TD_DI(x) _OHCI_MAKEVALUE(x,S_OHCI_TD_DI)
#define G_OHCI_TD_DI(x) _OHCI_GETVALUE(x,S_OHCI_TD_DI,M_OHCI_TD_DI)
#define K_OHCI_TD_NOINTR 7
#define V_OHCI_TD_NOINTR V_OHCI_TD_DI(K_OHCI_TD_NOINTR)
#define S_OHCI_TD_DT 24
#define M_OHCI_TD_DT _OHCI_MAKEMASK(2,S_OHCI_TD_DT)
#define V_OHCI_TD_DT(x) _OHCI_MAKEVALUE(x,S_OHCI_TD_DT)
#define G_OHCI_TD_DT(x) _OHCI_GETVALUE(x,S_OHCI_TD_DT,M_OHCI_TD_DT)
#define K_OHCI_TD_DT_DATA0 2
#define K_OHCI_TD_DT_DATA1 3
#define K_OHCI_TD_DT_TCARRY 0
#define S_OHCI_TD_EC 26
#define M_OHCI_TD_EC _OHCI_MAKEMASK(2,S_OHCI_TD_EC)
#define V_OHCI_TD_EC(x) _OHCI_MAKEVALUE(x,S_OHCI_TD_EC)
#define G_OHCI_TD_EC(x) _OHCI_GETVALUE(x,S_OHCI_TD_EC,M_OHCI_TD_EC)
#define S_OHCI_TD_CC 28
#define M_OHCI_TD_CC _OHCI_MAKEMASK(4,S_OHCI_TD_CC)
#define V_OHCI_TD_CC(x) _OHCI_MAKEVALUE(x,S_OHCI_TD_CC)
#define G_OHCI_TD_CC(x) _OHCI_GETVALUE(x,S_OHCI_TD_CC,M_OHCI_TD_CC)
#define K_OHCI_CC_NOERROR 0
#define K_OHCI_CC_CRC 1
#define K_OHCI_CC_BITSTUFFING 2
#define K_OHCI_CC_DATATOGGLEMISMATCH 3
#define K_OHCI_CC_STALL 4
#define K_OHCI_CC_DEVICENOTRESPONDING 5
#define K_OHCI_CC_PIDCHECKFAILURE 6
#define K_OHCI_CC_UNEXPECTEDPID 7
#define K_OHCI_CC_DATAOVERRUN 8
#define K_OHCI_CC_DATAUNDERRUN 9
#define K_OHCI_CC_BUFFEROVERRUN 12
#define K_OHCI_CC_BUFFERUNDERRUN 13
#define K_OHCI_CC_NOTACCESSED 15
#define K_OHCI_CC_CANCELLED 0xFF
#define OHCI_TD_MAX_DATA 8192
/* *********************************************************************
* Endpoint descriptor (isochronous)
********************************************************************* */
/*
* TBA
*/
/* *********************************************************************
* Host Controller Communications Area (HCCA)
********************************************************************* */
#define OHCI_INTTABLE_SIZE 32
#define OHCI_HCCA_ALIGN 256 /* Align on 256-byte boundary */
typedef struct ohci_hcca_s {
uint32_t hcca_inttable[OHCI_INTTABLE_SIZE];
uint32_t hcca_framenum; /* note: actually two 16-bit fields */
uint32_t hcca_donehead;
uint32_t hcca_reserved[29]; /* round to 256 bytes */
uint32_t hcca_pad;
} ohci_hcca_t;
/* *********************************************************************
* Registers
********************************************************************* */
#define _OHCI_REGIDX(x) ((x)*4)
#define R_OHCI_REVISION _OHCI_REGIDX(0)
#define R_OHCI_CONTROL _OHCI_REGIDX(1)
#define R_OHCI_CMDSTATUS _OHCI_REGIDX(2)
#define R_OHCI_INTSTATUS _OHCI_REGIDX(3)
#define R_OHCI_INTENABLE _OHCI_REGIDX(4)
#define R_OHCI_INTDISABLE _OHCI_REGIDX(5)
#define R_OHCI_HCCA _OHCI_REGIDX(6)
#define R_OHCI_PERIODCURRENTED _OHCI_REGIDX(7)
#define R_OHCI_CONTROLHEADED _OHCI_REGIDX(8)
#define R_OHCI_CONTROLCURRENTED _OHCI_REGIDX(9)
#define R_OHCI_BULKHEADED _OHCI_REGIDX(10)
#define R_OHCI_BULKCURRENTED _OHCI_REGIDX(11)
#define R_OHCI_DONEHEAD _OHCI_REGIDX(12)
#define R_OHCI_FMINTERVAL _OHCI_REGIDX(13)
#define R_OHCI_FMREMAINING _OHCI_REGIDX(14)
#define R_OHCI_FMNUMBER _OHCI_REGIDX(15)
#define R_OHCI_PERIODICSTART _OHCI_REGIDX(16)
#define R_OHCI_LSTHRESHOLD _OHCI_REGIDX(17)
#define R_OHCI_RHDSCRA _OHCI_REGIDX(18)
#define R_OHCI_RHDSCRB _OHCI_REGIDX(19)
#define R_OHCI_RHSTATUS _OHCI_REGIDX(20)
#define R_OHCI_RHPORTSTATUS(x) _OHCI_REGIDX(20+(x)) /* note: 1-based! */
/*
* R_OHCI_REVISION
*/
#define S_OHCI_REV_REV 0
#define M_OHCI_REV_REV _OHCI_MAKEMASK(8,S_OHCI_REV_REV)
#define V_OHCI_REV_REV(x) _OHCI_MAKEVALUE(x,S_OHCI_REV_REV)
#define G_OHCI_REV_REV(x) _OHCI_GETVALUE(x,S_OHCI_REV_REV,M_OHCI_REV_REV)
#define K_OHCI_REV_11 0x10
/*
* R_OHCI_CONTROL
*/
#define S_OHCI_CONTROL_CBSR 0
#define M_OHCI_CONTROL_CBSR _OHCI_MAKEMASK(2,S_OHCI_CONTROL_CBSR)
#define V_OHCI_CONTROL_CBSR(x) _OHCI_MAKEVALUE(x,S_OHCI_CONTROL_CBSR)
#define G_OHCI_CONTROL_CBSR(x) _OHCI_GETVALUE(x,S_OHCI_CONTROL_CBSR,M_OHCI_CONTROL_CBSR)
#define K_OHCI_CBSR_11 0
#define K_OHCI_CBSR_21 1
#define K_OHCI_CBSR_31 2
#define K_OHCI_CBSR_41 3
#define M_OHCI_CONTROL_PLE _OHCI_MAKEMASK1(2)
#define M_OHCI_CONTROL_IE _OHCI_MAKEMASK1(3)
#define M_OHCI_CONTROL_CLE _OHCI_MAKEMASK1(4)
#define M_OHCI_CONTROL_BLE _OHCI_MAKEMASK1(5)
#define S_OHCI_CONTROL_HCFS 6
#define M_OHCI_CONTROL_HCFS _OHCI_MAKEMASK(2,S_OHCI_CONTROL_HCFS)
#define V_OHCI_CONTROL_HCFS(x) _OHCI_MAKEVALUE(x,S_OHCI_CONTROL_HCFS)
#define G_OHCI_CONTROL_HCFS(x) _OHCI_GETVALUE(x,S_OHCI_CONTROL_HCFS,M_OHCI_CONTROL_HCFS)
#define K_OHCI_HCFS_RESET 0
#define K_OHCI_HCFS_RESUME 1
#define K_OHCI_HCFS_OPERATIONAL 2
#define K_OHCI_HCFS_SUSPEND 3
#define M_OHCI_CONTROL_IR _OHCI_MAKEMASK1(8)
#define M_OHCI_CONTROL_RWC _OHCI_MAKEMASK1(9)
#define M_OHCI_CONTROL_RWE _OHCI_MAKEMASK1(10)
/*
* R_OHCI_CMDSTATUS
*/
#define M_OHCI_CMDSTATUS_HCR _OHCI_MAKEMASK1(0)
#define M_OHCI_CMDSTATUS_CLF _OHCI_MAKEMASK1(1)
#define M_OHCI_CMDSTATUS_BLF _OHCI_MAKEMASK1(2)
#define M_OHCI_CMDSTATUS_OCR _OHCI_MAKEMASK1(3)
#define S_OHCI_CMDSTATUS_SOC 16
#define M_OHCI_CMDSTATUS_SOC _OHCI_MAKEMASK(2,S_OHCI_CMDSTATUS_SOC)
#define V_OHCI_CMDSTATUS_SOC(x) _OHCI_MAKEVALUE(x,S_OHCI_CMDSTATUS_SOC)
#define G_OHCI_CMDSTATUS_SOC(x) _OHCI_GETVALUE(x,S_OHCI_CMDSTATUS_SOC,M_OHCI_CMDSTATUS_SOC)
/*
* R_OHCI_INTSTATUS, R_OHCI_INTENABLE, R_OHCI_INTDISABLE
*/
#define M_OHCI_INT_SO _OHCI_MAKEMASK1(0)
#define M_OHCI_INT_WDH _OHCI_MAKEMASK1(1)
#define M_OHCI_INT_SF _OHCI_MAKEMASK1(2)
#define M_OHCI_INT_RD _OHCI_MAKEMASK1(3)
#define M_OHCI_INT_UE _OHCI_MAKEMASK1(4)
#define M_OHCI_INT_FNO _OHCI_MAKEMASK1(5)
#define M_OHCI_INT_RHSC _OHCI_MAKEMASK1(6)
#define M_OHCI_INT_OC _OHCI_MAKEMASK1(30)
#define M_OHCI_INT_MIE _OHCI_MAKEMASK1(31)
#define M_OHCI_INT_ALL M_OHCI_INT_SO | M_OHCI_INT_WDH | M_OHCI_INT_SF | \
M_OHCI_INT_RD | M_OHCI_INT_UE | M_OHCI_INT_FNO | \
M_OHCI_INT_RHSC | M_OHCI_INT_OC | M_OHCI_INT_MIE
/*
* R_OHCI_FMINTERVAL
*/
#define S_OHCI_FMINTERVAL_FI 0
#define M_OHCI_FMINTERVAL_FI _OHCI_MAKEMASK(14,S_OHCI_FMINTERVAL_FI)
#define V_OHCI_FMINTERVAL_FI(x) _OHCI_MAKEVALUE(x,S_OHCI_FMINTERVAL_FI)
#define G_OHCI_FMINTERVAL_FI(x) _OHCI_GETVALUE(x,S_OHCI_FMINTERVAL_FI,M_OHCI_FMINTERVAL_FI)
#define S_OHCI_FMINTERVAL_FSMPS 16
#define M_OHCI_FMINTERVAL_FSMPS _OHCI_MAKEMASK(15,S_OHCI_FMINTERVAL_FSMPS)
#define V_OHCI_FMINTERVAL_FSMPS(x) _OHCI_MAKEVALUE(x,S_OHCI_FMINTERVAL_FSMPS)
#define G_OHCI_FMINTERVAL_FSMPS(x) _OHCI_GETVALUE(x,S_OHCI_FMINTERVAL_FSMPS,M_OHCI_FMINTERVAL_FSMPS)
#define OHCI_CALC_FSMPS(x) ((((x)-210)*6/7))
#define M_OHCI_FMINTERVAL_FIT _OHCI_MAKEMASK1(31)
/*
* R_OHCI_FMREMAINING
*/
#define S_OHCI_FMREMAINING_FR 0
#define M_OHCI_FMREMAINING_FR _OHCI_MAKEMASK(14,S_OHCI_FMREMAINING_FR)
#define V_OHCI_FMREMAINING_FR(x) _OHCI_MAKEVALUE(x,S_OHCI_FMREMAINING_FR)
#define G_OHCI_FMREMAINING_FR(x) _OHCI_GETVALUE(x,S_OHCI_FMREMAINING_FR,M_OHCI_FMREMAINING_FR)
#define M_OHCI_FMREMAINING_FRT _OHCI_MAKEMASK1(31)
/*
* R_OHCI_RHDSCRA
*/
#define S_OHCI_RHDSCRA_NDP 0
#define M_OHCI_RHDSCRA_NDP _OHCI_MAKEMASK(8,S_OHCI_RHDSCRA_NDP)
#define V_OHCI_RHDSCRA_NDP(x) _OHCI_MAKEVALUE(x,S_OHCI_RHDSCRA_NDP)
#define G_OHCI_RHDSCRA_NDP(x) _OHCI_GETVALUE(x,S_OHCI_RHDSCRA_NDP,M_OHCI_RHDSCRA_NDP)
#define M_OHCI_RHDSCRA_PSM _OHCI_MAKEMASK1(8)
#define M_OHCI_RHDSCRA_NPS _OHCI_MAKEMASK1(9)
#define M_OHCI_RHDSCRA_DT _OHCI_MAKEMASK1(10)
#define M_OHCI_RHDSCRA_OCPM _OHCI_MAKEMASK1(11)
#define M_OHCI_RHDSCRA_NOCP _OHCI_MAKEMASK1(12)
#define S_OHCI_RHDSCRA_POTPGT 24
#define M_OHCI_RHDSCRA_POTPGT _OHCI_MAKEMASK(8,S_OHCI_RHDSCRA_POTPGT)
#define V_OHCI_RHDSCRA_POTPGT(x) _OHCI_MAKEVALUE(x,S_OHCI_RHDSCRA_POTPGT)
#define G_OHCI_RHDSCRA_POTPGT(x) _OHCI_GETVALUE(x,S_OHCI_RHDSCRA_POTPGT,M_OHCI_RHDSCRA_POTPGT)
/*
* R_OHCI_RHDSCRB
*/
#define S_OHCI_RHDSCRB_DR 0
#define M_OHCI_RHDSCRB_DR _OHCI_MAKEMASK(16,S_OHCI_RHDSCRB_DR)
#define V_OHCI_RHDSCRB_DR(x) _OHCI_MAKEVALUE(x,S_OHCI_RHDSCRB_DR)
#define G_OHCI_RHDSCRB_DR(x) _OHCI_GETVALUE(x,S_OHCI_RHDSCRB_DR,M_OHCI_RHDSCRB_DR)
#define S_OHCI_RHDSCRB_PPCM 16
#define M_OHCI_RHDSCRB_PPCM _OHCI_MAKEMASK(16,S_OHCI_RHDSCRB_PPCM)
#define V_OHCI_RHDSCRB_PPCM(x) _OHCI_MAKEVALUE(x,S_OHCI_RHDSCRB_PPCM)
#define G_OHCI_RHDSCRB_PPCM(x) _OHCI_GETVALUE(x,S_OHCI_RHDSCRB_PPCM,M_OHCI_RHDSCRB_PPCM)
/*
* R_OHCI_RHSTATUS
*/
#define M_OHCI_RHSTATUS_LPS _OHCI_MAKEMASK1(0)
#define M_OHCI_RHSTATUS_OCI _OHCI_MAKEMASK1(1)
#define M_OHCI_RHSTATUS_DRWE _OHCI_MAKEMASK1(15)
#define M_OHCI_RHSTATUS_LPSC _OHCI_MAKEMASK1(16)
#define M_OHCI_RHSTATUS_OCIC _OHCI_MAKEMASK1(17)
#define M_OHCI_RHSTATUS_CRWE _OHCI_MAKEMASK1(31)
/*
* R_OHCI_RHPORTSTATUS
*/
#define M_OHCI_RHPORTSTAT_CCS _OHCI_MAKEMASK1(0)
#define M_OHCI_RHPORTSTAT_PES _OHCI_MAKEMASK1(1)
#define M_OHCI_RHPORTSTAT_PSS _OHCI_MAKEMASK1(2)
#define M_OHCI_RHPORTSTAT_POCI _OHCI_MAKEMASK1(3)
#define M_OHCI_RHPORTSTAT_PRS _OHCI_MAKEMASK1(4)
#define M_OHCI_RHPORTSTAT_PPS _OHCI_MAKEMASK1(8)
#define M_OHCI_RHPORTSTAT_LSDA _OHCI_MAKEMASK1(9)
#define M_OHCI_RHPORTSTAT_CSC _OHCI_MAKEMASK1(16)
#define M_OHCI_RHPORTSTAT_PESC _OHCI_MAKEMASK1(17)
#define M_OHCI_RHPORTSTAT_PSSC _OHCI_MAKEMASK1(18)
#define M_OHCI_RHPORTSTAT_OCIC _OHCI_MAKEMASK1(19)
#define M_OHCI_RHPORTSTAT_PRSC _OHCI_MAKEMASK1(20)
#define M_OHCI_RHPORTSTAT_ALLC (M_OHCI_RHPORTSTAT_CSC | \
M_OHCI_RHPORTSTAT_PSSC | \
M_OHCI_RHPORTSTAT_OCIC | \
M_OHCI_RHPORTSTAT_PRSC)
/* *********************************************************************
* OHCI Structures
********************************************************************* */
#define beginningof(ptr,type,field) ((type *) (((int) (ptr)) - ((int) ((type *) 0)->field)))
#define OHCI_INTTREE_SIZE 63
#define OHCI_EDPOOL_SIZE 128
#define OHCI_TDPOOL_SIZE 32
typedef struct ohci_endpoint_s {
struct ohci_endpoint_s *ep_next;
uint32_t ep_phys;
int ep_flags;
int ep_mps;
int ep_num;
} ohci_endpoint_t;
typedef struct ohci_transfer_s {
void *t_ref;
int t_length;
struct ohci_transfer_s *t_next;
} ohci_transfer_t;
typedef struct ohci_softc_s {
ohci_endpoint_t *ohci_edtable[OHCI_INTTREE_SIZE];
ohci_endpoint_t *ohci_inttable[OHCI_INTTABLE_SIZE];
ohci_endpoint_t *ohci_isoc_list;
ohci_endpoint_t *ohci_ctl_list;
ohci_endpoint_t *ohci_bulk_list;
ohci_hcca_t *ohci_hcca;
ohci_endpoint_t *ohci_endpoint_pool;
ohci_transfer_t *ohci_transfer_pool;
ohci_ed_t *ohci_hwedpool;
ohci_td_t *ohci_hwtdpool;
ohci_endpoint_t *ohci_endpoint_freelist;
ohci_transfer_t *ohci_transfer_freelist;
#ifdef _CFE_
physaddr_t ohci_regs;
#else
volatile uint32_t *ohci_regs;
#endif
int ohci_ndp;
long ohci_addr;
uint32_t ohci_intdisable;
int ohci_rh_newaddr; /* Address to be set on next status update */
int ohci_rh_addr; /* address of root hub */
int ohci_rh_conf; /* current configuration # */
uint8_t ohci_rh_buf[128]; /* buffer to hold hub responses */
uint8_t *ohci_rh_ptr; /* pointer into buffer */
int ohci_rh_len; /* remaining bytes to transfer */
queue_t ohci_rh_intrq; /* Interrupt request queue */
usbbus_t *ohci_bus; /* owning usbbus structure */
} ohci_softc_t;
/*
* Misc stuff
*/
#define OHCI_RESET_DELAY 10
|