/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * * APIs provided by firmware to vboot_reference. * * General notes: * * All verified boot functions now start with "Vb" for namespace clarity. This * fixes the problem where uboot and vboot both defined assert(). * * Verified boot APIs to be implemented by the calling firmware and exported to * vboot_reference start with "VbEx". * * TODO: split this file into a vboot_entry_points.h file which contains the * entry points for the firmware to call vboot_reference, and a * vboot_firmware_exports.h which contains the APIs to be implemented by the * calling firmware and exported to vboot_reference. */ #ifndef VBOOT_REFERENCE_VBOOT_API_H_ #define VBOOT_REFERENCE_VBOOT_API_H_ #include #include #include "../2lib/include/2constants.h" #include "../2lib/include/2return_codes.h" #include "gpt.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ struct vb2_context; struct vb2_disk_info; typedef struct VbSharedDataHeader VbSharedDataHeader; /*****************************************************************************/ /* Disk access (previously in boot_device.h) */ /** * Read lba_count LBA sectors, starting at sector lba_start, from the disk, * into the buffer. * * This is used for random access to the GPT. It is not for the partition * contents. The upper limit is lba_count. * * If the disk handle is invalid (for example, the handle refers to a disk * which as been removed), the function must return error but must not * crash. */ vb2_error_t VbExDiskRead(vb2ex_disk_handle_t handle, uint64_t lba_start, uint64_t lba_count, void *buffer); /** * Write lba_count LBA sectors, starting at sector lba_start, to the disk, from * the buffer. * * This is used for random access to the GPT. It does not (necessarily) access * the streaming portion of the device. * * If the disk handle is invalid (for example, the handle refers to a disk * which as been removed), the function must return error but must not * crash. */ vb2_error_t VbExDiskWrite(vb2ex_disk_handle_t handle, uint64_t lba_start, uint64_t lba_count, const void *buffer); /* Streaming read interface */ typedef void *VbExStream_t; /** * Open a stream on a disk * * @param handle Disk to open the stream against * @param lba_start Starting sector offset within the disk to stream from * @param lba_count Maximum extent of the stream in sectors * @param stream out-paramter for the generated stream * * @return Error code, or VB2_SUCCESS. * * This is used for access to the contents of the actual partitions on the * device. It is not used to access the GPT. The size of the content addressed * is within streaming_lba_count. */ vb2_error_t VbExStreamOpen(vb2ex_disk_handle_t handle, uint64_t lba_start, uint64_t lba_count, VbExStream_t *stream_ptr); /** * Read from a stream on a disk * * @param stream Stream to read from * @param bytes Number of bytes to read * @param buffer Destination to read into * * @return Error code, or VB2_SUCCESS. Failure to read as much data as * requested is an error. * * This is used for access to the contents of the actual partitions on the * device. It is not used to access the GPT. */ vb2_error_t VbExStreamRead(VbExStream_t stream, uint32_t bytes, void *buffer); /** * Close a stream * * @param stream Stream to close */ void VbExStreamClose(VbExStream_t stream); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* VBOOT_REFERENCE_VBOOT_API_H_ */