59 entries_size = root_size;
61 entries_size -=
sizeof(
struct imd_root);
63 return entries_size /
sizeof(
struct imd_entry);
121 if (root_size < (
sizeof(*rp) +
sizeof(*r) +
sizeof(*e)))
130 if (entry_align > root_size)
135 root_offset = -(
ssize_t)root_size;
199 if (start_addr < low_limit)
248 if (max_size < root_size)
252 smax_size = max_size - root_size;
253 smax_size = -smax_size;
294 e_offset -= (
ssize_t)used_size;
392 size_t lg_root_size,
size_t lg_entry_align,
393 size_t sm_root_size,
size_t sm_entry_align)
395 size_t sm_region_size;
406 sm_region_size += sm_root_size;
407 sm_region_size =
ALIGN_UP(sm_region_size, lg_entry_align);
604 if (
r->num_entries == 1)
628 for (j = 0; j <
size; j++) {
629 if (lookup[j].
id == e->
id) {
691 cursor->current_entry = 0;
void * memset(void *dstpp, int c, size_t len)
#define assert(statement)
#define CBMEM_ID_IMD_ROOT
#define printk(level,...)
static void imdr_init(struct imdr *ir, void *upper_limit)
static struct imd_entry * imd_entry_add_to_root(struct imd_root *r, uint32_t id, size_t size)
static size_t imd_root_data_left(struct imd_root *r)
static int imdr_recover(struct imdr *imdr)
static const struct imdr * imd_entry_to_imdr(const struct imd *imd, const struct imd_entry *entry)
static struct imd_entry * root_last_entry(struct imd_root *r)
static void * imdr_entry_at(const struct imdr *imdr, const struct imd_entry *e)
static const struct imd_entry * imdr_entry_find(const struct imdr *imdr, uint32_t id)
int imd_limit_size(struct imd *imd, size_t max_size)
static const struct imd_entry * imdr_entry_add(const struct imdr *imdr, uint32_t id, size_t size)
int imd_create_empty(struct imd *imd, size_t root_size, size_t entry_align)
static void * relative_pointer(void *base, ssize_t offset)
const struct imd_entry * imd_entry_find(const struct imd *imd, uint32_t id)
static struct imd_root_pointer * imdr_get_root_pointer(const struct imdr *imdr)
static int imdr_create_empty(struct imdr *imdr, size_t root_size, size_t entry_align)
static bool imdr_has_entry(const struct imdr *imdr, const struct imd_entry *e)
static bool imd_root_pointer_valid(const struct imd_root_pointer *rp)
static struct imd_root * imdr_root(const struct imdr *imdr)
int imd_lockdown(struct imd *imd)
const struct imd_entry * imd_cursor_next(struct imd_cursor *cursor)
void * imd_entry_at(const struct imd *imd, const struct imd_entry *entry)
int imd_entry_remove(const struct imd *imd, const struct imd_entry *entry)
static size_t imdr_entry_size(const struct imd_entry *e)
static bool root_is_locked(const struct imd_root *r)
void imd_handle_init_partial_recovery(struct imd *imd)
size_t imd_entry_size(const struct imd_entry *entry)
uint32_t imd_entry_id(const struct imd_entry *entry)
int imd_recover(struct imd *imd)
static size_t root_num_entries(size_t root_size)
int imd_region_used(struct imd *imd, void **base, size_t *size)
int imd_print_entries(const struct imd *imd, const struct imd_lookup *lookup, size_t size)
const struct imd_entry * imd_entry_add(const struct imd *imd, uint32_t id, size_t size)
static void imd_entry_assign(struct imd_entry *e, uint32_t id, ssize_t offset, size_t size)
static void imd_link_root(struct imd_root_pointer *rp, struct imd_root *r)
static int imdr_limit_size(struct imdr *imdr, size_t max_size)
static void imdr_print_entries(const struct imdr *imdr, const char *indent, const struct imd_lookup *lookup, size_t size)
void imd_handle_init(struct imd *imd, void *upper_limit)
int imd_create_tiered_empty(struct imd *imd, size_t lg_root_size, size_t lg_entry_align, size_t sm_root_size, size_t sm_entry_align)
int imd_cursor_init(const struct imd *imd, struct imd_cursor *cursor)
const struct imd_entry * imd_entry_find_or_add(const struct imd *imd, uint32_t id, size_t size)
#define IMD_ROOT_PTR_MAGIC
#define BIOS_DEBUG
BIOS_DEBUG - Verbose output.
struct imd_entry entries[0]