From 498953e6008d1fba0dd77efd3fc34b160e1656cd Mon Sep 17 00:00:00 2001 From: Bapiraju Alla Date: Tue, 26 May 2020 10:30:08 +0530 Subject: [PATCH] qcacld-3.0: Update rx retry count in peer stats Currently, Rx retry count statistic is not supported by firmware. So host driver also not updating the corresponding statistic in peer stats. Datapth is updating this counter using retry bit in the rx MPDU. Update peer Rx retry count value from data path. Change-Id: I4fd422faa7a766090991c461cd6fd2cc70d2fcc3 CRs-Fixed: 2691704 --- core/hdd/src/wlan_hdd_hostapd.c | 2 ++ core/mac/inc/ani_global.h | 1 + core/sap/inc/sap_api.h | 1 + core/sap/src/sap_fsm.c | 1 + core/sme/inc/csr_api.h | 1 + core/sme/src/csr/csr_api_roam.c | 4 ++++ core/wma/inc/wma_types.h | 11 +++++++++++ core/wma/src/wma_features.c | 29 +++++++++++++++++++++++++++++ 8 files changed, 50 insertions(+) diff --git a/core/hdd/src/wlan_hdd_hostapd.c b/core/hdd/src/wlan_hdd_hostapd.c index 1b5536b81857..17e0da62e401 100644 --- a/core/hdd/src/wlan_hdd_hostapd.c +++ b/core/hdd/src/wlan_hdd_hostapd.c @@ -2374,6 +2374,8 @@ QDF_STATUS hdd_hostapd_sap_event_cb(struct sap_event *sap_event, cache_stainfo->rx_rate = disassoc_comp->rx_rate; cache_stainfo->rx_mc_bc_cnt = disassoc_comp->rx_mc_bc_cnt; + cache_stainfo->rx_retry_cnt = + disassoc_comp->rx_retry_cnt; cache_stainfo->reason_code = disassoc_comp->reason_code; cache_stainfo->disassoc_ts = qdf_system_ticks(); hdd_debug("Cache_stainfo rssi %d txrate %d rxrate %d reason_code %d", diff --git a/core/mac/inc/ani_global.h b/core/mac/inc/ani_global.h index 98bfa8d39e80..f9b5a7b00e07 100644 --- a/core/mac/inc/ani_global.h +++ b/core/mac/inc/ani_global.h @@ -774,6 +774,7 @@ struct mac_context { uint32_t peer_rssi; uint32_t peer_txrate; uint32_t peer_rxrate; + uint32_t rx_retry_cnt; uint32_t rx_mc_bc_cnt; /* 11k Offload Support */ bool is_11k_offload_supported; diff --git a/core/sap/inc/sap_api.h b/core/sap/inc/sap_api.h index 11c342128358..676ac49a4378 100644 --- a/core/sap/inc/sap_api.h +++ b/core/sap/inc/sap_api.h @@ -298,6 +298,7 @@ typedef struct sap_StationDisassocCompleteEvent_s { int tx_rate; int rx_rate; uint32_t rx_mc_bc_cnt; + uint32_t rx_retry_cnt; } tSap_StationDisassocCompleteEvent; typedef struct sap_StationSetKeyCompleteEvent_s { diff --git a/core/sap/src/sap_fsm.c b/core/sap/src/sap_fsm.c index af8d2ebd2983..191fc10be90f 100644 --- a/core/sap/src/sap_fsm.c +++ b/core/sap/src/sap_fsm.c @@ -1622,6 +1622,7 @@ QDF_STATUS sap_signal_hdd_event(struct sap_context *sap_ctx, disassoc_comp->rx_rate = csr_roaminfo->rx_rate; disassoc_comp->tx_rate = csr_roaminfo->tx_rate; disassoc_comp->rx_mc_bc_cnt = csr_roaminfo->rx_mc_bc_cnt; + disassoc_comp->rx_retry_cnt = csr_roaminfo->rx_retry_cnt; disassoc_comp->reason_code = csr_roaminfo->disassoc_reason; break; diff --git a/core/sme/inc/csr_api.h b/core/sme/inc/csr_api.h index e10d92de7687..9d69e1c16fb2 100644 --- a/core/sme/inc/csr_api.h +++ b/core/sme/inc/csr_api.h @@ -1048,6 +1048,7 @@ struct csr_roam_info { int rx_rate; tSirMacCapabilityInfo capability_info; uint32_t rx_mc_bc_cnt; + uint32_t rx_retry_cnt; #ifdef WLAN_FEATURE_SAE struct sir_sae_info *sae_info; #endif diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index 103c3b26e7ec..c039bfed65a4 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -5953,6 +5953,8 @@ static void csr_get_peer_rssi(struct mac_context *mac, uint32_t session_id, QDF_MAC_ADDR_ARRAY(peer_mac.bytes)); if (QDF_IS_STATUS_ERROR(status)) sme_err("stats req failed: %d", status); + + wma_get_rx_retry_cnt(mac, session_id, info.peer_mac_addr); wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID); } } @@ -6807,6 +6809,7 @@ static void csr_roam_process_results_default(struct mac_context *mac_ctx, roam_info->tx_rate = mac_ctx->peer_txrate; roam_info->rx_rate = mac_ctx->peer_rxrate; roam_info->rx_mc_bc_cnt = mac_ctx->rx_mc_bc_cnt; + roam_info->rx_retry_cnt = mac_ctx->rx_retry_cnt; csr_roam_state_change(mac_ctx, eCSR_ROAMING_STATE_JOINED, session_id); @@ -10107,6 +10110,7 @@ csr_roam_send_disconnect_done_indication(struct mac_context *mac_ctx, roam_info->rx_rate = mac_ctx->peer_rxrate; roam_info->disassoc_reason = discon_ind->reason_code; roam_info->rx_mc_bc_cnt = mac_ctx->rx_mc_bc_cnt; + roam_info->rx_retry_cnt = mac_ctx->rx_retry_cnt; vdev = wlan_objmgr_get_vdev_by_id_from_psoc(mac_ctx->psoc, vdev_id, WLAN_LEGACY_SME_ID); diff --git a/core/wma/inc/wma_types.h b/core/wma/inc/wma_types.h index 57a01668d711..67b3dff3ad0c 100644 --- a/core/wma/inc/wma_types.h +++ b/core/wma/inc/wma_types.h @@ -615,6 +615,17 @@ QDF_STATUS u_mac_post_ctrl_msg(void *pSirGlobal, tSirMbMsg *pMb); QDF_STATUS wma_set_idle_ps_config(void *wma_ptr, uint32_t idle_ps); QDF_STATUS wma_get_snr(tAniGetSnrReq *psnr_req); +/** + * wma_get_rx_retry_cnt() - API to get rx retry count from data path + * @mac: pointer to mac context + * @vdev_id: vdev id + * @mac_addr: mac address of the remote station + * + * Return: none + */ +void wma_get_rx_retry_cnt(struct mac_context *mac, uint8_t vdev_id, + uint8_t *mac_addr); + /** * wma_set_wlm_latency_level() - set latency level to FW * @wma_ptr: wma handle diff --git a/core/wma/src/wma_features.c b/core/wma/src/wma_features.c index ee3128074ddf..4336ec3ac87a 100644 --- a/core/wma/src/wma_features.c +++ b/core/wma/src/wma_features.c @@ -69,6 +69,7 @@ #endif #include "wlan_scan_api.h" #include +#include "cdp_txrx_host_stats.h" /** * WMA_SET_VDEV_IE_SOURCE_HOST - Flag to identify the source of VDEV SET IE @@ -237,6 +238,34 @@ QDF_STATUS wma_get_snr(tAniGetSnrReq *psnr_req) return QDF_STATUS_SUCCESS; } +void wma_get_rx_retry_cnt(struct mac_context *mac, uint8_t vdev_id, + uint8_t *mac_addr) +{ + struct cdp_peer_stats *peer_stats; + QDF_STATUS status; + + peer_stats = qdf_mem_malloc(sizeof(*peer_stats)); + if (!peer_stats) { + wma_err("Failed to allocate memory for peer stats"); + return; + } + + status = cdp_host_get_peer_stats(cds_get_context(QDF_MODULE_ID_SOC), + vdev_id, mac_addr, peer_stats); + + if (QDF_IS_STATUS_ERROR(status)) { + wma_err("Failed to get peer stats"); + goto exit; + } + + mac->rx_retry_cnt = peer_stats->rx.rx_retries; + wma_debug("Rx retry count %d, Peer" QDF_MAC_ADDR_STR, mac->rx_retry_cnt, + QDF_MAC_ADDR_ARRAY(mac_addr)); + +exit: + qdf_mem_free(peer_stats); +} + /** * wma_process_link_status_req() - process link status request from UMAC * @wma: wma handle