/** @file GBL EFI Fastboot Protocol. Platform-specific helpers for Android Fastboot operations. Related docs: https://android.googlesource.com/platform/bootable/libbootloader/+/refs/heads/gbl-mainline/gbl/docs/gbl_efi_fastboot_protocol.md Copyright (c) 2025, The Android Open Source Project.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #pragma once #include // // {c67e48a0-5eb8-4127-be89-df2ed93d8a9a} // #define GBL_EFI_FASTBOOT_PROTOCOL_GUID \ { 0xc67e48a0, 0x5eb8, 0x4127, { 0xbe, 0x89, 0xdf, 0x2e, 0xd9, 0x3d, 0x8a, 0x9a } } #define GBL_EFI_FASTBOOT_PROTOCOL_REVISION 0x00010000 #define GBL_EFI_FASTBOOT_SERIAL_NUMBER_MAX_LEN_UTF8 32 #define GBL_EFI_FASTBOOT_PARTITION_TYPE_BUF_LEN 56 typedef struct _GBL_EFI_FASTBOOT_PROTOCOL GBL_EFI_FASTBOOT_PROTOCOL; typedef enum { GblEfiFastbootMessageTypeOkay, GblEfiFastbootMessageTypeFail, GblEfiFastbootMessageTypeInfo } GBL_EFI_FASTBOOT_MESSAGE_TYPE; typedef enum { GblEfiFastbootCommandExecResultProhibited, GblEfiFastbootCommandExecResultDefaultImpl, GblEfiFastbootCommandExecResultCustomImpl } GBL_EFI_FASTBOOT_COMMAND_EXEC_RESULT; typedef VOID (EFIAPI *GBL_EFI_FASTBOOT_GET_VAR_ALL_CALLBACK)( IN VOID *Context, IN UINTN NumArgs, IN CONST CHAR8 *CONST *Args, IN CONST CHAR8 *Value ); typedef EFI_STATUS (EFIAPI *GBL_EFI_FASTBOOT_MESSAGE_SENDER)( IN VOID *Context, IN UINT32 MsgType, // GBL_EFI_FASTBOOT_MESSAGE_TYPE IN UINTN MsgLen, IN CONST CHAR8 *Msg ); typedef EFI_STATUS (EFIAPI *GBL_EFI_FASTBOOT_GET_VAR)( IN GBL_EFI_FASTBOOT_PROTOCOL *This, IN UINTN NumArgs, IN CONST CHAR8 *CONST *Args, IN OUT UINTN *BufferSize, OUT CHAR8 *Buffer ); typedef EFI_STATUS (EFIAPI *GBL_EFI_FASTBOOT_GET_VAR_ALL)( IN GBL_EFI_FASTBOOT_PROTOCOL *This, IN VOID *Context, IN GBL_EFI_FASTBOOT_GET_VAR_ALL_CALLBACK Callback ); typedef EFI_STATUS (EFIAPI *GBL_EFI_FASTBOOT_GET_STAGED)( IN GBL_EFI_FASTBOOT_PROTOCOL *This, IN OUT UINTN *BufferSize, OUT UINTN *BufferRemains, OUT UINT8 *Buffer ); typedef EFI_STATUS (EFIAPI *GBL_EFI_FASTBOOT_COMMAND_EXEC)( IN GBL_EFI_FASTBOOT_PROTOCOL *This, IN UINTN NumArgs, IN CONST CHAR8 *CONST *Args, IN UINTN DownloadBufferSize, IN UINTN DownloadBufferUsedSize, IN UINT8 *DownloadBuffer, OUT UINT32 *Implementation, // GBL_EFI_FASTBOOT_COMMAND_EXEC_RESULT IN GBL_EFI_FASTBOOT_MESSAGE_SENDER Sender, IN VOID *Context ); typedef EFI_STATUS (EFIAPI *GBL_EFI_FASTBOOT_GET_PARTITION_TYPE)( IN GBL_EFI_FASTBOOT_PROTOCOL *This, IN CONST CHAR8 *PartName, IN OUT UINTN *PartTypeLen, OUT CHAR8 *PartType ); struct _GBL_EFI_FASTBOOT_PROTOCOL { UINT64 Revision; CHAR8 SerialNumber[GBL_EFI_FASTBOOT_SERIAL_NUMBER_MAX_LEN_UTF8]; GBL_EFI_FASTBOOT_GET_VAR GetVar; GBL_EFI_FASTBOOT_GET_VAR_ALL GetVarAll; GBL_EFI_FASTBOOT_GET_STAGED GetStaged; GBL_EFI_FASTBOOT_COMMAND_EXEC CommandExec; GBL_EFI_FASTBOOT_GET_PARTITION_TYPE GetPartitionType; }; extern EFI_GUID gGblEfiFastbootProtocolGuid;