Jelajahi Sumber

qcacld-3.0: Move user EDCA setting variable to PE session

Do not have user_edca_set variable in the packed structure.
The packed structure is used in various places for copying
and casting.

Change-Id: Ic9203d73757830113df91c37da883eb19f7bff10
CRs-Fixed: 3182540
Madhvapathi Sriram 2 tahun lalu
induk
melakukan
bba43fa7fb

+ 0 - 1
core/hdd/src/wlan_hdd_cfg80211.c

@@ -20913,7 +20913,6 @@ static int __wlan_hdd_set_txq_params(struct wiphy *wiphy,
 	txq_edca_params.txoplimit = params->txop;
 	txq_edca_params.aci.aci =
 			ieee_ac_to_qca_ac[params->ac];
-	txq_edca_params.user_edca_set = 1;
 
 	status = sme_update_session_txq_edca_params(mac_handle,
 						    adapter->vdev_id,

+ 0 - 1
core/mac/inc/sir_mac_prot_def.h

@@ -687,7 +687,6 @@ typedef struct sSirMacEdcaParamRecord {
 		uint16_t mu_edca_timer;
 	};
 	uint8_t no_ack;
-	uint8_t user_edca_set;
 } qdf_packed tSirMacEdcaParamRecord;
 
 typedef struct sSirMacQosInfo {

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

@@ -655,6 +655,7 @@ struct pe_session {
 	struct mlo_partner_info ml_partner_info;
 #endif
 #endif /* WLAN_FEATURE_11BE */
+	uint8_t user_edca_set;
 };
 
 /*-------------------------------------------------------------------------

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

@@ -6909,8 +6909,6 @@ lim_process_sme_update_session_edca_txq_params(struct mac_context *mac_ctx,
 			msg->txq_edca_params.aci.aifsn;
 	pe_session->gLimEdcaParams[ac].txoplimit =
 			msg->txq_edca_params.txoplimit;
-	pe_session->gLimEdcaParams[ac].user_edca_set =
-			msg->txq_edca_params.user_edca_set;
 
 	lim_send_edca_params(mac_ctx,
 			     pe_session->gLimEdcaParams,

+ 3 - 5
core/mac/src/pe/lim/lim_session.c

@@ -541,7 +541,7 @@ struct pe_session *pe_create_session(struct mac_context *mac,
 				     uint8_t vdev_id)
 {
 	QDF_STATUS status;
-	uint8_t i, j;
+	uint8_t i;
 	struct pe_session *session_ptr;
 	struct wlan_objmgr_vdev *vdev;
 
@@ -685,8 +685,7 @@ struct pe_session *pe_create_session(struct mac_context *mac,
 	/* following is invalid value since seq number is 12 bit */
 	session_ptr->prev_auth_seq_num = 0xFFFF;
 
-	for (j = 0; j < QCA_WLAN_AC_ALL; j++)
-		session_ptr->gLimEdcaParams[j].user_edca_set = 0;
+	session_ptr->user_edca_set = 0;
 
 	return &mac->lim.gpSession[i];
 
@@ -1012,8 +1011,7 @@ void pe_delete_session(struct mac_context *mac_ctx, struct pe_session *session)
 	if (LIM_IS_AP_ROLE(session))
 		lim_check_and_reset_protection_params(mac_ctx);
 
-	for (i = 0; i < QCA_WLAN_AC_ALL; i++)
-		session->gLimEdcaParams[i].user_edca_set = 0;
+	session->user_edca_set = 0;
 
 	vdev = session->vdev;
 	session->vdev = NULL;

+ 2 - 10
core/mac/src/pe/sch/sch_message.c

@@ -361,19 +361,11 @@ void sch_qos_update_local(struct mac_context *mac, struct pe_session *pe_session
 {
 
 	uint32_t params[4][CFG_EDCA_DATA_LEN];
-	uint8_t ac, user_edca_set = 0;
 	QDF_STATUS status;
 
-	/* Check if a user preferred EDCA setting is present */
-	for (ac = 0; ac < QCA_WLAN_AC_ALL; ac++) {
-		if (pe_session->gLimEdcaParams[ac].user_edca_set) {
-			user_edca_set = 1;
-			break;
-		}
-	}
-
+	pe_debug("user_edca_set : %u", pe_session->user_edca_set);
 	/* If user preferred EDCA setting present, use it, do not default */
-	if (user_edca_set == 0) {
+	if (pe_session->user_edca_set == 0) {
 		status = sch_get_params(mac, params, true /*local */);
 		if (QDF_IS_STATUS_ERROR(status)) {
 			pe_err("sch_get_params(local) failed");

+ 13 - 1
core/sme/src/common/sme_api.c

@@ -11454,14 +11454,24 @@ sme_update_session_txq_edca_params(mac_handle_t mac_handle,
 	QDF_STATUS status;
 	struct mac_context *mac_ctx = MAC_CONTEXT(mac_handle);
 	struct sir_update_session_txq_edca_param *msg;
+	struct pe_session *pe_session;
+
+	pe_session = pe_find_session_by_vdev_id(mac_ctx, session_id);
+	if (!pe_session) {
+		pe_warn("Session does not exist for given session_id %d",
+			session_id);
+		return QDF_STATUS_E_INVAL;
+	}
 
 	status = sme_acquire_global_lock(&mac_ctx->sme);
 	if (QDF_IS_STATUS_ERROR(status))
 		return QDF_STATUS_E_AGAIN;
 
 	msg = qdf_mem_malloc(sizeof(*msg));
-	if (!msg)
+	if (!msg) {
+		sme_release_global_lock(&mac_ctx->sme);
 		return QDF_STATUS_E_NOMEM;
+	}
 
 	msg->message_type = eWNI_SME_UPDATE_SESSION_EDCA_TXQ_PARAMS;
 	msg->vdev_id = session_id;
@@ -11475,6 +11485,8 @@ sme_update_session_txq_edca_params(mac_handle_t mac_handle,
 	if (status != QDF_STATUS_SUCCESS)
 		return QDF_STATUS_E_IO;
 
+	pe_session->user_edca_set = 1;
+
 	return QDF_STATUS_SUCCESS;
 }