blob: 31514fd160dcf53be4af239603b71098b57b651d [file]
/** @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.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#pragma once
#include <Uefi/UefiBaseType.h>
//
// {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;