aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHaojian Zhuang <haojian.zhuang@linaro.org>2017-11-10 13:42:37 +0800
committerGitHub <noreply@github.com>2017-11-10 13:42:37 +0800
commit84117fa943afe3609e2b26d501c1201387529ea6 (patch)
treed80d5faaad588c8ccb08e7f3d7201565631ff209
parentafdc321b862b4279e8faca4e20c99c7981c93897 (diff)
parentae745fe072ae15320fe4fc4b95cb4fc4d4cc8bc2 (diff)
downloadOpenPlatformPkg-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.c41
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