diff --git a/wmi/inc/wmi_unified_api.h b/wmi/inc/wmi_unified_api.h index fffbf16b9a..44612a8285 100644 --- a/wmi/inc/wmi_unified_api.h +++ b/wmi/inc/wmi_unified_api.h @@ -4633,6 +4633,19 @@ QDF_STATUS wmi_unified_send_cp_stats_cmd(wmi_unified_t wmi_handle, void *buf_ptr, uint32_t buf_len); +/** + * wmi_unified_send_halphy_stats_cmd() - Send halphy stats command + * @wmi_handle: wmi handle + * @buf_ptr: buf_ptr received from wifistats + * @buf_len: length of buffer received from wifistats + * + * This function sends halphy stats cmd to get halphy stats. + * + * Return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure + */ +QDF_STATUS wmi_unified_send_halphy_stats_cmd(wmi_unified_t wmi_handle, + void *buf_ptr, uint32_t buf_len); + /** * wmi_unified_extract_cp_stats_more_pending() - extract more flag * @wmi_handle: wmi handle diff --git a/wmi/inc/wmi_unified_priv.h b/wmi/inc/wmi_unified_priv.h index aaed5da999..023c1cca55 100644 --- a/wmi/inc/wmi_unified_priv.h +++ b/wmi/inc/wmi_unified_priv.h @@ -2856,6 +2856,9 @@ QDF_STATUS (*send_injector_config_cmd)(wmi_unified_t wmi_handle, QDF_STATUS (*send_cp_stats_cmd)(wmi_unified_t wmi_handle, void *buf_ptr, uint32_t buf_len); +QDF_STATUS (*send_halphy_stats_cmd)(wmi_unified_t wmi_handle, + void *buf_ptr, uint32_t buf_len); + QDF_STATUS (*extract_cp_stats_more_pending)(wmi_unified_t wmi_handle, void *evt_buf, uint32_t *more_flag); diff --git a/wmi/src/wmi_unified_api.c b/wmi/src/wmi_unified_api.c index 38098527d2..0eb525e475 100644 --- a/wmi/src/wmi_unified_api.c +++ b/wmi/src/wmi_unified_api.c @@ -3700,6 +3700,17 @@ QDF_STATUS wmi_unified_send_cp_stats_cmd(wmi_unified_t wmi_handle, return QDF_STATUS_E_FAILURE; } +QDF_STATUS wmi_unified_send_halphy_stats_cmd(wmi_unified_t wmi_handle, + void *buf_ptr, uint32_t buf_len) +{ + if (wmi_handle->ops->send_halphy_stats_cmd) + return wmi_handle->ops->send_halphy_stats_cmd(wmi_handle, + buf_ptr, + buf_len); + + return QDF_STATUS_E_FAILURE; +} + QDF_STATUS wmi_unified_extract_cp_stats_more_pending(wmi_unified_t wmi_handle, void *evt_buf, uint32_t *more_flag) diff --git a/wmi/src/wmi_unified_tlv.c b/wmi/src/wmi_unified_tlv.c index f07132b0f3..be8adbb79a 100644 --- a/wmi/src/wmi_unified_tlv.c +++ b/wmi/src/wmi_unified_tlv.c @@ -5359,6 +5359,45 @@ static QDF_STATUS send_cp_stats_cmd_tlv(wmi_unified_t wmi_handle, return QDF_STATUS_SUCCESS; } +/** + * send_halphy_stats_cmd_tlv() - Send halphy stats wmi command + * @wmi_handle: wmi handle + * @buf_ptr: Buffer passed by upper layers + * @buf_len: Length of passed buffer by upper layer + * + * Copy the buffer passed by the upper layers and send it + * down to the firmware. + * + * Return: None + */ +static QDF_STATUS send_halphy_stats_cmd_tlv(wmi_unified_t wmi_handle, + void *buf_ptr, uint32_t buf_len) +{ + wmi_buf_t buf = NULL; + QDF_STATUS status; + int len; + uint8_t *data_ptr; + + len = buf_len; + buf = wmi_buf_alloc(wmi_handle, len); + if (!buf) + return QDF_STATUS_E_NOMEM; + + data_ptr = (uint8_t *)wmi_buf_data(buf); + qdf_mem_copy(data_ptr, buf_ptr, len); + + wmi_mtrace(WMI_REQUEST_HALPHY_CTRL_PATH_STATS_CMDID, NO_SESSION, 0); + status = wmi_unified_cmd_send(wmi_handle, buf, + len, + WMI_REQUEST_HALPHY_CTRL_PATH_STATS_CMDID); + + if (QDF_IS_STATUS_ERROR(status)) { + wmi_buf_free(buf); + return QDF_STATUS_E_FAILURE; + } + return QDF_STATUS_SUCCESS; +} + /** * extract_cp_stats_more_pending_tlv - api to extract more flag from event data * @wmi_handle: wmi handle @@ -18793,6 +18832,7 @@ struct wmi_ops tlv_ops = { .send_roam_scan_ch_list_req_cmd = send_roam_scan_ch_list_req_cmd_tlv, .send_injector_config_cmd = send_injector_config_cmd_tlv, .send_cp_stats_cmd = send_cp_stats_cmd_tlv, + .send_halphy_stats_cmd = send_halphy_stats_cmd_tlv, #ifdef FEATURE_MEC_OFFLOAD .send_pdev_set_mec_timer_cmd = send_pdev_set_mec_timer_cmd_tlv, #endif