void payload_load(void) { int i; const struct prog_loader_ops *ops; struct prog *payload = &global_payload; for (i = 0; i < ARRAY_SIZE(payload_ops); i++) { ops = payload_ops[i]; if (ops->prepare(payload) < 0) { printk(BIOS_DEBUG, "%s: could not locate payload.\n", ops->name); continue; } printk(BIOS_DEBUG, "%s: located payload @ %p, %zu bytes.\n", ops->name, prog_start(payload), prog_size(payload)); break; } if (i == ARRAY_SIZE(payload_ops)) goto out; mirror_payload(payload); /* Pass cbtables to payload if architecture desires it. */ prog_set_entry(payload, selfload(payload), cbmem_find(CBMEM_ID_CBTABLE)); out: if (prog_entry(payload) == NULL) die("Payload not loaded.\n"); }
void payload_load(void) { struct prog *payload = &global_payload; timestamp_add_now(TS_LOAD_PAYLOAD); if (prog_locate(payload)) goto out; mirror_payload(payload); /* Pass cbtables to payload if architecture desires it. */ prog_set_entry(payload, selfload(payload), cbmem_find(CBMEM_ID_CBTABLE)); out: if (prog_entry(payload) == NULL) die("Payload not loaded.\n"); }