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

Commit 2b6cfb18 authored by Ajay Agarwal's avatar Ajay Agarwal Committed by Gerrit - the friendly Code Review server
Browse files

usb: gadget: f_gsi: Use HW accelerated EPs for RmNet V2X instance



When both RmNet LTE and V2X instances are enabled in a
composition, use hardware accelerated EPs for V2X instance and
normal EPs for LTE, and also set channel parameter flag
'is_sw_path' to true for LTE, so that IPA can ignore the dummy
address for GEVENTCOUNT register.

Change-Id: I6e194dbea4d8321c33501e8cab4f1f2f0817291f
Signed-off-by: default avatarAjay Agarwal <ajaya@codeaurora.org>
parent 22b54441
Loading
Loading
Loading
Loading
+29 −3
Original line number Original line Diff line number Diff line
@@ -535,6 +535,7 @@ static int ipa_connect_channels(struct gsi_data_port *d_port)
{
{
	int ret;
	int ret;
	struct f_gsi *gsi = d_port_to_gsi(d_port);
	struct f_gsi *gsi = d_port_to_gsi(d_port);
	struct f_gsi *gsi_rmnet_v2x = __gsi[USB_PROT_RMNET_V2X_IPA];
	struct ipa_usb_xdci_chan_params *in_params =
	struct ipa_usb_xdci_chan_params *in_params =
				&d_port->ipa_in_channel_params;
				&d_port->ipa_in_channel_params;
	struct ipa_usb_xdci_chan_params *out_params =
	struct ipa_usb_xdci_chan_params *out_params =
@@ -663,6 +664,23 @@ static int ipa_connect_channels(struct gsi_data_port *d_port)
			gsi_channel_info.depcmd_hi_addr;
			gsi_channel_info.depcmd_hi_addr;
	}
	}


	/*
	 * When both RmNet LTE and V2X instances are enabled in a composition,
	 * set 'is_sw_path' flag to true for LTE, so that IPA can ignore the
	 * dummy address for GEVENTCOUNT register.
	 */
	in_params->is_sw_path = false;
	if (gsi->prot_id == USB_PROT_RMNET_IPA &&
	    gsi_rmnet_v2x->function.fs_descriptors)
		in_params->is_sw_path = true;

	if (d_port->out_ep) {
		out_params->is_sw_path = false;
		if (gsi->prot_id == USB_PROT_RMNET_IPA &&
		    gsi_rmnet_v2x->function.fs_descriptors)
			out_params->is_sw_path = true;
	}

	/* Populate connection params */
	/* Populate connection params */
	conn_params->max_pkt_size =
	conn_params->max_pkt_size =
		(cdev->gadget->speed == USB_SPEED_SUPER) ?
		(cdev->gadget->speed == USB_SPEED_SUPER) ?
@@ -2415,6 +2433,7 @@ static int gsi_set_alt(struct usb_function *f, unsigned int intf,
						unsigned int alt)
						unsigned int alt)
{
{
	struct f_gsi	 *gsi = func_to_gsi(f);
	struct f_gsi	 *gsi = func_to_gsi(f);
	struct f_gsi	 *gsi_rmnet_v2x = __gsi[USB_PROT_RMNET_V2X_IPA];
	struct usb_composite_dev *cdev = f->config->cdev;
	struct usb_composite_dev *cdev = f->config->cdev;
	struct net_device	*net;
	struct net_device	*net;
	int ret;
	int ret;
@@ -2489,12 +2508,18 @@ static int gsi_set_alt(struct usb_function *f, unsigned int intf,
				goto notify_ep_disable;
				goto notify_ep_disable;
			}
			}


			/* Configure EPs for GSI */
			/*
			 * Configure EPs for GSI. Note that when both RmNet LTE
			 * and V2X instances are enabled in a composition,
			 * configure HW accelerated EPs for V2X instance and
			 * normal EPs for LTE.
			 */
			if (gsi->d_port.in_ep &&
			if (gsi->d_port.in_ep &&
				gsi->prot_id <= USB_PROT_RMNET_V2X_IPA) {
				gsi->prot_id <= USB_PROT_RMNET_V2X_IPA) {
				if (gsi->prot_id == USB_PROT_DIAG_IPA)
				if (gsi->prot_id == USB_PROT_DIAG_IPA)
					gsi->d_port.in_ep->ep_intr_num = 3;
					gsi->d_port.in_ep->ep_intr_num = 3;
				else if (gsi->prot_id == USB_PROT_RMNET_V2X_IPA)
				else if (gsi->prot_id == USB_PROT_RMNET_IPA &&
					 gsi_rmnet_v2x->function.fs_descriptors)
					gsi->d_port.in_ep->ep_intr_num = 0;
					gsi->d_port.in_ep->ep_intr_num = 0;
				else
				else
					gsi->d_port.in_ep->ep_intr_num = 2;
					gsi->d_port.in_ep->ep_intr_num = 2;
@@ -2505,7 +2530,8 @@ static int gsi_set_alt(struct usb_function *f, unsigned int intf,


			if (gsi->d_port.out_ep &&
			if (gsi->d_port.out_ep &&
				gsi->prot_id <= USB_PROT_RMNET_V2X_IPA) {
				gsi->prot_id <= USB_PROT_RMNET_V2X_IPA) {
				if (gsi->prot_id == USB_PROT_RMNET_V2X_IPA)
				if (gsi->prot_id == USB_PROT_RMNET_IPA &&
				    gsi_rmnet_v2x->function.fs_descriptors)
					gsi->d_port.out_ep->ep_intr_num = 0;
					gsi->d_port.out_ep->ep_intr_num = 0;
				else
				else
					gsi->d_port.out_ep->ep_intr_num = 1;
					gsi->d_port.out_ep->ep_intr_num = 1;