coreboot: unify infrastructure for loading payloads

A payload can be loaded either from a vboot region or from cbfs.
Provide a common place for choosing where the payload is loaded
from. Additionally, place the logic in the 'loaders' directory
similarly to the ramstage loader infrastructure.

Change-Id: I6b0034ea5ebd04a3d058151819ac77a126a6bfe2
Signed-off-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-on: http://review.coreboot.org/5296
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 14:56:34 -06:00
committed by Aaron Durbin
parent 9cd96b4096
commit bdf913ab01
10 changed files with 222 additions and 40 deletions

View File

@@ -54,7 +54,6 @@
void *cbfs_load_optionrom(struct cbfs_media *media, uint16_t vendor,
uint16_t device, void * dest);
void *cbfs_load_payload(struct cbfs_media *media, const char *name);
void *cbfs_load_stage(struct cbfs_media *media, const char *name);
/* Simple buffer for streaming media. */
@@ -75,11 +74,6 @@ void *cbfs_simple_buffer_unmap(struct cbfs_simple_buffer *buffer,
// Utility functions
int run_address(void *f);
/* Defined in src/lib/selfboot.c */
struct lb_memory;
void *selfload(struct lb_memory *mem, struct cbfs_payload *payload);
void selfboot(void *entry);
/* Defined in individual arch / board implementation. */
int init_default_cbfs_media(struct cbfs_media *media);

View File

@@ -0,0 +1,61 @@
/*
* This file is part of the coreboot project.
*
* Copyright (C) 2014 Google Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef PAYLOAD_LOADER_H
#define PAYLOAD_LOADER_H
#include <stdint.h>
#include <stddef.h>
struct payload_backing_store {
void *data;
size_t size;
};
struct payload {
const char *name;
struct payload_backing_store backing_store;
void *entry;
};
/*
* Load payload into memory and return pointer to payload structure. Returns
* NULL on error.
*/
struct payload *payload_load(void);
/* Run the loaded payload. */
void payload_run(const 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);
};
/* Defined in src/lib/selfboot.c */
struct lb_memory;
struct cbfs_payload;
void *selfload(struct lb_memory *mem, struct cbfs_payload *payload);
void selfboot(void *entry);
#endif /* PAYLOAD_LOADER_H */