aboutsummaryrefslogtreecommitdiff
path: root/src/lib/loaders/load_and_run_payload.c
diff options
context:
space:
mode:
authorAaron Durbin <adurbin@chromium.org>2015-04-28 15:59:12 -0500
committerPatrick Georgi <pgeorgi@google.com>2015-04-30 13:05:13 +0200
commit5e8286bed6f18cd2a85b029911f97da21b38394d (patch)
tree26cdb02663397d6ab40697abef50c3ba6e39aaed /src/lib/loaders/load_and_run_payload.c
parent16110e7ffaf417f98bef2a359ec522f6fc160ee5 (diff)
program loading: add optional is_loader_active() callback
Add a way for a loader to indicate if it is active. Such users of this callback would be vboot which can indicate to the rest of the system that it isn't active. is_loader_active() also gives vboot a chance to perform the necessary work to make said decision. Change-Id: I6679ac75b19bb1bfff9c2b709da5591986f752ff Signed-off-by: Aaron Durbin <adurbin@chromium.org> Reviewed-on: http://review.coreboot.org/10022 Tested-by: build bot (Jenkins) Reviewed-by: Patrick Georgi <pgeorgi@google.com>
Diffstat (limited to 'src/lib/loaders/load_and_run_payload.c')
-rw-r--r--src/lib/loaders/load_and_run_payload.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/lib/loaders/load_and_run_payload.c b/src/lib/loaders/load_and_run_payload.c
index 0e08d8829d..7a08097884 100644
--- a/src/lib/loaders/load_and_run_payload.c
+++ b/src/lib/loaders/load_and_run_payload.c
@@ -54,7 +54,24 @@ void payload_load(void)
struct prog *payload = &global_payload;
for (i = 0; i < ARRAY_SIZE(payload_ops); i++) {
+ /* Default loader state is active. */
+ int ret = 1;
+
ops = payload_ops[i];
+
+ if (ops->is_loader_active != NULL)
+ ret = ops->is_loader_active(payload);
+
+ if (ret == 0) {
+ printk(BIOS_DEBUG, "%s payload loader inactive.\n",
+ ops->name);
+ continue;
+ } else if (ret < 0) {
+ printk(BIOS_DEBUG, "%s payload loader failure.\n",
+ ops->name);
+ continue;
+ }
+
if (ops->prepare(payload) < 0) {
printk(BIOS_DEBUG, "%s: could not locate payload.\n",
ops->name);