mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-13 16:16:15 -04:00
cnss2: Process TWT Indication message in event workqueue
Since TWT indication messages requires QMI message forwarding between IMS and WLFW, update platform driver for processing the QMI indication in event workqueue. Change-Id: I9fdb09a16ebcdc352e0354beae156658a32fdf99 Signed-off-by: Manikandan Mohan <manikand@codeaurora.org>
This commit is contained in:
parent
da2e3647bf
commit
d89df1ecf1
4 changed files with 66 additions and 2 deletions
|
|
@ -487,6 +487,10 @@ static char *cnss_driver_event_to_str(enum cnss_driver_event_type type)
|
|||
return "IDLE_RESTART";
|
||||
case CNSS_DRIVER_EVENT_IDLE_SHUTDOWN:
|
||||
return "IDLE_SHUTDOWN";
|
||||
case CNSS_DRIVER_EVENT_IMS_WFC_CALL_IND:
|
||||
return "IMS_WFC_CALL_IND";
|
||||
case CNSS_DRIVER_EVENT_WLFW_TWT_CFG_IND:
|
||||
return "WLFW_TWC_CFG_IND";
|
||||
case CNSS_DRIVER_EVENT_QDSS_TRACE_REQ_MEM:
|
||||
return "QDSS_TRACE_REQ_MEM";
|
||||
case CNSS_DRIVER_EVENT_QDSS_TRACE_SAVE:
|
||||
|
|
@ -1627,6 +1631,14 @@ static void cnss_driver_event_work(struct work_struct *work)
|
|||
case CNSS_DRIVER_EVENT_POWER_DOWN:
|
||||
ret = cnss_power_down_hdlr(plat_priv);
|
||||
break;
|
||||
case CNSS_DRIVER_EVENT_IMS_WFC_CALL_IND:
|
||||
ret = cnss_process_wfc_call_ind_event(plat_priv,
|
||||
event->data);
|
||||
break;
|
||||
case CNSS_DRIVER_EVENT_WLFW_TWT_CFG_IND:
|
||||
ret = cnss_process_twt_cfg_ind_event(plat_priv,
|
||||
event->data);
|
||||
break;
|
||||
case CNSS_DRIVER_EVENT_QDSS_TRACE_REQ_MEM:
|
||||
ret = cnss_qdss_trace_req_mem_hdlr(plat_priv);
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -255,6 +255,8 @@ enum cnss_driver_event_type {
|
|||
CNSS_DRIVER_EVENT_POWER_DOWN,
|
||||
CNSS_DRIVER_EVENT_IDLE_RESTART,
|
||||
CNSS_DRIVER_EVENT_IDLE_SHUTDOWN,
|
||||
CNSS_DRIVER_EVENT_IMS_WFC_CALL_IND,
|
||||
CNSS_DRIVER_EVENT_WLFW_TWT_CFG_IND,
|
||||
CNSS_DRIVER_EVENT_QDSS_TRACE_REQ_MEM,
|
||||
CNSS_DRIVER_EVENT_QDSS_TRACE_SAVE,
|
||||
CNSS_DRIVER_EVENT_QDSS_TRACE_FREE,
|
||||
|
|
|
|||
|
|
@ -2189,6 +2189,17 @@ out:
|
|||
return ret;
|
||||
}
|
||||
|
||||
int cnss_process_twt_cfg_ind_event(struct cnss_plat_data *plat_priv,
|
||||
void *data)
|
||||
{
|
||||
int ret;
|
||||
struct wlfw_wfc_call_twt_config_ind_msg_v01 *ind_msg = data;
|
||||
|
||||
ret = cnss_ims_wfc_call_twt_cfg_send_sync(plat_priv, ind_msg);
|
||||
kfree(data);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void cnss_wlfw_process_twt_cfg_ind(struct qmi_handle *qmi_wlfw,
|
||||
struct sockaddr_qrtr *sq,
|
||||
struct qmi_txn *txn,
|
||||
|
|
@ -2197,6 +2208,7 @@ static void cnss_wlfw_process_twt_cfg_ind(struct qmi_handle *qmi_wlfw,
|
|||
struct cnss_plat_data *plat_priv =
|
||||
container_of(qmi_wlfw, struct cnss_plat_data, qmi_wlfw);
|
||||
const struct wlfw_wfc_call_twt_config_ind_msg_v01 *ind_msg = data;
|
||||
struct wlfw_wfc_call_twt_config_ind_msg_v01 *event_data;
|
||||
|
||||
if (!txn) {
|
||||
cnss_pr_err("FW->CNSS: TWT_CFG_IND: Spurious indication\n");
|
||||
|
|
@ -2216,7 +2228,11 @@ static void cnss_wlfw_process_twt_cfg_ind(struct qmi_handle *qmi_wlfw,
|
|||
ind_msg->twt_sta_config_changed_valid,
|
||||
ind_msg->twt_sta_config_changed);
|
||||
|
||||
cnss_ims_wfc_call_twt_cfg_send_sync(plat_priv, ind_msg);
|
||||
event_data = kmemdup(ind_msg, sizeof(*event_data), GFP_KERNEL);
|
||||
if (!event_data)
|
||||
return;
|
||||
cnss_driver_event_post(plat_priv, CNSS_DRIVER_EVENT_WLFW_TWT_CFG_IND, 0,
|
||||
event_data);
|
||||
}
|
||||
|
||||
static struct qmi_msg_handler qmi_wlfw_msg_handlers[] = {
|
||||
|
|
@ -2753,6 +2769,17 @@ static void ims_subscribe_for_indication_resp_cb(struct qmi_handle *qmi,
|
|||
}
|
||||
}
|
||||
|
||||
int cnss_process_wfc_call_ind_event(struct cnss_plat_data *plat_priv,
|
||||
void *data)
|
||||
{
|
||||
int ret;
|
||||
struct ims_private_service_wfc_call_status_ind_msg_v01 *ind_msg = data;
|
||||
|
||||
ret = cnss_wlfw_wfc_call_status_send_sync(plat_priv, ind_msg);
|
||||
kfree(data);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void
|
||||
cnss_ims_process_wfc_call_ind_cb(struct qmi_handle *ims_qmi,
|
||||
struct sockaddr_qrtr *sq,
|
||||
|
|
@ -2762,6 +2789,7 @@ cnss_ims_process_wfc_call_ind_cb(struct qmi_handle *ims_qmi,
|
|||
container_of(ims_qmi, struct cnss_plat_data, ims_qmi);
|
||||
const
|
||||
struct ims_private_service_wfc_call_status_ind_msg_v01 *ind_msg = data;
|
||||
struct ims_private_service_wfc_call_status_ind_msg_v01 *event_data;
|
||||
|
||||
if (!txn) {
|
||||
cnss_pr_err("IMS->CNSS: WFC_CALL_IND: Spurious indication\n");
|
||||
|
|
@ -2780,7 +2808,11 @@ cnss_ims_process_wfc_call_ind_cb(struct qmi_handle *ims_qmi,
|
|||
ind_msg->twt_ims_int_valid, ind_msg->twt_ims_int,
|
||||
ind_msg->media_quality_valid, ind_msg->media_quality);
|
||||
|
||||
cnss_wlfw_wfc_call_status_send_sync(plat_priv, ind_msg);
|
||||
event_data = kmemdup(ind_msg, sizeof(*event_data), GFP_KERNEL);
|
||||
if (!event_data)
|
||||
return;
|
||||
cnss_driver_event_post(plat_priv, CNSS_DRIVER_EVENT_IMS_WFC_CALL_IND,
|
||||
0, event_data);
|
||||
}
|
||||
|
||||
static struct qmi_msg_handler qmi_ims_msg_handlers[] = {
|
||||
|
|
|
|||
|
|
@ -60,6 +60,10 @@ int cnss_wlfw_antenna_grant_send_sync(struct cnss_plat_data *plat_priv);
|
|||
int cnss_wlfw_dynamic_feature_mask_send_sync(struct cnss_plat_data *plat_priv);
|
||||
int cnss_wlfw_get_info_send_sync(struct cnss_plat_data *plat_priv, int type,
|
||||
void *cmd, int cmd_len);
|
||||
int cnss_process_wfc_call_ind_event(struct cnss_plat_data *plat_priv,
|
||||
void *data);
|
||||
int cnss_process_twt_cfg_ind_event(struct cnss_plat_data *plat_priv,
|
||||
void *data);
|
||||
int cnss_register_coex_service(struct cnss_plat_data *plat_priv);
|
||||
void cnss_unregister_coex_service(struct cnss_plat_data *plat_priv);
|
||||
int coex_antenna_switch_to_wlan_send_sync_msg(struct cnss_plat_data *plat_priv);
|
||||
|
|
@ -183,6 +187,20 @@ int cnss_wlfw_get_info_send_sync(struct cnss_plat_data *plat_priv, int type,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static inline
|
||||
int cnss_process_wfc_call_ind_event(struct cnss_plat_data *plat_priv,
|
||||
void *data)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline
|
||||
int cnss_process_twt_cfg_ind_event(struct cnss_plat_data *plat_priv,
|
||||
void *data)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline
|
||||
int cnss_register_coex_service(struct cnss_plat_data *plat_priv)
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in a new issue