qcacld-3.0: Add INI support for number of vdevs

new INI gNumVdevs is added to allow number of VDEV support
for both Host and FW. Also Updated logic to calculate num_peers
and num_tids.

Change-Id: Ife5ff24e9594c8986913c06899ac5e41c83fc75c
CRs-Fixed: 2245506
This commit is contained in:
Rachit Kankane
2018-05-16 18:59:28 +05:30
committed by nshrivas
parent c1cdb710bf
commit 0106e38412
8 changed files with 83 additions and 62 deletions

4
Kbuild
View File

@@ -1954,6 +1954,10 @@ ifdef CONFIG_CFG_PMO_WOW_FILTERS_MAX
ccflags-y += -DPMO_WOW_FILTERS_MAX=$(CONFIG_CFG_PMO_WOW_FILTERS_MAX) ccflags-y += -DPMO_WOW_FILTERS_MAX=$(CONFIG_CFG_PMO_WOW_FILTERS_MAX)
endif endif
ifdef CONFIG_CFG_NUM_OF_ADDITIONAL_FW_PEERS
ccflags-y += -DNUM_OF_ADDITIONAL_FW_PEERS=$(CONFIG_CFG_NUM_OF_ADDITIONAL_FW_PEERS)
endif
KBUILD_CPPFLAGS += $(cppflags-y) KBUILD_CPPFLAGS += $(cppflags-y)
# Currently, for versions of gcc which support it, the kernel Makefile # Currently, for versions of gcc which support it, the kernel Makefile

View File

@@ -178,4 +178,6 @@ endif
# WoW filter configs # WoW filter configs
CONFIG_CFG_PMO_WOW_FILTERS_MAX := 16 CONFIG_CFG_PMO_WOW_FILTERS_MAX := 16
# Additional peers sent to firmware
CONFIG_CFG_NUM_OF_ADDITIONAL_FW_PEERS := 0
################################### ###################################

View File

@@ -185,4 +185,6 @@ CONFIG_CFG_NUM_RX_IND_RECORD := 1024
# WoW filer configs # WoW filer configs
CONFIG_CFG_PMO_WOW_FILTERS_MAX := 16 CONFIG_CFG_PMO_WOW_FILTERS_MAX := 16
# Additional peers sent to firmware
CONFIG_CFG_NUM_OF_ADDITIONAL_FW_PEERS := 0
################################### ###################################

View File

@@ -110,6 +110,7 @@ enum active_bpf_mode {
* @rps_enabled: RPS enabled in SAP mode * @rps_enabled: RPS enabled in SAP mode
* @delay_before_vdev_stop: wait time for tx complete before vdev stop * @delay_before_vdev_stop: wait time for tx complete before vdev stop
* Structure for holding cds ini parameters. * Structure for holding cds ini parameters.
* @num_vdevs: Configured max number of VDEVs can be supported in the stack.
*/ */
struct cds_config_info { struct cds_config_info {
@@ -169,6 +170,7 @@ struct cds_config_info {
uint8_t bandcapability; uint8_t bandcapability;
bool rps_enabled; bool rps_enabled;
uint8_t delay_before_vdev_stop; uint8_t delay_before_vdev_stop;
uint32_t num_vdevs;
}; };
#ifdef WLAN_FEATURE_FILS_SK #ifdef WLAN_FEATURE_FILS_SK

View File

@@ -14186,6 +14186,23 @@ enum hdd_external_acs_policy {
#define CFG_ENABLE_SECONDARY_RATE_MAX (0x3F) #define CFG_ENABLE_SECONDARY_RATE_MAX (0x3F)
#define CFG_ENABLE_SECONDARY_RATE_DEFAULT (0x17) #define CFG_ENABLE_SECONDARY_RATE_DEFAULT (0x17)
/*
* <ini>
* gNumVdevs - max number of VDEVs supported
*
* @Min: 0x1
* @Max: 0x4
* @Default: CFG_TGT_NUM_VDEV
*
* Usage: External
*
* </ini>
*/
#define CFG_NUM_VDEV_ENABLE_NAME "gNumVdevs"
#define CFG_NUM_VDEV_ENABLE_MIN (0x1)
#define CFG_NUM_VDEV_ENABLE_MAX (0x4)
#define CFG_NUM_VDEV_ENABLE_DEFAULT (CFG_TGT_NUM_VDEV)
/* /*
* Type declarations * Type declarations
*/ */
@@ -15049,11 +15066,13 @@ struct hdd_config {
#ifdef WLAN_FEATURE_SAE #ifdef WLAN_FEATURE_SAE
bool is_sae_enabled; bool is_sae_enabled;
#endif #endif
bool enable_dtim_selection_diversity;
bool gcmp_enabled;
bool is_11k_offload_supported;
uint32_t btm_solicited_timeout; uint32_t btm_solicited_timeout;
uint32_t btm_max_attempt_cnt; uint32_t btm_max_attempt_cnt;
uint32_t btm_sticky_time; uint32_t btm_sticky_time;
bool gcmp_enabled; uint32_t num_vdevs;
bool is_11k_offload_supported;
uint32_t offload_11k_enable_bitmask; uint32_t offload_11k_enable_bitmask;
uint32_t neighbor_report_offload_params_bitmask; uint32_t neighbor_report_offload_params_bitmask;
uint32_t neighbor_report_offload_time_offset; uint32_t neighbor_report_offload_time_offset;
@@ -15062,9 +15081,8 @@ struct hdd_config {
uint32_t neighbor_report_offload_per_threshold_offset; uint32_t neighbor_report_offload_per_threshold_offset;
uint32_t neighbor_report_offload_cache_timeout; uint32_t neighbor_report_offload_cache_timeout;
uint32_t neighbor_report_offload_max_req_cap; uint32_t neighbor_report_offload_max_req_cap;
uint16_t wmi_wq_watchdog_timeout;
bool enable_dtim_selection_diversity;
uint32_t channel_select_logic_conc; uint32_t channel_select_logic_conc;
uint16_t wmi_wq_watchdog_timeout;
bool enable_bt_chain_separation; bool enable_bt_chain_separation;
uint8_t enable_tx_sch_delay; uint8_t enable_tx_sch_delay;
uint32_t enable_secondary_rate; uint32_t enable_secondary_rate;

View File

@@ -5405,6 +5405,13 @@ struct reg_table_entry g_registry_table[] = {
CFG_ROAM_FORCE_RSSI_TRIGGER_MIN, CFG_ROAM_FORCE_RSSI_TRIGGER_MIN,
CFG_ROAM_FORCE_RSSI_TRIGGER_MAX), CFG_ROAM_FORCE_RSSI_TRIGGER_MAX),
REG_VARIABLE(CFG_NUM_VDEV_ENABLE_NAME,
WLAN_PARAM_HexInteger,
struct hdd_config, num_vdevs,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
CFG_NUM_VDEV_ENABLE_DEFAULT,
CFG_NUM_VDEV_ENABLE_MIN,
CFG_NUM_VDEV_ENABLE_MAX),
}; };
@@ -7276,6 +7283,8 @@ void hdd_cfg_print(struct hdd_context *hdd_ctx)
hdd_ctx->config->btm_max_attempt_cnt); hdd_ctx->config->btm_max_attempt_cnt);
hdd_debug("Name = [btm_sticky_time] value = [0x%x]", hdd_debug("Name = [btm_sticky_time] value = [0x%x]",
hdd_ctx->config->btm_sticky_time); hdd_ctx->config->btm_sticky_time);
hdd_debug("Name = [num_vdevs] value = [0x%x]",
hdd_ctx->config->num_vdevs);
hdd_debug("Name = [%s] value = [%d]", hdd_debug("Name = [%s] value = [%d]",
CFG_ENABLE_GCMP_NAME, CFG_ENABLE_GCMP_NAME,
hdd_ctx->config->gcmp_enabled); hdd_ctx->config->gcmp_enabled);

View File

@@ -9262,6 +9262,7 @@ static int hdd_update_cds_config(struct hdd_context *hdd_ctx)
cds_cfg->bandcapability = hdd_ctx->config->nBandCapability; cds_cfg->bandcapability = hdd_ctx->config->nBandCapability;
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;
hdd_ra_populate_cds_config(cds_cfg, hdd_ctx); hdd_ra_populate_cds_config(cds_cfg, hdd_ctx);
hdd_txrx_populate_cds_config(cds_cfg, hdd_ctx); hdd_txrx_populate_cds_config(cds_cfg, hdd_ctx);

View File

@@ -177,28 +177,8 @@ struct wma_ini_config *wma_get_ini_handle(tp_wma_handle wma)
*/ */
static uint8_t wma_get_number_of_peers_supported(tp_wma_handle wma) static uint8_t wma_get_number_of_peers_supported(tp_wma_handle wma)
{ {
struct hif_target_info *tgt_info;
struct wma_ini_config *cfg = wma_get_ini_handle(wma); struct wma_ini_config *cfg = wma_get_ini_handle(wma);
uint8_t max_no_of_peers = cfg ? cfg->max_no_of_peers : MIN_NO_OF_PEERS; uint8_t max_no_of_peers = cfg ? cfg->max_no_of_peers : MIN_NO_OF_PEERS;
struct hif_opaque_softc *scn = cds_get_context(QDF_MODULE_ID_HIF);
if (!scn) {
WMA_LOGE("%s: Invalid wma handle", __func__);
return 0;
}
tgt_info = hif_get_target_info_handle(scn);
switch (tgt_info->target_version) {
case AR6320_REV1_1_VERSION:
if (max_no_of_peers > MAX_SUPPORTED_PEERS_REV1_1)
max_no_of_peers = MAX_SUPPORTED_PEERS_REV1_1;
break;
default:
if (max_no_of_peers > MAX_SUPPORTED_PEERS_REV1_3)
max_no_of_peers = MAX_SUPPORTED_PEERS_REV1_3;
break;
}
return max_no_of_peers; return max_no_of_peers;
} }
@@ -210,14 +190,16 @@ static uint8_t wma_get_number_of_peers_supported(tp_wma_handle wma)
* Return: Max number of tids supported * Return: Max number of tids supported
*/ */
#if defined(CONFIG_HL_SUPPORT) #if defined(CONFIG_HL_SUPPORT)
static uint32_t wma_get_number_of_tids_supported(uint8_t no_of_peers_supported) static uint32_t wma_get_number_of_tids_supported(uint8_t no_of_peers_supported,
uint8_t num_vdevs)
{ {
return 4 * no_of_peers_supported; return 4 * no_of_peers_supported;
} }
#else #else
static uint32_t wma_get_number_of_tids_supported(uint8_t no_of_peers_supported) static uint32_t wma_get_number_of_tids_supported(uint8_t no_of_peers_supported,
uint8_t num_vdevs)
{ {
return 2 * (no_of_peers_supported + CFG_TGT_NUM_VDEV + 2); return 2 * (no_of_peers_supported + num_vdevs + 2);
} }
#endif #endif
@@ -235,6 +217,10 @@ static void wma_reset_rx_decap_mode(target_resource_config *tgt_cfg)
{ {
} }
#endif
#ifndef NUM_OF_ADDITIONAL_FW_PEERS
#define NUM_OF_ADDITIONAL_FW_PEERS 2
#endif #endif
/** /**
* wma_set_default_tgt_config() - set default tgt config * wma_set_default_tgt_config() - set default tgt config
@@ -244,17 +230,27 @@ static void wma_reset_rx_decap_mode(target_resource_config *tgt_cfg)
* Return: none * Return: none
*/ */
static void wma_set_default_tgt_config(tp_wma_handle wma_handle, static void wma_set_default_tgt_config(tp_wma_handle wma_handle,
target_resource_config *tgt_cfg) target_resource_config *tgt_cfg,
struct cds_config_info *cds_cfg)
{ {
uint8_t no_of_peers_supported; uint8_t no_of_peers_supported;
no_of_peers_supported = wma_get_number_of_peers_supported(wma_handle);
qdf_mem_zero(tgt_cfg, sizeof(target_resource_config)); qdf_mem_zero(tgt_cfg, sizeof(target_resource_config));
tgt_cfg->num_vdevs = CFG_TGT_NUM_VDEV; tgt_cfg->num_vdevs = cds_cfg->num_vdevs;
tgt_cfg->num_peers = CFG_TGT_NUM_PEERS + CFG_TGT_NUM_VDEV + 2; tgt_cfg->num_peers = no_of_peers_supported +
tgt_cfg->num_offload_peers = CFG_TGT_NUM_OFFLOAD_PEERS; cds_cfg->num_vdevs +
tgt_cfg->num_offload_reorder_buffs = CFG_TGT_NUM_OFFLOAD_REORDER_BUFFS; NUM_OF_ADDITIONAL_FW_PEERS;
/* The current firmware implementation requires the number of
* offload peers should be (number of vdevs + 1).
*/
tgt_cfg->num_offload_peers = cds_cfg->ap_maxoffload_peers + 1;
tgt_cfg->num_offload_reorder_buffs =
cds_cfg->ap_maxoffload_reorderbuffs + 1;
tgt_cfg->num_peer_keys = CFG_TGT_NUM_PEER_KEYS; tgt_cfg->num_peer_keys = CFG_TGT_NUM_PEER_KEYS;
tgt_cfg->num_tids = CFG_TGT_NUM_TIDS; tgt_cfg->num_tids = wma_get_number_of_tids_supported(
no_of_peers_supported, cds_cfg->num_vdevs);
tgt_cfg->ast_skid_limit = CFG_TGT_AST_SKID_LIMIT; tgt_cfg->ast_skid_limit = CFG_TGT_AST_SKID_LIMIT;
tgt_cfg->tx_chain_mask = CFG_TGT_DEFAULT_TX_CHAIN_MASK; tgt_cfg->tx_chain_mask = CFG_TGT_DEFAULT_TX_CHAIN_MASK;
tgt_cfg->rx_chain_mask = CFG_TGT_DEFAULT_RX_CHAIN_MASK; tgt_cfg->rx_chain_mask = CFG_TGT_DEFAULT_RX_CHAIN_MASK;
@@ -263,7 +259,7 @@ static void wma_set_default_tgt_config(tp_wma_handle wma_handle,
tgt_cfg->rx_timeout_pri[2] = CFG_TGT_RX_TIMEOUT_LO_PRI; tgt_cfg->rx_timeout_pri[2] = CFG_TGT_RX_TIMEOUT_LO_PRI;
tgt_cfg->rx_timeout_pri[3] = CFG_TGT_RX_TIMEOUT_HI_PRI; tgt_cfg->rx_timeout_pri[3] = CFG_TGT_RX_TIMEOUT_HI_PRI;
tgt_cfg->rx_decap_mode = CFG_TGT_RX_DECAP_MODE; tgt_cfg->rx_decap_mode = CFG_TGT_RX_DECAP_MODE;
tgt_cfg->scan_max_pending_req = CFG_TGT_DEFAULT_SCAN_MAX_REQS; tgt_cfg->scan_max_pending_req = wma_handle->max_scan;
tgt_cfg->bmiss_offload_max_vdev = tgt_cfg->bmiss_offload_max_vdev =
CFG_TGT_DEFAULT_BMISS_OFFLOAD_MAX_VDEV; CFG_TGT_DEFAULT_BMISS_OFFLOAD_MAX_VDEV;
tgt_cfg->roam_offload_max_vdev = CFG_TGT_DEFAULT_ROAM_OFFLOAD_MAX_VDEV; tgt_cfg->roam_offload_max_vdev = CFG_TGT_DEFAULT_ROAM_OFFLOAD_MAX_VDEV;
@@ -290,7 +286,7 @@ static void wma_set_default_tgt_config(tp_wma_handle wma_handle,
tgt_cfg->num_multicast_filter_entries = tgt_cfg->num_multicast_filter_entries =
CFG_TGT_MAX_MULTICAST_FILTER_ENTRIES; CFG_TGT_MAX_MULTICAST_FILTER_ENTRIES;
tgt_cfg->num_wow_filters = 0; tgt_cfg->num_wow_filters = 0;
tgt_cfg->num_keep_alive_pattern = 0; tgt_cfg->num_keep_alive_pattern = WMA_MAXNUM_PERIODIC_TX_PTRNS;
tgt_cfg->keep_alive_pattern_size = 0; tgt_cfg->keep_alive_pattern_size = 0;
tgt_cfg->max_tdls_concurrent_sleep_sta = tgt_cfg->max_tdls_concurrent_sleep_sta =
CFG_TGT_NUM_TDLS_CONC_SLEEP_STAS; CFG_TGT_NUM_TDLS_CONC_SLEEP_STAS;
@@ -301,11 +297,6 @@ static void wma_set_default_tgt_config(tp_wma_handle wma_handle,
tgt_cfg->num_ocb_channels = CFG_TGT_NUM_OCB_CHANNELS; tgt_cfg->num_ocb_channels = CFG_TGT_NUM_OCB_CHANNELS;
tgt_cfg->num_ocb_schedules = CFG_TGT_NUM_OCB_SCHEDULES; tgt_cfg->num_ocb_schedules = CFG_TGT_NUM_OCB_SCHEDULES;
no_of_peers_supported = wma_get_number_of_peers_supported(wma_handle);
tgt_cfg->num_peers = no_of_peers_supported + CFG_TGT_NUM_VDEV + 2;
tgt_cfg->num_tids = wma_get_number_of_tids_supported(
no_of_peers_supported);
tgt_cfg->scan_max_pending_req = wma_handle->max_scan;
tgt_cfg->mgmt_comp_evt_bundle_support = true; tgt_cfg->mgmt_comp_evt_bundle_support = true;
tgt_cfg->tx_msdu_new_partition_id_support = true; tgt_cfg->tx_msdu_new_partition_id_support = true;
@@ -1931,17 +1922,25 @@ static void wma_set_nan_enable(tp_wma_handle wma_handle,
* *
* Return: void * Return: void
*/ */
static void wma_init_max_no_of_peers(tp_wma_handle wma_handle, static uint8_t wma_init_max_no_of_peers(tp_wma_handle wma_handle,
uint16_t max_peers) uint16_t max_peers)
{ {
struct wma_ini_config *cfg = wma_get_ini_handle(wma_handle); struct wma_ini_config *cfg = wma_get_ini_handle(wma_handle);
struct hif_opaque_softc *scn = cds_get_context(QDF_MODULE_ID_HIF);
uint32_t tgt_version = hif_get_target_info_handle(scn)->target_version;
uint8_t max_no_of_peers;
uint8_t max_supported_peers = (tgt_version == AR6320_REV1_1_VERSION) ?
MAX_SUPPORTED_PEERS_REV1_1 : MAX_SUPPORTED_PEERS_REV1_3;
if (cfg == NULL) { if (cfg == NULL) {
WMA_LOGE("%s: NULL WMA ini handle", __func__); WMA_LOGE("%s: NULL WMA ini handle", __func__);
return; return 0;
} }
cfg->max_no_of_peers = max_peers; max_no_of_peers = (max_peers > max_supported_peers) ?
max_supported_peers : max_peers;
cfg->max_no_of_peers = max_no_of_peers;
return max_no_of_peers;
} }
/** /**
@@ -3186,11 +3185,8 @@ QDF_STATUS wma_open(struct wlan_objmgr_psoc *psoc,
init_deinit_register_tgt_psoc_ev_handlers(psoc); init_deinit_register_tgt_psoc_ev_handlers(psoc);
/* Initialize max_no_of_peers for wma_get_number_of_peers_supported() */ /* Initialize max_no_of_peers for wma_get_number_of_peers_supported() */
wma_init_max_no_of_peers(wma_handle, cds_cfg->max_station); cds_cfg->max_station = wma_init_max_no_of_peers(wma_handle,
/* Cap maxStation based on the target version */ cds_cfg->max_station);
cds_cfg->max_station = wma_get_number_of_peers_supported(wma_handle);
/* Reinitialize max_no_of_peers based on the capped maxStation value */
wma_init_max_no_of_peers(wma_handle, cds_cfg->max_station);
/* initialize default target config */ /* initialize default target config */
wlan_res_cfg = target_psoc_get_wlan_res_cfg(tgt_psoc_info); wlan_res_cfg = target_psoc_get_wlan_res_cfg(tgt_psoc_info);
@@ -3200,26 +3196,13 @@ QDF_STATUS wma_open(struct wlan_objmgr_psoc *psoc,
goto err_wma_handle; goto err_wma_handle;
} }
wma_set_default_tgt_config(wma_handle, wlan_res_cfg); wma_set_default_tgt_config(wma_handle, wlan_res_cfg, cds_cfg);
wma_handle->tx_chain_mask_cck = cds_cfg->tx_chain_mask_cck; wma_handle->tx_chain_mask_cck = cds_cfg->tx_chain_mask_cck;
wma_handle->self_gen_frm_pwr = cds_cfg->self_gen_frm_pwr; wma_handle->self_gen_frm_pwr = cds_cfg->self_gen_frm_pwr;
wma_init_max_no_of_peers(wma_handle, cds_cfg->max_station);
cds_cfg->max_station = wma_get_number_of_peers_supported(wma_handle);
cds_cfg->max_bssid = WMA_MAX_SUPPORTED_BSS; cds_cfg->max_bssid = WMA_MAX_SUPPORTED_BSS;
wlan_res_cfg->num_keep_alive_pattern = WMA_MAXNUM_PERIODIC_TX_PTRNS;
/* The current firmware implementation requires the number of
* offload peers should be (number of vdevs + 1).
*/
wlan_res_cfg->num_offload_peers =
cds_cfg->ap_maxoffload_peers + 1;
wlan_res_cfg->num_offload_reorder_buffs =
cds_cfg->ap_maxoffload_reorderbuffs + 1;
wma_handle->max_station = cds_cfg->max_station; wma_handle->max_station = cds_cfg->max_station;
wma_handle->max_bssid = cds_cfg->max_bssid; wma_handle->max_bssid = cds_cfg->max_bssid;
wma_handle->driver_type = cds_cfg->driver_type; wma_handle->driver_type = cds_cfg->driver_type;