diff --git a/target_if/cp_stats/src/target_if_cp_stats.c b/target_if/cp_stats/src/target_if_cp_stats.c index 66d4ba73e4..1079142872 100644 --- a/target_if/cp_stats/src/target_if_cp_stats.c +++ b/target_if/cp_stats/src/target_if_cp_stats.c @@ -97,6 +97,26 @@ void target_if_infra_cp_stats_free_stats_event(struct infra_cp_stats_event *ev) } #endif /* WLAN_SUPPORT_TWT */ +static +void target_if_infra_cp_stats_rrm_sta_stats_event_free( + struct infra_cp_stats_event *ev) +{ + qdf_mem_free(ev->sta_stats); + ev->sta_stats = NULL; +} + +static QDF_STATUS +target_if_infra_cp_stats_rrm_sta_stats_event_alloc( + struct infra_cp_stats_event *ev) +{ + ev->sta_stats = + qdf_mem_malloc(sizeof(*ev->sta_stats)); + if (!ev->sta_stats) { + return QDF_STATUS_E_NOMEM; + } + + return QDF_STATUS_SUCCESS; +} #ifdef CONFIG_WLAN_BMISS /** @@ -157,6 +177,7 @@ void target_if_infra_cp_stats_event_free(struct infra_cp_stats_event *ev) { target_if_infra_cp_stats_twt_event_free(ev); target_if_infra_cp_stats_bmiss_event_free(ev); + target_if_infra_cp_stats_rrm_sta_stats_event_free(ev); } /** @@ -173,11 +194,15 @@ target_if_infra_cp_stats_event_alloc(struct infra_cp_stats_event *ev) QDF_STATUS status; status = target_if_infra_cp_stats_twt_event_alloc(ev); - if (status) + if (QDF_IS_STATUS_ERROR(status)) return QDF_STATUS_E_NOMEM; status = target_if_infra_cp_stats_bmiss_event_alloc(ev); - if (status) + if (QDF_IS_STATUS_ERROR(status)) + return QDF_STATUS_E_NOMEM; + + status = target_if_infra_cp_stats_rrm_sta_stats_event_alloc(ev); + if (QDF_IS_STATUS_ERROR(status)) return QDF_STATUS_E_NOMEM; return QDF_STATUS_SUCCESS; diff --git a/wmi/src/wmi_unified_cp_stats_tlv.c b/wmi/src/wmi_unified_cp_stats_tlv.c index c6ded5bccd..cc61d22b18 100644 --- a/wmi/src/wmi_unified_cp_stats_tlv.c +++ b/wmi/src/wmi_unified_cp_stats_tlv.c @@ -157,6 +157,47 @@ static void wmi_twt_extract_stats_struct(void *tag_buf, } #endif /* WLAN_SUPPORT_TWT */ +#ifdef WLAN_SUPPORT_INFRA_CTRL_PATH_STATS +static void +wmi_extract_ctrl_path_rrm_sta_stats_tlv(void *tag_buf, + struct cp_sta_stats *param) +{ + wmi_ctrl_path_sta_rrm_stats_struct *wmi_stats_buf = + (wmi_ctrl_path_sta_rrm_stats_struct *)tag_buf; + param->group.counter_stats.group_transmitted_frame_count = + wmi_stats_buf->dot11GroupTransmittedFrameCount; + param->group.counter_stats.group_received_frame_count = + wmi_stats_buf->dot11GroupReceivedFrameCount; + param->group.counter_stats.transmitted_frame_count = + wmi_stats_buf->dot11TransmittedFrameCount; + param->group.mac_stats.ack_failure_count = + wmi_stats_buf->dot11AckFailureCount; + param->group.counter_stats.failed_count = + wmi_stats_buf->dot11FailedCount; + param->group.counter_stats.fcs_error_count = + wmi_stats_buf->dot11FCSErrorCount; + param->group.mac_stats.rts_success_count = + wmi_stats_buf->dot11RTSSuccessCount; + param->group.mac_stats.rts_failure_count = + wmi_stats_buf->dot11RTSFailureCount; +} + +static void +wmi_rrm_extract_sta_stats_struct(void *tag_buf, + struct infra_cp_stats_event *params) +{ + struct cp_sta_stats *rrm_sta_stats; + + rrm_sta_stats = params->sta_stats; + wmi_extract_ctrl_path_rrm_sta_stats_tlv(tag_buf, rrm_sta_stats); +} +#else +static inline void +wmi_rrm_extract_sta_stats_struct(void *tag_buf, + struct infra_cp_stats_event *params) +{} +#endif + #ifdef CONFIG_WLAN_BMISS static void wmi_extract_ctrl_path_bmiss_stats_tlv(void *tag_buf, @@ -343,6 +384,10 @@ static void wmi_stats_extract_tag_struct(wmi_unified_t wmi_handle, wmi_pmlo_extract_stats_struct(wmi_handle, tag_buf, params); break; + case WMITLV_TAG_STRUC_wmi_ctrl_path_sta_rrm_stats_struct: + wmi_rrm_extract_sta_stats_struct(tag_buf, params); + break; + default: break; }