wlan: Fix crash in fw logging

If wlanLoggingEnable ini param is disabled,logger infrastructure
is not initialized. Then a crash is possible when gwlan_logging
structure is accessed. Thus, enable checks in __vos_fatal_event_logs_req
and fatal log indication from fw to check for wlanLoggingEnable.

Change-Id: I3c705a98796641b9cc34402a44d0b1b743547653
CRs-fixed: 1035040
diff --git a/CORE/SVC/src/logging/wlan_logging_sock_svc.c b/CORE/SVC/src/logging/wlan_logging_sock_svc.c
index d9b21e8..b19bd42 100644
--- a/CORE/SVC/src/logging/wlan_logging_sock_svc.c
+++ b/CORE/SVC/src/logging/wlan_logging_sock_svc.c
@@ -1857,7 +1857,8 @@
         }
 
 	if ((type == WLAN_FW_LOGS) && reason_code &&
-				 vos_isFatalEventEnabled())
+				 vos_isFatalEventEnabled() &&
+				 vos_is_wlan_logging_enabled())
 	{
 		if(wlan_is_log_report_in_progress() == TRUE)
 		{
@@ -1904,7 +1905,7 @@
 			wake_up_interruptible(&gwlan_logging.wait_queue);
 		}
 	}
-	if(type == WLAN_FW_MEMORY_DUMP)
+	if(type == WLAN_FW_MEMORY_DUMP && vos_is_wlan_logging_enabled())
 	{
 		pr_info("%s: Setting FW MEM DUMP LOGGER event\n", __func__);
 		set_bit(LOGGER_FW_MEM_DUMP_PKT_POST_DONE, &gwlan_logging.event_flag);
diff --git a/CORE/VOSS/inc/vos_api.h b/CORE/VOSS/inc/vos_api.h
index 7f4fc05..dadb57e 100644
--- a/CORE/VOSS/inc/vos_api.h
+++ b/CORE/VOSS/inc/vos_api.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012-2015 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2016 The Linux Foundation. All rights reserved.
  *
  * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
  *
@@ -504,4 +504,5 @@
 void vos_probe_threads(void);
 void vos_per_pkt_stats_to_user(void *perPktStat);
 void vos_updatePktStatsInfo(void * pktStat);
+bool vos_is_wlan_logging_enabled(void);
 #endif // if !defined __VOS_NVITEM_H
diff --git a/CORE/VOSS/src/vos_api.c b/CORE/VOSS/src/vos_api.c
index 3bd3869..a97dcb3 100644
--- a/CORE/VOSS/src/vos_api.c
+++ b/CORE/VOSS/src/vos_api.c
@@ -1812,20 +1812,27 @@
     {
         VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
             "%s: vos context is Invalid", __func__);
-        return eHAL_STATUS_FAILURE;
+        return VOS_STATUS_E_FAILURE;
     }
     pHddCtx = (hdd_context_t *)vos_get_context(VOS_MODULE_ID_HDD, vos_context );
     if(!pHddCtx) {
        VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL,
                 "%s: HDD context is Null", __func__);
-       return eHAL_STATUS_FAILURE;
+       return VOS_STATUS_E_FAILURE;
+    }
+
+    if(!pHddCtx->cfg_ini->wlanLoggingEnable)
+    {
+       VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO,
+            "%s: Wlan logging not enabled", __func__);
+        return VOS_STATUS_E_FAILURE;
     }
 
     if(!pHddCtx->cfg_ini->enableFatalEvent)
     {
        VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO,
             "%s: Fatal event not enabled", __func__);
-        return eHAL_STATUS_FAILURE;
+        return VOS_STATUS_E_FAILURE;
     }
 
     if (pHddCtx->isLoadUnloadInProgress ||
@@ -1833,7 +1840,7 @@
     {
        VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
             "%s: un/Load/SSR in progress", __func__);
-        return eHAL_STATUS_FAILURE;
+        return VOS_STATUS_E_FAILURE;
     }
 
     if (vos_is_log_report_in_progress() == true)
@@ -3484,3 +3491,31 @@
     value = wlan_isPktStatsEnabled();
     return (value);
 }
+
+bool vos_is_wlan_logging_enabled(void)
+{
+    v_CONTEXT_t vos_ctx = vos_get_global_context(VOS_MODULE_ID_SYS, NULL);
+    hdd_context_t *hdd_ctx;
+
+    if(!vos_ctx)
+    {
+       hddLog(VOS_TRACE_LEVEL_FATAL,"%s: Global VOS context is Null", __func__);
+       return false;
+    }
+
+    hdd_ctx = vos_get_context(VOS_MODULE_ID_HDD, vos_ctx);
+
+    if(!hdd_ctx)
+    {
+       hddLog(VOS_TRACE_LEVEL_FATAL,"%s: HDD context is Null", __func__);
+       return false;
+    }
+
+    if (!hdd_ctx->cfg_ini->wlanLoggingEnable)
+    {
+       hddLog(VOS_TRACE_LEVEL_FATAL,"%s: Logging framework not enabled!", __func__);
+       return false;
+    }
+
+    return true;
+}