diff --git a/wmi/inc/wmi_unified_api.h b/wmi/inc/wmi_unified_api.h index 79cd444113..1c5c603913 100644 --- a/wmi/inc/wmi_unified_api.h +++ b/wmi/inc/wmi_unified_api.h @@ -1588,6 +1588,10 @@ QDF_STATUS wmi_extract_mumimo_tx_count_ev_param(void *wmi_hdl, void *evt_buf, QDF_STATUS wmi_extract_peer_gid_userpos_list_ev_param(void *wmi_hdl, void *evt_buf, wmi_host_peer_gid_userpos_list_event *param); +QDF_STATUS +wmi_extract_esp_estimate_ev_param(void *wmi_hdl, void *evt_buf, + struct esp_estimation_event *param); + QDF_STATUS wmi_extract_pdev_caldata_version_check_ev_param(void *wmi_hdl, void *evt_buf, wmi_host_pdev_check_cal_version_event *param); diff --git a/wmi/inc/wmi_unified_param.h b/wmi/inc/wmi_unified_param.h index e2e48d2482..4bdb021d79 100644 --- a/wmi/inc/wmi_unified_param.h +++ b/wmi/inc/wmi_unified_param.h @@ -5535,6 +5535,7 @@ typedef enum { wmi_debug_fatal_condition_eventid, #endif /* OL_ATH_SMART_LOGGING */ wmi_wlan_sar2_result_event_id, + wmi_esp_estimate_event_id, wmi_events_max, } wmi_conv_event_id; @@ -5678,7 +5679,7 @@ typedef enum { wmi_pdev_param_tx_ack_timeout, wmi_pdev_param_soft_tx_chain_mask, wmi_pdev_param_cck_tx_enable, - + wmi_pdev_param_esp_indication_period, wmi_pdev_param_max, } wmi_conv_pdev_params_id; @@ -7738,6 +7739,16 @@ struct sar_limit_event { sar_limit_row[MAX_SAR_LIMIT_ROWS_SUPPORTED]; }; +/** + * struct esp_estimation_event - esp airtime estimation event + * @ac_airtime_percentage: Estimated Airtime + * @pdev_id: PDEV_ID of Data + */ +struct esp_estimation_event { + uint32_t ac_airtime_percentage; + uint32_t pdev_id; +}; + /* * struct wmi_peer_gid_userpos_list_event * @usr_list - User list diff --git a/wmi/inc/wmi_unified_priv.h b/wmi/inc/wmi_unified_priv.h index def37d1146..a9a7fe4ee8 100644 --- a/wmi/inc/wmi_unified_priv.h +++ b/wmi/inc/wmi_unified_priv.h @@ -1216,6 +1216,10 @@ QDF_STATUS (*extract_mumimo_tx_count_ev_param)(wmi_unified_t wmi_handle, QDF_STATUS (*extract_peer_gid_userpos_list_ev_param)(wmi_unified_t wmi_handle, void *evt_buf, wmi_host_peer_gid_userpos_list_event *param); +QDF_STATUS +(*extract_esp_estimation_ev_param)(wmi_unified_t wmi_handle, void *evt_buf, + struct esp_estimation_event *param); + QDF_STATUS (*extract_pdev_caldata_version_check_ev_param)( wmi_unified_t wmi_handle, void *evt_buf, wmi_host_pdev_check_cal_version_event *param); diff --git a/wmi/src/wmi_unified_api.c b/wmi/src/wmi_unified_api.c index 562b605922..eb94cba9bd 100644 --- a/wmi/src/wmi_unified_api.c +++ b/wmi/src/wmi_unified_api.c @@ -5422,6 +5422,27 @@ QDF_STATUS wmi_extract_peer_gid_userpos_list_ev_param(void *wmi_hdl, return QDF_STATUS_E_FAILURE; } +/** + * wmi_extract_esp_estimate_ev_param() - extract air time from event + * @wmi_handle: wmi handle + * @evt_buf: pointer to event buffer + * @param: Pointer to hold esp event + * + * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure + */ +QDF_STATUS +wmi_extract_esp_estimate_ev_param(void *wmi_hdl, void *evt_buf, + struct esp_estimation_event *param) +{ + wmi_unified_t wmi_handle = (wmi_unified_t)wmi_hdl; + + if (wmi_handle->ops->extract_esp_estimation_ev_param) + return wmi_handle->ops->extract_esp_estimation_ev_param( + wmi_handle, evt_buf, param); + + return QDF_STATUS_E_FAILURE; +} + /** * wmi_extract_pdev_caldata_version_check_ev_param() - extract caldata * from event diff --git a/wmi/src/wmi_unified_non_tlv.c b/wmi/src/wmi_unified_non_tlv.c index 0fd91eddbe..84d1d4e62b 100644 --- a/wmi/src/wmi_unified_non_tlv.c +++ b/wmi/src/wmi_unified_non_tlv.c @@ -6566,9 +6566,30 @@ static QDF_STATUS extract_mumimo_tx_count_ev_param_non_tlv(wmi_unified_t wmi_han return QDF_STATUS_SUCCESS; } +/** + * extract_esp_estimation_ev_param_non_tlv() - extract air time from event + * @wmi_handle: wmi handle + * @evt_buf: pointer to event buffer + * @param: Pointer to hold esp event + * + * Return: QDF_STATUS_SUCCESS + */ +QDF_STATUS extract_esp_estimation_ev_param_non_tlv( + wmi_unified_t wmi_handle, + void *evt_buf, + struct esp_estimation_event *param) +{ + wmi_esp_estimation_event *event = (wmi_esp_estimation_event *)evt_buf; + + param->ac_airtime_percentage = event->ac_airtime_percentage; + param->pdev_id = WMI_NON_TLV_DEFAULT_PDEV_ID; + + return QDF_STATUS_SUCCESS; +} + /** * extract_peer_gid_userpos_list_ev_param_non_tlv() - extract gid user position - * from event + * from event * @wmi_handle: wmi handle * @param evt_buf: pointer to event buffer * @param param: Pointer to hold peer user position list @@ -8866,6 +8887,8 @@ struct wmi_ops non_tlv_ops = { send_dfs_average_radar_params_cmd_non_tlv, .extract_dfs_status_from_fw = extract_dfs_status_from_fw_non_tlv, #endif + .extract_esp_estimation_ev_param = + extract_esp_estimation_ev_param_non_tlv, }; /** @@ -9171,6 +9194,8 @@ static void populate_non_tlv_events_id(uint32_t *event_ids) event_ids[wmi_host_dfs_status_check_event_id] = WMI_HOST_DFS_STATUS_CHECK_EVENTID; #endif + event_ids[wmi_esp_estimate_event_id] = + WMI_ESP_ESTIMATE_EVENTID; } /** @@ -9359,6 +9384,8 @@ static void populate_pdev_param_non_tlv(uint32_t *pdev_param) pdev_param[wmi_pdev_param_tx_ack_timeout] = WMI_UNAVAILABLE_PARAM; pdev_param[wmi_pdev_param_soft_tx_chain_mask] = WMI_PDEV_PARAM_SOFT_TX_CHAIN_MASK; + pdev_param[wmi_pdev_param_esp_indication_period] = + WMI_PDEV_PARAM_ESP_INDICATION_PERIOD; pdev_param[wmi_pdev_param_rfkill_enable] = WMI_UNAVAILABLE_PARAM; pdev_param[wmi_pdev_param_hw_rfkill_config] = WMI_UNAVAILABLE_PARAM; pdev_param[wmi_pdev_param_low_power_rf_enable] = WMI_UNAVAILABLE_PARAM;