diff --git a/CORE/MAC/src/cfg/cfgUtil/dot11f.frms b/CORE/MAC/src/cfg/cfgUtil/dot11f.frms
index 50435b1..423d813 100644
--- a/CORE/MAC/src/cfg/cfgUtil/dot11f.frms
+++ b/CORE/MAC/src/cfg/cfgUtil/dot11f.frms
@@ -101,6 +101,8 @@
 const EID_WAPI                       =  68;
 const EID_RRM_ENABLED_CAPS           =  70;
 const EID_MULTIPLE_BSSID             =  71;
+const EID_20_40_BSS_COEXISTENCE      =  72;
+const EID_20_40_BSS_INTOLERANT_REPORT=  73;
 const EID_OBSS_SCAN_PARAMETERS       =  74;
 const EID_FT_RIC_DESCRIPTOR          =  75;
 const EID_LINK_IDENTIFIER            = 101;
@@ -2116,6 +2118,25 @@
     obssScanActivityThreshold, 2;
 }
 
+IE HT2040BSSCoexistence (EID_20_40_BSS_COEXISTENCE)
+{
+     // 20/40 BSS Coexistence Information
+    {
+        infoRequest:             1;
+        fortyMHzIntolerant:      1;
+        twentyMHzBssWidthReq:    1;
+        obssScanExemptionReq:    1;
+        obssScanExemptionGrant:  1;
+        unused:                  3;
+    }
+}
+
+IE HT2040BSSIntolerantReport (EID_20_40_BSS_INTOLERANT_REPORT)
+{
+     operatingClass, 1;
+     channelList[0..50];
+}
+
 const EID_RRM_NBR_RPT_TSF              =    1;
 const EID_RRM_NBR_CD_COUNTRY           =    2;
 const EID_RRM_NBR_MSMT_PILOT_TX_INFO   =   66;
@@ -3343,7 +3364,7 @@
     OPTIE  ExtCap;
     OPTIE  OperatingMode;
     OPTIE  WiderBWChanSwitchAnn;
-	OPTIE  OBSSScanParameters;
+    OPTIE  OBSSScanParameters;
 } // End frame Beacon.
 
 // Ok, here's  the story on  Beacon1 & Beacon2.   We presumably beacon  a lot
@@ -3423,6 +3444,7 @@
     OPTIE  ExtCap;
     OPTIE  OperatingMode;
     OPTIE  WiderBWChanSwitchAnn;
+    OPTIE  OBSSScanParameters;
 }
 
 // This frame is just Beacon with its Fixed Fields stripped out.  It's handy
@@ -3479,7 +3501,7 @@
     OPTIE  ExtCap;
     OPTIE  OperatingMode;
     OPTIE  WiderBWChanSwitchAnn;
-	OPTIE  OBSSScanParameters;
+    OPTIE  OBSSScanParameters;
 
 } // End frame BeaconIEs.
 
@@ -3684,7 +3706,7 @@
     OPTIE  VHTOperation;
     OPTIE  VHTExtBssLoad;
     OPTIE  ExtCap;
-	OPTIE  OBSSScanParameters;
+    OPTIE  OBSSScanParameters;
 } // End frame ProbeResponse.
 
 FRAME Authentication                      // 7.2.3.10
@@ -4227,6 +4249,14 @@
     FF     VhtUserPositionArray;
 }
 
+FRAME HT2040BSSCoexistenceManagementActionFrame
+{
+    FF     Category;
+    FF     Action;
+    MANDIE HT2040BSSCoexistence;
+    MANDIE HT2040BSSIntolerantReport;
+}
+
 // Local Variables:
 // mode: c++
 // fill-column: 77
diff --git a/CORE/MAC/src/include/dot11f.h b/CORE/MAC/src/include/dot11f.h
index 27ecf5b..315066f 100644
--- a/CORE/MAC/src/include/dot11f.h
+++ b/CORE/MAC/src/include/dot11f.h
@@ -19,11 +19,11 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/*
- * This file was originally distributed by Qualcomm Atheros, Inc.
- * under proprietary terms before Copyright ownership was assigned
- * to the Linux Foundation.
- */
+/**
+  * Copyright (c) 2012 - 2014 Qualcomm Atheros, Inc.
+  * All Rights Reserved.
+  * Qualcomm Atheros Confidential and Proprietary.
+  */
 
 #ifndef DOT11F_H
 #define DOT11F_H
@@ -37,7 +37,7 @@
   *
   *
   * This file was automatically generated by 'framesc'
-  * Thu Apr 10 18:13:49 2014 from the following file(s):
+  * Mon Nov 10 18:31:12 2014 from the following file(s):
   *
   * dot11f.frms
   *
@@ -3757,6 +3757,63 @@
 #ifdef __cplusplus
 }; /* End extern "C". */
 #endif /* C++ */
+// EID 72 (0x48)
+typedef struct sDot11fIEHT2040BSSCoexistence {
+    tANI_U8      present;
+    tANI_U8      infoRequest: 1;
+    tANI_U8 fortyMHzIntolerant: 1;
+    tANI_U8 twentyMHzBssWidthReq: 1;
+    tANI_U8 obssScanExemptionReq: 1;
+    tANI_U8 obssScanExemptionGrant: 1;
+    tANI_U8           unused: 3;
+} tDot11fIEHT2040BSSCoexistence;
+
+#define DOT11F_EID_HT2040BSSCOEXISTENCE ( 72 )
+
+// N.B. These #defines do *not* include the EID & length
+#define DOT11F_IE_HT2040BSSCOEXISTENCE_MIN_LEN ( 1 )
+
+#define DOT11F_IE_HT2040BSSCOEXISTENCE_MAX_LEN ( 1 )
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* C++ */
+tANI_U32 dot11fUnpackIeHT2040BSSCoexistence(tpAniSirGlobal, tANI_U8*,tANI_U8, tDot11fIEHT2040BSSCoexistence*);
+
+tANI_U32 dot11fPackIeHT2040BSSCoexistence(tpAniSirGlobal, tDot11fIEHT2040BSSCoexistence*, tANI_U8*, tANI_U32, tANI_U32*);
+
+tANI_U32 dot11fGetPackedIEHT2040BSSCoexistence(tpAniSirGlobal, tDot11fIEHT2040BSSCoexistence*, tANI_U32*);
+
+#ifdef __cplusplus
+}; /* End extern "C". */
+#endif /* C++ */
+// EID 73 (0x49)
+typedef struct sDot11fIEHT2040BSSIntolerantReport {
+    tANI_U8      present;
+    tANI_U8      operatingClass;
+    tANI_U8      num_channelList;
+    tANI_U8      channelList[50];
+} tDot11fIEHT2040BSSIntolerantReport;
+
+#define DOT11F_EID_HT2040BSSINTOLERANTREPORT ( 73 )
+
+// N.B. These #defines do *not* include the EID & length
+#define DOT11F_IE_HT2040BSSINTOLERANTREPORT_MIN_LEN ( 1 )
+
+#define DOT11F_IE_HT2040BSSINTOLERANTREPORT_MAX_LEN ( 51 )
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* C++ */
+tANI_U32 dot11fUnpackIeHT2040BSSIntolerantReport(tpAniSirGlobal, tANI_U8*,tANI_U8, tDot11fIEHT2040BSSIntolerantReport*);
+
+tANI_U32 dot11fPackIeHT2040BSSIntolerantReport(tpAniSirGlobal, tDot11fIEHT2040BSSIntolerantReport*, tANI_U8*, tANI_U32, tANI_U32*);
+
+tANI_U32 dot11fGetPackedIEHT2040BSSIntolerantReport(tpAniSirGlobal, tDot11fIEHT2040BSSIntolerantReport*, tANI_U32*);
+
+#ifdef __cplusplus
+}; /* End extern "C". */
+#endif /* C++ */
 // EID 45 (0x2d)
 typedef struct sDot11fIEHTCaps {
     tANI_U8      present;
@@ -6487,6 +6544,7 @@
     tDot11fIEExtCap               ExtCap;
     tDot11fIEOperatingMode        OperatingMode;
     tDot11fIEWiderBWChanSwitchAnn WiderBWChanSwitchAnn;
+    tDot11fIEOBSSScanParameters   OBSSScanParameters;
 } tDot11fBeacon2;
 
 #define DOT11F_BEACON2 ( 10 )
@@ -6805,6 +6863,27 @@
 } /* End extern "C". */
 #endif /* C++ */
 
+typedef struct sDot11fHT2040BSSCoexistenceManagementActionFrame{
+    tDot11fFfCategory                  Category;
+    tDot11fFfAction                    Action;
+    tDot11fIEHT2040BSSCoexistence      HT2040BSSCoexistence;
+    tDot11fIEHT2040BSSIntolerantReport HT2040BSSIntolerantReport;
+} tDot11fHT2040BSSCoexistenceManagementActionFrame;
+
+#define DOT11F_HT2040BSSCOEXISTENCEMANAGEMENTACTIONFRAME ( 23 )
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* C++ */
+
+tANI_U32 dot11fUnpackHT2040BSSCoexistenceManagementActionFrame(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf, tDot11fHT2040BSSCoexistenceManagementActionFrame *pFrm);
+tANI_U32 dot11fPackHT2040BSSCoexistenceManagementActionFrame(tpAniSirGlobal pCtx, tDot11fHT2040BSSCoexistenceManagementActionFrame *pFrm, tANI_U8 *pBuf, tANI_U32 nBuf, tANI_U32 *pnConsumed);
+tANI_U32 dot11fGetPackedHT2040BSSCoexistenceManagementActionFrameSize(tpAniSirGlobal pCtx, tDot11fHT2040BSSCoexistenceManagementActionFrame *pFrm, tANI_U32 *pnNeeded);
+
+#ifdef __cplusplus
+} /* End extern "C". */
+#endif /* C++ */
+
 typedef struct sDot11fInvitationReq{
     tDot11fFfCategory         Category;
     tDot11fFfAction           Action;
@@ -6814,7 +6893,7 @@
     tDot11fIEP2PInvitationReq P2PInvitationReq;
 } tDot11fInvitationReq;
 
-#define DOT11F_INVITATIONREQ ( 23 )
+#define DOT11F_INVITATIONREQ ( 24 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -6837,7 +6916,7 @@
     tDot11fIEP2PInvitationRes P2PInvitationRes;
 } tDot11fInvitationRes;
 
-#define DOT11F_INVITATIONRES ( 24 )
+#define DOT11F_INVITATIONRES ( 25 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -6865,7 +6944,7 @@
     tDot11fFfRSNI        RSNI;
 } tDot11fLinkMeasurementReport;
 
-#define DOT11F_LINKMEASUREMENTREPORT ( 25 )
+#define DOT11F_LINKMEASUREMENTREPORT ( 26 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -6887,7 +6966,7 @@
     tDot11fFfMaxTxPower  MaxTxPower;
 } tDot11fLinkMeasurementRequest;
 
-#define DOT11F_LINKMEASUREMENTREQUEST ( 26 )
+#define DOT11F_LINKMEASUREMENTREQUEST ( 27 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -6908,7 +6987,7 @@
     tDot11fIEMeasurementReport MeasurementReport;
 } tDot11fMeasurementReport;
 
-#define DOT11F_MEASUREMENTREPORT ( 27 )
+#define DOT11F_MEASUREMENTREPORT ( 28 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -6930,7 +7009,7 @@
     tDot11fIEMeasurementRequest MeasurementRequest[4];
 } tDot11fMeasurementRequest;
 
-#define DOT11F_MEASUREMENTREQUEST ( 28 )
+#define DOT11F_MEASUREMENTREQUEST ( 29 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -6951,7 +7030,7 @@
     tDot11fIESSID        SSID;
 } tDot11fNeighborReportRequest;
 
-#define DOT11F_NEIGHBORREPORTREQUEST ( 29 )
+#define DOT11F_NEIGHBORREPORTREQUEST ( 30 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -6973,7 +7052,7 @@
     tDot11fIENeighborReport NeighborReport[4];
 } tDot11fNeighborReportResponse;
 
-#define DOT11F_NEIGHBORREPORTRESPONSE ( 30 )
+#define DOT11F_NEIGHBORREPORTRESPONSE ( 31 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -6995,7 +7074,7 @@
     tDot11fIEP2PNoticeOfAbsence P2PNoticeOfAbsence;
 } tDot11fNoticeOfAbs;
 
-#define DOT11F_NOTICEOFABS ( 31 )
+#define DOT11F_NOTICEOFABS ( 32 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7015,7 +7094,7 @@
     tDot11fFfOperatingMode OperatingMode;
 } tDot11fOperatingMode;
 
-#define DOT11F_OPERATINGMODE ( 32 )
+#define DOT11F_OPERATINGMODE ( 33 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7037,7 +7116,7 @@
     tDot11fIEP2PNoticeOfAbsence P2PNoticeOfAbsence;
 } tDot11fPresenceReq;
 
-#define DOT11F_PRESENCEREQ ( 33 )
+#define DOT11F_PRESENCEREQ ( 34 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7059,7 +7138,7 @@
     tDot11fIEP2PPresenceResponse P2PPresenceResponse;
 } tDot11fPresenceRes;
 
-#define DOT11F_PRESENCERES ( 34 )
+#define DOT11F_PRESENCERES ( 35 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7086,7 +7165,7 @@
     tDot11fIEVHTCaps       VHTCaps;
 } tDot11fProbeRequest;
 
-#define DOT11F_PROBEREQUEST ( 35 )
+#define DOT11F_PROBEREQUEST ( 36 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7146,7 +7225,7 @@
     tDot11fIEOBSSScanParameters OBSSScanParameters;
 } tDot11fProbeResponse;
 
-#define DOT11F_PROBERESPONSE ( 36 )
+#define DOT11F_PROBERESPONSE ( 37 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7169,7 +7248,7 @@
     tDot11fIEP2PProvisionDiscoveryReq P2PProvisionDiscoveryReq;
 } tDot11fProvisionDiscoveryReq;
 
-#define DOT11F_PROVISIONDISCOVERYREQ ( 37 )
+#define DOT11F_PROVISIONDISCOVERYREQ ( 38 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7192,7 +7271,7 @@
     tDot11fIEP2PWSCProvisionDiscoveryRes P2PWSCProvisionDiscoveryRes;
 } tDot11fProvisionDiscoveryRes;
 
-#define DOT11F_PROVISIONDISCOVERYRES ( 38 )
+#define DOT11F_PROVISIONDISCOVERYRES ( 39 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7212,7 +7291,7 @@
     tDot11fIEQosMapSet QosMapSet;
 } tDot11fQosMapConfigure;
 
-#define DOT11F_QOSMAPCONFIGURE ( 39 )
+#define DOT11F_QOSMAPCONFIGURE ( 40 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7234,7 +7313,7 @@
     tDot11fIEMeasurementReport MeasurementReport[4];
 } tDot11fRadioMeasurementReport;
 
-#define DOT11F_RADIOMEASUREMENTREPORT ( 40 )
+#define DOT11F_RADIOMEASUREMENTREPORT ( 41 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7257,7 +7336,7 @@
     tDot11fIEMeasurementRequest MeasurementRequest[2];
 } tDot11fRadioMeasurementRequest;
 
-#define DOT11F_RADIOMEASUREMENTREQUEST ( 41 )
+#define DOT11F_RADIOMEASUREMENTREQUEST ( 42 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7308,7 +7387,7 @@
     tDot11fIEQosMapSet          QosMapSet;
 } tDot11fReAssocRequest;
 
-#define DOT11F_REASSOCREQUEST ( 42 )
+#define DOT11F_REASSOCREQUEST ( 43 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7358,7 +7437,7 @@
     tDot11fIEQosMapSet          QosMapSet;
 } tDot11fReAssocResponse;
 
-#define DOT11F_REASSOCRESPONSE ( 43 )
+#define DOT11F_REASSOCRESPONSE ( 44 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7378,7 +7457,7 @@
     tDot11fFfSMPowerModeSet SMPowerModeSet;
 } tDot11fSMPowerSave;
 
-#define DOT11F_SMPOWERSAVE ( 44 )
+#define DOT11F_SMPOWERSAVE ( 45 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7398,7 +7477,7 @@
     tDot11fFfTransactionId TransactionId;
 } tDot11fSaQueryReq;
 
-#define DOT11F_SAQUERYREQ ( 45 )
+#define DOT11F_SAQUERYREQ ( 46 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7418,7 +7497,7 @@
     tDot11fFfTransactionId TransactionId;
 } tDot11fSaQueryRsp;
 
-#define DOT11F_SAQUERYRSP ( 46 )
+#define DOT11F_SAQUERYRSP ( 47 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7439,7 +7518,7 @@
     tDot11fIELinkIdentifier LinkIdentifier;
 } tDot11fTDLSDisReq;
 
-#define DOT11F_TDLSDISREQ ( 47 )
+#define DOT11F_TDLSDISREQ ( 48 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7472,7 +7551,7 @@
     tDot11fIEVHTCaps              VHTCaps;
 } tDot11fTDLSDisRsp;
 
-#define DOT11F_TDLSDISRSP ( 48 )
+#define DOT11F_TDLSDISRSP ( 49 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7495,7 +7574,7 @@
     tDot11fIEPUBufferStatus PUBufferStatus;
 } tDot11fTDLSPeerTrafficInd;
 
-#define DOT11F_TDLSPEERTRAFFICIND ( 49 )
+#define DOT11F_TDLSPEERTRAFFICIND ( 50 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7516,7 +7595,7 @@
     tDot11fIELinkIdentifier LinkIdentifier;
 } tDot11fTDLSPeerTrafficRsp;
 
-#define DOT11F_TDLSPEERTRAFFICRSP ( 50 )
+#define DOT11F_TDLSPEERTRAFFICRSP ( 51 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7546,7 +7625,7 @@
     tDot11fIEOperatingMode   OperatingMode;
 } tDot11fTDLSSetupCnf;
 
-#define DOT11F_TDLSSETUPCNF ( 51 )
+#define DOT11F_TDLSSETUPCNF ( 52 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7583,7 +7662,7 @@
     tDot11fIEVHTCaps              VHTCaps;
 } tDot11fTDLSSetupReq;
 
-#define DOT11F_TDLSSETUPREQ ( 52 )
+#define DOT11F_TDLSSETUPREQ ( 53 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7622,7 +7701,7 @@
     tDot11fIEOperatingMode        OperatingMode;
 } tDot11fTDLSSetupRsp;
 
-#define DOT11F_TDLSSETUPRSP ( 53 )
+#define DOT11F_TDLSSETUPRSP ( 54 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7644,7 +7723,7 @@
     tDot11fIELinkIdentifier LinkIdentifier;
 } tDot11fTDLSTeardown;
 
-#define DOT11F_TDLSTEARDOWN ( 54 )
+#define DOT11F_TDLSTEARDOWN ( 55 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7665,7 +7744,7 @@
     tDot11fIETPCReport   TPCReport;
 } tDot11fTPCReport;
 
-#define DOT11F_TPCREPORT ( 55 )
+#define DOT11F_TPCREPORT ( 56 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7686,7 +7765,7 @@
     tDot11fIETPCRequest  TPCRequest;
 } tDot11fTPCRequest;
 
-#define DOT11F_TPCREQUEST ( 56 )
+#define DOT11F_TPCREQUEST ( 57 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7707,7 +7786,7 @@
     tDot11fFfVhtUserPositionArray     VhtUserPositionArray;
 } tDot11fVHTGidManagementActionFrame;
 
-#define DOT11F_VHTGIDMANAGEMENTACTIONFRAME ( 57 )
+#define DOT11F_VHTGIDMANAGEMENTACTIONFRAME ( 58 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7730,7 +7809,7 @@
     tDot11fIEESETrafStrmRateSet ESETrafStrmRateSet;
 } tDot11fWMMAddTSRequest;
 
-#define DOT11F_WMMADDTSREQUEST ( 58 )
+#define DOT11F_WMMADDTSREQUEST ( 59 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7753,7 +7832,7 @@
     tDot11fIEESETrafStrmMet ESETrafStrmMet;
 } tDot11fWMMAddTSResponse;
 
-#define DOT11F_WMMADDTSRESPONSE ( 59 )
+#define DOT11F_WMMADDTSRESPONSE ( 60 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7775,7 +7854,7 @@
     tDot11fIEWMMTSPEC    WMMTSPEC;
 } tDot11fWMMDelTS;
 
-#define DOT11F_WMMDELTS ( 60 )
+#define DOT11F_WMMDELTS ( 61 )
 
 #ifdef __cplusplus
 extern "C" {
diff --git a/CORE/SYS/legacy/src/utils/src/dot11f.c b/CORE/SYS/legacy/src/utils/src/dot11f.c
index cc345cd..225583b 100644
--- a/CORE/SYS/legacy/src/utils/src/dot11f.c
+++ b/CORE/SYS/legacy/src/utils/src/dot11f.c
@@ -19,11 +19,11 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/*
- * This file was originally distributed by Qualcomm Atheros, Inc.
- * under proprietary terms before Copyright ownership was assigned
- * to the Linux Foundation.
- */
+/**
+  * Copyright (c) 2012 - 2014 Qualcomm Atheros, Inc.
+  * All Rights Reserved.
+  * Qualcomm Atheros Confidential and Proprietary.
+  */
 
 /**
   * \file dot11f.c
@@ -33,9 +33,8 @@
   *
   *
   *
-  *
   * This file was automatically generated by 'framesc'
-  * Thu Apr 10 18:13:49 2014 from the following file(s):
+  * Mon Nov 10 18:31:12 2014 from the following file(s):
   *
   * dot11f.frms
   *
@@ -3347,81 +3346,125 @@
 #define SigIeFTInfo ( 0x0042 )
 
 
-tANI_U32 dot11fUnpackIeHTCaps(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEHTCaps *pDst)
+tANI_U32 dot11fUnpackIeHT2040BSSCoexistence(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEHT2040BSSCoexistence *pDst)
 {
     tANI_U32 status = DOT11F_PARSE_SUCCESS;
-    tANI_U16 tmp46__;
-    tANI_U8 tmp47__;
-    tANI_U16 tmp48__;
-    tANI_U32 tmp49__;
-    tANI_U8 tmp50__;
+    tANI_U8 tmp46__;
     (void) pBuf; (void)ielen; /* Shutup the compiler */
     if (pDst->present) status = DOT11F_DUPLICATE_IE;
     pDst->present = 1;
-    framesntohs(pCtx, &tmp46__, pBuf, 0);
+    tmp46__ = *pBuf;
+    pDst->infoRequest = tmp46__ >> 0 & 0x1;
+    pDst->fortyMHzIntolerant = tmp46__ >> 1 & 0x1;
+    pDst->twentyMHzBssWidthReq = tmp46__ >> 2 & 0x1;
+    pDst->obssScanExemptionReq = tmp46__ >> 3 & 0x1;
+    pDst->obssScanExemptionGrant = tmp46__ >> 4 & 0x1;
+    pDst->unused = tmp46__ >> 5 & 0x7;
+    (void)pCtx;
+    return status;
+} /* End dot11fUnpackIeHT2040BSSCoexistence. */
+
+#define SigIeHT2040BSSCoexistence ( 0x0043 )
+
+
+tANI_U32 dot11fUnpackIeHT2040BSSIntolerantReport(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEHT2040BSSIntolerantReport *pDst)
+{
+    tANI_U32 status = DOT11F_PARSE_SUCCESS;
+    (void) pBuf; (void)ielen; /* Shutup the compiler */
+    if (pDst->present) status = DOT11F_DUPLICATE_IE;
+    pDst->present = 1;
+    pDst->operatingClass = *pBuf;
+    pBuf += 1;
+    ielen -= (tANI_U8)1;
+    pDst->num_channelList = (tANI_U8)( ielen );
+    if (ielen > 50){
+        pDst->present = 0;
+        return DOT11F_SKIPPED_BAD_IE;
+    }
+
+    DOT11F_MEMCPY(pCtx, pDst->channelList, pBuf, ( ielen ) );
+    (void)pCtx;
+    return status;
+} /* End dot11fUnpackIeHT2040BSSIntolerantReport. */
+
+#define SigIeHT2040BSSIntolerantReport ( 0x0044 )
+
+
+tANI_U32 dot11fUnpackIeHTCaps(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEHTCaps *pDst)
+{
+    tANI_U32 status = DOT11F_PARSE_SUCCESS;
+    tANI_U16 tmp47__;
+    tANI_U8 tmp48__;
+    tANI_U16 tmp49__;
+    tANI_U32 tmp50__;
+    tANI_U8 tmp51__;
+    (void) pBuf; (void)ielen; /* Shutup the compiler */
+    if (pDst->present) status = DOT11F_DUPLICATE_IE;
+    pDst->present = 1;
+    framesntohs(pCtx, &tmp47__, pBuf, 0);
     pBuf += 2;
     ielen -= 2;
-    pDst->advCodingCap = tmp46__ >> 0 & 0x1;
-    pDst->supportedChannelWidthSet = tmp46__ >> 1 & 0x1;
-    pDst->mimoPowerSave = tmp46__ >> 2 & 0x3;
-    pDst->greenField = tmp46__ >> 4 & 0x1;
-    pDst->shortGI20MHz = tmp46__ >> 5 & 0x1;
-    pDst->shortGI40MHz = tmp46__ >> 6 & 0x1;
-    pDst->txSTBC = tmp46__ >> 7 & 0x1;
-    pDst->rxSTBC = tmp46__ >> 8 & 0x3;
-    pDst->delayedBA = tmp46__ >> 10 & 0x1;
-    pDst->maximalAMSDUsize = tmp46__ >> 11 & 0x1;
-    pDst->dsssCckMode40MHz = tmp46__ >> 12 & 0x1;
-    pDst->psmp = tmp46__ >> 13 & 0x1;
-    pDst->stbcControlFrame = tmp46__ >> 14 & 0x1;
-    pDst->lsigTXOPProtection = tmp46__ >> 15 & 0x1;
-    tmp47__ = *pBuf;
+    pDst->advCodingCap = tmp47__ >> 0 & 0x1;
+    pDst->supportedChannelWidthSet = tmp47__ >> 1 & 0x1;
+    pDst->mimoPowerSave = tmp47__ >> 2 & 0x3;
+    pDst->greenField = tmp47__ >> 4 & 0x1;
+    pDst->shortGI20MHz = tmp47__ >> 5 & 0x1;
+    pDst->shortGI40MHz = tmp47__ >> 6 & 0x1;
+    pDst->txSTBC = tmp47__ >> 7 & 0x1;
+    pDst->rxSTBC = tmp47__ >> 8 & 0x3;
+    pDst->delayedBA = tmp47__ >> 10 & 0x1;
+    pDst->maximalAMSDUsize = tmp47__ >> 11 & 0x1;
+    pDst->dsssCckMode40MHz = tmp47__ >> 12 & 0x1;
+    pDst->psmp = tmp47__ >> 13 & 0x1;
+    pDst->stbcControlFrame = tmp47__ >> 14 & 0x1;
+    pDst->lsigTXOPProtection = tmp47__ >> 15 & 0x1;
+    tmp48__ = *pBuf;
     pBuf += 1;
     ielen -= 1;
-    pDst->maxRxAMPDUFactor = tmp47__ >> 0 & 0x3;
-    pDst->mpduDensity = tmp47__ >> 2 & 0x7;
-    pDst->reserved1 = tmp47__ >> 5 & 0x7;
+    pDst->maxRxAMPDUFactor = tmp48__ >> 0 & 0x3;
+    pDst->mpduDensity = tmp48__ >> 2 & 0x7;
+    pDst->reserved1 = tmp48__ >> 5 & 0x7;
     DOT11F_MEMCPY(pCtx, pDst->supportedMCSSet, pBuf, 16);
     pBuf += 16;
     ielen -= (tANI_U8)16;
-    framesntohs(pCtx, &tmp48__, pBuf, 0);
+    framesntohs(pCtx, &tmp49__, pBuf, 0);
     pBuf += 2;
     ielen -= 2;
-    pDst->pco = tmp48__ >> 0 & 0x1;
-    pDst->transitionTime = tmp48__ >> 1 & 0x3;
-    pDst->reserved2 = tmp48__ >> 3 & 0x1f;
-    pDst->mcsFeedback = tmp48__ >> 8 & 0x3;
-    pDst->reserved3 = tmp48__ >> 10 & 0x3f;
-    framesntohl(pCtx, &tmp49__, pBuf, 0);
+    pDst->pco = tmp49__ >> 0 & 0x1;
+    pDst->transitionTime = tmp49__ >> 1 & 0x3;
+    pDst->reserved2 = tmp49__ >> 3 & 0x1f;
+    pDst->mcsFeedback = tmp49__ >> 8 & 0x3;
+    pDst->reserved3 = tmp49__ >> 10 & 0x3f;
+    framesntohl(pCtx, &tmp50__, pBuf, 0);
     pBuf += 4;
     ielen -= 4;
-    pDst->txBF = tmp49__ >> 0 & 0x1;
-    pDst->rxStaggeredSounding = tmp49__ >> 1 & 0x1;
-    pDst->txStaggeredSounding = tmp49__ >> 2 & 0x1;
-    pDst->rxZLF = tmp49__ >> 3 & 0x1;
-    pDst->txZLF = tmp49__ >> 4 & 0x1;
-    pDst->implicitTxBF = tmp49__ >> 5 & 0x1;
-    pDst->calibration = tmp49__ >> 6 & 0x3;
-    pDst->explicitCSITxBF = tmp49__ >> 8 & 0x1;
-    pDst->explicitUncompressedSteeringMatrix = tmp49__ >> 9 & 0x1;
-    pDst->explicitBFCSIFeedback = tmp49__ >> 10 & 0x7;
-    pDst->explicitUncompressedSteeringMatrixFeedback = tmp49__ >> 13 & 0x7;
-    pDst->explicitCompressedSteeringMatrixFeedback = tmp49__ >> 16 & 0x7;
-    pDst->csiNumBFAntennae = tmp49__ >> 19 & 0x3;
-    pDst->uncompressedSteeringMatrixBFAntennae = tmp49__ >> 21 & 0x3;
-    pDst->compressedSteeringMatrixBFAntennae = tmp49__ >> 23 & 0x3;
-    pDst->reserved4 = tmp49__ >> 25 & 0x7f;
-    tmp50__ = *pBuf;
+    pDst->txBF = tmp50__ >> 0 & 0x1;
+    pDst->rxStaggeredSounding = tmp50__ >> 1 & 0x1;
+    pDst->txStaggeredSounding = tmp50__ >> 2 & 0x1;
+    pDst->rxZLF = tmp50__ >> 3 & 0x1;
+    pDst->txZLF = tmp50__ >> 4 & 0x1;
+    pDst->implicitTxBF = tmp50__ >> 5 & 0x1;
+    pDst->calibration = tmp50__ >> 6 & 0x3;
+    pDst->explicitCSITxBF = tmp50__ >> 8 & 0x1;
+    pDst->explicitUncompressedSteeringMatrix = tmp50__ >> 9 & 0x1;
+    pDst->explicitBFCSIFeedback = tmp50__ >> 10 & 0x7;
+    pDst->explicitUncompressedSteeringMatrixFeedback = tmp50__ >> 13 & 0x7;
+    pDst->explicitCompressedSteeringMatrixFeedback = tmp50__ >> 16 & 0x7;
+    pDst->csiNumBFAntennae = tmp50__ >> 19 & 0x3;
+    pDst->uncompressedSteeringMatrixBFAntennae = tmp50__ >> 21 & 0x3;
+    pDst->compressedSteeringMatrixBFAntennae = tmp50__ >> 23 & 0x3;
+    pDst->reserved4 = tmp50__ >> 25 & 0x7f;
+    tmp51__ = *pBuf;
     pBuf += 1;
     ielen -= 1;
-    pDst->antennaSelection = tmp50__ >> 0 & 0x1;
-    pDst->explicitCSIFeedbackTx = tmp50__ >> 1 & 0x1;
-    pDst->antennaIndicesFeedbackTx = tmp50__ >> 2 & 0x1;
-    pDst->explicitCSIFeedback = tmp50__ >> 3 & 0x1;
-    pDst->antennaIndicesFeedback = tmp50__ >> 4 & 0x1;
-    pDst->rxAS = tmp50__ >> 5 & 0x1;
-    pDst->txSoundingPPDUs = tmp50__ >> 6 & 0x1;
-    pDst->reserved5 = tmp50__ >> 7 & 0x1;
+    pDst->antennaSelection = tmp51__ >> 0 & 0x1;
+    pDst->explicitCSIFeedbackTx = tmp51__ >> 1 & 0x1;
+    pDst->antennaIndicesFeedbackTx = tmp51__ >> 2 & 0x1;
+    pDst->explicitCSIFeedback = tmp51__ >> 3 & 0x1;
+    pDst->antennaIndicesFeedback = tmp51__ >> 4 & 0x1;
+    pDst->rxAS = tmp51__ >> 5 & 0x1;
+    pDst->txSoundingPPDUs = tmp51__ >> 6 & 0x1;
+    pDst->reserved5 = tmp51__ >> 7 & 0x1;
     pDst->num_rsvd = (tANI_U8)( ielen );
     if (ielen > 32){
         pDst->present = 0;
@@ -3433,47 +3476,47 @@
     return status;
 } /* End dot11fUnpackIeHTCaps. */
 
-#define SigIeHTCaps ( 0x0043 )
+#define SigIeHTCaps ( 0x0045 )
 
 
 tANI_U32 dot11fUnpackIeHTInfo(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEHTInfo *pDst)
 {
     tANI_U32 status = DOT11F_PARSE_SUCCESS;
-    tANI_U8 tmp51__;
-    tANI_U16 tmp52__;
+    tANI_U8 tmp52__;
     tANI_U16 tmp53__;
+    tANI_U16 tmp54__;
     (void) pBuf; (void)ielen; /* Shutup the compiler */
     if (pDst->present) status = DOT11F_DUPLICATE_IE;
     pDst->present = 1;
     pDst->primaryChannel = *pBuf;
     pBuf += 1;
     ielen -= (tANI_U8)1;
-    tmp51__ = *pBuf;
+    tmp52__ = *pBuf;
     pBuf += 1;
     ielen -= 1;
-    pDst->secondaryChannelOffset = tmp51__ >> 0 & 0x3;
-    pDst->recommendedTxWidthSet = tmp51__ >> 2 & 0x1;
-    pDst->rifsMode = tmp51__ >> 3 & 0x1;
-    pDst->controlledAccessOnly = tmp51__ >> 4 & 0x1;
-    pDst->serviceIntervalGranularity = tmp51__ >> 5 & 0x7;
-    framesntohs(pCtx, &tmp52__, pBuf, 0);
-    pBuf += 2;
-    ielen -= 2;
-    pDst->opMode = tmp52__ >> 0 & 0x3;
-    pDst->nonGFDevicesPresent = tmp52__ >> 2 & 0x1;
-    pDst->transmitBurstLimit = tmp52__ >> 3 & 0x1;
-    pDst->obssNonHTStaPresent = tmp52__ >> 4 & 0x1;
-    pDst->reserved = tmp52__ >> 5 & 0x7ff;
+    pDst->secondaryChannelOffset = tmp52__ >> 0 & 0x3;
+    pDst->recommendedTxWidthSet = tmp52__ >> 2 & 0x1;
+    pDst->rifsMode = tmp52__ >> 3 & 0x1;
+    pDst->controlledAccessOnly = tmp52__ >> 4 & 0x1;
+    pDst->serviceIntervalGranularity = tmp52__ >> 5 & 0x7;
     framesntohs(pCtx, &tmp53__, pBuf, 0);
     pBuf += 2;
     ielen -= 2;
-    pDst->basicSTBCMCS = tmp53__ >> 0 & 0x7f;
-    pDst->dualCTSProtection = tmp53__ >> 7 & 0x1;
-    pDst->secondaryBeacon = tmp53__ >> 8 & 0x1;
-    pDst->lsigTXOPProtectionFullSupport = tmp53__ >> 9 & 0x1;
-    pDst->pcoActive = tmp53__ >> 10 & 0x1;
-    pDst->pcoPhase = tmp53__ >> 11 & 0x1;
-    pDst->reserved2 = tmp53__ >> 12 & 0xf;
+    pDst->opMode = tmp53__ >> 0 & 0x3;
+    pDst->nonGFDevicesPresent = tmp53__ >> 2 & 0x1;
+    pDst->transmitBurstLimit = tmp53__ >> 3 & 0x1;
+    pDst->obssNonHTStaPresent = tmp53__ >> 4 & 0x1;
+    pDst->reserved = tmp53__ >> 5 & 0x7ff;
+    framesntohs(pCtx, &tmp54__, pBuf, 0);
+    pBuf += 2;
+    ielen -= 2;
+    pDst->basicSTBCMCS = tmp54__ >> 0 & 0x7f;
+    pDst->dualCTSProtection = tmp54__ >> 7 & 0x1;
+    pDst->secondaryBeacon = tmp54__ >> 8 & 0x1;
+    pDst->lsigTXOPProtectionFullSupport = tmp54__ >> 9 & 0x1;
+    pDst->pcoActive = tmp54__ >> 10 & 0x1;
+    pDst->pcoPhase = tmp54__ >> 11 & 0x1;
+    pDst->reserved2 = tmp54__ >> 12 & 0xf;
     DOT11F_MEMCPY(pCtx, pDst->basicMCSSet, pBuf, 16);
     pBuf += 16;
     ielen -= (tANI_U8)16;
@@ -3488,7 +3531,7 @@
     return status;
 } /* End dot11fUnpackIeHTInfo. */
 
-#define SigIeHTInfo ( 0x0044 )
+#define SigIeHTInfo ( 0x0046 )
 
 
 tANI_U32 dot11fUnpackIeIBSSParams(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEIBSSParams *pDst)
@@ -3502,7 +3545,7 @@
     return status;
 } /* End dot11fUnpackIeIBSSParams. */
 
-#define SigIeIBSSParams ( 0x0045 )
+#define SigIeIBSSParams ( 0x0047 )
 
 
 tANI_U32 dot11fUnpackIeLinkIdentifier(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIELinkIdentifier *pDst)
@@ -3522,7 +3565,7 @@
     return status;
 } /* End dot11fUnpackIeLinkIdentifier. */
 
-#define SigIeLinkIdentifier ( 0x0046 )
+#define SigIeLinkIdentifier ( 0x0048 )
 
 
 static const tFFDefn FFS_reportBeacon[ ] = {
@@ -3537,22 +3580,22 @@
 tANI_U32 dot11fUnpackIeMeasurementReport(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEMeasurementReport *pDst)
 {
     tANI_U32 status = DOT11F_PARSE_SUCCESS;
-    tANI_U8 tmp54__;
     tANI_U8 tmp55__;
     tANI_U8 tmp56__;
+    tANI_U8 tmp57__;
     (void) pBuf; (void)ielen; /* Shutup the compiler */
     if (pDst->present) status = DOT11F_DUPLICATE_IE;
     pDst->present = 1;
     pDst->token = *pBuf;
     pBuf += 1;
     ielen -= (tANI_U8)1;
-    tmp54__ = *pBuf;
+    tmp55__ = *pBuf;
     pBuf += 1;
     ielen -= 1;
-    pDst->late = tmp54__ >> 0 & 0x1;
-    pDst->incapable = tmp54__ >> 1 & 0x1;
-    pDst->refused = tmp54__ >> 2 & 0x1;
-    pDst->unused = tmp54__ >> 3 & 0x1f;
+    pDst->late = tmp55__ >> 0 & 0x1;
+    pDst->incapable = tmp55__ >> 1 & 0x1;
+    pDst->refused = tmp55__ >> 2 & 0x1;
+    pDst->unused = tmp55__ >> 3 & 0x1f;
     pDst->type = *pBuf;
     pBuf += 1;
     ielen -= (tANI_U8)1;
@@ -3574,15 +3617,15 @@
                 framesntohs(pCtx, &pDst->report.Basic.meas_duration, pBuf, 0);
                 pBuf += 2;
                 ielen -= (tANI_U8)2;
-                tmp55__ = *pBuf;
+                tmp56__ = *pBuf;
                 pBuf += 1;
                 ielen -= 1;
-                pDst->report.Basic.bss = tmp55__ >> 0 & 0x1;
-                pDst->report.Basic.ofdm_preamble = tmp55__ >> 1 & 0x1;
-                pDst->report.Basic.unid_signal = tmp55__ >> 2 & 0x1;
-                pDst->report.Basic.rader = tmp55__ >> 3 & 0x1;
-                pDst->report.Basic.unmeasured = tmp55__ >> 4 & 0x1;
-                pDst->report.Basic.unused = tmp55__ >> 5 & 0x7;
+                pDst->report.Basic.bss = tmp56__ >> 0 & 0x1;
+                pDst->report.Basic.ofdm_preamble = tmp56__ >> 1 & 0x1;
+                pDst->report.Basic.unid_signal = tmp56__ >> 2 & 0x1;
+                pDst->report.Basic.rader = tmp56__ >> 3 & 0x1;
+                pDst->report.Basic.unmeasured = tmp56__ >> 4 & 0x1;
+                pDst->report.Basic.unused = tmp56__ >> 5 & 0x7;
             break;
             case 1:
                 pDst->report.CCA.channel = *pBuf;
@@ -3646,11 +3689,11 @@
                 framesntohs(pCtx, &pDst->report.Beacon.meas_duration, pBuf, 0);
                 pBuf += 2;
                 ielen -= (tANI_U8)2;
-                tmp56__ = *pBuf;
+                tmp57__ = *pBuf;
                 pBuf += 1;
                 ielen -= 1;
-                pDst->report.Beacon.condensed_PHY = tmp56__ >> 0 & 0x7f;
-                pDst->report.Beacon.reported_frame_type = tmp56__ >> 7 & 0x1;
+                pDst->report.Beacon.condensed_PHY = tmp57__ >> 0 & 0x7f;
+                pDst->report.Beacon.reported_frame_type = tmp57__ >> 7 & 0x1;
                 pDst->report.Beacon.RCPI = *pBuf;
                 pBuf += 1;
                 ielen -= (tANI_U8)1;
@@ -3680,7 +3723,7 @@
     return status;
 } /* End dot11fUnpackIeMeasurementReport. */
 
-#define SigIeMeasurementReport ( 0x0047 )
+#define SigIeMeasurementReport ( 0x0049 )
 
 
 static const tFFDefn FFS_measurement_requestBeacon[ ] = {
@@ -3699,22 +3742,22 @@
 tANI_U32 dot11fUnpackIeMeasurementRequest(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEMeasurementRequest *pDst)
 {
     tANI_U32 status = DOT11F_PARSE_SUCCESS;
-    tANI_U8 tmp57__;
+    tANI_U8 tmp58__;
     (void) pBuf; (void)ielen; /* Shutup the compiler */
     if (pDst->present) status = DOT11F_DUPLICATE_IE;
     pDst->present = 1;
     pDst->measurement_token = *pBuf;
     pBuf += 1;
     ielen -= (tANI_U8)1;
-    tmp57__ = *pBuf;
+    tmp58__ = *pBuf;
     pBuf += 1;
     ielen -= 1;
-    pDst->parallel = tmp57__ >> 0 & 0x1;
-    pDst->enable = tmp57__ >> 1 & 0x1;
-    pDst->request = tmp57__ >> 2 & 0x1;
-    pDst->report = tmp57__ >> 3 & 0x1;
-    pDst->durationMandatory = tmp57__ >> 4 & 0x1;
-    pDst->unused = tmp57__ >> 5 & 0x7;
+    pDst->parallel = tmp58__ >> 0 & 0x1;
+    pDst->enable = tmp58__ >> 1 & 0x1;
+    pDst->request = tmp58__ >> 2 & 0x1;
+    pDst->report = tmp58__ >> 3 & 0x1;
+    pDst->durationMandatory = tmp58__ >> 4 & 0x1;
+    pDst->unused = tmp58__ >> 5 & 0x7;
     pDst->measurement_type = *pBuf;
     pBuf += 1;
     ielen -= (tANI_U8)1;
@@ -3785,28 +3828,28 @@
     return status;
 } /* End dot11fUnpackIeMeasurementRequest. */
 
-#define SigIeMeasurementRequest ( 0x0048 )
+#define SigIeMeasurementRequest ( 0x004a )
 
 
 tANI_U32 dot11fUnpackIeMobilityDomain(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEMobilityDomain *pDst)
 {
     tANI_U32 status = DOT11F_PARSE_SUCCESS;
-    tANI_U8 tmp58__;
+    tANI_U8 tmp59__;
     (void) pBuf; (void)ielen; /* Shutup the compiler */
     if (pDst->present) status = DOT11F_DUPLICATE_IE;
     pDst->present = 1;
     framesntohs(pCtx, &pDst->MDID, pBuf, 0);
     pBuf += 2;
     ielen -= (tANI_U8)2;
-    tmp58__ = *pBuf;
-    pDst->overDSCap = tmp58__ >> 0 & 0x1;
-    pDst->resourceReqCap = tmp58__ >> 1 & 0x1;
-    pDst->reserved = tmp58__ >> 2 & 0x3f;
+    tmp59__ = *pBuf;
+    pDst->overDSCap = tmp59__ >> 0 & 0x1;
+    pDst->resourceReqCap = tmp59__ >> 1 & 0x1;
+    pDst->reserved = tmp59__ >> 2 & 0x3f;
     (void)pCtx;
     return status;
 } /* End dot11fUnpackIeMobilityDomain. */
 
-#define SigIeMobilityDomain ( 0x0049 )
+#define SigIeMobilityDomain ( 0x004b )
 
 
     static const tFFDefn FFS_NeighborReport[ ] = {
@@ -3825,31 +3868,31 @@
 tANI_U32 dot11fUnpackIeNeighborReport(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIENeighborReport *pDst)
 {
     tANI_U32 status = DOT11F_PARSE_SUCCESS;
-    tANI_U8 tmp59__;
     tANI_U8 tmp60__;
+    tANI_U8 tmp61__;
     (void) pBuf; (void)ielen; /* Shutup the compiler */
     if (pDst->present) status = DOT11F_DUPLICATE_IE;
     pDst->present = 1;
     DOT11F_MEMCPY(pCtx, pDst->bssid, pBuf, 6);
     pBuf += 6;
     ielen -= (tANI_U8)6;
-    tmp59__ = *pBuf;
-    pBuf += 1;
-    ielen -= 1;
-    pDst->APReachability = tmp59__ >> 0 & 0x3;
-    pDst->Security = tmp59__ >> 2 & 0x1;
-    pDst->KeyScope = tmp59__ >> 3 & 0x1;
-    pDst->SpecMgmtCap = tmp59__ >> 4 & 0x1;
-    pDst->QosCap = tmp59__ >> 5 & 0x1;
-    pDst->apsd = tmp59__ >> 6 & 0x1;
-    pDst->rrm = tmp59__ >> 7 & 0x1;
     tmp60__ = *pBuf;
     pBuf += 1;
     ielen -= 1;
-    pDst->DelayedBA = tmp60__ >> 0 & 0x1;
-    pDst->ImmBA = tmp60__ >> 1 & 0x1;
-    pDst->MobilityDomain = tmp60__ >> 2 & 0x1;
-    pDst->reserved = tmp60__ >> 3 & 0x1f;
+    pDst->APReachability = tmp60__ >> 0 & 0x3;
+    pDst->Security = tmp60__ >> 2 & 0x1;
+    pDst->KeyScope = tmp60__ >> 3 & 0x1;
+    pDst->SpecMgmtCap = tmp60__ >> 4 & 0x1;
+    pDst->QosCap = tmp60__ >> 5 & 0x1;
+    pDst->apsd = tmp60__ >> 6 & 0x1;
+    pDst->rrm = tmp60__ >> 7 & 0x1;
+    tmp61__ = *pBuf;
+    pBuf += 1;
+    ielen -= 1;
+    pDst->DelayedBA = tmp61__ >> 0 & 0x1;
+    pDst->ImmBA = tmp61__ >> 1 & 0x1;
+    pDst->MobilityDomain = tmp61__ >> 2 & 0x1;
+    pDst->reserved = tmp61__ >> 3 & 0x1f;
     framesntohs(pCtx, &pDst->reserved1, pBuf, 0);
     pBuf += 2;
     ielen -= (tANI_U8)2;
@@ -3873,7 +3916,7 @@
     return status;
 } /* End dot11fUnpackIeNeighborReport. */
 
-#define SigIeNeighborReport ( 0x004a )
+#define SigIeNeighborReport ( 0x004c )
 
 
 tANI_U32 dot11fUnpackIeOBSSScanParameters(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEOBSSScanParameters *pDst)
@@ -3905,26 +3948,26 @@
     return status;
 } /* End dot11fUnpackIeOBSSScanParameters. */
 
-#define SigIeOBSSScanParameters ( 0x004b )
+#define SigIeOBSSScanParameters ( 0x004d )
 
 
 tANI_U32 dot11fUnpackIeOperatingMode(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEOperatingMode *pDst)
 {
     tANI_U32 status = DOT11F_PARSE_SUCCESS;
-    tANI_U8 tmp61__;
+    tANI_U8 tmp62__;
     (void) pBuf; (void)ielen; /* Shutup the compiler */
     if (pDst->present) status = DOT11F_DUPLICATE_IE;
     pDst->present = 1;
-    tmp61__ = *pBuf;
-    pDst->chanWidth = tmp61__ >> 0 & 0x3;
-    pDst->reserved = tmp61__ >> 2 & 0x3;
-    pDst->rxNSS = tmp61__ >> 4 & 0x7;
-    pDst->rxNSSType = tmp61__ >> 7 & 0x1;
+    tmp62__ = *pBuf;
+    pDst->chanWidth = tmp62__ >> 0 & 0x3;
+    pDst->reserved = tmp62__ >> 2 & 0x3;
+    pDst->rxNSS = tmp62__ >> 4 & 0x7;
+    pDst->rxNSSType = tmp62__ >> 7 & 0x1;
     (void)pCtx;
     return status;
 } /* End dot11fUnpackIeOperatingMode. */
 
-#define SigIeOperatingMode ( 0x004c )
+#define SigIeOperatingMode ( 0x004e )
 
 
     static const tTLVDefn TLVS_P2PAssocReq[ ] = {
@@ -3943,7 +3986,7 @@
     return status;
 } /* End dot11fUnpackIeP2PAssocReq. */
 
-#define SigIeP2PAssocReq ( 0x004d )
+#define SigIeP2PAssocReq ( 0x004f )
 
 
     static const tTLVDefn TLVS_P2PAssocRes[ ] = {
@@ -3961,7 +4004,7 @@
     return status;
 } /* End dot11fUnpackIeP2PAssocRes. */
 
-#define SigIeP2PAssocRes ( 0x004e )
+#define SigIeP2PAssocRes ( 0x0050 )
 
 
     static const tTLVDefn TLVS_P2PBeacon[ ] = {
@@ -3980,7 +4023,7 @@
     return status;
 } /* End dot11fUnpackIeP2PBeacon. */
 
-#define SigIeP2PBeacon ( 0x004f )
+#define SigIeP2PBeacon ( 0x0051 )
 
 
     static const tTLVDefn TLVS_P2PBeaconProbeRes[ ] = {
@@ -4002,7 +4045,7 @@
     return status;
 } /* End dot11fUnpackIeP2PBeaconProbeRes. */
 
-#define SigIeP2PBeaconProbeRes ( 0x0050 )
+#define SigIeP2PBeaconProbeRes ( 0x0052 )
 
 
     static const tTLVDefn TLVS_P2PDeAuth[ ] = {
@@ -4019,7 +4062,7 @@
     return status;
 } /* End dot11fUnpackIeP2PDeAuth. */
 
-#define SigIeP2PDeAuth ( 0x0051 )
+#define SigIeP2PDeAuth ( 0x0053 )
 
 
     static const tTLVDefn TLVS_P2PDeviceDiscoverabilityReq[ ] = {
@@ -4037,7 +4080,7 @@
     return status;
 } /* End dot11fUnpackIeP2PDeviceDiscoverabilityReq. */
 
-#define SigIeP2PDeviceDiscoverabilityReq ( 0x0052 )
+#define SigIeP2PDeviceDiscoverabilityReq ( 0x0054 )
 
 
     static const tTLVDefn TLVS_P2PDeviceDiscoverabilityRes[ ] = {
@@ -4054,7 +4097,7 @@
     return status;
 } /* End dot11fUnpackIeP2PDeviceDiscoverabilityRes. */
 
-#define SigIeP2PDeviceDiscoverabilityRes ( 0x0053 )
+#define SigIeP2PDeviceDiscoverabilityRes ( 0x0055 )
 
 
     static const tTLVDefn TLVS_P2PDisAssoc[ ] = {
@@ -4071,7 +4114,7 @@
     return status;
 } /* End dot11fUnpackIeP2PDisAssoc. */
 
-#define SigIeP2PDisAssoc ( 0x0054 )
+#define SigIeP2PDisAssoc ( 0x0056 )
 
 
     static const tTLVDefn TLVS_P2PGONegCnf[ ] = {
@@ -4092,7 +4135,7 @@
     return status;
 } /* End dot11fUnpackIeP2PGONegCnf. */
 
-#define SigIeP2PGONegCnf ( 0x0055 )
+#define SigIeP2PGONegCnf ( 0x0057 )
 
 
     static const tTLVDefn TLVS_P2PGONegReq[ ] = {
@@ -4117,7 +4160,7 @@
     return status;
 } /* End dot11fUnpackIeP2PGONegReq. */
 
-#define SigIeP2PGONegReq ( 0x0056 )
+#define SigIeP2PGONegReq ( 0x0058 )
 
 
     static const tTLVDefn TLVS_P2PGONegRes[ ] = {
@@ -4142,7 +4185,7 @@
     return status;
 } /* End dot11fUnpackIeP2PGONegRes. */
 
-#define SigIeP2PGONegRes ( 0x0057 )
+#define SigIeP2PGONegRes ( 0x0059 )
 
 
     static const tTLVDefn TLVS_P2PGONegWPS[ ] = {
@@ -4160,7 +4203,7 @@
     return status;
 } /* End dot11fUnpackIeP2PGONegWPS. */
 
-#define SigIeP2PGONegWPS ( 0x0058 )
+#define SigIeP2PGONegWPS ( 0x005a )
 
 
 tANI_U32 dot11fUnpackIeP2PIEOpaque(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEP2PIEOpaque *pDst)
@@ -4180,7 +4223,7 @@
     return status;
 } /* End dot11fUnpackIeP2PIEOpaque. */
 
-#define SigIeP2PIEOpaque ( 0x0059 )
+#define SigIeP2PIEOpaque ( 0x005b )
 
 
     static const tTLVDefn TLVS_P2PInvitationReq[ ] = {
@@ -4203,7 +4246,7 @@
     return status;
 } /* End dot11fUnpackIeP2PInvitationReq. */
 
-#define SigIeP2PInvitationReq ( 0x005a )
+#define SigIeP2PInvitationReq ( 0x005c )
 
 
     static const tTLVDefn TLVS_P2PInvitationRes[ ] = {
@@ -4224,7 +4267,7 @@
     return status;
 } /* End dot11fUnpackIeP2PInvitationRes. */
 
-#define SigIeP2PInvitationRes ( 0x005b )
+#define SigIeP2PInvitationRes ( 0x005d )
 
 
     static const tTLVDefn TLVS_P2PNoticeOfAbsence[ ] = {
@@ -4241,7 +4284,7 @@
     return status;
 } /* End dot11fUnpackIeP2PNoticeOfAbsence. */
 
-#define SigIeP2PNoticeOfAbsence ( 0x005c )
+#define SigIeP2PNoticeOfAbsence ( 0x005e )
 
 
     static const tTLVDefn TLVS_P2PPresenceResponse[ ] = {
@@ -4259,7 +4302,7 @@
     return status;
 } /* End dot11fUnpackIeP2PPresenceResponse. */
 
-#define SigIeP2PPresenceResponse ( 0x005d )
+#define SigIeP2PPresenceResponse ( 0x005f )
 
 
     static const tTLVDefn TLVS_P2PProbeReq[ ] = {
@@ -4280,7 +4323,7 @@
     return status;
 } /* End dot11fUnpackIeP2PProbeReq. */
 
-#define SigIeP2PProbeReq ( 0x005e )
+#define SigIeP2PProbeReq ( 0x0060 )
 
 
     static const tTLVDefn TLVS_P2PProbeRes[ ] = {
@@ -4301,7 +4344,7 @@
     return status;
 } /* End dot11fUnpackIeP2PProbeRes. */
 
-#define SigIeP2PProbeRes ( 0x005f )
+#define SigIeP2PProbeRes ( 0x0061 )
 
 
     static const tTLVDefn TLVS_P2PProvisionDiscoveryReq[ ] = {
@@ -4320,7 +4363,7 @@
     return status;
 } /* End dot11fUnpackIeP2PProvisionDiscoveryReq. */
 
-#define SigIeP2PProvisionDiscoveryReq ( 0x0060 )
+#define SigIeP2PProvisionDiscoveryReq ( 0x0062 )
 
 
     static const tTLVDefn TLVS_P2PWSCProvisionDiscoveryRes[ ] = {
@@ -4337,7 +4380,7 @@
     return status;
 } /* End dot11fUnpackIeP2PWSCProvisionDiscoveryRes. */
 
-#define SigIeP2PWSCProvisionDiscoveryRes ( 0x0061 )
+#define SigIeP2PWSCProvisionDiscoveryRes ( 0x0063 )
 
 
 tANI_U32 dot11fUnpackIePTIControl(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEPTIControl *pDst)
@@ -4354,27 +4397,27 @@
     return status;
 } /* End dot11fUnpackIePTIControl. */
 
-#define SigIePTIControl ( 0x0062 )
+#define SigIePTIControl ( 0x0064 )
 
 
 tANI_U32 dot11fUnpackIePUBufferStatus(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEPUBufferStatus *pDst)
 {
     tANI_U32 status = DOT11F_PARSE_SUCCESS;
-    tANI_U8 tmp62__;
+    tANI_U8 tmp63__;
     (void) pBuf; (void)ielen; /* Shutup the compiler */
     if (pDst->present) status = DOT11F_DUPLICATE_IE;
     pDst->present = 1;
-    tmp62__ = *pBuf;
-    pDst->ac_bk_traffic_aval = tmp62__ >> 0 & 0x1;
-    pDst->ac_be_traffic_aval = tmp62__ >> 1 & 0x1;
-    pDst->ac_vi_traffic_aval = tmp62__ >> 2 & 0x1;
-    pDst->ac_vo_traffic_aval = tmp62__ >> 3 & 0x1;
-    pDst->reserved = tmp62__ >> 4 & 0xf;
+    tmp63__ = *pBuf;
+    pDst->ac_bk_traffic_aval = tmp63__ >> 0 & 0x1;
+    pDst->ac_be_traffic_aval = tmp63__ >> 1 & 0x1;
+    pDst->ac_vi_traffic_aval = tmp63__ >> 2 & 0x1;
+    pDst->ac_vo_traffic_aval = tmp63__ >> 3 & 0x1;
+    pDst->reserved = tmp63__ >> 4 & 0xf;
     (void)pCtx;
     return status;
 } /* End dot11fUnpackIePUBufferStatus. */
 
-#define SigIePUBufferStatus ( 0x0063 )
+#define SigIePUBufferStatus ( 0x0065 )
 
 
 tANI_U32 dot11fUnpackIePowerCaps(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEPowerCaps *pDst)
@@ -4391,7 +4434,7 @@
     return status;
 } /* End dot11fUnpackIePowerCaps. */
 
-#define SigIePowerCaps ( 0x0064 )
+#define SigIePowerCaps ( 0x0066 )
 
 
 tANI_U32 dot11fUnpackIePowerConstraints(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEPowerConstraints *pDst)
@@ -4405,7 +4448,7 @@
     return status;
 } /* End dot11fUnpackIePowerConstraints. */
 
-#define SigIePowerConstraints ( 0x0065 )
+#define SigIePowerConstraints ( 0x0067 )
 
 
 tANI_U32 dot11fUnpackIeQBSSLoad(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEQBSSLoad *pDst)
@@ -4425,49 +4468,49 @@
     return status;
 } /* End dot11fUnpackIeQBSSLoad. */
 
-#define SigIeQBSSLoad ( 0x0066 )
+#define SigIeQBSSLoad ( 0x0068 )
 
 
 tANI_U32 dot11fUnpackIeQOSCapsAp(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEQOSCapsAp *pDst)
 {
     tANI_U32 status = DOT11F_PARSE_SUCCESS;
-    tANI_U8 tmp63__;
-    (void) pBuf; (void)ielen; /* Shutup the compiler */
-    if (pDst->present) status = DOT11F_DUPLICATE_IE;
-    pDst->present = 1;
-    tmp63__ = *pBuf;
-    pDst->count = tmp63__ >> 0 & 0xf;
-    pDst->qack = tmp63__ >> 4 & 0x1;
-    pDst->qreq = tmp63__ >> 5 & 0x1;
-    pDst->txopreq = tmp63__ >> 6 & 0x1;
-    pDst->reserved = tmp63__ >> 7 & 0x1;
-    (void)pCtx;
-    return status;
-} /* End dot11fUnpackIeQOSCapsAp. */
-
-#define SigIeQOSCapsAp ( 0x0067 )
-
-
-tANI_U32 dot11fUnpackIeQOSCapsStation(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEQOSCapsStation *pDst)
-{
-    tANI_U32 status = DOT11F_PARSE_SUCCESS;
     tANI_U8 tmp64__;
     (void) pBuf; (void)ielen; /* Shutup the compiler */
     if (pDst->present) status = DOT11F_DUPLICATE_IE;
     pDst->present = 1;
     tmp64__ = *pBuf;
-    pDst->acvo_uapsd = tmp64__ >> 0 & 0x1;
-    pDst->acvi_uapsd = tmp64__ >> 1 & 0x1;
-    pDst->acbk_uapsd = tmp64__ >> 2 & 0x1;
-    pDst->acbe_uapsd = tmp64__ >> 3 & 0x1;
+    pDst->count = tmp64__ >> 0 & 0xf;
     pDst->qack = tmp64__ >> 4 & 0x1;
-    pDst->max_sp_length = tmp64__ >> 5 & 0x3;
-    pDst->more_data_ack = tmp64__ >> 7 & 0x1;
+    pDst->qreq = tmp64__ >> 5 & 0x1;
+    pDst->txopreq = tmp64__ >> 6 & 0x1;
+    pDst->reserved = tmp64__ >> 7 & 0x1;
+    (void)pCtx;
+    return status;
+} /* End dot11fUnpackIeQOSCapsAp. */
+
+#define SigIeQOSCapsAp ( 0x0069 )
+
+
+tANI_U32 dot11fUnpackIeQOSCapsStation(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEQOSCapsStation *pDst)
+{
+    tANI_U32 status = DOT11F_PARSE_SUCCESS;
+    tANI_U8 tmp65__;
+    (void) pBuf; (void)ielen; /* Shutup the compiler */
+    if (pDst->present) status = DOT11F_DUPLICATE_IE;
+    pDst->present = 1;
+    tmp65__ = *pBuf;
+    pDst->acvo_uapsd = tmp65__ >> 0 & 0x1;
+    pDst->acvi_uapsd = tmp65__ >> 1 & 0x1;
+    pDst->acbk_uapsd = tmp65__ >> 2 & 0x1;
+    pDst->acbe_uapsd = tmp65__ >> 3 & 0x1;
+    pDst->qack = tmp65__ >> 4 & 0x1;
+    pDst->max_sp_length = tmp65__ >> 5 & 0x3;
+    pDst->more_data_ack = tmp65__ >> 7 & 0x1;
     (void)pCtx;
     return status;
 } /* End dot11fUnpackIeQOSCapsStation. */
 
-#define SigIeQOSCapsStation ( 0x0068 )
+#define SigIeQOSCapsStation ( 0x006a )
 
 
 tANI_U32 dot11fUnpackIeQosMapSet(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEQosMapSet *pDst)
@@ -4487,7 +4530,7 @@
     return status;
 } /* End dot11fUnpackIeQosMapSet. */
 
-#define SigIeQosMapSet ( 0x0069 )
+#define SigIeQosMapSet ( 0x006b )
 
 
 tANI_U32 dot11fUnpackIeQuiet(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEQuiet *pDst)
@@ -4510,7 +4553,7 @@
     return status;
 } /* End dot11fUnpackIeQuiet. */
 
-#define SigIeQuiet ( 0x006a )
+#define SigIeQuiet ( 0x006c )
 
 
 tANI_U32 dot11fUnpackIeRCPIIE(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIERCPIIE *pDst)
@@ -4524,7 +4567,7 @@
     return status;
 } /* End dot11fUnpackIeRCPIIE. */
 
-#define SigIeRCPIIE ( 0x006b )
+#define SigIeRCPIIE ( 0x006d )
 
 
     static const tFFDefn FFS_RICDataDesc[ ] = {
@@ -4564,7 +4607,7 @@
     return status;
 } /* End dot11fUnpackIeRICDataDesc. */
 
-#define SigIeRICDataDesc ( 0x006c )
+#define SigIeRICDataDesc ( 0x006e )
 
 
 tANI_U32 dot11fUnpackIeRSN(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIERSN *pDst)
@@ -4667,7 +4710,7 @@
     return status;
 } /* End dot11fUnpackIeRSN. */
 
-#define SigIeRSN ( 0x006d )
+#define SigIeRSN ( 0x006f )
 
 
 tANI_U32 dot11fUnpackIeRSNIIE(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIERSNIIE *pDst)
@@ -4681,7 +4724,7 @@
     return status;
 } /* End dot11fUnpackIeRSNIIE. */
 
-#define SigIeRSNIIE ( 0x006e )
+#define SigIeRSNIIE ( 0x0070 )
 
 
 tANI_U32 dot11fUnpackIeRSNOpaque(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIERSNOpaque *pDst)
@@ -4701,7 +4744,7 @@
     return status;
 } /* End dot11fUnpackIeRSNOpaque. */
 
-#define SigIeRSNOpaque ( 0x006f )
+#define SigIeRSNOpaque ( 0x0071 )
 
 
 tANI_U32 dot11fUnpackIeSuppChannels(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIESuppChannels *pDst)
@@ -4721,7 +4764,7 @@
     return status;
 } /* End dot11fUnpackIeSuppChannels. */
 
-#define SigIeSuppChannels ( 0x0070 )
+#define SigIeSuppChannels ( 0x0072 )
 
 
 tANI_U32 dot11fUnpackIeSuppOperatingClasses(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIESuppOperatingClasses *pDst)
@@ -4741,7 +4784,7 @@
     return status;
 } /* End dot11fUnpackIeSuppOperatingClasses. */
 
-#define SigIeSuppOperatingClasses ( 0x0071 )
+#define SigIeSuppOperatingClasses ( 0x0073 )
 
 
 tANI_U32 dot11fUnpackIeSuppRates(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIESuppRates *pDst)
@@ -4769,7 +4812,7 @@
     return status;
 } /* End dot11fUnpackIeSuppRates. */
 
-#define SigIeSuppRates ( 0x0072 )
+#define SigIeSuppRates ( 0x0074 )
 
 
 tANI_U32 dot11fUnpackIeTIM(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIETIM *pDst)
@@ -4798,7 +4841,7 @@
     return status;
 } /* End dot11fUnpackIeTIM. */
 
-#define SigIeTIM ( 0x0073 )
+#define SigIeTIM ( 0x0075 )
 
 
 tANI_U32 dot11fUnpackIeTPCReport(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIETPCReport *pDst)
@@ -4815,7 +4858,7 @@
     return status;
 } /* End dot11fUnpackIeTPCReport. */
 
-#define SigIeTPCReport ( 0x0074 )
+#define SigIeTPCReport ( 0x0076 )
 
 
 tANI_U32 dot11fUnpackIeTPCRequest(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIETPCRequest *pDst)
@@ -4828,7 +4871,7 @@
     return status;
 } /* End dot11fUnpackIeTPCRequest. */
 
-#define SigIeTPCRequest ( 0x0075 )
+#define SigIeTPCRequest ( 0x0077 )
 
 
 tANI_U32 dot11fUnpackIeTimeoutInterval(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIETimeoutInterval *pDst)
@@ -4845,60 +4888,60 @@
     return status;
 } /* End dot11fUnpackIeTimeoutInterval. */
 
-#define SigIeTimeoutInterval ( 0x0076 )
+#define SigIeTimeoutInterval ( 0x0078 )
 
 
 tANI_U32 dot11fUnpackIeVHTCaps(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEVHTCaps *pDst)
 {
     tANI_U32 status = DOT11F_PARSE_SUCCESS;
-    tANI_U32 tmp65__;
-    tANI_U16 tmp66__;
+    tANI_U32 tmp66__;
     tANI_U16 tmp67__;
+    tANI_U16 tmp68__;
     (void) pBuf; (void)ielen; /* Shutup the compiler */
     if (pDst->present) status = DOT11F_DUPLICATE_IE;
     pDst->present = 1;
-    framesntohl(pCtx, &tmp65__, pBuf, 0);
+    framesntohl(pCtx, &tmp66__, pBuf, 0);
     pBuf += 4;
     ielen -= 4;
-    pDst->maxMPDULen = tmp65__ >> 0 & 0x3;
-    pDst->supportedChannelWidthSet = tmp65__ >> 2 & 0x3;
-    pDst->ldpcCodingCap = tmp65__ >> 4 & 0x1;
-    pDst->shortGI80MHz = tmp65__ >> 5 & 0x1;
-    pDst->shortGI160and80plus80MHz = tmp65__ >> 6 & 0x1;
-    pDst->txSTBC = tmp65__ >> 7 & 0x1;
-    pDst->rxSTBC = tmp65__ >> 8 & 0x7;
-    pDst->suBeamFormerCap = tmp65__ >> 11 & 0x1;
-    pDst->suBeamformeeCap = tmp65__ >> 12 & 0x1;
-    pDst->csnofBeamformerAntSup = tmp65__ >> 13 & 0x7;
-    pDst->numSoundingDim = tmp65__ >> 16 & 0x7;
-    pDst->muBeamformerCap = tmp65__ >> 19 & 0x1;
-    pDst->muBeamformeeCap = tmp65__ >> 20 & 0x1;
-    pDst->vhtTXOPPS = tmp65__ >> 21 & 0x1;
-    pDst->htcVHTCap = tmp65__ >> 22 & 0x1;
-    pDst->maxAMPDULenExp = tmp65__ >> 23 & 0x7;
-    pDst->vhtLinkAdaptCap = tmp65__ >> 26 & 0x3;
-    pDst->rxAntPattern = tmp65__ >> 28 & 0x1;
-    pDst->txAntPattern = tmp65__ >> 29 & 0x1;
-    pDst->reserved1 = tmp65__ >> 30 & 0x3;
+    pDst->maxMPDULen = tmp66__ >> 0 & 0x3;
+    pDst->supportedChannelWidthSet = tmp66__ >> 2 & 0x3;
+    pDst->ldpcCodingCap = tmp66__ >> 4 & 0x1;
+    pDst->shortGI80MHz = tmp66__ >> 5 & 0x1;
+    pDst->shortGI160and80plus80MHz = tmp66__ >> 6 & 0x1;
+    pDst->txSTBC = tmp66__ >> 7 & 0x1;
+    pDst->rxSTBC = tmp66__ >> 8 & 0x7;
+    pDst->suBeamFormerCap = tmp66__ >> 11 & 0x1;
+    pDst->suBeamformeeCap = tmp66__ >> 12 & 0x1;
+    pDst->csnofBeamformerAntSup = tmp66__ >> 13 & 0x7;
+    pDst->numSoundingDim = tmp66__ >> 16 & 0x7;
+    pDst->muBeamformerCap = tmp66__ >> 19 & 0x1;
+    pDst->muBeamformeeCap = tmp66__ >> 20 & 0x1;
+    pDst->vhtTXOPPS = tmp66__ >> 21 & 0x1;
+    pDst->htcVHTCap = tmp66__ >> 22 & 0x1;
+    pDst->maxAMPDULenExp = tmp66__ >> 23 & 0x7;
+    pDst->vhtLinkAdaptCap = tmp66__ >> 26 & 0x3;
+    pDst->rxAntPattern = tmp66__ >> 28 & 0x1;
+    pDst->txAntPattern = tmp66__ >> 29 & 0x1;
+    pDst->reserved1 = tmp66__ >> 30 & 0x3;
     framesntohs(pCtx, &pDst->rxMCSMap, pBuf, 0);
     pBuf += 2;
     ielen -= (tANI_U8)2;
-    framesntohs(pCtx, &tmp66__, pBuf, 0);
+    framesntohs(pCtx, &tmp67__, pBuf, 0);
     pBuf += 2;
     ielen -= 2;
-    pDst->rxHighSupDataRate = tmp66__ >> 0 & 0x1fff;
-    pDst->reserved2 = tmp66__ >> 13 & 0x7;
+    pDst->rxHighSupDataRate = tmp67__ >> 0 & 0x1fff;
+    pDst->reserved2 = tmp67__ >> 13 & 0x7;
     framesntohs(pCtx, &pDst->txMCSMap, pBuf, 0);
     pBuf += 2;
     ielen -= (tANI_U8)2;
-    framesntohs(pCtx, &tmp67__, pBuf, 0);
-    pDst->txSupDataRate = tmp67__ >> 0 & 0x1fff;
-    pDst->reserved3 = tmp67__ >> 13 & 0x7;
+    framesntohs(pCtx, &tmp68__, pBuf, 0);
+    pDst->txSupDataRate = tmp68__ >> 0 & 0x1fff;
+    pDst->reserved3 = tmp68__ >> 13 & 0x7;
     (void)pCtx;
     return status;
 } /* End dot11fUnpackIeVHTCaps. */
 
-#define SigIeVHTCaps ( 0x0077 )
+#define SigIeVHTCaps ( 0x0079 )
 
 
 tANI_U32 dot11fUnpackIeVHTExtBssLoad(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEVHTExtBssLoad *pDst)
@@ -4924,7 +4967,7 @@
     return status;
 } /* End dot11fUnpackIeVHTExtBssLoad. */
 
-#define SigIeVHTExtBssLoad ( 0x0078 )
+#define SigIeVHTExtBssLoad ( 0x007a )
 
 
 tANI_U32 dot11fUnpackIeVHTOperation(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEVHTOperation *pDst)
@@ -4947,13 +4990,13 @@
     return status;
 } /* End dot11fUnpackIeVHTOperation. */
 
-#define SigIeVHTOperation ( 0x0079 )
+#define SigIeVHTOperation ( 0x007b )
 
 
 tANI_U32 dot11fUnpackIeWAPI(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWAPI *pDst)
 {
     tANI_U32 status = DOT11F_PARSE_SUCCESS;
-    tANI_U16 tmp68__;
+    tANI_U16 tmp69__;
     (void) pBuf; (void)ielen; /* Shutup the compiler */
     if (pDst->present) status = DOT11F_DUPLICATE_IE;
     pDst->present = 1;
@@ -4990,11 +5033,11 @@
     DOT11F_MEMCPY(pCtx, pDst->multicast_cipher_suite, pBuf, 4);
     pBuf += 4;
     ielen -= (tANI_U8)4;
-    framesntohs(pCtx, &tmp68__, pBuf, 0);
+    framesntohs(pCtx, &tmp69__, pBuf, 0);
     pBuf += 2;
     ielen -= 2;
-    pDst->preauth = tmp68__ >> 0 & 0x1;
-    pDst->reserved = tmp68__ >> 1 & 0x7fff;
+    pDst->preauth = tmp69__ >> 0 & 0x1;
+    pDst->reserved = tmp69__ >> 1 & 0x7fff;
     if ( ! ielen )
     {
         pDst->bkid_count = 0U;
@@ -5016,7 +5059,7 @@
     return status;
 } /* End dot11fUnpackIeWAPI. */
 
-#define SigIeWAPI ( 0x007a )
+#define SigIeWAPI ( 0x007c )
 
 
 tANI_U32 dot11fUnpackIeWAPIOpaque(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWAPIOpaque *pDst)
@@ -5036,7 +5079,7 @@
     return status;
 } /* End dot11fUnpackIeWAPIOpaque. */
 
-#define SigIeWAPIOpaque ( 0x007b )
+#define SigIeWAPIOpaque ( 0x007d )
 
 
 tANI_U32 dot11fUnpackIeWFATPC(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWFATPC *pDst)
@@ -5053,7 +5096,7 @@
     return status;
 } /* End dot11fUnpackIeWFATPC. */
 
-#define SigIeWFATPC ( 0x007c )
+#define SigIeWFATPC ( 0x007e )
 
 
 tANI_U32 dot11fUnpackIeWFDIEOpaque(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWFDIEOpaque *pDst)
@@ -5073,13 +5116,13 @@
     return status;
 } /* End dot11fUnpackIeWFDIEOpaque. */
 
-#define SigIeWFDIEOpaque ( 0x007d )
+#define SigIeWFDIEOpaque ( 0x007f )
 
 
 tANI_U32 dot11fUnpackIeWMMCaps(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWMMCaps *pDst)
 {
     tANI_U32 status = DOT11F_PARSE_SUCCESS;
-    tANI_U8 tmp69__;
+    tANI_U8 tmp70__;
     (void) pBuf; (void)ielen; /* Shutup the compiler */
     if (pDst->present) status = DOT11F_DUPLICATE_IE;
     pDst->present = 1;
@@ -5091,43 +5134,22 @@
             pDst->present = 0;
             return ( status | DOT11F_BAD_FIXED_VALUE );
     }
-    tmp69__ = *pBuf;
-    pDst->reserved = tmp69__ >> 0 & 0xf;
-    pDst->qack = tmp69__ >> 4 & 0x1;
-    pDst->queue_request = tmp69__ >> 5 & 0x1;
-    pDst->txop_request = tmp69__ >> 6 & 0x1;
-    pDst->more_ack = tmp69__ >> 7 & 0x1;
+    tmp70__ = *pBuf;
+    pDst->reserved = tmp70__ >> 0 & 0xf;
+    pDst->qack = tmp70__ >> 4 & 0x1;
+    pDst->queue_request = tmp70__ >> 5 & 0x1;
+    pDst->txop_request = tmp70__ >> 6 & 0x1;
+    pDst->more_ack = tmp70__ >> 7 & 0x1;
     (void)pCtx;
     return status;
 } /* End dot11fUnpackIeWMMCaps. */
 
-#define SigIeWMMCaps ( 0x007e )
+#define SigIeWMMCaps ( 0x0080 )
 
 
 tANI_U32 dot11fUnpackIeWMMInfoAp(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWMMInfoAp *pDst)
 {
     tANI_U32 status = DOT11F_PARSE_SUCCESS;
-    tANI_U8 tmp70__;
-    (void) pBuf; (void)ielen; /* Shutup the compiler */
-    if (pDst->present) status = DOT11F_DUPLICATE_IE;
-    pDst->present = 1;
-    pDst->version = *pBuf;
-    pBuf += 1;
-    ielen -= (tANI_U8)1;
-    tmp70__ = *pBuf;
-    pDst->param_set_count = tmp70__ >> 0 & 0xf;
-    pDst->reserved = tmp70__ >> 4 & 0x7;
-    pDst->uapsd = tmp70__ >> 7 & 0x1;
-    (void)pCtx;
-    return status;
-} /* End dot11fUnpackIeWMMInfoAp. */
-
-#define SigIeWMMInfoAp ( 0x007f )
-
-
-tANI_U32 dot11fUnpackIeWMMInfoStation(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWMMInfoStation *pDst)
-{
-    tANI_U32 status = DOT11F_PARSE_SUCCESS;
     tANI_U8 tmp71__;
     (void) pBuf; (void)ielen; /* Shutup the compiler */
     if (pDst->present) status = DOT11F_DUPLICATE_IE;
@@ -5136,24 +5158,44 @@
     pBuf += 1;
     ielen -= (tANI_U8)1;
     tmp71__ = *pBuf;
-    pDst->acvo_uapsd = tmp71__ >> 0 & 0x1;
-    pDst->acvi_uapsd = tmp71__ >> 1 & 0x1;
-    pDst->acbk_uapsd = tmp71__ >> 2 & 0x1;
-    pDst->acbe_uapsd = tmp71__ >> 3 & 0x1;
-    pDst->reserved1 = tmp71__ >> 4 & 0x1;
-    pDst->max_sp_length = tmp71__ >> 5 & 0x3;
-    pDst->reserved2 = tmp71__ >> 7 & 0x1;
+    pDst->param_set_count = tmp71__ >> 0 & 0xf;
+    pDst->reserved = tmp71__ >> 4 & 0x7;
+    pDst->uapsd = tmp71__ >> 7 & 0x1;
+    (void)pCtx;
+    return status;
+} /* End dot11fUnpackIeWMMInfoAp. */
+
+#define SigIeWMMInfoAp ( 0x0081 )
+
+
+tANI_U32 dot11fUnpackIeWMMInfoStation(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWMMInfoStation *pDst)
+{
+    tANI_U32 status = DOT11F_PARSE_SUCCESS;
+    tANI_U8 tmp72__;
+    (void) pBuf; (void)ielen; /* Shutup the compiler */
+    if (pDst->present) status = DOT11F_DUPLICATE_IE;
+    pDst->present = 1;
+    pDst->version = *pBuf;
+    pBuf += 1;
+    ielen -= (tANI_U8)1;
+    tmp72__ = *pBuf;
+    pDst->acvo_uapsd = tmp72__ >> 0 & 0x1;
+    pDst->acvi_uapsd = tmp72__ >> 1 & 0x1;
+    pDst->acbk_uapsd = tmp72__ >> 2 & 0x1;
+    pDst->acbe_uapsd = tmp72__ >> 3 & 0x1;
+    pDst->reserved1 = tmp72__ >> 4 & 0x1;
+    pDst->max_sp_length = tmp72__ >> 5 & 0x3;
+    pDst->reserved2 = tmp72__ >> 7 & 0x1;
     (void)pCtx;
     return status;
 } /* End dot11fUnpackIeWMMInfoStation. */
 
-#define SigIeWMMInfoStation ( 0x0080 )
+#define SigIeWMMInfoStation ( 0x0082 )
 
 
 tANI_U32 dot11fUnpackIeWMMParams(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWMMParams *pDst)
 {
     tANI_U32 status = DOT11F_PARSE_SUCCESS;
-    tANI_U8 tmp72__;
     tANI_U8 tmp73__;
     tANI_U8 tmp74__;
     tANI_U8 tmp75__;
@@ -5161,6 +5203,7 @@
     tANI_U8 tmp77__;
     tANI_U8 tmp78__;
     tANI_U8 tmp79__;
+    tANI_U8 tmp80__;
     (void) pBuf; (void)ielen; /* Shutup the compiler */
     if (pDst->present) status = DOT11F_DUPLICATE_IE;
     pDst->present = 1;
@@ -5178,69 +5221,69 @@
     pDst->reserved2 = *pBuf;
     pBuf += 1;
     ielen -= (tANI_U8)1;
-    tmp72__ = *pBuf;
-    pBuf += 1;
-    ielen -= 1;
-    pDst->acbe_aifsn = tmp72__ >> 0 & 0xf;
-    pDst->acbe_acm = tmp72__ >> 4 & 0x1;
-    pDst->acbe_aci = tmp72__ >> 5 & 0x3;
-    pDst->unused1 = tmp72__ >> 7 & 0x1;
     tmp73__ = *pBuf;
     pBuf += 1;
     ielen -= 1;
-    pDst->acbe_acwmin = tmp73__ >> 0 & 0xf;
-    pDst->acbe_acwmax = tmp73__ >> 4 & 0xf;
-    framesntohs(pCtx, &pDst->acbe_txoplimit, pBuf, 0);
-    pBuf += 2;
-    ielen -= (tANI_U8)2;
+    pDst->acbe_aifsn = tmp73__ >> 0 & 0xf;
+    pDst->acbe_acm = tmp73__ >> 4 & 0x1;
+    pDst->acbe_aci = tmp73__ >> 5 & 0x3;
+    pDst->unused1 = tmp73__ >> 7 & 0x1;
     tmp74__ = *pBuf;
     pBuf += 1;
     ielen -= 1;
-    pDst->acbk_aifsn = tmp74__ >> 0 & 0xf;
-    pDst->acbk_acm = tmp74__ >> 4 & 0x1;
-    pDst->acbk_aci = tmp74__ >> 5 & 0x3;
-    pDst->unused2 = tmp74__ >> 7 & 0x1;
+    pDst->acbe_acwmin = tmp74__ >> 0 & 0xf;
+    pDst->acbe_acwmax = tmp74__ >> 4 & 0xf;
+    framesntohs(pCtx, &pDst->acbe_txoplimit, pBuf, 0);
+    pBuf += 2;
+    ielen -= (tANI_U8)2;
     tmp75__ = *pBuf;
     pBuf += 1;
     ielen -= 1;
-    pDst->acbk_acwmin = tmp75__ >> 0 & 0xf;
-    pDst->acbk_acwmax = tmp75__ >> 4 & 0xf;
-    framesntohs(pCtx, &pDst->acbk_txoplimit, pBuf, 0);
-    pBuf += 2;
-    ielen -= (tANI_U8)2;
+    pDst->acbk_aifsn = tmp75__ >> 0 & 0xf;
+    pDst->acbk_acm = tmp75__ >> 4 & 0x1;
+    pDst->acbk_aci = tmp75__ >> 5 & 0x3;
+    pDst->unused2 = tmp75__ >> 7 & 0x1;
     tmp76__ = *pBuf;
     pBuf += 1;
     ielen -= 1;
-    pDst->acvi_aifsn = tmp76__ >> 0 & 0xf;
-    pDst->acvi_acm = tmp76__ >> 4 & 0x1;
-    pDst->acvi_aci = tmp76__ >> 5 & 0x3;
-    pDst->unused3 = tmp76__ >> 7 & 0x1;
+    pDst->acbk_acwmin = tmp76__ >> 0 & 0xf;
+    pDst->acbk_acwmax = tmp76__ >> 4 & 0xf;
+    framesntohs(pCtx, &pDst->acbk_txoplimit, pBuf, 0);
+    pBuf += 2;
+    ielen -= (tANI_U8)2;
     tmp77__ = *pBuf;
     pBuf += 1;
     ielen -= 1;
-    pDst->acvi_acwmin = tmp77__ >> 0 & 0xf;
-    pDst->acvi_acwmax = tmp77__ >> 4 & 0xf;
-    framesntohs(pCtx, &pDst->acvi_txoplimit, pBuf, 0);
-    pBuf += 2;
-    ielen -= (tANI_U8)2;
+    pDst->acvi_aifsn = tmp77__ >> 0 & 0xf;
+    pDst->acvi_acm = tmp77__ >> 4 & 0x1;
+    pDst->acvi_aci = tmp77__ >> 5 & 0x3;
+    pDst->unused3 = tmp77__ >> 7 & 0x1;
     tmp78__ = *pBuf;
     pBuf += 1;
     ielen -= 1;
-    pDst->acvo_aifsn = tmp78__ >> 0 & 0xf;
-    pDst->acvo_acm = tmp78__ >> 4 & 0x1;
-    pDst->acvo_aci = tmp78__ >> 5 & 0x3;
-    pDst->unused4 = tmp78__ >> 7 & 0x1;
+    pDst->acvi_acwmin = tmp78__ >> 0 & 0xf;
+    pDst->acvi_acwmax = tmp78__ >> 4 & 0xf;
+    framesntohs(pCtx, &pDst->acvi_txoplimit, pBuf, 0);
+    pBuf += 2;
+    ielen -= (tANI_U8)2;
     tmp79__ = *pBuf;
     pBuf += 1;
     ielen -= 1;
-    pDst->acvo_acwmin = tmp79__ >> 0 & 0xf;
-    pDst->acvo_acwmax = tmp79__ >> 4 & 0xf;
+    pDst->acvo_aifsn = tmp79__ >> 0 & 0xf;
+    pDst->acvo_acm = tmp79__ >> 4 & 0x1;
+    pDst->acvo_aci = tmp79__ >> 5 & 0x3;
+    pDst->unused4 = tmp79__ >> 7 & 0x1;
+    tmp80__ = *pBuf;
+    pBuf += 1;
+    ielen -= 1;
+    pDst->acvo_acwmin = tmp80__ >> 0 & 0xf;
+    pDst->acvo_acwmax = tmp80__ >> 4 & 0xf;
     framesntohs(pCtx, &pDst->acvo_txoplimit, pBuf, 0);
     (void)pCtx;
     return status;
 } /* End dot11fUnpackIeWMMParams. */
 
-#define SigIeWMMParams ( 0x0081 )
+#define SigIeWMMParams ( 0x0083 )
 
 
 tANI_U32 dot11fUnpackIeWPA(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWPA *pDst)
@@ -5322,7 +5365,7 @@
     return status;
 } /* End dot11fUnpackIeWPA. */
 
-#define SigIeWPA ( 0x0082 )
+#define SigIeWPA ( 0x0084 )
 
 
 tANI_U32 dot11fUnpackIeWPAOpaque(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWPAOpaque *pDst)
@@ -5342,7 +5385,7 @@
     return status;
 } /* End dot11fUnpackIeWPAOpaque. */
 
-#define SigIeWPAOpaque ( 0x0083 )
+#define SigIeWPAOpaque ( 0x0085 )
 
 
     static const tTLVDefn TLVS_WSC[ ] = {
@@ -5380,7 +5423,7 @@
     return status;
 } /* End dot11fUnpackIeWSC. */
 
-#define SigIeWSC ( 0x0084 )
+#define SigIeWSC ( 0x0086 )
 
 
 tANI_U32 dot11fUnpackIeWiderBWChanSwitchAnn(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWiderBWChanSwitchAnn *pDst)
@@ -5400,7 +5443,7 @@
     return status;
 } /* End dot11fUnpackIeWiderBWChanSwitchAnn. */
 
-#define SigIeWiderBWChanSwitchAnn ( 0x0085 )
+#define SigIeWiderBWChanSwitchAnn ( 0x0087 )
 
 
     static const tTLVDefn TLVS_WscAssocReq[ ] = {
@@ -5419,7 +5462,7 @@
     return status;
 } /* End dot11fUnpackIeWscAssocReq. */
 
-#define SigIeWscAssocReq ( 0x0086 )
+#define SigIeWscAssocReq ( 0x0088 )
 
 
     static const tTLVDefn TLVS_WscAssocRes[ ] = {
@@ -5438,7 +5481,7 @@
     return status;
 } /* End dot11fUnpackIeWscAssocRes. */
 
-#define SigIeWscAssocRes ( 0x0087 )
+#define SigIeWscAssocRes ( 0x0089 )
 
 
     static const tTLVDefn TLVS_WscBeacon[ ] = {
@@ -5463,7 +5506,7 @@
     return status;
 } /* End dot11fUnpackIeWscBeacon. */
 
-#define SigIeWscBeacon ( 0x0088 )
+#define SigIeWscBeacon ( 0x008a )
 
 
     static const tTLVDefn TLVS_WscBeaconProbeRes[ ] = {
@@ -5496,7 +5539,7 @@
     return status;
 } /* End dot11fUnpackIeWscBeaconProbeRes. */
 
-#define SigIeWscBeaconProbeRes ( 0x0089 )
+#define SigIeWscBeaconProbeRes ( 0x008b )
 
 
 tANI_U32 dot11fUnpackIeWscIEOpaque(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U8 ielen, tDot11fIEWscIEOpaque *pDst)
@@ -5516,7 +5559,7 @@
     return status;
 } /* End dot11fUnpackIeWscIEOpaque. */
 
-#define SigIeWscIEOpaque ( 0x008a )
+#define SigIeWscIEOpaque ( 0x008c )
 
 
     static const tTLVDefn TLVS_WscProbeReq[ ] = {
@@ -5547,7 +5590,7 @@
     return status;
 } /* End dot11fUnpackIeWscProbeReq. */
 
-#define SigIeWscProbeReq ( 0x008b )
+#define SigIeWscProbeReq ( 0x008d )
 
 
     static const tTLVDefn TLVS_WscProbeRes[ ] = {
@@ -5580,7 +5623,7 @@
     return status;
 } /* End dot11fUnpackIeWscProbeRes. */
 
-#define SigIeWscProbeRes ( 0x008c )
+#define SigIeWscProbeRes ( 0x008e )
 
 
     static const tTLVDefn TLVS_WscReassocRes[ ] = {
@@ -5599,7 +5642,7 @@
     return status;
 } /* End dot11fUnpackIeWscReassocRes. */
 
-#define SigIeWscReassocRes ( 0x008d )
+#define SigIeWscReassocRes ( 0x008f )
 
 
     static const tFFDefn FFS_AddBAReq[] = {
@@ -9795,6 +9838,7 @@
         {offsetof(tDot11fBeacon2, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 10, 10, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, },
         {offsetof(tDot11fBeacon2, OperatingMode), offsetof(tDot11fIEOperatingMode, present), 0, "OperatingMode" , 0, 3, 3, SigIeOperatingMode, {0, 0, 0, 0, 0}, 0, DOT11F_EID_OPERATINGMODE, 0, },
         {offsetof(tDot11fBeacon2, WiderBWChanSwitchAnn), offsetof(tDot11fIEWiderBWChanSwitchAnn, present), 0, "WiderBWChanSwitchAnn" , 0, 5, 5, SigIeWiderBWChanSwitchAnn, {0, 0, 0, 0, 0}, 0, DOT11F_EID_WIDERBWCHANSWITCHANN, 0, },
+        {offsetof(tDot11fBeacon2, OBSSScanParameters), offsetof(tDot11fIEOBSSScanParameters, present), 0, "OBSSScanParameters" , 0, 16, 16, SigIeOBSSScanParameters, {0, 0, 0, 0, 0}, 0, DOT11F_EID_OBSSSCANPARAMETERS, 0, },
     {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },    };
 
 tANI_U32 dot11fUnpackBeacon2(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf, tDot11fBeacon2 *pFrm)
@@ -10727,6 +10771,21 @@
             FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->WiderBWChanSwitchAnn.newCenterChanFreq0, 1);
             FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->WiderBWChanSwitchAnn.newCenterChanFreq1, 1);
         }
+        FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), FRFL("OBSSScanParameters:\n"));
+        if (!pFrm->OBSSScanParameters.present)
+        {
+            FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), FRFL("Not present.\n"));
+        }
+        else
+        {
+            FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->OBSSScanParameters.obssScanPassiveDwell, 2);
+            FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->OBSSScanParameters.obssScanActiveDwell, 2);
+            FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->OBSSScanParameters.bssChannelWidthTriggerScanInterval, 2);
+            FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->OBSSScanParameters.obssScanPassiveTotalPerChannel, 2);
+            FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->OBSSScanParameters.obssScanActiveTotalPerChannel, 2);
+            FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->OBSSScanParameters.bssWidthChannelTransitionDelayFactor, 2);
+            FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->OBSSScanParameters.obssScanActivityThreshold, 2);
+        }
     }
 #   endif // DOT11F_DUMP_FRAMES
     return status;
@@ -12871,6 +12930,65 @@
 
 } /* End dot11fUnpackGONegRes. */
 
+    static const tFFDefn FFS_HT2040BSSCoexistenceManagementActionFrame[] = {
+        { "Category", offsetof(tDot11fHT2040BSSCoexistenceManagementActionFrame, Category), SigFfCategory , DOT11F_FF_CATEGORY_LEN, },
+        { "Action", offsetof(tDot11fHT2040BSSCoexistenceManagementActionFrame, Action), SigFfAction , DOT11F_FF_ACTION_LEN, },
+    { NULL, 0, 0, 0,},
+    };
+
+    static const tIEDefn IES_HT2040BSSCoexistenceManagementActionFrame[] = {
+        {offsetof(tDot11fHT2040BSSCoexistenceManagementActionFrame, HT2040BSSCoexistence), offsetof(tDot11fIEHT2040BSSCoexistence, present), 0, "HT2040BSSCoexistence" , 0, 3, 3, SigIeHT2040BSSCoexistence, {0, 0, 0, 0, 0}, 0, DOT11F_EID_HT2040BSSCOEXISTENCE, 1, },
+        {offsetof(tDot11fHT2040BSSCoexistenceManagementActionFrame, HT2040BSSIntolerantReport), offsetof(tDot11fIEHT2040BSSIntolerantReport, present), 0, "HT2040BSSIntolerantReport" , 0, 3, 53, SigIeHT2040BSSIntolerantReport, {0, 0, 0, 0, 0}, 0, DOT11F_EID_HT2040BSSINTOLERANTREPORT, 1, },
+    {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },    };
+
+tANI_U32 dot11fUnpackHT2040BSSCoexistenceManagementActionFrame(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf, tDot11fHT2040BSSCoexistenceManagementActionFrame *pFrm)
+{
+    tANI_U32 i = 0;
+    tANI_U32 status = 0;
+    status = UnpackCore(pCtx, pBuf, nBuf, FFS_HT2040BSSCoexistenceManagementActionFrame, IES_HT2040BSSCoexistenceManagementActionFrame, ( tANI_U8* )pFrm, sizeof(*pFrm));
+
+    (void)i;
+#   ifdef DOT11F_DUMP_FRAMES
+    if (!DOT11F_FAILED(status))
+    {
+        FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_HT2040BSSCOEXISTENCEMANAGEMENTACTIONFRAME), FRFL("Unpacked the HT2040BSSCoexistenceManagementActionFrame:\n"));
+        FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_HT2040BSSCOEXISTENCEMANAGEMENTACTIONFRAME), pBuf, nBuf);
+        FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_HT2040BSSCOEXISTENCEMANAGEMENTACTIONFRAME), FRFL("to:\n"));
+        FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_HT2040BSSCOEXISTENCEMANAGEMENTACTIONFRAME), FRFL("Category:\n"));
+        FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_HT2040BSSCOEXISTENCEMANAGEMENTACTIONFRAME), ( tANI_U8* )&pFrm->Category.category, 1);
+        FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_HT2040BSSCOEXISTENCEMANAGEMENTACTIONFRAME), FRFL("Action:\n"));
+        FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_HT2040BSSCOEXISTENCEMANAGEMENTACTIONFRAME), ( tANI_U8* )&pFrm->Action.action, 1);
+        FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_HT2040BSSCOEXISTENCEMANAGEMENTACTIONFRAME), FRFL("HT2040BSSCoexistence:\n"));
+        if (!pFrm->HT2040BSSCoexistence.present)
+        {
+            FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_HT2040BSSCOEXISTENCEMANAGEMENTACTIONFRAME), FRFL("Not present.\n"));
+        }
+        else
+        {
+            FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_HT2040BSSCOEXISTENCEMANAGEMENTACTIONFRAME), FRFL("infoRequest (1): %d\n"), pFrm->HT2040BSSCoexistence.infoRequest);
+            FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_HT2040BSSCOEXISTENCEMANAGEMENTACTIONFRAME), FRFL("fortyMHzIntolerant (1): %d\n"), pFrm->HT2040BSSCoexistence.fortyMHzIntolerant);
+            FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_HT2040BSSCOEXISTENCEMANAGEMENTACTIONFRAME), FRFL("twentyMHzBssWidthReq (1): %d\n"), pFrm->HT2040BSSCoexistence.twentyMHzBssWidthReq);
+            FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_HT2040BSSCOEXISTENCEMANAGEMENTACTIONFRAME), FRFL("obssScanExemptionReq (1): %d\n"), pFrm->HT2040BSSCoexistence.obssScanExemptionReq);
+            FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_HT2040BSSCOEXISTENCEMANAGEMENTACTIONFRAME), FRFL("obssScanExemptionGrant (1): %d\n"), pFrm->HT2040BSSCoexistence.obssScanExemptionGrant);
+            FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_HT2040BSSCOEXISTENCEMANAGEMENTACTIONFRAME), FRFL("unused (3): %d\n"), pFrm->HT2040BSSCoexistence.unused);
+        }
+        FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_HT2040BSSCOEXISTENCEMANAGEMENTACTIONFRAME), FRFL("HT2040BSSIntolerantReport:\n"));
+        if (!pFrm->HT2040BSSIntolerantReport.present)
+        {
+            FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_HT2040BSSCOEXISTENCEMANAGEMENTACTIONFRAME), FRFL("Not present.\n"));
+        }
+        else
+        {
+            FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_HT2040BSSCOEXISTENCEMANAGEMENTACTIONFRAME), ( tANI_U8* )&pFrm->HT2040BSSIntolerantReport.operatingClass, 1);
+            FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_HT2040BSSCOEXISTENCEMANAGEMENTACTIONFRAME), FRFL("num_channelList: %d.\n"), pFrm->HT2040BSSIntolerantReport.num_channelList);
+            FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_HT2040BSSCOEXISTENCEMANAGEMENTACTIONFRAME), ( tANI_U8* ) pFrm->HT2040BSSIntolerantReport.channelList, pFrm->HT2040BSSIntolerantReport.num_channelList);
+        }
+    }
+#   endif // DOT11F_DUMP_FRAMES
+    return status;
+
+} /* End dot11fUnpackHT2040BSSCoexistenceManagementActionFrame. */
+
     static const tFFDefn FFS_InvitationReq[] = {
         { "Category", offsetof(tDot11fInvitationReq, Category), SigFfCategory , DOT11F_FF_CATEGORY_LEN, },
         { "Action", offsetof(tDot11fInvitationReq, Action), SigFfAction , DOT11F_FF_ACTION_LEN, },
@@ -20773,6 +20891,12 @@
                 case SigIeFTInfo:
                         status |= dot11fUnpackIeFTInfo(pCtx, pBufRemaining, len, ( tDot11fIEFTInfo* )(pFrm + pIe->offset + sizeof(tDot11fIEFTInfo)*countOffset) );
                             break;
+                case SigIeHT2040BSSCoexistence:
+                        status |= dot11fUnpackIeHT2040BSSCoexistence(pCtx, pBufRemaining, len, ( tDot11fIEHT2040BSSCoexistence* )(pFrm + pIe->offset + sizeof(tDot11fIEHT2040BSSCoexistence)*countOffset) );
+                            break;
+                case SigIeHT2040BSSIntolerantReport:
+                        status |= dot11fUnpackIeHT2040BSSIntolerantReport(pCtx, pBufRemaining, len, ( tDot11fIEHT2040BSSIntolerantReport* )(pFrm + pIe->offset + sizeof(tDot11fIEHT2040BSSIntolerantReport)*countOffset) );
+                            break;
                 case SigIeHTCaps:
                         status |= dot11fUnpackIeHTCaps(pCtx, pBufRemaining, len, ( tDot11fIEHTCaps* )(pFrm + pIe->offset + sizeof(tDot11fIEHTCaps)*countOffset) );
                             break;
@@ -21127,7 +21251,7 @@
                   FRAMES_LOG0( pCtx, FRLOGE, FRFL("This frame reports "
                                                   "fewer two byte(s) remaining.\n") );
                   status |= DOT11F_INCOMPLETE_TLV;
-                  FRAMES_DBG_BREAK(); 
+                  FRAMES_DBG_BREAK();
                   goto MandatoryCheck;
               }
               pBufRemaining += 2;
@@ -22309,6 +22433,14 @@
     return status;
 } /* End dot11fGetPackedGONegResSize. */
 
+tANI_U32 dot11fGetPackedHT2040BSSCoexistenceManagementActionFrameSize(tpAniSirGlobal pCtx, tDot11fHT2040BSSCoexistenceManagementActionFrame *pFrm, tANI_U32 *pnNeeded)
+{
+    tANI_U32 status = 0;
+    *pnNeeded = 2;
+    status = GetPackedSizeCore(pCtx, ( tANI_U8* )pFrm, pnNeeded, IES_HT2040BSSCoexistenceManagementActionFrame);
+    return status;
+} /* End dot11fGetPackedHT2040BSSCoexistenceManagementActionFrameSize. */
+
 tANI_U32 dot11fGetPackedInvitationReqSize(tpAniSirGlobal pCtx, tDot11fInvitationReq *pFrm, tANI_U32 *pnNeeded)
 {
     tANI_U32 status = 0;
@@ -22970,6 +23102,16 @@
                             offset = sizeof(tDot11fIEFTInfo);
                             status |= dot11fGetPackedIEFTInfo(pCtx, ( tDot11fIEFTInfo* )(pFrm + pIe->offset + offset * i ), pnNeeded);
                             break;
+                case SigIeHT2040BSSCoexistence:
+                            offset = sizeof(tDot11fIEHT2040BSSCoexistence);
+                            byteCount = 1;
+                            pIePresent = ( (tDot11fIEHT2040BSSCoexistence* )(pFrm + pIe->offset + offset * i  ))->present;
+                            break;
+                case SigIeHT2040BSSIntolerantReport:
+                            offset = sizeof(tDot11fIEHT2040BSSIntolerantReport);
+                            byteCount = ((tDot11fIEHT2040BSSIntolerantReport* )(pFrm + pIe->offset + sizeof(tDot11fIEHT2040BSSIntolerantReport) * i ))->num_channelList + 1;
+                            pIePresent = ( (tDot11fIEHT2040BSSIntolerantReport* )(pFrm + pIe->offset + offset * i  ))->present;
+                            break;
                 case SigIeHTCaps:
                             offset = sizeof(tDot11fIEHTCaps);
                             byteCount = ((tDot11fIEHTCaps* )(pFrm + pIe->offset + sizeof(tDot11fIEHTCaps) * i ))->num_rsvd + 26;
@@ -23563,13 +23705,13 @@
                                    tDot11fFfAddBAParameterSet *pSrc,
                                    tANI_U8 *pBuf)
 {
-    tANI_U16 tmp80__;
-    tmp80__ = 0U;
-    tmp80__ |= ( pSrc->amsduSupported << 0 );
-    tmp80__ |= ( pSrc->policy << 1 );
-    tmp80__ |= ( pSrc->tid << 2 );
-    tmp80__ |= ( pSrc->bufferSize << 6 );
-    frameshtons(pCtx, pBuf, tmp80__, 0);
+    tANI_U16 tmp81__;
+    tmp81__ = 0U;
+    tmp81__ |= ( pSrc->amsduSupported << 0 );
+    tmp81__ |= ( pSrc->policy << 1 );
+    tmp81__ |= ( pSrc->tid << 2 );
+    tmp81__ |= ( pSrc->bufferSize << 6 );
+    frameshtons(pCtx, pBuf, tmp81__, 0);
     (void)pCtx;
 } /* End dot11fPackFfAddBAParameterSet. */
 
@@ -23593,11 +23735,11 @@
                                            tDot11fFfBAStartingSequenceControl *pSrc,
                                            tANI_U8 *pBuf)
 {
-    tANI_U16 tmp81__;
-    tmp81__ = 0U;
-    tmp81__ |= ( pSrc->fragNumber << 0 );
-    tmp81__ |= ( pSrc->ssn << 4 );
-    frameshtons(pCtx, pBuf, tmp81__, 0);
+    tANI_U16 tmp82__;
+    tmp82__ = 0U;
+    tmp82__ |= ( pSrc->fragNumber << 0 );
+    tmp82__ |= ( pSrc->ssn << 4 );
+    frameshtons(pCtx, pBuf, tmp82__, 0);
     (void)pCtx;
 } /* End dot11fPackFfBAStartingSequenceControl. */
 
@@ -23621,25 +23763,25 @@
                               tDot11fFfCapabilities *pSrc,
                               tANI_U8 *pBuf)
 {
-    tANI_U16 tmp82__;
-    tmp82__ = 0U;
-    tmp82__ |= ( pSrc->ess << 0 );
-    tmp82__ |= ( pSrc->ibss << 1 );
-    tmp82__ |= ( pSrc->cfPollable << 2 );
-    tmp82__ |= ( pSrc->cfPollReq << 3 );
-    tmp82__ |= ( pSrc->privacy << 4 );
-    tmp82__ |= ( pSrc->shortPreamble << 5 );
-    tmp82__ |= ( pSrc->pbcc << 6 );
-    tmp82__ |= ( pSrc->channelAgility << 7 );
-    tmp82__ |= ( pSrc->spectrumMgt << 8 );
-    tmp82__ |= ( pSrc->qos << 9 );
-    tmp82__ |= ( pSrc->shortSlotTime << 10 );
-    tmp82__ |= ( pSrc->apsd << 11 );
-    tmp82__ |= ( pSrc->rrm << 12 );
-    tmp82__ |= ( pSrc->dsssOfdm << 13 );
-    tmp82__ |= ( pSrc->delayedBA << 14 );
-    tmp82__ |= ( pSrc->immediateBA << 15 );
-    frameshtons(pCtx, pBuf, tmp82__, 0);
+    tANI_U16 tmp83__;
+    tmp83__ = 0U;
+    tmp83__ |= ( pSrc->ess << 0 );
+    tmp83__ |= ( pSrc->ibss << 1 );
+    tmp83__ |= ( pSrc->cfPollable << 2 );
+    tmp83__ |= ( pSrc->cfPollReq << 3 );
+    tmp83__ |= ( pSrc->privacy << 4 );
+    tmp83__ |= ( pSrc->shortPreamble << 5 );
+    tmp83__ |= ( pSrc->pbcc << 6 );
+    tmp83__ |= ( pSrc->channelAgility << 7 );
+    tmp83__ |= ( pSrc->spectrumMgt << 8 );
+    tmp83__ |= ( pSrc->qos << 9 );
+    tmp83__ |= ( pSrc->shortSlotTime << 10 );
+    tmp83__ |= ( pSrc->apsd << 11 );
+    tmp83__ |= ( pSrc->rrm << 12 );
+    tmp83__ |= ( pSrc->dsssOfdm << 13 );
+    tmp83__ |= ( pSrc->delayedBA << 14 );
+    tmp83__ |= ( pSrc->immediateBA << 15 );
+    frameshtons(pCtx, pBuf, tmp83__, 0);
     (void)pCtx;
 } /* End dot11fPackFfCapabilities. */
 
@@ -23663,12 +23805,12 @@
                                    tDot11fFfDelBAParameterSet *pSrc,
                                    tANI_U8 *pBuf)
 {
-    tANI_U16 tmp83__;
-    tmp83__ = 0U;
-    tmp83__ |= ( pSrc->reserved << 0 );
-    tmp83__ |= ( pSrc->initiator << 11 );
-    tmp83__ |= ( pSrc->tid << 12 );
-    frameshtons(pCtx, pBuf, tmp83__, 0);
+    tANI_U16 tmp84__;
+    tmp84__ = 0U;
+    tmp84__ |= ( pSrc->reserved << 0 );
+    tmp84__ |= ( pSrc->initiator << 11 );
+    tmp84__ |= ( pSrc->tid << 12 );
+    frameshtons(pCtx, pBuf, tmp84__, 0);
     (void)pCtx;
 } /* End dot11fPackFfDelBAParameterSet. */
 
@@ -23716,13 +23858,13 @@
                                tDot11fFfOperatingMode *pSrc,
                                tANI_U8 *pBuf)
 {
-    tANI_U8 tmp84__;
-    tmp84__ = 0U;
-    tmp84__ |= ( pSrc->chanWidth << 0 );
-    tmp84__ |= ( pSrc->reserved << 2 );
-    tmp84__ |= ( pSrc->rxNSS << 4 );
-    tmp84__ |= ( pSrc->rxNSSType << 7 );
-    *pBuf = tmp84__;
+    tANI_U8 tmp85__;
+    tmp85__ = 0U;
+    tmp85__ |= ( pSrc->chanWidth << 0 );
+    tmp85__ |= ( pSrc->reserved << 2 );
+    tmp85__ |= ( pSrc->rxNSS << 4 );
+    tmp85__ |= ( pSrc->rxNSSType << 7 );
+    *pBuf = tmp85__;
     (void)pCtx;
 } /* End dot11fPackFfOperatingMode. */
 
@@ -23778,12 +23920,12 @@
                                 tDot11fFfSMPowerModeSet *pSrc,
                                 tANI_U8 *pBuf)
 {
-    tANI_U8 tmp85__;
-    tmp85__ = 0U;
-    tmp85__ |= ( pSrc->PowerSave_En << 0 );
-    tmp85__ |= ( pSrc->Mode << 1 );
-    tmp85__ |= ( pSrc->reserved << 2 );
-    *pBuf = tmp85__;
+    tANI_U8 tmp86__;
+    tmp86__ = 0U;
+    tmp86__ |= ( pSrc->PowerSave_En << 0 );
+    tmp86__ |= ( pSrc->Mode << 1 );
+    tmp86__ |= ( pSrc->reserved << 2 );
+    *pBuf = tmp86__;
     (void)pCtx;
 } /* End dot11fPackFfSMPowerModeSet. */
 
@@ -23823,19 +23965,19 @@
                         tDot11fFfTSInfo *pSrc,
                         tANI_U8 *pBuf)
 {
-    tANI_U32 tmp86__;
-    tmp86__ = 0U;
-    tmp86__ |= ( pSrc->traffic_type << 0 );
-    tmp86__ |= ( pSrc->tsid << 1 );
-    tmp86__ |= ( pSrc->direction << 5 );
-    tmp86__ |= ( pSrc->access_policy << 7 );
-    tmp86__ |= ( pSrc->aggregation << 9 );
-    tmp86__ |= ( pSrc->psb << 10 );
-    tmp86__ |= ( pSrc->user_priority << 11 );
-    tmp86__ |= ( pSrc->tsinfo_ack_pol << 14 );
-    tmp86__ |= ( pSrc->schedule << 16 );
-    tmp86__ |= ( pSrc->unused << 17 );
-    frameshtonl(pCtx, pBuf, tmp86__, 0);
+    tANI_U32 tmp87__;
+    tmp87__ = 0U;
+    tmp87__ |= ( pSrc->traffic_type << 0 );
+    tmp87__ |= ( pSrc->tsid << 1 );
+    tmp87__ |= ( pSrc->direction << 5 );
+    tmp87__ |= ( pSrc->access_policy << 7 );
+    tmp87__ |= ( pSrc->aggregation << 9 );
+    tmp87__ |= ( pSrc->psb << 10 );
+    tmp87__ |= ( pSrc->user_priority << 11 );
+    tmp87__ |= ( pSrc->tsinfo_ack_pol << 14 );
+    tmp87__ |= ( pSrc->schedule << 16 );
+    tmp87__ |= ( pSrc->unused << 17 );
+    frameshtonl(pCtx, pBuf, tmp87__, 0);
     (void)pCtx;
 } /* End dot11fPackFfTSInfo. */
 
@@ -23956,7 +24098,7 @@
     tANI_U8* pTlvLen = 0;
     tANI_U32 nConsumedOnEntry = *pnConsumed;
     tANI_U32 nNeeded = 0U;
-    tANI_U8 tmp87__;
+    tANI_U8 tmp88__;
     nNeeded += 3;
     if ( nNeeded > nBuf ) return DOT11F_BUFFER_OVERFLOW;
     while ( pSrc->present )
@@ -23965,10 +24107,10 @@
         pBuf += 1; *pnConsumed += 1;
         pTlvLen = pBuf;
         pBuf += 1; *pnConsumed += 1;
-        tmp87__ = 0U;
-        tmp87__ |= ( pSrc->minor << 0 );
-        tmp87__ |= ( pSrc->major << 4 );
-        *pBuf = tmp87__;
+        tmp88__ = 0U;
+        tmp88__ |= ( pSrc->minor << 0 );
+        tmp88__ |= ( pSrc->major << 4 );
+        *pBuf = tmp88__;
         *pnConsumed += 1;
         pBuf += 1;
         nBuf -=  1 ;
@@ -25177,7 +25319,7 @@
     tANI_U8* pTlvLen = 0;
     tANI_U32 nConsumedOnEntry = *pnConsumed;
     tANI_U32 nNeeded = 0U;
-    tANI_U8 tmp88__;
+    tANI_U8 tmp89__;
     nNeeded += 5;
     if ( nNeeded > nBuf ) return DOT11F_BUFFER_OVERFLOW;
     while ( pSrc->present )
@@ -25186,10 +25328,10 @@
         pBuf += 2; *pnConsumed += 2;
         pTlvLen = pBuf;
         pBuf += 2; *pnConsumed += 2;
-        tmp88__ = 0U;
-        tmp88__ |= ( pSrc->minor << 0 );
-        tmp88__ |= ( pSrc->major << 4 );
-        *pBuf = tmp88__;
+        tmp89__ = 0U;
+        tmp89__ |= ( pSrc->minor << 0 );
+        tmp89__ |= ( pSrc->major << 4 );
+        *pBuf = tmp89__;
         *pnConsumed += 1;
         pBuf += 1;
         nBuf -=  1 ;
@@ -25395,7 +25537,7 @@
     tANI_U8* pIeLen = 0;
     tANI_U32 nConsumedOnEntry = *pnConsumed;
     tANI_U32 nNeeded = 0U;
-    tANI_U16 tmp89__;
+    tANI_U16 tmp90__;
     nNeeded  +=  (pSrc->num_key + 11);
     while ( pSrc->present )
     {
@@ -25404,10 +25546,10 @@
         ++pBuf; ++(*pnConsumed);
         pIeLen = pBuf;
         ++pBuf; ++(*pnConsumed);
-        tmp89__ = 0U;
-        tmp89__ |= ( pSrc->keyId << 0 );
-        tmp89__ |= ( pSrc->reserved << 2 );
-        frameshtons(pCtx, pBuf, tmp89__, 0);
+        tmp90__ = 0U;
+        tmp90__ |= ( pSrc->keyId << 0 );
+        tmp90__ |= ( pSrc->reserved << 2 );
+        frameshtons(pCtx, pBuf, tmp90__, 0);
         *pnConsumed += 2;
         pBuf += 2;
         nBuf -=  2 ;
@@ -25703,7 +25845,6 @@
     tANI_U8* pIeLen = 0;
     tANI_U32 nConsumedOnEntry = *pnConsumed;
     tANI_U32 nNeeded = 0U;
-    tANI_U8 tmp90__;
     tANI_U8 tmp91__;
     tANI_U8 tmp92__;
     tANI_U8 tmp93__;
@@ -25711,6 +25852,7 @@
     tANI_U8 tmp95__;
     tANI_U8 tmp96__;
     tANI_U8 tmp97__;
+    tANI_U8 tmp98__;
     nNeeded  += 18;
     while ( pSrc->present )
     {
@@ -25725,76 +25867,76 @@
         *pBuf = pSrc->reserved;
         *pnConsumed += 1;
         pBuf += 1;
-        tmp90__ = 0U;
-        tmp90__ |= ( pSrc->acbe_aifsn << 0 );
-        tmp90__ |= ( pSrc->acbe_acm << 4 );
-        tmp90__ |= ( pSrc->acbe_aci << 5 );
-        tmp90__ |= ( pSrc->unused1 << 7 );
-        *pBuf = tmp90__;
+        tmp91__ = 0U;
+        tmp91__ |= ( pSrc->acbe_aifsn << 0 );
+        tmp91__ |= ( pSrc->acbe_acm << 4 );
+        tmp91__ |= ( pSrc->acbe_aci << 5 );
+        tmp91__ |= ( pSrc->unused1 << 7 );
+        *pBuf = tmp91__;
         *pnConsumed += 1;
         pBuf += 1;
         nBuf -=  1 ;
-        tmp91__ = 0U;
-        tmp91__ |= ( pSrc->acbe_min << 0 );
-        tmp91__ |= ( pSrc->acbe_max << 4 );
-        *pBuf = tmp91__;
+        tmp92__ = 0U;
+        tmp92__ |= ( pSrc->acbe_min << 0 );
+        tmp92__ |= ( pSrc->acbe_max << 4 );
+        *pBuf = tmp92__;
         *pnConsumed += 1;
         pBuf += 1;
         nBuf -=  1 ;
         frameshtons(pCtx, pBuf, pSrc->acbe_txoplimit, 0);
         *pnConsumed += 2;
         pBuf += 2;
-        tmp92__ = 0U;
-        tmp92__ |= ( pSrc->acbk_aifsn << 0 );
-        tmp92__ |= ( pSrc->acbk_acm << 4 );
-        tmp92__ |= ( pSrc->acbk_aci << 5 );
-        tmp92__ |= ( pSrc->unused2 << 7 );
-        *pBuf = tmp92__;
+        tmp93__ = 0U;
+        tmp93__ |= ( pSrc->acbk_aifsn << 0 );
+        tmp93__ |= ( pSrc->acbk_acm << 4 );
+        tmp93__ |= ( pSrc->acbk_aci << 5 );
+        tmp93__ |= ( pSrc->unused2 << 7 );
+        *pBuf = tmp93__;
         *pnConsumed += 1;
         pBuf += 1;
         nBuf -=  1 ;
-        tmp93__ = 0U;
-        tmp93__ |= ( pSrc->acbk_min << 0 );
-        tmp93__ |= ( pSrc->acbk_max << 4 );
-        *pBuf = tmp93__;
+        tmp94__ = 0U;
+        tmp94__ |= ( pSrc->acbk_min << 0 );
+        tmp94__ |= ( pSrc->acbk_max << 4 );
+        *pBuf = tmp94__;
         *pnConsumed += 1;
         pBuf += 1;
         nBuf -=  1 ;
         frameshtons(pCtx, pBuf, pSrc->acbk_txoplimit, 0);
         *pnConsumed += 2;
         pBuf += 2;
-        tmp94__ = 0U;
-        tmp94__ |= ( pSrc->acvi_aifsn << 0 );
-        tmp94__ |= ( pSrc->acvi_acm << 4 );
-        tmp94__ |= ( pSrc->acvi_aci << 5 );
-        tmp94__ |= ( pSrc->unused3 << 7 );
-        *pBuf = tmp94__;
+        tmp95__ = 0U;
+        tmp95__ |= ( pSrc->acvi_aifsn << 0 );
+        tmp95__ |= ( pSrc->acvi_acm << 4 );
+        tmp95__ |= ( pSrc->acvi_aci << 5 );
+        tmp95__ |= ( pSrc->unused3 << 7 );
+        *pBuf = tmp95__;
         *pnConsumed += 1;
         pBuf += 1;
         nBuf -=  1 ;
-        tmp95__ = 0U;
-        tmp95__ |= ( pSrc->acvi_min << 0 );
-        tmp95__ |= ( pSrc->acvi_max << 4 );
-        *pBuf = tmp95__;
+        tmp96__ = 0U;
+        tmp96__ |= ( pSrc->acvi_min << 0 );
+        tmp96__ |= ( pSrc->acvi_max << 4 );
+        *pBuf = tmp96__;
         *pnConsumed += 1;
         pBuf += 1;
         nBuf -=  1 ;
         frameshtons(pCtx, pBuf, pSrc->acvi_txoplimit, 0);
         *pnConsumed += 2;
         pBuf += 2;
-        tmp96__ = 0U;
-        tmp96__ |= ( pSrc->acvo_aifsn << 0 );
-        tmp96__ |= ( pSrc->acvo_acm << 4 );
-        tmp96__ |= ( pSrc->acvo_aci << 5 );
-        tmp96__ |= ( pSrc->unused4 << 7 );
-        *pBuf = tmp96__;
+        tmp97__ = 0U;
+        tmp97__ |= ( pSrc->acvo_aifsn << 0 );
+        tmp97__ |= ( pSrc->acvo_acm << 4 );
+        tmp97__ |= ( pSrc->acvo_aci << 5 );
+        tmp97__ |= ( pSrc->unused4 << 7 );
+        *pBuf = tmp97__;
         *pnConsumed += 1;
         pBuf += 1;
         nBuf -=  1 ;
-        tmp97__ = 0U;
-        tmp97__ |= ( pSrc->acvo_min << 0 );
-        tmp97__ |= ( pSrc->acvo_max << 4 );
-        *pBuf = tmp97__;
+        tmp98__ = 0U;
+        tmp98__ |= ( pSrc->acvo_min << 0 );
+        tmp98__ |= ( pSrc->acvo_max << 4 );
+        *pBuf = tmp98__;
         *pnConsumed += 1;
         pBuf += 1;
         nBuf -=  1 ;
@@ -25982,7 +26124,7 @@
     tANI_U8* pIeLen = 0;
     tANI_U32 nConsumedOnEntry = *pnConsumed;
     tANI_U32 nNeeded = 0U;
-    tANI_U16 tmp98__;
+    tANI_U16 tmp99__;
     nNeeded  += 6;
     while ( pSrc->present )
     {
@@ -25997,10 +26139,10 @@
         frameshtons(pCtx, pBuf, pSrc->baPolicy, 0);
         *pnConsumed += 2;
         pBuf += 2;
-        tmp98__ = 0U;
-        tmp98__ |= ( pSrc->baBufferSize << 0 );
-        tmp98__ |= ( pSrc->rsvd << 12 );
-        frameshtons(pCtx, pBuf, tmp98__, 0);
+        tmp99__ = 0U;
+        tmp99__ |= ( pSrc->baBufferSize << 0 );
+        tmp99__ |= ( pSrc->rsvd << 12 );
+        frameshtons(pCtx, pBuf, tmp99__, 0);
         *pnConsumed += 2;
         // fieldsEndFlag  = 1
         nBuf -=  2 ;
@@ -26419,11 +26561,11 @@
     tANI_U8* pIeLen = 0;
     tANI_U32 nConsumedOnEntry = *pnConsumed;
     tANI_U32 nNeeded = 0U;
-    tANI_U8 tmp99__;
     tANI_U8 tmp100__;
     tANI_U8 tmp101__;
     tANI_U8 tmp102__;
     tANI_U8 tmp103__;
+    tANI_U8 tmp104__;
     nNeeded  += 5;
     while ( pSrc->present )
     {
@@ -26432,58 +26574,58 @@
         ++pBuf; ++(*pnConsumed);
         pIeLen = pBuf;
         ++pBuf; ++(*pnConsumed);
-        tmp99__ = 0U;
-        tmp99__ |= ( pSrc->LinkMeasurement << 0 );
-        tmp99__ |= ( pSrc->NeighborRpt << 1 );
-        tmp99__ |= ( pSrc->parallel << 2 );
-        tmp99__ |= ( pSrc->repeated << 3 );
-        tmp99__ |= ( pSrc->BeaconPassive << 4 );
-        tmp99__ |= ( pSrc->BeaconActive << 5 );
-        tmp99__ |= ( pSrc->BeaconTable << 6 );
-        tmp99__ |= ( pSrc->BeaconRepCond << 7 );
-        *pBuf = tmp99__;
-        *pnConsumed += 1;
-        pBuf += 1;
-        nBuf -=  1 ;
         tmp100__ = 0U;
-        tmp100__ |= ( pSrc->FrameMeasurement << 0 );
-        tmp100__ |= ( pSrc->ChannelLoad << 1 );
-        tmp100__ |= ( pSrc->NoiseHistogram << 2 );
-        tmp100__ |= ( pSrc->statistics << 3 );
-        tmp100__ |= ( pSrc->LCIMeasurement << 4 );
-        tmp100__ |= ( pSrc->LCIAzimuth << 5 );
-        tmp100__ |= ( pSrc->TCMCapability << 6 );
-        tmp100__ |= ( pSrc->triggeredTCM << 7 );
+        tmp100__ |= ( pSrc->LinkMeasurement << 0 );
+        tmp100__ |= ( pSrc->NeighborRpt << 1 );
+        tmp100__ |= ( pSrc->parallel << 2 );
+        tmp100__ |= ( pSrc->repeated << 3 );
+        tmp100__ |= ( pSrc->BeaconPassive << 4 );
+        tmp100__ |= ( pSrc->BeaconActive << 5 );
+        tmp100__ |= ( pSrc->BeaconTable << 6 );
+        tmp100__ |= ( pSrc->BeaconRepCond << 7 );
         *pBuf = tmp100__;
         *pnConsumed += 1;
         pBuf += 1;
         nBuf -=  1 ;
         tmp101__ = 0U;
-        tmp101__ |= ( pSrc->APChanReport << 0 );
-        tmp101__ |= ( pSrc->RRMMIBEnabled << 1 );
-        tmp101__ |= ( pSrc->operatingChanMax << 2 );
-        tmp101__ |= ( pSrc->nonOperatinChanMax << 5 );
+        tmp101__ |= ( pSrc->FrameMeasurement << 0 );
+        tmp101__ |= ( pSrc->ChannelLoad << 1 );
+        tmp101__ |= ( pSrc->NoiseHistogram << 2 );
+        tmp101__ |= ( pSrc->statistics << 3 );
+        tmp101__ |= ( pSrc->LCIMeasurement << 4 );
+        tmp101__ |= ( pSrc->LCIAzimuth << 5 );
+        tmp101__ |= ( pSrc->TCMCapability << 6 );
+        tmp101__ |= ( pSrc->triggeredTCM << 7 );
         *pBuf = tmp101__;
         *pnConsumed += 1;
         pBuf += 1;
         nBuf -=  1 ;
         tmp102__ = 0U;
-        tmp102__ |= ( pSrc->MeasurementPilot << 0 );
-        tmp102__ |= ( pSrc->MeasurementPilotEnabled << 3 );
-        tmp102__ |= ( pSrc->NeighborTSFOffset << 4 );
-        tmp102__ |= ( pSrc->RCPIMeasurement << 5 );
-        tmp102__ |= ( pSrc->RSNIMeasurement << 6 );
-        tmp102__ |= ( pSrc->BssAvgAccessDelay << 7 );
+        tmp102__ |= ( pSrc->APChanReport << 0 );
+        tmp102__ |= ( pSrc->RRMMIBEnabled << 1 );
+        tmp102__ |= ( pSrc->operatingChanMax << 2 );
+        tmp102__ |= ( pSrc->nonOperatinChanMax << 5 );
         *pBuf = tmp102__;
         *pnConsumed += 1;
         pBuf += 1;
         nBuf -=  1 ;
         tmp103__ = 0U;
-        tmp103__ |= ( pSrc->BSSAvailAdmission << 0 );
-        tmp103__ |= ( pSrc->AntennaInformation << 1 );
-        tmp103__ |= ( pSrc->reserved << 2 );
+        tmp103__ |= ( pSrc->MeasurementPilot << 0 );
+        tmp103__ |= ( pSrc->MeasurementPilotEnabled << 3 );
+        tmp103__ |= ( pSrc->NeighborTSFOffset << 4 );
+        tmp103__ |= ( pSrc->RCPIMeasurement << 5 );
+        tmp103__ |= ( pSrc->RSNIMeasurement << 6 );
+        tmp103__ |= ( pSrc->BssAvgAccessDelay << 7 );
         *pBuf = tmp103__;
         *pnConsumed += 1;
+        pBuf += 1;
+        nBuf -=  1 ;
+        tmp104__ = 0U;
+        tmp104__ |= ( pSrc->BSSAvailAdmission << 0 );
+        tmp104__ |= ( pSrc->AntennaInformation << 1 );
+        tmp104__ |= ( pSrc->reserved << 2 );
+        *pBuf = tmp104__;
+        *pnConsumed += 1;
         // fieldsEndFlag  = 1
         nBuf -=  1 ;
         break;
@@ -26565,7 +26707,7 @@
     tANI_U8* pIeLen = 0;
     tANI_U32 nConsumedOnEntry = *pnConsumed;
     tANI_U32 nNeeded = 0U;
-    tANI_U16 tmp104__;
+    tANI_U16 tmp105__;
     nNeeded  += 14;
     while ( pSrc->present )
     {
@@ -26574,12 +26716,12 @@
         ++pBuf; ++(*pnConsumed);
         pIeLen = pBuf;
         ++pBuf; ++(*pnConsumed);
-        tmp104__ = 0U;
-        tmp104__ |= ( pSrc->aggregation << 0 );
-        tmp104__ |= ( pSrc->tsid << 1 );
-        tmp104__ |= ( pSrc->direction << 5 );
-        tmp104__ |= ( pSrc->reserved << 7 );
-        frameshtons(pCtx, pBuf, tmp104__, 0);
+        tmp105__ = 0U;
+        tmp105__ |= ( pSrc->aggregation << 0 );
+        tmp105__ |= ( pSrc->tsid << 1 );
+        tmp105__ |= ( pSrc->direction << 5 );
+        tmp105__ |= ( pSrc->reserved << 7 );
+        frameshtons(pCtx, pBuf, tmp105__, 0);
         *pnConsumed += 2;
         pBuf += 2;
         nBuf -=  2 ;
@@ -26779,9 +26921,9 @@
     tANI_U8* pIeLen = 0;
     tANI_U32 nConsumedOnEntry = *pnConsumed;
     tANI_U32 nNeeded = 0U;
-    tANI_U16 tmp105__;
-    tANI_U8 tmp106__;
-    tANI_U16 tmp107__;
+    tANI_U16 tmp106__;
+    tANI_U8 tmp107__;
+    tANI_U16 tmp108__;
     nNeeded  += 55;
     while ( pSrc->present )
     {
@@ -26790,30 +26932,30 @@
         ++pBuf; ++(*pnConsumed);
         pIeLen = pBuf;
         ++pBuf; ++(*pnConsumed);
-        tmp105__ = 0U;
-        tmp105__ |= ( pSrc->traffic_type << 0 );
-        tmp105__ |= ( pSrc->tsid << 1 );
-        tmp105__ |= ( pSrc->direction << 5 );
-        tmp105__ |= ( pSrc->access_policy << 7 );
-        tmp105__ |= ( pSrc->aggregation << 9 );
-        tmp105__ |= ( pSrc->psb << 10 );
-        tmp105__ |= ( pSrc->user_priority << 11 );
-        tmp105__ |= ( pSrc->tsinfo_ack_pol << 14 );
-        frameshtons(pCtx, pBuf, tmp105__, 0);
+        tmp106__ = 0U;
+        tmp106__ |= ( pSrc->traffic_type << 0 );
+        tmp106__ |= ( pSrc->tsid << 1 );
+        tmp106__ |= ( pSrc->direction << 5 );
+        tmp106__ |= ( pSrc->access_policy << 7 );
+        tmp106__ |= ( pSrc->aggregation << 9 );
+        tmp106__ |= ( pSrc->psb << 10 );
+        tmp106__ |= ( pSrc->user_priority << 11 );
+        tmp106__ |= ( pSrc->tsinfo_ack_pol << 14 );
+        frameshtons(pCtx, pBuf, tmp106__, 0);
         *pnConsumed += 2;
         pBuf += 2;
         nBuf -=  2 ;
-        tmp106__ = 0U;
-        tmp106__ |= ( pSrc->schedule << 0 );
-        tmp106__ |= ( pSrc->unused << 1 );
-        *pBuf = tmp106__;
+        tmp107__ = 0U;
+        tmp107__ |= ( pSrc->schedule << 0 );
+        tmp107__ |= ( pSrc->unused << 1 );
+        *pBuf = tmp107__;
         *pnConsumed += 1;
         pBuf += 1;
         nBuf -=  1 ;
-        tmp107__ = 0U;
-        tmp107__ |= ( pSrc->size << 0 );
-        tmp107__ |= ( pSrc->fixed << 15 );
-        frameshtons(pCtx, pBuf, tmp107__, 0);
+        tmp108__ = 0U;
+        tmp108__ |= ( pSrc->size << 0 );
+        tmp108__ |= ( pSrc->fixed << 15 );
+        frameshtons(pCtx, pBuf, tmp108__, 0);
         *pnConsumed += 2;
         pBuf += 2;
         nBuf -=  2 ;
@@ -26878,7 +27020,7 @@
     tANI_U8* pIeLen = 0;
     tANI_U32 nConsumedOnEntry = *pnConsumed;
     tANI_U32 nNeeded = 0U;
-    tANI_U16 tmp108__;
+    tANI_U16 tmp109__;
     nNeeded  += 15;
     while ( pSrc->present )
     {
@@ -26900,12 +27042,12 @@
         *pBuf = pSrc->version;
         *pnConsumed += 1;
         pBuf += 1;
-        tmp108__ = 0U;
-        tmp108__ |= ( pSrc->aggregation << 0 );
-        tmp108__ |= ( pSrc->tsid << 1 );
-        tmp108__ |= ( pSrc->direction << 5 );
-        tmp108__ |= ( pSrc->reserved << 7 );
-        frameshtons(pCtx, pBuf, tmp108__, 0);
+        tmp109__ = 0U;
+        tmp109__ |= ( pSrc->aggregation << 0 );
+        tmp109__ |= ( pSrc->tsid << 1 );
+        tmp109__ |= ( pSrc->direction << 5 );
+        tmp109__ |= ( pSrc->reserved << 7 );
+        frameshtons(pCtx, pBuf, tmp109__, 0);
         *pnConsumed += 2;
         pBuf += 2;
         nBuf -=  2 ;
@@ -27144,9 +27286,9 @@
     tANI_U8* pIeLen = 0;
     tANI_U32 nConsumedOnEntry = *pnConsumed;
     tANI_U32 nNeeded = 0U;
-    tANI_U16 tmp109__;
-    tANI_U8 tmp110__;
-    tANI_U16 tmp111__;
+    tANI_U16 tmp110__;
+    tANI_U8 tmp111__;
+    tANI_U16 tmp112__;
     nNeeded  += 38;
     while ( pSrc->present )
     {
@@ -27168,30 +27310,30 @@
         *pBuf = pSrc->version;
         *pnConsumed += 1;
         pBuf += 1;
-        tmp109__ = 0U;
-        tmp109__ |= ( pSrc->traffic_type << 0 );
-        tmp109__ |= ( pSrc->tsid << 1 );
-        tmp109__ |= ( pSrc->direction << 5 );
-        tmp109__ |= ( pSrc->access_policy << 7 );
-        tmp109__ |= ( pSrc->aggregation << 9 );
-        tmp109__ |= ( pSrc->psb << 10 );
-        tmp109__ |= ( pSrc->user_priority << 11 );
-        tmp109__ |= ( pSrc->tsinfo_ack_pol << 14 );
-        frameshtons(pCtx, pBuf, tmp109__, 0);
+        tmp110__ = 0U;
+        tmp110__ |= ( pSrc->traffic_type << 0 );
+        tmp110__ |= ( pSrc->tsid << 1 );
+        tmp110__ |= ( pSrc->direction << 5 );
+        tmp110__ |= ( pSrc->access_policy << 7 );
+        tmp110__ |= ( pSrc->aggregation << 9 );
+        tmp110__ |= ( pSrc->psb << 10 );
+        tmp110__ |= ( pSrc->user_priority << 11 );
+        tmp110__ |= ( pSrc->tsinfo_ack_pol << 14 );
+        frameshtons(pCtx, pBuf, tmp110__, 0);
         *pnConsumed += 2;
         pBuf += 2;
         nBuf -=  2 ;
-        tmp110__ = 0U;
-        tmp110__ |= ( pSrc->tsinfo_rsvd << 0 );
-        tmp110__ |= ( pSrc->burst_size_defn << 7 );
-        *pBuf = tmp110__;
+        tmp111__ = 0U;
+        tmp111__ |= ( pSrc->tsinfo_rsvd << 0 );
+        tmp111__ |= ( pSrc->burst_size_defn << 7 );
+        *pBuf = tmp111__;
         *pnConsumed += 1;
         pBuf += 1;
         nBuf -=  1 ;
-        tmp111__ = 0U;
-        tmp111__ |= ( pSrc->size << 0 );
-        tmp111__ |= ( pSrc->fixed << 15 );
-        frameshtons(pCtx, pBuf, tmp111__, 0);
+        tmp112__ = 0U;
+        tmp112__ |= ( pSrc->size << 0 );
+        tmp112__ |= ( pSrc->fixed << 15 );
+        frameshtons(pCtx, pBuf, tmp112__, 0);
         *pnConsumed += 2;
         pBuf += 2;
         nBuf -=  2 ;
@@ -27501,7 +27643,6 @@
     tANI_U8* pIeLen = 0;
     tANI_U32 nConsumedOnEntry = *pnConsumed;
     tANI_U32 nNeeded = 0U;
-    tANI_U8 tmp112__;
     tANI_U8 tmp113__;
     tANI_U8 tmp114__;
     tANI_U8 tmp115__;
@@ -27509,6 +27650,7 @@
     tANI_U8 tmp117__;
     tANI_U8 tmp118__;
     tANI_U8 tmp119__;
+    tANI_U8 tmp120__;
     nNeeded  += 18;
     while ( pSrc->present )
     {
@@ -27523,76 +27665,76 @@
         *pBuf = pSrc->reserved;
         *pnConsumed += 1;
         pBuf += 1;
-        tmp112__ = 0U;
-        tmp112__ |= ( pSrc->acbe_aifsn << 0 );
-        tmp112__ |= ( pSrc->acbe_acm << 4 );
-        tmp112__ |= ( pSrc->acbe_aci << 5 );
-        tmp112__ |= ( pSrc->unused1 << 7 );
-        *pBuf = tmp112__;
+        tmp113__ = 0U;
+        tmp113__ |= ( pSrc->acbe_aifsn << 0 );
+        tmp113__ |= ( pSrc->acbe_acm << 4 );
+        tmp113__ |= ( pSrc->acbe_aci << 5 );
+        tmp113__ |= ( pSrc->unused1 << 7 );
+        *pBuf = tmp113__;
         *pnConsumed += 1;
         pBuf += 1;
         nBuf -=  1 ;
-        tmp113__ = 0U;
-        tmp113__ |= ( pSrc->acbe_acwmin << 0 );
-        tmp113__ |= ( pSrc->acbe_acwmax << 4 );
-        *pBuf = tmp113__;
+        tmp114__ = 0U;
+        tmp114__ |= ( pSrc->acbe_acwmin << 0 );
+        tmp114__ |= ( pSrc->acbe_acwmax << 4 );
+        *pBuf = tmp114__;
         *pnConsumed += 1;
         pBuf += 1;
         nBuf -=  1 ;
         frameshtons(pCtx, pBuf, pSrc->acbe_txoplimit, 0);
         *pnConsumed += 2;
         pBuf += 2;
-        tmp114__ = 0U;
-        tmp114__ |= ( pSrc->acbk_aifsn << 0 );
-        tmp114__ |= ( pSrc->acbk_acm << 4 );
-        tmp114__ |= ( pSrc->acbk_aci << 5 );
-        tmp114__ |= ( pSrc->unused2 << 7 );
-        *pBuf = tmp114__;
+        tmp115__ = 0U;
+        tmp115__ |= ( pSrc->acbk_aifsn << 0 );
+        tmp115__ |= ( pSrc->acbk_acm << 4 );
+        tmp115__ |= ( pSrc->acbk_aci << 5 );
+        tmp115__ |= ( pSrc->unused2 << 7 );
+        *pBuf = tmp115__;
         *pnConsumed += 1;
         pBuf += 1;
         nBuf -=  1 ;
-        tmp115__ = 0U;
-        tmp115__ |= ( pSrc->acbk_acwmin << 0 );
-        tmp115__ |= ( pSrc->acbk_acwmax << 4 );
-        *pBuf = tmp115__;
+        tmp116__ = 0U;
+        tmp116__ |= ( pSrc->acbk_acwmin << 0 );
+        tmp116__ |= ( pSrc->acbk_acwmax << 4 );
+        *pBuf = tmp116__;
         *pnConsumed += 1;
         pBuf += 1;
         nBuf -=  1 ;
         frameshtons(pCtx, pBuf, pSrc->acbk_txoplimit, 0);
         *pnConsumed += 2;
         pBuf += 2;
-        tmp116__ = 0U;
-        tmp116__ |= ( pSrc->acvi_aifsn << 0 );
-        tmp116__ |= ( pSrc->acvi_acm << 4 );
-        tmp116__ |= ( pSrc->acvi_aci << 5 );
-        tmp116__ |= ( pSrc->unused3 << 7 );
-        *pBuf = tmp116__;
+        tmp117__ = 0U;
+        tmp117__ |= ( pSrc->acvi_aifsn << 0 );
+        tmp117__ |= ( pSrc->acvi_acm << 4 );
+        tmp117__ |= ( pSrc->acvi_aci << 5 );
+        tmp117__ |= ( pSrc->unused3 << 7 );
+        *pBuf = tmp117__;
         *pnConsumed += 1;
         pBuf += 1;
         nBuf -=  1 ;
-        tmp117__ = 0U;
-        tmp117__ |= ( pSrc->acvi_acwmin << 0 );
-        tmp117__ |= ( pSrc->acvi_acwmax << 4 );
-        *pBuf = tmp117__;
+        tmp118__ = 0U;
+        tmp118__ |= ( pSrc->acvi_acwmin << 0 );
+        tmp118__ |= ( pSrc->acvi_acwmax << 4 );
+        *pBuf = tmp118__;
         *pnConsumed += 1;
         pBuf += 1;
         nBuf -=  1 ;
         frameshtons(pCtx, pBuf, pSrc->acvi_txoplimit, 0);
         *pnConsumed += 2;
         pBuf += 2;
-        tmp118__ = 0U;
-        tmp118__ |= ( pSrc->acvo_aifsn << 0 );
-        tmp118__ |= ( pSrc->acvo_acm << 4 );
-        tmp118__ |= ( pSrc->acvo_aci << 5 );
-        tmp118__ |= ( pSrc->unused4 << 7 );
-        *pBuf = tmp118__;
+        tmp119__ = 0U;
+        tmp119__ |= ( pSrc->acvo_aifsn << 0 );
+        tmp119__ |= ( pSrc->acvo_acm << 4 );
+        tmp119__ |= ( pSrc->acvo_aci << 5 );
+        tmp119__ |= ( pSrc->unused4 << 7 );
+        *pBuf = tmp119__;
         *pnConsumed += 1;
         pBuf += 1;
         nBuf -=  1 ;
-        tmp119__ = 0U;
-        tmp119__ |= ( pSrc->acvo_acwmin << 0 );
-        tmp119__ |= ( pSrc->acvo_acwmax << 4 );
-        *pBuf = tmp119__;
+        tmp120__ = 0U;
+        tmp120__ |= ( pSrc->acvo_acwmin << 0 );
+        tmp120__ |= ( pSrc->acvo_acwmax << 4 );
+        *pBuf = tmp120__;
         *pnConsumed += 1;
         pBuf += 1;
         nBuf -=  1 ;
@@ -27618,7 +27760,7 @@
     tANI_U8* pIeLen = 0;
     tANI_U32 nConsumedOnEntry = *pnConsumed;
     tANI_U32 nNeeded = 0U;
-    tANI_U8 tmp120__;
+    tANI_U8 tmp121__;
     nNeeded  += 1;
     while ( pSrc->present )
     {
@@ -27627,12 +27769,12 @@
         ++pBuf; ++(*pnConsumed);
         pIeLen = pBuf;
         ++pBuf; ++(*pnConsumed);
-        tmp120__ = 0U;
-        tmp120__ |= ( pSrc->non_erp_present << 0 );
-        tmp120__ |= ( pSrc->use_prot << 1 );
-        tmp120__ |= ( pSrc->barker_preamble << 2 );
-        tmp120__ |= ( pSrc->unused << 3 );
-        *pBuf = tmp120__;
+        tmp121__ = 0U;
+        tmp121__ |= ( pSrc->non_erp_present << 0 );
+        tmp121__ |= ( pSrc->use_prot << 1 );
+        tmp121__ |= ( pSrc->barker_preamble << 2 );
+        tmp121__ |= ( pSrc->unused << 3 );
+        *pBuf = tmp121__;
         *pnConsumed += 1;
         // fieldsEndFlag  = 1
         nBuf -=  1 ;
@@ -27693,7 +27835,7 @@
     tANI_U8* pIeLen = 0;
     tANI_U32 nConsumedOnEntry = *pnConsumed;
     tANI_U32 nNeeded = 0U;
-    tANI_U8 tmp121__;
+    tANI_U8 tmp122__;
     nNeeded  += 2;
     while ( pSrc->present )
     {
@@ -27713,10 +27855,10 @@
         *pBuf = pSrc->mgmt_state;
         *pnConsumed += 1;
         pBuf += 1;
-        tmp121__ = 0U;
-        tmp121__ |= ( pSrc->mbssid_mask << 0 );
-        tmp121__ |= ( pSrc->reserved << 3 );
-        *pBuf = tmp121__;
+        tmp122__ = 0U;
+        tmp122__ |= ( pSrc->mbssid_mask << 0 );
+        tmp122__ |= ( pSrc->reserved << 3 );
+        *pBuf = tmp122__;
         *pnConsumed += 1;
         // fieldsEndFlag  = 1
         nBuf -=  1 ;
@@ -27903,9 +28045,9 @@
     tANI_U8* pIeLen = 0;
     tANI_U32 nConsumedOnEntry = *pnConsumed;
     tANI_U32 nNeeded = 0U;
-    tANI_U32 tmp122__;
-    tANI_U16 tmp123__;
+    tANI_U32 tmp123__;
     tANI_U16 tmp124__;
+    tANI_U16 tmp125__;
     nNeeded  += 8;
     while ( pSrc->present )
     {
@@ -27914,69 +28056,69 @@
         ++pBuf; ++(*pnConsumed);
         pIeLen = pBuf;
         ++pBuf; ++(*pnConsumed);
-        tmp122__ = 0U;
-        tmp122__ |= ( pSrc->bssCoexistMgmtSupport << 0 );
-        tmp122__ |= ( pSrc->reserved1 << 1 );
-        tmp122__ |= ( pSrc->extChanSwitch << 2 );
-        tmp122__ |= ( pSrc->reserved2 << 3 );
-        tmp122__ |= ( pSrc->psmpCap << 4 );
-        tmp122__ |= ( pSrc->reserved3 << 5 );
-        tmp122__ |= ( pSrc->spsmpCap << 6 );
-        tmp122__ |= ( pSrc->event << 7 );
-        tmp122__ |= ( pSrc->diagnostics << 8 );
-        tmp122__ |= ( pSrc->multiDiagnostics << 9 );
-        tmp122__ |= ( pSrc->locTracking << 10 );
-        tmp122__ |= ( pSrc->FMS << 11 );
-        tmp122__ |= ( pSrc->proxyARPService << 12 );
-        tmp122__ |= ( pSrc->coLocIntfReporting << 13 );
-        tmp122__ |= ( pSrc->civicLoc << 14 );
-        tmp122__ |= ( pSrc->geospatialLoc << 15 );
-        tmp122__ |= ( pSrc->TFS << 16 );
-        tmp122__ |= ( pSrc->wnmSleepMode << 17 );
-        tmp122__ |= ( pSrc->timBroadcast << 18 );
-        tmp122__ |= ( pSrc->bssTransition << 19 );
-        tmp122__ |= ( pSrc->qosTrafficCap << 20 );
-        tmp122__ |= ( pSrc->acStaCnt << 21 );
-        tmp122__ |= ( pSrc->multiBSSID << 22 );
-        tmp122__ |= ( pSrc->timingMeas << 23 );
-        tmp122__ |= ( pSrc->chanUsage << 24 );
-        tmp122__ |= ( pSrc->ssidList << 25 );
-        tmp122__ |= ( pSrc->DMS << 26 );
-        tmp122__ |= ( pSrc->UTCTSFOffset << 27 );
-        tmp122__ |= ( pSrc->TDLSPeerUAPSDBufferSTA << 28 );
-        tmp122__ |= ( pSrc->TDLSPeerPSMSupp << 29 );
-        tmp122__ |= ( pSrc->TDLSChannelSwitching << 30 );
-        tmp122__ |= ( pSrc->interworkingService << 31 );
-        frameshtonl(pCtx, pBuf, tmp122__, 0);
+        tmp123__ = 0U;
+        tmp123__ |= ( pSrc->bssCoexistMgmtSupport << 0 );
+        tmp123__ |= ( pSrc->reserved1 << 1 );
+        tmp123__ |= ( pSrc->extChanSwitch << 2 );
+        tmp123__ |= ( pSrc->reserved2 << 3 );
+        tmp123__ |= ( pSrc->psmpCap << 4 );
+        tmp123__ |= ( pSrc->reserved3 << 5 );
+        tmp123__ |= ( pSrc->spsmpCap << 6 );
+        tmp123__ |= ( pSrc->event << 7 );
+        tmp123__ |= ( pSrc->diagnostics << 8 );
+        tmp123__ |= ( pSrc->multiDiagnostics << 9 );
+        tmp123__ |= ( pSrc->locTracking << 10 );
+        tmp123__ |= ( pSrc->FMS << 11 );
+        tmp123__ |= ( pSrc->proxyARPService << 12 );
+        tmp123__ |= ( pSrc->coLocIntfReporting << 13 );
+        tmp123__ |= ( pSrc->civicLoc << 14 );
+        tmp123__ |= ( pSrc->geospatialLoc << 15 );
+        tmp123__ |= ( pSrc->TFS << 16 );
+        tmp123__ |= ( pSrc->wnmSleepMode << 17 );
+        tmp123__ |= ( pSrc->timBroadcast << 18 );
+        tmp123__ |= ( pSrc->bssTransition << 19 );
+        tmp123__ |= ( pSrc->qosTrafficCap << 20 );
+        tmp123__ |= ( pSrc->acStaCnt << 21 );
+        tmp123__ |= ( pSrc->multiBSSID << 22 );
+        tmp123__ |= ( pSrc->timingMeas << 23 );
+        tmp123__ |= ( pSrc->chanUsage << 24 );
+        tmp123__ |= ( pSrc->ssidList << 25 );
+        tmp123__ |= ( pSrc->DMS << 26 );
+        tmp123__ |= ( pSrc->UTCTSFOffset << 27 );
+        tmp123__ |= ( pSrc->TDLSPeerUAPSDBufferSTA << 28 );
+        tmp123__ |= ( pSrc->TDLSPeerPSMSupp << 29 );
+        tmp123__ |= ( pSrc->TDLSChannelSwitching << 30 );
+        tmp123__ |= ( pSrc->interworkingService << 31 );
+        frameshtonl(pCtx, pBuf, tmp123__, 0);
         *pnConsumed += 4;
         pBuf += 4;
         nBuf -=  4 ;
-        tmp123__ = 0U;
-        tmp123__ |= ( pSrc->qosMap << 0 );
-        tmp123__ |= ( pSrc->EBR << 1 );
-        tmp123__ |= ( pSrc->sspnInterface << 2 );
-        tmp123__ |= ( pSrc->reserved4 << 3 );
-        tmp123__ |= ( pSrc->msgCFCap << 4 );
-        tmp123__ |= ( pSrc->TDLSSupport << 5 );
-        tmp123__ |= ( pSrc->TDLSProhibited << 6 );
-        tmp123__ |= ( pSrc->TDLSChanSwitProhibited << 7 );
-        tmp123__ |= ( pSrc->rejectUnadmittedTraffic << 8 );
-        tmp123__ |= ( pSrc->serviceIntervalGranularity << 9 );
-        tmp123__ |= ( pSrc->identifierLoc << 12 );
-        tmp123__ |= ( pSrc->uapsdCoexistence << 13 );
-        tmp123__ |= ( pSrc->wnmNotification << 14 );
-        tmp123__ |= ( pSrc->reserved5 << 15 );
-        frameshtons(pCtx, pBuf, tmp123__, 0);
+        tmp124__ = 0U;
+        tmp124__ |= ( pSrc->qosMap << 0 );
+        tmp124__ |= ( pSrc->EBR << 1 );
+        tmp124__ |= ( pSrc->sspnInterface << 2 );
+        tmp124__ |= ( pSrc->reserved4 << 3 );
+        tmp124__ |= ( pSrc->msgCFCap << 4 );
+        tmp124__ |= ( pSrc->TDLSSupport << 5 );
+        tmp124__ |= ( pSrc->TDLSProhibited << 6 );
+        tmp124__ |= ( pSrc->TDLSChanSwitProhibited << 7 );
+        tmp124__ |= ( pSrc->rejectUnadmittedTraffic << 8 );
+        tmp124__ |= ( pSrc->serviceIntervalGranularity << 9 );
+        tmp124__ |= ( pSrc->identifierLoc << 12 );
+        tmp124__ |= ( pSrc->uapsdCoexistence << 13 );
+        tmp124__ |= ( pSrc->wnmNotification << 14 );
+        tmp124__ |= ( pSrc->reserved5 << 15 );
+        frameshtons(pCtx, pBuf, tmp124__, 0);
         *pnConsumed += 2;
         pBuf += 2;
         nBuf -=  2 ;
-        tmp124__ = 0U;
-        tmp124__ |= ( pSrc->UTF8SSID << 0 );
-        tmp124__ |= ( pSrc->reserved6 << 1 );
-        tmp124__ |= ( pSrc->TDLSWiderBW << 13 );
-        tmp124__ |= ( pSrc->operModeNotification << 14 );
-        tmp124__ |= ( pSrc->reserved7 << 15 );
-        frameshtons(pCtx, pBuf, tmp124__, 0);
+        tmp125__ = 0U;
+        tmp125__ |= ( pSrc->UTF8SSID << 0 );
+        tmp125__ |= ( pSrc->reserved6 << 1 );
+        tmp125__ |= ( pSrc->TDLSWiderBW << 13 );
+        tmp125__ |= ( pSrc->operModeNotification << 14 );
+        tmp125__ |= ( pSrc->reserved7 << 15 );
+        frameshtons(pCtx, pBuf, tmp125__, 0);
         *pnConsumed += 2;
         // fieldsEndFlag  = 1
         nBuf -=  2 ;
@@ -28173,7 +28315,7 @@
     tANI_U8* pIeLen = 0;
     tANI_U32 nConsumedOnEntry = *pnConsumed;
     tANI_U32 nNeeded = 0U;
-    tANI_U16 tmp125__;
+    tANI_U16 tmp126__;
     tANI_U32 status = DOT11F_PARSE_SUCCESS;
     status = dot11fGetPackedIEFTInfo(pCtx, pSrc, &nNeeded);
     if ( ! DOT11F_SUCCEEDED( status ) ) return status;
@@ -28184,10 +28326,10 @@
         ++pBuf; --nBuf; ++(*pnConsumed);
         pIeLen = pBuf;
         ++pBuf; --nBuf; ++(*pnConsumed);
-        tmp125__ = 0U;
-        tmp125__ |= ( pSrc->reserved << 0 );
-        tmp125__ |= ( pSrc->IECount << 8 );
-        frameshtons(pCtx, pBuf, tmp125__, 0);
+        tmp126__ = 0U;
+        tmp126__ |= ( pSrc->reserved << 0 );
+        tmp126__ |= ( pSrc->IECount << 8 );
+        frameshtons(pCtx, pBuf, tmp126__, 0);
         *pnConsumed += 2;
         pBuf += 2;
         nBuf -=  2 ;
@@ -28217,6 +28359,78 @@
     return status;
 } /* End dot11fPackIeFTInfo. */
 
+tANI_U32 dot11fPackIeHT2040BSSCoexistence(tpAniSirGlobal pCtx,
+                                          tDot11fIEHT2040BSSCoexistence *pSrc,
+                                          tANI_U8 *pBuf,
+                                          tANI_U32 nBuf,
+                                          tANI_U32 *pnConsumed)
+{
+    tANI_U8* pIeLen = 0;
+    tANI_U32 nConsumedOnEntry = *pnConsumed;
+    tANI_U32 nNeeded = 0U;
+    tANI_U8 tmp127__;
+    nNeeded  += 1;
+    while ( pSrc->present )
+    {
+        if ( nNeeded > nBuf ) return DOT11F_BUFFER_OVERFLOW;
+        *pBuf = 72;
+        ++pBuf; ++(*pnConsumed);
+        pIeLen = pBuf;
+        ++pBuf; ++(*pnConsumed);
+        tmp127__ = 0U;
+        tmp127__ |= ( pSrc->infoRequest << 0 );
+        tmp127__ |= ( pSrc->fortyMHzIntolerant << 1 );
+        tmp127__ |= ( pSrc->twentyMHzBssWidthReq << 2 );
+        tmp127__ |= ( pSrc->obssScanExemptionReq << 3 );
+        tmp127__ |= ( pSrc->obssScanExemptionGrant << 4 );
+        tmp127__ |= ( pSrc->unused << 5 );
+        *pBuf = tmp127__;
+        *pnConsumed += 1;
+        // fieldsEndFlag  = 1
+        nBuf -=  1 ;
+        break;
+    }
+    (void)pCtx;
+    if (pIeLen)
+    {
+        *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
+    }
+    return DOT11F_PARSE_SUCCESS;
+} /* End dot11fPackIeHT2040BSSCoexistence. */
+
+tANI_U32 dot11fPackIeHT2040BSSIntolerantReport(tpAniSirGlobal pCtx,
+                                               tDot11fIEHT2040BSSIntolerantReport *pSrc,
+                                               tANI_U8 *pBuf,
+                                               tANI_U32 nBuf,
+                                               tANI_U32 *pnConsumed)
+{
+    tANI_U8* pIeLen = 0;
+    tANI_U32 nConsumedOnEntry = *pnConsumed;
+    tANI_U32 nNeeded = 0U;
+    nNeeded  +=  (pSrc->num_channelList + 1);
+    while ( pSrc->present )
+    {
+        if ( nNeeded > nBuf ) return DOT11F_BUFFER_OVERFLOW;
+        *pBuf = 73;
+        ++pBuf; ++(*pnConsumed);
+        pIeLen = pBuf;
+        ++pBuf; ++(*pnConsumed);
+        *pBuf = pSrc->operatingClass;
+        *pnConsumed += 1;
+        pBuf += 1;
+        DOT11F_MEMCPY(pCtx, pBuf, &( pSrc->channelList ), pSrc->num_channelList);
+        *pnConsumed += pSrc->num_channelList;
+        // fieldsEndFlag = 1
+        break;
+    }
+    (void)pCtx;
+    if (pIeLen)
+    {
+        *pIeLen = *pnConsumed - nConsumedOnEntry - 2;
+    }
+    return DOT11F_PARSE_SUCCESS;
+} /* End dot11fPackIeHT2040BSSIntolerantReport. */
+
 tANI_U32 dot11fPackIeHTCaps(tpAniSirGlobal pCtx,
                             tDot11fIEHTCaps *pSrc,
                             tANI_U8 *pBuf,
@@ -28226,11 +28440,11 @@
     tANI_U8* pIeLen = 0;
     tANI_U32 nConsumedOnEntry = *pnConsumed;
     tANI_U32 nNeeded = 0U;
-    tANI_U16 tmp126__;
-    tANI_U8 tmp127__;
     tANI_U16 tmp128__;
-    tANI_U32 tmp129__;
-    tANI_U8 tmp130__;
+    tANI_U8 tmp129__;
+    tANI_U16 tmp130__;
+    tANI_U32 tmp131__;
+    tANI_U8 tmp132__;
     nNeeded  +=  (pSrc->num_rsvd + 26);
     while ( pSrc->present )
     {
@@ -28239,77 +28453,77 @@
         ++pBuf; ++(*pnConsumed);
         pIeLen = pBuf;
         ++pBuf; ++(*pnConsumed);
-        tmp126__ = 0U;
-        tmp126__ |= ( pSrc->advCodingCap << 0 );
-        tmp126__ |= ( pSrc->supportedChannelWidthSet << 1 );
-        tmp126__ |= ( pSrc->mimoPowerSave << 2 );
-        tmp126__ |= ( pSrc->greenField << 4 );
-        tmp126__ |= ( pSrc->shortGI20MHz << 5 );
-        tmp126__ |= ( pSrc->shortGI40MHz << 6 );
-        tmp126__ |= ( pSrc->txSTBC << 7 );
-        tmp126__ |= ( pSrc->rxSTBC << 8 );
-        tmp126__ |= ( pSrc->delayedBA << 10 );
-        tmp126__ |= ( pSrc->maximalAMSDUsize << 11 );
-        tmp126__ |= ( pSrc->dsssCckMode40MHz << 12 );
-        tmp126__ |= ( pSrc->psmp << 13 );
-        tmp126__ |= ( pSrc->stbcControlFrame << 14 );
-        tmp126__ |= ( pSrc->lsigTXOPProtection << 15 );
-        frameshtons(pCtx, pBuf, tmp126__, 0);
+        tmp128__ = 0U;
+        tmp128__ |= ( pSrc->advCodingCap << 0 );
+        tmp128__ |= ( pSrc->supportedChannelWidthSet << 1 );
+        tmp128__ |= ( pSrc->mimoPowerSave << 2 );
+        tmp128__ |= ( pSrc->greenField << 4 );
+        tmp128__ |= ( pSrc->shortGI20MHz << 5 );
+        tmp128__ |= ( pSrc->shortGI40MHz << 6 );
+        tmp128__ |= ( pSrc->txSTBC << 7 );
+        tmp128__ |= ( pSrc->rxSTBC << 8 );
+        tmp128__ |= ( pSrc->delayedBA << 10 );
+        tmp128__ |= ( pSrc->maximalAMSDUsize << 11 );
+        tmp128__ |= ( pSrc->dsssCckMode40MHz << 12 );
+        tmp128__ |= ( pSrc->psmp << 13 );
+        tmp128__ |= ( pSrc->stbcControlFrame << 14 );
+        tmp128__ |= ( pSrc->lsigTXOPProtection << 15 );
+        frameshtons(pCtx, pBuf, tmp128__, 0);
         *pnConsumed += 2;
         pBuf += 2;
         nBuf -=  2 ;
-        tmp127__ = 0U;
-        tmp127__ |= ( pSrc->maxRxAMPDUFactor << 0 );
-        tmp127__ |= ( pSrc->mpduDensity << 2 );
-        tmp127__ |= ( pSrc->reserved1 << 5 );
-        *pBuf = tmp127__;
+        tmp129__ = 0U;
+        tmp129__ |= ( pSrc->maxRxAMPDUFactor << 0 );
+        tmp129__ |= ( pSrc->mpduDensity << 2 );
+        tmp129__ |= ( pSrc->reserved1 << 5 );
+        *pBuf = tmp129__;
         *pnConsumed += 1;
         pBuf += 1;
         nBuf -=  1 ;
         DOT11F_MEMCPY(pCtx, pBuf, pSrc->supportedMCSSet, 16);
         *pnConsumed += 16;
         pBuf += 16;
-        tmp128__ = 0U;
-        tmp128__ |= ( pSrc->pco << 0 );
-        tmp128__ |= ( pSrc->transitionTime << 1 );
-        tmp128__ |= ( pSrc->reserved2 << 3 );
-        tmp128__ |= ( pSrc->mcsFeedback << 8 );
-        tmp128__ |= ( pSrc->reserved3 << 10 );
-        frameshtons(pCtx, pBuf, tmp128__, 0);
+        tmp130__ = 0U;
+        tmp130__ |= ( pSrc->pco << 0 );
+        tmp130__ |= ( pSrc->transitionTime << 1 );
+        tmp130__ |= ( pSrc->reserved2 << 3 );
+        tmp130__ |= ( pSrc->mcsFeedback << 8 );
+        tmp130__ |= ( pSrc->reserved3 << 10 );
+        frameshtons(pCtx, pBuf, tmp130__, 0);
         *pnConsumed += 2;
         pBuf += 2;
         nBuf -=  2 ;
-        tmp129__ = 0U;
-        tmp129__ |= ( pSrc->txBF << 0 );
-        tmp129__ |= ( pSrc->rxStaggeredSounding << 1 );
-        tmp129__ |= ( pSrc->txStaggeredSounding << 2 );
-        tmp129__ |= ( pSrc->rxZLF << 3 );
-        tmp129__ |= ( pSrc->txZLF << 4 );
-        tmp129__ |= ( pSrc->implicitTxBF << 5 );
-        tmp129__ |= ( pSrc->calibration << 6 );
-        tmp129__ |= ( pSrc->explicitCSITxBF << 8 );
-        tmp129__ |= ( pSrc->explicitUncompressedSteeringMatrix << 9 );
-        tmp129__ |= ( pSrc->explicitBFCSIFeedback << 10 );
-        tmp129__ |= ( pSrc->explicitUncompressedSteeringMatrixFeedback << 13 );
-        tmp129__ |= ( pSrc->explicitCompressedSteeringMatrixFeedback << 16 );
-        tmp129__ |= ( pSrc->csiNumBFAntennae << 19 );
-        tmp129__ |= ( pSrc->uncompressedSteeringMatrixBFAntennae << 21 );
-        tmp129__ |= ( pSrc->compressedSteeringMatrixBFAntennae << 23 );
-        tmp129__ |= ( pSrc->reserved4 << 25 );
-        frameshtonl(pCtx, pBuf, tmp129__, 0);
+        tmp131__ = 0U;
+        tmp131__ |= ( pSrc->txBF << 0 );
+        tmp131__ |= ( pSrc->rxStaggeredSounding << 1 );
+        tmp131__ |= ( pSrc->txStaggeredSounding << 2 );
+        tmp131__ |= ( pSrc->rxZLF << 3 );
+        tmp131__ |= ( pSrc->txZLF << 4 );
+        tmp131__ |= ( pSrc->implicitTxBF << 5 );
+        tmp131__ |= ( pSrc->calibration << 6 );
+        tmp131__ |= ( pSrc->explicitCSITxBF << 8 );
+        tmp131__ |= ( pSrc->explicitUncompressedSteeringMatrix << 9 );
+        tmp131__ |= ( pSrc->explicitBFCSIFeedback << 10 );
+        tmp131__ |= ( pSrc->explicitUncompressedSteeringMatrixFeedback << 13 );
+        tmp131__ |= ( pSrc->explicitCompressedSteeringMatrixFeedback << 16 );
+        tmp131__ |= ( pSrc->csiNumBFAntennae << 19 );
+        tmp131__ |= ( pSrc->uncompressedSteeringMatrixBFAntennae << 21 );
+        tmp131__ |= ( pSrc->compressedSteeringMatrixBFAntennae << 23 );
+        tmp131__ |= ( pSrc->reserved4 << 25 );
+        frameshtonl(pCtx, pBuf, tmp131__, 0);
         *pnConsumed += 4;
         pBuf += 4;
         nBuf -=  4 ;
-        tmp130__ = 0U;
-        tmp130__ |= ( pSrc->antennaSelection << 0 );
-        tmp130__ |= ( pSrc->explicitCSIFeedbackTx << 1 );
-        tmp130__ |= ( pSrc->antennaIndicesFeedbackTx << 2 );
-        tmp130__ |= ( pSrc->explicitCSIFeedback << 3 );
-        tmp130__ |= ( pSrc->antennaIndicesFeedback << 4 );
-        tmp130__ |= ( pSrc->rxAS << 5 );
-        tmp130__ |= ( pSrc->txSoundingPPDUs << 6 );
-        tmp130__ |= ( pSrc->reserved5 << 7 );
-        *pBuf = tmp130__;
+        tmp132__ = 0U;
+        tmp132__ |= ( pSrc->antennaSelection << 0 );
+        tmp132__ |= ( pSrc->explicitCSIFeedbackTx << 1 );
+        tmp132__ |= ( pSrc->antennaIndicesFeedbackTx << 2 );
+        tmp132__ |= ( pSrc->explicitCSIFeedback << 3 );
+        tmp132__ |= ( pSrc->antennaIndicesFeedback << 4 );
+        tmp132__ |= ( pSrc->rxAS << 5 );
+        tmp132__ |= ( pSrc->txSoundingPPDUs << 6 );
+        tmp132__ |= ( pSrc->reserved5 << 7 );
+        *pBuf = tmp132__;
         *pnConsumed += 1;
         pBuf += 1;
         nBuf -=  1 ;
@@ -28335,9 +28549,9 @@
     tANI_U8* pIeLen = 0;
     tANI_U32 nConsumedOnEntry = *pnConsumed;
     tANI_U32 nNeeded = 0U;
-    tANI_U8 tmp131__;
-    tANI_U16 tmp132__;
-    tANI_U16 tmp133__;
+    tANI_U8 tmp133__;
+    tANI_U16 tmp134__;
+    tANI_U16 tmp135__;
     nNeeded  +=  (pSrc->num_rsvd + 22);
     while ( pSrc->present )
     {
@@ -28349,35 +28563,35 @@
         *pBuf = pSrc->primaryChannel;
         *pnConsumed += 1;
         pBuf += 1;
-        tmp131__ = 0U;
-        tmp131__ |= ( pSrc->secondaryChannelOffset << 0 );
-        tmp131__ |= ( pSrc->recommendedTxWidthSet << 2 );
-        tmp131__ |= ( pSrc->rifsMode << 3 );
-        tmp131__ |= ( pSrc->controlledAccessOnly << 4 );
-        tmp131__ |= ( pSrc->serviceIntervalGranularity << 5 );
-        *pBuf = tmp131__;
+        tmp133__ = 0U;
+        tmp133__ |= ( pSrc->secondaryChannelOffset << 0 );
+        tmp133__ |= ( pSrc->recommendedTxWidthSet << 2 );
+        tmp133__ |= ( pSrc->rifsMode << 3 );
+        tmp133__ |= ( pSrc->controlledAccessOnly << 4 );
+        tmp133__ |= ( pSrc->serviceIntervalGranularity << 5 );
+        *pBuf = tmp133__;
         *pnConsumed += 1;
         pBuf += 1;
         nBuf -=  1 ;
-        tmp132__ = 0U;
-        tmp132__ |= ( pSrc->opMode << 0 );
-        tmp132__ |= ( pSrc->nonGFDevicesPresent << 2 );
-        tmp132__ |= ( pSrc->transmitBurstLimit << 3 );
-        tmp132__ |= ( pSrc->obssNonHTStaPresent << 4 );
-        tmp132__ |= ( pSrc->reserved << 5 );
-        frameshtons(pCtx, pBuf, tmp132__, 0);
+        tmp134__ = 0U;
+        tmp134__ |= ( pSrc->opMode << 0 );
+        tmp134__ |= ( pSrc->nonGFDevicesPresent << 2 );
+        tmp134__ |= ( pSrc->transmitBurstLimit << 3 );
+        tmp134__ |= ( pSrc->obssNonHTStaPresent << 4 );
+        tmp134__ |= ( pSrc->reserved << 5 );
+        frameshtons(pCtx, pBuf, tmp134__, 0);
         *pnConsumed += 2;
         pBuf += 2;
         nBuf -=  2 ;
-        tmp133__ = 0U;
-        tmp133__ |= ( pSrc->basicSTBCMCS << 0 );
-        tmp133__ |= ( pSrc->dualCTSProtection << 7 );
-        tmp133__ |= ( pSrc->secondaryBeacon << 8 );
-        tmp133__ |= ( pSrc->lsigTXOPProtectionFullSupport << 9 );
-        tmp133__ |= ( pSrc->pcoActive << 10 );
-        tmp133__ |= ( pSrc->pcoPhase << 11 );
-        tmp133__ |= ( pSrc->reserved2 << 12 );
-        frameshtons(pCtx, pBuf, tmp133__, 0);
+        tmp135__ = 0U;
+        tmp135__ |= ( pSrc->basicSTBCMCS << 0 );
+        tmp135__ |= ( pSrc->dualCTSProtection << 7 );
+        tmp135__ |= ( pSrc->secondaryBeacon << 8 );
+        tmp135__ |= ( pSrc->lsigTXOPProtectionFullSupport << 9 );
+        tmp135__ |= ( pSrc->pcoActive << 10 );
+        tmp135__ |= ( pSrc->pcoPhase << 11 );
+        tmp135__ |= ( pSrc->reserved2 << 12 );
+        frameshtons(pCtx, pBuf, tmp135__, 0);
         *pnConsumed += 2;
         pBuf += 2;
         nBuf -=  2 ;
@@ -28472,9 +28686,9 @@
     tANI_U8* pIeLen = 0;
     tANI_U32 nConsumedOnEntry = *pnConsumed;
     tANI_U32 nNeeded = 0U;
-    tANI_U8 tmp134__;
-    tANI_U8 tmp135__;
     tANI_U8 tmp136__;
+    tANI_U8 tmp137__;
+    tANI_U8 tmp138__;
     tANI_U32 status = DOT11F_PARSE_SUCCESS;
     status = dot11fGetPackedIEMeasurementReport(pCtx, pSrc, &nNeeded);
     if ( ! DOT11F_SUCCEEDED( status ) ) return status;
@@ -28488,12 +28702,12 @@
         *pBuf = pSrc->token;
         *pnConsumed += 1;
         pBuf += 1;
-        tmp134__ = 0U;
-        tmp134__ |= ( pSrc->late << 0 );
-        tmp134__ |= ( pSrc->incapable << 1 );
-        tmp134__ |= ( pSrc->refused << 2 );
-        tmp134__ |= ( pSrc->unused << 3 );
-        *pBuf = tmp134__;
+        tmp136__ = 0U;
+        tmp136__ |= ( pSrc->late << 0 );
+        tmp136__ |= ( pSrc->incapable << 1 );
+        tmp136__ |= ( pSrc->refused << 2 );
+        tmp136__ |= ( pSrc->unused << 3 );
+        *pBuf = tmp136__;
         *pnConsumed += 1;
         pBuf += 1;
         nBuf -=  1 ;
@@ -28513,14 +28727,14 @@
                     frameshtons(pCtx, pBuf, pSrc->report.Basic.meas_duration, 0);
                     *pnConsumed += 2;
                     pBuf += 2;
-                    tmp135__ = 0U;
-                    tmp135__ |= ( pSrc->report.Basic.bss << 0 );
-                    tmp135__ |= ( pSrc->report.Basic.ofdm_preamble << 1 );
-                    tmp135__ |= ( pSrc->report.Basic.unid_signal << 2 );
-                    tmp135__ |= ( pSrc->report.Basic.rader << 3 );
-                    tmp135__ |= ( pSrc->report.Basic.unmeasured << 4 );
-                    tmp135__ |= ( pSrc->report.Basic.unused << 5 );
-                    *pBuf = tmp135__;
+                    tmp137__ = 0U;
+                    tmp137__ |= ( pSrc->report.Basic.bss << 0 );
+                    tmp137__ |= ( pSrc->report.Basic.ofdm_preamble << 1 );
+                    tmp137__ |= ( pSrc->report.Basic.unid_signal << 2 );
+                    tmp137__ |= ( pSrc->report.Basic.rader << 3 );
+                    tmp137__ |= ( pSrc->report.Basic.unmeasured << 4 );
+                    tmp137__ |= ( pSrc->report.Basic.unused << 5 );
+                    *pBuf = tmp137__;
                     *pnConsumed += 1;
                     // fieldsEndFlag  = 1
                     nBuf -=  1 ;
@@ -28587,10 +28801,10 @@
                     frameshtons(pCtx, pBuf, pSrc->report.Beacon.meas_duration, 0);
                     *pnConsumed += 2;
                     pBuf += 2;
-                    tmp136__ = 0U;
-                    tmp136__ |= ( pSrc->report.Beacon.condensed_PHY << 0 );
-                    tmp136__ |= ( pSrc->report.Beacon.reported_frame_type << 7 );
-                    *pBuf = tmp136__;
+                    tmp138__ = 0U;
+                    tmp138__ |= ( pSrc->report.Beacon.condensed_PHY << 0 );
+                    tmp138__ |= ( pSrc->report.Beacon.reported_frame_type << 7 );
+                    *pBuf = tmp138__;
                     *pnConsumed += 1;
                     pBuf += 1;
                     nBuf -=  1 ;
@@ -28639,7 +28853,7 @@
     tANI_U8* pIeLen = 0;
     tANI_U32 nConsumedOnEntry = *pnConsumed;
     tANI_U32 nNeeded = 0U;
-    tANI_U8 tmp137__;
+    tANI_U8 tmp139__;
     tANI_U32 status = DOT11F_PARSE_SUCCESS;
     status = dot11fGetPackedIEMeasurementRequest(pCtx, pSrc, &nNeeded);
     if ( ! DOT11F_SUCCEEDED( status ) ) return status;
@@ -28653,14 +28867,14 @@
         *pBuf = pSrc->measurement_token;
         *pnConsumed += 1;
         pBuf += 1;
-        tmp137__ = 0U;
-        tmp137__ |= ( pSrc->parallel << 0 );
-        tmp137__ |= ( pSrc->enable << 1 );
-        tmp137__ |= ( pSrc->request << 2 );
-        tmp137__ |= ( pSrc->report << 3 );
-        tmp137__ |= ( pSrc->durationMandatory << 4 );
-        tmp137__ |= ( pSrc->unused << 5 );
-        *pBuf = tmp137__;
+        tmp139__ = 0U;
+        tmp139__ |= ( pSrc->parallel << 0 );
+        tmp139__ |= ( pSrc->enable << 1 );
+        tmp139__ |= ( pSrc->request << 2 );
+        tmp139__ |= ( pSrc->report << 3 );
+        tmp139__ |= ( pSrc->durationMandatory << 4 );
+        tmp139__ |= ( pSrc->unused << 5 );
+        *pBuf = tmp139__;
         *pnConsumed += 1;
         pBuf += 1;
         nBuf -=  1 ;
@@ -28749,7 +28963,7 @@
     tANI_U8* pIeLen = 0;
     tANI_U32 nConsumedOnEntry = *pnConsumed;
     tANI_U32 nNeeded = 0U;
-    tANI_U8 tmp138__;
+    tANI_U8 tmp140__;
     nNeeded  += 3;
     while ( pSrc->present )
     {
@@ -28761,11 +28975,11 @@
         frameshtons(pCtx, pBuf, pSrc->MDID, 0);
         *pnConsumed += 2;
         pBuf += 2;
-        tmp138__ = 0U;
-        tmp138__ |= ( pSrc->overDSCap << 0 );
-        tmp138__ |= ( pSrc->resourceReqCap << 1 );
-        tmp138__ |= ( pSrc->reserved << 2 );
-        *pBuf = tmp138__;
+        tmp140__ = 0U;
+        tmp140__ |= ( pSrc->overDSCap << 0 );
+        tmp140__ |= ( pSrc->resourceReqCap << 1 );
+        tmp140__ |= ( pSrc->reserved << 2 );
+        *pBuf = tmp140__;
         *pnConsumed += 1;
         // fieldsEndFlag  = 1
         nBuf -=  1 ;
@@ -28788,8 +29002,8 @@
     tANI_U8* pIeLen = 0;
     tANI_U32 nConsumedOnEntry = *pnConsumed;
     tANI_U32 nNeeded = 0U;
-    tANI_U8 tmp139__;
-    tANI_U8 tmp140__;
+    tANI_U8 tmp141__;
+    tANI_U8 tmp142__;
     tANI_U32 status = DOT11F_PARSE_SUCCESS;
     status = dot11fGetPackedIENeighborReport(pCtx, pSrc, &nNeeded);
     if ( ! DOT11F_SUCCEEDED( status ) ) return status;
@@ -28803,24 +29017,24 @@
         DOT11F_MEMCPY(pCtx, pBuf, pSrc->bssid, 6);
         *pnConsumed += 6;
         pBuf += 6;
-        tmp139__ = 0U;
-        tmp139__ |= ( pSrc->APReachability << 0 );
-        tmp139__ |= ( pSrc->Security << 2 );
-        tmp139__ |= ( pSrc->KeyScope << 3 );
-        tmp139__ |= ( pSrc->SpecMgmtCap << 4 );
-        tmp139__ |= ( pSrc->QosCap << 5 );
-        tmp139__ |= ( pSrc->apsd << 6 );
-        tmp139__ |= ( pSrc->rrm << 7 );
-        *pBuf = tmp139__;
+        tmp141__ = 0U;
+        tmp141__ |= ( pSrc->APReachability << 0 );
+        tmp141__ |= ( pSrc->Security << 2 );
+        tmp141__ |= ( pSrc->KeyScope << 3 );
+        tmp141__ |= ( pSrc->SpecMgmtCap << 4 );
+        tmp141__ |= ( pSrc->QosCap << 5 );
+        tmp141__ |= ( pSrc->apsd << 6 );
+        tmp141__ |= ( pSrc->rrm << 7 );
+        *pBuf = tmp141__;
         *pnConsumed += 1;
         pBuf += 1;
         nBuf -=  1 ;
-        tmp140__ = 0U;
-        tmp140__ |= ( pSrc->DelayedBA << 0 );
-        tmp140__ |= ( pSrc->ImmBA << 1 );
-        tmp140__ |= ( pSrc->MobilityDomain << 2 );
-        tmp140__ |= ( pSrc->reserved << 3 );
-        *pBuf = tmp140__;
+        tmp142__ = 0U;
+        tmp142__ |= ( pSrc->DelayedBA << 0 );
+        tmp142__ |= ( pSrc->ImmBA << 1 );
+        tmp142__ |= ( pSrc->MobilityDomain << 2 );
+        tmp142__ |= ( pSrc->reserved << 3 );
+        *pBuf = tmp142__;
         *pnConsumed += 1;
         pBuf += 1;
         nBuf -=  1 ;
@@ -28910,7 +29124,7 @@
     tANI_U8* pIeLen = 0;
     tANI_U32 nConsumedOnEntry = *pnConsumed;
     tANI_U32 nNeeded = 0U;
-    tANI_U8 tmp141__;
+    tANI_U8 tmp143__;
     nNeeded  += 1;
     while ( pSrc->present )
     {
@@ -28919,12 +29133,12 @@
         ++pBuf; ++(*pnConsumed);
         pIeLen = pBuf;
         ++pBuf; ++(*pnConsumed);
-        tmp141__ = 0U;
-        tmp141__ |= ( pSrc->chanWidth << 0 );
-        tmp141__ |= ( pSrc->reserved << 2 );
-        tmp141__ |= ( pSrc->rxNSS << 4 );
-        tmp141__ |= ( pSrc->rxNSSType << 7 );
-        *pBuf = tmp141__;
+        tmp143__ = 0U;
+        tmp143__ |= ( pSrc->chanWidth << 0 );
+        tmp143__ |= ( pSrc->reserved << 2 );
+        tmp143__ |= ( pSrc->rxNSS << 4 );
+        tmp143__ |= ( pSrc->rxNSSType << 7 );
+        *pBuf = tmp143__;
         *pnConsumed += 1;
         // fieldsEndFlag  = 1
         nBuf -=  1 ;
@@ -29878,7 +30092,7 @@
     tANI_U8* pIeLen = 0;
     tANI_U32 nConsumedOnEntry = *pnConsumed;
     tANI_U32 nNeeded = 0U;
-    tANI_U8 tmp142__;
+    tANI_U8 tmp144__;
     nNeeded  += 1;
     while ( pSrc->present )
     {
@@ -29887,13 +30101,13 @@
         ++pBuf; ++(*pnConsumed);
         pIeLen = pBuf;
         ++pBuf; ++(*pnConsumed);
-        tmp142__ = 0U;
-        tmp142__ |= ( pSrc->ac_bk_traffic_aval << 0 );
-        tmp142__ |= ( pSrc->ac_be_traffic_aval << 1 );
-        tmp142__ |= ( pSrc->ac_vi_traffic_aval << 2 );
-        tmp142__ |= ( pSrc->ac_vo_traffic_aval << 3 );
-        tmp142__ |= ( pSrc->reserved << 4 );
-        *pBuf = tmp142__;
+        tmp144__ = 0U;
+        tmp144__ |= ( pSrc->ac_bk_traffic_aval << 0 );
+        tmp144__ |= ( pSrc->ac_be_traffic_aval << 1 );
+        tmp144__ |= ( pSrc->ac_vi_traffic_aval << 2 );
+        tmp144__ |= ( pSrc->ac_vo_traffic_aval << 3 );
+        tmp144__ |= ( pSrc->reserved << 4 );
+        *pBuf = tmp144__;
         *pnConsumed += 1;
         // fieldsEndFlag  = 1
         nBuf -=  1 ;
@@ -30015,7 +30229,7 @@
     tANI_U8* pIeLen = 0;
     tANI_U32 nConsumedOnEntry = *pnConsumed;
     tANI_U32 nNeeded = 0U;
-    tANI_U8 tmp143__;
+    tANI_U8 tmp145__;
     nNeeded  += 1;
     while ( pSrc->present )
     {
@@ -30024,13 +30238,13 @@
         ++pBuf; ++(*pnConsumed);
         pIeLen = pBuf;
         ++pBuf; ++(*pnConsumed);
-        tmp143__ = 0U;
-        tmp143__ |= ( pSrc->count << 0 );
-        tmp143__ |= ( pSrc->qack << 4 );
-        tmp143__ |= ( pSrc->qreq << 5 );
-        tmp143__ |= ( pSrc->txopreq << 6 );
-        tmp143__ |= ( pSrc->reserved << 7 );
-        *pBuf = tmp143__;
+        tmp145__ = 0U;
+        tmp145__ |= ( pSrc->count << 0 );
+        tmp145__ |= ( pSrc->qack << 4 );
+        tmp145__ |= ( pSrc->qreq << 5 );
+        tmp145__ |= ( pSrc->txopreq << 6 );
+        tmp145__ |= ( pSrc->reserved << 7 );
+        *pBuf = tmp145__;
         *pnConsumed += 1;
         // fieldsEndFlag  = 1
         nBuf -=  1 ;
@@ -30053,7 +30267,7 @@
     tANI_U8* pIeLen = 0;
     tANI_U32 nConsumedOnEntry = *pnConsumed;
     tANI_U32 nNeeded = 0U;
-    tANI_U8 tmp144__;
+    tANI_U8 tmp146__;
     nNeeded  += 1;
     while ( pSrc->present )
     {
@@ -30062,15 +30276,15 @@
         ++pBuf; ++(*pnConsumed);
         pIeLen = pBuf;
         ++pBuf; ++(*pnConsumed);
-        tmp144__ = 0U;
-        tmp144__ |= ( pSrc->acvo_uapsd << 0 );
-        tmp144__ |= ( pSrc->acvi_uapsd << 1 );
-        tmp144__ |= ( pSrc->acbk_uapsd << 2 );
-        tmp144__ |= ( pSrc->acbe_uapsd << 3 );
-        tmp144__ |= ( pSrc->qack << 4 );
-        tmp144__ |= ( pSrc->max_sp_length << 5 );
-        tmp144__ |= ( pSrc->more_data_ack << 7 );
-        *pBuf = tmp144__;
+        tmp146__ = 0U;
+        tmp146__ |= ( pSrc->acvo_uapsd << 0 );
+        tmp146__ |= ( pSrc->acvi_uapsd << 1 );
+        tmp146__ |= ( pSrc->acbk_uapsd << 2 );
+        tmp146__ |= ( pSrc->acbe_uapsd << 3 );
+        tmp146__ |= ( pSrc->qack << 4 );
+        tmp146__ |= ( pSrc->max_sp_length << 5 );
+        tmp146__ |= ( pSrc->more_data_ack << 7 );
+        *pBuf = tmp146__;
         *pnConsumed += 1;
         // fieldsEndFlag  = 1
         nBuf -=  1 ;
@@ -30574,9 +30788,9 @@
     tANI_U8* pIeLen = 0;
     tANI_U32 nConsumedOnEntry = *pnConsumed;
     tANI_U32 nNeeded = 0U;
-    tANI_U32 tmp145__;
-    tANI_U16 tmp146__;
-    tANI_U16 tmp147__;
+    tANI_U32 tmp147__;
+    tANI_U16 tmp148__;
+    tANI_U16 tmp149__;
     nNeeded  += 12;
     while ( pSrc->present )
     {
@@ -30585,48 +30799,48 @@
         ++pBuf; ++(*pnConsumed);
         pIeLen = pBuf;
         ++pBuf; ++(*pnConsumed);
-        tmp145__ = 0U;
-        tmp145__ |= ( pSrc->maxMPDULen << 0 );
-        tmp145__ |= ( pSrc->supportedChannelWidthSet << 2 );
-        tmp145__ |= ( pSrc->ldpcCodingCap << 4 );
-        tmp145__ |= ( pSrc->shortGI80MHz << 5 );
-        tmp145__ |= ( pSrc->shortGI160and80plus80MHz << 6 );
-        tmp145__ |= ( pSrc->txSTBC << 7 );
-        tmp145__ |= ( pSrc->rxSTBC << 8 );
-        tmp145__ |= ( pSrc->suBeamFormerCap << 11 );
-        tmp145__ |= ( pSrc->suBeamformeeCap << 12 );
-        tmp145__ |= ( pSrc->csnofBeamformerAntSup << 13 );
-        tmp145__ |= ( pSrc->numSoundingDim << 16 );
-        tmp145__ |= ( pSrc->muBeamformerCap << 19 );
-        tmp145__ |= ( pSrc->muBeamformeeCap << 20 );
-        tmp145__ |= ( pSrc->vhtTXOPPS << 21 );
-        tmp145__ |= ( pSrc->htcVHTCap << 22 );
-        tmp145__ |= ( pSrc->maxAMPDULenExp << 23 );
-        tmp145__ |= ( pSrc->vhtLinkAdaptCap << 26 );
-        tmp145__ |= ( pSrc->rxAntPattern << 28 );
-        tmp145__ |= ( pSrc->txAntPattern << 29 );
-        tmp145__ |= ( pSrc->reserved1 << 30 );
-        frameshtonl(pCtx, pBuf, tmp145__, 0);
+        tmp147__ = 0U;
+        tmp147__ |= ( pSrc->maxMPDULen << 0 );
+        tmp147__ |= ( pSrc->supportedChannelWidthSet << 2 );
+        tmp147__ |= ( pSrc->ldpcCodingCap << 4 );
+        tmp147__ |= ( pSrc->shortGI80MHz << 5 );
+        tmp147__ |= ( pSrc->shortGI160and80plus80MHz << 6 );
+        tmp147__ |= ( pSrc->txSTBC << 7 );
+        tmp147__ |= ( pSrc->rxSTBC << 8 );
+        tmp147__ |= ( pSrc->suBeamFormerCap << 11 );
+        tmp147__ |= ( pSrc->suBeamformeeCap << 12 );
+        tmp147__ |= ( pSrc->csnofBeamformerAntSup << 13 );
+        tmp147__ |= ( pSrc->numSoundingDim << 16 );
+        tmp147__ |= ( pSrc->muBeamformerCap << 19 );
+        tmp147__ |= ( pSrc->muBeamformeeCap << 20 );
+        tmp147__ |= ( pSrc->vhtTXOPPS << 21 );
+        tmp147__ |= ( pSrc->htcVHTCap << 22 );
+        tmp147__ |= ( pSrc->maxAMPDULenExp << 23 );
+        tmp147__ |= ( pSrc->vhtLinkAdaptCap << 26 );
+        tmp147__ |= ( pSrc->rxAntPattern << 28 );
+        tmp147__ |= ( pSrc->txAntPattern << 29 );
+        tmp147__ |= ( pSrc->reserved1 << 30 );
+        frameshtonl(pCtx, pBuf, tmp147__, 0);
         *pnConsumed += 4;
         pBuf += 4;
         nBuf -=  4 ;
         frameshtons(pCtx, pBuf, pSrc->rxMCSMap, 0);
         *pnConsumed += 2;
         pBuf += 2;
-        tmp146__ = 0U;
-        tmp146__ |= ( pSrc->rxHighSupDataRate << 0 );
-        tmp146__ |= ( pSrc->reserved2 << 13 );
-        frameshtons(pCtx, pBuf, tmp146__, 0);
+        tmp148__ = 0U;
+        tmp148__ |= ( pSrc->rxHighSupDataRate << 0 );
+        tmp148__ |= ( pSrc->reserved2 << 13 );
+        frameshtons(pCtx, pBuf, tmp148__, 0);
         *pnConsumed += 2;
         pBuf += 2;
         nBuf -=  2 ;
         frameshtons(pCtx, pBuf, pSrc->txMCSMap, 0);
         *pnConsumed += 2;
         pBuf += 2;
-        tmp147__ = 0U;
-        tmp147__ |= ( pSrc->txSupDataRate << 0 );
-        tmp147__ |= ( pSrc->reserved3 << 13 );
-        frameshtons(pCtx, pBuf, tmp147__, 0);
+        tmp149__ = 0U;
+        tmp149__ |= ( pSrc->txSupDataRate << 0 );
+        tmp149__ |= ( pSrc->reserved3 << 13 );
+        frameshtons(pCtx, pBuf, tmp149__, 0);
         *pnConsumed += 2;
         // fieldsEndFlag  = 1
         nBuf -=  2 ;
@@ -30730,7 +30944,7 @@
     tANI_U8* pIeLen = 0;
     tANI_U32 nConsumedOnEntry = *pnConsumed;
     tANI_U32 nNeeded = 0U;
-    tANI_U16 tmp148__;
+    tANI_U16 tmp150__;
     tANI_U32 status = DOT11F_PARSE_SUCCESS;
     status = dot11fGetPackedIEWAPI(pCtx, pSrc, &nNeeded);
     if ( ! DOT11F_SUCCEEDED( status ) ) return status;
@@ -30759,10 +30973,10 @@
         DOT11F_MEMCPY(pCtx, pBuf, pSrc->multicast_cipher_suite, 4);
         *pnConsumed += 4;
         pBuf += 4;
-        tmp148__ = 0U;
-        tmp148__ |= ( pSrc->preauth << 0 );
-        tmp148__ |= ( pSrc->reserved << 1 );
-        frameshtons(pCtx, pBuf, tmp148__, 0);
+        tmp150__ = 0U;
+        tmp150__ |= ( pSrc->preauth << 0 );
+        tmp150__ |= ( pSrc->reserved << 1 );
+        frameshtons(pCtx, pBuf, tmp150__, 0);
         *pnConsumed += 2;
         pBuf += 2;
         nBuf -=  2 ;
@@ -30905,7 +31119,7 @@
     tANI_U8* pIeLen = 0;
     tANI_U32 nConsumedOnEntry = *pnConsumed;
     tANI_U32 nNeeded = 0U;
-    tANI_U8 tmp149__;
+    tANI_U8 tmp151__;
     nNeeded  += 2;
     while ( pSrc->present )
     {
@@ -30927,13 +31141,13 @@
         *pBuf = pSrc->version;
         *pnConsumed += 1;
         pBuf += 1;
-        tmp149__ = 0U;
-        tmp149__ |= ( pSrc->reserved << 0 );
-        tmp149__ |= ( pSrc->qack << 4 );
-        tmp149__ |= ( pSrc->queue_request << 5 );
-        tmp149__ |= ( pSrc->txop_request << 6 );
-        tmp149__ |= ( pSrc->more_ack << 7 );
-        *pBuf = tmp149__;
+        tmp151__ = 0U;
+        tmp151__ |= ( pSrc->reserved << 0 );
+        tmp151__ |= ( pSrc->qack << 4 );
+        tmp151__ |= ( pSrc->queue_request << 5 );
+        tmp151__ |= ( pSrc->txop_request << 6 );
+        tmp151__ |= ( pSrc->more_ack << 7 );
+        *pBuf = tmp151__;
         *pnConsumed += 1;
         // fieldsEndFlag  = 1
         nBuf -=  1 ;
@@ -30956,7 +31170,7 @@
     tANI_U8* pIeLen = 0;
     tANI_U32 nConsumedOnEntry = *pnConsumed;
     tANI_U32 nNeeded = 0U;
-    tANI_U8 tmp150__;
+    tANI_U8 tmp152__;
     nNeeded  += 2;
     while ( pSrc->present )
     {
@@ -30978,11 +31192,11 @@
         *pBuf = pSrc->version;
         *pnConsumed += 1;
         pBuf += 1;
-        tmp150__ = 0U;
-        tmp150__ |= ( pSrc->param_set_count << 0 );
-        tmp150__ |= ( pSrc->reserved << 4 );
-        tmp150__ |= ( pSrc->uapsd << 7 );
-        *pBuf = tmp150__;
+        tmp152__ = 0U;
+        tmp152__ |= ( pSrc->param_set_count << 0 );
+        tmp152__ |= ( pSrc->reserved << 4 );
+        tmp152__ |= ( pSrc->uapsd << 7 );
+        *pBuf = tmp152__;
         *pnConsumed += 1;
         // fieldsEndFlag  = 1
         nBuf -=  1 ;
@@ -31005,7 +31219,7 @@
     tANI_U8* pIeLen = 0;
     tANI_U32 nConsumedOnEntry = *pnConsumed;
     tANI_U32 nNeeded = 0U;
-    tANI_U8 tmp151__;
+    tANI_U8 tmp153__;
     nNeeded  += 2;
     while ( pSrc->present )
     {
@@ -31027,15 +31241,15 @@
         *pBuf = pSrc->version;
         *pnConsumed += 1;
         pBuf += 1;
-        tmp151__ = 0U;
-        tmp151__ |= ( pSrc->acvo_uapsd << 0 );
-        tmp151__ |= ( pSrc->acvi_uapsd << 1 );
-        tmp151__ |= ( pSrc->acbk_uapsd << 2 );
-        tmp151__ |= ( pSrc->acbe_uapsd << 3 );
-        tmp151__ |= ( pSrc->reserved1 << 4 );
-        tmp151__ |= ( pSrc->max_sp_length << 5 );
-        tmp151__ |= ( pSrc->reserved2 << 7 );
-        *pBuf = tmp151__;
+        tmp153__ = 0U;
+        tmp153__ |= ( pSrc->acvo_uapsd << 0 );
+        tmp153__ |= ( pSrc->acvi_uapsd << 1 );
+        tmp153__ |= ( pSrc->acbk_uapsd << 2 );
+        tmp153__ |= ( pSrc->acbe_uapsd << 3 );
+        tmp153__ |= ( pSrc->reserved1 << 4 );
+        tmp153__ |= ( pSrc->max_sp_length << 5 );
+        tmp153__ |= ( pSrc->reserved2 << 7 );
+        *pBuf = tmp153__;
         *pnConsumed += 1;
         // fieldsEndFlag  = 1
         nBuf -=  1 ;
@@ -31058,14 +31272,14 @@
     tANI_U8* pIeLen = 0;
     tANI_U32 nConsumedOnEntry = *pnConsumed;
     tANI_U32 nNeeded = 0U;
-    tANI_U8 tmp152__;
-    tANI_U8 tmp153__;
     tANI_U8 tmp154__;
     tANI_U8 tmp155__;
     tANI_U8 tmp156__;
     tANI_U8 tmp157__;
     tANI_U8 tmp158__;
     tANI_U8 tmp159__;
+    tANI_U8 tmp160__;
+    tANI_U8 tmp161__;
     nNeeded  += 19;
     while ( pSrc->present )
     {
@@ -31093,76 +31307,76 @@
         *pBuf = pSrc->reserved2;
         *pnConsumed += 1;
         pBuf += 1;
-        tmp152__ = 0U;
-        tmp152__ |= ( pSrc->acbe_aifsn << 0 );
-        tmp152__ |= ( pSrc->acbe_acm << 4 );
-        tmp152__ |= ( pSrc->acbe_aci << 5 );
-        tmp152__ |= ( pSrc->unused1 << 7 );
-        *pBuf = tmp152__;
+        tmp154__ = 0U;
+        tmp154__ |= ( pSrc->acbe_aifsn << 0 );
+        tmp154__ |= ( pSrc->acbe_acm << 4 );
+        tmp154__ |= ( pSrc->acbe_aci << 5 );
+        tmp154__ |= ( pSrc->unused1 << 7 );
+        *pBuf = tmp154__;
         *pnConsumed += 1;
         pBuf += 1;
         nBuf -=  1 ;
-        tmp153__ = 0U;
-        tmp153__ |= ( pSrc->acbe_acwmin << 0 );
-        tmp153__ |= ( pSrc->acbe_acwmax << 4 );
-        *pBuf = tmp153__;
+        tmp155__ = 0U;
+        tmp155__ |= ( pSrc->acbe_acwmin << 0 );
+        tmp155__ |= ( pSrc->acbe_acwmax << 4 );
+        *pBuf = tmp155__;
         *pnConsumed += 1;
         pBuf += 1;
         nBuf -=  1 ;
         frameshtons(pCtx, pBuf, pSrc->acbe_txoplimit, 0);
         *pnConsumed += 2;
         pBuf += 2;
-        tmp154__ = 0U;
-        tmp154__ |= ( pSrc->acbk_aifsn << 0 );
-        tmp154__ |= ( pSrc->acbk_acm << 4 );
-        tmp154__ |= ( pSrc->acbk_aci << 5 );
-        tmp154__ |= ( pSrc->unused2 << 7 );
-        *pBuf = tmp154__;
+        tmp156__ = 0U;
+        tmp156__ |= ( pSrc->acbk_aifsn << 0 );
+        tmp156__ |= ( pSrc->acbk_acm << 4 );
+        tmp156__ |= ( pSrc->acbk_aci << 5 );
+        tmp156__ |= ( pSrc->unused2 << 7 );
+        *pBuf = tmp156__;
         *pnConsumed += 1;
         pBuf += 1;
         nBuf -=  1 ;
-        tmp155__ = 0U;
-        tmp155__ |= ( pSrc->acbk_acwmin << 0 );
-        tmp155__ |= ( pSrc->acbk_acwmax << 4 );
-        *pBuf = tmp155__;
+        tmp157__ = 0U;
+        tmp157__ |= ( pSrc->acbk_acwmin << 0 );
+        tmp157__ |= ( pSrc->acbk_acwmax << 4 );
+        *pBuf = tmp157__;
         *pnConsumed += 1;
         pBuf += 1;
         nBuf -=  1 ;
         frameshtons(pCtx, pBuf, pSrc->acbk_txoplimit, 0);
         *pnConsumed += 2;
         pBuf += 2;
-        tmp156__ = 0U;
-        tmp156__ |= ( pSrc->acvi_aifsn << 0 );
-        tmp156__ |= ( pSrc->acvi_acm << 4 );
-        tmp156__ |= ( pSrc->acvi_aci << 5 );
-        tmp156__ |= ( pSrc->unused3 << 7 );
-        *pBuf = tmp156__;
+        tmp158__ = 0U;
+        tmp158__ |= ( pSrc->acvi_aifsn << 0 );
+        tmp158__ |= ( pSrc->acvi_acm << 4 );
+        tmp158__ |= ( pSrc->acvi_aci << 5 );
+        tmp158__ |= ( pSrc->unused3 << 7 );
+        *pBuf = tmp158__;
         *pnConsumed += 1;
         pBuf += 1;
         nBuf -=  1 ;
-        tmp157__ = 0U;
-        tmp157__ |= ( pSrc->acvi_acwmin << 0 );
-        tmp157__ |= ( pSrc->acvi_acwmax << 4 );
-        *pBuf = tmp157__;
+        tmp159__ = 0U;
+        tmp159__ |= ( pSrc->acvi_acwmin << 0 );
+        tmp159__ |= ( pSrc->acvi_acwmax << 4 );
+        *pBuf = tmp159__;
         *pnConsumed += 1;
         pBuf += 1;
         nBuf -=  1 ;
         frameshtons(pCtx, pBuf, pSrc->acvi_txoplimit, 0);
         *pnConsumed += 2;
         pBuf += 2;
-        tmp158__ = 0U;
-        tmp158__ |= ( pSrc->acvo_aifsn << 0 );
-        tmp158__ |= ( pSrc->acvo_acm << 4 );
-        tmp158__ |= ( pSrc->acvo_aci << 5 );
-        tmp158__ |= ( pSrc->unused4 << 7 );
-        *pBuf = tmp158__;
+        tmp160__ = 0U;
+        tmp160__ |= ( pSrc->acvo_aifsn << 0 );
+        tmp160__ |= ( pSrc->acvo_acm << 4 );
+        tmp160__ |= ( pSrc->acvo_aci << 5 );
+        tmp160__ |= ( pSrc->unused4 << 7 );
+        *pBuf = tmp160__;
         *pnConsumed += 1;
         pBuf += 1;
         nBuf -=  1 ;
-        tmp159__ = 0U;
-        tmp159__ |= ( pSrc->acvo_acwmin << 0 );
-        tmp159__ |= ( pSrc->acvo_acwmax << 4 );
-        *pBuf = tmp159__;
+        tmp161__ = 0U;
+        tmp161__ |= ( pSrc->acvo_acwmin << 0 );
+        tmp161__ |= ( pSrc->acvo_acwmax << 4 );
+        *pBuf = tmp161__;
         *pnConsumed += 1;
         pBuf += 1;
         nBuf -=  1 ;
@@ -36580,6 +36794,21 @@
             FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->WiderBWChanSwitchAnn.newCenterChanFreq0, 1);
             FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->WiderBWChanSwitchAnn.newCenterChanFreq1, 1);
         }
+        FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), FRFL("OBSSScanParameters:\n"));
+        if (!pFrm->OBSSScanParameters.present)
+        {
+            FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), FRFL("Not present.\n"));
+        }
+        else
+        {
+            FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->OBSSScanParameters.obssScanPassiveDwell, 2);
+            FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->OBSSScanParameters.obssScanActiveDwell, 2);
+            FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->OBSSScanParameters.bssChannelWidthTriggerScanInterval, 2);
+            FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->OBSSScanParameters.obssScanPassiveTotalPerChannel, 2);
+            FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->OBSSScanParameters.obssScanActiveTotalPerChannel, 2);
+            FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->OBSSScanParameters.bssWidthChannelTransitionDelayFactor, 2);
+            FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), ( tANI_U8* )&pFrm->OBSSScanParameters.obssScanActivityThreshold, 2);
+        }
         FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), FRFL("to:\n"));
         FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_BEACON2), pBuf, nBuf);
     }
@@ -38556,6 +38785,55 @@
 
 } /* End dot11fUnpackGONegRes. */
 
+tANI_U32 dot11fPackHT2040BSSCoexistenceManagementActionFrame(tpAniSirGlobal pCtx, tDot11fHT2040BSSCoexistenceManagementActionFrame *pFrm, tANI_U8 *pBuf, tANI_U32 nBuf, tANI_U32 *pnConsumed)
+{
+    tANI_U32 i = 0;
+    tANI_U32 status = 0;
+    (void)i;
+    *pnConsumed = 0U;
+    status = PackCore(pCtx, (tANI_U8*)pFrm, pBuf, nBuf, pnConsumed, FFS_HT2040BSSCoexistenceManagementActionFrame, IES_HT2040BSSCoexistenceManagementActionFrame);
+
+#   ifdef DOT11F_DUMP_FRAMES
+    if (!DOT11F_FAILED(status))
+    {
+        FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_HT2040BSSCOEXISTENCEMANAGEMENTACTIONFRAME), FRFL("Packed the HT2040BSSCoexistenceManagementActionFrame:\n"));
+        FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_HT2040BSSCOEXISTENCEMANAGEMENTACTIONFRAME), FRFL("Category:\n"));
+        FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_HT2040BSSCOEXISTENCEMANAGEMENTACTIONFRAME), ( tANI_U8* )&pFrm->Category.category, 1);
+        FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_HT2040BSSCOEXISTENCEMANAGEMENTACTIONFRAME), FRFL("Action:\n"));
+        FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_HT2040BSSCOEXISTENCEMANAGEMENTACTIONFRAME), ( tANI_U8* )&pFrm->Action.action, 1);
+        FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_HT2040BSSCOEXISTENCEMANAGEMENTACTIONFRAME), FRFL("HT2040BSSCoexistence:\n"));
+        if (!pFrm->HT2040BSSCoexistence.present)
+        {
+            FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_HT2040BSSCOEXISTENCEMANAGEMENTACTIONFRAME), FRFL("Not present.\n"));
+        }
+        else
+        {
+            FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_HT2040BSSCOEXISTENCEMANAGEMENTACTIONFRAME), FRFL("infoRequest (1): %d\n"), pFrm->HT2040BSSCoexistence.infoRequest);
+            FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_HT2040BSSCOEXISTENCEMANAGEMENTACTIONFRAME), FRFL("fortyMHzIntolerant (1): %d\n"), pFrm->HT2040BSSCoexistence.fortyMHzIntolerant);
+            FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_HT2040BSSCOEXISTENCEMANAGEMENTACTIONFRAME), FRFL("twentyMHzBssWidthReq (1): %d\n"), pFrm->HT2040BSSCoexistence.twentyMHzBssWidthReq);
+            FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_HT2040BSSCOEXISTENCEMANAGEMENTACTIONFRAME), FRFL("obssScanExemptionReq (1): %d\n"), pFrm->HT2040BSSCoexistence.obssScanExemptionReq);
+            FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_HT2040BSSCOEXISTENCEMANAGEMENTACTIONFRAME), FRFL("obssScanExemptionGrant (1): %d\n"), pFrm->HT2040BSSCoexistence.obssScanExemptionGrant);
+            FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_HT2040BSSCOEXISTENCEMANAGEMENTACTIONFRAME), FRFL("unused (3): %d\n"), pFrm->HT2040BSSCoexistence.unused);
+        }
+        FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_HT2040BSSCOEXISTENCEMANAGEMENTACTIONFRAME), FRFL("HT2040BSSIntolerantReport:\n"));
+        if (!pFrm->HT2040BSSIntolerantReport.present)
+        {
+            FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_HT2040BSSCOEXISTENCEMANAGEMENTACTIONFRAME), FRFL("Not present.\n"));
+        }
+        else
+        {
+            FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_HT2040BSSCOEXISTENCEMANAGEMENTACTIONFRAME), ( tANI_U8* )&pFrm->HT2040BSSIntolerantReport.operatingClass, 1);
+            FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_HT2040BSSCOEXISTENCEMANAGEMENTACTIONFRAME), FRFL("num_channelList: %d.\n"), pFrm->HT2040BSSIntolerantReport.num_channelList);
+            FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_HT2040BSSCOEXISTENCEMANAGEMENTACTIONFRAME), ( tANI_U8* ) pFrm->HT2040BSSIntolerantReport.channelList, pFrm->HT2040BSSIntolerantReport.num_channelList);
+        }
+        FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_HT2040BSSCOEXISTENCEMANAGEMENTACTIONFRAME), FRFL("to:\n"));
+        FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_HT2040BSSCOEXISTENCEMANAGEMENTACTIONFRAME), pBuf, nBuf);
+    }
+#   endif // DOT11F_DUMP_FRAMES
+    return status;
+
+} /* End dot11fUnpackHT2040BSSCoexistenceManagementActionFrame. */
+
 tANI_U32 dot11fPackInvitationReq(tpAniSirGlobal pCtx, tDot11fInvitationReq *pFrm, tANI_U8 *pBuf, tANI_U32 nBuf, tANI_U32 *pnConsumed)
 {
     tANI_U32 i = 0;
@@ -45820,6 +46098,12 @@
                     case SigIeFTInfo:
                         status |= dot11fPackIeFTInfo(pCtx, ( tDot11fIEFTInfo* )(pSrc + pIe->offset + sizeof(tDot11fIEFTInfo) * i ),  pBufRemaining, nBufRemaining, &len);
                         break;
+                    case SigIeHT2040BSSCoexistence:
+                        status |= dot11fPackIeHT2040BSSCoexistence(pCtx, ( tDot11fIEHT2040BSSCoexistence* )(pSrc + pIe->offset + sizeof(tDot11fIEHT2040BSSCoexistence) * i ),  pBufRemaining, nBufRemaining, &len);
+                        break;
+                    case SigIeHT2040BSSIntolerantReport:
+                        status |= dot11fPackIeHT2040BSSIntolerantReport(pCtx, ( tDot11fIEHT2040BSSIntolerantReport* )(pSrc + pIe->offset + sizeof(tDot11fIEHT2040BSSIntolerantReport) * i ),  pBufRemaining, nBufRemaining, &len);
+                        break;
                     case SigIeHTCaps:
                         status |= dot11fPackIeHTCaps(pCtx, ( tDot11fIEHTCaps* )(pSrc + pIe->offset + sizeof(tDot11fIEHTCaps) * i ),  pBufRemaining, nBufRemaining, &len);
                         break;
