Home | History | Annotate | Download | only in Dxe
      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_REG_H
     20 #define   _OHCI_REG_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 
    367 #pragma pack()
    368 
    369 //
    370 // Func List
    371 //
    372 
    373 
    374 /**
    375 
    376   Get OHCI operational reg value
    377 
    378   @param  PciIo                 PciIo protocol instance
    379   @param  Offset                Offset of the operational reg
    380 
    381   @retval                       Value of the register
    382 
    383 **/
    384 UINT32
    385 OhciGetOperationalReg (
    386   IN EFI_PCI_IO_PROTOCOL  *PciIo,
    387   IN UINT32               Offset
    388   );
    389 
    390 /**
    391 
    392   Set OHCI operational reg value
    393 
    394   @param  PciIo                  PCI Bus Io protocol instance
    395   @param  Offset                 Offset of the operational reg
    396   @param  Value                  Value to set
    397 
    398   @retval EFI_SUCCESS            Value set to the reg
    399 
    400 **/
    401 
    402 
    403 EFI_STATUS
    404 OhciSetOperationalReg (
    405   IN EFI_PCI_IO_PROTOCOL  *PciIo,
    406   IN UINT32               Offset,
    407   IN VOID                 *Value
    408   );
    409 
    410 
    411 /**
    412 
    413   Get HcRevision reg value
    414 
    415   @param  PciIo                 PCI Bus Io protocol instance
    416 
    417   @retval                       Value of the register
    418 
    419 **/
    420 
    421 
    422 UINT32
    423 OhciGetHcRevision (
    424   IN EFI_PCI_IO_PROTOCOL  *PciIo
    425   );
    426 
    427 /**
    428 
    429   Set HcReset reg value
    430 
    431   @param  Ohc                   UHC private data
    432   @param  Field                 Field to set
    433   @param  Value                 Value to set
    434 
    435   @retval EFI_SUCCESS           Value set
    436 
    437 **/
    438 
    439 EFI_STATUS
    440 OhciSetHcReset (
    441   IN USB_OHCI_HC_DEV            *Ohc,
    442   IN UINT32                     Field,
    443   IN UINT32                     Value
    444   );
    445 /**
    446 
    447   Get specific field of HcReset reg value
    448 
    449   @param  Ohc                   UHC private data
    450   @param  Field                 Field to get
    451 
    452   @retval                       Value of the field
    453 
    454 **/
    455 
    456 UINT32
    457 OhciGetHcReset (
    458   IN USB_OHCI_HC_DEV      *Ohc,
    459   IN UINT32               Field
    460   );
    461 /**
    462 
    463   Set HcControl reg value
    464 
    465   @param  Ohc                   UHC private data
    466   @param  Field                 Field to set
    467   @param  Value                 Value to set
    468 
    469   @retval  EFI_SUCCESS          Value set
    470 
    471 **/
    472 
    473 EFI_STATUS
    474 OhciSetHcControl (
    475   IN USB_OHCI_HC_DEV      *Ohc,
    476   IN UINTN                Field,
    477   IN UINT32               Value
    478   );
    479 
    480 
    481 /**
    482 
    483   Get specific field of HcControl reg value
    484 
    485   @param  Ohc                   UHC private data
    486   @param  Field                 Field to get
    487 
    488   @retval                       Value of the field
    489 
    490 **/
    491 
    492 
    493 UINT32
    494 OhciGetHcControl (
    495   IN USB_OHCI_HC_DEV   *Ohc,
    496   IN UINTN             Field
    497   );
    498 
    499 
    500 /**
    501 
    502   Set HcCommand reg value
    503 
    504   @param  Ohc                   UHC private data
    505   @param  Field                 Field to set
    506   @param  Value                 Value to set
    507 
    508   @retval EFI_SUCCESS           Value set
    509 
    510 **/
    511 
    512 EFI_STATUS
    513 OhciSetHcCommandStatus (
    514   IN USB_OHCI_HC_DEV      *Ohc,
    515   IN UINTN                Field,
    516   IN UINT32               Value
    517   );
    518 
    519 /**
    520 
    521   Get specific field of HcCommand reg value
    522 
    523   @param  Ohc                   UHC private data
    524   @param  Field                 Field to get
    525 
    526   @retval                       Value of the field
    527 
    528 **/
    529 
    530 UINT32
    531 OhciGetHcCommandStatus (
    532   IN USB_OHCI_HC_DEV      *Ohc,
    533   IN UINTN                Field
    534   );
    535 
    536 /**
    537 
    538   Clear specific fields of Interrupt Status
    539 
    540   @param  Ohc                   UHC private data
    541   @param  Field                 Field to clear
    542 
    543   @retval EFI_SUCCESS           Fields cleared
    544 
    545 **/
    546 
    547 EFI_STATUS
    548 OhciClearInterruptStatus (
    549   IN USB_OHCI_HC_DEV      *Ohc,
    550   IN UINTN                Field
    551   );
    552 
    553 /**
    554 
    555   Get fields of HcInterrupt reg value
    556 
    557   @param  Ohc                   UHC private data
    558   @param  Field                 Field to get
    559 
    560   @retval                       Value of the field
    561 
    562 **/
    563 
    564 UINT32
    565 OhciGetHcInterruptStatus (
    566   IN USB_OHCI_HC_DEV      *Ohc,
    567   IN UINTN                Field
    568   );
    569 
    570 /**
    571 
    572   Set Interrupt Control reg value
    573 
    574   @param  Ohc                   UHC private data
    575   @param  StatEnable            Enable or Disable
    576   @param  Field                 Field to set
    577   @param  Value                 Value to set
    578 
    579   @retval EFI_SUCCESS           Value set
    580 
    581 **/
    582 
    583 EFI_STATUS
    584 OhciSetInterruptControl (
    585   IN USB_OHCI_HC_DEV      *Ohc,
    586   IN BOOLEAN              StatEnable,
    587   IN UINTN                Field,
    588   IN UINT32               Value
    589   );
    590 
    591 /**
    592 
    593   Get field of HcInterruptControl reg value
    594 
    595   @param  Ohc                   UHC private data
    596   @param  Field                 Field to get
    597 
    598   @retval                       Value of the field
    599 
    600 **/
    601 
    602 UINT32
    603 OhciGetHcInterruptControl (
    604   IN USB_OHCI_HC_DEV      *Ohc,
    605   IN UINTN                Field
    606   );
    607 
    608 
    609 /**
    610 
    611   Set memory pointer of specific type
    612 
    613   @param  Ohc                   UHC private data
    614   @param  PointerType           Type of the pointer to set
    615   @param  Value                 Value to set
    616 
    617   @retval EFI_SUCCESS           Memory pointer set
    618 
    619 **/
    620 
    621 EFI_STATUS
    622 OhciSetMemoryPointer(
    623   IN USB_OHCI_HC_DEV      *Ohc,
    624   IN UINT32               PointerType,
    625   IN VOID                 *Value
    626   );
    627 
    628 /**
    629 
    630   Get memory pointer of specific type
    631 
    632   @param  Ohc                   UHC private data
    633   @param  PointerType           Type of pointer
    634 
    635   @retval                       Memory pointer of the specific type
    636 
    637 **/
    638 
    639 VOID *
    640 OhciGetMemoryPointer (
    641   IN USB_OHCI_HC_DEV      *Ohc,
    642   IN UINT32               PointerType
    643   );
    644 
    645 /**
    646 
    647   Set Frame Interval value
    648 
    649   @param  Ohc                   UHC private data
    650   @param  Field                 Field to set
    651   @param  Value                 Value to set
    652 
    653   @retval  EFI_SUCCESS          Value set
    654 
    655 **/
    656 
    657 EFI_STATUS
    658 OhciSetFrameInterval (
    659   IN USB_OHCI_HC_DEV      *Ohc,
    660   IN UINTN                Field,
    661   IN UINT32               Value
    662   );
    663 
    664 
    665 /**
    666 
    667   Get field of frame interval reg value
    668 
    669   @param  Ohc                   UHC private data
    670   @param  Field                 Field to get
    671 
    672   @retval                       Value of the field
    673 
    674 **/
    675 
    676 UINT32
    677 OhciGetFrameInterval (
    678   IN USB_OHCI_HC_DEV      *Ohc,
    679   IN UINTN                Field
    680   );
    681 
    682 
    683 /**
    684 
    685   Set Frame Remaining reg value
    686 
    687   @param  Ohc                   UHC private data
    688   @param  Value                 Value to set
    689 
    690   @retval  EFI_SUCCESS          Value set
    691 
    692 **/
    693 
    694 EFI_STATUS
    695 OhciSetFrameRemaining (
    696   IN USB_OHCI_HC_DEV      *Ohc,
    697   IN UINT32               Value
    698   );
    699 
    700 /**
    701 
    702   Get value of frame remaining reg
    703 
    704   @param  Ohc                   UHC private data
    705   @param  Field                 Field to get
    706 
    707   @retval                       Value of frame remaining reg
    708 
    709 **/
    710 UINT32
    711 OhciGetFrameRemaining (
    712   IN USB_OHCI_HC_DEV      *Ohc,
    713   IN UINTN                Field
    714   );
    715 
    716 /**
    717 
    718   Set frame number reg value
    719 
    720   @param  Ohc                   UHC private data
    721   @param  Value                 Value to set
    722 
    723   @retval  EFI_SUCCESS          Value set
    724 
    725 **/
    726 
    727 EFI_STATUS
    728 OhciSetFrameNumber(
    729   IN USB_OHCI_HC_DEV      *Ohc,
    730   IN UINT32               Value
    731   );
    732 
    733 /**
    734 
    735   Get frame number reg value
    736 
    737   @param  Ohc                   UHC private data
    738 
    739   @retval                       Value of frame number reg
    740 
    741 **/
    742 
    743 UINT32
    744 OhciGetFrameNumber (
    745   IN USB_OHCI_HC_DEV      *Ohc
    746   );
    747 
    748 
    749 /**
    750 
    751   Set period start 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 OhciSetPeriodicStart (
    762   IN USB_OHCI_HC_DEV      *Ohc,
    763   IN UINT32               Value
    764   );
    765 
    766 
    767 /**
    768 
    769   Get periodic start reg value
    770 
    771   @param  Ohc                   UHC private data
    772 
    773   @param                        Value of periodic start reg
    774 
    775 **/
    776 
    777 UINT32
    778 OhciGetPeriodicStart (
    779   IN USB_OHCI_HC_DEV      *Ohc
    780   );
    781 
    782 
    783 /**
    784 
    785   Set Ls Threshold reg value
    786 
    787   @param  Ohc                   UHC private data
    788   @param  Value                 Value to set
    789 
    790   @retval  EFI_SUCCESS          Value set
    791 
    792 **/
    793 
    794 EFI_STATUS
    795 OhciSetLsThreshold (
    796   IN USB_OHCI_HC_DEV      *Ohc,
    797   IN UINT32               Value
    798   );
    799 
    800 /**
    801 
    802   Get Ls Threshold reg value
    803 
    804   @param  Ohc                   UHC private data
    805 
    806   @retval                       Value of Ls Threshold reg
    807 
    808 **/
    809 
    810 UINT32
    811 OhciGetLsThreshold (
    812   IN USB_OHCI_HC_DEV      *Ohc
    813   );
    814 
    815 /**
    816 
    817   Set Root Hub Descriptor reg value
    818 
    819   @param  Ohc                   UHC private data
    820   @param  Field                 Field to set
    821   @param  Value                 Value to set
    822 
    823   @retval  EFI_SUCCESS          Value set
    824 
    825 **/
    826 EFI_STATUS
    827 OhciSetRootHubDescriptor (
    828   IN USB_OHCI_HC_DEV      *Ohc,
    829   IN UINTN                Field,
    830   IN UINT32               Value
    831   );
    832 
    833 
    834 /**
    835 
    836   Get Root Hub Descriptor reg value
    837 
    838   @param  Ohc                   UHC private data
    839   @param  Field                 Field to get
    840 
    841   @retval                       Value of the field
    842 
    843 **/
    844 
    845 UINT32
    846 OhciGetRootHubDescriptor (
    847   IN USB_OHCI_HC_DEV     *Ohc,
    848   IN UINTN               Field
    849   );
    850 
    851 /**
    852 
    853   Set Root Hub Status reg value
    854 
    855   @param  Ohc                   UHC private data
    856   @param  Field                 Field to set
    857 
    858   @retval  EFI_SUCCESS          Value set
    859 
    860 **/
    861 
    862 EFI_STATUS
    863 OhciSetRootHubStatus (
    864   IN USB_OHCI_HC_DEV      *Ohc,
    865   IN UINTN                Field
    866   );
    867 
    868 
    869 /**
    870 
    871   Get Root Hub Status reg value
    872 
    873   @param  Ohc                   UHC private data
    874   @param  Field                 Field to get
    875 
    876   @retval                       Value of the field
    877 
    878 **/
    879 
    880 UINT32
    881 OhciGetRootHubStatus (
    882   IN USB_OHCI_HC_DEV      *Ohc,
    883   IN UINTN                Field
    884   );
    885 
    886 
    887 /**
    888 
    889   Set Root Hub Port Status reg value
    890 
    891   @param  Ohc                   UHC private data
    892   @param  Index                 Index of the port
    893   @param  Field                 Field to set
    894 
    895   @retval  EFI_SUCCESS          Value set
    896 
    897 **/
    898 
    899 EFI_STATUS
    900 OhciSetRootHubPortStatus (
    901   IN USB_OHCI_HC_DEV      *Ohc,
    902   IN UINT32               Index,
    903   IN UINTN                Field
    904   );
    905 
    906 
    907 /**
    908 
    909   Get Root Hub Port Status reg value
    910 
    911   @param  Ohc                   UHC private data
    912   @param  Index                 Index of the port
    913   @param  Field                 Field to get
    914 
    915   @retval                       Value of the field and index
    916 
    917 **/
    918 
    919 UINT32
    920 OhciReadRootHubPortStatus (
    921   IN USB_OHCI_HC_DEV      *Ohc,
    922   IN UINT32               Index,
    923   IN UINTN                Field
    924   );
    925 
    926 #endif
    927