diff --git a/Kbuild b/Kbuild index f790060653..de03f8abba 100644 --- a/Kbuild +++ b/Kbuild @@ -640,11 +640,6 @@ ifeq ($(CONFIG_QCACLD_FEATURE_NAN), y) MAC_NDP_OBJS += $(MAC_SRC_DIR)/pe/nan/nan_datapath.o endif -#Temporarily enable ROAM_TARGET_IF_CONVERGENCE to enable wma to target_if roam -#convergence. It shall be reverted sometime soon by removing the define -#ROAM_TARGET_IF_CONVERGENCE usage and the legacy code(i.e. code in else part). -cppflags-y += -DROAM_TARGET_IF_CONVERGENCE - 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 \ diff --git a/components/mlme/core/src/wlan_mlme_vdev_mgr_interface.c b/components/mlme/core/src/wlan_mlme_vdev_mgr_interface.c index 3f946cf971..28467cf8e6 100644 --- a/components/mlme/core/src/wlan_mlme_vdev_mgr_interface.c +++ b/components/mlme/core/src/wlan_mlme_vdev_mgr_interface.c @@ -303,13 +303,8 @@ QDF_STATUS sta_mlme_vdev_notify_roam_start(struct vdev_mlme_obj *vdev_mlme, { mlme_legacy_debug("vdev id = %d ", vdev_mlme->vdev->vdev_objmgr.vdev_id); -#ifdef ROAM_TARGET_IF_CONVERGENCE return wlan_cm_sta_mlme_vdev_roam_notify(vdev_mlme, event_data_len, event_data); -#else - return wma_sta_mlme_vdev_roam_notify(vdev_mlme, event_data_len, - event_data); -#endif } /** diff --git a/components/target_if/connection_mgr/inc/target_if_cm_roam_event.h b/components/target_if/connection_mgr/inc/target_if_cm_roam_event.h index 5a702253e4..9e8a511efa 100644 --- a/components/target_if/connection_mgr/inc/target_if_cm_roam_event.h +++ b/components/target_if/connection_mgr/inc/target_if_cm_roam_event.h @@ -30,7 +30,6 @@ #include #ifdef WLAN_FEATURE_ROAM_OFFLOAD -#ifdef ROAM_TARGET_IF_CONVERGENCE /** * target_if_cm_roam_sync_event() - Target IF handler for roam sync events * @scn: target handle @@ -133,7 +132,6 @@ target_if_cm_roam_scan_chan_list_event_handler(ol_scn_t scn, uint8_t *event, int target_if_pmkid_request_event_handler(ol_scn_t scn, uint8_t *event, uint32_t len); -#endif /* ROAM_TARGET_IF_CONVERGENCE */ /** * target_if_cm_roam_register_rx_ops - Target IF API to register roam @@ -151,7 +149,6 @@ target_if_cm_roam_register_rx_ops(struct wlan_cm_roam_rx_ops *rx_ops) { } -#ifdef ROAM_TARGET_IF_CONVERGENCE static inline QDF_STATUS target_if_roam_offload_register_events(struct wlan_objmgr_psoc *psoc) @@ -185,6 +182,5 @@ target_if_pmkid_request_event_handler(ol_scn_t scn, uint8_t *event, { return 0; } -#endif /* ROAM_TARGET_IF_CONVERGENCE */ #endif /* WLAN_FEATURE_ROAM_OFFLOAD */ #endif diff --git a/components/target_if/connection_mgr/src/target_if_cm_roam_event.c b/components/target_if/connection_mgr/src/target_if_cm_roam_event.c index 445bff2827..c4b5704d36 100644 --- a/components/target_if/connection_mgr/src/target_if_cm_roam_event.c +++ b/components/target_if/connection_mgr/src/target_if_cm_roam_event.c @@ -53,7 +53,6 @@ target_if_cm_get_roam_rx_ops(struct wlan_objmgr_psoc *psoc) void target_if_cm_roam_register_rx_ops(struct wlan_cm_roam_rx_ops *rx_ops) { -#ifdef ROAM_TARGET_IF_CONVERGENCE rx_ops->roam_sync_event = cm_roam_sync_event_handler; rx_ops->roam_sync_frame_event = cm_roam_sync_frame_event_handler; rx_ops->roam_event_rx = cm_roam_event_handler; @@ -63,10 +62,8 @@ target_if_cm_roam_register_rx_ops(struct wlan_cm_roam_rx_ops *rx_ops) rx_ops->roam_stats_event_rx = cm_roam_stats_event_handler; rx_ops->roam_auth_offload_event = cm_roam_auth_offload_event_handler; rx_ops->roam_pmkid_request_event_rx = cm_roam_pmkid_request_handler; -#endif } -#ifdef ROAM_TARGET_IF_CONVERGENCE int target_if_cm_roam_sync_frame_event(ol_scn_t scn, uint8_t *event, @@ -613,4 +610,3 @@ target_if_roam_offload_register_events(struct wlan_objmgr_psoc *psoc) return QDF_STATUS_SUCCESS; } -#endif diff --git a/components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_fw_sync.c b/components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_fw_sync.c index 8275451b8e..ff131a94cf 100644 --- a/components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_fw_sync.c +++ b/components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_fw_sync.c @@ -1135,7 +1135,6 @@ void cm_fw_ho_fail_req(struct wlan_objmgr_psoc *psoc, } } -#ifdef ROAM_TARGET_IF_CONVERGENCE QDF_STATUS wlan_cm_free_roam_synch_frame_ind(struct rso_config *rso_cfg) { struct roam_synch_frame_ind *frame_ind; @@ -1163,4 +1162,3 @@ QDF_STATUS wlan_cm_free_roam_synch_frame_ind(struct rso_config *rso_cfg) return QDF_STATUS_SUCCESS; } -#endif /* ROAM_TARGET_IF_CONVERGENCE */ diff --git a/components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_offload_event.c b/components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_offload_event.c index 1c25fa2962..6d157df510 100644 --- a/components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_offload_event.c +++ b/components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_offload_event.c @@ -335,7 +335,6 @@ rel_ref: return status; } -#ifdef ROAM_TARGET_IF_CONVERGENCE QDF_STATUS cm_roam_sync_event_handler(struct wlan_objmgr_psoc *psoc, uint8_t *event, @@ -547,4 +546,3 @@ err: } return status; } -#endif /* ROAM_TARGET_IF_CONVERGENCE */ diff --git a/components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_api.h b/components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_api.h index ad43419209..41a8e91ece 100644 --- a/components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_api.h +++ b/components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_api.h @@ -972,7 +972,6 @@ QDF_STATUS cm_akm_roam_allowed(struct wlan_objmgr_psoc *psoc, struct wlan_objmgr_vdev *vdev); -#ifdef ROAM_TARGET_IF_CONVERGENCE /** * cm_invalid_roam_reason_handler() - Handler for invalid roam reason * @vdev_id: vdev id @@ -1065,8 +1064,6 @@ cm_roam_sync_frame_event_handler(struct wlan_objmgr_psoc *psoc, QDF_STATUS cm_roam_sync_event_handler_cb(struct wlan_objmgr_vdev *vdev, uint8_t *event, uint32_t len); -#endif /* ROAM_TARGET_IF_CONVERGENCE */ - #else static inline void wlan_cm_roam_activate_pcl_per_vdev(struct wlan_objmgr_psoc *psoc, @@ -1198,7 +1195,6 @@ cm_akm_roam_allowed(struct wlan_objmgr_psoc *psoc, return false; } -#ifdef ROAM_TARGET_IF_CONVERGENCE static inline void cm_handle_roam_reason_ho_failed(uint8_t vdev_id, struct qdf_mac_addr bssid, struct cm_hw_mode_trans_ind *hw_mode_trans_ind) @@ -1209,7 +1205,6 @@ cm_handle_scan_ch_list_data(struct cm_roam_scan_ch_resp *data) { return QDF_STATUS_E_NOSUPPORT; } -#endif #endif /* WLAN_FEATURE_ROAM_OFFLOAD */ #ifdef WLAN_FEATURE_FIPS @@ -1264,7 +1259,6 @@ QDF_STATUS wlan_get_chan_by_link_id_from_rnr(struct wlan_objmgr_vdev *vdev, uint8_t *chan, uint8_t *op_class); #endif -#ifdef ROAM_TARGET_IF_CONVERGENCE /** * cm_rso_cmd_status_event_handler() - Handler for rso cmd status * @vdev_id: vdev id @@ -1485,12 +1479,4 @@ wlan_cm_fw_to_host_phymode(WMI_HOST_WLAN_PHY_MODE phymode); QDF_STATUS wlan_cm_sta_mlme_vdev_roam_notify(struct vdev_mlme_obj *vdev_mlme, uint16_t data_len, void *data); -#else -static inline QDF_STATUS -wlan_cm_sta_mlme_vdev_roam_notify(struct vdev_mlme_obj *vdev_mlme, - uint16_t data_len, void *data) -{ - return QDF_STATUS_E_NOSUPPORT; -} -#endif /* ROAM_TARGET_IF_CONVERGENCE */ #endif /* WLAN_CM_ROAM_API_H__ */ diff --git a/components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_public_struct.h b/components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_public_struct.h index 7368030ea1..c3505068ac 100644 --- a/components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_public_struct.h +++ b/components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_public_struct.h @@ -1979,7 +1979,6 @@ enum roam_reason { ROAM_REASON_DEAUTH, }; -#ifdef ROAM_TARGET_IF_CONVERGENCE /* * struct roam_blacklist_timeout - BTM blacklist entry * @bssid: bssid that is to be blacklisted @@ -2061,7 +2060,6 @@ enum roam_dispatcher_events { ROAM_PMKID_REQ_EVENT, ROAM_VDEV_DISCONNECT_EVENT, }; -#endif /** * struct roam_offload_roam_event: Data carried by roam event @@ -2392,7 +2390,6 @@ struct wlan_cm_roam_rx_ops { QDF_STATUS (*roam_sync_frame_event)(struct wlan_objmgr_psoc *psoc, struct roam_synch_frame_ind *frm); QDF_STATUS (*roam_event_rx)(struct roam_offload_roam_event *roam_event); -#ifdef ROAM_TARGET_IF_CONVERGENCE QDF_STATUS (*btm_blacklist_event)(struct wlan_objmgr_psoc *psoc, struct roam_blacklist_event *list); QDF_STATUS @@ -2406,6 +2403,5 @@ struct wlan_cm_roam_rx_ops { (*roam_auth_offload_event)(struct auth_offload_event *auth_event); QDF_STATUS (*roam_pmkid_request_event_rx)(struct roam_pmkid_req_event *list); -#endif }; #endif diff --git a/components/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_roam_api.c b/components/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_roam_api.c index 080e49b80a..c1e45eba41 100644 --- a/components/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_roam_api.c +++ b/components/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_roam_api.c @@ -36,9 +36,7 @@ /* Support for "Fast roaming" (i.e., ESE, LFR, or 802.11r.) */ #define BG_SCAN_OCCUPIED_CHANNEL_LIST_LEN 15 -#ifdef ROAM_TARGET_IF_CONVERGENCE #define CM_MIN_RSSI 0 /* 0dbm */ -#endif #if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD) QDF_STATUS @@ -2319,7 +2317,6 @@ QDF_STATUS wlan_get_chan_by_link_id_from_rnr(struct wlan_objmgr_vdev *vdev, } #endif -#ifdef ROAM_TARGET_IF_CONVERGENCE QDF_STATUS wlan_cm_sta_mlme_vdev_roam_notify(struct vdev_mlme_obj *vdev_mlme, uint16_t data_len, void *data) { @@ -2331,9 +2328,7 @@ QDF_STATUS wlan_cm_sta_mlme_vdev_roam_notify(struct vdev_mlme_obj *vdev_mlme, #endif return status; } -#endif -#ifdef ROAM_TARGET_IF_CONVERGENCE #ifdef WLAN_FEATURE_ROAM_OFFLOAD static void cm_handle_roam_offload_events(struct roam_offload_roam_event *roam_event) @@ -2537,6 +2532,7 @@ cm_roam_scan_ch_list_event_handler(struct cm_roam_scan_ch_resp *data) return cm_handle_scan_ch_list_data(data); } +#ifdef WLAN_FEATURE_ROAM_OFFLOAD /** * cm_roam_stats_get_trigger_detail_str - Return roam trigger string from the * enum roam_trigger_reason @@ -3087,7 +3083,7 @@ err: qdf_mem_free(stats_info); return status; } -#endif /* ROAM_TARGET_IF_CONVERGENCE */ +#endif #ifdef WLAN_FEATURE_FIPS QDF_STATUS cm_roam_pmkid_req_ind(struct wlan_objmgr_psoc *psoc, diff --git a/components/wmi/inc/wmi_unified_roam_api.h b/components/wmi/inc/wmi_unified_roam_api.h index 28ffb89e27..7947a7d3dd 100644 --- a/components/wmi/inc/wmi_unified_roam_api.h +++ b/components/wmi/inc/wmi_unified_roam_api.h @@ -238,7 +238,6 @@ wmi_unified_send_roam_preauth_status(wmi_unified_t wmi_handle, QDF_STATUS wmi_unified_vdev_set_pcl_cmd(wmi_unified_t wmi_handle, struct set_pcl_cmd_params *params); -#ifdef ROAM_TARGET_IF_CONVERGENCE /** * wmi_extract_roam_sync_event - Extract roam sync event * @wmi_handle: WMI handle @@ -409,7 +408,6 @@ QDF_STATUS wmi_extract_roam_pmkid_request(wmi_unified_t wmi_handle, uint8_t *event, uint32_t data_len, struct roam_pmkid_req_event **data); -#endif /* ROAM_TARGET_IF_CONVERGENCE */ #endif /* WLAN_FEATURE_ROAM_OFFLOAD */ /** diff --git a/components/wmi/src/wmi_unified_roam_api.c b/components/wmi/src/wmi_unified_roam_api.c index cc9887c502..a46b4068d5 100644 --- a/components/wmi/src/wmi_unified_roam_api.c +++ b/components/wmi/src/wmi_unified_roam_api.c @@ -338,7 +338,6 @@ QDF_STATUS wmi_unified_set_roam_triggers(wmi_unified_t wmi_handle, return QDF_STATUS_E_FAILURE; } -#ifdef ROAM_TARGET_IF_CONVERGENCE QDF_STATUS wmi_extract_roam_sync_event(wmi_unified_t wmi_handle, void *evt_buf, uint32_t len, struct roam_offload_synch_ind **sync_ind) @@ -488,5 +487,4 @@ wmi_extract_roam_pmkid_request(wmi_unified_t wmi_handle, return QDF_STATUS_E_FAILURE; } -#endif /* ROAM_TARGET_IF_CONVERGENCE */ #endif diff --git a/components/wmi/src/wmi_unified_roam_tlv.c b/components/wmi/src/wmi_unified_roam_tlv.c index 030946e5fe..c94759c5f1 100644 --- a/components/wmi/src/wmi_unified_roam_tlv.c +++ b/components/wmi/src/wmi_unified_roam_tlv.c @@ -1798,7 +1798,6 @@ extract_roam_frame_info_tlv(wmi_unified_t wmi_handle, void *evt_buf, return QDF_STATUS_SUCCESS; } -#ifdef ROAM_TARGET_IF_CONVERGENCE static void wmi_extract_pdev_hw_mode_trans_ind( wmi_pdev_hw_mode_transition_event_fixed_param *fixed_param, @@ -2649,9 +2648,7 @@ extract_roam_event_tlv(wmi_unified_t wmi_handle, void *evt_buf, uint32_t len, end: return status; } -#endif -#ifdef ROAM_TARGET_IF_CONVERGENCE static enum blm_reject_ap_reason wmi_get_reject_reason(uint32_t reason) { switch (reason) { @@ -3245,7 +3242,6 @@ extract_roam_pmkid_request_tlv(wmi_unified_t wmi_handle, uint8_t *evt_buf, return QDF_STATUS_SUCCESS; } -#endif void wmi_roam_offload_attach_tlv(wmi_unified_t wmi_handle) { @@ -3256,7 +3252,6 @@ void wmi_roam_offload_attach_tlv(wmi_unified_t wmi_handle) ops->extract_roam_initial_info = extract_roam_initial_info_tlv; ops->extract_roam_msg_info = extract_roam_msg_info_tlv; ops->extract_roam_frame_info = extract_roam_frame_info_tlv; -#ifdef ROAM_TARGET_IF_CONVERGENCE ops->extract_roam_sync_event = extract_roam_sync_event_tlv; ops->extract_roam_sync_frame_event = extract_roam_sync_frame_event_tlv; ops->extract_roam_event = extract_roam_event_tlv; @@ -3266,7 +3261,6 @@ void wmi_roam_offload_attach_tlv(wmi_unified_t wmi_handle) ops->extract_roam_stats_event = extract_roam_stats_event_tlv; ops->extract_auth_offload_event = extract_auth_offload_event_tlv; ops->extract_roam_pmkid_request = extract_roam_pmkid_request_tlv; -#endif /* ROAM_TARGET_IF_CONVERGENCE */ ops->send_set_ric_req_cmd = send_set_ric_req_cmd_tlv; ops->send_process_roam_synch_complete_cmd = send_process_roam_synch_complete_cmd_tlv; @@ -3297,7 +3291,6 @@ extract_roam_msg_info_tlv(wmi_unified_t wmi_handle, void *evt_buf, return QDF_STATUS_E_NOSUPPORT; } -#ifdef ROAM_TARGET_IF_CONVERGENCE static inline QDF_STATUS extract_roam_sync_event(wmi_unified_t wmi_handle, void *evt_buf, uint32_t len, @@ -3319,7 +3312,6 @@ extract_roam_event(wmi_unified_t wmi_handle, void *evt_buf, uint32_t len, { return QDF_STATUS_E_NOSUPPORT; } -#endif /* ROAM_TARGET_IF_CONVERGENCE */ #endif /* WLAN_FEATURE_ROAM_OFFLOAD */ #define ROAM_OFFLOAD_PMK_EXT_BYTES 16 diff --git a/core/mac/src/include/sir_params.h b/core/mac/src/include/sir_params.h index 7a9bb3df78..423a1f486f 100644 --- a/core/mac/src/include/sir_params.h +++ b/core/mac/src/include/sir_params.h @@ -617,9 +617,6 @@ enum halmsgtype { SIR_HAL_SEND_BCN_RSP = (SIR_HAL_ITC_MSG_TYPES_BEGIN + 401), SIR_HAL_CFG_VENDOR_ACTION_TB_PPDU = (SIR_HAL_ITC_MSG_TYPES_BEGIN + 402), SIR_HAL_BEACON_DEBUG_STATS_REQ = (SIR_HAL_ITC_MSG_TYPES_BEGIN + 403), -#ifndef ROAM_TARGET_IF_CONVERGENCE - SIR_HAL_ROAM_BLACKLIST_MSG = (SIR_HAL_ITC_MSG_TYPES_BEGIN + 404), -#endif #ifdef WLAN_FEATURE_MOTION_DETECTION SIR_HAL_SET_MOTION_DET_CONFIG = (SIR_HAL_ITC_MSG_TYPES_BEGIN + 405), diff --git a/core/mac/src/pe/lim/lim_process_message_queue.c b/core/mac/src/pe/lim/lim_process_message_queue.c index d951c61787..bea9090a9e 100644 --- a/core/mac/src/pe/lim/lim_process_message_queue.c +++ b/core/mac/src/pe/lim/lim_process_message_queue.c @@ -2085,15 +2085,6 @@ static void lim_process_messages(struct mac_context *mac_ctx, qdf_mem_free((void *)msg->bodyptr); msg->bodyptr = NULL; break; -#ifndef ROAM_TARGET_IF_CONVERGENCE - case WMA_ROAM_BLACKLIST_MSG: - lim_add_roam_blacklist_ap(mac_ctx, - (struct roam_blacklist_event *) - msg->bodyptr); - qdf_mem_free((void *)msg->bodyptr); - msg->bodyptr = NULL; - break; -#endif case SIR_LIM_PROCESS_DEFERRED_QUEUE: break; case CM_BSS_PEER_CREATE_REQ: diff --git a/core/mac/src/pe/lim/lim_process_sme_req_messages.c b/core/mac/src/pe/lim/lim_process_sme_req_messages.c index bf1527495a..95e221ae6f 100644 --- a/core/mac/src/pe/lim/lim_process_sme_req_messages.c +++ b/core/mac/src/pe/lim/lim_process_sme_req_messages.c @@ -9213,43 +9213,3 @@ void lim_continue_sta_csa_req(struct mac_context *mac_ctx, uint8_t vdev_id) pe_info("Continue CSA for STA vdev id %d", vdev_id); lim_process_channel_switch(mac_ctx, vdev_id); } - -#ifndef ROAM_TARGET_IF_CONVERGENCE -void lim_add_roam_blacklist_ap(struct mac_context *mac_ctx, - struct roam_blacklist_event *src_lst) -{ - uint32_t i; - struct sir_rssi_disallow_lst entry; - struct roam_blacklist_timeout *blacklist; - - pe_debug("Received Blacklist event from FW num entries %d", - src_lst->num_entries); - blacklist = &src_lst->roam_blacklist[0]; - for (i = 0; i < src_lst->num_entries; i++) { - - entry.bssid = blacklist->bssid; - entry.time_during_rejection = blacklist->received_time; - entry.reject_reason = blacklist->reject_reason; - entry.source = blacklist->source ? blacklist->source : - ADDED_BY_TARGET; - entry.original_timeout = blacklist->original_timeout; - entry.received_time = blacklist->received_time; - /* If timeout = 0 and rssi = 0 ignore the entry */ - if (!blacklist->timeout && !blacklist->rssi) { - continue; - } else if (blacklist->timeout) { - entry.retry_delay = blacklist->timeout; - /* set 0dbm as expected rssi */ - entry.expected_rssi = LIM_MIN_RSSI; - } else { - /* blacklist timeout as 0 */ - entry.retry_delay = blacklist->timeout; - entry.expected_rssi = blacklist->rssi; - } - - /* Add this bssid to the rssi reject ap type in blacklist mgr */ - lim_add_bssid_to_reject_list(mac_ctx->pdev, &entry); - blacklist++; - } -} -#endif diff --git a/core/mac/src/pe/lim/lim_types.h b/core/mac/src/pe/lim/lim_types.h index ba2e8462ef..ccb5d64047 100644 --- a/core/mac/src/pe/lim/lim_types.h +++ b/core/mac/src/pe/lim/lim_types.h @@ -120,9 +120,6 @@ enum mlmmsgtype { #define MGMT_TX_USE_INCORRECT_KEY BIT(0) #define LIM_DOS_PROTECTION_TIME 1000 //1000ms -#ifndef ROAM_TARGET_IF_CONVERGENCE -#define LIM_MIN_RSSI 0 /* 0dbm */ -#endif /* enums used by LIM are as follows */ enum eLimDisassocTrigger { @@ -1241,19 +1238,6 @@ QDF_STATUS lim_process_sme_del_all_tdls_peers(struct mac_context *p_mac, */ void lim_send_bcn_rsp(struct mac_context *mac_ctx, tpSendbeaconParams rsp); -#ifndef ROAM_TARGET_IF_CONVERGENCE -/** - * lim_add_roam_blacklist_ap() - handle the blacklist bssid list received from - * firmware - * @mac_ctx: Pointer to Global MAC structure - * @list: roam blacklist ap list - * - * Return: None - */ -void lim_add_roam_blacklist_ap(struct mac_context *mac_ctx, - struct roam_blacklist_event *src_lst); -#endif - /** * lim_process_rx_channel_status_event() - processes * event WDA_RX_CHN_STATUS_EVENT diff --git a/core/wma/inc/wma_api.h b/core/wma/inc/wma_api.h index b0b14b660c..88bd2b3fea 100644 --- a/core/wma/inc/wma_api.h +++ b/core/wma/inc/wma_api.h @@ -566,21 +566,6 @@ bool wma_get_channel_switch_in_progress(struct wma_txrx_node *iface); QDF_STATUS wma_sta_mlme_vdev_start_continue(struct vdev_mlme_obj *vdev_mlme, uint16_t data_len, void *data); -#ifndef ROAM_TARGET_IF_CONVERGENCE -/** - * wma_sta_mlme_vdev_roam_notify() - VDEV roam notify handling - * @vdev_mlme_obj: VDEV MLME comp object - * @data_len: data size - * @data: event data - * - * API invokes VDEV roam event handling - * - * Return: SUCCESS on successful completion of roam event handling - * FAILURE, if it fails due to any - */ -QDF_STATUS wma_sta_mlme_vdev_roam_notify(struct vdev_mlme_obj *vdev_mlme, - uint16_t data_len, void *data); -#endif /** * wma_ap_mlme_vdev_start_continue() - VDEV start response handling * @vdev_mlme_obj: VDEV MLME comp object diff --git a/core/wma/inc/wma_if.h b/core/wma/inc/wma_if.h index 0604172308..47003a6566 100644 --- a/core/wma/inc/wma_if.h +++ b/core/wma/inc/wma_if.h @@ -781,35 +781,4 @@ typedef struct sStatsExtRequest { } tStatsExtRequest, *tpStatsExtRequest; #endif /* WLAN_FEATURE_STATS_EXT */ -#ifndef ROAM_TARGET_IF_CONVERGENCE -/* - * struct roam_blacklist_timeout - BTM blacklist entry - * @bssid - bssid that is to be blacklisted - * @timeout - time duration for which the bssid is blacklisted - * @received_time - boot timestamp at which the firmware event was received - * @rssi - rssi value for which the bssid is blacklisted - * @reject_reason: reason to add the BSSID to BLM - * @original_timeout: original timeout sent by the AP - * @source: Source of adding the BSSID to BLM - */ -struct roam_blacklist_timeout { - struct qdf_mac_addr bssid; - uint32_t timeout; - qdf_time_t received_time; - int32_t rssi; - enum blm_reject_ap_reason reject_reason; - uint32_t original_timeout; - enum blm_reject_ap_source source; -}; - -/* - * struct roam_blacklist_event - Blacklist event entries destination structure - * @num_entries: total entries sent over the event - * @roam_blacklist: blacklist details - */ -struct roam_blacklist_event { - uint32_t num_entries; - struct roam_blacklist_timeout roam_blacklist[]; -}; -#endif #endif /* _HALMSGAPI_H_ */ diff --git a/core/wma/inc/wma_internal.h b/core/wma/inc/wma_internal.h index 7d3676dbbf..166521ca98 100644 --- a/core/wma/inc/wma_internal.h +++ b/core/wma/inc/wma_internal.h @@ -247,34 +247,7 @@ int wma_roam_auth_offload_event_handler(WMA_HANDLE handle, uint8_t *event, */ int wma_roam_stats_event_handler(WMA_HANDLE handle, uint8_t *event, uint32_t len); -#ifndef ROAM_TARGET_IF_CONVERGENCE -/** - * wma_mlme_roam_synch_event_handler_cb() - roam synch event handler - * @handle: wma handle - * @event: event data - * @len: length of data - * - * This function is roam synch event handler. It sends roam - * indication for upper layer. - * - * Return: Success or Failure status - */ -int wma_mlme_roam_synch_event_handler_cb(void *handle, uint8_t *event, - uint32_t len); -/** - * wma_roam_synch_frame_event_handler() - roam synch frame event handler - * @handle: wma handle - * @event: event data - * @len: length of data - * - * This function is roam synch frame event handler. - * - * Return: Success or Failure status - */ -int wma_roam_synch_frame_event_handler(void *handle, uint8_t *event, - uint32_t len); -#endif /* ROAM_TARGET_IF_CONVERGENCE */ /** * wma_roam_vdev_disconnect_event_handler() - Handles roam vdev disconnect event * @handle: wma_handle diff --git a/core/wma/inc/wma_types.h b/core/wma/inc/wma_types.h index f5da5c45e1..5ff5490a11 100644 --- a/core/wma/inc/wma_types.h +++ b/core/wma/inc/wma_types.h @@ -396,9 +396,6 @@ enum wmamsgtype { WMA_POWER_DEBUG_STATS_REQ = SIR_HAL_POWER_DEBUG_STATS_REQ, WMA_BEACON_DEBUG_STATS_REQ = SIR_HAL_BEACON_DEBUG_STATS_REQ, WMA_GET_RCPI_REQ = SIR_HAL_GET_RCPI_REQ, -#ifndef ROAM_TARGET_IF_CONVERGENCE - WMA_ROAM_BLACKLIST_MSG = SIR_HAL_ROAM_BLACKLIST_MSG, -#endif WMA_SET_DBS_SCAN_SEL_CONF_PARAMS = SIR_HAL_SET_DBS_SCAN_SEL_PARAMS, WMA_SET_WOW_PULSE_CMD = SIR_HAL_SET_WOW_PULSE_CMD, diff --git a/core/wma/src/wma_features.c b/core/wma/src/wma_features.c index b84f4dc5b6..24b7a8dd55 100644 --- a/core/wma/src/wma_features.c +++ b/core/wma/src/wma_features.c @@ -2743,13 +2743,8 @@ static int wma_wake_event_piggybacked( NULL, NULL, wake_reason, pb_event_len); if (pb_event_len > 0) { -#ifdef ROAM_TARGET_IF_CONVERGENCE errno = target_if_cm_roam_event(wma, pb_event, pb_event_len); -#else - errno = wma_roam_event_callback(wma, pb_event, - pb_event_len); -#endif } else { /* * No wow_packet_buffer means a better AP beacon @@ -2812,23 +2807,13 @@ static int wma_wake_event_piggybacked( break; case WOW_REASON_ROAM_PMKID_REQUEST: wma_debug("Host woken up because of PMKID request event"); -#ifndef ROAM_TARGET_IF_CONVERGENCE - errno = wma_roam_pmkid_request_event_handler(wma, pb_event, - pb_event_len); -#else errno = target_if_pmkid_request_event_handler(wma, pb_event, pb_event_len); -#endif break; case WOW_REASON_VDEV_DISCONNECT: wma_debug("Host woken up because of vdev disconnect event"); -#ifndef ROAM_TARGET_IF_CONVERGENCE - errno = wma_roam_vdev_disconnect_event_handler(wma, pb_event, - pb_event_len); -#else errno = target_if_cm_roam_vdev_disconnect_event_handler(wma, pb_event, pb_event_len); -#endif break; default: wma_err("Wake reason %s(%u) is not a piggybacked event", diff --git a/core/wma/src/wma_main.c b/core/wma/src/wma_main.c index df827a93a7..44ceae6130 100644 --- a/core/wma/src/wma_main.c +++ b/core/wma/src/wma_main.c @@ -3083,9 +3083,7 @@ QDF_STATUS wma_open(struct wlan_objmgr_psoc *psoc, /* Register Converged Event handlers */ init_deinit_register_tgt_psoc_ev_handlers(psoc); -#ifdef ROAM_TARGET_IF_CONVERGENCE target_if_roam_offload_register_events(psoc); -#endif /* ROAM_TARGET_IF_CONVERGENCE */ /* Initialize max_no_of_peers for wma_get_number_of_peers_supported() */ cds_cfg->max_station = wma_init_max_no_of_peers(wma_handle, @@ -3345,45 +3343,6 @@ QDF_STATUS wma_open(struct wlan_objmgr_psoc *psoc, wma_register_extscan_event_handler(wma_handle); #endif /* WLAN_FEATURE_STATS_EXT */ -#ifdef WLAN_FEATURE_ROAM_OFFLOAD -#ifndef ROAM_TARGET_IF_CONVERGENCE - wmi_unified_register_event_handler(wma_handle->wmi_handle, - wmi_roam_synch_event_id, - wma_roam_synch_event_handler, - WMA_RX_SERIALIZER_CTX); - wmi_unified_register_event_handler(wma_handle->wmi_handle, - wmi_roam_synch_frame_event_id, - wma_roam_synch_frame_event_handler, - WMA_RX_SERIALIZER_CTX); - - wmi_unified_register_event_handler(wma_handle->wmi_handle, - wmi_roam_blacklist_event_id, - wma_handle_btm_blacklist_event, - WMA_RX_SERIALIZER_CTX); - - wmi_unified_register_event_handler(wma_handle->wmi_handle, - wmi_vdev_disconnect_event_id, - wma_roam_vdev_disconnect_event_handler, - WMA_RX_SERIALIZER_CTX); - - wmi_unified_register_event_handler(wma_handle->wmi_handle, - wmi_roam_scan_chan_list_id, - wma_roam_scan_chan_list_event_handler, - WMA_RX_SERIALIZER_CTX); - - wmi_unified_register_event_handler(wma_handle->wmi_handle, - wmi_roam_stats_event_id, - wma_roam_stats_event_handler, - WMA_RX_SERIALIZER_CTX); - - wmi_unified_register_event_handler(wma_handle->wmi_handle, - wmi_roam_auth_offload_event_id, - wma_roam_auth_offload_event_handler, - WMA_RX_SERIALIZER_CTX); - wma_register_pmkid_req_event_handler(wma_handle); -#endif /* ROAM_TARGET_IF_CONVERGENCE */ - -#endif /* WLAN_FEATURE_ROAM_OFFLOAD */ wmi_unified_register_event_handler(wma_handle->wmi_handle, wmi_rssi_breach_event_id, wma_rssi_breached_event_handler, @@ -4140,18 +4099,6 @@ QDF_STATUS wma_start(void) goto end; } -#ifndef ROAM_TARGET_IF_CONVERGENCE - qdf_status = wmi_unified_register_event_handler(wmi_handle, - wmi_roam_event_id, - wma_roam_event_callback, - WMA_RX_SERIALIZER_CTX); - if (QDF_IS_STATUS_ERROR(qdf_status)) { - wma_err("Failed to register Roam callback"); - qdf_status = QDF_STATUS_E_FAILURE; - goto end; - } -#endif - qdf_status = wmi_unified_register_event_handler(wmi_handle, wmi_wow_wakeup_host_event_id, wma_wow_wakeup_host_event, diff --git a/core/wma/src/wma_scan_roam.c b/core/wma/src/wma_scan_roam.c index e7536afdfd..d00bd62d01 100644 --- a/core/wma/src/wma_scan_roam.c +++ b/core/wma/src/wma_scan_roam.c @@ -267,7 +267,6 @@ static void wma_handle_disconnect_reason(tp_wma_handle wma_handle, } #ifdef WLAN_FEATURE_ROAM_OFFLOAD -#ifdef ROAM_TARGET_IF_CONVERGENCE QDF_STATUS cm_handle_auth_offload(struct auth_offload_event *auth_event) { @@ -343,51 +342,6 @@ cm_handle_scan_ch_list_data(struct cm_roam_scan_ch_resp *data) return QDF_STATUS_SUCCESS; } -#else - -int wma_roam_vdev_disconnect_event_handler(void *handle, uint8_t *event, - uint32_t len) -{ - WMI_VDEV_DISCONNECT_EVENTID_param_tlvs *param_buf; - wmi_vdev_disconnect_event_fixed_param *roam_vdev_disc_ev; - tp_wma_handle wma = (tp_wma_handle)handle; - - if (!event) { - wma_err("received null event from target"); - return -EINVAL; - } - - param_buf = (WMI_VDEV_DISCONNECT_EVENTID_param_tlvs *)event; - - roam_vdev_disc_ev = param_buf->fixed_param; - if (!roam_vdev_disc_ev) { - wma_err("roam cap event is NULL"); - return -EINVAL; - } - if (roam_vdev_disc_ev->vdev_id >= wma->max_bssid) { - wma_err("Invalid vdev id %d", roam_vdev_disc_ev->vdev_id); - return -EINVAL; - } - - wma_debug("Received disconnect roam event on vdev_id : %d, reason:%d", - roam_vdev_disc_ev->vdev_id, roam_vdev_disc_ev->reason); - - switch (roam_vdev_disc_ev->reason) { - case WLAN_DISCONNECT_REASON_CSA_SA_QUERY_TIMEOUT: - wma_handle_disconnect_reason(wma, roam_vdev_disc_ev->vdev_id, - HAL_DEL_STA_REASON_CODE_SA_QUERY_TIMEOUT); - break; - case WLAN_DISCONNECT_REASON_MOVE_TO_CELLULAR: - wma_handle_disconnect_reason(wma, roam_vdev_disc_ev->vdev_id, - HAL_DEL_STA_REASON_CODE_BTM_DISASSOC_IMMINENT); - break; - default: - return 0; - } - - return 0; -} -#endif #endif /** @@ -575,348 +529,6 @@ wma_send_roam_preauth_status(tp_wma_handle wma_handle, #endif #ifdef WLAN_FEATURE_ROAM_OFFLOAD -#ifndef ROAM_TARGET_IF_CONVERGENCE -/** - * wma_free_roam_synch_frame_ind() - Free the bcn_probe_rsp, reassoc_req, - * reassoc_rsp received as part of the ROAM_SYNC_FRAME event - * - * @iface - interaface corresponding to a vdev - * - * This API is used to free the buffer allocated during the ROAM_SYNC_FRAME - * event - * - */ -static void wma_free_roam_synch_frame_ind(struct wma_txrx_node *iface) -{ - if (iface->roam_synch_frame_ind.bcn_probe_rsp) { - qdf_mem_free(iface->roam_synch_frame_ind.bcn_probe_rsp); - iface->roam_synch_frame_ind.bcn_probe_rsp_len = 0; - iface->roam_synch_frame_ind.bcn_probe_rsp = NULL; - } - if (iface->roam_synch_frame_ind.reassoc_req) { - qdf_mem_free(iface->roam_synch_frame_ind.reassoc_req); - iface->roam_synch_frame_ind.reassoc_req_len = 0; - iface->roam_synch_frame_ind.reassoc_req = NULL; - } - if (iface->roam_synch_frame_ind.reassoc_rsp) { - qdf_mem_free(iface->roam_synch_frame_ind.reassoc_rsp); - iface->roam_synch_frame_ind.reassoc_rsp_len = 0; - iface->roam_synch_frame_ind.reassoc_rsp = NULL; - } -} - -/** - * wma_fill_data_synch_frame_event() - Fill the the roam sync data buffer using - * synch frame event data - * @wma: Global WMA Handle - * @roam_synch_ind_ptr: Buffer to be filled - * @param_buf: Source buffer - * - * Firmware sends all the required information required for roam - * synch propagation as TLV's and stored in param_buf. These - * parameters are parsed and filled into the roam synch indication - * buffer which will be used at different layers for propagation. - * - * Return: None - */ -static void wma_fill_data_synch_frame_event(tp_wma_handle wma, - struct roam_offload_synch_ind *roam_synch_ind_ptr, - struct wma_txrx_node *iface) -{ - uint8_t *bcn_probersp_ptr; - uint8_t *reassoc_rsp_ptr; - uint8_t *reassoc_req_ptr; - - /* Beacon/Probe Rsp data */ - roam_synch_ind_ptr->beaconProbeRespOffset = - sizeof(struct roam_offload_synch_ind); - bcn_probersp_ptr = (uint8_t *) roam_synch_ind_ptr + - roam_synch_ind_ptr->beaconProbeRespOffset; - roam_synch_ind_ptr->beaconProbeRespLength = - iface->roam_synch_frame_ind.bcn_probe_rsp_len; - qdf_mem_copy(bcn_probersp_ptr, - iface->roam_synch_frame_ind.bcn_probe_rsp, - roam_synch_ind_ptr->beaconProbeRespLength); - qdf_mem_free(iface->roam_synch_frame_ind.bcn_probe_rsp); - iface->roam_synch_frame_ind.bcn_probe_rsp = NULL; - - /* ReAssoc Rsp data */ - roam_synch_ind_ptr->reassocRespOffset = - sizeof(struct roam_offload_synch_ind) + - roam_synch_ind_ptr->beaconProbeRespLength; - roam_synch_ind_ptr->reassocRespLength = - iface->roam_synch_frame_ind.reassoc_rsp_len; - reassoc_rsp_ptr = (uint8_t *) roam_synch_ind_ptr + - roam_synch_ind_ptr->reassocRespOffset; - qdf_mem_copy(reassoc_rsp_ptr, - iface->roam_synch_frame_ind.reassoc_rsp, - roam_synch_ind_ptr->reassocRespLength); - qdf_mem_free(iface->roam_synch_frame_ind.reassoc_rsp); - iface->roam_synch_frame_ind.reassoc_rsp = NULL; - - /* ReAssoc Req data */ - roam_synch_ind_ptr->reassoc_req_offset = - sizeof(struct roam_offload_synch_ind) + - roam_synch_ind_ptr->beaconProbeRespLength + - roam_synch_ind_ptr->reassocRespLength; - roam_synch_ind_ptr->reassoc_req_length = - iface->roam_synch_frame_ind.reassoc_req_len; - reassoc_req_ptr = (uint8_t *) roam_synch_ind_ptr + - roam_synch_ind_ptr->reassoc_req_offset; - qdf_mem_copy(reassoc_req_ptr, - iface->roam_synch_frame_ind.reassoc_req, - roam_synch_ind_ptr->reassoc_req_length); - qdf_mem_free(iface->roam_synch_frame_ind.reassoc_req); - iface->roam_synch_frame_ind.reassoc_req = NULL; -} - -/** - * wma_fill_data_synch_event() - Fill the the roam sync data buffer using synch - * event data - * @wma: Global WMA Handle - * @roam_synch_ind_ptr: Buffer to be filled - * @param_buf: Source buffer - * - * Firmware sends all the required information required for roam - * synch propagation as TLV's and stored in param_buf. These - * parameters are parsed and filled into the roam synch indication - * buffer which will be used at different layers for propagation. - * - * Return: None - */ -static void wma_fill_data_synch_event(tp_wma_handle wma, - struct roam_offload_synch_ind *roam_synch_ind_ptr, - WMI_ROAM_SYNCH_EVENTID_param_tlvs *param_buf) -{ - uint8_t *bcn_probersp_ptr; - uint8_t *reassoc_rsp_ptr; - uint8_t *reassoc_req_ptr; - wmi_roam_synch_event_fixed_param *synch_event; - - synch_event = param_buf->fixed_param; - - /* Beacon/Probe Rsp data */ - roam_synch_ind_ptr->beaconProbeRespOffset = - sizeof(struct roam_offload_synch_ind); - bcn_probersp_ptr = (uint8_t *) roam_synch_ind_ptr + - roam_synch_ind_ptr->beaconProbeRespOffset; - roam_synch_ind_ptr->beaconProbeRespLength = - synch_event->bcn_probe_rsp_len; - qdf_mem_copy(bcn_probersp_ptr, param_buf->bcn_probe_rsp_frame, - roam_synch_ind_ptr->beaconProbeRespLength); - /* ReAssoc Rsp data */ - roam_synch_ind_ptr->reassocRespOffset = - sizeof(struct roam_offload_synch_ind) + - roam_synch_ind_ptr->beaconProbeRespLength; - roam_synch_ind_ptr->reassocRespLength = synch_event->reassoc_rsp_len; - reassoc_rsp_ptr = (uint8_t *) roam_synch_ind_ptr + - roam_synch_ind_ptr->reassocRespOffset; - qdf_mem_copy(reassoc_rsp_ptr, - param_buf->reassoc_rsp_frame, - roam_synch_ind_ptr->reassocRespLength); - - /* ReAssoc Req data */ - roam_synch_ind_ptr->reassoc_req_offset = - sizeof(struct roam_offload_synch_ind) + - roam_synch_ind_ptr->beaconProbeRespLength + - roam_synch_ind_ptr->reassocRespLength; - roam_synch_ind_ptr->reassoc_req_length = synch_event->reassoc_req_len; - reassoc_req_ptr = (uint8_t *) roam_synch_ind_ptr + - roam_synch_ind_ptr->reassoc_req_offset; - qdf_mem_copy(reassoc_req_ptr, param_buf->reassoc_req_frame, - roam_synch_ind_ptr->reassoc_req_length); -} - -/** - * wma_fill_roam_synch_buffer() - Fill the the roam sync buffer - * @wma: Global WMA Handle - * @roam_synch_ind_ptr: Buffer to be filled - * @param_buf: Source buffer - * - * Firmware sends all the required information required for roam - * synch propagation as TLV's and stored in param_buf. These - * parameters are parsed and filled into the roam synch indication - * buffer which will be used at different layers for propagation. - * - * Return: Success or Failure - */ -static int wma_fill_roam_synch_buffer(tp_wma_handle wma, - struct roam_offload_synch_ind *roam_synch_ind_ptr, - WMI_ROAM_SYNCH_EVENTID_param_tlvs *param_buf) -{ - wmi_roam_synch_event_fixed_param *synch_event; - wmi_channel *chan; - wmi_key_material *key; - wmi_key_material_ext *key_ft; - struct wma_txrx_node *iface = NULL; - wmi_roam_fils_synch_tlv_param *fils_info; - wmi_roam_pmk_cache_synch_tlv_param *pmk_cache_info; - int status = -EINVAL; - uint8_t kck_len; - uint8_t kek_len; - - synch_event = param_buf->fixed_param; - roam_synch_ind_ptr->roamed_vdev_id = synch_event->vdev_id; - roam_synch_ind_ptr->auth_status = synch_event->auth_status; - roam_synch_ind_ptr->roam_reason = synch_event->roam_reason; - roam_synch_ind_ptr->rssi = synch_event->rssi; - iface = &wma->interfaces[synch_event->vdev_id]; - WMI_MAC_ADDR_TO_CHAR_ARRAY(&synch_event->bssid, - roam_synch_ind_ptr->bssid.bytes); - wma_debug("roamedVdevId %d authStatus %d roamReason %d rssi %d isBeacon %d", - roam_synch_ind_ptr->roamed_vdev_id, - roam_synch_ind_ptr->auth_status, - roam_synch_ind_ptr->roam_reason, - roam_synch_ind_ptr->rssi, - roam_synch_ind_ptr->isBeacon); - - if (!QDF_IS_STATUS_SUCCESS( - cm_fw_roam_sync_start_ind(iface->vdev, - roam_synch_ind_ptr->roam_reason))) - { - wma_err("LFR3: CSR Roam synch cb failed"); - wma_free_roam_synch_frame_ind(iface); - return status; - } - - /* - * If lengths of bcn_probe_rsp, reassoc_req and reassoc_rsp are zero in - * synch_event driver would have received bcn_probe_rsp, reassoc_req - * and reassoc_rsp via the event WMI_ROAM_SYNCH_FRAME_EVENTID - */ - if ((!synch_event->bcn_probe_rsp_len) && - (!synch_event->reassoc_req_len) && - (!synch_event->reassoc_rsp_len)) { - if (!iface->roam_synch_frame_ind.bcn_probe_rsp) { - wma_err("LFR3: bcn_probe_rsp is NULL"); - QDF_ASSERT(iface->roam_synch_frame_ind. - bcn_probe_rsp); - wma_free_roam_synch_frame_ind(iface); - return status; - } - if (!iface->roam_synch_frame_ind.reassoc_rsp) { - wma_err("LFR3: reassoc_rsp is NULL"); - QDF_ASSERT(iface->roam_synch_frame_ind. - reassoc_rsp); - wma_free_roam_synch_frame_ind(iface); - return status; - } - if (!iface->roam_synch_frame_ind.reassoc_req) { - wma_err("LFR3: reassoc_req is NULL"); - QDF_ASSERT(iface->roam_synch_frame_ind. - reassoc_req); - wma_free_roam_synch_frame_ind(iface); - return status; - } - wma_fill_data_synch_frame_event(wma, roam_synch_ind_ptr, iface); - } else { - wma_fill_data_synch_event(wma, roam_synch_ind_ptr, param_buf); - } - chan = param_buf->chan; - if (chan) { - roam_synch_ind_ptr->chan_freq = chan->mhz; - roam_synch_ind_ptr->phy_mode = - wma_fw_to_host_phymode(WMI_GET_CHANNEL_MODE(chan)); - } else { - roam_synch_ind_ptr->phy_mode = WLAN_PHYMODE_AUTO; - } - - key = param_buf->key; - key_ft = param_buf->key_ext; - if (key) { - roam_synch_ind_ptr->kck_len = KCK_KEY_LEN; - qdf_mem_copy(roam_synch_ind_ptr->kck, key->kck, - KCK_KEY_LEN); - roam_synch_ind_ptr->kek_len = SIR_KEK_KEY_LEN; - qdf_mem_copy(roam_synch_ind_ptr->kek, key->kek, - SIR_KEK_KEY_LEN); - qdf_mem_copy(roam_synch_ind_ptr->replay_ctr, - key->replay_counter, REPLAY_CTR_LEN); - } else if (key_ft) { - /* - * For AKM 00:0F:AC (FT suite-B-SHA384) - * KCK-bits:192 KEK-bits:256 - * Firmware sends wmi_key_material_ext tlv now only if - * auth is FT Suite-B SHA-384 auth. If further new suites - * are added, add logic to get kck, kek bits based on - * akm protocol - */ - kck_len = KCK_192BIT_KEY_LEN; - kek_len = KEK_256BIT_KEY_LEN; - - roam_synch_ind_ptr->kck_len = kck_len; - qdf_mem_copy(roam_synch_ind_ptr->kck, - key_ft->key_buffer, kck_len); - - roam_synch_ind_ptr->kek_len = kek_len; - qdf_mem_copy(roam_synch_ind_ptr->kek, - (key_ft->key_buffer + kck_len), - kek_len); - - qdf_mem_copy(roam_synch_ind_ptr->replay_ctr, - (key_ft->key_buffer + kek_len + kck_len), - REPLAY_CTR_LEN); - } - - if (param_buf->hw_mode_transition_fixed_param) - wma_process_pdev_hw_mode_trans_ind(wma, - param_buf->hw_mode_transition_fixed_param, - param_buf->wmi_pdev_set_hw_mode_response_vdev_mac_mapping, - &roam_synch_ind_ptr->hw_mode_trans_ind); - else - wma_debug("hw_mode transition fixed param is NULL"); - - fils_info = param_buf->roam_fils_synch_info; - if (fils_info) { - if ((fils_info->kek_len > MAX_KEK_LENGTH) || - (fils_info->pmk_len > MAX_PMK_LEN)) { - wma_err("Invalid kek_len %d or pmk_len %d", - fils_info->kek_len, - fils_info->pmk_len); - wma_free_roam_synch_frame_ind(iface); - return status; - } - - roam_synch_ind_ptr->kek_len = fils_info->kek_len; - qdf_mem_copy(roam_synch_ind_ptr->kek, fils_info->kek, - fils_info->kek_len); - - roam_synch_ind_ptr->pmk_len = fils_info->pmk_len; - qdf_mem_copy(roam_synch_ind_ptr->pmk, fils_info->pmk, - fils_info->pmk_len); - - qdf_mem_copy(roam_synch_ind_ptr->pmkid, fils_info->pmkid, - PMKID_LEN); - - roam_synch_ind_ptr->update_erp_next_seq_num = - fils_info->update_erp_next_seq_num; - roam_synch_ind_ptr->next_erp_seq_num = - fils_info->next_erp_seq_num; - - wma_debug("Update ERP Seq Num %d, Next ERP Seq Num %d", - roam_synch_ind_ptr->update_erp_next_seq_num, - roam_synch_ind_ptr->next_erp_seq_num); - } - - pmk_cache_info = param_buf->roam_pmk_cache_synch_info; - if (pmk_cache_info && (pmk_cache_info->pmk_len)) { - if (pmk_cache_info->pmk_len > MAX_PMK_LEN) { - wma_err("Invalid pmk_len %d", - pmk_cache_info->pmk_len); - wma_free_roam_synch_frame_ind(iface); - return status; - } - - roam_synch_ind_ptr->pmk_len = pmk_cache_info->pmk_len; - qdf_mem_copy(roam_synch_ind_ptr->pmk, - pmk_cache_info->pmk, pmk_cache_info->pmk_len); - qdf_mem_copy(roam_synch_ind_ptr->pmkid, - pmk_cache_info->pmkid, PMKID_LEN); - } - wma_free_roam_synch_frame_ind(iface); - return 0; -} -#endif /* ROAM_TARGET_IF_CONVERGENCE */ /** * wma_roam_update_vdev() - Update the STA and BSS * @wma: Global WMA Handle @@ -1067,393 +679,6 @@ static void wma_update_phymode_on_roam(tp_wma_handle wma, uint8_t *bssid, des_chan->ch_cfreq1, des_chan->ch_cfreq2); } -#ifndef ROAM_TARGET_IF_CONVERGENCE -int wma_mlme_roam_synch_event_handler_cb(void *handle, uint8_t *event, - uint32_t len) -{ - WMI_ROAM_SYNCH_EVENTID_param_tlvs *param_buf = NULL; - wmi_roam_synch_event_fixed_param *synch_event = NULL; - tp_wma_handle wma = (tp_wma_handle) handle; - struct roam_offload_synch_ind *roam_synch_ind_ptr = NULL; - uint16_t ie_len = 0; - int status = -EINVAL; - qdf_time_t roam_synch_received = qdf_get_system_timestamp(); - uint32_t roam_synch_data_len; - A_UINT32 bcn_probe_rsp_len; - A_UINT32 reassoc_rsp_len; - A_UINT32 reassoc_req_len; - - wma_debug("LFR3: Received WMA_ROAM_OFFLOAD_SYNCH_IND"); - if (!event) { - wma_err("event param null"); - goto cleanup_label; - } - - param_buf = (WMI_ROAM_SYNCH_EVENTID_param_tlvs *) event; - if (!param_buf) { - wma_err("received null buf from target"); - goto cleanup_label; - } - - synch_event = param_buf->fixed_param; - if (!synch_event) { - wma_err("received null event data from target"); - goto cleanup_label; - } - - if (synch_event->vdev_id >= wma->max_bssid) { - wma_err("received invalid vdev_id %d", synch_event->vdev_id); - return status; - } - - if (synch_event->bcn_probe_rsp_len > - param_buf->num_bcn_probe_rsp_frame || - synch_event->reassoc_req_len > - param_buf->num_reassoc_req_frame || - synch_event->reassoc_rsp_len > - param_buf->num_reassoc_rsp_frame) { - wma_debug("Invalid synch payload: LEN bcn:%d, req:%d, rsp:%d", - synch_event->bcn_probe_rsp_len, - synch_event->reassoc_req_len, - synch_event->reassoc_rsp_len); - goto cleanup_label; - } - - wlan_roam_debug_log(synch_event->vdev_id, DEBUG_ROAM_SYNCH_IND, - DEBUG_INVALID_PEER_ID, NULL, NULL, - synch_event->bssid.mac_addr31to0, - synch_event->bssid.mac_addr47to32); - DPTRACE(qdf_dp_trace_record_event(QDF_DP_TRACE_EVENT_RECORD, - synch_event->vdev_id, QDF_TRACE_DEFAULT_PDEV_ID, - QDF_PROTO_TYPE_EVENT, QDF_ROAM_SYNCH)); - - if (MLME_IS_ROAM_SYNCH_IN_PROGRESS(wma->psoc, synch_event->vdev_id)) { - wma_err("Ignoring RSI since one is already in progress"); - goto cleanup_label; - } - - /* - * All below length fields are unsigned and hence positive numbers. - * Maximum number during the addition would be (3 * MAX_LIMIT(UINT32) + - * few fixed fields). - */ - wma_debug("synch payload: LEN bcn:%d, req:%d, rsp:%d", - synch_event->bcn_probe_rsp_len, - synch_event->reassoc_req_len, - synch_event->reassoc_rsp_len); - - /* - * If lengths of bcn_probe_rsp, reassoc_req and reassoc_rsp are zero in - * synch_event driver would have received bcn_probe_rsp, reassoc_req - * and reassoc_rsp via the event WMI_ROAM_SYNCH_FRAME_EVENTID - */ - if ((!synch_event->bcn_probe_rsp_len) && - (!synch_event->reassoc_req_len) && - (!synch_event->reassoc_rsp_len)) { - bcn_probe_rsp_len = wma->interfaces[synch_event->vdev_id]. - roam_synch_frame_ind. - bcn_probe_rsp_len; - reassoc_req_len = wma->interfaces[synch_event->vdev_id]. - roam_synch_frame_ind.reassoc_req_len; - reassoc_rsp_len = wma->interfaces[synch_event->vdev_id]. - roam_synch_frame_ind.reassoc_rsp_len; - - roam_synch_data_len = bcn_probe_rsp_len + reassoc_rsp_len + - reassoc_req_len + sizeof(struct roam_offload_synch_ind); - - wma_debug("Updated synch payload: LEN bcn:%d, req:%d, rsp:%d", - bcn_probe_rsp_len, - reassoc_req_len, - reassoc_rsp_len); - } else { - bcn_probe_rsp_len = synch_event->bcn_probe_rsp_len; - reassoc_req_len = synch_event->reassoc_req_len; - reassoc_rsp_len = synch_event->reassoc_rsp_len; - - if (synch_event->bcn_probe_rsp_len > WMI_SVC_MSG_MAX_SIZE) - goto cleanup_label; - if (synch_event->reassoc_rsp_len > - (WMI_SVC_MSG_MAX_SIZE - synch_event->bcn_probe_rsp_len)) - goto cleanup_label; - if (synch_event->reassoc_req_len > - WMI_SVC_MSG_MAX_SIZE - (synch_event->bcn_probe_rsp_len + - synch_event->reassoc_rsp_len)) - goto cleanup_label; - - roam_synch_data_len = bcn_probe_rsp_len + - reassoc_rsp_len + reassoc_req_len; - - /* - * Below is the check for the entire size of the message - * received from the firmware. - */ - if (roam_synch_data_len > WMI_SVC_MSG_MAX_SIZE - - (sizeof(*synch_event) + sizeof(wmi_channel) + - sizeof(wmi_key_material) + sizeof(uint32_t))) - goto cleanup_label; - - roam_synch_data_len += sizeof(struct roam_offload_synch_ind); - } - - cds_host_diag_log_work(&wma->roam_ho_wl, - WMA_ROAM_HO_WAKE_LOCK_DURATION, - WIFI_POWER_EVENT_WAKELOCK_WOW); - qdf_wake_lock_timeout_acquire(&wma->roam_ho_wl, - WMA_ROAM_HO_WAKE_LOCK_DURATION); - - roam_synch_ind_ptr = qdf_mem_malloc(roam_synch_data_len); - if (!roam_synch_ind_ptr) { - QDF_ASSERT(roam_synch_ind_ptr); - status = -ENOMEM; - goto cleanup_label; - } - qdf_mem_zero(roam_synch_ind_ptr, roam_synch_data_len); - status = wma_fill_roam_synch_buffer(wma, - roam_synch_ind_ptr, param_buf); - if (status != 0) - goto cleanup_label; - /* 24 byte MAC header and 12 byte to ssid IE */ - if (roam_synch_ind_ptr->beaconProbeRespLength > - (SIR_MAC_HDR_LEN_3A + SIR_MAC_B_PR_SSID_OFFSET)) { - ie_len = roam_synch_ind_ptr->beaconProbeRespLength - - (SIR_MAC_HDR_LEN_3A + SIR_MAC_B_PR_SSID_OFFSET); - } else { - wma_err("LFR3: Invalid Beacon Length"); - goto cleanup_label; - } - if (QDF_IS_STATUS_ERROR(wma->pe_roam_synch_cb(wma->mac_context, - roam_synch_ind_ptr, ie_len, - SIR_ROAM_SYNCH_PROPAGATION))) { - wma_err("LFR3: PE roam synch cb failed"); - status = -EBUSY; - goto cleanup_label; - } - - wma_roam_update_vdev(wma, roam_synch_ind_ptr); - /* update freq and channel width */ - wma->interfaces[synch_event->vdev_id].ch_freq = - roam_synch_ind_ptr->chan_freq; - wma->interfaces[synch_event->vdev_id].chan_width = - roam_synch_ind_ptr->chan_width; - /* - * update phy_mode in wma to avoid mismatch in phymode between host and - * firmware. The phymode stored in peer->peer_mlme.phymode is - * sent to firmware as part of opmode update during either - vht opmode - * action frame received or during opmode change detected while - * processing beacon. Any mismatch of this value with firmware phymode - * results in firmware assert. - */ - wma_update_phymode_on_roam(wma, roam_synch_ind_ptr->bssid.bytes, - param_buf->chan, - &wma->interfaces[synch_event->vdev_id]); - cm_fw_roam_sync_propagation(wma->psoc, - synch_event->vdev_id, - roam_synch_ind_ptr); - wma->interfaces[synch_event->vdev_id].roam_synch_delay = - qdf_get_system_timestamp() - roam_synch_received; - wma_debug("LFR3: roam_synch_delay:%d", - wma->interfaces[synch_event->vdev_id].roam_synch_delay); - - status = 0; - -cleanup_label: - if (status != 0) { - if (synch_event) { - cm_fw_roam_abort_req(wma->psoc, synch_event->vdev_id); - cm_roam_stop_req(wma->psoc, synch_event->vdev_id, - REASON_ROAM_SYNCH_FAILED); - } - } - - if (roam_synch_ind_ptr && roam_synch_ind_ptr->ric_tspec_data) - qdf_mem_free(roam_synch_ind_ptr->ric_tspec_data); - if (roam_synch_ind_ptr) - qdf_mem_free(roam_synch_ind_ptr); - - return status; -} - -int wma_roam_synch_frame_event_handler(void *handle, uint8_t *event, - uint32_t len) -{ - WMI_ROAM_SYNCH_FRAME_EVENTID_param_tlvs *param_buf = NULL; - wmi_roam_synch_frame_event_fixed_param *synch_frame_event = NULL; - tp_wma_handle wma = (tp_wma_handle) handle; - A_UINT32 vdev_id; - struct wma_txrx_node *iface = NULL; - int status = -EINVAL; - - if (!event) { - wma_err("event param null"); - return status; - } - - param_buf = (WMI_ROAM_SYNCH_FRAME_EVENTID_param_tlvs *) event; - if (!param_buf) { - wma_err("received null buf from target"); - return status; - } - - synch_frame_event = param_buf->fixed_param; - if (!synch_frame_event) { - wma_err("received null event data from target"); - return status; - } - - if (synch_frame_event->vdev_id >= wma->max_bssid) { - wma_err("received invalid vdev_id %d", - synch_frame_event->vdev_id); - return status; - } - - if (synch_frame_event->bcn_probe_rsp_len > - param_buf->num_bcn_probe_rsp_frame || - synch_frame_event->reassoc_req_len > - param_buf->num_reassoc_req_frame || - synch_frame_event->reassoc_rsp_len > - param_buf->num_reassoc_rsp_frame) { - wma_err("fixed/actual len err: bcn:%d/%d req:%d/%d rsp:%d/%d", - synch_frame_event->bcn_probe_rsp_len, - param_buf->num_bcn_probe_rsp_frame, - synch_frame_event->reassoc_req_len, - param_buf->num_reassoc_req_frame, - synch_frame_event->reassoc_rsp_len, - param_buf->num_reassoc_rsp_frame); - return status; - } - - vdev_id = synch_frame_event->vdev_id; - iface = &wma->interfaces[vdev_id]; - - if (MLME_IS_ROAM_SYNCH_IN_PROGRESS(wma->psoc, vdev_id)) { - wma_err("Ignoring this event as it is unexpected"); - wma_free_roam_synch_frame_ind(iface); - return status; - } - - wma_debug("LFR3: Roam synch frame payload: LEN bcn:%d, req:%d, rsp:%d morefrag: %d", - synch_frame_event->bcn_probe_rsp_len, - synch_frame_event->reassoc_req_len, - synch_frame_event->reassoc_rsp_len, - synch_frame_event->more_frag); - - if (synch_frame_event->bcn_probe_rsp_len) { - iface->roam_synch_frame_ind.bcn_probe_rsp_len = - synch_frame_event->bcn_probe_rsp_len; - iface->roam_synch_frame_ind.is_beacon = - synch_frame_event->is_beacon; - - if (iface->roam_synch_frame_ind.bcn_probe_rsp) - qdf_mem_free(iface->roam_synch_frame_ind. - bcn_probe_rsp); - iface->roam_synch_frame_ind.bcn_probe_rsp = - qdf_mem_malloc(iface->roam_synch_frame_ind. - bcn_probe_rsp_len); - if (!iface->roam_synch_frame_ind.bcn_probe_rsp) { - QDF_ASSERT(iface->roam_synch_frame_ind. - bcn_probe_rsp); - status = -ENOMEM; - wma_free_roam_synch_frame_ind(iface); - return status; - } - qdf_mem_copy(iface->roam_synch_frame_ind. - bcn_probe_rsp, - param_buf->bcn_probe_rsp_frame, - iface->roam_synch_frame_ind.bcn_probe_rsp_len); - } - - if (synch_frame_event->reassoc_req_len) { - iface->roam_synch_frame_ind.reassoc_req_len = - synch_frame_event->reassoc_req_len; - - if (iface->roam_synch_frame_ind.reassoc_req) - qdf_mem_free(iface->roam_synch_frame_ind.reassoc_req); - iface->roam_synch_frame_ind.reassoc_req = - qdf_mem_malloc(iface->roam_synch_frame_ind. - reassoc_req_len); - if (!iface->roam_synch_frame_ind.reassoc_req) { - QDF_ASSERT(iface->roam_synch_frame_ind. - reassoc_req); - status = -ENOMEM; - wma_free_roam_synch_frame_ind(iface); - return status; - } - qdf_mem_copy(iface->roam_synch_frame_ind.reassoc_req, - param_buf->reassoc_req_frame, - iface->roam_synch_frame_ind.reassoc_req_len); - } - - if (synch_frame_event->reassoc_rsp_len) { - iface->roam_synch_frame_ind.reassoc_rsp_len = - synch_frame_event->reassoc_rsp_len; - - if (iface->roam_synch_frame_ind.reassoc_rsp) - qdf_mem_free(iface->roam_synch_frame_ind.reassoc_rsp); - - iface->roam_synch_frame_ind.reassoc_rsp = - qdf_mem_malloc(iface->roam_synch_frame_ind. - reassoc_rsp_len); - if (!iface->roam_synch_frame_ind.reassoc_rsp) { - QDF_ASSERT(iface->roam_synch_frame_ind. - reassoc_rsp); - status = -ENOMEM; - wma_free_roam_synch_frame_ind(iface); - return status; - } - qdf_mem_copy(iface->roam_synch_frame_ind.reassoc_rsp, - param_buf->reassoc_rsp_frame, - iface->roam_synch_frame_ind.reassoc_rsp_len); - } - return 0; -} - -/** - * __wma_roam_synch_event_handler() - roam synch event handler - * @handle: wma handle - * @event: event data - * @len: length of data - * - * This function is roam synch event handler.It sends roam - * indication for upper layer. - * - * Return: Success or Failure status - */ -int wma_roam_synch_event_handler(void *handle, uint8_t *event, - uint32_t len) -{ - int status = -EINVAL; - wmi_roam_synch_event_fixed_param *synch_event = NULL; - WMI_ROAM_SYNCH_EVENTID_param_tlvs *param_buf = NULL; - tp_wma_handle wma = (tp_wma_handle)handle; - - if (!event) { - wma_err_rl("event param null"); - return status; - } - - param_buf = (WMI_ROAM_SYNCH_EVENTID_param_tlvs *)event; - if (!param_buf) { - wma_err_rl("received null buf from target"); - return status; - } - synch_event = param_buf->fixed_param; - if (!synch_event) { - wma_err_rl("received null event data from target"); - return status; - } - - if (synch_event->vdev_id >= wma->max_bssid) { - wma_err_rl("received invalid vdev_id %d", - synch_event->vdev_id); - return status; - } - - cm_fw_roam_sync_req(wma->psoc, synch_event->vdev_id, event, len); - - return 0; -} -#endif /* ROAM_TARGET_IF_CONVERGENCE */ - int wma_roam_auth_offload_event_handler(WMA_HANDLE handle, uint8_t *event, uint32_t len) { @@ -1524,956 +749,6 @@ int wma_roam_auth_offload_event_handler(WMA_HANDLE handle, uint8_t *event, return 0; } -#ifdef WLAN_FEATURE_ROAM_OFFLOAD -#ifndef ROAM_TARGET_IF_CONVERGENCE -int wma_roam_scan_chan_list_event_handler(WMA_HANDLE handle, - uint8_t *event, - uint32_t len) -{ - tp_wma_handle wma = (tp_wma_handle)handle; - WMI_ROAM_SCAN_CHANNEL_LIST_EVENTID_param_tlvs *param_buf; - wmi_roam_scan_channel_list_event_fixed_param *fixed_param; - uint8_t vdev_id, i = 0, num_ch = 0; - struct roam_scan_ch_resp *resp; - struct scheduler_msg sme_msg = {0}; - - param_buf = (WMI_ROAM_SCAN_CHANNEL_LIST_EVENTID_param_tlvs *)event; - if (!param_buf) { - wma_err_rl("NULL event received from target"); - return -EINVAL; - } - - fixed_param = param_buf->fixed_param; - if (!fixed_param) { - wma_err_rl(" NULL fixed param"); - return -EINVAL; - } - - vdev_id = fixed_param->vdev_id; - if (vdev_id >= wma->max_bssid) { - wma_err_rl("Invalid vdev_id %d", vdev_id); - return -EINVAL; - } - - num_ch = (param_buf->num_channel_list < - WNI_CFG_VALID_CHANNEL_LIST_LEN) ? - param_buf->num_channel_list : - WNI_CFG_VALID_CHANNEL_LIST_LEN; - - resp = qdf_mem_malloc(sizeof(struct roam_scan_ch_resp) + - num_ch * sizeof(param_buf->channel_list[0])); - if (!resp) - return -EINVAL; - - resp->chan_list = (uint32_t *)(resp + 1); - resp->vdev_id = vdev_id; - resp->command_resp = fixed_param->command_response; - resp->num_channels = param_buf->num_channel_list; - - for (i = 0; i < num_ch; i++) - resp->chan_list[i] = param_buf->channel_list[i]; - - sme_msg.type = eWNI_SME_GET_ROAM_SCAN_CH_LIST_EVENT; - sme_msg.bodyptr = resp; - - if (scheduler_post_message(QDF_MODULE_ID_WMA, - QDF_MODULE_ID_SME, - QDF_MODULE_ID_SME, &sme_msg)) { - wma_err("Failed to post msg to SME"); - qdf_mem_free(sme_msg.bodyptr); - return -EINVAL; - } - - return 0; -} - -/** - * wma_get_trigger_detail_str - Return roam trigger string from the - * enum WMI_ROAM_TRIGGER_REASON - * @roam_info: Pointer to the roam trigger info - * @buf: Destination buffer to write the reason string - * - * Return: None - */ -static void -wma_get_trigger_detail_str(struct wmi_roam_trigger_info *roam_info, char *buf, - uint8_t vdev_id) -{ - uint16_t buf_cons, buf_left = MAX_ROAM_DEBUG_BUF_SIZE; - char *temp = buf; - - buf_cons = qdf_snprint(temp, buf_left, "Reason: \"%s\" ", - mlme_get_roam_trigger_str(roam_info->trigger_reason)); - temp += buf_cons; - buf_left -= buf_cons; - - if (roam_info->trigger_sub_reason) { - buf_cons = qdf_snprint( - temp, buf_left, "Sub-Reason: %s", - mlme_get_sub_reason_str(roam_info->trigger_sub_reason)); - temp += buf_cons; - buf_left -= buf_cons; - } - - switch (roam_info->trigger_reason) { - case WMI_ROAM_TRIGGER_REASON_PER: - case WMI_ROAM_TRIGGER_REASON_BMISS: - case WMI_ROAM_TRIGGER_REASON_HIGH_RSSI: - case WMI_ROAM_TRIGGER_REASON_MAWC: - case WMI_ROAM_TRIGGER_REASON_DENSE: - case WMI_ROAM_TRIGGER_REASON_BACKGROUND: - case WMI_ROAM_TRIGGER_REASON_IDLE: - case WMI_ROAM_TRIGGER_REASON_FORCED: - case WMI_ROAM_TRIGGER_REASON_UNIT_TEST: - case WMI_ROAM_TRIGGER_REASON_BTC: - return; - case WMI_ROAM_TRIGGER_REASON_BTM: - roam_info->btm_trig_data.timestamp = roam_info->timestamp; - cm_roam_btm_req_event(&roam_info->btm_trig_data, vdev_id); - - buf_cons = qdf_snprint(temp, buf_left, - "Req_mode: %d Disassoc_timer: %d", - roam_info->btm_trig_data.btm_request_mode, - roam_info->btm_trig_data.disassoc_timer); - temp += buf_cons; - buf_left -= buf_cons; - - buf_cons = qdf_snprint(temp, buf_left, - "validity_interval: %d candidate_list_cnt: %d resp_status: %d, bss_termination_timeout: %d, mbo_assoc_retry_timeout: %d", - roam_info->btm_trig_data.validity_interval, - roam_info->btm_trig_data.candidate_list_count, - roam_info->btm_trig_data.btm_resp_status, - roam_info->btm_trig_data. - btm_bss_termination_timeout, - roam_info->btm_trig_data. - btm_mbo_assoc_retry_timeout); - buf_left -= buf_cons; - temp += buf_cons; - return; - case WMI_ROAM_TRIGGER_REASON_BSS_LOAD: - buf_cons = qdf_snprint(temp, buf_left, "CU: %d %% ", - roam_info->cu_trig_data.cu_load); - temp += buf_cons; - buf_left -= buf_cons; - return; - case WMI_ROAM_TRIGGER_REASON_DEAUTH: - buf_cons = qdf_snprint(temp, buf_left, "Type: %d Reason: %d ", - roam_info->deauth_trig_data.type, - roam_info->deauth_trig_data.reason); - temp += buf_cons; - buf_left -= buf_cons; - return; - case WMI_ROAM_TRIGGER_REASON_LOW_RSSI: - case WMI_ROAM_TRIGGER_REASON_PERIODIC: - /* - * Use roam_info->current_rssi get the RSSI of current AP after - * roam scan is triggered. This avoids discrepency with the - * next rssi threshold value printed in roam scan details. - * roam_info->rssi_trig_data.threshold gives the rssi threshold - * for the Low Rssi/Periodic scan trigger. - */ - buf_cons = qdf_snprint(temp, buf_left, - " Cur_Rssi threshold:%d Current AP RSSI: %d", - roam_info->rssi_trig_data.threshold, - roam_info->current_rssi); - temp += buf_cons; - buf_left -= buf_cons; - return; - case WMI_ROAM_TRIGGER_REASON_WTC_BTM: - if (roam_info->wtc_btm_trig_data.wtc_candi_rssi_ext_present) { - buf_cons = qdf_snprint(temp, buf_left, "Roaming Mode: %d, Trigger Reason: %d, Sub code:%d, wtc mode:%d, wtc scan mode:%d, wtc rssi th:%d, wtc candi rssi th_2g:%d, wtc_candi_rssi_th_5g:%d, wtc_candi_rssi_th_6g:%d", - roam_info->wtc_btm_trig_data.roaming_mode, - roam_info->wtc_btm_trig_data.vsie_trigger_reason, - roam_info->wtc_btm_trig_data.sub_code, - roam_info->wtc_btm_trig_data.wtc_mode, - roam_info->wtc_btm_trig_data.wtc_scan_mode, - roam_info->wtc_btm_trig_data.wtc_rssi_th, - roam_info->wtc_btm_trig_data.wtc_candi_rssi_th, - roam_info->wtc_btm_trig_data.wtc_candi_rssi_th_5g, - roam_info->wtc_btm_trig_data.wtc_candi_rssi_th_6g); - } else { - buf_cons = qdf_snprint(temp, buf_left, "Roaming Mode: %d, Trigger Reason: %d, Sub code:%d, wtc mode:%d, wtc scan mode:%d, wtc rssi th:%d, wtc candi rssi th:%d", - roam_info->wtc_btm_trig_data.roaming_mode, - roam_info->wtc_btm_trig_data.vsie_trigger_reason, - roam_info->wtc_btm_trig_data.sub_code, - roam_info->wtc_btm_trig_data.wtc_mode, - roam_info->wtc_btm_trig_data.wtc_scan_mode, - roam_info->wtc_btm_trig_data.wtc_rssi_th, - roam_info->wtc_btm_trig_data.wtc_candi_rssi_th); - } - - temp += buf_cons; - buf_left -= buf_cons; - return; - default: - return; - } -} - -/** - * wma_rso_print_trigger_info - Roam trigger related details - * @data: Pointer to the roam trigger data - * @vdev_id: Vdev ID - * @is_full_scan: True if it is full scan else partial scan - * - * Prints the vdev, roam trigger reason, time of the day at which roaming - * was triggered. - * - * Return: None - */ -static void -wma_rso_print_trigger_info(struct wmi_roam_trigger_info *data, uint8_t vdev_id, - bool is_full_scan) -{ - char *buf; - char time[TIME_STRING_LEN]; - - /* Update roam trigger info to userspace */ - cm_roam_trigger_info_event(data, vdev_id, is_full_scan); - - buf = qdf_mem_malloc(MAX_ROAM_DEBUG_BUF_SIZE); - if (!buf) - return; - - wma_get_trigger_detail_str(data, buf, vdev_id); - mlme_get_converted_timestamp(data->timestamp, time); - wma_nofl_info("%s [ROAM_TRIGGER]: VDEV[%d] %s", time, vdev_id, buf); - - qdf_mem_free(buf); -} - -/** - * wma_rso_print_btm_rsp_info - BTM RSP related details - * @data: Pointer to the btm rsp data - * @vdev_id: vdev id - * @is_wtc: is wtc or btm response frame - * - * Prints the vdev, btm status, target_bssid and vsie reason - * - * Return: None - */ -static void -wma_rso_print_btm_rsp_info(struct roam_btm_response_data *data, - uint8_t vdev_id, uint8_t is_wtc) -{ - char time[TIME_STRING_LEN]; - - mlme_get_converted_timestamp(data->timestamp, time); - wma_nofl_info("%s [BTM RSP]: VDEV[%d], Status: %d, VSIE reason: %d, BSSID: " QDF_MAC_ADDR_FMT, - time, vdev_id, data->btm_status, data->vsie_reason, - QDF_MAC_ADDR_REF(data->target_bssid.bytes)); - cm_roam_btm_resp_event(data, vdev_id, is_wtc); -} - -/** - * wma_rso_print_roam_initial_info - Roaming related initial details - * @data: Pointer to the btm rsp data - * @vdev_id: vdev id - * - * Prints the vdev, roam_full_scan_count, channel and rssi - * utilization threhold and timer - * - * Return: None - */ -static void -wma_rso_print_roam_initial_info(struct roam_initial_data *data, - uint8_t vdev_id) -{ - wma_nofl_info("[ROAM INIT INFO]: VDEV[%d], roam_full_scan_count: %d, rssi_th: %d, cu_th: %d, fw_cancel_timer_bitmap: %d", - vdev_id, data->roam_full_scan_count, data->rssi_th, - data->cu_th, data->fw_cancel_timer_bitmap); -} - -/** - * wma_rso_print_roam_msg_info - Roaming related message details - * @data: Pointer to the btm rsp data - * @vdev_id: vdev id - * - * Prints the vdev, msg_id, msg_param1, msg_param2 and timer - * - * Return: None - */ -static void wma_rso_print_roam_msg_info(struct roam_msg_info *data, - uint8_t vdev_id) -{ - char time[TIME_STRING_LEN]; - static const char msg_id1_str[] = "Roam RSSI TH Reset"; - - if (data->msg_id == WMI_ROAM_MSG_RSSI_RECOVERED) { - mlme_get_converted_timestamp(data->timestamp, time); - wma_info("%s [ROAM MSG INFO]: VDEV[%d] %s, Current rssi: %d dbm, next_rssi_threshold: %d dbm", - time, vdev_id, msg_id1_str, data->msg_param1, - data->msg_param2); - } -} - -/** - * wma_log_roam_scan_candidates - Print roam scan candidate AP info - * @ap: Pointer to the candidate AP list - * @num_entries: Number of candidate APs - * - * Print the RSSI, CU load, Cu score, RSSI score, total score, BSSID - * and time stamp at which the candidate was found details. - * - * Return: None - */ -static void -wma_log_roam_scan_candidates(struct wmi_roam_candidate_info *ap, - uint8_t num_entries) -{ - uint16_t i; - char time[TIME_STRING_LEN], time2[TIME_STRING_LEN]; - - - wma_nofl_info("%62s%62s", LINE_STR, LINE_STR); - wma_nofl_info("%13s %16s %8s %4s %4s %5s/%3s %3s/%3s %7s %7s %6s %12s %20s", - "AP BSSID", "TSTAMP", "CH", "TY", "ETP", "RSSI", - "SCR", "CU%", "SCR", "TOT_SCR", "BL_RSN", "BL_SRC", - "BL_TSTAMP", "BL_TIMEOUT(ms)"); - wma_nofl_info("%62s%62s", LINE_STR, LINE_STR); - - if (num_entries > MAX_ROAM_CANDIDATE_AP) - num_entries = MAX_ROAM_CANDIDATE_AP; - - for (i = 0; i < num_entries; i++) { - mlme_get_converted_timestamp(ap->timestamp, time); - mlme_get_converted_timestamp(ap->bl_timestamp, time2); - wma_nofl_info(QDF_MAC_ADDR_FMT " %17s %4d %-4s %4d %3d/%-4d %2d/%-4d %5d %7d %7d %17s %9d", - QDF_MAC_ADDR_REF(ap->bssid.bytes), time, - ap->freq, - ((ap->type == 0) ? "C_AP" : - ((ap->type == 2) ? "R_AP" : "P_AP")), - ap->etp, ap->rssi, ap->rssi_score, ap->cu_load, - ap->cu_score, ap->total_score, ap->bl_reason, - ap->bl_source, time2, ap->bl_original_timeout); - - /* Update roam candidates info to userspace */ - cm_roam_candidate_info_event(ap, i); - - ap++; - } -} - -/** - * wma_rso_print_scan_info - Print the roam scan details and candidate AP - * details - * @scan: Pointer to the received tlv after sanitization - * @vdev_id: Vdev ID - * @trigger: Roam scan trigger reason - * @timestamp: Host timestamp in millisecs - * - * Prinst the roam scan details with time of the day when the scan was - * triggered and roam candidate AP with score details - * - * Return: None - */ -static void -wma_rso_print_scan_info(struct wmi_roam_scan_data *scan, uint8_t vdev_id, - uint32_t trigger, uint32_t timestamp) -{ - uint16_t num_ch = scan->num_chan; - uint16_t buf_cons = 0, buf_left = ROAM_CHANNEL_BUF_SIZE; - uint8_t i; - char *buf, *buf1, *tmp; - char time[TIME_STRING_LEN]; - - /* Update roam scan info to userspace */ - cm_roam_scan_info_event(scan, vdev_id); - - buf = qdf_mem_malloc(ROAM_CHANNEL_BUF_SIZE); - if (!buf) - return; - - tmp = buf; - /* For partial scans, print the channel info */ - if (!scan->type) { - buf_cons = qdf_snprint(tmp, buf_left, "{"); - buf_left -= buf_cons; - tmp += buf_cons; - - for (i = 0; i < num_ch; i++) { - buf_cons = qdf_snprint(tmp, buf_left, "%d ", - scan->chan_freq[i]); - buf_left -= buf_cons; - tmp += buf_cons; - } - buf_cons = qdf_snprint(tmp, buf_left, "}"); - buf_left -= buf_cons; - tmp += buf_cons; - } - - buf1 = qdf_mem_malloc(ROAM_FAILURE_BUF_SIZE); - if (!buf1) { - qdf_mem_free(buf); - return; - } - - if (WMI_ROAM_TRIGGER_REASON_LOW_RSSI == trigger || - WMI_ROAM_TRIGGER_REASON_PERIODIC == trigger) - qdf_snprint(buf1, ROAM_FAILURE_BUF_SIZE, - "next_rssi_threshold: %d dBm", - scan->next_rssi_threshold); - - mlme_get_converted_timestamp(timestamp, time); - wma_nofl_info("%s [ROAM_SCAN]: VDEV[%d] Scan_type: %s %s %s", - time, vdev_id, mlme_get_roam_scan_type_str(scan->type), - buf1, buf); - wma_log_roam_scan_candidates(scan->ap, scan->num_ap); - - qdf_mem_free(buf); - qdf_mem_free(buf1); -} - -static -bool mlme_is_roam_aborted(enum wlan_roam_failure_reason_code reason) -{ - switch (reason) { - case ROAM_FAIL_REASON_UNABLE_TO_START_ROAM_HO: - case ROAM_FAIL_REASON_HOST: - case ROAM_FAIL_REASON_NO_CAND_AP_FOUND: - case ROAM_FAIL_REASON_INTERNAL_ABORT: - case ROAM_FAIL_REASON_SCAN_START: - return true; - default: - break; - } - - return false; -} - -/** - * wma_rso_print_roam_result() - Print roam result related info - * @res: Roam result strucure pointer - * @vdev_id: Vdev id - * - * Print roam result and failure reason if roaming failed. - * - * Return: None - */ -static void -wma_rso_print_roam_result(struct wmi_roam_result *res, - uint8_t vdev_id) -{ - char *buf; - char time[TIME_STRING_LEN]; - - /* Log the roam result event to userspace */ - if (res->status == 1 && - mlme_is_roam_aborted(res->fail_reason)) - cm_roam_result_info_event(NULL, vdev_id, true); - else - cm_roam_result_info_event(res, vdev_id, false); - - buf = qdf_mem_malloc(ROAM_FAILURE_BUF_SIZE); - if (!buf) - return; - - if (res->status == 1) - qdf_snprint(buf, ROAM_FAILURE_BUF_SIZE, "Reason: %s", - mlme_get_roam_fail_reason_str(res->fail_reason)); - - mlme_get_converted_timestamp(res->timestamp, time); - wma_nofl_info("%s [ROAM_RESULT]: VDEV[%d] %s %s", - time, vdev_id, mlme_get_roam_status_str(res->status), - buf); - - qdf_mem_free(buf); -} - -/** - * wma_rso_print_11kv_info - Print neighbor report/BTM related data - * @neigh_rpt: Pointer to the extracted TLV structure - * @vdev_id: Vdev ID - * - * Print BTM/neighbor report info that is sent by firmware after - * connection/roaming to an AP. - * - * Return: none - */ -static void -wma_rso_print_11kv_info(struct wmi_neighbor_report_data *neigh_rpt, - uint8_t vdev_id) -{ - char time[TIME_STRING_LEN], time1[TIME_STRING_LEN]; - char *buf, *tmp; - uint8_t type = neigh_rpt->req_type, i; - uint16_t buf_left = ROAM_CHANNEL_BUF_SIZE, buf_cons; - uint8_t num_ch = neigh_rpt->num_freq; - - if (!type) - return; - - buf = qdf_mem_malloc(ROAM_CHANNEL_BUF_SIZE); - if (!buf) - return; - - tmp = buf; - if (num_ch) { - buf_cons = qdf_snprint(tmp, buf_left, "{ "); - buf_left -= buf_cons; - tmp += buf_cons; - - for (i = 0; i < num_ch; i++) { - buf_cons = qdf_snprint(tmp, buf_left, "%d ", - neigh_rpt->freq[i]); - buf_left -= buf_cons; - tmp += buf_cons; - } - - buf_cons = qdf_snprint(tmp, buf_left, "}"); - buf_left -= buf_cons; - tmp += buf_cons; - } - - mlme_get_converted_timestamp(neigh_rpt->req_time, time); - wma_nofl_info("%s [%s] VDEV[%d]", time, - (type == 1) ? "BTM_QUERY" : "NEIGH_RPT_REQ", vdev_id); - if (type == 1) - cm_roam_btm_query_event(neigh_rpt, vdev_id); - - if (neigh_rpt->resp_time) { - mlme_get_converted_timestamp(neigh_rpt->resp_time, time1); - wma_nofl_info("%s [%s] VDEV[%d] %s", time1, - (type == 1) ? "BTM_REQ" : "NEIGH_RPT_RSP", - vdev_id, - (num_ch > 0) ? buf : "NO Ch update"); - } else { - wma_nofl_info("%s No response received from AP", - (type == 1) ? "BTM" : "NEIGH_RPT"); - } - qdf_mem_free(buf); -} - -static char * -wma_get_frame_subtype_str(enum mgmt_subtype frame_subtype) -{ - switch (frame_subtype) { - case MGMT_SUBTYPE_ASSOC_REQ: - return "ASSOC"; - case MGMT_SUBTYPE_ASSOC_RESP: - return "ASSOC"; - case MGMT_SUBTYPE_REASSOC_REQ: - return "REASSOC"; - case MGMT_SUBTYPE_REASSOC_RESP: - return "REASSOC"; - case MGMT_SUBTYPE_DISASSOC: - return "DISASSOC"; - case MGMT_SUBTYPE_AUTH: - return "AUTH"; - case MGMT_SUBTYPE_DEAUTH: - return "DEAUTH"; - default: - break; - } - - return "Invalid frm"; -} - -static void -wma_rso_print_frame_info(struct roam_frame_info *frame_data, uint8_t vdev_id) -{ - char time[TIME_STRING_LEN]; - - if (!frame_data->present) - return; - - mlme_get_converted_timestamp(frame_data->timestamp, time); - wma_nofl_info("%s [%s %s] VDEV[%d] status:%d seq_num:%d", time, - wma_get_frame_subtype_str(frame_data->subtype), - frame_data->is_req ? "REQ" : "RESP", vdev_id, - frame_data->status_code, frame_data->seq_num); - cm_roam_mgmt_frame_event(frame_data, vdev_id); -} - -int wma_roam_stats_event_handler(WMA_HANDLE handle, uint8_t *event, - uint32_t len) -{ - tp_wma_handle wma = (tp_wma_handle) handle; - WMI_ROAM_STATS_EVENTID_param_tlvs *param_buf; - wmi_roam_stats_event_fixed_param *fixed_param; - struct mlme_roam_debug_info *roam_info = NULL; - uint8_t vdev_id, i, k; - uint8_t num_tlv = 0, num_chan = 0, num_ap = 0, num_rpt = 0, rem_tlv = 0; - uint8_t num_frames = 0, num_btm = 0; - uint32_t rem_len; - QDF_STATUS status; - - param_buf = (WMI_ROAM_STATS_EVENTID_param_tlvs *)event; - if (!param_buf) { - wma_err_rl("NULL event received from target"); - goto err; - } - - fixed_param = param_buf->fixed_param; - if (!fixed_param) { - wma_err_rl(" NULL fixed param"); - goto err; - } - - vdev_id = fixed_param->vdev_id; - if (vdev_id >= wma->max_bssid) { - wma_err_rl("Invalid vdev_id %d", vdev_id); - goto err; - } - - num_tlv = fixed_param->roam_scan_trigger_count; - if (num_tlv > MAX_ROAM_SCAN_STATS_TLV) { - wma_err_rl("Limiting roam triggers to 5"); - num_tlv = MAX_ROAM_SCAN_STATS_TLV; - } - - rem_len = len - sizeof(*fixed_param); - if (rem_len < num_tlv * sizeof(wmi_roam_trigger_reason)) { - wma_err_rl("Invalid roam trigger data"); - goto err; - } - - rem_len -= num_tlv * sizeof(wmi_roam_trigger_reason); - if (rem_len < num_tlv * sizeof(wmi_roam_scan_info)) { - wma_err_rl("Invalid roam scan data"); - goto err; - } - - rem_len -= num_tlv * sizeof(wmi_roam_scan_info); - if (rem_len < num_tlv * sizeof(wmi_roam_result)) { - wma_err_rl("Invalid roam result data"); - goto err; - } - - rem_len -= num_tlv * sizeof(wmi_roam_result); - if (rem_len < (num_tlv * sizeof(wmi_roam_neighbor_report_info))) { - wma_err_rl("Invalid roam neighbor report data"); - goto err; - } - - rem_len -= num_tlv * sizeof(wmi_roam_neighbor_report_info); - if (rem_len < (param_buf->num_roam_scan_chan_info * - sizeof(wmi_roam_scan_channel_info))) { - wma_err_rl("Invalid roam chan data num_tlv:%d", - param_buf->num_roam_scan_chan_info); - goto err; - } - - rem_len -= param_buf->num_roam_scan_chan_info * - sizeof(wmi_roam_scan_channel_info); - - if (rem_len < (param_buf->num_roam_ap_info * - sizeof(wmi_roam_ap_info))) { - wma_err_rl("Invalid roam ap data num_tlv:%d", - param_buf->num_roam_ap_info); - goto err; - } - - rem_len -= param_buf->num_roam_ap_info * sizeof(wmi_roam_ap_info); - if (rem_len < (param_buf->num_roam_neighbor_report_chan_info * - sizeof(wmi_roam_neighbor_report_channel_info))) { - wma_err_rl("Invalid roam neigb rpt chan data num_tlv:%d", - param_buf->num_roam_neighbor_report_chan_info); - goto err; - } - - rem_len -= param_buf->num_roam_neighbor_report_chan_info * - sizeof(wmi_roam_neighbor_report_channel_info); - if (rem_len < param_buf->num_roam_btm_response_info * - sizeof(wmi_roam_btm_response_info)) { - wma_err_rl("Invalid btm rsp data"); - goto err; - } - - rem_len -= param_buf->num_roam_btm_response_info * - sizeof(wmi_roam_btm_response_info); - if (rem_len < param_buf->num_roam_initial_info * - sizeof(wmi_roam_initial_info)) { - wma_err_rl("Invalid Initial roam info"); - goto err; - } - - rem_len -= param_buf->num_roam_initial_info * - sizeof(wmi_roam_initial_info); - if (rem_len < param_buf->num_roam_msg_info * - sizeof(wmi_roam_msg_info)) { - wma_err_rl("Invalid roam msg info"); - goto err; - } - - rem_len -= param_buf->num_roam_msg_info * - sizeof(wmi_roam_msg_info); - if (rem_len < param_buf->num_roam_frame_info * - sizeof(wmi_roam_frame_info)) { - wma_err_rl("Invalid roam frm info"); - goto err; - } - - for (i = 0; i < num_tlv; i++) { - roam_info = qdf_mem_malloc(sizeof(*roam_info)); - if (!roam_info) - return -ENOMEM; - - /* - * Roam Trigger id and that specific roam trigger related - * details. - */ - status = wmi_unified_extract_roam_trigger_stats( - wma->wmi_handle, event, - &roam_info->trigger, i, - num_btm); - if (QDF_IS_STATUS_ERROR(status)) { - wma_debug_rl("Extract roam trigger stats failed vdev %d at %d iteration", - vdev_id, i); - qdf_mem_free(roam_info); - return -EINVAL; - } - - if (roam_info->trigger.trigger_reason == - WMI_ROAM_TRIGGER_REASON_BTM) - num_btm += roam_info->trigger.btm_trig_data.candidate_list_count; - - if (roam_info->trigger.present) { - bool is_full_scan = - roam_info->scan.present && - roam_info->scan.type; - wma_rso_print_trigger_info(&roam_info->trigger, - vdev_id, is_full_scan); - wlan_cm_update_roam_states(wma->psoc, vdev_id, - roam_info->trigger.trigger_reason, - ROAM_TRIGGER_REASON); - } - - /* Roam scan related details - Scan channel, scan type .. */ - status = wmi_unified_extract_roam_scan_stats( - wma->wmi_handle, event, - &roam_info->scan, i, - num_chan, num_ap); - if (QDF_IS_STATUS_ERROR(status)) { - wma_debug_rl("Roam scan stats extract failed vdev %d at %d iteration", - vdev_id, i); - qdf_mem_free(roam_info); - return -EINVAL; - } - num_chan += roam_info->scan.num_chan; - num_ap += roam_info->scan.num_ap; - - if (roam_info->scan.present && roam_info->trigger.present) - wma_rso_print_scan_info(&roam_info->scan, vdev_id, - roam_info->trigger.trigger_reason, - roam_info->trigger.timestamp); - - /* Roam result - Success/Failure status, failure reason */ - status = wmi_unified_extract_roam_result_stats( - wma->wmi_handle, event, - &roam_info->result, i); - if (QDF_IS_STATUS_ERROR(status)) { - wma_debug_rl("Roam result stats extract failed vdev %d at %d iteration", - vdev_id, i); - qdf_mem_free(roam_info); - return -EINVAL; - } - if (roam_info->result.present) { - wma_rso_print_roam_result(&roam_info->result, vdev_id); - wlan_cm_update_roam_states(wma->psoc, vdev_id, - roam_info->result.fail_reason, - ROAM_FAIL_REASON); - } - - status = wlan_cm_roam_extract_frame_info( - wma->wmi_handle, event, - roam_info->frame_info, num_frames, - roam_info->scan.frame_info_count); - if (QDF_IS_STATUS_ERROR(status)) { - wma_debug_rl("Roam frame extract failed vdev %d at %d iteration", - vdev_id, i); - qdf_mem_free(roam_info); - return -EINVAL; - } - num_frames += roam_info->scan.frame_info_count; - - if (roam_info->scan.frame_info_count) { - for (k = 0; k <= roam_info->scan.frame_info_count; k++) - wma_rso_print_frame_info( - &roam_info->frame_info[k], - vdev_id); - } - - /* BTM resp info */ - status = wlan_cm_roam_extract_btm_response(wma->wmi_handle, - event, - &roam_info->btm_rsp, - i); - if (QDF_IS_STATUS_ERROR(status)) { - wma_debug_rl("Roam btm rsp stats extract fail vdev %d at %d iteration", - vdev_id, i); - qdf_mem_free(roam_info); - return -EINVAL; - } - - /* - * Print BTM resp TLV info (wmi_roam_btm_response_info) only - * when trigger reason is BTM or WTC_BTM. As for other roam - * triggers this TLV contains zeros, so host should not print. - */ - if ((roam_info->btm_rsp.present) && - (roam_info->trigger.present && - (roam_info->trigger.trigger_reason == - WMI_ROAM_TRIGGER_REASON_WTC_BTM || - roam_info->trigger.trigger_reason == - WMI_ROAM_TRIGGER_REASON_BTM))) { - bool is_wtc = - (roam_info->trigger.trigger_reason == - ROAM_TRIGGER_REASON_WTC_BTM); - wma_rso_print_btm_rsp_info(&roam_info->btm_rsp, - vdev_id, is_wtc); - } - - /* Initial Roam info */ - status = wlan_cm_roam_extract_roam_initial_info( - wma->wmi_handle, event, - &roam_info->roam_init_info, i); - if (QDF_IS_STATUS_ERROR(status)) { - wma_debug_rl("Initial roam stats extract fail vdev %d at %d iteration", - vdev_id, i); - qdf_mem_free(roam_info); - return -EINVAL; - } - if (roam_info->roam_init_info.present) - wma_rso_print_roam_initial_info( - &roam_info->roam_init_info, vdev_id); - - /* Roam message info */ - status = wlan_cm_roam_extract_roam_msg_info( - wma->wmi_handle, event, - &roam_info->roam_msg_info, i); - if (QDF_IS_STATUS_ERROR(status)) { - wma_err("roam msg stats extract fail vdev %d", - vdev_id); - qdf_mem_free(roam_info); - return -EINVAL; - } - if (roam_info->roam_msg_info.present) { - rem_tlv++; - wma_rso_print_roam_msg_info( - &roam_info->roam_msg_info, vdev_id); - - /* BTM req/resp or Neighbor report/response info */ - status = wmi_unified_extract_roam_11kv_stats( - wma->wmi_handle, event, - &roam_info->data_11kv, i, num_rpt); - if (QDF_IS_STATUS_ERROR(status)) { - wma_debug_rl("Roam 11kv stats extract failed vdev %d at %d iteration", - vdev_id, i); - qdf_mem_free(roam_info); - return -EINVAL; - } - num_rpt += roam_info->data_11kv.num_freq; - if (roam_info->data_11kv.present) - wma_rso_print_11kv_info(&roam_info->data_11kv, vdev_id); - } - - qdf_mem_free(roam_info); - } - - if (!num_tlv) { - roam_info = qdf_mem_malloc(sizeof(*roam_info)); - if (!roam_info) - return -ENOMEM; - - status = wmi_unified_extract_roam_11kv_stats( - wma->wmi_handle, event, - &roam_info->data_11kv, 0, 0); - if (QDF_IS_STATUS_ERROR(status)) { - wma_err("Roam 11kv stats extract failed vdev %d", - vdev_id); - qdf_mem_free(roam_info); - return -EINVAL; - } - - if (roam_info->data_11kv.present) - wma_rso_print_11kv_info(&roam_info->data_11kv, vdev_id); - - status = wmi_unified_extract_roam_trigger_stats( - wma->wmi_handle, event, - &roam_info->trigger, 0, 0); - if (QDF_IS_STATUS_ERROR(status)) { - wma_debug_rl("Extract roam trigger stats failed vdev %d", - vdev_id); - qdf_mem_free(roam_info); - return -EINVAL; - } - - if (roam_info->trigger.present) - wma_rso_print_trigger_info(&roam_info->trigger, - vdev_id, 1); - - status = wmi_unified_extract_roam_scan_stats(wma->wmi_handle, - event, - &roam_info->scan, - 0, 0, 0); - if (QDF_IS_STATUS_ERROR(status)) { - wma_debug_rl("Roam scan stats extract failed vdev %d", - vdev_id); - qdf_mem_free(roam_info); - return -EINVAL; - } - - if (roam_info->scan.present && roam_info->trigger.present) - wma_rso_print_scan_info(&roam_info->scan, vdev_id, - roam_info->trigger.trigger_reason, - roam_info->trigger.timestamp); - - status = wlan_cm_roam_extract_btm_response(wma->wmi_handle, - event, - &roam_info->btm_rsp, - 0); - if (QDF_IS_STATUS_ERROR(status)) { - wma_debug_rl("Roam btm rsp stats extract fail vdev %d", - vdev_id); - qdf_mem_free(roam_info); - return -EINVAL; - } - - if (roam_info->btm_rsp.present) { - bool is_wtc = - (roam_info->trigger.present && - roam_info->trigger.trigger_reason == - ROAM_TRIGGER_REASON_WTC_BTM); - wma_rso_print_btm_rsp_info(&roam_info->btm_rsp, - vdev_id, is_wtc); - } - - qdf_mem_free(roam_info); - } - - if (param_buf->roam_msg_info && param_buf->num_roam_msg_info && - param_buf->num_roam_msg_info - rem_tlv) { - for (i = 0; i < (param_buf->num_roam_msg_info - rem_tlv); i++) { - roam_info = qdf_mem_malloc(sizeof(*roam_info)); - if (!roam_info) - return -ENOMEM; - status = wlan_cm_roam_extract_roam_msg_info( - wma->wmi_handle, event, - &roam_info->roam_msg_info, rem_tlv + i); - if (QDF_IS_STATUS_ERROR(status)) { - wma_err("roam msg stats extract fail vdev %d", - vdev_id); - qdf_mem_free(roam_info); - return -EINVAL; - } - - if (roam_info->roam_msg_info.present) - wma_rso_print_roam_msg_info( - &roam_info->roam_msg_info, - vdev_id); - qdf_mem_free(roam_info); - } - } - - return 0; - -err: - return -EINVAL; -} -#endif -#endif - /** * wma_set_ric_req() - set ric request element * @wma: wma handle @@ -4249,48 +2524,6 @@ void wma_roam_better_ap_handler(tp_wma_handle wma, uint32_t vdev_id) qdf_mem_free(msg.bodyptr); } -#ifndef ROAM_TARGET_IF_CONVERGENCE -/** - * wma_handle_hw_mode_in_roam_fail() - Fill hw mode info if present in policy - * manager. - * @wma: wma handle - * @param: roam event params - * - * Return: None - */ -static int wma_handle_hw_mode_transition(tp_wma_handle wma, - WMI_ROAM_EVENTID_param_tlvs *param) -{ - struct cm_hw_mode_trans_ind *hw_mode_trans_ind; - struct scheduler_msg sme_msg = {0}; - QDF_STATUS status; - - if (param->hw_mode_transition_fixed_param) { - hw_mode_trans_ind = qdf_mem_malloc(sizeof(*hw_mode_trans_ind)); - if (!hw_mode_trans_ind) - return -ENOMEM; - wma_process_pdev_hw_mode_trans_ind(wma, - param->hw_mode_transition_fixed_param, - param->wmi_pdev_set_hw_mode_response_vdev_mac_mapping, - hw_mode_trans_ind); - - wma_debug("Update HW mode"); - sme_msg.type = eWNI_SME_HW_MODE_TRANS_IND; - sme_msg.bodyptr = hw_mode_trans_ind; - - status = scheduler_post_message(QDF_MODULE_ID_WMA, - QDF_MODULE_ID_SME, - QDF_MODULE_ID_SME, &sme_msg); - if (QDF_IS_STATUS_ERROR(status)) - qdf_mem_free(hw_mode_trans_ind); - } else { - wma_debug("hw_mode transition fixed param is NULL"); - } - - return 0; -} -#endif - #ifdef WLAN_FEATURE_ROAM_OFFLOAD /** * wma_invalid_roam_reason_handler() - Handle Invalid roam notification @@ -4342,7 +2575,6 @@ void wma_handle_roam_sync_timeout(tp_wma_handle wma_handle, CM_ROAM_NOTIF_ROAM_ABORT); } -#ifdef ROAM_TARGET_IF_CONVERGENCE void cm_invalid_roam_reason_handler(uint32_t vdev_id, enum cm_roam_notif notif) { tp_wma_handle wma_handle = cds_get_context(QDF_MODULE_ID_WMA); @@ -4354,7 +2586,6 @@ void cm_invalid_roam_reason_handler(uint32_t vdev_id, enum cm_roam_notif notif) wma_invalid_roam_reason_handler(wma_handle, vdev_id, notif); } #endif -#endif static void wma_handle_roam_reason_invoke_roam_fail(tp_wma_handle wma_handle, @@ -4448,7 +2679,6 @@ static void wma_handle_roam_reason_suitable_ap(uint8_t vdev_id, uint32_t rssi) wma_roam_better_ap_handler(wma_handle, vdev_id); } -#ifdef ROAM_TARGET_IF_CONVERGENCE static void wma_update_pdev_hw_mode_trans_ind(tp_wma_handle wma, struct cm_hw_mode_trans_ind *trans_ind) @@ -4601,163 +2831,6 @@ cm_handle_roam_reason_ho_failed(uint8_t vdev_id, struct qdf_mac_addr bssid, } #endif -#else -static char *wma_get_roam_event_reason_string(uint32_t reason) -{ - switch (reason) { - case WMI_ROAM_REASON_INVALID: - return "Default"; - case WMI_ROAM_REASON_BETTER_AP: - return "Better AP"; - case WMI_ROAM_REASON_BMISS: - return "BMISS"; - case WMI_ROAM_REASON_LOW_RSSI: - return "Low Rssi"; - case WMI_ROAM_REASON_SUITABLE_AP: - return "Suitable AP"; - case WMI_ROAM_REASON_HO_FAILED: - return "Hand-off Failed"; - case WMI_ROAM_REASON_INVOKE_ROAM_FAIL: - return "Roam Invoke failed"; - case WMI_ROAM_REASON_RSO_STATUS: - return "RSO status"; - case WMI_ROAM_REASON_BTM: - return "BTM"; - case WMI_ROAM_REASON_DEAUTH: - return "Deauth"; - default: - return "Invalid"; - } - - return "Invalid"; -} - -/** - * wma_roam_event_callback() - roam event callback - * @handle: wma handle - * @event_buf: event buffer - * @len: buffer length - * - * Handler for all events from roam engine in firmware - * - * Return: 0 for success or error code - */ -int wma_roam_event_callback(WMA_HANDLE handle, uint8_t *event_buf, - uint32_t len) -{ - tp_wma_handle wma_handle = (tp_wma_handle) handle; - WMI_ROAM_EVENTID_param_tlvs *param_buf; - wmi_roam_event_fixed_param *wmi_event; - struct roam_offload_synch_ind *roam_synch_data; - uint8_t *frame = NULL; -#ifdef WLAN_FEATURE_ROAM_OFFLOAD - struct qdf_mac_addr bssid; -#endif - - param_buf = (WMI_ROAM_EVENTID_param_tlvs *) event_buf; - if (!param_buf) { - wma_err("Invalid roam event buffer"); - return -EINVAL; - } - - wmi_event = param_buf->fixed_param; - if (wmi_event->vdev_id >= wma_handle->max_bssid) { - wma_err("Invalid vdev id from firmware"); - return -EINVAL; - } - wlan_roam_debug_log(wmi_event->vdev_id, DEBUG_ROAM_EVENT, - DEBUG_INVALID_PEER_ID, NULL, NULL, - wmi_event->reason, - (wmi_event->reason == WMI_ROAM_REASON_INVALID) ? - wmi_event->notif : wmi_event->rssi); - - DPTRACE(qdf_dp_trace_record_event(QDF_DP_TRACE_EVENT_RECORD, - wmi_event->vdev_id, QDF_TRACE_DEFAULT_PDEV_ID, - QDF_PROTO_TYPE_EVENT, QDF_ROAM_EVENTID)); - - wma_debug("FW_ROAM_EVT: Reason:%s[%d], Notif %x for vdevid %x, rssi %d", - wma_get_roam_event_reason_string(wmi_event->reason), - wmi_event->reason, - wmi_event->notif, wmi_event->vdev_id, wmi_event->rssi); - - switch (wmi_event->reason) { - case WMI_ROAM_REASON_BTM: - wma_handle_roam_reason_btm(wmi_event->vdev_id); - break; - case WMI_ROAM_REASON_BMISS: - wma_handle_roam_reason_bmiss(wmi_event->vdev_id, - wmi_event->rssi); - break; - case WMI_ROAM_REASON_BETTER_AP: - wma_handle_roam_reason_better_ap(wmi_event->vdev_id, - wmi_event->rssi); - break; - case WMI_ROAM_REASON_SUITABLE_AP: - wma_handle_roam_reason_suitable_ap(wmi_event->vdev_id, - wmi_event->rssi); - break; -#ifdef WLAN_FEATURE_ROAM_OFFLOAD - case WMI_ROAM_REASON_HO_FAILED: - /* - * WMI_ROAM_REASON_HO_FAILED can get called in soft IRQ context, - * so avoid using CSR/PE structure directly. - */ - wma_err("LFR3:Hand-Off Failed for vdevid %x", - wmi_event->vdev_id); - bssid.bytes[0] = wmi_event->notif_params >> 0 & 0xFF; - bssid.bytes[1] = wmi_event->notif_params >> 8 & 0xFF; - bssid.bytes[2] = wmi_event->notif_params >> 16 & 0xFF; - bssid.bytes[3] = wmi_event->notif_params >> 24 & 0xFF; - bssid.bytes[4] = wmi_event->notif_params1 >> 0 & 0xFF; - bssid.bytes[5] = wmi_event->notif_params1 >> 8 & 0xFF; - wma_debug("mac addr to avoid "QDF_MAC_ADDR_FMT, - QDF_MAC_ADDR_REF(bssid.bytes)); - wma_handle_hw_mode_transition(wma_handle, param_buf); - cm_fw_ho_fail_req(wma_handle->psoc, wmi_event->vdev_id, bssid); - - lim_sae_auth_cleanup_retry(wma_handle->mac_context, - wmi_event->vdev_id); - break; - case WMI_ROAM_REASON_INVALID: - wma_invalid_roam_reason_handler(wma_handle, wmi_event->vdev_id, - wmi_event->notif); - break; -#endif - case WMI_ROAM_REASON_RSO_STATUS: - wma_rso_cmd_status_event_handler(wmi_event->vdev_id, - wmi_event->notif); - break; - case WMI_ROAM_REASON_INVOKE_ROAM_FAIL: - wma_handle_hw_mode_transition(wma_handle, param_buf); - wma_handle_roam_reason_invoke_roam_fail(wma_handle, - wmi_event->vdev_id, - wmi_event->notif_params); - break; - case WMI_ROAM_REASON_DEAUTH: - wma_debug("Received disconnect roam event reason:%d", - wmi_event->notif_params); - if (wmi_event->notif_params1) - frame = param_buf->deauth_disassoc_frame; - wma_handle->pe_disconnect_cb(wma_handle->mac_context, - wmi_event->vdev_id, - frame, wmi_event->notif_params1, - wmi_event->notif_params); - roam_synch_data = qdf_mem_malloc(sizeof(*roam_synch_data)); - if (!roam_synch_data) - return -ENOMEM; - - roam_synch_data->roamed_vdev_id = wmi_event->vdev_id; - qdf_mem_free(roam_synch_data); - break; - default: - wma_debug("Unhandled Roam Event %x for vdevid %x", - wmi_event->reason, wmi_event->vdev_id); - break; - } - return 0; -} -#endif - #ifdef FEATURE_LFR_SUBNET_DETECTION QDF_STATUS wma_set_gateway_params(tp_wma_handle wma, struct gateway_update_req_param *req) @@ -4917,212 +2990,7 @@ QDF_STATUS wma_send_ht40_obss_scanind(tp_wma_handle wma, return status; } -#ifndef ROAM_TARGET_IF_CONVERGENCE -static enum blm_reject_ap_reason wma_get_reject_reason(uint32_t reason) -{ - switch(reason) { - case WMI_BL_REASON_NUD_FAILURE: - return REASON_NUD_FAILURE; - case WMI_BL_REASON_STA_KICKOUT: - return REASON_STA_KICKOUT; - case WMI_BL_REASON_ROAM_HO_FAILURE: - return REASON_ROAM_HO_FAILURE; - case WMI_BL_REASON_ASSOC_REJECT_POOR_RSSI: - return REASON_ASSOC_REJECT_POOR_RSSI; - case WMI_BL_REASON_ASSOC_REJECT_OCE: - return REASON_ASSOC_REJECT_OCE; - case WMI_BL_REASON_USERSPACE_BL: - return REASON_USERSPACE_BL; - case WMI_BL_REASON_USERSPACE_AVOID_LIST: - return REASON_USERSPACE_AVOID_LIST; - case WMI_BL_REASON_BTM_DIASSOC_IMMINENT: - return REASON_BTM_DISASSOC_IMMINENT; - case WMI_BL_REASON_BTM_BSS_TERMINATION: - return REASON_BTM_BSS_TERMINATION; - case WMI_BL_REASON_BTM_MBO_RETRY: - return REASON_BTM_MBO_RETRY; - case WMI_BL_REASON_REASSOC_RSSI_REJECT: - return REASON_REASSOC_RSSI_REJECT; - case WMI_BL_REASON_REASSOC_NO_MORE_STAS: - return REASON_REASSOC_NO_MORE_STAS; - default: - return REASON_UNKNOWN; - } -} - -int wma_handle_btm_blacklist_event(void *handle, uint8_t *cmd_param_info, - uint32_t len) -{ - tp_wma_handle wma = (tp_wma_handle) handle; - WMI_ROAM_BLACKLIST_EVENTID_param_tlvs *param_buf; - wmi_roam_blacklist_event_fixed_param *resp_event; - wmi_roam_blacklist_with_timeout_tlv_param *src_list; - struct roam_blacklist_event *dst_list; - struct roam_blacklist_timeout *roam_blacklist; - uint32_t num_entries, i; - - param_buf = (WMI_ROAM_BLACKLIST_EVENTID_param_tlvs *)cmd_param_info; - if (!param_buf) { - wma_err("Invalid event buffer"); - return -EINVAL; - } - - resp_event = param_buf->fixed_param; - if (!resp_event) { - wma_err("received null event data from target"); - return -EINVAL; - } - - if (resp_event->vdev_id >= wma->max_bssid) { - wma_err("received invalid vdev_id %d", resp_event->vdev_id); - return -EINVAL; - } - - num_entries = param_buf->num_blacklist_with_timeout; - if (num_entries == 0) { - /* no aps to blacklist just return*/ - wma_err("No APs in blacklist received"); - return 0; - } - - if (num_entries > MAX_RSSI_AVOID_BSSID_LIST) { - wma_err("num blacklist entries:%d exceeds maximum value", - num_entries); - return -EINVAL; - } - - src_list = param_buf->blacklist_with_timeout; - if (len < (sizeof(*resp_event) + (num_entries * sizeof(*src_list)))) { - wma_err("Invalid length:%d", len); - return -EINVAL; - } - - dst_list = qdf_mem_malloc(sizeof(struct roam_blacklist_event) + - (sizeof(struct roam_blacklist_timeout) * - num_entries)); - if (!dst_list) - return -ENOMEM; - - roam_blacklist = &dst_list->roam_blacklist[0]; - for (i = 0; i < num_entries; i++) { - WMI_MAC_ADDR_TO_CHAR_ARRAY(&src_list->bssid, - roam_blacklist->bssid.bytes); - roam_blacklist->timeout = src_list->timeout; - roam_blacklist->received_time = src_list->timestamp; - roam_blacklist->original_timeout = src_list->original_timeout; - roam_blacklist->reject_reason = - wma_get_reject_reason(src_list->reason); - roam_blacklist->source = src_list->source; - roam_blacklist++; - src_list++; - } - - dst_list->num_entries = num_entries; - wma_send_msg(wma, WMA_ROAM_BLACKLIST_MSG, (void *)dst_list, 0); - return 0; -} -#endif - -#if defined(WLAN_FEATURE_ROAM_OFFLOAD) && defined(WLAN_FEATURE_FIPS) -#ifndef ROAM_TARGET_IF_CONVERGENCE -void wma_register_pmkid_req_event_handler(tp_wma_handle wma_handle) -{ - if (wma_validate_handle(wma_handle)) - return; - - wmi_unified_register_event_handler(wma_handle->wmi_handle, - wmi_roam_pmkid_request_event_id, - wma_roam_pmkid_request_event_handler, - WMA_RX_SERIALIZER_CTX); -} - -int wma_roam_pmkid_request_event_handler(void *handle, uint8_t *event, - uint32_t len) -{ - WMI_ROAM_PMKID_REQUEST_EVENTID_param_tlvs *param_buf; - wmi_roam_pmkid_request_event_fixed_param *roam_pmkid_req_ev; - wmi_roam_pmkid_request_tlv_param *src_list; - tp_wma_handle wma = (tp_wma_handle)handle; - struct roam_pmkid_req_event *dst_list; - struct qdf_mac_addr *roam_bsslist; - uint32_t num_entries, i; - QDF_STATUS status; - - if (!event) { - wma_err("received null event from target"); - return -EINVAL; - } - - param_buf = (WMI_ROAM_PMKID_REQUEST_EVENTID_param_tlvs *)event; - if (!param_buf) { - wma_err("received null buf from target"); - return -EINVAL; - } - - roam_pmkid_req_ev = param_buf->fixed_param; - if (!roam_pmkid_req_ev) { - wma_err("received null event data from target"); - return -EINVAL; - } - - if (roam_pmkid_req_ev->vdev_id >= wma->max_bssid) { - wma_err("received invalid vdev_id %d", roam_pmkid_req_ev->vdev_id); - return -EINVAL; - } - - num_entries = param_buf->num_pmkid_request; - if (num_entries > MAX_RSSI_AVOID_BSSID_LIST) { - wma_err("num bssid entries:%d exceeds maximum value", - num_entries); - return -EINVAL; - } - - src_list = param_buf->pmkid_request; - if (len < (sizeof(*roam_pmkid_req_ev) + - (num_entries * sizeof(*src_list)))) { - wma_err("Invalid length: %d", len); - return -EINVAL; - } - - dst_list = qdf_mem_malloc(sizeof(struct roam_pmkid_req_event) + - (sizeof(struct qdf_mac_addr) * num_entries)); - if (!dst_list) - return -ENOMEM; - - for (i = 0; i < num_entries; i++) { - roam_bsslist = &dst_list->ap_bssid[i]; - WMI_MAC_ADDR_TO_CHAR_ARRAY(&src_list->bssid, - roam_bsslist->bytes); - if (qdf_is_macaddr_zero(roam_bsslist) || - qdf_is_macaddr_broadcast(roam_bsslist) || - qdf_is_macaddr_group(roam_bsslist)) { - wma_err("Invalid bssid"); - qdf_mem_free(dst_list); - return -EINVAL; - } - wma_debug("Received pmkid fallback for bssid: "QDF_MAC_ADDR_FMT" vdev_id:%d", - QDF_MAC_ADDR_REF(roam_bsslist->bytes), - roam_pmkid_req_ev->vdev_id); - src_list++; - } - dst_list->num_entries = num_entries; - - status = cm_roam_pmkid_req_ind(wma->psoc, roam_pmkid_req_ev->vdev_id, - dst_list); - if (QDF_IS_STATUS_ERROR(status)) { - wma_err("Pmkid request failed"); - qdf_mem_free(dst_list); - return -EINVAL; - } - - qdf_mem_free(dst_list); - return 0; -} -#endif -#endif - #ifdef WLAN_FEATURE_ROAM_OFFLOAD -#ifdef ROAM_TARGET_IF_CONVERGENCE void cm_roam_update_vdev(struct roam_offload_synch_ind *sync_ind) { tp_wma_handle wma = cds_get_context(QDF_MODULE_ID_WMA); @@ -5166,5 +3034,4 @@ wlan_cm_fw_to_host_phymode(WMI_HOST_WLAN_PHY_MODE phymode) { return wma_fw_to_host_phymode(phymode); } -#endif /* ROAM_TARGET_IF_CONVERGENCE */ #endif diff --git a/core/wma/src/wma_utils.c b/core/wma/src/wma_utils.c index 2894a0cd23..5ed495ff32 100644 --- a/core/wma/src/wma_utils.c +++ b/core/wma/src/wma_utils.c @@ -4332,28 +4332,6 @@ QDF_STATUS wma_sta_mlme_vdev_start_continue(struct vdev_mlme_obj *vdev_mlme, return QDF_STATUS_SUCCESS; } -#ifndef ROAM_TARGET_IF_CONVERGENCE -QDF_STATUS wma_sta_mlme_vdev_roam_notify(struct vdev_mlme_obj *vdev_mlme, - uint16_t data_len, void *data) -{ - tp_wma_handle wma; - int ret; - QDF_STATUS status = QDF_STATUS_SUCCESS; - - wma = cds_get_context(QDF_MODULE_ID_WMA); - if (!wma) - return QDF_STATUS_E_INVAL; - - ret = wma_mlme_roam_synch_event_handler_cb(wma, data, data_len); - if (ret != 0) { - wma_err("Failed to process roam synch event"); - status = QDF_STATUS_E_FAILURE; - } - - return status; -} -#endif - QDF_STATUS wma_ap_mlme_vdev_start_continue(struct vdev_mlme_obj *vdev_mlme, uint16_t data_len, void *data) {