diff --git a/CORE/MAC/inc/aniGlobal.h b/CORE/MAC/inc/aniGlobal.h
index 99f8be0..fceffcd 100644
--- a/CORE/MAC/inc/aniGlobal.h
+++ b/CORE/MAC/inc/aniGlobal.h
@@ -989,9 +989,6 @@
     tAniSirSch   sch;
     tAniSirSys   sys;
     tAniSirUtils utils;
-
-
-    tAniSirTxWrapper txWrapper;
     // PAL/HDD handle
     tHddHandle hHdd;
 
diff --git a/CORE/MAC/inc/logDump.h b/CORE/MAC/inc/logDump.h
index f2bb0a2..20eb03c 100644
--- a/CORE/MAC/inc/logDump.h
+++ b/CORE/MAC/inc/logDump.h
@@ -18,31 +18,11 @@
  * 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) 2007 QUALCOMM Incorporated.
+Copyright (c) 2007 Qualcomm Technologies, Inc.
 All Rights Reserved.
-Qualcomm Confidential and Proprietary
+Qualcomm Technologies Confidential and Proprietary
 
 logDump.h
 
@@ -82,24 +62,21 @@
 int log_sprintf(tpAniSirGlobal pMac, char *pBuf, char *fmt, ... );
 
 char *
-dump_thread_info( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3, tANI_U32 arg4, char *p);
-
-char *
 dump_log_level_set( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3, tANI_U32 arg4, char *p);
 
 char *
-dump_cfg_set( tpAniSirGlobal pMac, tANI_U32 arg1, 
+dump_cfg_set( tpAniSirGlobal pMac, tANI_U32 arg1,
               tANI_U32 arg2, tANI_U32 arg3, tANI_U32 arg4, char *p);
 
 char *
-dump_cfg_get( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, 
+dump_cfg_get( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2,
               tANI_U32 arg3, tANI_U32 arg4, char *p);
 
 char *
 dump_cfg_group_get( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2,
                     tANI_U32 arg3, tANI_U32 arg4, char *p);
 
-void logDumpRegisterTable( tpAniSirGlobal pMac, tDumpFuncEntry *pEntry, 
+void logDumpRegisterTable( tpAniSirGlobal pMac, tDumpFuncEntry *pEntry,
                            tANI_U32   nItems );
 
 
diff --git a/CORE/MAC/src/include/sirCommon.h b/CORE/MAC/src/include/sirCommon.h
index e5642fa..ddbda7a 100644
--- a/CORE/MAC/src/include/sirCommon.h
+++ b/CORE/MAC/src/include/sirCommon.h
@@ -18,29 +18,8 @@
  * 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.
- */
 
 /*
- *
  * Airgo Networks, Inc proprietary. All rights reserved.
  * This file sirCommon.h contains the common definitions used by all
  * Firmware modules.
@@ -57,11 +36,7 @@
 
 #include "sirApi.h"
 #include "sirParams.h"
-#include "sirWrapper.h"
-
-#ifndef NULL
-#define NULL TX_NULL
-#endif
+#include "VossWrapper.h"
 
 /* ********************************************* *
  *                                               *
diff --git a/CORE/MAC/src/include/sirWrapper.h b/CORE/MAC/src/include/sirWrapper.h
deleted file mode 100644
index 7588f47..0000000
--- a/CORE/MAC/src/include/sirWrapper.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (c) 2013 Qualcomm Atheros, Inc.
- * All Rights Reserved.
- * Qualcomm Atheros Confidential and Proprietary.
- */
-
-/*
- * Airgo Networks, Inc proprietary. All rights reserved.
- * This file sirWrapper.h contains the common definitions used by all
- * Firmware modules.
- *
- * Author:      Susan Tsao
- * Date:        09/24/2007
- * History:-
- * Date         Modified by    Modification Information
- * --------------------------------------------------------------------
- */
-
-#ifndef __SIR_WRAPPER_H_
-#define __SIR_WRAPPER_H_
-
-#include "VossWrapper.h"
-
-#endif //__SIR_WRAPPER_H_
-
diff --git a/CORE/MAC/src/include/sysGlobal.h b/CORE/MAC/src/include/sysGlobal.h
index 3a1584b..bd881e8 100644
--- a/CORE/MAC/src/include/sysGlobal.h
+++ b/CORE/MAC/src/include/sysGlobal.h
@@ -18,26 +18,6 @@
  * 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.
- */
 
 #ifndef __SYS_GLOBAL_H__
 #define __SYS_GLOBAL_H__
@@ -46,9 +26,6 @@
 {
     tANI_U32 abort; /* system is aborting and will be unloaded, only MMH thread is running */
 
-    // Radio ID
-    tANI_U32 gSirRadioId;
-
     tANI_U32 gSysFrameCount[4][16];
     tANI_U32 gSysBbtReceived;
     tANI_U32 gSysBbtPostedToLim;
@@ -63,46 +40,9 @@
     tANI_U32 gSysReleaseCount;
     tANI_U32 probeError, probeBadSsid, probeIgnore, probeRespond;
 
-    tANI_U32 gSysFramesSent[4][16];
-
     tANI_U32 gSysEnableLearnMode;
     tANI_U32 gSysEnableScanMode;
     tANI_U32 gSysEnableLinkMonitorMode;
-
-    tANI_U32 gSysResetCounts;
-
-    TX_THREAD gSirSchThread;
-    TX_THREAD gSirPmmThread;
-    TX_THREAD gSirLimThread;
-    TX_THREAD gSirHalThread;
-    TX_THREAD gSirMntThread;
-    TX_THREAD gSirMmhThread;
-
-    TX_QUEUE gSirHalMsgQ;            // Message Queue variables
-    TX_QUEUE gSirMntMsgQ;
-    TX_QUEUE gSirLimMsgQ;
-    TX_QUEUE gSirLimDeferredMsgQ;
-    TX_QUEUE gSirSchMsgQ;
-    TX_QUEUE gSirPmmMsgQ;
-
-    TX_THREAD gSirNimPttThread;
-    TX_QUEUE gSirNimRDMsgQ;
-
-    TX_QUEUE gSirHalEvtQ;
-    TX_QUEUE gSirTxMsgQ;
-    TX_QUEUE gSirRxMsgQ;
-
-    // The system is based on the HAL states. The following static definition
-    // of the HAL state.
-    tANI_U16 gSirThreadCount;
-
-    tANI_U8 debugOnReset;
-
-    tANI_BOOLEAN fTestRadar;
-    tANI_U8   detRadarChIds[20];
-    tANI_U32  radarDetectCount;
-    tANI_U8   radarDetected;
-    tANI_U8   gSysdropLimPkts;
 } tAniSirSys, *tpAniSirSys;
 
 #endif
diff --git a/CORE/MAC/src/include/utilsApi.h b/CORE/MAC/src/include/utilsApi.h
index afe6008..8dbc124 100644
--- a/CORE/MAC/src/include/utilsApi.h
+++ b/CORE/MAC/src/include/utilsApi.h
@@ -59,13 +59,6 @@
 #include "utilsGlobal.h"
 #include "VossWrapper.h"
 
-
-
-#define SIR_DECLARE_FLAGS
-#define SIR_SCHED_LOCK()    TX_DISABLE_INTR;
-#define SIR_SCHED_UNLOCK()  TX_ENABLE_INTR;
-
-
 #define LOG_INDEX_FOR_MODULE( modId ) ( ( modId ) - LOG_FIRST_MODULE_ID )
 #define GET_MIN_VALUE(__val1, __val2) ((__val1 < __val2) ? __val1 : __val2)
 
diff --git a/CORE/MAC/src/pe/include/limApi.h b/CORE/MAC/src/pe/include/limApi.h
index b3c7ab4..981a163 100644
--- a/CORE/MAC/src/pe/include/limApi.h
+++ b/CORE/MAC/src/pe/include/limApi.h
@@ -139,10 +139,6 @@
 /// Function to post messages to LIM thread
 extern tANI_U32  limPostMsgApi(tpAniSirGlobal, tSirMsgQ *);
 /**
- * Function to fetch messages posted LIM thread
- */
-extern void limProcessMessageQueue(tpAniSirGlobal);
-/**
  * Function to process messages posted to LIM thread
  * and dispatch to various sub modules within LIM module.
  */
diff --git a/CORE/MAC/src/pe/include/pmmApi.h b/CORE/MAC/src/pe/include/pmmApi.h
index c1d678d..d01c5be 100644
--- a/CORE/MAC/src/pe/include/pmmApi.h
+++ b/CORE/MAC/src/pe/include/pmmApi.h
@@ -70,9 +70,6 @@
 /// Process the next PM message
 extern void pmmProcessMessage(tpAniSirGlobal, tpSirMsgQ);
 
-/// Process the PM message queue
-extern void pmmProcessMessageQueue(tpAniSirGlobal pMac);
-
 extern void pmmProcessPSPoll(tpAniSirGlobal, tANI_U8 *);
 extern void pmmUpdatePSPollState(tpAniSirGlobal);
 extern void pmmProcessRxActivity(tpAniSirGlobal, tANI_U16, tANI_U8);
diff --git a/CORE/MAC/src/pe/include/schApi.h b/CORE/MAC/src/pe/include/schApi.h
index 77cb265..2e2a684 100644
--- a/CORE/MAC/src/pe/include/schApi.h
+++ b/CORE/MAC/src/pe/include/schApi.h
@@ -61,9 +61,6 @@
 /// Send start scan response message
 extern void schSendStartScanRsp(tpAniSirGlobal pMac);
 
-/// Set init time params
-extern void schSetInitParams(tpAniSirGlobal pMac);
-
 // update only the broadcast qos params
 extern void schQosUpdateBroadcast(tpAniSirGlobal pMac, tpPESession psessionEntry);
 
@@ -76,9 +73,6 @@
 // update the edca profile parameters
 extern void schEdcaProfileUpdate(tpAniSirGlobal pMac, tpPESession psessionEntry);
 
-/// Check for RR timer expiry
-extern void schCheckRRTimerExpiry(tpAniSirGlobal pMac);
-
 /// Set the fixed fields in a beacon frame
 extern tSirRetStatus schSetFixedBeaconFields(tpAniSirGlobal pMac,tpPESession psessionEntry);
 
@@ -94,24 +88,9 @@
 /// Initialize CF End template
 extern void schInitializeCfEndTemplate(tpAniSirGlobal pMac);
 
-/// Process the transmit activity queue
-extern void schProcessTxActivityQueue(tpAniSirGlobal pMac);
-
-/// Add to the DPH activity queue
-extern void schAddDphActivityQueue(tpAniSirGlobal pMac, tANI_U16, tANI_U8);
-
-/// Add to the TX IN (DPH) activity queue
-extern void schAddTxInActivityQueue(tpAniSirGlobal pMac, void *ptr);
-
-/// Process the scheduler message queue
-extern void schProcessMessageQueue(tpAniSirGlobal pMac);
-
 /// Process the scheduler messages
 extern void schProcessMessage(tpAniSirGlobal pMac,tpSirMsgQ pSchMsg);
 
-/// Process the DPH activity queue
-extern void schProcessDphActivityQueue(tpAniSirGlobal pMac);
-
 /// The beacon Indication handler function
 extern void schProcessPreBeaconInd(tpAniSirGlobal pMac, tpSirMsgQ limMsg);
 
diff --git a/CORE/MAC/src/pe/lim/limLogDump.c b/CORE/MAC/src/pe/lim/limLogDump.c
index b38234d..4a59ccb 100644
--- a/CORE/MAC/src/pe/lim/limLogDump.c
+++ b/CORE/MAC/src/pe/lim/limLogDump.c
@@ -1643,45 +1643,6 @@
 static char *
 dump_lim_dot11h_stats( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3, tANI_U32 arg4, char *p)
 {
-#if 0
-    unsigned int i;
-    (void) arg1; (void) arg2; (void) arg3; (void) arg4;
-
-    p += log_sprintf(pMac, p, "11h Enabled = %s\n", pMac->lim.gLim11hEnable? "TRUE": "FALSE");
-
-    p += log_sprintf(pMac, p, "Is system in learn mode = %s\n",
-                              pMac->lim.gLimSystemInScanLearnMode?"YES": "NO");
-    
-    p += log_sprintf(pMac, p, "Quiet Enabled = %s\n", (pMac->lim.gLimSpecMgmt.fQuietEnabled)?"YES": "NO");
-    p += log_sprintf(pMac, p, "Quiet state = %d\n", pMac->lim.gLimSpecMgmt.quietState);
-    p += log_sprintf(pMac, p, "Quiet Count = %d\n", pMac->lim.gLimSpecMgmt.quietCount);
-    p += log_sprintf(pMac, p, "Quiet Duration in ticks = %d\n", pMac->lim.gLimSpecMgmt.quietDuration);
-    p += log_sprintf(pMac, p, "Quiet Duration in TU = %d\n", pMac->lim.gLimSpecMgmt.quietDuration_TU);
-    
-    p += log_sprintf(pMac, p, "Channel switch state = %d\n", pMac->lim.gLimSpecMgmt.dot11hChanSwState);
-    p += log_sprintf(pMac, p, "Channel switch mode = %s\n",
-            (pMac->lim.gLimChannelSwitch.switchMode == eSIR_CHANSW_MODE_SILENT)?"SILENT": "NORMAL");
-    p += log_sprintf(pMac, p, "Channel switch primary channel = %d\n",
-                              pMac->lim.gLimChannelSwitch.primaryChannel);
-    p += log_sprintf(pMac, p, "Channel switch secondary sub band = %d\n",
-                              pMac->lim.gLimChannelSwitch.secondarySubBand);
-    p += log_sprintf(pMac, p, "Channel switch switch count = %d\n",
-                              pMac->lim.gLimChannelSwitch.switchCount);
-    p += log_sprintf(pMac, p, "Channel switch switch timeout value = %d\n",
-                              pMac->lim.gLimChannelSwitch.switchTimeoutValue);
-
-    p += log_sprintf(pMac, p, "Radar interrupt configured = %s\n",
-                              pMac->lim.gLimSpecMgmt.fRadarIntrConfigured?"YES": "NO");
-    p += log_sprintf(pMac, p, "Radar detected in current operating channel = %s\n",
-                              pMac->lim.gLimSpecMgmt.fRadarDetCurOperChan?"YES": "NO");
-    p += log_sprintf(pMac, p, "Radar detected channels...\n");
-    for (i = 0; i < pMac->sys.radarDetectCount; i++)
-    {
-        p += log_sprintf(pMac, p, "%d ", pMac->sys.detRadarChIds[i]);
-    }
-    p += log_sprintf(pMac, p, "\n");
-    
-#endif
     return p;
 }
 
diff --git a/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c b/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c
index c8fcf31..ba3b7d5 100644
--- a/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c
+++ b/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c
@@ -214,8 +214,8 @@
 
    if (psessionEntry->limSystemRole == eLIM_STA_ROLE || psessionEntry->limSystemRole == eLIM_BT_AMP_STA_ROLE )
    {
-        limLog(pMac, LOGE, FL("received unexpected ASSOC REQ subType=%d for role=%d, radioId=%d from \n"),
-                                            subType, psessionEntry->limSystemRole, pMac->sys.gSirRadioId);
+        limLog(pMac, LOGE, FL("received unexpected ASSOC REQ subType=%d for role=%d"),
+               subType, psessionEntry->limSystemRole);
         limPrintMacAddr(pMac, pHdr->sa, LOGE);
         sirDumpBuf(pMac, SIR_LIM_MODULE_ID, LOG3,
         WDA_GET_RX_MPDU_DATA(pRxPacketInfo), framelen);
diff --git a/CORE/MAC/src/pe/lim/limProcessMessageQueue.c b/CORE/MAC/src/pe/lim/limProcessMessageQueue.c
index edc9ae1..0a4ab68 100644
--- a/CORE/MAC/src/pe/lim/limProcessMessageQueue.c
+++ b/CORE/MAC/src/pe/lim/limProcessMessageQueue.c
@@ -219,48 +219,6 @@
 void limProcessNormalHddMsg(tpAniSirGlobal pMac, tSirMsgQ *pLimMsg, tANI_U8 fRspReqd);
 
 /**
- * limProcessMessageQueue
- *
- *FUNCTION:
- * This function is called by LIM thread entry function. This
- * function fetches messages posted to the message queue
- * limMsgQ.
- *
- *LOGIC:
- *
- *ASSUMPTIONS:
- * NA
- *
- *NOTE:
- * NA
- *
- * @param  pMac - Pointer to Global MAC structure
- * @return None
- */
-
-void
-limProcessMessageQueue(tpAniSirGlobal pMac)
-{
-    tSirMsgQ  limMsg = { 0, 0, 0 };
-
-    if(pMac->gDriverType == eDRIVER_TYPE_MFG)
-    {
-        return;
-    }
-
-    if (tx_queue_receive( &pMac->sys.gSirLimMsgQ, (void *) &limMsg, TX_WAIT_FOREVER)
-            == TX_SUCCESS)
-    {
-        PELOG3(limLog(pMac, LOG3, FL("LIM Received message %s\n"), limMsgStr(limMsg.type));)
-        limPrintMsgInfo(pMac, LOG3, &limMsg);
-        limMessageProcessor(pMac, &limMsg);
-    } // if (tx_queue_receive)
-    
-} /*** end limProcessMessageQueue() ***/
-
-
-
-/**
  * limDeferMsg()
  *
  *FUNCTION:
diff --git a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
index 379cd82..4500821 100644
--- a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
+++ b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
@@ -3178,7 +3178,6 @@
          
         limSendDisassocMgmtFrame(pMac, eSIR_MAC_MIC_FAILURE_REASON, mac, psessionEntry, FALSE);
 
-    tx_thread_sleep(10);
 };
 
 
diff --git a/CORE/MAC/src/pe/lim/limTimerUtils.c b/CORE/MAC/src/pe/lim/limTimerUtils.c
index ef67aa6..56a34b7 100644
--- a/CORE/MAC/src/pe/lim/limTimerUtils.c
+++ b/CORE/MAC/src/pe/lim/limTimerUtils.c
@@ -1830,92 +1830,6 @@
 
 } /****** end limReactivateHeartBeatTimer() ******/
 
-#if 0
-/******
- * Note: Use this code once you have converted all
- * limReactivateHeartBeatTimer() calls to
- * limReactivateTimer() calls.
- *
- ******/
-
-Now, in dev/btamp2,
-here are all the references to limReactivateHeartBeatTimer().
-
-C symbol: limReactivateHeartBeatTimer
-
-  File                      Function                  Line
-0 limTimerUtils.h           <global>                    55 void limReactivateHeartBeatTimer(tpAniSirGlobal , tpPESession);
-1 limIbssPeerMgmt.c         limIbssHeartBeatHandle    1282 limReactivateHeartBeatTimer(pMac, psessionEntry);
-2 limLinkMonitoringAlgo.c   limHandleHeartBeatFailure  395 limReactivateHeartBeatTimer(pMac, psessionEntry);
-3 limLinkMonitoringAlgo.c   limHandleHeartBeatFailure  410 limReactivateHeartBeatTimer(pMac, psessionEntry);
-4 limProcessMlmRspMessages. limProcessStaMlmAddStaRsp 2111 limReactivateHeartBeatTimer(pMac, psessionEntry);
-5 limProcessMlmRspMessages_ limProcessStaMlmAddStaRsp 2350 limReactivateHeartBeatTimer(pMac, psessionEntry);
-6 limProcessMlmRspMessages_ limProcessStaMlmAddStaRsp 2111 limReactivateHeartBeatTimer(pMac, psessionEntry);
-7 limTimerUtils.c           limReactivateHeartBeatTim 1473 limReactivateHeartBeatTimer(tpAniSirGlobal pMac, tpPESession psessionEntry)
-8 limUtils.c                limHandleHeartBeatFailure 6743 limReactivateHeartBeatTimer(pMac, psessionEntry);
-9 limUtils.c                limHandleHeartBeatFailure 6751 limReactivateHeartBeatTimer(pMac, psessionEntry);
-
-Now, in main/latest, on the other hand,
-here are all the references to limReactivateTimer().
-
-C symbol: limReactivateTimer
-
-  File                      Function                  Line
-0 limTimerUtils.h           <global>                    54 void limReactivateTimer(tpAniSirGlobal, tANI_U32);
-1 limIbssPeerMgmt.c         limIbssHeartBeatHandle    1183 limReactivateTimer(pMac, eLIM_HEART_BEAT_TIMER);
-2 limIbssPeerMgmt.c         limIbssHeartBeatHandle    1246 limReactivateTimer(pMac, eLIM_HEART_BEAT_TIMER);
-3 limLinkMonitoringAlgo.c   limHandleHeartBeatFailure  283 limReactivateTimer(pMac, eLIM_HEART_BEAT_TIMER);
-4 limLinkMonitoringAlgo.c   limHandleHeartBeatFailure  320 limReactivateTimer(pMac, eLIM_HEART_BEAT_TIMER);
-5 limLinkMonitoringAlgo.c   limHandleHeartBeatFailure  335 limReactivateTimer(pMac, eLIM_HEART_BEAT_TIMER);
-6 limProcessMessageQueue.c  limProcessMessages        1210 limReactivateTimer(pMac, eLIM_HEART_BEAT_TIMER);
-7 limProcessMessageQueue.c  limProcessMessages        1218 limReactivateTimer(pMac, eLIM_HEART_BEAT_TIMER);
-8 limProcessMlmRspMessages. limProcessStaMlmAddStaRsp 1726 limReactivateTimer(pMac, eLIM_HEART_BEAT_TIMER);
-9 limTimerUtils.c           limReactivateTimer        1451 limReactivateTimer(tpAniSirGlobal pMac, tANI_U32 timerId)
-
-
-/**
- * limReactivateTimer()
- *
- *FUNCTION:
- * This function is called to deactivate, change and
- * activate a timer
- *
- *LOGIC:
- *
- *ASSUMPTIONS:
- * NA
- *
- *NOTE:
- * NA
- *
- * @param  pMac    - Pointer to Global MAC structure
- * @param  timerId - enum of timer to be deactivated and changed
- *                   This enum is defined in limUtils.h file
- *
- * @return None
- */
-
-void
-limReactivateTimer(tpAniSirGlobal pMac, tANI_U32 timerId)
-{
-    if (timerId == eLIM_HEART_BEAT_TIMER)
-    {
-       PELOG3(limLog(pMac, LOG3, FL("Rxed Heartbeat. Count=%d\n"),
-               pMac->lim.gLimRxedBeaconCntDuringHB);)
-        limDeactivateAndChangeTimer(pMac, eLIM_HEART_BEAT_TIMER);
-        MTRACE(macTrace(pMac, TRACE_CODE_TIMER_ACTIVATE, 0, eLIM_HEART_BEAT_TIMER));
-        if (limActivateHearBeatTimer(pMac) != TX_SUCCESS)
-        {
-            /// Could not activate Heartbeat timer.
-            // Log error
-            limLog(pMac, LOGP,
-                   FL("could not activate Heartbeat timer\n"));
-        }
-        limResetHBPktCount(pMac);
-    }
-} /****** end limReactivateTimer() ******/
-#endif
-
 
 /**
  * limActivateHearBeatTimer()
diff --git a/CORE/MAC/src/pe/pmm/pmmApi.c b/CORE/MAC/src/pe/pmm/pmmApi.c
index a65ebf4..0c646e1 100644
--- a/CORE/MAC/src/pe/pmm/pmmApi.c
+++ b/CORE/MAC/src/pe/pmm/pmmApi.c
@@ -1190,38 +1190,6 @@
 
 // --------------------------------------------------------------------
 /**
- * pmmProcessMessageQueue
- *
- * FUNCTION:
- *
- * LOGIC:
- *
- * ASSUMPTIONS:
- *
- * NOTE:
- *
- * @param None
- * @return None
- */
-
-void pmmProcessMessageQueue(tpAniSirGlobal pMac)
-{
-#if 0
-    tSirMsgQ msg;
-
-    while (1)
-    {
-        if (tx_queue_receive(&pMac->sys.gSirPmmMsgQ, (void *) &msg, TX_WAIT_FOREVER)
-            != TX_SUCCESS)
-            break;
-
-        pmmProcessMessage(pMac, &msg);
-    }
-#endif
-}
-
-// --------------------------------------------------------------------
-/**
  * pmmProcessMessage
  *
  * FUNCTION:  Processes the next received Power Management message
diff --git a/CORE/MAC/src/pe/sch/schApi.c b/CORE/MAC/src/pe/sch/schApi.c
index 0d17d01..94b8a71 100644
--- a/CORE/MAC/src/pe/sch/schApi.c
+++ b/CORE/MAC/src/pe/sch/schApi.c
@@ -53,7 +53,6 @@
  *
  */
 #include "palTypes.h"
-#include "sirWrapper.h"
 #include "aniGlobal.h"
 #include "wniCfgSta.h"
 
diff --git a/CORE/MAC/src/pe/sch/schMessage.c b/CORE/MAC/src/pe/sch/schMessage.c
index d87f377..7162768 100644
--- a/CORE/MAC/src/pe/sch/schMessage.c
+++ b/CORE/MAC/src/pe/sch/schMessage.c
@@ -111,36 +111,6 @@
 
 // --------------------------------------------------------------------
 /**
- * schSetInitParams
- *
- * FUNCTION:
- * Initialize parameters from CFG which do not depend on any other config
- *
- * LOGIC:
- *
- * ASSUMPTIONS:
- *
- * NOTE:
- *
- * @param None
- * @return None
- */
-
-#if 0 /* This function is not used anywhere */
-void
-schSetInitParams(tpAniSirGlobal pMac)
-{
-    pMac->sch.schObject.gSchDTIMCount = 0;
-    pMac->sch.schObject.gSchCFPCount = 0;
-
-    schQosUpdateLocal(pMac);
-
-    PELOG1(schLog(pMac, LOG1, FL("Finished init of SCH params\n"));)
-}
-#endif
-
-// --------------------------------------------------------------------
-/**
  * schProcessMessage
  *
  * FUNCTION:
@@ -197,7 +167,6 @@
             break;
 
         case SIR_SCH_START_SCAN_REQ:
-            SIR_SCHED_LOCK();
             pMac->sch.gSchScanReqRcvd = true;
             if (pMac->sch.gSchHcfEnabled)
             {
@@ -217,7 +186,6 @@
                 // In eDCF mode, send the response right away
                 schSendStartScanRsp(pMac);
             }
-            SIR_SCHED_UNLOCK();
             break;
 
         case SIR_SCH_END_SCAN_NTF:
@@ -293,38 +261,6 @@
 }
 
 
-// --------------------------------------------------------------------
-/**
- * schProcessMessageQueue
- *
- * FUNCTION:
- *
- * LOGIC:
- *
- * ASSUMPTIONS:
- *
- * NOTE:
- *
- * @param None
- * @return None
- */
-
-void schProcessMessageQueue(tpAniSirGlobal pMac)
-{
-    tSirMsgQ schMsg;
-
-    memset(&schMsg, 0, sizeof(tSirMsgQ));
-    while (1)
-    {
-        if (tx_queue_receive(&pMac->sys.gSirSchMsgQ, (void *) &schMsg, TX_WAIT_FOREVER)
-            != TX_SUCCESS)
-            break;
-
-        schProcessMessage(pMac, &schMsg);
-    }
-}
-
-
 // get the local or broadcast parameters based on the profile sepcified in the config
 // params are delivered in this order: BK, BE, VI, VO
 tSirRetStatus
diff --git a/CORE/SYS/legacy/src/platform/inc/VossWrapper.h b/CORE/SYS/legacy/src/platform/inc/VossWrapper.h
index 9e4b7ca..b2145ee 100644
--- a/CORE/SYS/legacy/src/platform/inc/VossWrapper.h
+++ b/CORE/SYS/legacy/src/platform/inc/VossWrapper.h
@@ -49,7 +49,7 @@
 /*===========================================================================
   @file VossWrapper.h
 
-  @brief This header file contains the various structure definitions and 
+  @brief This header file contains the various structure definitions and
   function prototypes for the RTOS abstraction layer, implemented for VOSS
 
   Copyright (c) 2008 QUALCOMM Incorporated.
@@ -57,30 +57,30 @@
   Qualcomm Confidential and Proprietary
 ===========================================================================*/
 
-/*=========================================================================== 
-    
-                       EDIT HISTORY FOR FILE 
-   
-   
-  This section contains comments describing changes made to the module. 
-  Notice that changes are listed in reverse chronological order. 
-   
-   
-  $Header:$ $DateTime: $ $Author: $ 
-   
-   
-  when        who    what, where, why 
+/*===========================================================================
+
+                       EDIT HISTORY FOR FILE
+
+
+  This section contains comments describing changes made to the module.
+  Notice that changes are listed in reverse chronological order.
+
+
+  $Header:$ $DateTime: $ $Author: $
+
+
+  when        who    what, where, why
   --------    ---    --------------------------------------------------------
   12/15/08    sho    Resolved warnings and errors from AMSS compiler when
                      this is ported to WM
   11/20/08    sho    Renamed this to VossWrapper.h; remove all dependencies
                      on WM platform and allow this to work on all VOSS enabled
                      platforms
-  06/24/08    tbh    Modified the file to remove the dependecy on HDD files as 
-                     part of Gen6 bring up process. 
-  10/29/02 Neelay Das Created file. 
-     
-===========================================================================*/ 
+  06/24/08    tbh    Modified the file to remove the dependecy on HDD files as
+                     part of Gen6 bring up process.
+  10/29/02 Neelay Das Created file.
+
+===========================================================================*/
 
 /*---------------------------------------------------------------------------
  * Include Files
@@ -137,67 +137,12 @@
 // Signature with which the TX_TIMER struct is initialized, when the timer is created
 #define TX_AIRGO_TMR_SIGNATURE   0xDEADBEEF
 
-
-/* Just #define out the thread and queue specific threadX calls, since the plan is to keep
-   the Windows port of the MAC non-threaded */
-
-#define  tx_thread_create(a, b, c, d, e, f, g, h, i)
-#define  tx_thread_delete(a)
-#define  tx_thread_resume(a)
-
-// Please note that for the Windows implementation for this routine the time is specified in terms of
-// microseconds and not timer ticks. Also, the DDK recommends that this routine should not be called with
-// sleep durations of more than 50 usecs.
-#define  tx_thread_sleep(uSecs)
-
-#define  tx_thread_suspend(a)
-#define  tx_thread_terminate(a)
-#define  tx_thread_identify() NULL
-
-#define  tx_queue_create(a, b, c, d, e) TX_SUCCESS
-#define  tx_queue_delete(a) TX_SUCCESS
-#define  tx_queue_get_ptr(a)    TX_SUCCESS
-#define  tx_queue_flush(a)  TX_SUCCESS
-#define  tx_queue_receive(a, b, c)  TX_SUCCESS
-#define  tx_queue_send(a, b, c) TX_SUCCESS
-
-#define  tx_disable_intr()
-#define  tx_enable_intr() 
-
-
-#define TX_DISABLE_INTR tx_disable_intr()
-#define TX_ENABLE_INTR  tx_enable_intr()
-
 #ifdef TIMER_MANAGER
 #define  tx_timer_create(a, b, c, d, e, f, g)   tx_timer_create_intern_debug((v_PVOID_t)pMac, a, b, c, d, e, f, g, __FILE__, __LINE__)
 #else
 #define  tx_timer_create(a, b, c, d, e, f, g)   tx_timer_create_intern((v_PVOID_t)pMac, a, b, c, d, e, f, g)
 #endif
 
-
-/*-------------------------------------------------------------------------*/
-/*  ThreadX structures are not mapped to Windows structures for the        */
-/*  following reasons:                                                     */
-/*      - Windows structures are written in C and they are not C++ aware.  */
-/*      - There should not be any dependency between MAC FW include tree   */
-/*        and Windows include tree.                                        */
-/*                                                                         */
-/*  Instead, ThreadX structures are defined here as void*.  This will be   */
-/*  used by the wrapper functions to save the pointer of the actual Windows*/
-/*  structure.  Windows structure is allocated in ?                        */
-/*-------------------------------------------------------------------------*/
-
-typedef v_PVOID_t TX_THREAD;
-typedef v_PVOID_t TX_QUEUE;
-typedef v_PVOID_t TX_MUTEX;
-
-/*--------------------------------------------------------------------*/
-/* Semaphore structure                                                */
-/* This structure is used to mimic the binary semaphore functionality */
-/* available on ThreadX.                                              */
-/*--------------------------------------------------------------------*/
-typedef v_SLONG_t TX_SEMAPHORE;
-
 /*--------------------------------------------------------------------*/
 /* Timer structure                                                    */
 /* This structure is used to implement ThreadX timer facility.  Just  */
@@ -226,21 +171,12 @@
 
 #define TX_TIMER_VALID(timer) (timer.pMac != 0)
 
-typedef struct sAniSirTxWrapper
-{
-    // Back pointer to the pAdapter structure, needed for some of the internal routines
-    v_PVOID_t  pAdapter;
-
-} tAniSirTxWrapper, *tpAniSirTxWrapper;
-
-
-
 extern v_ULONG_t tx_time_get(v_VOID_t);
 extern v_UINT_t  tx_timer_activate(TX_TIMER*);
 extern v_UINT_t  tx_timer_change(TX_TIMER*, v_ULONG_t, v_ULONG_t);
 extern v_UINT_t  tx_timer_change_context(TX_TIMER*, tANI_U32);
 #ifdef TIMER_MANAGER
-extern v_UINT_t  tx_timer_create_intern_debug(v_PVOID_t, TX_TIMER*, char *, v_VOID_t(*)(v_PVOID_t, tANI_U32), 
+extern v_UINT_t  tx_timer_create_intern_debug(v_PVOID_t, TX_TIMER*, char *, v_VOID_t(*)(v_PVOID_t, tANI_U32),
                tANI_U32, v_ULONG_t, v_ULONG_t, v_ULONG_t, char* fileName, v_U32_t lineNum );
 #else
 extern v_UINT_t  tx_timer_create_intern(v_PVOID_t, TX_TIMER*, char *, v_VOID_t(*)(v_PVOID_t, tANI_U32), tANI_U32, v_ULONG_t, v_ULONG_t, v_ULONG_t);
@@ -249,23 +185,6 @@
 extern v_UINT_t  tx_timer_delete(TX_TIMER*);
 extern v_BOOL_t  tx_timer_running(TX_TIMER*);
 
-
-
-// Routines needed to initialize and cleanup the Windows wrapper
-extern v_VOID_t tx_voss_wrapper_init(v_PVOID_t, v_PVOID_t);
-
-#define schAddDphActivityQueueWin( a, b, c )
-
-// Debug display related globals
-extern v_ULONG_t gDbgLevel;
-extern v_ULONG_t gDbgMask;
-extern int gHalBufCnt;
-
-/* forward declaration From HDDUtil.h used by some internal files */
-
-extern v_U64_t utilGetCurrentTime(void);
-
-
 #ifdef __cplusplus
 }
 #endif
diff --git a/CORE/SYS/legacy/src/platform/src/VossWrapper.c b/CORE/SYS/legacy/src/platform/src/VossWrapper.c
index 2c26094..e9c3f8f 100644
--- a/CORE/SYS/legacy/src/platform/src/VossWrapper.c
+++ b/CORE/SYS/legacy/src/platform/src/VossWrapper.c
@@ -92,44 +92,6 @@
 #define TIMER_NAME "N/A"
 #endif
 
-// Routine used to retrieve the Winwrapper context pointer from the pMac structure
-extern tpAniSirTxWrapper sysGetTxWrapperContext(v_PVOID_t pMac);
-
-
- 
- /**---------------------------------------------------------------------
- * tx_voss_wrapper_init() 
- *
- * FUNCTION:  Initialize the VOSS wrapper 
- *
- * LOGIC:
- *       - Just allocate the spinlock used for critical section implementation.
- *
- * ASSUMPTIONS:
- *        - None.
- *
- * NOTE:
- *
- * @param  None.
- *
- * @return None.
- *
- */
-v_VOID_t tx_voss_wrapper_init(v_PVOID_t pMacGlobal, v_PVOID_t pAdapter)
-{
-    tpAniSirTxWrapper pTxWrapper = sysGetTxWrapperContext(pMacGlobal);
-
-    // if already allocated, then don't allcoate again...
-    if ( !pTxWrapper->pAdapter )
-    {
-        // Store the pointer to the MAC globals structure, in the Tx wrapper context
-        pTxWrapper->pAdapter = pAdapter;
-
-    }
-}
-
-
-
 /**---------------------------------------------------------------------
  * tx_time_get() 
  *
diff --git a/CORE/SYS/legacy/src/system/src/macInitApi.c b/CORE/SYS/legacy/src/system/src/macInitApi.c
index ecf1d8b..efc327e 100644
--- a/CORE/SYS/legacy/src/system/src/macInitApi.c
+++ b/CORE/SYS/legacy/src/system/src/macInitApi.c
@@ -245,10 +245,6 @@
             return eSIR_FAILURE;
 
         sysInitGlobals(pMac);
-
-
-        //Need to do it here in case halOpen fails later on.
-        tx_voss_wrapper_init(pMac, hHdd);
     }
 
 
diff --git a/CORE/SYS/legacy/src/system/src/sysEntryFunc.c b/CORE/SYS/legacy/src/system/src/sysEntryFunc.c
index 435c70b..12fb855 100644
--- a/CORE/SYS/legacy/src/system/src/sysEntryFunc.c
+++ b/CORE/SYS/legacy/src/system/src/sysEntryFunc.c
@@ -97,20 +97,8 @@
 
     palZeroMemory(pMac->hHdd, (tANI_U8 *) &pMac->sys, sizeof(pMac->sys));
 
-#if defined(ANI_DEBUG)
-    //FIXME : right now we want the reset to happen even in diag debug build.
-    // later on we need to set this to true.
-    //pMac->sys.debugOnReset = true;
-    pMac->sys.debugOnReset = false;
-#else
-    pMac->sys.debugOnReset = false;
-#endif
-
     pMac->sys.gSysEnableScanMode        = 1;
     pMac->sys.gSysEnableLinkMonitorMode = 0;
-    pMac->sys.fTestRadar                = false;
-    pMac->sys.radarDetected             = false;
-    pMac->sys.gSysdropLimPkts           = false;
     schInitGlobals(pMac);
 
     return eSIR_SUCCESS;
diff --git a/CORE/SYS/legacy/src/utils/src/logApi.c b/CORE/SYS/legacy/src/utils/src/logApi.c
index 86e6d91..1965a97 100644
--- a/CORE/SYS/legacy/src/utils/src/logApi.c
+++ b/CORE/SYS/legacy/src/utils/src/logApi.c
@@ -50,7 +50,6 @@
  * --------------------------------------------------------------------
  *
  */
-#define WNI_PRINT_DEBUG
 
 #include <sirCommon.h>
 #include <sirDebug.h>
@@ -58,7 +57,6 @@
 #include <wlan_qct_wda.h>
 
 #include <stdarg.h>
-#include "sirWrapper.h"
 #include "utilsGlobal.h"
 #include "macInitApi.h"
 #include "palApi.h"
@@ -70,25 +68,6 @@
 #endif
 
 
-//This is not right here. Need to find a better place.
-//_vsnprintf is a function in Windows
-//Temporary workaround.
-#ifndef _vsnprintf
-#define _vsnprintf vsnprintf
-#endif
-
-#define dbgTraceInfo(_Mask, _InParams)                 \
-  {                                                      \
-    KdPrint (_InParams) ;                                 \
-  }
-
-#define utilLogLogDebugMessage(HddAdapter, _LogBuffer)   \
-  {                                                      \
-    VOS_TRACE(VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_INFO,   \
-              _LogBuffer);                               \
-  }
-
-
 // ---------------------------------------------------------------------
 /**
  * logInit()
@@ -233,17 +212,7 @@
     vosDebugLevel = getVosDebugLevel(debugLevel);
     vosModuleId = getVosModuleId(modId);
 
-#ifdef ANI_OS_TYPE_ANDROID
     vsnprintf(logBuffer, LOG_SIZE - 1, pStr, marker);
-#else
-
-#ifdef WINDOWS_DT
-    RtlStringCbVPrintfA( &logBuffer[ 0 ], LOG_SIZE - 1, pStr, marker );
-#else
-    _vsnprintf(logBuffer, LOG_SIZE - 1, (char *)pStr, marker);
-#endif
-
-#endif
     VOS_TRACE(vosModuleId, vosDebugLevel, "%s", logBuffer);
 
     // The caller must check loglevel
diff --git a/CORE/SYS/legacy/src/utils/src/logDump.c b/CORE/SYS/legacy/src/utils/src/logDump.c
index 818a245..d93d794 100644
--- a/CORE/SYS/legacy/src/utils/src/logDump.c
+++ b/CORE/SYS/legacy/src/utils/src/logDump.c
@@ -341,190 +341,6 @@
     return p;
 }
 
-#ifdef WLAN_DEBUG    
-static tLogdRegList dataType[] =
-{
-    {SIR_MAC_DATA_DATA, "DATA "},
-    {SIR_MAC_DATA_DATA_ACK, "D+A  "},
-    {SIR_MAC_DATA_DATA_POLL, "D+P  "},
-    {SIR_MAC_DATA_DATA_ACK_POLL, "D+A+P"},
-    {SIR_MAC_DATA_NULL, "NULL "},
-    {SIR_MAC_DATA_NULL_ACK, "ACK  "},
-    {SIR_MAC_DATA_NULL_POLL, "POLL "},
-    {SIR_MAC_DATA_NULL_ACK_POLL, "A+P  "},
-    {SIR_MAC_DATA_QOS_DATA, "QDATA"},
-    {SIR_MAC_DATA_QOS_DATA_ACK, "QD+A "},
-    {SIR_MAC_DATA_QOS_DATA_POLL, "QD+P "},
-    {SIR_MAC_DATA_QOS_DATA_ACK_POLL, "QD+AP"},
-    {SIR_MAC_DATA_QOS_NULL, "QNULL"},
-    {SIR_MAC_DATA_QOS_NULL_POLL, "QACK "},
-    {SIR_MAC_DATA_QOS_NULL_ACK_POLL, "Q+A+P"}
-};
-
-static tLogdRegList mgmtType[] = {
-    {SIR_MAC_MGMT_BEACON, "BEACON   "},
-    {SIR_MAC_MGMT_ASSOC_REQ, "ASSOCREQ "},
-    {SIR_MAC_MGMT_ASSOC_RSP, "ASSOCRSP "},
-    {SIR_MAC_MGMT_REASSOC_RSP, "REASSRSP "},
-    {SIR_MAC_MGMT_REASSOC_REQ, "REASSREQ "},
-    {SIR_MAC_MGMT_PROBE_REQ, "PROBEREQ "},
-    {SIR_MAC_MGMT_PROBE_RSP, "PROBERSP "},
-    {SIR_MAC_MGMT_AUTH, "AUTH     "},
-    {SIR_MAC_MGMT_DEAUTH, "DEAUTH   "},
-    {SIR_MAC_MGMT_DISASSOC, "DISASSOC "},
-    {SIR_MAC_MGMT_ACTION, "ACTION   "}
-};
-
-static tLogdRegList ctlType[] = {
-    {SIR_MAC_CTRL_RTS, "RTS(CTL) "},
-    {SIR_MAC_CTRL_CTS, "CTS(CTL) "},
-    {SIR_MAC_CTRL_ACK, "ACK(CTL) "},
-    {SIR_MAC_CTRL_PS_POLL, "PS-POLL  "},
-    {SIR_MAC_CTRL_BAR, "BAR      "},
-    {SIR_MAC_CTRL_BA,  "BA       "},
-    {SIR_MAC_CTRL_CF_END,"CF-END   "},
-    {SIR_MAC_CTRL_CF_END_ACK,"CFE+ACK  "}
-};
-
-static char * printMesgName(tpAniSirGlobal pMac, char *p, tANI_U32 type, tANI_U32 subType, tANI_U32 tcId)
-{
-    tLogdRegList *pEntry = NULL;
-    tANI_U32 nEntries, i;
-
-    switch (type)
-    {
-        case SIR_MAC_DATA_FRAME:
-            pEntry   = &dataType[0];
-            nEntries = sizeof(dataType)/sizeof(dataType[0]);
-            break;
-        case SIR_MAC_MGMT_FRAME:
-            pEntry   = &mgmtType[0];
-            nEntries = sizeof(mgmtType)/sizeof(mgmtType[0]);
-            break;
-        case SIR_MAC_CTRL_FRAME:
-            pEntry   = &ctlType[0];
-            nEntries = sizeof(ctlType)/sizeof(ctlType[0]);
-            break;
-        default:
-            p += log_sprintf( pMac, p, "RESERVED ");
-            return p;
-    }
-
-    for (i=0; i < nEntries; i++, pEntry++) {
-        if (pEntry->addr == subType) {
-            p += log_sprintf( pMac, p, "%s", pEntry->name);
-            break;
-        }
-    }
-
-    if (i >= nEntries)
-        p += log_sprintf( pMac, p, "RESERVED ");
-
-    if (type == SIR_MAC_DATA_FRAME)
-        p += log_sprintf( pMac, p, "(%d) ", tcId);
-    return p;
-}
-
-char * dump_thread_info( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3, tANI_U32 arg4, char *p)
-{
-    tANI_U32 i, j;
-
-    p += log_sprintf( pMac, p, "\n**** BBT RECEIVE **** \n");
-    p += log_sprintf( pMac, p, "\nBBT CRC errors received   : %d\n",
-            pMac->sys.gSysBbtCrcFail);
-    p += log_sprintf( pMac, p, "BBT duplicates received   : %d\n",
-            pMac->sys.gSysBbtDuplicates);
-    p += log_sprintf( pMac, p, "BBT total frames received : %d\n",
-            pMac->sys.gSysBbtReceived);
-    p += log_sprintf( pMac, p, "\tPosted to LIM : %d\n",
-            pMac->sys.gSysBbtPostedToLim);
-    p += log_sprintf( pMac, p, "\tPosted to SCH : %d\n",
-            pMac->sys.gSysBbtPostedToSch);
-    p += log_sprintf( pMac, p, "\tPosted to PMM : %d\n",
-            pMac->sys.gSysBbtPostedToPmm);
-    p += log_sprintf( pMac, p, "\tPosted to HAL : %d\n",
-            pMac->sys.gSysBbtPostedToHal);
-    p += log_sprintf( pMac, p, "\tDropped       : %d\n",
-            pMac->sys.gSysBbtDropped);
-    p += log_sprintf( pMac, p, "\t\tLearn mode frame out of learn mode : %d\n",
-            pMac->sys.gSysBbtLearnFrameInv);
-    p += log_sprintf( pMac, p, "\t\tNon-learn mode frame in learn mode : %d\n",
-            pMac->sys.gSysBbtNonLearnFrameInv);
-
-    p += log_sprintf( pMac, p, "\nMGMT RX frame counts\n");
-    for (i = 0; i < 16; i++) {
-        if (pMac->sys.gSysFrameCount[0][i]) {
-            p += log_sprintf( pMac, p, "\t");
-            p = printMesgName( pMac, p, 0, i, 0);
-            p += log_sprintf( pMac, p, "[%d] %d\n", i, pMac->sys.gSysFrameCount[0][i]);
-        }
-    }
-
-    p += log_sprintf( pMac, p, "CTRL RX frame counts\n");
-
-    for (i = 0; i < 16; i++) {
-        if (pMac->sys.gSysFrameCount[1][i]) {
-            p += log_sprintf( pMac, p, "\t");
-            p = printMesgName(pMac, p, 1, i, 0);
-            p += log_sprintf( pMac, p, "[%d] %d\n", i, pMac->sys.gSysFrameCount[1][i]);
-        }
-    }
-
-    p += log_sprintf( pMac, p, "DATA RX frame counts\n");
-    for (i = 0; i < 16; i++) {
-        if (pMac->sys.gSysFrameCount[2][i]) {
-            p += log_sprintf( pMac, p, "\t");
-            p = printMesgName(pMac, p, 2, i, 0);
-            p += log_sprintf( pMac, p, "[%d] %d\n", i,
-                    pMac->sys.gSysFrameCount[2][i]);
-        }
-    }
-
-    if (pMac->sch.gSchBBXportRcvCnt) {
-        p += log_sprintf( pMac, p, "\nSCH processed messages : %d\n",
-                pMac->sch.gSchBBXportRcvCnt);
-        p += log_sprintf( pMac, p, "\tBeacons  : %d\n", pMac->sch.gSchBcnRcvCnt);
-        p += log_sprintf( pMac, p, "\t\tignored  : %d\n", pMac->sch.gSchBcnIgnored);
-        p += log_sprintf( pMac, p, "\t\tin error : %d\n", pMac->sch.gSchBcnParseErrorCnt);
-        p += log_sprintf( pMac, p, "\tQoS null : %d\n", pMac->sch.gSchRRRcvCnt);
-        p += log_sprintf( pMac, p, "\tDropped  : %d\n", pMac->sch.gSchUnknownRcvCnt);
-    }
-
-
-    p += log_sprintf( pMac, p, "\nLIM processed messages : %d\n", pMac->lim.numTot);
-    if (pMac->lim.numTot) {
-        p += log_sprintf( pMac, p, "\tSME Messages (HDD) : %d\n", pMac->lim.numSme);
-        p += log_sprintf( pMac, p, "\tMAC Messages (BBT) : %d\n", pMac->lim.numBbt);
-        p += log_sprintf( pMac, p, "\t\tBad Protocol\t: %d\n", pMac->lim.numProtErr);
-        p += log_sprintf( pMac, p, "\t\tIn Learn mode\t: %d (ignored %d)\n",
-                pMac->lim.numLearn, pMac->lim.numLearnIgnore);
-
-        for (i=0; i<4; i++) {
-            for (j=0; j<16; j++) {
-                if (pMac->lim.numMAC[i][j]) {
-                    p += log_sprintf( pMac, p, "\t\t");
-                    p = printMesgName(pMac, p, i, j, 0);
-                    p += log_sprintf( pMac, p, "\t: %d\n", pMac->lim.numMAC[i][j]);
-                }
-            }
-        }
-
-        p += log_sprintf( pMac, p, "\tBeacons received : %d\n", pMac->lim.gLimNumBeaconsRcvd);
-        p += log_sprintf( pMac, p, "\t\tIgnored : %d\n", pMac->lim.gLimNumBeaconsIgnored);
-    }
-
-    if (pMac->sys.gSysFrameCount[SIR_MAC_MGMT_FRAME][SIR_MAC_MGMT_PROBE_REQ]) {
-        p += log_sprintf( pMac, p, "\nProbe Requests Received: %d\n",
-                pMac->sys.gSysFrameCount[SIR_MAC_MGMT_FRAME][SIR_MAC_MGMT_PROBE_REQ]);
-        p += log_sprintf( pMac, p, "\tIgnored  \t: %d\n", pMac->sys.probeIgnore);
-        p += log_sprintf( pMac, p, "\tSSID miss\t: %d\n", pMac->sys.probeBadSsid);
-        p += log_sprintf( pMac, p, "\tParse err\t: %d\n", pMac->sys.probeError);
-        p += log_sprintf( pMac, p, "\tResponded\t: %d\n", pMac->sys.probeRespond);
-    }
-
-    return p;
-}
-#endif
 
 /* Initialize the index */
 void logDumpInit(tpAniSirGlobal pMac)
diff --git a/Kbuild b/Kbuild
index eed26c6..c46fdfc 100644
--- a/Kbuild
+++ b/Kbuild
@@ -329,7 +329,6 @@
 		$(SYS_LEGACY_SRC_DIR)/platform/src/VossWrapper.o \
 		$(SYS_LEGACY_SRC_DIR)/system/src/macInitApi.o \
 		$(SYS_LEGACY_SRC_DIR)/system/src/sysEntryFunc.o \
-		$(SYS_LEGACY_SRC_DIR)/system/src/sysWinStartup.o \
 		$(SYS_LEGACY_SRC_DIR)/utils/src/dot11f.o \
 		$(SYS_LEGACY_SRC_DIR)/utils/src/logApi.o \
 		$(SYS_LEGACY_SRC_DIR)/utils/src/logDump.o \
