mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2026-01-16 18:11:22 +00:00
This change adds a new NV and GBB flag for controlling USB device mode behavior, adding an additional step to enable UDC on systems that support it. Users of this feature will need to first enable developer mode and then enable UDC separately by running "crossystem dev_enable_udc=1". Alternatively those without write protect enabled can set a GBB flag to have UDC enabled by default while in developer mode. This is based on the security reviewed proposal at https://docs.google.com/document/d/1b6avd9xvhvljN_NKtctWrClj4mSYZ_uPmp7MmAnPwqs BUG=b:74339386 BRANCH=poppy TEST=manual testing on Eve device Change-Id: I6f440320f28b033639b53246d3034bc8acc37a33 Signed-off-by: Duncan Laurie <dlaurie@google.com> Reviewed-on: https://chromium-review.googlesource.com/1010769 Reviewed-by: Randall Spangler <rspangler@chromium.org> Reviewed-by: Furquan Shaikh <furquan@chromium.org>
115 lines
4.3 KiB
C
115 lines
4.3 KiB
C
/* 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
|
|
/* Recovery mode always assumes manual recovery, even if EC_IN_RW=1 */
|
|
#define GBB_FLAG_FORCE_MANUAL_RECOVERY 0x00004000
|
|
/* Disable using FWMP */
|
|
#define GBB_FLAG_DISABLE_FWMP 0x00008000
|
|
/* Enable USB Device Controller */
|
|
#define GBB_FLAG_ENABLE_UDC 0x00010000
|
|
|
|
|
|
#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; deprecated in current FW */
|
|
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_ */
|