gbb_header.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. /* Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
  2. * Use of this source code is governed by a BSD-style license that can be
  3. * found in the LICENSE file.
  4. *
  5. * Data structure of Google Binary Block (GBB)
  6. */
  7. #ifndef VBOOT_REFERENCE_GBB_HEADER_H_
  8. #define VBOOT_REFERENCE_GBB_HEADER_H_
  9. #include <stdint.h>
  10. #define GBB_HEADER_SIZE 128
  11. #define GBB_SIGNATURE "$GBB"
  12. #define GBB_SIGNATURE_SIZE 4
  13. /*
  14. * GBB version constants.
  15. *
  16. * If the major version is different than the reader can handle, it shouldn't
  17. * attempt to parse the GBB.
  18. *
  19. * If the minor version is different, the reader can still parse it. If the
  20. * minor version is greater than expected, new fields were added in a way which
  21. * does not interfere with the old fields. If it's less than expected, some of
  22. * the fields expected by the reader aren't initialized, and the reader should
  23. * return default values for those fields.
  24. */
  25. #define GBB_MAJOR_VER 1
  26. #define GBB_MINOR_VER 2
  27. /* v1.2 - added field to hold sha256 digest of the HWID */
  28. /* Maximum length of a HWID in bytes, counting terminating null. */
  29. #define GBB_HWID_MAX_SIZE 256
  30. /* Flags for .flags field */
  31. /* Reduce the dev screen delay to 2 sec from 30 sec to speedup factory. */
  32. #define GBB_FLAG_DEV_SCREEN_SHORT_DELAY 0x00000001
  33. /*
  34. * BIOS should load option ROMs from arbitrary PCI devices. We'll never enable
  35. * this ourselves because it executes non-verified code, but if a customer
  36. * wants to void their warranty and set this flag in the read-only flash, they
  37. * should be able to do so.
  38. */
  39. #define GBB_FLAG_LOAD_OPTION_ROMS 0x00000002
  40. /*
  41. * The factory flow may need the BIOS to boot a non-ChromeOS kernel if the
  42. * dev-switch is on. This flag allows that.
  43. */
  44. #define GBB_FLAG_ENABLE_ALTERNATE_OS 0x00000004
  45. /* Force dev switch on, regardless of physical/keyboard dev switch position. */
  46. #define GBB_FLAG_FORCE_DEV_SWITCH_ON 0x00000008
  47. /* Allow booting from USB in dev mode even if dev_boot_usb=0. */
  48. #define GBB_FLAG_FORCE_DEV_BOOT_USB 0x00000010
  49. /* Disable firmware rollback protection. */
  50. #define GBB_FLAG_DISABLE_FW_ROLLBACK_CHECK 0x00000020
  51. /* Allow Enter key to trigger dev->tonorm screen transition */
  52. #define GBB_FLAG_ENTER_TRIGGERS_TONORM 0x00000040
  53. /* Allow booting Legacy OSes in dev mode even if dev_boot_legacy=0. */
  54. #define GBB_FLAG_FORCE_DEV_BOOT_LEGACY 0x00000080
  55. /* Allow booting using alternate keys for FAFT servo testing */
  56. #define GBB_FLAG_FAFT_KEY_OVERIDE 0x00000100
  57. /* Disable EC software sync */
  58. #define GBB_FLAG_DISABLE_EC_SOFTWARE_SYNC 0x00000200
  59. /* Default to booting legacy OS when dev screen times out */
  60. #define GBB_FLAG_DEFAULT_DEV_BOOT_LEGACY 0x00000400
  61. /* Disable PD software sync */
  62. #define GBB_FLAG_DISABLE_PD_SOFTWARE_SYNC 0x00000800
  63. /* Disable shutdown on lid closed */
  64. #define GBB_FLAG_DISABLE_LID_SHUTDOWN 0x00001000
  65. /*
  66. * Allow full fastboot capability in firmware even if
  67. * dev_boot_fastboot_full_cap=0.
  68. */
  69. #define GBB_FLAG_FORCE_DEV_BOOT_FASTBOOT_FULL_CAP 0x00002000
  70. /* Enable serial console */
  71. #define GBB_FLAG_ENABLE_SERIAL 0x00004000
  72. /* Disable using FWMP */
  73. #define GBB_FLAG_DISABLE_FWMP 0x00008000
  74. #ifdef __cplusplus
  75. extern "C" {
  76. #endif /* __cplusplus */
  77. typedef struct GoogleBinaryBlockHeader
  78. {
  79. /* Fields present in version 1.0 */
  80. uint8_t signature[GBB_SIGNATURE_SIZE]; /* GBB_SIGNATURE "$GBB" */
  81. uint16_t major_version; /* See GBB_MAJOR_VER */
  82. uint16_t minor_version; /* See GBB_MINOR_VER */
  83. uint32_t header_size; /* size of GBB header in bytes */
  84. uint32_t flags; /* Flags (see GBB_FLAG_*), should be 0 for 1.0. */
  85. /* Offsets (from start of header) and sizes (in bytes) of components */
  86. uint32_t hwid_offset; /* HWID */
  87. uint32_t hwid_size;
  88. uint32_t rootkey_offset; /* Root key */
  89. uint32_t rootkey_size;
  90. uint32_t bmpfv_offset; /* BMP FV */
  91. uint32_t bmpfv_size;
  92. uint32_t recovery_key_offset; /* Recovery key */
  93. uint32_t recovery_key_size;
  94. /* Added in version 1.2 */
  95. uint8_t hwid_digest[32]; /* sha256 */
  96. uint8_t pad[48]; /* To match GBB_HEADER_SIZE. Initialize to 0. */
  97. } __attribute__((packed)) GoogleBinaryBlockHeader;
  98. #ifdef __cplusplus
  99. }
  100. #endif /* __cplusplus */
  101. #endif /* VBOOT_REFERENCE_GBB_HEADER_H_ */