Load kernel APIs added (once more, from the correct repo)

Review URL: http://codereview.chromium.org/2165003
diff --git a/common/Makefile b/common/Makefile
index c3cd857..fa52657 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 0000000..c7bb86f
--- /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 0000000..47c834f
--- /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 <stdint.h>
+
+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 0000000..0c7f1bf
--- /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 <stdint.h>
+
+/* 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_ */