From ce9efe061a23bc3e3d2a4c17cf29692ce6f9eb53 Mon Sep 17 00:00:00 2001 From: Aaron Durbin Date: Fri, 20 Mar 2015 16:37:12 -0500 Subject: program loading: unify on struct prog Instead of having different structures for loading ramstage and payload align to using struct prog. This also removes arch_payload_run() in favor of the prog_run() interface. Change-Id: I31483096094eacc713a7433811cd69cc5621c43e Signed-off-by: Aaron Durbin Reviewed-on: http://review.coreboot.org/8849 Tested-by: Raptor Engineering Automated Test Stand Tested-by: build bot (Jenkins) Reviewed-by: Marc Jones --- src/include/program_loading.h | 47 ++++++++++++++----------------------------- 1 file changed, 15 insertions(+), 32 deletions(-) (limited to 'src/include/program_loading.h') diff --git a/src/include/program_loading.h b/src/include/program_loading.h index 1df1825869..269988777f 100644 --- a/src/include/program_loading.h +++ b/src/include/program_loading.h @@ -50,7 +50,8 @@ struct prog { const char *name; /* The area can mean different things depending on what type the * program is. e.g. a payload prog uses this field for the backing - * store of the payload_segments and data. */ + * store of the payload_segments and data. After loading the segments + * area is updated to reflect the bounce buffer used. */ struct buffer_area area; /* Entry to program with optional argument. It's up to the architecture * to decide if argument is passed. */ @@ -100,6 +101,14 @@ void arch_prog_run(struct prog *prog); * code it needs to that as well. */ void platform_prog_run(struct prog *prog); +struct prog_loader_ops { + const char *name; + /* Returns < 0 on error or 0 on success. This function needs to do + * different things depending on the prog type. See definition + * of struct prog above. */ + int (*prepare)(struct prog *prog); +}; + /************************ * ROMSTAGE LOADING * ************************/ @@ -111,6 +120,9 @@ void run_romstage(void); * RAMSTAGE LOADING * ************************/ +/* Run ramstage from romstage. */ +void run_ramstage(void); + struct romstage_handoff; #if IS_ENABLED(CONFIG_RELOCATABLE_RAMSTAGE) /* Cache the loaded ramstage described by prog. */ @@ -124,25 +136,10 @@ static inline void load_cached_ramstage(struct romstage_handoff *h, struct prog *p) {} #endif -/* Run ramstage from romstage. */ -void run_ramstage(void); - -struct ramstage_loader_ops { - const char *name; - /* Returns 0 on succes. < 0 on error. */ - int (*load)(struct prog *ramstage); -}; - /*********************** * PAYLOAD LOADING * ***********************/ -struct payload { - struct prog prog; - /* Used when payload wants memory coreboot ramstage is running at. */ - struct buffer_area bounce; -}; - /* Load payload into memory in preparation to run. */ void payload_load(void); @@ -150,23 +147,9 @@ void payload_load(void); void payload_run(void); /* Mirror the payload to be loaded. */ -void mirror_payload(struct payload *payload); - -/* architecture specific function to run payload. */ -void arch_payload_run(struct payload *payload); - -/* Payload loading operations. */ -struct payload_loader_ops { - const char *name; - /* - * Fill in payload_backing_store structure. Return 0 on success, < 0 - * on failure. - */ - int (*locate)(struct payload *payload); -}; +void mirror_payload(struct prog *payload); /* Defined in src/lib/selfboot.c */ -void *selfload(struct payload *payload); - +void *selfload(struct prog *payload); #endif /* PROGRAM_LOADING_H */ -- cgit v1.2.3