diff --git a/core/sme/inc/csr_api.h b/core/sme/inc/csr_api.h index abddacfbf0cf..1cbacb957725 100644 --- a/core/sme/inc/csr_api.h +++ b/core/sme/inc/csr_api.h @@ -1181,6 +1181,7 @@ struct csr_roam_info { struct sir_sae_info *sae_info; #endif struct assoc_ind *owe_pending_assoc_ind; + uint8_t roam_reason; }; typedef struct sSirSmeAssocIndToUpperLayerCnf { diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index 3654ae826afa..6eedad5ebf49 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -106,6 +106,11 @@ */ #define NEIGHBOR_REPORT_PARAM_INVALID (0xFFFFFFFFU) +/* + * To get 4 LSB of roam reason of roam_synch_data + * received from firmware + */ +#define ROAM_REASON_MASK 0x0F /** * csr_get_ielen_from_bss_description() - to get IE length * from tSirBssDescription structure @@ -21521,9 +21526,14 @@ static QDF_STATUS csr_process_roam_sync_callback(struct mac_context *mac_ctx, QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_DEBUG, FL("LFR3: Copy KCK, KEK(len %d) and Replay Ctr"), roam_info->kek_len); + /* bit-4 and bit-5 indicate the subnet status */ roam_info->subnet_change_status = CSR_GET_SUBNET_STATUS(roam_synch_data->roamReason); + /* fetch 4 LSB to get roam reason */ + roam_info->roam_reason = roam_synch_data->roamReason & + ROAM_REASON_MASK; + sme_debug("Update roam reason : %d", roam_info->roam_reason); csr_copy_fils_join_rsp_roam_info(roam_info, roam_synch_data); csr_roam_call_callback(mac_ctx, session_id, roam_info, 0,