--- /dev/null
+/** @file\r
+This file contains the definination for host controller\r
+register operation routines.\r
+\r
+Copyright (c) 2013-2015 Intel Corporation.\r
+\r
+This program and the accompanying materials\r
+are licensed and made available under the terms and conditions of the BSD License\r
+which accompanies this distribution. The full text of the license may be found at\r
+http://opensource.org/licenses/bsd-license.php\r
+\r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+\r
+\r
+#ifndef _OHCI_REG_H\r
+#define _OHCI_REG_H\r
+\r
+#define HC_STATE_RESET 0x0\r
+#define HC_STATE_RESUME 0x1\r
+#define HC_STATE_OPERATIONAL 0x2\r
+#define HC_STATE_SUSPEND 0x3\r
+\r
+#define PERIODIC_ENABLE 0x01\r
+#define ISOCHRONOUS_ENABLE 0x02\r
+#define CONTROL_ENABLE 0x04\r
+#define BULK_ENABLE 0x08\r
+#define CONTROL_BULK_RATIO 0x10\r
+\r
+#define HC_FUNCTIONAL_STATE 0x20\r
+#define INTERRUPT_ROUTING 0x40\r
+\r
+#define HC_RESET 0x01\r
+#define CONTROL_LIST_FILLED 0x02\r
+#define BULK_LIST_FILLED 0x04\r
+#define CHANGE_OWNER_REQUEST 0x08\r
+\r
+#define SCHEDULE_OVERRUN_COUNT 0x10\r
+\r
+#define SCHEDULE_OVERRUN 0x00001\r
+#define WRITEBACK_DONE_HEAD 0x00002\r
+#define START_OF_FRAME 0x00004\r
+#define RESUME_DETECT 0x00008\r
+#define UNRECOVERABLE_ERROR 0x00010\r
+#define FRAME_NUMBER_OVERFLOW 0x00020\r
+#define ROOTHUB_STATUS_CHANGE 0x00040\r
+#define OWNERSHIP_CHANGE 0x00080\r
+\r
+#define MASTER_INTERRUPT 0x00400\r
+\r
+#define CONTROL_HEAD 0x001\r
+#define BULK_HEAD 0x002\r
+#define DONE_HEAD 0x004\r
+\r
+#define Hc_HCCA 0x001\r
+#define Hc_PERIODIC_CURRENT 0x002\r
+#define Hc_CONTOL_HEAD 0x004\r
+#define Hc_CONTROL_CURRENT_PTR 0x008\r
+#define Hc_BULK_HEAD 0x010\r
+#define Hc_BULK_CURRENT_PTR 0x020\r
+#define Hc_DONE_HEAD 0x040\r
+\r
+#define FRAME_INTERVAL 0x008\r
+#define FS_LARGEST_DATA_PACKET 0x010\r
+#define FRMINT_TOGGLE 0x020\r
+#define FRAME_REMAINING 0x040\r
+#define FRAME_REMAIN_TOGGLE 0x080\r
+\r
+#define RH_DESC_A 0x00001\r
+#define RH_DESC_B 0x00002\r
+#define RH_NUM_DS_PORTS 0x00004\r
+#define RH_NO_PSWITCH 0x00008\r
+#define RH_PSWITCH_MODE 0x00010\r
+#define RH_DEVICE_TYPE 0x00020\r
+#define RH_OC_PROT_MODE 0x00040\r
+#define RH_NOC_PROT 0x00080\r
+#define RH_POTPGT 0x00100\r
+#define RH_NO_POTPGT 0x00200\r
+#define RH_DEV_REMOVABLE 0x00400\r
+#define RH_PORT_PWR_CTRL_MASK 0x00800\r
+\r
+#define RH_LOCAL_PSTAT 0x00001\r
+#define RH_OC_ID 0x00002\r
+#define RH_REMOTE_WK_ENABLE 0x00004\r
+#define RH_LOCAL_PSTAT_CHANGE 0x00008\r
+#define RH_OC_ID_CHANGE 0x00010\r
+#define RH_CLR_RMT_WK_ENABLE 0x00020\r
+\r
+#define RH_CLEAR_PORT_ENABLE 0x0001\r
+#define RH_SET_PORT_ENABLE 0x0002\r
+#define RH_SET_PORT_SUSPEND 0x0004\r
+#define RH_CLEAR_SUSPEND_STATUS 0x0008\r
+#define RH_SET_PORT_RESET 0x0010\r
+#define RH_SET_PORT_POWER 0x0020\r
+#define RH_CLEAR_PORT_POWER 0x0040\r
+#define RH_CONNECT_STATUS_CHANGE 0x10000\r
+#define RH_PORT_ENABLE_STAT_CHANGE 0x20000\r
+#define RH_PORT_SUSPEND_STAT_CHANGE 0x40000\r
+#define RH_OC_INDICATOR_CHANGE 0x80000\r
+#define RH_PORT_RESET_STAT_CHANGE 0x100000\r
+\r
+#define RH_CURR_CONNECT_STAT 0x0001\r
+#define RH_PORT_ENABLE_STAT 0x0002\r
+#define RH_PORT_SUSPEND_STAT 0x0004\r
+#define RH_PORT_OC_INDICATOR 0x0008\r
+#define RH_PORT_RESET_STAT 0x0010\r
+#define RH_PORT_POWER_STAT 0x0020\r
+#define RH_LSDEVICE_ATTACHED 0x0040\r
+\r
+#define RESET_SYSTEM_BUS (1 << 0)\r
+#define RESET_HOST_CONTROLLER (1 << 1)\r
+#define RESET_CLOCK_GENERATION (1 << 2)\r
+#define RESET_SSE_GLOBAL (1 << 5)\r
+#define RESET_PSPL (1 << 6)\r
+#define RESET_PCPL (1 << 7)\r
+#define RESET_SSEP1 (1 << 9)\r
+#define RESET_SSEP2 (1 << 10)\r
+#define RESET_SSEP3 (1 << 11)\r
+\r
+#define ONE_SECOND 1000000\r
+#define ONE_MILLI_SEC 1000\r
+#define MAX_BYTES_PER_TD 0x1000\r
+#define MAX_RETRY_TIMES 100\r
+#define PORT_NUMBER_ON_MAINSTONE2 1\r
+\r
+\r
+//\r
+// Operational Register Offsets\r
+//\r
+\r
+//\r
+// Command & Status Registers Offsets\r
+//\r
+#define HC_REVISION 0x00\r
+#define HC_CONTROL 0x04\r
+#define HC_COMMAND_STATUS 0x08\r
+#define HC_INTERRUPT_STATUS 0x0C\r
+#define HC_INTERRUPT_ENABLE 0x10\r
+#define HC_INTERRUPT_DISABLE 0x14\r
+\r
+//\r
+// Memory Pointer Offsets\r
+//\r
+#define HC_HCCA 0x18\r
+#define HC_PERIODIC_CURRENT 0x1C\r
+#define HC_CONTROL_HEAD 0x20\r
+#define HC_CONTROL_CURRENT_PTR 0x24\r
+#define HC_BULK_HEAD 0x28\r
+#define HC_BULK_CURRENT_PTR 0x2C\r
+#define HC_DONE_HEAD 0x30\r
+\r
+//\r
+// Frame Register Offsets\r
+//\r
+#define HC_FRM_INTERVAL 0x34\r
+#define HC_FRM_REMAINING 0x38\r
+#define HC_FRM_NUMBER 0x3C\r
+#define HC_PERIODIC_START 0x40\r
+#define HC_LS_THREASHOLD 0x44\r
+\r
+//\r
+// Root Hub Register Offsets\r
+//\r
+#define HC_RH_DESC_A 0x48\r
+#define HC_RH_DESC_B 0x4C\r
+#define HC_RH_STATUS 0x50\r
+#define HC_RH_PORT_STATUS 0x54\r
+\r
+#define USBHOST_OFFSET_UHCHR 0x64 // Usb Host reset register\r
+\r
+#define OHC_BAR_INDEX 0\r
+\r
+//\r
+// Usb Host controller register offset\r
+//\r
+#define USBHOST_OFFSET_UHCREV 0x0 // Usb Host revision register\r
+#define USBHOST_OFFSET_UHCHCON 0x4 // Usb Host control register\r
+#define USBHOST_OFFSET_UHCCOMS 0x8 // Usb Host Command Status register\r
+#define USBHOST_OFFSET_UHCINTS 0xC // Usb Host Interrupt Status register\r
+#define USBHOST_OFFSET_UHCINTE 0x10 // Usb Host Interrupt Enable register\r
+#define USBHOST_OFFSET_UHCINTD 0x14 // Usb Host Interrupt Disable register\r
+#define USBHOST_OFFSET_UHCHCCA 0x18 // Usb Host Controller Communication Area\r
+#define USBHOST_OFFSET_UHCPCED 0x1C // Usb Host Period Current Endpoint Descriptor\r
+#define USBHOST_OFFSET_UHCCHED 0x20 // Usb Host Control Head Endpoint Descriptor\r
+#define USBHOST_OFFSET_UHCCCED 0x24 // Usb Host Control Current Endpoint Descriptor\r
+#define USBHOST_OFFSET_UHCBHED 0x28 // Usb Host Bulk Head Endpoint Descriptor\r
+#define USBHOST_OFFSET_UHCBCED 0x2C // Usb Host Bulk Current Endpoint Descriptor\r
+#define USBHOST_OFFSET_UHCDHEAD 0x30 // Usb Host Done Head register\r
+#define USBHOST_OFFSET_UHCFMI 0x34 // Usb Host Frame Interval register\r
+#define USBHOST_OFFSET_UHCFMR 0x38 // Usb Host Frame Remaining register\r
+#define USBHOST_OFFSET_UHCFMN 0x3C // Usb Host Frame Number register\r
+#define USBHOST_OFFSET_UHCPERS 0x40 // Usb Host Periodic Start register\r
+#define USBHOST_OFFSET_UHCLST 0x44 // Usb Host Low-Speed Threshold register\r
+#define USBHOST_OFFSET_UHCRHDA 0x48 // Usb Host Root Hub Descriptor A register\r
+#define USBHOST_OFFSET_UHCRHDB 0x4C // Usb Host Root Hub Descriptor B register\r
+#define USBHOST_OFFSET_UHCRHS 0x50 // Usb Host Root Hub Status register\r
+#define USBHOST_OFFSET_UHCRHPS1 0x54 // Usb Host Root Hub Port Status 1 register\r
+\r
+//\r
+// Usb Host controller register bit fields\r
+//\r
+#pragma pack(1)\r
+\r
+typedef struct {\r
+ UINT8 ProgInterface;\r
+ UINT8 SubClassCode;\r
+ UINT8 BaseCode;\r
+} USB_CLASSC;\r
+\r
+typedef struct {\r
+ UINT32 Revision:8;\r
+ UINT32 Rsvd:24;\r
+} HcREVISION;\r
+\r
+typedef struct {\r
+ UINT32 ControlBulkRatio:2;\r
+ UINT32 PeriodicEnable:1;\r
+ UINT32 IsochronousEnable:1;\r
+ UINT32 ControlEnable:1;\r
+ UINT32 BulkEnable:1;\r
+ UINT32 FunctionalState:2;\r
+ UINT32 InterruptRouting:1;\r
+ UINT32 RemoteWakeup:1;\r
+ UINT32 RemoteWakeupEnable:1;\r
+ UINT32 Reserved:21;\r
+} HcCONTROL;\r
+\r
+typedef struct {\r
+ UINT32 HcReset:1;\r
+ UINT32 ControlListFilled:1;\r
+ UINT32 BulkListFilled:1;\r
+ UINT32 ChangeOwnerRequest:1;\r
+ UINT32 Reserved1:12;\r
+ UINT32 ScheduleOverrunCount:2;\r
+ UINT32 Reserved:14;\r
+} HcCOMMAND_STATUS;\r
+\r
+typedef struct {\r
+ UINT32 SchedulingOverrun:1;\r
+ UINT32 WriteBackDone:1;\r
+ UINT32 Sof:1;\r
+ UINT32 ResumeDetected:1;\r
+ UINT32 UnrecoverableError:1;\r
+ UINT32 FrameNumOverflow:1;\r
+ UINT32 RHStatusChange:1;\r
+ UINT32 Reserved1:23;\r
+ UINT32 OwnerChange:1;\r
+ UINT32 Reserved2:1;\r
+} HcINTERRUPT_STATUS;\r
+\r
+typedef struct {\r
+ UINT32 SchedulingOverrunInt:1;\r
+ UINT32 WriteBackDoneInt:1;\r
+ UINT32 SofInt:1;\r
+ UINT32 ResumeDetectedInt:1;\r
+ UINT32 UnrecoverableErrorInt:1;\r
+ UINT32 FrameNumOverflowInt:1;\r
+ UINT32 RHStatusChangeInt:1;\r
+ UINT32 Reserved:23;\r
+ UINT32 OwnerChangedInt:1;\r
+ UINT32 MasterInterruptEnable:1;\r
+} HcINTERRUPT_CONTROL;\r
+\r
+typedef struct {\r
+ UINT32 Rerserved:8;\r
+ UINT32 Hcca:24;\r
+} HcHCCA;\r
+\r
+typedef struct {\r
+ UINT32 Reserved:4;\r
+ UINT32 MemoryPtr:28;\r
+} HcMEMORY_PTR;\r
+\r
+typedef struct {\r
+ UINT32 FrameInterval:14;\r
+ UINT32 Reserved:2;\r
+ UINT32 FSMaxDataPacket:15;\r
+ UINT32 FrmIntervalToggle:1;\r
+} HcFRM_INTERVAL;\r
+\r
+typedef struct {\r
+ UINT32 FrameRemaining:14;\r
+ UINT32 Reserved:17;\r
+ UINT32 FrameRemainingToggle:1;\r
+} HcFRAME_REMAINING;\r
+\r
+typedef struct {\r
+ UINT32 FrameNumber:16;\r
+ UINT32 Reserved:16;\r
+} HcFRAME_NUMBER;\r
+\r
+typedef struct {\r
+ UINT32 PeriodicStart:14;\r
+ UINT32 Reserved:18;\r
+} HcPERIODIC_START;\r
+\r
+typedef struct {\r
+ UINT32 LsThreshold:12;\r
+ UINT32 Reserved:20;\r
+} HcLS_THRESHOLD;\r
+\r
+typedef struct {\r
+ UINT32 NumDownStrmPorts:8;\r
+ UINT32 PowerSwitchMode:1;\r
+ UINT32 NoPowerSwitch:1;\r
+ UINT32 DeviceType:1;\r
+ UINT32 OverCurrentProtMode:1;\r
+ UINT32 NoOverCurrentProtMode:1;\r
+ UINT32 Reserved:11;\r
+ UINT32 PowerOnToPowerGoodTime:8;\r
+} HcRH_DESC_A;\r
+\r
+typedef struct {\r
+ UINT32 DeviceRemovable:16;\r
+ UINT32 PortPowerControlMask:16;\r
+} HcRH_DESC_B;\r
+\r
+typedef struct {\r
+ UINT32 LocalPowerStat:1;\r
+ UINT32 OverCurrentIndicator:1;\r
+ UINT32 Reserved1:13;\r
+ UINT32 DevRemoteWakeupEnable:1;\r
+ UINT32 LocalPowerStatChange:1;\r
+ UINT32 OverCurrentIndicatorChange:1;\r
+ UINT32 Reserved2:13;\r
+ UINT32 ClearRemoteWakeupEnable:1;\r
+} HcRH_STATUS;\r
+\r
+typedef struct {\r
+ UINT32 CurrentConnectStat:1;\r
+ UINT32 EnableStat:1;\r
+ UINT32 SuspendStat:1;\r
+ UINT32 OCIndicator:1;\r
+ UINT32 ResetStat:1;\r
+ UINT32 Reserved1:3;\r
+ UINT32 PowerStat:1;\r
+ UINT32 LsDeviceAttached:1;\r
+ UINT32 Reserved2:6;\r
+ UINT32 ConnectStatChange:1;\r
+ UINT32 EnableStatChange:1;\r
+ UINT32 SuspendStatChange:1;\r
+ UINT32 OCIndicatorChange:1;\r
+ UINT32 ResetStatChange:1;\r
+ UINT32 Reserved3:11;\r
+} HcRHPORT_STATUS;\r
+\r
+typedef struct {\r
+ UINT32 FSBIR:1;\r
+ UINT32 FHR:1;\r
+ UINT32 CGR:1;\r
+ UINT32 SSDC:1;\r
+ UINT32 UIT:1;\r
+ UINT32 SSE:1;\r
+ UINT32 PSPL:1;\r
+ UINT32 PCPL:1;\r
+ UINT32 Reserved0:1;\r
+ UINT32 SSEP1:1;\r
+ UINT32 SSEP2:1;\r
+ UINT32 SSEP3:1;\r
+ UINT32 Reserved1:20;\r
+} HcRESET;\r
+\r
+\r
+#pragma pack()\r
+\r
+//\r
+// Func List\r
+//\r
+\r
+\r
+/**\r
+\r
+ Get OHCI operational reg value\r
+\r
+ @param PciIo PciIo protocol instance\r
+ @param Offset Offset of the operational reg\r
+\r
+ @retval Value of the register\r
+\r
+**/\r
+UINT32\r
+OhciGetOperationalReg (\r
+ IN EFI_PCI_IO_PROTOCOL *PciIo,\r
+ IN UINT32 Offset\r
+ );\r
+\r
+/**\r
+\r
+ Set OHCI operational reg value\r
+\r
+ @param PciIo PCI Bus Io protocol instance\r
+ @param Offset Offset of the operational reg\r
+ @param Value Value to set\r
+\r
+ @retval EFI_SUCCESS Value set to the reg\r
+\r
+**/\r
+\r
+\r
+EFI_STATUS\r
+OhciSetOperationalReg (\r
+ IN EFI_PCI_IO_PROTOCOL *PciIo,\r
+ IN UINT32 Offset,\r
+ IN VOID *Value\r
+ );\r
+\r
+\r
+/**\r
+\r
+ Get HcRevision reg value\r
+\r
+ @param PciIo PCI Bus Io protocol instance\r
+\r
+ @retval Value of the register\r
+\r
+**/\r
+\r
+\r
+UINT32\r
+OhciGetHcRevision (\r
+ IN EFI_PCI_IO_PROTOCOL *PciIo\r
+ );\r
+\r
+/**\r
+\r
+ Set HcReset reg value\r
+\r
+ @param Ohc UHC private data\r
+ @param Field Field to set\r
+ @param Value Value to set\r
+\r
+ @retval EFI_SUCCESS Value set\r
+\r
+**/\r
+\r
+EFI_STATUS\r
+OhciSetHcReset (\r
+ IN USB_OHCI_HC_DEV *Ohc,\r
+ IN UINT32 Field,\r
+ IN UINT32 Value\r
+ );\r
+/**\r
+\r
+ Get specific field of HcReset reg value\r
+\r
+ @param Ohc UHC private data\r
+ @param Field Field to get\r
+\r
+ @retval Value of the field\r
+\r
+**/\r
+\r
+UINT32\r
+OhciGetHcReset (\r
+ IN USB_OHCI_HC_DEV *Ohc,\r
+ IN UINT32 Field\r
+ );\r
+/**\r
+\r
+ Set HcControl reg value\r
+\r
+ @param Ohc UHC private data\r
+ @param Field Field to set\r
+ @param Value Value to set\r
+\r
+ @retval EFI_SUCCESS Value set\r
+\r
+**/\r
+\r
+EFI_STATUS\r
+OhciSetHcControl (\r
+ IN USB_OHCI_HC_DEV *Ohc,\r
+ IN UINTN Field,\r
+ IN UINT32 Value\r
+ );\r
+\r
+\r
+/**\r
+\r
+ Get specific field of HcControl reg value\r
+\r
+ @param Ohc UHC private data\r
+ @param Field Field to get\r
+\r
+ @retval Value of the field\r
+\r
+**/\r
+\r
+\r
+UINT32\r
+OhciGetHcControl (\r
+ IN USB_OHCI_HC_DEV *Ohc,\r
+ IN UINTN Field\r
+ );\r
+\r
+\r
+/**\r
+\r
+ Set HcCommand reg value\r
+\r
+ @param Ohc UHC private data\r
+ @param Field Field to set\r
+ @param Value Value to set\r
+\r
+ @retval EFI_SUCCESS Value set\r
+\r
+**/\r
+\r
+EFI_STATUS\r
+OhciSetHcCommandStatus (\r
+ IN USB_OHCI_HC_DEV *Ohc,\r
+ IN UINTN Field,\r
+ IN UINT32 Value\r
+ );\r
+\r
+/**\r
+\r
+ Get specific field of HcCommand reg value\r
+\r
+ @param Ohc UHC private data\r
+ @param Field Field to get\r
+\r
+ @retval Value of the field\r
+\r
+**/\r
+\r
+UINT32\r
+OhciGetHcCommandStatus (\r
+ IN USB_OHCI_HC_DEV *Ohc,\r
+ IN UINTN Field\r
+ );\r
+\r
+/**\r
+\r
+ Clear specific fields of Interrupt Status\r
+\r
+ @param Ohc UHC private data\r
+ @param Field Field to clear\r
+\r
+ @retval EFI_SUCCESS Fields cleared\r
+\r
+**/\r
+\r
+EFI_STATUS\r
+OhciClearInterruptStatus (\r
+ IN USB_OHCI_HC_DEV *Ohc,\r
+ IN UINTN Field\r
+ );\r
+\r
+/**\r
+\r
+ Get fields of HcInterrupt reg value\r
+\r
+ @param Ohc UHC private data\r
+ @param Field Field to get\r
+\r
+ @retval Value of the field\r
+\r
+**/\r
+\r
+UINT32\r
+OhciGetHcInterruptStatus (\r
+ IN USB_OHCI_HC_DEV *Ohc,\r
+ IN UINTN Field\r
+ );\r
+\r
+/**\r
+\r
+ Set Interrupt Control reg value\r
+\r
+ @param Ohc UHC private data\r
+ @param StatEnable Enable or Disable\r
+ @param Field Field to set\r
+ @param Value Value to set\r
+\r
+ @retval EFI_SUCCESS Value set\r
+\r
+**/\r
+\r
+EFI_STATUS\r
+OhciSetInterruptControl (\r
+ IN USB_OHCI_HC_DEV *Ohc,\r
+ IN BOOLEAN StatEnable,\r
+ IN UINTN Field,\r
+ IN UINT32 Value\r
+ );\r
+\r
+/**\r
+\r
+ Get field of HcInterruptControl reg value\r
+\r
+ @param Ohc UHC private data\r
+ @param Field Field to get\r
+\r
+ @retval Value of the field\r
+\r
+**/\r
+\r
+UINT32\r
+OhciGetHcInterruptControl (\r
+ IN USB_OHCI_HC_DEV *Ohc,\r
+ IN UINTN Field\r
+ );\r
+\r
+\r
+/**\r
+\r
+ Set memory pointer of specific type\r
+\r
+ @param Ohc UHC private data\r
+ @param PointerType Type of the pointer to set\r
+ @param Value Value to set\r
+\r
+ @retval EFI_SUCCESS Memory pointer set\r
+\r
+**/\r
+\r
+EFI_STATUS\r
+OhciSetMemoryPointer(\r
+ IN USB_OHCI_HC_DEV *Ohc,\r
+ IN UINT32 PointerType,\r
+ IN VOID *Value\r
+ );\r
+\r
+/**\r
+\r
+ Get memory pointer of specific type\r
+\r
+ @param Ohc UHC private data\r
+ @param PointerType Type of pointer\r
+\r
+ @retval Memory pointer of the specific type\r
+\r
+**/\r
+\r
+VOID *\r
+OhciGetMemoryPointer (\r
+ IN USB_OHCI_HC_DEV *Ohc,\r
+ IN UINT32 PointerType\r
+ );\r
+\r
+/**\r
+\r
+ Set Frame Interval value\r
+\r
+ @param Ohc UHC private data\r
+ @param Field Field to set\r
+ @param Value Value to set\r
+\r
+ @retval EFI_SUCCESS Value set\r
+\r
+**/\r
+\r
+EFI_STATUS\r
+OhciSetFrameInterval (\r
+ IN USB_OHCI_HC_DEV *Ohc,\r
+ IN UINTN Field,\r
+ IN UINT32 Value\r
+ );\r
+\r
+\r
+/**\r
+\r
+ Get field of frame interval reg value\r
+\r
+ @param Ohc UHC private data\r
+ @param Field Field to get\r
+\r
+ @retval Value of the field\r
+\r
+**/\r
+\r
+UINT32\r
+OhciGetFrameInterval (\r
+ IN USB_OHCI_HC_DEV *Ohc,\r
+ IN UINTN Field\r
+ );\r
+\r
+\r
+/**\r
+\r
+ Set Frame Remaining reg value\r
+\r
+ @param Ohc UHC private data\r
+ @param Value Value to set\r
+\r
+ @retval EFI_SUCCESS Value set\r
+\r
+**/\r
+\r
+EFI_STATUS\r
+OhciSetFrameRemaining (\r
+ IN USB_OHCI_HC_DEV *Ohc,\r
+ IN UINT32 Value\r
+ );\r
+\r
+/**\r
+\r
+ Get value of frame remaining reg\r
+\r
+ @param Ohc UHC private data\r
+ @param Field Field to get\r
+\r
+ @retval Value of frame remaining reg\r
+\r
+**/\r
+UINT32\r
+OhciGetFrameRemaining (\r
+ IN USB_OHCI_HC_DEV *Ohc,\r
+ IN UINTN Field\r
+ );\r
+\r
+/**\r
+\r
+ Set frame number reg value\r
+\r
+ @param Ohc UHC private data\r
+ @param Value Value to set\r
+\r
+ @retval EFI_SUCCESS Value set\r
+\r
+**/\r
+\r
+EFI_STATUS\r
+OhciSetFrameNumber(\r
+ IN USB_OHCI_HC_DEV *Ohc,\r
+ IN UINT32 Value\r
+ );\r
+\r
+/**\r
+\r
+ Get frame number reg value\r
+\r
+ @param Ohc UHC private data\r
+\r
+ @retval Value of frame number reg\r
+\r
+**/\r
+\r
+UINT32\r
+OhciGetFrameNumber (\r
+ IN USB_OHCI_HC_DEV *Ohc\r
+ );\r
+\r
+\r
+/**\r
+\r
+ Set period start reg value\r
+\r
+ @param Ohc UHC private data\r
+ @param Value Value to set\r
+\r
+ @retval EFI_SUCCESS Value set\r
+\r
+**/\r
+\r
+EFI_STATUS\r
+OhciSetPeriodicStart (\r
+ IN USB_OHCI_HC_DEV *Ohc,\r
+ IN UINT32 Value\r
+ );\r
+\r
+\r
+/**\r
+\r
+ Get periodic start reg value\r
+\r
+ @param Ohc UHC private data\r
+\r
+ @param Value of periodic start reg\r
+\r
+**/\r
+\r
+UINT32\r
+OhciGetPeriodicStart (\r
+ IN USB_OHCI_HC_DEV *Ohc\r
+ );\r
+\r
+\r
+/**\r
+\r
+ Set Ls Threshold reg value\r
+\r
+ @param Ohc UHC private data\r
+ @param Value Value to set\r
+\r
+ @retval EFI_SUCCESS Value set\r
+\r
+**/\r
+\r
+EFI_STATUS\r
+OhciSetLsThreshold (\r
+ IN USB_OHCI_HC_DEV *Ohc,\r
+ IN UINT32 Value\r
+ );\r
+\r
+/**\r
+\r
+ Get Ls Threshold reg value\r
+\r
+ @param Ohc UHC private data\r
+\r
+ @retval Value of Ls Threshold reg\r
+\r
+**/\r
+\r
+UINT32\r
+OhciGetLsThreshold (\r
+ IN USB_OHCI_HC_DEV *Ohc\r
+ );\r
+\r
+/**\r
+\r
+ Set Root Hub Descriptor reg value\r
+\r
+ @param Ohc UHC private data\r
+ @param Field Field to set\r
+ @param Value Value to set\r
+\r
+ @retval EFI_SUCCESS Value set\r
+\r
+**/\r
+EFI_STATUS\r
+OhciSetRootHubDescriptor (\r
+ IN USB_OHCI_HC_DEV *Ohc,\r
+ IN UINTN Field,\r
+ IN UINT32 Value\r
+ );\r
+\r
+\r
+/**\r
+\r
+ Get Root Hub Descriptor reg value\r
+\r
+ @param Ohc UHC private data\r
+ @param Field Field to get\r
+\r
+ @retval Value of the field\r
+\r
+**/\r
+\r
+UINT32\r
+OhciGetRootHubDescriptor (\r
+ IN USB_OHCI_HC_DEV *Ohc,\r
+ IN UINTN Field\r
+ );\r
+\r
+/**\r
+\r
+ Set Root Hub Status reg value\r
+\r
+ @param Ohc UHC private data\r
+ @param Field Field to set\r
+\r
+ @retval EFI_SUCCESS Value set\r
+\r
+**/\r
+\r
+EFI_STATUS\r
+OhciSetRootHubStatus (\r
+ IN USB_OHCI_HC_DEV *Ohc,\r
+ IN UINTN Field\r
+ );\r
+\r
+\r
+/**\r
+\r
+ Get Root Hub Status reg value\r
+\r
+ @param Ohc UHC private data\r
+ @param Field Field to get\r
+\r
+ @retval Value of the field\r
+\r
+**/\r
+\r
+UINT32\r
+OhciGetRootHubStatus (\r
+ IN USB_OHCI_HC_DEV *Ohc,\r
+ IN UINTN Field\r
+ );\r
+\r
+\r
+/**\r
+\r
+ Set Root Hub Port Status reg value\r
+\r
+ @param Ohc UHC private data\r
+ @param Index Index of the port\r
+ @param Field Field to set\r
+\r
+ @retval EFI_SUCCESS Value set\r
+\r
+**/\r
+\r
+EFI_STATUS\r
+OhciSetRootHubPortStatus (\r
+ IN USB_OHCI_HC_DEV *Ohc,\r
+ IN UINT32 Index,\r
+ IN UINTN Field\r
+ );\r
+\r
+\r
+/**\r
+\r
+ Get Root Hub Port Status reg value\r
+\r
+ @param Ohc UHC private data\r
+ @param Index Index of the port\r
+ @param Field Field to get\r
+\r
+ @retval Value of the field and index\r
+\r
+**/\r
+\r
+UINT32\r
+OhciReadRootHubPortStatus (\r
+ IN USB_OHCI_HC_DEV *Ohc,\r
+ IN UINT32 Index,\r
+ IN UINTN Field\r
+ );\r
+\r
+#endif\r