From faa83cb69c78a0c680bcee2cda253e13cdadbf97 Mon Sep 17 00:00:00 2001 From: lifeng Date: Sat, 24 Nov 2018 01:53:56 +0800 Subject: [PATCH] qcacld-3.0: Refine gFwDebugModuleLoglevel configurations Refine gFwDebugModuleLoglevel configurations based on converged cfg component. Remove related legacy codes. Change-Id: I5a1099872163bdcf0fc2e08478c4b608529db736 CRs-Fixed: 2355599 --- .../core/inc/wlan_fw_offload_main.h | 4 ++ .../core/src/wlan_fw_offload_main.c | 7 +++ .../dispatcher/inc/cfg_fwol_generic.h | 42 ++++++++++++++ .../dispatcher/inc/wlan_fwol_ucfg_api.h | 15 +++++ .../dispatcher/src/wlan_fwol_ucfg_api.c | 19 +++++++ core/hdd/inc/wlan_hdd_cfg.h | 36 ------------ core/hdd/src/wlan_hdd_cfg.c | 5 -- core/hdd/src/wlan_hdd_main.c | 50 +---------------- core/sme/inc/sme_api.h | 9 +++ core/sme/src/common/sme_api.c | 56 +++++++++++++++++++ 10 files changed, 154 insertions(+), 89 deletions(-) diff --git a/components/fw_offload/core/inc/wlan_fw_offload_main.h b/components/fw_offload/core/inc/wlan_fw_offload_main.h index 07fb19fe99f6..5ec08e715ff4 100644 --- a/components/fw_offload/core/inc/wlan_fw_offload_main.h +++ b/components/fw_offload/core/inc/wlan_fw_offload_main.h @@ -127,6 +127,8 @@ struct wlan_fwol_ie_whitelist { * @get_rts_profile: Set the RTS profile * @enable_fw_log_level: Set the FW log level * @enable_fw_log_type: Set the FW log type + * @enable_fw_module_log_level: enable fw module log level + * @enable_fw_module_log_level_num: enablefw module log level num * @is_rate_limit_enabled: Enable/disable RA rate limited * @tsf_gpio_pin: TSF GPIO Pin config * @enable_dhcp_server_offload: DHCP Offload is enabled or not @@ -150,6 +152,8 @@ struct wlan_fwol_cfg { uint16_t get_rts_profile; uint16_t enable_fw_log_level; uint16_t enable_fw_log_type; + uint8_t enable_fw_module_log_level[FW_MODULE_LOG_LEVEL_STRING_LENGTH]; + uint8_t enable_fw_module_log_level_num; #ifdef FEATURE_WLAN_RA_FILTERING bool is_rate_limit_enabled; #endif diff --git a/components/fw_offload/core/src/wlan_fw_offload_main.c b/components/fw_offload/core/src/wlan_fw_offload_main.c index be177cf77c16..4e0608e94e25 100644 --- a/components/fw_offload/core/src/wlan_fw_offload_main.c +++ b/components/fw_offload/core/src/wlan_fw_offload_main.c @@ -267,6 +267,7 @@ QDF_STATUS fwol_cfg_on_psoc_enable(struct wlan_objmgr_psoc *psoc) QDF_STATUS status = QDF_STATUS_SUCCESS; struct wlan_fwol_psoc_obj *fwol_obj; struct wlan_fwol_cfg *fwol_cfg; + qdf_size_t enable_fw_module_log_level_num; fwol_obj = fwol_get_psoc_obj(psoc); if (!fwol_obj) { @@ -296,6 +297,12 @@ QDF_STATUS fwol_cfg_on_psoc_enable(struct wlan_objmgr_psoc *psoc) fwol_cfg->enable_fw_log_level = cfg_get(psoc, CFG_ENABLE_FW_DEBUG_LOG_LEVEL); fwol_cfg->enable_fw_log_type = cfg_get(psoc, CFG_ENABLE_FW_LOG_TYPE); + qdf_uint8_array_parse(cfg_get(psoc, CFG_ENABLE_FW_MODULE_LOG_LEVEL), + fwol_cfg->enable_fw_module_log_level, + FW_MODULE_LOG_LEVEL_STRING_LENGTH, + &enable_fw_module_log_level_num); + fwol_cfg->enable_fw_module_log_level_num = + (uint8_t)enable_fw_module_log_level_num; ucfg_fwol_fetch_ra_filter(psoc, fwol_cfg); ucfg_fwol_fetch_tsf_gpio_pin(psoc, fwol_cfg); ucfg_fwol_fetch_dhcp_server_settings(psoc, fwol_cfg); diff --git a/components/fw_offload/dispatcher/inc/cfg_fwol_generic.h b/components/fw_offload/dispatcher/inc/cfg_fwol_generic.h index 1c667125e936..4682f147f1af 100644 --- a/components/fw_offload/dispatcher/inc/cfg_fwol_generic.h +++ b/components/fw_offload/dispatcher/inc/cfg_fwol_generic.h @@ -348,6 +348,47 @@ CFG_VALUE_OR_DEFAULT, \ "Default value to be given to the net link cnss_diag service") +/* + * + * gFwDebugModuleLoglevel - modulized firmware debug log level + * @Min: N/A + * @Max: N/A + * @Default: N/A + * + * This ini is used to set modulized firmware debug log level. + * FW module log level input string format looks like below: + * gFwDebugModuleLoglevel=",,..." + * For example: + * gFwDebugModuleLoglevel="1,0,2,1,3,2,4,3,5,4,6,5,7,6" + * The above input string means: + * For FW module ID 1 enable log level 0 + * For FW module ID 2 enable log level 1 + * For FW module ID 3 enable log level 2 + * For FW module ID 4 enable log level 3 + * For FW module ID 5 enable log level 4 + * For FW module ID 6 enable log level 5 + * For FW module ID 7 enable log level 6 + * For valid values of log levels check enum DBGLOG_LOG_LVL and + * for valid values of module ids check enum WLAN_MODULE_ID. + * + * Related: None + * + * Supported Feature: Debugging + * + * Usage: Internal/External + * + * + */ + +#define FW_MODULE_LOG_LEVEL_STRING_LENGTH (512) +#define CFG_ENABLE_FW_MODULE_LOG_LEVEL CFG_INI_STRING( \ + "gFwDebugModuleLoglevel", \ + 0, \ + FW_MODULE_LOG_LEVEL_STRING_LENGTH, \ + "2,1,3,1,5,1,9,1,13,1,14,1,18,1,19,1,26,1,28,1,29,1,31,1,36,1,38,1,"\ + "46,1,47,1,50,1,52,1,53,1,56,1,60,1,61,1,4,1", \ + "Set modulized firmware debug log level") + #ifdef FEATURE_WLAN_RA_FILTERING /* * gRAFilterEnable @@ -456,6 +497,7 @@ CFG(CFG_ENABLE_FW_RTS_PROFILE) \ CFG(CFG_ENABLE_FW_DEBUG_LOG_LEVEL) \ CFG(CFG_ENABLE_FW_LOG_TYPE) \ + CFG(CFG_ENABLE_FW_MODULE_LOG_LEVEL) \ CFG(CFG_RA_FILTER_ENABLE) \ CFG(CFG_SET_TSF_GPIO_PIN) diff --git a/components/fw_offload/dispatcher/inc/wlan_fwol_ucfg_api.h b/components/fw_offload/dispatcher/inc/wlan_fwol_ucfg_api.h index cd103a7f5a54..f2066cb3bd47 100644 --- a/components/fw_offload/dispatcher/inc/wlan_fwol_ucfg_api.h +++ b/components/fw_offload/dispatcher/inc/wlan_fwol_ucfg_api.h @@ -236,6 +236,21 @@ QDF_STATUS ucfg_fwol_get_enable_fw_log_level(struct wlan_objmgr_psoc *psoc, */ QDF_STATUS ucfg_fwol_get_enable_fw_log_type(struct wlan_objmgr_psoc *psoc, uint16_t *enable_fw_log_type); +/** + * ucfg_fwol_get_enable_fw_module_log_level() - Assigns + * enable_fw_module_log_level string + * @psoc: pointer to the psoc object + * @enable_fw_module_log_level: + * pointer to enable_fw_module_log_level array + * @enable_fw_module_log_level_num: + * pointer to enable_fw_module_log_leve array element num + * + * Return: QDF Status + */ +QDF_STATUS ucfg_fwol_get_enable_fw_module_log_level( + struct wlan_objmgr_psoc *psoc, + uint8_t **enable_fw_module_log_level, + uint8_t *enable_fw_module_log_level_num); #ifdef FEATURE_WLAN_RA_FILTERING /** diff --git a/components/fw_offload/dispatcher/src/wlan_fwol_ucfg_api.c b/components/fw_offload/dispatcher/src/wlan_fwol_ucfg_api.c index 4b5cc4622425..f75bbcb5e47d 100644 --- a/components/fw_offload/dispatcher/src/wlan_fwol_ucfg_api.c +++ b/components/fw_offload/dispatcher/src/wlan_fwol_ucfg_api.c @@ -428,6 +428,25 @@ QDF_STATUS ucfg_fwol_get_enable_fw_log_type(struct wlan_objmgr_psoc *psoc, return QDF_STATUS_SUCCESS; } +QDF_STATUS ucfg_fwol_get_enable_fw_module_log_level( + struct wlan_objmgr_psoc *psoc, + uint8_t **enable_fw_module_log_level, + uint8_t *enable_fw_module_log_level_num) +{ + struct wlan_fwol_psoc_obj *fwol_obj; + + fwol_obj = fwol_get_psoc_obj(psoc); + if (!fwol_obj) { + fwol_err("Failed to get FWOL obj"); + return QDF_STATUS_E_FAILURE; + } + + *enable_fw_module_log_level = fwol_obj->cfg.enable_fw_module_log_level; + *enable_fw_module_log_level_num = + fwol_obj->cfg.enable_fw_module_log_level_num; + return QDF_STATUS_SUCCESS; +} + #ifdef FEATURE_WLAN_RA_FILTERING QDF_STATUS ucfg_fwol_set_is_rate_limit_enabled(struct wlan_objmgr_psoc *psoc, bool is_rate_limit_enabled) diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h index fcc6f5ab2107..2db1292675bd 100644 --- a/core/hdd/inc/wlan_hdd_cfg.h +++ b/core/hdd/inc/wlan_hdd_cfg.h @@ -1750,41 +1750,6 @@ enum hdd_link_speed_rpt_type { #define CFG_LINK_SPEED_RSSI_LOW_MAX (0) #define CFG_LINK_SPEED_RSSI_LOW_DEFAULT (-80) -/* - * - * gFwDebugModuleLoglevel - modulized firmware debug log level - * @Min: N/A - * @Max: N/A - * @Default: N/A - * - * This ini is used to set modulized firmware debug log level. - * FW module log level input string format looks like below: - * gFwDebugModuleLoglevel=",,..." - * For example: - * gFwDebugModuleLoglevel="1,0,2,1,3,2,4,3,5,4,6,5,7,6" - * The above input string means: - * For FW module ID 1 enable log level 0 - * For FW module ID 2 enable log level 1 - * For FW module ID 3 enable log level 2 - * For FW module ID 4 enable log level 3 - * For FW module ID 5 enable log level 4 - * For FW module ID 6 enable log level 5 - * For FW module ID 7 enable log level 6 - * For valid values of log levels check enum DBGLOG_LOG_LVL and - * for valid values of module ids check enum WLAN_MODULE_ID. - * - * Related: None - * - * Supported Feature: Debugging - * - * Usage: Internal/External - * - * - */ - -#define CFG_ENABLE_FW_MODULE_LOG_LEVEL "gFwDebugModuleLoglevel" -#define CFG_ENABLE_FW_MODULE_LOG_DEFAULT "2,1,3,1,5,1,9,1,13,1,14,1,18,1,19,1,26,1,28,1,29,1,31,1,36,1,38,1,46,1,47,1,50,1,52,1,53,1,56,1,60,1,61,1,4,1" - #ifdef ENABLE_MTRACE_LOG /* * Enable MTRACE for all modules @@ -3641,7 +3606,6 @@ struct hdd_config { bool IpaClkScalingEnable; bool fRegChangeDefCountry; bool advertiseConcurrentOperation; - uint8_t enableFwModuleLogLevel[FW_MODULE_LOG_LEVEL_STRING_LENGTH]; #ifdef FEATURE_WLAN_FORCE_SAP_SCC uint8_t SapSccChanAvoidance; diff --git a/core/hdd/src/wlan_hdd_cfg.c b/core/hdd/src/wlan_hdd_cfg.c index 9930622a2bab..6307b5264c97 100644 --- a/core/hdd/src/wlan_hdd_cfg.c +++ b/core/hdd/src/wlan_hdd_cfg.c @@ -470,11 +470,6 @@ struct reg_table_entry g_registry_table[] = { CFG_PERIODIC_STATS_DISPLAY_TIME_MAX), #endif - REG_VARIABLE_STRING(CFG_ENABLE_FW_MODULE_LOG_LEVEL, WLAN_PARAM_String, - struct hdd_config, enableFwModuleLogLevel, - VAR_FLAGS_OPTIONAL, - (void *)CFG_ENABLE_FW_MODULE_LOG_DEFAULT), - #ifdef DHCP_SERVER_OFFLOAD REG_VARIABLE_STRING(CFG_DHCP_SERVER_IP_NAME, WLAN_PARAM_String, struct hdd_config, dhcpServerIP, diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index c1d0d63da107..b04d923f4a85 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -4579,9 +4579,6 @@ static QDF_STATUS hdd_check_for_existing_macaddr(struct hdd_context *hdd_ctx, static void hdd_set_fw_log_params(struct hdd_context *hdd_ctx, struct hdd_adapter *adapter) { - uint8_t count = 0, numentries = 0, - moduleloglevel[FW_MODULE_LOG_LEVEL_STRING_LENGTH]; - uint32_t value = 0; QDF_STATUS status; uint16_t enable_fw_log_level, enable_fw_log_type; int ret; @@ -4617,51 +4614,8 @@ static void hdd_set_fw_log_params(struct hdd_context *hdd_ctx, hdd_err("Failed to enable FW log level ret %d", ret); - hdd_string_to_u8_array( - hdd_ctx->config->enableFwModuleLogLevel, - moduleloglevel, - &numentries, - FW_MODULE_LOG_LEVEL_STRING_LENGTH); - - while (count < numentries) { - /* - * FW module log level input string looks like - * below: - * gFwDebugModuleLoglevel=, - * ,... - * For example: - * gFwDebugModuleLoglevel= - * 1,0,2,1,3,2,4,3,5,4,6,5,7,6 - * Above input string means : - * For FW module ID 1 enable log level 0 - * For FW module ID 2 enable log level 1 - * For FW module ID 3 enable log level 2 - * For FW module ID 4 enable log level 3 - * For FW module ID 5 enable log level 4 - * For FW module ID 6 enable log level 5 - * For FW module ID 7 enable log level 6 - */ - - if ((moduleloglevel[count] > WLAN_MODULE_ID_MAX) - || (moduleloglevel[count + 1] > DBGLOG_LVL_MAX)) { - hdd_err("Module id %d and dbglog level %d input length is more than max", - moduleloglevel[count], - moduleloglevel[count + 1]); - return; - } - - value = moduleloglevel[count] << 16; - value |= moduleloglevel[count + 1]; - ret = sme_cli_set_command(adapter->session_id, - WMI_DBGLOG_MOD_LOG_LEVEL, - value, DBG_CMD); - if (ret != 0) - hdd_err("Failed to enable FW module log level %d ret %d", - value, ret); - - count += 2; - } - + sme_enable_fw_module_log_level(hdd_ctx->mac_handle, + adapter->session_id); } #else static void hdd_set_fw_log_params(struct hdd_context *hdd_ctx, diff --git a/core/sme/inc/sme_api.h b/core/sme/inc/sme_api.h index 0567f13a08c2..6c0006590837 100644 --- a/core/sme/inc/sme_api.h +++ b/core/sme/inc/sme_api.h @@ -3167,4 +3167,13 @@ sme_get_roam_scan_stats(mac_handle_t mac_handle, roam_scan_stats_cb cb, */ void sme_update_score_config(mac_handle_t mac_handle, struct scoring_config *score_config); + +/** + * sme_enable_fw_module_log_level() - enable fw module log level + * @mac_handle: handle returned by mac_open + * @vdev_id: vdev id + * + * Return: None + */ +void sme_enable_fw_module_log_level(mac_handle_t mac_handle, int vdev_id); #endif /* #if !defined( __SME_API_H ) */ diff --git a/core/sme/src/common/sme_api.c b/core/sme/src/common/sme_api.c index b944e5441752..3db7a103ffc7 100644 --- a/core/sme/src/common/sme_api.c +++ b/core/sme/src/common/sme_api.c @@ -16462,3 +16462,59 @@ void sme_update_score_config(mac_handle_t mac_handle, score_config->oce_wan_scoring.score_pcnt15_to_12 = mlme_scoring_cfg->oce_wan_scoring.score_pcnt15_to_12; } + +void sme_enable_fw_module_log_level(mac_handle_t mac_handle, int vdev_id) +{ + QDF_STATUS status; + struct mac_context *mac_ctx = MAC_CONTEXT(mac_handle); + uint8_t *enable_fw_module_log_level; + uint8_t enable_fw_module_log_level_num; + uint8_t count = 0; + uint32_t value = 0; + int ret; + + status = ucfg_fwol_get_enable_fw_module_log_level( + mac_ctx->psoc, &enable_fw_module_log_level, + &enable_fw_module_log_level_num); + if (QDF_IS_STATUS_ERROR(status)) + return; + + while (count < enable_fw_module_log_level_num) { + /* + * FW module log level input array looks like + * below: + * enable_fw_module_log_level = {, + * ,...} + * For example: + * enable_fw_module_log_level= + * {1,0,2,1,3,2,4,3,5,4,6,5,7,6} + * Above input array means : + * For FW module ID 1 enable log level 0 + * For FW module ID 2 enable log level 1 + * For FW module ID 3 enable log level 2 + * For FW module ID 4 enable log level 3 + * For FW module ID 5 enable log level 4 + * For FW module ID 6 enable log level 5 + * For FW module ID 7 enable log level 6 + */ + + if ((enable_fw_module_log_level[count] > WLAN_MODULE_ID_MAX) || + (enable_fw_module_log_level[count + 1] > DBGLOG_LVL_MAX)) { + sme_err("Module id %d or dbglog level %d input value is more than max", + enable_fw_module_log_level[count], + enable_fw_module_log_level[count + 1]); + continue; + } + + value = enable_fw_module_log_level[count] << 16; + value |= enable_fw_module_log_level[count + 1]; + ret = sme_cli_set_command(vdev_id, + WMI_DBGLOG_MOD_LOG_LEVEL, + value, DBG_CMD); + if (ret != 0) + sme_err("Failed to enable FW module log level %d ret %d", + value, ret); + + count += 2; + } +}