浏览代码

qcacld-3.0: Update TSPEC IEs to CSR if TSPEC IE present in reassoc rsp

Currently TSPEC IEs are not updated to CSR when reassoc response included
TSPEC IEs. In LFR3 CCX roaming, CSR doesnt get TSPEC IE data as reassoc rsp
doesnt include RIC data.
Del TSPEC is not being processed properly at CSR level as it doesnt have
any TSPEC information.

Add changes to update TSPEC IEs and length to CSR after successful
CCX roaming.

Change-Id: I0e024c8264cb2e06042d517824245db1f1d09aea
CRs-Fixed: 1108440
Sreelakshmi Konamki 8 年之前
父节点
当前提交
0a942d4f66
共有 2 个文件被更改,包括 22 次插入6 次删除
  1. 15 4
      core/mac/src/pe/lim/lim_api.c
  2. 7 2
      core/sme/src/csr/csr_api_roam.c

+ 15 - 4
core/mac/src/pe/lim/lim_api.c

@@ -2088,8 +2088,8 @@ QDF_STATUS pe_roam_synch_callback(tpAniSirGlobal mac_ctx,
 	curr_sta_ds->nss = local_nss;
 	ft_session_ptr->limMlmState = eLIM_MLM_LINK_ESTABLISHED_STATE;
 	lim_init_tdls_data(mac_ctx, ft_session_ptr);
-	join_rsp_len = ft_session_ptr->RICDataLen + sizeof(tSirSmeJoinRsp) -
-			sizeof(uint8_t);
+	join_rsp_len = ft_session_ptr->RICDataLen + ft_session_ptr->tspecLen +
+			sizeof(tSirSmeJoinRsp) - sizeof(uint8_t);
 	roam_sync_ind_ptr->join_rsp = qdf_mem_malloc(join_rsp_len);
 	if (NULL == roam_sync_ind_ptr->join_rsp) {
 		lim_log(mac_ctx, LOGE, FL("LFR3:mem alloc failed"));
@@ -2100,8 +2100,8 @@ QDF_STATUS pe_roam_synch_callback(tpAniSirGlobal mac_ctx,
 		return QDF_STATUS_E_NOMEM;
 	}
 
-	lim_log(mac_ctx, LOG1, FL("Session RicLength = %d"),
-			ft_session_ptr->RICDataLen);
+	lim_log(mac_ctx, LOG1, FL("Session RicLength = %d tspecLen = %d"),
+			ft_session_ptr->RICDataLen, ft_session_ptr->tspecLen);
 	if (ft_session_ptr->ricData != NULL) {
 		roam_sync_ind_ptr->join_rsp->parsedRicRspLen =
 			ft_session_ptr->RICDataLen;
@@ -2112,6 +2112,17 @@ QDF_STATUS pe_roam_synch_callback(tpAniSirGlobal mac_ctx,
 		ft_session_ptr->ricData = NULL;
 		ft_session_ptr->RICDataLen = 0;
 	}
+	if (ft_session_ptr->tspecIes != NULL) {
+		roam_sync_ind_ptr->join_rsp->tspecIeLen =
+			ft_session_ptr->tspecLen;
+		qdf_mem_copy(roam_sync_ind_ptr->join_rsp->frames +
+				roam_sync_ind_ptr->join_rsp->parsedRicRspLen,
+				ft_session_ptr->tspecIes,
+				roam_sync_ind_ptr->join_rsp->tspecIeLen);
+		qdf_mem_free(ft_session_ptr->tspecIes);
+		ft_session_ptr->tspecIes = NULL;
+		ft_session_ptr->tspecLen = 0;
+	}
 	roam_sync_ind_ptr->join_rsp->vht_channel_width =
 		ft_session_ptr->ch_width;
 	roam_sync_ind_ptr->join_rsp->staId = curr_sta_ds->staIndex;

+ 7 - 2
core/sme/src/csr/csr_api_roam.c

@@ -19838,9 +19838,12 @@ void csr_roam_synch_callback(tpAniSirGlobal mac_ctx,
 			FL("LFR3:Clear Connected info"));
 	csr_roam_free_connected_info(mac_ctx,
 			&session->connectedInfo);
-	len = roam_synch_data->join_rsp->parsedRicRspLen;
+	len = roam_synch_data->join_rsp->parsedRicRspLen +
+		roam_synch_data->join_rsp->tspecIeLen;
 	QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_DEBUG,
-			FL("LFR3: RIC length - %d"), len);
+		FL("LFR3: RIC length - %d tspecLen %d"),
+		roam_synch_data->join_rsp->parsedRicRspLen,
+		roam_synch_data->join_rsp->tspecIeLen);
 	if (len) {
 		session->connectedInfo.pbFrames =
 			qdf_mem_malloc(len);
@@ -19849,6 +19852,8 @@ void csr_roam_synch_callback(tpAniSirGlobal mac_ctx,
 				roam_synch_data->join_rsp->frames, len);
 			session->connectedInfo.nRICRspLength =
 				roam_synch_data->join_rsp->parsedRicRspLen;
+			session->connectedInfo.nTspecIeLength =
+				roam_synch_data->join_rsp->tspecIeLen;
 		}
 	}
 	conn_profile->vht_channel_width =