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