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>
This commit is contained in:
Aaron Durbin
2013-03-07 23:22:24 -06:00
committed by Ronald G. Minnich
parent 1cb414de63
commit 5ca4f4119b
3 changed files with 21 additions and 0 deletions

View File

@ -79,6 +79,14 @@ static void cb_parse_serial(void *ptr, struct sysinfo_t *info)
} }
#ifdef CONFIG_CHROMEOS #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) static void cb_parse_vbnv(unsigned char *ptr, struct sysinfo_t *info)
{ {
struct cb_vbnv *vbnv = (struct cb_vbnv *)ptr; 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: case CB_TAG_VBNV:
cb_parse_vbnv(ptr, info); cb_parse_vbnv(ptr, info);
break; break;
case CB_TAG_VBOOT_HANDOFF:
cb_parse_vboot_handoff(ptr, info);
break;
#endif #endif
case CB_TAG_TIMESTAMPS: case CB_TAG_TIMESTAMPS:
cb_parse_tstamp(ptr, info); cb_parse_tstamp(ptr, info);

View File

@ -209,6 +209,14 @@ struct cb_vbnv {
uint32_t vbnv_size; 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 #define CB_TAG_CMOS_OPTION_TABLE 0x00c8
struct cb_cmos_option_table { struct cb_cmos_option_table {
u32 tag; u32 tag;

View File

@ -88,6 +88,8 @@ struct sysinfo_t {
struct cb_mainboard *mainboard; struct cb_mainboard *mainboard;
#ifdef CONFIG_CHROMEOS #ifdef CONFIG_CHROMEOS
void *vboot_handoff;
u32 vboot_handoff_size;
void *vdat_addr; void *vdat_addr;
u32 vdat_size; u32 vdat_size;
#endif #endif