Browse Source

qcacld-3.0: Fix the 6G band capability config to FW

Convert the 6GHz capability local struct value to raw 32-bit
value to before configure it to FW.

Change-Id: Ia9f7d7d35b0f481ad9ae7d15eec5ee198158da88
CRs-Fixed: 2696392
Kiran Kumar Lokere 4 years ago
parent
commit
2c3a4ea4e9
2 changed files with 29 additions and 5 deletions
  1. 8 0
      core/mac/inc/sir_api.h
  2. 21 5
      core/wma/src/wma_he.c

+ 8 - 0
core/mac/inc/sir_api.h

@@ -5331,6 +5331,14 @@ struct ppet_hdr {
 #define HE_MCS_0_11    0x2
 #define HE_MCS_DISABLE 0x3
 
+#define HE_6G_MIN_MPDU_START_SAPCE_BIT_POS 0
+#define HE_6G_MAX_AMPDU_LEN_EXP_BIT_POS 3
+#define HE_6G_MAX_MPDU_LEN_BIT_POS 6
+#define HE_6G_SMPS_BIT_POS 9
+#define HE_6G_RD_RESP_BIT_POS 11
+#define HE_6G_RX_ANT_PATTERN_BIT_POS 12
+#define HE_6G_TX_ANT_PATTERN_BIT_POS 13
+
 /*
  * Following formuala has been arrived at using karnaugh map and unit tested
  * with sample code. Take MCS for each NSS as 2 bit value first and solve for

+ 21 - 5
core/wma/src/wma_he.c

@@ -1333,11 +1333,27 @@ void wma_populate_peer_he_cap(struct peer_assoc_params *peer,
 	wma_print_he_mac_cap_w2(mac_cap[1]);
 	wma_print_he_ppet(&peer->peer_ppet);
 
-	qdf_mem_copy(&peer->peer_he_caps_6ghz,
-		     ((uint8_t *)&params->he_6ghz_band_caps) + 1,
-		     DOT11F_IE_HE_6GHZ_BAND_CAP_MAX_LEN);
-	WMA_LOGD(FL("HE 6GHz band caps: %0x"), peer->peer_he_caps_6ghz);
-	return;
+	if (params->he_6ghz_band_caps.present) {
+		peer->peer_he_caps_6ghz =
+			(params->he_6ghz_band_caps.min_mpdu_start_spacing <<
+			 HE_6G_MIN_MPDU_START_SAPCE_BIT_POS) |
+			(params->he_6ghz_band_caps.max_ampdu_len_exp <<
+			 HE_6G_MAX_AMPDU_LEN_EXP_BIT_POS) |
+			(params->he_6ghz_band_caps.max_mpdu_len <<
+			 HE_6G_MAX_MPDU_LEN_BIT_POS) |
+			(params->he_6ghz_band_caps.sm_pow_save <<
+			 HE_6G_SMPS_BIT_POS) |
+			(params->he_6ghz_band_caps.rd_responder <<
+			 HE_6G_RD_RESP_BIT_POS) |
+			(params->he_6ghz_band_caps.rx_ant_pattern_consistency <<
+			 HE_6G_RX_ANT_PATTERN_BIT_POS) |
+			(params->he_6ghz_band_caps.tx_ant_pattern_consistency <<
+			 HE_6G_TX_ANT_PATTERN_BIT_POS);
+		WMA_LOGD(FL("HE 6GHz band caps: %0x"), peer->peer_he_caps_6ghz);
+	} else {
+		WMA_LOGD(FL("HE 6GHz band caps not present"));
+		peer->peer_he_caps_6ghz = 0;
+	}
 }
 
 void wma_update_vdev_he_ops(uint32_t *he_ops, tDot11fIEhe_op *he_op)