diff --git a/wmi/inc/wmi_unified_api.h b/wmi/inc/wmi_unified_api.h index 4c42859627..b3877e0384 100644 --- a/wmi/inc/wmi_unified_api.h +++ b/wmi/inc/wmi_unified_api.h @@ -4291,4 +4291,15 @@ QDF_STATUS wmi_unified_send_set_tpc_power_cmd(wmi_unified_t wmi_handle, uint8_t vdev_id, struct reg_tpc_power_info *param); +/** + * wmi_extract_dpd_status_ev_param() - extract dpd status from FW event + * @wmi_handle: wmi handle + * @evt_buf: pointer to event buf + * @param: dpd status info + * + * Return: QDF_STATUS_SUCCESS for success or error code + */ +QDF_STATUS wmi_extract_dpd_status_ev_param(wmi_unified_t wmi_handle, + void *evt_buf, + struct wmi_host_pdev_get_dpd_status_event *param); #endif /* _WMI_UNIFIED_API_H_ */ diff --git a/wmi/inc/wmi_unified_param.h b/wmi/inc/wmi_unified_param.h index 365437c295..29eaf7b879 100644 --- a/wmi/inc/wmi_unified_param.h +++ b/wmi/inc/wmi_unified_param.h @@ -4615,6 +4615,7 @@ typedef enum { wmi_peer_create_conf_event_id, wmi_pdev_cp_fwstats_eventid, wmi_vdev_send_big_data_p2_eventid, + wmi_pdev_get_dpd_status_event_id, wmi_events_max, } wmi_conv_event_id; @@ -7922,4 +7923,21 @@ struct wmi_raw_event_buffer { void *evt_raw_buf; void *evt_processed_buf; }; + +/* dpd_status fron WMI_PDEV_GET_DPD_STATUS_EVENTID */ +enum wmi_host_dpd_status { + WMI_HOST_DPD_STATUS_FAIL = 0, + WMI_HOST_DPD_STATUS_PASS = 1, + WMI_HOST_DPD_STATUS_INVALID = 2, +}; + +/** + * struct wmi_host_pdev_get_dpd_status_event + * @pdev_id: pdev id + * @dpd_status: dpd status from FW - FAIL/PASS/INVALID + */ +struct wmi_host_pdev_get_dpd_status_event { + uint32_t pdev_id; + enum wmi_host_dpd_status dpd_status; +}; #endif /* _WMI_UNIFIED_PARAM_H_ */ diff --git a/wmi/inc/wmi_unified_priv.h b/wmi/inc/wmi_unified_priv.h index 3ad8aeefd9..f7580f3a2c 100644 --- a/wmi/inc/wmi_unified_priv.h +++ b/wmi/inc/wmi_unified_priv.h @@ -2531,6 +2531,9 @@ QDF_STATUS (*send_big_data_stats_request_cmd)( wmi_unified_t wmi_handle, struct stats_request_params *param); #endif +QDF_STATUS (*extract_dpd_status_ev_param)(wmi_unified_t wmi_handle, + void *evt_buf, + struct wmi_host_pdev_get_dpd_status_event *param); }; /* Forward declartion for psoc*/ diff --git a/wmi/src/wmi_unified_api.c b/wmi/src/wmi_unified_api.c index fdd1f64978..ab1b8e49aa 100644 --- a/wmi/src/wmi_unified_api.c +++ b/wmi/src/wmi_unified_api.c @@ -3412,3 +3412,15 @@ QDF_STATUS wmi_unified_send_set_tpc_power_cmd(wmi_unified_t wmi_handle, return QDF_STATUS_E_FAILURE; } + +QDF_STATUS +wmi_extract_dpd_status_ev_param(wmi_unified_t wmi_handle, + void *evt_buf, + struct wmi_host_pdev_get_dpd_status_event *param) +{ + if (wmi_handle->ops->extract_dpd_status_ev_param) + return wmi_handle->ops->extract_dpd_status_ev_param( + wmi_handle, evt_buf, param); + + return QDF_STATUS_E_FAILURE; +} diff --git a/wmi/src/wmi_unified_tlv.c b/wmi/src/wmi_unified_tlv.c index 40e38fa091..42d27f8e49 100644 --- a/wmi/src/wmi_unified_tlv.c +++ b/wmi/src/wmi_unified_tlv.c @@ -14881,6 +14881,36 @@ static QDF_STATUS send_set_tpc_power_cmd_tlv(wmi_unified_t wmi_handle, return ret; } +/** + * extract_dpd_status_ev_param_tlv() - extract dpd status from FW event + * @wmi_handle: wmi handle + * @evt_buf: event buffer + * @param: dpd status info + * + * Return: QDF_STATUS_SUCCESS for success or error code + */ +static QDF_STATUS +extract_dpd_status_ev_param_tlv(wmi_unified_t wmi_handle, + void *evt_buf, + struct wmi_host_pdev_get_dpd_status_event *param) +{ + WMI_PDEV_GET_DPD_STATUS_EVENTID_param_tlvs *param_buf; + wmi_pdev_get_dpd_status_evt_fixed_param *dpd_status; + + param_buf = (WMI_PDEV_GET_DPD_STATUS_EVENTID_param_tlvs *)evt_buf; + if (!param_buf) { + wmi_err("Invalid get dpd_status event"); + return QDF_STATUS_E_INVAL; + } + + dpd_status = param_buf->fixed_param; + param->pdev_id = wmi_handle->ops->convert_pdev_id_target_to_host + (wmi_handle, dpd_status->pdev_id); + param->dpd_status = dpd_status->dpd_status; + + return QDF_STATUS_SUCCESS; +} + struct wmi_ops tlv_ops = { .send_vdev_create_cmd = send_vdev_create_cmd_tlv, .send_vdev_delete_cmd = send_vdev_delete_cmd_tlv, @@ -15247,6 +15277,7 @@ struct wmi_ops tlv_ops = { .extract_pdev_csa_switch_count_status = extract_pdev_csa_switch_count_status_tlv, .send_set_tpc_power_cmd = send_set_tpc_power_cmd_tlv, + .extract_dpd_status_ev_param = extract_dpd_status_ev_param_tlv, }; /** @@ -15651,6 +15682,8 @@ event_ids[wmi_roam_scan_chan_list_id] = WMI_CTRL_PATH_STATS_EVENTID; event_ids[wmi_vdev_send_big_data_p2_eventid] = WMI_VDEV_SEND_BIG_DATA_P2_EVENTID; + event_ids[wmi_pdev_get_dpd_status_event_id] = + WMI_PDEV_GET_DPD_STATUS_EVENTID; } #ifdef WLAN_FEATURE_LINK_LAYER_STATS