/* Copyright (c) 2011 The Chromium OS Authors. All rights reserved. * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * * Data structure of Google Binary Block (GBB) */ #ifndef VBOOT_REFERENCE_GBB_HEADER_H_ #define VBOOT_REFERENCE_GBB_HEADER_H_ #include "sysincludes.h" #define GBB_HEADER_SIZE 128 #define GBB_SIGNATURE "$GBB" #define GBB_SIGNATURE_SIZE 4 /* GBB version constants. * * If the major version is different than the reader can handle, it * shouldn't attempt to parse the GBB. * * If the minor version is different, the reader can still parse it. * If the minor version is greater than expected, new fields were * added in a way which does not interfere with the old fields. If * it's less than expected, some of the fields expected by the reader * aren't initialized, and the reader should return default values for * those fields. */ #define GBB_MAJOR_VER 1 #define GBB_MINOR_VER 1 /* Maximum length of a HWID in bytes, counting terminating null. */ #define GBB_HWID_MAX_SIZE 256 /* Flags for .flags field */ /* Reduce the dev screen delay to 2 sec from 30 sec to speedup factory. */ #define GBB_FLAG_DEV_SCREEN_SHORT_DELAY 0x00000001 /* BIOS should load option ROMs from arbitrary PCI devices. We'll never enable * this ourselves because it executes non-verified code, but if a customer wants * to void their warranty and set this flag in the read-only flash, they should * be able to do so. */ #define GBB_FLAG_LOAD_OPTION_ROMS 0x00000002 /* The factory flow may need the BIOS to boot a non-ChromeOS kernel if the * dev-switch is on. This flag allows that. */ #define GBB_FLAG_ENABLE_ALTERNATE_OS 0x00000004 /* Force dev switch on, regardless of physical/keyboard dev switch position. */ #define GBB_FLAG_FORCE_DEV_SWITCH_ON 0x00000008 /* Allow booting from USB in dev mode even if dev_boot_usb=0. */ #define GBB_FLAG_FORCE_DEV_BOOT_USB 0x00000010 /* Disable firmware rollback protection. */ #define GBB_FLAG_DISABLE_FW_ROLLBACK_CHECK 0x00000020 /* Allow Enter key to trigger dev->tonorm screen transition */ #define GBB_FLAG_ENTER_TRIGGERS_TONORM 0x00000040 /* Allow booting using alternate keys for FAFT servo testing */ #define GBB_FLAG_FAFT_KEY_OVERIDE 0x00000100 #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ typedef struct GoogleBinaryBlockHeader { /* Fields present in version 1.0 */ uint8_t signature[GBB_SIGNATURE_SIZE]; /* GBB_SIGNATURE "$GBB" */ uint16_t major_version; /* See GBB_MAJOR_VER */ uint16_t minor_version; /* See GBB_MINOR_VER */ uint32_t header_size; /* size of GBB header in bytes */ uint32_t flags; /* Flags (see GBB_FLAG_*), should be 0 for 1.0. */ uint32_t hwid_offset; /* HWID offset from start of header */ uint32_t hwid_size; /* HWID size in bytes */ uint32_t rootkey_offset; /* Root Key offset from start of header */ uint32_t rootkey_size; /* Root Key size in bytes */ uint32_t bmpfv_offset; /* BMP FV offset from start of header */ uint32_t bmpfv_size; /* BMP FV size in bytes */ uint32_t recovery_key_offset; /* Recovery Key offset from start of header */ uint32_t recovery_key_size; /* Recovery Key size in bytes */ uint8_t pad[80]; /* To match GBB_HEADER_SIZE. Initialize to 0. */ } __attribute__((packed)) GoogleBinaryBlockHeader; #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* VBOOT_REFERENCE_GBB_HEADER_H_ */