diff options
Diffstat (limited to 'scripts/kconfig/expr.h')
| -rw-r--r-- | scripts/kconfig/expr.h | 91 | 
1 files changed, 90 insertions, 1 deletions
diff --git a/scripts/kconfig/expr.h b/scripts/kconfig/expr.h index a73f762c48d6..c16e82e302a2 100644 --- a/scripts/kconfig/expr.h +++ b/scripts/kconfig/expr.h @@ -74,17 +74,60 @@ enum {  	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;  }; @@ -133,7 +176,7 @@ 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 menuconfig option */ +	P_MENU,     /* prompt associated with a menu or menuconfig symbol */  	P_DEFAULT,  /* default y */  	P_CHOICE,   /* choice value */  	P_SELECT,   /* select BAR */ @@ -166,22 +209,67 @@ struct property {  	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 { @@ -222,6 +310,7 @@ struct expr *expr_simplify_unmet_dep(struct expr *e1, struct expr *e2);  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);  static inline int expr_is_yes(struct expr *e)  {  | 
