diff --git a/CORE/HDD/src/wlan_hdd_tx_rx.c b/CORE/HDD/src/wlan_hdd_tx_rx.c
index 999b8fe..f2d8f16 100644
--- a/CORE/HDD/src/wlan_hdd_tx_rx.c
+++ b/CORE/HDD/src/wlan_hdd_tx_rx.c
@@ -837,7 +837,7 @@
    pAdapter = hdd_get_adapter(pHddCtx,WLAN_HDD_INFRA_STATION);
    if(pAdapter == NULL)
    {
-      VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,"%s: HDD adapter context is Null", __FUNCTION__);
+      VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,"%s: HDD adapter context is Null", __FUNCTION__);
    }
    else
    {
diff --git a/CORE/MAC/inc/wniCfgAp.h b/CORE/MAC/inc/wniCfgAp.h
index 221f551..e6573d2 100644
--- a/CORE/MAC/inc/wniCfgAp.h
+++ b/CORE/MAC/inc/wniCfgAp.h
@@ -1029,11 +1029,11 @@
 
 #define WNI_CFG_LOG_LEVEL_STAMIN    0
 #define WNI_CFG_LOG_LEVEL_STAMAX    7
-#define WNI_CFG_LOG_LEVEL_STADEF    3
+#define WNI_CFG_LOG_LEVEL_STADEF    4
 
 #define WNI_CFG_LOG_LEVEL_APMIN    0
 #define WNI_CFG_LOG_LEVEL_APMAX    7
-#define WNI_CFG_LOG_LEVEL_APDEF    3
+#define WNI_CFG_LOG_LEVEL_APDEF    4
 
 #define WNI_CFG_OLBC_DETECT_TIMEOUT_STAMIN    1000
 #define WNI_CFG_OLBC_DETECT_TIMEOUT_STAMAX    30000
diff --git a/CORE/MAC/inc/wniCfgSta.h b/CORE/MAC/inc/wniCfgSta.h
index 0495641..682bd93 100644
--- a/CORE/MAC/inc/wniCfgSta.h
+++ b/CORE/MAC/inc/wniCfgSta.h
@@ -762,7 +762,7 @@
 
 #define WNI_CFG_LOG_LEVEL_STAMIN    0
 #define WNI_CFG_LOG_LEVEL_STAMAX    7
-#define WNI_CFG_LOG_LEVEL_STADEF    3
+#define WNI_CFG_LOG_LEVEL_STADEF    4
 
 #define WNI_CFG_OLBC_DETECT_TIMEOUT_STAMIN    1000
 #define WNI_CFG_OLBC_DETECT_TIMEOUT_STAMAX    30000
diff --git a/CORE/MAC/src/cfg/cfgProcMsg.c b/CORE/MAC/src/cfg/cfgProcMsg.c
index 432af33..53a4a3f 100644
--- a/CORE/MAC/src/cfg/cfgProcMsg.c
+++ b/CORE/MAC/src/cfg/cfgProcMsg.c
@@ -707,7 +707,7 @@
             }
             else
             {
-                PELOGW(cfgLog( pMac, LOGW, "  CFGID %d no rsp\n", cfgId);)
+                PELOGW(cfgLog( pMac, LOG2, "  CFGID %d no rsp\n", cfgId);)
             }
 
             if (valueLenRoundedUp4 > length)
diff --git a/CORE/MAC/src/cfg/cfgUtil/cfg.txt b/CORE/MAC/src/cfg/cfgUtil/cfg.txt
index 9102981..5b1d4bd 100644
--- a/CORE/MAC/src/cfg/cfgUtil/cfg.txt
+++ b/CORE/MAC/src/cfg/cfgUtil/cfg.txt
@@ -1468,10 +1468,10 @@
 WNI_CFG_LOG_LEVEL    I    4    12
 V   RW    NP
 NONE
-0   7   3
+0   7   4
 V   RW    NP
 NONE
-0   7   3
+0   7   4
 
 *
 * OLBC detection timeout
diff --git a/CORE/MAC/src/include/sirDebug.h b/CORE/MAC/src/include/sirDebug.h
index d583e75..93ea8f8 100644
--- a/CORE/MAC/src/include/sirDebug.h
+++ b/CORE/MAC/src/include/sirDebug.h
@@ -126,4 +126,7 @@
 #define FL(x)    "%s: %d: "\
                  x, __FUNCTION__, __LINE__
 
+#define MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
+#define MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
+
 #endif
diff --git a/CORE/MAC/src/pe/lim/limProcessActionFrame.c b/CORE/MAC/src/pe/lim/limProcessActionFrame.c
index 89e3f75..540d7a3 100644
--- a/CORE/MAC/src/pe/lim/limProcessActionFrame.c
+++ b/CORE/MAC/src/pe/lim/limProcessActionFrame.c
@@ -2171,7 +2171,7 @@
    tANI_U8 *pBody = WDA_GET_RX_MPDU_DATA(pBd);
    tpSirMacVendorSpecificPublicActionFrameHdr pActionHdr = (tpSirMacVendorSpecificPublicActionFrameHdr) pBody;
 
-   limLog( pMac, LOGE, "Received a Action frame -- no session");
+   limLog( pMac, LOG1, "Received a Action frame -- no session");
 
    switch ( pActionHdr->category )
    {
@@ -2208,7 +2208,7 @@
          }
          break;
       default:
-         PELOGE(limLog(pMac, LOGE, FL("Unhandled action frame without session -- %x \n"), pActionHdr->category);)
+         PELOGE(limLog(pMac, LOG1, FL("Unhandled action frame without session -- %x \n"), pActionHdr->category);)
             break;
 
    }
diff --git a/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c b/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c
index dcc6cdb..0ea6e8b 100644
--- a/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c
+++ b/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c
@@ -211,13 +211,15 @@
         // Received Re/Assoc Req frame from a BC/MC address
         // Log error and ignore it
         if (subType == LIM_ASSOC)
-            limLog(pMac, LOG1, FL("received Assoc frame from a BC/MC address\n"));
+			limLog(pMac, LOGW, FL("received Assoc frame from a BC/MC address "MAC_ADDRESS_STR),
+                   MAC_ADDR_ARRAY(pHdr->sa));
         else
-            limLog(pMac, LOG1, FL("received ReAssoc frame from a BC/MC address\n"));
-        limPrintMacAddr(pMac, pHdr->sa, LOG1);
+            limLog(pMac, LOGW, FL("received ReAssoc frame from a BC/MC address "MAC_ADDRESS_STR),
+                   MAC_ADDR_ARRAY(pHdr->sa));
         return;
     }
-    limLog(pMac, LOG2, FL("Received AssocReq Frame: "));
+    limLog(pMac, LOGW, FL("Received AssocReq Frame: "MAC_ADDRESS_STR), MAC_ADDR_ARRAY(pHdr->sa));
+
     sirDumpBuf(pMac, SIR_LIM_MODULE_ID, LOG2, (tANI_U8 *) pBody, framelen);
 
     if( palEqualMemory( pMac->hHdd,  (tANI_U8* ) pHdr->sa, (tANI_U8 *) pHdr->da, 
@@ -304,16 +306,17 @@
                         pHdr->sa,
                         subType, 0,psessionEntry);
 
-        limLog(pMac, LOG1, FL("local caps 0x%x received 0x%x\n"), localCapabilities, pAssocReq->capabilityInfo);
+        limLog(pMac, LOGW, FL("local caps 0x%x received 0x%x\n"), localCapabilities, pAssocReq->capabilityInfo);
 
         // Log error
         if (subType == LIM_ASSOC)
-            limLog(pMac, LOG1,
-               FL("received Assoc req with unsupported capabilities from\n"));
+            limLog(pMac, LOGW,
+               FL("received Assoc req with unsupported capabilities "MAC_ADDRESS_STR),
+                  MAC_ADDR_ARRAY(pHdr->sa));
         else
-            limLog(pMac, LOG1,
-               FL("received ReAssoc req with unsupported capabilities from\n"));
-        limPrintMacAddr(pMac, pHdr->sa, LOG1);
+            limLog(pMac, LOGW,
+                   FL("received ReAssoc req with unsupported capabilities "MAC_ADDRESS_STR),
+                   MAC_ADDR_ARRAY(pHdr->sa));
         goto error;
     }
 
@@ -838,12 +841,13 @@
 
             // Log error
             if (subType == LIM_ASSOC)
-                limLog(pMac, LOG1,
-                       FL("received Assoc req from STA that does not have pre-auth context, MAC addr is: \n"));
+                limLog(pMac, LOGW,
+                       FL("received Assoc req from STA that does not have pre-auth context "MAC_ADDRESS_STR),
+                       MAC_ADDR_ARRAY(pHdr->sa));
             else
-                limLog(pMac, LOG1,
-                       FL("received ReAssoc req from STA that does not have pre-auth context, MAC addr is: \n"));
-            limPrintMacAddr(pMac, pHdr->sa, LOG1);
+                limLog(pMac, LOGW,
+                       FL("received ReAssoc req from STA that does not have pre-auth context "
+                       MAC_ADDRESS_STR), MAC_ADDR_ARRAY(pHdr->sa));
             goto error;
         }
 
@@ -970,10 +974,11 @@
      * STA is Associated !
      */
     if (subType == LIM_ASSOC)
-        limLog(pMac, LOG1, FL("received Assoc req successful from "));
+        limLog(pMac, LOGW, FL("received Assoc req successful "MAC_ADDRESS_STR),
+               MAC_ADDR_ARRAY(pHdr->sa));
     else
-        limLog(pMac, LOG1, FL("received ReAssoc req successful from "));
-    limPrintMacAddr(pMac, pHdr->sa, LOG1);
+        limLog(pMac, LOGW, FL("received ReAssoc req successful"MAC_ADDRESS_STR),
+               MAC_ADDR_ARRAY(pHdr->sa));
 
     /**
      * Assign unused/least recently used AID from perStaDs.
diff --git a/CORE/MAC/src/pe/lim/limProcessAssocRspFrame.c b/CORE/MAC/src/pe/lim/limProcessAssocRspFrame.c
index 38c98d1..a15eebb 100644
--- a/CORE/MAC/src/pe/lim/limProcessAssocRspFrame.c
+++ b/CORE/MAC/src/pe/lim/limProcessAssocRspFrame.c
@@ -373,9 +373,9 @@
              */
 
             // Log error
-            PELOG1(limLog(pMac, LOG1,
-                   FL("received AssocRsp frame from unexpected peer "));
-            limPrintMacAddr(pMac, pHdr->sa, LOG1);)
+            PELOGW(limLog(pMac, LOGW,
+                   FL("received AssocRsp frame from unexpected peer "MAC_ADDRESS_STR),
+                   MAC_ADDR_ARRAY(pHdr->sa));)
 
             return;
         }
@@ -391,9 +391,9 @@
              */
 
             // Log error
-            PELOG1(limLog(pMac, LOG1,
-               FL("received ReassocRsp frame from unexpected peer "));)
-            PELOG1(limPrintMacAddr(pMac, pHdr->sa, LOG1);)
+            PELOGW(limLog(pMac, LOGW,
+                   FL("received ReassocRsp frame from unexpected peer "MAC_ADDRESS_STR),
+                   MAC_ADDR_ARRAY(pHdr->sa));)
 
             return;
         }
@@ -669,7 +669,8 @@
     }
 
     // Log success
-    PELOG1(limLog(pMac, LOG1, FL("Successfully Associated with BSS\n"));)
+    PELOGE(limLog(pMac, LOGE, FL("Successfully Associated with BSS "MAC_ADDRESS_STR),
+           MAC_ADDR_ARRAY(pHdr->sa));)
 #ifdef FEATURE_WLAN_CCX
     if(psessionEntry->ccxContext.tsm.tsmInfo.state)
     {
diff --git a/CORE/MAC/src/pe/lim/limProcessAuthFrame.c b/CORE/MAC/src/pe/lim/limProcessAuthFrame.c
index 6979848..210e9ef 100644
--- a/CORE/MAC/src/pe/lim/limProcessAuthFrame.c
+++ b/CORE/MAC/src/pe/lim/limProcessAuthFrame.c
@@ -240,10 +240,9 @@
                                  pHdr->sa,
                                  LIM_NO_WEP_IN_FC,psessionEntry);
             // Log error
-            PELOG1(limLog(pMac, LOG1,
-                   FL("received Authentication frame with wep bit set on role=%d from "),
-                   psessionEntry->limSystemRole );
-            limPrintMacAddr(pMac, pHdr->sa, LOG1);)
+            PELOGE(limLog(pMac, LOGE,
+                   FL("received Authentication frame with wep bit set on role=%d "MAC_ADDRESS_STR),
+                   psessionEntry->limSystemRole, MAC_ADDR_ARRAY(pHdr->sa) );)
 
             return;
         }
@@ -305,9 +304,10 @@
                                      LIM_NO_WEP_IN_FC,psessionEntry);
 
                 // Log error
-                PELOG1(limLog(pMac, LOG1,
-                       FL("received Authentication frame from peer that has no preauth context with WEP bit set. Addr "));)
-                PELOG1(limPrintMacAddr(pMac, pHdr->sa, LOG1);)
+                PELOGE(limLog(pMac, LOGE,
+                       FL("received Authentication frame from peer that has "
+                       "no preauth context with WEP bit set "MAC_ADDRESS_STR),
+                       MAC_ADDR_ARRAY(pHdr->sa));)
 
                 return;
             }
@@ -342,10 +342,9 @@
                                          LIM_NO_WEP_IN_FC,psessionEntry);
 
                     // Log error
-                    PELOG1(limLog(pMac, LOG1,
-                           FL("received Authentication frame from peer that is in state %d. Addr "),
-                           pAuthNode->mlmState);)
-                   PELOG1( limPrintMacAddr(pMac, pHdr->sa, LOG1);)
+                    PELOGE(limLog(pMac, LOGE,
+                           FL("received Authentication frame from peer that is in state %d "
+                           MAC_ADDRESS_STR), pAuthNode->mlmState, MAC_ADDR_ARRAY(pHdr->sa));)
 
                     return;
                 }
@@ -377,9 +376,9 @@
                                          LIM_NO_WEP_IN_FC,psessionEntry);
 
                     // Log error
-                    PELOG1(limLog(pMac, LOG1,
-                           FL("received Auth frame3 from peer that has NULL key map entry, Addr "));)
-                   PELOG1( limPrintMacAddr(pMac, pHdr->sa, LOG1);)
+                    PELOGE(limLog(pMac, LOGE,
+                           FL("received Auth frame3 from peer that has NULL key map entry "
+                           MAC_ADDRESS_STR),MAC_ADDR_ARRAY(pHdr->sa));)
 
                     return;
                 } // if (!pKeyMapEntry->wepOn)
@@ -393,7 +392,7 @@
                     if (decryptResult == LIM_DECRYPT_ICV_FAIL)
                     {
                         /// ICV failure
-                        PELOGW(limLog(pMac, LOGW, FL("=====> decryptResult == LIM_DECRYPT_ICV_FAIL ...\n"));)
+                        PELOGW(limLog(pMac, LOGW, FL("=====> decryptResult == LIM_DECRYPT_ICV_FAIL ..."));)
                         limDeletePreAuthNode(pMac,
                                              pHdr->sa);
                         authFrame.authAlgoNumber = eSIR_SHARED_KEY;
@@ -408,9 +407,9 @@
                                             LIM_NO_WEP_IN_FC,psessionEntry);
 
                         // Log error
-                        PELOG1(limLog(pMac, LOG1,
-                               FL("received Authentication frame from peer that failed decryption, Addr "));)
-                        PELOG1(limPrintMacAddr(pMac, pHdr->sa, LOG1);)
+                        PELOGE(limLog(pMac, LOGE,
+                               FL("received Authentication frame from peer that failed decryption, Addr "
+                               MAC_ADDRESS_STR), MAC_ADDR_ARRAY(pHdr->sa));)
 
                         return;
                     }
@@ -487,9 +486,9 @@
                                             LIM_NO_WEP_IN_FC,psessionEntry);
 
                         // Log error
-                        PELOG1(limLog(pMac, LOG1,
-                               FL("received Authentication frame from peer that failed decryption, Addr "));)
-                        PELOG1(limPrintMacAddr(pMac, pHdr->sa, LOG1);)
+                        PELOGE(limLog(pMac, LOGE,
+                               FL("received Authentication frame from peer that failed decryption: "
+                               MAC_ADDRESS_STR), MAC_ADDR_ARRAY(pHdr->sa));)
 
                         return;
                     }
@@ -520,9 +519,9 @@
                                  LIM_NO_WEP_IN_FC,psessionEntry);
 
             // Log error
-            PELOG1(limLog(pMac, LOG1,
-                   FL("received Authentication frame3 from peer that while privacy option is turned OFF, Addr "));)
-            PELOG1(limPrintMacAddr(pMac, pHdr->sa, LOG1);)
+            PELOGE(limLog(pMac, LOGE,
+                   FL("received Authentication frame3 from peer that while privacy option is turned OFF "
+                   MAC_ADDRESS_STR), MAC_ADDR_ARRAY(pHdr->sa));)
 
             return;
         } // else if (wlan_cfgGetInt(CFG_PRIVACY_OPTION_IMPLEMENTED))
@@ -538,7 +537,7 @@
 
     pRxAuthFrameBody = &rxAuthFrame;
 
-   PELOG2(limLog(pMac, LOG2,
+   PELOGW(limLog(pMac, LOGW,
            FL("Received Auth frame with type=%d seqnum=%d, status=%d (%d)\n"),
            (tANI_U32) pRxAuthFrameBody->authAlgoNumber,
            (tANI_U32) pRxAuthFrameBody->authTransactionSeqNumber,
@@ -666,7 +665,7 @@
                 switch (pRxAuthFrameBody->authAlgoNumber)
                 {
                     case eSIR_OPEN_SYSTEM:
-                        PELOG1(limLog(pMac, LOG1, FL("=======> eSIR_OPEN_SYSTEM  ...\n"));)
+                        PELOGW(limLog(pMac, LOGW, FL("=======> eSIR_OPEN_SYSTEM  ...\n"));)
                         /// Create entry for this STA in pre-auth list
                         pAuthNode = limAcquireFreePreAuthNode(pMac, &pMac->lim.gLimPreAuthTimerTable);
                         if (pAuthNode == NULL)
@@ -726,7 +725,7 @@
                         break;
 
                     case eSIR_SHARED_KEY:
-                        PELOG1(limLog(pMac, LOG1, FL("=======> eSIR_SHARED_KEY  ...\n"));)
+                        PELOGW(limLog(pMac, LOGW, FL("=======> eSIR_SHARED_KEY  ...\n"));)
 #ifdef WLAN_SOFTAP_FEATURE
                         if(psessionEntry->limSystemRole == eLIM_AP_ROLE)
                         {
@@ -768,10 +767,10 @@
                                                 LIM_NO_WEP_IN_FC,psessionEntry);
 
                             // Log error
-                            PELOG1(limLog(pMac, LOG1,
-                                   FL("received Auth frame for unsupported auth algorithm %d from "),
-                                   pRxAuthFrameBody->authAlgoNumber);)
-                            PELOG1(limPrintMacAddr(pMac, pHdr->sa, LOG1);)
+                            PELOGE(limLog(pMac, LOGE,
+                                   FL("received Auth frame for unsupported auth algorithm %d "
+                                   MAC_ADDRESS_STR), pRxAuthFrameBody->authAlgoNumber, 
+                                   MAC_ADDR_ARRAY(pHdr->sa));)
 
                             return;
                         }
@@ -903,10 +902,10 @@
                                             LIM_NO_WEP_IN_FC,psessionEntry);
 
                         // Log error
-                       PELOG1( limLog(pMac, LOG1,
-                               FL("received Auth frame for unsupported auth algorithm %d from "),
-                               pRxAuthFrameBody->authAlgoNumber);)
-                        PELOG1(limPrintMacAddr(pMac, pHdr->sa, LOG1);)
+                       PELOGE( limLog(pMac, LOGE,
+                               FL("received Auth frame for unsupported auth algorithm %d "
+                               MAC_ADDRESS_STR), pRxAuthFrameBody->authAlgoNumber, 
+                               MAC_ADDR_ARRAY(pHdr->sa));)
 
                         return;
                 } // end switch(pRxAuthFrameBody->authAlgoNumber)
@@ -930,10 +929,10 @@
                                      LIM_NO_WEP_IN_FC,psessionEntry);
 
                 // Log error
-                PELOG1(limLog(pMac, LOG1,
-                       FL("received Authentication frame for unsupported auth algorithm %d from "),
-                       pRxAuthFrameBody->authAlgoNumber);)
-                PELOG1(limPrintMacAddr(pMac, pHdr->sa, LOG1);)
+                PELOGE(limLog(pMac, LOGE,
+                       FL("received Authentication frame for unsupported auth algorithm %d "
+                       MAC_ADDRESS_STR), pRxAuthFrameBody->authAlgoNumber, 
+                       MAC_ADDR_ARRAY(pHdr->sa));)
                 return;
             } //end if (limIsAuthAlgoSupported(pRxAuthFrameBody->authAlgoNumber))
             break;
@@ -968,9 +967,9 @@
                  */
 
                 // Log error
-                PELOG1(limLog(pMac, LOG1,
-                       FL("received Auth frame2 from unexpected peer "));)
-                PELOG1(limPrintMacAddr(pMac, pHdr->sa, LOG1);)
+                PELOGW(limLog(pMac, LOGW,
+                       FL("received Auth frame2 from unexpected peer "MAC_ADDRESS_STR),
+                       MAC_ADDR_ARRAY(pHdr->sa));)
 
                 break;
             }
@@ -1003,10 +1002,10 @@
                  */
 
                 // Log error
-                PELOG1(limLog(pMac, LOG1,
-                       FL("received Auth frame2 for unexpected auth algo number %d from "),
-                       pRxAuthFrameBody->authAlgoNumber);)
-               PELOG1( limPrintMacAddr(pMac, pHdr->sa, LOG1);)
+                PELOGW(limLog(pMac, LOGW,
+                       FL("received Auth frame2 for unexpected auth algo number %d "
+                       MAC_ADDRESS_STR), pRxAuthFrameBody->authAlgoNumber, 
+                       MAC_ADDR_ARRAY(pHdr->sa));)
 
                 break;
             }
@@ -1076,10 +1075,10 @@
                          */
 
                         // Log error
-                       PELOG1( limLog(pMac, LOG1,
-                               FL("received Auth frame from peer for unsupported auth algo %d, Addr "),
-                               pRxAuthFrameBody->authAlgoNumber);)
-                        PELOG1(limPrintMacAddr(pMac, pHdr->sa, LOG1);)
+                       PELOGE( limLog(pMac, LOGE,
+                               FL("received Auth frame from peer for unsupported auth algo %d "
+                               MAC_ADDRESS_STR), pRxAuthFrameBody->authAlgoNumber, 
+                               MAC_ADDR_ARRAY(pHdr->sa));)
 
                         authFrame.authAlgoNumber =
                         pRxAuthFrameBody->authAlgoNumber;
@@ -1100,7 +1099,7 @@
                             SIR_MAC_CHALLENGE_TEXT_EID)
                         {
                             // Log error
-                            PELOG1(limLog(pMac, LOG1,
+                            PELOGE(limLog(pMac, LOGE,
                                    FL("received Auth frame with invalid challenge text IE\n"));)
 
                             return;
@@ -1134,9 +1133,9 @@
                                                      LIM_NO_WEP_IN_FC,psessionEntry);
 
                                 // Log error
-                                PELOG1(limLog(pMac, LOG1,
-                                       FL("received Auth frame from peer when key mapping key is NULL, addr "));)
-                                PELOG1(limPrintMacAddr(pMac, pHdr->sa, LOG1);)
+                                PELOGE(limLog(pMac, LOGE,
+                                       FL("received Auth frame from peer when key mapping key is NULL"
+                                       MAC_ADDRESS_STR),MAC_ADDR_ARRAY(pHdr->sa));)
 
                                 limRestoreFromAuthState(pMac, eSIR_SME_NO_KEY_MAPPING_KEY_FOR_PEER,
                                                               eSIR_MAC_UNSPEC_FAILURE_REASON,psessionEntry);
@@ -1263,10 +1262,10 @@
                  */
 
                 // Log error
-                PELOG1(limLog(pMac, LOG1,
-                       FL("received Auth frame from peer with failure code %d addr "),
-                       pRxAuthFrameBody->authStatusCode);)
-                PELOG1(limPrintMacAddr(pMac, pHdr->sa, LOG1);)
+                PELOGE(limLog(pMac, LOGE,
+                       FL("received Auth frame from peer with failure code %d "
+                       MAC_ADDRESS_STR), pRxAuthFrameBody->authStatusCode, 
+                       MAC_ADDR_ARRAY(pHdr->sa));)
 
                 limRestoreFromAuthState(pMac, eSIR_SME_AUTH_REFUSED,
                                               pRxAuthFrameBody->authStatusCode,psessionEntry);
@@ -1295,10 +1294,10 @@
                                      LIM_NO_WEP_IN_FC,psessionEntry);
 
                 // Log error
-                PELOG1(limLog(pMac, LOG1,
-                       FL("received Auth frame3 from peer with auth algo number %d Addr "),
-                       pRxAuthFrameBody->authAlgoNumber);)
-                PELOG1(limPrintMacAddr(pMac, pHdr->sa, LOG1);)
+                PELOGE(limLog(pMac, LOGE,
+                       FL("received Auth frame3 from peer with auth algo number %d "
+                       MAC_ADDRESS_STR), pRxAuthFrameBody->authAlgoNumber, 
+                       MAC_ADDR_ARRAY(pHdr->sa));)
 
                 return;
             }
@@ -1325,9 +1324,9 @@
                                          LIM_NO_WEP_IN_FC,psessionEntry);
 
                     // Log error
-                    PELOG1(limLog(pMac, LOG1,
-                           FL("received Auth frame3 from peer with no WEP bit set, addr "));)
-                    PELOG1(limPrintMacAddr(pMac, pHdr->sa, LOG1);)
+                    PELOGE(limLog(pMac, LOGE,
+                           FL("received Auth frame3 from peer with no WEP bit set "MAC_ADDRESS_STR),
+                           MAC_ADDR_ARRAY(pHdr->sa));)
 
                     return;
                 }
@@ -1354,9 +1353,9 @@
                                          LIM_NO_WEP_IN_FC,psessionEntry);
 
                     // Log error
-                    PELOG1(limLog(pMac, LOG1,
-                           FL("received AuthFrame3 from peer that has no preauth context. Addr "));)
-                    PELOG1(limPrintMacAddr(pMac, pHdr->sa, LOG1);)
+                    PELOGE(limLog(pMac, LOGW,
+                           FL("received AuthFrame3 from peer that has no preauth context "
+                           MAC_ADDRESS_STR), MAC_ADDR_ARRAY(pHdr->sa));)
 
                     return;
                 }
@@ -1400,10 +1399,10 @@
                      */
 
                     // Log error
-                    PELOG1(limLog(pMac, LOG1,
-                           FL("received Auth frame3 from peer with status code %d, addr "),
-                           pRxAuthFrameBody->authStatusCode);)
-                    PELOG1(limPrintMacAddr(pMac, pHdr->sa, LOG1);)
+                    PELOGE(limLog(pMac, LOGE,
+                           FL("received Auth frame3 from peer with status code %d "
+                           MAC_ADDRESS_STR), pRxAuthFrameBody->authStatusCode, 
+                           MAC_ADDR_ARRAY(pHdr->sa));)
 
                     return;
                 }
@@ -1475,9 +1474,9 @@
                                          LIM_NO_WEP_IN_FC,psessionEntry);
 
                     // Log error
-                   PELOG1( limLog(pMac, LOG1,
-                           FL("Challenge failure for peer "));)
-                    PELOG1(limPrintMacAddr(pMac, pHdr->sa, LOG1);)
+                   PELOGE( limLog(pMac, LOGW,
+                           FL("Challenge failure for peer "MAC_ADDRESS_STR), 
+						   MAC_ADDR_ARRAY(pHdr->sa));)
                     return;
                 }
             } // if (pMac->lim.gLimSystemRole == eLIM_AP_ROLE || ...
@@ -1512,11 +1511,10 @@
                  */
 
                 // Log error
-                PELOG1(limLog(pMac, LOG1,
-                       FL("received Auth frame4 from peer with invalid auth algo %d, addr "),
-                       pRxAuthFrameBody->authAlgoNumber);)
-                PELOG1(limPrintMacAddr(pMac, pHdr->sa,
-                                LOG1);)
+                PELOGE(limLog(pMac, LOGE,
+                       FL("received Auth frame4 from peer with invalid auth algo %d "
+                       MAC_ADDRESS_STR), pRxAuthFrameBody->authAlgoNumber, 
+                       MAC_ADDR_ARRAY(pHdr->sa));)
 
                 return;
             }
@@ -1532,9 +1530,9 @@
                  */
 
                 // Log error
-                PELOG1(limLog(pMac, LOG1,
-                       FL("received Auth frame4 from unexpected peer "));
-                limPrintMacAddr(pMac, pHdr->sa, LOG1);)
+                PELOGE(limLog(pMac, LOGW,
+                       FL("received Auth frame4 from unexpected peer "
+                       MAC_ADDRESS_STR), MAC_ADDR_ARRAY(pHdr->sa));)
 
                 break;
             }
@@ -1548,10 +1546,10 @@
                  * Wait until Authentication Failure Timeout.
                  */
 
-                PELOG1(limLog(pMac, LOG1,
-                       FL("received Authentication frame from peer with invalid auth seq number %d, addr "),
-                       pRxAuthFrameBody->authTransactionSeqNumber);
-                limPrintMacAddr(pMac, pHdr->sa, LOG1);)
+                PELOGE(limLog(pMac, LOGE,
+                       FL("received Authentication frame from peer with invalid auth seq number %d "
+                       MAC_ADDRESS_STR), pRxAuthFrameBody->authTransactionSeqNumber, 
+                       MAC_ADDR_ARRAY(pHdr->sa));)
 
                 break;
             }
@@ -1598,8 +1596,8 @@
                  */
 
                 // Log error
-                PELOG1(limLog(pMac, LOG1, FL("Authentication failure from peer "));
-                limPrintMacAddr(pMac, pHdr->sa, LOG1);)
+                PELOGE(limLog(pMac, LOGE, FL("Authentication failure from peer "
+                       MAC_ADDRESS_STR), MAC_ADDR_ARRAY(pHdr->sa));)
 
                 limRestoreFromAuthState(pMac, eSIR_SME_AUTH_REFUSED,
                                               pRxAuthFrameBody->authStatusCode,psessionEntry);
@@ -1611,10 +1609,10 @@
             /// Invalid Authentication Frame received. Ignore it.
 
             // Log error
-            PELOG1(limLog(pMac, LOG1,
-                   FL("received Auth frame from peer with invalid auth seq number %d, addr "),
-                   pRxAuthFrameBody->authTransactionSeqNumber);
-            limPrintMacAddr(pMac, pHdr->sa, LOG1);)
+            PELOGE(limLog(pMac, LOGE,
+                   FL("received Auth frame from peer with invalid auth seq number %d "
+                   MAC_ADDRESS_STR), pRxAuthFrameBody->authTransactionSeqNumber, 
+                   MAC_ADDR_ARRAY(pHdr->sa));)
 
             break;
     } // end switch (pRxAuthFrameBody->authTransactionSeqNumber)
diff --git a/CORE/MAC/src/pe/lim/limProcessMessageQueue.c b/CORE/MAC/src/pe/lim/limProcessMessageQueue.c
index 23c75a4..5f9e531 100644
--- a/CORE/MAC/src/pe/lim/limProcessMessageQueue.c
+++ b/CORE/MAC/src/pe/lim/limProcessMessageQueue.c
@@ -715,7 +715,7 @@
     fcOffset = (v_U8_t)WDA_GET_RX_MPDU_HEADER_OFFSET(pRxPacketInfo);
     fc = pHdr->fc;
 
-    limLog( pMac, LOG1, FL("ProtVersion %d, Type %d, Subtype %d rateIndex=%d\n"),
+    limLog( pMac, LOG4, FL("ProtVersion %d, Type %d, Subtype %d rateIndex=%d\n"),
             fc.protVer, fc.type, fc.subType, WDA_GET_RX_MAC_RATE_IDX(pRxPacketInfo));
    
 
diff --git a/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c b/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c
index 00d5d34..0efe331 100644
--- a/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c
+++ b/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c
@@ -817,7 +817,7 @@
         SET_LIM_PROCESS_DEFD_MESGS(pMac, false);
 
         MTRACE(macTraceMsgTx(pMac, NO_SESSION, msg.type));
-        PELOGW(limLog(pMac, LOGW, FL("Channel %d\n"), channelNum);)
+        limLog(pMac, LOG1, FL("Channel %d\n"), channelNum);
 
             rc = wdaPostCtrlMsg(pMac, &msg);
         if (rc == eSIR_SUCCESS) {
@@ -3687,7 +3687,7 @@
          * in states other than wait_scan.
          * Log error.
          */
-        limLog(pMac, LOGW,
+        limLog(pMac, LOG1,
            FL("received unexpected Periodic scan timeout in state %X\n"),
            pMac->lim.gLimMlmState);
     }
diff --git a/CORE/MAC/src/pe/lim/limSmeReqUtils.c b/CORE/MAC/src/pe/lim/limSmeReqUtils.c
index 679ef12..1c7d2cb 100644
--- a/CORE/MAC/src/pe/lim/limSmeReqUtils.c
+++ b/CORE/MAC/src/pe/lim/limSmeReqUtils.c
@@ -705,7 +705,7 @@
             // Reject START_BSS_REQ
             limLog(pMac, LOGW,
                FL("Invalid operational rates in eWNI_SME_START_BSS_REQ\n"));
-            sirDumpBuf(pMac, SIR_LIM_MODULE_ID, LOGW,
+            sirDumpBuf(pMac, SIR_LIM_MODULE_ID, LOG2,
                        pStartBssReq->operationalRateSet.rate,
                        pStartBssReq->operationalRateSet.numRates);
 
@@ -723,7 +723,7 @@
             // Reject START_BSS_REQ
             limLog(pMac, LOGW,
                FL("Invalid operational rates in eWNI_SME_START_BSS_REQ\n"));
-            sirDumpBuf(pMac, SIR_LIM_MODULE_ID, LOGW,
+            sirDumpBuf(pMac, SIR_LIM_MODULE_ID, LOG2,
                        pStartBssReq->operationalRateSet.rate,
                        pStartBssReq->operationalRateSet.numRates);
 
@@ -740,7 +740,7 @@
             // Reject START_BSS_REQ
             limLog(pMac, LOGW,
                FL("Invalid operational rates in eWNI_SME_START_BSS_REQ\n"));
-            sirDumpBuf(pMac, SIR_LIM_MODULE_ID, LOGW,
+            sirDumpBuf(pMac, SIR_LIM_MODULE_ID, LOG2,
                        pStartBssReq->operationalRateSet.rate,
                        pStartBssReq->operationalRateSet.numRates);
 
diff --git a/CORE/MAC/src/pe/pmm/pmmApi.c b/CORE/MAC/src/pe/pmm/pmmApi.c
index f6ab20b..43627d6 100644
--- a/CORE/MAC/src/pe/pmm/pmmApi.c
+++ b/CORE/MAC/src/pe/pmm/pmmApi.c
@@ -230,7 +230,7 @@
     //If response is failure, then send the response back to PMC and reset its state.
     if(rspStatus == eHAL_STATUS_SUCCESS)
     {
-        PELOGW(pmmLog(pMac, LOGW,
+        PELOG2(pmmLog(pMac, LOG2,
             FL("pmmBmps: Received successful response from HAL to enter BMPS_POWER_SAVE \n"));)
 
         pMac->pmm.gPmmState = ePMM_STATE_BMPS_SLEEP;
@@ -680,7 +680,7 @@
     msgQ.bodyptr = pBmpsParams;
     msgQ.bodyval = 0;
 
-    PELOGW(pmmLog( pMac, LOGW,
+    PELOG2(pmmLog( pMac, LOG2,
         FL( "pmmBmps: Sending WDA_ENTER_BMPS_REQ" ));)
 
     /* we need to defer any incoming messages until we get a
@@ -1596,7 +1596,7 @@
         //if success, change the state to IMPS sleep mode
         pMac->pmm.gPmmState = ePMM_STATE_IMPS_SLEEP;
 
-        PELOGW(pmmLog(pMac, LOGW,
+        PELOG2(pmmLog(pMac, LOG2,
             FL("pmmImps: Received successful WDA_ENTER_IMPS_RSP from HAL\n"));)
 
         //update power save statistics
@@ -1742,7 +1742,7 @@
     case eHAL_STATUS_SUCCESS:
         {
             resultCode = eSIR_SME_SUCCESS;
-            PELOGW(pmmLog(pMac, LOGW, 
+            PELOG2(pmmLog(pMac, LOG2, 
                           FL("pmmImps: Received WDA_EXIT_IMPS_RSP with Successful response from HAL\n"));)
         }
         break;
@@ -2463,12 +2463,12 @@
     if (SIR_PM_SLEEP_MODE == mode)
     {
         msgQ.type = WDA_ENTER_IMPS_REQ;
-        PELOGW(pmmLog (pMac, LOGW, FL("Sending WDA_ENTER_IMPS_REQ to HAL\n"));)
+        PELOG2(pmmLog (pMac, LOG2, FL("Sending WDA_ENTER_IMPS_REQ to HAL\n"));)
     }
     else
     {
         msgQ.type = WDA_EXIT_IMPS_REQ;
-        PELOGW(pmmLog (pMac, LOGW, FL("Sending WDA_EXIT_IMPS_REQ to HAL\n"));)
+        PELOG2(pmmLog (pMac, LOG2, FL("Sending WDA_EXIT_IMPS_REQ to HAL\n"));)
     }
 
     msgQ.reserved = 0;
diff --git a/CORE/SME/src/QoS/sme_Qos.c b/CORE/SME/src/QoS/sme_Qos.c
index f80f29d..5f2585f 100644
--- a/CORE/SME/src/QoS/sme_Qos.c
+++ b/CORE/SME/src/QoS/sme_Qos.c
@@ -7180,7 +7180,7 @@
    }
    if(!HAL_STATUS_SUCCESS(status))
    {
-      VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, 
+      VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO_HIGH, 
                 "%s: %d: ignoring Device(PMC) state change to %d",
                 __FUNCTION__, __LINE__,
                 pmcState);
@@ -7206,7 +7206,7 @@
    pEntry = csrLLPeekHead( &sme_QosCb.flow_list, VOS_FALSE );
    if(!pEntry)
    {
-      VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, 
+      VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO_HIGH, 
                 "%s: %d: Flow List empty, can't search",
                 __FUNCTION__, __LINE__);
       return eHAL_STATUS_FAILURE;
diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c
index 176aedb..e57bb66 100644
--- a/CORE/SME/src/csr/csrApiRoam.c
+++ b/CORE/SME/src/csr/csrApiRoam.c
@@ -5592,7 +5592,7 @@
                         break;
                     }
                     status = csrScanGetResult(pMac, pScanFilter, &hBSSList);
-                    smsLog(pMac, LOGE, "************ csrScanGetResult Status ********* %d\n", status);
+                    smsLog(pMac, LOG1, "************ csrScanGetResult Status ********* %d\n", status);
                     if(HAL_STATUS_SUCCESS(status))
                     {
                         status = csrRoamIssueConnect(pMac, sessionId, pProfile, hBSSList, eCsrHddIssued, 
@@ -7123,7 +7123,7 @@
     switch (pSirMsg->messageType) 
     {
        case eWNI_SME_GET_STATISTICS_RSP:
-          smsLog( pMac, LOGW, FL("Stats rsp from PE\n"));
+          smsLog( pMac, LOG2, FL("Stats rsp from PE\n"));
           csrRoamStatsRspProcessor( pMac, pSirMsg );
           break;
 #ifdef WLAN_SOFTAP_FEATURE
@@ -8654,11 +8654,11 @@
             }
             break;
         case eWNI_SME_GET_STATISTICS_RSP:
-            smsLog( pMac, LOGW, FL("Stats rsp from PE\n"));
+            smsLog( pMac, LOG2, FL("Stats rsp from PE\n"));
             csrRoamStatsRspProcessor( pMac, pSirMsg );
             break;
         case eWNI_SME_GET_RSSI_REQ:
-            smsLog( pMac, LOGW, FL("GetRssiReq from self\n"));
+            smsLog( pMac, LOG2, FL("GetRssiReq from self\n"));
             csrUpdateRssi( pMac, pSirMsg );
             break;
 
@@ -13117,7 +13117,7 @@
          switch(counter)
          {
          case eCsrSummaryStats:
-            smsLog( pMac, LOG1, FL("csrRoamStatsRspProcessor:summary stats\n"));
+            smsLog( pMac, LOG2, FL("csrRoamStatsRspProcessor:summary stats\n"));
             status = palCopyMemory(pMac->hHdd, (tANI_U8 *)&pMac->roam.summaryStatsInfo, 
                                    pStats, sizeof(tCsrSummaryStatsInfo));
             if(!HAL_STATUS_SUCCESS(status))
@@ -13128,7 +13128,7 @@
             length -= sizeof(tCsrSummaryStatsInfo);
             break;
          case eCsrGlobalClassAStats:
-            smsLog( pMac, LOG1, FL("csrRoamStatsRspProcessor:ClassA stats\n"));
+            smsLog( pMac, LOG2, FL("csrRoamStatsRspProcessor:ClassA stats\n"));
             status = palCopyMemory(pMac->hHdd, (tANI_U8 *)&pMac->roam.classAStatsInfo, 
                                    pStats, sizeof(tCsrGlobalClassAStatsInfo));
             if(!HAL_STATUS_SUCCESS(status))
@@ -13139,7 +13139,7 @@
             length -= sizeof(tCsrGlobalClassAStatsInfo);
             break;
          case eCsrGlobalClassBStats:
-            smsLog( pMac, LOG1, FL("csrRoamStatsRspProcessor:ClassB stats\n"));
+            smsLog( pMac, LOG2, FL("csrRoamStatsRspProcessor:ClassB stats\n"));
             status = palCopyMemory(pMac->hHdd, (tANI_U8 *)&pMac->roam.classBStatsInfo, 
                                    pStats, sizeof(tCsrGlobalClassBStatsInfo));
             if(!HAL_STATUS_SUCCESS(status))
@@ -13150,7 +13150,7 @@
             length -= sizeof(tCsrGlobalClassBStatsInfo);
             break;
          case eCsrGlobalClassCStats:
-            smsLog( pMac, LOG1, FL("csrRoamStatsRspProcessor:ClassC stats\n"));
+            smsLog( pMac, LOG2, FL("csrRoamStatsRspProcessor:ClassC stats\n"));
             status = palCopyMemory(pMac->hHdd, (tANI_U8 *)&pMac->roam.classCStatsInfo, 
                                    pStats, sizeof(tCsrGlobalClassCStatsInfo));
             if(!HAL_STATUS_SUCCESS(status))
@@ -13161,7 +13161,7 @@
             length -= sizeof(tCsrGlobalClassCStatsInfo);
             break;
          case eCsrPerStaStats:
-            smsLog( pMac, LOG1, FL("csrRoamStatsRspProcessor:PerSta stats\n"));
+            smsLog( pMac, LOG2, FL("csrRoamStatsRspProcessor:PerSta stats\n"));
             if( CSR_MAX_STA > pSmeStatsRsp->staId )
             {
                status = palCopyMemory(pMac->hHdd, (tANI_U8 *)&pMac->roam.perStaStatsInfo[pSmeStatsRsp->staId], 
@@ -13233,7 +13233,7 @@
    if(!pEntry)
    {
       //list empty
-      smsLog(pMac, LOGW, "csrRoamFindInPeStatsReqList: List empty, no request to PE\n");
+      smsLog(pMac, LOG2, "csrRoamFindInPeStatsReqList: List empty, no request to PE\n");
       return NULL;
    }
    while( pEntry )
@@ -13241,7 +13241,7 @@
       pTempStaEntry = GET_BASE_ADDR( pEntry, tCsrPeStatsReqInfo, link );
       if(pTempStaEntry->statsMask == statsMask)
       {
-         smsLog(pMac, LOGW, "csrRoamFindInPeStatsReqList: match found\n");
+         smsLog(pMac, LOG3, "csrRoamFindInPeStatsReqList: match found\n");
          break;
       }
       pEntry = csrLLNext( &pMac->roam.peStatsReqList, pEntry, LL_ACCESS_NOLOCK );
@@ -13258,7 +13258,7 @@
    if(!pEntry)
    {
       //list empty
-      smsLog(pMac, LOGW, "csrRoamChecknUpdateClientReqList: List empty, no request from "
+      smsLog(pMac, LOG2, "csrRoamChecknUpdateClientReqList: List empty, no request from "
              "upper layer client(s)\n");
       return NULL;
    }
@@ -13268,7 +13268,7 @@
       if((pTempStaEntry->requesterId == pStaEntry->requesterId) && 
          (pTempStaEntry->statsMask == pStaEntry->statsMask))
       {
-         smsLog(pMac, LOGW, "csrRoamChecknUpdateClientReqList: match found\n");
+         smsLog(pMac, LOG3, "csrRoamChecknUpdateClientReqList: match found\n");
          if(update)
          {
             pTempStaEntry->periodicity = pStaEntry->periodicity;
@@ -13289,7 +13289,7 @@
    if(!pEntry)
    {
       //list empty
-      smsLog(pMac, LOGW, "csrRoamCheckClientReqList: List empty, no request from "
+      smsLog(pMac, LOG2, "csrRoamCheckClientReqList: List empty, no request from "
              "upper layer client(s)\n");
       return NULL;
    }
@@ -13298,7 +13298,7 @@
       pTempStaEntry = GET_BASE_ADDR( pEntry, tCsrStatsClientReqInfo, link );
       if((pTempStaEntry->statsMask & ~(1 << eCsrGlobalClassDStats))  == statsMask)
       {
-         smsLog(pMac, LOGW, "csrRoamCheckClientReqList: match found\n");
+         smsLog(pMac, LOG3, "csrRoamCheckClientReqList: match found\n");
          break;
       }
       pEntry = csrLLNext( &pMac->roam.statsClientReqList, pEntry, LL_ACCESS_NOLOCK );
@@ -14019,7 +14019,7 @@
          switch(counter)
          {
          case eCsrSummaryStats:
-            smsLog( pMac, LOG1, FL("csrRoamReportStatistics:summary stats\n"));
+            smsLog( pMac, LOG2, FL("csrRoamReportStatistics:summary stats\n"));
             status = palCopyMemory(pMac->hHdd, pStats, (tANI_U8 *)&pMac->roam.summaryStatsInfo, 
                                    sizeof(tCsrSummaryStatsInfo));
             if(!HAL_STATUS_SUCCESS(status))
@@ -14029,7 +14029,7 @@
             pStats += sizeof(tCsrSummaryStatsInfo);
             break;
          case eCsrGlobalClassAStats:
-            smsLog( pMac, LOG1, FL("csrRoamReportStatistics:ClassA stats\n"));
+            smsLog( pMac, LOG2, FL("csrRoamReportStatistics:ClassA stats\n"));
             status = palCopyMemory(pMac->hHdd, pStats, (tANI_U8 *)&pMac->roam.classAStatsInfo, 
                                    sizeof(tCsrGlobalClassAStatsInfo));
             if(!HAL_STATUS_SUCCESS(status))
@@ -14039,7 +14039,7 @@
             pStats += sizeof(tCsrGlobalClassAStatsInfo);
             break;
          case eCsrGlobalClassBStats:
-            smsLog( pMac, LOG1, FL("csrRoamReportStatistics:ClassB stats\n"));
+            smsLog( pMac, LOG2, FL("csrRoamReportStatistics:ClassB stats\n"));
             status = palCopyMemory(pMac->hHdd, pStats, (tANI_U8 *)&pMac->roam.classBStatsInfo, 
                                    sizeof(tCsrGlobalClassBStatsInfo));
             if(!HAL_STATUS_SUCCESS(status))
@@ -14049,7 +14049,7 @@
             pStats += sizeof(tCsrGlobalClassBStatsInfo);
             break;
          case eCsrGlobalClassCStats:
-            smsLog( pMac, LOG1, FL("csrRoamReportStatistics:ClassC stats\n"));
+            smsLog( pMac, LOG2, FL("csrRoamReportStatistics:ClassC stats\n"));
             status = palCopyMemory(pMac->hHdd, pStats, (tANI_U8 *)&pMac->roam.classCStatsInfo, 
                                    sizeof(tCsrGlobalClassCStatsInfo));
             if(!HAL_STATUS_SUCCESS(status))
@@ -14059,7 +14059,7 @@
             pStats += sizeof(tCsrGlobalClassCStatsInfo);
             break;
          case eCsrGlobalClassDStats:
-            smsLog( pMac, LOG1, FL("csrRoamReportStatistics:ClassD stats\n"));
+            smsLog( pMac, LOG2, FL("csrRoamReportStatistics:ClassD stats\n"));
             status = palCopyMemory(pMac->hHdd, pStats, (tANI_U8 *)&pMac->roam.classDStatsInfo, 
                                    sizeof(tCsrGlobalClassDStatsInfo));
             if(!HAL_STATUS_SUCCESS(status))
@@ -14069,7 +14069,7 @@
             pStats += sizeof(tCsrGlobalClassDStatsInfo);
             break;
          case eCsrPerStaStats:
-            smsLog( pMac, LOG1, FL("csrRoamReportStatistics:PerSta stats\n"));
+            smsLog( pMac, LOG2, FL("csrRoamReportStatistics:PerSta stats\n"));
             status = palCopyMemory(pMac->hHdd, pStats, (tANI_U8 *)&pMac->roam.perStaStatsInfo[staId], 
                                    sizeof(tCsrPerStaStatsInfo));
             if(!HAL_STATUS_SUCCESS(status))
diff --git a/CORE/SME/src/csr/csrApiScan.c b/CORE/SME/src/csr/csrApiScan.c
index 2cb8635..0f3f16d 100644
--- a/CORE/SME/src/csr/csrApiScan.c
+++ b/CORE/SME/src/csr/csrApiScan.c
@@ -2425,7 +2425,7 @@
     {
         pBssDescription = GET_BASE_ADDR( pEntry, tCsrScanResult, Link );
 
-        smsLog( pMac, LOGW, "...Bssid= %02x-%02x-%02x-%02x-%02x-%02x chan= %d, rssi = -%d\n",
+        smsLog( pMac, LOG2, "...Bssid= %02x-%02x-%02x-%02x-%02x-%02x chan= %d, rssi = -%d\n",
                       pBssDescription->Result.BssDescriptor.bssId[ 0 ], pBssDescription->Result.BssDescriptor.bssId[ 1 ],
                       pBssDescription->Result.BssDescriptor.bssId[ 2 ], pBssDescription->Result.BssDescriptor.bssId[ 3 ],
                       pBssDescription->Result.BssDescriptor.bssId[ 4 ], pBssDescription->Result.BssDescriptor.bssId[ 5 ],
@@ -3384,7 +3384,7 @@
                 }
             }
         }
-        smsLog(pMac, LOGE, FL("  %d sets each one is %d\n"), pIesLocal->Country.num_triplets, sizeof(tSirMacChanInfo));
+        smsLog(pMac, LOG3, FL("  %d sets each one is %d\n"), pIesLocal->Country.num_triplets, sizeof(tSirMacChanInfo));
         // save the channel/power information from the Channel IE.
         //sizeof(tSirMacChanInfo) has to be 3
         if (eHAL_STATUS_SUCCESS != csrSaveToChannelPower2G_5G( pMac, pIesLocal->Country.num_triplets * sizeof(tSirMacChanInfo),
@@ -4439,7 +4439,7 @@
                                                       pSession->pConnectBssDesc, NULL))
               )
             {
-                smsLog(pMac, LOGW, "Aging out BSS %02X-%02X-%02X-%02X-%02X-%02X Channel %d\n",
+                smsLog(pMac, LOG2, "Aging out BSS %02X-%02X-%02X-%02X-%02X-%02X Channel %d\n",
                                           pResult->Result.BssDescriptor.bssId[0],
                                           pResult->Result.BssDescriptor.bssId[1],
                                           pResult->Result.BssDescriptor.bssId[2],
@@ -5200,7 +5200,7 @@
         pCommand->u.scanCmd.callback(pMac, pCommand->u.scanCmd.pContext, pCommand->u.scanCmd.scanID, scanStatus); 
 //        sme_AcquireGlobalLock( &pMac->sme );
     } else {
-        smsLog( pMac, LOGW, "%s:%d - Callback NULL!!!\n", __FUNCTION__, __LINE__);
+        smsLog( pMac, LOG2, "%s:%d - Callback NULL!!!\n", __FUNCTION__, __LINE__);
     }
 }
 
@@ -5560,7 +5560,7 @@
     //Do not trigger IMPS in case of concurrency
     if (vos_concurrent_sessions_running() && csrIsAnySessionInConnectState(pMac))
     {
-        smsLog( pMac, LOGW, FL("Cannot request IMPS because Concurrent Sessions Running\n") );
+        smsLog( pMac, LOG1, FL("Cannot request IMPS because Concurrent Sessions Running\n") );
         return (status);
     }
 
@@ -5569,10 +5569,10 @@
         *pTimeInterval = 0;
     }
 
-    smsLog(pMac, LOGW, FL("called\n"));
+    smsLog(pMac, LOG3, FL("called\n"));
     if( smeCommandPending( pMac ) )
     {
-        smsLog( pMac, LOGW, FL("  Cannot request IMPS because command pending\n") );
+        smsLog( pMac, LOG1, FL("  Cannot request IMPS because command pending\n") );
         //Not to enter IMPS because more work to do
         if(pTimeInterval)
         {
diff --git a/CORE/SME/src/csr/csrNeighborRoam.c b/CORE/SME/src/csr/csrNeighborRoam.c
index 809e79c..5345a1b 100644
--- a/CORE/SME/src/csr/csrNeighborRoam.c
+++ b/CORE/SME/src/csr/csrNeighborRoam.c
@@ -204,7 +204,7 @@
 {
     tpCsrNeighborRoamBSSInfo pResult = NULL;
 
-    NEIGHBOR_ROAM_DEBUG(pMac, LOGE, FL("Emptying the BSS list. Current count = %d\n"), csrLLCount(pList));
+    NEIGHBOR_ROAM_DEBUG(pMac, LOG2, FL("Emptying the BSS list. Current count = %d\n"), csrLLCount(pList));
 
     /* Pick up the head, remove and free the node till the list becomes empty */
     while ((pResult = csrNeighborRoamGetRoamableAPListNextEntry(pMac, pList, NULL)) != NULL)
diff --git a/CORE/SME/src/csr/csrUtil.c b/CORE/SME/src/csr/csrUtil.c
index 6777e69..342c28f 100644
--- a/CORE/SME/src/csr/csrUtil.c
+++ b/CORE/SME/src/csr/csrUtil.c
@@ -6207,7 +6207,7 @@
     * The current work-around is to process setcontext_rsp and removekey_rsp no matter what the 
     * state is.
     */
-    smsLog( pMac, LOGE, FL(" is not what it intends to. Must be revisit or removed\n") );
+    smsLog( pMac, LOG2, FL(" is not what it intends to. Must be revisit or removed\n") );
     if( (NULL == pSession) || 
         ( csrIsConnStateDisconnected( pMac, sessionId ) && 
         (pSession->pCurRoamProfile != NULL) &&
diff --git a/CORE/SME/src/pmc/pmc.c b/CORE/SME/src/pmc/pmc.c
index 7d6b383..bcc0749 100644
--- a/CORE/SME/src/pmc/pmc.c
+++ b/CORE/SME/src/pmc/pmc.c
@@ -201,7 +201,7 @@
         return eHAL_STATUS_FAILURE;
     }
 
-    smsLog(pMac, LOGW, "PMC: Enter full power done: Cancel XO Core ON vote\n");
+    smsLog(pMac, LOG1, "PMC: Enter full power done: Cancel XO Core ON vote\n");
     if (vos_chipVoteXOCore(NULL, NULL, NULL, VOS_FALSE) != VOS_STATUS_SUCCESS)
     {
         smsLog(pMac, LOGE, "Could not cancel XO Core ON vote. Not returning failure. "
@@ -406,7 +406,7 @@
         return eHAL_STATUS_FAILURE;
      }
 
-    smsLog(pMac, LOGW, FL("eWNI_PMC_ENTER_IMPS_REQ sent to PE\n"));
+    smsLog(pMac, LOG2, FL("eWNI_PMC_ENTER_IMPS_REQ sent to PE\n"));
 
     return eHAL_STATUS_SUCCESS;
 }
@@ -1014,7 +1014,7 @@
     tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
     VOS_STATUS vosStatus;
 
-    smsLog(pMac, LOGW, FL("BMPS Traffic timer expired"));
+    smsLog(pMac, LOG2, FL("BMPS Traffic timer expired"));
 
     /* If timer expires and we are in a state other than Full Power State then something is wrong. */
     if (pMac->pmc.pmcState != FULL_POWER)
@@ -1026,7 +1026,7 @@
     /* Untill DHCP is not completed remain in power active */
     if(pMac->pmc.remainInPowerActiveTillDHCP)
     {
-        smsLog(pMac, LOGE, FL("BMPS Traffic Timer expired before DHCP completion ignore enter BMPS\n"));
+        smsLog(pMac, LOG2, FL("BMPS Traffic Timer expired before DHCP completion ignore enter BMPS\n"));
         pMac->pmc.remainInPowerActiveThreshold++;
         if( pMac->pmc.remainInPowerActiveThreshold >= DHCP_REMAIN_POWER_ACTIVE_THRESHOLD)
         {
@@ -2174,7 +2174,7 @@
                 if ( HAL_STATUS_SUCCESS( status ) )
                 {
                     pMac->pmc.pmcState = REQUEST_FULL_POWER;
-                    smsLog(pMac, LOGW, FL("eWNI_PMC_EXIT_IMPS_REQ sent to PE\n"));
+                    smsLog(pMac, LOG2, FL("eWNI_PMC_EXIT_IMPS_REQ sent to PE\n"));
                     fRemoveCmd = eANI_BOOLEAN_FALSE;
                 }
                 else
@@ -2195,7 +2195,7 @@
                 {
                     /* Change PMC state */
                     pMac->pmc.pmcState = REQUEST_BMPS;
-                    smsLog(pMac, LOGW, "PMC: Enter BMPS req done: Force XO Core ON\n");
+                    smsLog(pMac, LOG2, "PMC: Enter BMPS req done: Force XO Core ON\n");
                     vstatus = vos_chipVoteXOCore(NULL, NULL, NULL, VOS_TRUE);
                     if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
                     {
@@ -2249,7 +2249,7 @@
                 {
                     pMac->pmc.pmcState = REQUEST_FULL_POWER;
                     fRemoveCmd = eANI_BOOLEAN_FALSE;
-                    smsLog(pMac, LOGW, FL("eWNI_PMC_EXIT_BMPS_REQ sent to PE\n"));
+                    smsLog(pMac, LOG2, FL("eWNI_PMC_EXIT_BMPS_REQ sent to PE\n"));
 
                 }
                 else
diff --git a/CORE/SME/src/pmc/pmcApi.c b/CORE/SME/src/pmc/pmcApi.c
index 24f5292..ec5c705 100644
--- a/CORE/SME/src/pmc/pmcApi.c
+++ b/CORE/SME/src/pmc/pmcApi.c
@@ -1254,7 +1254,7 @@
     {
         pCommand = GET_BASE_ADDR(pEntry, tSmeCmd, Link);
 
-        smsLog(pMac, LOG1, FL("process message = %d\n"), pMsg->messageType);
+        smsLog(pMac, LOG2, FL("process message = %d\n"), pMsg->messageType);
 
     /* Process each different type of message. */
     switch (pMsg->messageType)
@@ -1262,7 +1262,7 @@
 
     /* We got a response to our IMPS request.  */
     case eWNI_PMC_ENTER_IMPS_RSP:
-        smsLog(pMac, LOGW, FL("Rcvd eWNI_PMC_ENTER_IMPS_RSP with status = %d\n"), pMsg->statusCode);
+        smsLog(pMac, LOG2, FL("Rcvd eWNI_PMC_ENTER_IMPS_RSP with status = %d\n"), pMsg->statusCode);
             if( (eSmeCommandEnterImps != pCommand->command) && (eSmeCommandEnterStandby != pCommand->command) )
             {
                 smsLog(pMac, LOGW, FL("Rcvd eWNI_PMC_ENTER_IMPS_RSP without request\n"));
@@ -1312,7 +1312,7 @@
 
     /* We got a response to our wake from IMPS request. */
     case eWNI_PMC_EXIT_IMPS_RSP:
-            smsLog(pMac, LOGW, FL("Rcvd eWNI_PMC_EXIT_IMPS_RSP with status = %d\n"), pMsg->statusCode);
+            smsLog(pMac, LOG2, FL("Rcvd eWNI_PMC_EXIT_IMPS_RSP with status = %d\n"), pMsg->statusCode);
             if( eSmeCommandExitImps != pCommand->command )
             {
                 smsLog(pMac, LOGW, FL("Rcvd eWNI_PMC_EXIT_IMPS_RSP without request\n"));
@@ -1337,7 +1337,7 @@
 
     /* We got a response to our BMPS request.  */
     case eWNI_PMC_ENTER_BMPS_RSP:
-            smsLog(pMac, LOGW, FL("Rcvd eWNI_PMC_ENTER_BMPS_RSP with status = %d\n"), pMsg->statusCode);
+            smsLog(pMac, LOG2, FL("Rcvd eWNI_PMC_ENTER_BMPS_RSP with status = %d\n"), pMsg->statusCode);
             if( eSmeCommandEnterBmps != pCommand->command )
             {
                 smsLog(pMac, LOGW, FL("Rcvd eWNI_PMC_ENTER_BMPS_RSP without request\n"));
@@ -1374,7 +1374,7 @@
 
     /* We got a response to our wake from BMPS request. */
     case eWNI_PMC_EXIT_BMPS_RSP:
-            smsLog(pMac, LOGW, FL("Rcvd eWNI_PMC_EXIT_BMPS_RSP with status = %d\n"), pMsg->statusCode);
+            smsLog(pMac, LOG2, FL("Rcvd eWNI_PMC_EXIT_BMPS_RSP with status = %d\n"), pMsg->statusCode);
             if( eSmeCommandExitBmps != pCommand->command )
             {
                 smsLog(pMac, LOGW, FL("Rcvd eWNI_PMC_EXIT_BMPS_RSP without request\n"));
@@ -1399,7 +1399,7 @@
 
         /* We got a response to our Start UAPSD request.  */
         case eWNI_PMC_ENTER_UAPSD_RSP:
-            smsLog(pMac, LOGW, FL("Rcvd eWNI_PMC_ENTER_UAPSD_RSP with status = %d\n"), pMsg->statusCode);
+            smsLog(pMac, LOG2, FL("Rcvd eWNI_PMC_ENTER_UAPSD_RSP with status = %d\n"), pMsg->statusCode);
             if( eSmeCommandEnterUapsd != pCommand->command )
         {
                 smsLog(pMac, LOGW, FL("Rcvd eWNI_PMC_ENTER_UAPSD_RSP without request\n"));
@@ -1434,7 +1434,7 @@
 
       /* We got a response to our Stop UAPSD request.  */
       case eWNI_PMC_EXIT_UAPSD_RSP:
-         smsLog(pMac, LOGW, FL("Rcvd eWNI_PMC_EXIT_UAPSD_RSP with status = %d\n"), pMsg->statusCode);
+         smsLog(pMac, LOG2, FL("Rcvd eWNI_PMC_EXIT_UAPSD_RSP with status = %d\n"), pMsg->statusCode);
             if( eSmeCommandExitUapsd != pCommand->command )
             {
                 smsLog(pMac, LOGW, FL("Rcvd eWNI_PMC_EXIT_UAPSD_RSP without request\n"));
diff --git a/CORE/SYS/legacy/src/platform/src/VossWrapper.c b/CORE/SYS/legacy/src/platform/src/VossWrapper.c
index 4b689fa..7ff7f62 100644
--- a/CORE/SYS/legacy/src/platform/src/VossWrapper.c
+++ b/CORE/SYS/legacy/src/platform/src/VossWrapper.c
@@ -483,7 +483,7 @@
    vStatus = vos_timer_stop( &timer_ptr->vosTimer );
    if (VOS_STATUS_SUCCESS != vStatus)
    {
-      VOS_TRACE(VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_WARN, 
+      VOS_TRACE(VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_INFO_HIGH, 
                 "Unable to stop timer %s; status =%d\n", 
                 TIMER_NAME, vStatus);
    }
diff --git a/CORE/SYS/legacy/src/system/src/sysEntryFunc.c b/CORE/SYS/legacy/src/system/src/sysEntryFunc.c
index fb886c3..9efa339 100644
--- a/CORE/SYS/legacy/src/system/src/sysEntryFunc.c
+++ b/CORE/SYS/legacy/src/system/src/sysEntryFunc.c
@@ -174,9 +174,9 @@
         goto fail;
     }
 
-    PELOGW(sysLog(pMac, LOGW, FL("Rx Mgmt Frame Subtype: %d\n"), subType);
-    sirDumpBuf(pMac, SIR_SYS_MODULE_ID, LOGW, (tANI_U8 *)WDA_GET_RX_MAC_HEADER(pBd), WDA_GET_RX_MPDU_LEN(pBd));
-    sirDumpBuf(pMac, SIR_SYS_MODULE_ID, LOGW, WDA_GET_RX_MPDU_DATA(pBd), WDA_GET_RX_PAYLOAD_LEN(pBd));)
+    PELOG3(sysLog(pMac, LOG3, FL("Rx Mgmt Frame Subtype: %d\n"), subType);
+    sirDumpBuf(pMac, SIR_SYS_MODULE_ID, LOG3, (tANI_U8 *)WDA_GET_RX_MAC_HEADER(pBd), WDA_GET_RX_MPDU_LEN(pBd));
+    sirDumpBuf(pMac, SIR_SYS_MODULE_ID, LOG3, WDA_GET_RX_MPDU_DATA(pBd), WDA_GET_RX_PAYLOAD_LEN(pBd));)
 
     pMac->sys.gSysFrameCount[type][subType]++;
 
@@ -214,10 +214,10 @@
 #endif
     else
     {
-        PELOGE(sysLog(pMac, LOGE, "BBT received Invalid type %d subType %d "
+        PELOG3(sysLog(pMac, LOG3, "BBT received Invalid type %d subType %d "
                    "LIM state %X. BD dump is:\n",
                    type, subType, limGetSmeState(pMac));
-        sirDumpBuf(pMac, SIR_SYS_MODULE_ID, LOGE,
+        sirDumpBuf(pMac, SIR_SYS_MODULE_ID, LOG3,
                        (tANI_U8 *) pBd, WLANHAL_RX_BD_HEADER_SIZE);)
 
         goto fail;
diff --git a/CORE/SYS/legacy/src/utils/src/logApi.c b/CORE/SYS/legacy/src/utils/src/logApi.c
index 7fc70e0..f8031cd 100644
--- a/CORE/SYS/legacy/src/utils/src/logApi.c
+++ b/CORE/SYS/legacy/src/utils/src/logApi.c
@@ -181,13 +181,13 @@
             return VOS_TRACE_LEVEL_ERROR;
         case LOGW:
             return VOS_TRACE_LEVEL_WARN;
-        case LOG4:
-            return VOS_TRACE_LEVEL_INFO;
-        case LOG3:
-            return VOS_TRACE_LEVEL_INFO_HIGH;
-        case LOG2:
-            return VOS_TRACE_LEVEL_INFO_MED;
         case LOG1:
+            return VOS_TRACE_LEVEL_INFO;
+        case LOG2:
+            return VOS_TRACE_LEVEL_INFO_HIGH;
+        case LOG3:
+            return VOS_TRACE_LEVEL_INFO_MED;
+        case LOG4:
             return VOS_TRACE_LEVEL_INFO_LOW;
         default:
             return VOS_TRACE_LEVEL_INFO_LOW;
diff --git a/CORE/SYS/legacy/src/utils/src/logDump.c b/CORE/SYS/legacy/src/utils/src/logDump.c
index e5a3ab6..c18d635 100644
--- a/CORE/SYS/legacy/src/utils/src/logDump.c
+++ b/CORE/SYS/legacy/src/utils/src/logDump.c
@@ -359,7 +359,7 @@
         else
         {
             sysLog( pMac, LOGE, FL("WNI_CFG_%s(%d  0x%x) len=%ld\n"),  gCfgParamName[cfgId], cfgId, cfgId, valueLen );
-            sirDumpBuf(pMac, SIR_WDA_MODULE_ID, LOGW, buf, valueLen) ;
+            sirDumpBuf(pMac, SIR_WDA_MODULE_ID, LOG1, buf, valueLen) ;
         }
     }
 
diff --git a/CORE/SYS/legacy/src/utils/src/parserApi.c b/CORE/SYS/legacy/src/utils/src/parserApi.c
index bec9676..3ebda69 100644
--- a/CORE/SYS/legacy/src/utils/src/parserApi.c
+++ b/CORE/SYS/legacy/src/utils/src/parserApi.c
@@ -622,7 +622,7 @@
        pDot11f->shortGI40MHz = 0;
     }
 
-    dot11fLog(pMac, LOG1, FL("SupportedChnlWidth: %d, mimoPS: %d, GF: %d, shortGI20:%d, shortGI40: %d, dsssCck: %d\n"),
+    dot11fLog(pMac, LOG2, FL("SupportedChnlWidth: %d, mimoPS: %d, GF: %d, shortGI20:%d, shortGI40: %d, dsssCck: %d\n"),
                                             pDot11f->supportedChannelWidthSet, pDot11f->mimoPowerSave,  pDot11f->greenField,
                                             pDot11f->shortGI20MHz, pDot11f->shortGI40MHz, pDot11f->dsssCckMode40MHz);
 
@@ -636,7 +636,7 @@
     pDot11f->mpduDensity      = pHTParametersInfo->mpduDensity;
     pDot11f->reserved1        = pHTParametersInfo->reserved;
 
-    dot11fLog( pMac, LOG1, FL( "AMPDU Param: %x\n" ), nCfgValue);
+    dot11fLog( pMac, LOG2, FL( "AMPDU Param: %x\n" ), nCfgValue);
 
 
     CFG_GET_STR( nSirStatus, pMac, WNI_CFG_SUPPORTED_MCS_SET,
diff --git a/CORE/TL/src/wlan_qct_tl_ba.c b/CORE/TL/src/wlan_qct_tl_ba.c
index 14b1c60..a15597e 100644
--- a/CORE/TL/src/wlan_qct_tl_ba.c
+++ b/CORE/TL/src/wlan_qct_tl_ba.c
@@ -170,7 +170,7 @@
    vosDataBuff = NULL;
 
 
-   TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR,"BA timeout with %d pending frames, curIdx %d", ReorderInfo->pendingFramesCount, ReorderInfo->ucCIndex));
+   TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO,"BA timeout with %d pending frames, curIdx %d", ReorderInfo->pendingFramesCount, ReorderInfo->ucCIndex));
 
    if(ReorderInfo->pendingFramesCount == 0)
    {
diff --git a/CORE/TL/src/wlan_qct_tl_hosupport.c b/CORE/TL/src/wlan_qct_tl_hosupport.c
index 2c3bcde..6056e6b 100644
--- a/CORE/TL/src/wlan_qct_tl_hosupport.c
+++ b/CORE/TL/src/wlan_qct_tl_hosupport.c
@@ -1441,7 +1441,7 @@
 
    if(0 == tlCtxt->hoSupport.currentHOState.numThreshold)
    {
-      TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR,"Empty list, can not remove"));
+      TLLOGE(VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO,"Empty list, can not remove"));
       return VOS_STATUS_E_EMPTY;
    }
 
diff --git a/CORE/VOSS/src/vos_list.c b/CORE/VOSS/src/vos_list.c
index 14e6d59..51adbab 100644
--- a/CORE/VOSS/src/vos_list.c
+++ b/CORE/VOSS/src/vos_list.c
@@ -257,7 +257,7 @@
 
    if ( list_empty( &pList->anchor ) )
    {
-      VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_WARN,
+      VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO_HIGH,
                 "%s: list empty", __FUNCTION__);
       mutex_unlock(&pList->lock);
       return VOS_STATUS_E_EMPTY;
diff --git a/CORE/VOSS/src/vos_timer.c b/CORE/VOSS/src/vos_timer.c
index 2881ae4..c873f54 100644
--- a/CORE/VOSS/src/vos_timer.c
+++ b/CORE/VOSS/src/vos_timer.c
@@ -720,7 +720,7 @@
    if ( VOS_TIMER_STATE_STOPPED != timer->state )
    {  
       spin_unlock_irqrestore( &timer->platformInfo.spinlock,flags );
-      VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_WARN, 
+      VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO_HIGH, 
                 "%s: Cannot start timer in state = %d ",__func__, timer->state);
       return VOS_STATUS_E_ALREADY;
    }
@@ -805,7 +805,7 @@
    if ( VOS_TIMER_STATE_RUNNING != timer->state )
    {
       spin_unlock_irqrestore( &timer->platformInfo.spinlock,flags );
-      VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_WARN,
+      VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO_HIGH,
                 "%s: Cannot stop timer in state = %d",
                 __func__, timer->state);
       return VOS_STATUS_E_FAULT;
diff --git a/CORE/VOSS/src/vos_trace.c b/CORE/VOSS/src/vos_trace.c
index e112325..9d6636f 100644
--- a/CORE/VOSS/src/vos_trace.c
+++ b/CORE/VOSS/src/vos_trace.c
@@ -92,29 +92,29 @@
 // the 3 character 'name' of the module for marking the trace logs.
 moduleTraceInfo gVosTraceInfo[ VOS_MODULE_ID_MAX ] =
 {
-   [VOS_MODULE_ID_BAP]        = { (1<<VOS_TRACE_LEVEL_FATAL), "BAP" },
-   [VOS_MODULE_ID_TL]         = { (1<<VOS_TRACE_LEVEL_FATAL), "TL " },
+   [VOS_MODULE_ID_BAP]        = { VOS_DEFAULT_TRACE_LEVEL, "BAP" },
+   [VOS_MODULE_ID_TL]         = { VOS_DEFAULT_TRACE_LEVEL, "TL " },
 #ifndef FEATURE_WLAN_INTEGRATED_SOC
-   [VOS_MODULE_ID_BAL]        = { (1<<VOS_TRACE_LEVEL_FATAL), "BAL" },
-   [VOS_MODULE_ID_SAL]        = { (1<<VOS_TRACE_LEVEL_FATAL), "SAL" },
-   [VOS_MODULE_ID_SSC]        = { (1<<VOS_TRACE_LEVEL_FATAL), "SSC" },
+   [VOS_MODULE_ID_BAL]        = { VOS_DEFAULT_TRACE_LEVEL, "BAL" },
+   [VOS_MODULE_ID_SAL]        = { VOS_DEFAULT_TRACE_LEVEL, "SAL" },
+   [VOS_MODULE_ID_SSC]        = { VOS_DEFAULT_TRACE_LEVEL, "SSC" },
 #endif
 #ifdef FEATURE_WLAN_INTEGRATED_SOC
-   [VOS_MODULE_ID_WDI]        = { (1<<VOS_TRACE_LEVEL_FATAL), "WDI"},
+   [VOS_MODULE_ID_WDI]        = { VOS_DEFAULT_TRACE_LEVEL, "WDI"},
 #endif
-   [VOS_MODULE_ID_HDD]        = { (1<<VOS_TRACE_LEVEL_FATAL), "HDD" },
-   [VOS_MODULE_ID_SME]        = { (1<<VOS_TRACE_LEVEL_FATAL), "SME" },
-   [VOS_MODULE_ID_PE]         = { (1<<VOS_TRACE_LEVEL_FATAL), "PE " },
+   [VOS_MODULE_ID_HDD]        = { VOS_DEFAULT_TRACE_LEVEL, "HDD" },
+   [VOS_MODULE_ID_SME]        = { VOS_DEFAULT_TRACE_LEVEL, "SME" },
+   [VOS_MODULE_ID_PE]         = { VOS_DEFAULT_TRACE_LEVEL, "PE " },
 #ifndef FEATURE_WLAN_INTEGRATED_SOC
-   [VOS_MODULE_ID_HAL]        = { (1<<VOS_TRACE_LEVEL_FATAL), "HAL" },
+   [VOS_MODULE_ID_HAL]        = { VOS_DEFAULT_TRACE_LEVEL, "HAL" },
 #else
-   [VOS_MODULE_ID_WDA]        = { (1<<VOS_TRACE_LEVEL_FATAL), "WDA" },
+   [VOS_MODULE_ID_WDA]        = { VOS_DEFAULT_TRACE_LEVEL, "WDA" },
 #endif
-   [VOS_MODULE_ID_SYS]        = { (1<<VOS_TRACE_LEVEL_FATAL), "SYS" },
+   [VOS_MODULE_ID_SYS]        = { VOS_DEFAULT_TRACE_LEVEL, "SYS" },
    [VOS_MODULE_ID_VOSS]       = { VOS_DEFAULT_TRACE_LEVEL, "VOS" },
 #ifdef WLAN_SOFTAP_FEATURE
-   [VOS_MODULE_ID_SAP]        = { (1<<VOS_TRACE_LEVEL_FATAL), "SAP" },
-   [VOS_MODULE_ID_HDD_SOFTAP] = { (1<<VOS_TRACE_LEVEL_FATAL), "HSP" },
+   [VOS_MODULE_ID_SAP]        = { VOS_DEFAULT_TRACE_LEVEL, "SAP" },
+   [VOS_MODULE_ID_HDD_SOFTAP] = { VOS_DEFAULT_TRACE_LEVEL, "HSP" },
 #endif
 };
 
@@ -259,8 +259,7 @@
       va_start(val, strFormat);
 
       // print the prefix string into the string buffer...
-      n = snprintf(strBuffer, VOS_TRACE_BUFFER_SIZE, "[%d:%d:%2s:%3s] ",
-                   smp_processor_id(),
+      n = snprintf(strBuffer, VOS_TRACE_BUFFER_SIZE, "[WLAN][%d:%2s:%3s] ",
                    in_interrupt() ? 0 : current->pid,
                    (char *) TRACE_LEVEL_STR[ level ],
                    (char *) gVosTraceInfo[ module ].moduleNameStr );
diff --git a/firmware_bin/WCNSS_cfg.dat b/firmware_bin/WCNSS_cfg.dat
index 3364845..bf6478c 100644
--- a/firmware_bin/WCNSS_cfg.dat
+++ b/firmware_bin/WCNSS_cfg.dat
Binary files differ
