//\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
Value = NULL;\r
\r
if (!HwQtdPtr->AltNextQtdTerminate) {\r
- Value = (EHCI_QTD_HW *) (UINTN) GET_0B_TO_31B (HwQtdPtr->AltNextQtdPointer << 5);\r
+ Value = (EHCI_QTD_HW *) GET_0B_TO_31B (HwQtdPtr->AltNextQtdPointer << 5);\r
}\r
\r
return Value;\r
Value = NULL;\r
\r
if (!HwQtdPtr->NextQtdTerminate) {\r
- Value = (EHCI_QTD_HW *) (UINTN) GET_0B_TO_31B (HwQtdPtr->NextQtdPointer << 5);\r
+ Value = (EHCI_QTD_HW *) GET_0B_TO_31B (HwQtdPtr->NextQtdPointer << 5);\r
}\r
\r
return Value;\r
//\r
// Not Null FrameList\r
//\r
- FindQhHwPtr = (EHCI_QH_HW *) (UINTN) GET_0B_TO_31B (FrameEntryPtr->LinkPointer << 5);\r
+ FindQhHwPtr = (EHCI_QH_HW *) GET_0B_TO_31B (FrameEntryPtr->LinkPointer << 5);\r
FindQhPtr = (EHCI_QH_ENTITY *) GET_QH_ENTITY_ADDR (FindQhHwPtr);\r
//\r
// FindQh is Left/Right to Qh\r
//\r
if (NULL != FindQhPtr->Next) {\r
FindQhPtr->Next->Prev = QhPtr;\r
- QhPtr->Qh.QhHorizontalPointer = (UINT32) GET_0B_TO_31B (((UINTN) &(FindQhPtr->Next->Qh)) >> 5);\r
+ QhPtr->Qh.QhHorizontalPointer = (UINT32) GET_0B_TO_31B (&(FindQhPtr->Next->Qh) >> 5);\r
QhPtr->Qh.SelectType = QH_SELECT_TYPE;\r
QhPtr->Qh.QhTerminate = FALSE;\r
}\r
\r
- FindQhPtr->Qh.QhHorizontalPointer = (UINT32) GET_0B_TO_31B (((UINTN)&(QhPtr->Qh)) >> 5);\r
+ FindQhPtr->Qh.QhHorizontalPointer = (UINT32) GET_0B_TO_31B (&(QhPtr->Qh) >> 5);\r
FindQhPtr->Qh.SelectType = QH_SELECT_TYPE;\r
FindQhPtr->Qh.QhTerminate = FALSE;\r
\r
//\r
// Qh is the First one in Frame[0] List\r
//\r
- FrameEntryPtr->LinkPointer = (UINT32) GET_0B_TO_31B (((UINTN) &(QhPtr->Qh)) >> 5);\r
+ FrameEntryPtr->LinkPointer = (UINT32) GET_0B_TO_31B (&(QhPtr->Qh) >> 5);\r
FrameEntryPtr->SelectType = QH_SELECT_TYPE;\r
FrameEntryPtr->LinkTerminate = FALSE;\r
} else {\r
// Qh is not the First one in Frame[0] List\r
//\r
FindQhPtr->Prev->Next = QhPtr;\r
- FindQhPtr->Prev->Qh.QhHorizontalPointer = (UINT32) GET_0B_TO_31B (((UINTN) &(QhPtr->Qh)) >> 5);\r
+ FindQhPtr->Prev->Qh.QhHorizontalPointer = (UINT32) GET_0B_TO_31B (&(QhPtr->Qh) >> 5);\r
FindQhPtr->Prev->Qh.SelectType = QH_SELECT_TYPE;\r
FindQhPtr->Prev->Qh.QhTerminate = FALSE;\r
}\r
\r
- QhPtr->Qh.QhHorizontalPointer = (UINT32) GET_0B_TO_31B (((UINTN) &(FindQhPtr->Qh)) >> 5);\r
+ QhPtr->Qh.QhHorizontalPointer = (UINT32) GET_0B_TO_31B (&(FindQhPtr->Qh) >> 5);\r
QhPtr->Qh.SelectType = QH_SELECT_TYPE;\r
QhPtr->Qh.QhTerminate = FALSE;\r
\r
//\r
// Link Qh after FindQh, Qh is the Last one\r
//\r
- FindQhPtr->Qh.QhHorizontalPointer = (UINT32) GET_0B_TO_31B (((UINTN) &(QhPtr->Qh)) >> 5);\r
+ FindQhPtr->Qh.QhHorizontalPointer = (UINT32) GET_0B_TO_31B (&(QhPtr->Qh) >> 5);\r
FindQhPtr->Prev->Qh.SelectType = QH_SELECT_TYPE;\r
FindQhPtr->Qh.QhTerminate = FALSE;\r
\r
//\r
// Null FrameList\r
//\r
- FrameEntryPtr->LinkPointer = (UINT32) GET_0B_TO_31B (((UINTN) &(QhPtr->Qh)) >> 5);\r
+ FrameEntryPtr->LinkPointer = (UINT32) GET_0B_TO_31B (&(QhPtr->Qh) >> 5);\r
FrameEntryPtr->SelectType = QH_SELECT_TYPE;\r
FrameEntryPtr->LinkTerminate = FALSE;\r
}\r
FrameIndex += QhPtr->Interval;\r
while (FrameIndex < HcDev->PeriodicFrameListLength) {\r
FrameEntryPtr = (FRAME_LIST_ENTRY *) (FrameEntryPtr + QhPtr->Interval);\r
- FrameEntryPtr->LinkPointer = (UINT32) GET_0B_TO_31B (((UINTN) &(QhPtr->Qh)) >> 5);\r
+ FrameEntryPtr->LinkPointer = (UINT32) GET_0B_TO_31B (&(QhPtr->Qh) >> 5);\r
FrameEntryPtr->SelectType = QH_SELECT_TYPE;\r
FrameEntryPtr->LinkTerminate = FALSE;\r
FrameIndex += QhPtr->Interval;\r
while (FrameIndex < HcDev->PeriodicFrameListLength) {\r
FrameEntryPtr = (FRAME_LIST_ENTRY *) (FrameEntryPtr + QhPtr->Interval);\r
if ((FrameIndex % QhPtr->Prev->Interval) != 0) {\r
- FrameEntryPtr->LinkPointer = (UINT32) GET_0B_TO_31B (((UINTN) &(QhPtr->Qh)) >> 5);\r
+ FrameEntryPtr->LinkPointer = (UINT32) GET_0B_TO_31B (&(QhPtr->Qh) >> 5);\r
FrameEntryPtr->SelectType = QH_SELECT_TYPE;\r
FrameEntryPtr->LinkTerminate = FALSE;\r
}\r
//\r
// Not Null FrameList\r
//\r
- FindQhHwPtr = (EHCI_QH_HW *) (UINTN) GET_0B_TO_31B (FrameEntryPtr->LinkPointer << 5);\r
+ FindQhHwPtr = (EHCI_QH_HW *) GET_0B_TO_31B (FrameEntryPtr->LinkPointer << 5);\r
FindQhPtr = (EHCI_QH_ENTITY *) GET_QH_ENTITY_ADDR (FindQhHwPtr);\r
//\r
// FindQh is Last Qh in the Asynchronous List, Link Qh after FindQh\r
FindQhPtr = FindQhPtr->Next;\r
}\r
\r
- FindQhPtr->Qh.QhHorizontalPointer = (UINT32) GET_0B_TO_31B (((UINTN) &(QhPtr->Qh)) >> 5);\r
+ FindQhPtr->Qh.QhHorizontalPointer = (UINT32) GET_0B_TO_31B (&(QhPtr->Qh) >> 5);\r
FindQhPtr->Qh.SelectType = QH_SELECT_TYPE;\r
FindQhPtr->Qh.QhTerminate = FALSE;\r
\r
//\r
// Null FrameList\r
//\r
- FrameEntryPtr->LinkPointer = (UINT32) GET_0B_TO_31B (((UINTN) &(QhPtr->Qh)) >> 5);\r
+ FrameEntryPtr->LinkPointer = (UINT32) GET_0B_TO_31B (&(QhPtr->Qh) >> 5);\r
FrameEntryPtr->SelectType = QH_SELECT_TYPE;\r
FrameEntryPtr->LinkTerminate = FALSE;\r
}\r
}\r
} else {\r
while (FrameIndex < HcDev->PeriodicFrameListLength) {\r
- FrameEntryPtr->LinkPointer = (UINT32) GET_0B_TO_31B (((UINTN) &(QhPtr->Next->Qh)) >> 5);\r
+ FrameEntryPtr->LinkPointer = (UINT32) GET_0B_TO_31B (&(QhPtr->Next->Qh) >> 5);\r
FrameEntryPtr->SelectType = QH_SELECT_TYPE;\r
FrameEntryPtr->LinkTerminate = FALSE;\r
FrameEntryPtr += Interval;\r
QhPtr->Prev->Qh.SelectType = 0;\r
QhPtr->Prev->Qh.QhTerminate = TRUE;\r
} else {\r
- QhPtr->Prev->Qh.QhHorizontalPointer = (UINT32) GET_0B_TO_31B (((UINTN) &(QhPtr->Next->Qh)) >> 5);\r
+ QhPtr->Prev->Qh.QhHorizontalPointer = (UINT32) GET_0B_TO_31B (&(QhPtr->Next->Qh) >> 5);\r
QhPtr->Prev->Qh.SelectType = QH_SELECT_TYPE;\r
QhPtr->Prev->Qh.QhTerminate = FALSE;\r
}\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
}\r
\r
QtdHwPtr = &(AsyncRequestPtr->QhPtr->FirstQtdPtr->Qtd);\r
- ReceiveBuffer = (UINT8 *) (UINTN) GET_0B_TO_31B ((QtdHwPtr->BufferPointer0 << 12) | AsyncRequestPtr->QhPtr->FirstQtdPtr->StaticCurrentOffset);\r
+ ReceiveBuffer = (UINT8 *) GET_0B_TO_31B ((QtdHwPtr->BufferPointer0 << 12) | AsyncRequestPtr->QhPtr->FirstQtdPtr->StaticCurrentOffset);\r
CopyMem (\r
ProcessBuffer,\r
ReceiveBuffer,\r