From e6dec862e4ac62371dfe7d70d63e17b35a9958ad Mon Sep 17 00:00:00 2001 From: hqu Date: Wed, 5 Aug 2020 21:44:42 +0800 Subject: [PATCH] qcacld-3.0: Move rso related process to connection manager [PART 5] Add new code to implement below functions for connection manager roam part: Filling below WMI cmd parameters related process: WMI_11K_OFFLOAD_REPORT_CMDID WMI_ROAM_DEAUTH_CONFIG_CMDID WMI_ROAM_IDLE_CONFIG_CMDID Change-Id: I346b921a6f378e7c4d8860acd7c3bec45a0b9d3a CRs-Fixed: 2749430 --- .../mlme/dispatcher/inc/wlan_mlme_api.h | 75 ++++++ .../mlme/dispatcher/src/wlan_mlme_api.c | 115 +++++++++ .../src/target_if_cm_roam_offload.c | 136 +++++++++++ .../core/src/wlan_cm_roam_offload.c | 59 ++++- core/sme/src/csr/csr_api_roam.c | 228 ++++++++++-------- 5 files changed, 509 insertions(+), 104 deletions(-) diff --git a/components/mlme/dispatcher/inc/wlan_mlme_api.h b/components/mlme/dispatcher/inc/wlan_mlme_api.h index b97ea81d88..0cd9785a94 100644 --- a/components/mlme/dispatcher/inc/wlan_mlme_api.h +++ b/components/mlme/dispatcher/inc/wlan_mlme_api.h @@ -2516,6 +2516,81 @@ uint32_t wlan_mlme_get_roaming_triggers(struct wlan_objmgr_psoc *psoc); QDF_STATUS wlan_mlme_get_roaming_offload(struct wlan_objmgr_psoc *psoc, bool *val); + +/** + * wlan_mlme_get_enable_disconnect_roam_offload() - Get emergency roaming + * Enable/Disable status during deauth/disassoc + * @psoc: pointer to psoc object + * @val: Pointer to emergency roaming Enable/Disable status + * during deauth/disassoc + * + * Return: QDF Status + */ +QDF_STATUS +wlan_mlme_get_enable_disconnect_roam_offload(struct wlan_objmgr_psoc *psoc, + bool *val); + +/** + * wlan_mlme_get_enable_idle_roam() - Get Enable/Disable idle roaming status + * @psoc: pointer to psoc object + * @val: Pointer to Enable/Disable idle roaming status + * + * Return: QDF Status + */ +QDF_STATUS +wlan_mlme_get_enable_idle_roam(struct wlan_objmgr_psoc *psoc, bool *val); + +/** + * wlan_mlme_get_idle_roam_rssi_delta() - Get idle roam rssi delta + * @psoc: pointer to psoc object + * @val: Pointer to idle roam rssi delta + * + * Return: QDF Status + */ +QDF_STATUS +wlan_mlme_get_idle_roam_rssi_delta(struct wlan_objmgr_psoc *psoc, + uint32_t *val); + +/** + * wlan_mlme_get_idle_roam_inactive_time() - Get idle roam inactive time + * @psoc: pointer to psoc object + * @val: Pointer to idle roam inactive time + * + * Return: QDF Status + */ +QDF_STATUS +wlan_mlme_get_idle_roam_inactive_time(struct wlan_objmgr_psoc *psoc, + uint32_t *val); +/** + * wlan_mlme_get_idle_data_packet_count() - Get idle data packet count + * @psoc: pointer to psoc object + * @val: Pointer to idle data packet count + * + * Return: QDF Status + */ +QDF_STATUS +wlan_mlme_get_idle_data_packet_count(struct wlan_objmgr_psoc *psoc, + uint32_t *val); + +/** + * wlan_mlme_get_idle_roam_min_rssi() - Get idle roam min rssi + * @psoc: pointer to psoc object + * @val: Pointer to idle roam min rssi + * + * Return: QDF Status + */ +QDF_STATUS +wlan_mlme_get_idle_roam_min_rssi(struct wlan_objmgr_psoc *psoc, uint32_t *val); + +/** + * wlan_mlme_get_idle_roam_band() - Get idle roam band + * @psoc: pointer to psoc object + * @val: Pointer to idle roam band + * + * Return: QDF Status + */ +QDF_STATUS +wlan_mlme_get_idle_roam_band(struct wlan_objmgr_psoc *psoc, uint32_t *val); #else static inline QDF_STATUS wlan_mlme_get_roam_reason_vsie_status(struct wlan_objmgr_psoc *psoc, diff --git a/components/mlme/dispatcher/src/wlan_mlme_api.c b/components/mlme/dispatcher/src/wlan_mlme_api.c index 15fe080d70..dbac0bf6d8 100644 --- a/components/mlme/dispatcher/src/wlan_mlme_api.c +++ b/components/mlme/dispatcher/src/wlan_mlme_api.c @@ -3932,6 +3932,121 @@ wlan_mlme_get_roaming_offload(struct wlan_objmgr_psoc *psoc, return QDF_STATUS_SUCCESS; } + +QDF_STATUS +wlan_mlme_get_enable_disconnect_roam_offload(struct wlan_objmgr_psoc *psoc, + bool *val) +{ + struct wlan_mlme_psoc_ext_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_ext_obj(psoc); + if (!mlme_obj) { + *val = cfg_default(CFG_LFR_ENABLE_DISCONNECT_ROAM); + return QDF_STATUS_E_INVAL; + } + + *val = mlme_obj->cfg.lfr.enable_disconnect_roam_offload; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS +wlan_mlme_get_enable_idle_roam(struct wlan_objmgr_psoc *psoc, bool *val) +{ + struct wlan_mlme_psoc_ext_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_ext_obj(psoc); + if (!mlme_obj) { + *val = cfg_default(CFG_LFR_ENABLE_IDLE_ROAM); + return QDF_STATUS_E_INVAL; + } + + *val = mlme_obj->cfg.lfr.enable_idle_roam; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS +wlan_mlme_get_idle_roam_rssi_delta(struct wlan_objmgr_psoc *psoc, uint32_t *val) +{ + struct wlan_mlme_psoc_ext_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_ext_obj(psoc); + if (!mlme_obj) { + *val = cfg_default(CFG_LFR_IDLE_ROAM_RSSI_DELTA); + return QDF_STATUS_E_INVAL; + } + + *val = mlme_obj->cfg.lfr.idle_roam_rssi_delta; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS +wlan_mlme_get_idle_roam_inactive_time(struct wlan_objmgr_psoc *psoc, + uint32_t *val) +{ + struct wlan_mlme_psoc_ext_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_ext_obj(psoc); + if (!mlme_obj) { + *val = cfg_default(CFG_LFR_IDLE_ROAM_INACTIVE_TIME); + return QDF_STATUS_E_INVAL; + } + + *val = mlme_obj->cfg.lfr.idle_roam_inactive_time; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS +wlan_mlme_get_idle_data_packet_count(struct wlan_objmgr_psoc *psoc, + uint32_t *val) +{ + struct wlan_mlme_psoc_ext_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_ext_obj(psoc); + if (!mlme_obj) { + *val = cfg_default(CFG_LFR_IDLE_ROAM_PACKET_COUNT); + return QDF_STATUS_E_INVAL; + } + + *val = mlme_obj->cfg.lfr.idle_data_packet_count; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS +wlan_mlme_get_idle_roam_min_rssi(struct wlan_objmgr_psoc *psoc, uint32_t *val) +{ + struct wlan_mlme_psoc_ext_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_ext_obj(psoc); + if (!mlme_obj) { + *val = cfg_default(CFG_LFR_IDLE_ROAM_MIN_RSSI); + return QDF_STATUS_E_INVAL; + } + + *val = mlme_obj->cfg.lfr.idle_roam_min_rssi; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS +wlan_mlme_get_idle_roam_band(struct wlan_objmgr_psoc *psoc, uint32_t *val) +{ + struct wlan_mlme_psoc_ext_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_ext_obj(psoc); + if (!mlme_obj) { + *val = cfg_default(CFG_LFR_IDLE_ROAM_BAND); + return QDF_STATUS_E_INVAL; + } + + *val = mlme_obj->cfg.lfr.idle_roam_band; + + return QDF_STATUS_SUCCESS; +} #endif QDF_STATUS 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 32e9111600..f57e12ad45 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 @@ -242,6 +242,77 @@ target_if_cm_roam_scan_get_cckm_mode(struct wlan_objmgr_vdev *vdev, else return WMI_AUTH_CCKM; } + +/* target_if_cm_roam_disconnect_params(): Send the disconnect roam parameters + * to wmi + * @wmi_handle: handle to WMI + * @command: rso command + * @req: disconnect roam parameters + * + * Return: void + */ +static void +target_if_cm_roam_disconnect_params(wmi_unified_t wmi_handle, uint8_t command, + struct wlan_roam_disconnect_params *req) +{ + QDF_STATUS status; + + switch (command) { + case ROAM_SCAN_OFFLOAD_START: + case ROAM_SCAN_OFFLOAD_UPDATE_CFG: + if (!req->enable) + return; + break; + case ROAM_SCAN_OFFLOAD_STOP: + req->enable = false; + break; + default: + break; + } + + status = wmi_unified_send_disconnect_roam_params(wmi_handle, req); + if (QDF_IS_STATUS_ERROR(status)) + target_if_err("failed to send disconnect roam parameters"); +} + +/* target_if_cm_roam_idle_params(): Send the roam idle parameters to wmi + * @wmi_handle: handle to WMI + * @command: rso command + * @req: roam idle parameters + * + * Return: void + */ +static void +target_if_cm_roam_idle_params(wmi_unified_t wmi_handle, uint8_t command, + struct wlan_roam_idle_params *req) +{ + QDF_STATUS status; + bool db2dbm_enabled; + + switch (command) { + case ROAM_SCAN_OFFLOAD_START: + case ROAM_SCAN_OFFLOAD_UPDATE_CFG: + if (!req->enable) + return; + break; + case ROAM_SCAN_OFFLOAD_STOP: + req->enable = false; + break; + default: + break; + } + + db2dbm_enabled = wmi_service_enabled(wmi_handle, + wmi_service_hw_db2dbm_support); + if (!db2dbm_enabled) { + req->conn_ap_min_rssi -= NOISE_FLOOR_DBM_DEFAULT; + req->conn_ap_min_rssi &= 0x000000ff; + } + + status = wmi_unified_send_idle_roam_params(wmi_handle, req); + if (QDF_IS_STATUS_ERROR(status)) + target_if_err("failed to send idle roam parameters"); +} #else static void target_if_cm_roam_reason_vsie(wmi_unified_t wmi_handle, @@ -262,6 +333,18 @@ target_if_cm_roam_scan_get_cckm_mode(struct wlan_objmgr_vdev *vdev, { return WMI_AUTH_CCKM; } + +static void +target_if_cm_roam_disconnect_params(wmi_unified_t wmi_handle, uint8_t command, + struct wlan_roam_disconnect_params *req) +{ +} + +static void +target_if_cm_roam_idle_params(wmi_unified_t wmi_handle, uint8_t command, + struct wlan_roam_idle_params *req) +{ +} #endif /** * target_if_cm_roam_scan_offload_rssi_thresh() - Send roam scan rssi threshold @@ -585,6 +668,42 @@ target_if_cm_roam_scan_btm_offload(wmi_unified_t wmi_handle, return wmi_unified_send_btm_config(wmi_handle, req); } +/** + * target_if_cm_roam_offload_11k_params() - send 11k offload params to firmware + * @wmi_handle: wmi handle + * @req: 11k offload parameters + * + * Send WMI_11K_OFFLOAD_REPORT_CMDID parameters to firmware + * + * Return: QDF status + */ +static QDF_STATUS +target_if_cm_roam_offload_11k_params(wmi_unified_t wmi_handle, + struct wlan_roam_11k_offload_params *req) +{ + QDF_STATUS status; + + if (!wmi_service_enabled(wmi_handle, + wmi_service_11k_neighbour_report_support)) { + target_if_err("FW doesn't support 11k offload"); + return QDF_STATUS_E_NOSUPPORT; + } + + /* If 11k enable command and ssid length is 0, drop it */ + if (req->offload_11k_bitmask && + !req->neighbor_report_params.ssid.length) { + target_if_debug("SSID Len 0"); + return QDF_STATUS_E_INVAL; + } + + status = wmi_unified_offload_11k_cmd(wmi_handle, req); + + if (status != QDF_STATUS_SUCCESS) + target_if_err("failed to send 11k offload command"); + + return status; +} + static uint32_t target_if_get_wmi_roam_offload_flag(uint32_t flag) { @@ -702,8 +821,25 @@ target_if_cm_roam_send_start(struct wlan_objmgr_vdev *vdev, &req->btm_config); if (QDF_IS_STATUS_ERROR(status)) { target_if_err("Sending BTM config to fw failed"); + goto end; } + /* + * Send 11k offload enable and bss load trigger parameters + * to FW as part of RSO Start + */ + status = target_if_cm_roam_offload_11k_params(wmi_handle, + &req->roam_11k_params); + if (QDF_IS_STATUS_ERROR(status)) { + target_if_err("11k offload enable not sent, status %d", status); + goto end; + } + + target_if_cm_roam_disconnect_params(wmi_handle, ROAM_SCAN_OFFLOAD_START, + &req->disconnect_params); + + target_if_cm_roam_idle_params(wmi_handle, ROAM_SCAN_OFFLOAD_START, + &req->idle_params); /* add other wmi commands */ end: return status; 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 48ea969365..34a1ff577e 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 @@ -55,7 +55,7 @@ cm_roam_scan_bmiss_cnt(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, #ifdef WLAN_FEATURE_ROAM_OFFLOAD /** - * wlan_cm_roam_reason_vsie() - set roam reason vsie + * cm_roam_reason_vsie() - set roam reason vsie * @psoc: psoc pointer * @vdev_id: vdev id * @params: roam reason vsie parameters @@ -77,7 +77,7 @@ cm_roam_reason_vsie(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, } /** - * wlan_cm_roam_triggers() - set roam triggers + * cm_roam_triggers() - set roam triggers * @psoc: psoc pointer * @vdev_id: vdev id * @params: roam triggers parameters @@ -96,6 +96,47 @@ cm_roam_triggers(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, wlan_cm_roam_get_vendor_btm_params(psoc, vdev_id, ¶ms->vendor_btm_param); } + +/** + * cm_roam_disconnect_params() - set disconnect roam parameters + * @psoc: psoc pointer + * @vdev_id: vdev id + * @params: disconnect roam parameters + * + * This function is used to set disconnect roam parameters + * + * Return: None + */ +static void +cm_roam_disconnect_params(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, + struct wlan_roam_disconnect_params *params) +{ + params->vdev_id = vdev_id; + wlan_mlme_get_enable_disconnect_roam_offload(psoc, ¶ms->enable); +} + +/** + * cm_roam_idle_params() - set roam idle parameters + * @psoc: psoc pointer + * @vdev_id: vdev id + * @params: roam idle parameters + * + * This function is used to set roam idle parameters + * + * Return: None + */ +static void +cm_roam_idle_params(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, + struct wlan_roam_idle_params *params) +{ + params->vdev_id = vdev_id; + wlan_mlme_get_enable_idle_roam(psoc, ¶ms->enable); + wlan_mlme_get_idle_roam_rssi_delta(psoc, ¶ms->conn_ap_rssi_delta); + wlan_mlme_get_idle_roam_inactive_time(psoc, ¶ms->inactive_time); + wlan_mlme_get_idle_data_packet_count(psoc, ¶ms->data_pkt_count); + wlan_mlme_get_idle_roam_min_rssi(psoc, ¶ms->conn_ap_min_rssi); + wlan_mlme_get_idle_roam_band(psoc, ¶ms->band); +} #else static inline void cm_roam_reason_vsie(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, @@ -108,6 +149,18 @@ cm_roam_triggers(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, struct wlan_roam_triggers *params) { } + +static void +cm_roam_disconnect_params(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, + struct wlan_roam_disconnect_params *params) +{ +} + +static void +cm_roam_idle_params(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, + struct wlan_roam_idle_params *params) +{ +} #endif /** @@ -161,6 +214,8 @@ cm_roam_start_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, 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); + cm_roam_disconnect_params(psoc, vdev_id, &start_req->disconnect_params); + cm_roam_idle_params(psoc, vdev_id, &start_req->idle_params); /* fill from legacy through this API */ wlan_cm_roam_fill_start_req(psoc, vdev_id, start_req, reason); diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index 7f2d50bc06..27c04fcca7 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -17689,25 +17689,115 @@ csr_create_roam_scan_offload_request(struct mac_context *mac_ctx, return req_buf; } +/** + * check_allowed_ssid_list() - Check the WhiteList + * @req_buffer: Buffer which contains the connected profile SSID. + * @roam_params: Buffer which contains the whitelist SSID's. + * + * Check if the connected profile SSID exists in the whitelist. + * It is assumed that the framework provides this also in the whitelist. + * If it exists there is no issue. Otherwise add it to the list. + * + * Return: None + */ +static void check_allowed_ssid_list(struct roam_offload_scan_req *req_buffer, + struct roam_ext_params *roam_params) +{ + int i = 0; + bool match = false; + + for (i = 0; i < roam_params->num_ssid_allowed_list; i++) { + if ((roam_params->ssid_allowed_list[i].length == + req_buffer->ConnectedNetwork.ssId.length) && + (!qdf_mem_cmp(roam_params->ssid_allowed_list[i].ssId, + req_buffer->ConnectedNetwork.ssId.ssId, + roam_params->ssid_allowed_list[i].length))) { + QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_DEBUG, + "Whitelist contains connected profile SSID"); + match = true; + break; + } + } + if (!match) { + if (roam_params->num_ssid_allowed_list >= + MAX_SSID_ALLOWED_LIST) { + QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_DEBUG, + "Whitelist is FULL. Cannot Add another entry"); + return; + } + QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_DEBUG, + "Adding Connected profile SSID to whitelist"); + /* i is the next available index to add the entry.*/ + i = roam_params->num_ssid_allowed_list; + qdf_mem_copy(roam_params->ssid_allowed_list[i].ssId, + req_buffer->ConnectedNetwork.ssId.ssId, + req_buffer->ConnectedNetwork.ssId.length); + roam_params->ssid_allowed_list[i].length = + req_buffer->ConnectedNetwork.ssId.length; + roam_params->num_ssid_allowed_list++; + } +} + +/** + * csr_add_rssi_reject_ap_list() - add rssi reject AP list to the + * roam params + * @mac_ctx: mac ctx. + * @roam_params: roam params in which reject AP list needs + * to be populated. + * + * Return: None + */ +static void +csr_add_rssi_reject_ap_list(struct mac_context *mac_ctx, + struct roam_ext_params *roam_params) +{ + int i = 0; + struct reject_ap_config_params *reject_list; + + reject_list = qdf_mem_malloc(sizeof(*reject_list) * + MAX_RSSI_AVOID_BSSID_LIST); + if (!reject_list) + return; + + roam_params->num_rssi_rejection_ap = + wlan_blm_get_bssid_reject_list(mac_ctx->pdev, reject_list, + MAX_RSSI_AVOID_BSSID_LIST, + DRIVER_RSSI_REJECT_TYPE); + if (!roam_params->num_rssi_rejection_ap) { + qdf_mem_free(reject_list); + return; + } + + for (i = 0; i < roam_params->num_rssi_rejection_ap; i++) { + roam_params->rssi_reject_bssid_list[i] = reject_list[i]; + sme_debug("BSSID %pM expected rssi %d remaining duration %d", + roam_params->rssi_reject_bssid_list[i].bssid.bytes, + roam_params->rssi_reject_bssid_list[i].expected_rssi, + roam_params->rssi_reject_bssid_list[i]. + reject_duration); + } + + qdf_mem_free(reject_list); +} +#endif + /** * csr_update_11k_offload_params - Update 11K offload params * @mac_ctx: MAC context * @session: Pointer to the CSR Roam Session - * @req_buffer: Pointer to the RSO Request buffer + * @params: Pointer to the roam 11k offload params * @enabled: 11k offload enabled/disabled. * - * API to update 11k offload params to Roam Scan Offload request buffer + * API to update 11k offload params * * Return: none */ static void csr_update_11k_offload_params(struct mac_context *mac_ctx, struct csr_roam_session *session, - struct roam_offload_scan_req *req_buffer, + struct wlan_roam_11k_offload_params *params, bool enabled) { - 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; @@ -17789,97 +17879,6 @@ csr_update_11k_offload_params(struct mac_context *mac_ctx, session->connectedProfile.SSID.length); } -/** - * check_allowed_ssid_list() - Check the WhiteList - * @req_buffer: Buffer which contains the connected profile SSID. - * @roam_params: Buffer which contains the whitelist SSID's. - * - * Check if the connected profile SSID exists in the whitelist. - * It is assumed that the framework provides this also in the whitelist. - * If it exists there is no issue. Otherwise add it to the list. - * - * Return: None - */ -static void check_allowed_ssid_list(struct roam_offload_scan_req *req_buffer, - struct roam_ext_params *roam_params) -{ - int i = 0; - bool match = false; - - for (i = 0; i < roam_params->num_ssid_allowed_list; i++) { - if ((roam_params->ssid_allowed_list[i].length == - req_buffer->ConnectedNetwork.ssId.length) && - (!qdf_mem_cmp(roam_params->ssid_allowed_list[i].ssId, - req_buffer->ConnectedNetwork.ssId.ssId, - roam_params->ssid_allowed_list[i].length))) { - QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_DEBUG, - "Whitelist contains connected profile SSID"); - match = true; - break; - } - } - if (!match) { - if (roam_params->num_ssid_allowed_list >= - MAX_SSID_ALLOWED_LIST) { - QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_DEBUG, - "Whitelist is FULL. Cannot Add another entry"); - return; - } - QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_DEBUG, - "Adding Connected profile SSID to whitelist"); - /* i is the next available index to add the entry.*/ - i = roam_params->num_ssid_allowed_list; - qdf_mem_copy(roam_params->ssid_allowed_list[i].ssId, - req_buffer->ConnectedNetwork.ssId.ssId, - req_buffer->ConnectedNetwork.ssId.length); - roam_params->ssid_allowed_list[i].length = - req_buffer->ConnectedNetwork.ssId.length; - roam_params->num_ssid_allowed_list++; - } -} - -/** - * csr_add_rssi_reject_ap_list() - add rssi reject AP list to the - * roam params - * @mac_ctx: mac ctx. - * @roam_params: roam params in which reject AP list needs - * to be populated. - * - * Return: None - */ -static void -csr_add_rssi_reject_ap_list(struct mac_context *mac_ctx, - struct roam_ext_params *roam_params) -{ - int i = 0; - struct reject_ap_config_params *reject_list; - - reject_list = qdf_mem_malloc(sizeof(*reject_list) * - MAX_RSSI_AVOID_BSSID_LIST); - if (!reject_list) - return; - - roam_params->num_rssi_rejection_ap = - wlan_blm_get_bssid_reject_list(mac_ctx->pdev, reject_list, - MAX_RSSI_AVOID_BSSID_LIST, - DRIVER_RSSI_REJECT_TYPE); - if (!roam_params->num_rssi_rejection_ap) { - qdf_mem_free(reject_list); - return; - } - - for (i = 0; i < roam_params->num_rssi_rejection_ap; i++) { - roam_params->rssi_reject_bssid_list[i] = reject_list[i]; - sme_debug("BSSID %pM expected rssi %d remaining duration %d", - roam_params->rssi_reject_bssid_list[i].bssid.bytes, - roam_params->rssi_reject_bssid_list[i].expected_rssi, - roam_params->rssi_reject_bssid_list[i].reject_duration); - } - - qdf_mem_free(reject_list); -} -#endif - QDF_STATUS csr_invoke_neighbor_report_request( uint8_t session_id, struct sRrmNeighborReq *neighbor_report_req, @@ -19214,9 +19213,11 @@ csr_roam_offload_scan(struct mac_context *mac_ctx, uint8_t session_id, * 11k offload is disabled during RSO Stop after disconnect indication */ if (command == ROAM_SCAN_OFFLOAD_START) - csr_update_11k_offload_params(mac_ctx, session, req_buf, TRUE); + csr_update_11k_offload_params( + mac_ctx, session, &req_buf->offload_11k_params, TRUE); else if (command == ROAM_SCAN_OFFLOAD_STOP) - csr_update_11k_offload_params(mac_ctx, session, req_buf, FALSE); + csr_update_11k_offload_params( + mac_ctx, session, &req_buf->offload_11k_params, FALSE); wlan_cm_roam_get_vendor_btm_params(mac_ctx->psoc, session_id, &req_buf->roam_triggers. @@ -19727,7 +19728,7 @@ csr_cm_roam_scan_filter(struct mac_context *mac_ctx, uint8_t vdev_id, * 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 + * @params: roam scan btm offload parameters * * This function is used to set roam scan btm offload related parameters * @@ -19755,6 +19756,26 @@ csr_cm_roam_scan_btm_offload(struct mac_context *mac_ctx, mac_ctx->mlme_cfg->btm.btm_trig_min_candidate_score; } +/** + * csr_cm_roam_offload_11k_params() - set roam 11k offload parameters + * @mac_ctx: global mac ctx + * @session: sme session + * @params: roam 11k offload parameters + * @enabled: 11k offload enabled/disabled + * + * This function is used to set roam 11k offload related parameters + * + * Return: None + */ +static void +csr_cm_roam_offload_11k_params(struct mac_context *mac_ctx, + struct csr_roam_session *session, + struct wlan_roam_11k_offload_params *params, + bool enabled) +{ + csr_update_11k_offload_params(mac_ctx, session, params, enabled); +} + QDF_STATUS wlan_cm_roam_fill_start_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, @@ -19782,16 +19803,19 @@ wlan_cm_roam_fill_start_req(struct wlan_objmgr_psoc *psoc, &req->rssi_params); csr_cm_roam_scan_offload_scan_period(mac_ctx, session->vdev_id, - &req->scan_period_params); + &req->scan_period_params); csr_cm_roam_scan_offload_ap_profile(mac_ctx, session, - &req->profile_params); + &req->profile_params); csr_cm_roam_scan_filter(mac_ctx, vdev_id, ROAM_SCAN_OFFLOAD_START, - reason, &req->scan_filter_params); + reason, &req->scan_filter_params); csr_cm_roam_scan_btm_offload(mac_ctx, session, &req->btm_config); + /* 11k offload is enabled during RSO Start after connect indication */ + csr_cm_roam_offload_11k_params(mac_ctx, session, + &req->roam_11k_params, TRUE); /* fill other struct similar to wlan_roam_offload_scan_rssi_params */ return status;