image: Add functions to obtain category information

Add generic functions which can look up information about a category:

- the number of items in the category
- the category description
- an item long time
- an item short time

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Tom Rini <trini@konsulko.com>
This commit is contained in:
Simon Glass 2016-06-30 10:52:16 -06:00 committed by Tom Rini
parent 30495bff35
commit 1426220b0e
2 changed files with 102 additions and 0 deletions

View file

@ -583,6 +583,74 @@ const table_entry_t *get_table_entry(const table_entry_t *table, int id)
return NULL;
}
static const char *unknown_msg(enum ih_category category)
{
static char msg[30];
strcpy(msg, "Unknown ");
strcat(msg, table_info[category].desc);
return msg;
}
/**
* get_cat_table_entry_name - translate entry id to long name
* @category: category to look up (enum ih_category)
* @id: entry id to be translated
*
* This will scan the translation table trying to find the entry that matches
* the given id.
*
* @retur long entry name if translation succeeds; error string on failure
*/
const char *genimg_get_cat_name(enum ih_category category, uint id)
{
const table_entry_t *entry;
entry = get_table_entry(table_info[category].table, id);
if (!entry)
return unknown_msg(category);
#if defined(USE_HOSTCC) || !defined(CONFIG_NEEDS_MANUAL_RELOC)
return entry->lname;
#else
return entry->lname + gd->reloc_off;
#endif
}
/**
* get_cat_table_entry_short_name - translate entry id to short name
* @category: category to look up (enum ih_category)
* @id: entry id to be translated
*
* This will scan the translation table trying to find the entry that matches
* the given id.
*
* @retur short entry name if translation succeeds; error string on failure
*/
const char *genimg_get_cat_short_name(enum ih_category category, uint id)
{
const table_entry_t *entry;
entry = get_table_entry(table_info[category].table, id);
if (!entry)
return unknown_msg(category);
#if defined(USE_HOSTCC) || !defined(CONFIG_NEEDS_MANUAL_RELOC)
return entry->sname;
#else
return entry->sname + gd->reloc_off;
#endif
}
int genimg_get_cat_count(enum ih_category category)
{
return table_info[category].count;
}
const char *genimg_get_cat_desc(enum ih_category category)
{
return table_info[category].desc;
}
/**
* get_table_entry_name - translate entry id to long name
* @table: pointer to a translation table for entries of a specific type

View file

@ -478,6 +478,40 @@ const char *genimg_get_comp_name(uint8_t comp);
*/
const char *genimg_get_comp_short_name(uint8_t comp);
/**
* genimg_get_cat_name() - Get the name of an item in a category
*
* @category: Category of item
* @id: Item ID
* @return name of item, or "Unknown ..." if unknown
*/
const char *genimg_get_cat_name(enum ih_category category, uint id);
/**
* genimg_get_cat_short_name() - Get the short name of an item in a category
*
* @category: Category of item
* @id: Item ID
* @return short name of item, or "Unknown ..." if unknown
*/
const char *genimg_get_cat_short_name(enum ih_category category, uint id);
/**
* genimg_get_cat_count() - Get the number of items in a category
*
* @category: Category to check
* @return the number of items in the category (IH_xxx_COUNT)
*/
int genimg_get_cat_count(enum ih_category category);
/**
* genimg_get_cat_desc() - Get the description of a category
*
* @return the description of a category, e.g. "architecture". This
* effectively converts the enum to a string.
*/
const char *genimg_get_cat_desc(enum ih_category category);
int genimg_get_os_id(const char *name);
int genimg_get_arch_id(const char *name);
int genimg_get_type_id(const char *name);