Ver código fonte

qcacld-3.0: Disable shortGI ie for 80MHz & 160MHz in 2.4GHz band

When STA connects with 2.4GHz band AP, shortGI ie for 80MHz
& 160MHz becomes 1 instead of 0 as 2.4GHz supports max 40MHz
channel width.

As part of fix, if STA connects in 2.4GHz band AP then
a. Disable shortgi80 and shortgi160and80plus80 for vht caps,
b. Disable ul_2x996_tone_ru_supp, num_sounding_gt_80,
bfee_sts_gt_80, tb_ppdu_tx_stbc_gt_80mhz, rx_stbc_gt_80mhz,
he_ppdu_20_in_160_80p80Mhz, he_ppdu_80_in_160_80p80Mhz for he
caps.

Change-Id: I27fdd6e949e738b33ced940f08664ed7b61c5af8
CRs-Fixed: 3054133
Jyoti Kumari 3 anos atrás
pai
commit
ddd24d7802

+ 23 - 5
core/mac/src/pe/lim/lim_process_sme_req_messages.c

@@ -652,6 +652,26 @@ static QDF_STATUS lim_set_ldpc_exception(struct mac_context *mac_ctx,
 	return QDF_STATUS_SUCCESS;
 }
 
+/**
+ * lim_revise_req_vht_cap_per_band: Update vht cap based on band
+ * session: Session pointer
+ *
+ * Return: None
+ *
+ */
+static void lim_revise_req_vht_cap_per_band(struct pe_session *session)
+{
+	struct wlan_vht_config *vht_config;
+
+	vht_config = &session->vht_config;
+	/* Disable shortgi160 and 80 for 2.4Ghz BSS*/
+	if (wlan_reg_is_24ghz_ch_freq(session->curr_op_freq)) {
+		pe_debug("Disable shortgi ie for 80MHz & 160MHz in 2G band");
+		vht_config->shortgi80 = 0;
+		vht_config->shortgi160and80plus80 = 0;
+	}
+}
+
 static void lim_start_bss_update_ht_vht_caps(struct mac_context *mac_ctx,
 					     struct pe_session *session)
 {
@@ -673,11 +693,6 @@ static void lim_start_bss_update_ht_vht_caps(struct mac_context *mac_ctx,
 	value = MLME_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED_FW_DEF;
 	vht_config.csnof_beamformer_antSup = value;
 	vht_config.mu_beam_formee = 0;
-	/* Disable shortgi160 and 80 for 2.4Ghz BSS*/
-	if (wlan_reg_is_24ghz_ch_freq(session->curr_op_freq)) {
-		vht_config.shortgi160and80plus80 = 0;
-		vht_config.shortgi80 = 0;
-	}
 	if (session->pLimStartBssReq->vht_channel_width <= CH_WIDTH_80MHZ) {
 		vht_config.shortgi160and80plus80 = 0;
 		vht_config.supported_channel_widthset = 0;
@@ -687,6 +702,8 @@ static void lim_start_bss_update_ht_vht_caps(struct mac_context *mac_ctx,
 
 	ht_caps.caps = vdev_mlme->proto.ht_info.ht_caps;
 	session->ht_config = ht_caps.ht_caps;
+
+	lim_revise_req_vht_cap_per_band(session);
 	pe_debug("cur_op_freq %d HT capability 0x%x VHT capability 0x%x bw %d",
 		 session->curr_op_freq, ht_caps.caps, vht_config.caps,
 		 session->pLimStartBssReq->vht_channel_width);
@@ -1370,6 +1387,7 @@ static void lim_join_req_update_ht_vht_caps(struct mac_context *mac,
 						bcn_ie->HTCaps.shortGI40MHz;
 	}
 
+	lim_revise_req_vht_cap_per_band(session);
 	pe_debug("HT capability 0x%x VHT capability 0x%x",
 		 ht_caps.caps, vht_config.caps);
 }

+ 13 - 1
core/mac/src/pe/lim/lim_utils.c

@@ -7325,7 +7325,13 @@ lim_revise_req_he_cap_per_band(struct mlme_legacy_priv *mlme_priv,
 			mac->he_cap_2g.tx_he_mcs_map_lt_80;
 		he_config->rx_he_mcs_map_lt_80 =
 			mac->he_cap_2g.rx_he_mcs_map_lt_80;
-
+		he_config->ul_2x996_tone_ru_supp = 0;
+		he_config->num_sounding_gt_80 = 0;
+		he_config->bfee_sts_gt_80 = 0;
+		he_config->tb_ppdu_tx_stbc_gt_80mhz = 0;
+		he_config->rx_stbc_gt_80mhz = 0;
+		he_config->he_ppdu_20_in_160_80p80Mhz = 0;
+		he_config->he_ppdu_80_in_160_80p80Mhz = 0;
 	} else {
 		he_config->bfee_sts_lt_80 =
 			mac->he_cap_5g.bfee_sts_lt_80;
@@ -7346,6 +7352,12 @@ lim_revise_req_he_cap_per_band(struct mlme_legacy_priv *mlme_priv,
 				mac->he_cap_5g.he_ppdu_20_in_160_80p80Mhz;
 			he_config->he_ppdu_80_in_160_80p80Mhz =
 				mac->he_cap_5g.he_ppdu_80_in_160_80p80Mhz;
+			he_config->rx_stbc_gt_80mhz =
+				mac->he_cap_5g.rx_stbc_gt_80mhz;
+			he_config->tb_ppdu_tx_stbc_gt_80mhz =
+				mac->he_cap_5g.tb_ppdu_tx_stbc_gt_80mhz;
+			he_config->ul_2x996_tone_ru_supp =
+				 mac->he_cap_5g.ul_2x996_tone_ru_supp;
 		}
 	}
 }