diff --git a/core/wma/inc/wma_internal.h b/core/wma/inc/wma_internal.h index 4a2d0319b758..f43a94143e71 100644 --- a/core/wma/inc/wma_internal.h +++ b/core/wma/inc/wma_internal.h @@ -1738,16 +1738,6 @@ int wma_cold_boot_cal_event_handler(void *wma_ctx, uint8_t *event_buff, int wma_oem_event_handler(void *wma_ctx, uint8_t *event_buff, uint32_t len); #endif -/** - * wma_set_roam_triggers() - Send roam trigger bitmap to WMI - * @wma_handle: wma handle - * @triggers: Carries vdev id and roam trigger bitmap. - * - * Return: Success or Failure status - */ -QDF_STATUS wma_set_roam_triggers(tp_wma_handle wma_handle, - struct wlan_roam_triggers *triggers); - /** * wma_get_ani_level_evt_handler - event handler to fetch ani level * @handle: the wma handle diff --git a/core/wma/src/wma_scan_roam.c b/core/wma/src/wma_scan_roam.c index ee19110dd8a7..b264b436379e 100644 --- a/core/wma/src/wma_scan_roam.c +++ b/core/wma/src/wma_scan_roam.c @@ -224,102 +224,6 @@ QDF_STATUS wma_update_channel_list(WMA_HANDLE handle, return qdf_status; } -#ifndef ROAM_OFFLOAD_V1 -static QDF_STATUS wma_roam_scan_mawc_params(tp_wma_handle wma_handle, - struct roam_offload_scan_req *roam_req) -{ - struct wlan_roam_mawc_params *params; - QDF_STATUS status; - - if (!roam_req) { - wma_err("No MAWC parameters to send"); - return QDF_STATUS_E_INVAL; - } - params = qdf_mem_malloc(sizeof(*params)); - if (!params) - return QDF_STATUS_E_NOMEM; - - params->vdev_id = roam_req->sessionId; - params->enable = roam_req->mawc_roam_params.mawc_enabled && - roam_req->mawc_roam_params.mawc_roam_enabled; - params->traffic_load_threshold = - roam_req->mawc_roam_params.mawc_roam_traffic_threshold; - if (wmi_service_enabled(wma_handle->wmi_handle, - wmi_service_hw_db2dbm_support)) - params->best_ap_rssi_threshold = - roam_req->mawc_roam_params.mawc_roam_ap_rssi_threshold; - else - params->best_ap_rssi_threshold = - roam_req->mawc_roam_params.mawc_roam_ap_rssi_threshold - - WMA_NOISE_FLOOR_DBM_DEFAULT; - params->rssi_stationary_high_adjust = - roam_req->mawc_roam_params.mawc_roam_rssi_high_adjust; - params->rssi_stationary_low_adjust = - roam_req->mawc_roam_params.mawc_roam_rssi_low_adjust; - status = wmi_unified_roam_mawc_params_cmd( - wma_handle->wmi_handle, params); - qdf_mem_free(params); - - return status; -} -#endif - -#ifdef WLAN_FEATURE_FILS_SK -#ifndef ROAM_OFFLOAD_V1 -/** - * wma_roam_scan_fill_fils_params() - API to fill FILS params in RSO command - * @wma_handle: WMA handle - * @params: Pointer to destination RSO params to be filled - * @roam_req: Pointer to RSO params from CSR - * - * Return: None - */ -static void wma_roam_scan_fill_fils_params(tp_wma_handle wma_handle, - struct roam_offload_scan_params - *params, struct roam_offload_scan_req - *roam_req) -{ - struct roam_fils_params *dst_fils_params, *src_fils_params; - - if (!params || !roam_req || !roam_req->is_fils_connection) - return; - - src_fils_params = &roam_req->roam_fils_params; - dst_fils_params = ¶ms->roam_fils_params; - - params->add_fils_tlv = true; - - dst_fils_params->username_length = src_fils_params->username_length; - qdf_mem_copy(dst_fils_params->username, src_fils_params->username, - dst_fils_params->username_length); - - dst_fils_params->next_erp_seq_num = src_fils_params->next_erp_seq_num; - dst_fils_params->rrk_length = src_fils_params->rrk_length; - qdf_mem_copy(dst_fils_params->rrk, src_fils_params->rrk, - dst_fils_params->rrk_length); - - dst_fils_params->rik_length = src_fils_params->rik_length; - qdf_mem_copy(dst_fils_params->rik, src_fils_params->rik, - dst_fils_params->rik_length); - - dst_fils_params->fils_ft_len = src_fils_params->fils_ft_len; - qdf_mem_copy(dst_fils_params->fils_ft, src_fils_params->fils_ft, - dst_fils_params->fils_ft_len); - - dst_fils_params->realm_len = src_fils_params->realm_len; - qdf_mem_copy(dst_fils_params->realm, src_fils_params->realm, - dst_fils_params->realm_len); -} -#endif -#else -static inline void wma_roam_scan_fill_fils_params( - tp_wma_handle wma_handle, - struct roam_offload_scan_params *params, - struct roam_offload_scan_req *roam_req) - -{ } -#endif - /** * wma_handle_disconnect_reason() - Send del sta msg to lim on receiving * @wma_handle: wma handle @@ -343,80 +247,6 @@ static void wma_handle_disconnect_reason(tp_wma_handle wma_handle, (void *)del_sta_ctx, 0); } -#ifndef ROAM_OFFLOAD_V1 -#ifdef WLAN_FEATURE_ROAM_OFFLOAD -/** - * wma_roam_scan_offload_set_params() - Set roam scan offload params - * @wma_handle: pointer to wma context - * @params: pointer to roam scan offload params - * @roam_req: roam request param - * - * Get roam scan offload parameters from roam req and prepare to fill - * WMI_ROAM_SCAN_MODE TLV - * - * Return: None - */ -static void wma_roam_scan_offload_set_params( - tp_wma_handle wma_handle, - struct roam_offload_scan_params *params, - struct roam_offload_scan_req *roam_req) -{ - params->auth_mode = WMI_AUTH_NONE; - if (!roam_req) - return; - params->auth_mode = e_csr_auth_type_to_rsn_authmode - (roam_req->ConnectedNetwork.authentication, - roam_req->ConnectedNetwork.encryption); - - params->disable_self_roam = - !roam_req->enable_self_bss_roam; - params->roam_offload_enabled = roam_req->roam_offload_enabled; - params->roam_offload_params.ho_delay_for_rx = - roam_req->ho_delay_for_rx; - params->roam_offload_params.roam_preauth_retry_count = - roam_req->roam_preauth_retry_count; - params->roam_offload_params.roam_preauth_no_ack_timeout = - roam_req->roam_preauth_no_ack_timeout; - params->prefer_5ghz = roam_req->Prefer5GHz; - params->roam_rssi_cat_gap = roam_req->RoamRssiCatGap; - params->select_5ghz_margin = roam_req->Select5GHzMargin; - params->reassoc_failure_timeout = - roam_req->ReassocFailureTimeout; - params->rokh_id_length = roam_req->R0KH_ID_Length; - qdf_mem_copy(params->rokh_id, roam_req->R0KH_ID, - WMI_ROAM_R0KH_ID_MAX_LEN); - qdf_mem_copy(params->krk, roam_req->KRK, WMI_KRK_KEY_LEN); - qdf_mem_copy(params->btk, roam_req->BTK, WMI_BTK_KEY_LEN); - qdf_mem_copy(params->psk_pmk, roam_req->PSK_PMK, - roam_req->pmk_len); - params->pmk_len = roam_req->pmk_len; - params->roam_key_mgmt_offload_enabled = - roam_req->RoamKeyMgmtOffloadEnabled; - wma_roam_scan_fill_self_caps(wma_handle, - ¶ms->roam_offload_params, roam_req); - params->fw_okc = roam_req->pmkid_modes.fw_okc; - params->fw_pmksa_cache = roam_req->pmkid_modes.fw_pmksa_cache; - params->rct_validity_timer = roam_req->rct_validity_timer; - params->is_adaptive_11r = roam_req->is_adaptive_11r_connection; - params->is_sae_same_pmk = roam_req->is_sae_single_pmk; - params->enable_ft_im_roaming = roam_req->enable_ft_im_roaming; - wma_debug("qos_caps %d, qos_enabled %d, ho_delay_for_rx %d, roam_scan_mode %d roam_preauth: retrycount %d, no_ack_timeout %d SAE Single PMK:%d", - params->roam_offload_params.qos_caps, - params->roam_offload_params.qos_enabled, - params->roam_offload_params.ho_delay_for_rx, params->mode, - params->roam_offload_params.roam_preauth_retry_count, - params->roam_offload_params.roam_preauth_no_ack_timeout, - params->is_sae_same_pmk); -} -#else -static inline void -wma_roam_scan_offload_set_params(tp_wma_handle wma_handle, - struct roam_offload_scan_params *params, - struct roam_offload_scan_req *roam_req) -{} -#endif -#endif - #ifdef WLAN_FEATURE_ROAM_OFFLOAD int wma_roam_vdev_disconnect_event_handler(void *handle, uint8_t *event, uint32_t len) @@ -462,401 +292,6 @@ int wma_roam_vdev_disconnect_event_handler(void *handle, uint8_t *event, } #endif -#ifndef ROAM_OFFLOAD_V1 -/** - * wma_roam_scan_offload_mode() - send roam scan mode request to fw - * @wma_handle: pointer to wma context - * @scan_cmd_fp: start scan command ptr - * @roam_req: roam request param - * @mode: mode - * @vdev_id: vdev id - * - * send WMI_ROAM_SCAN_MODE TLV to firmware. It has a piggyback - * of WMI_ROAM_SCAN_MODE. - * - * Return: QDF status - */ -static QDF_STATUS wma_roam_scan_offload_mode(tp_wma_handle wma_handle, - wmi_start_scan_cmd_fixed_param * - scan_cmd_fp, - struct roam_offload_scan_req *roam_req, - uint32_t mode, uint32_t vdev_id) -{ - QDF_STATUS status = QDF_STATUS_SUCCESS; - struct roam_offload_scan_params *params = - qdf_mem_malloc(sizeof(*params)); - - if (!params) - return QDF_STATUS_E_NOMEM; - - if (!wma_is_vdev_valid(vdev_id)) { - wma_err("Invalid vdev id:%d", vdev_id); - qdf_mem_free(params); - return QDF_STATUS_E_FAILURE; - } - - params->is_roam_req_valid = 0; - params->mode = mode; - params->vdev_id = vdev_id; - if (roam_req) { - params->is_roam_req_valid = 1; - params->min_delay_btw_roam_scans = - roam_req->min_delay_btw_roam_scans; - params->roam_trigger_reason_bitmask = - roam_req->roam_trigger_reason_bitmask; - params->is_ese_assoc = roam_req->IsESEAssoc; - params->is_11r_assoc = roam_req->is_11r_assoc; - params->mdid = roam_req->mdid; - params->assoc_ie_length = roam_req->assoc_ie.length; - qdf_mem_copy(params->assoc_ie, roam_req->assoc_ie.addIEdata, - roam_req->assoc_ie.length); - /* Configure roaming scan behavior (DBS/Non-DBS scan) */ - if (roam_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; - - wma_roam_scan_fill_fils_params(wma_handle, params, roam_req); - } - wma_debug("min_delay_btw_roam_scans %d, roam_tri_reason_bitmask %d", - params->min_delay_btw_roam_scans, - params->roam_trigger_reason_bitmask); - - wma_roam_scan_offload_set_params( - wma_handle, - params, - roam_req); - - status = wmi_unified_roam_scan_offload_mode_cmd(wma_handle->wmi_handle, - scan_cmd_fp, params); - qdf_mem_zero(params, sizeof(*params)); - qdf_mem_free(params); - if (QDF_IS_STATUS_ERROR(status)) - return status; - - return status; -} - -static QDF_STATUS -wma_roam_scan_offload_rssi_thresh(tp_wma_handle wma_handle, - struct roam_offload_scan_req *roam_req) -{ - struct roam_offload_scan_rssi_params params = {0}; - QDF_STATUS status = QDF_STATUS_SUCCESS; - int rssi_thresh, rssi_thresh_diff; - struct roam_ext_params *roam_params; - int32_t good_rssi_threshold; - uint32_t hirssi_scan_max_count; - uint32_t hirssi_scan_delta; - int32_t hirssi_upper_bound; - bool db2dbm_enabled; - - /* Send rssi threshold */ - roam_params = &roam_req->roam_params; - db2dbm_enabled = wmi_service_enabled(wma_handle->wmi_handle, - wmi_service_hw_db2dbm_support); - if (db2dbm_enabled) { - rssi_thresh = roam_req->LookupThreshold; - } else { - rssi_thresh = roam_req->LookupThreshold - - WMA_NOISE_FLOOR_DBM_DEFAULT; - rssi_thresh &= 0x000000ff; - } - rssi_thresh_diff = roam_req->OpportunisticScanThresholdDiff; - hirssi_scan_max_count = roam_req->hi_rssi_scan_max_count; - hirssi_scan_delta = roam_req->hi_rssi_scan_rssi_delta; - if (db2dbm_enabled) { - hirssi_upper_bound = roam_req->hi_rssi_scan_rssi_ub; - } else { - hirssi_upper_bound = roam_req->hi_rssi_scan_rssi_ub - - WMA_NOISE_FLOOR_DBM_DEFAULT; - } - - /* fill in threshold values */ - params.vdev_id = roam_req->sessionId; - params.rssi_thresh = rssi_thresh; - params.rssi_thresh_diff = rssi_thresh_diff & 0x000000ff; - params.hi_rssi_scan_max_count = hirssi_scan_max_count; - params.hi_rssi_scan_rssi_delta = hirssi_scan_delta; - params.hi_rssi_scan_rssi_ub = hirssi_upper_bound & 0x00000ff; - params.raise_rssi_thresh_5g = roam_params->raise_rssi_thresh_5g; - params.dense_rssi_thresh_offset = - roam_params->dense_rssi_thresh_offset; - params.dense_min_aps_cnt = roam_params->dense_min_aps_cnt; - params.traffic_threshold = - roam_params->traffic_threshold; - params.initial_dense_status = roam_params->initial_dense_status; - if (db2dbm_enabled) { - params.bg_scan_bad_rssi_thresh = - roam_params->bg_scan_bad_rssi_thresh; - params.roam_data_rssi_threshold = - roam_params->roam_data_rssi_threshold; - } else { - params.bg_scan_bad_rssi_thresh = - roam_params->bg_scan_bad_rssi_thresh - - WMA_NOISE_FLOOR_DBM_DEFAULT; - params.roam_data_rssi_threshold = - roam_params->roam_data_rssi_threshold - - WMA_NOISE_FLOOR_DBM_DEFAULT; - } - - params.bg_scan_client_bitmap = roam_params->bg_scan_client_bitmap; - params.roam_bad_rssi_thresh_offset_2g = - roam_params->roam_bad_rssi_thresh_offset_2g; - if (params.roam_bad_rssi_thresh_offset_2g) - params.flags |= WMI_ROAM_BG_SCAN_FLAGS_2G_TO_5G_ONLY; - params.roam_data_rssi_threshold_triggers = - roam_params->roam_data_rssi_threshold_triggers; - params.rx_data_inactivity_time = roam_params->rx_data_inactivity_time; - - /* - * The current Noise floor in firmware is -96dBm. Penalty/Boost - * threshold is applied on a weaker signal to make it even more weaker. - * So, there is a chance that the user may configure a very low - * Penalty/Boost threshold beyond the noise floor. If that is the case, - * then suppress the penalty/boost threshold to the noise floor. - */ - if (roam_params->raise_rssi_thresh_5g < WMA_NOISE_FLOOR_DBM_DEFAULT) { - if (db2dbm_enabled) { - params.penalty_threshold_5g = WMA_RSSI_MIN_VALUE; - params.boost_threshold_5g = WMA_RSSI_MAX_VALUE; - } else { - params.penalty_threshold_5g = 0; - } - } else { - if (db2dbm_enabled) - params.boost_threshold_5g = - roam_params->raise_rssi_thresh_5g; - else - params.boost_threshold_5g = - (roam_params->raise_rssi_thresh_5g - - WMA_NOISE_FLOOR_DBM_DEFAULT) & 0x000000ff; - } - if (roam_params->drop_rssi_thresh_5g < WMA_NOISE_FLOOR_DBM_DEFAULT) { - if (db2dbm_enabled) - params.penalty_threshold_5g = WMA_RSSI_MIN_VALUE; - else - params.penalty_threshold_5g = 0; - - } else { - if (db2dbm_enabled) - params.penalty_threshold_5g = - roam_params->drop_rssi_thresh_5g; - else - params.penalty_threshold_5g = - (roam_params->drop_rssi_thresh_5g - - WMA_NOISE_FLOOR_DBM_DEFAULT) & 0x000000ff; - } - params.raise_factor_5g = roam_params->raise_factor_5g; - params.drop_factor_5g = roam_params->drop_factor_5g; - params.max_raise_rssi_5g = roam_params->max_raise_rssi_5g; - params.max_drop_rssi_5g = roam_params->max_drop_rssi_5g; - - if (roam_params->good_rssi_roam) - good_rssi_threshold = WMA_NOISE_FLOOR_DBM_DEFAULT; - else - good_rssi_threshold = 0; - - if (db2dbm_enabled) - params.good_rssi_threshold = good_rssi_threshold; - else - params.good_rssi_threshold = (good_rssi_threshold - - WMA_NOISE_FLOOR_DBM_DEFAULT) & - 0x000000ff; - - if (roam_req->early_stop_scan_enable) { - if (db2dbm_enabled) { - params.roam_earlystop_thres_min = - roam_req->early_stop_scan_min_threshold; - params.roam_earlystop_thres_max = - roam_req->early_stop_scan_max_threshold; - } else { - params.roam_earlystop_thres_min = - roam_req->early_stop_scan_min_threshold - - WMA_NOISE_FLOOR_DBM_DEFAULT; - params.roam_earlystop_thres_max = - roam_req->early_stop_scan_max_threshold - - WMA_NOISE_FLOOR_DBM_DEFAULT; - } - } else { - if (db2dbm_enabled) { - params.roam_earlystop_thres_min = - WMA_RSSI_MIN_VALUE; - params.roam_earlystop_thres_max = - WMA_RSSI_MIN_VALUE; - } else { - params.roam_earlystop_thres_min = 0; - params.roam_earlystop_thres_max = 0; - } - } - params.rssi_thresh_offset_5g = - roam_req->rssi_thresh_offset_5g; - - wma_debug("db2dbm enabled:%d, good_rssi_threshold:%d, early_stop_thresholds en:%d, min:%d, max:%d, roam_scan_rssi_thresh:%d, roam_rssi_thresh_diff:%d", - db2dbm_enabled, params.good_rssi_threshold, - roam_req->early_stop_scan_enable, - params.roam_earlystop_thres_min, - params.roam_earlystop_thres_max, rssi_thresh, - rssi_thresh_diff); - - status = wmi_unified_roam_scan_offload_rssi_thresh_cmd( - wma_handle->wmi_handle, ¶ms); - if (QDF_IS_STATUS_ERROR(status)) { - wma_err("roam_scan_offload_rssi_thresh_cmd failed %d", status); - return status; - } - - wma_debug("hirssi max cnt:%d, delta:%d, hirssi upper bound:%d, dense rssi thresh offset:%d, dense min aps cnt:%d, traffic_threshold:%d, dense_status:%d", - hirssi_scan_max_count, hirssi_scan_delta, - params.hi_rssi_scan_rssi_ub, - roam_params->dense_rssi_thresh_offset, - roam_params->dense_min_aps_cnt, - roam_params->traffic_threshold, - roam_params->initial_dense_status); - wma_debug("raise rssi threshold 5g:%d, drop rssi threshold 5g:%d, penalty threshold 5g:%d, boost threshold 5g:%d", - params.raise_rssi_thresh_5g, roam_params->drop_rssi_thresh_5g, - params.penalty_threshold_5g, params.boost_threshold_5g); - wma_debug("raise factor 5g:%d, drop factor 5g:%d, max raise rssi 5g:%d, max drop rssi 5g:%d, rssi threshold offset 5g:%d", - params.raise_factor_5g, params.raise_factor_5g, - params.max_raise_rssi_5g, params.max_drop_rssi_5g, - params.rssi_thresh_offset_5g); - wma_debug("BG Scan Bad RSSI:%d, bitmap:0x%x Offset for 2G to 5G Roam:%d", - roam_params->bg_scan_bad_rssi_thresh, - roam_params->bg_scan_client_bitmap, - roam_params->roam_bad_rssi_thresh_offset_2g); - - return status; -} - -/** - * wma_roam_scan_offload_scan_period() - set roam offload scan period - * @wma_handle: wma handle - * @roam_req: Pointer to roam_offload_scan_req - * - * Send WMI_ROAM_SCAN_PERIOD parameters to fw. - * - * Return: QDF status - */ -static QDF_STATUS -wma_roam_scan_offload_scan_period(tp_wma_handle wma_handle, - struct roam_offload_scan_req *roam_req) -{ - uint8_t vdev_id; - struct roam_scan_period_params scan_period_params; - - vdev_id = roam_req->sessionId; - if (!wma_is_vdev_valid(vdev_id)) { - wma_err("Invalid vdev id:%d", vdev_id); - return QDF_STATUS_E_FAILURE; - } - - scan_period_params.vdev_id = vdev_id; - scan_period_params.scan_period = roam_req->EmptyRefreshScanPeriod; - scan_period_params.scan_age = (3 * roam_req->EmptyRefreshScanPeriod); - scan_period_params.roam_scan_inactivity_time = - roam_req->roam_scan_inactivity_time; - scan_period_params.roam_inactive_data_packet_count = - roam_req->roam_inactive_data_packet_count; - scan_period_params.roam_scan_period_after_inactivity = - roam_req->roam_scan_period_after_inactivity; - scan_period_params.full_scan_period = roam_req->full_roam_scan_period; - - return wmi_unified_roam_scan_offload_scan_period(wma_handle->wmi_handle, - &scan_period_params); -} - -/** - * wma_roam_scan_offload_rssi_change() - set roam offload RSSI change threshold - * @wma_handle: wma handle - * @rssi_change_thresh: RSSI Change threshold - * @vdev_id: vdev id - * - * Send WMI_ROAM_SCAN_RSSI_CHANGE_THRESHOLD parameters to fw. - * - * Return: QDF status - */ -static QDF_STATUS wma_roam_scan_offload_rssi_change(tp_wma_handle wma_handle, - uint32_t vdev_id, - int32_t rssi_change_thresh, - uint32_t hirssi_delay_btw_scans) -{ - if (!wma_is_vdev_valid(vdev_id)) { - wma_err("Invalid vdev id:%d", vdev_id); - return QDF_STATUS_E_FAILURE; - } - - return wmi_unified_roam_scan_offload_rssi_change_cmd( - wma_handle->wmi_handle, - vdev_id, rssi_change_thresh, - hirssi_delay_btw_scans); -} - -/** - * wma_roam_scan_offload_chan_list() - set roam offload channel list - * @wma_handle: wma handle - * @chan_count: channel count - * @chan_freq_list: channel list - * @list_type: list type - * @vdev_id: vdev id - * - * Set roam offload channel list. - * - * Return: QDF status - */ -static QDF_STATUS wma_roam_scan_offload_chan_list(tp_wma_handle wma_handle, - uint8_t chan_count, - uint32_t *chan_freq_list, - uint8_t list_type, uint32_t vdev_id) -{ - QDF_STATUS status; - int i; - uint32_t *chan_list_mhz = NULL, buf_len = 0, len = 0; - uint8_t *chan_buff = NULL; - - if (!wma_is_vdev_valid(vdev_id)) { - wma_err("Invalid vdev id:%d", vdev_id); - return QDF_STATUS_E_FAILURE; - } - - if (chan_count) { - chan_list_mhz = qdf_mem_malloc(chan_count * sizeof(*chan_list_mhz)); - if (!chan_list_mhz) - return QDF_STATUS_E_NOMEM; - - /* - * Buffer of (num channl * 5) + 1 to consider the 4 char freq - * and 1 space after it for each channel and 1 to end the string - * with NULL. - */ - buf_len = (chan_count * 5) + 1; - chan_buff = qdf_mem_malloc(buf_len); - } - - for (i = 0; ((i < chan_count) && - (i < SIR_ROAM_MAX_CHANNELS)); i++) { - chan_list_mhz[i] = chan_freq_list[i]; - if (chan_buff) - len += qdf_scnprintf(chan_buff + len, buf_len - len, - " %d", chan_list_mhz[i]); - } - - if (chan_buff) { - wma_debug("Freq list[%d]:%s", chan_count, chan_buff); - qdf_mem_free(chan_buff); - } - - status = wmi_unified_roam_scan_offload_chan_list_cmd( - wma_handle->wmi_handle, - chan_count, chan_list_mhz, - list_type, vdev_id); - qdf_mem_free(chan_list_mhz); - - return status; -} -#endif - /** * e_csr_auth_type_to_rsn_authmode() - map csr auth type to rsn authmode * @authtype: CSR authtype @@ -980,136 +415,6 @@ A_UINT32 e_csr_encryption_type_to_rsn_cipherset(eCsrEncryptionType encr) } } -#ifndef ROAM_OFFLOAD_V1 -/** - * wma_convert_gp_mgmt_cipher_to_target_cipher_type() - map csr ani group mgmt - * enc type to RSN cipher - * @encr: CSR Encryption - * - * Map CSR's group management cipher type into RSN cipher types used by firmware - * - * Return: WMI RSN cipher - */ -static uint32_t -wma_convert_gp_mgmt_cipher_to_target_cipher_type(tAniEdType cipher_type) -{ - switch (cipher_type) { - /* BIP-CMAC-128 (00:0f:ac: 0x06) */ - case eSIR_ED_AES_128_CMAC: - return WMI_CIPHER_AES_CMAC; - - /* BIP-GMAC-128 (00:0f:ac: 0x0b) */ - case eSIR_ED_AES_GMAC_128: - return WMI_CIPHER_AES_GMAC; - - /* BIP-GMAC-256(00:0f:ac: 0x0c)*/ - case eSIR_ED_AES_GMAC_256: - return WMI_CIPHER_BIP_GMAC_256; - case eSIR_ED_NONE: - default: - return WMI_CIPHER_NONE; - } -} - -#ifdef WLAN_FEATURE_ROAM_OFFLOAD -/** - * wma_roam_scan_get_cckm_mode() - Get the CCKM auth mode - * @roam_req: Roaming request buffer - * @auth_mode: Auth mode to be converted - * - * Based on LFR2.0 or LFR3.0, return the proper auth type - * - * Return: if LFR2.0, then return WMI_AUTH_CCKM for backward compatibility - * if LFR3.0 then return the appropriate auth type - */ -static -uint32_t wma_roam_scan_get_cckm_mode(struct roam_offload_scan_req *roam_req, - uint32_t auth_mode) -{ - if (roam_req->roam_offload_enabled) - return auth_mode; - else - return WMI_AUTH_CCKM; - -} -#else -static -uint32_t wma_roam_scan_get_cckm_mode(struct roam_offload_scan_req *roam_req, - uint32_t auth_mode) -{ - return WMI_AUTH_CCKM; -} -#endif - -/** - * wma_roam_scan_fill_ap_profile() - fill ap_profile - * @roam_req: roam offload scan request - * @profile: ap profile - * - * Fill ap_profile structure from configured parameters - * - * Return: none - */ -static void -wma_roam_scan_fill_ap_profile(struct roam_offload_scan_req *roam_req, - struct ap_profile *profile) -{ - uint32_t rsn_authmode; - - qdf_mem_zero(profile, sizeof(*profile)); - if (!roam_req) { - profile->ssid.length = 0; - profile->ssid.ssid[0] = 0; - profile->rsn_authmode = WMI_AUTH_NONE; - profile->rsn_ucastcipherset = WMI_CIPHER_NONE; - profile->rsn_mcastcipherset = WMI_CIPHER_NONE; - profile->rsn_mcastmgmtcipherset = WMI_CIPHER_NONE; - profile->rssi_threshold = WMA_ROAM_RSSI_DIFF_DEFAULT; - profile->bg_rssi_threshold = WMA_ROAM_RSSI_DIFF_DEFAULT; - - return; - } - - profile->ssid.length = roam_req->ConnectedNetwork.ssId.length; - qdf_mem_copy(profile->ssid.ssid, - roam_req->ConnectedNetwork.ssId.ssId, - profile->ssid.length); - profile->rsn_authmode = - e_csr_auth_type_to_rsn_authmode( - roam_req->ConnectedNetwork.authentication, - roam_req->ConnectedNetwork.encryption); - rsn_authmode = profile->rsn_authmode; - - if (rsn_authmode == WMI_AUTH_CCKM_WPA || - rsn_authmode == WMI_AUTH_CCKM_RSNA) - profile->rsn_authmode = - wma_roam_scan_get_cckm_mode(roam_req, rsn_authmode); - - /* Pairwise cipher suite */ - profile->rsn_ucastcipherset = - e_csr_encryption_type_to_rsn_cipherset( - roam_req->ConnectedNetwork.encryption); - - /* Group cipher suite */ - profile->rsn_mcastcipherset = - e_csr_encryption_type_to_rsn_cipherset( - roam_req->ConnectedNetwork.mcencryption); - - /* Group management cipher suite */ - profile->rsn_mcastmgmtcipherset = - wma_convert_gp_mgmt_cipher_to_target_cipher_type( - roam_req->ConnectedNetwork.gp_mgmt_cipher_suite); - - profile->rssi_threshold = roam_req->RoamRssiDiff; - profile->bg_rssi_threshold = roam_req->bg_rssi_threshold; - if (roam_req->rssi_abs_thresh) - profile->rssi_abs_thresh = roam_req->rssi_abs_thresh; -#ifdef WLAN_FEATURE_11W - if (roam_req->ConnectedNetwork.mfp_enabled) - profile->flags |= WMI_AP_PROFILE_FLAG_PMF; -#endif -} -#endif /** * wma_process_set_pdev_ie_req() - process the pdev set IE req * @wma: Pointer to wma handle @@ -1120,7 +425,7 @@ wma_roam_scan_fill_ap_profile(struct roam_offload_scan_req *roam_req, * Return: None */ void wma_process_set_pdev_ie_req(tp_wma_handle wma, - struct set_ie_param *ie_params) + struct set_ie_param *ie_params) { if (ie_params->ie_type == DOT11_HT_IE) wma_process_set_pdev_ht_ie_req(wma, ie_params); @@ -1141,7 +446,7 @@ void wma_process_set_pdev_ie_req(tp_wma_handle wma, * Return: None */ void wma_process_set_pdev_ht_ie_req(tp_wma_handle wma, - struct set_ie_param *ie_params) + struct set_ie_param *ie_params) { QDF_STATUS status; wmi_pdev_set_ht_ie_cmd_fixed_param *cmd; @@ -1158,7 +463,7 @@ void wma_process_set_pdev_ht_ie_req(tp_wma_handle wma, if (!buf) return; - cmd = (wmi_pdev_set_ht_ie_cmd_fixed_param *) wmi_buf_data(buf); + cmd = (wmi_pdev_set_ht_ie_cmd_fixed_param *)wmi_buf_data(buf); WMITLV_SET_HDR(&cmd->tlv_header, WMITLV_TAG_STRUC_wmi_pdev_set_ht_ie_cmd_fixed_param, WMITLV_GET_STRUCT_TLVLEN( @@ -1193,7 +498,7 @@ void wma_process_set_pdev_ht_ie_req(tp_wma_handle wma, * Return: None */ void wma_process_set_pdev_vht_ie_req(tp_wma_handle wma, - struct set_ie_param *ie_params) + struct set_ie_param *ie_params) { QDF_STATUS status; wmi_pdev_set_vht_ie_cmd_fixed_param *cmd; @@ -1210,11 +515,11 @@ void wma_process_set_pdev_vht_ie_req(tp_wma_handle wma, if (!buf) return; - cmd = (wmi_pdev_set_vht_ie_cmd_fixed_param *) wmi_buf_data(buf); + cmd = (wmi_pdev_set_vht_ie_cmd_fixed_param *)wmi_buf_data(buf); WMITLV_SET_HDR(&cmd->tlv_header, - WMITLV_TAG_STRUC_wmi_pdev_set_vht_ie_cmd_fixed_param, - WMITLV_GET_STRUCT_TLVLEN( - wmi_pdev_set_vht_ie_cmd_fixed_param)); + WMITLV_TAG_STRUC_wmi_pdev_set_vht_ie_cmd_fixed_param, + WMITLV_GET_STRUCT_TLVLEN( + wmi_pdev_set_vht_ie_cmd_fixed_param)); cmd->reserved0 = 0; cmd->ie_len = ie_params->ie_len; cmd->tx_streams = ie_params->nss; @@ -1224,8 +529,7 @@ void wma_process_set_pdev_vht_ie_req(tp_wma_handle wma, WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_BYTE, ie_len_pad); if (ie_params->ie_len) { qdf_mem_copy(buf_ptr + WMI_TLV_HDR_SIZE, - (uint8_t *)ie_params->ie_ptr, - ie_params->ie_len); + (uint8_t *)ie_params->ie_ptr, ie_params->ie_len); } status = wmi_unified_cmd_send(wma->wmi_handle, buf, len, @@ -1234,365 +538,6 @@ void wma_process_set_pdev_vht_ie_req(tp_wma_handle wma, wmi_buf_free(buf); } -#ifndef ROAM_OFFLOAD_V1 - -/** - * wma_roam_scan_scan_params() - fill roam scan params - * @wma_handle: wma handle - * @mac: Mac ptr - * @scan_params: scan parameters - * @roam_req: NULL if this routine is called before connect - * It will be non-NULL if called after assoc. - * - * Fill scan_params structure from configured parameters - * - * Return: none - */ -static void wma_roam_scan_fill_scan_params(tp_wma_handle wma_handle, - struct mac_context *mac, - struct roam_offload_scan_req *roam_req, - wmi_start_scan_cmd_fixed_param * - scan_params) -{ - uint8_t channels_per_burst = 0; - - if (!mac) { - wma_err("mac is NULL"); - return; - } - - qdf_mem_zero(scan_params, sizeof(wmi_start_scan_cmd_fixed_param)); - scan_params->scan_ctrl_flags = WMI_SCAN_ADD_CCK_RATES | - WMI_SCAN_ADD_OFDM_RATES | - WMI_SCAN_ADD_DS_IE_IN_PROBE_REQ; - if (roam_req) { - /* Parameters updated after association is complete */ - wlan_scan_cfg_get_passive_dwelltime(wma_handle->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_req->NeighborScanChannelMaxTime; - if (roam_req->HomeAwayTime < - 2 * WMA_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_req->HomeAwayTime - - WMA_ROAM_SCAN_CHANNEL_SWITCH_TIME) - / (scan_params->dwell_time_active + - WMA_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_req->HomeAwayTime - - 2 * WMA_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; - } - } - if (roam_req->allowDFSChannelRoam == - SIR_ROAMING_DFS_CHANNEL_ENABLED_NORMAL - && roam_req->HomeAwayTime > 0 - && roam_req->ChannelCacheType != CHANNEL_LIST_STATIC) { - /* 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. - */ - scan_params->burst_duration = - QDF_MAX(scan_params->burst_duration, - scan_params->dwell_time_passive); - } - scan_params->min_rest_time = - roam_req->neighbor_scan_min_timer_period; - scan_params->max_rest_time = roam_req->NeighborScanTimerPeriod; - scan_params->repeat_probe_time = (roam_req->nProbes > 0) ? - QDF_MAX(scan_params->dwell_time_active / - roam_req->nProbes, 1) : 0; - scan_params->probe_spacing_time = 0; - scan_params->probe_delay = 0; - /* 30 seconds for full scan cycle */ - scan_params->max_scan_time = WMA_HW_DEF_SCAN_MAX_DURATION; - scan_params->idle_time = scan_params->min_rest_time; - scan_params->n_probes = roam_req->nProbes; - if (roam_req->allowDFSChannelRoam == - 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 (roam_req->allowDFSChannelRoam == - SIR_ROAMING_DFS_CHANNEL_ENABLED_ACTIVE && - roam_req->ChannelCacheType == CHANNEL_LIST_STATIC && - roam_req->ConnectedNetwork.ChannelCount > 0) { - scan_params->scan_ctrl_flags |= - WMI_SCAN_FLAG_FORCE_ACTIVE_ON_DFS; - } - } - WMI_SCAN_SET_DWELL_MODE(scan_params->scan_ctrl_flags, - roam_req->roamscan_adaptive_dwell_mode); - - } else { - /* roam_req = NULL during initial or pre-assoc invocation */ - scan_params->dwell_time_active = - WMA_ROAM_DWELL_TIME_ACTIVE_DEFAULT; - scan_params->dwell_time_passive = - WMA_ROAM_DWELL_TIME_PASSIVE_DEFAULT; - scan_params->min_rest_time = WMA_ROAM_MIN_REST_TIME_DEFAULT; - scan_params->max_rest_time = WMA_ROAM_MAX_REST_TIME_DEFAULT; - scan_params->repeat_probe_time = 0; - scan_params->probe_spacing_time = 0; - scan_params->probe_delay = 0; - scan_params->max_scan_time = WMA_HW_DEF_SCAN_MAX_DURATION; - scan_params->idle_time = scan_params->min_rest_time; - scan_params->burst_duration = 0; - scan_params->n_probes = 0; - } - - wma_debug("Rome roam scan parameters: dwell time: active %d passive %d, minrest %d max rest %d repeat probe time %d n_probes %d", - scan_params->dwell_time_active, - scan_params->dwell_time_passive, scan_params->min_rest_time, - scan_params->max_rest_time, scan_params->repeat_probe_time, - scan_params->n_probes); - - wma_debug("max_scan_time %d, idle_time %d, burst_duration %d, scan_ctrl_flags 0x%x", - scan_params->max_scan_time, scan_params->idle_time, - scan_params->burst_duration, scan_params->scan_ctrl_flags); -} - -/** - * wma_roam_scan_offload_ap_profile() - set roam ap profile in fw - * @wma_handle: wma handle - * @mac_ctx: Mac ptr - * @roam_req: Request which contains the ap profile - * - * Send WMI_ROAM_AP_PROFILE to firmware - * - * Return: QDF status - */ -static QDF_STATUS wma_roam_scan_offload_ap_profile(tp_wma_handle wma_handle, - struct roam_offload_scan_req *roam_req) -{ - struct ap_profile_params ap_profile; - bool db2dbm_enabled; - - if (!wma_is_vdev_valid(roam_req->sessionId)) { - wma_err("Invalid vdev id:%d", roam_req->sessionId); - return QDF_STATUS_E_FAILURE; - } - ap_profile.vdev_id = roam_req->sessionId; - wma_roam_scan_fill_ap_profile(roam_req, &ap_profile.profile); - - db2dbm_enabled = wmi_service_enabled(wma_handle->wmi_handle, - wmi_service_hw_db2dbm_support); - if (!ap_profile.profile.rssi_abs_thresh) { - if (db2dbm_enabled) - ap_profile.profile.rssi_abs_thresh = WMA_RSSI_MIN_VALUE; - } else { - if (!db2dbm_enabled) - ap_profile.profile.rssi_abs_thresh -= - WMA_NOISE_FLOOR_DBM_DEFAULT; - } - ap_profile.param = roam_req->score_params; - ap_profile.min_rssi_params[DEAUTH_MIN_RSSI] = - roam_req->min_rssi_params[DEAUTH_MIN_RSSI]; - ap_profile.min_rssi_params[BMISS_MIN_RSSI] = - roam_req->min_rssi_params[BMISS_MIN_RSSI]; - ap_profile.min_rssi_params[MIN_RSSI_2G_TO_5G_ROAM] = - roam_req->min_rssi_params[MIN_RSSI_2G_TO_5G_ROAM]; - - if (!db2dbm_enabled) { - ap_profile.min_rssi_params[DEAUTH_MIN_RSSI].min_rssi -= - WMA_NOISE_FLOOR_DBM_DEFAULT; - ap_profile.min_rssi_params[DEAUTH_MIN_RSSI].min_rssi &= - 0x000000ff; - - ap_profile.min_rssi_params[BMISS_MIN_RSSI].min_rssi -= - WMA_NOISE_FLOOR_DBM_DEFAULT; - ap_profile.min_rssi_params[BMISS_MIN_RSSI].min_rssi &= - 0x000000ff; - - ap_profile.min_rssi_params[MIN_RSSI_2G_TO_5G_ROAM].min_rssi -= - WMA_NOISE_FLOOR_DBM_DEFAULT; - ap_profile.min_rssi_params[MIN_RSSI_2G_TO_5G_ROAM].min_rssi &= - 0x000000ff; - } - - ap_profile.score_delta_param[IDLE_ROAM_TRIGGER] = - roam_req->score_delta_param[IDLE_ROAM_TRIGGER]; - ap_profile.score_delta_param[BTM_ROAM_TRIGGER] = - roam_req->score_delta_param[BTM_ROAM_TRIGGER]; - - return wmi_unified_send_roam_scan_offload_ap_cmd(wma_handle->wmi_handle, - &ap_profile); -} - -/** - * wma_roam_scan_filter() - Filter to be applied while roaming - * @wma_handle: Global WMA Handle - * @roam_req: Request which contains the filters - * - * There are filters such as whitelist, blacklist and preferred - * list that need to be applied to the scan results to form the - * probable candidates for roaming. - * - * Return: Return success upon successfully passing the - * parameters to the firmware, otherwise failure. - */ -static QDF_STATUS wma_roam_scan_filter(tp_wma_handle wma_handle, - struct roam_offload_scan_req *roam_req) -{ - int i; - QDF_STATUS status = QDF_STATUS_SUCCESS; - uint32_t num_bssid_black_list = 0, num_ssid_white_list = 0, - num_bssid_preferred_list = 0, num_rssi_rejection_ap = 0; - uint32_t op_bitmap = 0; - struct roam_ext_params *roam_params; - struct roam_scan_filter_params *params; - struct lca_disallow_config_params *lca_config_params; - - if (!wma_is_vdev_valid(roam_req->sessionId)) { - wma_err("Invalid vdev id:%d", roam_req->sessionId); - return QDF_STATUS_E_FAILURE; - } - - params = qdf_mem_malloc(sizeof(struct roam_scan_filter_params)); - if (!params) - return QDF_STATUS_E_NOMEM; - - roam_params = &roam_req->roam_params; - lca_config_params = &roam_req->lca_config_params; - if (roam_req->Command != ROAM_SCAN_OFFLOAD_STOP) { - switch (roam_req->reason) { - case REASON_ROAM_SET_BLACKLIST_BSSID: - op_bitmap |= 0x1; - num_bssid_black_list = - roam_params->num_bssid_avoid_list; - break; - case REASON_ROAM_SET_SSID_ALLOWED: - op_bitmap |= 0x2; - num_ssid_white_list = - roam_params->num_ssid_allowed_list; - break; - case REASON_ROAM_SET_FAVORED_BSSID: - op_bitmap |= 0x4; - num_bssid_preferred_list = - roam_params->num_bssid_favored; - break; - case REASON_CTX_INIT: - if (roam_req->Command == ROAM_SCAN_OFFLOAD_START) { - params->lca_disallow_config_present = true; - op_bitmap |= - ROAM_FILTER_OP_BITMAP_LCA_DISALLOW | - ROAM_FILTER_OP_BITMAP_RSSI_REJECTION_OCE; - num_rssi_rejection_ap = - roam_params->num_rssi_rejection_ap; - } else { - wma_debug("Roam Filter need not be sent"); - qdf_mem_free(params); - return QDF_STATUS_SUCCESS; - } - break; - default: - wma_debug("Roam Filter need not be sent"); - qdf_mem_free(params); - return QDF_STATUS_SUCCESS; - } - } else { - /* In case of STOP command, reset all the variables - * except for blacklist BSSID which should be retained - * across connections. - */ - op_bitmap = 0x2 | 0x4; - num_ssid_white_list = roam_params->num_ssid_allowed_list; - num_bssid_preferred_list = roam_params->num_bssid_favored; - } - - /* fill in fixed values */ - params->vdev_id = roam_req->sessionId; - params->op_bitmap = op_bitmap; - params->num_bssid_black_list = num_bssid_black_list; - params->num_ssid_white_list = num_ssid_white_list; - params->num_bssid_preferred_list = num_bssid_preferred_list; - params->num_rssi_rejection_ap = num_rssi_rejection_ap; - params->delta_rssi = wlan_blm_get_rssi_blacklist_threshold(wma_handle->pdev); - qdf_mem_copy(params->bssid_avoid_list, roam_params->bssid_avoid_list, - MAX_BSSID_AVOID_LIST * sizeof(struct qdf_mac_addr)); - - wma_debug("op_bitmap:0x%x num_rssi_rejection_ap:%d delta_rssi:%d", - params->op_bitmap, params->num_rssi_rejection_ap, - params->delta_rssi); - - for (i = 0; i < num_ssid_white_list; i++) { - qdf_mem_copy(params->ssid_allowed_list[i].ssid, - roam_params->ssid_allowed_list[i].ssId, - roam_params->ssid_allowed_list[i].length); - params->ssid_allowed_list[i].length = - roam_params->ssid_allowed_list[i].length; - wma_debug("SSID %d: %.*s", i, - params->ssid_allowed_list[i].length, - params->ssid_allowed_list[i].ssid); - } - - for (i = 0; i < params->num_bssid_black_list; i++) - wma_debug("Blacklist bssid[%d]:" QDF_MAC_ADDR_FMT, i, - QDF_MAC_ADDR_REF(params->bssid_avoid_list[i].bytes)); - qdf_mem_copy(params->bssid_favored, roam_params->bssid_favored, - MAX_BSSID_FAVORED * sizeof(struct qdf_mac_addr)); - qdf_mem_copy(params->bssid_favored_factor, - roam_params->bssid_favored_factor, MAX_BSSID_FAVORED); - qdf_mem_copy(params->rssi_rejection_ap, - roam_params->rssi_reject_bssid_list, - MAX_RSSI_AVOID_BSSID_LIST * - sizeof(struct reject_ap_config_params)); - - for (i = 0; i < params->num_bssid_preferred_list; i++) - wma_debug("Preferred Bssid[%d]:"QDF_MAC_ADDR_FMT" score: %d", i, - QDF_MAC_ADDR_REF(params->bssid_favored[i].bytes), - params->bssid_favored_factor[i]); - - if (params->lca_disallow_config_present) { - params->disallow_duration - = lca_config_params->disallow_duration; - params->rssi_channel_penalization - = lca_config_params->rssi_channel_penalization; - params->num_disallowed_aps - = lca_config_params->num_disallowed_aps; - wma_debug("disallow_dur %d rssi_chan_pen %d num_disallowed_aps %d", - params->disallow_duration, - params->rssi_channel_penalization, - params->num_disallowed_aps); - } - status = wmi_unified_roam_scan_filter_cmd(wma_handle->wmi_handle, - params); - - qdf_mem_free(params); - return status; -} -#endif - /** * wma_roam_scan_bmiss_cnt() - set bmiss count to fw * @wma_handle: wma handle @@ -1612,18 +557,18 @@ QDF_STATUS wma_roam_scan_bmiss_cnt(tp_wma_handle wma_handle, wma_debug("first_bcnt: %d, final_bcnt: %d", first_bcnt, final_bcnt); - status = wma_vdev_set_param(wma_handle->wmi_handle, - vdev_id, WMI_VDEV_PARAM_BMISS_FIRST_BCNT, - first_bcnt); + status = wma_vdev_set_param(wma_handle->wmi_handle, vdev_id, + WMI_VDEV_PARAM_BMISS_FIRST_BCNT, + first_bcnt); if (QDF_IS_STATUS_ERROR(status)) { wma_err("wma_vdev_set_param WMI_VDEV_PARAM_BMISS_FIRST_BCNT returned Error %d", status); return status; } - status = wma_vdev_set_param(wma_handle->wmi_handle, - vdev_id, WMI_VDEV_PARAM_BMISS_FINAL_BCNT, - final_bcnt); + status = wma_vdev_set_param(wma_handle->wmi_handle, vdev_id, + WMI_VDEV_PARAM_BMISS_FINAL_BCNT, + final_bcnt); if (QDF_IS_STATUS_ERROR(status)) { wma_err("wma_vdev_set_param WMI_VDEV_PARAM_BMISS_FINAL_BCNT returned Error %d", status); @@ -1633,247 +578,7 @@ QDF_STATUS wma_roam_scan_bmiss_cnt(tp_wma_handle wma_handle, return status; } -#ifndef ROAM_OFFLOAD_V1 - -/** - * wma_roam_scan_offload_command() - set roam offload command - * @wma_handle: wma handle - * @command: command - * @vdev_id: vdev id - * - * This function set roam offload command to fw. - * - * Return: QDF status - */ -static QDF_STATUS wma_roam_scan_offload_command(tp_wma_handle wma_handle, - uint32_t command, uint32_t vdev_id) -{ - if (!wma_is_vdev_valid(vdev_id)) { - wma_err("Invalid vdev id:%d", vdev_id); - return QDF_STATUS_E_FAILURE; - } - - return wmi_unified_roam_scan_offload_cmd(wma_handle->wmi_handle, - command, vdev_id); -} - -/** - * wma_roam_scan_btm_offload() - Send BTM offload config - * @wma_handle: wma handle - * @roam_req: roam request parameters - * - * This function is used to send BTM offload config to fw - * - * Return: QDF status - */ -static QDF_STATUS -wma_roam_scan_btm_offload(tp_wma_handle wma_handle, - struct roam_offload_scan_req *roam_req) -{ - struct wlan_roam_btm_config *params; - QDF_STATUS status; - - params = qdf_mem_malloc(sizeof(struct wlan_roam_btm_config)); - if (!params) - return QDF_STATUS_E_FAILURE; - - params->vdev_id = roam_req->sessionId; - params->btm_offload_config = roam_req->btm_offload_config; - params->btm_solicited_timeout = roam_req->btm_solicited_timeout; - params->btm_max_attempt_cnt = roam_req->btm_max_attempt_cnt; - params->btm_sticky_time = roam_req->btm_sticky_time; - params->disassoc_timer_threshold = roam_req->disassoc_timer_threshold; - params->btm_query_bitmask = roam_req->btm_query_bitmask; - params->btm_candidate_min_score = - roam_req->btm_trig_min_candidate_score; - - wma_debug("vdev_id:%u btm_offload:%u btm_query_bitmask:%u btm_candidate_min_score:%u", - params->vdev_id, params->btm_offload_config, - params->btm_query_bitmask, params->btm_candidate_min_score); - wma_debug("btm_solicited_timeout:%u btm_max_attempt_cnt:%u btm_sticky_time:%u disassoc_timer_threshold:%u", - params->btm_solicited_timeout, params->btm_max_attempt_cnt, - params->btm_sticky_time, params->disassoc_timer_threshold); - - status = wmi_unified_send_btm_config(wma_handle->wmi_handle, params); - qdf_mem_free(params); - - return status; -} - -/** - * wma_send_roam_bss_load_config() - API to send load bss trigger - * related parameters to fw - * @handle: WMA handle - * @roam_req: bss load config parameters from csr to be sent to fw - * - * Return: None - */ -static -void wma_send_roam_bss_load_config(WMA_HANDLE handle, - struct wlan_roam_bss_load_config *params) -{ - QDF_STATUS status; - tp_wma_handle wma_handle = (tp_wma_handle) handle; - bool db2dbm_enabled; - - if (!wma_handle || !wma_handle->wmi_handle) { - wma_err("WMA is closed, cannot send bss load config"); - return; - } - - db2dbm_enabled = wmi_service_enabled(wma_handle->wmi_handle, - wmi_service_hw_db2dbm_support); - if (!db2dbm_enabled) { - params->rssi_threshold_5ghz -= WMA_NOISE_FLOOR_DBM_DEFAULT; - params->rssi_threshold_5ghz &= 0x000000ff; - - params->rssi_threshold_24ghz -= WMA_NOISE_FLOOR_DBM_DEFAULT; - params->rssi_threshold_24ghz &= 0x000000ff; - } - - wma_debug("Bss load trig params vdev_id:%u threshold:%u sample_time:%u 5Ghz RSSI threshold:%d 2.4G rssi threshold:%d", - params->vdev_id, params->bss_load_threshold, - params->bss_load_sample_time, params->rssi_threshold_5ghz, - params->rssi_threshold_24ghz); - - status = wmi_unified_send_bss_load_config(wma_handle->wmi_handle, - params); - if (QDF_IS_STATUS_ERROR(status)) - wma_err("failed to send bss load trigger config command"); -} - -/** - * wma_send_offload_11k_params() - API to send 11k offload params to FW - * @handle: WMA handle - * @params: Pointer to 11k offload params - * - * Return: None - */ -static -QDF_STATUS wma_send_offload_11k_params(WMA_HANDLE handle, - struct wlan_roam_11k_offload_params *params) -{ - QDF_STATUS status; - tp_wma_handle wma_handle = (tp_wma_handle) handle; - - if (!wma_handle || !wma_handle->wmi_handle) { - wma_err("WMA is closed, cannot send 11k offload cmd"); - return QDF_STATUS_E_FAILURE; - } - - if (!wmi_service_enabled(wma_handle->wmi_handle, - wmi_service_11k_neighbour_report_support)) { - wma_err("FW doesn't support 11k offload"); - return QDF_STATUS_E_NOSUPPORT; - } - - /* - * If 11k enable command and ssid length is 0, drop it - */ - if (params->offload_11k_bitmask && - !params->neighbor_report_params.ssid.length) { - wma_debug("SSID Len 0"); - return QDF_STATUS_E_INVAL; - } - - status = wmi_unified_offload_11k_cmd(wma_handle->wmi_handle, params); - - if (status != QDF_STATUS_SUCCESS) - wma_err("failed to send 11k offload command"); - - return status; -} -#endif - #ifdef WLAN_FEATURE_ROAM_OFFLOAD -#ifndef ROAM_OFFLOAD_V1 -/** - * wma_send_disconnect_roam_params() - Send the disconnect roam parameters - * to wmi - * @handle: WMA handle - * @roam_req: Pointer to roam_offload_scan_req sent from CSR - * - * Return: None - */ -static void -wma_send_disconnect_roam_params(tp_wma_handle wma_handle, - struct roam_offload_scan_req *roam_req) -{ - QDF_STATUS status; - struct wlan_roam_disconnect_params *params = - &roam_req->disconnect_roam_params; - - if (!wma_handle || !wma_handle->wmi_handle) { - wma_err("WMA is closed, cannot send disconnect roam params"); - return; - } - - switch (roam_req->Command) { - case ROAM_SCAN_OFFLOAD_START: - case ROAM_SCAN_OFFLOAD_UPDATE_CFG: - if (!params->enable) - return; - break; - case ROAM_SCAN_OFFLOAD_STOP: - params->enable = false; - break; - default: - break; - } - - status = wmi_unified_send_disconnect_roam_params(wma_handle->wmi_handle, - params); - if (QDF_IS_STATUS_ERROR(status)) - wma_err("failed to send disconnect roam parameters"); -} - -/** - * wma_send_idle_roam_params() - Send the idle roam parameters to wmi - * @handle: WMA handle - * @roam_req: Pointer to roam_offload_scan_req sent from CSR - * - * Return: None - */ -static void -wma_send_idle_roam_params(tp_wma_handle wma_handle, - struct roam_offload_scan_req *roam_req) -{ - QDF_STATUS status; - bool db2dbm_enabled; - - if (!wma_handle || !wma_handle->wmi_handle) { - wma_err("WMA is closed, cannot send idle roam params"); - return; - } - - switch (roam_req->Command) { - case ROAM_SCAN_OFFLOAD_START: - case ROAM_SCAN_OFFLOAD_UPDATE_CFG: - if (!roam_req->idle_roam_params.enable) - return; - break; - case ROAM_SCAN_OFFLOAD_STOP: - roam_req->idle_roam_params.enable = false; - break; - default: - break; - } - - db2dbm_enabled = wmi_service_enabled(wma_handle->wmi_handle, - wmi_service_hw_db2dbm_support); - if (!db2dbm_enabled) { - roam_req->idle_roam_params.conn_ap_min_rssi -= - WMA_NOISE_FLOOR_DBM_DEFAULT; - roam_req->idle_roam_params.conn_ap_min_rssi &= 0x000000ff; - } - - status = wmi_unified_send_idle_roam_params(wma_handle->wmi_handle, - &roam_req->idle_roam_params); - if (QDF_IS_STATUS_ERROR(status)) - wma_err("failed to send idle roam parameters"); -} -#endif - void wma_send_roam_preauth_status(tp_wma_handle wma_handle, struct wmi_roam_auth_status_params *params) @@ -1890,481 +595,6 @@ wma_send_roam_preauth_status(tp_wma_handle wma_handle, if (QDF_IS_STATUS_ERROR(status)) wma_err("failed to send disconnect roam preauth status"); } - -#else -#ifndef ROAM_OFFLOAD_V1 -static inline void -wma_send_disconnect_roam_params(tp_wma_handle wma_handle, - struct roam_offload_scan_req *roam_req) -{} - -static inline void -wma_send_idle_roam_params(tp_wma_handle wma_handle, - struct roam_offload_scan_req *roam_req) -{} -#endif -#endif - -#ifndef ROAM_OFFLOAD_V1 -/* wma_set_vdev_roam_reason_vsie: set vdev param - *WMI_VDEV_PARAM_ENABLE_DISABLE_ROAM_REASON_VSIE - * - *@wma: wma handler - *@vdev_id: vdev id - *@is_roam_reason_vsie_enabled: enable_roam_reason_vsie ini value - * - * Return: Void - */ -#if defined(WLAN_FEATURE_ROAM_OFFLOAD) && !defined(ROAM_OFFLOAD_V1) -static void wma_set_vdev_roam_reason_vsie(tp_wma_handle wma, uint8_t vdev_id, - bool is_roam_reason_vsie_enabled) -{ - int ret; - - ret = wma_vdev_set_param(wma->wmi_handle, vdev_id, - WMI_VDEV_PARAM_ENABLE_DISABLE_ROAM_REASON_VSIE, - is_roam_reason_vsie_enabled); - if (ret) - wma_err("Failed to set vdev param %d", - WMI_VDEV_PARAM_ENABLE_DISABLE_ROAM_REASON_VSIE); -} -#else -static void wma_set_vdev_roam_reason_vsie(tp_wma_handle wma, uint8_t vdev_id, - bool is_roam_reason_vsie_enabled) -{ -} -#endif - -/** - * wma_process_roaming_config() - process roam request - * @wma_handle: wma handle - * @roam_req: roam request parameters - * - * Main routine to handle ROAM commands coming from CSR module. - * - * Return: QDF status - */ -QDF_STATUS wma_process_roaming_config(tp_wma_handle wma_handle, - struct roam_offload_scan_req *roam_req) -{ - QDF_STATUS qdf_status = QDF_STATUS_SUCCESS; - wmi_start_scan_cmd_fixed_param scan_params; - struct mac_context *mac = cds_get_context(QDF_MODULE_ID_PE); - uint32_t mode = 0; - uint8_t enable_roam_reason_vsie = 0; - struct wma_txrx_node *intr = NULL; - struct wlan_roam_bss_load_config *bss_load_cfg; - - if (!mac) { - wma_err("mac is NULL"); - qdf_mem_zero(roam_req, sizeof(*roam_req)); - qdf_mem_free(roam_req); - return QDF_STATUS_E_FAILURE; - } - - wma_debug("RSO Command:%d, reason %d vdev %d enable %d 11k bitmask %d", - roam_req->Command, roam_req->reason, roam_req->sessionId, - roam_req->RoamScanOffloadEnabled, - roam_req->offload_11k_params.offload_11k_bitmask); - intr = &wma_handle->interfaces[roam_req->sessionId]; - intr->roaming_in_progress = false; - switch (roam_req->Command) { - case ROAM_SCAN_OFFLOAD_START: - intr->delay_before_vdev_stop = roam_req->delay_before_vdev_stop; - /* - * Scan/Roam threshold parameters are translated from - * fields of struct roam_offload_scan_req to WMITLV - * values sent to Rome firmware some of these - * parameters are configurable in qcom_cfg.ini - */ - - /* First param is positive rssi value to trigger rssi based scan - * Opportunistic scan is started at 30dB > trigger rssi. - */ - 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) - break; - qdf_status = wma_roam_scan_bmiss_cnt(wma_handle, - roam_req->RoamBmissFirstBcnt, - roam_req->RoamBmissFinalBcnt, - roam_req->sessionId); - if (qdf_status != QDF_STATUS_SUCCESS) - break; - - wlan_mlme_get_roam_reason_vsie_status(wma_handle->psoc, - &enable_roam_reason_vsie); - wma_set_vdev_roam_reason_vsie(wma_handle, roam_req->sessionId, - enable_roam_reason_vsie); - wma_set_roam_triggers(wma_handle, &roam_req->roam_triggers); - - /* Opportunistic scan runs on a timer, value set by - * EmptyRefreshScanPeriod. Age out the entries after 3 such - * cycles. - */ - if (roam_req->EmptyRefreshScanPeriod > 0) { - qdf_status = - wma_roam_scan_offload_scan_period(wma_handle, - roam_req); - if (qdf_status != QDF_STATUS_SUCCESS) - break; - - mode = WMI_ROAM_SCAN_MODE_PERIODIC; - if (roam_req->roam_force_rssi_trigger) - mode |= WMI_ROAM_SCAN_MODE_RSSI_CHANGE; - - } else if (roam_req->roam_force_rssi_trigger) { - mode = WMI_ROAM_SCAN_MODE_RSSI_CHANGE; - } - - /* Start new rssi triggered scan only if it changes by - * RoamRssiDiff value. Beacon weight of 14 means average rssi - * is taken over 14 previous samples + 2 times the current - * beacon's rssi. - */ - qdf_status = wma_roam_scan_offload_rssi_change(wma_handle, - roam_req->sessionId, - roam_req->RoamRescanRssiDiff, - roam_req->hi_rssi_scan_delay); - - if (qdf_status != QDF_STATUS_SUCCESS) - break; - - qdf_status = wma_roam_scan_offload_ap_profile(wma_handle, - roam_req); - if (qdf_status != QDF_STATUS_SUCCESS) - break; - - qdf_status = wma_roam_scan_offload_chan_list(wma_handle, - roam_req->ConnectedNetwork.ChannelCount, - &roam_req->ConnectedNetwork.chan_freq_cache[0], - roam_req->ChannelCacheType, - roam_req->sessionId); - if ((qdf_status != QDF_STATUS_SUCCESS) && - (qdf_status != QDF_STATUS_E_EMPTY)) - break; - - - wma_roam_scan_fill_scan_params(wma_handle, mac, roam_req, - &scan_params); - qdf_status = - wma_roam_scan_offload_mode(wma_handle, &scan_params, - roam_req, mode, - roam_req->sessionId); - if (qdf_status != QDF_STATUS_SUCCESS) - break; - if (wmi_service_enabled(wma_handle->wmi_handle, - wmi_service_mawc_support)) { - qdf_status = - wma_roam_scan_mawc_params(wma_handle, roam_req); - if (qdf_status != QDF_STATUS_SUCCESS) { - wma_err("Sending roaming MAWC params failed"); - break; - } - } else { - wma_debug("MAWC roaming not supported by firmware"); - } - qdf_status = wma_roam_scan_filter(wma_handle, roam_req); - if (qdf_status != QDF_STATUS_SUCCESS) { - wma_err("Sending start for roam scan filter failed"); - break; - } - - /* Send BTM config as disabled during RSO Stop */ - qdf_status = wma_roam_scan_btm_offload(wma_handle, - roam_req); - if (QDF_IS_STATUS_ERROR(qdf_status)) { - wma_err("Sending BTM config to fw failed"); - break; - } - - /* - * Send 11k offload enable and bss load trigger parameters - * to FW as part of RSO Start - */ - qdf_status = wma_send_offload_11k_params(wma_handle, - &roam_req->offload_11k_params); - if (QDF_IS_STATUS_ERROR(qdf_status)) { - wma_err("11k offload enable not sent, status %d", - qdf_status); - break; - } - - if (roam_req->bss_load_trig_enabled) { - bss_load_cfg = &roam_req->bss_load_config; - wma_send_roam_bss_load_config(wma_handle, bss_load_cfg); - } - - wma_send_disconnect_roam_params(wma_handle, roam_req); - wma_send_idle_roam_params(wma_handle, roam_req); - break; - - case ROAM_SCAN_OFFLOAD_STOP: - /* - * If roam synch propagation is in progress and an user space - * disconnect is requested, then there is no need to send the - * RSO STOP to firmware, since the roaming is already complete. - * If the RSO STOP is sent to firmware, then an HO_FAIL will be - * generated and the expectation from firmware would be to - * clean up the peer context on the host and not send down any - * WMI PEER DELETE commands to firmware. But, if the user space - * disconnect gets processed first, then there is a chance to - * send down the PEER DELETE commands. Hence, if we do not - * receive the HO_FAIL, and we complete the roam sync - * propagation, then the host and firmware will be in sync with - * respect to the peer and then the user space disconnect can - * be handled gracefully in a normal way. - * - * Ensure to check the reason code since the RSO Stop might - * come when roam sync failed as well and at that point it - * should go through to the firmware and receive HO_FAIL - * and clean up. - */ - if (MLME_IS_ROAM_SYNCH_IN_PROGRESS(wma_handle->psoc, - roam_req->sessionId) && - roam_req->reason == REASON_ROAM_STOP_ALL) { - wma_info("vdev_id:%d : Drop RSO stop during roam sync", - roam_req->sessionId); - break; - } - - /* - * Send 11k offload disable command to FW as part of RSO Stop - */ - qdf_status = - wma_send_offload_11k_params(wma_handle, - &roam_req->offload_11k_params); - if (QDF_IS_STATUS_ERROR(qdf_status)) { - wma_err("11k offload disable not sent, status %d", - qdf_status); - break; - } - - /* Send BTM config as disabled during RSO Stop */ - qdf_status = wma_roam_scan_btm_offload(wma_handle, roam_req); - if (qdf_status != QDF_STATUS_SUCCESS) { - wma_err("Sending BTM config to fw failed"); - break; - } - - mlme_set_roam_reason_better_ap(intr->vdev, false); - wma_roam_scan_fill_scan_params(wma_handle, mac, - NULL, &scan_params); - - if (roam_req->reason == REASON_ROAM_STOP_ALL || - roam_req->reason == REASON_DISCONNECTED || - roam_req->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; - } - - qdf_status = wma_roam_scan_offload_mode( - wma_handle, - &scan_params, NULL, mode, - roam_req->sessionId); - /* - * After sending the roam scan mode because of a disconnect, - * clear the scan bitmap client as well by sending - * the following command - */ - wma_roam_scan_offload_rssi_thresh(wma_handle, roam_req); - /* - * If the STOP command is due to a disconnect, then - * send the filter command to clear all the filter - * entries. If it is roaming scenario, then do not - * send the cleared entries. - */ - if (!roam_req->middle_of_roaming) { - qdf_status = wma_roam_scan_filter(wma_handle, roam_req); - if (qdf_status != QDF_STATUS_SUCCESS) { - wma_err("clear for roam scan filter failed"); - break; - } - } - - wma_send_disconnect_roam_params(wma_handle, roam_req); - wma_send_idle_roam_params(wma_handle, roam_req); - - /* - * Disable all roaming triggers if RSO stop is as part of - * disconnect - */ - if (mode == WMI_ROAM_SCAN_MODE_NONE) { - struct wlan_roam_triggers roam_triggers; - - roam_triggers.vdev_id = roam_req->sessionId; - roam_triggers.trigger_bitmap = 0; - roam_triggers.roam_scan_scheme_bitmap = 0; - wma_set_roam_triggers(wma_handle, &roam_triggers); - } - - if (roam_req->reason == - REASON_OS_REQUESTED_ROAMING_NOW) { - struct scheduler_msg cds_msg = {0}; - struct roam_offload_scan_rsp *scan_offload_rsp; - - scan_offload_rsp = - qdf_mem_malloc(sizeof(*scan_offload_rsp)); - if (!scan_offload_rsp) { - qdf_mem_free(roam_req); - return QDF_STATUS_E_NOMEM; - } - cds_msg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP; - scan_offload_rsp->sessionId = roam_req->sessionId; - scan_offload_rsp->reason = roam_req->reason; - cds_msg.bodyptr = scan_offload_rsp; - /* - * Since REASSOC request is processed in - * Roam_Scan_Offload_Rsp post a dummy rsp msg back to - * SME with proper reason code. - */ - if (QDF_STATUS_SUCCESS != - scheduler_post_message(QDF_MODULE_ID_WMA, - QDF_MODULE_ID_SME, - QDF_MODULE_ID_SME, - &cds_msg)) { - qdf_mem_free(scan_offload_rsp); - } - } - break; - - case ROAM_SCAN_OFFLOAD_ABORT_SCAN: - /* If roam scan is running, stop that cycle. - * It will continue automatically on next trigger. - */ - qdf_status = wma_roam_scan_offload_command(wma_handle, - WMI_ROAM_SCAN_STOP_CMD, - roam_req->sessionId); - break; - - case ROAM_SCAN_OFFLOAD_RESTART: - /* 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 ((roam_req->reason == REASON_PREAUTH_FAILED_FOR_ALL) - && 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, - mlme_get_hb_ap_rssi(intr->vdev)); - mlme_set_roam_reason_better_ap(intr->vdev, false); - } - break; - - case ROAM_SCAN_OFFLOAD_UPDATE_CFG: - mlme_set_roam_reason_better_ap(intr->vdev, false); - - qdf_status = wma_roam_scan_bmiss_cnt(wma_handle, - roam_req->RoamBmissFirstBcnt, - roam_req->RoamBmissFinalBcnt, - roam_req->sessionId); - if (qdf_status != QDF_STATUS_SUCCESS) - break; - - qdf_status = wma_roam_scan_filter(wma_handle, roam_req); - if (qdf_status != QDF_STATUS_SUCCESS) { - wma_err("Sending update for roam scan filter failed"); - break; - } - - - /* - * Runtime (after association) changes to rssi thresholds and - * other parameters. - */ - qdf_status = wma_roam_scan_offload_chan_list(wma_handle, - roam_req->ConnectedNetwork.ChannelCount, - &roam_req->ConnectedNetwork.chan_freq_cache[0], - roam_req->ChannelCacheType, - roam_req->sessionId); - /* - * Even though the channel list is empty, we can - * still go ahead and start Roaming. - */ - if ((qdf_status != QDF_STATUS_SUCCESS) && - (qdf_status != QDF_STATUS_E_EMPTY)) - break; - - - qdf_status = wma_roam_scan_offload_rssi_thresh(wma_handle, - roam_req); - if (qdf_status != QDF_STATUS_SUCCESS) - break; - - if (roam_req->EmptyRefreshScanPeriod > 0) { - qdf_status = wma_roam_scan_offload_scan_period( - wma_handle, roam_req); - if (qdf_status != QDF_STATUS_SUCCESS) - break; - - mode = WMI_ROAM_SCAN_MODE_PERIODIC; - if (roam_req->roam_force_rssi_trigger) - mode |= WMI_ROAM_SCAN_MODE_RSSI_CHANGE; - - } else if (roam_req->roam_force_rssi_trigger) { - mode = WMI_ROAM_SCAN_MODE_RSSI_CHANGE; - } - - qdf_status = wma_roam_scan_offload_rssi_change(wma_handle, - roam_req->sessionId, - roam_req->RoamRescanRssiDiff, - roam_req->hi_rssi_scan_delay); - if (qdf_status != QDF_STATUS_SUCCESS) - break; - - qdf_status = wma_roam_scan_offload_ap_profile(wma_handle, - roam_req); - if (qdf_status != QDF_STATUS_SUCCESS) - break; - - if (!roam_req->RoamScanOffloadEnabled) - break; - - wma_roam_scan_fill_scan_params(wma_handle, mac, roam_req, - &scan_params); - qdf_status = - wma_roam_scan_offload_mode(wma_handle, &scan_params, - roam_req, mode, - roam_req->sessionId); - - wma_send_disconnect_roam_params(wma_handle, roam_req); - wma_send_idle_roam_params(wma_handle, roam_req); - wma_set_roam_triggers(wma_handle, &roam_req->roam_triggers); - - break; - - default: - break; - } - qdf_mem_zero(roam_req, sizeof(*roam_req)); - qdf_mem_free(roam_req); - return qdf_status; -} - -void wma_update_per_roam_config(WMA_HANDLE handle, - struct wlan_per_roam_config_req *req_buf) -{ - QDF_STATUS status; - tp_wma_handle wma_handle = (tp_wma_handle) handle; - - if (!wma_handle || !wma_handle->wmi_handle) { - wma_err("WMA is closed, cannot send per roam config"); - return; - } - - status = wmi_unified_set_per_roam_config(wma_handle->wmi_handle, - req_buf); - if (QDF_IS_STATUS_ERROR(status)) - wma_err("failed to set per roam config to FW"); -} #endif #ifdef WLAN_FEATURE_ROAM_OFFLOAD @@ -2947,37 +1177,12 @@ static void wma_update_phymode_on_roam(tp_wma_handle wma, uint8_t *bssid, wma_debug("LFR3: new phymode %d", bss_phymode); } -#ifndef ROAM_OFFLOAD_V1 -/** - * wma_post_roam_sync_failure: Send roam sync failure ind to fw - * @wma: wma handle - * @vdev_id: session id - * - * Return: None - */ -static void wma_post_roam_sync_failure(tp_wma_handle wma, uint8_t vdev_id) -{ - struct roam_offload_scan_req *roam_req; - - roam_req = qdf_mem_malloc(sizeof(struct roam_offload_scan_req)); - if (roam_req) { - roam_req->Command = ROAM_SCAN_OFFLOAD_STOP; - roam_req->reason = REASON_ROAM_SYNCH_FAILED; - roam_req->sessionId = vdev_id; - wma_debug("In cleanup: RSO Command:%d, reason %d vdev %d", - roam_req->Command, roam_req->reason, - roam_req->sessionId); - wma_process_roaming_config(wma, roam_req); - } -} -#else static void wma_post_roam_sync_failure(tp_wma_handle wma, uint8_t vdev_id) { wlan_cm_roam_stop_req(wma->psoc, vdev_id, REASON_ROAM_SYNCH_FAILED); wma_debug("In cleanup: RSO Command:%d, reason %d vdev %d", ROAM_SCAN_OFFLOAD_STOP, REASON_ROAM_SYNCH_FAILED, vdev_id); } -#endif int wma_mlme_roam_synch_event_handler_cb(void *handle, uint8_t *event, uint32_t len) @@ -4259,135 +2464,6 @@ err: } #endif -#ifndef ROAM_OFFLOAD_V1 -#define RSN_CAPS_SHIFT 16 -/** - * wma_roam_scan_fill_self_caps() - fill capabilities - * @wma_handle: wma handle - * @roam_offload_params: offload parameters - * @roam_req: roam request - * - * This function fills roam self capablities. - * - * Return: QDF status - */ -QDF_STATUS wma_roam_scan_fill_self_caps(tp_wma_handle wma_handle, - roam_offload_param * - roam_offload_params, - struct roam_offload_scan_req *roam_req) -{ - qdf_size_t val_len; - struct mac_context *mac = NULL; - tSirMacCapabilityInfo selfCaps; - uint32_t val = 0; - uint16_t *pCfgValue16; - uint8_t nCfgValue8, *pCfgValue8; - tSirMacQosInfoStation macQosInfoSta; - - qdf_mem_zero(&macQosInfoSta, sizeof(tSirMacQosInfoStation)); - /* Roaming is done only for INFRA STA type. - * So, ess will be one and ibss will be Zero - */ - mac = cds_get_context(QDF_MODULE_ID_PE); - if (!mac) { - wma_err("NULL mac ptr. Exiting"); - QDF_ASSERT(0); - return QDF_STATUS_E_FAILURE; - } - - selfCaps.ess = 1; - selfCaps.ibss = 0; - - val = mac->mlme_cfg->wep_params.is_privacy_enabled; - if (val) - selfCaps.privacy = 1; - - if (mac->mlme_cfg->ht_caps.short_preamble) - selfCaps.shortPreamble = 1; - - selfCaps.pbcc = 0; - selfCaps.channelAgility = 0; - - if (mac->mlme_cfg->feature_flags.enable_short_slot_time_11g) - selfCaps.shortSlotTime = 1; - - if (mac->mlme_cfg->gen.enabled_11h) - selfCaps.spectrumMgt = 1; - - if (mac->mlme_cfg->wmm_params.qos_enabled) - selfCaps.qos = 1; - - if (mac->mlme_cfg->roam_scoring.apsd_enabled) - selfCaps.apsd = 1; - - selfCaps.rrm = mac->rrm.rrmConfig.rrm_enabled; - - val = mac->mlme_cfg->feature_flags.enable_block_ack; - selfCaps.delayedBA = - (uint16_t) ((val >> WNI_CFG_BLOCK_ACK_ENABLED_DELAYED) & 1); - selfCaps.immediateBA = - (uint16_t) ((val >> WNI_CFG_BLOCK_ACK_ENABLED_IMMEDIATE) & 1); - pCfgValue16 = (uint16_t *) &selfCaps; - - /* - * RSN caps arent been sent to firmware, so in case of PMF required, - * the firmware connects to a non PMF AP advertising PMF not required - * in the re-assoc request which violates protocol. - * So send this to firmware in the roam SCAN offload command to - * let it configure the params in the re-assoc request too. - * Instead of making another infra, send the RSN-CAPS in MSB of - * beacon Caps. - */ - roam_offload_params->capability = *((uint16_t *)(&roam_req->rsn_caps)); - roam_offload_params->capability <<= RSN_CAPS_SHIFT; - roam_offload_params->capability |= ((*pCfgValue16) & 0xFFFF); - - roam_offload_params->ht_caps_info = - *(uint16_t *)&mac->mlme_cfg->ht_caps.ht_cap_info; - - roam_offload_params->ampdu_param = - *(uint8_t *)&mac->mlme_cfg->ht_caps.ampdu_params; - - roam_offload_params->ht_ext_cap = - *(uint16_t *)&mac->mlme_cfg->ht_caps.ext_cap_info; - - val_len = ROAM_OFFLOAD_NUM_MCS_SET; - if (wlan_mlme_get_cfg_str((uint8_t *)roam_offload_params->mcsset, - &mac->mlme_cfg->rates.supported_mcs_set, - &val_len) != QDF_STATUS_SUCCESS) { - QDF_TRACE(QDF_MODULE_ID_WMA, QDF_TRACE_LEVEL_ERROR, - "Failed to get CFG_SUPPORTED_MCS_SET"); - return QDF_STATUS_E_FAILURE; - } - - /* tSirMacTxBFCapabilityInfo */ - nCfgValue8 = (uint8_t)mac->mlme_cfg->vht_caps.vht_cap_info.tx_bf_cap; - roam_offload_params->ht_txbf = nCfgValue8 & 0xFF; - /* tSirMacASCapabilityInfo */ - nCfgValue8 = (uint8_t)mac->mlme_cfg->vht_caps.vht_cap_info.as_cap; - roam_offload_params->asel_cap = nCfgValue8 & 0xFF; - - /* QOS Info */ - nCfgValue8 = mac->mlme_cfg->wmm_params.max_sp_length; - macQosInfoSta.maxSpLen = nCfgValue8; - macQosInfoSta.moreDataAck = 0; - macQosInfoSta.qack = 0; - macQosInfoSta.acbe_uapsd = roam_req->AcUapsd.acbe_uapsd; - macQosInfoSta.acbk_uapsd = roam_req->AcUapsd.acbk_uapsd; - macQosInfoSta.acvi_uapsd = roam_req->AcUapsd.acvi_uapsd; - macQosInfoSta.acvo_uapsd = roam_req->AcUapsd.acvo_uapsd; - pCfgValue8 = (uint8_t *) &macQosInfoSta; - /* macQosInfoSta Only queue_request is set.Refer to - * populate_dot11f_wmm_caps for more details - */ - roam_offload_params->qos_caps = (*pCfgValue8) & 0xFF; - if (roam_offload_params->qos_caps) - roam_offload_params->qos_enabled = true; - roam_offload_params->wmm_caps = 0x4 & 0xFF; - return QDF_STATUS_SUCCESS; -} -#endif - /** * wma_set_ric_req() - set ric request element * @wma: wma handle @@ -6754,18 +4830,7 @@ int wma_handle_btm_blacklist_event(void *handle, uint8_t *cmd_param_info, return 0; } -#ifdef WLAN_FEATURE_ROAM_OFFLOAD -#ifndef ROAM_OFFLOAD_V1 -QDF_STATUS wma_set_roam_triggers(tp_wma_handle wma, - struct wlan_roam_triggers *triggers) -{ - if (!wma_is_vdev_valid(triggers->vdev_id)) - return QDF_STATUS_E_INVAL; - - return wmi_unified_set_roam_triggers(wma->wmi_handle, triggers); -} -#endif -#ifdef WLAN_FEATURE_FIPS +#if defined(WLAN_FEATURE_ROAM_OFFLOAD) && defined(WLAN_FEATURE_FIPS) void wma_register_pmkid_req_event_handler(tp_wma_handle wma_handle) { if (!wma_handle) { @@ -6861,13 +4926,4 @@ int wma_roam_pmkid_request_event_handler(void *handle, uint8_t *event, qdf_mem_free(dst_list); return 0; } -#endif /* WLAN_FEATURE_FIPS */ -#else -#ifndef ROAM_OFFLOAD_V1 -inline QDF_STATUS -wma_set_roam_triggers(tp_wma_handle wma, struct wlan_roam_triggers *triggers) -{ - return QDF_STATUS_E_NOSUPPORT; -} -#endif #endif