| // SPDX-License-Identifier: GPL-2.0-or-later |
| /* |
| * Copyright (c) 2018 Cyril Hrubis <chrubis@suse.cz> |
| */ |
| |
| #ifndef TST_KCONFIG_H__ |
| #define TST_KCONFIG_H__ |
| |
| #include <stdbool.h> |
| #include <stddef.h> |
| |
| /** |
| * Initialization helper macro for struct tst_kconfig_var. Requires <string.h> |
| */ |
| #define TST_KCONFIG_INIT(confname) { \ |
| .id = confname, \ |
| .id_len = strlen(confname) \ |
| } |
| |
| struct tst_kconfig_var { |
| char id[64]; |
| unsigned int id_len; |
| char choice; |
| char *val; |
| }; |
| |
| /** |
| * |
| * Reads a kernel config, parses it and writes results into an array of |
| * tst_kconfig_var structures. |
| * |
| * The path to the kernel config should be autodetected in most of the cases as |
| * the code looks for know locations. It can be explicitly set/overridden with |
| * the KCONFIG_PATH environment variable as well. |
| * |
| * The caller has to initialize the tst_kconfig_var structure. The id has to be |
| * filled with config variable name such as 'CONFIG_FOO', the id_len should |
| * hold the id string length and the choice and val has to be zeroed. |
| * |
| * After a call to this function each choice be set as follows: |
| * |
| * 'm' - config option set to m |
| * 'y' - config option set to y |
| * 'v' - config option set to other value |
| * 'n' - config option is not set |
| * 0 - config option not found |
| * |
| * In the case that match is set to 'v' the val pointer points to a newly |
| * allocated string that holds the value. |
| * |
| * @param vars An array of caller initialized tst_kconfig_var structures. |
| * @param vars_len Length of the vars array. |
| */ |
| void tst_kconfig_read(struct tst_kconfig_var vars[], size_t vars_len); |
| |
| /** |
| * Checks if required kernel configuration options are set in the kernel |
| * config. Return 0 if every config is satisfied and return 1 if at least |
| * one is missing. |
| * |
| * The config options can be passed in two different formats, either |
| * "CONFIG_FOO" in which case the option has to be set in order to continue the |
| * test or with an explicit value "CONFIG_FOO=bar" in which case the value has |
| * to match. |
| * |
| * @param kconfigs NULL-terminated array of config strings needed for the testrun. |
| */ |
| int tst_kconfig_check(const char *const kconfigs[]); |
| |
| /** |
| * Macro to prepare a tst_kcmdline_var structure with a given parameter name. |
| * |
| * It initializes the .key field with the provided name, sets the .value field |
| * to an empty string, and marks the parameter as not found (.found = false). |
| * |
| * This macro is typically used to prepopulate an array with configuration |
| * parameters before processing the actual command line arguments. |
| */ |
| #define TST_KCMDLINE_INIT(paraname) { \ |
| .key = paraname, \ |
| .value = "", \ |
| .found = false \ |
| } |
| |
| /** |
| * Structure for storing command-line parameter key and its corresponding |
| * value, and a flag indicating whether the parameter was found. |
| */ |
| struct tst_kcmdline_var { |
| const char *key; |
| char value[256]; |
| bool found; |
| }; |
| |
| /** |
| * Parses command-line parameters from /proc/cmdline and stores them in params array. |
| * params: The array of tst_kcmdline_var structures to be filled with parsed key-value pairs. |
| * params_len: The length of the params array, indicating how many parameters to parse. |
| */ |
| void tst_kcmdline_parse(struct tst_kcmdline_var params[], size_t params_len); |
| |
| /* |
| * tst_has_slow_kconfig() - Check if any performance-degrading kernel configs are enabled. |
| * |
| * This function iterates over the list of slow kernel configuration options |
| * (`tst_slow_kconfigs`) and checks if any of them are enabled in the running kernel. |
| * |
| * Return: |
| * - 1 if at least one slow kernel config is enabled. |
| * - 0 if none of the slow kernel configs are enabled. |
| */ |
| int tst_has_slow_kconfig(void); |
| |
| #endif /* TST_KCONFIG_H__ */ |