summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron Durbin <adurbin@chromium.org>2013-03-07 23:22:24 -0600
committerRonald G. Minnich <rminnich@gmail.com>2013-03-14 04:57:03 +0100
commit5ca4f4119bf00a1ec64358f3e6b41d696b1dc123 (patch)
treef31994b273b0000eda4c4dd759cfe10bb8d4da52
parent1cb414de638d6885ad3a8510594ea1df7d4d96a6 (diff)
libpayload: add support for vboot_handoff
The vboot_handoff structure needs to be parsed from the coreboot tables. Add a placeholder in sysinfo as well as the ability to parse the coreboot table entry concering the vboot_handoff structure. Built with unified boot loader and ebuild changes. Can find and use the VbInitParams for doing kernel selection. Change-Id: If40a863b4a445fa5f7814325add03355fd0ac647 Signed-off-by: Aaron Durbin <adurbin@chromium.org> Reviewed-on: http://review.coreboot.org/2720 Tested-by: build bot (Jenkins) Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
-rw-r--r--payloads/libpayload/arch/x86/coreboot.c11
-rw-r--r--payloads/libpayload/include/coreboot_tables.h8
-rw-r--r--payloads/libpayload/include/sysinfo.h2
3 files changed, 21 insertions, 0 deletions
diff --git a/payloads/libpayload/arch/x86/coreboot.c b/payloads/libpayload/arch/x86/coreboot.c
index d39af4ab5d..e8bc380fc8 100644
--- a/payloads/libpayload/arch/x86/coreboot.c
+++ b/payloads/libpayload/arch/x86/coreboot.c
@@ -79,6 +79,14 @@ static void cb_parse_serial(void *ptr, struct sysinfo_t *info)
}
#ifdef CONFIG_CHROMEOS
+static void cb_parse_vboot_handoff(unsigned char *ptr, struct sysinfo_t *info)
+{
+ struct cb_vboot_handoff *vbho = (struct cb_vboot_handoff *)ptr;
+
+ info->vboot_handoff = vbho->vboot_handoff_addr;
+ info->vboot_handoff_size = vbho->vboot_handoff_size;
+}
+
static void cb_parse_vbnv(unsigned char *ptr, struct sysinfo_t *info)
{
struct cb_vbnv *vbnv = (struct cb_vbnv *)ptr;
@@ -258,6 +266,9 @@ static int cb_parse_header(void *addr, int len, struct sysinfo_t *info)
case CB_TAG_VBNV:
cb_parse_vbnv(ptr, info);
break;
+ case CB_TAG_VBOOT_HANDOFF:
+ cb_parse_vboot_handoff(ptr, info);
+ break;
#endif
case CB_TAG_TIMESTAMPS:
cb_parse_tstamp(ptr, info);
diff --git a/payloads/libpayload/include/coreboot_tables.h b/payloads/libpayload/include/coreboot_tables.h
index 43fd41bf21..38bda55d75 100644
--- a/payloads/libpayload/include/coreboot_tables.h
+++ b/payloads/libpayload/include/coreboot_tables.h
@@ -209,6 +209,14 @@ struct cb_vbnv {
uint32_t vbnv_size;
};
+#define CB_TAG_VBOOT_HANDOFF 0x0020
+struct cb_vboot_handoff {
+ uint32_t tag;
+ uint32_t size;
+ void *vboot_handoff_addr;
+ uint32_t vboot_handoff_size;
+};
+
#define CB_TAG_CMOS_OPTION_TABLE 0x00c8
struct cb_cmos_option_table {
u32 tag;
diff --git a/payloads/libpayload/include/sysinfo.h b/payloads/libpayload/include/sysinfo.h
index 80763f0a46..4c7ce4521b 100644
--- a/payloads/libpayload/include/sysinfo.h
+++ b/payloads/libpayload/include/sysinfo.h
@@ -88,6 +88,8 @@ struct sysinfo_t {
struct cb_mainboard *mainboard;
#ifdef CONFIG_CHROMEOS
+ void *vboot_handoff;
+ u32 vboot_handoff_size;
void *vdat_addr;
u32 vdat_size;
#endif