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

Commit 0d093720 authored by Subash Abhinov Kasiviswanathan's avatar Subash Abhinov Kasiviswanathan Committed by Gerrit - the friendly Code Review server
Browse files

soc: qcom: wda: Conditionally register for dl marker



dl marker is enabled always if the power collapse feature
is enabled. However, dl marker may not be required in certain
configurations.

CRs-fixed: 2560817
Change-Id: I3a251a3bf8cbab4434e2aa055783b4a3c3d1103a
Signed-off-by: default avatarSubash Abhinov Kasiviswanathan <subashab@codeaurora.org>
parent 0f89595e
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -711,6 +711,17 @@ struct net_device *rmnet_get_real_dev(void *port)
}
EXPORT_SYMBOL(rmnet_get_real_dev);

int rmnet_get_dlmarker_info(void *port)
{
	if (!port)
		return 0;

	return ((struct rmnet_port *)port)->data_format &
		(RMNET_INGRESS_FORMAT_DL_MARKER_V1 |
		RMNET_INGRESS_FORMAT_DL_MARKER_V2);
}
EXPORT_SYMBOL(rmnet_get_dlmarker_info);

#endif

/* Startup/Shutdown */
+20 −5
Original line number Diff line number Diff line
@@ -250,7 +250,8 @@ static int wda_set_powersave_mode_req(void *wda_data, uint8_t enable)
	return ret;
}

static int wda_set_powersave_config_req(struct qmi_handle *wda_handle)
static int wda_set_powersave_config_req(struct qmi_handle *wda_handle,
					int dl_marker)
{
	struct wda_qmi_data *data = container_of(wda_handle,
						 struct wda_qmi_data, handle);
@@ -280,7 +281,8 @@ static int wda_set_powersave_config_req(struct qmi_handle *wda_handle)
	req->ep_id.ep_type = data->svc.ep_type;
	req->ep_id.iface_id = data->svc.iface_id;
	req->req_data_cfg_valid = 1;
	req->req_data_cfg = WDA_DATA_POWERSAVE_CONFIG_ALL_MASK_V01;
	req->req_data_cfg = dl_marker ? WDA_DATA_POWERSAVE_CONFIG_ALL_MASK_V01 :
					WDA_DATA_POWERSAVE_CONFIG_FLOW_CTL_V01;
	ret = qmi_send_request(wda_handle, &data->ssctl, &txn,
			QMI_WDA_SET_POWERSAVE_CONFIG_REQ_V01,
			QMI_WDA_SET_POWERSAVE_CONFIG_REQ_V01_MAX_MSG_LEN,
@@ -312,11 +314,22 @@ static void wda_svc_config(struct work_struct *work)
	struct wda_qmi_data *data = container_of(work, struct wda_qmi_data,
						 svc_arrive);
	struct qmi_info *qmi;
	int rc;
	int rc, dl_marker = 0;

	while (!rtnl_trylock()) {
		if (!data->restart_state)
			cond_resched();
		else
			return;
	}

	dl_marker = rmnet_get_dlmarker_info(data->rmnet_port);
	rtnl_unlock();

	if (data->restart_state == 1)
		return;
	rc = wda_set_powersave_config_req(&data->handle);

	rc = wda_set_powersave_config_req(&data->handle, dl_marker);
	if (rc < 0) {
		pr_err("%s Failed to init service, err[%d]\n", __func__, rc);
		return;
@@ -330,6 +343,7 @@ static void wda_svc_config(struct work_struct *work)
		else
			return;
	}

	qmi = (struct qmi_info *)rmnet_get_qmi_pt(data->rmnet_port);
	if (!qmi) {
		rtnl_unlock();
@@ -344,7 +358,8 @@ static void wda_svc_config(struct work_struct *work)

	rtnl_unlock();

	pr_info("Connection established with the WDA Service\n");
	pr_info("Connection established with the WDA Service, DL Marker %s\n",
		dl_marker ? "enabled" : "disabled");
}

static int wda_svc_arrive(struct qmi_handle *qmi, struct qmi_service *svc)
+6 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ void rmnet_clear_powersave_format(void *port);
void rmnet_get_packets(void *port, u64 *rx, u64 *tx);
int rmnet_get_powersave_notif(void *port);
struct net_device *rmnet_get_real_dev(void *port);
int rmnet_get_dlmarker_info(void *port);
#else
static inline void *rmnet_get_qmi_pt(void *port)
{
@@ -81,5 +82,10 @@ static inline struct net_device *rmnet_get_real_dev(void *port)
{
	return NULL;
}

static inline int rmnet_get_dlmarker_info(void *port)
{
	return 0;
}
#endif /* CONFIG_QCOM_QMI_RMNET */
#endif /*_RMNET_QMI_H*/