diff options
author | Julius Werner <jwerner@chromium.org> | 2020-12-29 17:51:04 -0800 |
---|---|---|
committer | Julius Werner <jwerner@chromium.org> | 2021-03-08 22:31:16 +0000 |
commit | 11075fc80e00186cb5b488e8e0fd280cd4e97823 (patch) | |
tree | 37d2054276102cfdbc9da10bf74cba14d4bbbf54 /src | |
parent | 723e3b10afe40a8fff2fa85c6ec2e10852533425 (diff) |
cbfs: Move trivial wrappers to static inlines
The new CBFS API contains a couple of trivial wrappers that all just
call the same base functions with slightly different predetermined
arguments, and I'm planning to add several more of them as well. This
patch changes these functions to become static inlines, and reorganizes
the cbfs.h header a bit for better readability while I'm at it.
Signed-off-by: Julius Werner <jwerner@chromium.org>
Change-Id: If0170401b2a70c158691b6eb56c7e312553afad1
Reviewed-on: https://review.coreboot.org/c/coreboot/+/49331
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/include/cbfs.h | 90 | ||||
-rw-r--r-- | src/lib/cbfs.c | 24 |
2 files changed, 68 insertions, 46 deletions
diff --git a/src/include/cbfs.h b/src/include/cbfs.h index 431f6e5fea..e08af56399 100644 --- a/src/include/cbfs.h +++ b/src/include/cbfs.h @@ -9,50 +9,39 @@ #include <types.h> #include <vb2_sha.h> -/*********************************************** - * Perform CBFS operations on the boot device. * - ***********************************************/ -/* Return mapping of option ROM found in boot device. NULL on error. */ -void *cbfs_boot_map_optionrom(uint16_t vendor, uint16_t device); -/* Return mapping of option ROM with revision number. Returns NULL on error. */ -void *cbfs_boot_map_optionrom_revision(uint16_t vendor, uint16_t device, uint8_t rev); - -/* Locate file by name and optional type. Return 0 on success. < 0 on error. */ -int cbfs_boot_locate(struct cbfsf *fh, const char *name, uint32_t *type); -/* Locate file in a specific region of fmap. Return 0 on success. < 0 on error*/ -int cbfs_locate_file_in_region(struct cbfsf *fh, const char *region_name, - const char *name, uint32_t *type); +/********************************************************************************************** + * CBFS FILE ACCESS APIs * + **********************************************************************************************/ /* Map file into memory, returning a pointer to the mapping or NULL on error. If |size_out| is not NULL, it will pass out the size of the mapped file. NOTE: Since this may return a direct pointer to memory-mapped hardware, compressed files are NOT transparently decompressed (unlike cbfs_load()). */ -void *cbfs_map(const char *name, size_t *size_out); +static inline void *cbfs_map(const char *name, size_t *size_out); + /* Like cbfs_map(), except that it will always read from the read-only CBFS (the "COREBOOT" FMAP region), even when CONFIG(VBOOT) is enabled. */ -void *cbfs_ro_map(const char *name, size_t *size_out); +static inline void *cbfs_ro_map(const char *name, size_t *size_out); + /* Removes a previously allocated CBFS mapping. Should try to unmap mappings in strict LIFO order where possible, since mapping backends often don't support more complicated cases. */ int cbfs_unmap(void *mapping); /* Load a file from CBFS into a buffer. Returns amount of loaded bytes on success or 0 on error. File will get decompressed as necessary. */ -size_t cbfs_load(const char *name, void *buf, size_t buf_size); +static inline size_t cbfs_load(const char *name, void *buf, size_t buf_size); /* Like cbfs_load(), except that it will always read from the read-only CBFS (the "COREBOOT" FMAP region), even when CONFIG(VBOOT) is enabled. */ -size_t cbfs_ro_load(const char *name, void *buf, size_t buf_size); - -/* Load |in_size| bytes from |rdev| at |offset| to the |buffer_size| bytes large |buffer|, - decompressing it according to |compression| in the process. Returns the decompressed file - size, or 0 on error. LZMA files will be mapped for decompression. LZ4 files will be - decompressed in-place with the buffer size requirements outlined in compression.h. */ -size_t cbfs_load_and_decompress(const struct region_device *rdev, size_t offset, - size_t in_size, void *buffer, size_t buffer_size, uint32_t compression); +static inline size_t cbfs_ro_load(const char *name, void *buf, size_t buf_size); /* Load stage into memory filling in prog. Return 0 on success. < 0 on error. */ int cbfs_prog_stage_load(struct prog *prog); +/********************************************************************************************** + * BOOT DEVICE HELPER APIs * + **********************************************************************************************/ + /* * Data structure that represents "a" CBFS boot device, with optional metadata cache. Generally * we only have one of these, or two (RO and RW) when CONFIG(VBOOT) is set. The region device @@ -83,4 +72,57 @@ const struct cbfs_boot_device *cbfs_get_boot_device(bool force_ro); cb_err_t cbfs_init_boot_device(const struct cbfs_boot_device *cbd, struct vb2_hash *metadata_hash); + +/********************************************************************************************** + * LEGACY APIs, TO BE DEPRECATED/REPLACED * + **********************************************************************************************/ + +/* Locate file by name and optional type. Return 0 on success. < 0 on error. */ +int cbfs_boot_locate(struct cbfsf *fh, const char *name, uint32_t *type); +/* Locate file in a specific region of fmap. Return 0 on success. < 0 on error*/ +int cbfs_locate_file_in_region(struct cbfsf *fh, const char *region_name, + const char *name, uint32_t *type); + +/* Return mapping of option ROM found in boot device. NULL on error. */ +void *cbfs_boot_map_optionrom(uint16_t vendor, uint16_t device); +/* Return mapping of option ROM with revision number. Returns NULL on error. */ +void *cbfs_boot_map_optionrom_revision(uint16_t vendor, uint16_t device, uint8_t rev); + +/* Load |in_size| bytes from |rdev| at |offset| to the |buffer_size| bytes large |buffer|, + decompressing it according to |compression| in the process. Returns the decompressed file + size, or 0 on error. LZMA files will be mapped for decompression. LZ4 files will be + decompressed in-place with the buffer size requirements outlined in compression.h. */ +size_t cbfs_load_and_decompress(const struct region_device *rdev, size_t offset, + size_t in_size, void *buffer, size_t buffer_size, uint32_t compression); + +/********************************************************************************************** + * INTERNAL HELPERS FOR INLINES, DO NOT USE. * + **********************************************************************************************/ +size_t _cbfs_load(const char *name, void *buf, size_t buf_size, bool force_ro); +void *_cbfs_map(const char *name, size_t *size_out, bool force_ro); + + +/********************************************************************************************** + * INLINE IMPLEMENTATIONS * + **********************************************************************************************/ +static inline void *cbfs_map(const char *name, size_t *size_out) +{ + return _cbfs_map(name, size_out, false); +} + +static inline void *cbfs_ro_map(const char *name, size_t *size_out) +{ + return _cbfs_map(name, size_out, true); +} + +static inline size_t cbfs_load(const char *name, void *buf, size_t buf_size) +{ + return _cbfs_load(name, buf, buf_size, false); +} + +static inline size_t cbfs_ro_load(const char *name, void *buf, size_t buf_size) +{ + return _cbfs_load(name, buf, buf_size, true); +} + #endif diff --git a/src/lib/cbfs.c b/src/lib/cbfs.c index be2ab72662..fa6c2e3021 100644 --- a/src/lib/cbfs.c +++ b/src/lib/cbfs.c @@ -90,7 +90,7 @@ int cbfs_boot_locate(struct cbfsf *fh, const char *name, uint32_t *type) return 0; } -static void *_cbfs_map(const char *name, size_t *size_out, bool force_ro) +void *_cbfs_map(const char *name, size_t *size_out, bool force_ro) { struct region_device rdev; union cbfs_mdata mdata; @@ -104,16 +104,6 @@ static void *_cbfs_map(const char *name, size_t *size_out, bool force_ro) return rdev_mmap_full(&rdev); } -void *cbfs_map(const char *name, size_t *size_out) -{ - return _cbfs_map(name, size_out, false); -} - -void *cbfs_ro_map(const char *name, size_t *size_out) -{ - return _cbfs_map(name, size_out, true); -} - int cbfs_unmap(void *mapping) { /* This works because munmap() only works on the root rdev and never cares about which @@ -307,7 +297,7 @@ void *cbfs_boot_map_optionrom_revision(uint16_t vendor, uint16_t device, uint8_t return cbfs_map(name, NULL); } -static size_t _cbfs_load(const char *name, void *buf, size_t buf_size, bool force_ro) +size_t _cbfs_load(const char *name, void *buf, size_t buf_size, bool force_ro) { struct region_device rdev; union cbfs_mdata mdata; @@ -328,16 +318,6 @@ static size_t _cbfs_load(const char *name, void *buf, size_t buf_size, bool forc buf, buf_size, compression); } -size_t cbfs_load(const char *name, void *buf, size_t buf_size) -{ - return _cbfs_load(name, buf, buf_size, false); -} - -size_t cbfs_ro_load(const char *name, void *buf, size_t buf_size) -{ - return _cbfs_load(name, buf, buf_size, true); -} - int cbfs_prog_stage_load(struct prog *pstage) { struct cbfs_stage stage; |