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
This commit is contained in:
Varun Reddy Yeturu
2016-02-29 14:01:57 -08:00
committed by Gerrit - the friendly Code Review server
parent 86459d63ca
commit bbbbe237f9
26 changed files with 523 additions and 317 deletions

26
Kbuild
View File

@@ -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

View File

@@ -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

View File

@@ -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) */

View File

@@ -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] = {

View File

@@ -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;

View File

@@ -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;

View File

@@ -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)

View File

@@ -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__ */

View File

@@ -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;

View File

@@ -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,

View File

@@ -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
/*------------------------------------------------------------------
*

View File

@@ -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;
}

View File

@@ -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);

View File

@@ -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,

View File

@@ -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 */

View File

@@ -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);

View File

@@ -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,

View File

@@ -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);

View File

@@ -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

View File

@@ -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);

View File

@@ -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;

View File

@@ -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;

View File

@@ -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);

View File

@@ -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

View File

@@ -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

View File

@@ -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