From d2115722b00882e5f53288c1fad4a37281c51ffe Mon Sep 17 00:00:00 2001 From: Naveen Rawat Date: Thu, 12 Apr 2018 08:17:55 -0700 Subject: [PATCH] qcacmn: Add target_if/wmi implementation of get_stations_stats Add changes to support get station stats from within the cp stats component. Change-Id: I936ea8e18e519f257ae2d57b384a5a39f4582aed CRs-Fixed: 2210313 --- wmi_unified_api.c | 21 +++++++++++++++++++ wmi_unified_tlv.c | 52 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+) diff --git a/wmi_unified_api.c b/wmi_unified_api.c index 484c55c0a9..9ca88029f2 100644 --- a/wmi_unified_api.c +++ b/wmi_unified_api.c @@ -6210,6 +6210,27 @@ QDF_STATUS wmi_extract_vdev_stats(void *wmi_hdl, void *evt_buf, return QDF_STATUS_E_FAILURE; } +/** + * wmi_extract_per_chain_rssi_stats() - extract rssi stats from event + * @wmi_handle: wmi handle + * @param evt_buf: pointer to event buffer + * @param index: Index into rssi stats + * @param rssi_stats: Pointer to hold rssi stats + * + * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure + */ +QDF_STATUS wmi_extract_per_chain_rssi_stats(void *wmi_hdl, void *evt_buf, + uint32_t index, struct wmi_host_per_chain_rssi_stats *rssi_stats) +{ + wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; + + if (wmi_handle->ops->extract_per_chain_rssi_stats) + return wmi_handle->ops->extract_per_chain_rssi_stats(wmi_handle, + evt_buf, index, rssi_stats); + + return QDF_STATUS_E_FAILURE; +} + /** * wmi_extract_rtt_hdr() - extract rtt header from event * @wmi_handle: wmi handle diff --git a/wmi_unified_tlv.c b/wmi_unified_tlv.c index 562dd35d38..8ab1cf1f5f 100644 --- a/wmi_unified_tlv.c +++ b/wmi_unified_tlv.c @@ -19516,6 +19516,57 @@ static QDF_STATUS extract_vdev_stats_tlv(wmi_unified_t wmi_handle, return QDF_STATUS_SUCCESS; } +/** + * extract_per_chain_rssi_stats_tlv() - api to extract rssi stats from event + * buffer + * @wmi_handle: wmi handle + * @evt_buf: pointer to event buffer + * @index: Index into vdev stats + * @rssi_stats: Pointer to hold rssi stats + * + * Return: QDF_STATUS_SUCCESS for success or error code + */ +static QDF_STATUS extract_per_chain_rssi_stats_tlv(wmi_unified_t wmi_handle, + void *evt_buf, uint32_t index, + struct wmi_host_per_chain_rssi_stats *rssi_stats) +{ + uint8_t *data; + wmi_rssi_stats *fw_rssi_stats; + wmi_per_chain_rssi_stats *rssi_event; + WMI_UPDATE_STATS_EVENTID_param_tlvs *param_buf; + + if (!evt_buf) { + WMI_LOGE("evt_buf is null"); + return QDF_STATUS_E_NULL_VALUE; + } + + param_buf = (WMI_UPDATE_STATS_EVENTID_param_tlvs *) evt_buf; + rssi_event = param_buf->chain_stats; + + if (index >= rssi_event->num_per_chain_rssi_stats) { + WMI_LOGE("invalid index"); + return QDF_STATUS_E_INVAL; + } + + data = ((uint8_t *)(&rssi_event[1])) + WMI_TLV_HDR_SIZE; + fw_rssi_stats = &((wmi_rssi_stats *)data)[index]; + + rssi_stats->vdev_id = fw_rssi_stats->vdev_id; + qdf_mem_copy(rssi_stats->rssi_avg_beacon, + fw_rssi_stats->rssi_avg_beacon, + sizeof(fw_rssi_stats->rssi_avg_beacon)); + qdf_mem_copy(rssi_stats->rssi_avg_data, + fw_rssi_stats->rssi_avg_data, + sizeof(fw_rssi_stats->rssi_avg_data)); + qdf_mem_copy(&rssi_stats->peer_macaddr, + &fw_rssi_stats->peer_macaddr, + sizeof(fw_rssi_stats->peer_macaddr)); + + return QDF_STATUS_SUCCESS; +} + + + /** * extract_bcn_stats_tlv() - extract bcn stats from event * @wmi_handle: wmi handle @@ -22805,6 +22856,7 @@ struct wmi_ops tlv_ops = { .extract_unit_test = extract_unit_test_tlv, .extract_pdev_ext_stats = extract_pdev_ext_stats_tlv, .extract_vdev_stats = extract_vdev_stats_tlv, + .extract_per_chain_rssi_stats = extract_per_chain_rssi_stats_tlv, .extract_peer_stats = extract_peer_stats_tlv, .extract_bcn_stats = extract_bcn_stats_tlv, .extract_bcnflt_stats = extract_bcnflt_stats_tlv,