summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLiangwei Dong <liangwei@codeaurora.org>2016-11-28 02:58:25 -0500
committerqcabuildsw <qcabuildsw@localhost>2016-12-07 03:08:55 -0800
commitcd2facf67c6d6e6bc3ff55344cc25511f8cae5f8 (patch)
tree59d4927e0da2acfdbde13aaa1dd562f70cee96c1
parent8d83e90acfc21b520cb3c77fa4a5814b6bdca5de (diff)
qcacld-3.0: Fix WME ParamSetCount error
qcacld-2.0 to qcacld-3.0 propagation During the WFA WME test, the ParamSetCount in beacon IE is mismatch with the value in ASSOC response. The root cause is the value will be updated when station gets connected no matter the WME parameter changing or not. The fix is to avoid updating the ParamSetCount count when there is no change in the WME parameters. Change-Id: Ied4cb68c6bbf210084bc3f94607354f2054f7fc0 CRs-Fixed: 1080760
-rw-r--r--core/mac/src/pe/sch/sch_message.c51
1 files changed, 40 insertions, 11 deletions
diff --git a/core/mac/src/pe/sch/sch_message.c b/core/mac/src/pe/sch/sch_message.c
index ff363a07254e..020821169399 100644
--- a/core/mac/src/pe/sch/sch_message.c
+++ b/core/mac/src/pe/sch/sch_message.c
@@ -189,7 +189,6 @@ void sch_process_message(tpAniSirGlobal pMac, tpSirMsgQ pSchMsg)
case WNI_CFG_EDCA_WME_ACVI:
case WNI_CFG_EDCA_WME_ACVO:
if (LIM_IS_AP_ROLE(psessionEntry)) {
- psessionEntry->gLimEdcaParamSetCount++;
sch_qos_update_broadcast(pMac, psessionEntry);
}
break;
@@ -298,9 +297,9 @@ sch_get_params(tpAniSirGlobal pMac,
* @mac_ctx: mac global context
* @session: pesession entry
*
- * Return: void
+ * Return: true if wmm param updated, false if wmm param not updated
*/
-static void
+static bool
broadcast_wmm_of_concurrent_sta_session(tpAniSirGlobal mac_ctx,
tpPESession session)
{
@@ -327,7 +326,13 @@ broadcast_wmm_of_concurrent_sta_session(tpAniSirGlobal mac_ctx,
}
if (concurrent_session == NULL)
- return;
+ return false;
+
+ if (!qdf_mem_cmp(session->gLimEdcaParamsBC,
+ concurrent_session->gLimEdcaParams,
+ sizeof(concurrent_session->gLimEdcaParams)))
+ return false;
+
/*
* Once atleast one concurrent session on same channel is found and WMM
* broadcast params for current SoftAP/GO session updated, return
@@ -351,6 +356,7 @@ broadcast_wmm_of_concurrent_sta_session(tpAniSirGlobal mac_ctx,
session->gLimEdcaParamsBC[j].cw.max,
session->gLimEdcaParamsBC[j].txoplimit);)
}
+ return true;
}
void sch_qos_update_broadcast(tpAniSirGlobal pMac, tpPESession psessionEntry)
@@ -359,6 +365,7 @@ void sch_qos_update_broadcast(tpAniSirGlobal pMac, tpPESession psessionEntry)
uint32_t cwminidx, cwmaxidx, txopidx;
uint32_t phyMode;
uint8_t i;
+ bool updated = false;
if (sch_get_params(pMac, params, false) != eSIR_SUCCESS) {
PELOGE(sch_log(pMac, LOGE, FL("QosUpdateBroadcast: failed"));)
@@ -384,16 +391,36 @@ void sch_qos_update_broadcast(tpAniSirGlobal pMac, tpPESession psessionEntry)
}
for (i = 0; i < MAX_NUM_AC; i++) {
- psessionEntry->gLimEdcaParamsBC[i].aci.acm =
+ if (psessionEntry->gLimEdcaParamsBC[i].aci.acm !=
+ (uint8_t) params[i][WNI_CFG_EDCA_PROFILE_ACM_IDX]) {
+ psessionEntry->gLimEdcaParamsBC[i].aci.acm =
(uint8_t) params[i][WNI_CFG_EDCA_PROFILE_ACM_IDX];
- psessionEntry->gLimEdcaParamsBC[i].aci.aifsn =
+ updated = true;
+ }
+ if (psessionEntry->gLimEdcaParamsBC[i].aci.aifsn !=
+ (uint8_t) params[i][WNI_CFG_EDCA_PROFILE_AIFSN_IDX]) {
+ psessionEntry->gLimEdcaParamsBC[i].aci.aifsn =
(uint8_t) params[i][WNI_CFG_EDCA_PROFILE_AIFSN_IDX];
- psessionEntry->gLimEdcaParamsBC[i].cw.min =
+ updated = true;
+ }
+ if (psessionEntry->gLimEdcaParamsBC[i].cw.min !=
+ convert_cw(GET_CW(&params[i][cwminidx]))) {
+ psessionEntry->gLimEdcaParamsBC[i].cw.min =
convert_cw(GET_CW(&params[i][cwminidx]));
- psessionEntry->gLimEdcaParamsBC[i].cw.max =
+ updated = true;
+ }
+ if (psessionEntry->gLimEdcaParamsBC[i].cw.max !=
+ convert_cw(GET_CW(&params[i][cwmaxidx]))) {
+ psessionEntry->gLimEdcaParamsBC[i].cw.max =
convert_cw(GET_CW(&params[i][cwmaxidx]));
- psessionEntry->gLimEdcaParamsBC[i].txoplimit =
+ updated = true;
+ }
+ if (psessionEntry->gLimEdcaParamsBC[i].txoplimit !=
+ (uint16_t) params[i][txopidx]) {
+ psessionEntry->gLimEdcaParamsBC[i].txoplimit =
(uint16_t) params[i][txopidx];
+ updated = true;
+ }
PELOG1(sch_log
(pMac, LOG1,
@@ -408,7 +435,10 @@ void sch_qos_update_broadcast(tpAniSirGlobal pMac, tpPESession psessionEntry)
}
/* If there exists a concurrent STA-AP session, use its WMM params to broadcast in beacons. WFA Wifi Direct test plan 6.1.14 requirement */
- broadcast_wmm_of_concurrent_sta_session(pMac, psessionEntry);
+ if (broadcast_wmm_of_concurrent_sta_session(pMac, psessionEntry))
+ updated = true;
+ if (updated)
+ psessionEntry->gLimEdcaParamSetCount++;
if (sch_set_fixed_beacon_fields(pMac, psessionEntry) != eSIR_SUCCESS)
PELOGE(sch_log(pMac, LOGE, "Unable to set beacon fields!");)
@@ -567,7 +597,6 @@ void sch_edca_profile_update(tpAniSirGlobal pMac, tpPESession psessionEntry)
if (LIM_IS_AP_ROLE(psessionEntry) ||
LIM_IS_IBSS_ROLE(psessionEntry)) {
sch_qos_update_local(pMac, psessionEntry);
- psessionEntry->gLimEdcaParamSetCount++;
sch_qos_update_broadcast(pMac, psessionEntry);
}
}