40 "Callers not supposed to call selfload_check() in romstage");
51 printk(
BIOS_ERR,
"SELF segment doesn't target RAM: %p, %lu bytes\n", dest, memsz);
63 unsigned char *middle, *end;
64 printk(
BIOS_DEBUG,
"Loading Segment: addr: %p memsz: 0x%016zx filesz: 0x%016zx\n",
103 (
unsigned long)middle,
110 "Clearing Segment: addr: 0x%016lx memsz: 0x%016lx\n",
111 (
unsigned long)middle,
112 (
unsigned long)(end - middle));
115 memset(middle, 0, end - middle);
146 for (seg = cbfssegs;; ++seg) {
162 size_t filesz, memsz;
167 for (first_segment = seg = cbfssegs;; ++seg) {
174 filesz = segment.
len;
176 switch (segment.
type) {
184 " New segment dstaddr %p memsize 0x%zx srcaddr %p filesize 0x%zx\n",
185 dest, memsz, src, filesz);
188 if (filesz > memsz) {
void * memcpy(void *dest, const void *src, size_t n)
void * memset(void *dstpp, int c, size_t len)
void bootmem_dump_ranges(void)
bootmem_type
Bootmem types match to LB_MEM tags, except for the following: BM_MEM_RAMSTAGE : Memory where any kind...
int bootmem_region_targets_type(uint64_t start, uint64_t size, enum bootmem_type dest_type)
void cbfs_unmap(void *mapping)
static void * cbfs_type_map(const char *name, size_t *size_out, enum cbfs_type *type)
void * cbmem_find(u32 id)
static uint32_t read_be32(const void *src)
static uint64_t read_be64(const void *src)
#define printk(level,...)
size_t ulz4fn(const void *src, size_t srcn, void *dst, size_t dstn)
void timestamp_add_now(enum timestamp_id id)
size_t ulzman(const void *src, size_t srcn, void *dst, size_t dstn)
#define BIOS_INFO
BIOS_INFO - Expected events.
#define BIOS_DEBUG
BIOS_DEBUG - Verbose output.
#define BIOS_EMERG
BIOS_EMERG - Emergency / Fatal.
#define BIOS_ERR
BIOS_ERR - System in incomplete state.
#define BIOS_SPEW
BIOS_SPEW - Excessively verbose output.
void prog_segment_loaded(uintptr_t start, size_t size, int flags)
static void prog_set_entry(struct prog *prog, void *e, void *arg)
static const char * prog_name(const struct prog *prog)
int prog_locate_hook(struct prog *prog)
const struct smm_save_state_ops *legacy_ops __weak
bool selfload_mapped(struct prog *payload, void *mapping, enum bootmem_type dest_type)
__weak int payload_arch_usable_ram_quirk(uint64_t start, uint64_t size)
bool selfload(struct prog *payload)
static int load_payload_segments(struct cbfs_payload_segment *cbfssegs, uintptr_t *entry)
static int segment_targets_type(void *dest, unsigned long memsz, enum bootmem_type dest_type)
static int load_one_segment(uint8_t *dest, uint8_t *src, size_t len, size_t memsz, uint32_t compression, int flags)
int(* checker_t)(struct cbfs_payload_segment *cbfssegs, void *args)
static void cbfs_decode_payload_segment(struct cbfs_payload_segment *segment, const struct cbfs_payload_segment *src)
bool selfload_check(struct prog *payload, enum bootmem_type dest_type)
static int check_payload_segments(struct cbfs_payload_segment *cbfssegs, enum bootmem_type dest_type)
static int last_loadable_segment(struct cbfs_payload_segment *seg)
unsigned long long uint64_t
this is the sub-header for payload components.