qcacld-3.0: Update band_capability INI usage with MLME CFG

Replace all usage of band_capability INI from HDD config to MLME CFG

Change-Id: I406a8fb9965fe98a47cc6309d31f5bced529577b
CRs-Fixed: 2327023
This commit is contained in:
Vignesh Viswanathan
2018-10-03 19:17:07 +05:30
committed by nshrivas
parent c87c925a4e
commit f97cc11a70
16 changed files with 244 additions and 125 deletions

View File

@@ -161,6 +161,7 @@ static void mlme_init_generic_cfg(struct wlan_objmgr_psoc *psoc,
gen->rtt3_enabled = cfg_default(CFG_RTT3_ENABLE); gen->rtt3_enabled = cfg_default(CFG_RTT3_ENABLE);
gen->band_capability = gen->band_capability =
cfg_get(psoc, CFG_BAND_CAPABILITY); cfg_get(psoc, CFG_BAND_CAPABILITY);
gen->band = gen->band_capability;
gen->select_5ghz_margin = gen->select_5ghz_margin =
cfg_get(psoc, CFG_SELECT_5GHZ_MARGIN); cfg_get(psoc, CFG_SELECT_5GHZ_MARGIN);
gen->sub_20_chan_width = gen->sub_20_chan_width =

View File

@@ -177,6 +177,26 @@ QDF_STATUS wlan_mlme_set_ht_cap_info(struct wlan_objmgr_psoc *psoc,
struct mlme_ht_capabilities_info struct mlme_ht_capabilities_info
ht_cap_info); ht_cap_info);
/**
* wlan_mlme_get_band_capability() - Get the Band capability config
* @psoc: pointer to psoc object
* @band_capability: Pointer to the variable from caller
*
* Return: QDF Status
*/
QDF_STATUS wlan_mlme_get_band_capability(struct wlan_objmgr_psoc *psoc,
uint8_t *band_capability);
/**
* wlan_mlme_set_band_capability() - Set the Band capability config
* @psoc: pointer to psoc object
* @band_capability: Value to be set from the caller
*
* Return: QDF Status
*/
QDF_STATUS wlan_mlme_set_band_capability(struct wlan_objmgr_psoc *psoc,
uint8_t band_capability);
/** /**
* wlan_mlme_get_acs_with_more_param() - Get the acs_with_more_param flag * wlan_mlme_get_acs_with_more_param() - Get the acs_with_more_param flag
* @psoc: pointer to psoc object * @psoc: pointer to psoc object

View File

@@ -149,6 +149,34 @@ QDF_STATUS ucfg_mlme_set_ht_cap_info(struct wlan_objmgr_psoc *psoc,
return wlan_mlme_set_ht_cap_info(psoc, ht_cap_info); return wlan_mlme_set_ht_cap_info(psoc, ht_cap_info);
} }
/**
* ucfg_mlme_get_band_capability() - Get the Band capability config
* @psoc: pointer to psoc object
* @band_capability: Pointer to the variable from caller
*
* Return: QDF Status
*/
static inline
QDF_STATUS ucfg_mlme_get_band_capability(struct wlan_objmgr_psoc *psoc,
uint8_t *band_capability)
{
return wlan_mlme_get_band_capability(psoc, band_capability);
}
/**
* ucfg_mlme_set_band_capability() - Set the Band capability config
* @psoc: pointer to psoc object
* @band_capability: Value to be set from the caller
*
* Return: QDF Status
*/
static inline
QDF_STATUS ucfg_mlme_set_band_capability(struct wlan_objmgr_psoc *psoc,
uint8_t band_capability)
{
return wlan_mlme_set_band_capability(psoc, band_capability);
}
/** /**
* ucfg_mlme_get_acs_with_more_param() - Get the flag for acs with * ucfg_mlme_get_acs_with_more_param() - Get the flag for acs with
* more param * more param

View File

@@ -90,6 +90,39 @@ QDF_STATUS wlan_mlme_set_ht_cap_info(struct wlan_objmgr_psoc *psoc,
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }
QDF_STATUS wlan_mlme_get_band_capability(struct wlan_objmgr_psoc *psoc,
uint8_t *band_capability)
{
struct wlan_mlme_psoc_obj *mlme_obj;
mlme_obj = mlme_get_psoc_obj(psoc);
if (!mlme_obj) {
mlme_err("Failed to get MLME Obj");
return QDF_STATUS_E_FAILURE;
}
*band_capability = mlme_obj->cfg.gen.band_capability;
return QDF_STATUS_SUCCESS;
}
QDF_STATUS wlan_mlme_set_band_capability(struct wlan_objmgr_psoc *psoc,
uint8_t band_capability)
{
struct wlan_mlme_psoc_obj *mlme_obj;
mlme_obj = mlme_get_psoc_obj(psoc);
if (!mlme_obj) {
mlme_err("Failed to get MLME Obj");
return QDF_STATUS_E_FAILURE;
}
mlme_obj->cfg.gen.band_capability = band_capability;
return QDF_STATUS_SUCCESS;
}
void wlan_mlme_get_sap_inactivity_override(struct wlan_objmgr_psoc *psoc, void wlan_mlme_get_sap_inactivity_override(struct wlan_objmgr_psoc *psoc,
bool *val) bool *val)
{ {

View File

@@ -3562,30 +3562,6 @@ enum station_keepalive_method {
#define CFG_HW_FILTER_MODE_BITMAP_MAX (3) #define CFG_HW_FILTER_MODE_BITMAP_MAX (3)
#define CFG_HW_FILTER_MODE_BITMAP_DEFAULT (1) #define CFG_HW_FILTER_MODE_BITMAP_DEFAULT (1)
/*
* <ini>
* BandCapability - Preferred band (0: Both, 1: 2.4G only, 2: 5G only)
* @Min: 0
* @Max: 2
* @Default: 0
*
* This ini is used to set default band capability
* (0: Both, 1: 2.4G only, 2: 5G only)
*
* Related: None
*
* Supported Feature: STA
*
* Usage: Internal/External
*
* </ini>
*/
#define CFG_BAND_CAPABILITY_NAME "BandCapability"
#define CFG_BAND_CAPABILITY_MIN (0)
#define CFG_BAND_CAPABILITY_MAX (2)
#define CFG_BAND_CAPABILITY_DEFAULT (0)
#define CFG_ENABLE_BYPASS_11D_NAME "gEnableBypass11d" #define CFG_ENABLE_BYPASS_11D_NAME "gEnableBypass11d"
#define CFG_ENABLE_BYPASS_11D_MIN (0) #define CFG_ENABLE_BYPASS_11D_MIN (0)
#define CFG_ENABLE_BYPASS_11D_MAX (1) #define CFG_ENABLE_BYPASS_11D_MAX (1)
@@ -9194,8 +9170,6 @@ struct hdd_config {
bool AddTSWhenACMIsOff; bool AddTSWhenACMIsOff;
uint8_t nBandCapability;
/* QDF Trace Control*/ /* QDF Trace Control*/
uint16_t qdf_trace_enable_wdi; uint16_t qdf_trace_enable_wdi;
uint16_t qdf_trace_enable_hdd; uint16_t qdf_trace_enable_hdd;

View File

@@ -1299,13 +1299,6 @@ struct reg_table_entry g_registry_table[] = {
CFG_QOS_ADDTS_WHEN_ACM_IS_OFF_MIN, CFG_QOS_ADDTS_WHEN_ACM_IS_OFF_MIN,
CFG_QOS_ADDTS_WHEN_ACM_IS_OFF_MAX), CFG_QOS_ADDTS_WHEN_ACM_IS_OFF_MAX),
REG_VARIABLE(CFG_BAND_CAPABILITY_NAME, WLAN_PARAM_Integer,
struct hdd_config, nBandCapability,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
CFG_BAND_CAPABILITY_DEFAULT,
CFG_BAND_CAPABILITY_MIN,
CFG_BAND_CAPABILITY_MAX),
/* CFG_QDF_TRACE_ENABLE Parameters */ /* CFG_QDF_TRACE_ENABLE Parameters */
REG_VARIABLE(CFG_QDF_TRACE_ENABLE_WDI_NAME, WLAN_PARAM_Integer, REG_VARIABLE(CFG_QDF_TRACE_ENABLE_WDI_NAME, WLAN_PARAM_Integer,
struct hdd_config, qdf_trace_enable_wdi, struct hdd_config, qdf_trace_enable_wdi,
@@ -5241,14 +5234,7 @@ QDF_STATUS hdd_set_sme_config(struct hdd_context *hdd_ctx)
smeConfig->csrConfig.AdHocChannel24 = pConfig->AdHocChannel24G; smeConfig->csrConfig.AdHocChannel24 = pConfig->AdHocChannel24G;
smeConfig->csrConfig.ProprietaryRatesEnabled = 0; smeConfig->csrConfig.ProprietaryRatesEnabled = 0;
smeConfig->csrConfig.HeartbeatThresh50 = 40; smeConfig->csrConfig.HeartbeatThresh50 = 40;
smeConfig->csrConfig.bandCapability = pConfig->nBandCapability; smeConfig->csrConfig.Is11hSupportEnabled = pConfig->Is11hSupportEnabled;
if (pConfig->nBandCapability == BAND_2G) {
smeConfig->csrConfig.Is11hSupportEnabled = 0;
} else {
smeConfig->csrConfig.Is11hSupportEnabled =
pConfig->Is11hSupportEnabled;
}
smeConfig->csrConfig.eBand = pConfig->nBandCapability;
smeConfig->csrConfig.nTxPowerCap = pConfig->nTxPowerCap; smeConfig->csrConfig.nTxPowerCap = pConfig->nTxPowerCap;
smeConfig->csrConfig.allow_tpc_from_ap = pConfig->allow_tpc_from_ap; smeConfig->csrConfig.allow_tpc_from_ap = pConfig->allow_tpc_from_ap;
smeConfig->csrConfig.fEnableBypass11d = pConfig->enableBypass11d; smeConfig->csrConfig.fEnableBypass11d = pConfig->enableBypass11d;

View File

@@ -12119,7 +12119,6 @@ wlan_hdd_populate_srd_chan_info(struct hdd_context *hdd_ctx, uint32_t index)
int wlan_hdd_cfg80211_init(struct device *dev, int wlan_hdd_cfg80211_init(struct device *dev,
struct wiphy *wiphy, struct hdd_config *pCfg) struct wiphy *wiphy, struct hdd_config *pCfg)
{ {
int i, j;
struct hdd_context *hdd_ctx = wiphy_priv(wiphy); struct hdd_context *hdd_ctx = wiphy_priv(wiphy);
int len_5g_ch = 0, num_ch, ch_arr_size; int len_5g_ch = 0, num_ch, ch_arr_size;
int num_dsrc_ch, len_dsrc_ch, num_srd_ch, len_srd_ch; int num_dsrc_ch, len_dsrc_ch, num_srd_ch, len_srd_ch;
@@ -12258,37 +12257,6 @@ int wlan_hdd_cfg80211_init(struct device *dev,
len_5g_ch, len_srd_ch); len_5g_ch, len_srd_ch);
} }
for (i = 0; i < HDD_NUM_NL80211_BANDS; i++) {
if (NULL == wiphy->bands[i])
continue;
for (j = 0; j < wiphy->bands[i]->n_channels; j++) {
struct ieee80211_supported_band *band = wiphy->bands[i];
if (HDD_NL80211_BAND_2GHZ == i &&
BAND_5G == pCfg->nBandCapability) {
/* 5G only */
#ifdef WLAN_ENABLE_SOCIAL_CHANNELS_5G_ONLY
/* Enable social channels for P2P */
if (WLAN_HDD_IS_SOCIAL_CHANNEL
(band->channels[j].center_freq))
band->channels[j].flags &=
~IEEE80211_CHAN_DISABLED;
else
#endif
band->channels[j].flags |=
IEEE80211_CHAN_DISABLED;
continue;
} else if (HDD_NL80211_BAND_5GHZ == i &&
BAND_2G == pCfg->nBandCapability) {
/* 2G only */
band->channels[j].flags |=
IEEE80211_CHAN_DISABLED;
continue;
}
}
}
/*Initialise the supported cipher suite details */ /*Initialise the supported cipher suite details */
if (pCfg->gcmp_enabled) { if (pCfg->gcmp_enabled) {
cipher_suites = qdf_mem_malloc(sizeof(hdd_cipher_suites) + cipher_suites = qdf_mem_malloc(sizeof(hdd_cipher_suites) +
@@ -12437,6 +12405,60 @@ static void wlan_hdd_update_ht_cap(struct hdd_context *hdd_ctx)
wlan_hdd_band_5_ghz.ht_cap.cap &= ~IEEE80211_HT_CAP_SGI_40; wlan_hdd_band_5_ghz.ht_cap.cap &= ~IEEE80211_HT_CAP_SGI_40;
} }
/**
* wlan_hdd_update_band_cap_in_wiphy() - update channel flags based on band cap
* @hdd_ctx: HDD context
*
* This function updates the channel flags based on the band capability set
* in the MLME CFG
*
* Return: void
*/
static void wlan_hdd_update_band_cap_in_wiphy(struct hdd_context *hdd_ctx)
{
int i, j;
uint8_t band_capability;
QDF_STATUS status;
struct ieee80211_supported_band *band;
status = ucfg_mlme_get_band_capability(hdd_ctx->psoc, &band_capability);
if (QDF_IS_STATUS_ERROR(status)) {
hdd_err("Failed to get MLME Band Capability");
return;
}
for (i = 0; i < HDD_NUM_NL80211_BANDS; i++) {
if (NULL == hdd_ctx->wiphy->bands[i])
continue;
for (j = 0; j < hdd_ctx->wiphy->bands[i]->n_channels; j++) {
band = hdd_ctx->wiphy->bands[i];
if (HDD_NL80211_BAND_2GHZ == i &&
BAND_5G == band_capability) {
/* 5G only */
#ifdef WLAN_ENABLE_SOCIAL_CHANNELS_5G_ONLY
/* Enable social channels for P2P */
if (WLAN_HDD_IS_SOCIAL_CHANNEL
(band->channels[j].center_freq))
band->channels[j].flags &=
~IEEE80211_CHAN_DISABLED;
else
#endif
band->channels[j].flags |=
IEEE80211_CHAN_DISABLED;
continue;
} else if (HDD_NL80211_BAND_5GHZ == i &&
BAND_2G == band_capability) {
/* 2G only */
band->channels[j].flags |=
IEEE80211_CHAN_DISABLED;
continue;
}
}
}
}
/* /*
* In this function, wiphy structure is updated after QDF * In this function, wiphy structure is updated after QDF
* initialization. In wlan_hdd_cfg80211_init, only the * initialization. In wlan_hdd_cfg80211_init, only the
@@ -12452,6 +12474,7 @@ void wlan_hdd_update_wiphy(struct hdd_context *hdd_ctx)
ucfg_mlme_get_sap_max_peers(hdd_ctx->psoc, &value); ucfg_mlme_get_sap_max_peers(hdd_ctx->psoc, &value);
hdd_ctx->wiphy->max_ap_assoc_sta = value; hdd_ctx->wiphy->max_ap_assoc_sta = value;
wlan_hdd_update_ht_cap(hdd_ctx); wlan_hdd_update_ht_cap(hdd_ctx);
wlan_hdd_update_band_cap_in_wiphy(hdd_ctx);
fils_enabled = 0; fils_enabled = 0;
status = ucfg_mlme_get_fils_enabled_info(hdd_ctx->psoc, status = ucfg_mlme_get_fils_enabled_info(hdd_ctx->psoc,

View File

@@ -1928,7 +1928,7 @@ void hdd_update_tgt_cfg(hdd_handle_t hdd_handle, struct wma_tgt_cfg *cfg)
{ {
int ret; int ret;
struct hdd_context *hdd_ctx = hdd_handle_to_context(hdd_handle); struct hdd_context *hdd_ctx = hdd_handle_to_context(hdd_handle);
uint8_t temp_band_cap; uint8_t temp_band_cap, band_capability;
struct cds_config_info *cds_cfg = cds_get_ini_config(); struct cds_config_info *cds_cfg = cds_get_ini_config();
uint8_t antenna_mode; uint8_t antenna_mode;
QDF_STATUS status; QDF_STATUS status;
@@ -1992,10 +1992,16 @@ void hdd_update_tgt_cfg(hdd_handle_t hdd_handle, struct wma_tgt_cfg *cfg)
} }
} }
/* first store the INI band capability */ status = ucfg_mlme_get_band_capability(hdd_ctx->psoc, &band_capability);
temp_band_cap = hdd_ctx->config->nBandCapability; if (QDF_IS_STATUS_ERROR(status)) {
hdd_err("Failed to get MLME band capability");
return;
}
hdd_ctx->config->nBandCapability = cfg->band_cap; /* first store the INI band capability */
temp_band_cap = band_capability;
band_capability = cfg->band_cap;
hdd_ctx->is_fils_roaming_supported = hdd_ctx->is_fils_roaming_supported =
cfg->services.is_fils_roaming_supported; cfg->services.is_fils_roaming_supported;
@@ -2006,17 +2012,22 @@ void hdd_update_tgt_cfg(hdd_handle_t hdd_handle, struct wma_tgt_cfg *cfg)
* now overwrite the target band capability with INI * now overwrite the target band capability with INI
* setting if INI setting is a subset * setting if INI setting is a subset
*/ */
if ((band_capability == BAND_ALL) &&
if ((hdd_ctx->config->nBandCapability == BAND_ALL) &&
(temp_band_cap != BAND_ALL)) (temp_band_cap != BAND_ALL))
hdd_ctx->config->nBandCapability = temp_band_cap; band_capability = temp_band_cap;
else if ((hdd_ctx->config->nBandCapability != BAND_ALL) && else if ((band_capability != BAND_ALL) &&
(temp_band_cap != BAND_ALL) && (temp_band_cap != BAND_ALL) &&
(hdd_ctx->config->nBandCapability != temp_band_cap)) { (band_capability != temp_band_cap)) {
hdd_warn("ini BandCapability not supported by the target"); hdd_warn("ini BandCapability not supported by the target");
} }
hdd_ctx->curr_band = hdd_ctx->config->nBandCapability; status = ucfg_mlme_set_band_capability(hdd_ctx->psoc, band_capability);
if (QDF_IS_STATUS_ERROR(status)) {
hdd_err("Failed to set MLME Band Capability");
return;
}
hdd_ctx->curr_band = band_capability;
if (!cds_is_driver_recovering() || cds_is_driver_in_bad_state()) { if (!cds_is_driver_recovering() || cds_is_driver_in_bad_state()) {
hdd_ctx->reg.reg_domain = cfg->reg_domain; hdd_ctx->reg.reg_domain = cfg->reg_domain;
@@ -9651,6 +9662,8 @@ static int hdd_update_cds_config(struct hdd_context *hdd_ctx)
{ {
struct cds_config_info *cds_cfg; struct cds_config_info *cds_cfg;
int value; int value;
uint8_t band_capability;
QDF_STATUS status;
cds_cfg = (struct cds_config_info *)qdf_mem_malloc(sizeof(*cds_cfg)); cds_cfg = (struct cds_config_info *)qdf_mem_malloc(sizeof(*cds_cfg));
if (!cds_cfg) { if (!cds_cfg) {
@@ -9742,7 +9755,12 @@ static int hdd_update_cds_config(struct hdd_context *hdd_ctx)
cds_cfg->active_mc_bc_apf_mode = hdd_ctx->config->active_mc_bc_apf_mode; cds_cfg->active_mc_bc_apf_mode = hdd_ctx->config->active_mc_bc_apf_mode;
cds_cfg->ito_repeat_count = hdd_ctx->config->ito_repeat_count; cds_cfg->ito_repeat_count = hdd_ctx->config->ito_repeat_count;
cds_cfg->bandcapability = hdd_ctx->config->nBandCapability;
status = ucfg_mlme_get_band_capability(hdd_ctx->psoc, &band_capability);
if (QDF_IS_STATUS_ERROR(status))
goto exit;
cds_cfg->bandcapability = band_capability;
cds_cfg->delay_before_vdev_stop = cds_cfg->delay_before_vdev_stop =
hdd_ctx->config->delay_before_vdev_stop; hdd_ctx->config->delay_before_vdev_stop;
cds_cfg->num_vdevs = hdd_ctx->config->num_vdevs; cds_cfg->num_vdevs = hdd_ctx->config->num_vdevs;
@@ -9769,6 +9787,12 @@ static int hdd_update_user_config(struct hdd_context *hdd_ctx)
{ {
struct wlan_objmgr_psoc_user_config *user_config; struct wlan_objmgr_psoc_user_config *user_config;
bool skip_dfs_in_p2p_search = false; bool skip_dfs_in_p2p_search = false;
uint8_t band_capability;
QDF_STATUS status;
status = ucfg_mlme_get_band_capability(hdd_ctx->psoc, &band_capability);
if (QDF_IS_STATUS_ERROR(status))
return -EIO;
user_config = qdf_mem_malloc(sizeof(*user_config)); user_config = qdf_mem_malloc(sizeof(*user_config));
if (user_config == NULL) { if (user_config == NULL) {
@@ -9790,7 +9814,7 @@ static int hdd_update_user_config(struct hdd_context *hdd_ctx)
cfg_p2p_get_skip_dfs_channel_p2p_search(hdd_ctx->psoc, cfg_p2p_get_skip_dfs_channel_p2p_search(hdd_ctx->psoc,
&skip_dfs_in_p2p_search); &skip_dfs_in_p2p_search);
user_config->skip_dfs_chnl_in_p2p_search = skip_dfs_in_p2p_search; user_config->skip_dfs_chnl_in_p2p_search = skip_dfs_in_p2p_search;
user_config->band_capability = hdd_ctx->config->nBandCapability; user_config->band_capability = band_capability;
wlan_objmgr_psoc_set_user_config(hdd_ctx->psoc, user_config); wlan_objmgr_psoc_set_user_config(hdd_ctx->psoc, user_config);
qdf_mem_free(user_config); qdf_mem_free(user_config);

View File

@@ -58,6 +58,7 @@ static int populate_oem_data_cap(struct hdd_adapter *adapter,
struct hdd_config *config; struct hdd_config *config;
uint32_t num_chan; uint32_t num_chan;
uint8_t *chan_list; uint8_t *chan_list;
uint8_t band_capability;
struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter); struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
config = hdd_ctx->config; config = hdd_ctx->config;
@@ -65,6 +66,13 @@ static int populate_oem_data_cap(struct hdd_adapter *adapter,
hdd_err("HDD configuration is null"); hdd_err("HDD configuration is null");
return -EINVAL; return -EINVAL;
} }
status = ucfg_mlme_get_band_capability(hdd_ctx->psoc, &band_capability);
if (QDF_IS_STATUS_ERROR(status)) {
hdd_err("Failed to get MLME band capability");
return -EIO;
}
chan_list = qdf_mem_malloc(sizeof(uint8_t) * OEM_CAP_MAX_NUM_CHANNELS); chan_list = qdf_mem_malloc(sizeof(uint8_t) * OEM_CAP_MAX_NUM_CHANNELS);
if (NULL == chan_list) { if (NULL == chan_list) {
hdd_err("Memory allocation failed"); hdd_err("Memory allocation failed");
@@ -87,7 +95,7 @@ static int populate_oem_data_cap(struct hdd_adapter *adapter,
data_cap->curr_dwell_time_max = data_cap->curr_dwell_time_max =
sme_get_neighbor_scan_max_chan_time(hdd_ctx->mac_handle, sme_get_neighbor_scan_max_chan_time(hdd_ctx->mac_handle,
adapter->session_id); adapter->session_id);
data_cap->supported_bands = config->nBandCapability; data_cap->supported_bands = band_capability;
/* request for max num of channels */ /* request for max num of channels */
num_chan = OEM_CAP_MAX_NUM_CHANNELS; num_chan = OEM_CAP_MAX_NUM_CHANNELS;

View File

@@ -207,6 +207,13 @@ void hdd_reset_global_reg_params(void)
static void reg_program_config_vars(struct hdd_context *hdd_ctx, static void reg_program_config_vars(struct hdd_context *hdd_ctx,
struct reg_config_vars *config_vars) struct reg_config_vars *config_vars)
{ {
uint8_t band_capability = 0;
QDF_STATUS status;
status = ucfg_mlme_get_band_capability(hdd_ctx->psoc, &band_capability);
if (QDF_IS_STATUS_ERROR(status))
hdd_err("Failed to get MLME band cap, defaulting to BAND_ALL");
config_vars->enable_11d_support = hdd_ctx->config->Is11dSupportEnabled; config_vars->enable_11d_support = hdd_ctx->config->Is11dSupportEnabled;
config_vars->scan_11d_interval = hdd_ctx->config->scan_11d_interval; config_vars->scan_11d_interval = hdd_ctx->config->scan_11d_interval;
config_vars->userspace_ctry_priority = config_vars->userspace_ctry_priority =
@@ -216,7 +223,7 @@ static void reg_program_config_vars(struct hdd_context *hdd_ctx,
hdd_ctx->config->indoor_channel_support; hdd_ctx->config->indoor_channel_support;
config_vars->force_ssc_disable_indoor_channel = config_vars->force_ssc_disable_indoor_channel =
hdd_ctx->config->force_ssc_disable_indoor_channel; hdd_ctx->config->force_ssc_disable_indoor_channel;
config_vars->band_capability = hdd_ctx->config->nBandCapability; config_vars->band_capability = band_capability;
config_vars->restart_beaconing = hdd_ctx->config-> config_vars->restart_beaconing = hdd_ctx->config->
restart_beaconing_on_chan_avoid_event; restart_beaconing_on_chan_avoid_event;
config_vars->enable_srd_chan_in_master_mode = config_vars->enable_srd_chan_in_master_mode =
@@ -709,6 +716,7 @@ int hdd_reg_set_band(struct net_device *dev, u8 ui_band)
enum band_info currBand; enum band_info currBand;
enum band_info connectedBand; enum band_info connectedBand;
long lrc; long lrc;
uint8_t band_capability;
hdd_ctx = WLAN_HDD_GET_CTX(adapter); hdd_ctx = WLAN_HDD_GET_CTX(adapter);
@@ -729,18 +737,22 @@ int hdd_reg_set_band(struct net_device *dev, u8 ui_band)
hdd_debug("change band to %u", band); hdd_debug("change band to %u", band);
if ((band == BAND_2G && hdd_ctx->config->nBandCapability == 2) || status = ucfg_mlme_get_band_capability(hdd_ctx->psoc, &band_capability);
(band == BAND_5G && hdd_ctx->config->nBandCapability == 1) || if (QDF_IS_STATUS_ERROR(status))
(band == BAND_ALL && hdd_ctx->config->nBandCapability != 0)) { return -EIO;
if ((band == BAND_2G && band_capability == 2) ||
(band == BAND_5G && band_capability == 1) ||
(band == BAND_ALL && band_capability != 0)) {
hdd_err("band value %u violate INI settings %u", hdd_err("band value %u violate INI settings %u",
band, hdd_ctx->config->nBandCapability); band, band_capability);
return -EIO; return -EIO;
} }
if (band == BAND_ALL) { if (band == BAND_ALL) {
hdd_debug("Auto band received. Setting band same as ini value %d", hdd_debug("Auto band received. Setting band same as ini value %d",
hdd_ctx->config->nBandCapability); band_capability);
band = hdd_ctx->config->nBandCapability; band = band_capability;
} }
if (ucfg_reg_get_curr_band(hdd_ctx->pdev, &currBand) != if (ucfg_reg_get_curr_band(hdd_ctx->pdev, &currBand) !=

View File

@@ -3687,6 +3687,8 @@ int wlan_hdd_update_phymode(struct net_device *net, mac_handle_t mac_handle,
enum hdd_dot11_mode hdd_dot11mode = phddctx->config->dot11Mode; enum hdd_dot11_mode hdd_dot11mode = phddctx->config->dot11Mode;
enum band_info curr_band = BAND_ALL; enum band_info curr_band = BAND_ALL;
int retval = 0; int retval = 0;
uint8_t band_capability;
QDF_STATUS status;
old_phymode = sme_get_phy_mode(mac_handle); old_phymode = sme_get_phy_mode(mac_handle);
@@ -3700,11 +3702,17 @@ int wlan_hdd_update_phymode(struct net_device *net, mac_handle_t mac_handle,
nChannelBondingMode5GHz)) nChannelBondingMode5GHz))
ch_bond5g = true; ch_bond5g = true;
if (phddctx->config->nBandCapability == BAND_ALL) status = wlan_mlme_get_band_capability(phddctx->psoc, &band_capability);
if (QDF_IS_STATUS_ERROR(status)) {
hdd_err("Failed to get MLME Band capability");
return -EIO;
}
if (band_capability == BAND_ALL)
band_24 = band_5g = true; band_24 = band_5g = true;
else if (phddctx->config->nBandCapability == BAND_2G) else if (band_capability == BAND_2G)
band_24 = true; band_24 = true;
else if (phddctx->config->nBandCapability == BAND_5G) else if (band_capability == BAND_5G)
band_5g = true; band_5g = true;
vhtchanwidth = phddctx->config->vhtChannelWidth; vhtchanwidth = phddctx->config->vhtChannelWidth;
@@ -3928,8 +3936,13 @@ int wlan_hdd_update_phymode(struct net_device *net, mac_handle_t mac_handle,
} }
} }
#endif #endif
sme_config->csrConfig.eBand = curr_band; status = ucfg_mlme_set_band_capability(phddctx->psoc,
sme_config->csrConfig.bandCapability = curr_band; curr_band);
if (QDF_IS_STATUS_ERROR(status)) {
hdd_err("failed to set MLME band capability");
goto free;
}
if (curr_band == BAND_2G) if (curr_band == BAND_2G)
sme_config->csrConfig.Is11hSupportEnabled = 0; sme_config->csrConfig.Is11hSupportEnabled = 0;
else else

View File

@@ -878,7 +878,7 @@ static QDF_STATUS lim_send_tdls_dis_rsp_frame(tpAniSirGlobal pMac,
&tdlsDisRsp.SuppChannels, &tdlsDisRsp.SuppChannels,
&tdlsDisRsp. &tdlsDisRsp.
SuppOperatingClasses); SuppOperatingClasses);
if (pMac->roam.configParam.bandCapability != BAND_2G) { if (pMac->mlme_cfg->gen.band_capability != BAND_2G) {
tdlsDisRsp.ht2040_bss_coexistence.present = 1; tdlsDisRsp.ht2040_bss_coexistence.present = 1;
tdlsDisRsp.ht2040_bss_coexistence.info_request = 1; tdlsDisRsp.ht2040_bss_coexistence.info_request = 1;
} }
@@ -1243,7 +1243,7 @@ QDF_STATUS lim_send_tdls_link_setup_req_frame(tpAniSirGlobal pMac,
&tdlsSetupReq.SuppChannels, &tdlsSetupReq.SuppChannels,
&tdlsSetupReq. &tdlsSetupReq.
SuppOperatingClasses); SuppOperatingClasses);
if (pMac->roam.configParam.bandCapability != BAND_2G) { if (pMac->mlme_cfg->gen.band_capability != BAND_2G) {
tdlsSetupReq.ht2040_bss_coexistence.present = 1; tdlsSetupReq.ht2040_bss_coexistence.present = 1;
tdlsSetupReq.ht2040_bss_coexistence.info_request = 1; tdlsSetupReq.ht2040_bss_coexistence.info_request = 1;
} }
@@ -1694,7 +1694,7 @@ static QDF_STATUS lim_send_tdls_setup_rsp_frame(tpAniSirGlobal pMac,
&tdlsSetupRsp.SuppChannels, &tdlsSetupRsp.SuppChannels,
&tdlsSetupRsp. &tdlsSetupRsp.
SuppOperatingClasses); SuppOperatingClasses);
if (pMac->roam.configParam.bandCapability != BAND_2G) { if (pMac->mlme_cfg->gen.band_capability != BAND_2G) {
tdlsSetupRsp.ht2040_bss_coexistence.present = 1; tdlsSetupRsp.ht2040_bss_coexistence.present = 1;
tdlsSetupRsp.ht2040_bss_coexistence.info_request = 1; tdlsSetupRsp.ht2040_bss_coexistence.info_request = 1;
} }

View File

@@ -1046,9 +1046,7 @@ typedef struct tagCsrConfigParam {
uint32_t channelBondingMode24GHz; uint32_t channelBondingMode24GHz;
uint32_t channelBondingMode5GHz; uint32_t channelBondingMode5GHz;
eCsrPhyMode phyMode; eCsrPhyMode phyMode;
enum band_info eBand;
uint32_t HeartbeatThresh50; uint32_t HeartbeatThresh50;
enum band_info bandCapability; /* indicate hw capability */
eCsrRoamWmmUserModeType WMMSupportMode; eCsrRoamWmmUserModeType WMMSupportMode;
bool Is11eSupportEnabled; bool Is11eSupportEnabled;
bool Is11dSupportEnabled; bool Is11dSupportEnabled;

View File

@@ -1680,7 +1680,6 @@ static void init_config_param(tpAniSirGlobal pMac)
WNI_CFG_CHANNEL_BONDING_MODE_ENABLE; WNI_CFG_CHANNEL_BONDING_MODE_ENABLE;
pMac->roam.configParam.phyMode = eCSR_DOT11_MODE_AUTO; pMac->roam.configParam.phyMode = eCSR_DOT11_MODE_AUTO;
pMac->roam.configParam.eBand = BAND_ALL;
pMac->roam.configParam.uCfgDot11Mode = eCSR_CFG_DOT11_MODE_AUTO; pMac->roam.configParam.uCfgDot11Mode = eCSR_CFG_DOT11_MODE_AUTO;
pMac->roam.configParam.HeartbeatThresh24 = 40; pMac->roam.configParam.HeartbeatThresh24 = 40;
pMac->roam.configParam.HeartbeatThresh50 = 40; pMac->roam.configParam.HeartbeatThresh50 = 40;
@@ -1760,7 +1759,7 @@ enum band_info csr_get_current_band(tHalHandle hHal)
{ {
tpAniSirGlobal pMac = PMAC_STRUCT(hHal); tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
return pMac->roam.configParam.bandCapability; return pMac->mlme_cfg->gen.band_capability;
} }
/* This function flushes the roam scan cache */ /* This function flushes the roam scan cache */
@@ -2277,8 +2276,8 @@ QDF_STATUS csr_set_band(tHalHandle hHal, uint8_t sessionId,
} }
QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_DEBUG, QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_DEBUG,
"Band changed to %u (0 - ALL, 1 - 2.4 GHZ, 2 - 5GHZ)", eBand); "Band changed to %u (0 - ALL, 1 - 2.4 GHZ, 2 - 5GHZ)", eBand);
pMac->roam.configParam.eBand = eBand; pMac->mlme_cfg->gen.band_capability = eBand;
pMac->roam.configParam.bandCapability = eBand; pMac->mlme_cfg->gen.band = eBand;
status = csr_get_channel_and_power_list(pMac); status = csr_get_channel_and_power_list(pMac);
if (QDF_STATUS_SUCCESS == status) if (QDF_STATUS_SUCCESS == status)
@@ -2778,8 +2777,12 @@ QDF_STATUS csr_change_default_config_param(tpAniSirGlobal pMac,
pParam->Is11eSupportEnabled; pParam->Is11eSupportEnabled;
pMac->roam.configParam.Is11dSupportEnabled = pMac->roam.configParam.Is11dSupportEnabled =
pParam->Is11dSupportEnabled; pParam->Is11dSupportEnabled;
pMac->roam.configParam.Is11hSupportEnabled =
pParam->Is11hSupportEnabled; if (pMac->mlme_cfg->gen.band_capability == BAND_2G)
pMac->roam.configParam.Is11hSupportEnabled = 0;
else
pMac->roam.configParam.Is11hSupportEnabled =
pParam->Is11hSupportEnabled;
pMac->roam.configParam.fenableMCCMode = pParam->fEnableMCCMode; pMac->roam.configParam.fenableMCCMode = pParam->fEnableMCCMode;
pMac->roam.configParam.mcc_rts_cts_prot_enable = pMac->roam.configParam.mcc_rts_cts_prot_enable =
@@ -2818,7 +2821,6 @@ QDF_STATUS csr_change_default_config_param(tpAniSirGlobal pMac,
pParam->ProprietaryRatesEnabled; pParam->ProprietaryRatesEnabled;
pMac->roam.configParam.AdHocChannel24 = pParam->AdHocChannel24; pMac->roam.configParam.AdHocChannel24 = pParam->AdHocChannel24;
pMac->roam.configParam.AdHocChannel5G = pParam->AdHocChannel5G; pMac->roam.configParam.AdHocChannel5G = pParam->AdHocChannel5G;
pMac->roam.configParam.bandCapability = pParam->bandCapability;
pMac->roam.configParam.wep_tkip_in_he = pParam->wep_tkip_in_he; pMac->roam.configParam.wep_tkip_in_he = pParam->wep_tkip_in_he;
pMac->roam.configParam.neighborRoamConfig. pMac->roam.configParam.neighborRoamConfig.
delay_before_vdev_stop = delay_before_vdev_stop =
@@ -2867,7 +2869,6 @@ QDF_STATUS csr_change_default_config_param(tpAniSirGlobal pMac,
pParam->min_rest_time_conc; pParam->min_rest_time_conc;
pMac->roam.configParam.idle_time_conc = pParam->idle_time_conc; pMac->roam.configParam.idle_time_conc = pParam->idle_time_conc;
pMac->roam.configParam.eBand = pParam->eBand;
pMac->roam.configParam.uCfgDot11Mode = pMac->roam.configParam.uCfgDot11Mode =
csr_get_cfg_dot11_mode_from_csr_phy_mode(NULL, csr_get_cfg_dot11_mode_from_csr_phy_mode(NULL,
pMac->roam.configParam. pMac->roam.configParam.
@@ -3209,7 +3210,6 @@ QDF_STATUS csr_get_config_param(tpAniSirGlobal pMac, tCsrConfigParam *pParam)
pParam->ProprietaryRatesEnabled = cfg_params->ProprietaryRatesEnabled; pParam->ProprietaryRatesEnabled = cfg_params->ProprietaryRatesEnabled;
pParam->AdHocChannel24 = cfg_params->AdHocChannel24; pParam->AdHocChannel24 = cfg_params->AdHocChannel24;
pParam->AdHocChannel5G = cfg_params->AdHocChannel5G; pParam->AdHocChannel5G = cfg_params->AdHocChannel5G;
pParam->bandCapability = cfg_params->bandCapability;
pParam->nActiveMaxChnTime = cfg_params->nActiveMaxChnTime; pParam->nActiveMaxChnTime = cfg_params->nActiveMaxChnTime;
pParam->nPassiveMaxChnTime = cfg_params->nPassiveMaxChnTime; pParam->nPassiveMaxChnTime = cfg_params->nPassiveMaxChnTime;
pParam->nActiveMaxChnTimeConc = cfg_params->nActiveMaxChnTimeConc; pParam->nActiveMaxChnTimeConc = cfg_params->nActiveMaxChnTimeConc;
@@ -3219,7 +3219,6 @@ QDF_STATUS csr_get_config_param(tpAniSirGlobal pMac, tCsrConfigParam *pParam)
pParam->nRestTimeConc = cfg_params->nRestTimeConc; pParam->nRestTimeConc = cfg_params->nRestTimeConc;
pParam->min_rest_time_conc = cfg_params->min_rest_time_conc; pParam->min_rest_time_conc = cfg_params->min_rest_time_conc;
pParam->idle_time_conc = cfg_params->idle_time_conc; pParam->idle_time_conc = cfg_params->idle_time_conc;
pParam->eBand = cfg_params->eBand;
pParam->nScanResultAgeCount = cfg_params->agingCount; pParam->nScanResultAgeCount = cfg_params->agingCount;
pParam->bCatRssiOffset = cfg_params->bCatRssiOffset; pParam->bCatRssiOffset = cfg_params->bCatRssiOffset;
pParam->fSupplicantCountryCodeHasPriority = pParam->fSupplicantCountryCodeHasPriority =
@@ -3464,7 +3463,7 @@ QDF_STATUS csr_set_phy_mode(tHalHandle hHal, uint32_t phyMode,
/* Done validating */ /* Done validating */
status = QDF_STATUS_SUCCESS; status = QDF_STATUS_SUCCESS;
/* Now we need to check whether a restart is needed. */ /* Now we need to check whether a restart is needed. */
if (eBand != pMac->roam.configParam.eBand) { if (eBand != pMac->mlme_cfg->gen.band) {
fRestartNeeded = true; fRestartNeeded = true;
goto end; goto end;
} }
@@ -3474,7 +3473,7 @@ QDF_STATUS csr_set_phy_mode(tHalHandle hHal, uint32_t phyMode,
} }
end: end:
if (QDF_IS_STATUS_SUCCESS(status)) { if (QDF_IS_STATUS_SUCCESS(status)) {
pMac->roam.configParam.eBand = eBand; pMac->mlme_cfg->gen.band = eBand;
pMac->roam.configParam.phyMode = newPhyMode; pMac->roam.configParam.phyMode = newPhyMode;
if (pfRestartNeeded) if (pfRestartNeeded)
*pfRestartNeeded = fRestartNeeded; *pfRestartNeeded = fRestartNeeded;
@@ -4709,7 +4708,7 @@ QDF_STATUS csr_roam_prepare_bss_config_from_profile(
pProfile->EncryptionType.encryptionType[0]) pProfile->EncryptionType.encryptionType[0])
pBssConfig->BssCap.privacy = 1; pBssConfig->BssCap.privacy = 1;
pBssConfig->eBand = pMac->roam.configParam.eBand; pBssConfig->eBand = pMac->mlme_cfg->gen.band;
/* phymode */ /* phymode */
if (pProfile->ChannelInfo.ChannelList) if (pProfile->ChannelInfo.ChannelList)
operationChannel = pProfile->ChannelInfo.ChannelList[0]; operationChannel = pProfile->ChannelInfo.ChannelList[0];
@@ -13209,7 +13208,7 @@ csr_compute_mode_and_band(tpAniSirGlobal mac_ctx,
* to determine the Mode setting. * to determine the Mode setting.
*/ */
if (eCSR_OPERATING_CHANNEL_AUTO == opr_ch) { if (eCSR_OPERATING_CHANNEL_AUTO == opr_ch) {
*band = mac_ctx->roam.configParam.eBand; *band = mac_ctx->mlme_cfg->gen.band;
if (BAND_2G == *band) { if (BAND_2G == *band) {
/* /*
* See reason in else if ( WLAN_REG_IS_24GHZ_CH * See reason in else if ( WLAN_REG_IS_24GHZ_CH
@@ -13294,7 +13293,7 @@ enum csr_cfgdot11mode curr_mode = mac_ctx->roam.configParam.uCfgDot11Mode;
/* dot11 mode is set, lets pick the band */ /* dot11 mode is set, lets pick the band */
if (eCSR_OPERATING_CHANNEL_AUTO == opr_chn) { if (eCSR_OPERATING_CHANNEL_AUTO == opr_chn) {
/* channel is Auto also. */ /* channel is Auto also. */
band = mac_ctx->roam.configParam.eBand; band = mac_ctx->mlme_cfg->gen.band;
if (BAND_ALL == band) { if (BAND_ALL == band) {
/* prefer 5GHz */ /* prefer 5GHz */
band = BAND_5G; band = BAND_5G;
@@ -18299,7 +18298,7 @@ csr_fetch_ch_lst_from_ini(tpAniSirGlobal mac_ctx,
* The INI channels need to be filtered with respect to the current band * The INI channels need to be filtered with respect to the current band
* that is supported. * that is supported.
*/ */
band = mac_ctx->roam.configParam.bandCapability; band = mac_ctx->mlme_cfg->gen.band_capability;
if ((BAND_2G != band) && (BAND_5G != band) if ((BAND_2G != band) && (BAND_5G != band)
&& (BAND_ALL != band)) { && (BAND_ALL != band)) {
QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_ERROR, QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_ERROR,

View File

@@ -1793,7 +1793,7 @@ uint32_t csr_translate_to_wni_cfg_dot11_mode(tpAniSirGlobal pMac,
break; break;
default: default:
sme_warn("doesn't expect %d as csrDo11Mode", csrDot11Mode); sme_warn("doesn't expect %d as csrDo11Mode", csrDot11Mode);
if (BAND_2G == pMac->roam.configParam.eBand) if (BAND_2G == pMac->mlme_cfg->gen.band)
ret = WNI_CFG_DOT11_MODE_11G; ret = WNI_CFG_DOT11_MODE_11G;
else else
ret = WNI_CFG_DOT11_MODE_11A; ret = WNI_CFG_DOT11_MODE_11A;
@@ -2162,7 +2162,7 @@ enum csr_cfgdot11mode csr_find_best_phy_mode(tpAniSirGlobal pMac,
uint32_t phyMode) uint32_t phyMode)
{ {
enum csr_cfgdot11mode cfgDot11ModeToUse; enum csr_cfgdot11mode cfgDot11ModeToUse;
enum band_info eBand = pMac->roam.configParam.eBand; enum band_info eBand = pMac->mlme_cfg->gen.band;
if ((0 == phyMode) || if ((0 == phyMode) ||
(eCSR_DOT11_MODE_AUTO & phyMode) || (eCSR_DOT11_MODE_AUTO & phyMode) ||

View File

@@ -1538,9 +1538,9 @@ static void wma_process_cli_set_cmd(tp_wma_handle wma,
break; break;
case WMI_PDEV_PARAM_TXPOWER_LIMIT2G: case WMI_PDEV_PARAM_TXPOWER_LIMIT2G:
wma->pdevconfig.txpow2g = privcmd->param_value; wma->pdevconfig.txpow2g = privcmd->param_value;
if ((pMac->roam.configParam.bandCapability == if ((pMac->mlme_cfg->gen.band_capability ==
BAND_ALL) || BAND_ALL) ||
(pMac->roam.configParam.bandCapability == (pMac->mlme_cfg->gen.band_capability ==
BAND_2G)) { BAND_2G)) {
if (cfg_set_int(pMac, if (cfg_set_int(pMac,
WNI_CFG_CURRENT_TX_POWER_LEVEL, WNI_CFG_CURRENT_TX_POWER_LEVEL,
@@ -1554,9 +1554,9 @@ static void wma_process_cli_set_cmd(tp_wma_handle wma,
break; break;
case WMI_PDEV_PARAM_TXPOWER_LIMIT5G: case WMI_PDEV_PARAM_TXPOWER_LIMIT5G:
wma->pdevconfig.txpow5g = privcmd->param_value; wma->pdevconfig.txpow5g = privcmd->param_value;
if ((pMac->roam.configParam.bandCapability == if ((pMac->mlme_cfg->gen.band_capability ==
BAND_ALL) || BAND_ALL) ||
(pMac->roam.configParam.bandCapability == (pMac->mlme_cfg->gen.band_capability ==
BAND_5G)) { BAND_5G)) {
if (cfg_set_int(pMac, if (cfg_set_int(pMac,
WNI_CFG_CURRENT_TX_POWER_LEVEL, WNI_CFG_CURRENT_TX_POWER_LEVEL,