Loading drivers/platform/msm/usb_bam.c +1 −2 Original line number Diff line number Diff line Loading @@ -1529,11 +1529,10 @@ static int cons_request_resource(enum usb_ctrl cur_bam) log_event(1, "%s: Request %s_CONS resource\n", __func__, bam_enable_strings[cur_bam]); spin_lock(&usb_bam_lock); spin_lock(&usb_bam_ipa_handshake_info_lock); info[cur_bam].cur_cons_state = IPA_RM_RESOURCE_GRANTED; spin_lock(&usb_bam_lock); switch (info[cur_bam].cur_bam_mode) { case USB_BAM_DEVICE: if (ctx.pipes_enabled_per_bam[cur_bam] && Loading drivers/usb/gadget/function/f_mbim.c +24 −23 Original line number Diff line number Diff line Loading @@ -1679,10 +1679,12 @@ int mbim_bind_config(struct usb_configuration *c, unsigned portno, mbim->function.resume = mbim_resume; mbim->xport = str_to_xport(xport_name); /* Only BAM2BAM_IPA supported */ if (mbim->xport != USB_GADGET_XPORT_BAM2BAM_IPA) { /* Use BAM2BAM by default if not IPA */ mbim->xport = USB_GADGET_XPORT_BAM2BAM; } else { pr_err("Only IPA xport supported\n"); return -EINVAL; } /* For IPA we use limit of 16 */ mbim_ntb_parameters.wNtbOutMaxDatagrams = 16; /* For IPA this is proven to give maximum throughput */ Loading @@ -1703,7 +1705,6 @@ int mbim_bind_config(struct usb_configuration *c, unsigned portno, mbim->bam_port.rx_buffer_size = mbim_out_max_size; 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_resp_q); Loading drivers/usb/gadget/function/f_rmnet.c +0 −16 Original line number Diff line number Diff line Loading @@ -423,19 +423,6 @@ static int gport_rmnet_connect(struct f_rmnet *dev, unsigned intf) port_num = rmnet_ports[dev->port_num].data_xport_num; switch (dxport) { case USB_GADGET_XPORT_BAM2BAM: src_connection_idx = usb_bam_get_connection_idx(gadget->name, A2_P_BAM, USB_TO_PEER_PERIPHERAL, USB_BAM_DEVICE, port_num); dst_connection_idx = usb_bam_get_connection_idx(gadget->name, A2_P_BAM, PEER_PERIPHERAL_TO_USB, USB_BAM_DEVICE, port_num); if (dst_connection_idx < 0 || src_connection_idx < 0) { pr_err("%s: usb_bam_get_connection_idx failed\n", __func__); gsmd_ctrl_disconnect(&dev->port, port_num); return -EINVAL; } case USB_GADGET_XPORT_BAM: ret = gbam_connect(&dev->port, port_num, dxport, src_connection_idx, dst_connection_idx); Loading Loading @@ -540,7 +527,6 @@ static int gport_rmnet_disconnect(struct f_rmnet *dev) port_num = rmnet_ports[dev->port_num].data_xport_num; switch (dxport) { case USB_GADGET_XPORT_BAM: case USB_GADGET_XPORT_BAM2BAM: case USB_GADGET_XPORT_BAM2BAM_IPA: gbam_disconnect(&dev->port, port_num, dxport); break; Loading Loading @@ -619,7 +605,6 @@ static void frmnet_suspend(struct usb_function *f) switch (dxport) { case USB_GADGET_XPORT_BAM: break; case USB_GADGET_XPORT_BAM2BAM: case USB_GADGET_XPORT_BAM2BAM_IPA: if (remote_wakeup_allowed) { gbam_suspend(&dev->port, port_num, dxport); Loading Loading @@ -674,7 +659,6 @@ static void frmnet_resume(struct usb_function *f) switch (dxport) { case USB_GADGET_XPORT_BAM: break; case USB_GADGET_XPORT_BAM2BAM: case USB_GADGET_XPORT_BAM2BAM_IPA: if (remote_wakeup_allowed) { gbam_resume(&dev->port, port_num, dxport); Loading drivers/usb/gadget/function/u_bam.c +128 −186 Original line number Diff line number Diff line Loading @@ -143,8 +143,6 @@ struct bam_ch_info { u32 dst_pipe_idx; u8 src_connection_idx; u8 dst_connection_idx; int src_bam_idx; int dst_bam_idx; enum transport_type trans; struct usb_bam_connect_ipa_params ipa_params; Loading Loading @@ -997,17 +995,7 @@ static void gbam_start(void *param, enum usb_bam_pipe_dir dir) } else { if (gadget_is_dwc3(gadget) && msm_dwc3_reset_ep_after_lpm(gadget)) { u8 idx; idx = usb_bam_get_connection_idx(gadget->name, IPA_P_BAM, PEER_PERIPHERAL_TO_USB, USB_BAM_DEVICE, 0); if (idx < 0) { pr_err("%s: get_connection_idx failed\n", __func__); return; } configure_data_fifo(idx, configure_data_fifo(d->dst_connection_idx, port->port_usb->in, d->dst_pipe_type); } Loading Loading @@ -1343,21 +1331,6 @@ static void gbam2bam_connect_work(struct work_struct *w) */ spin_unlock_irqrestore(&port->port_lock, flags); if (d->trans == USB_GADGET_XPORT_BAM2BAM) { ret = usb_bam_connect(d->src_connection_idx, &d->src_pipe_idx); if (ret) { pr_err("%s: usb_bam_connect (src) failed: err:%d\n", __func__, ret); return; } ret = usb_bam_connect(d->dst_connection_idx, &d->dst_pipe_idx); if (ret) { pr_err("%s: usb_bam_connect (dst) failed: err:%d\n", __func__, ret); return; } } else if (d->trans == USB_GADGET_XPORT_BAM2BAM_IPA) { d->ipa_params.usb_connection_speed = gadget->speed; /* Loading Loading @@ -1417,15 +1390,6 @@ static void gbam2bam_connect_work(struct work_struct *w) } if (gadget_is_dwc3(gadget)) { d->src_bam_idx = usb_bam_get_connection_idx( gadget->name, IPA_P_BAM, USB_TO_PEER_PERIPHERAL, USB_BAM_DEVICE, 0); if (d->src_bam_idx < 0) { pr_err("%s: get_connection_idx failed\n", __func__); return; } if (!port) { pr_err("%s: UL: Port is NULL.", __func__); return; Loading @@ -1441,7 +1405,8 @@ static void gbam2bam_connect_work(struct work_struct *w) return; } configure_data_fifo(d->src_bam_idx, port->port_usb->out, configure_data_fifo(d->src_connection_idx, port->port_usb->out, d->src_pipe_type); spin_unlock_irqrestore(&port->port_lock_ul, flags_ul); } Loading @@ -1466,15 +1431,6 @@ static void gbam2bam_connect_work(struct work_struct *w) } if (gadget_is_dwc3(gadget)) { d->dst_bam_idx = usb_bam_get_connection_idx( gadget->name, IPA_P_BAM, PEER_PERIPHERAL_TO_USB, USB_BAM_DEVICE, 0); if (d->dst_bam_idx < 0) { pr_err("%s: get_connection_idx failed\n", __func__); return; } if (!port) { pr_err("%s: DL: Port is NULL.", __func__); return; Loading @@ -1490,10 +1446,10 @@ static void gbam2bam_connect_work(struct work_struct *w) return; } configure_data_fifo(d->dst_bam_idx, port->port_usb->in, configure_data_fifo(d->dst_connection_idx, port->port_usb->in, d->dst_pipe_type); spin_unlock_irqrestore(&port->port_lock_dl, flags); } gqti_ctrl_update_ipa_pipes(port->port_usb, port->port_num, d->ipa_params.ipa_prod_ep_idx , Loading Loading @@ -1530,8 +1486,7 @@ static void gbam2bam_connect_work(struct work_struct *w) d->tx_req->udc_priv = sps_params; /* queue in & out requests */ if (d->trans == USB_GADGET_XPORT_BAM2BAM || d->src_pipe_type == USB_BAM_PIPE_BAM2BAM) { if (d->src_pipe_type == USB_BAM_PIPE_BAM2BAM) { gbam_start_endless_rx(port); } else { /* The use-case of UL (OUT) ports using sys2bam is based on Loading Loading @@ -1655,10 +1610,10 @@ static void gbam2bam_resume_work(struct work_struct *w) if (d->trans == USB_GADGET_XPORT_BAM2BAM_IPA) { if (gadget_is_dwc3(gadget) && msm_dwc3_reset_ep_after_lpm(gadget)) { configure_data_fifo(d->src_bam_idx, configure_data_fifo(d->src_connection_idx, port->port_usb->out, d->src_pipe_type); configure_data_fifo(d->dst_bam_idx, configure_data_fifo(d->dst_connection_idx, port->port_usb->in, d->dst_pipe_type); spin_unlock_irqrestore(&port->port_lock, flags); Loading Loading @@ -2018,8 +1973,7 @@ void gbam_disconnect(struct grmnet *gr, u8 port_num, enum transport_type trans) return; } if ((trans == USB_GADGET_XPORT_BAM2BAM || trans == USB_GADGET_XPORT_BAM2BAM_IPA) && if ((trans == USB_GADGET_XPORT_BAM2BAM_IPA) && port_num >= n_bam2bam_ports) { pr_err("%s: invalid bam2bam portno#%d\n", __func__, port_num); Loading Loading @@ -2081,8 +2035,7 @@ void gbam_disconnect(struct grmnet *gr, u8 port_num, enum transport_type trans) * Set endless flag to false as USB Endpoint is already * disable. */ if (d->trans == USB_GADGET_XPORT_BAM2BAM || d->trans == USB_GADGET_XPORT_BAM2BAM_IPA) { if (d->trans == USB_GADGET_XPORT_BAM2BAM_IPA) { if (d->dst_pipe_type == USB_BAM_PIPE_BAM2BAM) gr->in->endless = false; Loading @@ -2095,13 +2048,8 @@ void gbam_disconnect(struct grmnet *gr, u8 port_num, enum transport_type trans) if (gr->out) gr->out->driver_data = NULL; if (trans == USB_GADGET_XPORT_BAM || trans == USB_GADGET_XPORT_BAM2BAM_IPA) { port->last_event = U_BAM_DISCONNECT_E; queue_work(gbam_wq, &port->disconnect_w); } else if (trans == USB_GADGET_XPORT_BAM2BAM) { usb_gadget_autopm_put_async(port->gadget); } spin_unlock_irqrestore(&port->port_lock, flags); } Loading @@ -2127,13 +2075,17 @@ int gbam_connect(struct grmnet *gr, u8 port_num, return -EINVAL; } if (trans == USB_GADGET_XPORT_BAM2BAM) { pr_err("%s: invalid xport#%d\n", __func__, trans); return -EINVAL; } if (trans == USB_GADGET_XPORT_BAM && port_num >= n_bam_ports) { pr_err("%s: invalid portno#%d\n", __func__, port_num); return -ENODEV; } if ((trans == USB_GADGET_XPORT_BAM2BAM || trans == USB_GADGET_XPORT_BAM2BAM_IPA) if ((trans == USB_GADGET_XPORT_BAM2BAM_IPA) && port_num >= n_bam2bam_ports) { pr_err("%s: invalid portno#%d\n", __func__, port_num); return -ENODEV; Loading Loading @@ -2177,10 +2129,7 @@ int gbam_connect(struct grmnet *gr, u8 port_num, spin_unlock(&port->port_lock_dl); spin_unlock_irqrestore(&port->port_lock_ul, flags_ul); if (d->trans == USB_GADGET_XPORT_BAM2BAM) { d->src_connection_idx = src_connection_idx; d->dst_connection_idx = dst_connection_idx; } else if (d->trans == USB_GADGET_XPORT_BAM2BAM_IPA) { if (d->trans == USB_GADGET_XPORT_BAM2BAM_IPA) { d->src_connection_idx = src_connection_idx; d->dst_connection_idx = dst_connection_idx; d->ipa_params.src_pipe = &(d->src_pipe_idx); Loading @@ -2202,8 +2151,6 @@ int gbam_connect(struct grmnet *gr, u8 port_num, ret = -EINVAL; goto exit; } } /* * Check for pipe_type. If it is BAM2BAM, then it is required * to disable Xfer complete and Xfer not ready interrupts for Loading @@ -2211,9 +2158,6 @@ int gbam_connect(struct grmnet *gr, u8 port_num, * it which is considered into UDC driver while enabling * USB Endpoint. */ if (d->trans == USB_GADGET_XPORT_BAM2BAM || d->trans == USB_GADGET_XPORT_BAM2BAM_IPA) { if (d->dst_pipe_type == USB_BAM_PIPE_BAM2BAM) port->port_usb->in->endless = true; Loading Loading @@ -2367,8 +2311,7 @@ void gbam_suspend(struct grmnet *gr, u8 port_num, enum transport_type trans) struct bam_ch_info *d; unsigned long flags; if (trans != USB_GADGET_XPORT_BAM2BAM && trans != USB_GADGET_XPORT_BAM2BAM_IPA) if (trans != USB_GADGET_XPORT_BAM2BAM_IPA) return; port = bam2bam_ports[port_num]; Loading Loading @@ -2396,8 +2339,7 @@ void gbam_resume(struct grmnet *gr, u8 port_num, enum transport_type trans) struct bam_ch_info *d; unsigned long flags; if (trans != USB_GADGET_XPORT_BAM2BAM && trans != USB_GADGET_XPORT_BAM2BAM_IPA) if (trans != USB_GADGET_XPORT_BAM2BAM_IPA) return; port = bam2bam_ports[port_num]; Loading drivers/usb/gadget/function/u_bam_data.c +273 −358 Original line number Diff line number Diff line Loading @@ -86,8 +86,6 @@ struct bam_data_ch_info { u32 dst_pipe_idx; u8 src_connection_idx; u8 dst_connection_idx; int src_bam_idx; int dst_bam_idx; enum function_type func_type; enum transport_type trans; Loading Loading @@ -786,13 +784,10 @@ static void bam2bam_data_disconnect_work(struct work_struct *w) */ spin_unlock_irqrestore(&port->port_lock, flags); if (d->trans == USB_GADGET_XPORT_BAM2BAM_IPA) { /* Perform IPA functions' disconnect */ bam_data_ipa_disconnect(d); ret = usb_bam_disconnect_ipa(&d->ipa_params); if (ret) pr_err("usb_bam_disconnect_ipa failed: err:%d\n", ret); } spin_lock_irqsave(&port->port_lock, flags); port->is_ipa_connected = false; Loading Loading @@ -834,13 +829,11 @@ static void configure_usb_data_fifo(u8 idx, struct usb_ep *ep, static inline void bam_data_start_rx_transfers(struct bam_data_ch_info *d, struct bam_data_port *port) { if (d->trans == USB_GADGET_XPORT_BAM2BAM || d->src_pipe_type == USB_BAM_PIPE_BAM2BAM) { if (d->src_pipe_type == USB_BAM_PIPE_BAM2BAM) bam_data_start_endless_rx(port); } else { else bam_data_start_rx(port); } } static void bam2bam_data_connect_work(struct work_struct *w) { Loading Loading @@ -890,8 +883,6 @@ static void bam2bam_data_connect_work(struct work_struct *w) return; } if (d->trans == USB_GADGET_XPORT_BAM2BAM_IPA) { d->ipa_params.usb_connection_speed = gadget->speed; d->ipa_params.cons_clnt_hdl = -1; d->ipa_params.prod_clnt_hdl = -1; Loading Loading @@ -965,19 +956,8 @@ static void bam2bam_data_connect_work(struct work_struct *w) } d_port->ipa_consumer_ep = d->ipa_params.ipa_cons_ep_idx; d->src_bam_idx = usb_bam_get_connection_idx( gadget->name, IPA_P_BAM, USB_TO_PEER_PERIPHERAL, USB_BAM_DEVICE, 0); if (d->src_bam_idx < 0) { spin_unlock_irqrestore(&port->port_lock, flags); pr_err("%s: get_connection_idx failed\n", __func__); goto disconnect_ipa; } if (gadget_is_dwc3(gadget)) configure_usb_data_fifo(d->src_bam_idx, configure_usb_data_fifo(d->src_connection_idx, port->port_usb->out, d->src_pipe_type); Loading Loading @@ -1033,18 +1013,8 @@ static void bam2bam_data_connect_work(struct work_struct *w) pr_debug("%s(): ipa_producer_ep:%d ipa_consumer_ep:%d\n", __func__, d_port->ipa_producer_ep, d_port->ipa_consumer_ep); d->dst_bam_idx = usb_bam_get_connection_idx( gadget->name, IPA_P_BAM, PEER_PERIPHERAL_TO_USB, USB_BAM_DEVICE, 0); if (d->dst_bam_idx < 0) { pr_err("%s: get_connection_idx failed\n", __func__); return; } if (gadget_is_dwc3(gadget)) configure_usb_data_fifo(d->dst_bam_idx, configure_usb_data_fifo(d->dst_connection_idx, port->port_usb->in, d->dst_pipe_type); Loading Loading @@ -1125,31 +1095,9 @@ static void bam2bam_data_connect_work(struct work_struct *w) } } atomic_set(&d->pipe_connect_notified, 1); } else { /* transport type is USB_GADGET_XPORT_BAM2BAM */ /* Setup BAM connection and fetch USB PIPE index */ ret = usb_bam_connect(d->src_connection_idx, &d->src_pipe_idx); if (ret) { pr_err("usb_bam_connect (src) failed: err:%d\n", ret); return; } ret = usb_bam_connect(d->dst_connection_idx, &d->dst_pipe_idx); if (ret) { pr_err("usb_bam_connect (dst) failed: err:%d\n", ret); return; } sps_params = (SPS_PARAMS_SPS_MODE | d->src_pipe_idx | MSM_VENDOR_ID) & ~SPS_PARAMS_TBE; d->rx_req->udc_priv = sps_params; sps_params = (SPS_PARAMS_SPS_MODE | d->dst_pipe_idx | MSM_VENDOR_ID) & ~SPS_PARAMS_TBE; d->tx_req->udc_priv = sps_params; } /* Don't queue the transfers yet, only after network stack is up */ if (d->trans == USB_GADGET_XPORT_BAM2BAM_IPA && (d->func_type == USB_FUNC_RNDIS || d->func_type == USB_FUNC_ECM)) { if (d->func_type == USB_FUNC_RNDIS || d->func_type == USB_FUNC_ECM) { pr_debug("%s: Not starting now, waiting for network notify", __func__); return; Loading Loading @@ -1387,10 +1335,8 @@ void bam_data_disconnect(struct data_port *gr, enum function_type func, usb_gadget_autopm_get_noresume(port->gadget); if (port->port_usb) { if (d->trans == USB_GADGET_XPORT_BAM2BAM_IPA) { port->port_usb->ipa_consumer_ep = -1; port->port_usb->ipa_producer_ep = -1; } if (port->port_usb->in && port->port_usb->in->driver_data) { Loading Loading @@ -1418,8 +1364,7 @@ void bam_data_disconnect(struct data_port *gr, enum function_type func, spin_lock_irqsave(&port->port_lock, flags); /* Only for SYS2BAM mode related UL workaround */ if (d->trans == USB_GADGET_XPORT_BAM2BAM_IPA && d->src_pipe_type == USB_BAM_PIPE_SYS2BAM) { if (d->src_pipe_type == USB_BAM_PIPE_SYS2BAM) { pr_debug("SKBs_RX_Q: freed:%d\n", d->rx_skb_q.qlen); Loading @@ -1443,16 +1388,11 @@ void bam_data_disconnect(struct data_port *gr, enum function_type func, * Set endless flag to false as USB Endpoint * is already disable. */ if (d->trans == USB_GADGET_XPORT_BAM2BAM || d->trans == USB_GADGET_XPORT_BAM2BAM_IPA || d->trans == USB_GADGET_XPORT_BAM) { if (d->dst_pipe_type == USB_BAM_PIPE_BAM2BAM) port->port_usb->in->endless = false; if (d->src_pipe_type == USB_BAM_PIPE_BAM2BAM) port->port_usb->out->endless = false; } port->port_usb->in->driver_data = NULL; port->port_usb->out->driver_data = NULL; Loading @@ -1461,12 +1401,8 @@ void bam_data_disconnect(struct data_port *gr, enum function_type func, } } if (d->trans == USB_GADGET_XPORT_BAM2BAM_IPA) { port->last_event = U_BAM_DATA_DISCONNECT_E; queue_work(bam_data_wq, &port->disconnect_w); } else { usb_gadget_autopm_put_async(port->gadget); } spin_unlock_irqrestore(&port->port_lock, flags); } Loading @@ -1478,7 +1414,6 @@ int bam_data_connect(struct data_port *gr, enum transport_type trans, struct bam_data_ch_info *d; int ret, port_num; unsigned long flags; enum peer_bam bam_name; u8 src_connection_idx, dst_connection_idx; if (!gr) { Loading @@ -1492,16 +1427,18 @@ int bam_data_connect(struct data_port *gr, enum transport_type trans, return -EINVAL; } pr_debug("dev:%p port#%d\n", gr, port_num); if (trans != USB_GADGET_XPORT_BAM2BAM_IPA) { pr_err("invalid xport#%d\n", trans); return -EINVAL; } bam_name = (trans == USB_GADGET_XPORT_BAM2BAM_IPA) ? IPA_P_BAM : A2_P_BAM; pr_debug("dev:%p port#%d\n", gr, port_num); src_connection_idx = usb_bam_get_connection_idx(gr->cdev->gadget->name, bam_name, USB_TO_PEER_PERIPHERAL, USB_BAM_DEVICE, IPA_P_BAM, USB_TO_PEER_PERIPHERAL, USB_BAM_DEVICE, dev_port_num); dst_connection_idx = usb_bam_get_connection_idx(gr->cdev->gadget->name, bam_name, PEER_PERIPHERAL_TO_USB, USB_BAM_DEVICE, IPA_P_BAM, PEER_PERIPHERAL_TO_USB, USB_BAM_DEVICE, dev_port_num); if (src_connection_idx < 0 || dst_connection_idx < 0) { pr_err("%s: usb_bam_get_connection_idx failed\n", __func__); Loading Loading @@ -1536,7 +1473,6 @@ int bam_data_connect(struct data_port *gr, enum transport_type trans, } pr_debug("%s(): rx_buffer_size:%d\n", __func__, d->rx_buffer_size); if (trans == USB_GADGET_XPORT_BAM2BAM_IPA) { d->ipa_params.src_pipe = &(d->src_pipe_idx); d->ipa_params.dst_pipe = &(d->dst_pipe_idx); d->ipa_params.src_idx = src_connection_idx; Loading @@ -1558,7 +1494,6 @@ int bam_data_connect(struct data_port *gr, enum transport_type trans, ret = -EINVAL; goto exit; } } /* * Check for pipe_type. If it is BAM2BAM, then it is required Loading @@ -1567,16 +1502,11 @@ int bam_data_connect(struct data_port *gr, enum transport_type trans, * it which is considered into UDC driver while enabling * USB Endpoint. */ if (d->trans == USB_GADGET_XPORT_BAM2BAM || d->trans == USB_GADGET_XPORT_BAM2BAM_IPA || d->trans == USB_GADGET_XPORT_BAM) { if (d->dst_pipe_type == USB_BAM_PIPE_BAM2BAM) port->port_usb->in->endless = true; if (d->src_pipe_type == USB_BAM_PIPE_BAM2BAM) port->port_usb->out->endless = true; } ret = usb_ep_enable(gr->in); if (ret) { Loading @@ -1594,8 +1524,7 @@ int bam_data_connect(struct data_port *gr, enum transport_type trans, gr->out->driver_data = port; if (d->trans == USB_GADGET_XPORT_BAM2BAM_IPA && d->src_pipe_type == USB_BAM_PIPE_SYS2BAM) { if (d->src_pipe_type == USB_BAM_PIPE_SYS2BAM) { /* UL workaround requirements */ skb_queue_head_init(&d->rx_skb_q); Loading Loading @@ -1637,8 +1566,8 @@ int bam_data_connect(struct data_port *gr, enum transport_type trans, port->last_event = U_BAM_DATA_CONNECT_E; if (d->trans == USB_GADGET_XPORT_BAM2BAM_IPA && d->func_type == USB_FUNC_RNDIS) { /* Wait for host to enable flow_control */ if (d->func_type == USB_FUNC_RNDIS) { ret = 0; goto exit; } Loading Loading @@ -1802,17 +1731,7 @@ static void bam_data_start(void *param, enum usb_bam_pipe_dir dir) } else { if (gadget_is_dwc3(gadget) && msm_dwc3_reset_ep_after_lpm(gadget)) { u8 idx; idx = usb_bam_get_connection_idx(gadget->name, IPA_P_BAM, PEER_PERIPHERAL_TO_USB, USB_BAM_DEVICE, 0); if (idx < 0) { pr_err("%s: get_connection_idx failed\n", __func__); return; } configure_data_fifo(idx, configure_data_fifo(d->dst_connection_idx, port->port_usb->in, d->dst_pipe_type); } Loading Loading @@ -1970,7 +1889,6 @@ static void bam2bam_data_suspend_work(struct work_struct *w) goto exit; } if (d->trans == USB_GADGET_XPORT_BAM2BAM_IPA) { usb_bam_register_start_stop_cbs(d->dst_connection_idx, bam_data_start, bam_data_stop, port); Loading @@ -1983,7 +1901,6 @@ static void bam2bam_data_suspend_work(struct work_struct *w) spin_unlock_irqrestore(&port->port_lock, flags); usb_bam_suspend(&d->ipa_params); spin_lock_irqsave(&port->port_lock, flags); } exit: /* Loading Loading @@ -2042,7 +1959,6 @@ static void bam2bam_data_resume_work(struct work_struct *w) goto exit; } if (d->trans == USB_GADGET_XPORT_BAM2BAM_IPA) { /* * If usb_req was dequeued as part of bus suspend then * corresponding DBM IN and OUT EPs should also be reset. Loading @@ -2052,7 +1968,7 @@ static void bam2bam_data_resume_work(struct work_struct *w) if (gadget_is_dwc3(gadget) && msm_dwc3_reset_ep_after_lpm(gadget)) { if (d->tx_req_dequeued) { configure_usb_data_fifo(d->dst_bam_idx, configure_usb_data_fifo(d->dst_connection_idx, port->port_usb->in, d->dst_pipe_type); spin_unlock_irqrestore(&port->port_lock, flags); Loading @@ -2060,7 +1976,7 @@ static void bam2bam_data_resume_work(struct work_struct *w) spin_lock_irqsave(&port->port_lock, flags); } if (d->rx_req_dequeued) { configure_usb_data_fifo(d->src_bam_idx, configure_usb_data_fifo(d->src_connection_idx, port->port_usb->out, d->src_pipe_type); spin_unlock_irqrestore(&port->port_lock, flags); Loading @@ -2071,7 +1987,6 @@ static void bam2bam_data_resume_work(struct work_struct *w) d->tx_req_dequeued = false; d->rx_req_dequeued = false; usb_bam_resume(&d->ipa_params); } exit: spin_unlock_irqrestore(&port->port_lock, flags); } Loading Loading
drivers/platform/msm/usb_bam.c +1 −2 Original line number Diff line number Diff line Loading @@ -1529,11 +1529,10 @@ static int cons_request_resource(enum usb_ctrl cur_bam) log_event(1, "%s: Request %s_CONS resource\n", __func__, bam_enable_strings[cur_bam]); spin_lock(&usb_bam_lock); spin_lock(&usb_bam_ipa_handshake_info_lock); info[cur_bam].cur_cons_state = IPA_RM_RESOURCE_GRANTED; spin_lock(&usb_bam_lock); switch (info[cur_bam].cur_bam_mode) { case USB_BAM_DEVICE: if (ctx.pipes_enabled_per_bam[cur_bam] && Loading
drivers/usb/gadget/function/f_mbim.c +24 −23 Original line number Diff line number Diff line Loading @@ -1679,10 +1679,12 @@ int mbim_bind_config(struct usb_configuration *c, unsigned portno, mbim->function.resume = mbim_resume; mbim->xport = str_to_xport(xport_name); /* Only BAM2BAM_IPA supported */ if (mbim->xport != USB_GADGET_XPORT_BAM2BAM_IPA) { /* Use BAM2BAM by default if not IPA */ mbim->xport = USB_GADGET_XPORT_BAM2BAM; } else { pr_err("Only IPA xport supported\n"); return -EINVAL; } /* For IPA we use limit of 16 */ mbim_ntb_parameters.wNtbOutMaxDatagrams = 16; /* For IPA this is proven to give maximum throughput */ Loading @@ -1703,7 +1705,6 @@ int mbim_bind_config(struct usb_configuration *c, unsigned portno, mbim->bam_port.rx_buffer_size = mbim_out_max_size; 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_resp_q); Loading
drivers/usb/gadget/function/f_rmnet.c +0 −16 Original line number Diff line number Diff line Loading @@ -423,19 +423,6 @@ static int gport_rmnet_connect(struct f_rmnet *dev, unsigned intf) port_num = rmnet_ports[dev->port_num].data_xport_num; switch (dxport) { case USB_GADGET_XPORT_BAM2BAM: src_connection_idx = usb_bam_get_connection_idx(gadget->name, A2_P_BAM, USB_TO_PEER_PERIPHERAL, USB_BAM_DEVICE, port_num); dst_connection_idx = usb_bam_get_connection_idx(gadget->name, A2_P_BAM, PEER_PERIPHERAL_TO_USB, USB_BAM_DEVICE, port_num); if (dst_connection_idx < 0 || src_connection_idx < 0) { pr_err("%s: usb_bam_get_connection_idx failed\n", __func__); gsmd_ctrl_disconnect(&dev->port, port_num); return -EINVAL; } case USB_GADGET_XPORT_BAM: ret = gbam_connect(&dev->port, port_num, dxport, src_connection_idx, dst_connection_idx); Loading Loading @@ -540,7 +527,6 @@ static int gport_rmnet_disconnect(struct f_rmnet *dev) port_num = rmnet_ports[dev->port_num].data_xport_num; switch (dxport) { case USB_GADGET_XPORT_BAM: case USB_GADGET_XPORT_BAM2BAM: case USB_GADGET_XPORT_BAM2BAM_IPA: gbam_disconnect(&dev->port, port_num, dxport); break; Loading Loading @@ -619,7 +605,6 @@ static void frmnet_suspend(struct usb_function *f) switch (dxport) { case USB_GADGET_XPORT_BAM: break; case USB_GADGET_XPORT_BAM2BAM: case USB_GADGET_XPORT_BAM2BAM_IPA: if (remote_wakeup_allowed) { gbam_suspend(&dev->port, port_num, dxport); Loading Loading @@ -674,7 +659,6 @@ static void frmnet_resume(struct usb_function *f) switch (dxport) { case USB_GADGET_XPORT_BAM: break; case USB_GADGET_XPORT_BAM2BAM: case USB_GADGET_XPORT_BAM2BAM_IPA: if (remote_wakeup_allowed) { gbam_resume(&dev->port, port_num, dxport); Loading
drivers/usb/gadget/function/u_bam.c +128 −186 Original line number Diff line number Diff line Loading @@ -143,8 +143,6 @@ struct bam_ch_info { u32 dst_pipe_idx; u8 src_connection_idx; u8 dst_connection_idx; int src_bam_idx; int dst_bam_idx; enum transport_type trans; struct usb_bam_connect_ipa_params ipa_params; Loading Loading @@ -997,17 +995,7 @@ static void gbam_start(void *param, enum usb_bam_pipe_dir dir) } else { if (gadget_is_dwc3(gadget) && msm_dwc3_reset_ep_after_lpm(gadget)) { u8 idx; idx = usb_bam_get_connection_idx(gadget->name, IPA_P_BAM, PEER_PERIPHERAL_TO_USB, USB_BAM_DEVICE, 0); if (idx < 0) { pr_err("%s: get_connection_idx failed\n", __func__); return; } configure_data_fifo(idx, configure_data_fifo(d->dst_connection_idx, port->port_usb->in, d->dst_pipe_type); } Loading Loading @@ -1343,21 +1331,6 @@ static void gbam2bam_connect_work(struct work_struct *w) */ spin_unlock_irqrestore(&port->port_lock, flags); if (d->trans == USB_GADGET_XPORT_BAM2BAM) { ret = usb_bam_connect(d->src_connection_idx, &d->src_pipe_idx); if (ret) { pr_err("%s: usb_bam_connect (src) failed: err:%d\n", __func__, ret); return; } ret = usb_bam_connect(d->dst_connection_idx, &d->dst_pipe_idx); if (ret) { pr_err("%s: usb_bam_connect (dst) failed: err:%d\n", __func__, ret); return; } } else if (d->trans == USB_GADGET_XPORT_BAM2BAM_IPA) { d->ipa_params.usb_connection_speed = gadget->speed; /* Loading Loading @@ -1417,15 +1390,6 @@ static void gbam2bam_connect_work(struct work_struct *w) } if (gadget_is_dwc3(gadget)) { d->src_bam_idx = usb_bam_get_connection_idx( gadget->name, IPA_P_BAM, USB_TO_PEER_PERIPHERAL, USB_BAM_DEVICE, 0); if (d->src_bam_idx < 0) { pr_err("%s: get_connection_idx failed\n", __func__); return; } if (!port) { pr_err("%s: UL: Port is NULL.", __func__); return; Loading @@ -1441,7 +1405,8 @@ static void gbam2bam_connect_work(struct work_struct *w) return; } configure_data_fifo(d->src_bam_idx, port->port_usb->out, configure_data_fifo(d->src_connection_idx, port->port_usb->out, d->src_pipe_type); spin_unlock_irqrestore(&port->port_lock_ul, flags_ul); } Loading @@ -1466,15 +1431,6 @@ static void gbam2bam_connect_work(struct work_struct *w) } if (gadget_is_dwc3(gadget)) { d->dst_bam_idx = usb_bam_get_connection_idx( gadget->name, IPA_P_BAM, PEER_PERIPHERAL_TO_USB, USB_BAM_DEVICE, 0); if (d->dst_bam_idx < 0) { pr_err("%s: get_connection_idx failed\n", __func__); return; } if (!port) { pr_err("%s: DL: Port is NULL.", __func__); return; Loading @@ -1490,10 +1446,10 @@ static void gbam2bam_connect_work(struct work_struct *w) return; } configure_data_fifo(d->dst_bam_idx, port->port_usb->in, configure_data_fifo(d->dst_connection_idx, port->port_usb->in, d->dst_pipe_type); spin_unlock_irqrestore(&port->port_lock_dl, flags); } gqti_ctrl_update_ipa_pipes(port->port_usb, port->port_num, d->ipa_params.ipa_prod_ep_idx , Loading Loading @@ -1530,8 +1486,7 @@ static void gbam2bam_connect_work(struct work_struct *w) d->tx_req->udc_priv = sps_params; /* queue in & out requests */ if (d->trans == USB_GADGET_XPORT_BAM2BAM || d->src_pipe_type == USB_BAM_PIPE_BAM2BAM) { if (d->src_pipe_type == USB_BAM_PIPE_BAM2BAM) { gbam_start_endless_rx(port); } else { /* The use-case of UL (OUT) ports using sys2bam is based on Loading Loading @@ -1655,10 +1610,10 @@ static void gbam2bam_resume_work(struct work_struct *w) if (d->trans == USB_GADGET_XPORT_BAM2BAM_IPA) { if (gadget_is_dwc3(gadget) && msm_dwc3_reset_ep_after_lpm(gadget)) { configure_data_fifo(d->src_bam_idx, configure_data_fifo(d->src_connection_idx, port->port_usb->out, d->src_pipe_type); configure_data_fifo(d->dst_bam_idx, configure_data_fifo(d->dst_connection_idx, port->port_usb->in, d->dst_pipe_type); spin_unlock_irqrestore(&port->port_lock, flags); Loading Loading @@ -2018,8 +1973,7 @@ void gbam_disconnect(struct grmnet *gr, u8 port_num, enum transport_type trans) return; } if ((trans == USB_GADGET_XPORT_BAM2BAM || trans == USB_GADGET_XPORT_BAM2BAM_IPA) && if ((trans == USB_GADGET_XPORT_BAM2BAM_IPA) && port_num >= n_bam2bam_ports) { pr_err("%s: invalid bam2bam portno#%d\n", __func__, port_num); Loading Loading @@ -2081,8 +2035,7 @@ void gbam_disconnect(struct grmnet *gr, u8 port_num, enum transport_type trans) * Set endless flag to false as USB Endpoint is already * disable. */ if (d->trans == USB_GADGET_XPORT_BAM2BAM || d->trans == USB_GADGET_XPORT_BAM2BAM_IPA) { if (d->trans == USB_GADGET_XPORT_BAM2BAM_IPA) { if (d->dst_pipe_type == USB_BAM_PIPE_BAM2BAM) gr->in->endless = false; Loading @@ -2095,13 +2048,8 @@ void gbam_disconnect(struct grmnet *gr, u8 port_num, enum transport_type trans) if (gr->out) gr->out->driver_data = NULL; if (trans == USB_GADGET_XPORT_BAM || trans == USB_GADGET_XPORT_BAM2BAM_IPA) { port->last_event = U_BAM_DISCONNECT_E; queue_work(gbam_wq, &port->disconnect_w); } else if (trans == USB_GADGET_XPORT_BAM2BAM) { usb_gadget_autopm_put_async(port->gadget); } spin_unlock_irqrestore(&port->port_lock, flags); } Loading @@ -2127,13 +2075,17 @@ int gbam_connect(struct grmnet *gr, u8 port_num, return -EINVAL; } if (trans == USB_GADGET_XPORT_BAM2BAM) { pr_err("%s: invalid xport#%d\n", __func__, trans); return -EINVAL; } if (trans == USB_GADGET_XPORT_BAM && port_num >= n_bam_ports) { pr_err("%s: invalid portno#%d\n", __func__, port_num); return -ENODEV; } if ((trans == USB_GADGET_XPORT_BAM2BAM || trans == USB_GADGET_XPORT_BAM2BAM_IPA) if ((trans == USB_GADGET_XPORT_BAM2BAM_IPA) && port_num >= n_bam2bam_ports) { pr_err("%s: invalid portno#%d\n", __func__, port_num); return -ENODEV; Loading Loading @@ -2177,10 +2129,7 @@ int gbam_connect(struct grmnet *gr, u8 port_num, spin_unlock(&port->port_lock_dl); spin_unlock_irqrestore(&port->port_lock_ul, flags_ul); if (d->trans == USB_GADGET_XPORT_BAM2BAM) { d->src_connection_idx = src_connection_idx; d->dst_connection_idx = dst_connection_idx; } else if (d->trans == USB_GADGET_XPORT_BAM2BAM_IPA) { if (d->trans == USB_GADGET_XPORT_BAM2BAM_IPA) { d->src_connection_idx = src_connection_idx; d->dst_connection_idx = dst_connection_idx; d->ipa_params.src_pipe = &(d->src_pipe_idx); Loading @@ -2202,8 +2151,6 @@ int gbam_connect(struct grmnet *gr, u8 port_num, ret = -EINVAL; goto exit; } } /* * Check for pipe_type. If it is BAM2BAM, then it is required * to disable Xfer complete and Xfer not ready interrupts for Loading @@ -2211,9 +2158,6 @@ int gbam_connect(struct grmnet *gr, u8 port_num, * it which is considered into UDC driver while enabling * USB Endpoint. */ if (d->trans == USB_GADGET_XPORT_BAM2BAM || d->trans == USB_GADGET_XPORT_BAM2BAM_IPA) { if (d->dst_pipe_type == USB_BAM_PIPE_BAM2BAM) port->port_usb->in->endless = true; Loading Loading @@ -2367,8 +2311,7 @@ void gbam_suspend(struct grmnet *gr, u8 port_num, enum transport_type trans) struct bam_ch_info *d; unsigned long flags; if (trans != USB_GADGET_XPORT_BAM2BAM && trans != USB_GADGET_XPORT_BAM2BAM_IPA) if (trans != USB_GADGET_XPORT_BAM2BAM_IPA) return; port = bam2bam_ports[port_num]; Loading Loading @@ -2396,8 +2339,7 @@ void gbam_resume(struct grmnet *gr, u8 port_num, enum transport_type trans) struct bam_ch_info *d; unsigned long flags; if (trans != USB_GADGET_XPORT_BAM2BAM && trans != USB_GADGET_XPORT_BAM2BAM_IPA) if (trans != USB_GADGET_XPORT_BAM2BAM_IPA) return; port = bam2bam_ports[port_num]; Loading
drivers/usb/gadget/function/u_bam_data.c +273 −358 Original line number Diff line number Diff line Loading @@ -86,8 +86,6 @@ struct bam_data_ch_info { u32 dst_pipe_idx; u8 src_connection_idx; u8 dst_connection_idx; int src_bam_idx; int dst_bam_idx; enum function_type func_type; enum transport_type trans; Loading Loading @@ -786,13 +784,10 @@ static void bam2bam_data_disconnect_work(struct work_struct *w) */ spin_unlock_irqrestore(&port->port_lock, flags); if (d->trans == USB_GADGET_XPORT_BAM2BAM_IPA) { /* Perform IPA functions' disconnect */ bam_data_ipa_disconnect(d); ret = usb_bam_disconnect_ipa(&d->ipa_params); if (ret) pr_err("usb_bam_disconnect_ipa failed: err:%d\n", ret); } spin_lock_irqsave(&port->port_lock, flags); port->is_ipa_connected = false; Loading Loading @@ -834,13 +829,11 @@ static void configure_usb_data_fifo(u8 idx, struct usb_ep *ep, static inline void bam_data_start_rx_transfers(struct bam_data_ch_info *d, struct bam_data_port *port) { if (d->trans == USB_GADGET_XPORT_BAM2BAM || d->src_pipe_type == USB_BAM_PIPE_BAM2BAM) { if (d->src_pipe_type == USB_BAM_PIPE_BAM2BAM) bam_data_start_endless_rx(port); } else { else bam_data_start_rx(port); } } static void bam2bam_data_connect_work(struct work_struct *w) { Loading Loading @@ -890,8 +883,6 @@ static void bam2bam_data_connect_work(struct work_struct *w) return; } if (d->trans == USB_GADGET_XPORT_BAM2BAM_IPA) { d->ipa_params.usb_connection_speed = gadget->speed; d->ipa_params.cons_clnt_hdl = -1; d->ipa_params.prod_clnt_hdl = -1; Loading Loading @@ -965,19 +956,8 @@ static void bam2bam_data_connect_work(struct work_struct *w) } d_port->ipa_consumer_ep = d->ipa_params.ipa_cons_ep_idx; d->src_bam_idx = usb_bam_get_connection_idx( gadget->name, IPA_P_BAM, USB_TO_PEER_PERIPHERAL, USB_BAM_DEVICE, 0); if (d->src_bam_idx < 0) { spin_unlock_irqrestore(&port->port_lock, flags); pr_err("%s: get_connection_idx failed\n", __func__); goto disconnect_ipa; } if (gadget_is_dwc3(gadget)) configure_usb_data_fifo(d->src_bam_idx, configure_usb_data_fifo(d->src_connection_idx, port->port_usb->out, d->src_pipe_type); Loading Loading @@ -1033,18 +1013,8 @@ static void bam2bam_data_connect_work(struct work_struct *w) pr_debug("%s(): ipa_producer_ep:%d ipa_consumer_ep:%d\n", __func__, d_port->ipa_producer_ep, d_port->ipa_consumer_ep); d->dst_bam_idx = usb_bam_get_connection_idx( gadget->name, IPA_P_BAM, PEER_PERIPHERAL_TO_USB, USB_BAM_DEVICE, 0); if (d->dst_bam_idx < 0) { pr_err("%s: get_connection_idx failed\n", __func__); return; } if (gadget_is_dwc3(gadget)) configure_usb_data_fifo(d->dst_bam_idx, configure_usb_data_fifo(d->dst_connection_idx, port->port_usb->in, d->dst_pipe_type); Loading Loading @@ -1125,31 +1095,9 @@ static void bam2bam_data_connect_work(struct work_struct *w) } } atomic_set(&d->pipe_connect_notified, 1); } else { /* transport type is USB_GADGET_XPORT_BAM2BAM */ /* Setup BAM connection and fetch USB PIPE index */ ret = usb_bam_connect(d->src_connection_idx, &d->src_pipe_idx); if (ret) { pr_err("usb_bam_connect (src) failed: err:%d\n", ret); return; } ret = usb_bam_connect(d->dst_connection_idx, &d->dst_pipe_idx); if (ret) { pr_err("usb_bam_connect (dst) failed: err:%d\n", ret); return; } sps_params = (SPS_PARAMS_SPS_MODE | d->src_pipe_idx | MSM_VENDOR_ID) & ~SPS_PARAMS_TBE; d->rx_req->udc_priv = sps_params; sps_params = (SPS_PARAMS_SPS_MODE | d->dst_pipe_idx | MSM_VENDOR_ID) & ~SPS_PARAMS_TBE; d->tx_req->udc_priv = sps_params; } /* Don't queue the transfers yet, only after network stack is up */ if (d->trans == USB_GADGET_XPORT_BAM2BAM_IPA && (d->func_type == USB_FUNC_RNDIS || d->func_type == USB_FUNC_ECM)) { if (d->func_type == USB_FUNC_RNDIS || d->func_type == USB_FUNC_ECM) { pr_debug("%s: Not starting now, waiting for network notify", __func__); return; Loading Loading @@ -1387,10 +1335,8 @@ void bam_data_disconnect(struct data_port *gr, enum function_type func, usb_gadget_autopm_get_noresume(port->gadget); if (port->port_usb) { if (d->trans == USB_GADGET_XPORT_BAM2BAM_IPA) { port->port_usb->ipa_consumer_ep = -1; port->port_usb->ipa_producer_ep = -1; } if (port->port_usb->in && port->port_usb->in->driver_data) { Loading Loading @@ -1418,8 +1364,7 @@ void bam_data_disconnect(struct data_port *gr, enum function_type func, spin_lock_irqsave(&port->port_lock, flags); /* Only for SYS2BAM mode related UL workaround */ if (d->trans == USB_GADGET_XPORT_BAM2BAM_IPA && d->src_pipe_type == USB_BAM_PIPE_SYS2BAM) { if (d->src_pipe_type == USB_BAM_PIPE_SYS2BAM) { pr_debug("SKBs_RX_Q: freed:%d\n", d->rx_skb_q.qlen); Loading @@ -1443,16 +1388,11 @@ void bam_data_disconnect(struct data_port *gr, enum function_type func, * Set endless flag to false as USB Endpoint * is already disable. */ if (d->trans == USB_GADGET_XPORT_BAM2BAM || d->trans == USB_GADGET_XPORT_BAM2BAM_IPA || d->trans == USB_GADGET_XPORT_BAM) { if (d->dst_pipe_type == USB_BAM_PIPE_BAM2BAM) port->port_usb->in->endless = false; if (d->src_pipe_type == USB_BAM_PIPE_BAM2BAM) port->port_usb->out->endless = false; } port->port_usb->in->driver_data = NULL; port->port_usb->out->driver_data = NULL; Loading @@ -1461,12 +1401,8 @@ void bam_data_disconnect(struct data_port *gr, enum function_type func, } } if (d->trans == USB_GADGET_XPORT_BAM2BAM_IPA) { port->last_event = U_BAM_DATA_DISCONNECT_E; queue_work(bam_data_wq, &port->disconnect_w); } else { usb_gadget_autopm_put_async(port->gadget); } spin_unlock_irqrestore(&port->port_lock, flags); } Loading @@ -1478,7 +1414,6 @@ int bam_data_connect(struct data_port *gr, enum transport_type trans, struct bam_data_ch_info *d; int ret, port_num; unsigned long flags; enum peer_bam bam_name; u8 src_connection_idx, dst_connection_idx; if (!gr) { Loading @@ -1492,16 +1427,18 @@ int bam_data_connect(struct data_port *gr, enum transport_type trans, return -EINVAL; } pr_debug("dev:%p port#%d\n", gr, port_num); if (trans != USB_GADGET_XPORT_BAM2BAM_IPA) { pr_err("invalid xport#%d\n", trans); return -EINVAL; } bam_name = (trans == USB_GADGET_XPORT_BAM2BAM_IPA) ? IPA_P_BAM : A2_P_BAM; pr_debug("dev:%p port#%d\n", gr, port_num); src_connection_idx = usb_bam_get_connection_idx(gr->cdev->gadget->name, bam_name, USB_TO_PEER_PERIPHERAL, USB_BAM_DEVICE, IPA_P_BAM, USB_TO_PEER_PERIPHERAL, USB_BAM_DEVICE, dev_port_num); dst_connection_idx = usb_bam_get_connection_idx(gr->cdev->gadget->name, bam_name, PEER_PERIPHERAL_TO_USB, USB_BAM_DEVICE, IPA_P_BAM, PEER_PERIPHERAL_TO_USB, USB_BAM_DEVICE, dev_port_num); if (src_connection_idx < 0 || dst_connection_idx < 0) { pr_err("%s: usb_bam_get_connection_idx failed\n", __func__); Loading Loading @@ -1536,7 +1473,6 @@ int bam_data_connect(struct data_port *gr, enum transport_type trans, } pr_debug("%s(): rx_buffer_size:%d\n", __func__, d->rx_buffer_size); if (trans == USB_GADGET_XPORT_BAM2BAM_IPA) { d->ipa_params.src_pipe = &(d->src_pipe_idx); d->ipa_params.dst_pipe = &(d->dst_pipe_idx); d->ipa_params.src_idx = src_connection_idx; Loading @@ -1558,7 +1494,6 @@ int bam_data_connect(struct data_port *gr, enum transport_type trans, ret = -EINVAL; goto exit; } } /* * Check for pipe_type. If it is BAM2BAM, then it is required Loading @@ -1567,16 +1502,11 @@ int bam_data_connect(struct data_port *gr, enum transport_type trans, * it which is considered into UDC driver while enabling * USB Endpoint. */ if (d->trans == USB_GADGET_XPORT_BAM2BAM || d->trans == USB_GADGET_XPORT_BAM2BAM_IPA || d->trans == USB_GADGET_XPORT_BAM) { if (d->dst_pipe_type == USB_BAM_PIPE_BAM2BAM) port->port_usb->in->endless = true; if (d->src_pipe_type == USB_BAM_PIPE_BAM2BAM) port->port_usb->out->endless = true; } ret = usb_ep_enable(gr->in); if (ret) { Loading @@ -1594,8 +1524,7 @@ int bam_data_connect(struct data_port *gr, enum transport_type trans, gr->out->driver_data = port; if (d->trans == USB_GADGET_XPORT_BAM2BAM_IPA && d->src_pipe_type == USB_BAM_PIPE_SYS2BAM) { if (d->src_pipe_type == USB_BAM_PIPE_SYS2BAM) { /* UL workaround requirements */ skb_queue_head_init(&d->rx_skb_q); Loading Loading @@ -1637,8 +1566,8 @@ int bam_data_connect(struct data_port *gr, enum transport_type trans, port->last_event = U_BAM_DATA_CONNECT_E; if (d->trans == USB_GADGET_XPORT_BAM2BAM_IPA && d->func_type == USB_FUNC_RNDIS) { /* Wait for host to enable flow_control */ if (d->func_type == USB_FUNC_RNDIS) { ret = 0; goto exit; } Loading Loading @@ -1802,17 +1731,7 @@ static void bam_data_start(void *param, enum usb_bam_pipe_dir dir) } else { if (gadget_is_dwc3(gadget) && msm_dwc3_reset_ep_after_lpm(gadget)) { u8 idx; idx = usb_bam_get_connection_idx(gadget->name, IPA_P_BAM, PEER_PERIPHERAL_TO_USB, USB_BAM_DEVICE, 0); if (idx < 0) { pr_err("%s: get_connection_idx failed\n", __func__); return; } configure_data_fifo(idx, configure_data_fifo(d->dst_connection_idx, port->port_usb->in, d->dst_pipe_type); } Loading Loading @@ -1970,7 +1889,6 @@ static void bam2bam_data_suspend_work(struct work_struct *w) goto exit; } if (d->trans == USB_GADGET_XPORT_BAM2BAM_IPA) { usb_bam_register_start_stop_cbs(d->dst_connection_idx, bam_data_start, bam_data_stop, port); Loading @@ -1983,7 +1901,6 @@ static void bam2bam_data_suspend_work(struct work_struct *w) spin_unlock_irqrestore(&port->port_lock, flags); usb_bam_suspend(&d->ipa_params); spin_lock_irqsave(&port->port_lock, flags); } exit: /* Loading Loading @@ -2042,7 +1959,6 @@ static void bam2bam_data_resume_work(struct work_struct *w) goto exit; } if (d->trans == USB_GADGET_XPORT_BAM2BAM_IPA) { /* * If usb_req was dequeued as part of bus suspend then * corresponding DBM IN and OUT EPs should also be reset. Loading @@ -2052,7 +1968,7 @@ static void bam2bam_data_resume_work(struct work_struct *w) if (gadget_is_dwc3(gadget) && msm_dwc3_reset_ep_after_lpm(gadget)) { if (d->tx_req_dequeued) { configure_usb_data_fifo(d->dst_bam_idx, configure_usb_data_fifo(d->dst_connection_idx, port->port_usb->in, d->dst_pipe_type); spin_unlock_irqrestore(&port->port_lock, flags); Loading @@ -2060,7 +1976,7 @@ static void bam2bam_data_resume_work(struct work_struct *w) spin_lock_irqsave(&port->port_lock, flags); } if (d->rx_req_dequeued) { configure_usb_data_fifo(d->src_bam_idx, configure_usb_data_fifo(d->src_connection_idx, port->port_usb->out, d->src_pipe_type); spin_unlock_irqrestore(&port->port_lock, flags); Loading @@ -2071,7 +1987,6 @@ static void bam2bam_data_resume_work(struct work_struct *w) d->tx_req_dequeued = false; d->rx_req_dequeued = false; usb_bam_resume(&d->ipa_params); } exit: spin_unlock_irqrestore(&port->port_lock, flags); } Loading