1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
|
/** @file
GBL EFI AVB Protocol.
Delegates Android Verified Boot (AVB) board-specific logic to firmware.
Related docs:
https://android.googlesource.com/platform/bootable/libbootloader/+/refs/heads/gbl-mainline/gbl/docs/gbl_efi_avb_protocol.md
Copyright (c) 2025, The Android Open Source Project.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#pragma once
#include <Uefi/UefiBaseType.h>
//
// {6bc66b9a-d5c9-4c02-9da9-50af198d912c}
//
#define GBL_EFI_AVB_PROTOCOL_GUID \
{ 0x6bc66b9a, 0xd5c9, 0x4c02, { 0x9d, 0xa9, 0x50, 0xaf, 0x19, 0x8d, 0x91, 0x2c } }
#define GBL_EFI_AVB_PROTOCOL_REVISION 0x00010000
typedef struct _GBL_EFI_AVB_PROTOCOL GBL_EFI_AVB_PROTOCOL;
typedef UINT64 GBL_EFI_AVB_DEVICE_STATUS;
#define GBL_EFI_AVB_DEVICE_STATUS_UNLOCKED BIT0
#define GBL_EFI_AVB_DEVICE_STATUS_DM_VERITY_FAILED BIT1
#define GBL_EFI_AVB_DEVICE_STATUS_UNLOCKED_CRITICAL BIT2
#define GBL_EFI_AVB_DEVICE_STATUS_UNLOCKABLE BIT3
typedef UINT64 GBL_EFI_AVB_BOOT_COLOR;
#define GBL_EFI_AVB_BOOT_COLOR_RED BIT0
#define GBL_EFI_AVB_BOOT_COLOR_ORANGE BIT1
#define GBL_EFI_AVB_BOOT_COLOR_YELLOW BIT2
#define GBL_EFI_AVB_BOOT_COLOR_GREEN BIT3
#define GBL_EFI_AVB_BOOT_COLOR_RED_EIO BIT4
typedef UINT64 GBL_EFI_AVB_PARTITION_FLAGS;
#define GBL_EFI_AVB_PARTITION_FLAG_VERIFY BIT0
#define GBL_EFI_AVB_PARTITION_FLAG_VERIFY_IF_EXISTS BIT1
#define GBL_EFI_AVB_PARTITION_FLAG_FLASH_CRITICAL BIT2
#define GBL_EFI_AVB_PARTITION_FLAG_FDR BIT3
typedef enum {
GblEfiAvbKeyValidationStatusInvalid = 0,
GblEfiAvbKeyValidationStatusValidCustomKey,
GblEfiAvbKeyValidationStatusValid
} GBL_EFI_AVB_KEY_VALIDATION_STATUS;
typedef enum {
GblEfiAvbLockTypeDevice = 0,
GblEfiAvbLockTypeCritical
} GBL_EFI_AVB_LOCK_TYPE;
typedef enum {
GblEfiAvbLockStateUnlocked = 0,
GblEfiAvbLockStateLocked
} GBL_EFI_AVB_LOCK_STATE;
typedef struct {
UINTN BaseNameLen;
CHAR8 *BaseName; // UTF-8, null terminated
GBL_EFI_AVB_PARTITION_FLAGS Flags;
} GBL_EFI_AVB_PARTITION_ATTRIBUTES;
typedef struct {
CONST CHAR8 *BaseName; // UTF-8 null terminated
UINTN DataSize;
CONST UINT8 *Data;
} GBL_EFI_AVB_LOADED_PARTITION;
typedef struct {
CONST CHAR8 *BasePartitionName; // UTF-8, null terminated
CONST CHAR8 *Key; // UTF-8, null terminated
UINTN ValueSize;
CONST UINT8 *Value;
} GBL_EFI_AVB_PROPERTY;
typedef struct {
GBL_EFI_AVB_BOOT_COLOR ColorFlags;
CONST CHAR8 *Digest; // UTF-8, null terminated
UINTN NumPartitions;
CONST GBL_EFI_AVB_LOADED_PARTITION *Partitions;
UINTN NumProperties;
CONST GBL_EFI_AVB_PROPERTY *Properties;
UINT64 Reserved[8];
} GBL_EFI_AVB_VERIFICATION_RESULT;
typedef
EFI_STATUS
(EFIAPI *GBL_EFI_AVB_READ_PARTITION_ATTRIBUTES)(
IN GBL_EFI_AVB_PROTOCOL *This,
IN OUT UINTN *NumPartitions,
IN OUT GBL_EFI_AVB_PARTITION_ATTRIBUTES *Partitions
);
typedef
EFI_STATUS
(EFIAPI *GBL_EFI_AVB_READ_DEVICE_STATUS)(
IN GBL_EFI_AVB_PROTOCOL *This,
OUT GBL_EFI_AVB_DEVICE_STATUS *StatusFlags
);
typedef
EFI_STATUS
(EFIAPI *GBL_EFI_AVB_VALIDATE_VBMETA_PUBLIC_KEY)(
IN GBL_EFI_AVB_PROTOCOL *This,
IN UINTN PublicKeyLength,
IN CONST UINT8 *PublicKeyData,
IN UINTN PublicKeyMetadataLength,
IN CONST UINT8 *PublicKeyMetadata,
OUT UINT32 *ValidationStatus // GBL_EFI_AVB_KEY_VALIDATION_STATUS
);
typedef
EFI_STATUS
(EFIAPI *GBL_EFI_AVB_READ_ROLLBACK_INDEX)(
IN GBL_EFI_AVB_PROTOCOL *This,
IN UINTN IndexLocation,
OUT UINT64 *RollbackIndex
);
typedef
EFI_STATUS
(EFIAPI *GBL_EFI_AVB_WRITE_ROLLBACK_INDEX)(
IN GBL_EFI_AVB_PROTOCOL *This,
IN UINTN IndexLocation,
IN UINT64 RollbackIndex
);
typedef
EFI_STATUS
(EFIAPI *GBL_EFI_AVB_READ_PERSISTENT_VALUE)(
IN GBL_EFI_AVB_PROTOCOL *This,
IN CONST CHAR8 *Name,
IN OUT UINTN *ValueSize,
OUT UINT8 *Value
);
typedef
EFI_STATUS
(EFIAPI *GBL_EFI_AVB_WRITE_PERSISTENT_VALUE)(
IN GBL_EFI_AVB_PROTOCOL *This,
IN CONST CHAR8 *Name,
IN UINTN ValueSize,
IN CONST UINT8 *Value
);
typedef
EFI_STATUS
(EFIAPI *GBL_EFI_AVB_HANDLE_VERIFICATION_RESULT)(
IN GBL_EFI_AVB_PROTOCOL *This,
IN CONST GBL_EFI_AVB_VERIFICATION_RESULT *Result
);
typedef
EFI_STATUS
(EFIAPI *GBL_EFI_AVB_WRITE_LOCK_STATE)(
IN GBL_EFI_AVB_PROTOCOL *This,
IN UINT8 Type, // GBL_EFI_AVB_LOCK_TYPE
IN UINT8 State // GBL_EFI_AVB_LOCK_STATE
);
typedef
EFI_STATUS
(EFIAPI *GBL_EFI_AVB_FACTORY_DATA_RESET)(
IN GBL_EFI_AVB_PROTOCOL *This
);
struct _GBL_EFI_AVB_PROTOCOL {
UINT64 Revision;
GBL_EFI_AVB_READ_PARTITION_ATTRIBUTES ReadPartitionAttributes;
GBL_EFI_AVB_READ_DEVICE_STATUS ReadDeviceStatus;
GBL_EFI_AVB_VALIDATE_VBMETA_PUBLIC_KEY ValidateVbmetaPublicKey;
GBL_EFI_AVB_READ_ROLLBACK_INDEX ReadRollbackIndex;
GBL_EFI_AVB_WRITE_ROLLBACK_INDEX WriteRollbackIndex;
GBL_EFI_AVB_READ_PERSISTENT_VALUE ReadPersistentValue;
GBL_EFI_AVB_WRITE_PERSISTENT_VALUE WritePersistentValue;
GBL_EFI_AVB_HANDLE_VERIFICATION_RESULT HandleVerificationResult;
GBL_EFI_AVB_WRITE_LOCK_STATE WriteLockState;
GBL_EFI_AVB_FACTORY_DATA_RESET FactoryDataReset;
};
extern EFI_GUID gGblEfiAvbProtocolGuid;
|