- //\r
- // Read remaining data by executing one or more usb debug transfer transactions at usb debug port hw.\r
- //\r
- while (Total < NumberOfBytes) {\r
- if (Timeout != 0) {\r
- if (TimerRound == 0) {\r
- if (IsTimerTimeout (UsbDebugPortHandle, Begin, TimeoutTicker)) {\r
- //\r
- // If time out occurs.\r
- //\r
- return 0;\r
- }\r
- } else {\r
- if (IsTimerTimeout (UsbDebugPortHandle, Begin, DivU64x32 (UsbDebugPortHandle->TimerCycle, 2))) {\r
- TimerRound --;\r
- }\r
- }\r
- }\r
- Remaining = NumberOfBytes - Total;\r
- if (Remaining >= USB3_DEBUG_PORT_MAX_PACKET_SIZE) {\r
- Received = USB3_DEBUG_PORT_MAX_PACKET_SIZE;\r
- Status = XhcDataTransfer (UsbDebugPortHandle, EfiUsbDataIn, Buffer + Total, &Received, DATA_TRANSFER_READ_TIMEOUT);\r
- } else {\r
- Received = USB3_DEBUG_PORT_MAX_PACKET_SIZE;\r
- Status = XhcDataTransfer (UsbDebugPortHandle, EfiUsbDataIn, &UsbDebugPortHandle->Data[0], &Received, DATA_TRANSFER_READ_TIMEOUT);\r
- UsbDebugPortHandle->DataCount = (UINT8) Received;\r
-\r
- if (Remaining <= Received) {\r
- //\r
- // The data received are more than required\r
- //\r
- Length = (UINT8)Remaining;\r
- } else {\r
- //\r
- // The data received are less than the remaining bytes\r
- //\r
- Length = (UINT8)Received;\r
- }\r