diff --git a/common/Makefile b/common/Makefile index c3cd857d52..fa52657e71 100644 --- a/common/Makefile +++ b/common/Makefile @@ -2,7 +2,7 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -SRCS = rollback_index.c tlcl_stub.c utility_stub.c +SRCS = boot_device_stub.c rollback_index.c tlcl_stub.c utility_stub.c OBJS = $(SRCS:.c=.o) INCLUDES += -I./include/ diff --git a/common/boot_device_stub.c b/common/boot_device_stub.c new file mode 100644 index 0000000000..c7bb86f5c3 --- /dev/null +++ b/common/boot_device_stub.c @@ -0,0 +1,17 @@ +/* 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. + * + * Stub implementations of boot device functions. + */ + +#include "boot_device.h" + +int BootDeviceReadLBA(uint64_t lba_start, uint64_t lba_count, void *buffer) { + return 1; +} + +int BootDeviceWriteLBA(uint64_t lba_start, uint64_t lba_count, + const void *buffer) { + return 1; +} diff --git a/common/include/boot_device.h b/common/include/boot_device.h new file mode 100644 index 0000000000..47c834f64b --- /dev/null +++ b/common/include/boot_device.h @@ -0,0 +1,26 @@ +/* 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. + */ + +/* Helper functions/wrappers for raw sector access to current boot device. */ + +#ifndef VBOOT_REFERENCE_BOOT_DEVICE_H_ +#define VBOOT_REFERENCE_BOOT_DEVICE_H_ + +#include + +int BootDeviceReadLBA(uint64_t lba_start, uint64_t lba_count, void *buffer); +/* Reads lba_count LBA sectors, starting at sector lba_start, from the current + * boot device, into the buffer. + * + * Returns 0 if successful or 1 if error. */ + +int BootDeviceWriteLBA(uint64_t lba_start, uint64_t lba_count, + const void *buffer); +/* Writes lba_count LBA sectors, starting at sector lba_start, to the current + * boot device, from the buffer. + * + * Returns 0 if successful or 1 if error. */ + +#endif /* VBOOT_REFERENCE_BOOT_DEVICE_H_ */ diff --git a/fwapi/include/load_kernel_fw.h b/fwapi/include/load_kernel_fw.h new file mode 100644 index 0000000000..0c7f1bf8be --- /dev/null +++ b/fwapi/include/load_kernel_fw.h @@ -0,0 +1,60 @@ +/* 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 kernel. + * (Firmware Portion) + */ + +#ifndef VBOOT_REFERENCE_LOAD_KERNEL_FW_H_ +#define VBOOT_REFERENCE_LOAD_KERNEL_FW_H_ + +#include + +/* Interface provided by verified boot library to BDS */ + +/* Return codes for LoadKernel() */ +#define LOAD_KERNEL_SUCCESS 0 +#define LOAD_KERNEL_NOT_FOUND 1 +#define LOAD_KERNEL_INVALID 2 + +typedef struct LoadKernelParams { + /* Inputs to LoadKernel() */ + uint64_t bytes_per_lba; /* Bytes per lba sector on current device */ + uint64_t ending_lba; /* Last addressable lba sector on current + * device */ + void *kernel_buffer; /* Destination buffer for kernel + * (normally at 0x100000) */ + uint64_t kernel_buffer_size; /* Size of kernel buffer in bytes */ + uint8_t in_developer_mode; /* Did device boot in developer mode? + * 0 = normal or recovery mode + * 1 = developer mode */ + + /* Outputs from LoadKernel(); valid only if LoadKernel() returns + * LOAD_KERNEL_SUCCESS */ + uint64_t partition_number; /* Partition number to boot on current device + * (1...M) */ + void *bootloader_start; /* Start of bootloader image */ + uint64_t bootloader_size; /* Size of bootloader image in bytes */ +} LoadKernelParams; + +uintn_t LoadKernel(LoadKernelParams* params); +/* Attempts to load the kernel from the current device. + * + * Returns LOAD_KERNEL_SUCCESS if successful, error code on failure. */ + + +typedef struct KernelBootloaderOptions { + /* The bootloader is loaded using the EFI LoadImage() and StartImage() + * calls. Pass this struct via loaded_image->load_options. */ + uint64_t drive_number; /* Drive number of boot device (0...N) */ + uint64_t partition_number; /* Partition number, as returned from + * LoadKernel() in + * LoadKernelParams.partition_number */ + uint64_t original_address; /* Absolute bootloader start adddress, + * as returned from LoadKernel() in + * LoadKernelParams.bootloader_start */ +} KernelBootloaderOptions; + + +#endif /* VBOOT_REFERENCE_LOAD_KERNEL_FW_H_ */