summaryrefslogtreecommitdiff
path: root/firmware/lib/include/load_kernel_fw.h
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/lib/include/load_kernel_fw.h')
-rw-r--r--firmware/lib/include/load_kernel_fw.h100
1 files changed, 100 insertions, 0 deletions
diff --git a/firmware/lib/include/load_kernel_fw.h b/firmware/lib/include/load_kernel_fw.h
new file mode 100644
index 00000000..dd6e1a84
--- /dev/null
+++ b/firmware/lib/include/load_kernel_fw.h
@@ -0,0 +1,100 @@
+/* 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.
+ *
+ * High-level firmware API for loading and verifying kernel.
+ * (Firmware Portion)
+ */
+
+#ifndef VBOOT_REFERENCE_LOAD_KERNEL_FW_H_
+#define VBOOT_REFERENCE_LOAD_KERNEL_FW_H_
+
+#include "vboot_api.h"
+#include "vboot_nvstorage.h"
+
+/* Interface provided by verified boot library to BDS */
+
+/* Boot flags for LoadKernel().boot_flags */
+/* Developer switch is on */
+#define BOOT_FLAG_DEVELOPER (0x01ULL)
+/* In recovery mode */
+#define BOOT_FLAG_RECOVERY (0x02ULL)
+
+typedef struct LoadKernelParams {
+ /* Inputs to LoadKernel() */
+ /*
+ * Buffer for data shared between LoadFirmware() and LoadKernel().
+ * Pass the same buffer which was passed to LoadFirmware().
+ */
+ void *shared_data_blob;
+ /*
+ * Size of shared data blob buffer, in bytes. On output, this will
+ * contain the actual data size placed into the buffer.
+ */
+ uint64_t shared_data_size;
+ /* Pointer to GBB data */
+ void *gbb_data;
+ /* Size of GBB data in bytes */
+ uint64_t gbb_size;
+ /* Disk handle for current device */
+ VbExDiskHandle_t disk_handle;
+ /* Bytes per lba sector on current device */
+ uint64_t bytes_per_lba;
+ /* Last addressable lba sector on current device */
+ uint64_t ending_lba;
+ /* Destination buffer for kernel (normally at 0x100000) */
+ void *kernel_buffer;
+ /* Size of kernel buffer in bytes */
+ uint64_t kernel_buffer_size;
+ /* Boot flags */
+ uint64_t boot_flags;
+ /*
+ * Context for NV storage. Caller is responsible for calling
+ * VbNvSetup() and VbNvTeardown() on the context.
+ */
+ VbNvContext *nv_context;
+
+ /*
+ * Outputs from LoadKernel(); valid only if LoadKernel() returns
+ * LOAD_KERNEL_SUCCESS
+ */
+ /* Partition number to boot on current device (1...M) */
+ uint64_t partition_number;
+ /* Address of bootloader image in RAM */
+ uint64_t bootloader_address;
+ /* Size of bootloader image in bytes */
+ uint64_t bootloader_size;
+ /* UniquePartitionGuid for boot partition */
+ uint8_t partition_guid[16];
+} LoadKernelParams;
+
+/**
+ * Attempt to load the kernel from the current device.
+ *
+ * Returns VBERROR_SUCCESS if successful. If unsuccessful, sets a recovery
+ * reason via VbNvStorage and returns an error code.
+ */
+VbError_t LoadKernel(LoadKernelParams *params);
+
+/*
+ * The bootloader is loaded using the EFI LoadImage() and StartImage() calls.
+ * Pass this struct via loaded_image->load_options.
+ */
+typedef struct KernelBootloaderOptions {
+ /* Drive number of boot device (0...N) */
+ uint64_t drive_number;
+ /*
+ * Partition number, as returned from LoadKernel() in
+ * LoadKernelParams.partition_number
+ */
+ uint64_t partition_number;
+ /*
+ * Absolute bootloader start adddress, as returned from LoadKernel() in
+ * LoadKernelParams.bootloader_start
+ */
+ uint64_t original_address;
+ /* UniquePartitionGuid for boot partition */
+ uint8_t partition_guid[16];
+} KernelBootloaderOptions;
+
+#endif /* VBOOT_REFERENCE_LOAD_KERNEL_FW_H_ */