--- /dev/null
+/** @file\r
+Provides some data struct used by OHCI controller driver.\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
+#ifndef _OHCI_URB_H\r
+#define _OHCI_URB_H\r
+\r
+#include "Descriptor.h"\r
+\r
+\r
+//\r
+// Func List\r
+//\r
+\r
+\r
+/**\r
+\r
+ Create a TD\r
+\r
+ @Param Ohc UHC private data\r
+\r
+ @retval TD structure pointer\r
+\r
+**/\r
+TD_DESCRIPTOR *\r
+OhciCreateTD (\r
+ IN USB_OHCI_HC_DEV *Ohc\r
+ );\r
+\r
+/**\r
+\r
+ Free a TD\r
+\r
+ @Param Ohc UHC private data\r
+ @Param Td Pointer to a TD to free\r
+\r
+ @retval EFI_SUCCESS TD freed\r
+\r
+**/\r
+EFI_STATUS\r
+OhciFreeTD (\r
+ IN USB_OHCI_HC_DEV *Ohc,\r
+ IN TD_DESCRIPTOR *Td\r
+ );\r
+\r
+/**\r
+\r
+ Create a ED\r
+\r
+ @Param Ohc Device private data\r
+\r
+ @retval ED descriptor pointer\r
+\r
+**/\r
+ED_DESCRIPTOR *\r
+OhciCreateED (\r
+ USB_OHCI_HC_DEV *Ohc\r
+ );\r
+\r
+\r
+/**\r
+\r
+ Free a ED\r
+\r
+ @Param Ohc UHC private data\r
+ @Param Ed Pointer to a ED to free\r
+\r
+ @retval EFI_SUCCESS ED freed\r
+\r
+**/\r
+\r
+EFI_STATUS\r
+OhciFreeED (\r
+ IN USB_OHCI_HC_DEV *Ohc,\r
+ IN ED_DESCRIPTOR *Ed\r
+ );\r
+\r
+/**\r
+\r
+ Free ED\r
+\r
+ @Param Ohc Device private data\r
+ @Param Ed Pointer to a ED to free\r
+\r
+ @retval EFI_SUCCESS ED freed\r
+\r
+**/\r
+EFI_STATUS\r
+OhciFreeAllTDFromED (\r
+ IN USB_OHCI_HC_DEV *Ohc,\r
+ IN ED_DESCRIPTOR *Ed\r
+ );\r
+\r
+/**\r
+\r
+ Find a working ED match the requirement\r
+\r
+ @Param EdHead Head of the ED list\r
+ @Param DeviceAddress Device address to search\r
+ @Param EndPointNum End point num to search\r
+ @Param EdDir ED Direction to search\r
+\r
+ @retval ED descriptor searched\r
+\r
+**/\r
+\r
+ED_DESCRIPTOR *\r
+OhciFindWorkingEd (\r
+ IN ED_DESCRIPTOR *EdHead,\r
+ IN UINT8 DeviceAddress,\r
+ IN UINT8 EndPointNum,\r
+ IN UINT8 EdDir\r
+ );\r
+\r
+\r
+/**\r
+\r
+ Initialize interrupt list.\r
+\r
+ @Param Ohc Device private data\r
+\r
+ @retval EFI_SUCCESS Initialization done\r
+\r
+**/\r
+EFI_STATUS\r
+OhciInitializeInterruptList (\r
+ USB_OHCI_HC_DEV *Ohc\r
+ );\r
+\r
+/**\r
+\r
+ Attach an ED\r
+\r
+ @Param Ed Ed to be attached\r
+ @Param NewEd Ed to attach\r
+\r
+ @retval EFI_SUCCESS NewEd attached to Ed\r
+ @retval EFI_INVALID_PARAMETER Ed is NULL\r
+\r
+**/\r
+EFI_STATUS\r
+OhciAttachED (\r
+ IN ED_DESCRIPTOR *Ed,\r
+ IN ED_DESCRIPTOR *NewEd\r
+ );\r
+\r
+/**\r
+\r
+ Count ED number on a ED chain\r
+\r
+ @Param Ed Head of the ED chain\r
+\r
+ @retval ED number on the chain\r
+\r
+**/\r
+\r
+UINTN\r
+CountEdNum (\r
+ IN ED_DESCRIPTOR *Ed\r
+ );\r
+\r
+/**\r
+\r
+ Find the minimal burn ED list on a specific depth level\r
+\r
+ @Param Ohc Device private data\r
+ @Param Depth Depth level\r
+\r
+ @retval ED list found\r
+\r
+**/\r
+\r
+ED_DESCRIPTOR *\r
+OhciFindMinInterruptEDList (\r
+ IN USB_OHCI_HC_DEV *Ohc,\r
+ IN UINT32 Depth\r
+ );\r
+\r
+/**\r
+\r
+ Attach an ED to an ED list\r
+\r
+ @Param OHC UHC private data\r
+ @Param ListType Type of the ED list\r
+ @Param Ed ED to attach\r
+ @Param EdList ED list to be attached\r
+\r
+ @retval EFI_SUCCESS ED attached to ED list\r
+\r
+**/\r
+ED_DESCRIPTOR *\r
+OhciAttachEDToList (\r
+ IN USB_OHCI_HC_DEV *Ohc,\r
+ IN DESCRIPTOR_LIST_TYPE ListType,\r
+ IN ED_DESCRIPTOR *Ed,\r
+ IN ED_DESCRIPTOR *EdList\r
+ );\r
+\r
+/**\r
+\r
+ Remove interrupt EDs that match requirement\r
+\r
+ @Param Ohc UHC private data\r
+ @Param IntEd The address of Interrupt endpoint\r
+\r
+ @retval EFI_SUCCESS EDs match requirement removed\r
+\r
+**/\r
+\r
+EFI_STATUS\r
+OhciFreeInterruptEdByEd (\r
+ IN USB_OHCI_HC_DEV *Ohc,\r
+ IN ED_DESCRIPTOR *IntEd\r
+ );\r
+\r
+/**\r
+\r
+ Remove interrupt EDs that match requirement\r
+\r
+ @Param Ohc UHC private data\r
+ @Param FunctionAddress Requirement on function address\r
+ @Param EndPointNum Requirement on end point number\r
+\r
+ @retval EFI_SUCCESS EDs match requirement removed\r
+\r
+**/\r
+EFI_STATUS\r
+OhciFreeInterruptEdByAddr (\r
+ IN USB_OHCI_HC_DEV *Ohc,\r
+ IN UINT8 FunctionAddress,\r
+ IN UINT8 EndPointNum\r
+ );\r
+\r
+\r
+/**\r
+\r
+ Link Td2 to the end of Td1\r
+\r
+ @Param Td1 TD to be linked\r
+ @Param Td2 TD to link\r
+\r
+ @retval EFI_SUCCESS TD successfully linked\r
+ @retval EFI_INVALID_PARAMETER Td1 is NULL\r
+\r
+**/\r
+EFI_STATUS\r
+OhciLinkTD (\r
+ IN TD_DESCRIPTOR *Td1,\r
+ IN TD_DESCRIPTOR *Td2\r
+ );\r
+\r
+\r
+/**\r
+\r
+ Attach TD list to ED\r
+\r
+ @Param Ed ED which TD list attach on\r
+ @Param HeadTd Head of the TD list to attach\r
+\r
+ @retval EFI_SUCCESS TD list attached on the ED\r
+\r
+**/\r
+EFI_STATUS\r
+OhciAttachTDListToED (\r
+ IN ED_DESCRIPTOR *Ed,\r
+ IN TD_DESCRIPTOR *HeadTd\r
+ );\r
+\r
+\r
+/**\r
+\r
+ Set value to ED specific field\r
+\r
+ @Param Ed ED to be set\r
+ @Param Field Field to be set\r
+ @Param Value Value to set\r
+\r
+ @retval EFI_SUCCESS Value set\r
+\r
+**/\r
+EFI_STATUS\r
+OhciSetEDField (\r
+ IN ED_DESCRIPTOR *Ed,\r
+ IN UINT32 Field,\r
+ IN UINT32 Value\r
+ );\r
+\r
+\r
+/**\r
+\r
+ Get value from an ED's specific field\r
+\r
+ @Param Ed ED pointer\r
+ @Param Field Field to get value from\r
+\r
+ @retval Value of the field\r
+\r
+**/\r
+UINT32\r
+OhciGetEDField (\r
+ IN ED_DESCRIPTOR *Ed,\r
+ IN UINT32 Field\r
+ );\r
+\r
+\r
+/**\r
+\r
+ Set value to TD specific field\r
+\r
+ @Param Td TD to be set\r
+ @Param Field Field to be set\r
+ @Param Value Value to set\r
+\r
+ @retval EFI_SUCCESS Value set\r
+\r
+**/\r
+EFI_STATUS\r
+OhciSetTDField (\r
+ IN TD_DESCRIPTOR *Td,\r
+ IN UINT32 Field,\r
+ IN UINT32 Value\r
+ );\r
+\r
+\r
+/**\r
+\r
+ Get value from ED specific field\r
+\r
+ @Param Td TD pointer\r
+ @Param Field Field to get value from\r
+\r
+ @retval Value of the field\r
+\r
+**/\r
+\r
+UINT32\r
+OhciGetTDField (\r
+ IN TD_DESCRIPTOR *Td,\r
+ IN UINT32 Field\r
+ );\r
+/**\r
+\r
+ Free the Ed,Td,buffer that were created during transferring\r
+\r
+ @Param Ohc Device private data\r
+**/\r
+\r
+VOID\r
+OhciFreeDynamicIntMemory(\r
+ IN USB_OHCI_HC_DEV *Ohc\r
+ );\r
+\r
+/**\r
+\r
+ Free the Ed that were initilized during driver was starting,\r
+ those memory were used as interrupt ED head\r
+\r
+ @Param Ohc Device private data\r
+\r
+\r
+**/\r
+VOID\r
+OhciFreeFixedIntMemory (\r
+ IN USB_OHCI_HC_DEV *Ohc\r
+ );\r
+/**\r
+\r
+ Release all OHCI used memory when OHCI going to quit\r
+\r
+ @Param Ohc Device private data\r
+\r
+ @retval EFI_SUCCESS Memory released\r
+\r
+**/\r
+\r
+EFI_STATUS\r
+OhciFreeIntTransferMemory (\r
+ IN USB_OHCI_HC_DEV *Ohc\r
+ );\r
+\r
+#endif\r