WLAN : Extended iwpriv command 'getHostStates'

As part of the 'getHostStates' printing the HDD,CSR,
Lim (SME and MLM) and TL states.

CRs-Fixed: 508110
Change-Id: I8d7169275eeb877736379b0767f6c960147390fe
diff --git a/CORE/HDD/src/wlan_hdd_wext.c b/CORE/HDD/src/wlan_hdd_wext.c
index e0f70c3..1cd307a 100644
--- a/CORE/HDD/src/wlan_hdd_wext.c
+++ b/CORE/HDD/src/wlan_hdd_wext.c
@@ -63,6 +63,7 @@
 #include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/wireless.h>
+#include <macTrace.h>
 #include <wlan_hdd_includes.h>
 #include <wlan_btc_svc.h>
 #include <wlan_nlink_common.h>
@@ -213,6 +214,7 @@
 #ifdef WLAN_FEATURE_11W
 #define WE_GET_11W_INFO      9
 #endif
+#define WE_GET_STATES        10
 
 /* Private ioctls and their sub-ioctls */
 #define WLAN_PRIV_SET_NONE_GET_NONE   (SIOCIWFIRSTPRIV + 6)
@@ -348,6 +350,9 @@
 #define TX_PER_TRACKING_MAX_RATIO                10
 #define TX_PER_TRACKING_DEFAULT_WATERMARK         5
 
+#define WLAN_ADAPTER 0
+#define P2P_ADAPTER  1
+
 /*MCC Configuration parameters */
 enum {
     MCC_SCHEDULE_TIME_SLICE_CFG_PARAM = 1,
@@ -2657,7 +2662,6 @@
 {
 
     hdd_adapter_t *call_back_pAdapter = pAdapter;
-  
     complete(&call_back_pAdapter->change_country_code);
 
     return NULL;
@@ -3974,9 +3978,8 @@
         case WE_GET_11D_STATE:
         {
            tSmeConfigParams smeConfig;
-           
            sme_GetConfigParam(hHal,&smeConfig);
-           
+
            *value = smeConfig.csrConfig.Is11dSupportEnabled;
 
             VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, ("11D state=%ld!!\n"),*value);
@@ -4215,6 +4218,134 @@
             break;
         }
 
+/* The case prints the current state of the HDD, SME, CSR, PE, TL
+   *it can be extended for WDI Global State as well.
+   *And currently it only checks P2P_CLIENT adapter.
+   *P2P_DEVICE and P2P_GO have not been added as of now.
+*/
+        case WE_GET_STATES:
+        {
+            int buf = 0, len = 0;
+            int adapter_num = 0;
+            int count = 0, check = 1;
+
+            tANI_U16 tlState;
+            tHalHandle hHal;
+            tpAniSirGlobal pMac;
+            hdd_station_ctx_t *pHddStaCtx;
+
+            hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX( pAdapter );
+            hdd_adapter_t *useAdapter = NULL;
+
+            /* Print wlan0 or p2p0 states based on the adapter_num
+              *by using the correct adapter
+            */
+            while ( adapter_num < 2 )
+            {
+                if ( WLAN_ADAPTER == adapter_num )
+                {
+                    useAdapter = pAdapter;
+                    buf = snprintf(extra + len, WE_MAX_STR_LEN - len,
+                            "\n\n wlan0 States:-");
+                    len += buf;
+                }
+                else if ( P2P_ADAPTER == adapter_num )
+                {
+                    buf = snprintf(extra + len, WE_MAX_STR_LEN - len,
+                            "\n\n p2p0 States:-");
+                    len += buf;
+
+                    if( !pHddCtx )
+                    {
+                        buf = snprintf(extra + len, WE_MAX_STR_LEN - len,
+                                "\n pHddCtx is NULL");
+                        len += buf;
+                        break;
+                    }
+
+                    /*Printing p2p0 states only in the case when the device is
+                      configured as a p2p_client*/
+                    useAdapter = hdd_get_adapter(pHddCtx, WLAN_HDD_P2P_CLIENT);
+                    if ( !useAdapter )
+                    {
+                        buf = snprintf(extra + len, WE_MAX_STR_LEN - len,
+                                "\n Device not configured as P2P_CLIENT.");
+                        len += buf;
+                        break;
+                    }
+                }
+
+                hHal = WLAN_HDD_GET_HAL_CTX( useAdapter );
+                pMac = PMAC_STRUCT( hHal );
+                pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR( useAdapter );
+                if( !pHddStaCtx )
+                {
+                    buf = snprintf(extra + len,  WE_MAX_STR_LEN - len,
+                            "\n pHddStaCtx is NULL");
+                    len += buf;
+                    break;
+                }
+
+                tlState = smeGetTLSTAState(hHal, pHddStaCtx->conn_info.staId[0]);
+
+                buf = snprintf(extra + len, WE_MAX_STR_LEN - len,
+                        "\n HDD Conn State - %s "
+                        "\n \n SME State:"
+                        "\n Neighbour Roam State - %s"
+                        "\n CSR State - %s"
+                        "\n CSR Substate - %s"
+                        "\n \n TL STA %d State: %s",
+                        macTraceGetHDDWlanConnState(
+                                pHddStaCtx->conn_info.connState),
+                        macTraceGetNeighbourRoamState(
+                                pMac->roam.neighborRoamInfo.neighborRoamState),
+                        macTraceGetcsrRoamState(
+                                pMac->roam.curState[useAdapter->sessionId]),
+                        macTraceGetcsrRoamSubState(
+                                pMac->roam.curSubState[useAdapter->sessionId]),
+                        pHddStaCtx->conn_info.staId[0],
+                        macTraceGetTLState(tlState)
+                        );
+                len += buf;
+                adapter_num++;
+            }
+
+            /* Printing Lim State starting with global lim states */
+            buf = snprintf(extra + len, WE_MAX_STR_LEN - len,
+                    "\n \n LIM STATES:-"
+                    "\n Global Sme State - %s "\
+                    "\n Global mlm State - %s "\
+                    "\n",
+                    macTraceGetLimSmeState(pMac->lim.gLimSmeState),
+                    macTraceGetLimMlmState(pMac->lim.gLimMlmState)
+                    );
+            len += buf;
+
+            /*printing the PE Sme and Mlm states for valid lim sessions*/
+            while ( check < 3 && count < 255)
+            {
+                if ( pMac->lim.gpSession[count].valid )
+                {
+                    buf = snprintf(extra + len, WE_MAX_STR_LEN - len,
+                    "\n Lim Valid Session %d:-"
+                    "\n PE Sme State - %s "
+                    "\n PE Mlm State - %s "
+                    "\n",
+                    check,
+                    macTraceGetLimSmeState(pMac->lim.gpSession[count].limSmeState),
+                    macTraceGetLimMlmState(pMac->lim.gpSession[count].limMlmState)
+                    );
+
+                    len += buf;
+                    check++;
+                }
+                count++;
+            }
+
+            wrqu->data.length = strlen(extra)+1;
+            break;
+        }
+
         case WE_GET_CFG:
         {
             hdd_cfg_get_config(WLAN_HDD_GET_CTX(pAdapter), extra, WE_MAX_STR_LEN);
@@ -4231,7 +4362,7 @@
             break;
         }
 #endif
-           
+
 #if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
         case WE_GET_ROAM_RSSI:
         {
@@ -4334,7 +4465,7 @@
            break;
        }
 #endif
-        default:  
+        default:
         {
             hddLog(LOGE, "Invalid IOCTL command %d  \n",  sub_cmd );
             break;
@@ -4480,7 +4611,7 @@
             sme_RoamReassoc(pMac, pAdapter->sessionId, NULL, modProfileFields, &roamId, 1);
             return 0;
         }
-        
+
 
         default:
         {
@@ -6419,10 +6550,10 @@
         return -EIO;
     }
 
-    if ( (band == eCSR_BAND_24 && pHddCtx->cfg_ini->nBandCapability==2) || 
-         (band == eCSR_BAND_5G && pHddCtx->cfg_ini->nBandCapability==1) || 
-         (band == eCSR_BAND_ALL && pHddCtx->cfg_ini->nBandCapability!=0)) 
-    {       
+    if ( (band == eCSR_BAND_24 && pHddCtx->cfg_ini->nBandCapability==2) ||
+         (band == eCSR_BAND_5G && pHddCtx->cfg_ini->nBandCapability==1) ||
+         (band == eCSR_BAND_ALL && pHddCtx->cfg_ini->nBandCapability!=0))
+    {
          VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
              "%s: band value %u violate INI settings %u", __func__,
              band, pHddCtx->cfg_ini->nBandCapability);
@@ -6970,6 +7101,10 @@
         0,
         IW_PRIV_TYPE_CHAR| WE_MAX_STR_LEN,
         "getStats" },
+    {   WE_GET_STATES,
+        0,
+        IW_PRIV_TYPE_CHAR| WE_MAX_STR_LEN,
+        "getHostStates" },
     {   WE_GET_CFG,
         0,
         IW_PRIV_TYPE_CHAR| WE_MAX_STR_LEN,
@@ -6992,7 +7127,7 @@
         "getWmmStatus" },
     {
         WE_GET_CHANNEL_LIST,
-        0, 
+        0,
         IW_PRIV_TYPE_CHAR| WE_MAX_STR_LEN,
         "getChannelList" },
 #ifdef FEATURE_WLAN_TDLS
@@ -7218,7 +7353,6 @@
         WLAN_GET_LINK_SPEED,
         IW_PRIV_TYPE_CHAR | 18,
         IW_PRIV_TYPE_CHAR | 5, "getLinkSpeed" },
-   
 };
 
 
diff --git a/CORE/MAC/inc/macTrace.h b/CORE/MAC/inc/macTrace.h
index 2b1d30d..72d9f3c 100644
--- a/CORE/MAC/inc/macTrace.h
+++ b/CORE/MAC/inc/macTrace.h
@@ -124,7 +124,18 @@
 eHalStatus pe_AcquireGlobalLock( tAniSirLim *psPe);
 eHalStatus pe_ReleaseGlobalLock( tAniSirLim *psPe);
 
+tANI_U8* macTraceGetHDDWlanConnState(tANI_U16 connState);
 
+#ifdef WLAN_FEATURE_P2P_DEBUG
+tANI_U8* macTraceGetP2PConnState(tANI_U16 connState);
+#endif
+
+tANI_U8* macTraceGetNeighbourRoamState(tANI_U16 neighbourRoamState);
+tANI_U8* macTraceGetcsrRoamState(tANI_U16 csrRoamState);
+tANI_U8* macTraceGetcsrRoamSubState(tANI_U16 csrRoamSubState);
+tANI_U8* macTraceGetLimSmeState(tANI_U16 limState);
+tANI_U8* macTraceGetLimMlmState(tANI_U16 mlmState);
+tANI_U8* macTraceGetTLState(tANI_U16 tlState);
 
 #endif
 
diff --git a/CORE/SME/inc/csrInternal.h b/CORE/SME/inc/csrInternal.h
index ef481d1..01efb81 100644
--- a/CORE/SME/inc/csrInternal.h
+++ b/CORE/SME/inc/csrInternal.h
@@ -1207,6 +1207,15 @@
                             tANI_U32 periodicity, tANI_BOOLEAN cache,
                             tANI_U8 staId, void *pContext);
 
+/* ---------------------------------------------------------------------------
+    \fn csrGetTLSTAState
+    \helper function to get the TL STA State whenever the function is called.
+
+    \param staId - The staID to be passed to the TL
+            to get the relevant TL STA State
+    \return the state as tANI_U16
+  ---------------------------------------------------------------------------*/
+tANI_U16 csrGetTLSTAState(tpAniSirGlobal pMac, tANI_U8 staId);
 
 eHalStatus csrGetRssi(tpAniSirGlobal pMac,tCsrRssiCallback callback,tANI_U8 staId,tCsrBssid bssId,void * pContext,void * pVosContext);
 #if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
diff --git a/CORE/SME/inc/sme_Api.h b/CORE/SME/inc/sme_Api.h
index b9f69f9..fc49fae 100644
--- a/CORE/SME/inc/sme_Api.h
+++ b/CORE/SME/inc/sme_Api.h
@@ -778,6 +778,16 @@
                              tANI_U32 periodicity, tANI_BOOLEAN cache, 
                              tANI_U8 staId, void *pContext);
 
+/* ---------------------------------------------------------------------------
+    \fn smeGetTLSTAState
+    \helper function to get teh TL STA State whenever the function is called.
+
+    \param staId - The staID to be passed to the TL
+            to get the relevant TL STA State
+    \return the state as tANI_U16
+  ---------------------------------------------------------------------------*/
+tANI_U16 smeGetTLSTAState(tHalHandle hHal, tANI_U8 staId);
+
 eHalStatus sme_GetRssi(tHalHandle hHal, 
                              tCsrRssiCallback callback, 
                              tANI_U8 staId, tCsrBssid bssId, void *pContext, void* pVosContext);
diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c
index 54c4c4a..1a2125c 100644
--- a/CORE/SME/src/csr/csrApiRoam.c
+++ b/CORE/SME/src/csr/csrApiRoam.c
@@ -14431,6 +14431,28 @@
 }
 #endif
 
+/* ---------------------------------------------------------------------------
+    \fn csrGetTLSTAState
+    \helper function to get teh TL STA State whenever the function is called.
+
+    \param staId - The staID to be passed to the TL
+            to get the relevant TL STA State
+    \return the state as tANI_U16
+  ---------------------------------------------------------------------------*/
+tANI_U16 csrGetTLSTAState(tpAniSirGlobal pMac, tANI_U8 staId)
+{
+   WLANTL_STAStateType tlSTAState;
+   tlSTAState = WLANTL_STA_INIT;
+
+   //request TL for STA State
+   if ( !VOS_IS_STATUS_SUCCESS(WLANTL_GetSTAState(pMac->roam.gVosContext, staId, &tlSTAState)) )
+   {
+      smsLog(pMac, LOGE, FL("csrGetTLSTAState:couldn't get the STA state from TL"));
+   }
+
+   return tlSTAState;
+}
+
 eHalStatus csrGetStatistics(tpAniSirGlobal pMac, eCsrStatsRequesterType requesterId, 
                             tANI_U32 statsMask, 
                             tCsrStatsCallback callback, 
diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c
index 23e21f2..fdc2331 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.c
@@ -90,6 +90,7 @@
 #include <wlan_qct_pal_api.h>
 
 #define READ_MEMORY_DUMP_CMD     9
+#define TL_INIT_STATE            0
 
 // TxMB Functions
 extern eHalStatus pmcPrepareCommand( tpAniSirGlobal pMac, eSmeCommandType cmdType, void *pvParam,
@@ -4029,6 +4030,30 @@
 }
 
 /* ---------------------------------------------------------------------------
+    \fn smeGetTLSTAState
+    \helper function to get the TL STA State whenever the function is called.
+
+    \param staId - The staID to be passed to the TL
+            to get the relevant TL STA State
+    \return the state as tANI_U16
+  ---------------------------------------------------------------------------*/
+tANI_U16 smeGetTLSTAState(tHalHandle hHal, tANI_U8 staId)
+{
+   tANI_U16 tlSTAState = TL_INIT_STATE;
+   tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
+   eHalStatus status = eHAL_STATUS_FAILURE;
+
+   status = sme_AcquireGlobalLock( &pMac->sme );
+   if ( HAL_STATUS_SUCCESS( status ) )
+   {
+      tlSTAState = csrGetTLSTAState( pMac, staId);
+      sme_ReleaseGlobalLock( &pMac->sme );
+   }
+
+   return tlSTAState;
+}
+
+/* ---------------------------------------------------------------------------
 
     \fn sme_GetCountryCode
 
diff --git a/CORE/SYS/legacy/src/utils/src/macTrace.c b/CORE/SYS/legacy/src/utils/src/macTrace.c
index 70efdac..4e4679a 100644
--- a/CORE/SYS/legacy/src/utils/src/macTrace.c
+++ b/CORE/SYS/legacy/src/utils/src/macTrace.c
@@ -63,15 +63,277 @@
 #include "macTrace.h"
 #include "wlan_qct_wda.h"
 
+#include "wlan_hdd_assoc.h"
+#include "wlan_hdd_main.h"
+#ifdef CONFIG_CFG80211
+#include "wlan_hdd_p2p.h"
+#endif
+#include "csrNeighborRoam.h"
+#include "csrInternal.h"
+#include "limGlobal.h"
+#include "wlan_qct_tl.h"
 
 #ifdef TRACE_RECORD
 static tTraceRecord gTraceTbl[MAX_TRACE_RECORDS];
 static tTraceData gTraceData;
 static tpTraceCb traceCBTable[VOS_MODULE_ID_MAX];
 
+/* ---------------------------------------------------------------------------
+    \fn macTraceGetHDDWlanConnState
+    \function to get string equivalent of a value
+	 from the enum eConnectionState.
 
+    \param connState - the value from the enum
+    \return the string equivalent of connState
+  ---------------------------------------------------------------------------*/
+tANI_U8* macTraceGetHDDWlanConnState(tANI_U16 connState)
+{
+    switch(connState)
+    {
+        CASE_RETURN_STRING(eConnectionState_NotConnected);
+        CASE_RETURN_STRING(eConnectionState_Connecting);
+        CASE_RETURN_STRING(eConnectionState_Associated);
+        CASE_RETURN_STRING(eConnectionState_IbssDisconnected);
+        CASE_RETURN_STRING(eConnectionState_IbssConnected);
+        CASE_RETURN_STRING(eConnectionState_Disconnecting);
 
+        default:
+            return( (tANI_U8*)"UNKNOWN" );
+            break;
+    }
+}
 
+/* ---------------------------------------------------------------------------
+    \fn macTraceGetP2PConnState
+    \function to get string equivalent of a value
+	 from the enum tP2PConnectionStatus.
+
+    \param connState - the value from the enum
+    \return the string equivalent of connState
+  ---------------------------------------------------------------------------*/
+#ifdef WLAN_FEATURE_P2P_DEBUG
+tANI_U8* macTraceGetP2PConnState(tANI_U16 connState)
+{
+    switch(connState)
+    {
+        CASE_RETURN_STRING(P2P_NOT_ACTIVE);
+        CASE_RETURN_STRING(P2P_GO_NEG_PROCESS);
+        CASE_RETURN_STRING(P2P_GO_NEG_COMPLETED);
+        CASE_RETURN_STRING(P2P_CLIENT_CONNECTING_STATE_1);
+        CASE_RETURN_STRING(P2P_GO_COMPLETED_STATE);
+        CASE_RETURN_STRING(P2P_CLIENT_CONNECTED_STATE_1);
+        CASE_RETURN_STRING(P2P_CLIENT_DISCONNECTED_STATE);
+        CASE_RETURN_STRING(P2P_CLIENT_CONNECTING_STATE_2);
+        CASE_RETURN_STRING(P2P_CLIENT_COMPLETED_STATE);
+
+        default:
+            return( (tANI_U8*)"UNKNOWN" );
+            break;
+    }
+}
+#endif
+
+/* ---------------------------------------------------------------------------
+    \fn macTraceGetNeighbourRoamState
+    \function to get string equivalent of a value
+	 from the enum eCsrNeighborRoamState.
+
+    \param neighbourRoamState - the value from the enum
+    \return the string equivalent of neighbourRoamState
+  ---------------------------------------------------------------------------*/
+tANI_U8* macTraceGetNeighbourRoamState(tANI_U16 neighbourRoamState)
+{
+    switch(neighbourRoamState)
+    {
+        CASE_RETURN_STRING(eCSR_NEIGHBOR_ROAM_STATE_CLOSED);
+        CASE_RETURN_STRING(eCSR_NEIGHBOR_ROAM_STATE_INIT);
+        CASE_RETURN_STRING(eCSR_NEIGHBOR_ROAM_STATE_CONNECTED);
+        CASE_RETURN_STRING(eCSR_NEIGHBOR_ROAM_STATE_CFG_CHAN_LIST_SCAN);
+        CASE_RETURN_STRING(eCSR_NEIGHBOR_ROAM_STATE_REASSOCIATING);
+        #ifdef WLAN_FEATURE_VOWIFI_11R
+        CASE_RETURN_STRING(eCSR_NEIGHBOR_ROAM_STATE_REPORT_QUERY);
+        CASE_RETURN_STRING(eCSR_NEIGHBOR_ROAM_STATE_REPORT_SCAN);
+        CASE_RETURN_STRING(eCSR_NEIGHBOR_ROAM_STATE_PREAUTHENTICATING);
+        CASE_RETURN_STRING(eCSR_NEIGHBOR_ROAM_STATE_PREAUTH_DONE);
+        #endif /* WLAN_FEATURE_VOWIFI_11R */
+        CASE_RETURN_STRING(eNEIGHBOR_STATE_MAX);
+
+        default:
+            return( (tANI_U8*)"UNKNOWN" );
+            break;
+    }
+}
+
+/* ---------------------------------------------------------------------------
+    \fn macTraceGetcsrRoamState
+    \function to get string equivalent of a value
+	 from the enum eCsrRoamState.
+
+    \param csrRoamState - the value from the enum
+    \return the string equivalent of csrRoamState
+  ---------------------------------------------------------------------------*/
+tANI_U8* macTraceGetcsrRoamState(tANI_U16 csrRoamState)
+{
+    switch(csrRoamState)
+    {
+        CASE_RETURN_STRING(eCSR_ROAMING_STATE_STOP);
+        CASE_RETURN_STRING(eCSR_ROAMING_STATE_IDLE);
+        CASE_RETURN_STRING(eCSR_ROAMING_STATE_SCANNING);
+        CASE_RETURN_STRING(eCSR_ROAMING_STATE_JOINING);
+        CASE_RETURN_STRING(eCSR_ROAMING_STATE_JOINED);
+
+        default:
+            return( (tANI_U8*)"UNKNOWN" );
+            break;
+    }
+}
+
+/* ---------------------------------------------------------------------------
+    \fn macTraceGetcsrRoamSubState
+    \function to get string equivalent of a value
+	 from the enum eCsrRoamSubState.
+
+    \param csrRoamSubState - the value from the enum
+    \return the string equivalent of csrRoamSubState
+  ---------------------------------------------------------------------------*/
+tANI_U8* macTraceGetcsrRoamSubState(tANI_U16 csrRoamSubState)
+{
+    switch(csrRoamSubState)
+    {
+        CASE_RETURN_STRING(eCSR_ROAM_SUBSTATE_NONE);
+        CASE_RETURN_STRING(eCSR_ROAM_SUBSTATE_START_BSS_REQ);
+        CASE_RETURN_STRING(eCSR_ROAM_SUBSTATE_JOIN_REQ);
+        CASE_RETURN_STRING(eCSR_ROAM_SUBSTATE_REASSOC_REQ);
+        CASE_RETURN_STRING(eCSR_ROAM_SUBSTATE_DISASSOC_REQ);
+        CASE_RETURN_STRING(eCSR_ROAM_SUBSTATE_STOP_BSS_REQ);
+        CASE_RETURN_STRING(eCSR_ROAM_SUBSTATE_DISCONNECT_CONTINUE_ROAMING);
+        CASE_RETURN_STRING(eCSR_ROAM_SUBSTATE_AUTH_REQ);
+        CASE_RETURN_STRING(eCSR_ROAM_SUBSTATE_CONFIG);
+        CASE_RETURN_STRING(eCSR_ROAM_SUBSTATE_DEAUTH_REQ);
+        CASE_RETURN_STRING(eCSR_ROAM_SUBSTATE_DISASSOC_NOTHING_TO_JOIN);
+        CASE_RETURN_STRING(eCSR_ROAM_SUBSTATE_DISASSOC_REASSOC_FAILURE);
+        CASE_RETURN_STRING(eCSR_ROAM_SUBSTATE_DISASSOC_FORCED);
+        CASE_RETURN_STRING(eCSR_ROAM_SUBSTATE_WAIT_FOR_KEY);
+        CASE_RETURN_STRING(eCSR_ROAM_SUBSTATE_DISASSOC_HANDOFF);
+        CASE_RETURN_STRING(eCSR_ROAM_SUBSTATE_JOINED_NO_TRAFFIC);
+        CASE_RETURN_STRING(eCSR_ROAM_SUBSTATE_JOINED_NON_REALTIME_TRAFFIC);
+        CASE_RETURN_STRING(eCSR_ROAM_SUBSTATE_JOINED_REALTIME_TRAFFIC);
+
+        default:
+            return( (tANI_U8*)"UNKNOWN" );
+            break;
+    }
+}
+
+/* ---------------------------------------------------------------------------
+    \fn macTraceGetLimSmeState
+    \function to get string equivalent of a value
+	 from the enum tLimSmeStates.
+
+    \param limState - the value from the enum
+    \return the string equivalent of limState
+  ---------------------------------------------------------------------------*/
+tANI_U8* macTraceGetLimSmeState(tANI_U16 limState)
+{
+    switch(limState)
+    {
+        CASE_RETURN_STRING(eLIM_SME_OFFLINE_STATE);
+        CASE_RETURN_STRING(eLIM_SME_IDLE_STATE);
+        CASE_RETURN_STRING(eLIM_SME_SUSPEND_STATE);
+        CASE_RETURN_STRING(eLIM_SME_WT_SCAN_STATE);
+        CASE_RETURN_STRING(eLIM_SME_WT_JOIN_STATE);
+        CASE_RETURN_STRING(eLIM_SME_WT_AUTH_STATE);
+        CASE_RETURN_STRING(eLIM_SME_WT_ASSOC_STATE);
+        CASE_RETURN_STRING(eLIM_SME_WT_REASSOC_STATE);
+        CASE_RETURN_STRING(eLIM_SME_WT_REASSOC_LINK_FAIL_STATE);
+        CASE_RETURN_STRING(eLIM_SME_JOIN_FAILURE_STATE);
+        CASE_RETURN_STRING(eLIM_SME_ASSOCIATED_STATE);
+        CASE_RETURN_STRING(eLIM_SME_REASSOCIATED_STATE);
+        CASE_RETURN_STRING(eLIM_SME_LINK_EST_STATE);
+        CASE_RETURN_STRING(eLIM_SME_LINK_EST_WT_SCAN_STATE);
+        CASE_RETURN_STRING(eLIM_SME_WT_PRE_AUTH_STATE);
+        CASE_RETURN_STRING(eLIM_SME_WT_DISASSOC_STATE);
+        CASE_RETURN_STRING(eLIM_SME_WT_DEAUTH_STATE);
+        CASE_RETURN_STRING(eLIM_SME_WT_START_BSS_STATE);
+        CASE_RETURN_STRING(eLIM_SME_WT_STOP_BSS_STATE);
+        CASE_RETURN_STRING(eLIM_SME_NORMAL_STATE);
+        CASE_RETURN_STRING(eLIM_SME_CHANNEL_SCAN_STATE);
+        CASE_RETURN_STRING(eLIM_SME_NORMAL_CHANNEL_SCAN_STATE);
+
+        default:
+            return( (tANI_U8*)"UNKNOWN" );
+            break;
+    }
+}
+
+/* ---------------------------------------------------------------------------
+    \fn macTraceGetLimMlmState
+    \function to get string equivalent of a value
+	 from the enum tLimMlmStates.
+
+    \param mlmState - the value from the enum
+    \return the string equivalent of mlmState
+  ---------------------------------------------------------------------------*/
+tANI_U8* macTraceGetLimMlmState(tANI_U16 mlmState)
+{
+    switch(mlmState)
+    {
+        CASE_RETURN_STRING(eLIM_MLM_OFFLINE_STATE);
+        CASE_RETURN_STRING(eLIM_MLM_IDLE_STATE);
+        CASE_RETURN_STRING(eLIM_MLM_WT_PROBE_RESP_STATE);
+        CASE_RETURN_STRING(eLIM_MLM_PASSIVE_SCAN_STATE);
+        CASE_RETURN_STRING(eLIM_MLM_WT_JOIN_BEACON_STATE);
+        CASE_RETURN_STRING(eLIM_MLM_JOINED_STATE);
+        CASE_RETURN_STRING(eLIM_MLM_BSS_STARTED_STATE);
+        CASE_RETURN_STRING(eLIM_MLM_WT_AUTH_FRAME2_STATE);
+        CASE_RETURN_STRING(eLIM_MLM_WT_AUTH_FRAME3_STATE);
+        CASE_RETURN_STRING(eLIM_MLM_WT_AUTH_FRAME4_STATE);
+        CASE_RETURN_STRING(eLIM_MLM_AUTH_RSP_TIMEOUT_STATE);
+        CASE_RETURN_STRING(eLIM_MLM_AUTHENTICATED_STATE);
+        CASE_RETURN_STRING(eLIM_MLM_WT_ASSOC_RSP_STATE);
+        CASE_RETURN_STRING(eLIM_MLM_WT_REASSOC_RSP_STATE);
+        CASE_RETURN_STRING(eLIM_MLM_ASSOCIATED_STATE);
+        CASE_RETURN_STRING(eLIM_MLM_REASSOCIATED_STATE);
+        CASE_RETURN_STRING(eLIM_MLM_LINK_ESTABLISHED_STATE);
+        CASE_RETURN_STRING(eLIM_MLM_WT_ASSOC_CNF_STATE);
+        CASE_RETURN_STRING(eLIM_MLM_LEARN_STATE);
+        CASE_RETURN_STRING(eLIM_MLM_WT_ADD_BSS_RSP_STATE);
+        CASE_RETURN_STRING(eLIM_MLM_WT_DEL_BSS_RSP_STATE);
+        CASE_RETURN_STRING(eLIM_MLM_WT_ADD_BSS_RSP_ASSOC_STATE);
+        CASE_RETURN_STRING(eLIM_MLM_WT_ADD_BSS_RSP_REASSOC_STATE);
+        CASE_RETURN_STRING(eLIM_MLM_WT_ADD_BSS_RSP_PREASSOC_STATE);
+        CASE_RETURN_STRING(eLIM_MLM_WT_ADD_STA_RSP_STATE);
+        CASE_RETURN_STRING(eLIM_MLM_WT_DEL_STA_RSP_STATE);
+
+        default:
+            return( (tANI_U8*)"UNKNOWN" );
+            break;
+    }
+}
+
+/* ---------------------------------------------------------------------------
+    \fn macTraceGetTLState
+    \function to get string equivalent of a value
+	 from the enum WLANTL_STAStateType.
+
+    \param tlState - the value from the enum
+    \return the string equivalent of tlState
+  ---------------------------------------------------------------------------*/
+tANI_U8* macTraceGetTLState(tANI_U16 tlState)
+{
+   switch(tlState)
+    {
+        CASE_RETURN_STRING(WLANTL_STA_INIT);
+        CASE_RETURN_STRING(WLANTL_STA_CONNECTED);
+        CASE_RETURN_STRING(WLANTL_STA_AUTHENTICATED);
+        CASE_RETURN_STRING(WLANTL_STA_DISCONNECTED);
+        CASE_RETURN_STRING(WLANTL_STA_MAX_STATE);
+
+        default:
+            return( (tANI_U8*)"UNKNOWN" );
+            break;
+   }
+}
 
 tANI_U8* macTraceGetSmeMsgString( tANI_U16 smeMsg )
 {