Prechádzať zdrojové kódy

qcacld-3.0: Add 320 MHz support as per draft 1.5

This change is to add support for 320 MHz bandwidth based on
EHT Operation element defind in 11be draft 1.5.

Change-Id: Ie2e165493538991c331a856fea26d3ca518f04ad
CRs-Fixed: 3202962
Jia Ding 2 rokov pred
rodič
commit
61191cedfc

+ 2 - 0
core/mac/src/pe/lim/lim_process_assoc_req_frame.c

@@ -1823,6 +1823,8 @@ static bool lim_update_sta_ds(struct mac_context *mac_ctx, tSirMacAddr sa,
 	}
 	lim_update_stads_he_6ghz_op(session, sta_ds);
 	lim_update_sta_ds_op_classes(assoc_req, sta_ds);
+	lim_update_stads_eht_bw_320mhz(session, sta_ds);
+
 	/* Add STA context at MAC HW (BMU, RHP & TFP) */
 	sta_ds->qosMode = false;
 	sta_ds->lleEnabled = false;

+ 26 - 0
core/mac/src/pe/lim/lim_utils.c

@@ -8265,6 +8265,11 @@ static void lim_intersect_eht_caps(tDot11fIEeht_cap *rcvd_eht,
 					peer_eht->mu_bformer_160mhz : 0;
 	peer_eht->mu_bformer_320mhz = session_eht->su_beamformee ?
 					peer_eht->mu_bformer_320mhz : 0;
+
+	if (session_eht->support_320mhz_6ghz && rcvd_eht->support_320mhz_6ghz)
+		peer_eht->support_320mhz_6ghz = 1;
+	else
+		peer_eht->support_320mhz_6ghz = 0;
 }
 
 void lim_update_usr_eht_cap(struct mac_context *mac_ctx,
@@ -8835,6 +8840,27 @@ void lim_update_stads_eht_caps(struct mac_context *mac_ctx,
 		     sizeof(tDot11fIEeht_cap));
 }
 
+void lim_update_stads_eht_bw_320mhz(struct pe_session *session,
+				    tpDphHashNode sta_ds)
+{
+	tDot11fIEeht_cap *peer_eht = &sta_ds->eht_config;
+
+	if (!IS_DOT11_MODE_EHT(session->dot11mode) || !peer_eht->present)
+		return;
+
+	/* EHT only defines 320 MHz. If session is not in 320 MHz, BW will be
+	 * set in HE mode.
+	 *
+	 * Set ch_width to 320 MHz only when session is in 320 MHz and peer eht
+	 * caps support 320 MHz after eht caps intersection.
+	 */
+	if (session->ch_width == CH_WIDTH_320MHZ &&
+	    peer_eht->support_320mhz_6ghz) {
+		sta_ds->ch_width = CH_WIDTH_320MHZ;
+		pe_debug("ch_width %d", sta_ds->ch_width);
+	}
+}
+
 #endif
 
 #if defined(CONFIG_BAND_6GHZ) && defined(WLAN_FEATURE_11AX)

+ 19 - 0
core/mac/src/pe/lim/lim_utils.h

@@ -1997,6 +1997,19 @@ void lim_update_stads_eht_caps(struct mac_context *mac_ctx,
 			       struct pe_session *session_entry,
 			       tSchBeaconStruct *beacon);
 
+/**
+ * lim_update_stads_eht_bw_320mhz() - Set ch_width to 320MHz for sta_ds
+ * @session: pointer to PE session
+ * @sta_ds: pointer to sta dph hash table entry
+ *
+ * Set ch_width to 320 MHz only when session is in 320 MHz and peer eht
+ * caps support 320 MHz after eht caps intersection.
+ *
+ * Return: None
+ */
+void lim_update_stads_eht_bw_320mhz(struct pe_session *session,
+				    tpDphHashNode sta_ds);
+
 #else
 static inline bool lim_is_session_eht_capable(struct pe_session *session)
 {
@@ -2152,6 +2165,12 @@ lim_update_stads_eht_caps(struct mac_context *mac_ctx,
 			  tSchBeaconStruct *beacon)
 {
 }
+
+static inline void
+lim_update_stads_eht_bw_320mhz(struct pe_session *session,
+			       tpDphHashNode sta_ds)
+{
+}
 #endif /* WLAN_FEATURE_11BE */
 
 #if defined(CONFIG_BAND_6GHZ) && defined(WLAN_FEATURE_11AX)