diff --git a/CORE/WDA/inc/wlan_qct_wda.h b/CORE/WDA/inc/wlan_qct_wda.h
index c681692..2fd5038 100644
--- a/CORE/WDA/inc/wlan_qct_wda.h
+++ b/CORE/WDA/inc/wlan_qct_wda.h
@@ -44,21 +44,19 @@
 
 /*===========================================================================
 
-               W L A N   DEVICE ADAPTATION   L A Y E R 
+               W L A N   DEVICE ADAPTATION   L A Y E R
                        E X T E R N A L  A P I
-                
-                   
+
+
 DESCRIPTION
   This file contains the external API exposed by the wlan adaptation layer for Prima
   and Volans.
 
   For Volans this layer is actually a thin layer that maps all WDA messages and
   functions to equivalent HAL messages and functions. The reason this layer was introduced
-  was to keep the UMAC identical across Prima and Volans. This layer provides the glue 
+  was to keep the UMAC identical across Prima and Volans. This layer provides the glue
   between SME, PE , TL and HAL.
   
-  Copyright (c) 2008 QUALCOMM Incorporated. All Rights Reserved.
-  Qualcomm Confidential and Proprietary
 ===========================================================================*/
 
 
@@ -80,26 +78,14 @@
 01/27/2011  rnair       Adding WDA support for Volans.
 12/08/2010  seokyoun    Move down HAL interfaces from TL to WDA
                         for UMAC convergence btween Volans/Libra and Prima
-08/25/2010  adwivedi    WDA Context and exposed API's 
+08/25/2010  adwivedi    WDA Context and exposed API's
 =========================================================================== */
 
 #include "aniGlobal.h"
 
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 
 #  include "wlan_qct_wdi_ds.h"
 
-#else 
-
-#  include "sirParams.h"
-#  include "limGlobal.h" 
-#  include "halTypes.h"
-#  include "wlan_qct_bal.h"
-#  include "wlan_qct_hal.h" 
-/* This header is for ADD and remove BA session */
-#  include "halCommonApi.h"
-
-#endif
 
 /* Add Include */
 
@@ -133,11 +119,6 @@
    WDA_VALID_STA_INDEX
 }WDA_ValidStaIndex;
 
-#if defined( FEATURE_WLAN_NON_INTEGRATED_SOC )
-#if !defined( VOS_MQ_ID_WDA )
-#define VOS_MQ_ID_WDA VOS_MQ_ID_HAL
-#endif
-#endif
 /*--------------------------------------------------------------------------
   Utilities
  --------------------------------------------------------------------------*/
@@ -202,56 +183,26 @@
 
    TODO Consider refactoring it and put it into two separate headers, 
    one for Prima and one for Volans 
-
-   feturized with FEATURE_WLAN_INTEGRATED_SOC for Prima
  ----------------------------------------------------------------------*/
 
 /* For backward compatability with SDIO. It's BAL header size for SDIO
    interface. It's nothing for integrated SOC */
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #define WDA_DXE_HEADER_SIZE   0
-#else /* FEATURE_WLAN_INTEGRATED_SOC */
-#define WDA_DXE_HEADER_SIZE   WLAN_BAL_DXE_HEADER_SIZE
-#endif /* FEATURE_WLAN_INTEGRATED_SOC */
 
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
-#else /* FEATURE_WLAN_INTEGRATED_SOC */
-/*Libra PDU size*/
-#define WDA_TLI_PDU_RES_SIZE                 124
-#endif /* FEATURE_WLAN_INTEGRATED_SOC */
 
 /*Minimum resources needed - arbitrary*/
 
 /*DXE + SD*/
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #define WDA_WLAN_LIBRA_HEADER_LEN              (20 + 8)
-#else /* FEATURE_WLAN_INTEGRATED_SOC */
-#define WLAN_LIBRA_HEADER_LEN              (20 + 8)
-#endif /* FEATURE_WLAN_INTEGRATED_SOC */
 
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #define WDA_TLI_BD_PDU_RESERVE_THRESHOLD    10
-#else /* FEATURE_WLAN_INTEGRATED_SOC */
-#define WDA_TLI_BD_PDU_RESERVE_THRESHOLD    150
-#endif /* FEATURE_WLAN_INTEGRATED_SOC */
 
 
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_TLI_MIN_RES_MF   1
 #  define WDA_TLI_MIN_RES_BAP  2
 #  define WDA_TLI_MIN_RES_DATA 3
-#else
-#  define WDA_TLI_MIN_RES_MF   13 /*Keeping for MF*/
-#  define WDA_TLI_MIN_RES_BAP  (WDA_TLI_MIN_RES_MF  + 13) /*Another for BAP*/
-#  define WDA_TLI_MIN_RES_DATA (WDA_TLI_MIN_RES_BAP + 13) /*Min 12 for data*/
-#  define WLANTL_TH_RES_DATA                        254
-#endif
 
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_NUM_STA 8
-#else
-#  define WDA_NUM_STA HAL_NUM_STA
-#endif
 
 /* For backward compatability with SDIO.
  
@@ -266,7 +217,6 @@
    For integrated SOC, _usPktLen and _uTotalPktLen is VOS pakcet length
    which does include BD header length. _uResLen is hardcoded 2.
  */
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 
 #ifdef WINDOWS_DT
 #define WDA_TLI_PROCESS_FRAME_LEN( _vosBuff, _usPktLen,              \
@@ -290,29 +240,6 @@
   while ( 0 )
 #endif /* WINDOWS_DT */
 
-#else /* FEATURE_WLAN_INTEGRATED_SOC */
-
-#define WLANTL_PDU_RES_SIZE                 124 /*Libra PDU size*/
-#define WLAN_LIBRA_BD_HEADER_LEN            128 /*The lenght of the tx BD header*/
-
-/*Minimum resources needed - arbitrary*/
-
-/*DXE + SD*/
-#define WLAN_LIBRA_HEADER_LEN              (20 + 8)
-
-#define WLANTL_MAX_MSDU                    1538
-
-#define WDA_TLI_PROCESS_FRAME_LEN( _vosBuff, _usPktLen,              \
-                                            _uResLen, _uTotalPktLen) \
-  do                                                                 \
-  {                                                                  \
-    vos_pkt_get_packet_length( _vosBuff, &_usPktLen );               \
-    _uResLen = WDA_TLI_CEIL( (_usPktLen - WLAN_LIBRA_BD_HEADER_LEN), \
-                               WLANTL_PDU_RES_SIZE ) + 1/*The BD*/;  \
-    _uTotalPktLen = _usPktLen + WLAN_BAL_DXE_HEADER_SIZE;            \
-  }                                                                  \
-  while ( 0 )
-#endif /* FEATURE_WLAN_INTEGRATED_SOC */
 
 
 /*--------------------------------------------------------------------------
@@ -340,14 +267,11 @@
 typedef v_U32_t   (*WDA_DS_TxPacketCallback)   ( v_PVOID_t pContext, 
                                                   vos_pkt_t **ppFrameDataBuff, 
                                                   v_U32_t uSize, 
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
                                                   v_U8_t uFlowMask, 
-#endif
                                                   v_BOOL_t *pbUrgent );
 typedef VOS_STATUS (*WDA_DS_ResourceCB)      ( v_PVOID_t pContext, v_U32_t uCount );
 
 
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 /* For management client */
 typedef VOS_STATUS (*WDA_DS_TxCompleteCb)( v_PVOID_t     pContext, wpt_packet *pFrame );
 typedef VOS_STATUS (*WDA_DS_RxCompleteCb)( v_PVOID_t pContext, wpt_packet *pFrame );
@@ -577,13 +501,7 @@
 // FIXME Temporary value for R33D integaration
 //#define WDA_TL_TX_FRAME_TIMEOUT  20000 /* in msec a very high upper limit */
 
-#endif /* FEATURE_WLAN_INTEGRATED_SOC */
 
-#if defined( FEATURE_WLAN_NON_INTEGRATED_SOC )
-#if !defined( wdaGetGlobalSystemRole )
-#define wdaGetGlobalSystemRole halGetGlobalSystemRole
-#endif
-#endif
 
 /* ---------------------------------------------------------------------------
  
@@ -595,281 +513,137 @@
   ---------------------------------------------------------------------------*/
 
 /* WDA_GET_RX_MAC_HEADER *****************************************************/
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_GET_RX_MAC_HEADER(pRxMeta)  \
       (tpSirMacMgmtHdr)( ((WDI_DS_RxMetaInfoType *)(pRxMeta))->mpduHeaderPtr )
-#else
-#  define WDA_GET_RX_MAC_HEADER(bdHd) SIR_MAC_BD_TO_MPDUHEADER(bdHd) 
-#endif
 
 /* WDA_GET_RX_MPDUHEADER3A ****************************************************/
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_GET_RX_MPDUHEADER3A(pRxMeta) \
    (tpSirMacDataHdr3a)( ((WDI_DS_RxMetaInfoType *)(pRxMeta))->mpduHeaderPtr )
-#else
-#  define WDA_GET_RX_MPDUHEADER3A(bdHd)    SIR_MAC_BD_TO_MPDUHEADER3A(bdHd)
-#endif
 
 /* WDA_GET_RX_MPDU_HEADER_LEN *************************************************/
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_GET_RX_MPDU_HEADER_LEN(pRxMeta)   \
                     ( ((WDI_DS_RxMetaInfoType *)(pRxMeta))->mpduHeaderLength )
-#else 
-#  define WDA_GET_RX_MPDU_HEADER_LEN(bdHd)   WLANHAL_RX_BD_GET_MPDU_H_LEN(bdHd)
-#endif
 
 /* WDA_GET_RX_MPDU_LEN ********************************************************/
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_GET_RX_MPDU_LEN(pRxMeta)  \
                ( ((WDI_DS_RxMetaInfoType *)(pRxMeta))->mpduLength )
-#else 
-#  define WDA_GET_RX_MPDU_LEN(bdHd) WLANHAL_RX_BD_GET_MPDU_LEN(bdHd)
-#endif
 
 /* WDA_GET_RX_PAYLOAD_LEN ****************************************************/
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_GET_RX_PAYLOAD_LEN(pRxMeta)   \
        ( WDA_GET_RX_MPDU_LEN(pRxMeta) - WDA_GET_RX_MPDU_HEADER_LEN(pRxMeta) )
-#else
-#  define WDA_GET_RX_PAYLOAD_LEN(bdHd) SIR_MAC_BD_TO_PAYLOAD_LEN(bdHd)
-#endif
 
 /* WDA_GET_RX_MAC_RATE_IDX ***************************************************/
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_GET_RX_MAC_RATE_IDX(pRxMeta)  \
                           ( ((WDI_DS_RxMetaInfoType *)(pRxMeta))->rateIndex )
-#else
-#  define WDA_GET_RX_MAC_RATE_IDX(bdHd)     SIR_MAC_BD_TO_RATE_INDEX(bdHd)
-#endif
 
 /* WDA_GET_RX_MPDU_DATA ******************************************************/
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_GET_RX_MPDU_DATA(pRxMeta)  \
                    ( ((WDI_DS_RxMetaInfoType *)(pRxMeta))->mpduDataPtr )
-#else
-#  define WDA_GET_RX_MPDU_DATA(bdHd) SIR_MAC_BD_TO_MPDUDATA(bdHd)
-#endif
 
 /* WDA_GET_RX_MPDU_DATA_OFFSET ***********************************************/
 // For Integrated SOC: When UMAC receive the packet. BD is already stripped off.
 //                     Data offset is the MPDU header length
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_GET_RX_MPDU_DATA_OFFSET(pRxMeta)  WDA_GET_RX_MPDU_HEADER_LEN(pRxMeta)
-#else
-#  define WDA_GET_RX_MPDU_DATA_OFFSET(bdHd) \
-                WLANHAL_RX_BD_GET_MPDU_D_OFFSET(bdHd)
-#endif
 
 /* WDA_GET_RX_MPDU_HEADER_OFFSET *********************************************/
 // For Integrated SOC: We UMAC receive the frame, 
 //                     BD is gone and MAC header at offset 0
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_GET_RX_MPDU_HEADER_OFFSET(pRxMeta)   0
-#else
-#  define WDA_GET_RX_MPDU_HEADER_OFFSET(bdHd) WLANHAL_RX_BD_GET_MPDU_H_OFFSET(bdHd)
-#endif
 
 /* WDA_GET_RX_UNKNOWN_UCAST **************************************************/
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_GET_RX_UNKNOWN_UCAST(pRxMeta)   \
                      ( ((WDI_DS_RxMetaInfoType *)(pRxMeta))->unknownUcastPkt )
-#else
-#  define WDA_GET_RX_UNKNOWN_UCAST(bdHd) SIR_MAC_BD_IS_UNKNOWN_UCAST_FRAME(bdHd)
-#endif
 
 /* WDA_GET_RX_TID ************************************************************/
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_GET_RX_TID(pRxMeta) ( ((WDI_DS_RxMetaInfoType *)(pRxMeta))->tid )
-#else
-#  define WDA_GET_RX_TID(bdHd) WLANHAL_RX_BD_GET_TID(bdHd)
-#endif
 
 /* WDA_GET_RX_STAID **********************************************************/
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_GET_RX_STAID(pRxMeta) (((WDI_DS_RxMetaInfoType*)(pRxMeta))->staId)
-#else
-#  define WDA_GET_RX_STAID(bdHd)    WLANHAL_RX_BD_GET_STA_ID(bdHd)
-#endif
 
 /* WDA_GET_RX_ADDR3_IDX ******************************************************/
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_GET_RX_ADDR3_IDX(pRxMeta) (((WDI_DS_RxMetaInfoType*)(pRxMeta))->addr3Idx)
-#else
-#  define WDA_GET_RX_ADDR3_IDX(bdHd)    WLANHAL_RX_BD_GET_ADDR3_IDX(bdHd) 
-#endif
 
 /* WDA_GET_RX_CH *************************************************************/
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_GET_RX_CH(pRxMeta) (((WDI_DS_RxMetaInfoType*)(pRxMeta))->rxChannel)
-#else
-#  define WDA_GET_RX_CH(bdHd) SIR_MAC_BD_TO_RX_CHANNEL(bdHd)
-#endif
 
 /* WDA_GET_RX_DPUSIG *********************************************************/
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_GET_RX_DPUSIG(pRxMeta)  (((WDI_DS_RxMetaInfoType*)(pRxMeta))->dpuSig)
-#else
-#  define WDA_GET_RX_DPUSIG(bdHd)     WLANHAL_RX_BD_GET_DPU_SIG(bdHd)
-#endif
 
 /* WDA_IS_RX_BCAST ***********************************************************/
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_IS_RX_BCAST(pRxMeta)   \
       ( (1 == ((WDI_DS_RxMetaInfoType*)(pRxMeta))->bcast) ? VOS_TRUE : VOS_FALSE )
-#else
-#  define WDA_IS_RX_BCAST(bdHd)   \
-      ( ( 0xFF == WLANHAL_RX_BD_GET_ADDR1_IDX(bdHd)) ? VOS_TRUE : VOS_FALSE )
-#endif
     
 /* WDA_GET_RX_FT_DONE ********************************************************/
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_GET_RX_FT_DONE(pRxMeta) (((WDI_DS_RxMetaInfoType*)(pRxMeta))->ft)
-#else
-#  define WDA_GET_RX_FT_DONE(bdHd)    WLANHAL_RX_BD_GET_FT(bdHd)
-#endif
 
 /* WDA_GET_RX_DPU_FEEDBACK **************************************************/
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_GET_RX_DPU_FEEDBACK(pRxMeta) \
                       (((WDI_DS_RxMetaInfoType*)(pRxMeta))->dpuFeedback)
-#endif
 
 /* WDA_GET_RX_ASF ************************************************************/
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_GET_RX_ASF(pRxMeta) (((WDI_DS_RxMetaInfoType*)(pRxMeta))->amsdu_asf)
-#else
-#  define WDA_GET_RX_ASF(bdHd)     WLANHAL_RX_BD_GET_ASF(bdHd)
-#endif
 
 /* WDA_GET_RX_AEF ************************************************************/
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_GET_RX_AEF(pRxMeta) (((WDI_DS_RxMetaInfoType*)(pRxMeta))->amsdu_aef)
-#else
-#  define WDA_GET_RX_AEF(bdHd)    WLANHAL_RX_BD_GET_AEF(bdHd)
-#endif
 
 /* WDA_GET_RX_ESF ************************************************************/
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_GET_RX_ESF(pRxMeta)  (((WDI_DS_RxMetaInfoType*)(pRxMeta))->amsdu_esf)
-#else
-#  define WDA_GET_RX_ESF(bdHd)     WLANHAL_RX_BD_GET_ESF(bdHd)
-#endif
 
 /* WDA_GET_RX_BEACON_SENT ****************************************************/
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_GET_RX_BEACON_SENT(pRxMeta) \
                      (((WDI_DS_RxMetaInfoType*)(pRxMeta))->bsf)
-#else
-#  define WDA_GET_RX_BEACON_SENT(bdHd) SIR_MAC_BD_TO_IBSS_BCN_SENT(bdHd)
-#endif
 
 /* WDA_GET_RX_TSF_LATER *****************************************************/
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_GET_RX_TSF_LATER(pRxMeta) (((WDI_DS_RxMetaInfoType*)(pRxMeta))->rtsf)
-#else
-#  define WDA_GET_RX_TSF_LATER(bdHd) SIR_MAC_BD_TO_IBSS_TSF_LATER(bdHd)
-#endif
 
 /* WDA_GET_RX_TYPE ***********************************************************/
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_GET_RX_TYPE(pRxMeta) (((WDI_DS_RxMetaInfoType*)(pRxMeta))->type)
-#else
-#  define WDA_GET_RX_TYPE(bdHd) \
-            ( ( WLANHAL_RX_BD_GET_TYPE_SUBTYPE(bdHd) & 0x30 ) >> 4 ) 
-#endif
 
 /* WDA_GET_RX_SUBTYPE ********************************************************/
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_GET_RX_SUBTYPE(pRxMeta) (((WDI_DS_RxMetaInfoType*)(pRxMeta))->subtype)
-#else
-#  define WDA_GET_RX_SUBTYPE(bdHd) ( WLANHAL_RX_BD_GET_TYPE_SUBTYPE(bdHd) & 0x0F )
-#endif
 
 /* WDA_GET_RX_TYPE_SUBTYPE ****************************************************/
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_GET_RX_TYPE_SUBTYPE(pRxMeta)  \
                  ((WDA_GET_RX_TYPE(pRxMeta)<<4)|WDA_GET_RX_SUBTYPE(pRxMeta))
-#else
-#  define WDA_GET_RX_TYPE_SUBTYPE(bdHd) WLANHAL_RX_BD_GET_TYPE_SUBTYPE(bdHd)
-#endif
 
 /* WDA_GET_RX_REORDER_OPCODE : For MSDU reorder *******************************/
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_GET_RX_REORDER_OPCODE(pRxMeta) \
            (((WDI_DS_RxMetaInfoType*)(pRxMeta))->ampdu_reorderOpcode)
-#else
-#  define WDA_GET_RX_REORDER_OPCODE(bdHd) WLANHAL_RX_BD_GET_BA_OPCODE(bdHd) 
-#endif
 
 /* WDA_GET_RX_REORDER_SLOT_IDX : For MSDU reorder ****************************/
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_GET_RX_REORDER_SLOT_IDX(pRxMeta) \
                 (((WDI_DS_RxMetaInfoType*)(pRxMeta))->ampdu_reorderSlotIdx)
-#else
-#  define WDA_GET_RX_REORDER_SLOT_IDX(bdHd) WLANHAL_RX_BD_GET_BA_SI(bdHd)
-#endif
 
 /* WDA_GET_RX_REORDER_FWD_IDX : For MSDU reorder *****************************/
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_GET_RX_REORDER_FWD_IDX(pRxMeta)  \
          (((WDI_DS_RxMetaInfoType*)(pRxMeta))->ampdu_reorderFwdIdx)
-#else
-#  define WDA_GET_RX_REORDER_FWD_IDX(bdHd) WLANHAL_RX_BD_GET_BA_FI(bdHd)
-#endif
 
 /* WDA_GET_RX_REORDER_CUR_PKT_SEQ_NO : Fro MSDU reorder **********************/
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_GET_RX_REORDER_CUR_PKT_SEQ_NO(pRxMeta)  \
          (((WDI_DS_RxMetaInfoType*)(pRxMeta))->currentPktSeqNo)
-#else
-#  define WDA_GET_RX_REORDER_CUR_PKT_SEQ_NO(bdHd) \
-                              WLANHAL_RX_BD_GET_BA_CSN(bdHd) 
-#endif
 
 /* WDA_IS_RX_LLC_PRESENT *****************************************************/
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_IS_RX_LLC_PRESENT(pRxMeta)    \
       ( (0 == ((WDI_DS_RxMetaInfoType*)(pRxMeta))->llcr) ? VOS_TRUE : VOS_FALSE )
-#else
-#  define WDA_IS_RX_LLC_PRESENT(bdHd)       \
-           ( (0 == (v_U8_t)WLANHAL_RX_BD_GET_LLC(bdHd) ) ? VOS_TRUE : VOS_FALSE )
-#endif
 
 #define WLANWDA_HO_IS_AN_AMPDU                    0x4000
 #define WLANWDA_HO_LAST_MPDU_OF_AMPDU             0x400
 
 /* WDA_IS_RX_AN_AMPDU ********************************************************/
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_IS_RX_AN_AMPDU(pRxMeta)       \
    ( ((WDI_DS_RxMetaInfoType*)(pRxMeta))->rxpFlags & WLANWDA_HO_IS_AN_AMPDU )
-#else
-#  define WDA_IS_RX_AN_AMPDU(bdHd)   WLAN_HAL_IS_AN_AMPDU(bdHd) 
-#endif
 
 /* WDA_IS_RX_LAST_MPDU *******************************************************/
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_IS_RX_LAST_MPDU(pRxMeta)      \
    ( ((WDI_DS_RxMetaInfoType*)(pRxMeta))->rxpFlags & WLANWDA_HO_LAST_MPDU_OF_AMPDU ) 
-#else
-#  define WDA_IS_RX_LAST_MPDU(bdHd)         WLAN_HAL_IS_LAST_MPDU(bdHd)
-#endif
 
 /* WDA_GET_RX_TIMESTAMP *****************************************************/
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_GET_RX_TIMESTAMP(pRxMeta) (((WDI_DS_RxMetaInfoType*)(pRxMeta))->mclkRxTimestamp)
-#else
-#  define WDA_GET_RX_TIMESTAMP(bdHd)    SIR_MAC_BD_RX_TIMESTAMP(bdHd)
-#endif
 
 /* WDA_IS_RX_IN_SCAN *********************************************************/
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_IS_RX_IN_SCAN(pRxMeta)  (((WDI_DS_RxMetaInfoType*)(pRxMeta))->scan)
-#else
-#  define WDA_IS_RX_IN_SCAN(bdHd)     SIR_MAC_BD_TO_SCAN_LEARN(bdHd)
-#endif
 
 /* WDA_GET_RX_RSSI_DB ********************************************************/
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 // Volans RF
 #  define WDA_RSSI_OFFSET             100
 #  define WDA_GET_RSSI0_DB(rssi0)     (rssi0 - WDA_RSSI_OFFSET)
@@ -879,101 +653,54 @@
                 WDA_MAX_OF_TWO(WDA_GET_RSSI0_DB(rssi0), WDA_GET_RSSI1_DB(rssi0))
 #  define WDA_GET_RX_RSSI_DB(pRxMeta) \
                        WDA_GET_RSSI_DB((((WDI_DS_RxMetaInfoType*)(pRxMeta))->rssi0))
-#else
-#  define WDA_GET_RX_RSSI_DB(bdHd)     SIR_MAC_BD_TO_RSSI_DB(bdHd)
-#endif
 
 /* WDA_GET_RX_SNR ************************************************************/
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_GET_RX_SNR(pRxMeta)  (((WDI_DS_RxMetaInfoType*)(pRxMeta))->snr)
-#else
-#  define WDA_GET_RX_SNR(bdHd) WLANHAL_RX_BD_GET_SNR(bdHd)
-#endif
 
 /* WDA_IS_RX_FC **************************************************************/
 // Flow control frames
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 /* FIXME WDA should provide the meta info which indicates FC frame 
           In the meantime, use hardcoded FALSE, since we don't support FC yet */
 #  define WDA_IS_RX_FC(pRxMeta)    (((WDI_DS_RxMetaInfoType*)(pRxMeta))->fc)
-#else
-#  define WDA_IS_RX_FC(bdHd)        WLANHAL_RX_BD_GET_FC(bdHd)
-#endif
 
 /* WDA_GET_RX_FC_VALID_STA_MASK **********************************************/
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_GET_RX_FC_VALID_STA_MASK(pRxMeta) \
                        (((WDI_DS_RxMetaInfoType*)(pRxMeta))->fcSTAValidMask)
-#else
-#  define WDA_GET_RX_FC_VALID_STA_MASK(bdHd) \
-                       WLANHAL_RX_BD_GET_STA_VALID_MASK(bdHd)
-#endif
 
 /* WDA_GET_RX_FC_PWRSAVE_STA_MASK ********************************************/
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_GET_RX_FC_PWRSAVE_STA_MASK(pRxMeta) \
                  (((WDI_DS_RxMetaInfoType*)(pRxMeta))->fcSTAPwrSaveStateMask)
-#else
-#  define WDA_GET_RX_FC_PWRSAVE_STA_MASK(bdHd) \
-                                          WLANHAL_RX_BD_GET_STA_PS_STATE(bdHd)
-#endif
 
 /* WDA_GET_RX_FC_STA_THRD_IND_MASK ********************************************/
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_GET_RX_FC_STA_THRD_IND_MASK(pRxMeta) \
                      (((WDI_DS_RxMetaInfoType*)(pRxMeta))->fcSTAThreshIndMask)
-#else
-#  define WDA_GET_RX_FC_STA_THRD_IND_MASK(bdHd) \
-                                    WLANHAL_RX_BD_GET_STA_TH_IND(bdHd)
-#endif
 
 /* WDA_GET_RX_FC_FORCED_STA_TX_DISABLED_BITMAP ********************************************/
 #  define WDA_GET_RX_FC_STA_TX_DISABLED_BITMAP(pRxMeta) \
                      (((WDI_DS_RxMetaInfoType*)(pRxMeta))->fcStaTxDisabledBitmap)
 
 /* WDA_GET_RX_FC_STA_TXQ_LEN *************************************************/
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_GET_RX_FC_STA_TXQ_LEN(pRxMeta, staId) \
                   (((WDI_DS_RxMetaInfoType*)(pRxMeta))->fcSTATxQLen[(staId)])
-#else
-#  define WDA_GET_RX_FC_STA_TXQ_LEN(bdHd, staId) \
-                          WLANHAL_RX_BD_GET_STA_TXQ_LEN( _pvBDHeader, staId )
-#endif
 
 /* WDA_GET_RX_FC_STA_CUR_TXRATE **********************************************/
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_GET_RX_FC_STA_CUR_TXRATE(pRxMeta, staId) \
                 (((WDI_DS_RxMetaInfoType*)(pRxMeta))->fcSTACurTxRate[(staId)])
-#else
-#  define WDA_GET_RX_FC_STA_CUR_TXRATE(bdHd, staId) \
-                             WLANHAL_RX_BD_GET_STA_CUR_TX_RATE( bdHd, staIdx )
-#endif
 
 /* WDA_GET_RX_REPLAY_COUNT ***************************************************/
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_GET_RX_REPLAY_COUNT(pRxMeta) \
                             (((WDI_DS_RxMetaInfoType*)(pRxMeta))->replayCount)
-#endif
 
 /* WDA_GETRSSI0 ***************************************************************/
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_GETRSSI0(pRxMeta) (((WDI_DS_RxMetaInfoType*)(pRxMeta))->rssi0)
-#else
-#  define WDA_GETRSSI0(bdHd) (v_S7_t)(HAL_GET_RSSI0_DB(SIR_MAC_BD_TO_PHY_STATS0(bdHd)))
-#endif
 
 /* WDA_GETRSSI1 ***************************************************************/
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_GETRSSI1(pRxMeta) (((WDI_DS_RxMetaInfoType*)(pRxMeta))->rssi1)
-#else
-#  define WDA_GETRSSI1(bdHd) (v_S7_t)(HAL_GET_RSSI1_DB(SIR_MAC_BD_TO_PHY_STATS0(bdHd)))
-#endif
 
 
 
 /* --------------------------------------------------------------------*/
 
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision);
 uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision);
 
@@ -995,12 +722,8 @@
 // Just declare the function extern here and save some time.
 extern tSirRetStatus halMmhForwardMBmsg(void*, tSirMbMsg*);
 tSirRetStatus uMacPostCtrlMsg(void* pSirGlobal, tSirMbMsg* pMb);
-#else
-#  define uMacPostCtrlMsg(hal, msg)  halMmhForwardMBmsg(hal, msg)
-#endif
 
 
-#if defined(FEATURE_WLAN_NON_INTEGRATED_SOC) || defined(FEATURE_WLAN_INTEGRATED_SOC)
 #define WDA_MAX_TXPOWER_INVALID HAL_MAX_TXPOWER_INVALID
 
 //WDA Messages to HAL messages Mapping
@@ -1259,7 +982,6 @@
 #define WDA_MMH_TXMB_READY_EVT SIR_HAL_MMH_TXMB_READY_EVT     
 #define WDA_MMH_RXMB_DONE_EVT  SIR_HAL_MMH_RXMB_DONE_EVT    
 #define WDA_MMH_MSGQ_NE_EVT    SIR_HAL_MMH_MSGQ_NE_EVT
-#endif
 
 #ifdef WLAN_FEATURE_VOWIFI_11R
 #define WDA_AGGR_QOS_REQ               SIR_HAL_AGGR_QOS_REQ
@@ -1308,26 +1030,12 @@
 #define WDA_UPDATE_OP_MODE         SIR_HAL_UPDATE_OP_MODE
 #endif
 
-#ifdef FEATURE_WLAN_INTEGRATED_SOC
 tSirRetStatus wdaPostCtrlMsg(tpAniSirGlobal pMac, tSirMsgQ *pMsg);
-#endif
 
-#if defined(FEATURE_WLAN_NON_INTEGRATED_SOC)
-#define VOS_MODULE_ID_WDA VOS_MODULE_ID_HAL
-
-//Required by TL
-
-//WDA Functions to HAL functions Mapping
-//Required by SME and PE
-#define WDA_SetRegDomain halPhySetRegDomain 
-#define wdaPostCtrlMsg halPostMsgApi
-#else
 eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId);
-#endif //FEATURE_WLAN_NON_INTEGRATED_SOC
 
 #define HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME 0x40 // Bit 6 will be used to control BD rate for Management frames
 
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #define halTxFrame(hHal, pFrmBuf, frmLen, frmType, txDir, tid, pCompFunc, pData, txFlag) \
    (eHalStatus)( WDA_TxPacket(\
          vos_get_context(VOS_MODULE_ID_WDA, vos_get_global_context(VOS_MODULE_ID_WDA, (hHal))),\
@@ -1353,48 +1061,25 @@
          (pData),\
          (pCBackFnTxComp), \
          (txFlag)) )
-#endif
 
 /* -----------------------------------------------------------------
   WDA data path API's for TL
  -------------------------------------------------------------------*/
 
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx, 
                                                       tANI_U8 staIdx);
-#else
-#  define WDA_IsHwFrameTxTranslationCapable(vosGCtx, staId) \
-      WLANHAL_IsHwFrameTxTranslationCapable(vosGCtx, staId)
-#endif
 
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_EnableUapsdAcParams(vosGCtx, staId, uapsdInfo) \
          WDA_SetUapsdAcParamsReq(vosGCtx, staId, uapsdInfo)
-#else
-#  define WDA_EnableUapsdAcParams(vosGCtx, staId, uapsdInfo) \
-         WLANHAL_EnableUapsdAcParams(vosGCtx, staId, uapsdInfo)
-#endif
 
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_DisableUapsdAcParams(vosGCtx, staId, ac) \
           WDA_ClearUapsdAcParamsReq(vosGCtx, staId, ac)
-#else
-#  define WDA_DisableUapsdAcParams(vosGCtx, staId, ac) \
-         WLANHAL_DisableUapsdAcParams(vosGCtx, staId, ac)
-#endif
 
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #  define WDA_SetRSSIThresholds(pMac, pThresholds) \
          WDA_SetRSSIThresholdsReq(pMac, pThresholds)
-#else
-#  define WDA_SetRSSIThresholds(pMac, pThresholds) \
-         halPS_SetRSSIThresholds(pMac, pThresholds)
-#endif
 
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 #define WDA_UpdateRssiBmps(pvosGCtx,  staId, rssi) \
         WLANTL_UpdateRssiBmps(pvosGCtx, staId, rssi)
-#endif
 
 #ifdef WLAN_PERF 
 /*==========================================================================
@@ -1876,7 +1561,6 @@
   tpSirRSSIThresholds pThresholds
 );
 
-#if defined( FEATURE_WLAN_INTEGRATED_SOC )
 /*==========================================================================
    FUNCTION    WDA_DS_TxFrames
 
@@ -1910,7 +1594,6 @@
 ( 
   v_PVOID_t pvosGCtx 
 );
-#endif
 
 /*==========================================================================
    FUNCTION    WDA_DS_TxFlowControlCallback
