Index: firmware/include/vboot_struct.h |
diff --git a/firmware/include/vboot_struct.h b/firmware/include/vboot_struct.h |
index ed83f3e7e5f73445cf917d2d4b1d5f09e20e8c6e..1e988ee180ff8ea2ca473f68b37ed22c6c759231 100644 |
--- a/firmware/include/vboot_struct.h |
+++ b/firmware/include/vboot_struct.h |
@@ -1,4 +1,4 @@ |
-/* Copyright (c) 2010-2011 The Chromium OS Authors. All rights reserved. |
+/* 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. |
* |
@@ -131,6 +131,49 @@ typedef struct VbKernelPreambleHeader { |
#define EXPECTED_VBKERNELPREAMBLEHEADER_SIZE 96 |
+/* Minimum and recommended size of shared_data_blob in bytes. */ |
+#define VB_SHARED_DATA_MIN_SIZE 3072 |
+#define VB_SHARED_DATA_REC_SIZE 16384 |
+ |
+/* Data shared between LoadFirmware(), LoadKernel(), and OS. |
+ * |
+ * The boot process is: |
+ * 1) Caller allocates buffer, at least VB_SHARED_DATA_MIN bytes, ideally |
+ * VB_SHARED_DATA_REC_SIZE bytes. |
+ * 2) If non-recovery boot, this is passed to LoadFirmware(), which |
+ * initializes the buffer, adding this header and some data. |
+ * 3) Buffer is passed to LoadKernel(). If this is a recovery boot, |
+ * LoadKernel() initializes the buffer, adding this header. Regardless |
+ * of boot type, LoadKernel() adds some data to the buffer. |
+ * 4) Caller makes data available to the OS in a platform-dependent manner. |
+ * For example, via ACPI or ATAGs. */ |
+typedef struct VbSharedDataHeader { |
+ /* Fields present in version 1 */ |
+ uint32_t struct_version; /* Version of this structure */ |
+ uint64_t struct_size; /* Size of this structure in bytes */ |
+ uint64_t data_size; /* Size of shared data buffer in bytes */ |
+ uint64_t data_used; /* Amount of shared data used so far */ |
+ |
+ VbPublicKey kernel_subkey; /* Kernel subkey, from firmware */ |
+ uint64_t kernel_subkey_data_offset; /* Offset of kernel subkey data from |
+ * start of this struct */ |
+ uint64_t kernel_subkey_data_size; /* Offset of kernel subkey data */ |
+ |
+ uint64_t flags; /* Flags */ |
+ |
+ /* After read-only firmware which uses version 1 is released, any additional |
+ * fields must be added below, and the struct version must be increased. |
+ * Before reading/writing those fields, make sure that the struct being |
+ * accessed is at least version 2. |
+ * |
+ * It's always ok for an older firmware to access a newer struct, since all |
+ * the fields it knows about are present. Newer firmware needs to use |
+ * reasonable defaults when accessing older structs. */ |
+ |
+} __attribute__((packed)) VbSharedDataHeader; |
+ |
+#define VB_SHARED_DATA_VERSION 1 /* Version for struct_version */ |
+ |
__pragma(pack(pop)) /* Support packing for MSVC. */ |
#endif /* VBOOT_REFERENCE_VBOOT_STRUCT_H_ */ |