diff options
author | Aaron Durbin <adurbin@chromium.org> | 2013-03-07 23:22:24 -0600 |
---|---|---|
committer | Ronald G. Minnich <rminnich@gmail.com> | 2013-03-14 04:57:03 +0100 |
commit | 5ca4f4119bf00a1ec64358f3e6b41d696b1dc123 (patch) | |
tree | f31994b273b0000eda4c4dd759cfe10bb8d4da52 | |
parent | 1cb414de638d6885ad3a8510594ea1df7d4d96a6 (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.c | 11 | ||||
-rw-r--r-- | payloads/libpayload/include/coreboot_tables.h | 8 | ||||
-rw-r--r-- | payloads/libpayload/include/sysinfo.h | 2 |
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 |