summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorVijayavardhan Vennapusa <vvreddy@codeaurora.org>2017-10-10 11:50:18 +0530
committerVijayavardhan Vennapusa <vvreddy@codeaurora.org>2017-10-10 11:51:54 +0530
commite2ed5d95d208ff1febae9cc817858ca18ad691d2 (patch)
tree17acbedb4624bcddf8a084a891559d7dfdc13c0c /drivers
parent8aedd7084222d4cce3acdfe3c71820c674503bee (diff)
USB: rndis: Honor dl_max_packet_size value sent by host
This change starts using dl_max_packet_size value sent by host as part of USB RNDIS init message communication. Using default dl_max_packet_size value results into low throughput with more data loss on host side as host side RNDIS can't support de-aggregation (applicable for Linux Host RNDIS driver) or it ignores received more data then host side RNDIS can handle. To use fine tune dl_max_packet_size for better throughput, driver selects minimum value between host supported dl_max_packet_size and default size (i.e. 9216 bytes as RNDIS IN aggregation size). Change-Id: I00c81bc905a032867c537536b01bf32584c37e63 Signed-off-by: Vijayavardhan Vennapusa <vvreddy@codeaurora.org>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/usb/gadget/function/f_gsi.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/usb/gadget/function/f_gsi.c b/drivers/usb/gadget/function/f_gsi.c
index 19fe6c8cb25a..49f29fcb2aff 100644
--- a/drivers/usb/gadget/function/f_gsi.c
+++ b/drivers/usb/gadget/function/f_gsi.c
@@ -1577,6 +1577,7 @@ static void gsi_rndis_command_complete(struct usb_ep *ep,
struct usb_request *req)
{
struct f_gsi *rndis = req->context;
+ rndis_init_msg_type *buf;
int status;
if (req->status != 0) {
@@ -1589,6 +1590,16 @@ static void gsi_rndis_command_complete(struct usb_ep *ep,
if (status < 0)
log_event_err("RNDIS command error %d, %d/%d",
status, req->actual, req->length);
+
+ buf = (rndis_init_msg_type *)req->buf;
+ if (buf->MessageType == RNDIS_MSG_INIT) {
+ rndis->d_port.in_aggr_size = min_t(u32,
+ rndis->d_port.in_aggr_size,
+ rndis->params->dl_max_xfer_size);
+ log_event_dbg("RNDIS host dl_aggr_size:%d in_aggr_size:%d\n",
+ rndis->params->dl_max_xfer_size,
+ rndis->d_port.in_aggr_size);
+ }
}
static void