Browse Source

qcacld-3.0: Force STA connection in VHT

Force STA connection in VHT mode if AP HE adveritised rates
does not match with STA supported HE rates

Change-Id: Ia691a66ad4a2d2d2d59e07d07104e6771c6e4a84
CRs-Fixed: 2580041
Sandeep Puligilla 5 years ago
parent
commit
a6b845d2c8
1 changed files with 43 additions and 0 deletions
  1. 43 0
      core/sme/src/csr/csr_api_roam.c

+ 43 - 0
core/sme/src/csr/csr_api_roam.c

@@ -15786,6 +15786,42 @@ static QDF_STATUS csr_check_and_validate_6g_ap(struct mac_context *mac_ctx,
 
 	return QDF_STATUS_SUCCESS;
 }
+
+#ifdef WLAN_FEATURE_11AX
+static void csr_handle_iot_ap_no_common_he_rates(struct mac_context *mac,
+					struct csr_roam_session *session,
+					tDot11fBeaconIEs *ies,
+					uint32_t *dot11mode)
+{
+	uint16_t int_mcs;
+
+	/* if the connection is not 11AX mode then return */
+	if (*dot11mode != MLME_DOT11_MODE_11AX)
+		return;
+
+	int_mcs = HE_INTERSECT_MCS(session->he_config.tx_he_mcs_map_lt_80,
+				   ies->he_cap.rx_he_mcs_map_lt_80);
+	sme_debug("HE self rates %x AP rates %x int_mcs %x vendorIE %d",
+		  session->he_config.rx_he_mcs_map_lt_80,
+		  ies->he_cap.rx_he_mcs_map_lt_80, int_mcs,
+		  ies->vendor_vht_ie.present);
+	if (ies->he_cap.present)
+		if ((int_mcs == 0xFFFF) &&
+		    (ies->vendor_vht_ie.present ||
+		     ies->VHTCaps.present)) {
+			*dot11mode = MLME_DOT11_MODE_11AC;
+			sme_debug("No common 11AX rate. Force 11AC connection");
+	}
+}
+#else
+static void csr_handle_iot_ap_no_common_he_rates(struct mac_context *mac,
+					struct csr_roam_session *session,
+					tDot11fBeaconIEs *ies,
+					uint32_t *dot11mode)
+{
+}
+#endif
+
 /**
  * The communication between HDD and LIM is thru mailbox (MB).
  * Both sides will access the data structure "struct join_req".
@@ -15942,6 +15978,13 @@ QDF_STATUS csr_send_join_req_msg(struct mac_context *mac, uint32_t sessionId,
 			/* Need to disable VHT operation in 2.4 GHz band */
 			dot11mode = MLME_DOT11_MODE_11N;
 		}
+		/*
+		 * FIX IOT AP:
+		 * AP capable of HE but doesn't advertize MCS rates for 1x1/2x2.
+		 * In such scenario, associate to AP in VHT mode
+		 */
+		csr_handle_iot_ap_no_common_he_rates(mac, pSession, pIes,
+						     &dot11mode);
 
 		ieLen = csr_get_ielen_from_bss_description(pBssDescription);