}\r
}\r
\r
-/**\r
- Get Current Frame Number.\r
-\r
- @param UhcDev The UHCI device.\r
- @param FrameNumberAddr The address of frame list register.\r
-\r
- @retval The content of the frame list register.\r
\r
-**/\r
-UINT16\r
-GetCurrentFrameNumber (\r
- IN USB_UHC_DEV *UhcDev,\r
- IN UINT32 FrameNumberAddr\r
- )\r
-{\r
- //\r
- // Gets value in the USB frame number register.\r
- //\r
- return (UINT16) (USBReadPortW (UhcDev, FrameNumberAddr) & 0x03FF);\r
-}\r
\r
/**\r
Set Frame List Base Address.\r
PtrQH->QueueHead.QHHorizontalPtr = (UINT32) (UINTN) PtrNext >> 4;\r
}\r
\r
-/**\r
- Get the horizontal link pointer in QH.\r
-\r
- @param PtrQH Place to store QH_STRUCT pointer.\r
\r
- @retval The horizontal link pointer in QH.\r
-\r
-**/\r
-VOID *\r
-GetQHHorizontalLinkPtr (\r
- IN QH_STRUCT *PtrQH\r
- )\r
-{\r
- //\r
- // Restore the 28bit address to 32bit address\r
- // (take 32bit address as an example)\r
- //\r
- return (VOID *) (UINTN) ((PtrQH->QueueHead.QHHorizontalPtr) << 4);\r
-}\r
\r
/**\r
Set a QH or TD horizontally to be connected with a specific QH.\r
PtrQH->QueueHead.QHVerticalTerminate = IsValid ? 0 : 1;\r
}\r
\r
-/**\r
- Get the vertical validor bit in QH.\r
\r
- @param PtrQH Place to store QH_STRUCT pointer.\r
-\r
- @retval The vertical linker is valid or not.\r
-\r
-**/\r
-BOOLEAN\r
-GetQHHorizontalValidorInvalid (\r
- IN QH_STRUCT *PtrQH\r
- )\r
-{\r
- //\r
- // If TRUE, meaning the Horizontal Link Pointer field is valid,\r
- // else, the field is invalid.\r
- //\r
- return (BOOLEAN) (!(PtrQH->QueueHead.QHHorizontalTerminate));\r
-}\r
\r
/**\r
Allocate TD or QH Struct.\r
return (VOID *) (UINTN) ((PtrTDStruct->TDData.TDLinkPtr) << 4);\r
}\r
\r
-/**\r
- Get the information about whether the Link Pointer field pointing to\r
- a QH or a TD.\r
\r
- @param PtrTDStruct Place to store TD_STRUCT pointer.\r
-\r
- @retval whether the Link Pointer field pointing to a QH or a TD.\r
-\r
-**/\r
-BOOLEAN\r
-IsTDLinkPtrQHOrTD (\r
- IN TD_STRUCT *PtrTDStruct\r
- )\r
-{\r
- //\r
- // Get the information about whether the Link Pointer field pointing to\r
- // a QH or a TD.\r
- //\r
- return (BOOLEAN) (PtrTDStruct->TDData.TDLinkPtrQSelect);\r
-}\r
\r
/**\r
Enable/Disable short packet detection mechanism.\r
}\r
}\r
\r
-/**\r
- Judge the memory block in the memory header is empty or not.\r
-\r
- @param MemoryHeaderPtr A pointer to the memory header list.\r
-\r
- @retval Whether the memory block in the memory header is empty or not.\r
-\r
-**/\r
-BOOLEAN\r
-IsMemoryBlockEmptied (\r
- IN MEMORY_MANAGE_HEADER *MemoryHeaderPtr\r
- )\r
-{\r
- UINTN Index;\r
-\r
- for (Index = 0; Index < MemoryHeaderPtr->BitArraySizeInBytes; Index++) {\r
- if (MemoryHeaderPtr->BitArrayPtr[Index] != 0) {\r
- return FALSE;\r
- }\r
- }\r
-\r
- return TRUE;\r
-}\r
-\r
-/**\r
- remove a memory header from list.\r
\r
- @param FirstMemoryHeader A pointer to the memory header list.\r
- @param FreeMemoryHeader A memory header to be removed into the list.\r
\r
-**/\r
-VOID\r
-DelinkMemoryBlock (\r
- IN MEMORY_MANAGE_HEADER *FirstMemoryHeader,\r
- IN MEMORY_MANAGE_HEADER *FreeMemoryHeader\r
- )\r
-{\r
- MEMORY_MANAGE_HEADER *TempHeaderPtr;\r
\r
- if ((FirstMemoryHeader == NULL) || (FreeMemoryHeader == NULL)) {\r
- return ;\r
- }\r
-\r
- for (TempHeaderPtr = FirstMemoryHeader; TempHeaderPtr != NULL; TempHeaderPtr = TempHeaderPtr->Next) {\r
-\r
- if (TempHeaderPtr->Next == FreeMemoryHeader) {\r
- //\r
- // Link the before and after\r
- //\r
- TempHeaderPtr->Next = FreeMemoryHeader->Next;\r
- break;\r
- }\r
- }\r
-}\r
\r
/**\r
Map address of request structure buffer.\r