qcacld-3.0: Update dot11mode properly for roamable AP
qcacld-2.0 to qcacld-3.0 propagation Currently dot11mode is not updated properly for roamable AP. This can result in incorrect data rates. Update dot11mode to fix this. Change-Id: I644f685fc2c0e041b308017ed3206d56c9c57fe9 CRs-Fixed: 2053478
This commit is contained in:

committed by
snandini

orang tua
9a7de14bcf
melakukan
19f5765793
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2016 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2013-2017 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
|
||||
*
|
||||
@@ -54,6 +54,7 @@
|
||||
typedef struct sSirFTPreAuthReq {
|
||||
uint16_t messageType; /* eWNI_SME_FT_PRE_AUTH_REQ */
|
||||
uint16_t length;
|
||||
uint32_t dot11mode;
|
||||
/*
|
||||
* Track if response is processed for this request
|
||||
* We expect only one response per request.
|
||||
|
@@ -493,7 +493,6 @@ void lim_fill_ft_session(tpAniSirGlobal pMac,
|
||||
int8_t localPowerConstraint;
|
||||
int8_t regMax;
|
||||
tSchBeaconStruct *pBeaconStruct;
|
||||
uint32_t selfDot11Mode;
|
||||
ePhyChanBondState cbEnabledMode;
|
||||
|
||||
pBeaconStruct = qdf_mem_malloc(sizeof(tSchBeaconStruct));
|
||||
@@ -534,9 +533,9 @@ void lim_fill_ft_session(tpAniSirGlobal pMac,
|
||||
qdf_mem_copy(pftSessionEntry->ssId.ssId, pBeaconStruct->ssId.ssId,
|
||||
pftSessionEntry->ssId.length);
|
||||
|
||||
wlan_cfg_get_int(pMac, WNI_CFG_DOT11_MODE, &selfDot11Mode);
|
||||
pe_debug("selfDot11Mode: %d", selfDot11Mode);
|
||||
pftSessionEntry->dot11mode = selfDot11Mode;
|
||||
pftSessionEntry->dot11mode =
|
||||
psessionEntry->ftPEContext.pFTPreAuthReq->dot11mode;
|
||||
pe_debug("dot11mode: %d", pftSessionEntry->dot11mode);
|
||||
pftSessionEntry->vhtCapability =
|
||||
(IS_DOT11_MODE_VHT(pftSessionEntry->dot11mode)
|
||||
&& IS_BSS_VHT_CAPABLE(pBeaconStruct->VHTCaps));
|
||||
|
@@ -4207,6 +4207,10 @@ QDF_STATUS csr_roam_prepare_bss_config(tpAniSirGlobal pMac,
|
||||
else
|
||||
pBssConfig->uCfgDot11Mode = eCSR_CFG_DOT11_MODE_11A;
|
||||
}
|
||||
|
||||
sme_debug("phyMode=%d, uCfgDot11Mode=%d",
|
||||
pProfile->phyMode, pBssConfig->uCfgDot11Mode);
|
||||
|
||||
/* Qos */
|
||||
if ((pBssConfig->uCfgDot11Mode != eCSR_CFG_DOT11_MODE_11N) &&
|
||||
(pMac->roam.configParam.WMMSupportMode == eCsrRoamWmmNoQos)) {
|
||||
@@ -14095,6 +14099,9 @@ QDF_STATUS csr_send_join_req_msg(tpAniSirGlobal pMac, uint32_t sessionId,
|
||||
ucDot11Mode = WNI_CFG_DOT11_MODE_11N;
|
||||
}
|
||||
csr_join_req->dot11mode = (uint8_t) ucDot11Mode;
|
||||
sme_debug("dot11mode=%d, uCfgDot11Mode=%d",
|
||||
csr_join_req->dot11mode,
|
||||
pSession->bssParams.uCfgDot11Mode);
|
||||
#ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH
|
||||
csr_join_req->cc_switch_mode =
|
||||
pMac->roam.configParam.cc_switch_mode;
|
||||
|
@@ -40,6 +40,18 @@
|
||||
static void csr_reinit_preauth_cmd(tpAniSirGlobal pMac, tSmeCmd *pCommand);
|
||||
static QDF_STATUS csr_neighbor_roam_add_preauth_fail(tpAniSirGlobal mac_ctx,
|
||||
uint8_t session_id, tSirMacAddr bssid);
|
||||
|
||||
/**
|
||||
* csr_get_dot11_mode() - Derives dot11mode
|
||||
* @hal: Global Handle
|
||||
* @session_id: SME Session ID
|
||||
* @bss_desc: BSS descriptor
|
||||
*
|
||||
* Return: dot11mode
|
||||
*/
|
||||
static uint32_t csr_get_dot11_mode(tHalHandle hal, uint32_t session_id,
|
||||
tpSirBssDescription bss_desc);
|
||||
|
||||
/**
|
||||
* csr_neighbor_roam_state_preauth_done() - Check if state is preauth done
|
||||
* @mac_ctx: Global MAC context
|
||||
@@ -471,6 +483,59 @@ bool csr_neighbor_roam_is_preauth_candidate(tpAniSirGlobal pMac,
|
||||
return true;
|
||||
}
|
||||
|
||||
uint32_t csr_get_dot11_mode(tHalHandle hal, uint32_t session_id,
|
||||
tpSirBssDescription bss_desc)
|
||||
{
|
||||
tpAniSirGlobal mac_ctx = PMAC_STRUCT(hal);
|
||||
tCsrRoamSession *csr_session = CSR_GET_SESSION(mac_ctx, session_id);
|
||||
eCsrCfgDot11Mode ucfg_dot11_mode, cfg_dot11_mode;
|
||||
QDF_STATUS status;
|
||||
tDot11fBeaconIEs *ies_local = NULL;
|
||||
uint32_t dot11mode = 0;
|
||||
|
||||
sme_debug("phyMode %d", csr_session->pCurRoamProfile->phyMode);
|
||||
|
||||
/* Get IE's */
|
||||
status = csr_get_parsed_bss_description_ies(mac_ctx, bss_desc,
|
||||
&ies_local);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status)) {
|
||||
sme_err("csr_get_parsed_bss_description_ies failed");
|
||||
return 0;
|
||||
}
|
||||
if (ies_local == NULL) {
|
||||
sme_err("ies_local is NULL");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (csr_is_phy_mode_match(mac_ctx,
|
||||
csr_session->pCurRoamProfile->phyMode,
|
||||
bss_desc, csr_session->pCurRoamProfile,
|
||||
&cfg_dot11_mode, ies_local))
|
||||
ucfg_dot11_mode = cfg_dot11_mode;
|
||||
else {
|
||||
sme_err("Can not find match phy mode");
|
||||
if (WLAN_REG_IS_5GHZ_CH(bss_desc->channelId))
|
||||
ucfg_dot11_mode = eCSR_CFG_DOT11_MODE_11A;
|
||||
else
|
||||
ucfg_dot11_mode = eCSR_CFG_DOT11_MODE_11G;
|
||||
}
|
||||
|
||||
/* dot11mode */
|
||||
dot11mode = csr_translate_to_wni_cfg_dot11_mode(mac_ctx,
|
||||
ucfg_dot11_mode);
|
||||
sme_debug("dot11mode %d ucfg_dot11_mode %d",
|
||||
dot11mode, ucfg_dot11_mode);
|
||||
|
||||
if (bss_desc->channelId <= 14 &&
|
||||
false == mac_ctx->roam.configParam.enableVhtFor24GHz &&
|
||||
WNI_CFG_DOT11_MODE_11AC == dot11mode) {
|
||||
/* Need to disable VHT operation in 2.4 GHz band */
|
||||
dot11mode = WNI_CFG_DOT11_MODE_11N;
|
||||
}
|
||||
qdf_mem_free(ies_local);
|
||||
return dot11mode;
|
||||
}
|
||||
|
||||
/**
|
||||
* csr_roam_issue_ft_preauth_req() - Initiate Preauthentication request
|
||||
* @hal: Global Handle
|
||||
@@ -513,6 +578,13 @@ QDF_STATUS csr_roam_issue_ft_preauth_req(tHalHandle hal, uint32_t session_id,
|
||||
preauth_req->messageType = eWNI_SME_FT_PRE_AUTH_REQ;
|
||||
|
||||
preauth_req->preAuthchannelNum = bss_desc->channelId;
|
||||
preauth_req->dot11mode =
|
||||
csr_get_dot11_mode(hal, session_id, bss_desc);
|
||||
if (!preauth_req->dot11mode) {
|
||||
sme_err("preauth_req->dot11mode is zero");
|
||||
qdf_mem_free(preauth_req);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
qdf_mem_copy((void *)&preauth_req->currbssId,
|
||||
(void *)csr_session->connectedProfile.bssid.bytes,
|
||||
|
Reference in New Issue
Block a user