25 #define MCACHE_MAGIC_FILE 0x454c4946
26 #define MCACHE_MAGIC_FULL 0x4c4c5546
27 #define MCACHE_MAGIC_END 0x444e4524
44 size_t already_read,
void *
arg)
50 if (
args->end -
args->mcache < data_offset)
66 struct vb2_hash *metadata_hash)
82 ERROR(
"mcache overflow, should increase CBFS_MCACHE size!\n");
86 LOG(
"mcache @%p built for %d files, used %#zx of %#zx bytes\n", mcache,
87 args.count,
args.mcache +
sizeof(entry->
magic) - mcache, size);
92 union cbfs_mdata *mdata_out,
size_t *data_offset_out)
95 const void *end = mcache + mcache_size;
96 const void *current = mcache;
98 while (current +
sizeof(
uint32_t) <= end) {
111 LOG(
"Found '%s' @%#x size %#x in mcache @%p\n",
113 *data_offset_out = entry->
offset + data_offset;
121 ERROR(
"CBFS mcache is not terminated!\n");
127 const void *end = mcache + mcache_size;
128 const void *current = mcache;
130 while (current +
sizeof(
uint32_t) <= end) {
134 current +=
sizeof(entry->
magic);
142 return current - mcache;
void * memcpy(void *dest, const void *src, size_t n)
#define assert(statement)
#define offsetof(TYPE, MEMBER)
cb_err
coreboot error codes
@ CB_ERR
Generic error code.
@ CB_CBFS_CACHE_FULL
Metadata cache overflowed.
@ CB_SUCCESS
Call completed successfully.
@ CB_CBFS_IO
Underlying I/O error.
@ CB_CBFS_NOT_FOUND
File not found in directory.
enum cb_err cbfs_mcache_build(cbfs_dev_t dev, void *mcache, size_t size, struct vb2_hash *metadata_hash)
enum cb_err cbfs_mcache_lookup(const void *mcache, size_t mcache_size, const char *name, union cbfs_mdata *mdata_out, size_t *data_offset_out)
#define MCACHE_MAGIC_FULL
size_t cbfs_mcache_real_size(const void *mcache, size_t mcache_size)
#define MCACHE_MAGIC_FILE
static enum cb_err build_walker(cbfs_dev_t dev, size_t offset, const union cbfs_mdata *mdata, size_t already_read, void *arg)
enum cb_err cbfs_walk(cbfs_dev_t dev, enum cb_err(*walker)(cbfs_dev_t dev, size_t offset, const union cbfs_mdata *mdata, size_t already_read, void *arg), void *arg, struct vb2_hash *metadata_hash, enum cbfs_walk_flags flags)
enum cb_err cbfs_copy_fill_metadata(union cbfs_mdata *dst, const union cbfs_mdata *src, size_t already_read, cbfs_dev_t dev, size_t offset)
#define CBFS_MCACHE_ALIGNMENT
static uint32_t be32toh(uint32_t big_endian_32bits)
int memcmp(const void *s1, const void *s2, size_t n)
size_t strlen(const char *src)