diff --git a/components/mlme/core/src/wlan_mlme_main.c b/components/mlme/core/src/wlan_mlme_main.c index 8f4cb6c30e..8ba6c07163 100644 --- a/components/mlme/core/src/wlan_mlme_main.c +++ b/components/mlme/core/src/wlan_mlme_main.c @@ -299,6 +299,8 @@ static void mlme_init_generic_cfg(struct wlan_objmgr_psoc *psoc, cfg_get(psoc, CFG_ENABLE_RTT_MAC_RANDOMIZATION); gen->band_capability = cfg_get(psoc, CFG_BAND_CAPABILITY); + if (!gen->band_capability) + gen->band_capability = (BIT(REG_BAND_2G) | BIT(REG_BAND_5G)); gen->band = gen->band_capability; gen->select_5ghz_margin = cfg_get(psoc, CFG_SELECT_5GHZ_MARGIN); diff --git a/components/mlme/dispatcher/inc/cfg_mlme_generic.h b/components/mlme/dispatcher/inc/cfg_mlme_generic.h index a1985c6712..b000712bb2 100644 --- a/components/mlme/dispatcher/inc/cfg_mlme_generic.h +++ b/components/mlme/dispatcher/inc/cfg_mlme_generic.h @@ -140,13 +140,21 @@ /* * - * BandCapability - Preferred band (0: Both, 1: 2.4G only, 2: 5G only) + * BandCapability - Preferred band (0: Both 2.4G and 5G, + * 1: 2.4G only, + * 2: 5G only, + * 3: Both 2.4G and 5G, + * 4: 6G only, + * 5: Both 2.4G and 6G, + * 6: Both 5G and 6G, + * 7: 2.4G, 5G, and 6G) * @Min: 0 - * @Max: 2 - * @Default: 0 + * @Max: 7 + * @Default: 7 * * This ini is used to set default band capability - * (0: Both, 1: 2.4G only, 2: 5G only) + * (0: Both 2.4G and 5G, 1: 2.4G only, 2: 5G only, 3: Both 2.4G and 5G, + * 4: 6G only, 5: Both 2.4G and 6G, 6: Both 5G and 6G, 7: 2.4G, 5G, and 6G) * * Related: None * @@ -159,8 +167,8 @@ #define CFG_BAND_CAPABILITY CFG_INI_UINT( \ "BandCapability", \ 0, \ - 2, \ - 0, \ + 7, \ + 7, \ CFG_VALUE_OR_DEFAULT, \ "Band Capability") diff --git a/components/mlme/dispatcher/inc/wlan_mlme_api.h b/components/mlme/dispatcher/inc/wlan_mlme_api.h index b6d5ed9526..cdd3c830bd 100644 --- a/components/mlme/dispatcher/inc/wlan_mlme_api.h +++ b/components/mlme/dispatcher/inc/wlan_mlme_api.h @@ -257,7 +257,7 @@ QDF_STATUS wlan_mlme_set_ht_mpdu_density(struct wlan_objmgr_psoc *psoc, * Return: QDF Status */ QDF_STATUS wlan_mlme_get_band_capability(struct wlan_objmgr_psoc *psoc, - uint8_t *band_capability); + uint32_t *band_capability); /** * wlan_mlme_set_band_capability() - Set the Band capability config @@ -267,7 +267,7 @@ QDF_STATUS wlan_mlme_get_band_capability(struct wlan_objmgr_psoc *psoc, * Return: QDF Status */ QDF_STATUS wlan_mlme_set_band_capability(struct wlan_objmgr_psoc *psoc, - uint8_t band_capability); + uint32_t band_capability); /** * wlan_mlme_get_prevent_link_down() - Get the prevent link down config diff --git a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h index 16d62fabb5..cfd547a5ee 100644 --- a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h +++ b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h @@ -1111,8 +1111,8 @@ struct wlan_mlme_chainmask { * @sae_connect_retries: sae connect retry bitmask */ struct wlan_mlme_generic { - enum band_info band_capability; - enum band_info band; + uint32_t band_capability; + uint32_t band; uint8_t select_5ghz_margin; uint8_t sub_20_chan_width; uint8_t ito_repeat_count; diff --git a/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h b/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h index 756ddaa254..98b72e2072 100644 --- a/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h +++ b/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h @@ -236,7 +236,7 @@ QDF_STATUS ucfg_mlme_set_ht_mpdu_density(struct wlan_objmgr_psoc *psoc, */ static inline QDF_STATUS ucfg_mlme_get_band_capability(struct wlan_objmgr_psoc *psoc, - uint8_t *band_capability) + uint32_t *band_capability) { return wlan_mlme_get_band_capability(psoc, band_capability); } @@ -250,7 +250,7 @@ QDF_STATUS ucfg_mlme_get_band_capability(struct wlan_objmgr_psoc *psoc, */ static inline QDF_STATUS ucfg_mlme_set_band_capability(struct wlan_objmgr_psoc *psoc, - uint8_t band_capability) + uint32_t band_capability) { return wlan_mlme_set_band_capability(psoc, band_capability); } diff --git a/components/mlme/dispatcher/src/wlan_mlme_api.c b/components/mlme/dispatcher/src/wlan_mlme_api.c index dc508cae5a..40fcbf25a3 100644 --- a/components/mlme/dispatcher/src/wlan_mlme_api.c +++ b/components/mlme/dispatcher/src/wlan_mlme_api.c @@ -187,7 +187,7 @@ QDF_STATUS wlan_mlme_set_ht_mpdu_density(struct wlan_objmgr_psoc *psoc, } QDF_STATUS wlan_mlme_get_band_capability(struct wlan_objmgr_psoc *psoc, - uint8_t *band_capability) + uint32_t *band_capability) { struct wlan_mlme_psoc_ext_obj *mlme_obj; @@ -201,7 +201,7 @@ QDF_STATUS wlan_mlme_get_band_capability(struct wlan_objmgr_psoc *psoc, } QDF_STATUS wlan_mlme_set_band_capability(struct wlan_objmgr_psoc *psoc, - uint8_t band_capability) + uint32_t band_capability) { struct wlan_mlme_psoc_ext_obj *mlme_obj; diff --git a/components/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_tgt_if_tx_api.c b/components/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_tgt_if_tx_api.c index 8cc1ca919c..6ffa50664c 100644 --- a/components/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_tgt_if_tx_api.c +++ b/components/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_tgt_if_tx_api.c @@ -38,7 +38,7 @@ wlan_cm_roam_send_set_vdev_pcl(struct wlan_objmgr_psoc *psoc, struct wlan_objmgr_vdev *vdev; struct wmi_pcl_chan_weights *weights; QDF_STATUS status = QDF_STATUS_E_FAILURE; - uint8_t band_capability; + uint32_t band_capability; uint16_t i; /* @@ -94,13 +94,13 @@ wlan_cm_roam_send_set_vdev_pcl(struct wlan_objmgr_psoc *psoc, wma_map_pcl_weights(weights->weighed_valid_list[i]); /* Dont allow roaming on 2G when 5G_ONLY configured */ - if ((band_capability == BAND_5G || + if ((band_capability == BIT(REG_BAND_5G) || pcl_req->band_mask == BIT(REG_BAND_5G)) && WLAN_REG_IS_24GHZ_CH_FREQ(weights->saved_chan_list[i])) weights->weighed_valid_list[i] = WEIGHT_OF_DISALLOWED_CHANNELS; - if ((band_capability == BAND_2G || + if ((band_capability == BIT(REG_BAND_2G) || pcl_req->band_mask == BIT(REG_BAND_2G)) && !WLAN_REG_IS_24GHZ_CH_FREQ(weights->saved_chan_list[i])) weights->weighed_valid_list[i] = diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index 280d438c30..97140fd716 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/core/hdd/src/wlan_hdd_cfg80211.c @@ -16010,7 +16010,7 @@ static void wlan_hdd_update_ht_cap(struct hdd_context *hdd_ctx) static void wlan_hdd_update_band_cap_in_wiphy(struct hdd_context *hdd_ctx) { int i, j; - uint8_t band_capability; + uint32_t band_capability; QDF_STATUS status; struct ieee80211_supported_band *band; @@ -16028,7 +16028,7 @@ static void wlan_hdd_update_band_cap_in_wiphy(struct hdd_context *hdd_ctx) band = hdd_ctx->wiphy->bands[i]; if (HDD_NL80211_BAND_2GHZ == i && - BAND_5G == band_capability) { + BIT(REG_BAND_5G) == band_capability) { /* 5G only */ #ifdef WLAN_ENABLE_SOCIAL_CHANNELS_5G_ONLY /* Enable social channels for P2P */ @@ -16042,7 +16042,7 @@ static void wlan_hdd_update_band_cap_in_wiphy(struct hdd_context *hdd_ctx) IEEE80211_CHAN_DISABLED; continue; } else if (HDD_NL80211_BAND_5GHZ == i && - BAND_2G == band_capability) { + BIT(REG_BAND_2G) == band_capability) { /* 2G only */ band->channels[j].flags |= IEEE80211_CHAN_DISABLED; diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index 4153bc1569..6da46ec524 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -2176,7 +2176,7 @@ int hdd_update_tgt_cfg(hdd_handle_t hdd_handle, struct wma_tgt_cfg *cfg) { int ret; struct hdd_context *hdd_ctx = hdd_handle_to_context(hdd_handle); - uint8_t temp_band_cap, band_capability; + uint32_t temp_band_cap, band_capability; struct cds_config_info *cds_cfg = cds_get_ini_config(); uint8_t antenna_mode; uint8_t sub_20_chan_width; @@ -2269,17 +2269,14 @@ int hdd_update_tgt_cfg(hdd_handle_t hdd_handle, struct wma_tgt_cfg *cfg) cfg->services.is_11k_offload_supported; /* - * now overwrite the target band capability with INI - * setting if INI setting is a subset + * merge the target band capability with INI setting if the merge has + * at least 1 band enabled */ - if ((band_capability == BAND_ALL) && - (temp_band_cap != BAND_ALL)) - band_capability = temp_band_cap; - else if ((band_capability != BAND_ALL) && - (temp_band_cap != BAND_ALL) && - (band_capability != temp_band_cap)) { + temp_band_cap &= band_capability; + if (!temp_band_cap) hdd_warn("ini BandCapability not supported by the target"); - } + else + band_capability = temp_band_cap; status = ucfg_mlme_set_band_capability(hdd_ctx->psoc, band_capability); if (QDF_IS_STATUS_ERROR(status)) { @@ -11637,6 +11634,7 @@ static int hdd_update_cds_config(struct hdd_context *hdd_ctx) struct cds_config_info *cds_cfg; int value; uint8_t band_capability; + uint32_t band_bitmap; uint8_t ito_repeat_count; bool crash_inject; bool self_recovery; @@ -11702,10 +11700,11 @@ static int hdd_update_cds_config(struct hdd_context *hdd_ctx) cds_cfg->ito_repeat_count = ito_repeat_count; - status = ucfg_mlme_get_band_capability(hdd_ctx->psoc, &band_capability); + status = ucfg_mlme_get_band_capability(hdd_ctx->psoc, &band_bitmap); if (QDF_IS_STATUS_ERROR(status)) goto exit; + band_capability = wlan_reg_band_bitmap_to_band_info(band_bitmap); cds_cfg->bandcapability = band_capability; cds_cfg->num_vdevs = hdd_ctx->config->num_vdevs; cds_cfg->enable_tx_compl_tsf64 = @@ -11731,10 +11730,11 @@ static int hdd_update_user_config(struct hdd_context *hdd_ctx) { struct wlan_objmgr_psoc_user_config *user_config; uint8_t band_capability; + uint32_t band_bitmap; QDF_STATUS status; bool value = false; - status = ucfg_mlme_get_band_capability(hdd_ctx->psoc, &band_capability); + status = ucfg_mlme_get_band_capability(hdd_ctx->psoc, &band_bitmap); if (QDF_IS_STATUS_ERROR(status)) return -EIO; @@ -11753,6 +11753,7 @@ static int hdd_update_user_config(struct hdd_context *hdd_ctx) if (!QDF_IS_STATUS_SUCCESS(status)) hdd_err("Invalid 11h_enable flag"); user_config->is_11h_support_enabled = value; + band_capability = wlan_reg_band_bitmap_to_band_info(band_bitmap); user_config->band_capability = band_capability; wlan_objmgr_psoc_set_user_config(hdd_ctx->psoc, user_config); diff --git a/core/hdd/src/wlan_hdd_oemdata.c b/core/hdd/src/wlan_hdd_oemdata.c index e6a786f2a5..a06a1a77f6 100644 --- a/core/hdd/src/wlan_hdd_oemdata.c +++ b/core/hdd/src/wlan_hdd_oemdata.c @@ -62,6 +62,7 @@ static int populate_oem_data_cap(struct hdd_adapter *adapter, uint32_t num_chan, i; uint32_t *chan_freq_list; uint8_t band_capability; + uint32_t band_bitmap; uint16_t neighbor_scan_min_chan_time; uint16_t neighbor_scan_max_chan_time; struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter); @@ -72,12 +73,14 @@ static int populate_oem_data_cap(struct hdd_adapter *adapter, return -EINVAL; } - status = ucfg_mlme_get_band_capability(hdd_ctx->psoc, &band_capability); + status = ucfg_mlme_get_band_capability(hdd_ctx->psoc, &band_bitmap); if (QDF_IS_STATUS_ERROR(status)) { hdd_err("Failed to get MLME band capability"); return -EIO; } + band_capability = wlan_reg_band_bitmap_to_band_info(band_bitmap); + chan_freq_list = qdf_mem_malloc(sizeof(uint32_t) * OEM_CAP_MAX_NUM_CHANNELS); if (!chan_freq_list) diff --git a/core/hdd/src/wlan_hdd_regulatory.c b/core/hdd/src/wlan_hdd_regulatory.c index 3726a558b2..1ed8220503 100644 --- a/core/hdd/src/wlan_hdd_regulatory.c +++ b/core/hdd/src/wlan_hdd_regulatory.c @@ -211,8 +211,8 @@ void hdd_reset_global_reg_params(void) static void reg_program_config_vars(struct hdd_context *hdd_ctx, struct reg_config_vars *config_vars) { - uint8_t band_capability = 0, indoor_chnl_marking = 0; - uint32_t scan_11d_interval = 0; + uint8_t indoor_chnl_marking = 0; + uint32_t band_capability = 0, scan_11d_interval = 0; bool indoor_chan_enabled = false; uint32_t restart_beaconing = 0; bool enable_srd_chan = false; diff --git a/core/wma/inc/wma_tgt_cfg.h b/core/wma/inc/wma_tgt_cfg.h index 4d5ce21cf7..f14ccc6a4b 100644 --- a/core/wma/inc/wma_tgt_cfg.h +++ b/core/wma/inc/wma_tgt_cfg.h @@ -157,7 +157,7 @@ struct board_info { * struct wma_tgt_cfg - target config * @target_fw_version: target fw version * @target_fw_vers_ext: target fw extended sub version - * @band_cap: band capability + * @band_cap: band capability bitmap * @reg_domain: reg domain * @eeprom_rd_ext: eeprom rd ext * @hw_macaddr: hw mcast addr @@ -182,7 +182,7 @@ struct board_info { struct wma_tgt_cfg { uint32_t target_fw_version; uint32_t target_fw_vers_ext; - uint8_t band_cap; + uint32_t band_cap; uint32_t reg_domain; uint32_t eeprom_rd_ext; struct qdf_mac_addr hw_macaddr; diff --git a/core/wma/src/wma_main.c b/core/wma/src/wma_main.c index ccbdb4defe..477b31c47f 100644 --- a/core/wma/src/wma_main.c +++ b/core/wma/src/wma_main.c @@ -5090,28 +5090,37 @@ wma_update_sar_version(struct wlan_psoc_host_service_ext_param *param, * wma_update_hdd_band_cap() - update band cap which hdd understands * @supported_band: supported band which has been given by FW * @tgt_cfg: target configuration to be updated + * @psoc: psoc ptr * * Convert WMA given supported band to enum which HDD understands * * Return: None */ static void wma_update_hdd_band_cap(WMI_PHY_CAPABILITY supported_band, - struct wma_tgt_cfg *tgt_cfg) + struct wma_tgt_cfg *tgt_cfg, + struct wlan_objmgr_psoc *psoc) { switch (supported_band) { case WMI_11G_CAPABILITY: case WMI_11NG_CAPABILITY: - tgt_cfg->band_cap = BAND_2G; + tgt_cfg->band_cap = BIT(REG_BAND_2G); break; case WMI_11A_CAPABILITY: case WMI_11NA_CAPABILITY: case WMI_11AC_CAPABILITY: - tgt_cfg->band_cap = BAND_5G; + tgt_cfg->band_cap = BIT(REG_BAND_5G); break; case WMI_11AG_CAPABILITY: case WMI_11NAG_CAPABILITY: + case WMI_11AX_CAPABILITY: + tgt_cfg->band_cap = (BIT(REG_BAND_2G) | BIT(REG_BAND_5G)); + if (wlan_reg_is_6ghz_supported(psoc)) + tgt_cfg->band_cap |= BIT(REG_BAND_6G); + break; default: - tgt_cfg->band_cap = BAND_ALL; + tgt_cfg->band_cap = (BIT(REG_BAND_2G) | + BIT(REG_BAND_5G) | + BIT(REG_BAND_6G)); } } @@ -5450,7 +5459,7 @@ static int wma_update_hdd_cfg(tp_wma_handle wma_handle) tgt_cfg.dfs_cac_offload = wma_handle->is_dfs_offloaded; tgt_cfg.rcpi_enabled = wma_handle->rcpi_enabled; wma_update_hdd_band_cap(target_if_get_phy_capability(tgt_hdl), - &tgt_cfg); + &tgt_cfg, wma_handle->psoc); wma_update_sar_version(service_ext_param, &tgt_cfg); tgt_cfg.fine_time_measurement_cap = target_if_get_wmi_fw_sub_feat_caps(tgt_hdl);