From bbbbe237f9fa0ac35a93a6b863d2d64e71e51229 Mon Sep 17 00:00:00 2001 From: Varun Reddy Yeturu Date: Mon, 29 Feb 2016 14:01:57 -0800 Subject: qcacld-3.0: Enable compile time enable/disable for roaming Enable compile time featurization support for both LFR2.0 and LFR3.0 using WLAN_FEATURE_HOST_ROAM and WLAN_FEATURE_ROAM_OFFLOAD respectively CRs-Fixed: 978905 Change-Id: Ib5976cd0cd5a6e117a1334bfc73a043e36e25f77 --- Kbuild | 26 ++- Kconfig | 4 + core/hdd/inc/wlan_hdd_main.h | 13 ++ core/hdd/src/wlan_hdd_cfg80211.c | 8 +- core/hdd/src/wlan_hdd_ioctl.c | 8 +- core/mac/inc/sir_api.h | 5 +- core/mac/src/pe/include/lim_api.h | 7 + core/mac/src/pe/include/lim_ft.h | 90 ++++++-- core/mac/src/pe/lim/lim_assoc_utils.c | 2 +- core/mac/src/pe/lim/lim_assoc_utils.h | 64 ++++-- core/mac/src/pe/lim/lim_ft.c | 25 ++- core/mac/src/pe/lim/lim_process_assoc_rsp_frame.c | 51 ++--- core/mac/src/pe/lim/lim_process_tdls.c | 2 +- core/mac/src/pe/lim/lim_types.h | 15 +- core/mac/src/pe/lim/lim_utils.h | 12 ++ core/sme/inc/csr_api.h | 11 +- core/sme/inc/csr_internal.h | 20 +- core/sme/inc/csr_neighbor_roam.h | 105 ++++++++-- core/sme/src/csr/csr_api_roam.c | 243 +++++++++------------- core/sme/src/csr/csr_inside_api.h | 17 +- core/sme/src/csr/csr_neighbor_roam.c | 2 +- core/wma/inc/wma.h | 2 + core/wma/inc/wma_internal.h | 2 - core/wma/inc/wma_types.h | 13 ++ core/wma/src/wma_mgmt.c | 3 + core/wma/src/wma_scan_roam.c | 90 ++++---- 26 files changed, 523 insertions(+), 317 deletions(-) diff --git a/Kbuild b/Kbuild index f14e5a9c2952..33169715e278 100755 --- a/Kbuild +++ b/Kbuild @@ -41,6 +41,8 @@ ifeq ($(KERNEL_BUILD), 0) CONFIG_MOBILE_ROUTER := y endif + #Flag to enable Legacy Fast Roaming2(LFR2) + CONFIG_QCACLD_WLAN_LFR2 := y #Flag to enable Legacy Fast Roaming3(LFR3) CONFIG_QCACLD_WLAN_LFR3 := y @@ -401,10 +403,8 @@ MAC_LIM_OBJS := $(MAC_SRC_DIR)/pe/lim/lim_aid_mgmt.o \ $(MAC_SRC_DIR)/pe/lim/lim_admit_control.o \ $(MAC_SRC_DIR)/pe/lim/lim_api.o \ $(MAC_SRC_DIR)/pe/lim/lim_assoc_utils.o \ - $(MAC_SRC_DIR)/pe/lim/lim_reassoc_utils.o \ $(MAC_SRC_DIR)/pe/lim/lim_debug.o \ $(MAC_SRC_DIR)/pe/lim/lim_ft.o \ - $(MAC_SRC_DIR)/pe/lim/lim_ft_preauth.o \ $(MAC_SRC_DIR)/pe/lim/lim_ibss_peer_mgmt.o \ $(MAC_SRC_DIR)/pe/lim/lim_link_monitoring_algo.o \ $(MAC_SRC_DIR)/pe/lim/lim_p2p.o \ @@ -417,7 +417,6 @@ MAC_LIM_OBJS := $(MAC_SRC_DIR)/pe/lim/lim_aid_mgmt.o \ $(MAC_SRC_DIR)/pe/lim/lim_process_deauth_frame.o \ $(MAC_SRC_DIR)/pe/lim/lim_process_disassoc_frame.o \ $(MAC_SRC_DIR)/pe/lim/lim_process_message_queue.o \ - $(MAC_SRC_DIR)/pe/lim/lim_process_mlm_host_roam.o \ $(MAC_SRC_DIR)/pe/lim/lim_process_mlm_req_messages.o \ $(MAC_SRC_DIR)/pe/lim/lim_process_mlm_rsp_messages.o \ $(MAC_SRC_DIR)/pe/lim/lim_process_probe_req_frame.o \ @@ -427,7 +426,6 @@ MAC_LIM_OBJS := $(MAC_SRC_DIR)/pe/lim/lim_aid_mgmt.o \ $(MAC_SRC_DIR)/pe/lim/lim_scan_result_utils.o \ $(MAC_SRC_DIR)/pe/lim/lim_security_utils.o \ $(MAC_SRC_DIR)/pe/lim/lim_send_management_frames.o \ - $(MAC_SRC_DIR)/pe/lim/lim_send_frames_host_roam.o \ $(MAC_SRC_DIR)/pe/lim/lim_send_messages.o \ $(MAC_SRC_DIR)/pe/lim/lim_send_sme_rsp_messages.o \ $(MAC_SRC_DIR)/pe/lim/lim_ser_des_utils.o \ @@ -436,7 +434,6 @@ MAC_LIM_OBJS := $(MAC_SRC_DIR)/pe/lim/lim_aid_mgmt.o \ $(MAC_SRC_DIR)/pe/lim/lim_sme_req_utils.o \ $(MAC_SRC_DIR)/pe/lim/lim_sta_hash_api.o \ $(MAC_SRC_DIR)/pe/lim/lim_timer_utils.o \ - $(MAC_SRC_DIR)/pe/lim/lim_roam_timer_utils.o \ $(MAC_SRC_DIR)/pe/lim/lim_trace.o \ $(MAC_SRC_DIR)/pe/lim/lim_utils.o @@ -444,6 +441,14 @@ ifeq ($(CONFIG_QCOM_TDLS),y) MAC_LIM_OBJS += $(MAC_SRC_DIR)/pe/lim/lim_process_tdls.o endif +ifeq ($(CONFIG_QCACLD_WLAN_LFR2),y) + MAC_LIM_OBJS += $(MAC_SRC_DIR)/pe/lim/lim_process_mlm_host_roam.o \ + $(MAC_SRC_DIR)/pe/lim/lim_send_frames_host_roam.o \ + $(MAC_SRC_DIR)/pe/lim/lim_roam_timer_utils.o \ + $(MAC_SRC_DIR)/pe/lim/lim_ft_preauth.o \ + $(MAC_SRC_DIR)/pe/lim/lim_reassoc_utils.o +endif + MAC_SCH_OBJS := $(MAC_SRC_DIR)/pe/sch/sch_api.o \ $(MAC_SRC_DIR)/pe/sch/sch_beacon_gen.o \ $(MAC_SRC_DIR)/pe/sch/sch_beacon_process.o \ @@ -500,13 +505,18 @@ SME_INC := -I$(WLAN_ROOT)/$(SME_INC_DIR) \ -I$(WLAN_ROOT)/$(SME_SRC_DIR)/csr SME_CSR_OBJS := $(SME_SRC_DIR)/csr/csr_api_roam.o \ - $(SME_SRC_DIR)/csr/csr_roam_preauth.o \ $(SME_SRC_DIR)/csr/csr_api_scan.o \ $(SME_SRC_DIR)/csr/csr_cmd_process.o \ $(SME_SRC_DIR)/csr/csr_link_list.o \ $(SME_SRC_DIR)/csr/csr_neighbor_roam.o \ $(SME_SRC_DIR)/csr/csr_util.o \ + + +ifeq ($(CONFIG_QCACLD_WLAN_LFR2),y) +SME_CSR_OBJS += $(SME_SRC_DIR)/csr/csr_roam_preauth.o \ $(SME_SRC_DIR)/csr/csr_host_scan_roam.o +endif + ifeq ($(CONFIG_QCOM_TDLS),y) SME_CSR_OBJS += $(SME_SRC_DIR)/csr/csr_tdls_process.o @@ -1019,6 +1029,10 @@ ifeq ($(CONFIG_QCACLD_WLAN_LFR3),y) CDEFINES += -DWLAN_FEATURE_ROAM_OFFLOAD endif +ifeq ($(CONFIG_QCACLD_WLAN_LFR2),y) +CDEFINES += -DWLAN_FEATURE_HOST_ROAM +endif + ifeq ($(CONFIG_PRIMA_WLAN_OKC),y) CDEFINES += -DFEATURE_WLAN_OKC endif diff --git a/Kconfig b/Kconfig index 029683a4b317..13c92b848e28 100644 --- a/Kconfig +++ b/Kconfig @@ -115,4 +115,8 @@ config FEATURE_WLAN_MCC_TO_SCC_SWITCH bool "Enable MCC to SCC Switch Logic" default n +config QCACLD_WLAN_LFR2 + bool "Enable the WLAN Legacy Fast Roaming feature Version 2" + default n + endif # QCA_CLD_WLAN diff --git a/core/hdd/inc/wlan_hdd_main.h b/core/hdd/inc/wlan_hdd_main.h index 53a8445cf356..0e3224aed16b 100644 --- a/core/hdd/inc/wlan_hdd_main.h +++ b/core/hdd/inc/wlan_hdd_main.h @@ -1645,4 +1645,17 @@ static inline void hdd_set_tso_flags(hdd_context_t *hdd_ctx, static inline void hdd_set_tso_flags(hdd_context_t *hdd_ctx, struct net_device *wlan_dev){} #endif /* FEATURE_TSO */ + +#ifdef WLAN_FEATURE_ROAM_OFFLOAD +static inline bool is_roaming_offload_enabled(hdd_context_t *hdd_ctx) +{ + return hdd_ctx->config->isRoamOffloadEnabled; +} +#else +static inline bool is_roaming_offload_enabled(hdd_context_t *hdd_ctx) +{ + return false; +} +#endif + #endif /* end #if !defined(WLAN_HDD_MAIN_H) */ diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index 1ce82c2e06c8..cdf0e41d7fde 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/core/hdd/src/wlan_hdd_cfg80211.c @@ -2184,7 +2184,7 @@ __wlan_hdd_cfg80211_get_features(struct wiphy *wiphy, return -EPERM; } - if (hdd_ctx_ptr->config->isRoamOffloadEnabled) { + if (is_roaming_offload_enabled(hdd_ctx_ptr)) { hddLog(LOG1, FL("Key Mgmt Offload is supported")); wlan_hdd_cfg80211_set_feature(feature_flags, QCA_WLAN_VENDOR_FEATURE_KEY_MGMT_OFFLOAD); @@ -2889,6 +2889,7 @@ static int wlan_hdd_cfg80211_keymgmt_set_key(struct wiphy *wiphy, return ret; } +#endif static const struct nla_policy qca_wlan_vendor_get_wifi_info_policy[ QCA_WLAN_VENDOR_ATTR_WIFI_INFO_GET_MAX + 1] = { @@ -3086,6 +3087,7 @@ wlan_hdd_cfg80211_get_logger_supp_feature(struct wiphy *wiphy, return ret; } +#ifdef WLAN_FEATURE_ROAM_OFFLOAD /** * wlan_hdd_send_roam_auth_event() - Send the roamed and authorized event * @hdd_ctx_ptr: pointer to HDD Context. @@ -3126,7 +3128,7 @@ int wlan_hdd_send_roam_auth_event(hdd_context_t *hdd_ctx_ptr, uint8_t *bssid, return -EINVAL; } - if (!hdd_ctx_ptr->config->isRoamOffloadEnabled || + if (!is_roaming_offload_enabled(hdd_ctx_ptr) || !roam_info_ptr->roamSynchInProgress) return 0; @@ -3221,7 +3223,7 @@ nla_put_failure: kfree_skb(skb); return -EINVAL; } -#endif /* WLAN_FEATURE_ROAM_OFFLOAD */ +#endif static const struct nla_policy wlan_hdd_wifi_config_policy[QCA_WLAN_VENDOR_ATTR_CONFIG_MAX + 1] = { diff --git a/core/hdd/src/wlan_hdd_ioctl.c b/core/hdd/src/wlan_hdd_ioctl.c index eb2622b3149d..9723486740e3 100644 --- a/core/hdd/src/wlan_hdd_ioctl.c +++ b/core/hdd/src/wlan_hdd_ioctl.c @@ -4640,6 +4640,10 @@ static void hdd_wma_send_fastreassoc_cmd(int sessionId, tSirMacAddr bssid, FL("Not able to post ROAM_INVOKE_CMD message to WMA")); } } +#else +static inline void hdd_wma_send_fastreassoc_cmd(int sessionId, + tSirMacAddr bssid, int channel) +{} #endif static int drv_cmd_fast_reassoc(hdd_adapter_t *adapter, hdd_context_t *hdd_ctx, @@ -4713,13 +4717,11 @@ static int drv_cmd_fast_reassoc(hdd_adapter_t *adapter, hddLog(LOGE, FL("Invalid Channel [%d]"), channel); return -EINVAL; } -#ifdef WLAN_FEATURE_ROAM_OFFLOAD - if (hdd_ctx->config->isRoamOffloadEnabled) { + if (is_roaming_offload_enabled(hdd_ctx)) { hdd_wma_send_fastreassoc_cmd((int)adapter->sessionId, targetApBssid, (int)channel); goto exit; } -#endif /* Proceed with reassoc */ handoffInfo.channel = channel; handoffInfo.src = FASTREASSOC; diff --git a/core/mac/inc/sir_api.h b/core/mac/inc/sir_api.h index 7859837648f8..e6d13f0219da 100644 --- a/core/mac/inc/sir_api.h +++ b/core/mac/inc/sir_api.h @@ -154,12 +154,11 @@ typedef enum { #endif /* FEATURE_WLAN_EXTSCAN */ #define SIR_KRK_KEY_LEN 16 -#ifdef WLAN_FEATURE_ROAM_OFFLOAD #define SIR_BTK_KEY_LEN 32 #define SIR_KCK_KEY_LEN 16 #define SIR_KEK_KEY_LEN 16 #define SIR_REPLAY_CTR_LEN 8 - +#ifdef WLAN_FEATURE_ROAM_OFFLOAD #define SIR_UAPSD_BITOFFSET_ACVO 0 #define SIR_UAPSD_BITOFFSET_ACVI 1 #define SIR_UAPSD_BITOFFSET_ACBK 2 @@ -4006,7 +4005,6 @@ typedef struct { uint8_t event_data[]; } tSirNanEvent, *tpSirNanEvent; #endif -#ifdef WLAN_FEATURE_ROAM_OFFLOAD typedef struct sSirSmeRoamOffloadSynchInd { uint16_t messageType; /*eWNI_SME_ROAM_OFFLOAD_SYNCH_IND */ uint16_t length; @@ -4034,6 +4032,7 @@ typedef struct sSirSmeRoamOffloadSynchInd { tpSirBssDescription bss_desc_ptr; } roam_offload_synch_ind; +#ifdef WLAN_FEATURE_ROAM_OFFLOAD typedef struct sSirSmeRoamOffloadSynchCnf { uint8_t sessionId; } tSirSmeRoamOffloadSynchCnf, *tpSirSmeRoamOffloadSynchCnf; diff --git a/core/mac/src/pe/include/lim_api.h b/core/mac/src/pe/include/lim_api.h index 149a2c0d71f9..126f2aa1baa8 100644 --- a/core/mac/src/pe/include/lim_api.h +++ b/core/mac/src/pe/include/lim_api.h @@ -170,6 +170,13 @@ bool lim_is_assoc_req_for_drop(tpAniSirGlobal mac, uint8_t *rx_pkt_info); QDF_STATUS pe_roam_synch_callback(tpAniSirGlobal mac_ctx, struct sSirSmeRoamOffloadSynchInd *roam_sync_ind_ptr, tpSirBssDescription bss_desc_ptr); +#else +static inline QDF_STATUS pe_roam_synch_callback(tpAniSirGlobal mac_ctx, + struct sSirSmeRoamOffloadSynchInd *roam_sync_ind_ptr, + tpSirBssDescription bss_desc_ptr) +{ + return QDF_STATUS_E_NOSUPPORT; +} #endif #define limGetQosMode(psessionEntry, pVal) (*(pVal) = (psessionEntry)->limQosEnabled) #define limGetWmeMode(psessionEntry, pVal) (*(pVal) = (psessionEntry)->limWmeEnabled) diff --git a/core/mac/src/pe/include/lim_ft.h b/core/mac/src/pe/include/lim_ft.h index 2b40efc364bd..01307d77f5a3 100644 --- a/core/mac/src/pe/include/lim_ft.h +++ b/core/mac/src/pe/include/lim_ft.h @@ -45,45 +45,91 @@ ------------------------------------------------------------------------*/ void lim_ft_open(tpAniSirGlobal pMac, tpPESession psessionEntry); void lim_ft_cleanup(tpAniSirGlobal pMac, tpPESession psessionEntry); -void lim_ft_cleanup_pre_auth_info(tpAniSirGlobal pMac, tpPESession psessionEntry); +#ifdef WLAN_FEATURE_HOST_ROAM +void lim_ft_cleanup_pre_auth_info(tpAniSirGlobal pMac, + tpPESession psessionEntry); int lim_process_ft_pre_auth_req(tpAniSirGlobal pMac, tpSirMsgQ pMsg); +void lim_process_ft_preauth_rsp_timeout(tpAniSirGlobal pMac); +void lim_process_mlm_ft_reassoc_req(tpAniSirGlobal pMac, uint32_t *pMsgBuf, + tpPESession psessionEntry); void lim_perform_ft_pre_auth(tpAniSirGlobal pMac, QDF_STATUS status, - uint32_t *data, tpPESession psessionEntry); -void limPerformPostFTPreAuth(tpAniSirGlobal pMac, QDF_STATUS status, - uint32_t *data, tpPESession psessionEntry); -void limFTResumeLinkCb(tpAniSirGlobal pMac, QDF_STATUS status, uint32_t *data); + uint32_t *data, tpPESession psessionEntry); void lim_post_ft_pre_auth_rsp(tpAniSirGlobal pMac, tSirRetStatus status, - uint8_t *auth_rsp, uint16_t auth_rsp_length, - tpPESession psessionEntry); + uint8_t *auth_rsp, uint16_t auth_rsp_length, + tpPESession psessionEntry); void lim_handle_ft_pre_auth_rsp(tpAniSirGlobal pMac, tSirRetStatus status, - uint8_t *auth_rsp, uint16_t auth_rsp_len, - tpPESession psessionEntry); -void lim_process_mlm_reassoc_cnf(tpAniSirGlobal, uint32_t *); + uint8_t *auth_rsp, uint16_t auth_rsp_len, + tpPESession psessionEntry); +tSirRetStatus lim_ft_setup_auth_session(tpAniSirGlobal pMac, + tpPESession psessionEntry); +void lim_process_mlm_reassoc_cnf(tpAniSirGlobal mac_ctx, uint32_t *msg); void lim_process_sta_mlm_add_bss_rsp_ft(tpAniSirGlobal pMac, tpSirMsgQ limMsgQ, tpPESession psessionEntry); -void lim_process_mlm_reassoc_req(tpAniSirGlobal, uint32_t *); -void lim_process_mlm_ft_reassoc_req(tpAniSirGlobal pMac, uint32_t *pMsgBuf, - tpPESession psessionEntry); -void lim_process_ft_preauth_rsp_timeout(tpAniSirGlobal pMac); +void lim_process_mlm_reassoc_req(tpAniSirGlobal mac_ctx, uint32_t *msg); void lim_preauth_scan_event_handler(tpAniSirGlobal mac_ctx, enum lim_scan_event_type event, uint8_t session_id, uint32_t scan_id); -tSirRetStatus lim_ft_setup_auth_session(tpAniSirGlobal pMac, - tpPESession psessionEntry); +QDF_STATUS lim_send_preauth_scan_offload(tpAniSirGlobal mac_ctx, + uint8_t session_id, tSirFTPreAuthReq *ft_preauth_req); +#else +static inline void lim_ft_cleanup_pre_auth_info(tpAniSirGlobal pMac, + tpPESession psessionEntry) +{} +static inline void lim_process_ft_preauth_rsp_timeout(tpAniSirGlobal pMac) +{} +static inline void lim_process_mlm_ft_reassoc_req(tpAniSirGlobal pMac, + uint32_t *pMsgBuf, tpPESession psessionEntry) +{} +static inline void lim_handle_ft_pre_auth_rsp(tpAniSirGlobal pMac, + tSirRetStatus status, uint8_t *auth_rsp, + uint16_t auth_rsp_len, tpPESession psessionEntry) +{} +static inline void lim_process_mlm_reassoc_cnf(tpAniSirGlobal mac_ctx, + uint32_t *msg) +{} +static inline void lim_process_sta_mlm_add_bss_rsp_ft(tpAniSirGlobal pMac, + tpSirMsgQ limMsgQ, tpPESession psessionEntry) +{} +static inline void lim_process_mlm_reassoc_req(tpAniSirGlobal mac_ctx, + uint32_t *msg) +{} +static inline void lim_preauth_scan_event_handler(tpAniSirGlobal mac_ctx, + enum lim_scan_event_type event, + uint8_t session_id, uint32_t scan_id) +{} +static inline int lim_process_ft_pre_auth_req(tpAniSirGlobal pMac, + tpSirMsgQ pMsg) +{ + return 0; +} +#endif -bool lim_process_ft_update_key(tpAniSirGlobal pMac, uint32_t *pMsgBuf); -tSirRetStatus lim_process_ft_aggr_qos_req(tpAniSirGlobal pMac, uint32_t *pMsgBuf); -void lim_process_ft_aggr_qo_s_rsp(tpAniSirGlobal pMac, tpSirMsgQ limMsg); -void lim_ft_cleanup_all_ft_sessions(tpAniSirGlobal pMac); +#if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD) void lim_fill_ft_session(tpAniSirGlobal pMac, tpSirBssDescription pbssDescription, tpPESession pftSessionEntry, tpPESession psessionEntry); -tSirRetStatus lim_ft_prepare_add_bss_req(tpAniSirGlobal pMac, - uint8_t updateEntry, +void lim_ft_prepare_add_bss_req(tpAniSirGlobal pMac, uint8_t updateEntry, tpPESession pftSessionEntry, tpSirBssDescription bssDescription); QDF_STATUS lim_send_preauth_scan_offload(tpAniSirGlobal mac_ctx, uint8_t session_id, tSirFTPreAuthReq *ft_preauth_req); +#else +static inline void lim_fill_ft_session(tpAniSirGlobal pMac, + tpSirBssDescription pbssDescription, + tpPESession pftSessionEntry, + tpPESession psessionEntry) +{} +static inline void lim_ft_prepare_add_bss_req(tpAniSirGlobal pMac, + uint8_t updateEntry, tpPESession pftSessionEntry, + tpSirBssDescription bssDescription) +{} +#endif + +bool lim_process_ft_update_key(tpAniSirGlobal pMac, uint32_t *pMsgBuf); +tSirRetStatus lim_process_ft_aggr_qos_req(tpAniSirGlobal pMac, + uint32_t *pMsgBuf); +void lim_process_ft_aggr_qo_s_rsp(tpAniSirGlobal pMac, tpSirMsgQ limMsg); +void lim_ft_cleanup_all_ft_sessions(tpAniSirGlobal pMac); #endif /* __LIMFT_H__ */ diff --git a/core/mac/src/pe/lim/lim_assoc_utils.c b/core/mac/src/pe/lim/lim_assoc_utils.c index 673e5c3d7359..04f13f0cc050 100644 --- a/core/mac/src/pe/lim/lim_assoc_utils.c +++ b/core/mac/src/pe/lim/lim_assoc_utils.c @@ -608,7 +608,7 @@ lim_cleanup_rx_path(tpAniSirGlobal pMac, tpDphHashNode pStaDs, pStaDs->valid = 0; lim_send_sme_tsm_ie_ind(pMac, psessionEntry, 0, 0, 0); /* Any roaming related changes should be above this line */ - if (psessionEntry->bRoamSynchInProgress) + if (lim_is_roam_synch_in_progress(psessionEntry)) return eSIR_SUCCESS; pStaDs->mlmStaContext.mlmState = eLIM_MLM_WT_DEL_STA_RSP_STATE; diff --git a/core/mac/src/pe/lim/lim_assoc_utils.h b/core/mac/src/pe/lim/lim_assoc_utils.h index 43c5d9018443..9e605f16dfa6 100644 --- a/core/mac/src/pe/lim/lim_assoc_utils.h +++ b/core/mac/src/pe/lim/lim_assoc_utils.h @@ -84,8 +84,6 @@ lim_populate_matching_rate_set(tpAniSirGlobal pMac, uint8_t *pSupportedMCSSet, tpPESession psessionEntry, tDot11fIEVHTCaps * pVHTCaps); -void lim_handle_del_bss_in_re_assoc_context(tpAniSirGlobal pMac, - tpDphHashNode pStaDs, tpPESession psessionEntry); #define MCSMAPMASK1x1 0x3 #define MCSMAPMASK2x2 0xC @@ -93,16 +91,66 @@ void lim_handle_del_bss_in_re_assoc_context(tpAniSirGlobal pMac, tSirRetStatus lim_add_sta(tpAniSirGlobal, tpDphHashNode, uint8_t, tpPESession); tSirRetStatus lim_del_bss(tpAniSirGlobal, tpDphHashNode, uint16_t, tpPESession); tSirRetStatus lim_del_sta(tpAniSirGlobal, tpDphHashNode, bool, tpPESession); -tSirRetStatus lim_add_ft_sta_self(tpAniSirGlobal pMac, uint16_t assocId, - tpPESession psessionEntry); tSirRetStatus lim_add_sta_self(tpAniSirGlobal, uint16_t, uint8_t, tpPESession); void lim_teardown_infra_bss(tpAniSirGlobal, tpPESession); +#ifdef WLAN_FEATURE_HOST_ROAM void lim_restore_pre_reassoc_state(tpAniSirGlobal, tSirResultCodes, uint16_t, tpPESession); void lim_post_reassoc_failure(tpAniSirGlobal, tSirResultCodes, uint16_t, tpPESession); bool lim_is_reassoc_in_progress(tpAniSirGlobal, tpPESession); + +void lim_handle_add_bss_in_re_assoc_context(tpAniSirGlobal pMac, + tpDphHashNode pStaDs, tpPESession psessionEntry); +void lim_handle_del_bss_in_re_assoc_context(tpAniSirGlobal pMac, + tpDphHashNode pStaDs, tpPESession psessionEntry); +void lim_send_retry_reassoc_req_frame(tpAniSirGlobal pMac, + tLimMlmReassocReq *pMlmReassocReq, tpPESession psessionEntry); +tSirRetStatus lim_add_ft_sta_self(tpAniSirGlobal pMac, uint16_t assocId, + tpPESession psessionEntry); +#else +static inline void lim_restore_pre_reassoc_state(tpAniSirGlobal mac_ctx, + tSirResultCodes res_code, uint16_t prot_status, + tpPESession pe_session) +{} +static inline void lim_post_reassoc_failure(tpAniSirGlobal mac_ctx, + tSirResultCodes res_code, uint16_t prot_status, + tpPESession pe_session) +{} +static inline void lim_handle_add_bss_in_re_assoc_context(tpAniSirGlobal pMac, + tpDphHashNode pStaDs, tpPESession psessionEntry) +{} +static inline void lim_handle_del_bss_in_re_assoc_context(tpAniSirGlobal pMac, + tpDphHashNode pStaDs, tpPESession psessionEntry) +{} +static inline void lim_send_retry_reassoc_req_frame(tpAniSirGlobal pMac, + tLimMlmReassocReq *pMlmReassocReq, tpPESession psessionEntry) +{} +static inline bool lim_is_reassoc_in_progress(tpAniSirGlobal mac_ctx, + tpPESession pe_session) +{ + return false; +} +static inline tSirRetStatus lim_add_ft_sta_self(tpAniSirGlobal pMac, + uint16_t assocId, tpPESession psessionEntry) +{ + return eSIR_SUCCESS; +} +#endif + +#ifdef WLAN_FEATURE_ROAM_OFFLOAD +static inline bool lim_is_roam_synch_in_progress(tpPESession pe_session) +{ + return pe_session->bRoamSynchInProgress; +} +#else +static inline bool lim_is_roam_synch_in_progress(tpPESession pe_session) +{ + return false; +} +#endif + void lim_send_del_sta_cnf(tpAniSirGlobal pMac, struct qdf_mac_addr sta_dsaddr, uint16_t staDsAssocId, tLimMlmStaContext mlmStaContext, @@ -150,18 +198,10 @@ tSirRetStatus lim_is_dot11h_supported_channels_valid(tpAniSirGlobal pMac, tSirRetStatus lim_is_dot11h_power_capabilities_in_range(tpAniSirGlobal pMac, tSirAssocReq *assoc, tpPESession); - -/* API to re-add the same BSS during re-association */ -void lim_handle_add_bss_in_re_assoc_context(tpAniSirGlobal pMac, tpDphHashNode pStaDs, - tpPESession psessionEntry); - /* API to fill in RX Highest Supported data Rate */ void lim_fill_rx_highest_supported_rate(tpAniSirGlobal pMac, uint16_t *rxHighestRate, uint8_t *pSupportedMCSSet); -void lim_send_retry_reassoc_req_frame(tpAniSirGlobal pMac, - tLimMlmReassocReq *pMlmReassocReq, - tpPESession psessionEntry); #ifdef WLAN_FEATURE_11W void lim_send_sme_unprotected_mgmt_frame_ind(tpAniSirGlobal pMac, uint8_t frameType, uint8_t *frame, uint32_t frameLen, diff --git a/core/mac/src/pe/lim/lim_ft.c b/core/mac/src/pe/lim/lim_ft.c index f79494777954..01a2afc88750 100644 --- a/core/mac/src/pe/lim/lim_ft.c +++ b/core/mac/src/pe/lim/lim_ft.c @@ -119,6 +119,7 @@ void lim_ft_cleanup(tpAniSirGlobal pMac, tpPESession psessionEntry) qdf_mem_set(&psessionEntry->ftPEContext, sizeof(tftPEContext), 0); } +#if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD) /*------------------------------------------------------------------ * * Create the new Add Bss Req to the new AP. @@ -126,10 +127,9 @@ void lim_ft_cleanup(tpAniSirGlobal pMac, tpPESession psessionEntry) * The newly created ft Session entry is passed to this function * *------------------------------------------------------------------*/ -tSirRetStatus lim_ft_prepare_add_bss_req(tpAniSirGlobal pMac, - uint8_t updateEntry, - tpPESession pftSessionEntry, - tpSirBssDescription bssDescription) +void lim_ft_prepare_add_bss_req(tpAniSirGlobal pMac, + uint8_t updateEntry, tpPESession pftSessionEntry, + tpSirBssDescription bssDescription) { tpAddBssParams pAddBssParams = NULL; tAddStaParams *sta_ctx; @@ -139,14 +139,14 @@ tSirRetStatus lim_ft_prepare_add_bss_req(tpAniSirGlobal pMac, /* Nothing to be done if the session is not in STA mode */ if (!LIM_IS_STA_ROLE(pftSessionEntry)) { lim_log(pMac, LOGE, FL("psessionEntry is not in STA mode")); - return eSIR_FAILURE; + return; } pBeaconStruct = qdf_mem_malloc(sizeof(tSchBeaconStruct)); if (NULL == pBeaconStruct) { lim_log(pMac, LOGE, FL("Unable to allocate memory for creating ADD_BSS")); - return eSIR_MEM_ALLOC_FAILED; + return; } /* Package SIR_HAL_ADD_BSS_REQ message parameters */ pAddBssParams = qdf_mem_malloc(sizeof(tAddBssParams)); @@ -154,7 +154,7 @@ tSirRetStatus lim_ft_prepare_add_bss_req(tpAniSirGlobal pMac, qdf_mem_free(pBeaconStruct); lim_log(pMac, LOGP, FL("Unable to allocate memory for creating ADD_BSS")); - return eSIR_MEM_ALLOC_FAILED; + return; } qdf_mem_set((uint8_t *) pAddBssParams, sizeof(tAddBssParams), 0); @@ -457,7 +457,7 @@ tSirRetStatus lim_ft_prepare_add_bss_req(tpAniSirGlobal pMac, pAddBssParams->sessionId = pftSessionEntry->peSessionId; /* Set a new state for MLME */ - if (!pftSessionEntry->bRoamSynchInProgress) { + if (!lim_is_roam_synch_in_progress(pftSessionEntry)) { pftSessionEntry->limMlmState = eLIM_MLM_WT_ADD_BSS_RSP_FT_REASSOC_STATE; MTRACE(mac_trace @@ -469,12 +469,14 @@ tSirRetStatus lim_ft_prepare_add_bss_req(tpAniSirGlobal pMac, pftSessionEntry->ftPEContext.pAddBssReq = pAddBssParams; - lim_log(pMac, LOG1, FL("Saving SIR_HAL_ADD_BSS_REQ for pre-auth ap...")); + lim_log(pMac, LOG1, FL("Saving SIR_HAL_ADD_BSS_REQ for pre-auth ap.")); qdf_mem_free(pBeaconStruct); - return 0; + return; } +#endif +#if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD) /*------------------------------------------------------------------ * * Setup the new session for the pre-auth AP. @@ -667,7 +669,7 @@ void lim_fill_ft_session(tpAniSirGlobal pMac, regMax, localPowerConstraint, pMac->roam.configParam.nTxPowerCap, pftSessionEntry->maxTxPower); - if (!psessionEntry->bRoamSynchInProgress) { + if (!lim_is_roam_synch_in_progress(psessionEntry)) { pftSessionEntry->limPrevSmeState = pftSessionEntry->limSmeState; pftSessionEntry->limSmeState = eLIM_SME_WT_REASSOC_STATE; MTRACE(mac_trace(pMac, @@ -692,6 +694,7 @@ void lim_fill_ft_session(tpAniSirGlobal pMac, qdf_mem_free(pBeaconStruct); } +#endif /*------------------------------------------------------------------ * diff --git a/core/mac/src/pe/lim/lim_process_assoc_rsp_frame.c b/core/mac/src/pe/lim/lim_process_assoc_rsp_frame.c index 707d6e6876b8..03577a99d285 100644 --- a/core/mac/src/pe/lim/lim_process_assoc_rsp_frame.c +++ b/core/mac/src/pe/lim/lim_process_assoc_rsp_frame.c @@ -535,16 +535,14 @@ lim_process_assoc_rsp_frame(tpAniSirGlobal mac_ctx, tSchBeaconStruct *beacon; #ifdef WLAN_FEATURE_ROAM_OFFLOAD uint8_t sme_sessionid = 0; -#endif tCsrRoamSession *roam_session; +#endif /* Initialize status code to success. */ -#ifdef WLAN_FEATURE_ROAM_OFFLOAD - if (session_entry->bRoamSynchInProgress) + if (lim_is_roam_synch_in_progress(session_entry)) hdr = (tpSirMacMgmtHdr) mac_ctx->roam.pReassocResp; else -#endif - hdr = WMA_GET_RX_MAC_HEADER(rx_pkt_info); + hdr = WMA_GET_RX_MAC_HEADER(rx_pkt_info); #ifdef WLAN_FEATURE_ROAM_OFFLOAD sme_sessionid = session_entry->smeSessionId; #endif @@ -587,21 +585,17 @@ lim_process_assoc_rsp_frame(tpAniSirGlobal mac_ctx, qdf_mem_free(beacon); return; } -#ifdef WLAN_FEATURE_ROAM_OFFLOAD - if (session_entry->bRoamSynchInProgress) { + if (lim_is_roam_synch_in_progress(session_entry)) { hdr = (tpSirMacMgmtHdr) mac_ctx->roam.pReassocResp; frame_len = mac_ctx->roam.reassocRespLen - SIR_MAC_HDR_LEN_3A; } else { -#endif - hdr = WMA_GET_RX_MAC_HEADER(rx_pkt_info); - frame_len = WMA_GET_RX_PAYLOAD_LEN(rx_pkt_info); -#ifdef WLAN_FEATURE_ROAM_OFFLOAD -} -#endif + hdr = WMA_GET_RX_MAC_HEADER(rx_pkt_info); + frame_len = WMA_GET_RX_PAYLOAD_LEN(rx_pkt_info); + } if (((subtype == LIM_ASSOC) && (session_entry->limMlmState != eLIM_MLM_WT_ASSOC_RSP_STATE)) || ((subtype == LIM_REASSOC) && - !session_entry->bRoamSynchInProgress && + !lim_is_roam_synch_in_progress(session_entry) && ((session_entry->limMlmState != eLIM_MLM_WT_REASSOC_RSP_STATE) && (session_entry->limMlmState != eLIM_MLM_WT_FT_REASSOC_RSP_STATE) @@ -667,12 +661,10 @@ lim_process_assoc_rsp_frame(tpAniSirGlobal mac_ctx, return; } /* Get pointer to Re/Association Response frame body */ -#ifdef WLAN_FEATURE_ROAM_OFFLOAD - if (session_entry->bRoamSynchInProgress) + if (lim_is_roam_synch_in_progress(session_entry)) body = mac_ctx->roam.pReassocResp + SIR_MAC_HDR_LEN_3A; else -#endif - body = WMA_GET_RX_MPDU_DATA(rx_pkt_info); + body = WMA_GET_RX_MPDU_DATA(rx_pkt_info); /* parse Re/Association Response frame. */ if (sir_convert_assoc_resp_frame2_struct(mac_ctx, body, frame_len, assoc_rsp) == eSIR_FAILURE) { @@ -853,7 +845,7 @@ lim_process_assoc_rsp_frame(tpAniSirGlobal mac_ctx, if (!((session_entry->bssType == eSIR_BTAMP_STA_MODE) || ((session_entry->bssType == eSIR_BTAMP_AP_MODE) && LIM_IS_BT_AMP_STA_ROLE(session_entry)) || - session_entry->bRoamSynchInProgress)) { + lim_is_roam_synch_in_progress(session_entry))) { if (lim_set_link_state (mac_ctx, eSIR_LINK_POSTASSOC_STATE, session_entry->bssId, @@ -909,7 +901,7 @@ lim_process_assoc_rsp_frame(tpAniSirGlobal mac_ctx, } if ((session_entry->limMlmState == eLIM_MLM_WT_FT_REASSOC_RSP_STATE) || - session_entry->bRoamSynchInProgress) { + lim_is_roam_synch_in_progress(session_entry)) { lim_log(mac_ctx, LOG1, FL("Sending self sta")); lim_update_assoc_sta_datas(mac_ctx, sta_ds, assoc_rsp, session_entry); @@ -920,17 +912,14 @@ lim_process_assoc_rsp_frame(tpAniSirGlobal mac_ctx, session_entry->gLimEdcaParams, session_entry); /* Send the active EDCA parameters to HAL */ -#ifdef WLAN_FEATURE_ROAM_OFFLOAD - if (!session_entry->bRoamSynchInProgress) { -#endif - lim_send_edca_params(mac_ctx, - session_entry->gLimEdcaParamsActive, - sta_ds->bssId); - lim_add_ft_sta_self(mac_ctx, (assoc_rsp->aid & 0x3FFF), - session_entry); -#ifdef WLAN_FEATURE_ROAM_OFFLOAD - } -#endif + if (!lim_is_roam_synch_in_progress(session_entry)) { + lim_send_edca_params(mac_ctx, + session_entry->gLimEdcaParamsActive, + sta_ds->bssId); + lim_add_ft_sta_self(mac_ctx, + (assoc_rsp->aid & 0x3FFF), + session_entry); + } qdf_mem_free(beacon); return; } diff --git a/core/mac/src/pe/lim/lim_process_tdls.c b/core/mac/src/pe/lim/lim_process_tdls.c index f524a28f2b22..5950dd373704 100644 --- a/core/mac/src/pe/lim/lim_process_tdls.c +++ b/core/mac/src/pe/lim/lim_process_tdls.c @@ -3257,7 +3257,7 @@ tSirRetStatus lim_delete_tdls_peers(tpAniSirGlobal mac_ctx, CLEAR_BIT(session_entry->peerAIDBitmap[i], aid); } } - if (session_entry->bRoamSynchInProgress) + if (lim_is_roam_synch_in_progress(session_entry)) return eSIR_SUCCESS; lim_send_sme_tdls_delete_all_peer_ind(mac_ctx, session_entry); diff --git a/core/mac/src/pe/lim/lim_types.h b/core/mac/src/pe/lim/lim_types.h index 2bbb79d19221..c2a4bb4a4fb0 100644 --- a/core/mac/src/pe/lim/lim_types.h +++ b/core/mac/src/pe/lim/lim_types.h @@ -458,11 +458,20 @@ void lim_send_probe_rsp_mgmt_frame(tpAniSirGlobal, tSirMacAddr, tpAniSSID, short void lim_send_auth_mgmt_frame(tpAniSirGlobal, tSirMacAuthFrameBody *, tSirMacAddr, uint8_t, tpPESession, bool wait_for_ack); void lim_send_assoc_req_mgmt_frame(tpAniSirGlobal, tLimMlmAssocReq *, tpPESession); +#ifdef WLAN_FEATURE_HOST_ROAM +void lim_send_reassoc_req_with_ft_ies_mgmt_frame(tpAniSirGlobal pMac, + tLimMlmReassocReq *pMlmReassocReq, tpPESession psessionEntry); void lim_send_reassoc_req_mgmt_frame(tpAniSirGlobal, tLimMlmReassocReq *, tpPESession); -void lim_send_reassoc_req_with_ft_ies_mgmt_frame(tpAniSirGlobal pMac, - tLimMlmReassocReq *pMlmReassocReq, - tpPESession psessionEntry); +#else +static inline void lim_send_reassoc_req_with_ft_ies_mgmt_frame( + tpAniSirGlobal pMac, tLimMlmReassocReq *pMlmReassocReq, + tpPESession psessionEntry) +{} +static inline void lim_send_reassoc_req_mgmt_frame(tpAniSirGlobal mac_ctx, + tLimMlmReassocReq *reassoc_req, tpPESession pe_session) +{} +#endif void lim_send_delts_req_action_frame(tpAniSirGlobal pMac, tSirMacAddr peer, uint8_t wmmTspecPresent, tSirMacTSInfo * pTsinfo, diff --git a/core/mac/src/pe/lim/lim_utils.h b/core/mac/src/pe/lim/lim_utils.h index 1ceeabd0daf4..b96e9b87a049 100644 --- a/core/mac/src/pe/lim/lim_utils.h +++ b/core/mac/src/pe/lim/lim_utils.h @@ -585,9 +585,21 @@ uint8_t lim_get_80Mhz_center_channel(uint8_t primary_channel); void lim_update_obss_scanparams(tpPESession session, tDot11fIEOBSSScanParameters *scan_params); void lim_init_obss_params(tpAniSirGlobal mac_ctx, tpPESession session); +#ifdef WLAN_FEATURE_HOST_ROAM uint32_t lim_create_timers_host_roam(tpAniSirGlobal mac_ctx); void lim_delete_timers_host_roam(tpAniSirGlobal mac_ctx); void lim_deactivate_and_change_timer_host_roam(tpAniSirGlobal mac_ctx, uint32_t timer_id); +#else +static inline uint32_t lim_create_timers_host_roam(tpAniSirGlobal mac_ctx) +{ + return 0; +} +static inline void lim_delete_timers_host_roam(tpAniSirGlobal mac_ctx) +{} +static inline void lim_deactivate_and_change_timer_host_roam( + tpAniSirGlobal mac_ctx, uint32_t timer_id) +{} +#endif #endif /* __LIM_UTILS_H */ diff --git a/core/sme/inc/csr_api.h b/core/sme/inc/csr_api.h index 5570ac6ab277..8a05500d717d 100644 --- a/core/sme/inc/csr_api.h +++ b/core/sme/inc/csr_api.h @@ -1573,9 +1573,16 @@ typedef void (*tCsrTsmStatsCallback)(tAniTrafStrmMetrics tsmMetrics, uint32_t staId, void *pContext); #endif /* FEATURE_WLAN_ESE */ typedef void (*tCsrSnrCallback)(int8_t snr, uint32_t staId, void *pContext); - +#ifdef WLAN_FEATURE_HOST_ROAM QDF_STATUS csr_roam_issue_ft_preauth_req(tHalHandle hHal, uint32_t sessionId, - tpSirBssDescription pBssDescription); + tpSirBssDescription pBssDescription); +#else +static inline QDF_STATUS csr_roam_issue_ft_preauth_req(tHalHandle hHal, + uint32_t sessionId, tpSirBssDescription pBssDescription) +{ + return QDF_STATUS_E_NOSUPPORT; +} +#endif QDF_STATUS csr_set_band(tHalHandle hHal, uint8_t sessionId, eCsrBand eBand); eCsrBand csr_get_current_band(tHalHandle hHal); typedef void (*csr_readyToSuspendCallback)(void *pContext, bool suspended); diff --git a/core/sme/inc/csr_internal.h b/core/sme/inc/csr_internal.h index a476d8d493aa..290584e89be5 100644 --- a/core/sme/inc/csr_internal.h +++ b/core/sme/inc/csr_internal.h @@ -1008,10 +1008,8 @@ typedef struct tagCsrRoamStruct { uint8_t RoamRssiDiff; bool isWESModeEnabled; uint32_t deauthRspStatus; -#ifdef WLAN_FEATURE_ROAM_OFFLOAD uint8_t *pReassocResp; /* reassociation response from new AP */ uint16_t reassocRespLen; /* length of reassociation response */ -#endif } tCsrRoamStruct; #define GET_NEXT_ROAM_ID(pRoamStruct) (((pRoamStruct)->nextRoamId + 1 == 0) ? \ @@ -1300,8 +1298,16 @@ bool csr_is_channel_present_in_list(uint8_t *pChannelList, int numChannels, uint8_t channel); QDF_STATUS csr_add_to_channel_list_front(uint8_t *pChannelList, int numChannels, uint8_t channel); +#if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD) QDF_STATUS csr_roam_offload_scan_rsp_hdlr(tpAniSirGlobal pMac, tpSirRoamOffloadScanRsp scanOffloadRsp); +#else +static inline QDF_STATUS csr_roam_offload_scan_rsp_hdlr(tpAniSirGlobal pMac, + tpSirRoamOffloadScanRsp scanOffloadRsp) +{ + return QDF_STATUS_E_NOSUPPORT; +} +#endif QDF_STATUS csr_handoff_request(tpAniSirGlobal pMac, uint8_t sessionId, tCsrHandoffRequest *pHandoffInfo); bool csr_roam_is_sta_mode(tpAniSirGlobal pMac, uint32_t sessionId); @@ -1325,6 +1331,11 @@ QDF_STATUS csr_roam_modify_add_ies(tpAniSirGlobal pMac, tSirModifyIE *pModifyIE, QDF_STATUS csr_roam_update_add_ies(tpAniSirGlobal pMac, tSirUpdateIE *pUpdateIE, eUpdateIEsType updateType); +#ifdef WLAN_FEATURE_ROAM_OFFLOAD +QDF_STATUS csr_scan_save_roam_offload_ap_to_scan_cache(tpAniSirGlobal pMac, + struct sSirSmeRoamOffloadSynchInd *roam_synch_ind_ptr, + tpSirBssDescription bss_desc_ptr); +void csr_process_ho_fail_ind(tpAniSirGlobal pMac, void *pMsgBuf); #ifdef FEATURE_WLAN_DIAG_SUPPORT_CSR void csr_roaming_report_diag_event(tpAniSirGlobal mac_ctx, roam_offload_synch_ind *roam_synch_ind_ptr, @@ -1335,11 +1346,6 @@ static inline void csr_roaming_report_diag_event(tpAniSirGlobal mac_ctx, eCsrDiagWlanStatusEventReason reason) {} #endif -#ifdef WLAN_FEATURE_ROAM_OFFLOAD -QDF_STATUS csr_scan_save_roam_offload_ap_to_scan_cache(tpAniSirGlobal pMac, - roam_offload_synch_ind *roam_synch_ind_ptr, - tpSirBssDescription bss_desc_ptr); -void csr_process_ho_fail_ind(tpAniSirGlobal pMac, void *pMsgBuf); #endif bool csr_store_joinreq_param(tpAniSirGlobal mac_ctx, tCsrRoamProfile *profile, diff --git a/core/sme/inc/csr_neighbor_roam.h b/core/sme/inc/csr_neighbor_roam.h index 5bae53f64cf1..1283abf7fe39 100644 --- a/core/sme/inc/csr_neighbor_roam.h +++ b/core/sme/inc/csr_neighbor_roam.h @@ -177,28 +177,95 @@ QDF_STATUS csr_neighbor_roam_indicate_connect(tpAniSirGlobal pMac, uint8_t sessionId, QDF_STATUS status); QDF_STATUS csr_neighbor_roam_indicate_disconnect(tpAniSirGlobal pMac, uint8_t sessionId); -bool csr_neighbor_roam_is_handoff_in_progress(tpAniSirGlobal pMac, - uint8_t sessionId); -void csr_neighbor_roam_request_handoff(tpAniSirGlobal pMac, uint8_t sessionId); QDF_STATUS csr_neighbor_roam_init(tpAniSirGlobal pMac, uint8_t sessionId); void csr_neighbor_roam_close(tpAniSirGlobal pMac, uint8_t sessionId); -void csr_neighbor_roam_purge_preauth_failed_list(tpAniSirGlobal pMac); QDF_STATUS csr_neighbor_roam_transit_to_cfg_chan_scan(tpAniSirGlobal pMac, uint8_t sessionId); QDF_STATUS csrNeighborRoamTransitionToPreauthDone(tpAniSirGlobal pMac); QDF_STATUS csr_neighbor_roam_prepare_scan_profile_filter(tpAniSirGlobal pMac, tCsrScanResultFilter *pScanFilter, uint8_t sessionId); -bool csr_neighbor_roam_get_handoff_ap_info(tpAniSirGlobal pMac, - tpCsrNeighborRoamBSSInfo pHandoffNode, uint8_t sessionId); QDF_STATUS csr_neighbor_roam_preauth_rsp_handler(tpAniSirGlobal pMac, uint8_t sessionId, tSirRetStatus limStatus); bool csr_neighbor_roam_is11r_assoc(tpAniSirGlobal pMac, uint8_t sessionId); QDF_STATUS csr_neighbor_roam_create_chan_list_from_neighbor_report( tpAniSirGlobal pMac, uint8_t sessionId); +#ifdef WLAN_FEATURE_HOST_ROAM void csr_neighbor_roam_tranistion_preauth_done_to_disconnected( tpAniSirGlobal pMac, uint8_t sessionId); bool csr_neighbor_roam_state_preauth_done(tpAniSirGlobal pMac, uint8_t sessionId); +QDF_STATUS csr_roam_issue_reassociate_cmd(tpAniSirGlobal pMac, + uint32_t sessionId); +void csr_neighbor_roam_free_roamable_bss_list(tpAniSirGlobal mac_ctx, + tDblLinkList *llist); +bool csr_neighbor_roam_get_handoff_ap_info(tpAniSirGlobal pMac, + tpCsrNeighborRoamBSSInfo pHandoffNode, uint8_t sessionId); +QDF_STATUS csr_roam_issue_reassociate(tpAniSirGlobal pMac, + uint32_t sessionId, tSirBssDescription *pSirBssDesc, + tDot11fBeaconIEs *pIes, tCsrRoamProfile *pProfile); +void csr_neighbor_roam_request_handoff(tpAniSirGlobal pMac, uint8_t sessionId); +QDF_STATUS csr_neighbor_roam_candidate_found_ind_hdlr(tpAniSirGlobal pMac, + void *pMsg); +QDF_STATUS csr_neighbor_roam_process_scan_complete(tpAniSirGlobal pMac, + uint8_t sessionId); +bool csr_neighbor_roam_is_handoff_in_progress(tpAniSirGlobal pMac, + uint8_t sessionId); +void csr_neighbor_roam_reset_preauth_control_info( + tpAniSirGlobal mac_ctx, uint8_t session_id); +void csr_neighbor_roam_purge_preauth_failed_list(tpAniSirGlobal pMac); +#else +static inline bool csr_neighbor_roam_state_preauth_done(tpAniSirGlobal pMac, + uint8_t sessionId) +{ + return false; +} +static inline QDF_STATUS csr_roam_issue_reassociate_cmd(tpAniSirGlobal pMac, + uint32_t sessionId) +{ + return QDF_STATUS_E_NOSUPPORT; +} +static inline QDF_STATUS csr_roam_issue_reassociate(tpAniSirGlobal pMac, + uint32_t sessionId, tSirBssDescription *pSirBssDesc, + tDot11fBeaconIEs *pIes, tCsrRoamProfile *pProfile) +{ + return QDF_STATUS_E_NOSUPPORT; +} +static inline QDF_STATUS csr_neighbor_roam_candidate_found_ind_hdlr( + tpAniSirGlobal pMac, void *pMsg) +{ + return QDF_STATUS_E_NOSUPPORT; +} +static inline QDF_STATUS csr_neighbor_roam_process_scan_complete( + tpAniSirGlobal pMac, uint8_t sessionId) +{ + return QDF_STATUS_E_NOSUPPORT; +} +static inline void csr_neighbor_roam_tranistion_preauth_done_to_disconnected( + tpAniSirGlobal pMac, uint8_t sessionId) +{} +static inline void csr_neighbor_roam_free_roamable_bss_list( + tpAniSirGlobal mac_ctx, tDblLinkList *llist) +{} +static inline void csr_neighbor_roam_request_handoff(tpAniSirGlobal pMac, + uint8_t sessionId) +{} +static inline void csr_neighbor_roam_reset_preauth_control_info( + tpAniSirGlobal mac_ctx, uint8_t session_id) +{} +static inline void csr_neighbor_roam_purge_preauth_failed_list( + tpAniSirGlobal pMac) +{} +static inline bool csr_neighbor_roam_get_handoff_ap_info(tpAniSirGlobal pMac, + tpCsrNeighborRoamBSSInfo pHandoffNode, uint8_t sessionId) +{ + return false; +} +static inline bool csr_neighbor_roam_is_handoff_in_progress(tpAniSirGlobal pMac, + uint8_t sessionId) +{ + return false; +} +#endif bool csr_neighbor_middle_of_roaming(tpAniSirGlobal pMac, uint8_t sessionId); QDF_STATUS csr_neighbor_roam_set_lookup_rssi_threshold(tpAniSirGlobal pMac, uint8_t sessionId, uint8_t neighborLookupRssiThreshold); @@ -270,10 +337,16 @@ void csr_roam_reset_roam_params(tpAniSirGlobal mac_ptr); #define REASON_ROAM_SCAN_HI_RSSI_DELAY_CHANGED 32 #define REASON_ROAM_SCAN_HI_RSSI_UB_CHANGED 33 +#if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD) QDF_STATUS csr_roam_offload_scan(tpAniSirGlobal pMac, uint8_t sessionId, uint8_t command, uint8_t reason); -QDF_STATUS csr_neighbor_roam_candidate_found_ind_hdlr(tpAniSirGlobal pMac, - void *pMsg); +#else +static inline QDF_STATUS csr_roam_offload_scan(tpAniSirGlobal pMac, + uint8_t sessionId, uint8_t command, uint8_t reason) +{ + return QDF_STATUS_E_NOSUPPORT; +} +#endif QDF_STATUS csr_neighbor_roam_handoff_req_hdlr(tpAniSirGlobal pMac, void *pMsg); QDF_STATUS csr_neighbor_roam_proceed_with_handoff_req(tpAniSirGlobal pMac, uint8_t sessionId); @@ -294,6 +367,11 @@ QDF_STATUS csr_neighbor_roam_offload_update_preauth_list(tpAniSirGlobal pMac, void csr_roam_synch_callback(tpAniSirGlobal mac, roam_offload_synch_ind *roam_synch_data, tpSirBssDescription bss_desc_ptr, uint8_t reason); +#else +static inline void csr_roam_synch_callback(tpAniSirGlobal mac, + roam_offload_synch_ind *roam_synch_data, + tpSirBssDescription bss_desc_ptr, uint8_t reason) +{} #endif void csr_neighbor_roam_state_transition(tpAniSirGlobal mac_ctx, uint8_t newstate, uint8_t session); @@ -307,8 +385,6 @@ void csr_neighbor_roam_free_neighbor_roam_bss_node(tpAniSirGlobal pMac, tpCsrNeighborRoamBSSInfo neighborRoamBSSNode); QDF_STATUS csr_neighbor_roam_issue_preauth_req(tpAniSirGlobal pMac, uint8_t sessionId); -void csr_neighbor_roam_reset_preauth_control_info( - tpAniSirGlobal mac_ctx, uint8_t session_id); bool csr_neighbor_roam_is_preauth_candidate(tpAniSirGlobal pMac, uint8_t sessionId, tSirMacAddr bssId); #ifdef FEATURE_WLAN_LFR_METRICS @@ -320,18 +396,9 @@ static inline void csr_neighbor_roam_send_lfr_metric_event( tSirMacAddr bssid, eRoamCmdStatus status) {} #endif -void csr_neighbor_roam_free_roamable_bss_list(tpAniSirGlobal mac_ctx, - tDblLinkList * llist); -QDF_STATUS csr_neighbor_roam_process_scan_complete(tpAniSirGlobal pMac, - uint8_t sessionId); QDF_STATUS csr_roam_stop_wait_for_key_timer(tpAniSirGlobal pMac); uint32_t csr_get_current_ap_rssi(tpAniSirGlobal pMac, tScanResultHandle *pScanResultList, uint8_t sessionId); -QDF_STATUS csr_roam_issue_reassociate(tpAniSirGlobal pMac, - uint32_t sessionId, tSirBssDescription *pSirBssDesc, - tDot11fBeaconIEs *pIes, tCsrRoamProfile *pProfile); -QDF_STATUS csr_roam_issue_reassociate_cmd(tpAniSirGlobal pMac, - uint32_t sessionId); QDF_STATUS csr_roam_copy_connected_profile(tpAniSirGlobal pMac, uint32_t sessionId, tCsrRoamProfile *pDstProfile); diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index 310dd9a251f0..15c702f328c2 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -6355,7 +6355,6 @@ static void csr_roam_process_join_res(tpAniSirGlobal mac_ctx, tSirBssDescription *bss_desc = NULL; tCsrScanResult *scan_res = NULL; sme_qos_csr_event_indType ind_qos; - csr_roam_offload_synch_params *roam_offload_params = NULL; #ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH tSirSmeHTProfile *src_profile = NULL; tCsrRoamHTProfile *dst_profile = NULL; @@ -6367,7 +6366,6 @@ static void csr_roam_process_join_res(tpAniSirGlobal mac_ctx, tSirSmeJoinRsp *join_rsp = (tSirSmeJoinRsp *) context; uint32_t len; - roam_offload_params = &session->roamOffloadSynchParams; conn_profile = &session->connectedProfile; if (eCsrReassocSuccess == res) ind_qos = SME_QOS_CSR_REASSOC_COMPLETE; @@ -6496,63 +6494,49 @@ static void csr_roam_process_join_res(tpAniSirGlobal mac_ctx, bss_desc, &bcast_mac, false, false, eSIR_TX_RX, 0, 0, NULL, 0); } else { -#ifdef WLAN_FEATURE_ROAM_OFFLOAD - if (session->roam_synch_in_progress - && (roam_offload_params->authStatus - == CSR_ROAM_AUTH_STATUS_AUTHENTICATED)) { - QDF_TRACE(QDF_MODULE_ID_SME, - QDF_TRACE_LEVEL_DEBUG, - FL("LFR3:Don't start waitforkey timer")); - csr_roam_substate_change(mac_ctx, - eCSR_ROAM_SUBSTATE_NONE, session_id); - } else { -#endif - /* Need to wait for supplicant authtication */ - roam_info.fAuthRequired = true; - /* - * Set the substate to WaitForKey in case - * authentiation is needed - */ - csr_roam_substate_change(mac_ctx, + /* Need to wait for supplicant authtication */ + roam_info.fAuthRequired = true; + /* + * Set the substate to WaitForKey in case + * authentiation is needed + */ + csr_roam_substate_change(mac_ctx, eCSR_ROAM_SUBSTATE_WAIT_FOR_KEY, session_id); - /* - * Set remain_in_power_active_till_dhcp to make - * sure we wait for until keys are set before - * going into BMPS. - */ - ps_global_info->remain_in_power_active_till_dhcp - = true; + /* + * Set remain_in_power_active_till_dhcp to make + * sure we wait for until keys are set before + * going into BMPS. + */ + ps_global_info->remain_in_power_active_till_dhcp + = true; - if (profile->bWPSAssociation) - key_timeout_interval = - CSR_WAIT_FOR_WPS_KEY_TIMEOUT_PERIOD; - else - key_timeout_interval = - CSR_WAIT_FOR_KEY_TIMEOUT_PERIOD; + if (profile->bWPSAssociation) + key_timeout_interval = + CSR_WAIT_FOR_WPS_KEY_TIMEOUT_PERIOD; + else + key_timeout_interval = + CSR_WAIT_FOR_KEY_TIMEOUT_PERIOD; - /* Save session_id in case of timeout */ - mac_ctx->roam.WaitForKeyTimerInfo.sessionId = - (uint8_t) session_id; - /* - * This time should be long enough for the rest - * of the process plus setting key - */ - if (!QDF_IS_STATUS_SUCCESS + /* Save session_id in case of timeout */ + mac_ctx->roam.WaitForKeyTimerInfo.sessionId = + (uint8_t) session_id; + /* + * This time should be long enough for the rest + * of the process plus setting key + */ + if (!QDF_IS_STATUS_SUCCESS (csr_roam_start_wait_for_key_timer( - mac_ctx, key_timeout_interval)) - ) { - /* Reset state so nothing is blocked. */ - sms_log(mac_ctx, LOGE, FL + mac_ctx, key_timeout_interval)) + ) { + /* Reset state so nothing is blocked. */ + sms_log(mac_ctx, LOGE, FL ("Failed preauth timer start")); - csr_roam_substate_change(mac_ctx, + csr_roam_substate_change(mac_ctx, eCSR_ROAM_SUBSTATE_NONE, session_id); - } -#ifdef WLAN_FEATURE_ROAM_OFFLOAD } -#endif } assoc_info.pBssDesc = bss_desc; /* could be NULL */ @@ -6699,29 +6683,6 @@ static void csr_roam_process_join_res(tpAniSirGlobal mac_ctx, (csr_is_concurrent_session_running(mac_ctx))) { mac_ctx->roam.configParam.doBMPSWorkaround = 1; } -#ifdef WLAN_FEATURE_ROAM_OFFLOAD - if (session->roam_synch_in_progress) { - roam_info.roamSynchInProgress = 1; - roam_info.synchAuthStatus = - roam_offload_params->authStatus; - qdf_mem_copy(roam_info.kck, - roam_offload_params->kck, - SIR_KCK_KEY_LEN); - qdf_mem_copy(roam_info.kek, - roam_offload_params->kek, - SIR_KEK_KEY_LEN); - qdf_mem_copy(roam_info.replay_ctr, - roam_offload_params->replay_ctr, - SIR_REPLAY_CTR_LEN); - QDF_TRACE(QDF_MODULE_ID_SME, - QDF_TRACE_LEVEL_DEBUG, - FL - ("LFR3: Copy KCK, KEK and Replay Ctr")); - } - - roam_info.subnet_change_status = - CSR_GET_SUBNET_STATUS(roam_offload_params->roamReason); -#endif csr_roam_call_callback(mac_ctx, session_id, &roam_info, cmd->u.roamCmd.roamId, eCSR_ROAM_ASSOCIATION_COMPLETION, @@ -16181,6 +16142,74 @@ QDF_STATUS csr_get_statistics(tpAniSirGlobal pMac, return QDF_STATUS_SUCCESS; } +#ifdef WLAN_FEATURE_ROAM_OFFLOAD +QDF_STATUS csr_roam_set_key_mgmt_offload(tpAniSirGlobal pMac, + uint32_t sessionId, + bool nRoamKeyMgmtOffloadEnabled) +{ + tCsrRoamSession *pSession = CSR_GET_SESSION(pMac, sessionId); + if (!pSession) { + sms_log(pMac, LOGE, FL("session %d not found"), sessionId); + return QDF_STATUS_E_FAILURE; + } + pSession->RoamKeyMgmtOffloadEnabled = nRoamKeyMgmtOffloadEnabled; + return QDF_STATUS_SUCCESS; +} + +/** + * csr_update_roam_scan_offload_request() - updates req msg with roam offload + * paramters + * @pMac: mac global context + * @req_buf: out param, roam offload scan request packet + * @session: roam session + * + * Return: void + */ +static void +csr_update_roam_scan_offload_request(tpAniSirGlobal mac_ctx, + tSirRoamOffloadScanReq *req_buf, + tCsrRoamSession *session) +{ + qdf_mem_copy(req_buf->PSK_PMK, session->psk_pmk, + sizeof(req_buf->PSK_PMK)); + req_buf->pmk_len = session->pmk_len; + QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_DEBUG, + "LFR3: PMK Length = %d", req_buf->pmk_len); + req_buf->R0KH_ID_Length = session->ftSmeContext.r0kh_id_len; + qdf_mem_copy(req_buf->R0KH_ID, + session->ftSmeContext.r0kh_id, + req_buf->R0KH_ID_Length); + req_buf->Prefer5GHz = mac_ctx->roam.configParam.nRoamPrefer5GHz; + req_buf->RoamRssiCatGap = mac_ctx->roam.configParam.bCatRssiOffset; + req_buf->Select5GHzMargin = mac_ctx->roam.configParam.nSelect5GHzMargin; + if (wlan_cfg_get_int(mac_ctx, WNI_CFG_REASSOCIATION_FAILURE_TIMEOUT, + (uint32_t *) &req_buf->ReassocFailureTimeout) + != eSIR_SUCCESS) { + sms_log(mac_ctx, LOGE, + FL("could not retrieve ReassocFailureTimeout value")); + req_buf->ReassocFailureTimeout = + DEFAULT_REASSOC_FAILURE_TIMEOUT; + } +#ifdef FEATURE_WLAN_ESE + if (csr_is_auth_type_ese(req_buf->ConnectedNetwork.authentication)) { + qdf_mem_copy(req_buf->KRK, session->eseCckmInfo.krk, + SIR_KRK_KEY_LEN); + qdf_mem_copy(req_buf->BTK, session->eseCckmInfo.btk, + SIR_BTK_KEY_LEN); + } +#endif + req_buf->AcUapsd.acbe_uapsd = + SIR_UAPSD_GET(ACBE, mac_ctx->lim.gUapsdPerAcBitmask); + req_buf->AcUapsd.acbk_uapsd = + SIR_UAPSD_GET(ACBK, mac_ctx->lim.gUapsdPerAcBitmask); + req_buf->AcUapsd.acvi_uapsd = + SIR_UAPSD_GET(ACVI, mac_ctx->lim.gUapsdPerAcBitmask); + req_buf->AcUapsd.acvo_uapsd = + SIR_UAPSD_GET(ACVO, mac_ctx->lim.gUapsdPerAcBitmask); +} +#endif /* WLAN_FEATURE_ROAM_OFFLOAD */ + +#if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD) static tSirRetStatus csr_roam_scan_offload_populate_mac_header(tpAniSirGlobal pMac, uint8_t *pBD, @@ -16297,73 +16326,6 @@ csr_roam_scan_offload_prepare_probe_req_template(tpAniSirGlobal pMac, return eSIR_SUCCESS; } -#ifdef WLAN_FEATURE_ROAM_OFFLOAD -QDF_STATUS csr_roam_set_key_mgmt_offload(tpAniSirGlobal pMac, - uint32_t sessionId, - bool nRoamKeyMgmtOffloadEnabled) -{ - tCsrRoamSession *pSession = CSR_GET_SESSION(pMac, sessionId); - if (!pSession) { - sms_log(pMac, LOGE, FL("session %d not found"), sessionId); - return QDF_STATUS_E_FAILURE; - } - pSession->RoamKeyMgmtOffloadEnabled = nRoamKeyMgmtOffloadEnabled; - return QDF_STATUS_SUCCESS; -} - -/** - * csr_update_roam_scan_offload_request() - updates req msg with roam offload - * paramters - * @pMac: mac global context - * @req_buf: out param, roam offload scan request packet - * @session: roam session - * - * Return: void - */ -static void -csr_update_roam_scan_offload_request(tpAniSirGlobal mac_ctx, - tSirRoamOffloadScanReq *req_buf, - tCsrRoamSession *session) -{ - qdf_mem_copy(req_buf->PSK_PMK, session->psk_pmk, - sizeof(req_buf->PSK_PMK)); - req_buf->pmk_len = session->pmk_len; - QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_DEBUG, - "LFR3: PMK Length = %d", req_buf->pmk_len); - req_buf->R0KH_ID_Length = session->ftSmeContext.r0kh_id_len; - qdf_mem_copy(req_buf->R0KH_ID, - session->ftSmeContext.r0kh_id, - req_buf->R0KH_ID_Length); - req_buf->Prefer5GHz = mac_ctx->roam.configParam.nRoamPrefer5GHz; - req_buf->RoamRssiCatGap = mac_ctx->roam.configParam.bCatRssiOffset; - req_buf->Select5GHzMargin = mac_ctx->roam.configParam.nSelect5GHzMargin; - if (wlan_cfg_get_int(mac_ctx, WNI_CFG_REASSOCIATION_FAILURE_TIMEOUT, - (uint32_t *) &req_buf->ReassocFailureTimeout) - != eSIR_SUCCESS) { - sms_log(mac_ctx, LOGE, - FL("could not retrieve ReassocFailureTimeout value")); - req_buf->ReassocFailureTimeout = - DEFAULT_REASSOC_FAILURE_TIMEOUT; - } -#ifdef FEATURE_WLAN_ESE - if (csr_is_auth_type_ese(req_buf->ConnectedNetwork.authentication)) { - qdf_mem_copy(req_buf->KRK, session->eseCckmInfo.krk, - SIR_KRK_KEY_LEN); - qdf_mem_copy(req_buf->BTK, session->eseCckmInfo.btk, - SIR_BTK_KEY_LEN); - } -#endif - req_buf->AcUapsd.acbe_uapsd = - SIR_UAPSD_GET(ACBE, mac_ctx->lim.gUapsdPerAcBitmask); - req_buf->AcUapsd.acbk_uapsd = - SIR_UAPSD_GET(ACBK, mac_ctx->lim.gUapsdPerAcBitmask); - req_buf->AcUapsd.acvi_uapsd = - SIR_UAPSD_GET(ACVI, mac_ctx->lim.gUapsdPerAcBitmask); - req_buf->AcUapsd.acvo_uapsd = - SIR_UAPSD_GET(ACVO, mac_ctx->lim.gUapsdPerAcBitmask); -} -#endif /* WLAN_FEATURE_ROAM_OFFLOAD */ - /** * csr_check_band_channel_match() - check if passed band and channel match * paramters @@ -17120,6 +17082,7 @@ QDF_STATUS csr_roam_offload_scan_rsp_hdlr(tpAniSirGlobal pMac, } return QDF_STATUS_SUCCESS; } +#endif tCsrPeStatsReqInfo *csr_roam_check_pe_stats_req_list(tpAniSirGlobal pMac, uint32_t statsMask, @@ -18718,6 +18681,7 @@ void csr_roam_fill_tdls_info(tCsrRoamInfo *roam_info, tpSirSmeJoinRsp join_rsp) } #endif +#ifdef WLAN_FEATURE_ROAM_OFFLOAD /** * csr_roam_synch_callback() - SME level callback for roam synch propagation * @mac_ctx: MAC Context @@ -18980,3 +18944,4 @@ void csr_roam_synch_callback(tpAniSirGlobal mac_ctx, qdf_mem_free(roam_info); sme_release_global_lock(&mac_ctx->sme); } +#endif diff --git a/core/sme/src/csr/csr_inside_api.h b/core/sme/src/csr/csr_inside_api.h index 1e7ae4cdbc99..7bc3d3676fd7 100644 --- a/core/sme/src/csr/csr_inside_api.h +++ b/core/sme/src/csr/csr_inside_api.h @@ -997,12 +997,18 @@ QDF_STATUS csr_send_mb_get_wpspbc_sessions(tpAniSirGlobal pMac, QDF_STATUS csr_send_chng_mcc_beacon_interval(tpAniSirGlobal pMac, uint32_t sessionId); -/* --------------------------------------------------------------------------- - \fn csr_roam_ft_pre_auth_rsp_processor - \brief csr function that handles pre auth response from LIM - ---------------------------------------------------------------------------*/ +#ifdef WLAN_FEATURE_HOST_ROAM void csr_roam_ft_pre_auth_rsp_processor(tHalHandle hHal, - tpSirFTPreAuthRsp pFTPreAuthRsp); + tpSirFTPreAuthRsp pFTPreAuthRsp); +void csr_release_command_preauth(tpAniSirGlobal mac_ctx, tSmeCmd *command); +#else +static inline void csr_roam_ft_pre_auth_rsp_processor(tHalHandle hHal, + tpSirFTPreAuthRsp pFTPreAuthRsp) +{} +static inline void csr_release_command_preauth(tpAniSirGlobal mac_ctx, + tSmeCmd *command) +{} +#endif #if defined(FEATURE_WLAN_ESE) void update_cckmtsf(uint32_t *timeStamp0, uint32_t *timeStamp1, @@ -1058,4 +1064,3 @@ bool is_disconnect_pending(tpAniSirGlobal mac_ctx, void csr_scan_active_list_timeout_handle(void *userData); QDF_STATUS csr_prepare_disconnect_command(tpAniSirGlobal mac, uint32_t session_id, tSmeCmd **sme_cmd); -void csr_release_command_preauth(tpAniSirGlobal mac_ctx, tSmeCmd *command); diff --git a/core/sme/src/csr/csr_neighbor_roam.c b/core/sme/src/csr/csr_neighbor_roam.c index 469e788c76af..0a26228496d5 100644 --- a/core/sme/src/csr/csr_neighbor_roam.c +++ b/core/sme/src/csr/csr_neighbor_roam.c @@ -1647,9 +1647,9 @@ QDF_STATUS csr_neighbor_roam_indicate_connect( { tpCsrNeighborRoamControlInfo ngbr_roam_info = &pMac->roam.neighborRoamInfo[session_id]; + tCsrRoamSession *session = &pMac->roam.roamSession[session_id]; #ifdef WLAN_FEATURE_ROAM_OFFLOAD tCsrRoamInfo roamInfo; - tCsrRoamSession *session = &pMac->roam.roamSession[session_id]; tpSirSetActiveModeSetBncFilterReq msg; #endif QDF_STATUS status = QDF_STATUS_SUCCESS; diff --git a/core/wma/inc/wma.h b/core/wma/inc/wma.h index 4f21445d87cd..bf5933a1a82f 100644 --- a/core/wma/inc/wma.h +++ b/core/wma/inc/wma.h @@ -1334,12 +1334,14 @@ typedef struct { * the serialized MC thread context with a timer. */ qdf_mc_timer_t service_ready_ext_timer; +#ifdef WLAN_FEATURE_ROAM_OFFLOAD void (*csr_roam_synch_cb)(tpAniSirGlobal mac, roam_offload_synch_ind *roam_synch_data, tpSirBssDescription bss_desc_ptr, uint8_t reason); QDF_STATUS (*pe_roam_synch_cb)(tpAniSirGlobal mac, roam_offload_synch_ind *roam_synch_data, tpSirBssDescription bss_desc_ptr); +#endif qdf_wake_lock_t wmi_cmd_rsp_wake_lock; qdf_runtime_lock_t wmi_cmd_rsp_runtime_lock; qdf_runtime_lock_t wma_runtime_resume_lock; diff --git a/core/wma/inc/wma_internal.h b/core/wma/inc/wma_internal.h index d3c653a22037..6d2dd9acb7fc 100644 --- a/core/wma/inc/wma_internal.h +++ b/core/wma/inc/wma_internal.h @@ -395,10 +395,8 @@ wma_set_ssid_hotlist(tp_wma_handle wma, QDF_STATUS wma_ipa_offload_enable_disable(tp_wma_handle wma, struct sir_ipa_offload_enable_disable *ipa_offload); -#ifdef WLAN_FEATURE_ROAM_OFFLOAD void wma_process_unit_test_cmd(WMA_HANDLE handle, t_wma_unit_test_cmd * wma_utest); -#endif QDF_STATUS wma_scan_probe_setoui(tp_wma_handle wma, tSirScanMacOui *psetoui); diff --git a/core/wma/inc/wma_types.h b/core/wma/inc/wma_types.h index 12b7ff62c8d6..56575030e534 100644 --- a/core/wma/inc/wma_types.h +++ b/core/wma/inc/wma_types.h @@ -698,11 +698,24 @@ QDF_STATUS wma_register_mgmt_frm_client(void *p_cds_gctx, QDF_STATUS wma_de_register_mgmt_frm_client(void *p_cds_gctx); QDF_STATUS wma_register_roaming_callbacks(void *cds_ctx, +#ifdef WLAN_FEATURE_ROAM_OFFLOAD void (*csr_roam_synch_cb)(tpAniSirGlobal mac, roam_offload_synch_ind *roam_synch_data, tpSirBssDescription bss_desc_ptr, uint8_t reason), QDF_STATUS (*pe_roam_synch_cb)(tpAniSirGlobal mac, roam_offload_synch_ind *roam_synch_data, tpSirBssDescription bss_desc_ptr)); +#else +static inline CDF_STATUS wma_register_roaming_callbacks(void *cds_ctx, + void (*csr_roam_synch_cb)(tpAniSirGlobal mac, + roam_offload_synch_ind *roam_synch_data, + tpSirBssDescription bss_desc_ptr, uint8_t reason), + CDF_STATUS (*pe_roam_synch_cb)(tpAniSirGlobal mac, + roam_offload_synch_ind *roam_synch_data, + tpSirBssDescription bss_desc_ptr)) +{ + return CDF_STATUS_E_NOSUPPORT; +} +#endif #endif diff --git a/core/wma/src/wma_mgmt.c b/core/wma/src/wma_mgmt.c index c3bf626ab369..38dcfaf93b31 100644 --- a/core/wma/src/wma_mgmt.c +++ b/core/wma/src/wma_mgmt.c @@ -3062,6 +3062,7 @@ QDF_STATUS wma_de_register_mgmt_frm_client(void *cds_ctx) return QDF_STATUS_SUCCESS; } +#ifdef WLAN_FEATURE_ROAM_OFFLOAD /** * wma_register_roaming_callbacks() - Register roaming callbacks * @cds_ctx: CDS Context @@ -3093,6 +3094,8 @@ QDF_STATUS wma_register_roaming_callbacks(void *cds_ctx, WMA_LOGD("Registered roam synch callbacks with WMA successfully"); return QDF_STATUS_SUCCESS; } +#endif + /** * wma_register_mgmt_frm_client() - register management frame callback * @cds_ctx: cds context diff --git a/core/wma/src/wma_scan_roam.c b/core/wma/src/wma_scan_roam.c index 2196320a51a1..6f776835d919 100644 --- a/core/wma/src/wma_scan_roam.c +++ b/core/wma/src/wma_scan_roam.c @@ -2102,51 +2102,6 @@ cleanup_label: return 0; } -/** - * wma_rssi_breached_event_handler() - rssi breached event handler - * @handle: wma handle - * @cmd_param_info: event handler data - * @len: length of @cmd_param_info - * - * Return: 0 on success; error number otherwise - */ -int wma_rssi_breached_event_handler(void *handle, - u_int8_t *cmd_param_info, u_int32_t len) -{ - WMI_RSSI_BREACH_EVENTID_param_tlvs *param_buf; - wmi_rssi_breach_event_fixed_param *event; - struct rssi_breach_event rssi; - tpAniSirGlobal mac = cds_get_context(QDF_MODULE_ID_PE); - - if (!mac) { - WMA_LOGE("%s: Invalid mac context", __func__); - return -EINVAL; - } - if (!mac->sme.rssi_threshold_breached_cb) { - WMA_LOGE("%s: Callback not registered", __func__); - return -EINVAL; - } - param_buf = (WMI_RSSI_BREACH_EVENTID_param_tlvs *)cmd_param_info; - if (!param_buf) { - WMA_LOGE("%s: Invalid rssi breached event", __func__); - return -EINVAL; - } - event = param_buf->fixed_param; - - rssi.request_id = event->request_id; - rssi.session_id = event->vdev_id; - rssi.curr_rssi = event->rssi + WMA_TGT_NOISE_FLOOR_DBM; - WMI_MAC_ADDR_TO_CHAR_ARRAY(&event->bssid, rssi.curr_bssid.bytes); - - WMA_LOGD("%s: req_id: %u vdev_id: %d curr_rssi: %d", __func__, - rssi.request_id, rssi.session_id, rssi.curr_rssi); - WMA_LOGI("%s: curr_bssid: %pM", __func__, rssi.curr_bssid.bytes); - - mac->sme.rssi_threshold_breached_cb(mac->hHdd, &rssi); - WMA_LOGD("%s: Invoke HDD rssi breached callback", __func__); - return 0; -} - /** * wma_roam_scan_fill_self_caps() - fill capabilities * @wma_handle: wma handle @@ -2351,6 +2306,51 @@ void wma_set_ric_req(tp_wma_handle wma, void *msg, uint8_t is_add_ts) } #endif /* WLAN_FEATURE_ROAM_OFFLOAD */ +/** + * wma_rssi_breached_event_handler() - rssi breached event handler + * @handle: wma handle + * @cmd_param_info: event handler data + * @len: length of @cmd_param_info + * + * Return: 0 on success; error number otherwise + */ +int wma_rssi_breached_event_handler(void *handle, + u_int8_t *cmd_param_info, u_int32_t len) +{ + WMI_RSSI_BREACH_EVENTID_param_tlvs *param_buf; + wmi_rssi_breach_event_fixed_param *event; + struct rssi_breach_event rssi; + tpAniSirGlobal mac = cds_get_context(QDF_MODULE_ID_PE); + + if (!mac) { + WMA_LOGE("%s: Invalid mac context", __func__); + return -EINVAL; + } + if (!mac->sme.rssi_threshold_breached_cb) { + WMA_LOGE("%s: Callback not registered", __func__); + return -EINVAL; + } + param_buf = (WMI_RSSI_BREACH_EVENTID_param_tlvs *)cmd_param_info; + if (!param_buf) { + WMA_LOGE("%s: Invalid rssi breached event", __func__); + return -EINVAL; + } + event = param_buf->fixed_param; + + rssi.request_id = event->request_id; + rssi.session_id = event->vdev_id; + rssi.curr_rssi = event->rssi + WMA_TGT_NOISE_FLOOR_DBM; + WMI_MAC_ADDR_TO_CHAR_ARRAY(&event->bssid, rssi.curr_bssid.bytes); + + WMA_LOGD("%s: req_id: %u vdev_id: %d curr_rssi: %d", __func__, + rssi.request_id, rssi.session_id, rssi.curr_rssi); + WMA_LOGI("%s: curr_bssid: %pM", __func__, rssi.curr_bssid.bytes); + + mac->sme.rssi_threshold_breached_cb(mac->hHdd, &rssi); + WMA_LOGD("%s: Invoke HDD rssi breached callback", __func__); + return 0; +} + /** * wma_process_unit_test_cmd() - send unit test command to fw. * @handle: wma handle -- cgit v1.2.3