coreboot: use struct payload for selfload()

In order to encapsulate more data for self loading use struct
payload as the type. That way modifications to what is needed
for payload loading does not introduce more global variables.

Change-Id: I5b8facd7881e397ca7de1c04cec747fc1dce2d5f
Signed-off-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-on: http://review.coreboot.org/5298
Tested-by: build bot (Jenkins)
Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
Reviewed-by: Edward O'Callaghan <eocallaghan@alterapraxis.com>
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
This commit is contained in:
Aaron Durbin 2014-02-24 21:50:24 -06:00 committed by Aaron Durbin
parent 1322d7f9d5
commit 6086e63a79
3 changed files with 8 additions and 7 deletions

View File

@ -54,8 +54,7 @@ struct payload_loader_ops {
/* Defined in src/lib/selfboot.c */ /* Defined in src/lib/selfboot.c */
struct lb_memory; struct lb_memory;
struct cbfs_payload; void *selfload(struct lb_memory *mem, struct payload *payload);
void *selfload(struct lb_memory *mem, struct cbfs_payload *payload);
void selfboot(void *entry); void selfboot(void *entry);
#endif /* PAYLOAD_LOADER_H */ #endif /* PAYLOAD_LOADER_H */

View File

@ -65,7 +65,7 @@ struct payload *payload_load(void)
return NULL; return NULL;
mem = get_lb_mem(); mem = get_lb_mem();
entry = selfload(mem, payload->backing_store.data); entry = selfload(mem, payload);
if (entry == NULL) if (entry == NULL)
return NULL; return NULL;

View File

@ -302,14 +302,16 @@ static int relocate_segment(unsigned long buffer, struct segment *seg)
static int build_self_segment_list( static int build_self_segment_list(
struct segment *head, struct segment *head,
struct lb_memory *mem, struct lb_memory *mem,
struct cbfs_payload *payload, uintptr_t *entry) struct payload *payload, uintptr_t *entry)
{ {
struct segment *new; struct segment *new;
struct segment *ptr; struct segment *ptr;
struct cbfs_payload_segment *segment, *first_segment; struct cbfs_payload_segment *segment, *first_segment;
struct cbfs_payload *cbfs_payload;
cbfs_payload = payload->backing_store.data;
memset(head, 0, sizeof(*head)); memset(head, 0, sizeof(*head));
head->next = head->prev = head; head->next = head->prev = head;
first_segment = segment = &payload->segments; first_segment = segment = &cbfs_payload->segments;
while(1) { while(1) {
printk(BIOS_DEBUG, "Loading segment from rom address 0x%p\n", segment); printk(BIOS_DEBUG, "Loading segment from rom address 0x%p\n", segment);
@ -394,7 +396,7 @@ static int build_self_segment_list(
static int load_self_segments( static int load_self_segments(
struct segment *head, struct segment *head,
struct lb_memory *mem, struct lb_memory *mem,
struct cbfs_payload *payload) struct payload *payload)
{ {
struct segment *ptr; struct segment *ptr;
@ -500,7 +502,7 @@ static int load_self_segments(
return 1; return 1;
} }
void *selfload(struct lb_memory *mem, struct cbfs_payload *payload) void *selfload(struct lb_memory *mem, struct payload *payload)
{ {
uintptr_t entry = 0; uintptr_t entry = 0;
struct segment head; struct segment head;