mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2025-07-06 13:55:22 +02:00
kconfig: add sym_get_choice_menu() helper
Choices and their members are associated via the P_CHOICE property. Currently, prop_get_symbol(sym_get_choice_prop()) is used to obtain the choice of the given choice member. We can do this without relying on P_CHOICE by checking the parent in the menu structure. Introduce a new helper to retrieve the choice if the given symbol is a choice member. This is intended to replace prop_get_symbol(sym_get_choice_prop()) and deprecate P_CHOICE eventually. Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
This commit is contained in:
parent
8a22f867e3
commit
7bcf2e03b5
|
@ -34,6 +34,7 @@ bool sym_string_within_range(struct symbol *sym, const char *str);
|
||||||
bool sym_set_string_value(struct symbol *sym, const char *newval);
|
bool sym_set_string_value(struct symbol *sym, const char *newval);
|
||||||
bool sym_is_changeable(struct symbol *sym);
|
bool sym_is_changeable(struct symbol *sym);
|
||||||
struct property * sym_get_choice_prop(struct symbol *sym);
|
struct property * sym_get_choice_prop(struct symbol *sym);
|
||||||
|
struct menu *sym_get_choice_menu(struct symbol *sym);
|
||||||
const char * sym_get_string_value(struct symbol *sym);
|
const char * sym_get_string_value(struct symbol *sym);
|
||||||
|
|
||||||
const char * prop_get_type_name(enum prop_type type);
|
const char * prop_get_type_name(enum prop_type type);
|
||||||
|
|
|
@ -78,6 +78,41 @@ struct property *sym_get_choice_prop(struct symbol *sym)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* sym_get_choice_menu - get the parent choice menu if present
|
||||||
|
*
|
||||||
|
* @sym: a symbol pointer
|
||||||
|
*
|
||||||
|
* Return: a choice menu if this function is called against a choice member.
|
||||||
|
*/
|
||||||
|
struct menu *sym_get_choice_menu(struct symbol *sym)
|
||||||
|
{
|
||||||
|
struct menu *menu = NULL;
|
||||||
|
struct menu *m;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Choice members must have a prompt. Find a menu entry with a prompt,
|
||||||
|
* and assume it resides inside a choice block.
|
||||||
|
*/
|
||||||
|
list_for_each_entry(m, &sym->menus, link)
|
||||||
|
if (m->prompt) {
|
||||||
|
menu = m;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!menu)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
do {
|
||||||
|
menu = menu->parent;
|
||||||
|
} while (menu && !menu->sym);
|
||||||
|
|
||||||
|
if (menu && menu->sym && sym_is_choice(menu->sym))
|
||||||
|
return menu;
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
static struct property *sym_get_default_prop(struct symbol *sym)
|
static struct property *sym_get_default_prop(struct symbol *sym)
|
||||||
{
|
{
|
||||||
struct property *prop;
|
struct property *prop;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user