Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1a49109d authored by Manu Gautam's avatar Manu Gautam
Browse files

usb: gadget: Drop support for USB_GADGET_XPORT_BAM2BAM xport



USB_GADGET_XPORT_BAM2BAM was used for A2 <-> USB bam2bam
connections. As this path is no longer supported, drop the dead
code.

Change-Id: Iab030caee7adb46e2bf7e56f3ecf0ef84e2be953
Signed-off-by: default avatarManu Gautam <mgautam@codeaurora.org>
parent 4eca77f0
Loading
Loading
Loading
Loading
+24 −23
Original line number Diff line number Diff line
@@ -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 */
@@ -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);
+0 −16
Original line number Diff line number Diff line
@@ -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);
@@ -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;
@@ -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);
@@ -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);
+125 −155
Original line number Diff line number Diff line
@@ -1331,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;

	/*
@@ -1465,7 +1450,6 @@ static void gbam2bam_connect_work(struct work_struct *w)
				    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 ,
@@ -1502,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
@@ -1990,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);
@@ -2053,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;
@@ -2067,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);
}
@@ -2099,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;
@@ -2149,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);
@@ -2174,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
@@ -2183,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;

@@ -2339,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];
@@ -2368,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];
+272 −324
Original line number Diff line number Diff line
@@ -784,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;
@@ -832,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)
{
@@ -888,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;
@@ -1102,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;
@@ -1364,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) {

@@ -1395,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);
@@ -1420,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;
@@ -1438,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);
}
@@ -1455,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) {
@@ -1469,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__);
@@ -1513,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;
@@ -1535,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
@@ -1544,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) {
@@ -1571,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);
@@ -1614,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;
	}
@@ -1937,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);
@@ -1950,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:
	/*
@@ -2009,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.
@@ -2038,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);
}