//\r
// Init fields in Qh\r
//\r
- gBS->SetMem (*QhPtrPtr, sizeof (EHCI_QH_ENTITY), 0);\r
+ ZeroMem (*QhPtrPtr, sizeof (EHCI_QH_ENTITY));\r
\r
//\r
// Software field\r
//\r
// Init fields in Qtd\r
//\r
- gBS->SetMem (*QtdPtrPtr, sizeof (EHCI_QTD_ENTITY), 0);\r
+\r
+ ZeroMem (*QtdPtrPtr, sizeof (EHCI_QTD_ENTITY));\r
\r
//\r
// Software field\r
RemainLen = DataLen;\r
ASSERT (QtdHwPtr);\r
\r
+ //\r
+ // Allow buffer address range across 4G.\r
+ // But EFI_USB_MAX_BULK_BUFFER_NUM = 1, so don't allow\r
+ // seperate buffer array.\r
+ //\r
+\r
//\r
// Set BufferPointer0, ExtBufferPointer0 and Offset\r
//\r
}\r
\r
QtdHwPtr->BufferPointer1 = QtdHwPtr->BufferPointer0 + 1;\r
- QtdHwPtr->ExtBufferPointer1 = QtdHwPtr->ExtBufferPointer0;\r
+ QtdHwPtr->ExtBufferPointer1 = (QtdHwPtr->BufferPointer1 == 0) ? (QtdHwPtr->ExtBufferPointer0 + 1) : QtdHwPtr->ExtBufferPointer0;\r
\r
//\r
// Set BufferPointer2 and ExtBufferPointer2\r
}\r
\r
QtdHwPtr->BufferPointer2 = QtdHwPtr->BufferPointer1 + 1;\r
- QtdHwPtr->ExtBufferPointer2 = QtdHwPtr->ExtBufferPointer0;\r
+ QtdHwPtr->ExtBufferPointer2 = (QtdHwPtr->BufferPointer2 == 0) ? (QtdHwPtr->ExtBufferPointer1 + 1) : QtdHwPtr->ExtBufferPointer1;\r
\r
//\r
// Set BufferPointer3 and ExtBufferPointer3\r
}\r
\r
QtdHwPtr->BufferPointer3 = QtdHwPtr->BufferPointer2 + 1;\r
- QtdHwPtr->ExtBufferPointer3 = QtdHwPtr->ExtBufferPointer0;\r
+ QtdHwPtr->ExtBufferPointer3 = (QtdHwPtr->BufferPointer2 == 0) ? (QtdHwPtr->ExtBufferPointer2 + 1) : QtdHwPtr->ExtBufferPointer2;\r
\r
//\r
// Set BufferPointer4 and ExtBufferPointer4\r
}\r
\r
QtdHwPtr->BufferPointer4 = QtdHwPtr->BufferPointer3 + 1;\r
- QtdHwPtr->ExtBufferPointer4 = QtdHwPtr->ExtBufferPointer0;\r
+ QtdHwPtr->ExtBufferPointer4 = (QtdHwPtr->BufferPointer3 == 0) ? (QtdHwPtr->ExtBufferPointer3 + 1) : QtdHwPtr->ExtBufferPointer3;\r
\r
exit:\r
return ;\r
}\r
\r
(*ErrQtdPos)++;\r
- QtdHwPtr = GetQtdNextPointer (QtdHwPtr);\r
- QtdPtr = (EHCI_QTD_ENTITY *) GET_QTD_ENTITY_ADDR (QtdHwPtr);\r
+ QtdPtr = QtdPtr->Next;\r
+ QtdHwPtr = &(QtdPtr->Qtd);\r
\r
}\r
\r
UINT32 TransferResult;\r
UINT8 *ReceiveBuffer;\r
UINT8 *ProcessBuffer;\r
+ EHCI_ASYNC_REQUEST *NextPtr;\r
\r
Status = EFI_SUCCESS;\r
QtdHwPtr = NULL;\r
\r
UpdateAsyncRequestTransfer (AsyncRequestPtr, TransferResult, ErrQtdPos);\r
\r
+ NextPtr = AsyncRequestPtr->Next;\r
+\r
if (EFI_USB_NOERROR == TransferResult) {\r
\r
if (AsyncRequestPtr->CallBackFunc != NULL) {\r
gBS->FreePool (ProcessBuffer);\r
}\r
\r
- AsyncRequestPtr = AsyncRequestPtr->Next;\r
-\r
+ AsyncRequestPtr = NextPtr;\r
}\r
\r
exit:\r