/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef VBOOT_REFERENCE_FILE_TYPE_BIOS_H_ #define VBOOT_REFERENCE_FILE_TYPE_BIOS_H_ #include #include "futility.h" /* * The Chrome OS BIOS must contain specific FMAP areas, which we want to look * at in a certain order. */ enum bios_component { BIOS_FMAP_GBB, BIOS_FMAP_FW_MAIN_A, BIOS_FMAP_FW_MAIN_B, BIOS_FMAP_VBLOCK_A, BIOS_FMAP_VBLOCK_B, NUM_BIOS_COMPONENTS }; static const char *const fmap_name[] = { "GBB", /* BIOS_FMAP_GBB */ "FW_MAIN_A", /* BIOS_FMAP_FW_MAIN_A */ "FW_MAIN_B", /* BIOS_FMAP_FW_MAIN_B */ "VBLOCK_A", /* BIOS_FMAP_VBLOCK_A */ "VBLOCK_B", /* BIOS_FMAP_VBLOCK_B */ }; _Static_assert(ARRAY_SIZE(fmap_name) == NUM_BIOS_COMPONENTS, "Size of fmap_name[] should match NUM_BIOS_COMPONENTS"); /* Location information for each component */ struct bios_area_s { uint32_t offset; /* to avoid pointer math */ uint8_t *buf; uint32_t len; uint32_t is_valid; /* VBLOCK only */ uint32_t flags; uint32_t version; /* FW_MAIN only */ size_t fw_size; /* effective size from cbfstool (if available) */ struct vb2_hash metadata_hash; }; /* State to track as we visit all components */ struct bios_state_s { /* Current component */ enum bios_component c; /* Other activites, possibly before or after the current one */ struct bios_area_s area[NUM_BIOS_COMPONENTS]; struct bios_area_s recovery_key; struct bios_area_s rootkey; }; #endif /* VBOOT_REFERENCE_FILE_TYPE_BIOS_H_ */