xref: /aosp_15_r20/external/vboot_reference/firmware/include/vboot_api.h (revision 8617a60d3594060b7ecbd21bc622a7c14f3cf2bc)
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