wlan: Add Per packet stats.
As part of Per packet stats, periodical stats such
as data rate, rssi, seq. number, number of retries
etc would be sent to wifi hal layer for debugging.
Change-Id: I20651f38589abf031f04392f4c93d3511bdb3403
CRs-Fixed: 915570
diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c
index 834ff92..71fa450 100644
--- a/CORE/HDD/src/wlan_hdd_cfg.c
+++ b/CORE/HDD/src/wlan_hdd_cfg.c
@@ -3052,6 +3052,7 @@
CFG_WLAN_LOGGING_NUM_BUF_DEFAULT,
CFG_WLAN_LOGGING_NUM_BUF_MIN,
CFG_WLAN_LOGGING_NUM_BUF_MAX ),
+
REG_VARIABLE( CFG_WLAN_PKT_STATS_LOGGING_NAME, WLAN_PARAM_Integer,
hdd_config_t, wlanPerPktStatsLogEnable,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
@@ -3059,6 +3060,13 @@
CFG_WLAN_PKT_STATS_LOGGING_DISABLE,
CFG_WLAN_PKT_STATS_LOGGING_ENABLE ),
+ REG_VARIABLE( CFG_WLAN_PKT_STATS_NUM_BUF_NAME, WLAN_PARAM_Integer,
+ hdd_config_t, wlanPerPktStatsNumBuf,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_WLAN_PKT_STATS_NUM_BUF_DEFAULT,
+ CFG_WLAN_PKT_STATS_NUM_BUF_MIN,
+ CFG_WLAN_PKT_STATS_NUM_BUF_MAX ),
+
#endif //WLAN_LOGGING_SOCK_SVC_ENABLE
REG_VARIABLE( CFG_IGNORE_PEER_ERP_INFO_NAME, WLAN_PARAM_Integer,
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index d9b3646..eac14c7 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -5822,13 +5822,15 @@
hddLog(LOG1, FL("flag=%d"), start_log.flag);
if ((RING_ID_PER_PACKET_STATS == start_log.ringId) &&
- !hdd_ctx->cfg_ini->wlanPerPktStatsLogEnable)
+ (!hdd_ctx->cfg_ini->wlanPerPktStatsLogEnable ||
+ !vos_isPktStatsEnabled()))
+
{
hddLog(LOGE, FL("per pkt stats not enabled"));
return -EINVAL;
}
- vos_set_ring_log_level(start_log.ringId, start_log.verboseLevel);
+ vos_set_ring_log_level(start_log.ringId, start_log.verboseLevel);
return 0;
}
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index d45b07d..d0d70bf 100755
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -10293,7 +10293,9 @@
{
if(wlan_logging_sock_activate_svc(
pHddCtx->cfg_ini->wlanLoggingFEToConsole,
- pHddCtx->cfg_ini->wlanLoggingNumBuf))
+ pHddCtx->cfg_ini->wlanLoggingNumBuf,
+ pHddCtx->cfg_ini->wlanPerPktStatsLogEnable,
+ pHddCtx->cfg_ini->wlanPerPktStatsNumBuf))
{
hddLog(VOS_TRACE_LEVEL_ERROR, "%s: wlan_logging_sock_activate_svc"
" failed", __func__);
diff --git a/CORE/HDD/src/wlan_hdd_wext.c b/CORE/HDD/src/wlan_hdd_wext.c
index 4e676d9..2502c81 100644
--- a/CORE/HDD/src/wlan_hdd_wext.c
+++ b/CORE/HDD/src/wlan_hdd_wext.c
@@ -172,6 +172,7 @@
#endif
#define WE_SET_RTS_CTS_HTVHT 21
#define WE_SET_MONITOR_STATE 22
+#define WE_SET_PKT_STATS_ENABLE_DISABLE 23
/* Private ioctls and their sub-ioctls */
#define WLAN_PRIV_SET_NONE_GET_INT (SIOCIWFIRSTPRIV + 1)
@@ -3388,7 +3389,8 @@
hstatus = sme_GetStatistics(WLAN_HDD_GET_HAL_CTX(pAdapter),
eCSR_HDD,
SME_SUMMARY_STATS |
- SME_GLOBAL_CLASSA_STATS,
+ SME_GLOBAL_CLASSA_STATS |
+ SME_PER_PKT_STATS,
hdd_get_station_statisticsCB,
0, // not periodic
FALSE, //non-cached results
@@ -5914,6 +5916,38 @@
}
break;
}
+ case WE_SET_PKT_STATS_ENABLE_DISABLE:
+ {
+ hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter);
+ tAniWifiStartLog start_log;
+ if (!pHddCtx->cfg_ini->wlanPerPktStatsLogEnable ||
+ !vos_isPktStatsEnabled())
+ {
+ hddLog(LOGE, FL("per pkt stats not enabled"));
+ return -EINVAL;
+ }
+ hddLog(LOG1, FL("Set Pkt Stats %d"), set_value);
+
+ if (1 == set_value || 0 == set_value)
+ {
+ start_log.ringId = RING_ID_PER_PACKET_STATS;
+ start_log.flag = 0;
+ if (set_value)
+ start_log.verboseLevel = WLAN_LOG_LEVEL_ACTIVE;
+ else
+ start_log.verboseLevel = WLAN_LOG_LEVEL_OFF;
+
+ vos_set_ring_log_level(start_log.ringId, start_log.verboseLevel);
+ }
+ else
+ {
+ hddLog(LOGE,
+ FL("Invalid value %d in WE_SET_PKT_STATS_ENABLE_DISABLE IOCTL"),
+ set_value);
+ ret = -EINVAL;
+ }
+ break;
+ }
default:
{
@@ -10333,7 +10367,9 @@
{ WE_SET_RTS_CTS_HTVHT,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
0, "setRtsCtsHtVht" },
-
+ { WE_SET_PKT_STATS_ENABLE_DISABLE,
+ IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
+ 0, "setPktStats" },
/* handlers for main ioctl */
{ WLAN_PRIV_SET_NONE_GET_INT,
0,