Merge tag 'LA.UM.10.6.2.r1-02500-89xx.0' into int/13/fp3

"LA.UM.10.6.2.r1-02500-89xx.0"

* tag 'LA.UM.10.6.2.r1-02500-89xx.0':
  prima: Enable channels 12 and 13 under reg domain FCC
  wlan: Update supported rate to 13 if H2E bss information present
  wlan: Add RSNXE IE in probe response IE buffer
  wlan: Add H2E require flag to extended support rate
  wlan: Add RSNXE IE in beacon additional IE buffer
  wlan: update rssi on llstats upon disconnect

Change-Id: I9b254573655cd0cdc03635900858975f88a117dd
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index 44ad4a2..f07f7fd 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -2056,6 +2056,7 @@
     hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter);
     WLANTL_InterfaceStatsType *pWifiIfaceStatTL = NULL;
     tSirWifiWmmAcStat accessclassStats;
+    v_S7_t rssi_value;
 
     if (FALSE == put_wifi_interface_info(
                                 &pWifiIfaceStat->info,
@@ -2177,6 +2178,18 @@
         return FALSE;
     }
 
+    if (pWifiIfaceStat->info.state == WIFI_DISCONNECTED)
+    {
+   /* we are not connected or our SSID is too long
+      so we can report an disconnected rssi */
+        wlan_hdd_get_rssi(pAdapter, &rssi_value);
+        nla_put_s32(vendor_event,
+                    QCA_WLAN_VENDOR_ATTR_LL_STATS_IFACE_RSSI_MGMT,
+                    rssi_value);
+        hddLog(VOS_TRACE_LEVEL_INFO,
+               FL("Rssi value on disconnect %d "), rssi_value);
+    }
+
 #ifdef FEATURE_EXT_LL_STAT
    /*
     * Ensure when EXT_LL_STAT is supported by both host and fwr,
@@ -10021,6 +10034,20 @@
     return;
 }
 
+/* check SAE/H2E require flag from support rate sets */
+static void wlan_hdd_check_h2e(u8 *pIe, tsap_Config_t *pConfig, u8 num_rates)
+{
+    u8 i;
+
+    for ( i = 0; i < (num_rates + 1) ; i++)
+    {
+      if((BASIC_RATE_MASK | SIR_BSS_MEMBERSHIP_SELECTOR_SAE_H2E) == pIe[i])
+      {
+         pConfig->require_h2e = TRUE;
+      }
+    }
+}
+
 static void wlan_hdd_set_sapHwmode(hdd_adapter_t *pHostapdAdapter)
 {
     tsap_Config_t *pConfig = &pHostapdAdapter->sessionCtx.ap.sapConfig;
@@ -10029,6 +10056,7 @@
     u8 checkRatesfor11g = TRUE;
     u8 require_ht = FALSE;
     u8 *pIe=NULL;
+    u8 num_rates;
 
     pConfig->SapHw_mode= eSAP_DOT11_MODE_11b;
 
@@ -10037,8 +10065,10 @@
     if (pIe != NULL)
     {
         pIe += 1;
+        num_rates = pIe[0];
         wlan_hdd_check_11gmode(pIe, &require_ht, &checkRatesfor11g,
                                &pConfig->SapHw_mode);
+        wlan_hdd_check_h2e(pIe, pConfig, num_rates);
     }
 
     pIe = wlan_hdd_cfg80211_get_ie_ptr(pBeacon->tail, pBeacon->tail_len,
@@ -10047,8 +10077,10 @@
     {
 
         pIe += 1;
+        num_rates = pIe[0];
         wlan_hdd_check_11gmode(pIe, &require_ht, &checkRatesfor11g,
                                &pConfig->SapHw_mode);
+        wlan_hdd_check_h2e(pIe, pConfig, num_rates);
     }
 
     if( pConfig->channel > 14 )
@@ -10094,6 +10126,55 @@
     return 0;
 }
 
+/**
+ * wlan_hdd_add_extra_ie() - add extra ies in beacon
+ * @adapter: Pointer to hostapd adapter
+ * @genie: Pointer to extra ie
+ * @total_ielen: Pointer to store total ie length
+ * @temp_ie_id: ID of extra ie
+ *
+ * Return: none
+ */
+static void wlan_hdd_add_extra_ie(hdd_adapter_t* pHostapdAdapter,
+                                  v_U8_t *genie, v_U8_t *total_ielen,
+                                  v_U8_t temp_ie_id)
+{
+    v_U16_t ielen = 0;
+    beacon_data_t *pBeacon = pHostapdAdapter->sessionCtx.ap.beacon;
+    v_U32_t left = pBeacon->tail_len;
+    v_U8_t *ptr = pBeacon->tail;
+    v_U8_t elem_id, elem_len;
+
+    if (NULL == ptr || 0 == left)
+         return;
+
+    while (left >= 2) {
+         elem_id = ptr[0];
+         elem_len = ptr[1];
+         left -= 2;
+         if (elem_len > left) {
+             hddLog( VOS_TRACE_LEVEL_ERROR, "**Invalid IEs***");
+             return;
+         }
+
+         if (temp_ie_id == elem_id)
+         {
+             ielen = ptr[1] + 2;
+             if ((*total_ielen + ielen) <= MAX_GENIE_LEN)
+             {
+                 vos_mem_copy(&genie[*total_ielen], ptr, ielen);
+                 *total_ielen += ielen;
+             }
+             else
+             {
+                  hddLog( VOS_TRACE_LEVEL_ERROR, "**Ie Length is too big***");
+             }
+         }
+         left -= elem_len;
+         ptr += (elem_len + 2);
+    }
+}
+
 static void wlan_hdd_add_hostapd_conf_vsie(hdd_adapter_t* pHostapdAdapter,
                                            v_U8_t *genie, v_U8_t *total_ielen)
 {
@@ -10171,6 +10252,9 @@
     }
 
     pBeacon = pHostapdAdapter->sessionCtx.ap.beacon;
+
+    wlan_hdd_add_extra_ie(pHostapdAdapter, genie, &total_ielen, WLAN_ELEMID_RSNXE);
+
     if (0 != wlan_hdd_add_ie(pHostapdAdapter, genie,
                               &total_ielen, WPS_OUI_TYPE, WPS_OUI_TYPE_SIZE))
     {
@@ -11602,6 +11686,7 @@
     }
 
     wlan_hdd_set_sapHwmode(pHostapdAdapter);
+    pConfig->require_h2e = pHostapdAdapter->sessionCtx.ap.sapConfig.require_h2e;
 
 #ifdef WLAN_FEATURE_11AC
     /* Overwrite the hostapd setting for HW mode only for 11ac.
diff --git a/CORE/MAC/inc/aniGlobal.h b/CORE/MAC/inc/aniGlobal.h
index 8715388..d482e9a 100644
--- a/CORE/MAC/inc/aniGlobal.h
+++ b/CORE/MAC/inc/aniGlobal.h
@@ -1112,6 +1112,7 @@
    uint32_t sta_auth_retries_for_code17;
    uint32_t sta_sap_scc_on_dfs_chan;
    bool force_scc_with_ecsa;
+   bool require_h2e;
 } tAniSirGlobal;
 
 #ifdef FEATURE_WLAN_TDLS
diff --git a/CORE/MAC/inc/sirMacProtDef.h b/CORE/MAC/inc/sirMacProtDef.h
index 7d580e2..916713c 100644
--- a/CORE/MAC/inc/sirMacProtDef.h
+++ b/CORE/MAC/inc/sirMacProtDef.h
@@ -300,7 +300,7 @@
 #define SIR_MAC_SSID_EID_MAX               32
 #define SIR_MAC_RATESET_EID            1
 #define SIR_MAC_RATESET_EID_MIN            1
-#define SIR_MAC_RATESET_EID_MAX            12
+#define SIR_MAC_RATESET_EID_MAX            13
 #define SIR_MAC_FH_PARAM_SET_EID       2
 #define SIR_MAC_FH_PARAM_SET_EID_MIN       5
 #define SIR_MAC_FH_PARAM_SET_EID_MAX       5
@@ -479,6 +479,8 @@
 #define SIR_MAX_NOA_DESCR           2
 #define SIR_P2P_IE_HEADER_LEN       6
 
+#define SIR_MAC_RSNXE 0xf4
+
 #define SIR_MAC_CISCO_OUI "\x00\x40\x96"
 #define SIR_MAC_CISCO_OUI_SIZE 3
 
@@ -603,7 +605,7 @@
 /// Protocol defined MAX definitions
 #define SIR_MAC_ADDR_LENGTH                  6
 #define SIR_MAC_MAX_SSID_LENGTH              32
-#define SIR_MAC_MAX_NUMBER_OF_RATES          12
+#define SIR_MAC_MAX_NUMBER_OF_RATES          13
 #define SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS      4
 #define SIR_MAC_KEY_LENGTH                   13   // WEP Maximum key length size
 #define SIR_MAC_AUTH_CHALLENGE_LENGTH        253
@@ -2794,6 +2796,7 @@
 #define SIR_MAC_RATE_36  0x48
 #define SIR_MAC_RATE_48  0x60
 #define SIR_MAC_RATE_54  0x6C
+#define SIR_MAC_RATE_SAE_H2E 0xF6
 
 // ANI legacy supported rates
 #define SIR_MAC_RATE_72  0x01
@@ -2822,6 +2825,10 @@
 #define SIR_MAC_RATE_36_BITMAP   (1<<9)
 #define SIR_MAC_RATE_48_BITMAP   (1<<10)
 #define SIR_MAC_RATE_54_BITMAP   (1<<11)
+#define SIR_MAC_RATE_SAE_H2E_BITMAP   (1<<12)
+
+#define SIR_BSS_MEMBERSHIP_SELECTOR_SAE_H2E 123
+#define SIR_RATE_MASK 0x80
 
 #define sirIsArate(x) ((((tANI_U8)x)==SIR_MAC_RATE_6) || \
                        (((tANI_U8)x)==SIR_MAC_RATE_9) || \
@@ -2830,12 +2837,14 @@
                        (((tANI_U8)x)==SIR_MAC_RATE_24)|| \
                        (((tANI_U8)x)==SIR_MAC_RATE_36)|| \
                        (((tANI_U8)x)==SIR_MAC_RATE_48)|| \
-                       (((tANI_U8)x)==SIR_MAC_RATE_54))
+                       (((tANI_U8)x)==SIR_MAC_RATE_54)|| \
+                       (((tANI_U8)x)==SIR_MAC_RATE_SAE_H2E))
 
 #define sirIsBrate(x) ((((tANI_U8)x)==SIR_MAC_RATE_1)  || \
                        (((tANI_U8)x)==SIR_MAC_RATE_2)  || \
                        (((tANI_U8)x)==SIR_MAC_RATE_5_5)|| \
-                       (((tANI_U8)x)==SIR_MAC_RATE_11))
+                       (((tANI_U8)x)==SIR_MAC_RATE_11) || \
+                       (((tANI_U8)x)==SIR_MAC_RATE_SAE_H2E))
 
 #define sirIsGrate(x) ((((tANI_U8)x)==SIR_MAC_RATE_1)  || \
                        (((tANI_U8)x)==SIR_MAC_RATE_2)  || \
@@ -2848,7 +2857,8 @@
                        (((tANI_U8)x)==SIR_MAC_RATE_24) || \
                        (((tANI_U8)x)==SIR_MAC_RATE_36) || \
                        (((tANI_U8)x)==SIR_MAC_RATE_48) || \
-                       (((tANI_U8)x)==SIR_MAC_RATE_54))
+                       (((tANI_U8)x)==SIR_MAC_RATE_54) || \
+                       (((tANI_U8)x)==SIR_MAC_RATE_SAE_H2E))
 
 #define sirIsProprate(x) ((((tANI_U8)x)==SIR_MAC_RATE_72) || \
                           (((tANI_U8)x)==SIR_MAC_RATE_96) || \
diff --git a/CORE/MAC/src/pe/lim/limAssocUtils.c b/CORE/MAC/src/pe/lim/limAssocUtils.c
index 45a10a7..ab5a817 100644
--- a/CORE/MAC/src/pe/lim/limAssocUtils.c
+++ b/CORE/MAC/src/pe/lim/limAssocUtils.c
@@ -1822,10 +1822,12 @@
     else
          tempRateSet2.numRates = 0;
 
-    if ((tempRateSet.numRates + tempRateSet2.numRates) > 12)
+    if ((tempRateSet.numRates + tempRateSet2.numRates) >
+        SIR_MAC_MAX_NUMBER_OF_RATES)
     {
         //we are in big trouble
-        limLog(pMac, LOGP, FL("more than 12 rates in CFG"));
+        limLog(pMac, LOGP, FL("more than %d rates in CFG"),
+               SIR_MAC_MAX_NUMBER_OF_RATES);
         //panic
         goto error;
     }
@@ -1969,6 +1971,7 @@
     }
     if ((psessionEntry->dot11mode == WNI_CFG_DOT11_MODE_11G) ||
         (psessionEntry->dot11mode == WNI_CFG_DOT11_MODE_11A) ||
+        (psessionEntry->dot11mode == WNI_CFG_DOT11_MODE_11B) ||
         (psessionEntry->dot11mode == WNI_CFG_DOT11_MODE_11N))
     {
 
@@ -2177,9 +2180,11 @@
     else
         tempRateSet2.numRates = 0;
 
-    if ((tempRateSet.numRates + tempRateSet2.numRates) > 12)
+    if ((tempRateSet.numRates + tempRateSet2.numRates) >
+        SIR_MAC_MAX_NUMBER_OF_RATES)
     {
-        PELOGE(limLog(pMac, LOGE, FL("more than 12 rates in CFG"));)
+        PELOGE(limLog(pMac, LOGE, FL("more than %d rates in CFG"),
+               SIR_MAC_MAX_NUMBER_OF_RATES);)
         goto error;
     }
 
@@ -2189,7 +2194,9 @@
      * - sort and the rates into the pSta->rate array
      */
 
-    // Copy all rates in tempRateSet, there are 12 rates max
+    /* Copy all rates in tempRateSet,
+     * there are SIR_MAC_MAX_NUMBER_OF_RATES rates max
+     */
     for(i = 0; i < tempRateSet2.numRates; i++)
         tempRateSet.rate[i + tempRateSet.numRates] =
                                            tempRateSet2.rate[i];
@@ -2233,13 +2240,14 @@
 
     if (pExtRateSet->numRates)
     {
-      if((tempRateSet.numRates + pExtRateSet->numRates) > 12 )
+      if((tempRateSet.numRates + pExtRateSet->numRates) >
+         SIR_MAC_MAX_NUMBER_OF_RATES )
       {
         limLog( pMac, LOG1,
-            "Sum of SUPPORTED and EXTENDED Rate Set (%1d) exceeds 12!",
-            tempRateSet.numRates + pExtRateSet->numRates );
+            "Sum of SUPPORTED and EXTENDED Rate Set (%1d) exceeds %d!",
+            tempRateSet.numRates + pExtRateSet->numRates, SIR_MAC_MAX_NUMBER_OF_RATES );
 
-        if( tempRateSet.numRates < 12 )
+        if( tempRateSet.numRates < SIR_MAC_MAX_NUMBER_OF_RATES )
         {
          int found = 0;
          int tail = tempRateSet.numRates;
@@ -2262,7 +2270,7 @@
               tempRateSet.rate[tempRateSet.numRates++] =
                 pExtRateSet->rate[i];
 
-              if( tempRateSet.numRates >= 12 )
+              if( tempRateSet.numRates >= SIR_MAC_MAX_NUMBER_OF_RATES )
                 break;
             }
           }
diff --git a/CORE/MAC/src/pe/lim/limSerDesUtils.c b/CORE/MAC/src/pe/lim/limSerDesUtils.c
index e6b9e2b..5910bfd 100644
--- a/CORE/MAC/src/pe/lim/limSerDesUtils.c
+++ b/CORE/MAC/src/pe/lim/limSerDesUtils.c
@@ -754,6 +754,8 @@
 
     // Extract extendedRateSet
     if ((pStartBssReq->nwType == eSIR_11G_NW_TYPE) ||
+        (pStartBssReq->nwType == eSIR_11A_NW_TYPE) ||
+        (pStartBssReq->nwType == eSIR_11B_NW_TYPE) ||
         (pStartBssReq->nwType == eSIR_11N_NW_TYPE ))
     {
         pStartBssReq->extendedRateSet.numRates = *pBuf++;
diff --git a/CORE/MAC/src/pe/sch/schApi.c b/CORE/MAC/src/pe/sch/schApi.c
index 45d14f1..ffc66cc 100644
--- a/CORE/MAC/src/pe/sch/schApi.c
+++ b/CORE/MAC/src/pe/sch/schApi.c
@@ -391,6 +391,7 @@
     tANI_U32             addnIE1Len=0;
     tANI_U32             addnIE2Len = 0;
     tANI_U32             addnIE3Len = 0;
+    tANI_U32             addnIE4Len = 0;
     tANI_U32             totalAddnIeLen = 0;
     tSirRetStatus        nSirStatus;
     tANI_U8              *addIE = NULL;
@@ -451,9 +452,18 @@
                 return retCode;
             }
         }
-        schLog(pMac,LOG1, FL("addnIE1Len %d, addnIE2Len %d, addnIE3Len %d"),
-               addnIE1Len, addnIE2Len, addnIE3Len);
-        totalAddnIeLen = addnIE1Len + addnIE2Len + addnIE3Len;
+
+        if((wlan_cfgGetStrLen(pMac, WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA,
+                                        &addnIE4Len)) != eSIR_SUCCESS)
+        {
+             schLog(pMac, LOGP,
+                 FL("Unable to get WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA length"));
+             return retCode;
+        }
+
+        schLog(pMac,LOG1, FL("addnIE1Len %d, addnIE2Len %d, addnIE3Len %d addnIE4Len %d"),
+               addnIE1Len, addnIE2Len, addnIE3Len, addnIE4Len);
+        totalAddnIeLen = addnIE1Len + addnIE2Len + addnIE3Len + addnIE4Len;
 
         addIE = vos_mem_malloc(totalAddnIeLen);
         if (NULL == addIE)
@@ -493,7 +503,7 @@
         }
 
         if (addnIE3Len && addnIE3Len <= WNI_CFG_PROBE_RSP_ADDNIE_DATA3_LEN &&
-                     (nBytes + totalAddnIeLen) <= SCH_MAX_PROBE_RESP_SIZE)
+                     (nBytes + addnIE1Len + addnIE2Len + addnIE3Len) <= SCH_MAX_PROBE_RESP_SIZE)
         {
             if ( eSIR_SUCCESS != wlan_cfgGetStr(pMac,
                                      WNI_CFG_PROBE_RSP_ADDNIE_DATA3,
@@ -506,6 +516,20 @@
                 return retCode;
             }
         }
+        if (addnIE4Len && addnIE4Len <= WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA_LEN &&
+                     (nBytes + totalAddnIeLen) <= SCH_MAX_PROBE_RESP_SIZE)
+        {
+            if ( eSIR_SUCCESS != wlan_cfgGetStr(pMac,
+                                     WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA,
+                                     &addIE[addnIE1Len + addnIE2Len + addnIE3Len],
+                                     &addnIE4Len) )
+            {
+                schLog(pMac, LOGE,
+                    FL("Unable to get WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA String"));
+                vos_mem_free(addIE);
+                return retCode;
+            }
+        }
 
     }
 
diff --git a/CORE/SAP/inc/sapApi.h b/CORE/SAP/inc/sapApi.h
index 3af07f3..b949d06 100644
--- a/CORE/SAP/inc/sapApi.h
+++ b/CORE/SAP/inc/sapApi.h
@@ -473,7 +473,7 @@
 #endif
     eCsrBand        scanBandPreference;
     v_U16_t         acsBandSwitchThreshold;
-
+    bool            require_h2e;
 } tsap_Config_t;
 
 typedef enum {
diff --git a/CORE/SAP/src/sapFsm.c b/CORE/SAP/src/sapFsm.c
index 788d14e..507bfa0 100644
--- a/CORE/SAP/src/sapFsm.c
+++ b/CORE/SAP/src/sapFsm.c
@@ -1534,6 +1534,8 @@
     profile->MFPRequired = pconfig_params->mfpRequired ? 1 : 0;
 #endif
 
+    profile->require_h2e = pconfig_params->require_h2e;
+
     return eSAP_STATUS_SUCCESS; /* Success.  */
 }
 
diff --git a/CORE/SME/inc/csrApi.h b/CORE/SME/inc/csrApi.h
index cac966f..867e84b 100644
--- a/CORE/SME/inc/csrApi.h
+++ b/CORE/SME/inc/csrApi.h
@@ -975,6 +975,7 @@
     bool force_24ghz_in_ht20;
     tCsrBssid bssid_hint;
     bool force_rsne_override;
+    bool require_h2e;
 }tCsrRoamProfile;
 
 
@@ -1268,6 +1269,7 @@
     tANI_U8 num_ba_buff;
     bool force_scc_with_ecsa;
     bool isPeriodicRoamScanEnabled;
+    bool require_h2e;
 }tCsrConfigParam;
 
 //Tush
diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c
index 19fef35..55c3de9 100644
--- a/CORE/SME/src/csr/csrApiRoam.c
+++ b/CORE/SME/src/csr/csrApiRoam.c
@@ -6784,6 +6784,8 @@
         pDstProfile->force_rsne_override = pSrcProfile->force_rsne_override;
         vos_mem_copy(&pDstProfile->Keys, &pSrcProfile->Keys,
                      sizeof(pDstProfile->Keys));
+        pDstProfile->require_h2e = pSrcProfile->require_h2e;
+
 #ifdef WLAN_FEATURE_VOWIFI_11R
         if (pSrcProfile->MDID.mdiePresent)
         {
@@ -12652,6 +12654,13 @@
             {
                 channel = operationChannel;
             }
+
+            if (pProfile->require_h2e)
+            {
+                pParam->extendedRateSet.numRates = 1;
+                pParam->extendedRateSet.rate[0] =
+                    SIR_BSS_MEMBERSHIP_SELECTOR_SAE_H2E | SIR_RATE_MASK;
+            }
             break;
             
         case eSIR_11B_NW_TYPE:
@@ -12669,6 +12678,12 @@
                 channel = operationChannel;
             }
             
+            if (pProfile->require_h2e)
+            {
+                pParam->extendedRateSet.numRates = 1;
+                pParam->extendedRateSet.rate[0] =
+                    SIR_BSS_MEMBERSHIP_SELECTOR_SAE_H2E | SIR_RATE_MASK;
+            }
             break;     
         case eSIR_11G_NW_TYPE:
             /* For P2P Client and P2P GO, disable 11b rates */ 
@@ -12694,9 +12709,13 @@
             pParam->operationalRateSet.rate[1] = SIR_MAC_RATE_2 | CSR_DOT11_BASIC_RATE_MASK;
             pParam->operationalRateSet.rate[2] = SIR_MAC_RATE_5_5 | CSR_DOT11_BASIC_RATE_MASK;
             pParam->operationalRateSet.rate[3] = SIR_MAC_RATE_11 | CSR_DOT11_BASIC_RATE_MASK;
-               
-            pParam->extendedRateSet.numRates = 8;
-                        pParam->extendedRateSet.rate[0] = SIR_MAC_RATE_6;
+
+            if (pProfile->require_h2e)
+                 pParam->extendedRateSet.numRates = 9;
+            else
+                 pParam->extendedRateSet.numRates = 8;
+
+            pParam->extendedRateSet.rate[0] = SIR_MAC_RATE_6;
             pParam->extendedRateSet.rate[1] = SIR_MAC_RATE_9;
             pParam->extendedRateSet.rate[2] = SIR_MAC_RATE_12;
             pParam->extendedRateSet.rate[3] = SIR_MAC_RATE_18;
@@ -12704,6 +12723,9 @@
             pParam->extendedRateSet.rate[5] = SIR_MAC_RATE_36;
             pParam->extendedRateSet.rate[6] = SIR_MAC_RATE_48;
             pParam->extendedRateSet.rate[7] = SIR_MAC_RATE_54;
+            if (pProfile->require_h2e)
+                pParam->extendedRateSet.rate[8] =
+                SIR_BSS_MEMBERSHIP_SELECTOR_SAE_H2E | SIR_RATE_MASK;
             }
             
             if ( eCSR_OPERATING_CHANNEL_ANY == operationChannel ) 
@@ -12724,7 +12746,6 @@
 static void csrRoamGetBssStartParmsFromBssDesc( tpAniSirGlobal pMac, tSirBssDescription *pBssDesc, 
                                                  tDot11fBeaconIEs *pIes, tCsrRoamStartBssParams *pParam )
 {
-    
     if( pParam )
     {
         pParam->sirNwType = pBssDesc->nwType;
diff --git a/CORE/SME/src/csr/csrUtil.c b/CORE/SME/src/csr/csrUtil.c
index 4d543b3..b603994 100644
--- a/CORE/SME/src/csr/csrUtil.c
+++ b/CORE/SME/src/csr/csrUtil.c
@@ -6236,6 +6236,9 @@
         case SIR_MAC_RATE_54:
             rateBitmap |= SIR_MAC_RATE_54_BITMAP;
             break;
+        case SIR_MAC_RATE_SAE_H2E:
+            rateBitmap |= SIR_MAC_RATE_SAE_H2E_BITMAP;
+            break;
     }
     *pRateBitmap = rateBitmap;
 }
@@ -6284,6 +6287,9 @@
         case SIR_MAC_RATE_54:
             rateBitmap &= SIR_MAC_RATE_54_BITMAP;
             break;
+        case SIR_MAC_RATE_SAE_H2E:
+            rateBitmap &= SIR_MAC_RATE_SAE_H2E_BITMAP;
+            break;
     }
     return !!rateBitmap;
 }
@@ -6345,6 +6351,9 @@
         case SIR_MAC_RATE_54:
             ConvertedRate = 108;
             break;
+        case SIR_MAC_RATE_SAE_H2E:
+            ConvertedRate = 246;
+            break;
 
         case SIR_MAC_RATE_72:
             ConvertedRate = 144;
diff --git a/CORE/WDA/src/wlan_nv.c b/CORE/WDA/src/wlan_nv.c
index 18100b1..ee52a71 100644
--- a/CORE/WDA/src/wlan_nv.c
+++ b/CORE/WDA/src/wlan_nv.c
@@ -853,8 +853,8 @@
                     {NV_CHANNEL_ENABLE, 23},           //RF_CHAN_9,
                     {NV_CHANNEL_ENABLE, 22},           //RF_CHAN_10,
                     {NV_CHANNEL_ENABLE, 22},           //RF_CHAN_11,
-                    {NV_CHANNEL_DISABLE, 30},           //RF_CHAN_12,
-                    {NV_CHANNEL_DISABLE, 30},           //RF_CHAN_13,
+                    {NV_CHANNEL_ENABLE, 30},           //RF_CHAN_12,
+                    {NV_CHANNEL_ENABLE, 30},           //RF_CHAN_13,
                     {NV_CHANNEL_DISABLE, 30},           //RF_CHAN_14,
 
                     //4.9GHz Band, none CB