diff options
author | Haojian Zhuang <haojian.zhuang@linaro.org> | 2017-11-10 13:42:37 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-11-10 13:42:37 +0800 |
commit | 84117fa943afe3609e2b26d501c1201387529ea6 (patch) | |
tree | d80d5faaad588c8ccb08e7f3d7201565631ff209 | |
parent | afdc321b862b4279e8faca4e20c99c7981c93897 (diff) | |
parent | ae745fe072ae15320fe4fc4b95cb4fc4d4cc8bc2 (diff) | |
download | OpenPlatformPkg-84117fa943afe3609e2b26d501c1201387529ea6.tar.gz |
Merge pull request #71 from hzhuang1/fix_usb
Drivers/DwUsb3Dxe: hack an interface for usb transmission size
-rw-r--r-- | Drivers/Usb/DwUsb3Dxe/DwUsb3Dxe.c | 41 |
1 files changed, 38 insertions, 3 deletions
diff --git a/Drivers/Usb/DwUsb3Dxe/DwUsb3Dxe.c b/Drivers/Usb/DwUsb3Dxe/DwUsb3Dxe.c index 5ed3dd4..c2fad30 100644 --- a/Drivers/Usb/DwUsb3Dxe/DwUsb3Dxe.c +++ b/Drivers/Usb/DwUsb3Dxe/DwUsb3Dxe.c @@ -88,6 +88,7 @@ STATIC usb_setup_pkt_t *gEndPoint0SetupPacket; #define USB3_STATUS_BUF_SIZE 512 STATIC UINT8 *gEndPoint0StatusBuf; STATIC USB_DEVICE_RX_CALLBACK mDataReceivedCallback; +STATIC UINTN mDataBufferSize; /* UINT8 ep0_status_buf[USB3_STATUS_BUF_SIZE]; */ @@ -1755,7 +1756,18 @@ DwUsb3DoSetConfig ( ASSERT (gRxBuf != NULL); WriteBackDataCacheRange (gRxBuf, DATA_SIZE); req->bufdma = (UINT64 *)gRxBuf; - req->length = DATA_SIZE; + if (mDataBufferSize == 0) { + req->length = CMD_SIZE; + } else if (mDataBufferSize > DATA_SIZE) { + req->length = DATA_SIZE; + mDataBufferSize = mDataBufferSize - DATA_SIZE; + } else if (mDataBufferSize > CMD_SIZE) { + req->length = CMD_SIZE; + mDataBufferSize = mDataBufferSize - CMD_SIZE; + } else { + req->length = mDataBufferSize; + mDataBufferSize = 0; + } DwUsb3EndPointXStartTransfer (pcd, ep); } } else { @@ -2115,7 +2127,18 @@ DwUsb3EndPointcompleteRequest ( ASSERT (gRxBuf != NULL); WriteBackDataCacheRange (gRxBuf, DATA_SIZE); req->bufdma = (UINT64 *)gRxBuf; - req->length = DATA_SIZE; + if (mDataBufferSize == 0) { + req->length = CMD_SIZE; + } else if (mDataBufferSize > DATA_SIZE) { + req->length = DATA_SIZE; + mDataBufferSize = mDataBufferSize - DATA_SIZE; + } else if (mDataBufferSize > CMD_SIZE) { + req->length = CMD_SIZE; + mDataBufferSize = mDataBufferSize - CMD_SIZE; + } else { + req->length = mDataBufferSize; + mDataBufferSize = 0; + } DwUsb3EndPointXStartTransfer (pcd, ep); } } @@ -2301,9 +2324,21 @@ DwUsb3Send ( return EFI_SUCCESS; } +EFI_STATUS +DwUsb3Request ( + IN UINTN BufferSize + ) +{ + if (BufferSize) { + mDataBufferSize = BufferSize; + } + return EFI_SUCCESS; +} + USB_DEVICE_PROTOCOL mUsbDevice = { DwUsb3Start, - DwUsb3Send + DwUsb3Send, + DwUsb3Request }; EFI_STATUS |