summaryrefslogtreecommitdiff
path: root/EmbeddedPkg/Include/Protocol/GblEfiFastboot.h
blob: 31514fd160dcf53be4af239603b71098b57b651d (plain)
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
/** @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;