diff --git a/wmi/inc/wmi_unified_api.h b/wmi/inc/wmi_unified_api.h index b1bd75a550..896821eccb 100644 --- a/wmi/inc/wmi_unified_api.h +++ b/wmi/inc/wmi_unified_api.h @@ -1288,6 +1288,19 @@ QDF_STATUS wmi_extract_fips_event_data(void *wmi_hdl, void *evt_buf, QDF_STATUS wmi_extract_vdev_start_resp(void *wmi_hdl, void *evt_buf, wmi_host_vdev_start_resp *vdev_rsp); +/** + * wmi_extract_vdev_delete_resp - api to extract vdev delete + * response event params + * @wmi_handle: wma handle + * @evt_buf: pointer to event buffer + * @delele_rsp: pointer to hold delete response from firmware + * + * Return: QDF_STATUS_SUCCESS for successful event parse + * else QDF_STATUS_E_INVAL or QDF_STATUS_E_FAILURE + */ +QDF_STATUS wmi_extract_vdev_delete_resp(void *wmi_hdl, void *evt_buf, + struct wmi_host_vdev_delete_resp *delele_rsp); + QDF_STATUS wmi_extract_tbttoffset_update_params(void *wmi_hdl, void *evt_buf, uint8_t idx, struct tbttoffset_params *tbtt_param); diff --git a/wmi/inc/wmi_unified_param.h b/wmi/inc/wmi_unified_param.h index b1b40b60b2..e400b26135 100644 --- a/wmi/inc/wmi_unified_param.h +++ b/wmi/inc/wmi_unified_param.h @@ -6153,6 +6153,14 @@ typedef struct { uint32_t cfgd_rx_streams; } wmi_host_vdev_start_resp; +/** + * struct wmi_host_vdev_delete_resp - VDEV delete response + * @vdev_id: vdev id + */ +struct wmi_host_vdev_delete_resp { + uint32_t vdev_id; +}; + /** * struct wmi_host_roam_event - host roam event param * @vdev_id: vdev id diff --git a/wmi/inc/wmi_unified_priv.h b/wmi/inc/wmi_unified_priv.h index 52d739cff0..0d60297bbf 100644 --- a/wmi/inc/wmi_unified_priv.h +++ b/wmi/inc/wmi_unified_priv.h @@ -1099,6 +1099,9 @@ QDF_STATUS (*extract_fips_event_data)(wmi_unified_t wmi_handle, QDF_STATUS (*extract_vdev_start_resp)(wmi_unified_t wmi_handle, void *evt_buf, wmi_host_vdev_start_resp *vdev_rsp); +QDF_STATUS (*extract_vdev_delete_resp)(wmi_unified_t wmi_handle, void *evt_buf, + struct wmi_host_vdev_delete_resp *delete_rsp); + QDF_STATUS (*extract_tbttoffset_update_params)(void *wmi_hdl, void *evt_buf, uint8_t idx, struct tbttoffset_params *tbtt_param); diff --git a/wmi/src/wmi_unified_api.c b/wmi/src/wmi_unified_api.c index c9f86cb9b0..06a8aa9e3a 100644 --- a/wmi/src/wmi_unified_api.c +++ b/wmi/src/wmi_unified_api.c @@ -5241,6 +5241,27 @@ QDF_STATUS wmi_extract_vdev_start_resp(void *wmi_hdl, void *evt_buf, return QDF_STATUS_E_FAILURE; } +/** + * wmi_extract_vdev_delete_resp() - extract vdev delete response + * @wmi_handle: wmi handle + * @param evt_buf: pointer to event buffer + * @param delete_rsp: Pointer to hold vdev delete response + * + * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure + */ +QDF_STATUS wmi_extract_vdev_delete_resp(void *wmi_hdl, void *evt_buf, + struct wmi_host_vdev_delete_resp *delete_rsp) +{ + wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; + + if (wmi_handle->ops->extract_vdev_delete_resp) + return wmi_handle->ops->extract_vdev_delete_resp(wmi_handle, + evt_buf, delete_rsp); + + return QDF_STATUS_E_FAILURE; +} + + /** * wmi_extract_tbttoffset_num_vdevs() - extract tbtt offset num vdev * @wmi_handle: wmi handle diff --git a/wmi/src/wmi_unified_tlv.c b/wmi/src/wmi_unified_tlv.c index 07a94e1b9d..b9c081696f 100644 --- a/wmi/src/wmi_unified_tlv.c +++ b/wmi/src/wmi_unified_tlv.c @@ -16950,6 +16950,39 @@ static QDF_STATUS extract_vdev_start_resp_tlv(wmi_unified_t wmi_handle, return QDF_STATUS_SUCCESS; } +/** + * extract_vdev_delete_resp_tlv() - extract vdev delete response + * @wmi_handle: wmi handle + * @param evt_buf: pointer to event buffer + * @param delete_rsp: Pointer to hold vdev delete response + * + * Return: QDF_STATUS_SUCCESS for success or error code + */ +static QDF_STATUS extract_vdev_delete_resp_tlv(wmi_unified_t wmi_handle, + void *evt_buf, struct wmi_host_vdev_delete_resp *delete_rsp) +{ + WMI_VDEV_DELETE_RESP_EVENTID_param_tlvs *param_buf; + wmi_vdev_delete_resp_event_fixed_param *ev; + + param_buf = (WMI_VDEV_DELETE_RESP_EVENTID_param_tlvs *) evt_buf; + if (!param_buf) { + WMI_LOGE("Invalid vdev delete response event buffer\n"); + return QDF_STATUS_E_INVAL; + } + + ev = param_buf->fixed_param; + if (!ev) { + WMI_LOGE("Invalid vdev delete response event\n"); + return QDF_STATUS_E_INVAL; + } + + qdf_mem_zero(delete_rsp, sizeof(*delete_rsp)); + delete_rsp->vdev_id = ev->vdev_id; + + return QDF_STATUS_SUCCESS; +} + + /** * extract_tbttoffset_num_vdevs_tlv() - extract tbtt offset num vdev * @wmi_handle: wmi handle @@ -20282,6 +20315,7 @@ struct wmi_ops tlv_ops = { .extract_ready_event_params = extract_ready_event_params_tlv, .extract_dbglog_data_len = extract_dbglog_data_len_tlv, .extract_vdev_start_resp = extract_vdev_start_resp_tlv, + .extract_vdev_delete_resp = extract_vdev_delete_resp_tlv, .extract_tbttoffset_update_params = extract_tbttoffset_update_params_tlv, .extract_ext_tbttoffset_update_params =