wlan: Setting Trace Levels through ini file.

This change is introduced to give the
user the flexibility to control the
vos trace levels from the
WCNSS_qcom_cfg.ini file.This would
allow the user to capture the log
messages right from the point the
driver is loaded.

Change-Id: I0e72730c6048d23a9d000c545084fae650bc259e
CRs-Fixed: 440389
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h
index f77ce08..2c3829e 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg.h
@@ -1270,6 +1270,45 @@
 #endif
 
 /*
+ * VOS Trace Enable Control
+ * Notes:
+ *  the MIN/MAX/DEFAULT values apply for all modules
+ *  the DEFAULT value is outside the valid range.  if the DEFAULT
+ *    value is not overridden, then no change will be made to the
+ *    "built in" default values compiled into the code
+ *  values are a bitmap indicating which log levels are to enabled
+ *    (must match order of vos_trace_level enumerations)
+ *    00000001  FATAL
+ *    00000010  ERROR
+ *    00000100  WARN
+ *    00001000  INFO
+ *    00010000  INFO HIGH
+ *    00100000  INFO MED
+ *    01000000  INFO LOW
+ *    10000000  DEBUG
+ *
+ *  hence a value of 0xFF would set all bits (enable all logs)
+ */
+
+#define CFG_VOS_TRACE_ENABLE_BAP_NAME     "vosTraceEnableBAP"
+#define CFG_VOS_TRACE_ENABLE_TL_NAME      "vosTraceEnableTL"
+#define CFG_VOS_TRACE_ENABLE_WDI_NAME     "vosTraceEnableWDI"
+#define CFG_VOS_TRACE_ENABLE_HDD_NAME     "vosTraceEnableHDD"
+#define CFG_VOS_TRACE_ENABLE_SME_NAME     "vosTraceEnableSME"
+#define CFG_VOS_TRACE_ENABLE_PE_NAME      "vosTraceEnablePE"
+#define CFG_VOS_TRACE_ENABLE_WDA_NAME     "vosTraceEnableWDA"
+#define CFG_VOS_TRACE_ENABLE_SYS_NAME     "vosTraceEnableSYS"
+#define CFG_VOS_TRACE_ENABLE_VOSS_NAME    "vosTraceEnableVOSS"
+#ifdef WLAN_SOFTAP_FEATURE
+#define CFG_VOS_TRACE_ENABLE_SAP_NAME     "vosTraceEnableSAP"
+#define CFG_VOS_TRACE_ENABLE_HDD_SAP_NAME "vosTraceEnableHDDSAP"
+#endif
+
+#define CFG_VOS_TRACE_ENABLE_MIN          (0)
+#define CFG_VOS_TRACE_ENABLE_MAX          (0xff)
+#define CFG_VOS_TRACE_ENABLE_DEFAULT      (0xffff)
+
+/*
  * WDI Trace Enable Control
  * Notes:
  *  the MIN/MAX/DEFAULT values apply for all modules
@@ -1824,6 +1863,21 @@
    v_BOOL_t                    fEnableBeaconEarlyTermination;
    v_BOOL_t                    teleBcnWakeupEn;
 
+/* VOS Trace Control*/
+   v_U16_t                     vosTraceEnableBAP;
+   v_U16_t                     vosTraceEnableTL;
+   v_U16_t                     vosTraceEnableWDI;
+   v_U16_t                     vosTraceEnableHDD;
+   v_U16_t                     vosTraceEnableSME;
+   v_U16_t                     vosTraceEnablePE;
+   v_U16_t                     vosTraceEnableWDA;
+   v_U16_t                     vosTraceEnableSYS;
+   v_U16_t                     vosTraceEnableVOSS;
+#ifdef WLAN_SOFTAP_FEATURE
+   v_U16_t                     vosTraceEnableSAP;
+   v_U16_t                     vosTraceEnableHDDSAP;
+#endif
+
 #ifdef FEATURE_WLAN_INTEGRATED_SOC
    /* WDI Trace Control */
    v_U32_t                     wdiTraceEnableDAL;
diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c
index b9df60a..dc809bd 100644
--- a/CORE/HDD/src/wlan_hdd_cfg.c
+++ b/CORE/HDD/src/wlan_hdd_cfg.c
@@ -1503,6 +1503,85 @@
                 CFG_ENABLE_BEACON_EARLY_TERMINATION_DEFAULT, 
                 CFG_ENABLE_BEACON_EARLY_TERMINATION_MIN, 
                 CFG_ENABLE_BEACON_EARLY_TERMINATION_MAX ), 
+/* CFG_VOS_TRACE_ENABLE Parameters */
+   REG_VARIABLE( CFG_VOS_TRACE_ENABLE_BAP_NAME, WLAN_PARAM_Integer,
+                hdd_config_t, vosTraceEnableBAP,
+                VAR_FLAGS_OPTIONAL,
+                CFG_VOS_TRACE_ENABLE_DEFAULT,
+                CFG_VOS_TRACE_ENABLE_MIN,
+                CFG_VOS_TRACE_ENABLE_MAX ),
+
+   REG_VARIABLE( CFG_VOS_TRACE_ENABLE_TL_NAME, WLAN_PARAM_Integer,
+                hdd_config_t, vosTraceEnableTL,
+                VAR_FLAGS_OPTIONAL,
+                CFG_VOS_TRACE_ENABLE_DEFAULT,
+                CFG_VOS_TRACE_ENABLE_MIN,
+                CFG_VOS_TRACE_ENABLE_MAX ),
+
+   REG_VARIABLE( CFG_VOS_TRACE_ENABLE_WDI_NAME, WLAN_PARAM_Integer,
+                hdd_config_t, vosTraceEnableWDI,
+                VAR_FLAGS_OPTIONAL,
+                CFG_VOS_TRACE_ENABLE_DEFAULT,
+                CFG_VOS_TRACE_ENABLE_MIN,
+                CFG_VOS_TRACE_ENABLE_MAX ),
+
+   REG_VARIABLE( CFG_VOS_TRACE_ENABLE_HDD_NAME, WLAN_PARAM_Integer,
+                hdd_config_t, vosTraceEnableHDD,
+                VAR_FLAGS_OPTIONAL,
+                CFG_VOS_TRACE_ENABLE_DEFAULT,
+                CFG_VOS_TRACE_ENABLE_MIN,
+                CFG_VOS_TRACE_ENABLE_MAX ),
+
+   REG_VARIABLE( CFG_VOS_TRACE_ENABLE_SME_NAME, WLAN_PARAM_Integer,
+                hdd_config_t, vosTraceEnableSME,
+                VAR_FLAGS_OPTIONAL,
+                CFG_VOS_TRACE_ENABLE_DEFAULT,
+                CFG_VOS_TRACE_ENABLE_MIN,
+                CFG_VOS_TRACE_ENABLE_MAX ),
+
+   REG_VARIABLE( CFG_VOS_TRACE_ENABLE_PE_NAME, WLAN_PARAM_Integer,
+                hdd_config_t, vosTraceEnablePE,
+                VAR_FLAGS_OPTIONAL,
+                CFG_VOS_TRACE_ENABLE_DEFAULT,
+                CFG_VOS_TRACE_ENABLE_MIN,
+                CFG_VOS_TRACE_ENABLE_MAX ),
+
+   REG_VARIABLE( CFG_VOS_TRACE_ENABLE_WDA_NAME, WLAN_PARAM_Integer,
+                hdd_config_t, vosTraceEnableWDA,
+                VAR_FLAGS_OPTIONAL,
+                CFG_VOS_TRACE_ENABLE_DEFAULT,
+                CFG_VOS_TRACE_ENABLE_MIN,
+                CFG_VOS_TRACE_ENABLE_MAX ),
+
+   REG_VARIABLE( CFG_VOS_TRACE_ENABLE_SYS_NAME, WLAN_PARAM_Integer,
+                hdd_config_t, vosTraceEnableSYS,
+                VAR_FLAGS_OPTIONAL,
+                CFG_VOS_TRACE_ENABLE_DEFAULT,
+                CFG_VOS_TRACE_ENABLE_MIN,
+                CFG_VOS_TRACE_ENABLE_MAX ),
+
+   REG_VARIABLE( CFG_VOS_TRACE_ENABLE_VOSS_NAME, WLAN_PARAM_Integer,
+                hdd_config_t, vosTraceEnableVOSS,
+                VAR_FLAGS_OPTIONAL,
+                CFG_VOS_TRACE_ENABLE_DEFAULT,
+                CFG_VOS_TRACE_ENABLE_MIN,
+                CFG_VOS_TRACE_ENABLE_MAX ),
+
+#ifdef WLAN_SOFTAP_FEATURE
+   REG_VARIABLE( CFG_VOS_TRACE_ENABLE_SAP_NAME, WLAN_PARAM_Integer,
+                hdd_config_t, vosTraceEnableSAP,
+                VAR_FLAGS_OPTIONAL,
+                CFG_VOS_TRACE_ENABLE_DEFAULT,
+                CFG_VOS_TRACE_ENABLE_MIN,
+                CFG_VOS_TRACE_ENABLE_MAX ),
+
+   REG_VARIABLE( CFG_VOS_TRACE_ENABLE_HDD_SAP_NAME, WLAN_PARAM_Integer,
+                hdd_config_t, vosTraceEnableHDDSAP,
+                VAR_FLAGS_OPTIONAL,
+                CFG_VOS_TRACE_ENABLE_DEFAULT,
+                CFG_VOS_TRACE_ENABLE_MIN,
+                CFG_VOS_TRACE_ENABLE_MAX ),
+#endif
 
 #ifdef FEATURE_WLAN_INTEGRATED_SOC
    /* note that since the default value is out of range we cannot
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index cc16804..7ca4cf6 100644
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -327,6 +327,48 @@
 static int curr_con_mode;
 #endif
 
+/**---------------------------------------------------------------------------
+
+  \brief hdd_vos_trace_enable() - Configure initial VOS Trace enable
+
+  Called immediately after the cfg.ini is read in order to configure
+  the desired trace levels.
+
+  \param  - moduleId - module whose trace level is being configured
+  \param  - bitmask - bitmask of log levels to be enabled
+
+  \return - void
+
+  --------------------------------------------------------------------------*/
+static void hdd_vos_trace_enable(VOS_MODULE_ID moduleId, v_U32_t bitmask)
+{
+   wpt_tracelevel level;
+
+   /* if the bitmask is the default value, then a bitmask was not
+      specified in cfg.ini, so leave the logging level alone (it
+      will remain at the "compiled in" default value) */
+   if (CFG_VOS_TRACE_ENABLE_DEFAULT == bitmask)
+   {
+      return;
+   }
+
+   /* a mask was specified.  start by disabling all logging */
+   vos_trace_setValue(moduleId, VOS_TRACE_LEVEL_NONE, 0);
+
+   /* now cycle through the bitmask until all "set" bits are serviced */
+   level = VOS_TRACE_LEVEL_FATAL;
+   while (0 != bitmask)
+   {
+      if (bitmask & 1)
+      {
+         vos_trace_setValue(moduleId, level, 1);
+      }
+      level++;
+      bitmask >>= 1;
+   }
+}
+
+
 #ifdef FEATURE_WLAN_INTEGRATED_SOC
 /**---------------------------------------------------------------------------
 
@@ -3496,6 +3538,32 @@
    }
 #endif
 
+   // Update VOS trace levels based upon the cfg.ini
+   hdd_vos_trace_enable(VOS_MODULE_ID_BAP,
+                        pHddCtx->cfg_ini->vosTraceEnableBAP);
+   hdd_vos_trace_enable(VOS_MODULE_ID_TL,
+                        pHddCtx->cfg_ini->vosTraceEnableTL);
+   hdd_vos_trace_enable(VOS_MODULE_ID_WDI,
+                        pHddCtx->cfg_ini->vosTraceEnableWDI);
+   hdd_vos_trace_enable(VOS_MODULE_ID_HDD,
+                        pHddCtx->cfg_ini->vosTraceEnableHDD);
+   hdd_vos_trace_enable(VOS_MODULE_ID_SME,
+                        pHddCtx->cfg_ini->vosTraceEnableSME);
+   hdd_vos_trace_enable(VOS_MODULE_ID_PE,
+                        pHddCtx->cfg_ini->vosTraceEnablePE);
+   hdd_vos_trace_enable(VOS_MODULE_ID_WDA,
+                        pHddCtx->cfg_ini->vosTraceEnableWDA);
+   hdd_vos_trace_enable(VOS_MODULE_ID_SYS,
+                        pHddCtx->cfg_ini->vosTraceEnableSYS);
+   hdd_vos_trace_enable(VOS_MODULE_ID_VOSS,
+                        pHddCtx->cfg_ini->vosTraceEnableVOSS);
+#ifdef WLAN_SOFTAP_FEATURE
+   hdd_vos_trace_enable(VOS_MODULE_ID_SAP,
+                        pHddCtx->cfg_ini->vosTraceEnableSAP);
+   hdd_vos_trace_enable(VOS_MODULE_ID_HDD_SOFTAP,
+                        pHddCtx->cfg_ini->vosTraceEnableHDDSAP);
+#endif
+
 #ifdef FEATURE_WLAN_INTEGRATED_SOC
    // Update WDI trace levels based upon the cfg.ini
    hdd_wdi_trace_enable(eWLAN_MODULE_DAL,