summaryrefslogtreecommitdiff
path: root/qcwcn
diff options
context:
space:
mode:
authorSubhani Shaik <subhanis@codeaurora.org>2016-03-14 14:32:20 +0530
committerRoshan Pius <rpius@google.com>2016-04-15 20:34:23 +0000
commitb2280f0b09ff9b3c1d5dd6d9086de0925ff8e07b (patch)
tree27718dfd533940f9d977a51ccdeddd1cd9005f03 /qcwcn
parent93022ce448414130b4241c6920797c1dc1df2250 (diff)
downloadwlan-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.cpp34
-rw-r--r--qcwcn/wifi_hal/vendor_definitions.h6
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,