diff --git a/CORE/BAP/src/bapRsnSsmEapol.c b/CORE/BAP/src/bapRsnSsmEapol.c
index f0e9439..9c60510 100644
--- a/CORE/BAP/src/bapRsnSsmEapol.c
+++ b/CORE/BAP/src/bapRsnSsmEapol.c
@@ -42,10 +42,6 @@
 
 //#include "aniSsmUtils.h"
 
-#define CHECK_RETVAL(retVal) \
-              assert(retVal == ANI_OK); \
-              if (retVal != ANI_OK) return ANI_E_FAILED;
-
 
 //TODO: Put these in an array after EAPOL_TYPE is made an enum
 #define ANI_EAPOL_TYPE_PACKET_STR    "EAP"
diff --git a/CORE/BAP/src/btampHCI.c b/CORE/BAP/src/btampHCI.c
index a5bec8e..01c643f 100644
--- a/CORE/BAP/src/btampHCI.c
+++ b/CORE/BAP/src/btampHCI.c
@@ -379,31 +379,24 @@
 #   define FRAMES_DBG_BREAK()
 #endif
 
-#if ! defined(BTAMP_PARAMETER_CHECK)
+#if ! defined(BTAMP_PARAMETER_CHECK2)
 #   if defined (BTAMP_HAVE_WIN32_API)
 
-#       define BTAMP_PARAMETER_CHECK(pBuf, nBuf, pFrm, nFrm) \
-        if (!pBuf || IsBadReadPtr(pBuf, nBuf)) return BTAMP_BAD_INPUT_BUFFER; \
-        if (!pFrm || IsBadWritePtr(pFrm, nFrm)) return BTAMP_BAD_OUTPUT_BUFFER \
-
-#       define BTAMP_PARAMETER_CHECK2(pSrc, pBuf, nBuf, pnConsumed) \
+#       define BTAMP_PARAMETER_CHECK2(pSrc, pBuf, nBuf, pnConsumed) do { \
         if (!pSrc || IsBadReadPtr(pSrc, 4)) return BTAMP_BAD_INPUT_BUFFER; \
         if (!pBuf || IsBadWritePtr(pBuf, nBuf)) return BTAMP_BAD_OUTPUT_BUFFER; \
-        if (!nBuf) return BTAMP_BAD_OUTPUT_BUFFER; \
-        if (IsBadWritePtr(pnConsumed, 4)) return BTAMP_BAD_OUTPUT_BUFFER \
+        if (!nBuf) return BTAMP_BAD_OUTPUT_BUFFER;                      \
+        if (IsBadWritePtr(pnConsumed, 4)) return BTAMP_BAD_OUTPUT_BUFFER; \
+    } while (0)
 
 #   else
 
-#       define BTAMP_PARAMETER_CHECK(pBuf, nBuf, pFrm, nFrm) \
-        if (!pBuf) return BTAMP_BAD_INPUT_BUFFER; \
-        if (!pFrm) return BTAMP_BAD_OUTPUT_BUFFER \
-
-#       define BTAMP_PARAMETER_CHECK2(pSrc, pBuf, nBuf, pnConsumed) \
-        if (!pSrc) return BTAMP_BAD_INPUT_BUFFER; \
-        if (!pBuf) return BTAMP_BAD_OUTPUT_BUFFER; \
-        if (!nBuf) return BTAMP_BAD_OUTPUT_BUFFER; \
-        if (!pnConsumed) return BTAMP_BAD_OUTPUT_BUFFER \
-
+#       define BTAMP_PARAMETER_CHECK2(pSrc, pBuf, nBuf, pnConsumed) do { \
+        if (!pSrc) return BTAMP_BAD_INPUT_BUFFER;                       \
+        if (!pBuf) return BTAMP_BAD_OUTPUT_BUFFER;                      \
+        if (!nBuf) return BTAMP_BAD_OUTPUT_BUFFER;                      \
+        if (!pnConsumed) return BTAMP_BAD_OUTPUT_BUFFER;                \
+    } while (0)
 #   endif
 #endif
 
diff --git a/CORE/HDD/inc/wlan_hdd_p2p.h b/CORE/HDD/inc/wlan_hdd_p2p.h
index ff845cd..a71fba4 100644
--- a/CORE/HDD/inc/wlan_hdd_p2p.h
+++ b/CORE/HDD/inc/wlan_hdd_p2p.h
@@ -53,9 +53,9 @@
 
 
 #ifdef WLAN_FEATURE_P2P
-#define P2P_POWER_SAVE_TYPE_OPPORTUNISTIC        1 << 0;
-#define P2P_POWER_SAVE_TYPE_PERIODIC_NOA         1 << 1;
-#define P2P_POWER_SAVE_TYPE_SINGLE_NOA           1 << 2;
+#define P2P_POWER_SAVE_TYPE_OPPORTUNISTIC        (1 << 0)
+#define P2P_POWER_SAVE_TYPE_PERIODIC_NOA         (1 << 1)
+#define P2P_POWER_SAVE_TYPE_SINGLE_NOA           (1 << 2)
 
 #ifdef WLAN_FEATURE_P2P_DEBUG
 typedef enum  { P2P_NOT_ACTIVE,
diff --git a/CORE/HDD/src/wlan_hdd_wext.c b/CORE/HDD/src/wlan_hdd_wext.c
index c828665..83538a2 100644
--- a/CORE/HDD/src/wlan_hdd_wext.c
+++ b/CORE/HDD/src/wlan_hdd_wext.c
@@ -293,21 +293,20 @@
 #define WLAN_STATS_TX_MC_BYTE_CNT     20
 #define WLAN_STATS_TX_BC_BYTE_CNT     21
 
-#define FILL_TLV(__p, __type, __size, __val, __tlen) \
-{\
-    if ((__tlen + __size + 2) < WE_MAX_STR_LEN) \
-    {\
-        *__p++ = __type;\
-        *__p++ = __size;\
-        memcpy(__p, __val, __size);\
-        __p += __size;\
-        __tlen += __size + 2;\
-    }\
-    else \
-    {                                                         \
-        hddLog(VOS_TRACE_LEVEL_ERROR, "FILL_TLV Failed!!!\n");\
-    }                                                         \
-}while(0);
+#define FILL_TLV(__p, __type, __size, __val, __tlen) do {           \
+        if ((__tlen + __size + 2) < WE_MAX_STR_LEN)                 \
+        {                                                           \
+            *__p++ = __type;                                        \
+            *__p++ = __size;                                        \
+            memcpy(__p, __val, __size);                             \
+            __p += __size;                                          \
+            __tlen += __size + 2;                                   \
+        }                                                           \
+        else                                                        \
+        {                                                           \
+            hddLog(VOS_TRACE_LEVEL_ERROR, "FILL_TLV Failed!!!\n");  \
+        }                                                           \
+    } while(0);
 
 #define VERSION_VALUE_MAX_LEN 32
 
diff --git a/CORE/MAC/src/include/parserApi.h b/CORE/MAC/src/include/parserApi.h
index 6377fa9..d37a6d1 100644
--- a/CORE/MAC/src/include/parserApi.h
+++ b/CORE/MAC/src/include/parserApi.h
@@ -269,48 +269,52 @@
 
 void dot11fLog(tpAniSirGlobal pMac, int nSev, const char *lpszFormat, ...);
 
-#define CFG_GET_INT(nStatus, pMac, nItem, cfg )                 \
-    (nStatus) = wlan_cfgGetInt( (pMac), (nItem), & (cfg) );          \
-    if ( eSIR_SUCCESS != (nStatus) )                            \
-    {                                                           \
-        dot11fLog( (pMac), LOGP, FL("Failed to retrieve "       \
-                                 #nItem " from CFG (%d).\n"),   \
-                (nStatus) );                                    \
-        return nStatus;                                         \
-    }
+#define CFG_GET_INT(nStatus, pMac, nItem, cfg )  do {                \
+        (nStatus) = wlan_cfgGetInt( (pMac), (nItem), & (cfg) );      \
+        if ( eSIR_SUCCESS != (nStatus) )                             \
+        {                                                            \
+            dot11fLog( (pMac), LOGP, FL("Failed to retrieve "        \
+                                        #nItem " from CFG (%d).\n"), \
+                       (nStatus) );                                  \
+            return nStatus;                                          \
+        }                                                            \
+    } while (0)
 
-#define CFG_GET_INT_NO_STATUS(nStatus, pMac, nItem, cfg )       \
-    (nStatus) = wlan_cfgGetInt( (pMac), (nItem), & (cfg) );          \
-    if ( eSIR_SUCCESS != (nStatus) )                            \
-    {                                                           \
-        dot11fLog( (pMac), LOGP, FL("Failed to retrieve "       \
-                                 #nItem " from CFG (%d).\n"),   \
-                (nStatus) );                                    \
-        return;                                                 \
-    }
+#define CFG_GET_INT_NO_STATUS(nStatus, pMac, nItem, cfg ) do {       \
+        (nStatus) = wlan_cfgGetInt( (pMac), (nItem), & (cfg) );      \
+        if ( eSIR_SUCCESS != (nStatus) )                             \
+        {                                                            \
+            dot11fLog( (pMac), LOGP, FL("Failed to retrieve "        \
+                                        #nItem " from CFG (%d).\n"), \
+                       (nStatus) );                                  \
+            return;                                                  \
+        }                                                            \
+    } while (0)
 
-#define CFG_GET_STR(nStatus, pMac, nItem, cfg, nCfg, nMaxCfg)   \
-    (nCfg) = (nMaxCfg);                                         \
-    (nStatus) = wlan_cfgGetStr( (pMac), (nItem), (cfg), & (nCfg) );  \
-    if ( eSIR_SUCCESS != (nStatus) )                            \
-    {                                                           \
-        dot11fLog( (pMac), LOGP, FL("Failed to retrieve "       \
-                                 #nItem " from CFG (%d).\n"),   \
-                (nStatus) );                                    \
-        return nStatus;                                         \
-    }
+#define CFG_GET_STR(nStatus, pMac, nItem, cfg, nCfg, nMaxCfg) do {      \
+        (nCfg) = (nMaxCfg);                                             \
+        (nStatus) = wlan_cfgGetStr( (pMac), (nItem), (cfg), & (nCfg) ); \
+        if ( eSIR_SUCCESS != (nStatus) )                                \
+        {                                                               \
+            dot11fLog( (pMac), LOGP, FL("Failed to retrieve "           \
+                                        #nItem " from CFG (%d).\n"),    \
+                       (nStatus) );                                     \
+            return nStatus;                                             \
+        }                                                               \
+    } while (0)
 
-#define CFG_GET_STR_NO_STATUS(nStatus, pMac, nItem, cfg, nCfg,  \
-                              nMaxCfg)                          \
-    (nCfg) = (nMaxCfg);                                         \
-    (nStatus) = wlan_cfgGetStr( (pMac), (nItem), (cfg), & (nCfg) );  \
-    if ( eSIR_SUCCESS != (nStatus) )                            \
-    {                                                           \
-        dot11fLog( (pMac), LOGP, FL("Failed to retrieve "       \
-                                 #nItem " from CFG (%d).\n"),   \
-                (nStatus) );                                    \
-        return;                                                 \
-    }
+#define CFG_GET_STR_NO_STATUS(nStatus, pMac, nItem, cfg, nCfg,          \
+                              nMaxCfg) do {                             \
+        (nCfg) = (nMaxCfg);                                             \
+        (nStatus) = wlan_cfgGetStr( (pMac), (nItem), (cfg), & (nCfg) ); \
+        if ( eSIR_SUCCESS != (nStatus) )                                \
+        {                                                               \
+            dot11fLog( (pMac), LOGP, FL("Failed to retrieve "           \
+                                        #nItem " from CFG (%d).\n"),    \
+                       (nStatus) );                                     \
+            return;                                                     \
+        }                                                               \
+    } while (0)
 
 void swapBitField16(tANI_U16 in, tANI_U16 *out);
 
diff --git a/CORE/MAC/src/pe/lim/limSendManagementFrames.c b/CORE/MAC/src/pe/lim/limSendManagementFrames.c
index fb00d00..7753391 100644
--- a/CORE/MAC/src/pe/lim/limSendManagementFrames.c
+++ b/CORE/MAC/src/pe/lim/limSendManagementFrames.c
@@ -59,31 +59,6 @@
 
 ////////////////////////////////////////////////////////////////////////
 
-/// Get an integral configuration item & check return status; if it
-/// fails, return.
-#define CFG_LIM_GET_INT_NO_STATUS(nStatus, pMac, nItem, cfg )      \
-    (nStatus) = wlan_cfgGetInt( (pMac), (nItem), & (cfg) );             \
-    if ( eSIR_SUCCESS != (nStatus) )                               \
-    {                                                              \
-        limLog( (pMac), LOGP, FL("Failed to retrieve "             \
-                                 #nItem " from CFG (%d).\n"),      \
-                (nStatus) );                                       \
-        return;                                                    \
-    }
-
-/// Get an text configuration item & check return status; if it fails,
-/// return.
-#define CFG_LIM_GET_STR_NO_STATUS(nStatus, pMac, nItem, cfg, nCfg, \
-                              nMaxCfg)                             \
-    (nCfg) = (nMaxCfg);                                            \
-    (nStatus) = wlan_cfgGetStr( (pMac), (nItem), (cfg), & (nCfg) );     \
-    if ( eSIR_SUCCESS != (nStatus) )                               \
-    {                                                              \
-        limLog( (pMac), LOGP, FL("Failed to retrieve "             \
-                                 #nItem " from CFG (%d).\n"),      \
-                (nStatus) );                                       \
-        return;                                                    \
-    }
 
 /**
  *
@@ -538,8 +513,13 @@
     else
     {
 #endif
-    CFG_LIM_GET_INT_NO_STATUS( nSirStatus, pMac,
-                               WNI_CFG_BEACON_INTERVAL, cfg );
+    nSirStatus = wlan_cfgGetInt( pMac, WNI_CFG_BEACON_INTERVAL, &cfg);
+    if (eSIR_SUCCESS != nSirStatus)
+    {
+        limLog( pMac, LOGP, FL("Failed to retrieve WNI_CFG_BEACON_INTERVAL from CFG (%d).\n"),
+                nSirStatus );
+        return;
+    }
     pFrm->BeaconInterval.interval = ( tANI_U16 ) cfg;
 #ifdef WLAN_SOFTAP_FEATURE
     }
diff --git a/CORE/SYS/legacy/src/system/inc/sysDef.h b/CORE/SYS/legacy/src/system/inc/sysDef.h
index 01b5435..36f213e 100644
--- a/CORE/SYS/legacy/src/system/inc/sysDef.h
+++ b/CORE/SYS/legacy/src/system/inc/sysDef.h
@@ -85,7 +85,7 @@
 #define SYS_MNT_INTERVAL     60
 
 /// MS to Time Units
-#define SYS_MS_TO_TU(x)      (x * 1000) >> 10;
+#define SYS_MS_TO_TU(x)      ((x * 1000) >> 10)
 
 /// TU to MS
 #define SYS_TU_TO_MS(x)      ((x << 10) / 1000)
diff --git a/CORE/WDA/inc/wlan_qct_wda.h b/CORE/WDA/inc/wlan_qct_wda.h
index 811eb35..f758740 100644
--- a/CORE/WDA/inc/wlan_qct_wda.h
+++ b/CORE/WDA/inc/wlan_qct_wda.h
@@ -987,7 +987,7 @@
 #define WDA_RADIO_ON_OFF_IND SIR_HAL_RADIO_ON_OFF_IND
 #define WDA_RESET_CNF SIR_HAL_RESET_CNF
 #define WDA_SetRegDomain \
-        eHalStatus halPhySetRegDomain(tHalHandle hHal, eRegDomainId regDomain);
+    (eHalStatus halPhySetRegDomain(tHalHandle hHal, eRegDomainId regDomain))
 #endif
 
 #define WDA_APP_SETUP_NTF  SIR_HAL_APP_SETUP_NTF 
diff --git a/CORE/WDI/CP/inc/wlan_qct_wdi_dp.h b/CORE/WDI/CP/inc/wlan_qct_wdi_dp.h
index a19fe6e..278f510 100644
--- a/CORE/WDI/CP/inc/wlan_qct_wdi_dp.h
+++ b/CORE/WDI/CP/inc/wlan_qct_wdi_dp.h
@@ -232,7 +232,7 @@
 
 #define WDI_RX_BD_GET_SUBTYPE( _pvBDHeader )        ((((WDI_RxBdType*)_pvBDHeader)->frameTypeSubtype) & WDI_FRAME_SUBTYPE_MASK)
 
-#define WDI_RX_BD_GET_TYPE( _pvBDHeader )      ((((WDI_RxBdType*)_pvBDHeader)->frameTypeSubtype) & WDI_FRAME_TYPE_MASK) >> WDI_FRAME_TYPE_OFFSET;
+#define WDI_RX_BD_GET_TYPE( _pvBDHeader )     (((((WDI_RxBdType*)_pvBDHeader)->frameTypeSubtype) & WDI_FRAME_TYPE_MASK) >> WDI_FRAME_TYPE_OFFSET)
 
 #define WDI_RX_BD_GET_RTSF( _pvBDHeader )         (((WDI_RxBdType*)_pvBDHeader)->rtsf)
 
