mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-11-09 20:31:13 -05:00
qcacld-3.0: Initialize NSS to vdev_nss in roam_sync propagation
In roam sync propagation, initialise pe_session NSS to vdev_nss, which will then later be updated as per ASSOC response frame received from firmware. This allows roaming from 1x1 to 2x2. Change-Id: I5260425c7bfdfaa09bac908ea7d8a89d5caa3f69 CRs-Fixed: 2058560
This commit is contained in:
parent
a8afd840f1
commit
746a90b284
4 changed files with 24 additions and 5 deletions
|
|
@ -3959,6 +3959,7 @@ typedef struct sSirSmeRoamOffloadSynchInd {
|
|||
tpSirSmeJoinRsp join_rsp;
|
||||
uint16_t aid;
|
||||
struct sir_hw_mode_trans_ind hw_mode_trans_ind;
|
||||
uint8_t nss;
|
||||
} roam_offload_synch_ind;
|
||||
|
||||
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
|
||||
|
|
|
|||
|
|
@ -2031,7 +2031,6 @@ QDF_STATUS pe_roam_synch_callback(tpAniSirGlobal mac_ctx,
|
|||
tpDphHashNode curr_sta_ds;
|
||||
uint16_t aid;
|
||||
tpAddBssParams add_bss_params;
|
||||
uint8_t local_nss;
|
||||
QDF_STATUS status = QDF_STATUS_E_FAILURE;
|
||||
uint16_t join_rsp_len;
|
||||
|
||||
|
|
@ -2088,6 +2087,14 @@ QDF_STATUS pe_roam_synch_callback(tpAniSirGlobal mac_ctx,
|
|||
ft_session_ptr->csaOffloadEnable = session_ptr->csaOffloadEnable;
|
||||
|
||||
lim_fill_ft_session(mac_ctx, bss_desc, ft_session_ptr, session_ptr);
|
||||
|
||||
if (IS_5G_CH(ft_session_ptr->currentOperChannel))
|
||||
ft_session_ptr->vdev_nss = mac_ctx->vdev_type_nss_5g.sta;
|
||||
else
|
||||
ft_session_ptr->vdev_nss = mac_ctx->vdev_type_nss_2g.sta;
|
||||
|
||||
ft_session_ptr->nss = ft_session_ptr->vdev_nss;
|
||||
|
||||
lim_ft_prepare_add_bss_req(mac_ctx, false, ft_session_ptr, bss_desc);
|
||||
roam_sync_ind_ptr->add_bss_params =
|
||||
(tpAddBssParams) ft_session_ptr->ftPEContext.pAddBssReq;
|
||||
|
|
@ -2100,14 +2107,12 @@ QDF_STATUS pe_roam_synch_callback(tpAniSirGlobal mac_ctx,
|
|||
ft_session_ptr->bRoamSynchInProgress = false;
|
||||
return status;
|
||||
}
|
||||
local_nss = curr_sta_ds->nss;
|
||||
session_ptr->limSmeState = eLIM_SME_IDLE_STATE;
|
||||
lim_cleanup_rx_path(mac_ctx, curr_sta_ds, session_ptr);
|
||||
lim_delete_dph_hash_entry(mac_ctx, curr_sta_ds->staAddr,
|
||||
aid, session_ptr);
|
||||
pe_delete_session(mac_ctx, session_ptr);
|
||||
session_ptr = NULL;
|
||||
ft_session_ptr->nss = local_nss;
|
||||
curr_sta_ds = dph_add_hash_entry(mac_ctx,
|
||||
roam_sync_ind_ptr->bssid.bytes, DPH_STA_HASH_INDEX_PEER,
|
||||
&ft_session_ptr->dph.dphHashTable);
|
||||
|
|
@ -2152,7 +2157,8 @@ QDF_STATUS pe_roam_synch_callback(tpAniSirGlobal mac_ctx,
|
|||
roam_sync_ind_ptr->aid = ft_session_ptr->limAID;
|
||||
curr_sta_ds->mlmStaContext.mlmState =
|
||||
eLIM_MLM_LINK_ESTABLISHED_STATE;
|
||||
curr_sta_ds->nss = local_nss;
|
||||
curr_sta_ds->nss = ft_session_ptr->nss;
|
||||
roam_sync_ind_ptr->nss = ft_session_ptr->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 +
|
||||
|
|
|
|||
|
|
@ -1762,9 +1762,19 @@ lim_populate_peer_rate_set(tpAniSirGlobal pMac,
|
|||
}
|
||||
lim_populate_vht_mcs_set(pMac, pRates, pVHTCaps,
|
||||
psessionEntry, psessionEntry->nss);
|
||||
|
||||
lim_populate_he_mcs_set(pMac, pRates, he_caps,
|
||||
psessionEntry, psessionEntry->nss);
|
||||
|
||||
if (IS_DOT11_MODE_HE(psessionEntry->dot11mode)) {
|
||||
psessionEntry->nss = he_caps->nss_supported;
|
||||
} else if (IS_DOT11_MODE_VHT(psessionEntry->dot11mode)) {
|
||||
if ((pRates->vhtRxMCSMap & MCSMAPMASK2x2) == MCSMAPMASK2x2)
|
||||
psessionEntry->nss = NSS_1x1_MODE;
|
||||
} else if (pRates->supportedMCSSet[1] == 0) {
|
||||
psessionEntry->nss = NSS_1x1_MODE;
|
||||
}
|
||||
|
||||
return eSIR_SUCCESS;
|
||||
} /*** lim_populate_peer_rate_set() ***/
|
||||
|
||||
|
|
|
|||
|
|
@ -2243,6 +2243,8 @@ static void wma_roam_update_vdev(tp_wma_handle wma,
|
|||
tAddStaParams *add_sta_params;
|
||||
uint8_t vdev_id;
|
||||
|
||||
vdev_id = roam_synch_ind_ptr->roamedVdevId;
|
||||
wma->interfaces[vdev_id].nss = roam_synch_ind_ptr->nss;
|
||||
del_bss_params = qdf_mem_malloc(sizeof(*del_bss_params));
|
||||
del_sta_params = qdf_mem_malloc(sizeof(*del_sta_params));
|
||||
set_link_params = qdf_mem_malloc(sizeof(*set_link_params));
|
||||
|
|
@ -2252,7 +2254,6 @@ static void wma_roam_update_vdev(tp_wma_handle wma,
|
|||
WMA_LOGE("%s: failed to allocate memory", __func__);
|
||||
return;
|
||||
}
|
||||
vdev_id = roam_synch_ind_ptr->roamedVdevId;
|
||||
qdf_mem_zero(del_bss_params, sizeof(*del_bss_params));
|
||||
qdf_mem_zero(del_sta_params, sizeof(*del_sta_params));
|
||||
qdf_mem_zero(set_link_params, sizeof(*set_link_params));
|
||||
|
|
@ -2385,6 +2386,7 @@ int wma_roam_synch_event_handler(void *handle, uint8_t *event,
|
|||
status = -EBUSY;
|
||||
goto cleanup_label;
|
||||
}
|
||||
|
||||
wma_roam_update_vdev(wma, roam_synch_ind_ptr);
|
||||
wma->csr_roam_synch_cb((tpAniSirGlobal)wma->mac_context,
|
||||
roam_synch_ind_ptr, bss_desc_ptr, SIR_ROAM_SYNCH_PROPAGATION);
|
||||
|
|
|
|||
Loading…
Reference in a new issue