14b1bf81c20d5523554a83f6604df7930396f7c21jljusten/** @file
24b1bf81c20d5523554a83f6604df7930396f7c21jljustenPrivate Header file for Usb Host Controller PEIM
34b1bf81c20d5523554a83f6604df7930396f7c21jljusten
4ca243131657ba03f58206a417b938aa14cff585cFeng TianCopyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>
54b1bf81c20d5523554a83f6604df7930396f7c21jljusten
64b1bf81c20d5523554a83f6604df7930396f7c21jljustenThis program and the accompanying materials
74b1bf81c20d5523554a83f6604df7930396f7c21jljustenare licensed and made available under the terms and conditions
84b1bf81c20d5523554a83f6604df7930396f7c21jljustenof the BSD License which accompanies this distribution.  The
94b1bf81c20d5523554a83f6604df7930396f7c21jljustenfull text of the license may be found at
104b1bf81c20d5523554a83f6604df7930396f7c21jljustenhttp://opensource.org/licenses/bsd-license.php
114b1bf81c20d5523554a83f6604df7930396f7c21jljusten
124b1bf81c20d5523554a83f6604df7930396f7c21jljustenTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
134b1bf81c20d5523554a83f6604df7930396f7c21jljustenWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
144b1bf81c20d5523554a83f6604df7930396f7c21jljusten
154b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
164b1bf81c20d5523554a83f6604df7930396f7c21jljusten
174b1bf81c20d5523554a83f6604df7930396f7c21jljusten#ifndef _RECOVERY_UHC_H_
184b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define _RECOVERY_UHC_H_
194b1bf81c20d5523554a83f6604df7930396f7c21jljusten
204b1bf81c20d5523554a83f6604df7930396f7c21jljusten
214b1bf81c20d5523554a83f6604df7930396f7c21jljusten#include <PiPei.h>
224b1bf81c20d5523554a83f6604df7930396f7c21jljusten
234b1bf81c20d5523554a83f6604df7930396f7c21jljusten#include <Ppi/UsbController.h>
244b1bf81c20d5523554a83f6604df7930396f7c21jljusten#include <Ppi/UsbHostController.h>
254b1bf81c20d5523554a83f6604df7930396f7c21jljusten
264b1bf81c20d5523554a83f6604df7930396f7c21jljusten#include <Library/DebugLib.h>
274b1bf81c20d5523554a83f6604df7930396f7c21jljusten#include <Library/PeimEntryPoint.h>
284b1bf81c20d5523554a83f6604df7930396f7c21jljusten#include <Library/PeiServicesLib.h>
294b1bf81c20d5523554a83f6604df7930396f7c21jljusten#include <Library/BaseMemoryLib.h>
304b1bf81c20d5523554a83f6604df7930396f7c21jljusten#include <Library/TimerLib.h>
314b1bf81c20d5523554a83f6604df7930396f7c21jljusten#include <Library/IoLib.h>
324b1bf81c20d5523554a83f6604df7930396f7c21jljusten#include <Library/PeiServicesLib.h>
334b1bf81c20d5523554a83f6604df7930396f7c21jljusten
344b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define USB_SLOW_SPEED_DEVICE 0x01
354b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define USB_FULL_SPEED_DEVICE 0x02
364b1bf81c20d5523554a83f6604df7930396f7c21jljusten
374b1bf81c20d5523554a83f6604df7930396f7c21jljusten//
384b1bf81c20d5523554a83f6604df7930396f7c21jljusten// One memory block uses 16 page
394b1bf81c20d5523554a83f6604df7930396f7c21jljusten//
404b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define NORMAL_MEMORY_BLOCK_UNIT_IN_PAGES 16
414b1bf81c20d5523554a83f6604df7930396f7c21jljusten
424b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define USBCMD                            0       /* Command Register Offset 00-01h */
434b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define USBCMD_RS                         BIT0    /* Run/Stop */
444b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define USBCMD_HCRESET                    BIT1    /* Host reset */
454b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define USBCMD_GRESET                     BIT2    /* Global reset */
464b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define USBCMD_EGSM                       BIT3    /* Global Suspend Mode */
474b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define USBCMD_FGR                        BIT4    /* Force Global Resume */
484b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define USBCMD_SWDBG                      BIT5    /* SW Debug mode */
494b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define USBCMD_CF                         BIT6    /* Config Flag (sw only) */
504b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define USBCMD_MAXP                       BIT7    /* Max Packet (0 = 32, 1 = 64) */
514b1bf81c20d5523554a83f6604df7930396f7c21jljusten
524b1bf81c20d5523554a83f6604df7930396f7c21jljusten/* Status register */
534b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define USBSTS        2       /* Status Register Offset 02-03h */
544b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define USBSTS_USBINT BIT0    /* Interrupt due to IOC */
554b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define USBSTS_ERROR  BIT1    /* Interrupt due to error */
564b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define USBSTS_RD     BIT2    /* Resume Detect */
574b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define USBSTS_HSE    BIT3    /* Host System Error - basically PCI problems */
584b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define USBSTS_HCPE   BIT4    /* Host Controller Process Error - the scripts were buggy */
594b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define USBSTS_HCH    BIT5    /* HC Halted */
604b1bf81c20d5523554a83f6604df7930396f7c21jljusten
614b1bf81c20d5523554a83f6604df7930396f7c21jljusten/* Interrupt enable register */
624b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define USBINTR         4       /* Interrupt Enable Register 04-05h */
634b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define USBINTR_TIMEOUT BIT0    /* Timeout/CRC error enable */
644b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define USBINTR_RESUME  BIT1    /* Resume interrupt enable */
654b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define USBINTR_IOC     BIT2    /* Interrupt On Complete enable */
664b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define USBINTR_SP      BIT3    /* Short packet interrupt enable */
674b1bf81c20d5523554a83f6604df7930396f7c21jljusten
684b1bf81c20d5523554a83f6604df7930396f7c21jljusten/* Frame Number Register Offset 06-08h */
694b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define USBFRNUM  6
704b1bf81c20d5523554a83f6604df7930396f7c21jljusten
714b1bf81c20d5523554a83f6604df7930396f7c21jljusten/* Frame List Base Address Register Offset 08-0Bh */
724b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define USBFLBASEADD  8
734b1bf81c20d5523554a83f6604df7930396f7c21jljusten
744b1bf81c20d5523554a83f6604df7930396f7c21jljusten/* Start of Frame Modify Register Offset 0Ch */
754b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define USBSOF  0x0c
764b1bf81c20d5523554a83f6604df7930396f7c21jljusten
774b1bf81c20d5523554a83f6604df7930396f7c21jljusten/* USB port status and control registers */
784b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define USBPORTSC1            0x10      /*Port 1 offset 10-11h */
794b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define USBPORTSC2            0x12      /*Port 2 offset 12-13h */
804b1bf81c20d5523554a83f6604df7930396f7c21jljusten
814b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define USBPORTSC_CCS         BIT0      /* Current Connect Status ("device present") */
824b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define USBPORTSC_CSC         BIT1      /* Connect Status Change */
834b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define USBPORTSC_PED         BIT2      /* Port Enable / Disable */
844b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define USBPORTSC_PEDC        BIT3      /* Port Enable / Disable Change */
854b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define USBPORTSC_LSL         BIT4      /* Line Status Low bit*/
864b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define USBPORTSC_LSH         BIT5      /* Line Status High bit*/
874b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define USBPORTSC_RD          BIT6      /* Resume Detect */
884b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define USBPORTSC_LSDA        BIT8      /* Low Speed Device Attached */
894b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define USBPORTSC_PR          BIT9      /* Port Reset */
904b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define USBPORTSC_SUSP        BIT12     /* Suspend */
914b1bf81c20d5523554a83f6604df7930396f7c21jljusten
924b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define SETUP_PACKET_ID       0x2D
934b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define INPUT_PACKET_ID       0x69
944b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define OUTPUT_PACKET_ID      0xE1
954b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define ERROR_PACKET_ID       0x55
964b1bf81c20d5523554a83f6604df7930396f7c21jljusten
97ca243131657ba03f58206a417b938aa14cff585cFeng Tian#define STALL_1_MICRO_SECOND  1
984b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define STALL_1_MILLI_SECOND  1000
994b1bf81c20d5523554a83f6604df7930396f7c21jljusten
1004b1bf81c20d5523554a83f6604df7930396f7c21jljusten
1014b1bf81c20d5523554a83f6604df7930396f7c21jljusten#pragma pack(1)
1024b1bf81c20d5523554a83f6604df7930396f7c21jljusten
1034b1bf81c20d5523554a83f6604df7930396f7c21jljustentypedef struct {
1044b1bf81c20d5523554a83f6604df7930396f7c21jljusten  UINT32  FrameListPtrTerminate : 1;
1054b1bf81c20d5523554a83f6604df7930396f7c21jljusten  UINT32  FrameListPtrQSelect : 1;
1064b1bf81c20d5523554a83f6604df7930396f7c21jljusten  UINT32  FrameListRsvd : 2;
1074b1bf81c20d5523554a83f6604df7930396f7c21jljusten  UINT32  FrameListPtr : 28;
1084b1bf81c20d5523554a83f6604df7930396f7c21jljusten} FRAMELIST_ENTRY;
1094b1bf81c20d5523554a83f6604df7930396f7c21jljusten
1104b1bf81c20d5523554a83f6604df7930396f7c21jljustentypedef struct {
1114b1bf81c20d5523554a83f6604df7930396f7c21jljusten  UINT32  QHHorizontalTerminate : 1;
1124b1bf81c20d5523554a83f6604df7930396f7c21jljusten  UINT32  QHHorizontalQSelect : 1;
1134b1bf81c20d5523554a83f6604df7930396f7c21jljusten  UINT32  QHHorizontalRsvd : 2;
1144b1bf81c20d5523554a83f6604df7930396f7c21jljusten  UINT32  QHHorizontalPtr : 28;
1154b1bf81c20d5523554a83f6604df7930396f7c21jljusten  UINT32  QHVerticalTerminate : 1;
1164b1bf81c20d5523554a83f6604df7930396f7c21jljusten  UINT32  QHVerticalQSelect : 1;
1174b1bf81c20d5523554a83f6604df7930396f7c21jljusten  UINT32  QHVerticalRsvd : 2;
1184b1bf81c20d5523554a83f6604df7930396f7c21jljusten  UINT32  QHVerticalPtr : 28;
1194b1bf81c20d5523554a83f6604df7930396f7c21jljusten} QUEUE_HEAD;
1204b1bf81c20d5523554a83f6604df7930396f7c21jljusten
1214b1bf81c20d5523554a83f6604df7930396f7c21jljustentypedef struct {
1224b1bf81c20d5523554a83f6604df7930396f7c21jljusten  QUEUE_HEAD  QueueHead;
1234b1bf81c20d5523554a83f6604df7930396f7c21jljusten  UINT32      Reserved1;
1244b1bf81c20d5523554a83f6604df7930396f7c21jljusten  UINT32      Reserved2;
1254b1bf81c20d5523554a83f6604df7930396f7c21jljusten  VOID        *PtrNext;
1264b1bf81c20d5523554a83f6604df7930396f7c21jljusten  VOID        *PtrDown;
1274b1bf81c20d5523554a83f6604df7930396f7c21jljusten  VOID        *Reserved3;
1284b1bf81c20d5523554a83f6604df7930396f7c21jljusten  UINT32      Reserved4;
1294b1bf81c20d5523554a83f6604df7930396f7c21jljusten} QH_STRUCT;
1304b1bf81c20d5523554a83f6604df7930396f7c21jljusten
1314b1bf81c20d5523554a83f6604df7930396f7c21jljustentypedef struct {
1324b1bf81c20d5523554a83f6604df7930396f7c21jljusten  UINT32  TDLinkPtrTerminate : 1;
1334b1bf81c20d5523554a83f6604df7930396f7c21jljusten  UINT32  TDLinkPtrQSelect : 1;
1344b1bf81c20d5523554a83f6604df7930396f7c21jljusten  UINT32  TDLinkPtrDepthSelect : 1;
1354b1bf81c20d5523554a83f6604df7930396f7c21jljusten  UINT32  TDLinkPtrRsvd : 1;
1364b1bf81c20d5523554a83f6604df7930396f7c21jljusten  UINT32  TDLinkPtr : 28;
1374b1bf81c20d5523554a83f6604df7930396f7c21jljusten  UINT32  TDStatusActualLength : 11;
1384b1bf81c20d5523554a83f6604df7930396f7c21jljusten  UINT32  TDStatusRsvd : 5;
1394b1bf81c20d5523554a83f6604df7930396f7c21jljusten  UINT32  TDStatus : 8;
1404b1bf81c20d5523554a83f6604df7930396f7c21jljusten  UINT32  TDStatusIOC : 1;
1414b1bf81c20d5523554a83f6604df7930396f7c21jljusten  UINT32  TDStatusIOS : 1;
1424b1bf81c20d5523554a83f6604df7930396f7c21jljusten  UINT32  TDStatusLS : 1;
1434b1bf81c20d5523554a83f6604df7930396f7c21jljusten  UINT32  TDStatusErr : 2;
1444b1bf81c20d5523554a83f6604df7930396f7c21jljusten  UINT32  TDStatusSPD : 1;
1454b1bf81c20d5523554a83f6604df7930396f7c21jljusten  UINT32  TDStatusRsvd2 : 2;
1464b1bf81c20d5523554a83f6604df7930396f7c21jljusten  UINT32  TDTokenPID : 8;
1474b1bf81c20d5523554a83f6604df7930396f7c21jljusten  UINT32  TDTokenDevAddr : 7;
1484b1bf81c20d5523554a83f6604df7930396f7c21jljusten  UINT32  TDTokenEndPt : 4;
1494b1bf81c20d5523554a83f6604df7930396f7c21jljusten  UINT32  TDTokenDataToggle : 1;
1504b1bf81c20d5523554a83f6604df7930396f7c21jljusten  UINT32  TDTokenRsvd : 1;
1514b1bf81c20d5523554a83f6604df7930396f7c21jljusten  UINT32  TDTokenMaxLen : 11;
1524b1bf81c20d5523554a83f6604df7930396f7c21jljusten  UINT32  TDBufferPtr;
1534b1bf81c20d5523554a83f6604df7930396f7c21jljusten} TD;
1544b1bf81c20d5523554a83f6604df7930396f7c21jljusten
1554b1bf81c20d5523554a83f6604df7930396f7c21jljustentypedef struct {
1564b1bf81c20d5523554a83f6604df7930396f7c21jljusten  TD      TDData;
1574b1bf81c20d5523554a83f6604df7930396f7c21jljusten  UINT8   *PtrTDBuffer;
1584b1bf81c20d5523554a83f6604df7930396f7c21jljusten  VOID    *PtrNextTD;
1594b1bf81c20d5523554a83f6604df7930396f7c21jljusten  VOID    *PtrNextQH;
1604b1bf81c20d5523554a83f6604df7930396f7c21jljusten  UINT16  TDBufferLength;
1614b1bf81c20d5523554a83f6604df7930396f7c21jljusten  UINT16  Reserved;
1624b1bf81c20d5523554a83f6604df7930396f7c21jljusten} TD_STRUCT;
1634b1bf81c20d5523554a83f6604df7930396f7c21jljusten
1644b1bf81c20d5523554a83f6604df7930396f7c21jljusten#pragma pack()
1654b1bf81c20d5523554a83f6604df7930396f7c21jljusten
1664b1bf81c20d5523554a83f6604df7930396f7c21jljustentypedef struct _MEMORY_MANAGE_HEADER MEMORY_MANAGE_HEADER;
1674b1bf81c20d5523554a83f6604df7930396f7c21jljusten
1684b1bf81c20d5523554a83f6604df7930396f7c21jljustenstruct _MEMORY_MANAGE_HEADER {
1694b1bf81c20d5523554a83f6604df7930396f7c21jljusten  UINT8                         *BitArrayPtr;
1704b1bf81c20d5523554a83f6604df7930396f7c21jljusten  UINTN                         BitArraySizeInBytes;
1714b1bf81c20d5523554a83f6604df7930396f7c21jljusten  UINT8                         *MemoryBlockPtr;
1724b1bf81c20d5523554a83f6604df7930396f7c21jljusten  UINTN                         MemoryBlockSizeInBytes;
1734b1bf81c20d5523554a83f6604df7930396f7c21jljusten  MEMORY_MANAGE_HEADER          *Next;
1744b1bf81c20d5523554a83f6604df7930396f7c21jljusten};
1754b1bf81c20d5523554a83f6604df7930396f7c21jljusten
1764b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define USB_UHC_DEV_SIGNATURE SIGNATURE_32 ('p', 'u', 'h', 'c')
1774b1bf81c20d5523554a83f6604df7930396f7c21jljustentypedef struct {
1784b1bf81c20d5523554a83f6604df7930396f7c21jljusten  UINTN                       Signature;
1794b1bf81c20d5523554a83f6604df7930396f7c21jljusten  PEI_USB_HOST_CONTROLLER_PPI UsbHostControllerPpi;
1804b1bf81c20d5523554a83f6604df7930396f7c21jljusten  EFI_PEI_PPI_DESCRIPTOR      PpiDescriptor;
1814b1bf81c20d5523554a83f6604df7930396f7c21jljusten
1824b1bf81c20d5523554a83f6604df7930396f7c21jljusten  UINT32                      UsbHostControllerBaseAddress;
1834b1bf81c20d5523554a83f6604df7930396f7c21jljusten  FRAMELIST_ENTRY             *FrameListEntry;
1844b1bf81c20d5523554a83f6604df7930396f7c21jljusten  QH_STRUCT                   *ConfigQH;
1854b1bf81c20d5523554a83f6604df7930396f7c21jljusten  QH_STRUCT                   *BulkQH;
1864b1bf81c20d5523554a83f6604df7930396f7c21jljusten  //
1874b1bf81c20d5523554a83f6604df7930396f7c21jljusten  // Header1 used for QH,TD memory blocks management
1884b1bf81c20d5523554a83f6604df7930396f7c21jljusten  //
1894b1bf81c20d5523554a83f6604df7930396f7c21jljusten  MEMORY_MANAGE_HEADER        *Header1;
1904b1bf81c20d5523554a83f6604df7930396f7c21jljusten
1914b1bf81c20d5523554a83f6604df7930396f7c21jljusten} USB_UHC_DEV;
1924b1bf81c20d5523554a83f6604df7930396f7c21jljusten
1934b1bf81c20d5523554a83f6604df7930396f7c21jljusten#define PEI_RECOVERY_USB_UHC_DEV_FROM_UHCI_THIS(a)  CR (a, USB_UHC_DEV, UsbHostControllerPpi, USB_UHC_DEV_SIGNATURE)
1944b1bf81c20d5523554a83f6604df7930396f7c21jljusten
1954b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
1964b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Submits control transfer to a target USB device.
1974b1bf81c20d5523554a83f6604df7930396f7c21jljusten
1984b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PeiServices            The pointer of EFI_PEI_SERVICES.
1994b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  This                   The pointer of PEI_USB_HOST_CONTROLLER_PPI.
2004b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  DeviceAddress          The target device address.
2014b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  DeviceSpeed            Target device speed.
2024b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  MaximumPacketLength    Maximum packet size the default control transfer
2034b1bf81c20d5523554a83f6604df7930396f7c21jljusten                                 endpoint is capable of sending or receiving.
2044b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  Request                USB device request to send.
2054b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  TransferDirection      Specifies the data direction for the data stage.
2064b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  Data                   Data buffer to be transmitted or received from USB device.
2074b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  DataLength             The size (in bytes) of the data buffer.
2084b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  TimeOut                Indicates the maximum timeout, in millisecond.
2094b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  TransferResult         Return the result of this control transfer.
2104b1bf81c20d5523554a83f6604df7930396f7c21jljusten
2114b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval EFI_SUCCESS            Transfer was completed successfully.
2124b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval EFI_OUT_OF_RESOURCES   The transfer failed due to lack of resources.
2134b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval EFI_INVALID_PARAMETER  Some parameters are invalid.
2144b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval EFI_TIMEOUT            Transfer failed due to timeout.
2154b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval EFI_DEVICE_ERROR       Transfer failed due to host controller or device error.
2164b1bf81c20d5523554a83f6604df7930396f7c21jljusten
2174b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
2184b1bf81c20d5523554a83f6604df7930396f7c21jljustenEFI_STATUS
2194b1bf81c20d5523554a83f6604df7930396f7c21jljustenEFIAPI
2204b1bf81c20d5523554a83f6604df7930396f7c21jljustenUhcControlTransfer (
2214b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN EFI_PEI_SERVICES               **PeiServices,
2224b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN PEI_USB_HOST_CONTROLLER_PPI    * This,
2234b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN     UINT8                      DeviceAddress,
2244b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN     UINT8                      DeviceSpeed,
2254b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN     UINT8                      MaximumPacketLength,
2264b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN     EFI_USB_DEVICE_REQUEST     * Request,
2274b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN     EFI_USB_DATA_DIRECTION     TransferDirection,
2284b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN OUT VOID                       *Data OPTIONAL,
2294b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN OUT UINTN                      *DataLength OPTIONAL,
2304b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN     UINTN                      TimeOut,
2314b1bf81c20d5523554a83f6604df7930396f7c21jljusten  OUT    UINT32                     *TransferResult
2324b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
2334b1bf81c20d5523554a83f6604df7930396f7c21jljusten
2344b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
2354b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Submits bulk transfer to a bulk endpoint of a USB device.
2364b1bf81c20d5523554a83f6604df7930396f7c21jljusten
2374b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PeiServices           The pointer of EFI_PEI_SERVICES.
2384b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  This                  The pointer of PEI_USB_HOST_CONTROLLER_PPI.
2394b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  DeviceAddress         Target device address.
2404b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  EndPointAddress       Endpoint number and its direction in bit 7.
2414b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  MaximumPacketLength   Maximum packet size the endpoint is capable of
2424b1bf81c20d5523554a83f6604df7930396f7c21jljusten                                sending or receiving.
2434b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  Data                  Array of pointers to the buffers of data to transmit
2444b1bf81c20d5523554a83f6604df7930396f7c21jljusten                                from or receive into.
2454b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  DataLength            The lenght of the data buffer.
2464b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  DataToggle            On input, the initial data toggle for the transfer;
2474b1bf81c20d5523554a83f6604df7930396f7c21jljusten                                On output, it is updated to to next data toggle to use of
2484b1bf81c20d5523554a83f6604df7930396f7c21jljusten                                the subsequent bulk transfer.
2494b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  TimeOut               Indicates the maximum time, in millisecond, which the
2504b1bf81c20d5523554a83f6604df7930396f7c21jljusten                                transfer is allowed to complete.
2514b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  TransferResult        A pointer to the detailed result information of the
2524b1bf81c20d5523554a83f6604df7930396f7c21jljusten                                bulk transfer.
2534b1bf81c20d5523554a83f6604df7930396f7c21jljusten
2544b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval EFI_SUCCESS           The transfer was completed successfully.
2554b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval EFI_OUT_OF_RESOURCES  The transfer failed due to lack of resource.
2564b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval EFI_INVALID_PARAMETER Parameters are invalid.
2574b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval EFI_TIMEOUT           The transfer failed due to timeout.
2584b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval EFI_DEVICE_ERROR      The transfer failed due to host controller error.
2594b1bf81c20d5523554a83f6604df7930396f7c21jljusten
2604b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
2614b1bf81c20d5523554a83f6604df7930396f7c21jljustenEFI_STATUS
2624b1bf81c20d5523554a83f6604df7930396f7c21jljustenEFIAPI
2634b1bf81c20d5523554a83f6604df7930396f7c21jljustenUhcBulkTransfer (
2644b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN EFI_PEI_SERVICES               **PeiServices,
2654b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN PEI_USB_HOST_CONTROLLER_PPI    *This,
2664b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  UINT8                         DeviceAddress,
2674b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  UINT8                         EndPointAddress,
2684b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  UINT8                         MaximumPacketLength,
2694b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN OUT VOID                       *Data,
2704b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN OUT UINTN                      *DataLength,
2714b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN OUT UINT8                      *DataToggle,
2724b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  UINTN                         TimeOut,
2734b1bf81c20d5523554a83f6604df7930396f7c21jljusten  OUT UINT32                        *TransferResult
2744b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
2754b1bf81c20d5523554a83f6604df7930396f7c21jljusten
2764b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
2774b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Retrieves the number of root hub ports.
2784b1bf81c20d5523554a83f6604df7930396f7c21jljusten
2794b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param[in]  PeiServices   The pointer to the PEI Services Table.
2804b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param[in]  This          The pointer to this instance of the
2814b1bf81c20d5523554a83f6604df7930396f7c21jljusten                            PEI_USB_HOST_CONTROLLER_PPI.
2824b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param[out] PortNumber    The pointer to the number of the root hub ports.
2834b1bf81c20d5523554a83f6604df7930396f7c21jljusten
2844b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval EFI_SUCCESS           The port number was retrieved successfully.
2854b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval EFI_INVALID_PARAMETER PortNumber is NULL.
2864b1bf81c20d5523554a83f6604df7930396f7c21jljusten
2874b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
2884b1bf81c20d5523554a83f6604df7930396f7c21jljustenEFI_STATUS
2894b1bf81c20d5523554a83f6604df7930396f7c21jljustenEFIAPI
2904b1bf81c20d5523554a83f6604df7930396f7c21jljustenUhcGetRootHubPortNumber (
2914b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN EFI_PEI_SERVICES               **PeiServices,
2924b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN PEI_USB_HOST_CONTROLLER_PPI    *This,
2934b1bf81c20d5523554a83f6604df7930396f7c21jljusten  OUT UINT8                         *PortNumber
2944b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
2954b1bf81c20d5523554a83f6604df7930396f7c21jljusten
2964b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
2974b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Retrieves the current status of a USB root hub port.
2984b1bf81c20d5523554a83f6604df7930396f7c21jljusten
2994b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PeiServices            The pointer of EFI_PEI_SERVICES.
3004b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  This                   The pointer of PEI_USB_HOST_CONTROLLER_PPI.
3014b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PortNumber             The root hub port to retrieve the state from.
3024b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PortStatus             Variable to receive the port state.
3034b1bf81c20d5523554a83f6604df7930396f7c21jljusten
3044b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval EFI_SUCCESS            The status of the USB root hub port specified.
3054b1bf81c20d5523554a83f6604df7930396f7c21jljusten                                 by PortNumber was returned in PortStatus.
3064b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval EFI_INVALID_PARAMETER  PortNumber is invalid.
3074b1bf81c20d5523554a83f6604df7930396f7c21jljusten
3084b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
3094b1bf81c20d5523554a83f6604df7930396f7c21jljustenEFI_STATUS
3104b1bf81c20d5523554a83f6604df7930396f7c21jljustenEFIAPI
3114b1bf81c20d5523554a83f6604df7930396f7c21jljustenUhcGetRootHubPortStatus (
3124b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN EFI_PEI_SERVICES               **PeiServices,
3134b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN PEI_USB_HOST_CONTROLLER_PPI    *This,
3144b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  UINT8                         PortNumber,
3154b1bf81c20d5523554a83f6604df7930396f7c21jljusten  OUT EFI_USB_PORT_STATUS           *PortStatus
3164b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
3174b1bf81c20d5523554a83f6604df7930396f7c21jljusten
3184b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
3194b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Sets a feature for the specified root hub port.
3204b1bf81c20d5523554a83f6604df7930396f7c21jljusten
3214b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PeiServices           The pointer of EFI_PEI_SERVICES
3224b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  This                  The pointer of PEI_USB_HOST_CONTROLLER_PPI
3234b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PortNumber            Root hub port to set.
3244b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PortFeature           Feature to set.
3254b1bf81c20d5523554a83f6604df7930396f7c21jljusten
3264b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval EFI_SUCCESS            The feature specified by PortFeature was set.
3274b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval EFI_INVALID_PARAMETER  PortNumber is invalid or PortFeature is invalid.
3284b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval EFI_TIMEOUT            The time out occurred.
3294b1bf81c20d5523554a83f6604df7930396f7c21jljusten
3304b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
3314b1bf81c20d5523554a83f6604df7930396f7c21jljustenEFI_STATUS
3324b1bf81c20d5523554a83f6604df7930396f7c21jljustenEFIAPI
3334b1bf81c20d5523554a83f6604df7930396f7c21jljustenUhcSetRootHubPortFeature (
3344b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN EFI_PEI_SERVICES               **PeiServices,
3354b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN PEI_USB_HOST_CONTROLLER_PPI    *This,
3364b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN UINT8                          PortNumber,
3374b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN EFI_USB_PORT_FEATURE           PortFeature
3384b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
3394b1bf81c20d5523554a83f6604df7930396f7c21jljusten
3404b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
3414b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Clears a feature for the specified root hub port.
3424b1bf81c20d5523554a83f6604df7930396f7c21jljusten
3434b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PeiServices           The pointer of EFI_PEI_SERVICES.
3444b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  This                  The pointer of PEI_USB_HOST_CONTROLLER_PPI.
3454b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PortNumber            Specifies the root hub port whose feature
3464b1bf81c20d5523554a83f6604df7930396f7c21jljusten                                is requested to be cleared.
3474b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PortFeature           Indicates the feature selector associated with the
3484b1bf81c20d5523554a83f6604df7930396f7c21jljusten                                feature clear request.
3494b1bf81c20d5523554a83f6604df7930396f7c21jljusten
3504b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval EFI_SUCCESS            The feature specified by PortFeature was cleared
3514b1bf81c20d5523554a83f6604df7930396f7c21jljusten                                 for the USB root hub port specified by PortNumber.
3524b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval EFI_INVALID_PARAMETER  PortNumber is invalid or PortFeature is invalid.
3534b1bf81c20d5523554a83f6604df7930396f7c21jljusten
3544b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
3554b1bf81c20d5523554a83f6604df7930396f7c21jljustenEFI_STATUS
3564b1bf81c20d5523554a83f6604df7930396f7c21jljustenEFIAPI
3574b1bf81c20d5523554a83f6604df7930396f7c21jljustenUhcClearRootHubPortFeature (
3584b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN EFI_PEI_SERVICES               **PeiServices,
3594b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN PEI_USB_HOST_CONTROLLER_PPI    *This,
3604b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN UINT8                          PortNumber,
3614b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN EFI_USB_PORT_FEATURE           PortFeature
3624b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
3634b1bf81c20d5523554a83f6604df7930396f7c21jljusten
3644b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
3654b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Initialize UHCI.
3664b1bf81c20d5523554a83f6604df7930396f7c21jljusten
3674b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  UhcDev                 UHCI Device.
3684b1bf81c20d5523554a83f6604df7930396f7c21jljusten
3694b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval EFI_SUCCESS            UHCI successfully initialized.
3704b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval EFI_OUT_OF_RESOURCES   Resource can not be allocated.
3714b1bf81c20d5523554a83f6604df7930396f7c21jljusten
3724b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
3734b1bf81c20d5523554a83f6604df7930396f7c21jljustenEFI_STATUS
3744b1bf81c20d5523554a83f6604df7930396f7c21jljustenInitializeUsbHC (
3754b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN USB_UHC_DEV          *UhcDev
3764b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
3774b1bf81c20d5523554a83f6604df7930396f7c21jljusten
3784b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
3794b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Create Frame List Structure.
3804b1bf81c20d5523554a83f6604df7930396f7c21jljusten
3814b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  UhcDev                 UHCI device.
3824b1bf81c20d5523554a83f6604df7930396f7c21jljusten
3834b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval EFI_OUT_OF_RESOURCES   Can't allocate memory resources.
3844b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval EFI_SUCCESS            Success.
3854b1bf81c20d5523554a83f6604df7930396f7c21jljusten
3864b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
3874b1bf81c20d5523554a83f6604df7930396f7c21jljustenEFI_STATUS
3884b1bf81c20d5523554a83f6604df7930396f7c21jljustenCreateFrameList (
3894b1bf81c20d5523554a83f6604df7930396f7c21jljusten  USB_UHC_DEV             *UhcDev
3904b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
3914b1bf81c20d5523554a83f6604df7930396f7c21jljusten
3924b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
3934b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Read a 16bit width data from Uhc HC IO space register.
3944b1bf81c20d5523554a83f6604df7930396f7c21jljusten
3954b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  UhcDev  The UHCI device.
3964b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  Port    The IO space address of the register.
3974b1bf81c20d5523554a83f6604df7930396f7c21jljusten
3984b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval the register content read.
3994b1bf81c20d5523554a83f6604df7930396f7c21jljusten
4004b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
4014b1bf81c20d5523554a83f6604df7930396f7c21jljustenUINT16
4024b1bf81c20d5523554a83f6604df7930396f7c21jljustenUSBReadPortW (
4034b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  USB_UHC_DEV   *UhcDev,
4044b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  UINT32        Port
4054b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
4064b1bf81c20d5523554a83f6604df7930396f7c21jljusten
4074b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
4084b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Write a 16bit width data into Uhc HC IO space register.
4094b1bf81c20d5523554a83f6604df7930396f7c21jljusten
4104b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  UhcDev  The UHCI device.
4114b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  Port    The IO space address of the register.
4124b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  Data    The data written into the register.
4134b1bf81c20d5523554a83f6604df7930396f7c21jljusten
4144b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
4154b1bf81c20d5523554a83f6604df7930396f7c21jljustenVOID
4164b1bf81c20d5523554a83f6604df7930396f7c21jljustenUSBWritePortW (
4174b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  USB_UHC_DEV   *UhcDev,
4184b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  UINT32        Port,
4194b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  UINT16        Data
4204b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
4214b1bf81c20d5523554a83f6604df7930396f7c21jljusten
4224b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
4234b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Write a 32bit width data into Uhc HC IO space register.
4244b1bf81c20d5523554a83f6604df7930396f7c21jljusten
4254b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  UhcDev  The UHCI device.
4264b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  Port    The IO space address of the register.
4274b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  Data    The data written into the register.
4284b1bf81c20d5523554a83f6604df7930396f7c21jljusten
4294b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
4304b1bf81c20d5523554a83f6604df7930396f7c21jljustenVOID
4314b1bf81c20d5523554a83f6604df7930396f7c21jljustenUSBWritePortDW (
4324b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  USB_UHC_DEV   *UhcDev,
4334b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  UINT32        Port,
4344b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  UINT32        Data
4354b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
4364b1bf81c20d5523554a83f6604df7930396f7c21jljusten
4374b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
4384b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Clear the content of UHCI's Status Register.
4394b1bf81c20d5523554a83f6604df7930396f7c21jljusten
4404b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  UhcDev       The UHCI device.
4414b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  StatusAddr   The IO space address of the register.
4424b1bf81c20d5523554a83f6604df7930396f7c21jljusten
4434b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
4444b1bf81c20d5523554a83f6604df7930396f7c21jljustenVOID
4454b1bf81c20d5523554a83f6604df7930396f7c21jljustenClearStatusReg (
4464b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  USB_UHC_DEV   *UhcDev,
4474b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  UINT32        StatusAddr
4484b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
4494b1bf81c20d5523554a83f6604df7930396f7c21jljusten
4504b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
4514b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Check whether the host controller operates well.
4524b1bf81c20d5523554a83f6604df7930396f7c21jljusten
4534b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  UhcDev        The UHCI device.
4544b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  StatusRegAddr The io address of status register.
4554b1bf81c20d5523554a83f6604df7930396f7c21jljusten
4564b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval TRUE          Host controller is working.
4574b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval FALSE         Host controller is halted or system error.
4584b1bf81c20d5523554a83f6604df7930396f7c21jljusten
4594b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
4604b1bf81c20d5523554a83f6604df7930396f7c21jljustenBOOLEAN
4614b1bf81c20d5523554a83f6604df7930396f7c21jljustenIsStatusOK (
4624b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN USB_UHC_DEV     *UhcDev,
4634b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN UINT32          StatusRegAddr
4644b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
4654b1bf81c20d5523554a83f6604df7930396f7c21jljusten
4664b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
4674b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Get Current Frame Number.
4684b1bf81c20d5523554a83f6604df7930396f7c21jljusten
4694b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  UhcDev          The UHCI device.
4704b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  FrameNumberAddr The address of frame list register.
4714b1bf81c20d5523554a83f6604df7930396f7c21jljusten
4724b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval The content of the frame list register.
4734b1bf81c20d5523554a83f6604df7930396f7c21jljusten
4744b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
4754b1bf81c20d5523554a83f6604df7930396f7c21jljustenUINT16
4764b1bf81c20d5523554a83f6604df7930396f7c21jljustenGetCurrentFrameNumber (
4774b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN USB_UHC_DEV   *UhcDev,
4784b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN UINT32        FrameNumberAddr
4794b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
4804b1bf81c20d5523554a83f6604df7930396f7c21jljusten
4814b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
4824b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Set Frame List Base Address.
4834b1bf81c20d5523554a83f6604df7930396f7c21jljusten
4844b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  UhcDev           The UHCI device.
4854b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  FrameListRegAddr The address of frame list register.
4864b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  Addr             The address of frame list table.
4874b1bf81c20d5523554a83f6604df7930396f7c21jljusten
4884b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
4894b1bf81c20d5523554a83f6604df7930396f7c21jljustenVOID
4904b1bf81c20d5523554a83f6604df7930396f7c21jljustenSetFrameListBaseAddress (
4914b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN USB_UHC_DEV   *UhcDev,
4924b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN UINT32        FrameListRegAddr,
4934b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN UINT32        Addr
4944b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
4954b1bf81c20d5523554a83f6604df7930396f7c21jljusten
4964b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
4974b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Create QH and initialize.
4984b1bf81c20d5523554a83f6604df7930396f7c21jljusten
4994b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  UhcDev               The UHCI device.
5004b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrQH                Place to store QH_STRUCT pointer.
5014b1bf81c20d5523554a83f6604df7930396f7c21jljusten
5024b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval EFI_OUT_OF_RESOURCES Can't allocate memory resources.
5034b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval EFI_SUCCESS        Success.
5044b1bf81c20d5523554a83f6604df7930396f7c21jljusten
5054b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
5064b1bf81c20d5523554a83f6604df7930396f7c21jljustenEFI_STATUS
5074b1bf81c20d5523554a83f6604df7930396f7c21jljustenCreateQH (
5084b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  USB_UHC_DEV  *UhcDev,
5094b1bf81c20d5523554a83f6604df7930396f7c21jljusten  OUT QH_STRUCT    **PtrQH
5104b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
5114b1bf81c20d5523554a83f6604df7930396f7c21jljusten
5124b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
5134b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Set the horizontal link pointer in QH.
5144b1bf81c20d5523554a83f6604df7930396f7c21jljusten
5154b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrQH               Place to store QH_STRUCT pointer.
5164b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrNext             Place to the next QH_STRUCT.
5174b1bf81c20d5523554a83f6604df7930396f7c21jljusten
5184b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
5194b1bf81c20d5523554a83f6604df7930396f7c21jljustenVOID
5204b1bf81c20d5523554a83f6604df7930396f7c21jljustenSetQHHorizontalLinkPtr (
5214b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN QH_STRUCT  *PtrQH,
5224b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN VOID       *PtrNext
5234b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
5244b1bf81c20d5523554a83f6604df7930396f7c21jljusten
5254b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
5264b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Get the horizontal link pointer in QH.
5274b1bf81c20d5523554a83f6604df7930396f7c21jljusten
5284b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrQH     Place to store QH_STRUCT pointer.
5294b1bf81c20d5523554a83f6604df7930396f7c21jljusten
5304b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval The horizontal link pointer in QH.
5314b1bf81c20d5523554a83f6604df7930396f7c21jljusten
5324b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
5334b1bf81c20d5523554a83f6604df7930396f7c21jljustenVOID  *
5344b1bf81c20d5523554a83f6604df7930396f7c21jljustenGetQHHorizontalLinkPtr (
5354b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN QH_STRUCT  *PtrQH
5364b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
5374b1bf81c20d5523554a83f6604df7930396f7c21jljusten
5384b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
5394b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Set a QH or TD horizontally to be connected with a specific QH.
5404b1bf81c20d5523554a83f6604df7930396f7c21jljusten
5414b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrQH      Place to store QH_STRUCT pointer.
5424b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  IsQH       Specify QH or TD is connected.
5434b1bf81c20d5523554a83f6604df7930396f7c21jljusten
5444b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
5454b1bf81c20d5523554a83f6604df7930396f7c21jljustenVOID
5464b1bf81c20d5523554a83f6604df7930396f7c21jljustenSetQHHorizontalQHorTDSelect (
5474b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN QH_STRUCT  *PtrQH,
5484b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN BOOLEAN    IsQH
5494b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
5504b1bf81c20d5523554a83f6604df7930396f7c21jljusten
5514b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
5524b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Set the horizontal validor bit in QH.
5534b1bf81c20d5523554a83f6604df7930396f7c21jljusten
5544b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrQH      Place to store QH_STRUCT pointer.
5554b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  IsValid    Specify the horizontal linker is valid or not.
5564b1bf81c20d5523554a83f6604df7930396f7c21jljusten
5574b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
5584b1bf81c20d5523554a83f6604df7930396f7c21jljustenVOID
5594b1bf81c20d5523554a83f6604df7930396f7c21jljustenSetQHHorizontalValidorInvalid (
5604b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN QH_STRUCT  *PtrQH,
5614b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN BOOLEAN    IsValid
5624b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
5634b1bf81c20d5523554a83f6604df7930396f7c21jljusten
5644b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
5654b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Set the vertical link pointer in QH.
5664b1bf81c20d5523554a83f6604df7930396f7c21jljusten
5674b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrQH       Place to store QH_STRUCT pointer.
5684b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrNext     Place to the next QH_STRUCT.
5694b1bf81c20d5523554a83f6604df7930396f7c21jljusten
5704b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
5714b1bf81c20d5523554a83f6604df7930396f7c21jljustenVOID
5724b1bf81c20d5523554a83f6604df7930396f7c21jljustenSetQHVerticalLinkPtr (
5734b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN QH_STRUCT  *PtrQH,
5744b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN VOID       *PtrNext
5754b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
5764b1bf81c20d5523554a83f6604df7930396f7c21jljusten
5774b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
5784b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Set a QH or TD vertically to be connected with a specific QH.
5794b1bf81c20d5523554a83f6604df7930396f7c21jljusten
5804b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrQH      Place to store QH_STRUCT pointer.
5814b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  IsQH       Specify QH or TD is connected.
5824b1bf81c20d5523554a83f6604df7930396f7c21jljusten
5834b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
5844b1bf81c20d5523554a83f6604df7930396f7c21jljustenVOID
5854b1bf81c20d5523554a83f6604df7930396f7c21jljustenSetQHVerticalQHorTDSelect (
5864b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN QH_STRUCT  *PtrQH,
5874b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN BOOLEAN    IsQH
5884b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
5894b1bf81c20d5523554a83f6604df7930396f7c21jljusten
5904b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
5914b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Set the vertical validor bit in QH.
5924b1bf81c20d5523554a83f6604df7930396f7c21jljusten
5934b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrQH      Place to store QH_STRUCT pointer.
5944b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  IsValid    Specify the vertical linker is valid or not.
5954b1bf81c20d5523554a83f6604df7930396f7c21jljusten
5964b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
5974b1bf81c20d5523554a83f6604df7930396f7c21jljustenVOID
5984b1bf81c20d5523554a83f6604df7930396f7c21jljustenSetQHVerticalValidorInvalid (
5994b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN QH_STRUCT  *PtrQH,
6004b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN BOOLEAN    IsValid
6014b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
6024b1bf81c20d5523554a83f6604df7930396f7c21jljusten
6034b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
6044b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Get the vertical validor bit in QH.
6054b1bf81c20d5523554a83f6604df7930396f7c21jljusten
6064b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrQH      Place to store QH_STRUCT pointer.
6074b1bf81c20d5523554a83f6604df7930396f7c21jljusten
6084b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval The vertical linker is valid or not.
6094b1bf81c20d5523554a83f6604df7930396f7c21jljusten
6104b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
6114b1bf81c20d5523554a83f6604df7930396f7c21jljustenBOOLEAN
6124b1bf81c20d5523554a83f6604df7930396f7c21jljustenGetQHHorizontalValidorInvalid (
6134b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN QH_STRUCT  *PtrQH
6144b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
6154b1bf81c20d5523554a83f6604df7930396f7c21jljusten
6164b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
6174b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Allocate TD or QH Struct.
6184b1bf81c20d5523554a83f6604df7930396f7c21jljusten
6194b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  UhcDev                 The UHCI device.
6204b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  Size                   The size of allocation.
6214b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrStruct              Place to store TD_STRUCT pointer.
6224b1bf81c20d5523554a83f6604df7930396f7c21jljusten
6234b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @return EFI_SUCCESS            Allocate successfully.
6244b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval EFI_OUT_OF_RESOURCES   Can't allocate memory resource.
6254b1bf81c20d5523554a83f6604df7930396f7c21jljusten
6264b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
6274b1bf81c20d5523554a83f6604df7930396f7c21jljustenEFI_STATUS
6284b1bf81c20d5523554a83f6604df7930396f7c21jljustenAllocateTDorQHStruct (
6294b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  USB_UHC_DEV   *UhcDev,
6304b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  UINT32        Size,
6314b1bf81c20d5523554a83f6604df7930396f7c21jljusten  OUT VOID          **PtrStruct
6324b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
6334b1bf81c20d5523554a83f6604df7930396f7c21jljusten
6344b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
6354b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Create a TD Struct.
6364b1bf81c20d5523554a83f6604df7930396f7c21jljusten
6374b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  UhcDev                 The UHCI device.
6384b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrTD                  Place to store TD_STRUCT pointer.
6394b1bf81c20d5523554a83f6604df7930396f7c21jljusten
6404b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @return EFI_SUCCESS            Allocate successfully.
6414b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval EFI_OUT_OF_RESOURCES   Can't allocate memory resource.
6424b1bf81c20d5523554a83f6604df7930396f7c21jljusten
6434b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
6444b1bf81c20d5523554a83f6604df7930396f7c21jljustenEFI_STATUS
6454b1bf81c20d5523554a83f6604df7930396f7c21jljustenCreateTD (
6464b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  USB_UHC_DEV     *UhcDev,
6474b1bf81c20d5523554a83f6604df7930396f7c21jljusten  OUT TD_STRUCT       **PtrTD
6484b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
6494b1bf81c20d5523554a83f6604df7930396f7c21jljusten
6504b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
6514b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Generate Setup Stage TD.
6524b1bf81c20d5523554a83f6604df7930396f7c21jljusten
6534b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  UhcDev       The UHCI device.
6544b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  DevAddr      Device address.
6554b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  Endpoint     Endpoint number.
6564b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  DeviceSpeed  Device Speed.
6574b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  DevRequest   Device reuquest.
6584b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  RequestLen   Request length.
6594b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrTD        TD_STRUCT generated.
6604b1bf81c20d5523554a83f6604df7930396f7c21jljusten
6614b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @return EFI_SUCCESS            Generate setup stage TD successfully.
6624b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval EFI_OUT_OF_RESOURCES   Can't allocate memory resource.
6634b1bf81c20d5523554a83f6604df7930396f7c21jljusten
6644b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
6654b1bf81c20d5523554a83f6604df7930396f7c21jljustenEFI_STATUS
6664b1bf81c20d5523554a83f6604df7930396f7c21jljustenGenSetupStageTD (
6674b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  USB_UHC_DEV     *UhcDev,
6684b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  UINT8           DevAddr,
6694b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  UINT8           Endpoint,
6704b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  UINT8           DeviceSpeed,
6714b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  UINT8           *DevRequest,
6724b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  UINT8           RequestLen,
6734b1bf81c20d5523554a83f6604df7930396f7c21jljusten  OUT TD_STRUCT       **PtrTD
6744b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
6754b1bf81c20d5523554a83f6604df7930396f7c21jljusten
6764b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
6774b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Generate Data Stage TD.
6784b1bf81c20d5523554a83f6604df7930396f7c21jljusten
6794b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  UhcDev       The UHCI device.
6804b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  DevAddr      Device address.
6814b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  Endpoint     Endpoint number.
6824b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrData      Data buffer.
6834b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  Len          Data length.
6844b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PktID        PacketID.
6854b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  Toggle       Data toggle value.
6864b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  DeviceSpeed  Device Speed.
6874b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrTD        TD_STRUCT generated.
6884b1bf81c20d5523554a83f6604df7930396f7c21jljusten
6894b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @return EFI_SUCCESS            Generate data stage TD successfully.
6904b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval EFI_OUT_OF_RESOURCES   Can't allocate memory resource.
6914b1bf81c20d5523554a83f6604df7930396f7c21jljusten
6924b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
6934b1bf81c20d5523554a83f6604df7930396f7c21jljustenEFI_STATUS
6944b1bf81c20d5523554a83f6604df7930396f7c21jljustenGenDataTD (
6954b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  USB_UHC_DEV     *UhcDev,
6964b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  UINT8           DevAddr,
6974b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  UINT8           Endpoint,
6984b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  UINT8           *PtrData,
6994b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  UINT8           Len,
7004b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  UINT8           PktID,
7014b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  UINT8           Toggle,
7024b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  UINT8           DeviceSpeed,
7034b1bf81c20d5523554a83f6604df7930396f7c21jljusten  OUT TD_STRUCT       **PtrTD
7044b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
7054b1bf81c20d5523554a83f6604df7930396f7c21jljusten
7064b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
7074b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Generate Status Stage TD.
7084b1bf81c20d5523554a83f6604df7930396f7c21jljusten
7094b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  UhcDev       The UHCI device.
7104b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  DevAddr      Device address.
7114b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  Endpoint     Endpoint number.
7124b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PktID        PacketID.
7134b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  DeviceSpeed  Device Speed.
7144b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrTD        TD_STRUCT generated.
7154b1bf81c20d5523554a83f6604df7930396f7c21jljusten
7164b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @return EFI_SUCCESS            Generate status stage TD successfully.
7174b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval EFI_OUT_OF_RESOURCES   Can't allocate memory resource.
7184b1bf81c20d5523554a83f6604df7930396f7c21jljusten
7194b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
7204b1bf81c20d5523554a83f6604df7930396f7c21jljustenEFI_STATUS
7214b1bf81c20d5523554a83f6604df7930396f7c21jljustenCreateStatusTD (
7224b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  USB_UHC_DEV     *UhcDev,
7234b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  UINT8           DevAddr,
7244b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  UINT8           Endpoint,
7254b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  UINT8           PktID,
7264b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  UINT8           DeviceSpeed,
7274b1bf81c20d5523554a83f6604df7930396f7c21jljusten  OUT TD_STRUCT       **PtrTD
7284b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
7294b1bf81c20d5523554a83f6604df7930396f7c21jljusten
7304b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
7314b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Set the link pointer validor bit in TD.
7324b1bf81c20d5523554a83f6604df7930396f7c21jljusten
7334b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrTDStruct  Place to store TD_STRUCT pointer.
7344b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  IsValid      Specify the linker pointer is valid or not.
7354b1bf81c20d5523554a83f6604df7930396f7c21jljusten
7364b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
7374b1bf81c20d5523554a83f6604df7930396f7c21jljustenVOID
7384b1bf81c20d5523554a83f6604df7930396f7c21jljustenSetTDLinkPtrValidorInvalid (
7394b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  TD_STRUCT *PtrTDStruct,
7404b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  BOOLEAN   IsValid
7414b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
7424b1bf81c20d5523554a83f6604df7930396f7c21jljusten
7434b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
7444b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Set the Link Pointer pointing to a QH or TD.
7454b1bf81c20d5523554a83f6604df7930396f7c21jljusten
7464b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrTDStruct   Place to store TD_STRUCT pointer.
7474b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  IsQH          Specify QH or TD is connected.
7484b1bf81c20d5523554a83f6604df7930396f7c21jljusten
7494b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
7504b1bf81c20d5523554a83f6604df7930396f7c21jljustenVOID
7514b1bf81c20d5523554a83f6604df7930396f7c21jljustenSetTDLinkPtrQHorTDSelect (
7524b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  TD_STRUCT *PtrTDStruct,
7534b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  BOOLEAN   IsQH
7544b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
7554b1bf81c20d5523554a83f6604df7930396f7c21jljusten
7564b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
7574b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Set the traverse is depth-first or breadth-first.
7584b1bf81c20d5523554a83f6604df7930396f7c21jljusten
7594b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrTDStruct   Place to store TD_STRUCT pointer.
7604b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  IsDepth       Specify the traverse is depth-first or breadth-first.
7614b1bf81c20d5523554a83f6604df7930396f7c21jljusten
7624b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
7634b1bf81c20d5523554a83f6604df7930396f7c21jljustenVOID
7644b1bf81c20d5523554a83f6604df7930396f7c21jljustenSetTDLinkPtrDepthorBreadth (
7654b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  TD_STRUCT *PtrTDStruct,
7664b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  BOOLEAN   IsDepth
7674b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
7684b1bf81c20d5523554a83f6604df7930396f7c21jljusten
7694b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
7704b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Set TD Link Pointer in TD.
7714b1bf81c20d5523554a83f6604df7930396f7c21jljusten
7724b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrTDStruct  Place to store TD_STRUCT pointer.
7734b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrNext      Place to the next TD_STRUCT.
7744b1bf81c20d5523554a83f6604df7930396f7c21jljusten
7754b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
7764b1bf81c20d5523554a83f6604df7930396f7c21jljustenVOID
7774b1bf81c20d5523554a83f6604df7930396f7c21jljustenSetTDLinkPtr (
7784b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  TD_STRUCT *PtrTDStruct,
7794b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  VOID      *PtrNext
7804b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
7814b1bf81c20d5523554a83f6604df7930396f7c21jljusten
7824b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
7834b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Get TD Link Pointer.
7844b1bf81c20d5523554a83f6604df7930396f7c21jljusten
7854b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrTDStruct     Place to store TD_STRUCT pointer.
7864b1bf81c20d5523554a83f6604df7930396f7c21jljusten
7874b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval Get TD Link Pointer in TD.
7884b1bf81c20d5523554a83f6604df7930396f7c21jljusten
7894b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
7904b1bf81c20d5523554a83f6604df7930396f7c21jljustenVOID*
7914b1bf81c20d5523554a83f6604df7930396f7c21jljustenGetTDLinkPtr (
7924b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  TD_STRUCT *PtrTDStruct
7934b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
7944b1bf81c20d5523554a83f6604df7930396f7c21jljusten
7954b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
7964b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Get the information about whether the Link Pointer field pointing to
7974b1bf81c20d5523554a83f6604df7930396f7c21jljusten  a QH or a TD.
7984b1bf81c20d5523554a83f6604df7930396f7c21jljusten
7994b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrTDStruct     Place to store TD_STRUCT pointer.
8004b1bf81c20d5523554a83f6604df7930396f7c21jljusten
8014b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval whether the Link Pointer field pointing to a QH or a TD.
8024b1bf81c20d5523554a83f6604df7930396f7c21jljusten
8034b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
8044b1bf81c20d5523554a83f6604df7930396f7c21jljustenBOOLEAN
8054b1bf81c20d5523554a83f6604df7930396f7c21jljustenIsTDLinkPtrQHOrTD (
8064b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  TD_STRUCT *PtrTDStruct
8074b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
8084b1bf81c20d5523554a83f6604df7930396f7c21jljusten
8094b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
8104b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Enable/Disable short packet detection mechanism.
8114b1bf81c20d5523554a83f6604df7930396f7c21jljusten
8124b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrTDStruct  Place to store TD_STRUCT pointer.
8134b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  IsEnable     Enable or disable short packet detection mechanism.
8144b1bf81c20d5523554a83f6604df7930396f7c21jljusten
8154b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
8164b1bf81c20d5523554a83f6604df7930396f7c21jljustenVOID
8174b1bf81c20d5523554a83f6604df7930396f7c21jljustenEnableorDisableTDShortPacket (
8184b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  TD_STRUCT *PtrTDStruct,
8194b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  BOOLEAN   IsEnable
8204b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
8214b1bf81c20d5523554a83f6604df7930396f7c21jljusten
8224b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
8234b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Set the max error counter in TD.
8244b1bf81c20d5523554a83f6604df7930396f7c21jljusten
8254b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrTDStruct  Place to store TD_STRUCT pointer.
8264b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  MaxErrors    The number of allowable error.
8274b1bf81c20d5523554a83f6604df7930396f7c21jljusten
8284b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
8294b1bf81c20d5523554a83f6604df7930396f7c21jljustenVOID
8304b1bf81c20d5523554a83f6604df7930396f7c21jljustenSetTDControlErrorCounter (
8314b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  TD_STRUCT *PtrTDStruct,
8324b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  UINT8     MaxErrors
8334b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
8344b1bf81c20d5523554a83f6604df7930396f7c21jljusten
8354b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
8364b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Set the TD is targeting a low-speed device or not.
8374b1bf81c20d5523554a83f6604df7930396f7c21jljusten
8384b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrTDStruct       Place to store TD_STRUCT pointer.
8394b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  IsLowSpeedDevice  Whether The device is low-speed.
8404b1bf81c20d5523554a83f6604df7930396f7c21jljusten
8414b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
8424b1bf81c20d5523554a83f6604df7930396f7c21jljustenVOID
8434b1bf81c20d5523554a83f6604df7930396f7c21jljustenSetTDLoworFullSpeedDevice (
8444b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  TD_STRUCT *PtrTDStruct,
8454b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  BOOLEAN   IsLowSpeedDevice
8464b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
8474b1bf81c20d5523554a83f6604df7930396f7c21jljusten
8484b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
8494b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Set the TD is isochronous transfer type or not.
8504b1bf81c20d5523554a83f6604df7930396f7c21jljusten
8514b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrTDStruct       Place to store TD_STRUCT pointer.
8524b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  IsIsochronous     Whether the transaction isochronous transfer type.
8534b1bf81c20d5523554a83f6604df7930396f7c21jljusten
8544b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
8554b1bf81c20d5523554a83f6604df7930396f7c21jljustenVOID
8564b1bf81c20d5523554a83f6604df7930396f7c21jljustenSetTDControlIsochronousorNot (
8574b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  TD_STRUCT *PtrTDStruct,
8584b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  BOOLEAN   IsIsochronous
8594b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
8604b1bf81c20d5523554a83f6604df7930396f7c21jljusten
8614b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
8624b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Set if UCHI should issue an interrupt on completion of the frame
8634b1bf81c20d5523554a83f6604df7930396f7c21jljusten  in which this TD is executed
8644b1bf81c20d5523554a83f6604df7930396f7c21jljusten
8654b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrTDStruct       Place to store TD_STRUCT pointer.
8664b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  IsSet             Whether HC should issue an interrupt on completion.
8674b1bf81c20d5523554a83f6604df7930396f7c21jljusten
8684b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
8694b1bf81c20d5523554a83f6604df7930396f7c21jljustenVOID
8704b1bf81c20d5523554a83f6604df7930396f7c21jljustenSetorClearTDControlIOC (
8714b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  TD_STRUCT *PtrTDStruct,
8724b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  BOOLEAN   IsSet
8734b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
8744b1bf81c20d5523554a83f6604df7930396f7c21jljusten
8754b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
8764b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Set if the TD is active and can be executed.
8774b1bf81c20d5523554a83f6604df7930396f7c21jljusten
8784b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrTDStruct       Place to store TD_STRUCT pointer.
8794b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  IsActive          Whether the TD is active and can be executed.
8804b1bf81c20d5523554a83f6604df7930396f7c21jljusten
8814b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
8824b1bf81c20d5523554a83f6604df7930396f7c21jljustenVOID
8834b1bf81c20d5523554a83f6604df7930396f7c21jljustenSetTDStatusActiveorInactive (
8844b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  TD_STRUCT *PtrTDStruct,
8854b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  BOOLEAN   IsActive
8864b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
8874b1bf81c20d5523554a83f6604df7930396f7c21jljusten
8884b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
8894b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Specifies the maximum number of data bytes allowed for the transfer.
8904b1bf81c20d5523554a83f6604df7930396f7c21jljusten
8914b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrTDStruct   Place to store TD_STRUCT pointer.
8924b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  MaxLen        The maximum number of data bytes allowed.
8934b1bf81c20d5523554a83f6604df7930396f7c21jljusten
8944b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval The allowed maximum number of data.
8954b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
8964b1bf81c20d5523554a83f6604df7930396f7c21jljustenUINT16
8974b1bf81c20d5523554a83f6604df7930396f7c21jljustenSetTDTokenMaxLength (
8984b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  TD_STRUCT *PtrTDStruct,
8994b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  UINT16    MaxLen
9004b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
9014b1bf81c20d5523554a83f6604df7930396f7c21jljusten
9024b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
9034b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Set the data toggle bit to DATA1.
9044b1bf81c20d5523554a83f6604df7930396f7c21jljusten
9054b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrTDStruct   Place to store TD_STRUCT pointer.
9064b1bf81c20d5523554a83f6604df7930396f7c21jljusten
9074b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
9084b1bf81c20d5523554a83f6604df7930396f7c21jljustenVOID
9094b1bf81c20d5523554a83f6604df7930396f7c21jljustenSetTDTokenDataToggle1 (
9104b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  TD_STRUCT *PtrTDStruct
9114b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
9124b1bf81c20d5523554a83f6604df7930396f7c21jljusten
9134b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
9144b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Set the data toggle bit to DATA0.
9154b1bf81c20d5523554a83f6604df7930396f7c21jljusten
9164b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrTDStruct   Place to store TD_STRUCT pointer.
9174b1bf81c20d5523554a83f6604df7930396f7c21jljusten
9184b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
9194b1bf81c20d5523554a83f6604df7930396f7c21jljustenVOID
9204b1bf81c20d5523554a83f6604df7930396f7c21jljustenSetTDTokenDataToggle0 (
9214b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  TD_STRUCT *PtrTDStruct
9224b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
9234b1bf81c20d5523554a83f6604df7930396f7c21jljusten
9244b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
9254b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Set EndPoint Number the TD is targeting at.
9264b1bf81c20d5523554a83f6604df7930396f7c21jljusten
9274b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrTDStruct   Place to store TD_STRUCT pointer.
9284b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  EndPoint      The Endport number of the target.
9294b1bf81c20d5523554a83f6604df7930396f7c21jljusten
9304b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
9314b1bf81c20d5523554a83f6604df7930396f7c21jljustenVOID
9324b1bf81c20d5523554a83f6604df7930396f7c21jljustenSetTDTokenEndPoint (
9334b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  TD_STRUCT *PtrTDStruct,
9344b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  UINTN     EndPoint
9354b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
9364b1bf81c20d5523554a83f6604df7930396f7c21jljusten
9374b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
9384b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Set Device Address the TD is targeting at.
9394b1bf81c20d5523554a83f6604df7930396f7c21jljusten
9404b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrTDStruct   Place to store TD_STRUCT pointer.
9414b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  DevAddr       The Device Address of the target.
9424b1bf81c20d5523554a83f6604df7930396f7c21jljusten
9434b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
9444b1bf81c20d5523554a83f6604df7930396f7c21jljustenVOID
9454b1bf81c20d5523554a83f6604df7930396f7c21jljustenSetTDTokenDeviceAddress (
9464b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  TD_STRUCT *PtrTDStruct,
9474b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  UINTN     DevAddr
9484b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
9494b1bf81c20d5523554a83f6604df7930396f7c21jljusten
9504b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
9514b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Set Packet Identification the TD is targeting at.
9524b1bf81c20d5523554a83f6604df7930396f7c21jljusten
9534b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrTDStruct   Place to store TD_STRUCT pointer.
9544b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PacketID      The Packet Identification of the target.
9554b1bf81c20d5523554a83f6604df7930396f7c21jljusten
9564b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
9574b1bf81c20d5523554a83f6604df7930396f7c21jljustenVOID
9584b1bf81c20d5523554a83f6604df7930396f7c21jljustenSetTDTokenPacketID (
9594b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  TD_STRUCT *PtrTDStruct,
9604b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  UINT8     PacketID
9614b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
9624b1bf81c20d5523554a83f6604df7930396f7c21jljusten
9634b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
9644b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Set the beginning address of the data buffer that will be used
9654b1bf81c20d5523554a83f6604df7930396f7c21jljusten  during the transaction.
9664b1bf81c20d5523554a83f6604df7930396f7c21jljusten
9674b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrTDStruct   Place to store TD_STRUCT pointer.
9684b1bf81c20d5523554a83f6604df7930396f7c21jljusten
9694b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
9704b1bf81c20d5523554a83f6604df7930396f7c21jljustenVOID
9714b1bf81c20d5523554a83f6604df7930396f7c21jljustenSetTDDataBuffer (
9724b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  TD_STRUCT *PtrTDStruct
9734b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
9744b1bf81c20d5523554a83f6604df7930396f7c21jljusten
9754b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
9764b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Detect whether the TD is active.
9774b1bf81c20d5523554a83f6604df7930396f7c21jljusten
9784b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrTDStruct   Place to store TD_STRUCT pointer.
9794b1bf81c20d5523554a83f6604df7930396f7c21jljusten
9804b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval The TD is active or not.
9814b1bf81c20d5523554a83f6604df7930396f7c21jljusten
9824b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
9834b1bf81c20d5523554a83f6604df7930396f7c21jljustenBOOLEAN
9844b1bf81c20d5523554a83f6604df7930396f7c21jljustenIsTDStatusActive (
9854b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  TD_STRUCT *PtrTDStruct
9864b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
9874b1bf81c20d5523554a83f6604df7930396f7c21jljusten
9884b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
9894b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Detect whether the TD is stalled.
9904b1bf81c20d5523554a83f6604df7930396f7c21jljusten
9914b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrTDStruct   Place to store TD_STRUCT pointer.
9924b1bf81c20d5523554a83f6604df7930396f7c21jljusten
9934b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval The TD is stalled or not.
9944b1bf81c20d5523554a83f6604df7930396f7c21jljusten
9954b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
9964b1bf81c20d5523554a83f6604df7930396f7c21jljustenBOOLEAN
9974b1bf81c20d5523554a83f6604df7930396f7c21jljustenIsTDStatusStalled (
9984b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  TD_STRUCT *PtrTDStruct
9994b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
10004b1bf81c20d5523554a83f6604df7930396f7c21jljusten
10014b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
10024b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Detect whether Data Buffer Error is happened.
10034b1bf81c20d5523554a83f6604df7930396f7c21jljusten
10044b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrTDStruct   Place to store TD_STRUCT pointer.
10054b1bf81c20d5523554a83f6604df7930396f7c21jljusten
10064b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval The Data Buffer Error is happened or not.
10074b1bf81c20d5523554a83f6604df7930396f7c21jljusten
10084b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
10094b1bf81c20d5523554a83f6604df7930396f7c21jljustenBOOLEAN
10104b1bf81c20d5523554a83f6604df7930396f7c21jljustenIsTDStatusBufferError (
10114b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  TD_STRUCT *PtrTDStruct
10124b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
10134b1bf81c20d5523554a83f6604df7930396f7c21jljusten
10144b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
10154b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Detect whether Babble Error is happened.
10164b1bf81c20d5523554a83f6604df7930396f7c21jljusten
10174b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrTDStruct   Place to store TD_STRUCT pointer.
10184b1bf81c20d5523554a83f6604df7930396f7c21jljusten
10194b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval The Babble Error is happened or not.
10204b1bf81c20d5523554a83f6604df7930396f7c21jljusten
10214b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
10224b1bf81c20d5523554a83f6604df7930396f7c21jljustenBOOLEAN
10234b1bf81c20d5523554a83f6604df7930396f7c21jljustenIsTDStatusBabbleError (
10244b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  TD_STRUCT *PtrTDStruct
10254b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
10264b1bf81c20d5523554a83f6604df7930396f7c21jljusten
10274b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
10284b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Detect whether NAK is received.
10294b1bf81c20d5523554a83f6604df7930396f7c21jljusten
10304b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrTDStruct   Place to store TD_STRUCT pointer.
10314b1bf81c20d5523554a83f6604df7930396f7c21jljusten
10324b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval The NAK is received or not.
10334b1bf81c20d5523554a83f6604df7930396f7c21jljusten
10344b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
10354b1bf81c20d5523554a83f6604df7930396f7c21jljustenBOOLEAN
10364b1bf81c20d5523554a83f6604df7930396f7c21jljustenIsTDStatusNAKReceived (
10374b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  TD_STRUCT *PtrTDStruct
10384b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
10394b1bf81c20d5523554a83f6604df7930396f7c21jljusten
10404b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
10414b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Detect whether CRC/Time Out Error is encountered.
10424b1bf81c20d5523554a83f6604df7930396f7c21jljusten
10434b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrTDStruct   Place to store TD_STRUCT pointer.
10444b1bf81c20d5523554a83f6604df7930396f7c21jljusten
10454b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval The CRC/Time Out Error is encountered or not.
10464b1bf81c20d5523554a83f6604df7930396f7c21jljusten
10474b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
10484b1bf81c20d5523554a83f6604df7930396f7c21jljustenBOOLEAN
10494b1bf81c20d5523554a83f6604df7930396f7c21jljustenIsTDStatusCRCTimeOutError (
10504b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  TD_STRUCT *PtrTDStruct
10514b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
10524b1bf81c20d5523554a83f6604df7930396f7c21jljusten
10534b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
10544b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Detect whether Bitstuff Error is received.
10554b1bf81c20d5523554a83f6604df7930396f7c21jljusten
10564b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrTDStruct   Place to store TD_STRUCT pointer.
10574b1bf81c20d5523554a83f6604df7930396f7c21jljusten
10584b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval The Bitstuff Error is received or not.
10594b1bf81c20d5523554a83f6604df7930396f7c21jljusten
10604b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
10614b1bf81c20d5523554a83f6604df7930396f7c21jljustenBOOLEAN
10624b1bf81c20d5523554a83f6604df7930396f7c21jljustenIsTDStatusBitStuffError (
10634b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  TD_STRUCT *PtrTDStruct
10644b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
10654b1bf81c20d5523554a83f6604df7930396f7c21jljusten
10664b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
10674b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Retrieve the actual number of bytes that were tansferred.
10684b1bf81c20d5523554a83f6604df7930396f7c21jljusten
10694b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrTDStruct   Place to store TD_STRUCT pointer.
10704b1bf81c20d5523554a83f6604df7930396f7c21jljusten
10714b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval The actual number of bytes that were tansferred.
10724b1bf81c20d5523554a83f6604df7930396f7c21jljusten
10734b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
10744b1bf81c20d5523554a83f6604df7930396f7c21jljustenUINT16
10754b1bf81c20d5523554a83f6604df7930396f7c21jljustenGetTDStatusActualLength (
10764b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  TD_STRUCT *PtrTDStruct
10774b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
10784b1bf81c20d5523554a83f6604df7930396f7c21jljusten
10794b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
10804b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Retrieve the information of whether the Link Pointer field is valid or not.
10814b1bf81c20d5523554a83f6604df7930396f7c21jljusten
10824b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrTDStruct   Place to store TD_STRUCT pointer.
10834b1bf81c20d5523554a83f6604df7930396f7c21jljusten
10844b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval The linker pointer field is valid or not.
10854b1bf81c20d5523554a83f6604df7930396f7c21jljusten
10864b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
10874b1bf81c20d5523554a83f6604df7930396f7c21jljustenBOOLEAN
10884b1bf81c20d5523554a83f6604df7930396f7c21jljustenGetTDLinkPtrValidorInvalid (
10894b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  TD_STRUCT *PtrTDStruct
10904b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
10914b1bf81c20d5523554a83f6604df7930396f7c21jljusten
10924b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
10934b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Count TD Number from PtrFirstTD.
10944b1bf81c20d5523554a83f6604df7930396f7c21jljusten
10954b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrFirstTD   Place to store TD_STRUCT pointer.
10964b1bf81c20d5523554a83f6604df7930396f7c21jljusten
10974b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval The queued TDs number.
10984b1bf81c20d5523554a83f6604df7930396f7c21jljusten
10994b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
11004b1bf81c20d5523554a83f6604df7930396f7c21jljustenUINTN
11014b1bf81c20d5523554a83f6604df7930396f7c21jljustenCountTDsNumber (
11024b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  TD_STRUCT *PtrFirstTD
11034b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
11044b1bf81c20d5523554a83f6604df7930396f7c21jljusten
11054b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
11064b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Link TD To QH.
11074b1bf81c20d5523554a83f6604df7930396f7c21jljusten
11084b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrQH   Place to store QH_STRUCT pointer.
11094b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrTD   Place to store TD_STRUCT pointer.
11104b1bf81c20d5523554a83f6604df7930396f7c21jljusten
11114b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
11124b1bf81c20d5523554a83f6604df7930396f7c21jljustenVOID
11134b1bf81c20d5523554a83f6604df7930396f7c21jljustenLinkTDToQH (
11144b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  QH_STRUCT *PtrQH,
11154b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  TD_STRUCT *PtrTD
11164b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
11174b1bf81c20d5523554a83f6604df7930396f7c21jljusten
11184b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
11194b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Link TD To TD.
11204b1bf81c20d5523554a83f6604df7930396f7c21jljusten
11214b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrPreTD  Place to store TD_STRUCT pointer.
11224b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrTD     Place to store TD_STRUCT pointer.
11234b1bf81c20d5523554a83f6604df7930396f7c21jljusten
11244b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
11254b1bf81c20d5523554a83f6604df7930396f7c21jljustenVOID
11264b1bf81c20d5523554a83f6604df7930396f7c21jljustenLinkTDToTD (
11274b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  TD_STRUCT *PtrPreTD,
11284b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  TD_STRUCT *PtrTD
11294b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
11304b1bf81c20d5523554a83f6604df7930396f7c21jljusten
11314b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
11324b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Execute Control Transfer.
11334b1bf81c20d5523554a83f6604df7930396f7c21jljusten
11344b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  UhcDev            The UCHI device.
11354b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrTD             A pointer to TD_STRUCT data.
11364b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  ActualLen         Actual transfer Length.
11374b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  TimeOut           TimeOut value.
11384b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  TransferResult    Transfer Result.
11394b1bf81c20d5523554a83f6604df7930396f7c21jljusten
11404b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @return EFI_DEVICE_ERROR  The transfer failed due to transfer error.
11414b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @return EFI_TIMEOUT       The transfer failed due to time out.
11424b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @return EFI_SUCCESS       The transfer finished OK.
11434b1bf81c20d5523554a83f6604df7930396f7c21jljusten
11444b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
11454b1bf81c20d5523554a83f6604df7930396f7c21jljustenEFI_STATUS
11464b1bf81c20d5523554a83f6604df7930396f7c21jljustenExecuteControlTransfer (
11474b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  USB_UHC_DEV *UhcDev,
11484b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  TD_STRUCT   *PtrTD,
11494b1bf81c20d5523554a83f6604df7930396f7c21jljusten  OUT UINTN       *ActualLen,
11504b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  UINTN       TimeOut,
11514b1bf81c20d5523554a83f6604df7930396f7c21jljusten  OUT UINT32      *TransferResult
11524b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
11534b1bf81c20d5523554a83f6604df7930396f7c21jljusten
11544b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
11554b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Execute Bulk Transfer.
11564b1bf81c20d5523554a83f6604df7930396f7c21jljusten
11574b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  UhcDev            The UCHI device.
11584b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrTD             A pointer to TD_STRUCT data.
11594b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  ActualLen         Actual transfer Length.
11604b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  DataToggle        DataToggle value.
11614b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  TimeOut           TimeOut value.
11624b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  TransferResult    Transfer Result.
11634b1bf81c20d5523554a83f6604df7930396f7c21jljusten
11644b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @return EFI_DEVICE_ERROR  The transfer failed due to transfer error.
11654b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @return EFI_TIMEOUT       The transfer failed due to time out.
11664b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @return EFI_SUCCESS       The transfer finished OK.
11674b1bf81c20d5523554a83f6604df7930396f7c21jljusten
11684b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
11694b1bf81c20d5523554a83f6604df7930396f7c21jljustenEFI_STATUS
11704b1bf81c20d5523554a83f6604df7930396f7c21jljustenExecBulkTransfer (
11714b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN     USB_UHC_DEV *UhcDev,
11724b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN     TD_STRUCT   *PtrTD,
11734b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN OUT UINTN     *ActualLen,
11744b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN     UINT8     *DataToggle,
11754b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN     UINTN     TimeOut,
11764b1bf81c20d5523554a83f6604df7930396f7c21jljusten  OUT    UINT32    *TransferResult
11774b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
11784b1bf81c20d5523554a83f6604df7930396f7c21jljusten
11794b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
11804b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Delete Queued TDs.
11814b1bf81c20d5523554a83f6604df7930396f7c21jljusten
11824b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  UhcDev       The UCHI device.
11834b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrFirstTD   Place to store TD_STRUCT pointer.
11844b1bf81c20d5523554a83f6604df7930396f7c21jljusten
11854b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
11864b1bf81c20d5523554a83f6604df7930396f7c21jljustenVOID
11874b1bf81c20d5523554a83f6604df7930396f7c21jljustenDeleteQueuedTDs (
11884b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN USB_UHC_DEV     *UhcDev,
11894b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN TD_STRUCT       *PtrFirstTD
11904b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
11914b1bf81c20d5523554a83f6604df7930396f7c21jljusten
11924b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
11934b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Check TDs Results.
11944b1bf81c20d5523554a83f6604df7930396f7c21jljusten
11954b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  PtrTD               A pointer to TD_STRUCT data.
11964b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  Result              The result to return.
11974b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  ErrTDPos            The Error TD position.
11984b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  ActualTransferSize  Actual transfer size.
11994b1bf81c20d5523554a83f6604df7930396f7c21jljusten
12004b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval The TD is executed successfully or not.
12014b1bf81c20d5523554a83f6604df7930396f7c21jljusten
12024b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
12034b1bf81c20d5523554a83f6604df7930396f7c21jljustenBOOLEAN
12044b1bf81c20d5523554a83f6604df7930396f7c21jljustenCheckTDsResults (
12054b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  TD_STRUCT               *PtrTD,
12064b1bf81c20d5523554a83f6604df7930396f7c21jljusten  OUT UINT32                  *Result,
12074b1bf81c20d5523554a83f6604df7930396f7c21jljusten  OUT UINTN                   *ErrTDPos,
12084b1bf81c20d5523554a83f6604df7930396f7c21jljusten  OUT UINTN                   *ActualTransferSize
12094b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
12104b1bf81c20d5523554a83f6604df7930396f7c21jljusten
12114b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
12124b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Create Memory Block.
12134b1bf81c20d5523554a83f6604df7930396f7c21jljusten
12144b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  UhcDev                   The UCHI device.
12154b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  MemoryHeader             The Pointer to allocated memory block.
12164b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  MemoryBlockSizeInPages   The page size of memory block to be allocated.
12174b1bf81c20d5523554a83f6604df7930396f7c21jljusten
12184b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval EFI_OUT_OF_RESOURCES   Can't allocate memory resources.
12194b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval EFI_SUCCESS            Success.
12204b1bf81c20d5523554a83f6604df7930396f7c21jljusten
12214b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
12224b1bf81c20d5523554a83f6604df7930396f7c21jljustenEFI_STATUS
12234b1bf81c20d5523554a83f6604df7930396f7c21jljustenCreateMemoryBlock (
12244b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  USB_UHC_DEV           *UhcDev,
12254b1bf81c20d5523554a83f6604df7930396f7c21jljusten  OUT MEMORY_MANAGE_HEADER  **MemoryHeader,
12264b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  UINTN                 MemoryBlockSizeInPages
12274b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
12284b1bf81c20d5523554a83f6604df7930396f7c21jljusten
12294b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
12304b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Initialize UHCI memory management.
12314b1bf81c20d5523554a83f6604df7930396f7c21jljusten
12324b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  UhcDev                 The UCHI device.
12334b1bf81c20d5523554a83f6604df7930396f7c21jljusten
12344b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval EFI_OUT_OF_RESOURCES   Can't allocate memory resources.
12354b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval EFI_SUCCESS            Success.
12364b1bf81c20d5523554a83f6604df7930396f7c21jljusten
12374b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
12384b1bf81c20d5523554a83f6604df7930396f7c21jljustenEFI_STATUS
12394b1bf81c20d5523554a83f6604df7930396f7c21jljustenInitializeMemoryManagement (
12404b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN USB_UHC_DEV           *UhcDev
12414b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
12424b1bf81c20d5523554a83f6604df7930396f7c21jljusten
12434b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
12444b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Initialize UHCI memory management.
12454b1bf81c20d5523554a83f6604df7930396f7c21jljusten
12464b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  UhcDev           The UCHI device.
12474b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  Pool             Buffer pointer to store the buffer pointer.
12484b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  AllocSize        The size of the pool to be allocated.
12494b1bf81c20d5523554a83f6604df7930396f7c21jljusten
12504b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval EFI_OUT_OF_RESOURCES   Can't allocate memory resources.
12514b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval EFI_SUCCESS            Success.
12524b1bf81c20d5523554a83f6604df7930396f7c21jljusten
12534b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
12544b1bf81c20d5523554a83f6604df7930396f7c21jljustenEFI_STATUS
12554b1bf81c20d5523554a83f6604df7930396f7c21jljustenUhcAllocatePool (
12564b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  USB_UHC_DEV     *UhcDev,
12574b1bf81c20d5523554a83f6604df7930396f7c21jljusten  OUT UINT8           **Pool,
12584b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  UINTN           AllocSize
12594b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
12604b1bf81c20d5523554a83f6604df7930396f7c21jljusten
12614b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
12624b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Alloc Memory In MemoryBlock.
12634b1bf81c20d5523554a83f6604df7930396f7c21jljusten
12644b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  MemoryHeader           The pointer to memory manage header.
12654b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  Pool                   Buffer pointer to store the buffer pointer.
12664b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  NumberOfMemoryUnit     The size of the pool to be allocated.
12674b1bf81c20d5523554a83f6604df7930396f7c21jljusten
12684b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval EFI_OUT_OF_RESOURCES   Can't allocate memory resources.
12694b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval EFI_SUCCESS            Success.
12704b1bf81c20d5523554a83f6604df7930396f7c21jljusten
12714b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
12724b1bf81c20d5523554a83f6604df7930396f7c21jljustenEFI_STATUS
12734b1bf81c20d5523554a83f6604df7930396f7c21jljustenAllocMemInMemoryBlock (
12744b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  MEMORY_MANAGE_HEADER  *MemoryHeader,
12754b1bf81c20d5523554a83f6604df7930396f7c21jljusten  OUT VOID                  **Pool,
12764b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN  UINTN                 NumberOfMemoryUnit
12774b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
12784b1bf81c20d5523554a83f6604df7930396f7c21jljusten
12794b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
12804b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Uhci Free Pool.
12814b1bf81c20d5523554a83f6604df7930396f7c21jljusten
12824b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  UhcDev                 The UHCI device.
12834b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  Pool                   A pointer to store the buffer address.
12844b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  AllocSize              The size of the pool to be freed.
12854b1bf81c20d5523554a83f6604df7930396f7c21jljusten
12864b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
12874b1bf81c20d5523554a83f6604df7930396f7c21jljustenVOID
12884b1bf81c20d5523554a83f6604df7930396f7c21jljustenUhcFreePool (
12894b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN USB_UHC_DEV     *UhcDev,
12904b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN UINT8           *Pool,
12914b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN UINTN           AllocSize
12924b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
12934b1bf81c20d5523554a83f6604df7930396f7c21jljusten
12944b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
12954b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Insert a new memory header into list.
12964b1bf81c20d5523554a83f6604df7930396f7c21jljusten
12974b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  MemoryHeader         A pointer to the memory header list.
12984b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  NewMemoryHeader      A new memory header to be inserted into the list.
12994b1bf81c20d5523554a83f6604df7930396f7c21jljusten
13004b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
13014b1bf81c20d5523554a83f6604df7930396f7c21jljustenVOID
13024b1bf81c20d5523554a83f6604df7930396f7c21jljustenInsertMemoryHeaderToList (
13034b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN MEMORY_MANAGE_HEADER  *MemoryHeader,
13044b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN MEMORY_MANAGE_HEADER  *NewMemoryHeader
13054b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
13064b1bf81c20d5523554a83f6604df7930396f7c21jljusten
13074b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
13084b1bf81c20d5523554a83f6604df7930396f7c21jljusten  Judge the memory block in the memory header is empty or not.
13094b1bf81c20d5523554a83f6604df7930396f7c21jljusten
13104b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  MemoryHeaderPtr   A pointer to the memory header list.
13114b1bf81c20d5523554a83f6604df7930396f7c21jljusten
13124b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @retval Whether the memory block in the memory header is empty or not.
13134b1bf81c20d5523554a83f6604df7930396f7c21jljusten
13144b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
13154b1bf81c20d5523554a83f6604df7930396f7c21jljustenBOOLEAN
13164b1bf81c20d5523554a83f6604df7930396f7c21jljustenIsMemoryBlockEmptied (
13174b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN MEMORY_MANAGE_HEADER  *MemoryHeaderPtr
13184b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
13194b1bf81c20d5523554a83f6604df7930396f7c21jljusten
13204b1bf81c20d5523554a83f6604df7930396f7c21jljusten/**
13214b1bf81c20d5523554a83f6604df7930396f7c21jljusten  remove a memory header from list.
13224b1bf81c20d5523554a83f6604df7930396f7c21jljusten
13234b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  FirstMemoryHeader   A pointer to the memory header list.
13244b1bf81c20d5523554a83f6604df7930396f7c21jljusten  @param  FreeMemoryHeader    A memory header to be removed into the list.
13254b1bf81c20d5523554a83f6604df7930396f7c21jljusten
13264b1bf81c20d5523554a83f6604df7930396f7c21jljusten**/
13274b1bf81c20d5523554a83f6604df7930396f7c21jljustenVOID
13284b1bf81c20d5523554a83f6604df7930396f7c21jljustenDelinkMemoryBlock (
13294b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN MEMORY_MANAGE_HEADER    *FirstMemoryHeader,
13304b1bf81c20d5523554a83f6604df7930396f7c21jljusten  IN MEMORY_MANAGE_HEADER    *FreeMemoryHeader
13314b1bf81c20d5523554a83f6604df7930396f7c21jljusten  );
13324b1bf81c20d5523554a83f6604df7930396f7c21jljusten
13334b1bf81c20d5523554a83f6604df7930396f7c21jljusten#endif
1334