blob: 29621c6680e30b76521318f0c5c4de13f86a82d6 [file] [log] [blame]
Angel Pons32859fc2020-04-02 23:48:27 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Peter Stuge483b7bb2009-04-14 07:40:01 +00002
3#ifndef _CBFS_H_
4#define _CBFS_H_
5
Aaron Durbin295d58b2015-12-15 13:33:51 -06006#include <commonlib/cbfs.h>
Aaron Durbin899d13d2015-05-15 23:39:23 -05007#include <program_loading.h>
Daisuke Nojirie1298df2014-12-01 15:30:01 -08008
Aaron Durbin899d13d2015-05-15 23:39:23 -05009/***********************************************
10 * Perform CBFS operations on the boot device. *
11 ***********************************************/
12
Elyes HAOUAS918535a2016-07-28 21:25:21 +020013/* Return mapping of option ROM found in boot device. NULL on error. */
Aaron Durbin899d13d2015-05-15 23:39:23 -050014void *cbfs_boot_map_optionrom(uint16_t vendor, uint16_t device);
Martin Rotha616a4b2020-01-21 09:28:40 -070015/* Return mapping of option ROM with revision number. Returns NULL on error. */
16void *cbfs_boot_map_optionrom_revision(uint16_t vendor, uint16_t device, uint8_t rev);
Aaron Durbin899d13d2015-05-15 23:39:23 -050017/* Locate file by name and optional type. Return 0 on success. < 0 on error. */
Aaron Durbin37a5d152015-09-17 16:09:30 -050018int cbfs_boot_locate(struct cbfsf *fh, const char *name, uint32_t *type);
Aaron Durbin899d13d2015-05-15 23:39:23 -050019/* Map file into memory leaking the mapping. Only should be used when
20 * leaking mappings are a no-op. Returns NULL on error, else returns
21 * the mapping and sets the size of the file. */
22void *cbfs_boot_map_with_leak(const char *name, uint32_t type, size_t *size);
Pratik Prajapati2a7708a2016-11-30 17:29:10 -080023/* Locate file in a specific region of fmap. Return 0 on success. < 0 on error*/
24int cbfs_locate_file_in_region(struct cbfsf *fh, const char *region_name,
25 const char *name, uint32_t *type);
T Michael Turney809fa7b2018-04-12 13:36:40 -070026/* Load an arbitrary type file from CBFS into a buffer. Returns amount of
27 * loaded bytes on success or 0 on error. File will get decompressed as
28 * necessary. Same decompression requirements as
29 * cbfs_load_and_decompress(). */
30size_t cbfs_boot_load_file(const char *name, void *buf, size_t buf_size,
31 uint32_t type);
Julius Werner09f29212015-09-29 13:51:35 -070032/* Load |in_size| bytes from |rdev| at |offset| to the |buffer_size| bytes
33 * large |buffer|, decompressing it according to |compression| in the process.
34 * Returns the decompressed file size, or 0 on error.
35 * LZMA files will be mapped for decompression. LZ4 files will be decompressed
36 * in-place with the buffer size requirements outlined in compression.h. */
37size_t cbfs_load_and_decompress(const struct region_device *rdev, size_t offset,
38 size_t in_size, void *buffer, size_t buffer_size, uint32_t compression);
39
Aaron Durbin899d13d2015-05-15 23:39:23 -050040/* Load stage into memory filling in prog. Return 0 on success. < 0 on error. */
41int cbfs_prog_stage_load(struct prog *prog);
42
Julius Werner815611e2019-12-05 22:29:07 -080043/* Returns the region device of the currently active CBFS.
Aaron Durbinfe338e22019-11-18 12:35:21 -070044 Return < 0 on error, 0 on success. */
45int cbfs_boot_region_device(struct region_device *rdev);
Aaron Durbin899d13d2015-05-15 23:39:23 -050046
Peter Stuge483b7bb2009-04-14 07:40:01 +000047#endif