| 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
|
| index 312a0aaa6c7290e76849533efcca342df83a07c3..af97116181aaa93293e540d4c12631ca4b237866 100644
|
| --- a/vboot_firmware/include/load_firmware_fw.h
|
| +++ b/vboot_firmware/include/load_firmware_fw.h
|
| @@ -11,36 +11,14 @@
|
|
|
| #include <stdint.h>
|
|
|
| -/* Functions provided by PEI to LoadFirmware() */
|
| -
|
| -/* Get the firmware body data for [firmware_index], which is either
|
| - * 0 (the first firmware image) or 1 (the second firmware image).
|
| - *
|
| - * This function must call UpdateFirmwareBodyHash() 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 UpdateFirmwareBodyHash() 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 *GetFirmwareBody(uint64_t firmware_index, uint64_t* size);
|
| -
|
| -
|
| -/* Interface provided by verified boot library to PEI */
|
| +/* Maximum size of kernel_sign_key_blob in bytes, for implementations
|
| + * which must preallocate a transfer buffer between boot phases */
|
| +#define LOAD_FIRMWARE_KEY_BLOB_MAX 2104
|
|
|
| /* Return codes for LoadFirmware() */
|
| #define LOAD_FIRMWARE_SUCCESS 0 /* Success */
|
| #define LOAD_FIRMWARE_RECOVERY 1 /* Reboot to recovery mode */
|
|
|
| -/* Update the data hash for the current firmware image, extending it
|
| - * by [size] bytes stored in [*data]. This function must only be
|
| - * called inside GetFirmwareBody(). */
|
| -void UpdateFirmwareBodyHash(uint8_t* data, uint64_t size);
|
| -
|
| -
|
| typedef struct LoadFirmwareParams {
|
| /* Inputs to LoadFirmware() */
|
| void *firmware_root_key_blob; /* Key used to sign firmware header */
|
| @@ -48,24 +26,60 @@ typedef struct LoadFirmwareParams {
|
| void *verification_block_1; /* Key block + preamble for firmware 1 */
|
| uint64_t verification_size_0; /* Verification block 0 size in bytes */
|
| uint64_t verification_size_1; /* Verification block 1 size in bytes */
|
| + void *kernel_sign_key_blob; /* Destination buffer for 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
|
| + * buffer, in bytes. On output, this
|
| + * will contain the actual key blob
|
| + * size placed into the buffer. */
|
|
|
| /* Outputs from LoadFirmware(); valid only if LoadFirmware() returns
|
| * LOAD_FIRMWARE_SUCCESS. */
|
| uint64_t firmware_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.
|
| - * Key data may be copied/relocated
|
| - * if necessary. */
|
| - uint64_t kernel_sign_key_size; /* Size of kernel signing key blob,
|
| - * in bytes. */
|
| +
|
| + /* Internal data for LoadFirmware() / UpdateFirmwareBodyHash(). */
|
| + void* load_firmware_internal;
|
| +
|
| + /* Internal data for caller / GetFirmwareBody(). */
|
| + void* caller_internal;
|
| +
|
| } LoadFirmwareParams;
|
|
|
|
|
| +/* Functions provided by PEI to LoadFirmware() */
|
| +
|
| +/* Get the firmware body data for [firmware_index], which is either
|
| + * 0 (the first firmware image) or 1 (the second firmware image).
|
| + *
|
| + * This function must call UpdateFirmwareBodyHash() 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 UpdateFirmwareBodyHash() on the entire
|
| + * firmeware data after the read, before returning.
|
| + *
|
| + * Returns 0 if successful or non-zero if error. */
|
| +int GetFirmwareBody(LoadFirmwareParams* params, uint64_t firmware_index);
|
| +
|
| +
|
| +/* Functions provided by verified boot library to PEI */
|
| +
|
| /* Attempts to load the rewritable firmware.
|
| *
|
| * Returns LOAD_FIRMWARE_SUCCESS if successful, error code on failure. */
|
| int LoadFirmware(LoadFirmwareParams* params);
|
|
|
|
|
| +/* Update the data hash for the current firmware image, extending it
|
| + * by [size] bytes stored in [*data]. This function must only be
|
| + * called inside GetFirmwareBody(). */
|
| +void UpdateFirmwareBodyHash(LoadFirmwareParams* params,
|
| + uint8_t* data, uint64_t size);
|
| +
|
| +
|
| +
|
| +
|
| #endif /* VBOOT_REFERENCE_LOAD_FIRMWARE_FW_H_ */
|
|
|