Procházet zdrojové kódy

qcacld-3.0: Send edca params to firmware

Send all user requests to update edca parms to firmware.

Change-Id: I2b7e884d004c94f71bb5c29583b188ce3681ab0b
CRs-Fixed: 2202046
Arif Hussain před 7 roky
rodič
revize
eb8ba363b1

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

@@ -238,6 +238,7 @@ enum eWniMsgTypes {
 	eWNI_SME_SEND_MGMT_FRAME_TX,
 	eWNI_SME_SEND_SAE_MSG,
 	eWNI_SME_SET_ADDBA_ACCEPT,
+	eWNI_SME_UPDATE_EDCA_PROFILE,
 	eWNI_SME_MSG_TYPES_END
 };
 

+ 1 - 0
core/mac/src/pe/lim/lim_process_message_queue.c

@@ -1484,6 +1484,7 @@ static void lim_process_messages(tpAniSirGlobal mac_ctx,
 	case eWNI_SME_EXT_CHANGE_CHANNEL:
 	case eWNI_SME_ROAM_SCAN_OFFLOAD_REQ:
 	case eWNI_SME_SET_ADDBA_ACCEPT:
+	case eWNI_SME_UPDATE_EDCA_PROFILE:
 		/* These messages are from HDD.No need to respond to HDD */
 		lim_process_normal_hdd_msg(mac_ctx, msg, false);
 		break;

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

@@ -3528,6 +3528,35 @@ static void lim_process_sme_set_addba_accept(tpAniSirGlobal mac_ctx,
 		mac_ctx->reject_addba_req = 0;
 }
 
+static void lim_process_sme_update_edca_params(tpAniSirGlobal mac_ctx,
+					       uint32_t sme_session_id)
+{
+	tpPESession pe_session;
+	tpDphHashNode sta_ds_ptr;
+
+	pe_session = pe_find_session_by_sme_session_id(mac_ctx, sme_session_id);
+	if (!pe_session) {
+		pe_err("Session does not exist: sme_id %d", sme_session_id);
+		return;
+	}
+	pe_session->gLimEdcaParamsActive[EDCA_AC_BE].no_ack =
+		mac_ctx->no_ack_policy_cfg[EDCA_AC_BE];
+	pe_session->gLimEdcaParamsActive[EDCA_AC_BK].no_ack =
+		mac_ctx->no_ack_policy_cfg[EDCA_AC_BK];
+	pe_session->gLimEdcaParamsActive[EDCA_AC_VI].no_ack =
+		mac_ctx->no_ack_policy_cfg[EDCA_AC_VI];
+	pe_session->gLimEdcaParamsActive[EDCA_AC_VO].no_ack =
+		mac_ctx->no_ack_policy_cfg[EDCA_AC_VO];
+	sta_ds_ptr = dph_get_hash_entry(mac_ctx, DPH_STA_HASH_INDEX_PEER,
+					&pe_session->dph.dphHashTable);
+	if (sta_ds_ptr)
+		lim_send_edca_params(mac_ctx,
+				     pe_session->gLimEdcaParamsActive,
+				     sta_ds_ptr->bssId);
+	else
+		pe_err("Self entry missing in Hash Table");
+}
+
 static void lim_process_sme_update_config(tpAniSirGlobal mac_ctx,
 					  struct update_config *msg)
 {
@@ -4716,6 +4745,9 @@ bool lim_process_sme_req_messages(tpAniSirGlobal pMac,
 		lim_process_sme_set_addba_accept(pMac,
 					(struct sme_addba_accept *)pMsgBuf);
 		break;
+	case eWNI_SME_UPDATE_EDCA_PROFILE:
+		lim_process_sme_update_edca_params(pMac, pMsg->bodyval);
+		break;
 	default:
 		qdf_mem_free((void *)pMsg->bodyptr);
 		pMsg->bodyptr = NULL;

+ 11 - 0
core/sme/src/common/sme_api.c

@@ -10089,6 +10089,8 @@ int sme_set_no_ack_policy(tHalHandle hal, uint8_t session_id,
 {
 	tpAniSirGlobal mac_ctx = PMAC_STRUCT(hal);
 	uint8_t i, set_val;
+	struct scheduler_msg msg = {0};
+	QDF_STATUS status;
 
 	if (ac > MAX_NUM_AC) {
 		sme_err("invalid ac val %d", ac);
@@ -10105,6 +10107,15 @@ int sme_set_no_ack_policy(tHalHandle hal, uint8_t session_id,
 		mac_ctx->no_ack_policy_cfg[ac] = set_val;
 	}
 	sme_debug("no ack is set to %d for ac %d", set_val, ac);
+	qdf_mem_zero(&msg, sizeof(msg));
+	msg.type = eWNI_SME_UPDATE_EDCA_PROFILE;
+	msg.reserved = 0;
+	msg.bodyval = session_id;
+	status = scheduler_post_msg(QDF_MODULE_ID_PE, &msg);
+	if (status != QDF_STATUS_SUCCESS) {
+		sme_err("Not able to post update edca profile");
+		return -EIO;
+	}
 
 	return 0;
 }