1 /** @file
2 This file contains the definination for host controller
3 register operation routines.
4 
5 Copyright (c) 2013-2015 Intel Corporation.
6 
7 This program and the accompanying materials
8 are licensed and made available under the terms and conditions of the BSD License
9 which accompanies this distribution.  The full text of the license may be found at
10 http://opensource.org/licenses/bsd-license.php
11 
12 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
13 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
14 
15 **/
16 
17 
18 
19 #ifndef   _OHCI_REGS_H
20 #define   _OHCI_REGS_H
21 
22 #define   HC_STATE_RESET         0x0
23 #define   HC_STATE_RESUME        0x1
24 #define   HC_STATE_OPERATIONAL   0x2
25 #define   HC_STATE_SUSPEND       0x3
26 
27 #define   PERIODIC_ENABLE               0x01
28 #define   ISOCHRONOUS_ENABLE            0x02
29 #define   CONTROL_ENABLE                0x04
30 #define   BULK_ENABLE                   0x08
31 #define   CONTROL_BULK_RATIO            0x10
32 
33 #define   HC_FUNCTIONAL_STATE    0x20
34 #define   INTERRUPT_ROUTING      0x40
35 
36 #define   HC_RESET               0x01
37 #define   CONTROL_LIST_FILLED    0x02
38 #define   BULK_LIST_FILLED       0x04
39 #define   CHANGE_OWNER_REQUEST   0x08
40 
41 #define   SCHEDULE_OVERRUN_COUNT 0x10
42 
43 #define   SCHEDULE_OVERRUN       0x00001
44 #define   WRITEBACK_DONE_HEAD    0x00002
45 #define   START_OF_FRAME         0x00004
46 #define   RESUME_DETECT          0x00008
47 #define   UNRECOVERABLE_ERROR    0x00010
48 #define   FRAME_NUMBER_OVERFLOW  0x00020
49 #define   ROOTHUB_STATUS_CHANGE  0x00040
50 #define   OWNERSHIP_CHANGE       0x00080
51 
52 #define   MASTER_INTERRUPT       0x00400
53 
54 #define   CONTROL_HEAD           0x001
55 #define   BULK_HEAD              0x002
56 #define   DONE_HEAD              0x004
57 
58 #define   Hc_HCCA                0x001
59 #define   Hc_PERIODIC_CURRENT    0x002
60 #define   Hc_CONTOL_HEAD         0x004
61 #define   Hc_CONTROL_CURRENT_PTR 0x008
62 #define   Hc_BULK_HEAD           0x010
63 #define   Hc_BULK_CURRENT_PTR    0x020
64 #define   Hc_DONE_HEAD           0x040
65 
66 #define   FRAME_INTERVAL         0x008
67 #define   FS_LARGEST_DATA_PACKET 0x010
68 #define   FRMINT_TOGGLE          0x020
69 #define   FRAME_REMAINING        0x040
70 #define   FRAME_REMAIN_TOGGLE    0x080
71 
72 #define   RH_DESC_A              0x00001
73 #define   RH_DESC_B              0x00002
74 #define   RH_NUM_DS_PORTS        0x00004
75 #define   RH_NO_PSWITCH          0x00008
76 #define   RH_PSWITCH_MODE        0x00010
77 #define   RH_DEVICE_TYPE         0x00020
78 #define   RH_OC_PROT_MODE        0x00040
79 #define   RH_NOC_PROT            0x00080
80 #define   RH_POTPGT              0x00100
81 #define   RH_NO_POTPGT           0x00200
82 #define   RH_DEV_REMOVABLE       0x00400
83 #define   RH_PORT_PWR_CTRL_MASK  0x00800
84 
85 #define   RH_LOCAL_PSTAT         0x00001
86 #define   RH_OC_ID               0x00002
87 #define   RH_REMOTE_WK_ENABLE    0x00004
88 #define   RH_LOCAL_PSTAT_CHANGE  0x00008
89 #define   RH_OC_ID_CHANGE        0x00010
90 #define   RH_CLR_RMT_WK_ENABLE   0x00020
91 
92 #define   RH_CLEAR_PORT_ENABLE        0x0001
93 #define   RH_SET_PORT_ENABLE          0x0002
94 #define   RH_SET_PORT_SUSPEND         0x0004
95 #define   RH_CLEAR_SUSPEND_STATUS     0x0008
96 #define   RH_SET_PORT_RESET           0x0010
97 #define   RH_SET_PORT_POWER           0x0020
98 #define   RH_CLEAR_PORT_POWER         0x0040
99 #define   RH_CONNECT_STATUS_CHANGE    0x10000
100 #define   RH_PORT_ENABLE_STAT_CHANGE  0x20000
101 #define   RH_PORT_SUSPEND_STAT_CHANGE 0x40000
102 #define   RH_OC_INDICATOR_CHANGE      0x80000
103 #define   RH_PORT_RESET_STAT_CHANGE   0x100000
104 
105 #define   RH_CURR_CONNECT_STAT        0x0001
106 #define   RH_PORT_ENABLE_STAT         0x0002
107 #define   RH_PORT_SUSPEND_STAT        0x0004
108 #define   RH_PORT_OC_INDICATOR        0x0008
109 #define   RH_PORT_RESET_STAT          0x0010
110 #define   RH_PORT_POWER_STAT          0x0020
111 #define   RH_LSDEVICE_ATTACHED        0x0040
112 
113 #define   RESET_SYSTEM_BUS            (1 << 0)
114 #define   RESET_HOST_CONTROLLER       (1 << 1)
115 #define   RESET_CLOCK_GENERATION      (1 << 2)
116 #define   RESET_SSE_GLOBAL            (1 << 5)
117 #define   RESET_PSPL                  (1 << 6)
118 #define   RESET_PCPL                  (1 << 7)
119 #define   RESET_SSEP1                 (1 << 9)
120 #define   RESET_SSEP2                 (1 << 10)
121 #define   RESET_SSEP3                 (1 << 11)
122 
123 #define ONE_SECOND                      1000000
124 #define ONE_MILLI_SEC                   1000
125 #define MAX_BYTES_PER_TD                0x1000
126 #define MAX_RETRY_TIMES                 100
127 #define PORT_NUMBER_ON_MAINSTONE2       1
128 
129 
130 //
131 // Operational Register Offsets
132 //
133 
134 //
135 // Command & Status Registers Offsets
136 //
137 #define HC_REVISION             0x00
138 #define HC_CONTROL              0x04
139 #define HC_COMMAND_STATUS       0x08
140 #define HC_INTERRUPT_STATUS     0x0C
141 #define HC_INTERRUPT_ENABLE     0x10
142 #define HC_INTERRUPT_DISABLE    0x14
143 
144 //
145 // Memory Pointer Offsets
146 //
147 #define HC_HCCA                 0x18
148 #define HC_PERIODIC_CURRENT     0x1C
149 #define HC_CONTROL_HEAD         0x20
150 #define HC_CONTROL_CURRENT_PTR  0x24
151 #define HC_BULK_HEAD            0x28
152 #define HC_BULK_CURRENT_PTR     0x2C
153 #define HC_DONE_HEAD            0x30
154 
155 //
156 // Frame Register Offsets
157 //
158 #define HC_FRM_INTERVAL         0x34
159 #define HC_FRM_REMAINING        0x38
160 #define HC_FRM_NUMBER           0x3C
161 #define HC_PERIODIC_START       0x40
162 #define HC_LS_THREASHOLD        0x44
163 
164 //
165 // Root Hub Register Offsets
166 //
167 #define HC_RH_DESC_A            0x48
168 #define HC_RH_DESC_B            0x4C
169 #define HC_RH_STATUS            0x50
170 #define HC_RH_PORT_STATUS       0x54
171 
172 #define USBHOST_OFFSET_UHCHR         0x64         // Usb Host reset register
173 
174 #define OHC_BAR_INDEX               0
175 
176 //
177 // Usb Host controller register offset
178 //
179 #define USBHOST_OFFSET_UHCREV        0x0          // Usb Host revision register
180 #define USBHOST_OFFSET_UHCHCON       0x4          // Usb Host control register
181 #define USBHOST_OFFSET_UHCCOMS       0x8          // Usb Host Command Status register
182 #define USBHOST_OFFSET_UHCINTS       0xC          // Usb Host Interrupt Status register
183 #define USBHOST_OFFSET_UHCINTE       0x10         // Usb Host Interrupt Enable register
184 #define USBHOST_OFFSET_UHCINTD       0x14         // Usb Host Interrupt Disable register
185 #define USBHOST_OFFSET_UHCHCCA       0x18         // Usb Host Controller Communication Area
186 #define USBHOST_OFFSET_UHCPCED       0x1C         // Usb Host Period Current Endpoint Descriptor
187 #define USBHOST_OFFSET_UHCCHED       0x20         // Usb Host Control Head Endpoint Descriptor
188 #define USBHOST_OFFSET_UHCCCED       0x24         // Usb Host Control Current Endpoint Descriptor
189 #define USBHOST_OFFSET_UHCBHED       0x28         // Usb Host Bulk Head Endpoint Descriptor
190 #define USBHOST_OFFSET_UHCBCED       0x2C         // Usb Host Bulk Current Endpoint Descriptor
191 #define USBHOST_OFFSET_UHCDHEAD      0x30         // Usb Host Done Head register
192 #define USBHOST_OFFSET_UHCFMI        0x34         // Usb Host Frame Interval register
193 #define USBHOST_OFFSET_UHCFMR        0x38         // Usb Host Frame Remaining register
194 #define USBHOST_OFFSET_UHCFMN        0x3C         // Usb Host Frame Number register
195 #define USBHOST_OFFSET_UHCPERS       0x40         // Usb Host Periodic Start register
196 #define USBHOST_OFFSET_UHCLST        0x44         // Usb Host Low-Speed Threshold register
197 #define USBHOST_OFFSET_UHCRHDA       0x48         // Usb Host Root Hub Descriptor A register
198 #define USBHOST_OFFSET_UHCRHDB       0x4C         // Usb Host Root Hub Descriptor B register
199 #define USBHOST_OFFSET_UHCRHS        0x50         // Usb Host Root Hub Status register
200 #define USBHOST_OFFSET_UHCRHPS1      0x54         // Usb Host Root Hub Port Status 1 register
201 
202 //
203 // Usb Host controller register bit fields
204 //
205 #pragma pack(1)
206 
207 typedef struct {
208   UINT8                   ProgInterface;
209   UINT8                   SubClassCode;
210   UINT8                   BaseCode;
211 } USB_CLASSC;
212 
213 typedef struct {
214     UINT32 Revision:8;
215     UINT32 Rsvd:24;
216 } HcREVISION;
217 
218 typedef struct {
219     UINT32 ControlBulkRatio:2;
220     UINT32 PeriodicEnable:1;
221     UINT32 IsochronousEnable:1;
222     UINT32 ControlEnable:1;
223     UINT32 BulkEnable:1;
224     UINT32 FunctionalState:2;
225     UINT32 InterruptRouting:1;
226     UINT32 RemoteWakeup:1;
227     UINT32 RemoteWakeupEnable:1;
228     UINT32 Reserved:21;
229 } HcCONTROL;
230 
231 typedef struct {
232     UINT32 HcReset:1;
233     UINT32 ControlListFilled:1;
234     UINT32 BulkListFilled:1;
235     UINT32 ChangeOwnerRequest:1;
236     UINT32 Reserved1:12;
237     UINT32 ScheduleOverrunCount:2;
238     UINT32 Reserved:14;
239 } HcCOMMAND_STATUS;
240 
241 typedef struct {
242     UINT32 SchedulingOverrun:1;
243     UINT32 WriteBackDone:1;
244     UINT32 Sof:1;
245     UINT32 ResumeDetected:1;
246     UINT32 UnrecoverableError:1;
247     UINT32 FrameNumOverflow:1;
248     UINT32 RHStatusChange:1;
249     UINT32 Reserved1:23;
250     UINT32 OwnerChange:1;
251     UINT32 Reserved2:1;
252 } HcINTERRUPT_STATUS;
253 
254 typedef struct {
255     UINT32 SchedulingOverrunInt:1;
256     UINT32 WriteBackDoneInt:1;
257     UINT32 SofInt:1;
258     UINT32 ResumeDetectedInt:1;
259     UINT32 UnrecoverableErrorInt:1;
260     UINT32 FrameNumOverflowInt:1;
261     UINT32 RHStatusChangeInt:1;
262     UINT32 Reserved:23;
263     UINT32 OwnerChangedInt:1;
264     UINT32 MasterInterruptEnable:1;
265 } HcINTERRUPT_CONTROL;
266 
267 typedef struct {
268     UINT32 Rerserved:8;
269     UINT32 Hcca:24;
270 } HcHCCA;
271 
272 typedef struct {
273     UINT32 Reserved:4;
274     UINT32 MemoryPtr:28;
275 } HcMEMORY_PTR;
276 
277 typedef struct {
278     UINT32 FrameInterval:14;
279     UINT32 Reserved:2;
280     UINT32 FSMaxDataPacket:15;
281     UINT32 FrmIntervalToggle:1;
282 } HcFRM_INTERVAL;
283 
284 typedef struct {
285     UINT32 FrameRemaining:14;
286     UINT32 Reserved:17;
287     UINT32 FrameRemainingToggle:1;
288 } HcFRAME_REMAINING;
289 
290 typedef struct {
291     UINT32 FrameNumber:16;
292     UINT32 Reserved:16;
293 } HcFRAME_NUMBER;
294 
295 typedef struct {
296     UINT32 PeriodicStart:14;
297     UINT32 Reserved:18;
298 } HcPERIODIC_START;
299 
300 typedef struct {
301     UINT32 LsThreshold:12;
302     UINT32 Reserved:20;
303 } HcLS_THRESHOLD;
304 
305 typedef struct {
306     UINT32 NumDownStrmPorts:8;
307     UINT32 PowerSwitchMode:1;
308     UINT32 NoPowerSwitch:1;
309     UINT32 DeviceType:1;
310     UINT32 OverCurrentProtMode:1;
311     UINT32 NoOverCurrentProtMode:1;
312     UINT32 Reserved:11;
313     UINT32 PowerOnToPowerGoodTime:8;
314 } HcRH_DESC_A;
315 
316 typedef struct {
317     UINT32 DeviceRemovable:16;
318     UINT32 PortPowerControlMask:16;
319 } HcRH_DESC_B;
320 
321 typedef struct {
322     UINT32 LocalPowerStat:1;
323     UINT32 OverCurrentIndicator:1;
324     UINT32 Reserved1:13;
325     UINT32 DevRemoteWakeupEnable:1;
326     UINT32 LocalPowerStatChange:1;
327     UINT32 OverCurrentIndicatorChange:1;
328     UINT32 Reserved2:13;
329     UINT32 ClearRemoteWakeupEnable:1;
330 } HcRH_STATUS;
331 
332 typedef struct {
333     UINT32 CurrentConnectStat:1;
334     UINT32 EnableStat:1;
335     UINT32 SuspendStat:1;
336     UINT32 OCIndicator:1;
337     UINT32 ResetStat:1;
338     UINT32 Reserved1:3;
339     UINT32 PowerStat:1;
340     UINT32 LsDeviceAttached:1;
341     UINT32 Reserved2:6;
342     UINT32 ConnectStatChange:1;
343     UINT32 EnableStatChange:1;
344     UINT32 SuspendStatChange:1;
345     UINT32 OCIndicatorChange:1;
346     UINT32 ResetStatChange:1;
347     UINT32 Reserved3:11;
348 } HcRHPORT_STATUS;
349 
350 typedef struct {
351     UINT32 FSBIR:1;
352     UINT32 FHR:1;
353     UINT32 CGR:1;
354     UINT32 SSDC:1;
355     UINT32 UIT:1;
356     UINT32 SSE:1;
357     UINT32 PSPL:1;
358     UINT32 PCPL:1;
359     UINT32 Reserved0:1;
360     UINT32 SSEP1:1;
361     UINT32 SSEP2:1;
362     UINT32 SSEP3:1;
363     UINT32 Reserved1:20;
364 } HcRESET;
365 
366 #pragma pack()
367 
368 //
369 // Func List
370 //
371 /**
372 
373   Get OHCI operational reg value
374 
375   @param  Ohc                   UHC private data
376   @param  Offset                Offset of the operational reg
377 
378   @retval                       Value of the register
379 
380 **/
381 UINT32
382 OhciGetOperationalReg (
383   IN USB_OHCI_HC_DEV         *Ohc,
384   IN UINT32                  Offset
385   );
386 /**
387 
388   Set OHCI operational reg value
389 
390   @param  Ohc                   UHC private data
391   @param  Offset                 Offset of the operational reg
392   @param  Value                  Value to set
393 
394   @retval EFI_SUCCESS            Value set to the reg
395 
396 **/
397 EFI_STATUS
398 OhciSetOperationalReg (
399   USB_OHCI_HC_DEV         *Ohc,
400   IN UINT32               Offset,
401   IN UINT32               *Value
402   );
403 /**
404 
405   Get HcRevision reg value
406 
407   @param  Ohc                   UHC private data
408 
409   @retval                       Value of the register
410 
411 **/
412 
413 
414 UINT32
415 OhciGetHcRevision (
416   USB_OHCI_HC_DEV         *Ohc
417   );
418 
419 /**
420 
421   Set HcReset reg value
422 
423   @param  Ohc                   UHC private data
424   @param  Field                 Field to set
425   @param  Value                 Value to set
426 
427   @retval EFI_SUCCESS           Value set
428 
429 **/
430 
431 EFI_STATUS
432 OhciSetHcReset (
433   IN USB_OHCI_HC_DEV            *Ohc,
434   IN UINT32                     Field,
435   IN UINT32                     Value
436   );
437 /**
438 
439   Get specific field of HcReset reg value
440 
441   @param  Ohc                   UHC private data
442   @param  Field                 Field to get
443 
444   @retval                       Value of the field
445 
446 **/
447 
448 UINT32
449 OhciGetHcReset (
450   IN USB_OHCI_HC_DEV      *Ohc,
451   IN UINT32               Field
452   );
453 /**
454 
455   Set HcControl reg value
456 
457   @param  Ohc                   UHC private data
458   @param  Field                 Field to set
459   @param  Value                 Value to set
460 
461   @retval  EFI_SUCCESS          Value set
462 
463 **/
464 
465 EFI_STATUS
466 OhciSetHcControl (
467   IN USB_OHCI_HC_DEV      *Ohc,
468   IN UINTN                Field,
469   IN UINT32               Value
470   );
471 /**
472 
473   Get specific field of HcControl reg value
474 
475   @param  Ohc                   UHC private data
476   @param  Field                 Field to get
477 
478   @retval                       Value of the field
479 
480 **/
481 
482 
483 UINT32
484 OhciGetHcControl (
485   IN USB_OHCI_HC_DEV   *Ohc,
486   IN UINTN             Field
487   );
488 /**
489 
490   Set HcCommand reg value
491 
492   @param  Ohc                   UHC private data
493   @param  Field                 Field to set
494   @param  Value                 Value to set
495 
496   @retval EFI_SUCCESS           Value set
497 
498 **/
499 
500 EFI_STATUS
501 OhciSetHcCommandStatus (
502   IN USB_OHCI_HC_DEV      *Ohc,
503   IN UINTN                Field,
504   IN UINT32               Value
505   );
506 /**
507 
508   Get specific field of HcCommand reg value
509 
510   @param  Ohc                   UHC private data
511   @param  Field                 Field to get
512 
513   @retval                       Value of the field
514 
515 **/
516 
517 UINT32
518 OhciGetHcCommandStatus (
519   IN USB_OHCI_HC_DEV      *Ohc,
520   IN UINTN                Field
521   );
522 /**
523 
524   Clear specific fields of Interrupt Status
525 
526   @param  Ohc                   UHC private data
527   @param  Field                 Field to clear
528 
529   @retval EFI_SUCCESS           Fields cleared
530 
531 **/
532 
533 EFI_STATUS
534 OhciClearInterruptStatus (
535   IN USB_OHCI_HC_DEV      *Ohc,
536   IN UINTN                Field
537   );
538 /**
539 
540   Get fields of HcInterrupt reg value
541 
542   @param  Ohc                   UHC private data
543   @param  Field                 Field to get
544 
545   @retval                       Value of the field
546 
547 **/
548 
549 UINT32
550 OhciGetHcInterruptStatus (
551   IN USB_OHCI_HC_DEV      *Ohc,
552   IN UINTN                Field
553   );
554 /**
555 
556   Set Interrupt Control reg value
557 
558   @param  Ohc                   UHC private data
559   @param  StatEnable            Enable or Disable
560   @param  Field                 Field to set
561   @param  Value                 Value to set
562 
563   @retval EFI_SUCCESS           Value set
564 
565 **/
566 
567 EFI_STATUS
568 OhciSetInterruptControl (
569   IN USB_OHCI_HC_DEV      *Ohc,
570   IN BOOLEAN              StatEnable,
571   IN UINTN                Field,
572   IN UINT32               Value
573   );
574 /**
575 
576   Get field of HcInterruptControl reg value
577 
578   @param  Ohc                   UHC private data
579   @param  Field                 Field to get
580 
581   @retval                       Value of the field
582 
583 **/
584 
585 UINT32
586 OhciGetHcInterruptControl (
587   IN USB_OHCI_HC_DEV      *Ohc,
588   IN UINTN                Field
589   );
590 /**
591 
592   Set memory pointer of specific type
593 
594   @param  Ohc                   UHC private data
595   @param  PointerType           Type of the pointer to set
596   @param  Value                 Value to set
597 
598   @retval EFI_SUCCESS           Memory pointer set
599 
600 **/
601 
602 EFI_STATUS
603 OhciSetMemoryPointer(
604   IN USB_OHCI_HC_DEV      *Ohc,
605   IN UINTN                PointerType,
606   IN VOID                 *Value
607   );
608 /**
609 
610   Get memory pointer of specific type
611 
612   @param  Ohc                   UHC private data
613   @param  PointerType           Type of pointer
614 
615   @retval                       Memory pointer of the specific type
616 
617 **/
618 
619 VOID *
620 OhciGetMemoryPointer (
621   IN USB_OHCI_HC_DEV      *Ohc,
622   IN UINTN                PointerType
623   );
624 /**
625 
626   Set Frame Interval value
627 
628   @param  Ohc                   UHC private data
629   @param  Field                 Field to set
630   @param  Value                 Value to set
631 
632   @retval  EFI_SUCCESS          Value set
633 
634 **/
635 
636 EFI_STATUS
637 OhciSetFrameInterval (
638   IN USB_OHCI_HC_DEV      *Ohc,
639   IN UINTN                Field,
640   IN UINT32               Value
641   );
642 /**
643 
644   Get field of frame interval reg value
645 
646   @param  Ohc                   UHC private data
647   @param  Field                 Field to get
648 
649   @retval                       Value of the field
650 
651 **/
652 
653 UINT32
654 OhciGetFrameInterval (
655   IN USB_OHCI_HC_DEV      *Ohc,
656   IN UINTN                Field
657   );
658 /**
659 
660   Set Frame Remaining reg value
661 
662   @param  Ohc                   UHC private data
663   @param  Value                 Value to set
664 
665   @retval  EFI_SUCCESS          Value set
666 
667 **/
668 
669 EFI_STATUS
670 OhciSetFrameRemaining (
671   IN USB_OHCI_HC_DEV      *Ohc,
672   IN UINT32               Value
673   );
674 /**
675 
676   Get value of frame remaining reg
677 
678   @param  Ohc                   UHC private data
679   @param  Field                 Field to get
680 
681   @retval                       Value of frame remaining reg
682 
683 **/
684 UINT32
685 OhciGetFrameRemaining (
686   IN USB_OHCI_HC_DEV      *Ohc,
687   IN UINTN                Field
688   );
689 /**
690 
691   Set frame number reg value
692 
693   @param  Ohc                   UHC private data
694   @param  Value                 Value to set
695 
696   @retval  EFI_SUCCESS          Value set
697 
698 **/
699 
700 EFI_STATUS
701 OhciSetFrameNumber(
702   IN USB_OHCI_HC_DEV      *Ohc,
703   IN UINT32               Value
704   );
705 /**
706 
707   Get frame number reg value
708 
709   @param  Ohc                   UHC private data
710 
711   @retval                       Value of frame number reg
712 
713 **/
714 
715 UINT32
716 OhciGetFrameNumber (
717   IN USB_OHCI_HC_DEV      *Ohc
718   );
719 /**
720 
721   Set period start reg value
722 
723   @param  Ohc                   UHC private data
724   @param  Value                 Value to set
725 
726   @retval EFI_SUCCESS           Value set
727 
728 **/
729 
730 EFI_STATUS
731 OhciSetPeriodicStart (
732   IN USB_OHCI_HC_DEV      *Ohc,
733   IN UINT32               Value
734   );
735 /**
736 
737   Get periodic start reg value
738 
739   @param  Ohc                   UHC private data
740 
741   @param                        Value of periodic start reg
742 
743 **/
744 
745 UINT32
746 OhciGetPeriodicStart (
747   IN USB_OHCI_HC_DEV      *Ohc
748   );
749 /**
750 
751   Set Ls Threshold reg value
752 
753   @param  Ohc                   UHC private data
754   @param  Value                 Value to set
755 
756   @retval  EFI_SUCCESS          Value set
757 
758 **/
759 
760 EFI_STATUS
761 OhciSetLsThreshold (
762   IN USB_OHCI_HC_DEV      *Ohc,
763   IN UINT32               Value
764   );
765 /**
766 
767   Get Ls Threshold reg value
768 
769   @param  Ohc                   UHC private data
770 
771   @retval                       Value of Ls Threshold reg
772 
773 **/
774 
775 UINT32
776 OhciGetLsThreshold (
777   IN USB_OHCI_HC_DEV      *Ohc
778   );
779 /**
780 
781   Set Root Hub Descriptor reg value
782 
783   @param  Ohc                   UHC private data
784   @param  Field                 Field to set
785   @param  Value                 Value to set
786 
787   @retval  EFI_SUCCESS          Value set
788 
789 **/
790 EFI_STATUS
791 OhciSetRootHubDescriptor (
792   IN USB_OHCI_HC_DEV      *Ohc,
793   IN UINTN                Field,
794   IN UINT32               Value
795   );
796 /**
797 
798   Get Root Hub Descriptor reg value
799 
800   @param  Ohc                   UHC private data
801   @param  Field                 Field to get
802 
803   @retval                       Value of the field
804 
805 **/
806 
807 UINT32
808 OhciGetRootHubDescriptor (
809   IN USB_OHCI_HC_DEV     *Ohc,
810   IN UINTN               Field
811   );
812 /**
813 
814   Set Root Hub Status reg value
815 
816   @param  Ohc                   UHC private data
817   @param  Field                 Field to set
818 
819   @retval  EFI_SUCCESS          Value set
820 
821 **/
822 
823 EFI_STATUS
824 OhciSetRootHubStatus (
825   IN USB_OHCI_HC_DEV      *Ohc,
826   IN UINTN                Field
827   );
828 /**
829 
830   Get Root Hub Status reg value
831 
832   @param  Ohc                   UHC private data
833   @param  Field                 Field to get
834 
835   @retval                       Value of the field
836 
837 **/
838 
839 UINT32
840 OhciGetRootHubStatus (
841   IN USB_OHCI_HC_DEV      *Ohc,
842   IN UINTN                Field
843   );
844 /**
845 
846   Set Root Hub Port Status reg value
847 
848   @param  Ohc                   UHC private data
849   @param  Index                 Index of the port
850   @param  Field                 Field to set
851 
852   @retval  EFI_SUCCESS          Value set
853 
854 **/
855 
856 EFI_STATUS
857 OhciSetRootHubPortStatus (
858   IN USB_OHCI_HC_DEV      *Ohc,
859   IN UINT32               Index,
860   IN UINTN                Field
861   );
862 /**
863 
864   Get Root Hub Port Status reg value
865 
866   @param  Ohc                   UHC private data
867   @param  Index                 Index of the port
868   @param  Field                 Field to get
869 
870   @retval                       Value of the field and index
871 
872 **/
873 
874 UINT32
875 OhciReadRootHubPortStatus (
876   IN USB_OHCI_HC_DEV      *Ohc,
877   IN UINT32               Index,
878   IN UINTN                Field
879   );
880 
881 #endif
882