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

Commit 7b6935a9 authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "cnss2: Process TWT Indication message in event workqueue"

parents 08bfd862 d89df1ec
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -522,6 +522,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:
@@ -1672,6 +1676,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;
+2 −0
Original line number Diff line number Diff line
@@ -256,6 +256,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,
+34 −2
Original line number Diff line number Diff line
@@ -2115,6 +2115,17 @@ static int cnss_ims_wfc_call_twt_cfg_send_sync
	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,
@@ -2123,6 +2134,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");
@@ -2142,7 +2154,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[] = {
@@ -2855,6 +2871,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,
@@ -2864,6 +2891,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");
@@ -2882,7 +2910,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[] = {
+18 −0
Original line number Diff line number Diff line
@@ -61,6 +61,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);
@@ -191,6 +195,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)
{