summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Johnson <jjohnson@codeaurora.org>2017-03-10 16:23:07 -0800
committerNandini Suresh <snandini@codeaurora.org>2017-03-16 13:56:21 -0700
commit97a68761a50a089b77e375c3ba460095c990b129 (patch)
tree077f679fe1f48bc0939057ed45505851ea0ef41f
parentafc7f7199dfa4616a3c4143d1900818a67442b8a (diff)
qcacld-3.0: Redesign wma_get_stats_rsp_buf() buffer length logic
Currently wma_get_stats_rsp_buf() uses a loop to determine which mask bits are set, and based upon the loop iteration count it determines the size of the associated buffer. This calculation is fragile, however, in that it tightly couples the loop iteration count and eCsrRoamStatsClassTypes enumeration values. Since code under development will be removing some of the eCsrRoamStatsClassTypes enumerations, update this logic to remove the tight coupling. Change-Id: Ia6cda4c8181c44d25a9da27acffe6bd10ca3b4ed CRs-Fixed: 2020056
-rw-r--r--core/wma/src/wma_utils.c54
1 files changed, 21 insertions, 33 deletions
diff --git a/core/wma/src/wma_utils.c b/core/wma/src/wma_utils.c
index 47be176c0e82..9d16ca960fbb 100644
--- a/core/wma/src/wma_utils.c
+++ b/core/wma/src/wma_utils.c
@@ -2484,51 +2484,39 @@ static tAniGetPEStatsRsp *wma_get_stats_rsp_buf
(tAniGetPEStatsReq *get_stats_param)
{
tAniGetPEStatsRsp *stats_rsp_params;
- uint32_t len, temp_mask, counter = 0;
+ uint32_t len, temp_mask;
len = sizeof(tAniGetPEStatsRsp);
temp_mask = get_stats_param->statsMask;
- while (temp_mask) {
- if (temp_mask & 1) {
- switch (counter) {
- case eCsrSummaryStats:
- len += sizeof(tCsrSummaryStatsInfo);
- break;
- case eCsrGlobalClassAStats:
- len += sizeof(tCsrGlobalClassAStatsInfo);
- break;
- case eCsrGlobalClassBStats:
- len += sizeof(tCsrGlobalClassBStatsInfo);
- break;
- case eCsrGlobalClassCStats:
- len += sizeof(tCsrGlobalClassCStatsInfo);
- break;
- case eCsrGlobalClassDStats:
- len += sizeof(tCsrGlobalClassDStatsInfo);
- break;
- case eCsrPerStaStats:
- len += sizeof(tCsrPerStaStatsInfo);
- break;
- case csr_per_chain_rssi_stats:
- len +=
- sizeof(struct csr_per_chain_rssi_stats_info);
- break;
- }
- }
+ if (temp_mask & (1 << eCsrSummaryStats))
+ len += sizeof(tCsrSummaryStatsInfo);
- counter++;
- temp_mask >>= 1;
- }
+ if (temp_mask & (1 << eCsrGlobalClassAStats))
+ len += sizeof(tCsrGlobalClassAStatsInfo);
+
+ if (temp_mask & (1 << eCsrGlobalClassBStats))
+ len += sizeof(tCsrGlobalClassBStatsInfo);
+
+ if (temp_mask & (1 << eCsrGlobalClassCStats))
+ len += sizeof(tCsrGlobalClassCStatsInfo);
+
+ if (temp_mask & (1 << eCsrGlobalClassDStats))
+ len += sizeof(tCsrGlobalClassDStatsInfo);
+
+ if (temp_mask & (1 << eCsrPerStaStats))
+ len += sizeof(tCsrPerStaStatsInfo);
+
+ if (temp_mask & (1 << csr_per_chain_rssi_stats))
+ len += sizeof(struct csr_per_chain_rssi_stats_info);
- stats_rsp_params = (tAniGetPEStatsRsp *) qdf_mem_malloc(len);
+ stats_rsp_params = qdf_mem_malloc(len);
if (!stats_rsp_params) {
WMA_LOGE("memory allocation failed for tAniGetPEStatsRsp");
QDF_ASSERT(0);
return NULL;
}
- qdf_mem_zero(stats_rsp_params, len);
stats_rsp_params->staId = get_stats_param->staId;
stats_rsp_params->statsMask = get_stats_param->statsMask;
stats_rsp_params->msgType = WMA_GET_STATISTICS_RSP;