Jelajahi Sumber

qcacld-3.0: Move HT/VHT parameter from PEsession to Station dph entry

Move HT/VHT parameter from PEsession to Station dph entry which are
introduced as part of wlan data logging.

Change-Id: Icd9258c32a82d3842708ac92b498106d870d7f4f
CRs-Fixed: 1053747
Selvaraj, Sridhar 8 tahun lalu
induk
melakukan
e01e0732d8

+ 23 - 0
core/mac/src/include/dph_global.h

@@ -103,6 +103,28 @@ typedef struct sDphQueueAttr {
 	uint16_t rsvd:1;
 } tDphQueueAttr, *tpDphQueueAttr;
 
+/**
+ * struct parsed_ies: Parsed IE's of BSS capability
+ * @ht_caps: HT caps IE
+ * @vht_caps: VHT caps IE
+ * @ht_operation: HT operation IE
+ * @vht_operation: VHT operation IE
+ * @hs20vendor_ie: HS2.0 vendor IE
+ *
+ * This structure holds the parsed IE of connected BSS
+ * and this is not the intersection of BSS and STA
+ * capability. For example, if BSS supports 80 MHz
+ * and STA connects to BSS in 20 MHz, this structure
+ * holds 80 MHz as peer capability.
+ */
+struct parsed_ies {
+	tDot11fIEHTCaps ht_caps;
+	tDot11fIEVHTCaps vht_caps;
+	tDot11fIEHTInfo ht_operation;
+	tDot11fIEVHTOperation vht_operation;
+	tDot11fIEhs20vendor_ie hs20vendor_ie;
+};
+
 /* STA state node */
 typedef struct sDphHashNode {
 	/*
@@ -242,6 +264,7 @@ typedef struct sDphHashNode {
 	uint8_t nss;
 	int8_t del_sta_ctx_rssi;
 	bool sta_deletion_in_progress;
+	struct parsed_ies parsed_ies;
 
 	/*
 	 * When a station with already an existing dph entry tries to

+ 0 - 4
core/mac/src/pe/include/lim_session.h

@@ -476,10 +476,6 @@ typedef struct sPESession       /* Added to Support BT-AMP */
 	/* Supported NSS is intersection of self and peer NSS */
 	bool supported_nss_1x1;
 	bool is_ext_caps_present;
-	tDot11fIEHTCaps ht_caps;
-	tDot11fIEVHTCaps vht_caps;
-	tDot11fIEHTInfo ht_operation;
-	tDot11fIEVHTOperation vht_operation;
 	uint8_t beacon_tx_rate;
 	uint8_t *access_policy_vendor_ie;
 	uint8_t access_policy;

+ 10 - 5
core/mac/src/pe/lim/lim_process_assoc_rsp_frame.c

@@ -996,11 +996,16 @@ lim_process_assoc_rsp_frame(tpAniSirGlobal mac_ctx,
 		ie_len,
 		beacon);
 
-	session_entry->vht_caps = beacon->VHTCaps;
-	session_entry->ht_caps = beacon->HTCaps;
-	session_entry->hs20vendor_ie = beacon->hs20vendor_ie;
-	session_entry->ht_operation = beacon->HTInfo;
-	session_entry->vht_operation = beacon->VHTOperation;
+	if (beacon->VHTCaps.present)
+		sta_ds->parsed_ies.vht_caps = beacon->VHTCaps;
+	if (beacon->HTCaps.present)
+		sta_ds->parsed_ies.ht_caps = beacon->HTCaps;
+	if (beacon->hs20vendor_ie.present)
+		sta_ds->parsed_ies.hs20vendor_ie = beacon->hs20vendor_ie;
+	if (beacon->HTInfo.present)
+		sta_ds->parsed_ies.ht_operation = beacon->HTInfo;
+	if (beacon->VHTOperation.present)
+		sta_ds->parsed_ies.vht_operation = beacon->VHTOperation;
 
 	if (mac_ctx->lim.gLimProtectionControl !=
 		WNI_CFG_FORCE_POLICY_PROTECTION_DISABLE)

+ 2 - 2
core/mac/src/pe/lim/lim_process_sme_req_messages.c

@@ -941,7 +941,7 @@ __lim_handle_sme_start_bss_request(tpAniSirGlobal mac_ctx, uint32_t *msg_buf)
 			session->vht_config.su_beam_former = 0;
 			session->vht_config.tx_stbc = 0;
 			session->vht_config.num_soundingdim = 0;
-			session->ht_caps.txSTBC = 0;
+			session->htConfig.ht_tx_stbc = 0;
 		}
 		/*
 		 * keep the RSN/WPA IE information in PE Session Entry
@@ -1931,7 +1931,7 @@ __lim_process_sme_join_req(tpAniSirGlobal mac_ctx, uint32_t *msg_buf)
 			session->vht_config.su_beam_former = 0;
 			session->vht_config.tx_stbc = 0;
 			session->vht_config.num_soundingdim = 0;
-			session->ht_caps.txSTBC = 0;
+			session->htConfig.ht_tx_stbc = 0;
 		}
 
 #ifdef FEATURE_WLAN_ESE

+ 15 - 9
core/mac/src/pe/lim/lim_send_sme_rsp_messages.c

@@ -393,19 +393,25 @@ static void lim_handle_join_rsp_status(tpAniSirGlobal mac_ctx,
 
 /**
  * lim_add_bss_info() - copy data from session entry to join rsp
- * @session_entry: PE Session Info
+ * @sta_ds: Station dph entry
  * @sme_join_rsp: Join response buffer to be filled up
  *
  * Return: None
  */
-void lim_add_bss_info(tpPESession session_entry,
-					tpSirSmeJoinRsp sme_join_rsp)
+void lim_add_bss_info(tpDphHashNode sta_ds, tpSirSmeJoinRsp sme_join_rsp)
 {
-	sme_join_rsp->hs20vendor_ie = session_entry->hs20vendor_ie;
-	sme_join_rsp->vht_caps = session_entry->vht_caps;
-	sme_join_rsp->ht_caps = session_entry->ht_caps;
-	sme_join_rsp->ht_operation = session_entry->ht_operation;
-	sme_join_rsp->vht_operation = session_entry->vht_operation;
+	struct parsed_ies *parsed_ies = &sta_ds->parsed_ies;
+
+	if (parsed_ies->hs20vendor_ie.present)
+		sme_join_rsp->hs20vendor_ie = parsed_ies->hs20vendor_ie;
+	if (parsed_ies->vht_caps.present)
+		sme_join_rsp->vht_caps = parsed_ies->vht_caps;
+	if (parsed_ies->ht_caps.present)
+		sme_join_rsp->ht_caps = parsed_ies->ht_caps;
+	if (parsed_ies->ht_operation.present)
+		sme_join_rsp->ht_operation = parsed_ies->ht_operation;
+	if (parsed_ies->vht_operation.present)
+		sme_join_rsp->vht_operation = parsed_ies->vht_operation;
 }
 
 /**
@@ -500,6 +506,7 @@ lim_send_sme_join_reassoc_rsp(tpAniSirGlobal mac_ctx, uint16_t msg_type,
 				sme_join_rsp->nss = sta_ds->nss;
 				sme_join_rsp->max_rate_flags =
 					lim_get_max_rate_flags(mac_ctx, sta_ds);
+				lim_add_bss_info(sta_ds, sme_join_rsp);
 			}
 		}
 		sme_join_rsp->beaconLength = 0;
@@ -509,7 +516,6 @@ lim_send_sme_join_reassoc_rsp(tpAniSirGlobal mac_ctx, uint16_t msg_type,
 #ifdef FEATURE_WLAN_ESE
 		sme_join_rsp->tspecIeLen = 0;
 #endif
-		lim_add_bss_info(session_entry, sme_join_rsp);
 		lim_handle_join_rsp_status(mac_ctx, session_entry, result_code,
 			sme_join_rsp);