diff --git a/components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_public_struct.h b/components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_public_struct.h index cc15f03ce6..4e72d74521 100644 --- a/components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_public_struct.h +++ b/components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_public_struct.h @@ -693,6 +693,7 @@ struct wlan_roam_fils_params { * @n_probes: Max number of probes to be sent * @scan_ctrl_flags: Scan control flags * @scan_ctrl_flags_ext: Scan control flags extended + * @rso_adaptive_dwell_mode: Adaptive dwell mode * @num_chan: number of channels * @num_bssid: number of bssids in tlv bssid_list[] * @ie_len: number of bytes in ie data. In the TLV ie_data[] @@ -716,6 +717,7 @@ struct wlan_roam_scan_params { uint32_t n_probes; uint32_t scan_ctrl_flags; uint32_t scan_ctrl_flags_ext; + enum scan_dwelltime_adaptive_mode rso_adaptive_dwell_mode; uint32_t num_chan; uint32_t num_bssid; uint32_t ie_len; @@ -853,12 +855,20 @@ struct wlan_rso_ese_params { }; #endif +#define ROAM_SCAN_DWELL_TIME_ACTIVE_DEFAULT (100) +#define ROAM_SCAN_DWELL_TIME_PASSIVE_DEFAULT (110) +#define ROAM_SCAN_MIN_REST_TIME_DEFAULT (50) +#define ROAM_SCAN_MAX_REST_TIME_DEFAULT (500) +#define ROAM_SCAN_HW_DEF_SCAN_MAX_DURATION 30000 /* 30 secs */ +#define ROAM_SCAN_CHANNEL_SWITCH_TIME (4) + /** * struct roam_offload_scan_params - structure containing roaming offload scan * parameters to be filled over WMI_ROAM_SCAN_MODE command. * @vdev_id: vdev id * @is_rso_stop: flag to tell whether roam req is valid or NULL * @rso_mode_info: Roam scan mode related parameters + * @rso_scan_params: Roam scan offload scan start params * @scan_params: Roaming scan related parameters * @assoc_ie_length: Assoc IE length * @assoc_ie: Assoc IE buffer @@ -878,6 +888,7 @@ struct wlan_roam_scan_offload_params { /* Parameters common for LFR-3.0 and LFR-2.0 */ bool roaming_scan_policy; struct wlan_roam_scan_mode_params rso_mode_info; + struct wlan_roam_scan_params rso_scan_params; uint32_t assoc_ie_length; uint8_t assoc_ie[MAX_ASSOC_IE_LENGTH]; #ifdef WLAN_FEATURE_ROAM_OFFLOAD diff --git a/components/wmi/src/wmi_unified_roam_tlv.c b/components/wmi/src/wmi_unified_roam_tlv.c index 1a8c6e137c..0f1f1f46c0 100644 --- a/components/wmi/src/wmi_unified_roam_tlv.c +++ b/components/wmi/src/wmi_unified_roam_tlv.c @@ -1946,6 +1946,10 @@ static uint8_t *wmi_add_fils_tlv(wmi_unified_t wmi_handle, erp_info->realm_len); buf_ptr += sizeof(*fils_tlv); + wmi_debug("RSO_CONFIG: ERP: usrname_len:%d next_erp_seq_num:%d rRk_len:%d rIk_len:%d realm_len:%d", + erp_info->username_length, erp_info->next_erp_seq_num, + erp_info->rRk_length, erp_info->rIk_length, + erp_info->realm_len); return buf_ptr; } #else @@ -2045,6 +2049,17 @@ wmi_fill_rso_tlvs(wmi_unified_t wmi_handle, uint8_t *buf, src_lfr3_params->rct_validity_timer; roam_offload_params->roam_to_current_bss_disable = src_lfr3_params->disable_self_roam; + wmi_debug("RSO_CFG: prefer_5g:%d rssi_cat_gap:%d select_5g_margin:%d ho_delay:%d max_sw_retry:%d no_ack_timeout:%d", + roam_offload_params->prefer_5g, + roam_offload_params->rssi_cat_gap, + roam_offload_params->select_5g_margin, + roam_offload_params->handoff_delay_for_rx, + roam_offload_params->max_mlme_sw_retries, + roam_offload_params->no_ack_timeout); + wmi_debug("RSO_CFG: reassoc_fail_timeout:%d rct_validity_time:%d disable_self_roam:%d", + roam_offload_params->reassoc_failure_timeout, + roam_offload_params->roam_candidate_validity_time, + roam_offload_params->roam_to_current_bss_disable); /* Fill the capabilities */ roam_offload_params->capability = src_lfr3_caps->capability; @@ -2059,6 +2074,15 @@ wmi_fill_rso_tlvs(wmi_unified_t wmi_handle, uint8_t *buf, qdf_mem_copy((uint8_t *)roam_offload_params->mcsset, (uint8_t *)src_lfr3_caps->mcsset, ROAM_OFFLOAD_NUM_MCS_SET); + wmi_debug("RSO_CFG: capability:0x%x ht_caps:0x%x ampdu_param:0%x ht_ext_cap:0x%x ht_txbf:0x%x asel_cap:0x%x qos_caps:0x%x qos_en:%d wmm_caps:0x%x", + roam_offload_params->capability, + roam_offload_params->ht_caps_info, + roam_offload_params->ampdu_param, + roam_offload_params->ht_ext_cap, + roam_offload_params->ht_txbf, roam_offload_params->asel_cap, + roam_offload_params->qos_caps, + roam_offload_params->qos_enabled, + roam_offload_params->wmm_caps); buf += sizeof(wmi_roam_offload_tlv_param); /* @@ -2141,25 +2165,10 @@ wmi_fill_rso_tlvs(wmi_unified_t wmi_handle, uint8_t *buf, WMITLV_SET_HDR(buf, WMITLV_TAG_ARRAY_STRUC, 0); buf += WMI_TLV_HDR_SIZE; - wmi_debug("vdev[%d] 11r TLV psk_msk_len = %d psk_msk_ext:%d", + wmi_debug("RSO_CFG: vdev[%d] 11r TLV psk_msk_len = %d psk_msk_ext:%d", roam_req->vdev_id, roam_offload_11r->psk_msk_len, roam_offload_11r->psk_msk_ext_len); - if (roam_offload_11r->psk_msk_len) - QDF_TRACE_HEX_DUMP( - QDF_MODULE_ID_WMI, - QDF_TRACE_LEVEL_DEBUG, - roam_offload_11r->psk_msk, - WLAN_MAX_PMK_DUMP_BYTES); - - if (roam_offload_11r->psk_msk_ext_len) - QDF_TRACE_HEX_DUMP( - QDF_MODULE_ID_WMI, - QDF_TRACE_LEVEL_DEBUG, - roam_offload_11r->psk_msk_ext + - (roam_offload_11r->psk_msk_ext_len - - WLAN_MAX_PMK_DUMP_BYTES), - WLAN_MAX_PMK_DUMP_BYTES); } else { WMITLV_SET_HDR(buf, WMITLV_TAG_ARRAY_STRUC, sizeof(wmi_roam_11i_offload_tlv_param)); @@ -2222,7 +2231,7 @@ wmi_fill_rso_tlvs(wmi_unified_t wmi_handle, uint8_t *buf, WMITLV_SET_HDR(buf, WMITLV_TAG_ARRAY_STRUC, 0); buf += WMI_TLV_HDR_SIZE; - wmi_info("LFR3: vdev:%d pmk_len = %d pmksa caching:%d OKC:%d sae_same_pmk:%d key_mgmt_offload:%d", + wmi_info("RSO_CFG: vdev:%d pmk_len = %d pmksa caching:%d OKC:%d sae_same_pmk:%d key_mgmt_offload:%d", roam_req->vdev_id, roam_offload_11i->pmk_len, src_11i_info->fw_pmksa_cache, src_11i_info->fw_okc, @@ -2260,7 +2269,8 @@ wmi_fill_rso_tlvs(wmi_unified_t wmi_handle, uint8_t *buf, roundup(assoc_ies->buf_len, sizeof(uint32_t))); buf += WMI_TLV_HDR_SIZE; - if (assoc_ies->buf_len != 0) + wmi_debug("RSO_CFG: assoc_ies len:%d", assoc_ies->buf_len); + if (assoc_ies->buf_len) qdf_mem_copy(buf, roam_req->assoc_ie, assoc_ies->buf_len); buf += qdf_roundup(assoc_ies->buf_len, sizeof(uint32_t)); @@ -2283,6 +2293,67 @@ wmi_fill_rso_tlvs(wmi_unified_t wmi_handle, uint8_t *buf_ptr, } #endif +static QDF_STATUS +wmi_fill_rso_start_scan_tlv(struct wlan_roam_scan_offload_params *rso_req, + wmi_start_scan_cmd_fixed_param *scan_tlv) +{ + struct wlan_roam_scan_params *src_scan_params; + + src_scan_params = &rso_req->rso_scan_params; + + qdf_mem_zero(scan_tlv, sizeof(*scan_tlv)); + scan_tlv->scan_ctrl_flags = WMI_SCAN_ADD_CCK_RATES | + WMI_SCAN_ADD_OFDM_RATES | + WMI_SCAN_ADD_DS_IE_IN_PROBE_REQ; + if (rso_req->is_rso_stop) { + scan_tlv->dwell_time_active = + ROAM_SCAN_DWELL_TIME_ACTIVE_DEFAULT; + scan_tlv->dwell_time_passive = + ROAM_SCAN_DWELL_TIME_PASSIVE_DEFAULT; + scan_tlv->min_rest_time = ROAM_SCAN_MIN_REST_TIME_DEFAULT; + scan_tlv->max_rest_time = ROAM_SCAN_MAX_REST_TIME_DEFAULT; + scan_tlv->repeat_probe_time = 0; + scan_tlv->probe_spacing_time = 0; + scan_tlv->probe_delay = 0; + scan_tlv->max_scan_time = ROAM_SCAN_HW_DEF_SCAN_MAX_DURATION; + scan_tlv->idle_time = src_scan_params->min_rest_time; + scan_tlv->burst_duration = 0; + + return QDF_STATUS_SUCCESS; + } + + scan_tlv->dwell_time_active = src_scan_params->dwell_time_active; + scan_tlv->dwell_time_passive = src_scan_params->dwell_time_passive; + scan_tlv->burst_duration = src_scan_params->burst_duration; + scan_tlv->min_rest_time = src_scan_params->min_rest_time; + scan_tlv->max_rest_time = src_scan_params->max_rest_time; + scan_tlv->repeat_probe_time = src_scan_params->repeat_probe_time; + scan_tlv->probe_spacing_time = src_scan_params->probe_spacing_time; + scan_tlv->probe_delay = src_scan_params->probe_delay; + scan_tlv->max_scan_time = ROAM_SCAN_HW_DEF_SCAN_MAX_DURATION; + scan_tlv->idle_time = src_scan_params->idle_time; + scan_tlv->n_probes = src_scan_params->n_probes; + scan_tlv->scan_ctrl_flags |= src_scan_params->scan_ctrl_flags; + + WMI_SCAN_SET_DWELL_MODE(scan_tlv->scan_ctrl_flags, + src_scan_params->rso_adaptive_dwell_mode); + + /* Configure roaming scan behavior (DBS/Non-DBS scan) */ + if (rso_req->roaming_scan_policy) + scan_tlv->scan_ctrl_flags_ext |= + WMI_SCAN_DBS_POLICY_FORCE_NONDBS; + else + scan_tlv->scan_ctrl_flags_ext |= + WMI_SCAN_DBS_POLICY_DEFAULT; + + wmi_debug("RSO_CFG: dwell time: active %d passive %d, minrest %d max rest %d repeat probe time %d probe_spacing:%d", + scan_tlv->dwell_time_active, scan_tlv->dwell_time_passive, + scan_tlv->min_rest_time, scan_tlv->max_rest_time, + scan_tlv->repeat_probe_time, scan_tlv->probe_spacing_time); + + return QDF_STATUS_SUCCESS; +} + /** * send_roam_scan_offload_mode_cmd_tlv() - send roam scan mode request to fw * @wmi_handle: wmi handle @@ -2359,13 +2430,7 @@ send_roam_scan_offload_mode_cmd_tlv( WMITLV_GET_STRUCT_TLVLEN(wmi_start_scan_cmd_fixed_param)); scan_cmd_fp = (wmi_start_scan_cmd_fixed_param *)buf_ptr; - /* Configure roaming scan behavior (DBS/Non-DBS scan) */ - if (rso_req->roaming_scan_policy) - scan_cmd_fp->scan_ctrl_flags_ext |= - WMI_SCAN_DBS_POLICY_FORCE_NONDBS; - else - scan_cmd_fp->scan_ctrl_flags_ext |= - WMI_SCAN_DBS_POLICY_DEFAULT; + wmi_fill_rso_start_scan_tlv(rso_req, scan_cmd_fp); /* Ensure there is no additional IEs */ scan_cmd_fp->ie_len = 0; diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index 6574f17cb7..bf626e4e19 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -20349,19 +20349,22 @@ static QDF_STATUS csr_cm_roam_scan_offload_fill_lfr3_config( struct mac_context *mac, struct csr_roam_session *session, struct wlan_roam_scan_offload_params *rso_config, - uint8_t command) + uint8_t command, uint32_t *mode) { struct wlan_objmgr_vdev *vdev; tSirMacCapabilityInfo self_caps; tSirMacQosInfoStation sta_qos_info; + enum csr_akm_type akm; + eCsrEncryptionType encr; uint16_t *final_caps_val; uint8_t *qos_cfg_val, temp_val; uint32_t pmkid_modes = mac->mlme_cfg->sta.pmkid_modes; uint32_t val = 0; + uint16_t vdev_id = session->vdev_id; qdf_size_t val_len; QDF_STATUS status; tpCsrNeighborRoamControlInfo roam_info = - &mac->roam.neighborRoamInfo[session->vdev_id]; + &mac->roam.neighborRoamInfo[vdev_id]; rso_config->roam_offload_enabled = mac->mlme_cfg->lfr.lfr3_roaming_offload; @@ -20369,10 +20372,10 @@ static QDF_STATUS csr_cm_roam_scan_offload_fill_lfr3_config( return QDF_STATUS_SUCCESS; vdev = wlan_objmgr_get_vdev_by_id_from_psoc(mac->psoc, - session->vdev_id, + vdev_id, WLAN_LEGACY_SME_ID); if (!vdev) { - sme_err("Vdev:%d is NULL", session->vdev_id); + sme_err("Vdev:%d is NULL", vdev_id); return QDF_STATUS_E_FAILURE; } @@ -20395,6 +20398,9 @@ static QDF_STATUS csr_cm_roam_scan_offload_fill_lfr3_config( mac->mlme_cfg->btm.rct_validity_timer; rso_config->rso_lfr3_params.disable_self_roam = !mac->mlme_cfg->lfr.enable_self_bss_roam; + if (!roam_info->roam_control_enable && + mac->mlme_cfg->lfr.roam_force_rssi_trigger) + *mode |= WMI_ROAM_SCAN_MODE_RSSI_CHANGE; /* Fill LFR3 specific self capabilities for roam scan mode TLV */ self_caps.ess = 1; @@ -20497,7 +20503,7 @@ static QDF_STATUS csr_cm_roam_scan_offload_fill_lfr3_config( /* Check whether to send psk_pmk or sae_single pmk info */ if (!csr_cm_fill_rso_sae_single_pmk_info(mac, &rso_config->rso_11i_info, - session->vdev_id)) { + vdev_id)) { rso_config->rso_11i_info.is_sae_same_pmk = false; qdf_mem_copy(rso_config->rso_11i_info.psk_pmk, session->psk_pmk, sizeof(rso_config->rso_11i_info.psk_pmk)); @@ -20516,8 +20522,10 @@ static QDF_STATUS csr_cm_roam_scan_offload_fill_lfr3_config( session); csr_cm_update_rso_ese_info(mac, rso_config, roam_info, session); - /* TODO: Fill auth mode */ - rso_config->akm = WMI_AUTH_OPEN; + akm = mac->roam.roamSession[vdev_id].connectedProfile.AuthType; + encr = + mac->roam.roamSession[vdev_id].connectedProfile.EncryptionType; + rso_config->akm = e_csr_auth_type_to_rsn_authmode(akm, encr); return QDF_STATUS_SUCCESS; } @@ -20527,12 +20535,137 @@ csr_cm_roam_scan_offload_fill_lfr3_config( struct mac_context *mac, struct csr_roam_session *session, struct wlan_roam_scan_offload_params *rso_config, - uint8_t command) + uint8_t command, uint32_t *mode) { + if (mac->mlme_cfg->lfr.roam_force_rssi_trigger) + *mode |= WMI_ROAM_SCAN_MODE_RSSI_CHANGE; + return QDF_STATUS_SUCCESS; } #endif +static void +csr_cm_roam_scan_offload_fill_scan_params( + struct mac_context *mac, + struct csr_roam_session *session, + struct wlan_roam_scan_offload_params *rso_mode_cfg, + struct wlan_roam_scan_channel_list *rso_chan_info, + uint8_t command) +{ + struct wlan_roam_scan_params *scan_params = + &rso_mode_cfg->rso_scan_params; + tpCsrNeighborRoamControlInfo roam_info = + &mac->roam.neighborRoamInfo[session->vdev_id]; + uint8_t channels_per_burst = 0; + uint16_t roam_scan_home_away_time; + eSirDFSRoamScanMode allow_dfs_ch_roam; + + qdf_mem_zero(scan_params, sizeof(*scan_params)); + if (command == ROAM_SCAN_OFFLOAD_STOP) + return; + + /* Parameters updated after association is complete */ + wlan_scan_cfg_get_passive_dwelltime(mac->psoc, + &scan_params->dwell_time_passive); + /* + * Here is the formula, + * T(HomeAway) = N * T(dwell) + (N+1) * T(cs) + * where N is number of channels scanned in single burst + */ + scan_params->dwell_time_active = + roam_info->cfgParams.maxChannelScanTime; + + roam_scan_home_away_time = + roam_info->cfgParams.roam_scan_home_away_time; + if (roam_scan_home_away_time < + (scan_params->dwell_time_active + + (2 * ROAM_SCAN_CHANNEL_SWITCH_TIME))) { + sme_debug("Disable Home away time(%d) as it is less than (2*RF switching time + channel max time)(%d)", + roam_scan_home_away_time, + (scan_params->dwell_time_active + + (2 * ROAM_SCAN_CHANNEL_SWITCH_TIME))); + roam_scan_home_away_time = 0; + } + + if (roam_scan_home_away_time < (2 * ROAM_SCAN_CHANNEL_SWITCH_TIME)) { + /* clearly we can't follow home away time. + * Make it a split scan. + */ + scan_params->burst_duration = 0; + } else { + channels_per_burst = + (roam_scan_home_away_time - ROAM_SCAN_CHANNEL_SWITCH_TIME) / + (scan_params->dwell_time_active + ROAM_SCAN_CHANNEL_SWITCH_TIME); + + if (channels_per_burst < 1) { + /* dwell time and home away time conflicts */ + /* we will override dwell time */ + scan_params->dwell_time_active = + roam_scan_home_away_time - + (2 * ROAM_SCAN_CHANNEL_SWITCH_TIME); + scan_params->burst_duration = + scan_params->dwell_time_active; + } else { + scan_params->burst_duration = + channels_per_burst * + scan_params->dwell_time_active; + } + } + + allow_dfs_ch_roam = + (eSirDFSRoamScanMode)mac->mlme_cfg->lfr.roaming_dfs_channel; + /* Roaming on DFS channels is supported and it is not + * app channel list. It is ok to override homeAwayTime + * to accommodate DFS dwell time in burst + * duration. + */ + if (allow_dfs_ch_roam == SIR_ROAMING_DFS_CHANNEL_ENABLED_NORMAL && + roam_scan_home_away_time > 0 && + rso_chan_info->chan_cache_type != CHANNEL_LIST_STATIC) + scan_params->burst_duration = + QDF_MAX(scan_params->burst_duration, + scan_params->dwell_time_passive); + + scan_params->min_rest_time = + roam_info->cfgParams.neighbor_scan_min_period; + scan_params->max_rest_time = roam_info->cfgParams.neighborScanPeriod; + scan_params->repeat_probe_time = + (roam_info->cfgParams.roam_scan_n_probes > 0) ? + QDF_MAX(scan_params->dwell_time_active / + roam_info->cfgParams.roam_scan_n_probes, 1) : 0; + scan_params->probe_spacing_time = 0; + scan_params->probe_delay = 0; + /* 30 seconds for full scan cycle */ + scan_params->max_scan_time = ROAM_SCAN_HW_DEF_SCAN_MAX_DURATION; + scan_params->idle_time = scan_params->min_rest_time; + scan_params->n_probes = roam_info->cfgParams.roam_scan_n_probes; + + if (allow_dfs_ch_roam == SIR_ROAMING_DFS_CHANNEL_DISABLED) { + scan_params->scan_ctrl_flags |= WMI_SCAN_BYPASS_DFS_CHN; + } else { + /* Roaming scan on DFS channel is allowed. + * No need to change any flags for default + * allowDFSChannelRoam = 1. + * Special case where static channel list is given by\ + * application that contains DFS channels. + * Assume that the application has knowledge of matching + * APs being active and that probe request transmission + * is permitted on those channel. + * Force active scans on those channels. + */ + + if (allow_dfs_ch_roam == + SIR_ROAMING_DFS_CHANNEL_ENABLED_ACTIVE && + rso_chan_info->chan_cache_type == CHANNEL_LIST_STATIC && + rso_chan_info->chan_count) + scan_params->scan_ctrl_flags |= + WMI_SCAN_FLAG_FORCE_ACTIVE_ON_DFS; + } + + scan_params->rso_adaptive_dwell_mode = + mac->mlme_cfg->lfr.adaptive_roamscan_dwell_mode; +} + /** * csr_cm_roam_scan_offload_fill_rso_configs - Fill Roam scan offload related * configs for WMI_ROAM_SCAN_MODE command to firmware. @@ -20544,50 +20677,53 @@ static void csr_cm_roam_scan_offload_fill_rso_configs( struct mac_context *mac, struct csr_roam_session *session, struct wlan_roam_scan_offload_params *rso_mode_cfg, + struct wlan_roam_scan_channel_list *rso_chan_info, uint8_t command, uint16_t reason) { uint8_t vdev_id = session->vdev_id; tpCsrNeighborRoamControlInfo roam_info = &mac->roam.neighborRoamInfo[vdev_id]; uint32_t mode = 0; - bool force_rssi_trigger; qdf_mem_zero(rso_mode_cfg, sizeof(*rso_mode_cfg)); rso_mode_cfg->vdev_id = session->vdev_id; rso_mode_cfg->is_rso_stop = (command == ROAM_SCAN_OFFLOAD_STOP); + rso_mode_cfg->roaming_scan_policy = + mac->mlme_cfg->lfr.roaming_scan_policy; /* Fill ROAM SCAN mode TLV parameters */ if (roam_info->cfgParams.emptyScanRefreshPeriod) mode |= WMI_ROAM_SCAN_MODE_PERIODIC; - /* TODO move this inside LFR3 specific handling*/ - force_rssi_trigger = true; - if (force_rssi_trigger) - mode |= WMI_ROAM_SCAN_MODE_RSSI_CHANGE; - - rso_mode_cfg->rso_mode_info.roam_scan_mode = mode; rso_mode_cfg->rso_mode_info.min_delay_btw_scans = mac->mlme_cfg->lfr.min_delay_btw_roam_scans; rso_mode_cfg->rso_mode_info.min_delay_roam_trigger_bitmask = mac->mlme_cfg->lfr.roam_trigger_reason_bitmask; - if (reason == REASON_ROAM_STOP_ALL || - reason == REASON_DISCONNECTED || - reason == REASON_ROAM_SYNCH_FAILED) { - mode = WMI_ROAM_SCAN_MODE_NONE; - } else { - if (csr_is_roam_offload_enabled(mac)) - mode = WMI_ROAM_SCAN_MODE_NONE | - WMI_ROAM_SCAN_MODE_ROAMOFFLOAD; - else + if (command == ROAM_SCAN_OFFLOAD_STOP) { + if (reason == REASON_ROAM_STOP_ALL || + reason == REASON_DISCONNECTED || + reason == REASON_ROAM_SYNCH_FAILED) { mode = WMI_ROAM_SCAN_MODE_NONE; + } else { + if (csr_is_roam_offload_enabled(mac)) + mode = WMI_ROAM_SCAN_MODE_NONE | + WMI_ROAM_SCAN_MODE_ROAMOFFLOAD; + else + mode = WMI_ROAM_SCAN_MODE_NONE; + } } + rso_mode_cfg->rso_mode_info.roam_scan_mode = mode; if (command == ROAM_SCAN_OFFLOAD_STOP) return; csr_cm_roam_scan_offload_fill_lfr3_config(mac, session, rso_mode_cfg, + command, &mode); + rso_mode_cfg->rso_mode_info.roam_scan_mode = mode; + csr_cm_roam_scan_offload_fill_scan_params(mac, session, rso_mode_cfg, + rso_chan_info, command); csr_cm_update_driver_assoc_ies(mac, session, rso_mode_cfg); cm_roam_scan_offload_add_fils_params(mac->psoc, rso_mode_cfg, @@ -20810,6 +20946,7 @@ wlan_cm_roam_fill_start_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, csr_cm_roam_scan_offload_fill_rso_configs(mac_ctx, session, &req->rso_config, + &req->rso_chan_info, ROAM_SCAN_OFFLOAD_START, reason); @@ -20868,7 +21005,8 @@ wlan_cm_roam_fill_stop_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, csr_cm_roam_scan_offload_fill_rso_configs(mac_ctx, session, &req->rso_config, - ROAM_SCAN_OFFLOAD_STOP, + NULL, + ROAM_SCAN_OFFLOAD_START, reason); return status; @@ -20905,15 +21043,17 @@ wlan_cm_roam_fill_update_config_req(struct wlan_objmgr_psoc *psoc, csr_cm_roam_scan_offload_scan_period(mac_ctx, vdev_id, &req->scan_period_params); + csr_cm_fill_rso_channel_list(mac_ctx, &req->rso_chan_info, vdev_id, + reason); + csr_cm_roam_scan_offload_fill_rso_configs(mac_ctx, session, &req->rso_config, + &req->rso_chan_info, ROAM_SCAN_OFFLOAD_UPDATE_CFG, reason); csr_cm_roam_scan_offload_ap_profile(mac_ctx, session, &req->profile_params); - csr_cm_fill_rso_channel_list(mac_ctx, &req->rso_chan_info, vdev_id, - reason); return QDF_STATUS_SUCCESS; }