Loading drivers/usb/gadget/f_mbim.c +17 −1 Original line number Original line Diff line number Diff line Loading @@ -177,6 +177,9 @@ static inline unsigned mbim_bitrate(struct usb_gadget *g) #define MBIM_NTB_OUT_SIZE_IPA (0x2000) #define MBIM_NTB_OUT_SIZE_IPA (0x2000) #define MBIM_FORMATS_SUPPORTED USB_CDC_NCM_NTB16_SUPPORTED #define MBIM_FORMATS_SUPPORTED USB_CDC_NCM_NTB16_SUPPORTED static int mbim_ntb_out_size_sys2bam; module_param(mbim_ntb_out_size_sys2bam, int, S_IRUGO | S_IWUSR); MODULE_PARM_DESC(mbim_ntb_out_size_sys2bam, "MBIM OUT SIZE for SYS2BAM Mode"); static struct usb_cdc_ncm_ntb_parameters mbim_ntb_parameters = { static struct usb_cdc_ncm_ntb_parameters mbim_ntb_parameters = { .wLength = sizeof mbim_ntb_parameters, .wLength = sizeof mbim_ntb_parameters, Loading Loading @@ -1727,6 +1730,7 @@ int mbim_bind_config(struct usb_configuration *c, unsigned portno, { { struct f_mbim *mbim = NULL; struct f_mbim *mbim = NULL; int status = 0; int status = 0; int mbim_out_max_size; pr_info("port number %u", portno); pr_info("port number %u", portno); Loading Loading @@ -1793,9 +1797,21 @@ int mbim_bind_config(struct usb_configuration *c, unsigned portno, /* For IPA this is proven to give maximum throughput */ /* For IPA this is proven to give maximum throughput */ mbim_ntb_parameters.dwNtbInMaxSize = mbim_ntb_parameters.dwNtbInMaxSize = cpu_to_le32(NTB_DEFAULT_IN_SIZE_IPA); cpu_to_le32(NTB_DEFAULT_IN_SIZE_IPA); /* * If mbim_ntb_out_size_sys2bam is set, use that value * otherwise use default value. */ if (mbim_ntb_out_size_sys2bam) mbim_out_max_size = mbim_ntb_out_size_sys2bam; else mbim_out_max_size = MBIM_NTB_OUT_SIZE_IPA; mbim_ntb_parameters.dwNtbOutMaxSize = mbim_ntb_parameters.dwNtbOutMaxSize = cpu_to_le32(MBIM_NTB_OUT_SIZE_IPA); cpu_to_le32(mbim_out_max_size); /* update rx buffer size to be used by usb rx request buffer */ mbim->bam_port.rx_buffer_size = mbim_out_max_size; mbim_ntb_parameters.wNdpInDivisor = 1; mbim_ntb_parameters.wNdpInDivisor = 1; pr_debug("MBIM: dwNtbOutMaxSize:%d\n", mbim_out_max_size); } } INIT_LIST_HEAD(&mbim->cpkt_req_q); INIT_LIST_HEAD(&mbim->cpkt_req_q); Loading drivers/usb/gadget/u_bam_data.c +8 −4 Original line number Original line Diff line number Diff line Loading @@ -95,6 +95,7 @@ struct bam_data_ch_info { enum usb_bam_pipe_type src_pipe_type; enum usb_bam_pipe_type src_pipe_type; enum usb_bam_pipe_type dst_pipe_type; enum usb_bam_pipe_type dst_pipe_type; unsigned int pending_with_bam; unsigned int pending_with_bam; int rx_buffer_size; unsigned int rx_flow_control_disable; unsigned int rx_flow_control_disable; unsigned int rx_flow_control_enable; unsigned int rx_flow_control_enable; Loading Loading @@ -232,14 +233,14 @@ static void bam_data_start_rx(struct bam_data_port *port) break; break; req = list_first_entry(&d->rx_idle, struct usb_request, list); req = list_first_entry(&d->rx_idle, struct usb_request, list); skb = alloc_skb(bam_mux_rx_req_size + BAM_MUX_HDR, GFP_ATOMIC); skb = alloc_skb(d->rx_buffer_size + BAM_MUX_HDR, GFP_ATOMIC); if (!skb) if (!skb) break; break; skb_reserve(skb, BAM_MUX_HDR); skb_reserve(skb, BAM_MUX_HDR); list_del(&req->list); list_del(&req->list); req->buf = skb->data; req->buf = skb->data; req->length = bam_mux_rx_req_size; req->length = d->rx_buffer_size; req->context = skb; req->context = skb; spin_unlock_irqrestore(&port->port_lock_ul, flags); spin_unlock_irqrestore(&port->port_lock_ul, flags); ret = usb_ep_queue(ep, req, GFP_ATOMIC); ret = usb_ep_queue(ep, req, GFP_ATOMIC); Loading Loading @@ -313,7 +314,7 @@ static void bam_data_epout_complete(struct usb_ep *ep, struct usb_request *req) } } spin_unlock(&port->port_lock_ul); spin_unlock(&port->port_lock_ul); skb = alloc_skb(bam_mux_rx_req_size + BAM_MUX_HDR, GFP_ATOMIC); skb = alloc_skb(d->rx_buffer_size + BAM_MUX_HDR, GFP_ATOMIC); if (!skb) { if (!skb) { list_add_tail(&req->list, &d->rx_idle); list_add_tail(&req->list, &d->rx_idle); return; return; Loading @@ -321,7 +322,7 @@ static void bam_data_epout_complete(struct usb_ep *ep, struct usb_request *req) skb_reserve(skb, BAM_MUX_HDR); skb_reserve(skb, BAM_MUX_HDR); req->buf = skb->data; req->buf = skb->data; req->length = bam_mux_rx_req_size; req->length = d->rx_buffer_size; req->context = skb; req->context = skb; status = usb_ep_queue(ep, req, GFP_ATOMIC); status = usb_ep_queue(ep, req, GFP_ATOMIC); Loading Loading @@ -1054,7 +1055,10 @@ int bam_data_connect(struct data_port *gr, u8 port_num, d->trans = trans; d->trans = trans; d->func_type = func; d->func_type = func; d->rx_buffer_size = (gr->rx_buffer_size ? gr->rx_buffer_size : bam_mux_rx_req_size); pr_debug("%s(): rx_buffer_size:%d\n", __func__, d->rx_buffer_size); if (trans == USB_GADGET_XPORT_BAM2BAM_IPA) { if (trans == USB_GADGET_XPORT_BAM2BAM_IPA) { d->ipa_params.src_pipe = &(d->src_pipe_idx); d->ipa_params.src_pipe = &(d->src_pipe_idx); d->ipa_params.dst_pipe = &(d->dst_pipe_idx); d->ipa_params.dst_pipe = &(d->dst_pipe_idx); Loading drivers/usb/gadget/u_bam_data.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -25,6 +25,7 @@ struct data_port { struct usb_composite_dev *cdev; struct usb_composite_dev *cdev; struct usb_function *func; struct usb_function *func; struct usb_ep *in; struct usb_ep *in; int rx_buffer_size; struct usb_ep *out; struct usb_ep *out; int ipa_consumer_ep; int ipa_consumer_ep; int ipa_producer_ep; int ipa_producer_ep; Loading Loading
drivers/usb/gadget/f_mbim.c +17 −1 Original line number Original line Diff line number Diff line Loading @@ -177,6 +177,9 @@ static inline unsigned mbim_bitrate(struct usb_gadget *g) #define MBIM_NTB_OUT_SIZE_IPA (0x2000) #define MBIM_NTB_OUT_SIZE_IPA (0x2000) #define MBIM_FORMATS_SUPPORTED USB_CDC_NCM_NTB16_SUPPORTED #define MBIM_FORMATS_SUPPORTED USB_CDC_NCM_NTB16_SUPPORTED static int mbim_ntb_out_size_sys2bam; module_param(mbim_ntb_out_size_sys2bam, int, S_IRUGO | S_IWUSR); MODULE_PARM_DESC(mbim_ntb_out_size_sys2bam, "MBIM OUT SIZE for SYS2BAM Mode"); static struct usb_cdc_ncm_ntb_parameters mbim_ntb_parameters = { static struct usb_cdc_ncm_ntb_parameters mbim_ntb_parameters = { .wLength = sizeof mbim_ntb_parameters, .wLength = sizeof mbim_ntb_parameters, Loading Loading @@ -1727,6 +1730,7 @@ int mbim_bind_config(struct usb_configuration *c, unsigned portno, { { struct f_mbim *mbim = NULL; struct f_mbim *mbim = NULL; int status = 0; int status = 0; int mbim_out_max_size; pr_info("port number %u", portno); pr_info("port number %u", portno); Loading Loading @@ -1793,9 +1797,21 @@ int mbim_bind_config(struct usb_configuration *c, unsigned portno, /* For IPA this is proven to give maximum throughput */ /* For IPA this is proven to give maximum throughput */ mbim_ntb_parameters.dwNtbInMaxSize = mbim_ntb_parameters.dwNtbInMaxSize = cpu_to_le32(NTB_DEFAULT_IN_SIZE_IPA); cpu_to_le32(NTB_DEFAULT_IN_SIZE_IPA); /* * If mbim_ntb_out_size_sys2bam is set, use that value * otherwise use default value. */ if (mbim_ntb_out_size_sys2bam) mbim_out_max_size = mbim_ntb_out_size_sys2bam; else mbim_out_max_size = MBIM_NTB_OUT_SIZE_IPA; mbim_ntb_parameters.dwNtbOutMaxSize = mbim_ntb_parameters.dwNtbOutMaxSize = cpu_to_le32(MBIM_NTB_OUT_SIZE_IPA); cpu_to_le32(mbim_out_max_size); /* update rx buffer size to be used by usb rx request buffer */ mbim->bam_port.rx_buffer_size = mbim_out_max_size; mbim_ntb_parameters.wNdpInDivisor = 1; mbim_ntb_parameters.wNdpInDivisor = 1; pr_debug("MBIM: dwNtbOutMaxSize:%d\n", mbim_out_max_size); } } INIT_LIST_HEAD(&mbim->cpkt_req_q); INIT_LIST_HEAD(&mbim->cpkt_req_q); Loading
drivers/usb/gadget/u_bam_data.c +8 −4 Original line number Original line Diff line number Diff line Loading @@ -95,6 +95,7 @@ struct bam_data_ch_info { enum usb_bam_pipe_type src_pipe_type; enum usb_bam_pipe_type src_pipe_type; enum usb_bam_pipe_type dst_pipe_type; enum usb_bam_pipe_type dst_pipe_type; unsigned int pending_with_bam; unsigned int pending_with_bam; int rx_buffer_size; unsigned int rx_flow_control_disable; unsigned int rx_flow_control_disable; unsigned int rx_flow_control_enable; unsigned int rx_flow_control_enable; Loading Loading @@ -232,14 +233,14 @@ static void bam_data_start_rx(struct bam_data_port *port) break; break; req = list_first_entry(&d->rx_idle, struct usb_request, list); req = list_first_entry(&d->rx_idle, struct usb_request, list); skb = alloc_skb(bam_mux_rx_req_size + BAM_MUX_HDR, GFP_ATOMIC); skb = alloc_skb(d->rx_buffer_size + BAM_MUX_HDR, GFP_ATOMIC); if (!skb) if (!skb) break; break; skb_reserve(skb, BAM_MUX_HDR); skb_reserve(skb, BAM_MUX_HDR); list_del(&req->list); list_del(&req->list); req->buf = skb->data; req->buf = skb->data; req->length = bam_mux_rx_req_size; req->length = d->rx_buffer_size; req->context = skb; req->context = skb; spin_unlock_irqrestore(&port->port_lock_ul, flags); spin_unlock_irqrestore(&port->port_lock_ul, flags); ret = usb_ep_queue(ep, req, GFP_ATOMIC); ret = usb_ep_queue(ep, req, GFP_ATOMIC); Loading Loading @@ -313,7 +314,7 @@ static void bam_data_epout_complete(struct usb_ep *ep, struct usb_request *req) } } spin_unlock(&port->port_lock_ul); spin_unlock(&port->port_lock_ul); skb = alloc_skb(bam_mux_rx_req_size + BAM_MUX_HDR, GFP_ATOMIC); skb = alloc_skb(d->rx_buffer_size + BAM_MUX_HDR, GFP_ATOMIC); if (!skb) { if (!skb) { list_add_tail(&req->list, &d->rx_idle); list_add_tail(&req->list, &d->rx_idle); return; return; Loading @@ -321,7 +322,7 @@ static void bam_data_epout_complete(struct usb_ep *ep, struct usb_request *req) skb_reserve(skb, BAM_MUX_HDR); skb_reserve(skb, BAM_MUX_HDR); req->buf = skb->data; req->buf = skb->data; req->length = bam_mux_rx_req_size; req->length = d->rx_buffer_size; req->context = skb; req->context = skb; status = usb_ep_queue(ep, req, GFP_ATOMIC); status = usb_ep_queue(ep, req, GFP_ATOMIC); Loading Loading @@ -1054,7 +1055,10 @@ int bam_data_connect(struct data_port *gr, u8 port_num, d->trans = trans; d->trans = trans; d->func_type = func; d->func_type = func; d->rx_buffer_size = (gr->rx_buffer_size ? gr->rx_buffer_size : bam_mux_rx_req_size); pr_debug("%s(): rx_buffer_size:%d\n", __func__, d->rx_buffer_size); if (trans == USB_GADGET_XPORT_BAM2BAM_IPA) { if (trans == USB_GADGET_XPORT_BAM2BAM_IPA) { d->ipa_params.src_pipe = &(d->src_pipe_idx); d->ipa_params.src_pipe = &(d->src_pipe_idx); d->ipa_params.dst_pipe = &(d->dst_pipe_idx); d->ipa_params.dst_pipe = &(d->dst_pipe_idx); Loading
drivers/usb/gadget/u_bam_data.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -25,6 +25,7 @@ struct data_port { struct usb_composite_dev *cdev; struct usb_composite_dev *cdev; struct usb_function *func; struct usb_function *func; struct usb_ep *in; struct usb_ep *in; int rx_buffer_size; struct usb_ep *out; struct usb_ep *out; int ipa_consumer_ep; int ipa_consumer_ep; int ipa_producer_ep; int ipa_producer_ep; Loading