From c248c9e3ae6aa9038223cb01a86f7cbfc93eb11f Mon Sep 17 00:00:00 2001 From: Pragaspathi Thilagaraj Date: Wed, 1 May 2019 23:30:28 +0530 Subject: [PATCH] qcacld-3.0: Cleanup legacy ini x-macro and parsing infra in HDD Before CFG/INI convergence to the new cfg module, hdd maintained the infrastructure to parse ini items from WCNSS_qcom_cfg.ini and push the value to hdd_config members. With all the cfg/ini moved to the new converged CFG component, this infra is not required. So cleanup the legacy ini infrastructure in HDD. Change-Id: Ia028edd10682a0ac8ed6a663c20ba5f67b962f1d CRs-Fixed: 2445314 --- core/hdd/inc/wlan_hdd_cfg.h | 65 ------ core/hdd/src/wlan_hdd_cfg.c | 410 ----------------------------------- core/hdd/src/wlan_hdd_main.c | 14 -- core/mac/inc/wni_cfg.h | 11 - 4 files changed, 500 deletions(-) diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h index 04964a191a782..6c75112d37bc7 100644 --- a/core/hdd/inc/wlan_hdd_cfg.h +++ b/core/hdd/inc/wlan_hdd_cfg.h @@ -212,68 +212,6 @@ struct hdd_config { uint32_t sar_version; }; -#define VAR_OFFSET(_Struct, _Var) (offsetof(_Struct, _Var)) -#define VAR_SIZE(_Struct, _Var) (sizeof(((_Struct *)0)->_Var)) - -#define VAR_FLAGS_NONE (0) - -/* bit 0 is Required or Optional */ -#define VAR_FLAGS_REQUIRED (1 << 0) -#define VAR_FLAGS_OPTIONAL (0 << 0) - -/* - * bit 1 tells if range checking is required. - * If less than MIN, assume MIN. - * If greater than MAX, assume MAX. - */ -#define VAR_FLAGS_RANGE_CHECK (1 << 1) -#define VAR_FLAGS_RANGE_CHECK_ASSUME_MINMAX (VAR_FLAGS_RANGE_CHECK) - -/* - * bit 2 is range checking that assumes the DEFAULT value - * If less than MIN, assume DEFAULT, - * If greater than MAX, assume DEFAULT. - */ -#define VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT (1 << 2) - -enum wlan_parameter_type { - WLAN_PARAM_Integer, - WLAN_PARAM_SignedInteger, - WLAN_PARAM_HexInteger, - WLAN_PARAM_String, - WLAN_PARAM_MacAddr, -}; - -#define REG_VARIABLE(_Name, _Type, _Struct, _VarName, \ - _Flags, _Default, _Min, _Max) \ - { \ - (_Name), \ - (_Type), \ - (_Flags), \ - 0, \ - VAR_OFFSET(_Struct, _VarName), \ - VAR_SIZE(_Struct, _VarName), \ - (_Default), \ - (_Min), \ - (_Max), \ - NULL \ - } - -struct reg_table_entry { - char *RegName; /* variable name in the qcom_cfg.ini file */ - unsigned char RegType; /* variable type in hdd_config struct */ - unsigned char Flags; /* Specify optional parms and if RangeCheck is performed */ - unsigned char notifyId; /* Dynamic modification identifier */ - unsigned short VarOffset; /* offset to field from the base address of the structure */ - unsigned short VarSize; /* size (in bytes) of the field */ - unsigned long VarDefault; /* default value to use */ - unsigned long VarMin; /* minimum value, for range checking */ - unsigned long VarMax; /* maximum value, for range checking */ - /* Dynamic modification notifier */ - void (*pfnDynamicnotify)(struct hdd_context *hdd_ctx, - unsigned long notifyId); -}; - /** * hdd_to_csr_wmm_mode() - Utility function to convert HDD to CSR WMM mode * @@ -283,9 +221,6 @@ struct reg_table_entry { */ eCsrRoamWmmUserModeType hdd_to_csr_wmm_mode(uint8_t mode); -/* Function declarations and documenation */ -QDF_STATUS hdd_parse_config_ini(struct hdd_context *hdd_ctx); - QDF_STATUS hdd_update_mac_config(struct hdd_context *hdd_ctx); QDF_STATUS hdd_set_sme_config(struct hdd_context *hdd_ctx); QDF_STATUS hdd_set_policy_mgr_user_cfg(struct hdd_context *hdd_ctx); diff --git a/core/hdd/src/wlan_hdd_cfg.c b/core/hdd/src/wlan_hdd_cfg.c index b34d86b5391db..793c5a6575ffd 100644 --- a/core/hdd/src/wlan_hdd_cfg.c +++ b/core/hdd/src/wlan_hdd_cfg.c @@ -48,10 +48,6 @@ #include "cfg_ucfg_api.h" #include "hdd_dp_cfg.h" -struct reg_table_entry g_registry_table[] = { -}; - - /** * get_next_line() - find and locate the new line pointer * @str: pointer to string @@ -138,53 +134,6 @@ struct hdd_cfg_entry { char *value; }; -/** - * find_cfg_item() - find the configuration item - * @iniTable: pointer to configuration table - * @entries: number fo the configuration entries - * @name: the interested configuration to find - * @value: the value to read back - * - * Return: QDF_STATUS_SUCCESS if the interested configuration is found, - * otherwise QDF_STATUS_E_FAILURE - */ -static QDF_STATUS find_cfg_item(struct hdd_cfg_entry *iniTable, - unsigned long entries, - char *name, char **value) -{ - QDF_STATUS status = QDF_STATUS_E_FAILURE; - unsigned long i; - - for (i = 0; i < entries; i++) { - if (strcmp(iniTable[i].name, name) == 0) { - *value = iniTable[i].value; - hdd_debug("Found %s entry for Name=[%s] Value=[%s] ", - WLAN_INI_FILE, name, *value); - return QDF_STATUS_SUCCESS; - } - } - - return status; -} - -/** - * parse_hex_digit() - conversion to hex value - * @c: the character to convert - * - * Return: the hex value, otherwise 0 - */ -static int parse_hex_digit(char c) -{ - if (c >= '0' && c <= '9') - return c - '0'; - if (c >= 'a' && c <= 'f') - return c - 'a' + 10; - if (c >= 'A' && c <= 'F') - return c - 'A' + 10; - - return 0; -} - /** * update_mac_from_string() - convert string to 6 bytes mac address * @hdd_ctx: the pointer to hdd context @@ -228,247 +177,6 @@ static QDF_STATUS update_mac_from_string(struct hdd_context *hdd_ctx, return status; } -/** - * hdd_apply_cfg_ini() - apply the ini configuration file - * @hdd_ctx: the pointer to hdd context - * @iniTable: pointer to configuration table - * @entries: number fo the configuration entries - * It overwrites the MAC address if config file exist. - * - * Return: QDF_STATUS_SUCCESS if the ini configuration file is correctly parsed, - * otherwise QDF_STATUS_E_INVAL - */ -static QDF_STATUS hdd_apply_cfg_ini(struct hdd_context *hdd_ctx, - struct hdd_cfg_entry *iniTable, - unsigned long entries) -{ - QDF_STATUS match_status = QDF_STATUS_E_FAILURE; - QDF_STATUS ret_status = QDF_STATUS_SUCCESS; - unsigned int idx; - void *pField; - char *value_str = NULL; - unsigned long len_value_str; - char *candidate; - uint32_t value; - int32_t svalue; - void *pStructBase = hdd_ctx->config; - struct reg_table_entry *pRegEntry = g_registry_table; - unsigned long cRegTableEntries = QDF_ARRAY_SIZE(g_registry_table); - uint32_t cbOutString; - int i; - int rv; - - BUILD_BUG_ON(MAX_CFG_INI_ITEMS < cRegTableEntries); - - for (idx = 0; idx < cRegTableEntries; idx++, pRegEntry++) { - /* Calculate the address of the destination field in the structure. */ - pField = ((uint8_t *) pStructBase) + pRegEntry->VarOffset; - - match_status = - find_cfg_item(iniTable, entries, pRegEntry->RegName, - &value_str); - - if ((match_status != QDF_STATUS_SUCCESS) - && (pRegEntry->Flags & VAR_FLAGS_REQUIRED)) { - /* If we could not read the cfg item and it is required, this is an error. */ - hdd_err("Failed to read required config parameter %s", pRegEntry->RegName); - ret_status = QDF_STATUS_E_FAILURE; - break; - } - - if ((WLAN_PARAM_Integer == pRegEntry->RegType) || - (WLAN_PARAM_HexInteger == pRegEntry->RegType)) { - /* If successfully read from the registry, use the value read. - * If not, use the default value. - */ - if (match_status == QDF_STATUS_SUCCESS - && (WLAN_PARAM_Integer == pRegEntry->RegType)) { - rv = kstrtou32(value_str, 10, &value); - if (rv < 0) { - hdd_warn("Reg Parameter %s invalid. Enforcing default", pRegEntry->RegName); - value = pRegEntry->VarDefault; - } - } else if (match_status == QDF_STATUS_SUCCESS - && (WLAN_PARAM_HexInteger == - pRegEntry->RegType)) { - rv = kstrtou32(value_str, 16, &value); - if (rv < 0) { - hdd_warn("Reg parameter %s invalid. Enforcing default", pRegEntry->RegName); - value = pRegEntry->VarDefault; - } - } else { - value = pRegEntry->VarDefault; - } - - /* Only if the parameter is set in the ini file, do the range check here */ - if (match_status == QDF_STATUS_SUCCESS && - pRegEntry->Flags & VAR_FLAGS_RANGE_CHECK) { - if (value > pRegEntry->VarMax) { - hdd_warn("Reg Parameter %s > allowed Maximum [%u > %lu]. Enforcing Maximum", pRegEntry->RegName, - value, pRegEntry->VarMax); - value = pRegEntry->VarMax; - } - - if (value < pRegEntry->VarMin) { - hdd_warn("Reg Parameter %s < allowed Minimum [%u < %lu]. Enforcing Minimum", pRegEntry->RegName, - value, pRegEntry->VarMin); - value = pRegEntry->VarMin; - } - } - /* Only if the parameter is set in the ini file, do the range check here */ - else if (match_status == QDF_STATUS_SUCCESS && - pRegEntry->Flags & - VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT) { - if (value > pRegEntry->VarMax) { - hdd_warn("Reg Parameter %s > allowed Maximum [%u > %lu]. Enforcing Default: %lu", pRegEntry->RegName, - value, pRegEntry->VarMax, - pRegEntry->VarDefault); - value = pRegEntry->VarDefault; - } - - if (value < pRegEntry->VarMin) { - hdd_warn("Reg Parameter %s < allowed Minimum [%u < %lu]. Enforcing Default: %lu", pRegEntry->RegName, - value, pRegEntry->VarMin, - pRegEntry->VarDefault); - value = pRegEntry->VarDefault; - } - } - /* Move the variable into the output field. */ - memcpy(pField, &value, pRegEntry->VarSize); - } else if (WLAN_PARAM_SignedInteger == pRegEntry->RegType) { - /* If successfully read from the registry, use the value read. - * If not, use the default value. - */ - if (QDF_STATUS_SUCCESS == match_status) { - rv = kstrtos32(value_str, 10, &svalue); - if (rv < 0) { - hdd_warn("Reg Parameter %s invalid. Enforcing Default", pRegEntry->RegName); - svalue = - (int32_t) pRegEntry->VarDefault; - } - } else { - svalue = (int32_t) pRegEntry->VarDefault; - } - - /* Only if the parameter is set in the ini file, do the range check here */ - if (match_status == QDF_STATUS_SUCCESS && - pRegEntry->Flags & VAR_FLAGS_RANGE_CHECK) { - if (svalue > (int32_t) pRegEntry->VarMax) { - hdd_warn("Reg Parameter %s > allowed Maximum " - "[%d > %d]. Enforcing Maximum", pRegEntry->RegName, - svalue, (int)pRegEntry->VarMax); - svalue = (int32_t) pRegEntry->VarMax; - } - - if (svalue < (int32_t) pRegEntry->VarMin) { - hdd_warn("Reg Parameter %s < allowed Minimum " - "[%d < %d]. Enforcing Minimum", pRegEntry->RegName, - svalue, (int)pRegEntry->VarMin); - svalue = (int32_t) pRegEntry->VarMin; - } - } - /* Only if the parameter is set in the ini file, do the range check here */ - else if (match_status == QDF_STATUS_SUCCESS && - pRegEntry->Flags & - VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT) { - if (svalue > (int32_t) pRegEntry->VarMax) { - hdd_warn("Reg Parameter %s > allowed Maximum " - "[%d > %d]. Enforcing Default: %d", pRegEntry->RegName, - svalue, (int)pRegEntry->VarMax, - (int)pRegEntry->VarDefault); - svalue = - (int32_t) pRegEntry->VarDefault; - } - - if (svalue < (int32_t) pRegEntry->VarMin) { - hdd_warn("Reg Parameter %s < allowed Minimum " - "[%d < %d]. Enforcing Default: %d", pRegEntry->RegName, - svalue, (int)pRegEntry->VarMin, - (int)pRegEntry->VarDefault); - svalue = pRegEntry->VarDefault; - } - } - /* Move the variable into the output field. */ - memcpy(pField, &svalue, pRegEntry->VarSize); - } - /* Handle string parameters */ - else if (WLAN_PARAM_String == pRegEntry->RegType) { -#ifdef WLAN_CFG_DEBUG - hdd_debug("RegName = %s, VarOffset %u VarSize %u VarDefault %s", - pRegEntry->RegName, pRegEntry->VarOffset, - pRegEntry->VarSize, - (char *)pRegEntry->VarDefault); -#endif - - if (match_status == QDF_STATUS_SUCCESS) { - len_value_str = strlen(value_str); - - if (len_value_str > (pRegEntry->VarSize - 1)) { - hdd_err("Invalid Value=[%s] specified for Name=[%s] in %s", value_str, - pRegEntry->RegName, - WLAN_INI_FILE); - cbOutString = - QDF_MIN(strlen - ((char *)pRegEntry-> - VarDefault), - pRegEntry->VarSize - 1); - memcpy(pField, - (void *)(pRegEntry->VarDefault), - cbOutString); - ((uint8_t *) pField)[cbOutString] = - '\0'; - } else { - memcpy(pField, (void *)(value_str), - len_value_str); - ((uint8_t *) pField)[len_value_str] = - '\0'; - } - } else { - /* Failed to read the string parameter from the registry. Use the default. */ - cbOutString = - QDF_MIN(strlen((char *)pRegEntry->VarDefault), - pRegEntry->VarSize - 1); - memcpy(pField, (void *)(pRegEntry->VarDefault), - cbOutString); - ((uint8_t *) pField)[cbOutString] = '\0'; - } - } else if (WLAN_PARAM_MacAddr == pRegEntry->RegType) { - if (pRegEntry->VarSize != QDF_MAC_ADDR_SIZE) { - hdd_warn("Invalid VarSize %u for Name=[%s]", pRegEntry->VarSize, - pRegEntry->RegName); - continue; - } - candidate = (char *)pRegEntry->VarDefault; - if (match_status == QDF_STATUS_SUCCESS) { - len_value_str = strlen(value_str); - if (len_value_str != (QDF_MAC_ADDR_SIZE * 2)) { - hdd_err("Invalid MAC addr [%s] specified for Name=[%s] in %s", value_str, - pRegEntry->RegName, - WLAN_INI_FILE); - } else - candidate = value_str; - } - /* parse the string and store it in the byte array */ - for (i = 0; i < QDF_MAC_ADDR_SIZE; i++) { - ((char *)pField)[i] = - (char)(parse_hex_digit(candidate[i * 2]) * - 16 + - parse_hex_digit(candidate[i * 2 + 1])); - } - } else { - hdd_warn("Unknown param type for name[%s] in registry table", pRegEntry->RegName); - } - - /* did we successfully parse a cfg item for this parameter? */ - if ((match_status == QDF_STATUS_SUCCESS) && - (idx < MAX_CFG_INI_ITEMS)) { - set_bit(idx, (void *)&hdd_ctx->config->bExplicitCfg); - } - } - - return ret_status; -} - /** * hdd_set_power_save_offload_config() - set power save offload configuration * @hdd_ctx: the pointer to hdd context @@ -673,124 +381,6 @@ void hdd_override_all_ps(struct hdd_context *hdd_ctx) hdd_disable_auto_shutdown(cfg_ini); } -/** - * hdd_parse_config_ini() - parse the ini configuration file - * @hdd_ctx: the pointer to hdd context - * - * This function reads the qcom_cfg.ini file and - * parses each 'Name=Value' pair in the ini file - * - * Return: QDF_STATUS_SUCCESS if the qcom_cfg.ini is correctly read, - * otherwise QDF_STATUS_E_INVAL - */ -QDF_STATUS hdd_parse_config_ini(struct hdd_context *hdd_ctx) -{ - int status = 0; - int i = 0; - int retry = 0; - /** Pointer for firmware image data */ - const struct firmware *fw = NULL; - char *buffer, *line, *pTemp = NULL; - size_t size; - char *name, *value; - struct hdd_cfg_entry *cfg_ini_table; - QDF_STATUS qdf_status = QDF_STATUS_SUCCESS; - - size = MAX_CFG_INI_ITEMS * sizeof(*cfg_ini_table); - cfg_ini_table = qdf_mem_malloc(size); - - if (!cfg_ini_table) { - hdd_err("Failed to alloc %zu bytes for cfg_ini_table", size); - return QDF_STATUS_E_NOMEM; - } - - do { - if (status == -EAGAIN) - msleep(HDD_CFG_REQUEST_FIRMWARE_DELAY); - - status = request_firmware(&fw, WLAN_INI_FILE, - hdd_ctx->parent_dev); - - retry++; - } while ((retry < HDD_CFG_REQUEST_FIRMWARE_RETRIES) && - (status == -EAGAIN)); - - if (status) { - hdd_alert("request_firmware failed %d", status); - qdf_status = QDF_STATUS_E_FAILURE; - goto config_exit; - } - if (!fw || !fw->data || !fw->size) { - hdd_alert("%s download failed", WLAN_INI_FILE); - qdf_status = QDF_STATUS_E_FAILURE; - goto config_exit; - } - - hdd_debug("qcom_cfg.ini Size %zu", fw->size); - - buffer = (char *)qdf_mem_malloc(fw->size); - - if (!buffer) { - hdd_err("qdf_mem_malloc failure"); - qdf_status = QDF_STATUS_E_NOMEM; - goto config_exit; - } - pTemp = buffer; - - qdf_mem_copy((void *)buffer, (void *)fw->data, fw->size); - size = fw->size; - - while (buffer) { - line = get_next_line(buffer); - buffer = i_trim(buffer); - - hdd_debug("%s: item", buffer); - - if (strlen((char *)buffer) == 0 || *buffer == '#') { - buffer = line; - continue; - } - - if (strncmp(buffer, "END", 3) == 0) - break; - - name = buffer; - while (*buffer != '=' && *buffer != '\0') - buffer++; - if (*buffer != '\0') { - *buffer++ = '\0'; - i_trim(name); - if (strlen(name) != 0) { - buffer = i_trim(buffer); - if (strlen(buffer) > 0) { - value = buffer; - while (*buffer != '\0') - buffer++; - *buffer = '\0'; - cfg_ini_table[i].name = name; - cfg_ini_table[i++].value = value; - if (i >= MAX_CFG_INI_ITEMS) { - hdd_err("Number of items in %s > %d", - WLAN_INI_FILE, - MAX_CFG_INI_ITEMS); - break; - } - } - } - } - buffer = line; - } - - /* Loop through the registry table and apply all these configs */ - qdf_status = hdd_apply_cfg_ini(hdd_ctx, cfg_ini_table, i); - -config_exit: - release_firmware(fw); - qdf_mem_free(pTemp); - qdf_mem_free(cfg_ini_table); - return qdf_status; -} - /** * hdd_cfg_xlate_to_csr_phy_mode() - convert PHY mode * @dot11Mode: the mode to convert diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index a9e0c906d90ad..0fd3db01f69ac 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -9065,8 +9065,6 @@ static void hdd_set_trace_level_for_each(struct hdd_context *hdd_ctx) hdd_qdf_trace_enable(QDF_MODULE_ID_CRYPTO, 0xffff); hdd_set_mtrace_for_each(hdd_ctx); - - hdd_cfg_print_global_config(hdd_ctx); } /** @@ -9467,15 +9465,6 @@ struct hdd_context *hdd_context_create(struct device *dev) goto err_free_hdd_context; } - /* Read and parse the qcom_cfg.ini file */ - status = hdd_parse_config_ini(hdd_ctx); - if (QDF_STATUS_SUCCESS != status) { - hdd_err("Error (status: %d) parsing INI file: %s", status, - WLAN_INI_FILE); - ret = -EINVAL; - goto err_free_config; - } - status = cfg_parse(WLAN_INI_FILE); if (QDF_IS_STATUS_ERROR(status)) hdd_err("Failed to parse cfg %s; status:%d\n", @@ -10443,14 +10432,11 @@ static int hdd_pre_enable_configure(struct hdd_context *hdd_ctx) goto out; } - /* Apply the cfg.ini to cfg.dat */ if (!hdd_update_config_cfg(hdd_ctx)) { hdd_err("config update failed"); ret = -EINVAL; goto out; } - - hdd_init_channel_avoidance(hdd_ctx); out: diff --git a/core/mac/inc/wni_cfg.h b/core/mac/inc/wni_cfg.h index 79a0f541248cf..4b29df7f9992d 100644 --- a/core/mac/inc/wni_cfg.h +++ b/core/mac/inc/wni_cfg.h @@ -19,17 +19,6 @@ #ifndef __WNICFG_H #define __WNICFG_H -/* - * Configuration Parameter ID for STA - */ - -enum { - WNI_CFG_VALID_CHANNEL_LIST, - WNI_CFG_COUNTRY_CODE, - WNI_CFG_REMOVE_TIME_SYNC_CMD, - /* Any new items to be added should be above this strictly */ - CFG_PARAM_MAX_NUM -}; /* * String parameter lengths */