/
usr
/
src
/
linux-headers-5.15.0-190-generic
/
scripts
/
kconfig
/
/usr/src/linux-headers-5.15.0-190-generic/scripts/kconfig
mkdir
upload
Name
Size
Mode
Actions
lxdialog/
-
0755
rm
tests/
-
0755
rm
.conf.cmd
291
0644
edit
dl
rm
.conf.o.cmd
761
0644
edit
dl
rm
.confdata.o.cmd
838
0644
edit
dl
rm
.expr.o.cmd
761
0644
edit
dl
rm
.lexer.lex.c.cmd
130
0644
edit
dl
rm
.lexer.lex.o.cmd
829
0644
edit
dl
rm
.menu.o.cmd
825
0644
edit
dl
rm
.parser.tab.h.cmd
177
0644
edit
dl
rm
.parser.tab.o.cmd
903
0644
edit
dl
rm
.preprocess.o.cmd
821
0644
edit
dl
rm
.symbol.o.cmd
781
0644
edit
dl
rm
.util.o.cmd
761
0644
edit
dl
rm
conf
145520
0755
edit
dl
rm
conf.c
20558
0644
edit
dl
rm
conf.o
27848
0644
edit
dl
rm
confdata.c
23334
0644
edit
dl
rm
confdata.o
25736
0644
edit
dl
rm
expr.c
30249
0644
edit
dl
rm
expr.h
9653
0644
edit
dl
rm
expr.o
24856
0644
edit
dl
rm
gconf-cfg.sh
775
0755
edit
dl
rm
gconf.c
38975
0644
edit
dl
rm
gconf.glade
25642
0644
edit
dl
rm
images.c
6573
0644
edit
dl
rm
images.h
857
0644
edit
dl
rm
internal.h
172
0644
edit
dl
rm
lexer.l
9259
0644
edit
dl
rm
lexer.lex.c
115380
0644
edit
dl
rm
lexer.lex.o
49544
0644
edit
dl
rm
list.h
3749
0644
edit
dl
rm
lkc.h
4044
0644
edit
dl
rm
lkc_proto.h
2013
0644
edit
dl
rm
Makefile
7788
0644
edit
dl
rm
mconf-cfg.sh
1502
0755
edit
dl
rm
mconf.c
27888
0644
edit
dl
rm
menu.c
22090
0644
edit
dl
rm
menu.o
21144
0644
edit
dl
rm
merge_config.sh
5181
0755
edit
dl
rm
nconf-cfg.sh
1404
0755
edit
dl
rm
nconf.c
38875
0644
edit
dl
rm
nconf.gui.c
14911
0644
edit
dl
rm
nconf.h
2050
0644
edit
dl
rm
parser.tab.c
73309
0644
edit
dl
rm
parser.tab.h
5118
0644
edit
dl
rm
parser.tab.o
42960
0644
edit
dl
rm
parser.y
15608
0644
edit
dl
rm
preprocess.c
11334
0644
edit
dl
rm
preprocess.o
12088
0644
edit
dl
rm
qconf-cfg.sh
643
0755
edit
dl
rm
qconf.cc
44467
0644
edit
dl
rm
qconf.h
6552
0644
edit
dl
rm
streamline_config.pl
16821
0755
edit
dl
rm
symbol.c
29410
0644
edit
dl
rm
symbol.o
26552
0644
edit
dl
rm
util.c
2210
0644
edit
dl
rm
util.o
5104
0644
edit
dl
rm
Edit:
/usr/src/linux-headers-5.15.0-190/scripts/kconfig/expr.h
(9653B)
/* SPDX-License-Identifier: GPL-2.0 */ /* * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org> */ #ifndef EXPR_H #define EXPR_H #ifdef __cplusplus extern "C" { #endif #include <assert.h> #include <stdio.h> #include "list.h" #ifndef __cplusplus #include <stdbool.h> #endif struct file { struct file *next; struct file *parent; const char *name; int lineno; }; typedef enum tristate { no, mod, yes } tristate; enum expr_type { E_NONE, E_OR, E_AND, E_NOT, E_EQUAL, E_UNEQUAL, E_LTH, E_LEQ, E_GTH, E_GEQ, E_LIST, E_SYMBOL, E_RANGE }; union expr_data { struct expr *expr; struct symbol *sym; }; struct expr { enum expr_type type; union expr_data left, right; }; #define EXPR_OR(dep1, dep2) (((dep1)>(dep2))?(dep1):(dep2)) #define EXPR_AND(dep1, dep2) (((dep1)<(dep2))?(dep1):(dep2)) #define EXPR_NOT(dep) (2-(dep)) #define expr_list_for_each_sym(l, e, s) \ for (e = (l); e && (s = e->right.sym); e = e->left.expr) struct expr_value { struct expr *expr; tristate tri; }; struct symbol_value { void *val; tristate tri; }; enum symbol_type { S_UNKNOWN, S_BOOLEAN, S_TRISTATE, S_INT, S_HEX, S_STRING }; /* enum values are used as index to symbol.def[] */ enum { S_DEF_USER, /* main user value */ S_DEF_AUTO, /* values read from auto.conf */ S_DEF_DEF3, /* Reserved for UI usage */ S_DEF_DEF4, /* Reserved for UI usage */ S_DEF_COUNT }; /* * Represents a configuration symbol. * * Choices are represented as a special kind of symbol and have the * SYMBOL_CHOICE bit set in 'flags'. */ struct symbol { /* The next symbol in the same bucket in the symbol hash table */ struct symbol *next; /* The name of the symbol, e.g. "FOO" for 'config FOO' */ char *name; /* S_BOOLEAN, S_TRISTATE, ... */ enum symbol_type type; /* * The calculated value of the symbol. The SYMBOL_VALID bit is set in * 'flags' when this is up to date. Note that this value might differ * from the user value set in e.g. a .config file, due to visibility. */ struct symbol_value curr; /* * Values for the symbol provided from outside. def[S_DEF_USER] holds * the .config value. */ struct symbol_value def[S_DEF_COUNT]; /* * An upper bound on the tristate value the user can set for the symbol * if it is a boolean or tristate. Calculated from prompt dependencies, * which also inherit dependencies from enclosing menus, choices, and * ifs. If 'n', the user value will be ignored. * * Symbols lacking prompts always have visibility 'n'. */ tristate visible; /* SYMBOL_* flags */ int flags; /* List of properties. See prop_type. */ struct property *prop; /* Dependencies from enclosing menus, choices, and ifs */ struct expr_value dir_dep; /* Reverse dependencies through being selected by other symbols */ struct expr_value rev_dep; /* * "Weak" reverse dependencies through being implied by other symbols */ struct expr_value implied; }; #define for_all_symbols(i, sym) for (i = 0; i < SYMBOL_HASHSIZE; i++) for (sym = symbol_hash[i]; sym; sym = sym->next) #define SYMBOL_CONST 0x0001 /* symbol is const */ #define SYMBOL_CHECK 0x0008 /* used during dependency checking */ #define SYMBOL_CHOICE 0x0010 /* start of a choice block (null name) */ #define SYMBOL_CHOICEVAL 0x0020 /* used as a value in a choice block */ #define SYMBOL_VALID 0x0080 /* set when symbol.curr is calculated */ #define SYMBOL_OPTIONAL 0x0100 /* choice is optional - values can be 'n' */ #define SYMBOL_WRITE 0x0200 /* write symbol to file (KCONFIG_CONFIG) */ #define SYMBOL_CHANGED 0x0400 /* ? */ #define SYMBOL_WRITTEN 0x0800 /* track info to avoid double-write to .config */ #define SYMBOL_NO_WRITE 0x1000 /* Symbol for internal use only; it will not be written */ #define SYMBOL_CHECKED 0x2000 /* used during dependency checking */ #define SYMBOL_WARNED 0x8000 /* warning has been issued */ /* Set when symbol.def[] is used */ #define SYMBOL_DEF 0x10000 /* First bit of SYMBOL_DEF */ #define SYMBOL_DEF_USER 0x10000 /* symbol.def[S_DEF_USER] is valid */ #define SYMBOL_DEF_AUTO 0x20000 /* symbol.def[S_DEF_AUTO] is valid */ #define SYMBOL_DEF3 0x40000 /* symbol.def[S_DEF_3] is valid */ #define SYMBOL_DEF4 0x80000 /* symbol.def[S_DEF_4] is valid */ /* choice values need to be set before calculating this symbol value */ #define SYMBOL_NEED_SET_CHOICE_VALUES 0x100000 #define SYMBOL_MAXLENGTH 256 #define SYMBOL_HASHSIZE 9973 /* A property represent the config options that can be associated * with a config "symbol". * Sample: * config FOO * default y * prompt "foo prompt" * select BAR * config BAZ * int "BAZ Value" * range 1..255 * * Please, also check parser.y:print_symbol() when modifying the * list of property types! */ enum prop_type { P_UNKNOWN, P_PROMPT, /* prompt "foo prompt" or "BAZ Value" */ P_COMMENT, /* text associated with a comment */ P_MENU, /* prompt associated with a menu or menuconfig symbol */ P_DEFAULT, /* default y */ P_CHOICE, /* choice value */ P_SELECT, /* select BAR */ P_IMPLY, /* imply BAR */ P_RANGE, /* range 7..100 (for a symbol) */ P_SYMBOL, /* where a symbol is defined */ }; struct property { struct property *next; /* next property - null if last */ enum prop_type type; /* type of property */ const char *text; /* the prompt value - P_PROMPT, P_MENU, P_COMMENT */ struct expr_value visible; struct expr *expr; /* the optional conditional part of the property */ struct menu *menu; /* the menu the property are associated with * valid for: P_SELECT, P_RANGE, P_CHOICE, * P_PROMPT, P_DEFAULT, P_MENU, P_COMMENT */ struct file *file; /* what file was this property defined */ int lineno; /* what lineno was this property defined */ }; #define for_all_properties(sym, st, tok) \ for (st = sym->prop; st; st = st->next) \ if (st->type == (tok)) #define for_all_defaults(sym, st) for_all_properties(sym, st, P_DEFAULT) #define for_all_choices(sym, st) for_all_properties(sym, st, P_CHOICE) #define for_all_prompts(sym, st) \ for (st = sym->prop; st; st = st->next) \ if (st->text) /* * Represents a node in the menu tree, as seen in e.g. menuconfig (though used * for all front ends). Each symbol, menu, etc. defined in the Kconfig files * gets a node. A symbol defined in multiple locations gets one node at each * location. */ struct menu { /* The next menu node at the same level */ struct menu *next; /* The parent menu node, corresponding to e.g. a menu or choice */ struct menu *parent; /* The first child menu node, for e.g. menus and choices */ struct menu *list; /* * The symbol associated with the menu node. Choices are implemented as * a special kind of symbol. NULL for menus, comments, and ifs. */ struct symbol *sym; /* * The prompt associated with the node. This holds the prompt for a * symbol as well as the text for a menu or comment, along with the * type (P_PROMPT, P_MENU, etc.) */ struct property *prompt; /* * 'visible if' dependencies. If more than one is given, they will be * ANDed together. */ struct expr *visibility; /* * Ordinary dependencies from e.g. 'depends on' and 'if', ANDed * together */ struct expr *dep; /* MENU_* flags */ unsigned int flags; /* Any help text associated with the node */ char *help; /* The location where the menu node appears in the Kconfig files */ struct file *file; int lineno; /* For use by front ends that need to store auxiliary data */ void *data; }; /* * Set on a menu node when the corresponding symbol changes state in some way. * Can be checked by front ends. */ #define MENU_CHANGED 0x0001 #define MENU_ROOT 0x0002 struct jump_key { struct list_head entries; size_t offset; struct menu *target; int index; }; extern struct file *file_list; extern struct file *current_file; struct file *lookup_file(const char *name); extern struct symbol symbol_yes, symbol_no, symbol_mod; extern struct symbol *modules_sym; extern int cdebug; struct expr *expr_alloc_symbol(struct symbol *sym); struct expr *expr_alloc_one(enum expr_type type, struct expr *ce); struct expr *expr_alloc_two(enum expr_type type, struct expr *e1, struct expr *e2); struct expr *expr_alloc_comp(enum expr_type type, struct symbol *s1, struct symbol *s2); struct expr *expr_alloc_and(struct expr *e1, struct expr *e2); struct expr *expr_alloc_or(struct expr *e1, struct expr *e2); struct expr *expr_copy(const struct expr *org); void expr_free(struct expr *e); void expr_eliminate_eq(struct expr **ep1, struct expr **ep2); int expr_eq(struct expr *e1, struct expr *e2); tristate expr_calc_value(struct expr *e); struct expr *expr_eliminate_dups(struct expr *e); struct expr *expr_transform(struct expr *e); int expr_contains_symbol(struct expr *dep, struct symbol *sym); bool expr_depends_symbol(struct expr *dep, struct symbol *sym); struct expr *expr_trans_compare(struct expr *e, enum expr_type type, struct symbol *sym); void expr_fprint(struct expr *e, FILE *out); struct gstr; /* forward */ void expr_gstr_print(struct expr *e, struct gstr *gs); void expr_gstr_print_revdep(struct expr *e, struct gstr *gs, tristate pr_type, const char *title); static inline int expr_is_yes(struct expr *e) { return !e || (e->type == E_SYMBOL && e->left.sym == &symbol_yes); } static inline int expr_is_no(struct expr *e) { return e && (e->type == E_SYMBOL && e->left.sym == &symbol_no); } #ifdef __cplusplus } #endif #endif /* EXPR_H */
Save
cmd:
run