From mboxrd@z Thu Jan 1 00:00:00 1970 From: Simon Glass Date: Wed, 13 May 2020 08:23:58 -0600 Subject: [PATCH 12/13] cbfs: Allow reading a file from a CBFS given its base addr In-Reply-To: <20200513142359.147589-1-sjg@chromium.org> References: <20200513142359.147589-1-sjg@chromium.org> Message-ID: <20200513142359.147589-13-sjg@chromium.org> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de 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 --- fs/cbfs/cbfs.c | 13 +++++++++++++ include/cbfs.h | 11 +++++++++++ 2 files changed, 24 insertions(+) diff --git a/fs/cbfs/cbfs.c b/fs/cbfs/cbfs.c index 76613fa871..1603409a8f 100644 --- a/fs/cbfs/cbfs.c +++ b/fs/cbfs/cbfs.c @@ -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, (u8 *)base, node); +} + const char *file_cbfs_name(const struct cbfs_cachenode *file) { cbfs_s.result = CBFS_SUCCESS; diff --git a/include/cbfs.h b/include/cbfs.h index 4dd3c0795d..b1a8d2cad2 100644 --- a/include/cbfs.h +++ b/include/cbfs.h @@ -173,6 +173,17 @@ 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() - Find a file in CBFS without using the heap + * + * @base: Points to the base of the CBFS + * @name: The name to search for + * @node: Returns the node if found + * @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. * -- 2.26.2.645.ge9eca65c58-goog