/* Copyright (c) 2013 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 <stdint.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      2
/* v1.2 - added field to hold sha256 digest of the HWID */

/* 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 Legacy OSes in dev mode even if dev_boot_legacy=0. */
#define GBB_FLAG_FORCE_DEV_BOOT_LEGACY			0x00000080
/* Allow booting using alternate keys for FAFT servo testing */
#define GBB_FLAG_FAFT_KEY_OVERIDE			0x00000100
/* Disable EC software sync */
#define GBB_FLAG_DISABLE_EC_SOFTWARE_SYNC		0x00000200
/* Default to booting legacy OS when dev screen times out */
#define GBB_FLAG_DEFAULT_DEV_BOOT_LEGACY		0x00000400
/* Disable PD software sync */
#define GBB_FLAG_DISABLE_PD_SOFTWARE_SYNC		0x00000800
/* Disable shutdown on lid closed */
#define GBB_FLAG_DISABLE_LID_SHUTDOWN			0x00001000
/*
 * Allow full fastboot capability in firmware even if
 * dev_boot_fastboot_full_cap=0.
 */
#define GBB_FLAG_FORCE_DEV_BOOT_FASTBOOT_FULL_CAP	0x00002000
/* Enable serial console */
#define GBB_FLAG_ENABLE_SERIAL				0x00004000
/* Disable using FWMP */
#define GBB_FLAG_DISABLE_FWMP                           0x00008000


#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. */
	/* Offsets (from start of header) and sizes (in bytes) of components */
	uint32_t hwid_offset;		/* HWID */
	uint32_t hwid_size;
	uint32_t rootkey_offset;	/* Root key */
	uint32_t rootkey_size;
	uint32_t bmpfv_offset;		/* BMP FV */
	uint32_t bmpfv_size;
	uint32_t recovery_key_offset;	/* Recovery key */
	uint32_t recovery_key_size;
	/* Added in version 1.2 */
	uint8_t  hwid_digest[32];	/* sha256 */

	uint8_t  pad[48]; /* To match GBB_HEADER_SIZE.  Initialize to 0. */
} __attribute__((packed)) GoogleBinaryBlockHeader;

#ifdef __cplusplus
}
#endif  /* __cplusplus */

#endif  /* VBOOT_REFERENCE_GBB_HEADER_H_ */
