vboot: add vb2_working_data_size()

Instead of using the symbols directly provide a size
function to provide symmetry between getting the work
data and size. It also allows for an abstraction where
the linker symbols may not be the only source of this
information.

Change-Id: I4568064a0050d118c3544ab1ea59a08eb0bad8e4
Signed-off-by: Aaron Durbi <adurbin@chromium.org>
Reviewed-on: http://review.coreboot.org/10156
Tested-by: build bot (Jenkins)
Reviewed-by: Patrick Georgi <pgeorgi@google.com>
This commit is contained in:
Aaron Durbin 2015-05-08 17:07:04 -05:00 committed by Patrick Georgi
parent c6100e5421
commit 1e8be636cc
3 changed files with 10 additions and 2 deletions

View File

@ -30,6 +30,11 @@ struct vb2_working_data * const vboot_get_working_data(void)
return (struct vb2_working_data *)_vboot2_work;
}
size_t vb2_working_data_size(void)
{
return _vboot2_work_size;
}
void *vboot_get_work_buffer(struct vb2_working_data *wd)
{
return (void *)((uintptr_t)wd + wd->buffer_offset);

View File

@ -43,6 +43,7 @@ struct vb2_working_data {
};
struct vb2_working_data * const vboot_get_working_data(void);
size_t vb2_working_data_size(void);
void *vboot_get_work_buffer(struct vb2_working_data *wd);
static inline void vb2_get_selected_region(struct vb2_working_data *wd,

View File

@ -63,15 +63,17 @@ static int verstage_should_load(void)
static void init_vb2_working_data(void)
{
struct vb2_working_data *wd;
size_t work_size;
work_size = vb2_working_data_size();
wd = vboot_get_working_data();
memset(wd, 0, _vboot2_work_size);
memset(wd, 0, work_size);
/*
* vboot prefers 16-byte alignment. This takes away 16 bytes
* from the VBOOT2_WORK region, but the vboot devs said that's okay.
*/
wd->buffer_offset = ALIGN_UP(sizeof(*wd), 16);
wd->buffer_size = _vboot2_work_size - wd->buffer_offset;
wd->buffer_size = work_size - wd->buffer_offset;
}
static int vboot_loader_active(struct prog *prog)