Index: vboot_firmware/include/load_firmware_fw.h |
diff --git a/vboot_firmware/include/load_firmware_fw.h b/vboot_firmware/include/load_firmware_fw.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d9288953515dbc7c51fd6ba37a114df88f7df5ea |
--- /dev/null |
+++ b/vboot_firmware/include/load_firmware_fw.h |
@@ -0,0 +1,67 @@ |
+/* Copyright (c) 2010 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. |
+ * |
+ * High-level firmware API for loading and verifying rewritable firmware. |
+ * (Firmware Portion) |
+ */ |
+ |
+#ifndef VBOOT_REFERENCE_LOAD_FIRMWARE_FW_H_ |
+#define VBOOT_REFERENCE_LOAD_FIRMWARE_FW_H_ |
+ |
+#include <stdint.h> |
+ |
+/* Functions provided by PEI to LoadFirmware() */ |
+ |
+/* Get the firmware data for [firmware_index], which is either |
+ * 0 (the first firmware image) or 1 (the second firmware image). |
+ * |
+ * This function must call LoadFirmwareUpdateDataHash() before |
+ * returning, to update the secure hash for the firmware image. For |
+ * best performance, the reader should call this function periodically |
+ * during the read, so that updating the hash can be pipelined with |
+ * the read. If the reader cannot update the hash during the read |
+ * process, it should call LoadFirmwareUpdateDataHash() on the entire |
+ * firmeware data after the read, before returning. |
+ * |
+ * On success, returns a pointer to the data and stores the data size |
+ * in [*size]. On error, returns NULL. */ |
+void *FirmwareImageGetData(uint64_t firmware_index, uint64_t* size); |
+ |
+ |
+/* Interface provided by verified boot library to PEI */ |
+ |
+/* Return codes for LoadFirmware() */ |
+#define LOAD_FIRMWARE_SUCCESS 0 |
+#define LOAD_FIRMWARE_RECOVERY 1 |
+ |
+/* Update the data hash for the current firmware image, extending it |
+ * by [size] bytes stored in [*data]. This function must only be |
+ * called inside FirmwareImageGetData(). */ |
+void LoadFirmwareUpdateDataHash(uint8_t* data, uint64_t size); |
+ |
+ |
+typedef struct LoadFirmwareParams { |
+ /* Inputs to LoadFirmware() */ |
+ void *header_sign_key_blob; /* Key used to sign firmware header */ |
+ void *vblock0; /* Key block + preamble for firmware 0 */ |
+ void *vblock1; /* Key block + preamble for firmware 1 */ |
+ |
+ /* Outputs from LoadFirmware(); valid only if LoadFirmware() returns |
+ * LOAD_FIRMWARE_SUCCESS. */ |
+ uint64_t fitmware_index; /* Firmware index to run. */ |
+ void *kernel_sign_key_blob; /* Key to use when loading kernel. |
+ * Pass this data to LoadKernel() in |
+ * LoadKernelParams.header_sign_key_blob. */ |
+ uint64_t kernel_sign_key_size; /* Size of kernel signing key blob, |
+ * in bytes. */ |
+} LoadFirmwareParams; |
+ |
+ |
+/* Attempts to load the rewritable firmware. |
+ * |
+ * Returns LOAD_FIRMWARE_SUCCESS if successful, error code on failure. */ |
+int LoadFirmware(LoadFirmwareParams* params); |
+ |
+ |
+#endif /* VBOOT_REFERENCE_LOAD_FIRMWARE_FW_H_ */ |