1*8617a60dSAndroid Build Coastguard Worker /* Copyright 2013 The ChromiumOS Authors 2*8617a60dSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 3*8617a60dSAndroid Build Coastguard Worker * found in the LICENSE file. 4*8617a60dSAndroid Build Coastguard Worker * 5*8617a60dSAndroid Build Coastguard Worker * APIs provided by firmware to vboot_reference. 6*8617a60dSAndroid Build Coastguard Worker * 7*8617a60dSAndroid Build Coastguard Worker * General notes: 8*8617a60dSAndroid Build Coastguard Worker * 9*8617a60dSAndroid Build Coastguard Worker * All verified boot functions now start with "Vb" for namespace clarity. This 10*8617a60dSAndroid Build Coastguard Worker * fixes the problem where uboot and vboot both defined assert(). 11*8617a60dSAndroid Build Coastguard Worker * 12*8617a60dSAndroid Build Coastguard Worker * Verified boot APIs to be implemented by the calling firmware and exported to 13*8617a60dSAndroid Build Coastguard Worker * vboot_reference start with "VbEx". 14*8617a60dSAndroid Build Coastguard Worker * 15*8617a60dSAndroid Build Coastguard Worker * TODO: split this file into a vboot_entry_points.h file which contains the 16*8617a60dSAndroid Build Coastguard Worker * entry points for the firmware to call vboot_reference, and a 17*8617a60dSAndroid Build Coastguard Worker * vboot_firmware_exports.h which contains the APIs to be implemented by the 18*8617a60dSAndroid Build Coastguard Worker * calling firmware and exported to vboot_reference. 19*8617a60dSAndroid Build Coastguard Worker */ 20*8617a60dSAndroid Build Coastguard Worker 21*8617a60dSAndroid Build Coastguard Worker #ifndef VBOOT_REFERENCE_VBOOT_API_H_ 22*8617a60dSAndroid Build Coastguard Worker #define VBOOT_REFERENCE_VBOOT_API_H_ 23*8617a60dSAndroid Build Coastguard Worker 24*8617a60dSAndroid Build Coastguard Worker #include <stdint.h> 25*8617a60dSAndroid Build Coastguard Worker #include <stdlib.h> 26*8617a60dSAndroid Build Coastguard Worker 27*8617a60dSAndroid Build Coastguard Worker #include "../2lib/include/2constants.h" 28*8617a60dSAndroid Build Coastguard Worker #include "../2lib/include/2return_codes.h" 29*8617a60dSAndroid Build Coastguard Worker #include "gpt.h" 30*8617a60dSAndroid Build Coastguard Worker 31*8617a60dSAndroid Build Coastguard Worker #ifdef __cplusplus 32*8617a60dSAndroid Build Coastguard Worker extern "C" { 33*8617a60dSAndroid Build Coastguard Worker #endif /* __cplusplus */ 34*8617a60dSAndroid Build Coastguard Worker 35*8617a60dSAndroid Build Coastguard Worker struct vb2_context; 36*8617a60dSAndroid Build Coastguard Worker struct vb2_disk_info; 37*8617a60dSAndroid Build Coastguard Worker typedef struct VbSharedDataHeader VbSharedDataHeader; 38*8617a60dSAndroid Build Coastguard Worker 39*8617a60dSAndroid Build Coastguard Worker /*****************************************************************************/ 40*8617a60dSAndroid Build Coastguard Worker /* Disk access (previously in boot_device.h) */ 41*8617a60dSAndroid Build Coastguard Worker 42*8617a60dSAndroid Build Coastguard Worker /** 43*8617a60dSAndroid Build Coastguard Worker * Read lba_count LBA sectors, starting at sector lba_start, from the disk, 44*8617a60dSAndroid Build Coastguard Worker * into the buffer. 45*8617a60dSAndroid Build Coastguard Worker * 46*8617a60dSAndroid Build Coastguard Worker * This is used for random access to the GPT. It is not for the partition 47*8617a60dSAndroid Build Coastguard Worker * contents. The upper limit is lba_count. 48*8617a60dSAndroid Build Coastguard Worker * 49*8617a60dSAndroid Build Coastguard Worker * If the disk handle is invalid (for example, the handle refers to a disk 50*8617a60dSAndroid Build Coastguard Worker * which as been removed), the function must return error but must not 51*8617a60dSAndroid Build Coastguard Worker * crash. 52*8617a60dSAndroid Build Coastguard Worker */ 53*8617a60dSAndroid Build Coastguard Worker vb2_error_t VbExDiskRead(vb2ex_disk_handle_t handle, uint64_t lba_start, 54*8617a60dSAndroid Build Coastguard Worker uint64_t lba_count, void *buffer); 55*8617a60dSAndroid Build Coastguard Worker 56*8617a60dSAndroid Build Coastguard Worker /** 57*8617a60dSAndroid Build Coastguard Worker * Write lba_count LBA sectors, starting at sector lba_start, to the disk, from 58*8617a60dSAndroid Build Coastguard Worker * the buffer. 59*8617a60dSAndroid Build Coastguard Worker * 60*8617a60dSAndroid Build Coastguard Worker * This is used for random access to the GPT. It does not (necessarily) access 61*8617a60dSAndroid Build Coastguard Worker * the streaming portion of the device. 62*8617a60dSAndroid Build Coastguard Worker * 63*8617a60dSAndroid Build Coastguard Worker * If the disk handle is invalid (for example, the handle refers to a disk 64*8617a60dSAndroid Build Coastguard Worker * which as been removed), the function must return error but must not 65*8617a60dSAndroid Build Coastguard Worker * crash. 66*8617a60dSAndroid Build Coastguard Worker */ 67*8617a60dSAndroid Build Coastguard Worker vb2_error_t VbExDiskWrite(vb2ex_disk_handle_t handle, uint64_t lba_start, 68*8617a60dSAndroid Build Coastguard Worker uint64_t lba_count, const void *buffer); 69*8617a60dSAndroid Build Coastguard Worker 70*8617a60dSAndroid Build Coastguard Worker /* Streaming read interface */ 71*8617a60dSAndroid Build Coastguard Worker typedef void *VbExStream_t; 72*8617a60dSAndroid Build Coastguard Worker 73*8617a60dSAndroid Build Coastguard Worker /** 74*8617a60dSAndroid Build Coastguard Worker * Open a stream on a disk 75*8617a60dSAndroid Build Coastguard Worker * 76*8617a60dSAndroid Build Coastguard Worker * @param handle Disk to open the stream against 77*8617a60dSAndroid Build Coastguard Worker * @param lba_start Starting sector offset within the disk to stream from 78*8617a60dSAndroid Build Coastguard Worker * @param lba_count Maximum extent of the stream in sectors 79*8617a60dSAndroid Build Coastguard Worker * @param stream out-paramter for the generated stream 80*8617a60dSAndroid Build Coastguard Worker * 81*8617a60dSAndroid Build Coastguard Worker * @return Error code, or VB2_SUCCESS. 82*8617a60dSAndroid Build Coastguard Worker * 83*8617a60dSAndroid Build Coastguard Worker * This is used for access to the contents of the actual partitions on the 84*8617a60dSAndroid Build Coastguard Worker * device. It is not used to access the GPT. The size of the content addressed 85*8617a60dSAndroid Build Coastguard Worker * is within streaming_lba_count. 86*8617a60dSAndroid Build Coastguard Worker */ 87*8617a60dSAndroid Build Coastguard Worker vb2_error_t VbExStreamOpen(vb2ex_disk_handle_t handle, uint64_t lba_start, 88*8617a60dSAndroid Build Coastguard Worker uint64_t lba_count, VbExStream_t *stream_ptr); 89*8617a60dSAndroid Build Coastguard Worker 90*8617a60dSAndroid Build Coastguard Worker /** 91*8617a60dSAndroid Build Coastguard Worker * Read from a stream on a disk 92*8617a60dSAndroid Build Coastguard Worker * 93*8617a60dSAndroid Build Coastguard Worker * @param stream Stream to read from 94*8617a60dSAndroid Build Coastguard Worker * @param bytes Number of bytes to read 95*8617a60dSAndroid Build Coastguard Worker * @param buffer Destination to read into 96*8617a60dSAndroid Build Coastguard Worker * 97*8617a60dSAndroid Build Coastguard Worker * @return Error code, or VB2_SUCCESS. Failure to read as much data as 98*8617a60dSAndroid Build Coastguard Worker * requested is an error. 99*8617a60dSAndroid Build Coastguard Worker * 100*8617a60dSAndroid Build Coastguard Worker * This is used for access to the contents of the actual partitions on the 101*8617a60dSAndroid Build Coastguard Worker * device. It is not used to access the GPT. 102*8617a60dSAndroid Build Coastguard Worker */ 103*8617a60dSAndroid Build Coastguard Worker vb2_error_t VbExStreamRead(VbExStream_t stream, uint32_t bytes, void *buffer); 104*8617a60dSAndroid Build Coastguard Worker 105*8617a60dSAndroid Build Coastguard Worker /** 106*8617a60dSAndroid Build Coastguard Worker * Close a stream 107*8617a60dSAndroid Build Coastguard Worker * 108*8617a60dSAndroid Build Coastguard Worker * @param stream Stream to close 109*8617a60dSAndroid Build Coastguard Worker */ 110*8617a60dSAndroid Build Coastguard Worker void VbExStreamClose(VbExStream_t stream); 111*8617a60dSAndroid Build Coastguard Worker 112*8617a60dSAndroid Build Coastguard Worker #ifdef __cplusplus 113*8617a60dSAndroid Build Coastguard Worker } 114*8617a60dSAndroid Build Coastguard Worker #endif /* __cplusplus */ 115*8617a60dSAndroid Build Coastguard Worker 116*8617a60dSAndroid Build Coastguard Worker #endif /* VBOOT_REFERENCE_VBOOT_API_H_ */ 117