diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c
index 6ca9684..d7b56c5 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.c
@@ -81,9 +81,6 @@
 #include "wlan_qct_wda.h"
 #include "halMsgApi.h"
 #include "vos_trace.h"
-#include "sme_Trace.h"
-#include "limTrace.h"
-
 #include "sapApi.h"
 
 
@@ -773,8 +770,6 @@
 
                     // .... and process the command.
 
-                    MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-                       TRACE_CODE_SME_COMMAND, pCommand->sessionId, pCommand->command));
                     switch ( pCommand->command )
                     {
 
@@ -1162,7 +1157,6 @@
       sme_FTOpen(pMac);
 #endif
       sme_p2pOpen(pMac);
-      smeTraceInit(pMac);
 
    }while (0);
 
@@ -1192,8 +1186,6 @@
    eHalStatus status = eHAL_STATUS_FAILURE;
    tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
 
-   MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-                      TRACE_CODE_SME_RX_HDD_MSG_SET_11DINFO, NO_SESSION, 0));
    if (NULL == pSmeConfigParams ) {
       smsLog( pMac, LOGE,
               "Empty config param structure for SME, nothing to update");
@@ -1228,8 +1220,6 @@
    eHalStatus status = eHAL_STATUS_FAILURE;
    tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
 
-   MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-             TRACE_CODE_SME_RX_HDD_MSG_GET_SOFTAP_DOMAIN, NO_SESSION, 0));
    if (NULL == domainIdSoftAp ) {
       smsLog( pMac, LOGE, "Uninitialized domain Id");
       return status;
@@ -1247,8 +1237,6 @@
    eHalStatus status = eHAL_STATUS_FAILURE;
    tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
 
-   MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-             TRACE_CODE_SME_RX_HDD_MSG_SET_REGINFO, NO_SESSION, 0));
    if (NULL == apCntryCode ) {
       smsLog( pMac, LOGE, "Empty Country Code, nothing to update");
       return status;
@@ -1284,9 +1272,7 @@
 {
   tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
 
-  MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-           TRACE_CODE_SME_RX_HDD_MSG_UPDATE_CHANNEL_CONFIG, NO_SESSION, 0));
-  pmcUpdateScanParams( pMac, &(pMac->roam.configParam),
+  pmcUpdateScanParams( pMac, &(pMac->roam.configParam), 
                       &pMac->scan.base20MHzChannels, FALSE);
   return eHAL_STATUS_SUCCESS;
 }
@@ -1318,8 +1304,6 @@
    eHalStatus status = eHAL_STATUS_FAILURE;
    tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
 
-   MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-                   TRACE_CODE_SME_RX_HDD_MSG_UPDATE_CONFIG, NO_SESSION, 0));
    if (NULL == pSmeConfigParams ) {
       smsLog( pMac, LOGE,
               "Empty config param structure for SME, nothing to update");
@@ -1473,8 +1457,6 @@
    tPmcSwitchState swWlanSwitchState;
    tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
 
-   MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-                  TRACE_CODE_SME_RX_HDD_MSG_HDDREADYIND, NO_SESSION, 0));
    do
    {
 
@@ -2416,8 +2398,7 @@
 {
     eHalStatus status = eHAL_STATUS_FAILURE;
     tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
-    MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-           TRACE_CODE_SME_RX_HDD_MSG_SCAN_REQ, sessionId, pscanReq->scanType));
+
     smsLog(pMac, LOG2, FL("enter"));
     do
     {
@@ -2478,8 +2459,6 @@
    eHalStatus status = eHAL_STATUS_FAILURE;
    tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
 
-   MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-              TRACE_CODE_SME_RX_HDD_MSG_SCAN_GET_RESULTS, sessionId,0 ));
    smsLog(pMac, LOG2, FL("enter"));
    status = sme_AcquireGlobalLock( &pMac->sme );
    if ( HAL_STATUS_SUCCESS( status ) )
@@ -2504,8 +2483,6 @@
    eHalStatus status = eHAL_STATUS_FAILURE;
    tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
 
-   MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-          TRACE_CODE_SME_RX_HDD_MSG_SCAN_FLUSH_RESULTS, sessionId,0 ));
    status = sme_AcquireGlobalLock( &pMac->sme );
    if ( HAL_STATUS_SUCCESS( status ) )
    {
@@ -2521,8 +2498,6 @@
         eHalStatus status = eHAL_STATUS_FAILURE;
         tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
 
-        MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-           TRACE_CODE_SME_RX_HDD_MSG_SCAN_FLUSH_P2PRESULTS, sessionId,0 ));
         status = sme_AcquireGlobalLock( &pMac->sme );
         if ( HAL_STATUS_SUCCESS( status ) )
         {
@@ -2548,8 +2523,6 @@
    tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
    tCsrScanResultInfo *pRet = NULL;
 
-   MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-          TRACE_CODE_SME_RX_HDD_MSG_SCAN_RESULT_GETFIRST, NO_SESSION,0 ));
    status = sme_AcquireGlobalLock( &pMac->sme );
    if ( HAL_STATUS_SUCCESS( status ) )
    {
@@ -2577,8 +2550,6 @@
     tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
     tCsrScanResultInfo *pRet = NULL;
 
-    MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME ,
-        TRACE_CODE_SME_RX_HDD_MSG_SCAN_RESULT_GETNEXT, NO_SESSION,0 ));
     status = sme_AcquireGlobalLock( &pMac->sme );
     if ( HAL_STATUS_SUCCESS( status ) )
     {
@@ -2631,8 +2602,6 @@
    eHalStatus status = eHAL_STATUS_FAILURE;
    tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
 
-   MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-             TRACE_CODE_SME_RX_HDD_MSG_SCAN_RESULT_PURGE, NO_SESSION,0 ));
    status = sme_AcquireGlobalLock( &pMac->sme );
    if ( HAL_STATUS_SUCCESS( status ) )
    {
@@ -2740,8 +2709,6 @@
     eHalStatus status = eHAL_STATUS_FAILURE;
     tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
 
-    MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-                   TRACE_CODE_SME_RX_HDD_MSG_CONNECT, sessionId, 0));
     smsLog(pMac, LOG2, FL("enter"));
     status = sme_AcquireGlobalLock( &pMac->sme );
     if ( HAL_STATUS_SUCCESS( status ) )
@@ -2816,8 +2783,6 @@
     eHalStatus status = eHAL_STATUS_FAILURE;
     tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
 
-    MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-                      TRACE_CODE_SME_RX_HDD_ROAM_REASSOC, sessionId, 0));
     smsLog(pMac, LOG2, FL("enter"));
     status = sme_AcquireGlobalLock( &pMac->sme );
     if ( HAL_STATUS_SUCCESS( status ) )
@@ -2890,8 +2855,6 @@
    eHalStatus status = eHAL_STATUS_FAILURE;
    tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
 
-   MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-                        TRACE_CODE_SME_RX_HDD_ROAM_DISCONNECT, sessionId, reason));
    smsLog(pMac, LOG2, FL("enter"));
    status = sme_AcquireGlobalLock( &pMac->sme );
    if ( HAL_STATUS_SUCCESS( status ) )
@@ -3180,8 +3143,6 @@
    eHalStatus status = eHAL_STATUS_FAILURE;
    tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
 
-   MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-                TRACE_CODE_SME_RX_HDD_ROAM_GET_CONNECTPROFILE, sessionId, 0));
    status = sme_AcquireGlobalLock( &pMac->sme );
    if ( HAL_STATUS_SUCCESS( status ) )
    {
@@ -3214,8 +3175,6 @@
    eHalStatus status = eHAL_STATUS_FAILURE;
    tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
 
-   MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-            TRACE_CODE_SME_RX_HDD_ROAM_FREE_CONNECTPROFILE, NO_SESSION, 0));
    status = sme_AcquireGlobalLock( &pMac->sme );
    if ( HAL_STATUS_SUCCESS( status ) )
    {
@@ -3247,8 +3206,6 @@
    eHalStatus status = eHAL_STATUS_FAILURE;
    tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
 
-   MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-          TRACE_CODE_SME_RX_HDD_ROAM_SET_PMKIDCACHE, sessionId, numItems));
    status = sme_AcquireGlobalLock( &pMac->sme );
    if ( HAL_STATUS_SUCCESS( status ) )
    {
@@ -3439,8 +3396,6 @@
    eHalStatus status = eHAL_STATUS_FAILURE;
    tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
 
-   MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-            TRACE_CODE_SME_RX_HDD_GET_CONFIGPARAM, NO_SESSION, 0));
    status = sme_AcquireGlobalLock( &pMac->sme );
    if ( HAL_STATUS_SUCCESS( status ) )
    {
@@ -3526,8 +3481,6 @@
    eHalStatus status = eHAL_STATUS_FAILURE;
    tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
 
-   MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-              TRACE_CODE_SME_RX_HDD_GET_MODPROFFIELDS, sessionId, 0));
    status = sme_AcquireGlobalLock( &pMac->sme );
    if ( HAL_STATUS_SUCCESS( status ) )
    {
@@ -3564,8 +3517,6 @@
    eHalStatus status = eHAL_STATUS_FAILURE;
    tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
 
-   MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-                 TRACE_CODE_SME_RX_HDD_SET_CONFIG_PWRSAVE, NO_SESSION, 0));
    if (NULL == pConfigParams ) {
       smsLog( pMac, LOGE, "Empty config param structure for PMC, "
               "nothing to update");
@@ -3597,8 +3548,6 @@
    eHalStatus status = eHAL_STATUS_FAILURE;
    tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
 
-   MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-            TRACE_CODE_SME_RX_HDD_GET_CONFIG_PWRSAVE, NO_SESSION, 0));
    if (NULL == pConfigParams ) {
       smsLog( pMac, LOGE, "Empty config param structure for PMC, "
               "nothing to update");
@@ -3653,8 +3602,6 @@
    eHalStatus status = eHAL_STATUS_FAILURE;
    tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
 
-   MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-          TRACE_CODE_SME_RX_HDD_ENABLE_PWRSAVE, NO_SESSION, psMode));
    status = sme_AcquireGlobalLock( &pMac->sme );
    if ( HAL_STATUS_SUCCESS( status ) )
    {
@@ -3679,8 +3626,6 @@
    eHalStatus status = eHAL_STATUS_FAILURE;
    tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
 
-   MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-              TRACE_CODE_SME_RX_HDD_DISABLE_PWRSAVE, NO_SESSION, psMode));
    status = sme_AcquireGlobalLock( &pMac->sme );
    if ( HAL_STATUS_SUCCESS( status ) )
    {
@@ -3723,8 +3668,6 @@
    eHalStatus status = eHAL_STATUS_FAILURE;
    tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
 
-   MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-             TRACE_CODE_SME_RX_HDD_START_AUTO_BMPSTIMER, NO_SESSION, 0));
    status = sme_AcquireGlobalLock( &pMac->sme );
    if ( HAL_STATUS_SUCCESS( status ) )
    {
@@ -3747,8 +3690,6 @@
    eHalStatus status = eHAL_STATUS_FAILURE;
    tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
 
-   MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-          TRACE_CODE_SME_RX_HDD_STOP_AUTO_BMPSTIMER, NO_SESSION, 0));
    status = sme_AcquireGlobalLock( &pMac->sme );
    if ( HAL_STATUS_SUCCESS( status ) )
    {
@@ -3798,8 +3739,6 @@
    tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
    tANI_BOOLEAN result = false;
 
-   MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-               TRACE_CODE_SME_RX_HDD_IS_PWRSAVE_ENABLED, NO_SESSION, psMode));
    status = sme_AcquireGlobalLock( &pMac->sme );
    if ( HAL_STATUS_SUCCESS( status ) )
    {
@@ -3836,8 +3775,6 @@
    eHalStatus status = eHAL_STATUS_FAILURE;
    tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
 
-   MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-         TRACE_CODE_SME_RX_HDD_REQUEST_FULLPOWER, NO_SESSION, fullPowerReason));
    status = sme_AcquireGlobalLock( &pMac->sme );
    if ( HAL_STATUS_SUCCESS( status ) )
    {
@@ -3868,8 +3805,6 @@
    eHalStatus status = eHAL_STATUS_FAILURE;
    tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
 
-   MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-           TRACE_CODE_SME_RX_HDD_REQUEST_BMPS, NO_SESSION, 0));
    status = sme_AcquireGlobalLock( &pMac->sme );
    if ( HAL_STATUS_SUCCESS( status ) )
    {
@@ -3891,8 +3826,6 @@
 {
    tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
 
-   MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-          TRACE_CODE_SME_RX_HDD_SET_DHCP_FLAG, NO_SESSION, flag));
    // Set/Clear the DHCP flag which will disable/enable auto BMPS entery by PMC
    pMac->pmc.remainInPowerActiveTillDHCP = flag;
 }
@@ -3973,8 +3906,6 @@
    eHalStatus status = eHAL_STATUS_FAILURE;
    tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
 
-   MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-             TRACE_CODE_SME_RX_HDD_REQUEST_STANDBY, NO_SESSION, 0));
    smsLog( pMac, LOG1, FL("") );
    status = sme_AcquireGlobalLock( &pMac->sme );
    if ( HAL_STATUS_SUCCESS( status ) )
@@ -4113,8 +4044,6 @@
 {
     eHalStatus status = eHAL_STATUS_FAILURE;
     tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
-    MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-           TRACE_CODE_SME_RX_HDD_WOWL_ADDBCAST_PATTERN, sessionId, 0));
     status = sme_AcquireGlobalLock( &pMac->sme );
     if ( HAL_STATUS_SUCCESS( status ) )
     {
@@ -4141,8 +4070,6 @@
 {
     eHalStatus status = eHAL_STATUS_FAILURE;
     tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
-    MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-           TRACE_CODE_SME_RX_HDD_WOWL_DELBCAST_PATTERN, sessionId, 0));
     status = sme_AcquireGlobalLock( &pMac->sme );
     if ( HAL_STATUS_SUCCESS( status ) )
     {
@@ -4195,8 +4122,6 @@
 {
     eHalStatus status = eHAL_STATUS_FAILURE;
     tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
-    MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-           TRACE_CODE_SME_RX_HDD_ENTER_WOWL, sessionId, 0));
     status = sme_AcquireGlobalLock( &pMac->sme );
     if ( HAL_STATUS_SUCCESS( status ) )
     {
@@ -4223,8 +4148,6 @@
 {
     eHalStatus status = eHAL_STATUS_FAILURE;
     tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
-    MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-           TRACE_CODE_SME_RX_HDD_EXIT_WOWL, NO_SESSION, 0));
     status = sme_AcquireGlobalLock( &pMac->sme );
     if ( HAL_STATUS_SUCCESS( status ) )
     {
@@ -4259,8 +4182,6 @@
    tANI_U32 i;
    tCsrRoamSession *pSession = NULL;
 
-   MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-          TRACE_CODE_SME_RX_HDD_SET_KEY, sessionId, 0));
    if (pSetKey->keyLength > CSR_MAX_KEY_LEN)
    {
       smsLog(pMac, LOGE, FL("Invalid key length %d"), pSetKey->keyLength);
@@ -4339,8 +4260,6 @@
    tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
    tANI_U32 roamId;
 
-   MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-          TRACE_CODE_SME_RX_HDD_REMOVE_KEY, sessionId, 0));
    status = sme_AcquireGlobalLock( &pMac->sme );
    if ( HAL_STATUS_SUCCESS( status ) )
    {
@@ -4498,8 +4417,6 @@
    eHalStatus status = eHAL_STATUS_FAILURE;
    tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
 
-   MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-                TRACE_CODE_SME_RX_HDD_GET_STATS, NO_SESSION,  periodicity));
    status = sme_AcquireGlobalLock( &pMac->sme );
    if ( HAL_STATUS_SUCCESS( status ) )
    {
@@ -4561,9 +4478,6 @@
 {
     tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
 
-    MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-                 TRACE_CODE_SME_RX_HDD_GET_CNTRYCODE, NO_SESSION, 0));
-
     return ( csrGetCountryCode( pMac, pBuf, pbLen ) );
 }
 
@@ -4590,8 +4504,6 @@
 {
     tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
 
-    MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-              TRACE_CODE_SME_RX_HDD_SET_CNTRYCODE, NO_SESSION, 0));
     return ( csrSetCountryCode( pMac, pCountry, pfRestartNeeded ) );
 }
 
@@ -4826,8 +4738,6 @@
    vos_msg_t                 msg;
    tAniChangeCountryCodeReq *pMsg;
 
-   MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-            TRACE_CODE_SME_RX_HDD_CHANGE_CNTRYCODE, NO_SESSION, 0));
    status = sme_AcquireGlobalLock( &pMac->sme );
    if ( HAL_STATUS_SUCCESS( status ) )
    {
@@ -5081,12 +4991,9 @@
 VOS_STATUS sme_BtcSignalBtEvent (tHalHandle hHal, tpSmeBtEvent pBtEvent)
 {
     VOS_STATUS status = VOS_STATUS_E_FAILURE;
-
 #ifndef WLAN_MDM_CODE_REDUCTION_OPT
     tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
 
-    MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-           TRACE_CODE_SME_RX_HDD_BTC_SIGNALEVENT, NO_SESSION, 0));
     if ( eHAL_STATUS_SUCCESS == sme_AcquireGlobalLock( &pMac->sme ) )
     {
         status = btcSignalBTEvent (hHal, pBtEvent);
@@ -5113,8 +5020,6 @@
     VOS_STATUS status = VOS_STATUS_E_FAILURE;
 #ifndef WLAN_MDM_CODE_REDUCTION_OPT
     tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
-    MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-                 TRACE_CODE_SME_RX_HDD_BTC_SETCONFIG, NO_SESSION, 0));
     if ( eHAL_STATUS_SUCCESS == sme_AcquireGlobalLock( &pMac->sme ) )
     {
         status = btcSetConfig (hHal, pSmeBtcConfig);
@@ -5141,8 +5046,6 @@
 #ifndef WLAN_MDM_CODE_REDUCTION_OPT
     tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
 
-    MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-             TRACE_CODE_SME_RX_HDD_BTC_GETCONFIG, NO_SESSION, 0));
     if ( eHAL_STATUS_SUCCESS == sme_AcquireGlobalLock( &pMac->sme ) )
     {
         status = btcGetConfig (hHal, pSmeBtcConfig);
@@ -5166,8 +5069,6 @@
                         )
 {
     tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
-    MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-               TRACE_CODE_SME_RX_HDD_SET_CFGPRIVACY, NO_SESSION, 0));
     if ( eHAL_STATUS_SUCCESS == sme_AcquireGlobalLock( &pMac->sme ) )
     {
         csrSetCfgPrivacy(pMac, pProfile, fPrivacy);
@@ -5192,8 +5093,6 @@
 {
     VOS_STATUS status = VOS_STATUS_E_FAILURE;
     tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
-    MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-                 TRACE_CODE_SME_RX_HDD_NEIGHBOR_REPORTREQ, NO_SESSION, 0));
 
     if ( eHAL_STATUS_SUCCESS == sme_AcquireGlobalLock( &pMac->sme ) )
     {
@@ -5217,8 +5116,6 @@
    tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
    tPmcPowerState PowerState;
    tANI_U32  sessionId = 0;
-   MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-               TRACE_CODE_SME_RX_HDD_DBG_READREG, NO_SESSION, 0));
 
    /* 1) To make Quarky work in FTM mode **************************************/
 
@@ -5285,8 +5182,6 @@
 
    /* 1) To make Quarky work in FTM mode **************************************/
 
-   MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-                    TRACE_CODE_SME_RX_HDD_DBG_WRITEREG, NO_SESSION, 0));
    if(eDRIVER_TYPE_MFG == pMac->gDriverType)
    {
       if (eWLAN_PAL_STATUS_SUCCESS == wpalDbgWriteRegister(regAddr, regValue))
@@ -5348,8 +5243,6 @@
    tANI_U32 arg4 = 0;
    /* 1) To make Quarky work in FTM mode **************************************/
 
-   MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-                       TRACE_CODE_SME_RX_HDD_DBG_READMEM, NO_SESSION, 0));
    if(eDRIVER_TYPE_MFG == pMac->gDriverType)
    {
       if (VOS_STATUS_SUCCESS == WDA_HALDumpCmdReq(pMac, cmd, arg1, arg2, arg3, arg4, (tANI_U8*)pBuf))
@@ -5414,8 +5307,6 @@
 
    /* 1) To make Quarky work in FTM mode **************************************/
 
-   MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-                      TRACE_CODE_SME_RX_HDD_DBG_WRITEMEM, NO_SESSION, 0));
    if(eDRIVER_TYPE_MFG == pMac->gDriverType)
    {
       {
@@ -5892,9 +5783,6 @@
          sme_ReleaseGlobalLock( &pMac->sme );
       }
    }
-   if( NULL != pbSessionId )
-   MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-                 TRACE_CODE_SME_RX_HDD_OPEN_SESSION,*pbSessionId, 0));
 
    return ( status );
 }
@@ -5924,8 +5812,6 @@
    eHalStatus status;
    tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
 
-   MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-                 TRACE_CODE_SME_RX_HDD_CLOSE_SESSION, sessionId, 0));
    status = sme_AcquireGlobalLock( &pMac->sme );
    if ( HAL_STATUS_SUCCESS( status ) )
    {
@@ -6156,8 +6042,6 @@
     tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
     eHalStatus status = eHAL_STATUS_FAILURE;
 
-    MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-               TRACE_CODE_SME_RX_HDD_SET_HOSTOFFLOAD, sessionId, 0));
     if ( eHAL_STATUS_SUCCESS == ( status = sme_AcquireGlobalLock( &pMac->sme ) ) )
     {
 #ifdef WLAN_NS_OFFLOAD
@@ -6190,8 +6074,6 @@
     tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
     eHalStatus status;
 
-    MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-                    TRACE_CODE_SME_RX_HDD_SET_GTKOFFLOAD, sessionId, 0));
     if ( eHAL_STATUS_SUCCESS == ( status = sme_AcquireGlobalLock( &pMac->sme ) ) )
     {
         status = pmcSetGTKOffload( hHal, pRequest, sessionId );
@@ -6214,8 +6096,6 @@
     tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
     eHalStatus status;
 
-    MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-                TRACE_CODE_SME_RX_HDD_GET_GTKOFFLOAD, sessionId, 0));
     if ( eHAL_STATUS_SUCCESS == ( status = sme_AcquireGlobalLock( &pMac->sme ) ) )
     {
         pmcGetGTKOffload(hHal, callbackRoutine, callbackContext, sessionId);
@@ -6290,8 +6170,6 @@
     tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
     eHalStatus status;
 
-    MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-                       TRACE_CODE_SME_RX_HDD_SET_POWERPARAMS, NO_SESSION, 0));
     if ( eHAL_STATUS_SUCCESS == ( status = sme_AcquireGlobalLock( &pMac->sme ) ) )
     {
         pmcSetPowerParams(hHal, pwParams, forced);
@@ -6315,8 +6193,6 @@
     eHalStatus status;
     tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
 
-    MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-               TRACE_CODE_SME_RX_HDD_ABORT_MACSCAN, NO_SESSION, 0));
     status = sme_AcquireGlobalLock( &pMac->sme );
     if ( HAL_STATUS_SUCCESS( status ) )
     {
@@ -6374,8 +6250,6 @@
     eHalStatus status = eHAL_STATUS_SUCCESS;
     tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
 
-    MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-                          TRACE_CODE_SME_RX_HDD_REGISTER_MGMTFR, sessionId, 0));
     if ( eHAL_STATUS_SUCCESS == ( status = sme_AcquireGlobalLock( &pMac->sme ) ) )
     {
         tSirRegisterMgmtFrame *pMsg;
@@ -6436,8 +6310,6 @@
     eHalStatus status = eHAL_STATUS_SUCCESS;
     tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
 
-    MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-              TRACE_CODE_SME_RX_HDD_DEREGISTER_MGMTFR, sessionId, 0));
     if ( eHAL_STATUS_SUCCESS == ( status = sme_AcquireGlobalLock( &pMac->sme ) ) )
     {
         tSirRegisterMgmtFrame *pMsg;
@@ -6499,8 +6371,6 @@
   eHalStatus status = eHAL_STATUS_SUCCESS;
   tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
 
-  MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-            TRACE_CODE_SME_RX_HDD_REMAIN_ONCHAN, sessionId, 0));
   if ( eHAL_STATUS_SUCCESS == ( status = sme_AcquireGlobalLock( &pMac->sme ) ) )
   {
     status = p2pRemainOnChannel (hHal, sessionId, channel, duration, callback, pContext,
@@ -6611,8 +6481,6 @@
     eHalStatus status = eHAL_STATUS_SUCCESS;
     tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
 
-    MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-               TRACE_CODE_SME_RX_HDD_SEND_ACTION, sessionId, 0));
     //acquire the lock for the sme object
     status = sme_AcquireGlobalLock(&pMac->sme);
     if(HAL_STATUS_SUCCESS(status))
@@ -6632,8 +6500,6 @@
   eHalStatus status = eHAL_STATUS_SUCCESS;
   tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
 
-  MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-             TRACE_CODE_SME_RX_HDD_CANCEL_REMAIN_ONCHAN, sessionId, 0));
   if ( eHAL_STATUS_SUCCESS == ( status = sme_AcquireGlobalLock( &pMac->sme ) ) )
   {
     status = p2pCancelRemainOnChannel (hHal, sessionId);
@@ -6690,8 +6556,6 @@
     tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
     vos_msg_t       vosMessage;
 
-    MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-                    TRACE_CODE_SME_RX_HDD_CONFIG_RXPFIL, NO_SESSION, 0));
     if ( eHAL_STATUS_SUCCESS == ( status = sme_AcquireGlobalLock( &pMac->sme ) ) )
     {
         /* serialize the req through MC thread */
@@ -6734,8 +6598,6 @@
     tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
     vos_msg_t       vosMessage;
 
-    MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-                  TRACE_CODE_SME_RX_HDD_CONFIG_SUSPENDIND, NO_SESSION, 0));
     if ( eHAL_STATUS_SUCCESS == ( status = sme_AcquireGlobalLock( &pMac->sme ) ) )
     {
         /* serialize the req through MC thread */
@@ -6778,8 +6640,6 @@
     tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
     vos_msg_t       vosMessage;
 
-    MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-                     TRACE_CODE_SME_RX_HDD_CONFIG_RESUMEREQ, NO_SESSION, 0));
     if ( eHAL_STATUS_SUCCESS == ( status = sme_AcquireGlobalLock( &pMac->sme ) ) )
     {
         /* serialize the req through MC thread */
@@ -7818,11 +7678,7 @@
 {
     vos_msg_t msg;
     tpMaxTxPowerParams pMaxTxParams = NULL;
-#ifdef LIM_TRACE_RECORD
-    tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
-#endif
-    MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-                     TRACE_CODE_SME_RX_HDD_SET_MAXTXPOW, NO_SESSION, 0));
+
     pMaxTxParams = vos_mem_malloc(sizeof(tMaxTxPowerParams));
     if (NULL == pMaxTxParams)
     {
@@ -7913,8 +7769,6 @@
    eHalStatus status = eHAL_STATUS_FAILURE;
    tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
 
-   MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-                 TRACE_CODE_SME_RX_HDD_SET_TXPOW, NO_SESSION, 0));
    smsLog(pMac, LOG1, FL("set tx power %dmW"), mW);
    status = sme_AcquireGlobalLock(&pMac->sme);
    if (HAL_STATUS_SUCCESS(status))
@@ -7996,8 +7850,6 @@
     vos_msg_t           vosMessage;
     tAniSetTmLevelReq  *setTmLevelReq = NULL;
 
-    MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-                         TRACE_CODE_SME_RX_HDD_SET_TMLEVEL, NO_SESSION, 0));
     if ( eHAL_STATUS_SUCCESS == ( status = sme_AcquireGlobalLock( &pMac->sme ) ) )
     {
         setTmLevelReq = (tAniSetTmLevelReq *)vos_mem_malloc(sizeof(tAniSetTmLevelReq));
@@ -8041,11 +7893,6 @@
 void sme_featureCapsExchange( tHalHandle hHal)
 {
     v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_SME, NULL);
-#ifdef LIM_TRACE_RECORD
-    tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
-#endif
-    MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-                     TRACE_CODE_SME_RX_HDD_CAPS_EXCH, NO_SESSION, 0));
     WDA_featureCapsExchange(vosContext);
 }
 
@@ -8078,8 +7925,6 @@
 eHalStatus sme_GetDefaultCountryCodeFrmNv(tHalHandle hHal, tANI_U8 *pCountry)
 {
     tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
-    MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-             TRACE_CODE_SME_RX_HDD_GET_DEFCCNV, NO_SESSION, 0));
     return csrGetDefaultCountryCodeFrmNv(pMac, pCountry);
 }
 
@@ -8097,8 +7942,6 @@
 eHalStatus sme_GetCurrentCountryCode(tHalHandle hHal, tANI_U8 *pCountry)
 {
     tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
-    MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-              TRACE_CODE_SME_RX_HDD_GET_CURCC, NO_SESSION, 0));
     return csrGetCurrentCountryCode(pMac, pCountry);
 }
 
@@ -8135,8 +7978,6 @@
 void sme_ResetPowerValuesFor5G (tHalHandle hHal)
 {
     tpAniSirGlobal pMac = PMAC_STRUCT (hHal);
-    MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-             TRACE_CODE_SME_RX_HDD_RESET_PW5G, NO_SESSION, 0));
     csrSaveChannelPowerForBand(pMac, eANI_BOOLEAN_TRUE);
     csrApplyPower2Current(pMac);     // Store the channel+power info in the global place: Cfg
 }
@@ -8157,8 +7998,6 @@
     tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
     eHalStatus          status    = eHAL_STATUS_SUCCESS;
 
-    MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-                       TRACE_CODE_SME_RX_HDD_UPDATE_RP5G, NO_SESSION, 0));
     status = sme_AcquireGlobalLock( &pMac->sme );
     if ( HAL_STATUS_SUCCESS( status ) )
     {
@@ -8187,8 +8026,6 @@
     tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
     eHalStatus          status    = eHAL_STATUS_SUCCESS;
 
-    MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-              TRACE_CODE_SME_RX_HDD_SET_ROAMIBAND, NO_SESSION, 0));
     status = sme_AcquireGlobalLock( &pMac->sme );
     if ( HAL_STATUS_SUCCESS( status ) )
     {
@@ -8285,8 +8122,6 @@
 v_BOOL_t sme_getRoamIntraBand(tHalHandle hHal)
 {
     tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
-    MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-              TRACE_CODE_SME_RX_HDD_GET_ROAMIBAND, NO_SESSION, 0));
     return pMac->roam.configParam.nRoamIntraBand;
 }
 
@@ -8332,8 +8167,6 @@
     tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
     eHalStatus          status    = eHAL_STATUS_SUCCESS;
 
-    MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-             TRACE_CODE_SME_RX_HDD_UPDATE_IMMRSSIDIFF, NO_SESSION, 0));
     status = sme_AcquireGlobalLock( &pMac->sme );
     if ( HAL_STATUS_SUCCESS( status ) )
     {
@@ -8367,8 +8200,6 @@
     eHalStatus          status    = eHAL_STATUS_SUCCESS;
 
     status = sme_AcquireGlobalLock( &pMac->sme );
-    MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-               TRACE_CODE_SME_RX_HDD_UPDATE_RSSIDIFF, NO_SESSION, 0));
     if ( HAL_STATUS_SUCCESS( status ) )
     {
         VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_DEBUG,
@@ -8404,8 +8235,6 @@
   tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
     eHalStatus          status    = eHAL_STATUS_SUCCESS;
 
-    MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-            TRACE_CODE_SME_RX_HDD_UPDATE_FTENABLED, NO_SESSION, 0));
     status = sme_AcquireGlobalLock( &pMac->sme );
     if ( HAL_STATUS_SUCCESS( status ) )
     {
@@ -8465,8 +8294,6 @@
     tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
     eHalStatus          status    = eHAL_STATUS_SUCCESS;
 
-    MTRACE(macTraceNew(pMac, VOS_MODULE_ID_SME,
-             TRACE_CODE_SME_RX_HDD_SET_SCANCTRL, NO_SESSION, 0));
     status = sme_AcquireGlobalLock( &pMac->sme );
     if ( HAL_STATUS_SUCCESS( status ) )
     {
diff --git a/Kbuild b/Kbuild
index 2f4e941..765fa1f 100644
--- a/Kbuild
+++ b/Kbuild
@@ -288,8 +288,7 @@
 SME_QOS_OBJS := $(SME_SRC_DIR)/QoS/sme_Qos.o
 
 SME_CMN_OBJS := $(SME_SRC_DIR)/sme_common/sme_Api.o \
-		$(SME_SRC_DIR)/sme_common/sme_FTApi.o \
-		$(SME_SRC_DIR)/sme_common/sme_Trace.o
+		$(SME_SRC_DIR)/sme_common/sme_FTApi.o
 
 SME_BTC_OBJS := $(SME_SRC_DIR)/btc/btcApi.o
 
@@ -552,7 +551,6 @@
 CDEFINES +=	-DWLAN_DEBUG \
 		-DTRACE_RECORD \
 		-DLIM_TRACE_RECORD \
-		-DSME_TRACE_RECORD \
 		-DPE_DEBUG_LOGW \
 		-DPE_DEBUG_LOGE \
 		-DDEBUG
diff --git a/prima/CORE/SME/inc/sme_Trace.h b/prima/CORE/SME/inc/sme_Trace.h
deleted file mode 100644
index a89932d..0000000
--- a/prima/CORE/SME/inc/sme_Trace.h
+++ /dev/null
@@ -1,110 +0,0 @@
-/***********************************************************************
-   sme_Trace.h
-
-  \brief definition for trace related APIs
-
-  \author Kiran Kumar Reddy CH L V
-
-   Copyright (c) 2013 Qualcomm Atheros, Inc.
-
-   All Rights Reserved.
-
-   Qualcomm Atheros Confidential and Proprietary.
-
-  ========================================================================*/
-
-#ifndef __SME_TRACE_H__
-#define __SME_TRACE_H__
-
-
-#include "macTrace.h"
-
-#define NO_SESSION 0xFF
-#define TRACE_CODE_SME_COMMAND 0xFF
-enum {
-    TRACE_CODE_SME_RX_HDD_MSG_SCAN_REQ,
-    TRACE_CODE_SME_RX_HDD_MSG_SCAN_GET_RESULTS,
-    TRACE_CODE_SME_RX_HDD_MSG_CONNECT,
-    TRACE_CODE_SME_RX_HDD_MSG_SET_11DINFO,
-    TRACE_CODE_SME_RX_HDD_MSG_GET_SOFTAP_DOMAIN,
-    TRACE_CODE_SME_RX_HDD_MSG_SET_REGINFO,
-    TRACE_CODE_SME_RX_HDD_MSG_UPDATE_CHANNEL_CONFIG,
-    TRACE_CODE_SME_RX_HDD_MSG_UPDATE_CONFIG,
-    TRACE_CODE_SME_RX_HDD_MSG_HDDREADYIND,
-    TRACE_CODE_SME_RX_HDD_MSG_SCAN_FLUSH_RESULTS,
-    TRACE_CODE_SME_RX_HDD_MSG_SCAN_FLUSH_P2PRESULTS,
-    TRACE_CODE_SME_RX_HDD_MSG_SCAN_RESULT_GETFIRST,
-    TRACE_CODE_SME_RX_HDD_MSG_SCAN_RESULT_GETNEXT,
-    TRACE_CODE_SME_RX_HDD_MSG_SCAN_RESULT_PURGE,
-    TRACE_CODE_SME_RX_HDD_ROAM_REASSOC,
-    TRACE_CODE_SME_RX_HDD_ROAM_DISCONNECT,
-    TRACE_CODE_SME_RX_HDD_ROAM_GET_CONNECTPROFILE,
-    TRACE_CODE_SME_RX_HDD_ROAM_FREE_CONNECTPROFILE,
-    TRACE_CODE_SME_RX_HDD_ROAM_SET_PMKIDCACHE,
-    TRACE_CODE_SME_RX_HDD_GET_CONFIGPARAM,
-    TRACE_CODE_SME_RX_HDD_GET_MODPROFFIELDS,
-    TRACE_CODE_SME_RX_HDD_SET_CONFIG_PWRSAVE,
-    TRACE_CODE_SME_RX_HDD_GET_CONFIG_PWRSAVE,
-    TRACE_CODE_SME_RX_HDD_ENABLE_PWRSAVE,
-    TRACE_CODE_SME_RX_HDD_DISABLE_PWRSAVE,
-    TRACE_CODE_SME_RX_HDD_START_AUTO_BMPSTIMER,
-    TRACE_CODE_SME_RX_HDD_STOP_AUTO_BMPSTIMER,
-    TRACE_CODE_SME_RX_HDD_IS_PWRSAVE_ENABLED,
-    TRACE_CODE_SME_RX_HDD_REQUEST_FULLPOWER,
-    TRACE_CODE_SME_RX_HDD_REQUEST_BMPS,
-    TRACE_CODE_SME_RX_HDD_SET_DHCP_FLAG,
-    TRACE_CODE_SME_RX_HDD_REQUEST_STANDBY,
-    TRACE_CODE_SME_RX_HDD_WOWL_ADDBCAST_PATTERN,
-    TRACE_CODE_SME_RX_HDD_WOWL_DELBCAST_PATTERN,
-    TRACE_CODE_SME_RX_HDD_ENTER_WOWL,
-    TRACE_CODE_SME_RX_HDD_EXIT_WOWL,
-    TRACE_CODE_SME_RX_HDD_SET_KEY,
-    TRACE_CODE_SME_RX_HDD_REMOVE_KEY,
-    TRACE_CODE_SME_RX_HDD_GET_STATS,
-    TRACE_CODE_SME_RX_HDD_GET_CNTRYCODE,
-    TRACE_CODE_SME_RX_HDD_SET_CNTRYCODE,
-    TRACE_CODE_SME_RX_HDD_CHANGE_CNTRYCODE,
-    TRACE_CODE_SME_RX_HDD_BTC_SIGNALEVENT,
-    TRACE_CODE_SME_RX_HDD_BTC_SETCONFIG,
-    TRACE_CODE_SME_RX_HDD_BTC_GETCONFIG,
-    TRACE_CODE_SME_RX_HDD_SET_CFGPRIVACY,
-    TRACE_CODE_SME_RX_HDD_NEIGHBOR_REPORTREQ,
-    TRACE_CODE_SME_RX_HDD_DBG_READREG,
-    TRACE_CODE_SME_RX_HDD_DBG_WRITEREG,
-    TRACE_CODE_SME_RX_HDD_DBG_READMEM,
-    TRACE_CODE_SME_RX_HDD_DBG_WRITEMEM,
-    TRACE_CODE_SME_RX_HDD_OPEN_SESSION,
-    TRACE_CODE_SME_RX_HDD_CLOSE_SESSION,
-    TRACE_CODE_SME_RX_HDD_SET_HOSTOFFLOAD,
-    TRACE_CODE_SME_RX_HDD_SET_GTKOFFLOAD,
-    TRACE_CODE_SME_RX_HDD_GET_GTKOFFLOAD,
-    TRACE_CODE_SME_RX_HDD_SET_POWERPARAMS,
-    TRACE_CODE_SME_RX_HDD_ABORT_MACSCAN,
-    TRACE_CODE_SME_RX_HDD_REGISTER_MGMTFR,
-    TRACE_CODE_SME_RX_HDD_DEREGISTER_MGMTFR,
-    TRACE_CODE_SME_RX_HDD_REMAIN_ONCHAN,
-    TRACE_CODE_SME_RX_HDD_SEND_ACTION,
-    TRACE_CODE_SME_RX_HDD_CANCEL_REMAIN_ONCHAN,
-    TRACE_CODE_SME_RX_HDD_CONFIG_RXPFIL,
-    TRACE_CODE_SME_RX_HDD_CONFIG_SUSPENDIND,
-    TRACE_CODE_SME_RX_HDD_CONFIG_RESUMEREQ,
-    TRACE_CODE_SME_RX_HDD_SET_MAXTXPOW,
-    TRACE_CODE_SME_RX_HDD_SET_TXPOW,
-    TRACE_CODE_SME_RX_HDD_SET_TMLEVEL,
-    TRACE_CODE_SME_RX_HDD_CAPS_EXCH,
-    TRACE_CODE_SME_RX_HDD_DISABLE_CAP,
-    TRACE_CODE_SME_RX_HDD_GET_DEFCCNV,
-    TRACE_CODE_SME_RX_HDD_GET_CURCC,
-    TRACE_CODE_SME_RX_HDD_RESET_PW5G,
-    TRACE_CODE_SME_RX_HDD_UPDATE_RP5G,
-    TRACE_CODE_SME_RX_HDD_SET_ROAMIBAND,
-    TRACE_CODE_SME_RX_HDD_GET_ROAMIBAND,
-    TRACE_CODE_SME_RX_HDD_UPDATE_RSSIDIFF,
-    TRACE_CODE_SME_RX_HDD_UPDATE_IMMRSSIDIFF,
-    TRACE_CODE_SME_RX_HDD_UPDATE_FTENABLED,
-    TRACE_CODE_SME_RX_HDD_UPDATE_WESMODE,
-    TRACE_CODE_SME_RX_HDD_SET_SCANCTRL,
-};
-
-void smeTraceInit(tpAniSirGlobal pMac);
-#endif //__SME_TRACE_H__
diff --git a/prima/CORE/SME/src/sme_common/sme_Trace.c b/prima/CORE/SME/src/sme_common/sme_Trace.c
deleted file mode 100644
index 5b40ab8..0000000
--- a/prima/CORE/SME/src/sme_common/sme_Trace.c
+++ /dev/null
@@ -1,179 +0,0 @@
-/************************************************************************
-   smeTrace.c
-
-  \brief implementation for trace related APIs
-
-  \author Kiran Kumar Reddy CH L V
-
-  Copyright (c) 2013 Qualcomm Atheros, Inc.
-
-  All Rights Reserved.
-
-  Qualcomm Atheros Confidential and Proprietary.
-
-  ========================================================================*/
-#include "aniGlobal.h" //for tpAniSirGlobal
-#include "smsDebug.h"
-#include "macTrace.h"
-#include "sme_Trace.h"
-#include "smeInternal.h"
-#ifndef SME_TRACE_RECORD
-void smeTraceInit(tpAniSirGlobal pMac)
-{
-    return;
-}
-#endif
-#ifdef SME_TRACE_RECORD
-
-
-static tANI_U8* smeTraceGetRxMsgString( tANI_U32 code )
-{
-    switch(code)
-    {
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_MSG_SCAN_REQ);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_MSG_SCAN_GET_RESULTS);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_MSG_CONNECT);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_MSG_SET_11DINFO);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_MSG_GET_SOFTAP_DOMAIN);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_MSG_SET_REGINFO);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_MSG_UPDATE_CHANNEL_CONFIG);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_MSG_UPDATE_CONFIG);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_MSG_HDDREADYIND);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_MSG_SCAN_FLUSH_RESULTS);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_MSG_SCAN_FLUSH_P2PRESULTS);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_MSG_SCAN_RESULT_GETFIRST);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_MSG_SCAN_RESULT_GETNEXT);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_MSG_SCAN_RESULT_PURGE);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_ROAM_REASSOC);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_ROAM_DISCONNECT);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_ROAM_GET_CONNECTPROFILE);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_ROAM_FREE_CONNECTPROFILE);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_ROAM_SET_PMKIDCACHE);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_GET_CONFIGPARAM);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_GET_MODPROFFIELDS);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_SET_CONFIG_PWRSAVE);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_GET_CONFIG_PWRSAVE);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_ENABLE_PWRSAVE);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_DISABLE_PWRSAVE);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_START_AUTO_BMPSTIMER);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_STOP_AUTO_BMPSTIMER);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_IS_PWRSAVE_ENABLED);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_REQUEST_FULLPOWER);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_REQUEST_BMPS);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_SET_DHCP_FLAG);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_REQUEST_STANDBY);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_WOWL_ADDBCAST_PATTERN);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_WOWL_DELBCAST_PATTERN);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_ENTER_WOWL);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_EXIT_WOWL);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_SET_KEY);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_REMOVE_KEY);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_GET_STATS);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_GET_CNTRYCODE);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_SET_CNTRYCODE);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_CHANGE_CNTRYCODE);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_BTC_SIGNALEVENT);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_BTC_SETCONFIG);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_BTC_GETCONFIG);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_SET_CFGPRIVACY);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_NEIGHBOR_REPORTREQ);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_DBG_READREG);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_DBG_WRITEREG);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_DBG_READMEM);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_DBG_WRITEMEM);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_OPEN_SESSION);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_CLOSE_SESSION);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_SET_HOSTOFFLOAD);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_SET_GTKOFFLOAD);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_GET_GTKOFFLOAD);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_SET_POWERPARAMS);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_ABORT_MACSCAN);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_REGISTER_MGMTFR);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_DEREGISTER_MGMTFR);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_REMAIN_ONCHAN);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_SEND_ACTION);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_CANCEL_REMAIN_ONCHAN);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_CONFIG_RXPFIL);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_CONFIG_SUSPENDIND);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_CONFIG_RESUMEREQ);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_SET_MAXTXPOW);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_SET_TXPOW);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_SET_TMLEVEL);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_CAPS_EXCH);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_DISABLE_CAP);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_GET_DEFCCNV);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_GET_CURCC);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_RESET_PW5G);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_UPDATE_RP5G);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_SET_ROAMIBAND);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_GET_ROAMIBAND);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_UPDATE_RSSIDIFF);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_UPDATE_IMMRSSIDIFF);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_UPDATE_FTENABLED);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_UPDATE_WESMODE);
-        CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_SET_SCANCTRL);
-
-        default:
-            return( "UNKNOWN" );
-            break;
-    }
-}
-static tANI_U8* smeTraceGetCommandString( tANI_U32 command )
-{
-    switch(command)
-    {
-        CASE_RETURN_STRING(eSmeNoCommand);
-        CASE_RETURN_STRING(eSmeDropCommand);
-        CASE_RETURN_STRING(eSmeCsrCommandMask);
-        CASE_RETURN_STRING(eSmeCommandScan);
-        CASE_RETURN_STRING(eSmeCommandRoam);
-        CASE_RETURN_STRING(eSmeCommandWmStatusChange);
-        CASE_RETURN_STRING(eSmeCommandSetKey);
-        CASE_RETURN_STRING(eSmeCommandRemoveKey);
-        CASE_RETURN_STRING(eSmeCommandAddStaSession);
-        CASE_RETURN_STRING(eSmeCommandDelStaSession);
-        CASE_RETURN_STRING(eSmePmcCommandMask);
-        CASE_RETURN_STRING(eSmeCommandEnterImps);
-        CASE_RETURN_STRING(eSmeCommandExitImps);
-        CASE_RETURN_STRING(eSmeCommandEnterBmps);
-        CASE_RETURN_STRING(eSmeCommandExitBmps);
-        CASE_RETURN_STRING(eSmeCommandEnterUapsd);
-        CASE_RETURN_STRING(eSmeCommandExitUapsd);
-        CASE_RETURN_STRING(eSmeCommandEnterWowl);
-        CASE_RETURN_STRING(eSmeCommandExitWowl);
-        CASE_RETURN_STRING(eSmeCommandEnterStandby);
-        CASE_RETURN_STRING(eSmeQosCommandMask);
-        CASE_RETURN_STRING(eSmeCommandAddTs);
-        CASE_RETURN_STRING(eSmeCommandDelTs);
-#ifdef FEATURE_OEM_DATA_SUPPORT
-        CASE_RETURN_STRING(eSmeCommandOemDataReq);
-#endif
-        CASE_RETURN_STRING(eSmeCommandRemainOnChannel);
-        CASE_RETURN_STRING(eSmeCommandNoAUpdate);
-        default:
-            return( "UNKNOWN" );
-            break;
-    }
-}
-static void smeTraceDump(tpAniSirGlobal pMac, tpTraceRecord pRecord,
-                                                            tANI_U16 recIndex)
-{
-    if (TRACE_CODE_SME_COMMAND == pRecord->code)
-    {
-        smsLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x)", recIndex,
-                   pRecord->time, pRecord->session, "SME COMMAND:",
-                   smeTraceGetCommandString(pRecord->data), pRecord->data );
-    }
-    else
-    {
-        smsLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x)", recIndex,
-                   pRecord->time, pRecord->session, "RX HDD MSG:",
-                   smeTraceGetRxMsgString(pRecord->code), pRecord->data );
-    }
-}
-
-void smeTraceInit(tpAniSirGlobal pMac)
-{
-    macTraceRegister(pMac,  VOS_MODULE_ID_SME, smeTraceDump);
-}
-#endif
