/** @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.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #pragma once #include // // {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;