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

Commit 3571c145 authored by Manu Gautam's avatar Manu Gautam Committed by Gerrit - the friendly Code Review server
Browse files

USB: gadget: Replace USB_GADGET_XPORT_BAM with BAM2BAM/BAM_DMUX



USB_GADGET_XPORT_BAM was historically used for BAM_DMUX mode but
later QDSS started using it for BAM2BAM between USB and QDSS.
In fact there is another transport type - USB_GADGET_XPORT_BAM2BAM
which is exactly for this and used for A2 <--> USB BAM2BAM mode.
This further gets complicated with the addition of new transport
type - USB_GADGET_XPORT_BAM_DMUX and userspace specifying bam and
bam_dmux xport_type with QDSS for bam2bam and bam_dmux mode (DPL)
but it passes bam as rmnet xport_type for bam_dmux.
Part one of cleanup involves this patch which replaces usage of
USB_GADGET_XPORT_BAM with USB_GADGET_XPORT_BAM2BAM or
USB_GADGET_XPORT_BAM_DMUX (over-ride for rmnet) in the drivers.
Part two will update userspace code to pass bam_dmux as rmnet
xport_type instead of bam and explicit bam2bam for qdss xport_type.
Until this happens override bam xport to bam_dmux/bam2bam for rmnet
and qdss to maintain userspace ABI compatibility.

Change-Id: Iee896b6ed9e08321f29561c56a2c647472da5647
Signed-off-by: default avatarManu Gautam <mgautam@codeaurora.org>
Signed-off-by: default avatarTarun Gupta <tarung@codeaurora.org>
parent c6079f4e
Loading
Loading
Loading
Loading
+11 −7
Original line number Diff line number Diff line
@@ -1143,7 +1143,7 @@ static int mbim_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
			 * disconnect
			 */
			switch (mbim->xport) {
			case USB_GADGET_XPORT_BAM:
			case USB_GADGET_XPORT_BAM_DMUX:
				gbam_mbim_disconnect();
				break;
			case USB_GADGET_XPORT_BAM2BAM_IPA:
@@ -1197,7 +1197,7 @@ static int mbim_set_alt(struct usb_function *f, unsigned intf, unsigned alt)

		pr_debug("Activate mbim\n");
		switch (mbim->xport) {
		case USB_GADGET_XPORT_BAM:
		case USB_GADGET_XPORT_BAM_DMUX:
			gbam_mbim_connect(cdev->gadget, mbim->bam_port.in,
						mbim->bam_port.out);
			break;
@@ -1284,7 +1284,7 @@ static void mbim_disable(struct usb_function *f)
	}

	switch (mbim->xport) {
	case USB_GADGET_XPORT_BAM:
	case USB_GADGET_XPORT_BAM_DMUX:
		gbam_mbim_disconnect();
		break;
	case USB_GADGET_XPORT_BAM2BAM_IPA:
@@ -1315,7 +1315,7 @@ static void mbim_suspend(struct usb_function *f)
	pr_debug("%s(): remote_wakeup:%d\n:", __func__,
			mbim->cdev->gadget->remote_wakeup);

	if (mbim->xport == USB_GADGET_XPORT_BAM)
	if (mbim->xport == USB_GADGET_XPORT_BAM_DMUX)
		return;

	/* If the function is in Function Suspend state, avoid suspending the
@@ -1350,7 +1350,7 @@ static void mbim_resume(struct usb_function *f)

	pr_info("mbim resumed\n");

	if (mbim->xport == USB_GADGET_XPORT_BAM)
	if (mbim->xport == USB_GADGET_XPORT_BAM_DMUX)
		return;

	/*
@@ -1660,7 +1660,11 @@ int mbim_bind_config(struct usb_configuration *c, unsigned portno,

	mbim->xport = str_to_xport(xport_name);
	switch (mbim->xport) {
	case USB_GADGET_XPORT_BAM:
	case USB_GADGET_XPORT_BAM2BAM:
		/* Override BAM2BAM to BAM_DMUX for old ABI compatibility */
		mbim->xport = USB_GADGET_XPORT_BAM_DMUX;
		/* fall-through */
	case USB_GADGET_XPORT_BAM_DMUX:
		status = gbam_mbim_setup();
		if (status)
			break;
@@ -1995,7 +1999,7 @@ static long mbim_ioctl(struct file *fp, unsigned cmd, unsigned long arg)
		}

		switch (mbim->xport) {
		case USB_GADGET_XPORT_BAM:
		case USB_GADGET_XPORT_BAM_DMUX:
			/*
			 * Rmnet and MBIM share the same BAM-DMUX channel.
			 * This channel number 8 should be in sync with
+7 −7
Original line number Diff line number Diff line
@@ -512,7 +512,7 @@ static void usb_qdss_disconnect_work(struct work_struct *work)
		gqti_ctrl_disconnect(&qdss->port, DPL_QTI_CTRL_PORT_NO);

	switch (dxport) {
	case USB_GADGET_XPORT_BAM:
	case USB_GADGET_XPORT_BAM2BAM:
		/*
		 * Uninitialized init data i.e. ep specific operation.
		 * Notify qdss to cancel all active transfers.
@@ -543,7 +543,7 @@ static void usb_qdss_disconnect_work(struct work_struct *work)
		break;
	case USB_GADGET_XPORT_BAM_DMUX:
		gbam_disconnect(&qdss_ports[qdss->port_num].bam_dmux_port,
				portno, USB_GADGET_XPORT_BAM);
				portno, USB_GADGET_XPORT_BAM_DMUX);
		break;
	case USB_GADGET_XPORT_HSIC:
		pr_debug("usb_qdss_disconnect_work: HSIC transport\n");
@@ -696,7 +696,7 @@ static void usb_qdss_connect_work(struct work_struct *work)
	}

	switch (dxport) {
	case USB_GADGET_XPORT_BAM:
	case USB_GADGET_XPORT_BAM2BAM:
		status = init_data(qdss->port.data);
		if (status) {
			pr_err("init_data error");
@@ -736,7 +736,7 @@ static void usb_qdss_connect_work(struct work_struct *work)
		qdss_ports[qdss->port_num].bam_dmux_port.in =
						qdss->port.data;
		status = gbam_connect(&qdss_ports[qdss->port_num].bam_dmux_port,
				port_num, USB_GADGET_XPORT_BAM, 0, 0);
				port_num, USB_GADGET_XPORT_BAM_DMUX, 0, 0);
		if (status)
			pr_err("BAM_DMUX connect failed with %d\n", status);
		break;
@@ -891,7 +891,7 @@ static int qdss_bind_config(struct usb_configuration *c, unsigned char portno)
		}
	}

	if (qdss_ports[portno].data_xport == USB_GADGET_XPORT_BAM)
	if (qdss_ports[portno].data_xport == USB_GADGET_XPORT_BAM2BAM)
		name = kasprintf(GFP_ATOMIC, "qdss");
	else
		name = kasprintf(GFP_ATOMIC, "qdss%d", portno);
@@ -1218,10 +1218,10 @@ static int qdss_init_port(const char *ctrl_name, const char *data_name,
	}

	switch (qdss_port->data_xport) {
	case USB_GADGET_XPORT_BAM:
	case USB_GADGET_XPORT_BAM2BAM:
		qdss_port->data_xport_num = no_data_bam_ports;
		no_data_bam_ports++;
		pr_debug("USB_GADGET_XPORT_BAM %d\n", no_data_bam_ports);
		pr_debug("USB_GADGET_XPORT_BAM2BAM %d\n", no_data_bam_ports);
		break;
	case USB_GADGET_XPORT_BAM2BAM_IPA:
		qdss_port->data_xport_num = no_ipa_ports;
+9 −6
Original line number Diff line number Diff line
@@ -424,7 +424,7 @@ 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_BAM:
	case USB_GADGET_XPORT_BAM_DMUX:
		ret = gbam_connect(&dev->port, port_num,
			dxport, src_connection_idx, dst_connection_idx);
		if (ret) {
@@ -528,7 +528,7 @@ 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_BAM_DMUX:
	case USB_GADGET_XPORT_BAM2BAM_IPA:
		gbam_disconnect(&dev->port, port_num, dxport);
		break;
@@ -605,7 +605,7 @@ static void frmnet_suspend(struct usb_function *f)

	port_num = rmnet_ports[dev->port_num].data_xport_num;
	switch (dxport) {
	case USB_GADGET_XPORT_BAM:
	case USB_GADGET_XPORT_BAM_DMUX:
		break;
	case USB_GADGET_XPORT_BAM2BAM_IPA:
		if (remote_wakeup_allowed) {
@@ -659,7 +659,7 @@ static void frmnet_resume(struct usb_function *f)

	port_num = rmnet_ports[dev->port_num].data_xport_num;
	switch (dxport) {
	case USB_GADGET_XPORT_BAM:
	case USB_GADGET_XPORT_BAM_DMUX:
		break;
	case USB_GADGET_XPORT_BAM2BAM_IPA:
		if (remote_wakeup_allowed) {
@@ -1430,11 +1430,14 @@ static int frmnet_init_port(const char *ctrl_name, const char *data_name,
	}

	switch (rmnet_port->data_xport) {
	case USB_GADGET_XPORT_BAM:
	case USB_GADGET_XPORT_BAM2BAM:
		/* Override BAM2BAM to BAM_DMUX for old ABI compatibility */
		rmnet_port->data_xport = USB_GADGET_XPORT_BAM_DMUX;
		/* fall-through */
	case USB_GADGET_XPORT_BAM_DMUX:
		rmnet_port->data_xport_num = no_data_bam_ports;
		no_data_bam_ports++;
		break;
	case USB_GADGET_XPORT_BAM2BAM:
	case USB_GADGET_XPORT_BAM2BAM_IPA:
		rmnet_port->data_xport_num = no_data_bam2bam_ports;
		no_data_bam2bam_ports++;
+9 −9
Original line number Diff line number Diff line
@@ -1961,7 +1961,7 @@ void gbam_disconnect(struct grmnet *gr, u8 port_num, enum transport_type trans)
		pr_err("%s: invalid xport#%d\n", __func__, trans);
		return;
	}
	if (trans == USB_GADGET_XPORT_BAM &&
	if (trans == USB_GADGET_XPORT_BAM_DMUX &&
		port_num >= n_bam_ports) {
		pr_err("%s: invalid bam portno#%d\n",
			   __func__, port_num);
@@ -1979,7 +1979,7 @@ void gbam_disconnect(struct grmnet *gr, u8 port_num, enum transport_type trans)
		pr_err("%s: grmnet port is null\n", __func__);
		return;
	}
	if (trans == USB_GADGET_XPORT_BAM)
	if (trans == USB_GADGET_XPORT_BAM_DMUX)
		port = bam_ports[port_num].port;
	else
		port = bam2bam_ports[port_num];
@@ -2009,7 +2009,7 @@ void gbam_disconnect(struct grmnet *gr, u8 port_num, enum transport_type trans)

	port->port_usb = gr;

	if (trans == USB_GADGET_XPORT_BAM)
	if (trans == USB_GADGET_XPORT_BAM_DMUX)
		gbam_free_buffers(port);
	else if (trans == USB_GADGET_XPORT_BAM2BAM_IPA)
		gbam_free_rx_buffers(port);
@@ -2100,7 +2100,7 @@ int gbam_connect(struct grmnet *gr, u8 port_num,
		return -EINVAL;
	}

	if (trans == USB_GADGET_XPORT_BAM && port_num >= n_bam_ports) {
	if (trans == USB_GADGET_XPORT_BAM_DMUX && port_num >= n_bam_ports) {
		pr_err("%s: invalid portno#%d\n", __func__, port_num);
		return -ENODEV;
	}
@@ -2111,7 +2111,7 @@ int gbam_connect(struct grmnet *gr, u8 port_num,
		return -ENODEV;
	}

	if (trans == USB_GADGET_XPORT_BAM)
	if (trans == USB_GADGET_XPORT_BAM_DMUX)
		port = bam_ports[port_num].port;
	else
		port = bam2bam_ports[port_num];
@@ -2167,7 +2167,7 @@ int gbam_connect(struct grmnet *gr, u8 port_num,
		d->tx_req->no_interrupt = 1;
	}

	if (d->trans == USB_GADGET_XPORT_BAM) {
	if (d->trans == USB_GADGET_XPORT_BAM_DMUX) {
		d->to_host = 0;
		d->to_modem = 0;
		d->pending_pkts_with_bam = 0;
@@ -2437,7 +2437,7 @@ int gbam_mbim_connect(struct usb_gadget *g, struct usb_ep *in,
	gr->out = out;
	gr->gadget = g;

	return gbam_connect(gr, 0, USB_GADGET_XPORT_BAM, 0, 0);
	return gbam_connect(gr, 0, USB_GADGET_XPORT_BAM_DMUX, 0, 0);
}

void gbam_mbim_disconnect(void)
@@ -2450,7 +2450,7 @@ void gbam_mbim_disconnect(void)
		return;
	}

	gbam_disconnect(gr, 0, USB_GADGET_XPORT_BAM);
	gbam_disconnect(gr, 0, USB_GADGET_XPORT_BAM_DMUX);
	kfree(gr);
}

@@ -2459,7 +2459,7 @@ int gbam_mbim_setup(void)
	int ret = 0;

	/*
	 * MBIM requires only 1 USB_GADGET_XPORT_BAM
	 * MBIM requires only 1 USB_GADGET_XPORT_BAM_DMUX
	 * port. The port is always 0 and is shared
	 * between RMNET and MBIM.
	 */
+1 −2
Original line number Diff line number Diff line
@@ -199,8 +199,7 @@ int gqti_ctrl_connect(void *gr, u8 port_num, unsigned intf,

	spin_lock_irqsave(&port->lock, flags);
	port->gtype = gtype;
	if (dxport == USB_GADGET_XPORT_BAM ||
			dxport == USB_GADGET_XPORT_BAM_DMUX) {
	if (dxport == USB_GADGET_XPORT_BAM_DMUX) {
		/*
		 * BAM-DMUX data transport is used for RMNET and DPL
		 * on some targets where IPA is not available.
Loading