diff options
author | Subhani Shaik <subhanis@codeaurora.org> | 2016-03-14 14:32:20 +0530 |
---|---|---|
committer | Roshan Pius <rpius@google.com> | 2016-04-15 20:34:23 +0000 |
commit | b2280f0b09ff9b3c1d5dd6d9086de0925ff8e07b (patch) | |
tree | 27718dfd533940f9d977a51ccdeddd1cd9005f03 /qcwcn | |
parent | 93022ce448414130b4241c6920797c1dc1df2250 (diff) | |
download | wlan-b2280f0b09ff9b3c1d5dd6d9086de0925ff8e07b.tar.gz |
Wifi-HAL: Add tx time per power level stats in radio_stats
Add support to collect radio transmit per power levels in
msecs accrued over time.
BUG:27227497
Change-Id: Idb00c58540bb8f75040f358072541d2989072162
Diffstat (limited to 'qcwcn')
-rw-r--r-- | qcwcn/wifi_hal/llstats.cpp | 34 | ||||
-rw-r--r-- | qcwcn/wifi_hal/vendor_definitions.h | 6 |
2 files changed, 38 insertions, 2 deletions
diff --git a/qcwcn/wifi_hal/llstats.cpp b/qcwcn/wifi_hal/llstats.cpp index 9561463..c0e72fb 100644 --- a/qcwcn/wifi_hal/llstats.cpp +++ b/qcwcn/wifi_hal/llstats.cpp @@ -709,6 +709,25 @@ static wifi_error get_wifi_radio_stats(wifi_radio_stat *stats, } stats->tx_time = nla_get_u32(tb_vendor[QCA_WLAN_VENDOR_ATTR_LL_STATS_RADIO_TX_TIME]); + if (stats->num_tx_levels) { + if (!tb_vendor[QCA_WLAN_VENDOR_ATTR_LL_STATS_RADIO_TX_TIME_PER_LEVEL]) { + ALOGE("%s: num_tx_levels is %u but QCA_WLAN_VENDOR_ATTR_LL_STATS_RADIO_TX_TIME_PER_LEVEL not found", __func__, stats->num_tx_levels); + stats->num_tx_levels = 0; + return WIFI_ERROR_INVALID_ARGS; + } + stats->tx_time_per_levels = + (u32 *) malloc(sizeof(u32) * stats->num_tx_levels); + if (!stats->tx_time_per_levels) { + ALOGE("%s: radio_stat: tx_time_per_levels malloc Failed", __func__); + stats->num_tx_levels = 0; + return WIFI_ERROR_OUT_OF_MEMORY; + } + + nla_memcpy(stats->tx_time_per_levels, + tb_vendor[QCA_WLAN_VENDOR_ATTR_LL_STATS_RADIO_TX_TIME_PER_LEVEL], + sizeof(u32) * stats->num_tx_levels); + } + if (!tb_vendor[QCA_WLAN_VENDOR_ATTR_LL_STATS_RADIO_RX_TIME]) { ALOGE("%s: QCA_WLAN_VENDOR_ATTR_LL_STATS_RADIO_RX_TIME not found", __FUNCTION__); @@ -893,6 +912,10 @@ int LLStatsCommand::handleResponse(WifiEvent &reply) } memset(mResultsParams.radio_stat, 0, resultsBufSize); + if (tb_vendor[QCA_WLAN_VENDOR_ATTR_LL_STATS_RADIO_NUM_TX_LEVELS]) + mResultsParams.radio_stat->num_tx_levels = nla_get_u32(tb_vendor[ + QCA_WLAN_VENDOR_ATTR_LL_STATS_RADIO_NUM_TX_LEVELS]); + wifi_channel_stat *pWifiChannelStats; status = get_wifi_radio_stats(mResultsParams.radio_stat, tb_vendor); @@ -904,7 +927,7 @@ int LLStatsCommand::handleResponse(WifiEvent &reply) ALOGV("radio :%u onTime :%u txTime :%u rxTime :%u" " onTimeScan :%u onTimeNbd :%u onTimeGscan :%u" " onTimeRoamScan :%u onTimePnoScan :%u" - " onTimeHs20 :%u numChannels :%u", + " onTimeHs20 :%u numChannels :%u num_tx_levels: %u", mResultsParams.radio_stat->radio, mResultsParams.radio_stat->on_time, mResultsParams.radio_stat->tx_time, @@ -915,7 +938,14 @@ int LLStatsCommand::handleResponse(WifiEvent &reply) mResultsParams.radio_stat->on_time_roam_scan, mResultsParams.radio_stat->on_time_pno_scan, mResultsParams.radio_stat->on_time_hs20, - mResultsParams.radio_stat->num_channels); + mResultsParams.radio_stat->num_channels, + mResultsParams.radio_stat->num_tx_levels); +#ifdef QC_HAL_DEBUG + for (i = 0; i < mResultsParams.radio_stat->num_tx_levels; i++) { + ALOGV("Power level: %u tx_time: %u", i, + mResultsParams.radio_stat->tx_time_per_levels[i]); + } +#endif ALOGV("%5s | %10s | %11s | %11s | %6s | %11s", "width", "CenterFreq", "CenterFreq0", "CenterFreq1", "onTime", "ccaBusyTime"); diff --git a/qcwcn/wifi_hal/vendor_definitions.h b/qcwcn/wifi_hal/vendor_definitions.h index dfadd35..e9180a1 100644 --- a/qcwcn/wifi_hal/vendor_definitions.h +++ b/qcwcn/wifi_hal/vendor_definitions.h @@ -443,6 +443,12 @@ enum qca_wlan_vendor_attr_ll_stats_results /* Unsigned 32bit value */ QCA_WLAN_VENDOR_ATTR_LL_STATS_TYPE, + /* Unsigned 32bit value */ + QCA_WLAN_VENDOR_ATTR_LL_STATS_RADIO_NUM_TX_LEVELS, + + /* Number of msecs the radio spent in transmitting for each power level */ + QCA_WLAN_VENDOR_ATTR_LL_STATS_RADIO_TX_TIME_PER_LEVEL, + /* keep last */ QCA_WLAN_VENDOR_ATTR_LL_STATS_AFTER_LAST, QCA_WLAN_VENDOR_ATTR_LL_STATS_MAX = QCA_WLAN_VENDOR_ATTR_LL_STATS_AFTER_LAST - 1, |