diff --git a/CORE/MAC/src/include/sirWrapper.h b/CORE/MAC/src/include/sirWrapper.h
index 7dd8bf0..7588f47 100644
--- a/CORE/MAC/src/include/sirWrapper.h
+++ b/CORE/MAC/src/include/sirWrapper.h
@@ -1,42 +1,7 @@
 /*
- * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
- *
- * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
- *
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-/*
- * Copyright (c) 2012, The Linux Foundation. All rights reserved.
- *
- * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
- *
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
+ * Copyright (c) 2013 Qualcomm Atheros, Inc.
+ * All Rights Reserved.
+ * Qualcomm Atheros Confidential and Proprietary.
  */
 
 /*
@@ -54,16 +19,7 @@
 #ifndef __SIR_WRAPPER_H_
 #define __SIR_WRAPPER_H_
 
-#if defined VOSS_ENABLED
 #include "VossWrapper.h"
-#elif defined ANI_OS_TYPE_OSX
-#include "OSXWrapper.h"
-#else   // ANI_OS_TYPE undefined
-#error Unknown or missing ANI_OS_TYPE macro
-#endif  // ANI_OS_TYPE
-
-
-
 
 #endif //__SIR_WRAPPER_H_
 
diff --git a/CORE/MAC/src/include/utilsApi.h b/CORE/MAC/src/include/utilsApi.h
index 08bb89a..eff0af4 100644
--- a/CORE/MAC/src/include/utilsApi.h
+++ b/CORE/MAC/src/include/utilsApi.h
@@ -41,7 +41,6 @@
 
 /*
  *
- *
  * Airgo Networks, Inc proprietary. All rights reserved.
  * Author:              Kevin Nguyen
  * Date:                02/27/02
@@ -58,13 +57,7 @@
 #include <sirCommon.h>
 #include "aniGlobal.h"
 #include "utilsGlobal.h"
-#if defined VOSS_ENABLED
 #include "VossWrapper.h"
-#elif defined ANI_OS_TYPE_LINUX
-#include "rtaiWrapper.h"
-#elif defined ANI_OS_TYPE_OSX
-#include "palApiPci.h"
-#endif
 
 
 #if defined ANI_OS_TYPE_LINUX
@@ -728,28 +721,10 @@
 #define WLAN_UP_TO_AC_MAP            0x33220110
 #define upToAc(up)                ((WLAN_UP_TO_AC_MAP >> ((up) << 2)) & 0x03)
 
-#if defined VOSS_ENABLED
 
 #define sirBusyWait(microsecond)   vos_busy_wait(microsecond / 1000)
 #define sirSleepWait(duration)  vos_sleep_us(duration)
 
-#elif defined ANI_OS_TYPE_LINUX
-    //rt_busy_sleep(duration)
-
-#define sirBusyWait(duration)   tx_busy_wait(duration)
-
-#define sirSleepWait(duration)  sirSleepWaitIntern(duration)
-
-#elif defined ANI_OS_TYPE_WINDOWS
-
-#define sirBusyWait(duration)   sirBusyWaitIntern(pMac, duration)
-
-#define sirSleepWait(duration)  sirSleepWaitIntern(pMac, duration)
-
-#elif defined ANI_OS_TYPE_OSX
-#define sirBusyWait(duration) palBusyWait(duration)
-#define sirSleepWait(duration) palSleepWait(duration)
-#endif
 
 
 
@@ -868,7 +843,7 @@
 void ConverttoBigEndian(void *ptr, tANI_U16 size);
 void CreateScanCtsFrame(tpAniSirGlobal pMac, tSirMacMgmtHdr *macMgmtHdr, tSirMacAddr selfMac);
 void CreateScanDataNullFrame(tpAniSirGlobal pMac, tSirMacMgmtHdr *macMgmtHdr,
-                             tANI_U8 pwrMgmt, tSirMacAddr bssid, 
+                             tANI_U8 pwrMgmt, tSirMacAddr bssid,
                              tSirMacAddr selfMacAddr);
 void CreateInitScanRawFrame(tpAniSirGlobal pMac, tSirMacMgmtHdr *macMgmtHdr, tBssSystemRole role);
 void CreateFinishScanRawFrame(tpAniSirGlobal pMac, tSirMacMgmtHdr *macMgmtHdr, tBssSystemRole role);
diff --git a/CORE/MAC/src/pe/lim/limApi.c b/CORE/MAC/src/pe/lim/limApi.c
index cc9bf9b..490a5e4 100644
--- a/CORE/MAC/src/pe/lim/limApi.c
+++ b/CORE/MAC/src/pe/lim/limApi.c
@@ -82,13 +82,10 @@
 #endif
 
 #include <limFT.h>
-
-#ifdef VOSS_ENABLED
 #include "vos_types.h"
 #include "vos_packet.h"
 #include "wlan_qct_tl.h"
 #include "sysStartup.h"
-#endif
 
 
 static void __limInitScanVars(tpAniSirGlobal pMac)
@@ -110,7 +107,7 @@
     pMac->lim.gLimBackgroundScanDisable = false;      //based on BG timer
     pMac->lim.gLimForceBackgroundScanDisable = false; //debug control flag
     pMac->lim.gLimBackgroundScanTerminate = TRUE;    //controlled by SME
-    pMac->lim.gLimReportBackgroundScanResults = FALSE;    //controlled by SME    
+    pMac->lim.gLimReportBackgroundScanResults = FALSE;    //controlled by SME
 
     pMac->lim.gLimCurrentScanChannelId = 0;
     pMac->lim.gpLimMlmScanReq = NULL;
@@ -793,10 +790,8 @@
 void
 limCleanup(tpAniSirGlobal pMac)
 {
-#ifdef VOSS_ENABLED
     v_PVOID_t pvosGCTx;
     VOS_STATUS retStatus;
-#endif
 
 //Before destroying the list making sure all the nodes have been deleted.
 //Which should be the normal case, but a memory leak has been reported.
@@ -923,14 +918,12 @@
     // Now, finally reset the deferred message queue pointers
     limResetDeferredMsgQ(pMac);
 
-#ifdef VOSS_ENABLED
 
     pvosGCTx = vos_get_global_context(VOS_MODULE_ID_PE, (v_VOID_t *) pMac);
     retStatus = WLANTL_DeRegisterMgmtFrmClient(pvosGCTx);
 
     if ( retStatus != VOS_STATUS_SUCCESS )
         PELOGE(limLog(pMac, LOGE, FL("DeRegistering the PE Handle with TL has failed bailing out...\n"));)
-#endif
 
 #if defined WLAN_FEATURE_VOWIFI
     rrmCleanup(pMac);
@@ -1231,33 +1224,9 @@
 tANI_U32
 limPostMsgApi(tpAniSirGlobal pMac, tSirMsgQ *pMsg)
 {
-#ifdef VOSS_ENABLED
     return  vos_mq_post_message(VOS_MQ_ID_PE, (vos_msg_t *) pMsg);
 
 
-#elif defined(ANI_OS_TYPE_LINUX) || defined(ANI_OS_TYPE_OSX)
-    return tx_queue_send(&pMac->sys.gSirLimMsgQ, pMsg, TX_WAIT_FOREVER);
-
-#else
-    /* Check if this is a timeout message from a timer
-     * and if the timeout message is allowed if the device is in power-save state
-     */
-    if(!limIsTimerAllowedInPowerSaveState(pMac, pMsg))
-    {
-        limLog(pMac, LOGW,
-                FL("Timeout message %d is not allowed while device is in Power-Save mode\n"),
-                pMsg->type);
-
-        return TX_SUCCESS;
-    }
-    if(pMac->gDriverType != eDRIVER_TYPE_MFG)
-    {
-        limMessageProcessor(pMac, pMsg);
-    }
-
-    return TX_SUCCESS;
-
-#endif
 } /*** end limPostMsgApi() ***/
 
 
@@ -1312,7 +1281,6 @@
 }
 
 
-#ifdef VOSS_ENABLED
 
 // ---------------------------------------------------------------------------
 /**
@@ -1429,7 +1397,6 @@
         limLog( pMac, LOGP, FL("Registering the PE Handle with TL has failed bailing out...\n"));
 
 }
-#endif
 
 
 /**
diff --git a/CORE/MAC/src/pe/lim/limProcessMessageQueue.c b/CORE/MAC/src/pe/lim/limProcessMessageQueue.c
index b167a69..287a468 100644
--- a/CORE/MAC/src/pe/lim/limProcessMessageQueue.c
+++ b/CORE/MAC/src/pe/lim/limProcessMessageQueue.c
@@ -86,11 +86,9 @@
 #include "wmmApsd.h"
 #endif
 
-#ifdef VOSS_ENABLED
 #include "vos_types.h"
 #include "vos_packet.h"
 #include "vos_memory.h"
-#endif
 
 /* In P2P GO case, we want to call scan on NOA start indication from limProcessMessages */
 extern void __limProcessSmeScanReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf);
@@ -1218,7 +1216,6 @@
             pMac->lim.numBbt++;
 #endif
 
-#ifdef VOSS_ENABLED
             {
                 v_U16_t     pktLen = 0;
                 vos_pkt_t  *pVosPkt;
@@ -1288,9 +1285,6 @@
                     vos_pkt_return_packet(pVosPkt);
                 }
             }
-#else
-            limHandle80211Frames(pMac, limMsg);
-#endif
             break;
 
         case eWNI_SME_SCAN_REQ:
diff --git a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
index 3e0752c..379cd82 100644
--- a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
+++ b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
@@ -116,9 +116,7 @@
 
 void __limProcessSmeAssocCnfNew(tpAniSirGlobal, tANI_U32, tANI_U32 *);
 
-#ifdef VOSS_ENABLED
 extern void peRegisterTLHandle(tpAniSirGlobal pMac);
-#endif
 
 extern int limProcessRemainOnChnlReq(tpAniSirGlobal pMac, tANI_U32 *pMsg);
 
@@ -431,16 +429,14 @@
     msg.bodyptr =  pMsgBuf;
     msg.bodyval = 0;
 
-#ifdef VOSS_ENABLED
-    if(pMac->gDriverType != eDRIVER_TYPE_MFG)
+    if (pMac->gDriverType != eDRIVER_TYPE_MFG)
     {
-    peRegisterTLHandle(pMac);
+        peRegisterTLHandle(pMac);
     }
-#endif
     PELOGW(limLog(pMac, LOGW, FL("sending WDA_SYS_READY_IND msg to HAL\n"));)
     MTRACE(macTraceMsgTx(pMac, NO_SESSION, msg.type));
 
-    if(eSIR_SUCCESS != wdaPostCtrlMsg(pMac, &msg))
+    if (eSIR_SUCCESS != wdaPostCtrlMsg(pMac, &msg))
     {
         limLog(pMac, LOGP, FL("wdaPostCtrlMsg failed\n"));
         return eANI_BOOLEAN_TRUE;
diff --git a/CORE/MAC/src/pe/pmm/pmmApi.c b/CORE/MAC/src/pe/pmm/pmmApi.c
index 8b2ae31..a65ebf4 100644
--- a/CORE/MAC/src/pe/pmm/pmmApi.c
+++ b/CORE/MAC/src/pe/pmm/pmmApi.c
@@ -1390,7 +1390,6 @@
 tSirRetStatus
 pmmPostMessage(tpAniSirGlobal pMac, tpSirMsgQ pMsg)
 {
-#if defined(VOSS_ENABLED)
     VOS_STATUS vosStatus;
     vosStatus = vos_mq_post_message(VOS_MQ_ID_PE, (vos_msg_t *) pMsg);
     if(!VOS_IS_STATUS_SUCCESS(vosStatus))
@@ -1398,13 +1397,6 @@
         pmmLog(pMac, LOGP, FL("vos_mq_post_message failed with status code %d\n"), vosStatus);
         return eSIR_FAILURE;
     }
-#elif defined(ANI_OS_TYPE_WINDOWS)
-    pmmProcessMessage(pMac, pMsg);
-#else
-    if (tx_queue_send(&pMac->sys.gSirPmmMsgQ, pMsg, TX_NO_WAIT) != TX_SUCCESS)
-        return eSIR_FAILURE;
-
-#endif // VOSS_ENABLED
 
     return eSIR_SUCCESS;
 }
