xref: /aosp_15_r20/external/vboot_reference/firmware/2lib/include/2constants.h (revision 8617a60d3594060b7ecbd21bc622a7c14f3cf2bc)
1*8617a60dSAndroid Build Coastguard Worker /* Copyright 2019 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  * General vboot-related constants.
6*8617a60dSAndroid Build Coastguard Worker  *
7*8617a60dSAndroid Build Coastguard Worker  * Constants that need to be exposed to assembly files or linker scripts
8*8617a60dSAndroid Build Coastguard Worker  * may be placed here and imported via vb2_constants.h.
9*8617a60dSAndroid Build Coastguard Worker  */
10*8617a60dSAndroid Build Coastguard Worker 
11*8617a60dSAndroid Build Coastguard Worker #ifndef VBOOT_REFERENCE_2CONSTANTS_H_
12*8617a60dSAndroid Build Coastguard Worker #define VBOOT_REFERENCE_2CONSTANTS_H_
13*8617a60dSAndroid Build Coastguard Worker 
14*8617a60dSAndroid Build Coastguard Worker /*
15*8617a60dSAndroid Build Coastguard Worker  * Size of non-volatile data used by vboot.
16*8617a60dSAndroid Build Coastguard Worker  *
17*8617a60dSAndroid Build Coastguard Worker  * If you only support non-volatile data format V1, then use VB2_NVDATA_SIZE.
18*8617a60dSAndroid Build Coastguard Worker  * If you support V2, use VB2_NVDATA_SIZE_V2 and set context flag
19*8617a60dSAndroid Build Coastguard Worker  * VB2_CONTEXT_NVDATA_V2.
20*8617a60dSAndroid Build Coastguard Worker  */
21*8617a60dSAndroid Build Coastguard Worker #define VB2_NVDATA_SIZE 16
22*8617a60dSAndroid Build Coastguard Worker #define VB2_NVDATA_SIZE_V2 64
23*8617a60dSAndroid Build Coastguard Worker 
24*8617a60dSAndroid Build Coastguard Worker /* Size of secure data spaces used by vboot */
25*8617a60dSAndroid Build Coastguard Worker #define VB2_SECDATA_FIRMWARE_SIZE 10
26*8617a60dSAndroid Build Coastguard Worker #define VB2_SECDATA_KERNEL_SIZE_V02 13
27*8617a60dSAndroid Build Coastguard Worker #define VB2_SECDATA_KERNEL_SIZE_V10 40
28*8617a60dSAndroid Build Coastguard Worker #define VB2_SECDATA_KERNEL_MIN_SIZE 13
29*8617a60dSAndroid Build Coastguard Worker #define VB2_SECDATA_KERNEL_MAX_SIZE 64
30*8617a60dSAndroid Build Coastguard Worker #define VB2_SECDATA_FWMP_MIN_SIZE 40
31*8617a60dSAndroid Build Coastguard Worker #define VB2_SECDATA_FWMP_MAX_SIZE 64
32*8617a60dSAndroid Build Coastguard Worker 
33*8617a60dSAndroid Build Coastguard Worker /* Size of current secdata_kernel revision. Referenced by external projects. */
34*8617a60dSAndroid Build Coastguard Worker #define VB2_SECDATA_KERNEL_SIZE VB2_SECDATA_KERNEL_SIZE_V10
35*8617a60dSAndroid Build Coastguard Worker 
36*8617a60dSAndroid Build Coastguard Worker /*
37*8617a60dSAndroid Build Coastguard Worker  * Recommended size of work buffer for firmware verification stage.
38*8617a60dSAndroid Build Coastguard Worker  *
39*8617a60dSAndroid Build Coastguard Worker  * TODO: The recommended size really depends on which key algorithms are
40*8617a60dSAndroid Build Coastguard Worker  * used.  Should have a better / more accurate recommendation than this.
41*8617a60dSAndroid Build Coastguard Worker  */
42*8617a60dSAndroid Build Coastguard Worker #ifdef VB2_X86_RSA_ACCELERATION
43*8617a60dSAndroid Build Coastguard Worker #define VB2_FIRMWARE_WORKBUF_RECOMMENDED_SIZE (20 * 1024)
44*8617a60dSAndroid Build Coastguard Worker #else
45*8617a60dSAndroid Build Coastguard Worker #define VB2_FIRMWARE_WORKBUF_RECOMMENDED_SIZE (12 * 1024)
46*8617a60dSAndroid Build Coastguard Worker #endif
47*8617a60dSAndroid Build Coastguard Worker 
48*8617a60dSAndroid Build Coastguard Worker /*
49*8617a60dSAndroid Build Coastguard Worker  * Recommended size of work buffer for kernel verification stage.
50*8617a60dSAndroid Build Coastguard Worker  *
51*8617a60dSAndroid Build Coastguard Worker  * This is bigger because vboot 2.0 kernel preambles are usually padded to
52*8617a60dSAndroid Build Coastguard Worker  * 64 KB.
53*8617a60dSAndroid Build Coastguard Worker  *
54*8617a60dSAndroid Build Coastguard Worker  * TODO: The recommended size really depends on which key algorithms are
55*8617a60dSAndroid Build Coastguard Worker  * used.  Should have a better / more accurate recommendation than this.
56*8617a60dSAndroid Build Coastguard Worker  */
57*8617a60dSAndroid Build Coastguard Worker #define VB2_KERNEL_WORKBUF_RECOMMENDED_SIZE (80 * 1024)
58*8617a60dSAndroid Build Coastguard Worker 
59*8617a60dSAndroid Build Coastguard Worker /* Recommended buffer size for vb2api_get_pcr_digest. */
60*8617a60dSAndroid Build Coastguard Worker #define VB2_PCR_DIGEST_RECOMMENDED_SIZE 32
61*8617a60dSAndroid Build Coastguard Worker 
62*8617a60dSAndroid Build Coastguard Worker /*
63*8617a60dSAndroid Build Coastguard Worker  * Alignment for work buffer pointers/allocations should be useful for any
64*8617a60dSAndroid Build Coastguard Worker  * data type. When declaring workbuf buffers on the stack, the caller should
65*8617a60dSAndroid Build Coastguard Worker  * use explicit alignment to avoid run-time errors. For example:
66*8617a60dSAndroid Build Coastguard Worker  *
67*8617a60dSAndroid Build Coastguard Worker  *    int foo(void)
68*8617a60dSAndroid Build Coastguard Worker  *    {
69*8617a60dSAndroid Build Coastguard Worker  *        struct vb2_workbuf wb;
70*8617a60dSAndroid Build Coastguard Worker  *        uint8_t buf[NUM] __attribute__((aligned(VB2_WORKBUF_ALIGN)));
71*8617a60dSAndroid Build Coastguard Worker  *        wb.buf = buf;
72*8617a60dSAndroid Build Coastguard Worker  *        wb.size = sizeof(buf);
73*8617a60dSAndroid Build Coastguard Worker  */
74*8617a60dSAndroid Build Coastguard Worker 
75*8617a60dSAndroid Build Coastguard Worker /* We want consistent alignment across all architectures.
76*8617a60dSAndroid Build Coastguard Worker    8-byte should work for all of them. */
77*8617a60dSAndroid Build Coastguard Worker #define VB2_WORKBUF_ALIGN 8
78*8617a60dSAndroid Build Coastguard Worker 
79*8617a60dSAndroid Build Coastguard Worker /* Maximum length of a HWID in bytes, counting terminating null. */
80*8617a60dSAndroid Build Coastguard Worker #define VB2_GBB_HWID_MAX_SIZE 256
81*8617a60dSAndroid Build Coastguard Worker 
82*8617a60dSAndroid Build Coastguard Worker /* Type and offset of flags member in vb2_gbb_header struct. */
83*8617a60dSAndroid Build Coastguard Worker #define VB2_GBB_FLAGS_OFFSET 12
84*8617a60dSAndroid Build Coastguard Worker #ifndef __ASSEMBLER__
85*8617a60dSAndroid Build Coastguard Worker #include <stdint.h>
86*8617a60dSAndroid Build Coastguard Worker typedef uint32_t vb2_gbb_flags_t;
87*8617a60dSAndroid Build Coastguard Worker /*
88*8617a60dSAndroid Build Coastguard Worker  * We use disk handles rather than indices.  Using indices causes problems if
89*8617a60dSAndroid Build Coastguard Worker  * a disk is removed/inserted in the middle of processing.
90*8617a60dSAndroid Build Coastguard Worker  *
91*8617a60dSAndroid Build Coastguard Worker  * TODO(b/181739551): move this to 2api.h when the VbExDisk* functions are
92*8617a60dSAndroid Build Coastguard Worker  * removed from vboot_api.h.
93*8617a60dSAndroid Build Coastguard Worker  */
94*8617a60dSAndroid Build Coastguard Worker typedef void *vb2ex_disk_handle_t;
95*8617a60dSAndroid Build Coastguard Worker #endif
96*8617a60dSAndroid Build Coastguard Worker 
97*8617a60dSAndroid Build Coastguard Worker /* Size of legacy VbSharedDataHeader struct.  Defined here to avoid including
98*8617a60dSAndroid Build Coastguard Worker    the struct definition as part of a vb2_api.h include. */
99*8617a60dSAndroid Build Coastguard Worker #define VB2_VBSD_SIZE 1096
100*8617a60dSAndroid Build Coastguard Worker 
101*8617a60dSAndroid Build Coastguard Worker #endif  /* VBOOT_REFERENCE_2CONSTANTS_H_ */
102