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: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>
This commit is contained in:
Subash Abhinov Kasiviswanathan 2019-11-20 21:08:24 -07:00 committed by Gerrit - the friendly Code Review server
parent 0f89595e8d
commit 0d09372008
3 changed files with 37 additions and 5 deletions

View File

@ -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 */

View File

@ -250,7 +250,8 @@ out:
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)

View File

@ -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*/