cbfs: Allow reading a file from a CBFS given its base addr

Currently we support reading a file from CBFS given the address of the end
of the ROM. Sometimes we only know the start of the CBFS. Add a function
to find a file given that.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
This commit is contained in:
Simon Glass 2020-05-24 17:38:23 -06:00 committed by Bin Meng
parent 924e346a66
commit 03d4c298fa
2 changed files with 27 additions and 0 deletions

View File

@ -413,6 +413,19 @@ int file_cbfs_find_uncached(ulong end_of_rom, const char *name,
return find_uncached(&priv, name, start, node);
}
int file_cbfs_find_uncached_base(ulong base, const char *name,
struct cbfs_cachenode *node)
{
struct cbfs_priv priv;
int ret;
ret = cbfs_load_header_ptr(&priv, base);
if (ret)
return ret;
return find_uncached(&priv, name, (void *)base, node);
}
const char *file_cbfs_name(const struct cbfs_cachenode *file)
{
cbfs_s.result = CBFS_SUCCESS;

View File

@ -174,6 +174,20 @@ int cbfs_init_mem(ulong base, ulong size, struct cbfs_priv **privp);
int file_cbfs_find_uncached(ulong end_of_rom, const char *name,
struct cbfs_cachenode *node);
/**
* file_cbfs_find_uncached_base() - Find a file in CBFS given the base address
*
* Note that @node should be declared by the caller. This design is to avoid
* the need for allocation here.
*
* @base: Points to the base of the CBFS
* @name: The name to search for
* @node: Returns the contents of the node if found (i.e. copied into *node)
* @return 0 on success, -ENOENT if not found, -EFAULT on bad header
*/
int file_cbfs_find_uncached_base(ulong base, const char *name,
struct cbfs_cachenode *node);
/**
* file_cbfs_name() - Get the name of a file in CBFS.
*