diff --git a/components/mlme/core/inc/wlan_mlme_main.h b/components/mlme/core/inc/wlan_mlme_main.h index afe1b2215a..ab3069a347 100644 --- a/components/mlme/core/inc/wlan_mlme_main.h +++ b/components/mlme/core/inc/wlan_mlme_main.h @@ -160,6 +160,8 @@ struct wlan_mlme_roam { * @cm_roam: Roaming configuration * @bigtk_vdev_support: BIGTK feature support for this vdev (SAP) * @sae_auth_retry: SAE auth retry information + * @roam_reason_better_ap: roam due to better AP found + * @better_ap_hb_failure_rssi: heartbeat failure AP RSSI */ struct mlme_legacy_priv { bool chan_switch_in_progress; @@ -180,6 +182,8 @@ struct mlme_legacy_priv { struct wlan_cm_roam cm_roam; bool bigtk_vdev_support; struct sae_auth_retry sae_retry; + bool roam_reason_better_ap; + uint32_t hb_failure_rssi; }; /** diff --git a/components/mlme/core/inc/wlan_mlme_vdev_mgr_interface.h b/components/mlme/core/inc/wlan_mlme_vdev_mgr_interface.h index 8db94c1537..29a834a4f8 100644 --- a/components/mlme/core/inc/wlan_mlme_vdev_mgr_interface.h +++ b/components/mlme/core/inc/wlan_mlme_vdev_mgr_interface.h @@ -115,6 +115,41 @@ QDF_STATUS mlme_set_bigtk_support(struct wlan_objmgr_vdev *vdev, bool val); bool mlme_get_bigtk_support(struct wlan_objmgr_vdev *vdev); +/** + * mlme_set_roam_reason_better_ap() - set roam reason better AP + * @vdev: vdev pointer + * @val: value to be set + * + * Return: QDF_STATUS + */ +QDF_STATUS +mlme_set_roam_reason_better_ap(struct wlan_objmgr_vdev *vdev, bool val); + +/** + * mlme_get_roam_reason_better_ap() - get roam reason better AP + * @vdev: vdev pointer + * + * Return: bool + */ +bool mlme_get_roam_reason_better_ap(struct wlan_objmgr_vdev *vdev); + +/** + * mlme_set_hb_ap_rssi() - set hb ap RSSI + * @vdev: vdev pointer + * @val: value to be set + * + * Return: QDF_STATUS + */ +QDF_STATUS mlme_set_hb_ap_rssi(struct wlan_objmgr_vdev *vdev, uint32_t val); + +/** + * mlme_get_hb_ap_rssi() - get HB AP RSSIc + * @vdev: vdev pointer + * + * Return: rssi value + */ +uint32_t mlme_get_hb_ap_rssi(struct wlan_objmgr_vdev *vdev); + /** * mlme_set_connection_fail() - set connection failure flag * @vdev: vdev pointer 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 4929c41049..71f20de155 100644 --- a/components/mlme/core/src/wlan_mlme_vdev_mgr_interface.c +++ b/components/mlme/core/src/wlan_mlme_vdev_mgr_interface.c @@ -657,6 +657,65 @@ bool mlme_get_bigtk_support(struct wlan_objmgr_vdev *vdev) return mlme_priv->bigtk_vdev_support; } +QDF_STATUS +mlme_set_roam_reason_better_ap(struct wlan_objmgr_vdev *vdev, bool val) +{ + struct mlme_legacy_priv *mlme_priv; + + mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev); + if (!mlme_priv) { + mlme_legacy_err("vdev legacy private object is NULL"); + return QDF_STATUS_E_FAILURE; + } + + mlme_priv->roam_reason_better_ap = val; + + return QDF_STATUS_SUCCESS; +} + +bool mlme_get_roam_reason_better_ap(struct wlan_objmgr_vdev *vdev) +{ + struct mlme_legacy_priv *mlme_priv; + + mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev); + if (!mlme_priv) { + mlme_legacy_err("vdev legacy private object is NULL"); + return false; + } + + return mlme_priv->roam_reason_better_ap; +} + +QDF_STATUS +mlme_set_hb_ap_rssi(struct wlan_objmgr_vdev *vdev, uint32_t val) +{ + struct mlme_legacy_priv *mlme_priv; + + mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev); + if (!mlme_priv) { + mlme_legacy_err("vdev legacy private object is NULL"); + return QDF_STATUS_E_FAILURE; + } + + mlme_priv->hb_failure_rssi = val; + + return QDF_STATUS_SUCCESS; +} + +uint32_t mlme_get_hb_ap_rssi(struct wlan_objmgr_vdev *vdev) +{ + struct mlme_legacy_priv *mlme_priv; + + mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev); + if (!mlme_priv) { + mlme_legacy_err("vdev legacy private object is NULL"); + return 0; + } + + return mlme_priv->hb_failure_rssi; +} + + QDF_STATUS mlme_set_connection_fail(struct wlan_objmgr_vdev *vdev, bool val) { struct mlme_legacy_priv *mlme_priv; diff --git a/components/target_if/connection_mgr/src/target_if_cm_roam_offload.c b/components/target_if/connection_mgr/src/target_if_cm_roam_offload.c index 18f5b6a25d..32e9111600 100644 --- a/components/target_if/connection_mgr/src/target_if_cm_roam_offload.c +++ b/components/target_if/connection_mgr/src/target_if_cm_roam_offload.c @@ -565,6 +565,26 @@ target_if_cm_roam_scan_filter(wmi_unified_t wmi_handle, uint8_t command, return status; } +/** + * target_if_cm_roam_scan_btm_offload() - send roam scan btm offload to firmware + * @wmi_handle: wmi handle + * @req: roam scan btm offload parameters + * + * Send WMI_ROAM_BTM_CONFIG_CMDID parameters to firmware + * + * Return: QDF status + */ +static QDF_STATUS +target_if_cm_roam_scan_btm_offload(wmi_unified_t wmi_handle, + struct wlan_roam_btm_config *req) +{ + target_if_debug("vdev %u btm_offload:%u btm_query_bitmask:%u btm_candidate_min_score:%d", + req->vdev_id, req->btm_offload_config, + req->btm_query_bitmask, req->btm_candidate_min_score); + + return wmi_unified_send_btm_config(wmi_handle, req); +} + static uint32_t target_if_get_wmi_roam_offload_flag(uint32_t flag) { @@ -613,7 +633,7 @@ target_if_cm_roam_send_roam_init(struct wlan_objmgr_vdev *vdev, } /** - * target_if_cm_roam_send_roam_start() - Send roam start related commands + * target_if_cm_roam_send_start() - Send roam start related commands * to wmi * @vdev: vdev object * @req: roam start config parameters @@ -623,8 +643,8 @@ target_if_cm_roam_send_roam_init(struct wlan_objmgr_vdev *vdev, * Return: QDF_STATUS */ static QDF_STATUS -target_if_cm_roam_send_roam_start(struct wlan_objmgr_vdev *vdev, - struct wlan_roam_start_config *req) +target_if_cm_roam_send_start(struct wlan_objmgr_vdev *vdev, + struct wlan_roam_start_config *req) { QDF_STATUS status = QDF_STATUS_SUCCESS; wmi_unified_t wmi_handle; @@ -678,11 +698,107 @@ target_if_cm_roam_send_roam_start(struct wlan_objmgr_vdev *vdev, goto end; } + status = target_if_cm_roam_scan_btm_offload(wmi_handle, + &req->btm_config); + if (QDF_IS_STATUS_ERROR(status)) { + target_if_err("Sending BTM config to fw failed"); + } + /* add other wmi commands */ end: return status; } +/** + * target_if_cm_roam_send_stop() - Send roam stop related commands + * to wmi + * @vdev: vdev object + * @req: roam stop config parameters + * + * This function is used to Send roam start related commands to wmi + * + * Return: QDF_STATUS + */ +static QDF_STATUS +target_if_cm_roam_send_stop(struct wlan_objmgr_vdev *vdev, + struct wlan_roam_stop_config *req) +{ + wmi_unified_t wmi_handle; + + wmi_handle = target_if_cm_roam_get_wmi_handle_from_vdev(vdev); + if (!wmi_handle) + return QDF_STATUS_E_FAILURE; + + return QDF_STATUS_SUCCESS; +} + +/** + * target_if_cm_roam_send_update_config() - Send roam update config related + * commands to wmi + * @vdev: vdev object + * @req: roam update config parameters + * + * Return: QDF_STATUS + */ +static QDF_STATUS +target_if_cm_roam_send_update_config(struct wlan_objmgr_vdev *vdev, + struct wlan_roam_update_config *req) +{ + wmi_unified_t wmi_handle; + + wmi_handle = target_if_cm_roam_get_wmi_handle_from_vdev(vdev); + if (!wmi_handle) + return QDF_STATUS_E_FAILURE; + + return QDF_STATUS_SUCCESS; +} + +/** + * target_if_cm_roam_abort() - Send roam abort to wmi + * @vdev: vdev object + * @vdev_id: vdev id + * + * Return: QDF_STATUS + */ +static QDF_STATUS +target_if_cm_roam_abort(struct wlan_objmgr_vdev *vdev, uint8_t vdev_id) +{ + wmi_unified_t wmi_handle; + + wmi_handle = target_if_cm_roam_get_wmi_handle_from_vdev(vdev); + if (!wmi_handle) + return QDF_STATUS_E_FAILURE; + + if (!target_if_is_vdev_valid(vdev_id)) { + target_if_err("Invalid vdev id:%d", vdev_id); + return QDF_STATUS_E_FAILURE; + } + return wmi_unified_roam_scan_offload_cmd(wmi_handle, + WMI_ROAM_SCAN_STOP_CMD, + vdev_id); +} + +/** + * target_if_cm_roam_send_update_config() - Send roam update config related + * commands to wmi + * @vdev: vdev object + * @req: roam per config parameters + * + * Return: QDF_STATUS + */ +static QDF_STATUS +target_if_cm_roam_per_config(struct wlan_objmgr_vdev *vdev, + struct wlan_per_roam_config_req *req) +{ + wmi_unified_t wmi_handle; + + wmi_handle = target_if_cm_roam_get_wmi_handle_from_vdev(vdev); + if (!wmi_handle) + return QDF_STATUS_E_FAILURE; + + return wmi_unified_set_per_roam_config(wmi_handle, req); +} + /** * target_if_cm_roam_register_rso_req_ops() - Register rso req tx ops fucntions * @tx_ops: tx ops @@ -695,7 +811,11 @@ static void target_if_cm_roam_register_rso_req_ops(struct wlan_cm_roam_tx_ops *tx_ops) { tx_ops->send_roam_offload_init_req = target_if_cm_roam_send_roam_init; - tx_ops->send_roam_start_req = target_if_cm_roam_send_roam_start; + tx_ops->send_roam_start_req = target_if_cm_roam_send_start; + tx_ops->send_roam_stop_offload = target_if_cm_roam_send_stop; + tx_ops->send_roam_update_config = target_if_cm_roam_send_update_config; + tx_ops->send_roam_abort = target_if_cm_roam_abort; + tx_ops->send_roam_per_config = target_if_cm_roam_per_config; } #else static void diff --git a/components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_offload.c b/components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_offload.c index 42e5bd2d64..48ea969365 100644 --- a/components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_offload.c +++ b/components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_offload.c @@ -22,12 +22,14 @@ * Implementation for the common roaming offload api interfaces. */ +#include "wlan_mlme_main.h" #include "wlan_cm_roam_offload.h" #include "wlan_cm_tgt_if_tx_api.h" #include "wlan_cm_roam_api.h" +#include "wlan_mlme_vdev_mgr_interface.h" /** - * wlan_cm_roam_scan_bmiss_cnt() - set roam beacon miss count + * cm_roam_scan_bmiss_cnt() - set roam beacon miss count * @psoc: psoc pointer * @vdev_id: vdev id * @params: roam beacon miss count parameters @@ -37,9 +39,8 @@ * Return: None */ static void -wlan_cm_roam_scan_bmiss_cnt(struct wlan_objmgr_psoc *psoc, - uint8_t vdev_id, - struct wlan_roam_beacon_miss_cnt *params) +cm_roam_scan_bmiss_cnt(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, + struct wlan_roam_beacon_miss_cnt *params) { uint8_t beacon_miss_count; @@ -64,9 +65,8 @@ wlan_cm_roam_scan_bmiss_cnt(struct wlan_objmgr_psoc *psoc, * Return: None */ static void -wlan_cm_roam_reason_vsie(struct wlan_objmgr_psoc *psoc, - uint8_t vdev_id, - struct wlan_roam_reason_vsie_enable *params) +cm_roam_reason_vsie(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, + struct wlan_roam_reason_vsie_enable *params) { uint8_t enable_roam_reason_vsie; @@ -87,9 +87,8 @@ wlan_cm_roam_reason_vsie(struct wlan_objmgr_psoc *psoc, * Return: None */ static void -wlan_cm_roam_triggers(struct wlan_objmgr_psoc *psoc, - uint8_t vdev_id, - struct wlan_roam_triggers *params) +cm_roam_triggers(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, + struct wlan_roam_triggers *params) { params->vdev_id = vdev_id; params->trigger_bitmap = @@ -98,17 +97,15 @@ wlan_cm_roam_triggers(struct wlan_objmgr_psoc *psoc, ¶ms->vendor_btm_param); } #else -static void -wlan_cm_roam_reason_vsie(struct wlan_objmgr_psoc *psoc, - uint8_t vdev_id, - struct wlan_roam_reason_vsie_enable *params) +static inline void +cm_roam_reason_vsie(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, + struct wlan_roam_reason_vsie_enable *params) { } -static void -wlan_cm_roam_triggers(struct wlan_objmgr_psoc *psoc, - uint8_t vdev_id, - struct wlan_roam_triggers *params) +static inline void +cm_roam_triggers(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, + struct wlan_roam_triggers *params) { } #endif @@ -127,6 +124,19 @@ cm_roam_init_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, bool enable) return wlan_cm_tgt_send_roam_offload_init(psoc, vdev_id, enable); } +static void cm_roam_set_roam_reason_better_ap(struct wlan_objmgr_psoc *psoc, + uint8_t vdev_id, bool set) +{ + struct wlan_objmgr_vdev *vdev; + + vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id, + WLAN_MLME_NB_ID); + if (!vdev) + return; + mlme_set_roam_reason_better_ap(vdev, set); + wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID); +} + /** * cm_roam_start_req() - roam start request handling * @psoc: psoc pointer @@ -136,8 +146,7 @@ cm_roam_init_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, bool enable) * Return: QDF_STATUS */ static QDF_STATUS -cm_roam_start_req(struct wlan_objmgr_psoc *psoc, - uint8_t vdev_id, +cm_roam_start_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, uint8_t reason) { struct wlan_roam_start_config *start_req; @@ -147,11 +156,11 @@ cm_roam_start_req(struct wlan_objmgr_psoc *psoc, if (!start_req) return QDF_STATUS_E_NOMEM; + cm_roam_set_roam_reason_better_ap(psoc, vdev_id, false); /* fill from mlme directly */ - wlan_cm_roam_scan_bmiss_cnt(psoc, vdev_id, - &start_req->beacon_miss_cnt); - wlan_cm_roam_reason_vsie(psoc, vdev_id, &start_req->reason_vsie_enable); - wlan_cm_roam_triggers(psoc, vdev_id, &start_req->roam_triggers); + cm_roam_scan_bmiss_cnt(psoc, vdev_id, &start_req->beacon_miss_cnt); + cm_roam_reason_vsie(psoc, vdev_id, &start_req->reason_vsie_enable); + cm_roam_triggers(psoc, vdev_id, &start_req->roam_triggers); /* fill from legacy through this API */ wlan_cm_roam_fill_start_req(psoc, vdev_id, start_req, reason); @@ -174,13 +183,201 @@ cm_roam_start_req(struct wlan_objmgr_psoc *psoc, * Return: QDF_STATUS */ static QDF_STATUS -cm_roam_update_config_req(struct wlan_objmgr_psoc *psoc, - uint8_t vdev_id, +cm_roam_update_config_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, uint8_t reason) { + struct wlan_roam_update_config *update_req; + QDF_STATUS status; + + cm_roam_set_roam_reason_better_ap(psoc, vdev_id, false); + + update_req = qdf_mem_malloc(sizeof(*update_req)); + if (!update_req) + return QDF_STATUS_E_NOMEM; + + status = wlan_cm_tgt_send_roam_update_req(psoc, vdev_id, update_req); + if (QDF_IS_STATUS_ERROR(status)) + mlme_debug("fail to send update config"); + + qdf_mem_free(update_req); + + return status; +} + +/** + * cm_roam_restart_req() - roam restart req for LFR2 + * @psoc: psoc pointer + * @vdev_id: vdev id + * @reason: reason for changing roam state for the requested vdev id + * + * Return: QDF_STATUS + */ +static QDF_STATUS +cm_roam_restart_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, + uint8_t reason) +{ + + struct wlan_objmgr_vdev *vdev; + + vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id, + WLAN_MLME_NB_ID); + if (!vdev) + return QDF_STATUS_E_INVAL; + + /* Rome offload engine does not stop after any scan. + * If this command is sent because all preauth attempts failed + * and WMI_ROAM_REASON_SUITABLE_AP event was received earlier, + * now it is time to call it heartbeat failure. + */ + if (reason == REASON_PREAUTH_FAILED_FOR_ALL + && mlme_get_roam_reason_better_ap(vdev)) { + mlme_err("Sending heartbeat failure after preauth failures"); + wlan_cm_send_beacon_miss(vdev_id, mlme_get_hb_ap_rssi(vdev)); + mlme_set_roam_reason_better_ap(vdev, false); + } + + wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID); + return QDF_STATUS_SUCCESS; } +/** + * cm_roam_abort_req() - roam scan abort req + * @psoc: psoc pointer + * @vdev_id: vdev id + * @reason: reason for changing roam state for the requested vdev id + * + * Return: QDF_STATUS + */ +static QDF_STATUS +cm_roam_abort_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, + uint8_t reason) +{ + QDF_STATUS status; + + status = wlan_cm_tgt_send_roam_abort_req(psoc, vdev_id); + if (QDF_IS_STATUS_ERROR(status)) + mlme_debug("fail to send abort start"); + + return status; +} + +/** + * cm_roam_stop_req() - roam stop request handling + * @psoc: psoc pointer + * @vdev_id: vdev id + * @reason: reason for changing roam state for the requested vdev id + * + * Return: QDF_STATUS + */ +static QDF_STATUS +cm_roam_stop_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, + uint8_t reason) +{ + struct wlan_roam_stop_config *stop_req; + QDF_STATUS status; + + cm_roam_set_roam_reason_better_ap(psoc, vdev_id, false); + + stop_req = qdf_mem_malloc(sizeof(*stop_req)); + if (!stop_req) + return QDF_STATUS_E_NOMEM; + /* do the filling as csr_post_rso_stop */ + + status = wlan_cm_tgt_send_roam_stop_req(psoc, vdev_id, stop_req); + if (QDF_IS_STATUS_ERROR(status)) + mlme_debug("fail to send roam stop"); + + qdf_mem_free(stop_req); + + return status; +} + +/** + * cm_roam_fill_per_roam_request() - create PER roam offload config request + * @psoc: psoc context + * @vdev_id: vdev id + * + * Return: QDF_STATUS + */ +static QDF_STATUS +cm_roam_fill_per_roam_request(struct wlan_objmgr_psoc *psoc, + struct wlan_per_roam_config_req *req) +{ + struct wlan_mlme_psoc_ext_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_ext_obj(psoc); + if (!mlme_obj) + return QDF_STATUS_E_FAILURE; + + req->per_config.enable = mlme_obj->cfg.lfr.per_roam_enable; + req->per_config.tx_high_rate_thresh = + mlme_obj->cfg.lfr.per_roam_config_high_rate_th; + req->per_config.rx_high_rate_thresh = + mlme_obj->cfg.lfr.per_roam_config_high_rate_th; + req->per_config.tx_low_rate_thresh = + mlme_obj->cfg.lfr.per_roam_config_low_rate_th; + req->per_config.rx_low_rate_thresh = + mlme_obj->cfg.lfr.per_roam_config_low_rate_th; + req->per_config.per_rest_time = mlme_obj->cfg.lfr.per_roam_rest_time; + req->per_config.tx_per_mon_time = + mlme_obj->cfg.lfr.per_roam_monitor_time; + req->per_config.rx_per_mon_time = + mlme_obj->cfg.lfr.per_roam_monitor_time; + req->per_config.tx_rate_thresh_percnt = + mlme_obj->cfg.lfr.per_roam_config_rate_th_percent; + req->per_config.rx_rate_thresh_percnt = + mlme_obj->cfg.lfr.per_roam_config_rate_th_percent; + req->per_config.min_candidate_rssi = + mlme_obj->cfg.lfr.per_roam_min_candidate_rssi; + + mlme_debug("PER based roaming configuaration enable: %d vdev: %d high_rate_thresh: %d low_rate_thresh: %d rate_thresh_percnt: %d per_rest_time: %d monitor_time: %d min cand rssi: %d", + req->per_config.enable, req->vdev_id, + req->per_config.tx_high_rate_thresh, + req->per_config.tx_low_rate_thresh, + req->per_config.tx_rate_thresh_percnt, + req->per_config.per_rest_time, + req->per_config.tx_per_mon_time, + req->per_config.min_candidate_rssi); + + return QDF_STATUS_SUCCESS; +} + +/** + * cm_roam_offload_per_scan() - populates roam offload scan request and sends + * to fw + * @psoc: psoc context + * @vdev_id: vdev id + * + * Return: QDF_STATUS + */ +static QDF_STATUS +cm_roam_offload_per_config(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id) +{ + struct wlan_per_roam_config_req *req = NULL; + QDF_STATUS status; + + req = qdf_mem_malloc(sizeof(*req)); + if (!req) + return QDF_STATUS_E_NOMEM; + + req->vdev_id = vdev_id; + status = cm_roam_fill_per_roam_request(psoc, req); + if (QDF_IS_STATUS_ERROR(status)) { + qdf_mem_free(req); + mlme_debug("fail to fill per config"); + return status; + } + + status = wlan_cm_tgt_send_roam_per_config(psoc, vdev_id, req); + if (QDF_IS_STATUS_ERROR(status)) + mlme_debug("fail to send roam stop"); + + qdf_mem_free(req); + + return status; +} + /* * similar to csr_roam_offload_scan, will be used from many legacy * process directly, generate a new function wlan_cm_roam_send_rso_cmd @@ -200,35 +397,28 @@ QDF_STATUS cm_roam_send_rso_cmd(struct wlan_objmgr_psoc *psoc, mlme_debug("ROAM: not allowed"); return status; } + + /* + * Update PER config to FW. No need to update in case of stop command, + * FW takes care of stopping this internally + */ + if (rso_command != ROAM_SCAN_OFFLOAD_STOP) + cm_roam_offload_per_config(psoc, vdev_id); + if (rso_command == ROAM_SCAN_OFFLOAD_START) status = cm_roam_start_req(psoc, vdev_id, reason); else if (rso_command == ROAM_SCAN_OFFLOAD_UPDATE_CFG) status = cm_roam_update_config_req(psoc, vdev_id, reason); -// else if (rso_command == ROAM_SCAN_OFFLOAD_RESTART) - /* RESTART API */ -// else - /* ABORT SCAN API */ + else if (rso_command == ROAM_SCAN_OFFLOAD_RESTART) + status = cm_roam_restart_req(psoc, vdev_id, reason); + else if (rso_command == ROAM_SCAN_OFFLOAD_ABORT_SCAN) + status = cm_roam_abort_req(psoc, vdev_id, reason); + else + mlme_debug("ROAM: invalid RSO command %d", rso_command); return status; } -/** - * cm_roam_stop_req() - roam stop request handling - * @psoc: psoc pointer - * @vdev_id: vdev id - * @reason: reason for changing roam state for the requested vdev id - * - * Return: QDF_STATUS - */ -static QDF_STATUS -cm_roam_stop_req(struct wlan_objmgr_psoc *psoc, - uint8_t vdev_id, - uint8_t reason) -{ - /* do the filling as csr_post_rso_stop */ - return QDF_STATUS_SUCCESS; -} - /** * cm_roam_switch_to_rso_stop() - roam state handling for rso stop * @pdev: pdev pointer 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 52ee4510c5..c441d8e01c 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 @@ -78,6 +78,16 @@ wlan_cm_roam_fill_start_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, struct wlan_roam_start_config *req, uint8_t reason); + +/** + * wlan_cm_send_beacon_miss() - initiate beacon miss + * @vdev_id: vdev id + * @rssi: AP rssi + * + * Return: void + */ +void wlan_cm_send_beacon_miss(uint8_t vdev_id, int32_t rssi); + #else static inline QDF_STATUS wlan_cm_enable_roaming_on_connected_sta(struct wlan_objmgr_pdev *pdev, @@ -88,21 +98,21 @@ wlan_cm_enable_roaming_on_connected_sta(struct wlan_objmgr_pdev *pdev, #endif /** - * cm_roam_acquire_lock - Wrapper for sme_acquire_global_lock. + * cm_roam_acquire_lock() - Wrapper for sme_acquire_global_lock. * * Return: QDF_STATUS */ QDF_STATUS cm_roam_acquire_lock(void); /** - * cm_roam_release_lock - Wrapper for sme_release_global_lock() + * cm_roam_release_lock() - Wrapper for sme_release_global_lock() * * Return: QDF_STATUS */ QDF_STATUS cm_roam_release_lock(void); /** - * cm_roam_get_requestor_string - RSO control requestor to string api + * cm_roam_get_requestor_string() - RSO control requestor to string api * @requestor: Requestor of type enum wlan_cm_rso_control_requestor * * Return: Pointer to converted string @@ -111,7 +121,7 @@ char *cm_roam_get_requestor_string(enum wlan_cm_rso_control_requestor requestor); /** - * ucfg_cm_rso_init_deinit - Init or Deinit roaming module at firmware + * ucfg_cm_rso_init_deinit() - Init or Deinit roaming module at firmware * @pdev: Pointer to pdev * @vdev_id: vdev id * @enable: true: Send RSO init and RSO enable @@ -123,7 +133,7 @@ QDF_STATUS wlan_cm_rso_init_deinit(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id, bool enable); /** - * wlan_cm_disable_rso - Disable roam scan offload to firmware + * wlan_cm_disable_rso() - Disable roam scan offload to firmware * @pdev: Pointer to pdev * @vdev_id: vdev id * @requestor: RSO disable requestor @@ -136,7 +146,7 @@ QDF_STATUS wlan_cm_disable_rso(struct wlan_objmgr_pdev *pdev, uint32_t vdev_id, uint8_t reason); /** - * ucfg_cm_enable_rso - Enable roam scan offload to firmware + * ucfg_cm_enable_rso() - Enable roam scan offload to firmware * @pdev: Pointer to pdev * @vdev_id: vdev id * @requestor: RSO disable requestor @@ -212,7 +222,7 @@ wlan_cm_roam_extract_roam_initial_info(wmi_unified_t wmi, void *evt_buf, uint8_t idx); /** - * wlan_cm_roam_activate_pcl_per_vdev - Set the PCL command to be sent per + * wlan_cm_roam_activate_pcl_per_vdev() - Set the PCL command to be sent per * vdev instead of pdev. * @psoc: PSOC pointer * @vdev_id: VDEV id @@ -232,8 +242,8 @@ void wlan_cm_roam_activate_pcl_per_vdev(struct wlan_objmgr_psoc *psoc, bool pcl_per_vdev); /** - * wlan_cm_roam_is_pcl_per_vdev_active - API to know if the pcl command needs to be - * sent per vdev or not + * wlan_cm_roam_is_pcl_per_vdev_active() - API to know if the pcl command needs + * to be sent per vdev or not * @psoc: PSOC pointer * @vdev_id: VDEV id * @@ -243,7 +253,7 @@ bool wlan_cm_roam_is_pcl_per_vdev_active(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id); /** - * wlan_cm_dual_sta_is_freq_allowed - This API is used to check if the + * wlan_cm_dual_sta_is_freq_allowed() - This API is used to check if the * provided frequency is allowed for the 2nd STA vdev for connection. * @psoc: Pointer to PSOC object * @freq: Frequency in the given frequency list for the STA that is about to @@ -260,7 +270,7 @@ wlan_cm_dual_sta_is_freq_allowed(struct wlan_objmgr_psoc *psoc, uint32_t freq, enum QDF_OPMODE opmode); /** - * wlan_cm_dual_sta_roam_update_connect_channels - Fill the allowed channels + * wlan_cm_dual_sta_roam_update_connect_channels() - Fill the allowed channels * for connection of the 2nd STA based on the 1st STA connected band if dual * sta roaming is enabled. * @psoc: Pointer to PSOC object @@ -272,7 +282,7 @@ void wlan_cm_dual_sta_roam_update_connect_channels(struct wlan_objmgr_psoc *psoc, struct scan_filter *filter); /** - * wlan_cm_roam_set_vendor_btm_params - API to set vendor btm params + * wlan_cm_roam_set_vendor_btm_params() - API to set vendor btm params * @psoc: PSOC pointer * @vdev_id: VDEV id * @param: vendor configured roam trigger param @@ -285,7 +295,7 @@ wlan_cm_roam_set_vendor_btm_params(struct wlan_objmgr_psoc *psoc, struct wlan_cm_roam_vendor_btm_params *param); /** - * wlan_cm_roam_disable_vendor_btm - API to disable vendor btm by default + * wlan_cm_roam_disable_vendor_btm() - API to disable vendor btm by default * reason * @psoc: PSOC pointer * @vdev_id: VDEV id @@ -296,7 +306,7 @@ void wlan_cm_roam_disable_vendor_btm(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id); /** - * wlan_cm_roam_get_vendor_btm_params - API to get vendor btm param + * wlan_cm_roam_get_vendor_btm_params() - API to get vendor btm param * @psoc: PSOC pointer * @vdev_id: VDEV id * @param: vendor configured roam trigger param diff --git a/components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_public_srtuct.h b/components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_public_srtuct.h index 84a781cbd6..2f369c15b1 100644 --- a/components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_public_srtuct.h +++ b/components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_public_srtuct.h @@ -418,6 +418,149 @@ struct wlan_roam_scan_filter_params { struct roam_scan_filter_params filter_params; }; +/** + * struct wlan_roam_btm_config - BSS Transition Management offload params + * @vdev_id: VDEV on which the parameters should be applied + * @btm_offload_config: BTM config + * @btm_solicited_timeout: Timeout value for waiting BTM request + * @btm_max_attempt_cnt: Maximum attempt for sending BTM query to ESS + * @btm_sticky_time: Stick time after roaming to new AP by BTM + * @disassoc_timer_threshold: threshold value till which the firmware can + * wait before triggering the roam scan after receiving the disassoc iminent + * @btm_query_bitmask: bitmask to btm query with candidate list + * @btm_candidate_min_score: Minimum score of the AP to consider it as a + * candidate if the roam trigger is BTM kickout. + */ +struct wlan_roam_btm_config { + uint8_t vdev_id; + uint32_t btm_offload_config; + uint32_t btm_solicited_timeout; + uint32_t btm_max_attempt_cnt; + uint32_t btm_sticky_time; + uint32_t disassoc_timer_threshold; + uint32_t btm_query_bitmask; + uint32_t btm_candidate_min_score; +}; + + +/** + * struct wlan_roam_neighbor_report_params -neighbour report params + * @time_offset: time offset after 11k offload command to trigger a neighbor + * report request (in seconds) + * @low_rssi_offset: Offset from rssi threshold to trigger a neighbor + * report request (in dBm) + * @bmiss_count_trigger: Number of beacon miss events to trigger neighbor + * report request + * @per_threshold_offset: offset from PER threshold to trigger neighbor + * report request (in %) + * @neighbor_report_cache_timeout: timeout after which new trigger can enable + * sending of a neighbor report request (in seconds) + * @max_neighbor_report_req_cap: max number of neighbor report requests that + * can be sent to the peer in the current session + * @ssid: Current connect SSID info + */ +struct wlan_roam_neighbor_report_params { + uint32_t time_offset; + uint32_t low_rssi_offset; + uint32_t bmiss_count_trigger; + uint32_t per_threshold_offset; + uint32_t neighbor_report_cache_timeout; + uint32_t max_neighbor_report_req_cap; + struct wlan_ssid ssid; +}; + +/** + * struct wlan_roam_11k_offload_params - offload 11k features to FW + * @vdev_id: vdev id + * @offload_11k_bitmask: bitmask to specify offloaded features + * B0: Neighbor Report Request offload + * B1-B31: Reserved + * @neighbor_report_params: neighbor report offload params + */ +struct wlan_roam_11k_offload_params { + uint32_t vdev_id; + uint32_t offload_11k_bitmask; + struct wlan_roam_neighbor_report_params neighbor_report_params; +}; + +/** + * struct wlan_roam_disconnect_params - Emergency deauth/disconnect roam params + * @vdev_id: VDEV on which the parameters should be applied + * @enable: Enable or disable disconnect roaming. + */ +struct wlan_roam_disconnect_params { + uint32_t vdev_id; + bool enable; +}; + +/** + * struct wlan_roam_idle_params - Idle roam trigger parameters + * @vdev_id: VDEV on which the parameters should be applied + * @enable: Enable/Disable Idle roaming + * @band: Connected AP band + * @conn_ap_rssi_delta: Rssi change of connected AP in dBm + * @conn_ap_min_rssi: If connected AP rssi is less than min rssi trigger roam + * @inactive_time: Connected AP idle time + * @data_pkt_count: Data packet count allowed during idle time + */ +struct wlan_roam_idle_params { + uint32_t vdev_id; + bool enable; + uint32_t band; + uint32_t conn_ap_rssi_delta; + int32_t conn_ap_min_rssi; + uint32_t inactive_time; + uint32_t data_pkt_count; +}; + +/** + * struct wlan_per_roam_config - per based roaming parameters + * @enable: if PER based roaming is enabled/disabled + * @tx_high_rate_thresh: high rate threshold at which PER based + * roam will stop in tx path + * @rx_high_rate_thresh: high rate threshold at which PER based + * roam will stop in rx path + * @tx_low_rate_thresh: rate below which traffic will be considered + * for PER based roaming in Tx path + * @rx_low_rate_thresh: rate below which traffic will be considered + * for PER based roaming in Tx path + * @tx_rate_thresh_percnt: % above which when traffic is below low_rate_thresh + * will be considered for PER based scan in tx path + * @rx_rate_thresh_percnt: % above which when traffic is below low_rate_thresh + * will be considered for PER based scan in rx path + * @per_rest_time: time for which PER based roam will wait once it + * issues a roam scan. + * @tx_per_mon_time: Minimum time required to be considered as valid scenario + * for PER based roam in tx path + * @rx_per_mon_time: Minimum time required to be considered as valid scenario + * for PER based roam in rx path + * @min_candidate_rssi: Minimum RSSI threshold for candidate AP to be used for + * PER based roaming + */ +struct wlan_per_roam_config { + uint32_t enable; + uint32_t tx_high_rate_thresh; + uint32_t rx_high_rate_thresh; + uint32_t tx_low_rate_thresh; + uint32_t rx_low_rate_thresh; + uint32_t tx_rate_thresh_percnt; + uint32_t rx_rate_thresh_percnt; + uint32_t per_rest_time; + uint32_t tx_per_mon_time; + uint32_t rx_per_mon_time; + uint32_t min_candidate_rssi; +}; + +/** + * struct wlan_per_roam_config_req: PER based roaming config request + * @vdev_id: vdev id on which config needs to be set + * @per_config: PER config + */ +struct wlan_per_roam_config_req { + uint8_t vdev_id; + struct wlan_per_roam_config per_config; +}; + #ifdef ROAM_OFFLOAD_V1 #define NOISE_FLOOR_DBM_DEFAULT (-96) #define RSSI_MIN_VALUE (-128) @@ -543,6 +686,10 @@ struct wlan_roam_scan_period_params { * @scan_period_params: roam scan period parameters * @profile_params: ap profile parameters * @scan_filter_params: roam scan filter parameters + * @btm_config: btm configuration + * @roam_11k_params: 11k params + * @disconnect_params: disconnect params + * @idle_params: idle params */ struct wlan_roam_start_config { struct wlan_roam_offload_scan_rssi_params rssi_params; @@ -552,9 +699,53 @@ struct wlan_roam_start_config { struct wlan_roam_scan_period_params scan_period_params; struct ap_profile_params profile_params; struct wlan_roam_scan_filter_params scan_filter_params; + struct wlan_roam_btm_config btm_config; + struct wlan_roam_11k_offload_params roam_11k_params; + struct wlan_roam_disconnect_params disconnect_params; + struct wlan_roam_idle_params idle_params; /* other wmi cmd structures */ }; +/** + * struct wlan_roam_stop_config - structure containing parameters for + * roam stop + * @roam_11k_params: 11k params + * @btm_config: btm configuration + * @scan_filter_params: roam scan filter parameters + * @disconnect_params: disconnect params + * @idle_params: idle params + * @roam_triggers: roam triggers parameters + * @rssi_params: roam scan rssi threshold parameters + */ +struct wlan_roam_stop_config { + struct wlan_roam_11k_offload_params roam_11k_params; + struct wlan_roam_btm_config btm_config; + struct wlan_roam_scan_filter_params scan_filter_params; + struct wlan_roam_disconnect_params disconnect_params; + struct wlan_roam_idle_params idle_params; + struct wlan_roam_triggers roam_triggers; + struct wlan_roam_offload_scan_rssi_params rssi_params; +}; + +/** + * struct wlan_roam_update_config - structure containing parameters for + * roam update config + * @beacon_miss_cnt: roam beacon miss count parameters + * @scan_filter_params: roam scan filter parameters + * @scan_period_params: roam scan period parameters + * @rssi_params: roam scan rssi threshold parameters + * @disconnect_params: disconnect params + * @idle_params: idle params + */ +struct wlan_roam_update_config { + struct wlan_roam_beacon_miss_cnt beacon_miss_cnt; + struct wlan_roam_scan_filter_params scan_filter_params; + struct wlan_roam_scan_period_params scan_period_params; + struct wlan_roam_offload_scan_rssi_params rssi_params; + struct wlan_roam_disconnect_params disconnect_params; + struct wlan_roam_idle_params idle_params; +}; + #endif #if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD) @@ -658,6 +849,7 @@ struct set_pcl_req { * module initialize request * @send_roam_start_req: TX ops function pointer to send roam start related * commands + * @send_roam_abort: send roam abort */ struct wlan_cm_roam_tx_ops { QDF_STATUS (*send_vdev_set_pcl_cmd) (struct wlan_objmgr_vdev *vdev, @@ -669,6 +861,14 @@ struct wlan_cm_roam_tx_ops { QDF_STATUS (*send_roam_start_req)(struct wlan_objmgr_vdev *vdev, struct wlan_roam_start_config *req); + QDF_STATUS (*send_roam_stop_offload)(struct wlan_objmgr_vdev *vdev, + struct wlan_roam_stop_config *req); + QDF_STATUS (*send_roam_update_config)(struct wlan_objmgr_vdev *vdev, + struct wlan_roam_update_config *req); + QDF_STATUS (*send_roam_abort)(struct wlan_objmgr_vdev *vdev, + uint8_t vdev_id); + QDF_STATUS (*send_roam_per_config)(struct wlan_objmgr_vdev *vdev, + struct wlan_per_roam_config_req *req); #endif }; diff --git a/components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_ucfg_api.h b/components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_ucfg_api.h index f5481f7b59..1a69492772 100644 --- a/components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_ucfg_api.h +++ b/components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_ucfg_api.h @@ -28,7 +28,7 @@ #ifdef ROAM_OFFLOAD_V1 /** - * ucfg_user_space_enable_disable_rso - Enable/Disable Roam Scan offload + * ucfg_user_space_enable_disable_rso() - Enable/Disable Roam Scan offload * to firmware. * @pdev: Pointer to pdev * @vdev_id: vdev id @@ -55,7 +55,7 @@ QDF_STATUS ucfg_cm_abort_roam_scan(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id); /** - * ucfg_cm_rso_init_deinit - Init or Deinit roaming module at firmware + * ucfg_cm_rso_init_deinit() - Init or Deinit roaming module at firmware * @pdev: Pointer to pdev * @vdev_id: vdev id * @enable: true: Send RSO init and RSO enable @@ -71,7 +71,7 @@ ucfg_cm_rso_init_deinit(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id, } /** - * ucfg_cm_disable_rso - Disable roam scan offload to firmware + * ucfg_cm_disable_rso() - Disable roam scan offload to firmware * @pdev: Pointer to pdev * @vdev_id: vdev id * @requestor: RSO disable requestor @@ -88,7 +88,7 @@ QDF_STATUS ucfg_cm_disable_rso(struct wlan_objmgr_pdev *pdev, uint32_t vdev_id, } /** - * ucfg_cm_enable_rso - Enable roam scan offload to firmware + * ucfg_cm_enable_rso() - Enable roam scan offload to firmware * @pdev: Pointer to pdev * @vdev_id: vdev id * @requestor: RSO disable requestor diff --git a/components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_tgt_if_tx_api.h b/components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_tgt_if_tx_api.h index f79fcbabfd..8c7a333e36 100644 --- a/components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_tgt_if_tx_api.h +++ b/components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_tgt_if_tx_api.h @@ -30,7 +30,7 @@ #ifdef WLAN_FEATURE_ROAM_OFFLOAD /** - * wlan_cm_roam_send_set_vdev_pcl - Send vdev set pcl command to firmware + * wlan_cm_roam_send_set_vdev_pcl() - Send vdev set pcl command to firmware * @psoc: PSOC pointer * @pcl_req: Set pcl request structure pointer * @@ -51,8 +51,8 @@ wlan_cm_roam_send_set_vdev_pcl(struct wlan_objmgr_psoc *psoc, #ifdef ROAM_OFFLOAD_V1 #if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD) /** - * wlan_cm_tgt_send_roam_offload_init - Send WMI_VDEV_PARAM_ROAM_FW_OFFLOAD to - * init/deinit roaming module at firmware + * wlan_cm_tgt_send_roam_offload_init() - Send WMI_VDEV_PARAM_ROAM_FW_OFFLOAD + * to init/deinit roaming module at firmware * @psoc: PSOC pointer * @vdev_id: vdev id * @is_init: true if roam module is to be initialized else false for deinit @@ -63,7 +63,7 @@ QDF_STATUS wlan_cm_tgt_send_roam_offload_init(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, bool is_init); /** - * wlan_cm_tgt_send_roam_start_req - Send roam start command to firmware + * wlan_cm_tgt_send_roam_start_req() - Send roam start command to firmware * @psoc: psoc pointer * @vdev_id: vdev id * @req: roam start config parameter @@ -73,6 +73,52 @@ QDF_STATUS wlan_cm_tgt_send_roam_offload_init(struct wlan_objmgr_psoc *psoc, QDF_STATUS wlan_cm_tgt_send_roam_start_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, struct wlan_roam_start_config *req); + +/** + * wlan_cm_tgt_send_roam_stop_req() - Send roam stop command to firmware + * @psoc: psoc pointer + * @vdev_id: vdev id + * @req: roam stop config parameter + * + * Return: QDF_STATUS + */ +QDF_STATUS wlan_cm_tgt_send_roam_stop_req(struct wlan_objmgr_psoc *psoc, + uint8_t vdev_id, + struct wlan_roam_stop_config *req); + +/** + * wlan_cm_tgt_send_roam_start_req() - Send roam update command to firmware + * @psoc: psoc pointer + * @vdev_id: vdev id + * @req: roam update config parameter + * + * Return: QDF_STATUS + */ +QDF_STATUS wlan_cm_tgt_send_roam_update_req(struct wlan_objmgr_psoc *psoc, + uint8_t vdev_id, + struct wlan_roam_update_config *req); + +/** + * wlan_cm_tgt_send_roam_abort_req() - Send roam abort command to firmware + * @psoc: psoc pointer + * @vdev_id: vdev id + * + * Return: QDF_STATUS + */ +QDF_STATUS wlan_cm_tgt_send_roam_abort_req(struct wlan_objmgr_psoc *psoc, + uint8_t vdev_id); + +/** + * wlan_cm_tgt_send_roam_per_config() - Send roam per config command to FW + * @psoc: psoc pointer + * @vdev_id: vdev id + * + * Return: QDF_STATUS + */ +QDF_STATUS wlan_cm_tgt_send_roam_per_config(struct wlan_objmgr_psoc *psoc, + uint8_t vdev_id, + struct wlan_per_roam_config_req *req); + #endif #endif #endif /* CM_TGT_IF_TX_API_H__ */ diff --git a/components/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_roam_ucfg_api.c b/components/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_roam_ucfg_api.c index 335ce45dd5..1ee686465a 100644 --- a/components/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_roam_ucfg_api.c +++ b/components/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_roam_ucfg_api.c @@ -92,7 +92,7 @@ QDF_STATUS ucfg_cm_abort_roam_scan(struct wlan_objmgr_pdev *pdev, if (QDF_IS_STATUS_ERROR(status)) return status; - status = cm_roam_state_change(pdev, vdev_id, + status = cm_roam_send_rso_cmd(psoc, vdev_id, ROAM_SCAN_OFFLOAD_ABORT_SCAN, REASON_ROAM_ABORT_ROAM_SCAN); cm_roam_release_lock(); diff --git a/components/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_tgt_if_tx_api.c b/components/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_tgt_if_tx_api.c index bfae487686..d779a70d95 100644 --- a/components/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_tgt_if_tx_api.c +++ b/components/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_tgt_if_tx_api.c @@ -169,6 +169,8 @@ QDF_STATUS wlan_cm_tgt_send_roam_offload_init(struct wlan_objmgr_psoc *psoc, init_msg.roam_offload_flag |= WLAN_ROAM_BMISS_FINAL_SCAN_TYPE; } + mlme_debug("vdev_id:%d, is_init:%d, flag:%d", vdev_id, is_init, + init_msg.roam_offload_flag); status = roam_tx_ops.send_roam_offload_init_req(vdev, &init_msg); if (QDF_IS_STATUS_ERROR(status)) @@ -194,17 +196,138 @@ QDF_STATUS wlan_cm_tgt_send_roam_start_req(struct wlan_objmgr_psoc *psoc, roam_tx_ops = GET_CM_ROAM_TX_OPS_FROM_VDEV(vdev); if (!roam_tx_ops.send_roam_start_req) { - mlme_err("CM_RSO: vdev%d send_roam_start_req is NULL", vdev_id); + mlme_err("CM_RSO: vdev %d send_roam_start_req is NULL", + vdev_id); wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID); return QDF_STATUS_E_INVAL; } status = roam_tx_ops.send_roam_start_req(vdev, req); if (QDF_IS_STATUS_ERROR(status)) - mlme_debug("CM_RSO: vdev%d fail to send roam start", vdev_id); + mlme_debug("CM_RSO: vdev %d fail to send roam start", vdev_id); wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID); + return status; } + +QDF_STATUS wlan_cm_tgt_send_roam_stop_req(struct wlan_objmgr_psoc *psoc, + uint8_t vdev_id, + struct wlan_roam_stop_config *req) +{ + QDF_STATUS status; + struct wlan_cm_roam_tx_ops roam_tx_ops; + struct wlan_objmgr_vdev *vdev; + + vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id, + WLAN_MLME_NB_ID); + if (!vdev) + return QDF_STATUS_E_INVAL; + + roam_tx_ops = GET_CM_ROAM_TX_OPS_FROM_VDEV(vdev); + if (!roam_tx_ops.send_roam_stop_offload) { + mlme_err("CM_RSO: vdev %d send_roam_stop_offload is NULL", + vdev_id); + wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID); + return QDF_STATUS_E_INVAL; + } + + status = roam_tx_ops.send_roam_stop_offload(vdev, req); + if (QDF_IS_STATUS_ERROR(status)) + mlme_debug("CM_RSO: vdev %d fail to send roam stop", vdev_id); + + wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID); + + return status; +} + +QDF_STATUS wlan_cm_tgt_send_roam_update_req(struct wlan_objmgr_psoc *psoc, + uint8_t vdev_id, + struct wlan_roam_update_config *req) +{ + QDF_STATUS status; + struct wlan_cm_roam_tx_ops roam_tx_ops; + struct wlan_objmgr_vdev *vdev; + + vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id, + WLAN_MLME_NB_ID); + if (!vdev) + return QDF_STATUS_E_INVAL; + + roam_tx_ops = GET_CM_ROAM_TX_OPS_FROM_VDEV(vdev); + if (!roam_tx_ops.send_roam_update_config) { + mlme_err("CM_RSO: vdev %d send_roam_update_config is NULL", + vdev_id); + wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID); + return QDF_STATUS_E_INVAL; + } + + status = roam_tx_ops.send_roam_update_config(vdev, req); + if (QDF_IS_STATUS_ERROR(status)) + mlme_debug("CM_RSO: vdev %d fail to send roam update", vdev_id); + + wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID); + + return status; +} + +QDF_STATUS wlan_cm_tgt_send_roam_abort_req(struct wlan_objmgr_psoc *psoc, + uint8_t vdev_id) +{ + QDF_STATUS status; + struct wlan_cm_roam_tx_ops roam_tx_ops; + struct wlan_objmgr_vdev *vdev; + + vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id, + WLAN_MLME_NB_ID); + if (!vdev) + return QDF_STATUS_E_INVAL; + + roam_tx_ops = GET_CM_ROAM_TX_OPS_FROM_VDEV(vdev); + if (!roam_tx_ops.send_roam_abort) { + mlme_err("CM_RSO: vdev %d send_roam_abort is NULL", vdev_id); + wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID); + return QDF_STATUS_E_INVAL; + } + + status = roam_tx_ops.send_roam_abort(vdev, vdev_id); + if (QDF_IS_STATUS_ERROR(status)) + mlme_debug("CM_RSO: vdev %d fail to send roam abort", vdev_id); + + wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID); + + return status; +} + +QDF_STATUS wlan_cm_tgt_send_roam_per_config(struct wlan_objmgr_psoc *psoc, + uint8_t vdev_id, + struct wlan_per_roam_config_req *req) +{ + QDF_STATUS status; + struct wlan_cm_roam_tx_ops roam_tx_ops; + struct wlan_objmgr_vdev *vdev; + + vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id, + WLAN_MLME_NB_ID); + if (!vdev) + return QDF_STATUS_E_INVAL; + + roam_tx_ops = GET_CM_ROAM_TX_OPS_FROM_VDEV(vdev); + if (!roam_tx_ops.send_roam_per_config) { + mlme_err("CM_RSO: vdev %d send_roam_per_config is NULL", + vdev_id); + wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID); + return QDF_STATUS_E_INVAL; + } + + status = roam_tx_ops.send_roam_per_config(vdev, req); + if (QDF_IS_STATUS_ERROR(status)) + mlme_debug("CM_RSO: vdev %d fail to send per config", vdev_id); + + wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID); + + return status; +} + #endif #endif diff --git a/components/wmi/inc/wmi_unified_roam_api.h b/components/wmi/inc/wmi_unified_roam_api.h index 2d26b1c086..aef73a631f 100644 --- a/components/wmi/inc/wmi_unified_roam_api.h +++ b/components/wmi/inc/wmi_unified_roam_api.h @@ -225,24 +225,24 @@ QDF_STATUS wmi_unified_set_roam_triggers(wmi_unified_t wmi_handle, * wmi_unified_send_disconnect_roam_params() - Send disconnect roam trigger * parameters to firmware * @wmi_hdl: wmi handle - * @params: pointer to wmi_disconnect_roam_params + * @params: pointer to wlan_roam_disconnect_params * * Return: QDF_STATUS */ QDF_STATUS wmi_unified_send_disconnect_roam_params(wmi_unified_t wmi_handle, - struct wmi_disconnect_roam_params *req); + struct wlan_roam_disconnect_params *req); /** * wmi_unified_send_idle_roam_params() - Send idle roam trigger params to fw * @wmi_hdl: wmi handle - * @params: pointer to wmi_idle_roam_params + * @params: pointer to wlan_roam_idle_params * * Return: QDF_STATUS */ QDF_STATUS wmi_unified_send_idle_roam_params(wmi_unified_t wmi_handle, - struct wmi_idle_roam_params *req); + struct wlan_roam_idle_params *req); /** * wmi_unified_send_roam_preauth_status() - Send roam preauthentication status @@ -359,7 +359,7 @@ wmi_unified_roam_scan_offload_rssi_change_cmd(wmi_unified_t wmi_handle, */ QDF_STATUS wmi_unified_set_per_roam_config(wmi_unified_t wmi_handle, - struct wmi_per_roam_config_req *req_buf); + struct wlan_per_roam_config_req *req_buf); /** * wmi_unified_send_limit_off_chan_cmd() - send wmi cmd of limit off channel @@ -388,12 +388,12 @@ QDF_STATUS wmi_unified_roam_send_hlp_cmd(wmi_unified_t wmi_handle, /** * wmi_unified_send_btm_config() - Send BTM config to fw * @wmi_handle: wmi handle - * @params: pointer to wmi_btm_config + * @params: pointer to wlan_roam_btm_config * * Return: QDF_STATUS */ QDF_STATUS wmi_unified_send_btm_config(wmi_unified_t wmi_handle, - struct wmi_btm_config *params); + struct wlan_roam_btm_config *params); /** * wmi_unified_send_bss_load_config() - Send bss load trigger params to fw @@ -414,8 +414,9 @@ QDF_STATUS wmi_unified_send_bss_load_config(wmi_unified_t wmi_handle, * * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure */ -QDF_STATUS wmi_unified_offload_11k_cmd(wmi_unified_t wmi_handle, - struct wmi_11k_offload_params *params); +QDF_STATUS +wmi_unified_offload_11k_cmd(wmi_unified_t wmi_handle, + struct wlan_roam_11k_offload_params *params); /** * wmi_unified_invoke_neighbor_report_cmd() - send invoke neighbor report cmd * @wmi_handle: wmi handle diff --git a/components/wmi/inc/wmi_unified_roam_param.h b/components/wmi/inc/wmi_unified_roam_param.h index 71a68fc565..191013e654 100644 --- a/components/wmi/inc/wmi_unified_roam_param.h +++ b/components/wmi/inc/wmi_unified_roam_param.h @@ -234,54 +234,6 @@ struct wmi_roam_invoke_cmd { bool forced_roaming; }; -/** - * struct wmi_per_roam_config - per based roaming parameters - * @enable: if PER based roaming is enabled/disabled - * @tx_high_rate_thresh: high rate threshold at which PER based - * roam will stop in tx path - * @rx_high_rate_thresh: high rate threshold at which PER based - * roam will stop in rx path - * @tx_low_rate_thresh: rate below which traffic will be considered - * for PER based roaming in Tx path - * @rx_low_rate_thresh: rate below which traffic will be considered - * for PER based roaming in Tx path - * @tx_rate_thresh_percnt: % above which when traffic is below low_rate_thresh - * will be considered for PER based scan in tx path - * @rx_rate_thresh_percnt: % above which when traffic is below low_rate_thresh - * will be considered for PER based scan in rx path - * @per_rest_time: time for which PER based roam will wait once it - * issues a roam scan. - * @tx_per_mon_time: Minimum time required to be considered as valid scenario - * for PER based roam in tx path - * @rx_per_mon_time: Minimum time required to be considered as valid scenario - * for PER based roam in rx path - * @min_candidate_rssi: Minimum RSSI threshold for candidate AP to be used for - * PER based roaming - */ -struct wmi_per_roam_config { - uint32_t enable; - uint32_t tx_high_rate_thresh; - uint32_t rx_high_rate_thresh; - uint32_t tx_low_rate_thresh; - uint32_t rx_low_rate_thresh; - uint32_t tx_rate_thresh_percnt; - uint32_t rx_rate_thresh_percnt; - uint32_t per_rest_time; - uint32_t tx_per_mon_time; - uint32_t rx_per_mon_time; - uint32_t min_candidate_rssi; -}; - -/** - * struct wmi_per_roam_config_req: PER based roaming config request - * @vdev_id: vdev id on which config needs to be set - * @per_config: PER config - */ -struct wmi_per_roam_config_req { - uint8_t vdev_id; - struct wmi_per_roam_config per_config; -}; - /** * struct wmi_limit_off_chan_param - limit off channel parameters * @vdev_id: vdev id @@ -311,30 +263,6 @@ struct hlp_params { uint8_t hlp_ie[WMI_MAX_HLP_IE_LEN]; }; -/** - * struct wmi_btm_config - BSS Transition Management offload params - * @vdev_id: VDEV on which the parameters should be applied - * @btm_offload_config: BTM config - * @btm_solicited_timeout: Timeout value for waiting BTM request - * @btm_max_attempt_cnt: Maximum attempt for sending BTM query to ESS - * @btm_sticky_time: Stick time after roaming to new AP by BTM - * @disassoc_timer_threshold: threshold value till which the firmware can - * wait before triggering the roam scan after receiving the disassoc iminent - * @btm_query_bitmask: bitmask to btm query with candidate list - * @btm_candidate_min_score: Minimum score of the AP to consider it as a - * candidate if the roam trigger is BTM kickout. - */ -struct wmi_btm_config { - uint8_t vdev_id; - uint32_t btm_offload_config; - uint32_t btm_solicited_timeout; - uint32_t btm_max_attempt_cnt; - uint32_t btm_sticky_time; - uint32_t disassoc_timer_threshold; - uint32_t btm_query_bitmask; - uint32_t btm_candidate_min_score; -}; - /** * struct wmi_bss_load_config - BSS load trigger parameters * @vdev_id: VDEV on which the parameters should be applied @@ -356,36 +284,6 @@ struct wmi_bss_load_config { int32_t rssi_threshold_24ghz; }; -/** - * struct wmi_idle_roam_params - Idle roam trigger parameters - * @vdev_id: VDEV on which the parameters should be applied - * @enable: Enable/Disable Idle roaming - * @band: Connected AP band - * @conn_ap_rssi_delta: Rssi change of connected AP in dBm - * @conn_ap_min_rssi: If connected AP rssi is less than min rssi trigger roam - * @inactive_time: Connected AP idle time - * @data_pkt_count: Data packet count allowed during idle time - */ -struct wmi_idle_roam_params { - uint32_t vdev_id; - bool enable; - uint32_t band; - uint32_t conn_ap_rssi_delta; - int32_t conn_ap_min_rssi; - uint32_t inactive_time; - uint32_t data_pkt_count; -}; - -/** - * struct wmi_disconnect_roam_params - Emergency deauth/disconnect roam params - * @vdev_id: VDEV on which the parameters should be applied - * @enable: Enable or disable disconnect roaming. - */ -struct wmi_disconnect_roam_params { - uint32_t vdev_id; - bool enable; -}; - /** * struct wmi_roam_auth_status_params - WPA3 roam auth response status * parameters @@ -404,45 +302,6 @@ struct wmi_roam_auth_status_params { uint8_t pmkid[PMKID_LEN]; }; -/** - * @time_offset: time offset after 11k offload command to trigger a neighbor - * report request (in seconds) - * @low_rssi_offset: Offset from rssi threshold to trigger a neighbor - * report request (in dBm) - * @bmiss_count_trigger: Number of beacon miss events to trigger neighbor - * report request - * @per_threshold_offset: offset from PER threshold to trigger neighbor - * report request (in %) - * @neighbor_report_cache_timeout: timeout after which new trigger can enable - * sending of a neighbor report request (in seconds) - * @max_neighbor_report_req_cap: max number of neighbor report requests that - * can be sent to the peer in the current session - * @ssid: Current connect SSID info - */ -struct wmi_11k_offload_neighbor_report_params { - uint32_t time_offset; - uint32_t low_rssi_offset; - uint32_t bmiss_count_trigger; - uint32_t per_threshold_offset; - uint32_t neighbor_report_cache_timeout; - uint32_t max_neighbor_report_req_cap; - struct wlan_ssid ssid; -}; - -/** - * struct wmi_11k_offload_params - offload 11k features to FW - * @vdev_id: vdev id - * @offload_11k_bitmask: bitmask to specify offloaded features - * B0: Neighbor Report Request offload - * B1-B31: Reserved - * @neighbor_report_params: neighbor report offload params - */ -struct wmi_11k_offload_params { - uint32_t vdev_id; - uint32_t offload_11k_bitmask; - struct wmi_11k_offload_neighbor_report_params neighbor_report_params; -}; - /** * struct wmi_invoke_neighbor_report_params - Invoke neighbor report request * from IW to FW diff --git a/components/wmi/src/wmi_unified_roam_api.c b/components/wmi/src/wmi_unified_roam_api.c index 77c7455a8e..5784c0653f 100644 --- a/components/wmi/src/wmi_unified_roam_api.c +++ b/components/wmi/src/wmi_unified_roam_api.c @@ -170,7 +170,7 @@ QDF_STATUS wmi_unified_roam_invoke_cmd(wmi_unified_t wmi_handle, QDF_STATUS wmi_unified_send_disconnect_roam_params(wmi_unified_t wmi_handle, - struct wmi_disconnect_roam_params *req) + struct wlan_roam_disconnect_params *req) { if (wmi_handle->ops->send_disconnect_roam_params) return wmi_handle->ops->send_disconnect_roam_params(wmi_handle, @@ -180,7 +180,7 @@ wmi_unified_send_disconnect_roam_params(wmi_unified_t wmi_handle, QDF_STATUS wmi_unified_send_idle_roam_params(wmi_unified_t wmi_handle, - struct wmi_idle_roam_params *req) + struct wlan_roam_idle_params *req) { if (wmi_handle->ops->send_idle_roam_params) return wmi_handle->ops->send_idle_roam_params(wmi_handle, @@ -276,7 +276,7 @@ wmi_unified_roam_scan_offload_rssi_change_cmd(wmi_unified_t wmi_handle, QDF_STATUS wmi_unified_set_per_roam_config(wmi_unified_t wmi_handle, - struct wmi_per_roam_config_req *req_buf) + struct wlan_per_roam_config_req *req_buf) { if (wmi_handle->ops->send_per_roam_config_cmd) return wmi_handle->ops->send_per_roam_config_cmd(wmi_handle, @@ -309,7 +309,7 @@ QDF_STATUS wmi_unified_roam_send_hlp_cmd(wmi_unified_t wmi_handle, #endif /* WLAN_FEATURE_FILS_SK */ QDF_STATUS wmi_unified_send_btm_config(wmi_unified_t wmi_handle, - struct wmi_btm_config *params) + struct wlan_roam_btm_config *params) { if (wmi_handle->ops->send_btm_config) return wmi_handle->ops->send_btm_config(wmi_handle, @@ -328,9 +328,9 @@ QDF_STATUS wmi_unified_send_bss_load_config(wmi_unified_t wmi_handle, return QDF_STATUS_E_FAILURE; } - -QDF_STATUS wmi_unified_offload_11k_cmd(wmi_unified_t wmi_handle, - struct wmi_11k_offload_params *params) +QDF_STATUS +wmi_unified_offload_11k_cmd(wmi_unified_t wmi_handle, + struct wlan_roam_11k_offload_params *params) { if (wmi_handle->ops->send_offload_11k_cmd) return wmi_handle->ops->send_offload_11k_cmd(wmi_handle, diff --git a/components/wmi/src/wmi_unified_roam_tlv.c b/components/wmi/src/wmi_unified_roam_tlv.c index 0becb2d3f0..a6dc991bd0 100644 --- a/components/wmi/src/wmi_unified_roam_tlv.c +++ b/components/wmi/src/wmi_unified_roam_tlv.c @@ -2613,7 +2613,7 @@ error: */ static QDF_STATUS send_per_roam_config_cmd_tlv(wmi_unified_t wmi_handle, - struct wmi_per_roam_config_req *req_buf) + struct wlan_per_roam_config_req *req_buf) { wmi_buf_t buf = NULL; QDF_STATUS status; @@ -2785,12 +2785,12 @@ void wmi_fils_sk_attach_tlv(wmi_unified_t wmi_handle) /* * send_btm_config_cmd_tlv() - Send wmi cmd for BTM config * @wmi_handle: wmi handle - * @params: pointer to wmi_btm_config + * @params: pointer to wlan_roam_btm_config * * Return: QDF_STATUS */ static QDF_STATUS send_btm_config_cmd_tlv(wmi_unified_t wmi_handle, - struct wmi_btm_config *params) + struct wlan_roam_btm_config *params) { wmi_btm_config_fixed_param *cmd; wmi_buf_t buf; @@ -2883,7 +2883,7 @@ send_roam_bss_load_config_tlv(wmi_unified_t wmi_handle, /** * send_disconnect_roam_params_tlv() - send disconnect roam trigger parameters * @wmi_handle: wmi handle - * @disconnect_roam: pointer to wmi_disconnect_roam_params which carries the + * @disconnect_roam: pointer to wlan_roam_disconnect_params which carries the * disconnect_roam_trigger parameters from CSR * * This function sends the disconnect roam trigger parameters to fw. @@ -2892,7 +2892,7 @@ send_roam_bss_load_config_tlv(wmi_unified_t wmi_handle, */ static QDF_STATUS send_disconnect_roam_params_tlv(wmi_unified_t wmi_handle, - struct wmi_disconnect_roam_params *req) + struct wlan_roam_disconnect_params *req) { wmi_roam_deauth_config_cmd_fixed_param *cmd; wmi_buf_t buf; @@ -2929,7 +2929,7 @@ send_disconnect_roam_params_tlv(wmi_unified_t wmi_handle, /** * send_idle_roam_params_tlv() - send idle roam trigger parameters * @wmi_handle: wmi handle - * @idle_roam_params: pointer to wmi_idle_roam_params which carries the + * @idle_roam_params: pointer to wlan_roam_idle_params which carries the * idle roam parameters from CSR * * This function sends the idle roam trigger parameters to fw. @@ -2938,7 +2938,7 @@ send_disconnect_roam_params_tlv(wmi_unified_t wmi_handle, */ static QDF_STATUS send_idle_roam_params_tlv(wmi_unified_t wmi_handle, - struct wmi_idle_roam_params *idle_roam_params) + struct wlan_roam_idle_params *idle_roam_params) { wmi_roam_idle_config_cmd_fixed_param *cmd; wmi_buf_t buf; @@ -3036,14 +3036,14 @@ send_roam_preauth_status_tlv(wmi_unified_t wmi_handle, #else static inline QDF_STATUS send_disconnect_roam_params_tlv(wmi_unified_t wmi_handle, - struct wmi_disconnect_roam_params *req) + struct wlan_roam_disconnect_params *req) { return QDF_STATUS_E_FAILURE; } static inline QDF_STATUS send_idle_roam_params_tlv(wmi_unified_t wmi_handle, - struct wmi_idle_roam_params *idle_roam_params) + struct wlan_roam_idle_params *idle_roam_params) { return QDF_STATUS_E_FAILURE; } @@ -3065,7 +3065,7 @@ send_roam_preauth_status_tlv(wmi_unified_t wmi_handle, */ static QDF_STATUS send_offload_11k_cmd_tlv(wmi_unified_t wmi_handle, - struct wmi_11k_offload_params *params) + struct wlan_roam_11k_offload_params *params) { wmi_11k_offload_report_fixed_param *cmd; wmi_buf_t buf; diff --git a/core/mac/inc/sir_api.h b/core/mac/inc/sir_api.h index 1a100d1743..f09cbeee02 100644 --- a/core/mac/inc/sir_api.h +++ b/core/mac/inc/sir_api.h @@ -2211,8 +2211,8 @@ struct roam_offload_scan_req { bool is_sae_single_pmk; bool enable_ft_im_roaming; /* Idle/Disconnect roam parameters */ - struct wmi_idle_roam_params idle_roam_params; - struct wmi_disconnect_roam_params disconnect_roam_params; + struct wlan_roam_idle_params idle_roam_params; + struct wlan_roam_disconnect_params disconnect_roam_params; #endif struct roam_ext_params roam_params; struct wlan_roam_triggers roam_triggers; @@ -2239,7 +2239,7 @@ struct roam_offload_scan_req { uint32_t rct_validity_timer; uint32_t disassoc_timer_threshold; uint32_t btm_trig_min_candidate_score; - struct wmi_11k_offload_params offload_11k_params; + struct wlan_roam_11k_offload_params offload_11k_params; uint32_t ho_delay_for_rx; uint32_t roam_preauth_retry_count; uint32_t roam_preauth_no_ack_timeout; diff --git a/core/mac/inc/wni_api.h b/core/mac/inc/wni_api.h index 03fecb7cae..b00eb46979 100644 --- a/core/mac/inc/wni_api.h +++ b/core/mac/inc/wni_api.h @@ -237,8 +237,10 @@ enum eWniMsgTypes { eWNI_SME_ANTENNA_ISOLATION_RSP = SIR_SME_MSG_TYPES_BEGIN + 155, eWNI_SME_MON_DEINIT_SESSION = SIR_SME_MSG_TYPES_BEGIN + 156, eWNI_SME_VDEV_DELETE_RSP = SIR_SME_MSG_TYPES_BEGIN + 157, +#ifndef ROAM_OFFLOAD_V1 eWNI_SME_ROAM_INIT_PARAM = SIR_SME_MSG_TYPES_BEGIN + 158, eWNI_SME_ROAM_SEND_PER_REQ = SIR_SME_MSG_TYPES_BEGIN + 159, +#endif eWNI_SME_GET_ROAM_SCAN_CH_LIST_EVENT = SIR_SME_MSG_TYPES_BEGIN + 160, eWNI_SME_MONITOR_MODE_VDEV_UP = SIR_SME_MSG_TYPES_BEGIN + 161, diff --git a/core/mac/src/include/sir_params.h b/core/mac/src/include/sir_params.h index 49084af07e..988b5cfd49 100644 --- a/core/mac/src/include/sir_params.h +++ b/core/mac/src/include/sir_params.h @@ -576,7 +576,9 @@ struct sir_cfg_action_frm_tb_ppdu { /* (SIR_HAL_ITC_MSG_TYPES_BEGIN + 370) is unused */ +#ifndef ROAM_OFFLOAD_V1 #define SIR_HAL_SET_PER_ROAM_CONFIG_CMD (SIR_HAL_ITC_MSG_TYPES_BEGIN + 371) +#endif #define SIR_HAL_RX_CHN_STATUS_EVENT (SIR_HAL_ITC_MSG_TYPES_BEGIN + 372) #define SIR_HAL_GET_RCPI_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 373) @@ -588,7 +590,10 @@ struct sir_cfg_action_frm_tb_ppdu { #define SIR_HAL_HIDDEN_SSID_RESTART_RSP (SIR_HAL_ITC_MSG_TYPES_BEGIN + 379) + +#ifndef ROAM_OFFLOAD_V1 #define SIR_HAL_INIT_ROAM_OFFLOAD_PARAM (SIR_HAL_ITC_MSG_TYPES_BEGIN + 380) +#endif /* * Unused SIR_HAL_ITC_MSG_TYPES_BEGIN + 381 to 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 6b9db314d9..c9f776f26d 100644 --- a/core/mac/src/pe/lim/lim_process_message_queue.c +++ b/core/mac/src/pe/lim/lim_process_message_queue.c @@ -1761,9 +1761,11 @@ static void lim_process_messages(struct mac_context *mac_ctx, case eWNI_SME_ROAM_INVOKE: /* fall through */ case eWNI_SME_ROAM_SCAN_OFFLOAD_REQ: - case eWNI_SME_ROAM_INIT_PARAM: case eWNI_SME_ROAM_SEND_SET_PCL_REQ: +#ifndef ROAM_OFFLOAD_V1 + case eWNI_SME_ROAM_INIT_PARAM: case eWNI_SME_ROAM_SEND_PER_REQ: +#endif case eWNI_SME_SET_ADDBA_ACCEPT: case eWNI_SME_UPDATE_EDCA_PROFILE: case WNI_SME_UPDATE_MU_EDCA_PARAMS: 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 7d87acf813..ad4ffdb372 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 @@ -3489,6 +3489,7 @@ static void __lim_process_roam_scan_offload_req(struct mac_context *mac_ctx, } #if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD) +#ifndef ROAM_OFFLOAD_V1 /** * lim_send_roam_offload_init() - Process Roam offload flag from csr * @mac_ctx: Pointer to Global MAC structure @@ -3534,7 +3535,7 @@ static void lim_send_roam_per_command(struct mac_context *mac_ctx, qdf_mem_free(msg_buf); } } - +#endif /** * lim_send_roam_set_pcl() - Process Roam offload flag from csr * @mac_ctx: Pointer to Global MAC structure @@ -3558,6 +3559,8 @@ static void lim_send_roam_set_pcl(struct mac_context *mac_ctx, } } #else + +#ifndef ROAM_OFFLOAD_V1 static void lim_send_roam_offload_init(struct mac_context *mac_ctx, uint32_t *msg_buf) { @@ -3569,7 +3572,7 @@ static void lim_send_roam_per_command(struct mac_context *mac_ctx, { qdf_mem_free(msg_buf); } - +#endif static inline void lim_send_roam_set_pcl(struct mac_context *mac_ctx, struct set_pcl_req *msg_buf) { @@ -4644,18 +4647,20 @@ bool lim_process_sme_req_messages(struct mac_context *mac, __lim_process_roam_scan_offload_req(mac, msg_buf); bufConsumed = false; break; - case eWNI_SME_ROAM_INIT_PARAM: - lim_send_roam_offload_init(mac, msg_buf); - bufConsumed = false; - break; case eWNI_SME_ROAM_SEND_SET_PCL_REQ: lim_send_roam_set_pcl(mac, (struct set_pcl_req *)msg_buf); bufConsumed = false; break; +#ifndef ROAM_OFFLOAD_V1 + case eWNI_SME_ROAM_INIT_PARAM: + lim_send_roam_offload_init(mac, msg_buf); + bufConsumed = false; + break; case eWNI_SME_ROAM_SEND_PER_REQ: lim_send_roam_per_command(mac, msg_buf); bufConsumed = false; break; +#endif case eWNI_SME_ROAM_INVOKE: lim_process_roam_invoke(mac, msg_buf); bufConsumed = false; diff --git a/core/mac/src/sys/legacy/src/utils/src/mac_trace.c b/core/mac/src/sys/legacy/src/utils/src/mac_trace.c index 08835b3c3e..74aa4576cf 100644 --- a/core/mac/src/sys/legacy/src/utils/src/mac_trace.c +++ b/core/mac/src/sys/legacy/src/utils/src/mac_trace.c @@ -350,7 +350,9 @@ uint8_t *mac_trace_get_sme_msg_string(uint16_t sme_msg) CASE_RETURN_STRING(eWNI_SME_UPDATE_ACCESS_POLICY_VENDOR_IE); CASE_RETURN_STRING(eWNI_SME_DEFAULT_SCAN_IE); CASE_RETURN_STRING(eWNI_SME_ROAM_SCAN_OFFLOAD_REQ); +#ifndef ROAM_OFFLOAD_V1 CASE_RETURN_STRING(eWNI_SME_ROAM_INIT_PARAM); +#endif CASE_RETURN_STRING(eWNI_SME_LOST_LINK_INFO_IND); CASE_RETURN_STRING(eWNI_SME_GET_PEER_INFO_EXT_IND); CASE_RETURN_STRING(eWNI_SME_RSO_CMD_STATUS_IND); @@ -600,7 +602,9 @@ uint8_t *mac_trace_get_wma_msg_string(uint16_t wma_msg) CASE_RETURN_STRING(WMA_SET_RSSI_MONITOR_REQ); CASE_RETURN_STRING(WMA_SET_WISA_PARAMS); CASE_RETURN_STRING(WMA_SET_WOW_PULSE_CMD); +#ifndef ROAM_OFFLOAD_V1 CASE_RETURN_STRING(WMA_SET_PER_ROAM_CONFIG_CMD); +#endif CASE_RETURN_STRING(WMA_GET_RCPI_REQ); CASE_RETURN_STRING(WMA_SET_DBS_SCAN_SEL_CONF_PARAMS); CASE_RETURN_STRING(WMA_GET_ROAM_SCAN_STATS); diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index 7c35ff90e0..5afeb7f6eb 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -16998,6 +16998,64 @@ csr_update_roam_scan_offload_request(struct mac_context *mac_ctx, #if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD) +/** + * csr_update_btm_offload_config() - Update btm config param to fw + * @mac_ctx: Global mac ctx + * @command: Roam offload command + * @btm_offload_config: btm offload config + * @session: roam session + * + * Return: None + */ +static void csr_update_btm_offload_config(struct mac_context *mac_ctx, + uint8_t command, + uint32_t *btm_offload_config, + struct csr_roam_session *session) +{ + struct wlan_objmgr_peer *peer; + bool is_pmf_enabled; + + *btm_offload_config = + mac_ctx->mlme_cfg->btm.btm_offload_config; + + /* Return if INI is disabled */ + if (!(*btm_offload_config)) + return; + + /* For RSO Stop Disable BTM offload to firmware */ + if (command == ROAM_SCAN_OFFLOAD_STOP) { + *btm_offload_config = 0; + return; + } + + if (!session->pConnectBssDesc) { + sme_err("Connected Bss Desc is NULL"); + return; + } + + peer = wlan_objmgr_get_peer(mac_ctx->psoc, + wlan_objmgr_pdev_get_pdev_id(mac_ctx->pdev), + session->pConnectBssDesc->bssId, + WLAN_LEGACY_SME_ID); + if (!peer) { + sme_debug("Peer of peer_mac %pM not found", + session->pConnectBssDesc->bssId); + return; + } + + is_pmf_enabled = mlme_get_peer_pmf_status(peer); + wlan_objmgr_peer_release_ref(peer, WLAN_LEGACY_SME_ID); + sme_debug("get is_pmf_enabled %d for %pM", is_pmf_enabled, + session->pConnectBssDesc->bssId); + + /* If peer does not support PMF in case of OCE/MBO + * Connection, Disable BTM offload to firmware. + */ + if (session->pConnectBssDesc->mbo_oce_enabled_ap && + !is_pmf_enabled) + *btm_offload_config = 0; +} + #ifndef ROAM_OFFLOAD_V1 /** * csr_populate_roam_chan_list() @@ -17334,64 +17392,6 @@ csr_rso_command_fill_rsn_caps(struct mac_context *mac_ctx, uint8_t vdev_id, wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID); } -/** - * csr_update_btm_offload_config() - Update btm config param to fw - * @mac_ctx: Global mac ctx - * @command: Roam offload command - * @req_buf: roam offload scan request - * @session: roam session - * - * Return: None - */ -static void csr_update_btm_offload_config(struct mac_context *mac_ctx, - uint8_t command, - struct roam_offload_scan_req *req_buf, - struct csr_roam_session *session) -{ - struct wlan_objmgr_peer *peer; - bool is_pmf_enabled; - - req_buf->btm_offload_config = - mac_ctx->mlme_cfg->btm.btm_offload_config; - - /* Return if INI is disabled */ - if (!req_buf->btm_offload_config) - return; - - /* For RSO Stop Disable BTM offload to firmware */ - if (command == ROAM_SCAN_OFFLOAD_STOP) { - req_buf->btm_offload_config = 0; - return; - } - - if (!session->pConnectBssDesc) { - sme_err("Connected Bss Desc is NULL"); - return; - } - - peer = wlan_objmgr_get_peer(mac_ctx->psoc, - wlan_objmgr_pdev_get_pdev_id(mac_ctx->pdev), - session->pConnectBssDesc->bssId, - WLAN_LEGACY_SME_ID); - if (!peer) { - sme_debug("Peer of peer_mac %pM not found", - session->pConnectBssDesc->bssId); - return; - } - - is_pmf_enabled = mlme_get_peer_pmf_status(peer); - wlan_objmgr_peer_release_ref(peer, WLAN_LEGACY_SME_ID); - sme_debug("get is_pmf_enabled %d for %pM", is_pmf_enabled, - session->pConnectBssDesc->bssId); - - /* If peer does not support PMF in case of OCE/MBO - * Connection, Disable BTM offload to firmware. - */ - if (session->pConnectBssDesc->mbo_oce_enabled_ap && - !is_pmf_enabled) - req_buf->btm_offload_config = 0; -} - /** * csr_create_roam_scan_offload_request() - init roam offload scan request * @@ -17664,7 +17664,8 @@ csr_create_roam_scan_offload_request(struct mac_context *mac_ctx, req_buf->lca_config_params.num_disallowed_aps = mac_ctx->mlme_cfg->lfr.lfr3_num_disallowed_aps; - csr_update_btm_offload_config(mac_ctx, command, req_buf, session); + csr_update_btm_offload_config(mac_ctx, command, + &req_buf->btm_offload_config, session); req_buf->btm_solicited_timeout = mac_ctx->mlme_cfg->btm.btm_solicited_timeout; @@ -17702,7 +17703,8 @@ csr_update_11k_offload_params(struct mac_context *mac_ctx, struct roam_offload_scan_req *req_buffer, bool enabled) { - struct wmi_11k_offload_params *params = &req_buffer->offload_11k_params; + struct wlan_roam_11k_offload_params *params = + &req_buffer->offload_11k_params; struct csr_config *csr_config = &mac_ctx->roam.configParam; struct csr_neighbor_report_offload_params *neighbor_report_offload = &csr_config->neighbor_report_offload; @@ -18129,13 +18131,13 @@ static void csr_update_driver_assoc_ies(struct mac_context *mac_ctx, * * Return: per roam config request packet buffer */ -static struct wmi_per_roam_config_req * +static struct wlan_per_roam_config_req * csr_create_per_roam_request(struct mac_context *mac_ctx, uint8_t session_id) { - struct wmi_per_roam_config_req *req_buf = NULL; + struct wlan_per_roam_config_req *req_buf = NULL; - req_buf = qdf_mem_malloc(sizeof(struct wmi_per_roam_config_req)); + req_buf = qdf_mem_malloc(sizeof(struct wlan_per_roam_config_req)); if (!req_buf) return NULL; @@ -18188,7 +18190,7 @@ csr_create_per_roam_request(struct mac_context *mac_ctx, static QDF_STATUS csr_roam_offload_per_scan(struct mac_context *mac_ctx, uint8_t session_id) { - struct wmi_per_roam_config_req *req_buf; + struct wlan_per_roam_config_req *req_buf; struct scheduler_msg msg = {0}; QDF_STATUS status; @@ -19258,10 +19260,8 @@ csr_roam_offload_scan(struct mac_context *mac_ctx, uint8_t session_id, } QDF_STATUS -wlan_cm_roam_cmd_allowed(struct wlan_objmgr_psoc *psoc, - uint8_t vdev_id, - uint8_t command, - uint8_t reason) +wlan_cm_roam_cmd_allowed(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, + uint8_t command, uint8_t reason) { uint8_t *state = NULL; struct csr_roam_session *session; @@ -19407,7 +19407,7 @@ wlan_cm_roam_cmd_allowed(struct wlan_objmgr_psoc *psoc, } /** - * wlan_cm_roam_scan_offload_rssi_thresh() - set roam offload scan rssi + * csr_cm_roam_scan_offload_rssi_thresh() - set roam offload scan rssi * parameters * @mac_ctx: global mac ctx * @session: csr roam session @@ -19418,8 +19418,7 @@ wlan_cm_roam_cmd_allowed(struct wlan_objmgr_psoc *psoc, * Return: None */ static void -wlan_cm_roam_scan_offload_rssi_thresh( - struct mac_context *mac_ctx, +csr_cm_roam_scan_offload_rssi_thresh(struct mac_context *mac_ctx, struct csr_roam_session *session, struct wlan_roam_offload_scan_rssi_params *params) { @@ -19502,7 +19501,7 @@ wlan_cm_roam_scan_offload_rssi_thresh( } /** - * wlan_cm_roam_scan_offload_scan_period() - set roam offload scan period + * csr_cm_roam_scan_offload_scan_period() - set roam offload scan period * parameters * @mac_ctx: global mac ctx * @vdev_id: vdev id @@ -19513,10 +19512,9 @@ wlan_cm_roam_scan_offload_rssi_thresh( * Return: None */ static void -wlan_cm_roam_scan_offload_scan_period( - struct mac_context *mac_ctx, - uint8_t vdev_id, - struct wlan_roam_scan_period_params *params) +csr_cm_roam_scan_offload_scan_period(struct mac_context *mac_ctx, + uint8_t vdev_id, + struct wlan_roam_scan_period_params *params) { tpCsrNeighborRoamControlInfo roam_info = &mac_ctx->roam.neighborRoamInfo[vdev_id]; @@ -19537,7 +19535,7 @@ wlan_cm_roam_scan_offload_scan_period( } /** - * wlan_cm_roam_scan_offload_ap_profile() - set roam ap profile parameters + * csr_cm_roam_scan_offload_ap_profile() - set roam ap profile parameters * @mac_ctx: global mac ctx * @session: sme session * @params: roam ap profile related parameters @@ -19547,9 +19545,9 @@ wlan_cm_roam_scan_offload_scan_period( * Return: None */ static void -wlan_cm_roam_scan_offload_ap_profile(struct mac_context *mac_ctx, - struct csr_roam_session *session, - struct ap_profile_params *params) +csr_cm_roam_scan_offload_ap_profile(struct mac_context *mac_ctx, + struct csr_roam_session *session, + struct ap_profile_params *params) { struct ap_profile *profile = ¶ms->profile; struct roam_ext_params *roam_params_src = @@ -19599,7 +19597,7 @@ wlan_cm_roam_scan_offload_ap_profile(struct mac_context *mac_ctx, } /** - * wlan_cm_roam_scan_filter() - set roam scan filter parameters + * csr_cm_roam_scan_filter() - set roam scan filter parameters * @mac_ctx: global mac ctx * @vdev_id: vdev id * @command: rso command @@ -19613,12 +19611,9 @@ wlan_cm_roam_scan_offload_ap_profile(struct mac_context *mac_ctx, * Return: None */ static void -wlan_cm_roam_scan_filter( - struct mac_context *mac_ctx, - uint8_t vdev_id, - uint8_t command, - uint8_t reason, - struct wlan_roam_scan_filter_params *scan_filter_params) +csr_cm_roam_scan_filter(struct mac_context *mac_ctx, uint8_t vdev_id, + uint8_t command, uint8_t reason, + struct wlan_roam_scan_filter_params *scan_filter_params) { int i; uint32_t num_bssid_black_list = 0, num_ssid_white_list = 0, @@ -19725,6 +19720,38 @@ wlan_cm_roam_scan_filter( } } +/** + * csr_cm_roam_scan_btm_offload() - set roam scan btm offload parameters + * @mac_ctx: global mac ctx + * @session: sme session + * @params: roam roam scan btm offload parameters + * + * This function is used to set roam scan btm offload related parameters + * + * Return: None + */ +static void +csr_cm_roam_scan_btm_offload(struct mac_context *mac_ctx, + struct csr_roam_session *session, + struct wlan_roam_btm_config *params) +{ + params->vdev_id = session->vdev_id; + csr_update_btm_offload_config(mac_ctx, ROAM_SCAN_OFFLOAD_START, + ¶ms->btm_offload_config, session); + params->btm_solicited_timeout = + mac_ctx->mlme_cfg->btm.btm_solicited_timeout; + params->btm_max_attempt_cnt = + mac_ctx->mlme_cfg->btm.btm_max_attempt_cnt; + params->btm_sticky_time = + mac_ctx->mlme_cfg->btm.btm_sticky_time; + params->disassoc_timer_threshold = + mac_ctx->mlme_cfg->btm.disassoc_timer_threshold; + params->btm_query_bitmask = + mac_ctx->mlme_cfg->btm.btm_query_bitmask; + params->btm_candidate_min_score = + mac_ctx->mlme_cfg->btm.btm_trig_min_candidate_score; +} + QDF_STATUS wlan_cm_roam_fill_start_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, @@ -19748,18 +19775,20 @@ wlan_cm_roam_fill_start_req(struct wlan_objmgr_psoc *psoc, return QDF_STATUS_E_FAILURE; } - wlan_cm_roam_scan_offload_rssi_thresh(mac_ctx, session, - &req->rssi_params); + csr_cm_roam_scan_offload_rssi_thresh(mac_ctx, session, + &req->rssi_params); - wlan_cm_roam_scan_offload_scan_period(mac_ctx, session->vdev_id, + csr_cm_roam_scan_offload_scan_period(mac_ctx, session->vdev_id, &req->scan_period_params); - wlan_cm_roam_scan_offload_ap_profile(mac_ctx, session, + csr_cm_roam_scan_offload_ap_profile(mac_ctx, session, &req->profile_params); - wlan_cm_roam_scan_filter(mac_ctx, vdev_id, ROAM_SCAN_OFFLOAD_START, + csr_cm_roam_scan_filter(mac_ctx, vdev_id, ROAM_SCAN_OFFLOAD_START, reason, &req->scan_filter_params); + csr_cm_roam_scan_btm_offload(mac_ctx, session, &req->btm_config); + /* fill other struct similar to wlan_roam_offload_scan_rssi_params */ return status; diff --git a/core/wma/inc/wma.h b/core/wma/inc/wma.h index 707b07ecd1..450f8d2eb9 100644 --- a/core/wma/inc/wma.h +++ b/core/wma/inc/wma.h @@ -848,9 +848,6 @@ struct wma_wlm_stats_data { * @roam_ho_wl: wake lock for roam handoff req * @wow_nack: wow negative ack flag * @is_wow_bus_suspended: is wow bus suspended flag - * @suitable_ap_hb_failure: better ap found - * @suitable_ap_hb_failure_rssi: RSSI when suitable_ap_hb_failure - * triggered for later usage to report RSSI at beacon miss scenario * @IsRArateLimitEnabled: RA rate limiti s enabled or not * @RArateLimitInterval: RA rate limit interval * @is_lpass_enabled: Flag to indicate if LPASS feature is enabled or not @@ -974,8 +971,6 @@ typedef struct { qdf_wake_lock_t roam_preauth_wl; int wow_nack; qdf_atomic_t is_wow_bus_suspended; - bool suitable_ap_hb_failure; - uint32_t suitable_ap_hb_failure_rssi; #ifdef WLAN_FEATURE_LPSS bool is_lpass_enabled; #endif diff --git a/core/wma/inc/wma_api.h b/core/wma/inc/wma_api.h index eff857a831..62f0aac0cd 100644 --- a/core/wma/inc/wma_api.h +++ b/core/wma/inc/wma_api.h @@ -817,6 +817,7 @@ int wma_wlm_stats_req(int vdev_id, uint32_t bitmask, uint32_t max_size, int wma_wlm_stats_rsp(void *wma_ctx, uint8_t *event, uint32_t len); #endif /* FEATURE_WLM_STATS */ +#ifndef ROAM_OFFLOAD_V1 /** * wma_update_roam_offload_flag() - update roam offload flag to fw * @wma: wma handle @@ -826,7 +827,7 @@ int wma_wlm_stats_rsp(void *wma_ctx, uint8_t *event, uint32_t len); */ void wma_update_roam_offload_flag(void *handle, struct roam_init_params *params); - +#endif /** * wma_self_peer_create() - create self peer in objmgr * @vdev_mlme: vdev mlme component private object diff --git a/core/wma/inc/wma_internal.h b/core/wma/inc/wma_internal.h index e7921f456f..f0601e9c18 100644 --- a/core/wma/inc/wma_internal.h +++ b/core/wma/inc/wma_internal.h @@ -350,6 +350,7 @@ wma_roam_scan_chan_list_event_handler(WMA_HANDLE handle, uint8_t *event, } #endif +#ifndef ROAM_OFFLOAD_V1 /** * wma_update_per_roam_config() -per roam config parameter updation to FW * @handle: wma handle @@ -358,8 +359,8 @@ wma_roam_scan_chan_list_event_handler(WMA_HANDLE handle, uint8_t *event, * Return: none */ void wma_update_per_roam_config(WMA_HANDLE handle, - struct wmi_per_roam_config_req *req_buf); - + struct wlan_per_roam_config_req *req_buf); +#endif QDF_STATUS wma_update_channel_list(WMA_HANDLE handle, tSirUpdateChanList *chan_list); diff --git a/core/wma/inc/wma_types.h b/core/wma/inc/wma_types.h index 95446626bd..0984bb0901 100644 --- a/core/wma/inc/wma_types.h +++ b/core/wma/inc/wma_types.h @@ -398,7 +398,9 @@ #define WMA_SET_WOW_PULSE_CMD SIR_HAL_SET_WOW_PULSE_CMD +#ifndef ROAM_OFFLOAD_V1 #define WMA_SET_PER_ROAM_CONFIG_CMD SIR_HAL_SET_PER_ROAM_CONFIG_CMD +#endif #define WMA_SEND_AP_VDEV_UP SIR_HAL_SEND_AP_VDEV_UP @@ -433,7 +435,9 @@ #endif #define WMA_SET_ROAM_TRIGGERS SIR_HAL_SET_ROAM_TRIGGERS +#ifndef ROAM_OFFLOAD_V1 #define WMA_ROAM_INIT_PARAM SIR_HAL_INIT_ROAM_OFFLOAD_PARAM +#endif #define WMA_DATA_STALL_TRIGGER 6 diff --git a/core/wma/src/wma_main.c b/core/wma/src/wma_main.c index 00364e0079..83a6401391 100644 --- a/core/wma/src/wma_main.c +++ b/core/wma/src/wma_main.c @@ -8656,11 +8656,13 @@ static QDF_STATUS wma_mc_process_msg(struct scheduler_msg *msg) qdf_mem_free(msg->bodyptr); break; #endif /* FEATURE_WLAN_EXTSCAN */ +#ifndef ROAM_OFFLOAD_V1 case WMA_SET_PER_ROAM_CONFIG_CMD: wma_update_per_roam_config(wma_handle, - (struct wmi_per_roam_config_req *)msg->bodyptr); + (struct wlan_per_roam_config_req *)msg->bodyptr); qdf_mem_free(msg->bodyptr); break; +#endif case WMA_SET_SCAN_MAC_OUI_REQ: wma_scan_probe_setoui(wma_handle, msg->bodyptr); qdf_mem_free(msg->bodyptr); @@ -8969,10 +8971,12 @@ static QDF_STATUS wma_mc_process_msg(struct scheduler_msg *msg) wma_set_roam_triggers(wma_handle, msg->bodyptr); qdf_mem_free(msg->bodyptr); break; +#ifndef ROAM_OFFLOAD_V1 case WMA_ROAM_INIT_PARAM: wma_update_roam_offload_flag(wma_handle, msg->bodyptr); qdf_mem_free(msg->bodyptr); break; +#endif case WMA_ROAM_SCAN_CH_REQ: wma_get_roam_scan_ch(wma_handle->wmi_handle, msg->bodyval); break; diff --git a/core/wma/src/wma_mgmt.c b/core/wma/src/wma_mgmt.c index f12ae5d3b0..e05c0ad155 100644 --- a/core/wma/src/wma_mgmt.c +++ b/core/wma/src/wma_mgmt.c @@ -84,6 +84,7 @@ #if !defined(REMOVE_PKT_LOG) #include #endif +#include "wlan_cm_roam_api.h" /** * wma_send_bcn_buf_ll() - prepare and send beacon buffer to fw for LL @@ -2411,6 +2412,20 @@ void wma_beacon_miss_handler(tp_wma_handle wma, uint32_t vdev_id, int32_t rssi) wma_lost_link_info_handler(wma, vdev_id, rssi); } +#ifdef ROAM_OFFLOAD_V1 +void wlan_cm_send_beacon_miss(uint8_t vdev_id, int32_t rssi) +{ + tp_wma_handle wma; + + wma = cds_get_context(QDF_MODULE_ID_WMA); + if (!wma) { + wma_err("Invalid wma"); + return; + } + + wma_beacon_miss_handler(wma, vdev_id, rssi); +} +#endif /** * wma_get_status_str() - get string of tx status from firmware * @status: tx status diff --git a/core/wma/src/wma_scan_roam.c b/core/wma/src/wma_scan_roam.c index 2305845bcd..5470d65449 100644 --- a/core/wma/src/wma_scan_roam.c +++ b/core/wma/src/wma_scan_roam.c @@ -1633,10 +1633,10 @@ static QDF_STATUS wma_roam_scan_btm_offload(tp_wma_handle wma_handle, struct roam_offload_scan_req *roam_req) { - struct wmi_btm_config *params; + struct wlan_roam_btm_config *params; QDF_STATUS status; - params = qdf_mem_malloc(sizeof(struct wmi_btm_config)); + params = qdf_mem_malloc(sizeof(struct wlan_roam_btm_config)); if (!params) return QDF_STATUS_E_FAILURE; @@ -1711,7 +1711,7 @@ void wma_send_roam_bss_load_config(WMA_HANDLE handle, */ static QDF_STATUS wma_send_offload_11k_params(WMA_HANDLE handle, - struct wmi_11k_offload_params *params) + struct wlan_roam_11k_offload_params *params) { QDF_STATUS status; tp_wma_handle wma_handle = (tp_wma_handle) handle; @@ -1758,7 +1758,7 @@ wma_send_disconnect_roam_params(tp_wma_handle wma_handle, struct roam_offload_scan_req *roam_req) { QDF_STATUS status; - struct wmi_disconnect_roam_params *params = + struct wlan_roam_disconnect_params *params = &roam_req->disconnect_roam_params; if (!wma_handle || !wma_handle->wmi_handle) { @@ -1920,10 +1920,10 @@ QDF_STATUS wma_process_roaming_config(tp_wma_handle wma_handle, roam_req->Command, roam_req->reason, roam_req->sessionId, roam_req->RoamScanOffloadEnabled, roam_req->offload_11k_params.offload_11k_bitmask); - wma_handle->interfaces[roam_req->sessionId].roaming_in_progress = false; + intr = &wma_handle->interfaces[roam_req->sessionId]; + intr->roaming_in_progress = false; switch (roam_req->Command) { case ROAM_SCAN_OFFLOAD_START: - intr = &wma_handle->interfaces[roam_req->sessionId]; intr->delay_before_vdev_stop = roam_req->delay_before_vdev_stop; /* * Scan/Roam threshold parameters are translated from @@ -1935,8 +1935,7 @@ QDF_STATUS wma_process_roaming_config(tp_wma_handle wma_handle, /* First param is positive rssi value to trigger rssi based scan * Opportunistic scan is started at 30dB > trigger rssi. */ - wma_handle->suitable_ap_hb_failure = false; - + mlme_set_roam_reason_better_ap(intr->vdev, false); qdf_status = wma_roam_scan_offload_rssi_thresh(wma_handle, roam_req); if (qdf_status != QDF_STATUS_SUCCESS) @@ -2104,8 +2103,7 @@ QDF_STATUS wma_process_roaming_config(tp_wma_handle wma_handle, break; } - wma_handle->suitable_ap_hb_failure = false; - + mlme_set_roam_reason_better_ap(intr->vdev, false); wma_roam_scan_fill_scan_params(wma_handle, mac, NULL, &scan_params); @@ -2207,17 +2205,17 @@ QDF_STATUS wma_process_roaming_config(tp_wma_handle wma_handle, * now it is time to call it heartbeat failure. */ if ((roam_req->reason == REASON_PREAUTH_FAILED_FOR_ALL) - && wma_handle->suitable_ap_hb_failure) { + && mlme_get_roam_reason_better_ap(intr->vdev)) { wma_err("Sending heartbeat failure after preauth failures"); wma_beacon_miss_handler(wma_handle, roam_req->sessionId, - wma_handle->suitable_ap_hb_failure_rssi); - wma_handle->suitable_ap_hb_failure = false; + mlme_get_hb_ap_rssi(intr->vdev)); + mlme_set_roam_reason_better_ap(intr->vdev, false); } break; case ROAM_SCAN_OFFLOAD_UPDATE_CFG: - wma_handle->suitable_ap_hb_failure = false; + mlme_set_roam_reason_better_ap(intr->vdev, false); qdf_status = wma_roam_scan_bmiss_cnt(wma_handle, roam_req->RoamBmissFirstBcnt, @@ -2307,8 +2305,9 @@ QDF_STATUS wma_process_roaming_config(tp_wma_handle wma_handle, return qdf_status; } +#ifndef ROAM_OFFLOAD_V1 void wma_update_per_roam_config(WMA_HANDLE handle, - struct wmi_per_roam_config_req *req_buf) + struct wlan_per_roam_config_req *req_buf) { QDF_STATUS status; tp_wma_handle wma_handle = (tp_wma_handle) handle; @@ -2323,6 +2322,7 @@ void wma_update_per_roam_config(WMA_HANDLE handle, if (QDF_IS_STATUS_ERROR(status)) wma_err("failed to set per roam config to FW"); } +#endif #ifdef WLAN_FEATURE_ROAM_OFFLOAD @@ -6205,7 +6205,8 @@ int wma_roam_event_callback(WMA_HANDLE handle, uint8_t *event_buf, */ wma_debug("Better AP found for vdevid %x, rssi %d", wmi_event->vdev_id, wmi_event->rssi); - wma_handle->suitable_ap_hb_failure = false; + mlme_set_roam_reason_better_ap( + wma_handle->interfaces[wmi_event->vdev_id].vdev, false); wma_roam_better_ap_handler(wma_handle, wmi_event->vdev_id); break; case WMI_ROAM_REASON_SUITABLE_AP: @@ -6213,8 +6214,11 @@ int wma_roam_event_callback(WMA_HANDLE handle, uint8_t *event_buf, * WMI_ROAM_REASON_SUITABLE_AP can get called in soft IRQ * context, so avoid using CSR/PE structure directly. */ - wma_handle->suitable_ap_hb_failure = true; - wma_handle->suitable_ap_hb_failure_rssi = wmi_event->rssi; + mlme_set_roam_reason_better_ap( + wma_handle->interfaces[wmi_event->vdev_id].vdev, true); + mlme_set_hb_ap_rssi( + wma_handle->interfaces[wmi_event->vdev_id].vdev, + wmi_event->rssi); wma_debug("Bmiss scan AP found for vdevid %x, rssi %d", wmi_event->vdev_id, wmi_event->rssi); wma_roam_better_ap_handler(wma_handle, wmi_event->vdev_id); diff --git a/core/wma/src/wma_utils.c b/core/wma/src/wma_utils.c index 5c218efb38..b0188e9cc9 100644 --- a/core/wma/src/wma_utils.c +++ b/core/wma/src/wma_utils.c @@ -4025,6 +4025,7 @@ int wma_rcpi_event_handler(void *handle, uint8_t *cmd_param_info, return 0; } +#ifndef ROAM_OFFLOAD_V1 /** * wma_set_roam_offload_flag() - Set roam offload flag to fw * @wma: wma handle @@ -4094,6 +4095,7 @@ void wma_update_roam_offload_flag(void *handle, wma_set_roam_offload_flag(wma, params->vdev_id, params->enable); } +#endif QDF_STATUS wma_send_vdev_down_to_fw(t_wma_handle *wma, uint8_t vdev_id) {