diff --git a/components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_public_struct.h b/components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_public_struct.h index c477a0397e..1be489aae7 100644 --- a/components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_public_struct.h +++ b/components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_public_struct.h @@ -112,6 +112,9 @@ #define MAX_BSSID_AVOID_LIST 16 #define MAX_BSSID_FAVORED 16 +#define MAX_FTIE_SIZE 384 +#define ESE_MAX_TSPEC_IES 4 + #ifdef WLAN_FEATURE_ROAM_OFFLOAD #define ROAM_SCAN_PSK_SIZE 48 #define ROAM_R0KH_ID_MAX_LEN 48 diff --git a/core/mac/inc/sir_api.h b/core/mac/inc/sir_api.h index cac7d6a1b5..f7c244f502 100644 --- a/core/mac/inc/sir_api.h +++ b/core/mac/inc/sir_api.h @@ -821,10 +821,9 @@ typedef struct sTspecInfo { struct mac_tspec_ie tspec; } tTspecInfo; -#define SIR_ESE_MAX_TSPEC_IES 4 typedef struct sESETspecTspecInfo { uint8_t numTspecs; - tTspecInfo tspec[SIR_ESE_MAX_TSPEC_IES]; + tTspecInfo tspec[ESE_MAX_TSPEC_IES]; } tESETspecInfo; struct tsm_ie { @@ -957,6 +956,7 @@ struct join_req { */ }; +#ifndef FEATURE_CM_ENABLE /* / Definition for response message to previously issued join request */ /* / MAC ---> */ struct join_rsp { @@ -964,13 +964,11 @@ struct join_rsp { uint16_t length; uint8_t vdev_id; /* Session ID */ tSirResultCodes status_code; - tAniAuthType authType; uint32_t vht_channel_width; /* It holds reasonCode when join fails due to deauth/disassoc frame. * Otherwise it holds status code. */ uint16_t protStatusCode; - uint16_t aid; uint32_t beaconLength; uint32_t assocReqLength; uint32_t assocRspLength; @@ -1008,6 +1006,7 @@ struct join_rsp { #endif uint8_t frames[1]; }; +#endif struct oem_channel_info { uint32_t mhz; @@ -2494,8 +2493,6 @@ typedef struct { #endif struct roam_offload_synch_ind { - uint16_t messageType; /*eWNI_SME_ROAM_OFFLOAD_SYNCH_IND */ - uint16_t length; uint16_t beaconProbeRespOffset; uint16_t beaconProbeRespLength; uint16_t reassocRespOffset; @@ -2522,7 +2519,13 @@ struct roam_offload_synch_ind { uint16_t next_erp_seq_num; uint8_t replay_ctr[REPLAY_CTR_LEN]; void *add_bss_params; - struct join_rsp *join_rsp; + enum phy_ch_width chan_width; + uint32_t max_rate_flags; + uint32_t ric_data_len; +#ifdef FEATURE_WLAN_ESE + uint32_t tspec_len; +#endif + uint8_t *ric_tspec_data; uint16_t aid; struct sir_hw_mode_trans_ind hw_mode_trans_ind; uint8_t nss; diff --git a/core/mac/src/include/parser_api.h b/core/mac/src/include/parser_api.h index 99d80b7662..c8afbafefe 100644 --- a/core/mac/src/include/parser_api.h +++ b/core/mac/src/include/parser_api.h @@ -436,7 +436,7 @@ typedef struct sSirAssocRsp { #ifdef FEATURE_WLAN_ESE uint8_t num_tspecs; - tDot11fIEWMMTSPEC TSPECInfo[SIR_ESE_MAX_TSPEC_IES]; + tDot11fIEWMMTSPEC TSPECInfo[ESE_MAX_TSPEC_IES]; struct ese_tsm_ie tsmIE; #endif diff --git a/core/mac/src/pe/include/lim_api.h b/core/mac/src/pe/include/lim_api.h index 2499b0be5f..80c9a477f9 100644 --- a/core/mac/src/pe/include/lim_api.h +++ b/core/mac/src/pe/include/lim_api.h @@ -251,25 +251,6 @@ void lim_trigger_sta_deletion(struct mac_context *mac, tpDphHashNode sta, void lim_send_sme_tdls_del_sta_ind(struct mac_context *mac, tpDphHashNode sta, struct pe_session *pe_session, uint16_t reasonCode); - -/** - * lim_set_tdls_flags() - update tdls flags based on newer STA connection - * information - * @roam_sync_ind_ptr: pointer to roam offload structure - * @ft_session_ptr: pointer to PE session - * - * Set TDLS flags as per new STA connection capabilities. - * - * Return: None - */ -void lim_set_tdls_flags(struct roam_offload_synch_ind *roam_sync_ind_ptr, - struct pe_session *ft_session_ptr); -#else -static inline -void lim_set_tdls_flags(struct roam_offload_synch_ind *roam_sync_ind_ptr, - struct pe_session *ft_session_ptr) -{ -} #endif /* / Function that checks for change in AP's capabilties on STA */ diff --git a/core/mac/src/pe/include/lim_ft_defs.h b/core/mac/src/pe/include/lim_ft_defs.h index 22d61c598b..023c273f2b 100644 --- a/core/mac/src/pe/include/lim_ft_defs.h +++ b/core/mac/src/pe/include/lim_ft_defs.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013-2020 The Linux Foundation. All rights reserved. + * Copyright (c) 2013-2021 The Linux Foundation. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the @@ -31,8 +31,6 @@ /*-------------------------------------------------------------------------- Preprocessor definitions and constants ------------------------------------------------------------------------*/ -#define MAX_FTIE_SIZE 384 /* Max size limited to 384, on acct. of IW custom events */ - /* Time to dwell on preauth channel during roaming, in milliseconds */ #define LIM_FT_PREAUTH_SCAN_TIME 50 diff --git a/core/mac/src/pe/lim/lim_api.c b/core/mac/src/pe/lim/lim_api.c index b9e6b5af43..d1ddbd7359 100644 --- a/core/mac/src/pe/lim/lim_api.c +++ b/core/mac/src/pe/lim/lim_api.c @@ -2474,7 +2474,7 @@ pe_roam_synch_callback(struct mac_context *mac_ctx, uint16_t aid; struct bss_params *add_bss_params; QDF_STATUS status = QDF_STATUS_E_FAILURE; - uint16_t join_rsp_len; + uint16_t ric_tspec_len; if (!roam_sync_ind_ptr) { pe_err("LFR3:roam_sync_ind_ptr is NULL"); @@ -2624,54 +2624,46 @@ pe_roam_synch_callback(struct mac_context *mac_ctx, ft_session_ptr->limMlmState = eLIM_MLM_LINK_ESTABLISHED_STATE; ft_session_ptr->limPrevMlmState = ft_session_ptr->limMlmState; lim_init_tdls_data(mac_ctx, ft_session_ptr); - join_rsp_len = ft_session_ptr->RICDataLen + - sizeof(struct join_rsp) - sizeof(uint8_t); - + ric_tspec_len = ft_session_ptr->RICDataLen; + pe_debug("LFR3: Session RicLength: %d", ft_session_ptr->RICDataLen); #ifdef FEATURE_WLAN_ESE - join_rsp_len += ft_session_ptr->tspecLen; + ric_tspec_len += ft_session_ptr->tspecLen; pe_debug("LFR3: tspecLen: %d", ft_session_ptr->tspecLen); #endif + if (ric_tspec_len) { + roam_sync_ind_ptr->ric_tspec_data = + qdf_mem_malloc(ric_tspec_len); + if (!roam_sync_ind_ptr->ric_tspec_data) { + ft_session_ptr->bRoamSynchInProgress = false; + return QDF_STATUS_E_NOMEM; + } - roam_sync_ind_ptr->join_rsp = qdf_mem_malloc(join_rsp_len); - if (!roam_sync_ind_ptr->join_rsp) { - ft_session_ptr->bRoamSynchInProgress = false; - return QDF_STATUS_E_NOMEM; - } - - pe_debug("LFR3: Session RicLength: %d", ft_session_ptr->RICDataLen); - if (ft_session_ptr->ricData) { - roam_sync_ind_ptr->join_rsp->parsedRicRspLen = + if (ft_session_ptr->ricData) { + roam_sync_ind_ptr->ric_data_len = ft_session_ptr->RICDataLen; - qdf_mem_copy(roam_sync_ind_ptr->join_rsp->frames, - ft_session_ptr->ricData, - roam_sync_ind_ptr->join_rsp->parsedRicRspLen); - qdf_mem_free(ft_session_ptr->ricData); - ft_session_ptr->ricData = NULL; - ft_session_ptr->RICDataLen = 0; - } - + qdf_mem_copy(roam_sync_ind_ptr->ric_tspec_data, + ft_session_ptr->ricData, + roam_sync_ind_ptr->ric_data_len); + qdf_mem_free(ft_session_ptr->ricData); + ft_session_ptr->ricData = NULL; + ft_session_ptr->RICDataLen = 0; + } #ifdef FEATURE_WLAN_ESE - if (ft_session_ptr->tspecIes) { - roam_sync_ind_ptr->join_rsp->tspecIeLen = - ft_session_ptr->tspecLen; - qdf_mem_copy(roam_sync_ind_ptr->join_rsp->frames + - roam_sync_ind_ptr->join_rsp->parsedRicRspLen, - ft_session_ptr->tspecIes, - roam_sync_ind_ptr->join_rsp->tspecIeLen); - qdf_mem_free(ft_session_ptr->tspecIes); - ft_session_ptr->tspecIes = NULL; - ft_session_ptr->tspecLen = 0; - } + if (ft_session_ptr->tspecIes) { + roam_sync_ind_ptr->tspec_len = ft_session_ptr->tspecLen; + qdf_mem_copy(roam_sync_ind_ptr->ric_tspec_data + + roam_sync_ind_ptr->ric_data_len, + ft_session_ptr->tspecIes, + roam_sync_ind_ptr->tspec_len); + qdf_mem_free(ft_session_ptr->tspecIes); + ft_session_ptr->tspecIes = NULL; + ft_session_ptr->tspecLen = 0; + } #endif - - roam_sync_ind_ptr->join_rsp->vht_channel_width = - ft_session_ptr->ch_width; - roam_sync_ind_ptr->join_rsp->timingMeasCap = curr_sta_ds->timingMeasCap; - roam_sync_ind_ptr->join_rsp->nss = curr_sta_ds->nss; - roam_sync_ind_ptr->join_rsp->max_rate_flags = + } + roam_sync_ind_ptr->chan_width = ft_session_ptr->ch_width; + roam_sync_ind_ptr->max_rate_flags = lim_get_max_rate_flags(mac_ctx, curr_sta_ds); - lim_set_tdls_flags(roam_sync_ind_ptr, ft_session_ptr); - roam_sync_ind_ptr->join_rsp->aid = ft_session_ptr->limAID; ft_session_ptr->limSmeState = eLIM_SME_LINK_EST_STATE; ft_session_ptr->limPrevSmeState = ft_session_ptr->limSmeState; ft_session_ptr->bRoamSynchInProgress = false; diff --git a/core/mac/src/pe/lim/lim_process_tdls.c b/core/mac/src/pe/lim/lim_process_tdls.c index 29a8557658..654c6965fa 100644 --- a/core/mac/src/pe/lim/lim_process_tdls.c +++ b/core/mac/src/pe/lim/lim_process_tdls.c @@ -1381,15 +1381,6 @@ wma_tx_frame_with_tx_complete_send(struct mac_context *mac, void *pPacket, } #endif -void lim_set_tdls_flags(struct roam_offload_synch_ind *roam_sync_ind_ptr, - struct pe_session *ft_session_ptr) -{ - roam_sync_ind_ptr->join_rsp->tdls_prohibited = - mlme_get_tdls_prohibited(ft_session_ptr->vdev); - roam_sync_ind_ptr->join_rsp->tdls_chan_swit_prohibited = - mlme_get_tdls_chan_switch_prohibited(ft_session_ptr->vdev); -} - /* * TDLS setup Request frame on AP link */ diff --git a/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c b/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c index a7b9f15f5b..d9a0174edb 100644 --- a/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c +++ b/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c @@ -655,7 +655,6 @@ static void lim_handle_join_rsp_status(struct mac_context *mac_ctx, sme_join_rsp->tspecIeLen); } #endif - sme_join_rsp->aid = session_entry->limAID; sme_join_rsp->vht_channel_width = session_entry->ch_width; diff --git a/core/sme/inc/csr_api.h b/core/sme/inc/csr_api.h index 03fd46d805..1df994a106 100644 --- a/core/sme/inc/csr_api.h +++ b/core/sme/inc/csr_api.h @@ -1180,16 +1180,19 @@ typedef void (*csr_readyToSuspendCallback)(void *pContext, bool suspended); typedef void (*csr_readyToExtWoWCallback)(void *pContext, bool status); #endif typedef void (*csr_link_status_callback)(uint8_t status, void *context); + +#ifndef FEATURE_CM_ENABLE #ifdef FEATURE_WLAN_TDLS void csr_roam_fill_tdls_info(struct mac_context *mac_ctx, struct csr_roam_info *roam_info, - struct join_rsp *join_rsp); + struct wlan_objmgr_vdev *vdev); #else static inline void csr_roam_fill_tdls_info(struct mac_context *mac_ctx, struct csr_roam_info *roam_info, - struct join_rsp *join_rsp) + struct wlan_objmgr_vdev *vdev) {} #endif +#endif typedef void (*sme_get_raom_scan_ch_callback)( hdd_handle_t hdd_handle, diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index d5df6ac9b7..8b28df0c3e 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -16546,6 +16546,8 @@ fail: msg_return.bodyval = 0; sys_process_mmh_msg(mac, &msg_return); } + +#ifndef FEATURE_CM_ENABLE #ifdef FEATURE_WLAN_TDLS /** * csr_roam_fill_tdls_info() - Fill TDLS information @@ -16556,11 +16558,11 @@ fail: */ void csr_roam_fill_tdls_info(struct mac_context *mac_ctx, struct csr_roam_info *roam_info, - struct join_rsp *join_rsp) + struct wlan_objmgr_vdev *vdev) { - roam_info->tdls_prohibited = join_rsp->tdls_prohibited; + roam_info->tdls_prohibited = mlme_get_tdls_prohibited(vdev); roam_info->tdls_chan_swit_prohibited = - join_rsp->tdls_chan_swit_prohibited; + mlme_get_tdls_chan_switch_prohibited(vdev); sme_debug( "tdls:prohibit: %d, chan_swit_prohibit: %d", roam_info->tdls_prohibited, @@ -16568,7 +16570,6 @@ void csr_roam_fill_tdls_info(struct mac_context *mac_ctx, } #endif -#ifndef FEATURE_CM_ENABLE #if defined(WLAN_FEATURE_FILS_SK) && defined(WLAN_FEATURE_ROAM_OFFLOAD) static void csr_copy_fils_join_rsp_roam_info(struct csr_roam_info *roam_info, struct roam_offload_synch_ind *roam_synch_data) @@ -16774,6 +16775,7 @@ csr_process_roam_sync_callback(struct mac_context *mac_ctx, uint8_t mdie_present; struct cm_roam_values_copy config; struct wlan_mlme_psoc_ext_obj *mlme_obj; + struct mlme_legacy_priv *mlme_priv; mlme_obj = mlme_get_psoc_ext_obj(mac_ctx->psoc); if (!mlme_obj) { @@ -16788,6 +16790,11 @@ csr_process_roam_sync_callback(struct mac_context *mac_ctx, sme_err("vdev is NULL, aborting roam invoke"); return QDF_STATUS_E_NULL_VALUE; } + mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev); + if (!mlme_priv) { + status = QDF_STATUS_E_NULL_VALUE; + goto end; + } vdev_roam_params = mlme_get_roam_invoke_params(vdev); @@ -17243,43 +17250,41 @@ csr_process_roam_sync_callback(struct mac_context *mac_ctx, sme_debug("LFR3:Clear Connected info"); csr_roam_free_connected_info(mac_ctx, &session->connectedInfo); - len = roam_synch_data->join_rsp->parsedRicRspLen; + len = roam_synch_data->ric_data_len; #ifdef FEATURE_WLAN_ESE - len += roam_synch_data->join_rsp->tspecIeLen; - QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_DEBUG, - FL("LFR3: tspecLen %d"), - roam_synch_data->join_rsp->tspecIeLen); + len += roam_synch_data->tspec_len; + sme_debug("LFR3: tspecLen %d", roam_synch_data->tspec_len); #endif - sme_debug("LFR3: RIC length - %d", - roam_synch_data->join_rsp->parsedRicRspLen); + sme_debug("LFR3: RIC length - %d", roam_synch_data->ric_data_len); if (len) { session->connectedInfo.pbFrames = qdf_mem_malloc(len); if (session->connectedInfo.pbFrames) { qdf_mem_copy(session->connectedInfo.pbFrames, - roam_synch_data->join_rsp->frames, len); + roam_synch_data->ric_tspec_data, + len); session->connectedInfo.nRICRspLength = - roam_synch_data->join_rsp->parsedRicRspLen; + roam_synch_data->ric_data_len; #ifdef FEATURE_WLAN_ESE session->connectedInfo.nTspecIeLength = - roam_synch_data->join_rsp->tspecIeLen; + roam_synch_data->tspec_len; #endif } } conn_profile->vht_channel_width = - roam_synch_data->join_rsp->vht_channel_width; + roam_synch_data->chan_width; add_bss_params = (struct bss_params *)roam_synch_data->add_bss_params; - roam_info->timingMeasCap = - roam_synch_data->join_rsp->timingMeasCap; - roam_info->chan_info.nss = roam_synch_data->join_rsp->nss; - roam_info->chan_info.rate_flags = - roam_synch_data->join_rsp->max_rate_flags; - roam_info->chan_info.ch_width = - roam_synch_data->join_rsp->vht_channel_width; - csr_roam_fill_tdls_info(mac_ctx, roam_info, roam_synch_data->join_rsp); + roam_info->timingMeasCap = mlme_priv->connect_info.timing_meas_cap; + roam_info->chan_info.nss = roam_synch_data->nss; + roam_info->chan_info.rate_flags = roam_synch_data->max_rate_flags; + roam_info->chan_info.ch_width = roam_synch_data->chan_width; + /* This is temp ifdef will be removed in near future */ +#ifndef FEATURE_CM_ENABLE + csr_roam_fill_tdls_info(mac_ctx, roam_info, vdev); +#endif assoc_info.bss_desc = bss_desc; roam_info->status_code = eSIR_SME_SUCCESS; roam_info->reasonCode = eSIR_SME_SUCCESS; diff --git a/core/wma/src/wma_scan_roam.c b/core/wma/src/wma_scan_roam.c index 515a33c464..8b49ad0ea7 100644 --- a/core/wma/src/wma_scan_roam.c +++ b/core/wma/src/wma_scan_roam.c @@ -1186,9 +1186,8 @@ int wma_mlme_roam_synch_event_handler_cb(void *handle, uint8_t *event, /* update freq and channel width */ wma->interfaces[synch_event->vdev_id].ch_freq = roam_synch_ind_ptr->chan_freq; - if (roam_synch_ind_ptr->join_rsp) - wma->interfaces[synch_event->vdev_id].chan_width = - roam_synch_ind_ptr->join_rsp->vht_channel_width; + wma->interfaces[synch_event->vdev_id].chan_width = + roam_synch_ind_ptr->chan_width; /* * update phy_mode in wma to avoid mismatch in phymode between host and * firmware. The phymode stored in peer->peer_mlme.phymode is @@ -1221,8 +1220,8 @@ cleanup_label: if (synch_event) wma_post_roam_sync_failure(wma, synch_event->vdev_id); } - if (roam_synch_ind_ptr && roam_synch_ind_ptr->join_rsp) - qdf_mem_free(roam_synch_ind_ptr->join_rsp); + if (roam_synch_ind_ptr && roam_synch_ind_ptr->ric_tspec_data) + qdf_mem_free(roam_synch_ind_ptr->ric_tspec_data); if (roam_synch_ind_ptr) qdf_mem_free(roam_synch_ind_ptr); if (bss_desc_ptr)