blob: 983cd9d74ed8f14815eb1175ca8292afc6e36997 [file]
/** @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;