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