Attached patch moves the CBFS payload loader to selfboot.c as it's

the only selfboot user in CBFS.

This way, CBFS can be used without importing selfboot.c, as long as
no payloads are loaded.

Signed-off-by: Patrick Georgi <patrick.georgi@coresystems.de>
Acked-by: Ronald G. Minnich <rminnich@gmail.com>


git-svn-id: svn://svn.coreboot.org/coreboot/trunk@4304 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
Patrick Georgi 2009-05-26 14:00:49 +00:00
parent 58bb497f89
commit d1185bfd35
3 changed files with 20 additions and 18 deletions

View File

@ -71,6 +71,24 @@ struct ip_checksum_vcb {
unsigned short ip_checksum; unsigned short ip_checksum;
}; };
void * cbfs_load_payload(struct lb_memory *lb_mem, const char *name)
{
int selfboot(struct lb_memory *mem, struct cbfs_payload *payload);
struct cbfs_payload *payload = (struct cbfs_payload *)
cbfs_find_file(name, CBFS_TYPE_PAYLOAD);
struct cbfs_payload_segment *segment, *first_segment;
if (payload == NULL)
return (void *) -1;
printk_debug("Got a payload\n");
first_segment = segment = &payload->segments;
selfboot(lb_mem, payload);
printk_emerg("SELFBOOT RETURNED!\n");
return (void *) -1;
}
/* The problem: /* The problem:
* Static executables all want to share the same addresses * Static executables all want to share the same addresses
* in memory because only a few addresses are reliably present on * in memory because only a few addresses are reliably present on

View File

@ -166,5 +166,7 @@ void * cbfs_get_file(const char *name);
void *cbfs_load_optionrom(u16 vendor, u16 device, void * dest); void *cbfs_load_optionrom(u16 vendor, u16 device, void * dest);
int run_address(void *f); int run_address(void *f);
struct cbfs_stage *cbfs_find_file(const char *name, int type);
#endif #endif

View File

@ -174,24 +174,6 @@ void *cbfs_load_optionrom(u16 vendor, u16 device, void * dest)
return dest; return dest;
} }
void * cbfs_load_payload(struct lb_memory *lb_mem, const char *name)
{
int selfboot(struct lb_memory *mem, struct cbfs_payload *payload);
struct cbfs_payload *payload = (struct cbfs_payload *)
cbfs_find_file(name, CBFS_TYPE_PAYLOAD);
struct cbfs_payload_segment *segment, *first_segment;
if (payload == NULL)
return (void *) -1;
printk_debug("Got a payload\n");
first_segment = segment = &payload->segments;
selfboot(lb_mem, payload);
printk_emerg("SELFBOOT RETURNED!\n");
return (void *) -1;
}
void * cbfs_load_stage(const char *name) void * cbfs_load_stage(const char *name)
{ {
struct cbfs_stage *stage = (struct cbfs_stage *) struct cbfs_stage *stage = (struct cbfs_stage *)