xref: /DragonStub/inc/efiprot.h (revision ce625f353e86c953a5f1cd83bec96fa884d01751)
1530d68baSNigel Croxon #ifndef _EFI_PROT_H
2530d68baSNigel Croxon #define _EFI_PROT_H
3530d68baSNigel Croxon 
4530d68baSNigel Croxon /*++
5530d68baSNigel Croxon 
6530d68baSNigel Croxon Copyright (c) 1998  Intel Corporation
7530d68baSNigel Croxon 
8530d68baSNigel Croxon Module Name:
9530d68baSNigel Croxon 
10530d68baSNigel Croxon     efiprot.h
11530d68baSNigel Croxon 
12530d68baSNigel Croxon Abstract:
13530d68baSNigel Croxon 
14530d68baSNigel Croxon     EFI Protocols
15530d68baSNigel Croxon 
16530d68baSNigel Croxon 
17530d68baSNigel Croxon 
18530d68baSNigel Croxon Revision History
19530d68baSNigel Croxon 
20530d68baSNigel Croxon --*/
21530d68baSNigel Croxon 
22530d68baSNigel Croxon //
23530d68baSNigel Croxon //  FPSWA library protocol
24530d68baSNigel Croxon //
251b10394eSNigel Croxon #define EFI_FPSWA_PROTOCOL_GUID \
26530d68baSNigel Croxon     { 0xc41b6531, 0x97b9, 0x11d3, {0x9a, 0x29, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
271b10394eSNigel Croxon #define FPSWA_PROTOCOL EFI_FPSWA_PROTOCOL_GUID
28530d68baSNigel Croxon 
29530d68baSNigel Croxon //
30530d68baSNigel Croxon // Device Path protocol
31530d68baSNigel Croxon //
32530d68baSNigel Croxon 
331b10394eSNigel Croxon #define EFI_DEVICE_PATH_PROTOCOL_GUID \
34530d68baSNigel Croxon     { 0x9576e91, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
351b10394eSNigel Croxon #define DEVICE_PATH_PROTOCOL EFI_DEVICE_PATH_PROTOCOL_GUID
36530d68baSNigel Croxon 
37530d68baSNigel Croxon 
38530d68baSNigel Croxon //
39530d68baSNigel Croxon // Block IO protocol
40530d68baSNigel Croxon //
41530d68baSNigel Croxon 
421b10394eSNigel Croxon #define EFI_BLOCK_IO_PROTOCOL_GUID \
43530d68baSNigel Croxon     { 0x964e5b21, 0x6459, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
441b10394eSNigel Croxon #define BLOCK_IO_PROTOCOL EFI_BLOCK_IO_PROTOCOL_GUID
45530d68baSNigel Croxon 
461b10394eSNigel Croxon #define EFI_BLOCK_IO_PROTOCOL_REVISION    0x00010000
471b10394eSNigel Croxon #define EFI_BLOCK_IO_PROTOCOL_REVISION2   0x00020001
481b10394eSNigel Croxon #define EFI_BLOCK_IO_PROTOCOL_REVISION3   ((2<<16) | 31)
491b10394eSNigel Croxon #define EFI_BLOCK_IO_INTERFACE_REVISION   EFI_BLOCK_IO_PROTOCOL_REVISION
501b10394eSNigel Croxon #define EFI_BLOCK_IO_INTERFACE_REVISION2  EFI_BLOCK_IO_PROTOCOL_REVISION2
511b10394eSNigel Croxon #define EFI_BLOCK_IO_INTERFACE_REVISION3  EFI_BLOCK_IO_PROTOCOL_REVISION3
521b10394eSNigel Croxon 
531b10394eSNigel Croxon INTERFACE_DECL(_EFI_BLOCK_IO_PROTOCOL);
54530d68baSNigel Croxon 
55530d68baSNigel Croxon typedef
56530d68baSNigel Croxon EFI_STATUS
57530d68baSNigel Croxon (EFIAPI *EFI_BLOCK_RESET) (
581b10394eSNigel Croxon     IN struct _EFI_BLOCK_IO_PROTOCOL  *This,
59530d68baSNigel Croxon     IN BOOLEAN                        ExtendedVerification
60530d68baSNigel Croxon     );
61530d68baSNigel Croxon 
62530d68baSNigel Croxon typedef
63530d68baSNigel Croxon EFI_STATUS
64530d68baSNigel Croxon (EFIAPI *EFI_BLOCK_READ) (
651b10394eSNigel Croxon     IN struct _EFI_BLOCK_IO_PROTOCOL  *This,
66530d68baSNigel Croxon     IN UINT32                         MediaId,
67530d68baSNigel Croxon     IN EFI_LBA                        LBA,
68530d68baSNigel Croxon     IN UINTN                          BufferSize,
69530d68baSNigel Croxon     OUT VOID                          *Buffer
70530d68baSNigel Croxon     );
71530d68baSNigel Croxon 
72530d68baSNigel Croxon 
73530d68baSNigel Croxon typedef
74530d68baSNigel Croxon EFI_STATUS
75530d68baSNigel Croxon (EFIAPI *EFI_BLOCK_WRITE) (
761b10394eSNigel Croxon     IN struct _EFI_BLOCK_IO_PROTOCOL  *This,
77530d68baSNigel Croxon     IN UINT32                         MediaId,
78530d68baSNigel Croxon     IN EFI_LBA                        LBA,
79530d68baSNigel Croxon     IN UINTN                          BufferSize,
80530d68baSNigel Croxon     IN VOID                           *Buffer
81530d68baSNigel Croxon     );
82530d68baSNigel Croxon 
83530d68baSNigel Croxon 
84530d68baSNigel Croxon typedef
85530d68baSNigel Croxon EFI_STATUS
86530d68baSNigel Croxon (EFIAPI *EFI_BLOCK_FLUSH) (
871b10394eSNigel Croxon     IN struct _EFI_BLOCK_IO_PROTOCOL  *This
88530d68baSNigel Croxon     );
89530d68baSNigel Croxon 
90530d68baSNigel Croxon 
91530d68baSNigel Croxon 
92530d68baSNigel Croxon typedef struct {
93530d68baSNigel Croxon     UINT32              MediaId;
94530d68baSNigel Croxon     BOOLEAN             RemovableMedia;
95530d68baSNigel Croxon     BOOLEAN             MediaPresent;
96530d68baSNigel Croxon 
97530d68baSNigel Croxon     BOOLEAN             LogicalPartition;
98530d68baSNigel Croxon     BOOLEAN             ReadOnly;
99530d68baSNigel Croxon     BOOLEAN             WriteCaching;
100530d68baSNigel Croxon 
101530d68baSNigel Croxon     UINT32              BlockSize;
102530d68baSNigel Croxon     UINT32              IoAlign;
103530d68baSNigel Croxon 
104530d68baSNigel Croxon     EFI_LBA             LastBlock;
105530d68baSNigel Croxon 
106530d68baSNigel Croxon     /* revision 2 */
107530d68baSNigel Croxon     EFI_LBA             LowestAlignedLba;
108530d68baSNigel Croxon     UINT32              LogicalBlocksPerPhysicalBlock;
109530d68baSNigel Croxon     /* revision 3 */
110530d68baSNigel Croxon     UINT32              OptimalTransferLengthGranularity;
111530d68baSNigel Croxon } EFI_BLOCK_IO_MEDIA;
112530d68baSNigel Croxon 
1131b10394eSNigel Croxon typedef struct _EFI_BLOCK_IO_PROTOCOL {
114530d68baSNigel Croxon     UINT64                  Revision;
115530d68baSNigel Croxon 
116530d68baSNigel Croxon     EFI_BLOCK_IO_MEDIA      *Media;
117530d68baSNigel Croxon 
118530d68baSNigel Croxon     EFI_BLOCK_RESET         Reset;
119530d68baSNigel Croxon     EFI_BLOCK_READ          ReadBlocks;
120530d68baSNigel Croxon     EFI_BLOCK_WRITE         WriteBlocks;
121530d68baSNigel Croxon     EFI_BLOCK_FLUSH         FlushBlocks;
122530d68baSNigel Croxon 
1231b10394eSNigel Croxon } EFI_BLOCK_IO_PROTOCOL;
124530d68baSNigel Croxon 
1251b10394eSNigel Croxon typedef struct _EFI_BLOCK_IO_PROTOCOL _EFI_BLOCK_IO;
1261b10394eSNigel Croxon typedef EFI_BLOCK_IO_PROTOCOL EFI_BLOCK_IO;
127530d68baSNigel Croxon 
1287993cbccSNigel Croxon #define EFI_BLOCK_IO2_PROTOCOL_GUID \
1297993cbccSNigel Croxon     { 0xa77b2472, 0xe282, 0x4e9f, {0xa2, 0x45, 0xc2, 0xc0, 0xe2, 0x7b, 0xbc, 0xc1} }
1307993cbccSNigel Croxon 
1317993cbccSNigel Croxon INTERFACE_DECL(_EFI_BLOCK_IO2_PROTOCOL);
1327993cbccSNigel Croxon 
1337993cbccSNigel Croxon typedef struct {
1347993cbccSNigel Croxon     EFI_EVENT               Event;
1357993cbccSNigel Croxon     EFI_STATUS              TransactionStatus;
1367993cbccSNigel Croxon } EFI_BLOCK_IO2_TOKEN;
1377993cbccSNigel Croxon 
1387993cbccSNigel Croxon typedef
1397993cbccSNigel Croxon EFI_STATUS
1407993cbccSNigel Croxon (EFIAPI *EFI_BLOCK_RESET_EX) (
1417993cbccSNigel Croxon     IN struct _EFI_BLOCK_IO2_PROTOCOL  *This,
1427993cbccSNigel Croxon     IN BOOLEAN                         ExtendedVerification
1437993cbccSNigel Croxon     );
1447993cbccSNigel Croxon 
1457993cbccSNigel Croxon typedef
1467993cbccSNigel Croxon EFI_STATUS
1477993cbccSNigel Croxon (EFIAPI *EFI_BLOCK_READ_EX) (
1487993cbccSNigel Croxon     IN struct _EFI_BLOCK_IO2_PROTOCOL  *This,
1497993cbccSNigel Croxon     IN UINT32                          MediaId,
1507993cbccSNigel Croxon     IN EFI_LBA                         LBA,
1517993cbccSNigel Croxon     IN OUT EFI_BLOCK_IO2_TOKEN         *Token,
1527993cbccSNigel Croxon     IN UINTN                           BufferSize,
1537993cbccSNigel Croxon     OUT VOID                           *Buffer
1547993cbccSNigel Croxon     );
1557993cbccSNigel Croxon 
1567993cbccSNigel Croxon typedef
1577993cbccSNigel Croxon EFI_STATUS
1587993cbccSNigel Croxon (EFIAPI *EFI_BLOCK_WRITE_EX) (
1597993cbccSNigel Croxon     IN struct _EFI_BLOCK_IO2_PROTOCOL  *This,
1607993cbccSNigel Croxon     IN UINT32                          MediaId,
1617993cbccSNigel Croxon     IN EFI_LBA                         LBA,
1627993cbccSNigel Croxon     IN OUT EFI_BLOCK_IO2_TOKEN         *Token,
1637993cbccSNigel Croxon     IN UINTN                           BufferSize,
1647993cbccSNigel Croxon     IN VOID                            *Buffer
1657993cbccSNigel Croxon     );
1667993cbccSNigel Croxon 
1677993cbccSNigel Croxon typedef
1687993cbccSNigel Croxon EFI_STATUS
1697993cbccSNigel Croxon (EFIAPI *EFI_BLOCK_FLUSH_EX) (
1707993cbccSNigel Croxon     IN struct _EFI_BLOCK_IO2_PROTOCOL  *This,
1717993cbccSNigel Croxon     IN OUT EFI_BLOCK_IO2_TOKEN         *Token
1727993cbccSNigel Croxon     );
1737993cbccSNigel Croxon 
1747993cbccSNigel Croxon typedef struct _EFI_BLOCK_IO2_PROTOCOL {
1757993cbccSNigel Croxon     EFI_BLOCK_IO_MEDIA  *Media;
1767993cbccSNigel Croxon     EFI_BLOCK_RESET_EX  Reset;
1777993cbccSNigel Croxon     EFI_BLOCK_READ_EX   ReadBlocksEx;
1787993cbccSNigel Croxon     EFI_BLOCK_WRITE_EX  WriteBlocksEx;
1797993cbccSNigel Croxon     EFI_BLOCK_FLUSH_EX  FlushBlocksEx;
1807993cbccSNigel Croxon } EFI_BLOCK_IO2_PROTOCOL;
181530d68baSNigel Croxon 
182530d68baSNigel Croxon //
183530d68baSNigel Croxon // Disk Block IO protocol
184530d68baSNigel Croxon //
185530d68baSNigel Croxon 
1861b10394eSNigel Croxon #define EFI_DISK_IO_PROTOCOL_GUID \
187530d68baSNigel Croxon     { 0xce345171, 0xba0b, 0x11d2,  {0x8e, 0x4f, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
1881b10394eSNigel Croxon #define DISK_IO_PROTOCOL EFI_DISK_IO_PROTOCOL_GUID
189530d68baSNigel Croxon 
1901b10394eSNigel Croxon #define EFI_DISK_IO_PROTOCOL_REVISION  0x00010000
1911b10394eSNigel Croxon #define EFI_DISK_IO_INTERFACE_REVISION EFI_DISK_IO_PROTOCOL_REVISION
1921b10394eSNigel Croxon 
1931b10394eSNigel Croxon INTERFACE_DECL(_EFI_DISK_IO_PROTOCOL);
194530d68baSNigel Croxon 
195530d68baSNigel Croxon typedef
196530d68baSNigel Croxon EFI_STATUS
197530d68baSNigel Croxon (EFIAPI *EFI_DISK_READ) (
1981b10394eSNigel Croxon     IN struct _EFI_DISK_IO_PROTOCOL  *This,
199530d68baSNigel Croxon     IN UINT32                        MediaId,
200530d68baSNigel Croxon     IN UINT64                        Offset,
201530d68baSNigel Croxon     IN UINTN                         BufferSize,
202530d68baSNigel Croxon     OUT VOID                         *Buffer
203530d68baSNigel Croxon     );
204530d68baSNigel Croxon 
205530d68baSNigel Croxon 
206530d68baSNigel Croxon typedef
207530d68baSNigel Croxon EFI_STATUS
208530d68baSNigel Croxon (EFIAPI *EFI_DISK_WRITE) (
2091b10394eSNigel Croxon     IN struct _EFI_DISK_IO_PROTOCOL  *This,
210530d68baSNigel Croxon     IN UINT32                        MediaId,
211530d68baSNigel Croxon     IN UINT64                        Offset,
212530d68baSNigel Croxon     IN UINTN                         BufferSize,
213530d68baSNigel Croxon     IN VOID                          *Buffer
214530d68baSNigel Croxon     );
215530d68baSNigel Croxon 
216530d68baSNigel Croxon 
2171b10394eSNigel Croxon typedef struct _EFI_DISK_IO_PROTOCOL {
218530d68baSNigel Croxon     UINT64              Revision;
219530d68baSNigel Croxon     EFI_DISK_READ       ReadDisk;
220530d68baSNigel Croxon     EFI_DISK_WRITE      WriteDisk;
2211b10394eSNigel Croxon } EFI_DISK_IO_PROTOCOL;
222530d68baSNigel Croxon 
2231b10394eSNigel Croxon typedef struct _EFI_DISK_IO_PROTOCOL _EFI_DISK_IO;
2241b10394eSNigel Croxon typedef EFI_DISK_IO_PROTOCOL EFI_DISK_IO;
225530d68baSNigel Croxon 
2267993cbccSNigel Croxon 
2277993cbccSNigel Croxon #define EFI_DISK_IO2_PROTOCOL_GUID \
2287993cbccSNigel Croxon     { 0x151c8eae, 0x7f2c, 0x472c,  {0x9e, 0x54, 0x98, 0x28, 0x19, 0x4f, 0x6a, 0x88} }
2297993cbccSNigel Croxon 
2307993cbccSNigel Croxon #define EFI_DISK_IO2_PROTOCOL_REVISION  0x00020000
2317993cbccSNigel Croxon 
2327993cbccSNigel Croxon INTERFACE_DECL(_EFI_DISK_IO2_PROTOCOL);
2337993cbccSNigel Croxon 
2347993cbccSNigel Croxon typedef struct {
2357993cbccSNigel Croxon     EFI_EVENT  Event;
2367993cbccSNigel Croxon     EFI_STATUS TransactionStatus;
2377993cbccSNigel Croxon } EFI_DISK_IO2_TOKEN;
2387993cbccSNigel Croxon 
2397993cbccSNigel Croxon typedef
2407993cbccSNigel Croxon EFI_STATUS
2417993cbccSNigel Croxon (EFIAPI *EFI_DISK_CANCEL_EX) (
2427993cbccSNigel Croxon     IN struct _EFI_DISK_IO2_PROTOCOL  *This
2437993cbccSNigel Croxon     );
2447993cbccSNigel Croxon 
2457993cbccSNigel Croxon typedef
2467993cbccSNigel Croxon EFI_STATUS
2477993cbccSNigel Croxon (EFIAPI *EFI_DISK_READ_EX) (
2487993cbccSNigel Croxon     IN struct _EFI_DISK_IO2_PROTOCOL  *This,
2497993cbccSNigel Croxon     IN UINT32                         MediaId,
2507993cbccSNigel Croxon     IN UINT64                         Offset,
2517993cbccSNigel Croxon     IN OUT EFI_DISK_IO2_TOKEN         *Token,
2527993cbccSNigel Croxon     IN UINTN                          BufferSize,
2537993cbccSNigel Croxon     OUT VOID                          *Buffer
2547993cbccSNigel Croxon     );
2557993cbccSNigel Croxon 
2567993cbccSNigel Croxon typedef
2577993cbccSNigel Croxon EFI_STATUS
2587993cbccSNigel Croxon (EFIAPI *EFI_DISK_WRITE_EX) (
2597993cbccSNigel Croxon     IN struct _EFI_DISK_IO2_PROTOCOL  *This,
2607993cbccSNigel Croxon     IN UINT32                         MediaId,
2617993cbccSNigel Croxon     IN UINT64                         Offset,
2627993cbccSNigel Croxon     IN OUT EFI_DISK_IO2_TOKEN         *Token,
2637993cbccSNigel Croxon     IN UINTN                          BufferSize,
2647993cbccSNigel Croxon     IN VOID                           *Buffer
2657993cbccSNigel Croxon     );
2667993cbccSNigel Croxon 
2677993cbccSNigel Croxon typedef
2687993cbccSNigel Croxon EFI_STATUS
2697993cbccSNigel Croxon (EFIAPI *EFI_DISK_FLUSH_EX) (
2707993cbccSNigel Croxon     IN struct _EFI_DISK_IO2_PROTOCOL  *This,
2717993cbccSNigel Croxon     IN OUT EFI_DISK_IO2_TOKEN         *Token
2727993cbccSNigel Croxon     );
2737993cbccSNigel Croxon 
2747993cbccSNigel Croxon typedef struct _EFI_DISK_IO2_PROTOCOL {
2757993cbccSNigel Croxon     UINT64                            Revision;
2767993cbccSNigel Croxon     EFI_DISK_CANCEL_EX                Cancel;
2777993cbccSNigel Croxon     EFI_DISK_READ_EX                  ReadDiskEx;
2787993cbccSNigel Croxon     EFI_DISK_WRITE_EX                 WriteDiskEx;
2797993cbccSNigel Croxon     EFI_DISK_FLUSH_EX                 FlushDiskEx;
2807993cbccSNigel Croxon } EFI_DISK_IO2_PROTOCOL;
2817993cbccSNigel Croxon 
282530d68baSNigel Croxon //
283530d68baSNigel Croxon // Simple file system protocol
284530d68baSNigel Croxon //
285530d68baSNigel Croxon 
2861b10394eSNigel Croxon #define EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID \
287530d68baSNigel Croxon     { 0x964e5b22, 0x6459, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
2881b10394eSNigel Croxon #define SIMPLE_FILE_SYSTEM_PROTOCOL EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID
289530d68baSNigel Croxon 
2901b10394eSNigel Croxon INTERFACE_DECL(_EFI_SIMPLE_FILE_SYSTEM_PROTOCOL);
291530d68baSNigel Croxon INTERFACE_DECL(_EFI_FILE_HANDLE);
292530d68baSNigel Croxon 
293530d68baSNigel Croxon typedef
294530d68baSNigel Croxon EFI_STATUS
295530d68baSNigel Croxon (EFIAPI *EFI_VOLUME_OPEN) (
2961b10394eSNigel Croxon     IN struct _EFI_SIMPLE_FILE_SYSTEM_PROTOCOL    *This,
297530d68baSNigel Croxon     OUT struct _EFI_FILE_HANDLE                   **Root
298530d68baSNigel Croxon     );
299530d68baSNigel Croxon 
3001b10394eSNigel Croxon #define EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_REVISION  0x00010000
3011b10394eSNigel Croxon #define EFI_FILE_IO_INTERFACE_REVISION EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_REVISION
302530d68baSNigel Croxon 
3031b10394eSNigel Croxon typedef struct _EFI_SIMPLE_FILE_SYSTEM_PROTOCOL {
304530d68baSNigel Croxon     UINT64                  Revision;
305530d68baSNigel Croxon     EFI_VOLUME_OPEN         OpenVolume;
3061b10394eSNigel Croxon } EFI_SIMPLE_FILE_SYSTEM_PROTOCOL;
3071b10394eSNigel Croxon 
3081b10394eSNigel Croxon typedef struct _EFI_SIMPLE_FILE_SYSTEM_PROTOCOL _EFI_FILE_IO_INTERFACE;
3091b10394eSNigel Croxon typedef EFI_SIMPLE_FILE_SYSTEM_PROTOCOL EFI_FILE_IO_INTERFACE;
310530d68baSNigel Croxon 
311530d68baSNigel Croxon //
312530d68baSNigel Croxon //
313530d68baSNigel Croxon //
314530d68baSNigel Croxon 
315530d68baSNigel Croxon typedef
316530d68baSNigel Croxon EFI_STATUS
317530d68baSNigel Croxon (EFIAPI *EFI_FILE_OPEN) (
318530d68baSNigel Croxon     IN struct _EFI_FILE_HANDLE  *File,
319530d68baSNigel Croxon     OUT struct _EFI_FILE_HANDLE **NewHandle,
320530d68baSNigel Croxon     IN CHAR16                   *FileName,
321530d68baSNigel Croxon     IN UINT64                   OpenMode,
322530d68baSNigel Croxon     IN UINT64                   Attributes
323530d68baSNigel Croxon     );
324530d68baSNigel Croxon 
325530d68baSNigel Croxon // Open modes
326530d68baSNigel Croxon #define EFI_FILE_MODE_READ      0x0000000000000001
327530d68baSNigel Croxon #define EFI_FILE_MODE_WRITE     0x0000000000000002
328530d68baSNigel Croxon #define EFI_FILE_MODE_CREATE    0x8000000000000000
329530d68baSNigel Croxon 
330530d68baSNigel Croxon // File attributes
331530d68baSNigel Croxon #define EFI_FILE_READ_ONLY      0x0000000000000001
332530d68baSNigel Croxon #define EFI_FILE_HIDDEN         0x0000000000000002
333530d68baSNigel Croxon #define EFI_FILE_SYSTEM         0x0000000000000004
334530d68baSNigel Croxon #define EFI_FILE_RESERVIED      0x0000000000000008
335530d68baSNigel Croxon #define EFI_FILE_DIRECTORY      0x0000000000000010
336530d68baSNigel Croxon #define EFI_FILE_ARCHIVE        0x0000000000000020
337530d68baSNigel Croxon #define EFI_FILE_VALID_ATTR     0x0000000000000037
338530d68baSNigel Croxon 
339530d68baSNigel Croxon typedef
340530d68baSNigel Croxon EFI_STATUS
341530d68baSNigel Croxon (EFIAPI *EFI_FILE_CLOSE) (
342530d68baSNigel Croxon     IN struct _EFI_FILE_HANDLE  *File
343530d68baSNigel Croxon     );
344530d68baSNigel Croxon 
345530d68baSNigel Croxon typedef
346530d68baSNigel Croxon EFI_STATUS
347530d68baSNigel Croxon (EFIAPI *EFI_FILE_DELETE) (
348530d68baSNigel Croxon     IN struct _EFI_FILE_HANDLE  *File
349530d68baSNigel Croxon     );
350530d68baSNigel Croxon 
351530d68baSNigel Croxon typedef
352530d68baSNigel Croxon EFI_STATUS
353530d68baSNigel Croxon (EFIAPI *EFI_FILE_READ) (
354530d68baSNigel Croxon     IN struct _EFI_FILE_HANDLE  *File,
355530d68baSNigel Croxon     IN OUT UINTN                *BufferSize,
356530d68baSNigel Croxon     OUT VOID                    *Buffer
357530d68baSNigel Croxon     );
358530d68baSNigel Croxon 
359530d68baSNigel Croxon typedef
360530d68baSNigel Croxon EFI_STATUS
361530d68baSNigel Croxon (EFIAPI *EFI_FILE_WRITE) (
362530d68baSNigel Croxon     IN struct _EFI_FILE_HANDLE  *File,
363530d68baSNigel Croxon     IN OUT UINTN                *BufferSize,
364530d68baSNigel Croxon     IN VOID                     *Buffer
365530d68baSNigel Croxon     );
366530d68baSNigel Croxon 
367530d68baSNigel Croxon typedef
368530d68baSNigel Croxon EFI_STATUS
369530d68baSNigel Croxon (EFIAPI *EFI_FILE_SET_POSITION) (
370530d68baSNigel Croxon     IN struct _EFI_FILE_HANDLE  *File,
371530d68baSNigel Croxon     IN UINT64                   Position
372530d68baSNigel Croxon     );
373530d68baSNigel Croxon 
374530d68baSNigel Croxon typedef
375530d68baSNigel Croxon EFI_STATUS
376530d68baSNigel Croxon (EFIAPI *EFI_FILE_GET_POSITION) (
377530d68baSNigel Croxon     IN struct _EFI_FILE_HANDLE  *File,
378530d68baSNigel Croxon     OUT UINT64                  *Position
379530d68baSNigel Croxon     );
380530d68baSNigel Croxon 
381530d68baSNigel Croxon typedef
382530d68baSNigel Croxon EFI_STATUS
383530d68baSNigel Croxon (EFIAPI *EFI_FILE_GET_INFO) (
384530d68baSNigel Croxon     IN struct _EFI_FILE_HANDLE  *File,
385530d68baSNigel Croxon     IN EFI_GUID                 *InformationType,
386530d68baSNigel Croxon     IN OUT UINTN                *BufferSize,
387530d68baSNigel Croxon     OUT VOID                    *Buffer
388530d68baSNigel Croxon     );
389530d68baSNigel Croxon 
390530d68baSNigel Croxon typedef
391530d68baSNigel Croxon EFI_STATUS
392530d68baSNigel Croxon (EFIAPI *EFI_FILE_SET_INFO) (
393530d68baSNigel Croxon     IN struct _EFI_FILE_HANDLE  *File,
394530d68baSNigel Croxon     IN EFI_GUID                 *InformationType,
395530d68baSNigel Croxon     IN UINTN                    BufferSize,
396530d68baSNigel Croxon     IN VOID                     *Buffer
397530d68baSNigel Croxon     );
398530d68baSNigel Croxon 
399530d68baSNigel Croxon typedef
400530d68baSNigel Croxon EFI_STATUS
401530d68baSNigel Croxon (EFIAPI *EFI_FILE_FLUSH) (
402530d68baSNigel Croxon     IN struct _EFI_FILE_HANDLE  *File
403530d68baSNigel Croxon     );
404530d68baSNigel Croxon 
4057993cbccSNigel Croxon typedef struct {
4067993cbccSNigel Croxon     EFI_EVENT       Event;
4077993cbccSNigel Croxon     EFI_STATUS      Status;
4087993cbccSNigel Croxon     UINTN           BufferSize;
4097993cbccSNigel Croxon     VOID            *Buffer;
4107993cbccSNigel Croxon } EFI_FILE_IO_TOKEN;
411530d68baSNigel Croxon 
4127993cbccSNigel Croxon typedef
4137993cbccSNigel Croxon EFI_STATUS
4147993cbccSNigel Croxon (EFIAPI *EFI_FILE_OPEN_EX)(
4157993cbccSNigel Croxon     IN struct _EFI_FILE_HANDLE  *File,
4167993cbccSNigel Croxon     OUT struct _EFI_FILE_HANDLE **NewHandle,
4177993cbccSNigel Croxon     IN CHAR16                   *FileName,
4187993cbccSNigel Croxon     IN UINT64                   OpenMode,
4197993cbccSNigel Croxon     IN UINT64                   Attributes,
4207993cbccSNigel Croxon     IN OUT EFI_FILE_IO_TOKEN    *Token
4217993cbccSNigel Croxon     );
422530d68baSNigel Croxon 
4237993cbccSNigel Croxon typedef
4247993cbccSNigel Croxon EFI_STATUS
4257993cbccSNigel Croxon (EFIAPI *EFI_FILE_READ_EX) (
4267993cbccSNigel Croxon     IN struct _EFI_FILE_HANDLE  *File,
4277993cbccSNigel Croxon     IN OUT EFI_FILE_IO_TOKEN    *Token
4287993cbccSNigel Croxon     );
4297993cbccSNigel Croxon 
4307993cbccSNigel Croxon typedef
4317993cbccSNigel Croxon EFI_STATUS
4327993cbccSNigel Croxon (EFIAPI *EFI_FILE_WRITE_EX) (
4337993cbccSNigel Croxon     IN struct _EFI_FILE_HANDLE  *File,
4347993cbccSNigel Croxon     IN OUT EFI_FILE_IO_TOKEN    *Token
4357993cbccSNigel Croxon     );
4367993cbccSNigel Croxon 
4377993cbccSNigel Croxon typedef
4387993cbccSNigel Croxon EFI_STATUS
4397993cbccSNigel Croxon (EFIAPI *EFI_FILE_FLUSH_EX) (
4407993cbccSNigel Croxon     IN struct _EFI_FILE_HANDLE  *File,
4417993cbccSNigel Croxon     IN OUT EFI_FILE_IO_TOKEN    *Token
4427993cbccSNigel Croxon     );
4437993cbccSNigel Croxon 
4447993cbccSNigel Croxon #define EFI_FILE_PROTOCOL_REVISION         0x00010000
4457993cbccSNigel Croxon #define EFI_FILE_PROTOCOL_REVISION2        0x00020000
4467993cbccSNigel Croxon #define EFI_FILE_PROTOCOL_LATEST_REVISION  EFI_FILE_PROTOCOL_REVISION2
4477993cbccSNigel Croxon #define EFI_FILE_HANDLE_REVISION           EFI_FILE_PROTOCOL_REVISION
4487993cbccSNigel Croxon 
449530d68baSNigel Croxon typedef struct _EFI_FILE_HANDLE {
450530d68baSNigel Croxon     UINT64                  Revision;
451530d68baSNigel Croxon     EFI_FILE_OPEN           Open;
452530d68baSNigel Croxon     EFI_FILE_CLOSE          Close;
453530d68baSNigel Croxon     EFI_FILE_DELETE         Delete;
454530d68baSNigel Croxon     EFI_FILE_READ           Read;
455530d68baSNigel Croxon     EFI_FILE_WRITE          Write;
456530d68baSNigel Croxon     EFI_FILE_GET_POSITION   GetPosition;
457530d68baSNigel Croxon     EFI_FILE_SET_POSITION   SetPosition;
458530d68baSNigel Croxon     EFI_FILE_GET_INFO       GetInfo;
459530d68baSNigel Croxon     EFI_FILE_SET_INFO       SetInfo;
460530d68baSNigel Croxon     EFI_FILE_FLUSH          Flush;
4617993cbccSNigel Croxon     EFI_FILE_OPEN_EX        OpenEx;
4627993cbccSNigel Croxon     EFI_FILE_READ_EX        ReadEx;
4637993cbccSNigel Croxon     EFI_FILE_WRITE_EX       WriteEx;
4647993cbccSNigel Croxon     EFI_FILE_FLUSH_EX       FlushEx;
4657993cbccSNigel Croxon } EFI_FILE_PROTOCOL, *EFI_FILE_HANDLE;
4667993cbccSNigel Croxon 
4677993cbccSNigel Croxon typedef EFI_FILE_PROTOCOL EFI_FILE;
468530d68baSNigel Croxon 
469530d68baSNigel Croxon 
470530d68baSNigel Croxon //
471530d68baSNigel Croxon // File information types
472530d68baSNigel Croxon //
473530d68baSNigel Croxon 
474530d68baSNigel Croxon #define EFI_FILE_INFO_ID   \
475530d68baSNigel Croxon     { 0x9576e92, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
476530d68baSNigel Croxon 
477530d68baSNigel Croxon typedef struct {
478530d68baSNigel Croxon     UINT64                  Size;
479530d68baSNigel Croxon     UINT64                  FileSize;
480530d68baSNigel Croxon     UINT64                  PhysicalSize;
481530d68baSNigel Croxon     EFI_TIME                CreateTime;
482530d68baSNigel Croxon     EFI_TIME                LastAccessTime;
483530d68baSNigel Croxon     EFI_TIME                ModificationTime;
484530d68baSNigel Croxon     UINT64                  Attribute;
485530d68baSNigel Croxon     CHAR16                  FileName[1];
486530d68baSNigel Croxon } EFI_FILE_INFO;
487530d68baSNigel Croxon 
488530d68baSNigel Croxon //
489530d68baSNigel Croxon // The FileName field of the EFI_FILE_INFO data structure is variable length.
490530d68baSNigel Croxon // Whenever code needs to know the size of the EFI_FILE_INFO data structure, it needs to
491530d68baSNigel Croxon // be the size of the data structure without the FileName field.  The following macro
492530d68baSNigel Croxon // computes this size correctly no matter how big the FileName array is declared.
493530d68baSNigel Croxon // This is required to make the EFI_FILE_INFO data structure ANSI compilant.
494530d68baSNigel Croxon //
495530d68baSNigel Croxon 
496530d68baSNigel Croxon #define SIZE_OF_EFI_FILE_INFO EFI_FIELD_OFFSET(EFI_FILE_INFO,FileName)
497530d68baSNigel Croxon 
498530d68baSNigel Croxon #define EFI_FILE_SYSTEM_INFO_ID    \
499530d68baSNigel Croxon     { 0x9576e93, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
500530d68baSNigel Croxon 
501530d68baSNigel Croxon typedef struct {
502530d68baSNigel Croxon     UINT64                  Size;
503530d68baSNigel Croxon     BOOLEAN                 ReadOnly;
504530d68baSNigel Croxon     UINT64                  VolumeSize;
505530d68baSNigel Croxon     UINT64                  FreeSpace;
506530d68baSNigel Croxon     UINT32                  BlockSize;
507530d68baSNigel Croxon     CHAR16                  VolumeLabel[1];
508530d68baSNigel Croxon } EFI_FILE_SYSTEM_INFO;
509530d68baSNigel Croxon 
510530d68baSNigel Croxon //
511530d68baSNigel Croxon // The VolumeLabel field of the EFI_FILE_SYSTEM_INFO data structure is variable length.
512530d68baSNigel Croxon // Whenever code needs to know the size of the EFI_FILE_SYSTEM_INFO data structure, it needs
513530d68baSNigel Croxon // to be the size of the data structure without the VolumeLable field.  The following macro
514530d68baSNigel Croxon // computes this size correctly no matter how big the VolumeLable array is declared.
515530d68baSNigel Croxon // This is required to make the EFI_FILE_SYSTEM_INFO data structure ANSI compilant.
516530d68baSNigel Croxon //
517530d68baSNigel Croxon 
518530d68baSNigel Croxon #define SIZE_OF_EFI_FILE_SYSTEM_INFO EFI_FIELD_OFFSET(EFI_FILE_SYSTEM_INFO,VolumeLabel)
519530d68baSNigel Croxon 
52024585953SPete Batard #define EFI_FILE_SYSTEM_VOLUME_LABEL_ID    \
521530d68baSNigel Croxon     { 0xDB47D7D3,0xFE81, 0x11d3, {0x9A, 0x35, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D} }
522530d68baSNigel Croxon 
523530d68baSNigel Croxon typedef struct {
524530d68baSNigel Croxon     CHAR16                  VolumeLabel[1];
52524585953SPete Batard } EFI_FILE_SYSTEM_VOLUME_LABEL;
526530d68baSNigel Croxon 
52724585953SPete Batard #define SIZE_OF_EFI_FILE_SYSTEM_VOLUME_LABEL_INFO EFI_FIELD_OFFSET(EFI_FILE_SYSTEM_VOLUME_LABEL,VolumeLabel)
52824585953SPete Batard 
52924585953SPete Batard //
53024585953SPete Batard // For compatibility with older versions of gnu-efi
53124585953SPete Batard //
53224585953SPete Batard #define EFI_FILE_SYSTEM_VOLUME_LABEL_INFO_ID EFI_FILE_SYSTEM_VOLUME_LABEL_ID
53324585953SPete Batard #define EFI_FILE_SYSTEM_VOLUME_LABEL_INFO    EFI_FILE_SYSTEM_VOLUME_LABEL
534530d68baSNigel Croxon 
535530d68baSNigel Croxon //
536530d68baSNigel Croxon // Load file protocol
537530d68baSNigel Croxon //
538530d68baSNigel Croxon 
539530d68baSNigel Croxon 
5401b10394eSNigel Croxon #define EFI_LOAD_FILE_PROTOCOL_GUID \
541530d68baSNigel Croxon     { 0x56EC3091, 0x954C, 0x11d2, {0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B} }
5421b10394eSNigel Croxon #define LOAD_FILE_PROTOCOL EFI_LOAD_FILE_PROTOCOL_GUID
543530d68baSNigel Croxon 
5441b10394eSNigel Croxon INTERFACE_DECL(_EFI_LOAD_FILE_PROTOCOL);
545530d68baSNigel Croxon 
546530d68baSNigel Croxon typedef
547530d68baSNigel Croxon EFI_STATUS
548530d68baSNigel Croxon (EFIAPI *EFI_LOAD_FILE) (
5491b10394eSNigel Croxon     IN struct _EFI_LOAD_FILE_PROTOCOL  *This,
550530d68baSNigel Croxon     IN EFI_DEVICE_PATH                  *FilePath,
551530d68baSNigel Croxon     IN BOOLEAN                          BootPolicy,
552530d68baSNigel Croxon     IN OUT UINTN                        *BufferSize,
553530d68baSNigel Croxon     IN VOID                             *Buffer OPTIONAL
554530d68baSNigel Croxon     );
555530d68baSNigel Croxon 
5561b10394eSNigel Croxon typedef struct _EFI_LOAD_FILE_PROTOCOL {
557530d68baSNigel Croxon     EFI_LOAD_FILE                       LoadFile;
5581b10394eSNigel Croxon } EFI_LOAD_FILE_PROTOCOL;
559530d68baSNigel Croxon 
5601b10394eSNigel Croxon typedef struct _EFI_LOAD_FILE_PROTOCOL _EFI_LOAD_FILE_INTERFACE;
5611b10394eSNigel Croxon typedef EFI_LOAD_FILE_PROTOCOL EFI_LOAD_FILE_INTERFACE;
562530d68baSNigel Croxon 
563530d68baSNigel Croxon //
564530d68baSNigel Croxon // Device IO protocol
565530d68baSNigel Croxon //
566530d68baSNigel Croxon 
5671b10394eSNigel Croxon #define EFI_DEVICE_IO_PROTOCOL_GUID \
568530d68baSNigel Croxon     { 0xaf6ac311, 0x84c3, 0x11d2, {0x8e, 0x3c, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
5691b10394eSNigel Croxon #define DEVICE_IO_PROTOCOL EFI_DEVICE_IO_PROTOCOL_GUID
570530d68baSNigel Croxon 
5711b10394eSNigel Croxon INTERFACE_DECL(_EFI_DEVICE_IO_PROTOCOL);
572530d68baSNigel Croxon 
573530d68baSNigel Croxon typedef enum {
574530d68baSNigel Croxon     IO_UINT8,
575530d68baSNigel Croxon     IO_UINT16,
576530d68baSNigel Croxon     IO_UINT32,
577530d68baSNigel Croxon     IO_UINT64,
578530d68baSNigel Croxon //
579530d68baSNigel Croxon // Specification Change: Copy from MMIO to MMIO vs. MMIO to buffer, buffer to MMIO
580530d68baSNigel Croxon //
581530d68baSNigel Croxon     MMIO_COPY_UINT8,
582530d68baSNigel Croxon     MMIO_COPY_UINT16,
583530d68baSNigel Croxon     MMIO_COPY_UINT32,
584530d68baSNigel Croxon     MMIO_COPY_UINT64
585530d68baSNigel Croxon } EFI_IO_WIDTH;
586530d68baSNigel Croxon 
587530d68baSNigel Croxon #define EFI_PCI_ADDRESS(_bus,_dev,_func) \
588530d68baSNigel Croxon     ( (UINT64) ( (((UINTN)_bus) << 24) + (((UINTN)_dev) << 16) + (((UINTN)_func) << 8) ) )
589530d68baSNigel Croxon 
590530d68baSNigel Croxon 
591530d68baSNigel Croxon typedef
592530d68baSNigel Croxon EFI_STATUS
593530d68baSNigel Croxon (EFIAPI *EFI_DEVICE_IO) (
5941b10394eSNigel Croxon     IN struct _EFI_DEVICE_IO_PROTOCOL *This,
595530d68baSNigel Croxon     IN EFI_IO_WIDTH                 Width,
596530d68baSNigel Croxon     IN UINT64                       Address,
597530d68baSNigel Croxon     IN UINTN                        Count,
598530d68baSNigel Croxon     IN OUT VOID                     *Buffer
599530d68baSNigel Croxon     );
600530d68baSNigel Croxon 
601530d68baSNigel Croxon typedef struct {
602530d68baSNigel Croxon     EFI_DEVICE_IO                   Read;
603530d68baSNigel Croxon     EFI_DEVICE_IO                   Write;
604530d68baSNigel Croxon } EFI_IO_ACCESS;
605530d68baSNigel Croxon 
606530d68baSNigel Croxon typedef
607530d68baSNigel Croxon EFI_STATUS
608530d68baSNigel Croxon (EFIAPI *EFI_PCI_DEVICE_PATH) (
6091b10394eSNigel Croxon     IN struct _EFI_DEVICE_IO_PROTOCOL   *This,
610530d68baSNigel Croxon     IN UINT64                           Address,
611530d68baSNigel Croxon     IN OUT EFI_DEVICE_PATH              **PciDevicePath
612530d68baSNigel Croxon     );
613530d68baSNigel Croxon 
614530d68baSNigel Croxon typedef enum {
615530d68baSNigel Croxon     EfiBusMasterRead,
616530d68baSNigel Croxon     EfiBusMasterWrite,
617530d68baSNigel Croxon     EfiBusMasterCommonBuffer
618530d68baSNigel Croxon } EFI_IO_OPERATION_TYPE;
619530d68baSNigel Croxon 
620530d68baSNigel Croxon typedef
621530d68baSNigel Croxon EFI_STATUS
622530d68baSNigel Croxon (EFIAPI *EFI_IO_MAP) (
6231b10394eSNigel Croxon     IN struct _EFI_DEVICE_IO_PROTOCOL   *This,
624530d68baSNigel Croxon     IN EFI_IO_OPERATION_TYPE            Operation,
625530d68baSNigel Croxon     IN EFI_PHYSICAL_ADDRESS             *HostAddress,
626530d68baSNigel Croxon     IN OUT UINTN                        *NumberOfBytes,
627530d68baSNigel Croxon     OUT EFI_PHYSICAL_ADDRESS            *DeviceAddress,
628530d68baSNigel Croxon     OUT VOID                            **Mapping
629530d68baSNigel Croxon     );
630530d68baSNigel Croxon 
631530d68baSNigel Croxon typedef
632530d68baSNigel Croxon EFI_STATUS
633530d68baSNigel Croxon (EFIAPI *EFI_IO_UNMAP) (
6341b10394eSNigel Croxon     IN struct _EFI_DEVICE_IO_PROTOCOL   *This,
635530d68baSNigel Croxon     IN VOID                             *Mapping
636530d68baSNigel Croxon     );
637530d68baSNigel Croxon 
638530d68baSNigel Croxon typedef
639530d68baSNigel Croxon EFI_STATUS
640530d68baSNigel Croxon (EFIAPI *EFI_IO_ALLOCATE_BUFFER) (
6411b10394eSNigel Croxon     IN struct _EFI_DEVICE_IO_PROTOCOL   *This,
642530d68baSNigel Croxon     IN EFI_ALLOCATE_TYPE                Type,
643530d68baSNigel Croxon     IN EFI_MEMORY_TYPE                  MemoryType,
644530d68baSNigel Croxon     IN UINTN                            Pages,
645530d68baSNigel Croxon     IN OUT EFI_PHYSICAL_ADDRESS         *HostAddress
646530d68baSNigel Croxon     );
647530d68baSNigel Croxon 
648530d68baSNigel Croxon typedef
649530d68baSNigel Croxon EFI_STATUS
650530d68baSNigel Croxon (EFIAPI *EFI_IO_FLUSH) (
6511b10394eSNigel Croxon     IN struct _EFI_DEVICE_IO_PROTOCOL   *This
652530d68baSNigel Croxon     );
653530d68baSNigel Croxon 
654530d68baSNigel Croxon typedef
655530d68baSNigel Croxon EFI_STATUS
656530d68baSNigel Croxon (EFIAPI *EFI_IO_FREE_BUFFER) (
6571b10394eSNigel Croxon     IN struct _EFI_DEVICE_IO_PROTOCOL   *This,
658530d68baSNigel Croxon     IN UINTN                            Pages,
659530d68baSNigel Croxon     IN EFI_PHYSICAL_ADDRESS             HostAddress
660530d68baSNigel Croxon     );
661530d68baSNigel Croxon 
6621b10394eSNigel Croxon typedef struct _EFI_DEVICE_IO_PROTOCOL {
663530d68baSNigel Croxon     EFI_IO_ACCESS                       Mem;
664530d68baSNigel Croxon     EFI_IO_ACCESS                       Io;
665530d68baSNigel Croxon     EFI_IO_ACCESS                       Pci;
666530d68baSNigel Croxon     EFI_IO_MAP                          Map;
667530d68baSNigel Croxon     EFI_PCI_DEVICE_PATH                 PciDevicePath;
668530d68baSNigel Croxon     EFI_IO_UNMAP                        Unmap;
669530d68baSNigel Croxon     EFI_IO_ALLOCATE_BUFFER              AllocateBuffer;
670530d68baSNigel Croxon     EFI_IO_FLUSH                        Flush;
671530d68baSNigel Croxon     EFI_IO_FREE_BUFFER                  FreeBuffer;
6721b10394eSNigel Croxon } EFI_DEVICE_IO_PROTOCOL;
673530d68baSNigel Croxon 
6741b10394eSNigel Croxon typedef struct _EFI_DEVICE_IO_PROTOCOL _EFI_DEVICE_IO_INTERFACE;
6751b10394eSNigel Croxon typedef EFI_DEVICE_IO_PROTOCOL EFI_DEVICE_IO_INTERFACE;
676530d68baSNigel Croxon 
677530d68baSNigel Croxon //
678530d68baSNigel Croxon // Unicode Collation protocol
679530d68baSNigel Croxon //
680530d68baSNigel Croxon 
6811b10394eSNigel Croxon #define EFI_UNICODE_COLLATION_PROTOCOL_GUID \
682530d68baSNigel Croxon     { 0x1d85cd7f, 0xf43d, 0x11d2, {0x9a, 0xc,  0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
6831b10394eSNigel Croxon #define UNICODE_COLLATION_PROTOCOL EFI_UNICODE_COLLATION_PROTOCOL_GUID
684530d68baSNigel Croxon 
6851b10394eSNigel Croxon #define EFI_UNICODE_BYTE_ORDER_MARK       (CHAR16)(0xfeff)
6861b10394eSNigel Croxon #define UNICODE_BYTE_ORDER_MARK EFI_UNICODE_BYTE_ORDER_MARK
687530d68baSNigel Croxon 
6881b10394eSNigel Croxon INTERFACE_DECL(_EFI_UNICODE_COLLATION_PROTOCOL);
689530d68baSNigel Croxon 
690530d68baSNigel Croxon typedef
691530d68baSNigel Croxon INTN
692530d68baSNigel Croxon (EFIAPI *EFI_UNICODE_STRICOLL) (
6931b10394eSNigel Croxon     IN struct _EFI_UNICODE_COLLATION_PROTOCOL  *This,
694530d68baSNigel Croxon     IN CHAR16                         *s1,
695530d68baSNigel Croxon     IN CHAR16                         *s2
696530d68baSNigel Croxon     );
697530d68baSNigel Croxon 
698530d68baSNigel Croxon typedef
699530d68baSNigel Croxon BOOLEAN
700530d68baSNigel Croxon (EFIAPI *EFI_UNICODE_METAIMATCH) (
7011b10394eSNigel Croxon     IN struct _EFI_UNICODE_COLLATION_PROTOCOL  *This,
702530d68baSNigel Croxon     IN CHAR16                         *String,
703530d68baSNigel Croxon     IN CHAR16                         *Pattern
704530d68baSNigel Croxon     );
705530d68baSNigel Croxon 
706530d68baSNigel Croxon typedef
707530d68baSNigel Croxon VOID
708530d68baSNigel Croxon (EFIAPI *EFI_UNICODE_STRLWR) (
7091b10394eSNigel Croxon     IN struct _EFI_UNICODE_COLLATION_PROTOCOL  *This,
710530d68baSNigel Croxon     IN OUT CHAR16                       *Str
711530d68baSNigel Croxon     );
712530d68baSNigel Croxon 
713530d68baSNigel Croxon typedef
714530d68baSNigel Croxon VOID
715530d68baSNigel Croxon (EFIAPI *EFI_UNICODE_STRUPR) (
7161b10394eSNigel Croxon     IN struct _EFI_UNICODE_COLLATION_PROTOCOL  *This,
717530d68baSNigel Croxon     IN OUT CHAR16                       *Str
718530d68baSNigel Croxon     );
719530d68baSNigel Croxon 
720530d68baSNigel Croxon typedef
721530d68baSNigel Croxon VOID
722530d68baSNigel Croxon (EFIAPI *EFI_UNICODE_FATTOSTR) (
7231b10394eSNigel Croxon     IN struct _EFI_UNICODE_COLLATION_PROTOCOL  *This,
724530d68baSNigel Croxon     IN UINTN                            FatSize,
725530d68baSNigel Croxon     IN CHAR8                            *Fat,
726530d68baSNigel Croxon     OUT CHAR16                          *String
727530d68baSNigel Croxon     );
728530d68baSNigel Croxon 
729530d68baSNigel Croxon typedef
730530d68baSNigel Croxon BOOLEAN
731530d68baSNigel Croxon (EFIAPI *EFI_UNICODE_STRTOFAT) (
7321b10394eSNigel Croxon     IN struct _EFI_UNICODE_COLLATION_PROTOCOL  *This,
733530d68baSNigel Croxon     IN CHAR16                           *String,
734530d68baSNigel Croxon     IN UINTN                            FatSize,
735530d68baSNigel Croxon     OUT CHAR8                           *Fat
736530d68baSNigel Croxon     );
737530d68baSNigel Croxon 
7388c29617eSNigel Croxon //
7398c29617eSNigel Croxon // Hash Protocol
7408c29617eSNigel Croxon //
7411b10394eSNigel Croxon #define EFI_HASH_PROTOCOL_GUID \
7428c29617eSNigel Croxon   { 0xC5184932, 0xDBA5, 0x46DB, { 0xA5, 0xBA, 0xCC, 0x0B, 0xDA, 0x9C, 0x14, 0x35 } }
7431b10394eSNigel Croxon #define HASH_PROTOCOL EFI_HASH_PROTOCOL_GUID
7448c29617eSNigel Croxon 
7451b10394eSNigel Croxon #define EFI_HASH_ALGORITHM_SHA1_GUID \
7468c29617eSNigel Croxon   { 0x2AE9D80F, 0x3FB2, 0x4095, { 0xB7, 0xB1, 0xE9, 0x31, 0x57, 0xB9, 0x46, 0xB6 } } // Deprecated
7471b10394eSNigel Croxon #define EFI_HASH_ALGORITHM_SHA1 EFI_HASH_ALGORITHM_SHA1_GUID
7488c29617eSNigel Croxon 
7491b10394eSNigel Croxon #define EFI_HASH_ALGORITHM_SHA224_GUID \
7508c29617eSNigel Croxon   { 0x8DF01A06, 0x9BD5, 0x4BF7, { 0xB0, 0x21, 0xDB, 0x4F, 0xD9, 0xCC, 0xF4, 0x5B } } // Deprecated
7511b10394eSNigel Croxon #define EFI_HASH_ALGORITHM_SHA224 EFI_HASH_ALGORITHM_SHA224_GUID
7528c29617eSNigel Croxon 
7531b10394eSNigel Croxon #define EFI_HASH_ALGORITHM_SHA256_GUID \
7548c29617eSNigel Croxon   { 0x51AA59DE, 0xFDF2, 0x4EA3, { 0xBC, 0x63, 0x87, 0x5F, 0xB7, 0x84, 0x2E, 0xE9 } } // Deprecated
7551b10394eSNigel Croxon #define EFI_HASH_ALGORITHM_SHA256 EFI_HASH_ALGORITHM_SHA256_GUID
7568c29617eSNigel Croxon 
7571b10394eSNigel Croxon #define EFI_HASH_ALGORITHM_SHA384_GUID \
7588c29617eSNigel Croxon   { 0xEFA96432, 0xDE33, 0x4DD2, { 0xAE, 0xE6, 0x32, 0x8C, 0x33, 0xDF, 0x77, 0x7A } } // Deprecated
7591b10394eSNigel Croxon #define EFI_HASH_ALGORITHM_SHA384 EFI_HASH_ALGORITHM_SHA384_GUID
7608c29617eSNigel Croxon 
7611b10394eSNigel Croxon #define EFI_HASH_ALGORITHM_SHA512_GUID \
7628c29617eSNigel Croxon   { 0xCAA4381E, 0x750C, 0x4770, { 0xB8, 0x70, 0x7A, 0x23, 0xB4, 0xE4, 0x21, 0x30 } } // Deprecated
7631b10394eSNigel Croxon #define EFI_HASH_ALGORITHM_SHA512 EFI_HASH_ALGORITHM_SHA512_GUID
7648c29617eSNigel Croxon 
7651b10394eSNigel Croxon #define EFI_HASH_ALGORITHM_MD5_GUID \
7668c29617eSNigel Croxon   { 0x0AF7C79C, 0x65B5, 0x4319, { 0xB0, 0xAE, 0x44, 0xEC, 0x48, 0x4E, 0x4A, 0xD7 } } // Deprecated
7671b10394eSNigel Croxon #define EFI_HASH_ALGORITHM_MD5 EFI_HASH_ALGORITHM_MD5_GUID
7688c29617eSNigel Croxon 
7691b10394eSNigel Croxon #define EFI_HASH_ALGORITHM_SHA1_NOPAD_GUID \
7708c29617eSNigel Croxon   { 0x24C5DC2F, 0x53E2, 0x40CA, { 0x9E, 0xD6, 0xA5, 0xD9, 0xA4, 0x9F, 0x46, 0x3B } }
7711b10394eSNigel Croxon #define EFI_HASH_ALGORITHM_SHA1_NOPAD EFI_HASH_ALGORITHM_SHA1_NOPAD_GUID
7728c29617eSNigel Croxon 
7731b10394eSNigel Croxon #define EFI_HASH_ALGORITHM_SHA256_NOPAD_GUID \
7748c29617eSNigel Croxon   { 0x8628752A, 0x6CB7, 0x4814, { 0x96, 0xFC, 0x24, 0xA8, 0x15, 0xAC, 0x22, 0x26 } }
7751b10394eSNigel Croxon #define EFI_HASH_ALGORITHM_SHA256_NOPAD EFI_HASH_ALGORITHM_SHA256_NOPAD_GUID
7768c29617eSNigel Croxon 
7778c29617eSNigel Croxon 
7781b10394eSNigel Croxon INTERFACE_DECL(_EFI_HASH_PROTOCOL);
7798c29617eSNigel Croxon 
7808c29617eSNigel Croxon typedef UINT8 EFI_MD5_HASH[16];
7818c29617eSNigel Croxon typedef UINT8 EFI_SHA1_HASH[20];
7828c29617eSNigel Croxon typedef UINT8 EFI_SHA224_HASH[28];
7838c29617eSNigel Croxon typedef UINT8 EFI_SHA256_HASH[32];
7848c29617eSNigel Croxon typedef UINT8 EFI_SHA384_HASH[48];
7858c29617eSNigel Croxon typedef UINT8 EFI_SHA512_HASH[64];
7868c29617eSNigel Croxon typedef union _EFI_HASH_OUTPUT {
7878c29617eSNigel Croxon   EFI_MD5_HASH                    *Md5Hash;
7888c29617eSNigel Croxon   EFI_SHA1_HASH                   *Sha1Hash;
7898c29617eSNigel Croxon   EFI_SHA224_HASH                 *Sha224Hash;
7908c29617eSNigel Croxon   EFI_SHA256_HASH                 *Sha256Hash;
7918c29617eSNigel Croxon   EFI_SHA384_HASH                 *Sha384Hash;
7928c29617eSNigel Croxon   EFI_SHA512_HASH                 *Sha512Hash;
7938c29617eSNigel Croxon } EFI_HASH_OUTPUT;
7948c29617eSNigel Croxon 
7958c29617eSNigel Croxon typedef
7968c29617eSNigel Croxon EFI_STATUS
7978c29617eSNigel Croxon (EFIAPI *EFI_HASH_GET_HASH_SIZE) (
7981b10394eSNigel Croxon   IN CONST struct _EFI_HASH_PROTOCOL  *This,
7998c29617eSNigel Croxon   IN CONST EFI_GUID               *HashAlgorithm,
8008c29617eSNigel Croxon   OUT UINTN                       *HashSize);
8018c29617eSNigel Croxon 
8028c29617eSNigel Croxon typedef
8038c29617eSNigel Croxon EFI_STATUS
8048c29617eSNigel Croxon (EFIAPI *EFI_HASH_HASH) (
8051b10394eSNigel Croxon   IN CONST struct _EFI_HASH_PROTOCOL  *This,
8068c29617eSNigel Croxon   IN CONST EFI_GUID               *HashAlgorithm,
8078c29617eSNigel Croxon   IN BOOLEAN                      Extend,
8088c29617eSNigel Croxon   IN CONST UINT8                  *Message,
8098c29617eSNigel Croxon   IN UINT64                       MessageSize,
8108c29617eSNigel Croxon   IN OUT EFI_HASH_OUTPUT          *Hash);
8118c29617eSNigel Croxon 
8121b10394eSNigel Croxon typedef struct _EFI_HASH_PROTOCOL {
8138c29617eSNigel Croxon   EFI_HASH_GET_HASH_SIZE                  GetHashSize;
8148c29617eSNigel Croxon   EFI_HASH_HASH                           Hash;
8151b10394eSNigel Croxon } EFI_HASH_PROTOCOL;
8161b10394eSNigel Croxon 
8171b10394eSNigel Croxon typedef struct _EFI_HASH_PROTOCOL _EFI_HASH;
8181b10394eSNigel Croxon typedef EFI_HASH_PROTOCOL EFI_HASH;
8198c29617eSNigel Croxon 
820530d68baSNigel Croxon 
8211b10394eSNigel Croxon typedef struct _EFI_UNICODE_COLLATION_PROTOCOL {
822530d68baSNigel Croxon 
823530d68baSNigel Croxon     // general
824530d68baSNigel Croxon     EFI_UNICODE_STRICOLL                StriColl;
825530d68baSNigel Croxon     EFI_UNICODE_METAIMATCH              MetaiMatch;
826530d68baSNigel Croxon     EFI_UNICODE_STRLWR                  StrLwr;
827530d68baSNigel Croxon     EFI_UNICODE_STRUPR                  StrUpr;
828530d68baSNigel Croxon 
829530d68baSNigel Croxon     // for supporting fat volumes
830530d68baSNigel Croxon     EFI_UNICODE_FATTOSTR                FatToStr;
831530d68baSNigel Croxon     EFI_UNICODE_STRTOFAT                StrToFat;
832530d68baSNigel Croxon 
833530d68baSNigel Croxon     CHAR8                               *SupportedLanguages;
8341b10394eSNigel Croxon } EFI_UNICODE_COLLATION_PROTOCOL;
8351b10394eSNigel Croxon 
8361b10394eSNigel Croxon typedef EFI_UNICODE_COLLATION_PROTOCOL EFI_UNICODE_COLLATION_INTERFACE;
837530d68baSNigel Croxon 
838530d68baSNigel Croxon /* Graphics output protocol */
839530d68baSNigel Croxon #define EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID \
8401b10394eSNigel Croxon    { 0x9042a9de, 0x23dc, 0x4a38, {0x96, 0xfb, 0x7a, 0xde, 0xd0, 0x80, 0x51, 0x6a } }
841530d68baSNigel Croxon typedef struct _EFI_GRAPHICS_OUTPUT_PROTOCOL EFI_GRAPHICS_OUTPUT_PROTOCOL;
842530d68baSNigel Croxon 
843530d68baSNigel Croxon typedef struct {
844530d68baSNigel Croxon   UINT32            RedMask;
845530d68baSNigel Croxon   UINT32            GreenMask;
846530d68baSNigel Croxon   UINT32            BlueMask;
847530d68baSNigel Croxon   UINT32            ReservedMask;
848530d68baSNigel Croxon } EFI_PIXEL_BITMASK;
849530d68baSNigel Croxon 
850530d68baSNigel Croxon typedef enum {
851530d68baSNigel Croxon   PixelRedGreenBlueReserved8BitPerColor,
852530d68baSNigel Croxon   PixelBlueGreenRedReserved8BitPerColor,
853530d68baSNigel Croxon   PixelBitMask,
854530d68baSNigel Croxon   PixelBltOnly,
855530d68baSNigel Croxon   PixelFormatMax
856530d68baSNigel Croxon } EFI_GRAPHICS_PIXEL_FORMAT;
857530d68baSNigel Croxon 
858530d68baSNigel Croxon typedef struct {
859530d68baSNigel Croxon   UINT32                     Version;
860530d68baSNigel Croxon   UINT32                     HorizontalResolution;
861530d68baSNigel Croxon   UINT32                     VerticalResolution;
862530d68baSNigel Croxon   EFI_GRAPHICS_PIXEL_FORMAT  PixelFormat;
863530d68baSNigel Croxon   EFI_PIXEL_BITMASK          PixelInformation;
864530d68baSNigel Croxon   UINT32                     PixelsPerScanLine;
865530d68baSNigel Croxon } EFI_GRAPHICS_OUTPUT_MODE_INFORMATION;
866530d68baSNigel Croxon 
867530d68baSNigel Croxon /**
868530d68baSNigel Croxon   Return the current video mode information.
869530d68baSNigel Croxon 
870530d68baSNigel Croxon   @param  This       Protocol instance pointer.
871530d68baSNigel Croxon   @param  ModeNumber The mode number to return information on.
872530d68baSNigel Croxon   @param  SizeOfInfo A pointer to the size, in bytes, of the Info buffer.
873530d68baSNigel Croxon   @param  Info       A pointer to callee allocated buffer that returns information about ModeNumber.
874530d68baSNigel Croxon 
875530d68baSNigel Croxon   @retval EFI_SUCCESS           Mode information returned.
876530d68baSNigel Croxon   @retval EFI_BUFFER_TOO_SMALL  The Info buffer was too small.
877530d68baSNigel Croxon   @retval EFI_DEVICE_ERROR      A hardware error occurred trying to retrieve the video mode.
878530d68baSNigel Croxon   @retval EFI_NOT_STARTED       Video display is not initialized. Call SetMode ()
879530d68baSNigel Croxon   @retval EFI_INVALID_PARAMETER One of the input args was NULL.
880530d68baSNigel Croxon 
881530d68baSNigel Croxon **/
882530d68baSNigel Croxon typedef
883530d68baSNigel Croxon EFI_STATUS
884530d68baSNigel Croxon (EFIAPI *EFI_GRAPHICS_OUTPUT_PROTOCOL_QUERY_MODE) (
885530d68baSNigel Croxon   IN  EFI_GRAPHICS_OUTPUT_PROTOCOL          *This,
886530d68baSNigel Croxon   IN  UINT32                                ModeNumber,
887530d68baSNigel Croxon   OUT UINTN                                 *SizeOfInfo,
888530d68baSNigel Croxon   OUT EFI_GRAPHICS_OUTPUT_MODE_INFORMATION  **Info
889530d68baSNigel Croxon   )
890530d68baSNigel Croxon ;
891530d68baSNigel Croxon 
892530d68baSNigel Croxon /**
893530d68baSNigel Croxon   Return the current video mode information.
894530d68baSNigel Croxon 
895530d68baSNigel Croxon   @param  This              Protocol instance pointer.
896530d68baSNigel Croxon   @param  ModeNumber        The mode number to be set.
897530d68baSNigel Croxon 
898530d68baSNigel Croxon   @retval EFI_SUCCESS       Graphics mode was changed.
899530d68baSNigel Croxon   @retval EFI_DEVICE_ERROR  The device had an error and could not complete the request.
900530d68baSNigel Croxon   @retval EFI_UNSUPPORTED   ModeNumber is not supported by this device.
901530d68baSNigel Croxon 
902530d68baSNigel Croxon **/
903530d68baSNigel Croxon typedef
904530d68baSNigel Croxon EFI_STATUS
905530d68baSNigel Croxon (EFIAPI *EFI_GRAPHICS_OUTPUT_PROTOCOL_SET_MODE) (
906530d68baSNigel Croxon   IN  EFI_GRAPHICS_OUTPUT_PROTOCOL *This,
907530d68baSNigel Croxon   IN  UINT32                       ModeNumber
908530d68baSNigel Croxon   );
909530d68baSNigel Croxon 
910530d68baSNigel Croxon typedef struct {
911530d68baSNigel Croxon   UINT8 Blue;
912530d68baSNigel Croxon   UINT8 Green;
913530d68baSNigel Croxon   UINT8 Red;
914530d68baSNigel Croxon   UINT8 Reserved;
915530d68baSNigel Croxon } EFI_GRAPHICS_OUTPUT_BLT_PIXEL;
916530d68baSNigel Croxon 
917530d68baSNigel Croxon typedef union {
918530d68baSNigel Croxon   EFI_GRAPHICS_OUTPUT_BLT_PIXEL Pixel;
919530d68baSNigel Croxon   UINT32                        Raw;
920530d68baSNigel Croxon } EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION;
921530d68baSNigel Croxon 
922530d68baSNigel Croxon typedef enum {
923530d68baSNigel Croxon   EfiBltVideoFill,
924530d68baSNigel Croxon   EfiBltVideoToBltBuffer,
925530d68baSNigel Croxon   EfiBltBufferToVideo,
926530d68baSNigel Croxon   EfiBltVideoToVideo,
927530d68baSNigel Croxon   EfiGraphicsOutputBltOperationMax
928530d68baSNigel Croxon } EFI_GRAPHICS_OUTPUT_BLT_OPERATION;
929530d68baSNigel Croxon 
930530d68baSNigel Croxon /**
931530d68baSNigel Croxon   The following table defines actions for BltOperations:
932530d68baSNigel Croxon 
933530d68baSNigel Croxon   <B>EfiBltVideoFill</B> - Write data from the  BltBuffer pixel (SourceX, SourceY)
934530d68baSNigel Croxon   directly to every pixel of the video display rectangle
935530d68baSNigel Croxon   (DestinationX, DestinationY) (DestinationX + Width, DestinationY + Height).
936530d68baSNigel Croxon   Only one pixel will be used from the BltBuffer. Delta is NOT used.
937530d68baSNigel Croxon 
938530d68baSNigel Croxon   <B>EfiBltVideoToBltBuffer</B> - Read data from the video display rectangle
939530d68baSNigel Croxon   (SourceX, SourceY) (SourceX + Width, SourceY + Height) and place it in
940530d68baSNigel Croxon   the BltBuffer rectangle (DestinationX, DestinationY )
941530d68baSNigel Croxon   (DestinationX + Width, DestinationY + Height). If DestinationX or
942530d68baSNigel Croxon   DestinationY is not zero then Delta must be set to the length in bytes
943530d68baSNigel Croxon   of a row in the BltBuffer.
944530d68baSNigel Croxon 
945530d68baSNigel Croxon   <B>EfiBltBufferToVideo</B> - Write data from the  BltBuffer rectangle
946530d68baSNigel Croxon   (SourceX, SourceY) (SourceX + Width, SourceY + Height) directly to the
947530d68baSNigel Croxon   video display rectangle (DestinationX, DestinationY)
948530d68baSNigel Croxon   (DestinationX + Width, DestinationY + Height). If SourceX or SourceY is
949530d68baSNigel Croxon   not zero then Delta must be set to the length in bytes of a row in the
950530d68baSNigel Croxon   BltBuffer.
951530d68baSNigel Croxon 
952530d68baSNigel Croxon   <B>EfiBltVideoToVideo</B> - Copy from the video display rectangle (SourceX, SourceY)
953530d68baSNigel Croxon   (SourceX + Width, SourceY + Height) .to the video display rectangle
954530d68baSNigel Croxon   (DestinationX, DestinationY) (DestinationX + Width, DestinationY + Height).
955530d68baSNigel Croxon   The BltBuffer and Delta  are not used in this mode.
956530d68baSNigel Croxon 
957530d68baSNigel Croxon   @param  This         Protocol instance pointer.
958530d68baSNigel Croxon   @param  BltBuffer    Buffer containing data to blit into video buffer. This
959530d68baSNigel Croxon                        buffer has a size of Width*Height*sizeof(EFI_GRAPHICS_OUTPUT_BLT_PIXEL)
960530d68baSNigel Croxon   @param  BltOperation Operation to perform on BlitBuffer and video memory
961530d68baSNigel Croxon   @param  SourceX      X coordinate of source for the BltBuffer.
962530d68baSNigel Croxon   @param  SourceY      Y coordinate of source for the BltBuffer.
963530d68baSNigel Croxon   @param  DestinationX X coordinate of destination for the BltBuffer.
964530d68baSNigel Croxon   @param  DestinationY Y coordinate of destination for the BltBuffer.
965530d68baSNigel Croxon   @param  Width        Width of rectangle in BltBuffer in pixels.
966530d68baSNigel Croxon   @param  Height       Hight of rectangle in BltBuffer in pixels.
967530d68baSNigel Croxon   @param  Delta        OPTIONAL
968530d68baSNigel Croxon 
969530d68baSNigel Croxon   @retval EFI_SUCCESS           The Blt operation completed.
970530d68baSNigel Croxon   @retval EFI_INVALID_PARAMETER BltOperation is not valid.
971530d68baSNigel Croxon   @retval EFI_DEVICE_ERROR      A hardware error occured writting to the video buffer.
972530d68baSNigel Croxon 
973530d68baSNigel Croxon **/
974530d68baSNigel Croxon typedef
975530d68baSNigel Croxon EFI_STATUS
976530d68baSNigel Croxon (EFIAPI *EFI_GRAPHICS_OUTPUT_PROTOCOL_BLT) (
977530d68baSNigel Croxon   IN  EFI_GRAPHICS_OUTPUT_PROTOCOL            *This,
978530d68baSNigel Croxon   IN  EFI_GRAPHICS_OUTPUT_BLT_PIXEL           *BltBuffer,   OPTIONAL
979530d68baSNigel Croxon   IN  EFI_GRAPHICS_OUTPUT_BLT_OPERATION       BltOperation,
980530d68baSNigel Croxon   IN  UINTN                                   SourceX,
981530d68baSNigel Croxon   IN  UINTN                                   SourceY,
982530d68baSNigel Croxon   IN  UINTN                                   DestinationX,
983530d68baSNigel Croxon   IN  UINTN                                   DestinationY,
984530d68baSNigel Croxon   IN  UINTN                                   Width,
985530d68baSNigel Croxon   IN  UINTN                                   Height,
986530d68baSNigel Croxon   IN  UINTN                                   Delta         OPTIONAL
987530d68baSNigel Croxon   );
988530d68baSNigel Croxon 
989530d68baSNigel Croxon typedef struct {
990530d68baSNigel Croxon   UINT32                                 MaxMode;
991530d68baSNigel Croxon   UINT32                                 Mode;
992530d68baSNigel Croxon   EFI_GRAPHICS_OUTPUT_MODE_INFORMATION   *Info;
993530d68baSNigel Croxon   UINTN                                  SizeOfInfo;
994530d68baSNigel Croxon   EFI_PHYSICAL_ADDRESS                   FrameBufferBase;
995530d68baSNigel Croxon   UINTN                                  FrameBufferSize;
996530d68baSNigel Croxon } EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE;
997530d68baSNigel Croxon 
998530d68baSNigel Croxon struct _EFI_GRAPHICS_OUTPUT_PROTOCOL {
999530d68baSNigel Croxon   EFI_GRAPHICS_OUTPUT_PROTOCOL_QUERY_MODE  QueryMode;
1000530d68baSNigel Croxon   EFI_GRAPHICS_OUTPUT_PROTOCOL_SET_MODE    SetMode;
1001530d68baSNigel Croxon   EFI_GRAPHICS_OUTPUT_PROTOCOL_BLT         Blt;
1002530d68baSNigel Croxon   EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE        *Mode;
1003530d68baSNigel Croxon };
1004530d68baSNigel Croxon 
10058118d087SNigel Croxon 
1006cae022d6SNigel Croxon 
1007cae022d6SNigel Croxon /*
1008cae022d6SNigel Croxon  * EFI EDID Discovered Protocol
1009cae022d6SNigel Croxon  * UEFI Specification Version 2.5 Section 11.9
1010cae022d6SNigel Croxon  */
1011cae022d6SNigel Croxon #define EFI_EDID_DISCOVERED_PROTOCOL_GUID \
1012cae022d6SNigel Croxon     { 0x1C0C34F6, 0xD380, 0x41FA, { 0xA0, 0x49, 0x8a, 0xD0, 0x6C, 0x1A, 0x66, 0xAA} }
1013cae022d6SNigel Croxon 
1014cae022d6SNigel Croxon typedef struct _EFI_EDID_DISCOVERED_PROTOCOL {
1015cae022d6SNigel Croxon     UINT32   SizeOfEdid;
1016cae022d6SNigel Croxon     UINT8   *Edid;
1017cae022d6SNigel Croxon } EFI_EDID_DISCOVERED_PROTOCOL;
1018cae022d6SNigel Croxon 
1019cae022d6SNigel Croxon 
1020cae022d6SNigel Croxon 
1021cae022d6SNigel Croxon /*
1022cae022d6SNigel Croxon  * EFI EDID Active Protocol
1023cae022d6SNigel Croxon  * UEFI Specification Version 2.5 Section 11.9
1024cae022d6SNigel Croxon  */
1025cae022d6SNigel Croxon #define EFI_EDID_ACTIVE_PROTOCOL_GUID \
1026cae022d6SNigel Croxon     { 0xBD8C1056, 0x9F36, 0x44EC, { 0x92, 0xA8, 0xA6, 0x33, 0x7F, 0x81, 0x79, 0x86} }
1027cae022d6SNigel Croxon 
1028cae022d6SNigel Croxon typedef struct _EFI_EDID_ACTIVE_PROTOCOL {
1029cae022d6SNigel Croxon     UINT32   SizeOfEdid;
1030cae022d6SNigel Croxon     UINT8   *Edid;
1031cae022d6SNigel Croxon } EFI_EDID_ACTIVE_PROTOCOL;
1032cae022d6SNigel Croxon 
1033cae022d6SNigel Croxon 
1034cae022d6SNigel Croxon 
1035cae022d6SNigel Croxon /*
1036cae022d6SNigel Croxon  * EFI EDID Override Protocol
1037cae022d6SNigel Croxon  * UEFI Specification Version 2.5 Section 11.9
1038cae022d6SNigel Croxon  */
1039cae022d6SNigel Croxon #define EFI_EDID_OVERRIDE_PROTOCOL_GUID \
1040cae022d6SNigel Croxon     { 0x48ECB431, 0xFB72, 0x45C0, { 0xA9, 0x22, 0xF4, 0x58, 0xFE, 0x04, 0x0B, 0xD5} }
1041cae022d6SNigel Croxon 
1042cae022d6SNigel Croxon INTERFACE_DECL(_EFI_EDID_OVERRIDE_PROTOCOL);
1043cae022d6SNigel Croxon 
1044cae022d6SNigel Croxon typedef
1045cae022d6SNigel Croxon EFI_STATUS
1046cae022d6SNigel Croxon (EFIAPI *EFI_EDID_OVERRIDE_PROTOCOL_GET_EDID) (
1047cae022d6SNigel Croxon   IN      struct _EFI_EDID_OVERRIDE_PROTOCOL   *This,
1048cae022d6SNigel Croxon   IN      EFI_HANDLE                           *ChildHandle,
1049cae022d6SNigel Croxon   OUT     UINT32                               *Attributes,
1050cae022d6SNigel Croxon   IN OUT  UINTN                                *EdidSize,
1051cae022d6SNigel Croxon   IN OUT  UINT8                               **Edid);
1052cae022d6SNigel Croxon 
1053cae022d6SNigel Croxon typedef struct _EFI_EDID_OVERRIDE_PROTOCOL {
1054cae022d6SNigel Croxon     EFI_EDID_OVERRIDE_PROTOCOL_GET_EDID  GetEdid;
1055cae022d6SNigel Croxon } EFI_EDID_OVERRIDE_PROTOCOL;
1056cae022d6SNigel Croxon 
1057cae022d6SNigel Croxon 
1058cae022d6SNigel Croxon 
1059530d68baSNigel Croxon INTERFACE_DECL(_EFI_SERVICE_BINDING);
1060530d68baSNigel Croxon 
1061530d68baSNigel Croxon typedef
1062530d68baSNigel Croxon EFI_STATUS
1063530d68baSNigel Croxon (EFIAPI *EFI_SERVICE_BINDING_CREATE_CHILD) (
1064530d68baSNigel Croxon     IN struct _EFI_SERVICE_BINDING *This,
1065530d68baSNigel Croxon     IN EFI_HANDLE                  *ChildHandle
1066530d68baSNigel Croxon     );
1067530d68baSNigel Croxon 
1068530d68baSNigel Croxon typedef
1069530d68baSNigel Croxon EFI_STATUS
1070530d68baSNigel Croxon (EFIAPI *EFI_SERVICE_BINDING_DESTROY_CHILD) (
1071530d68baSNigel Croxon     IN struct _EFI_SERVICE_BINDING *This,
1072530d68baSNigel Croxon     IN EFI_HANDLE                  ChildHandle
1073530d68baSNigel Croxon     );
1074530d68baSNigel Croxon 
1075530d68baSNigel Croxon typedef struct _EFI_SERVICE_BINDING {
1076530d68baSNigel Croxon     EFI_SERVICE_BINDING_CREATE_CHILD  CreateChild;
1077530d68baSNigel Croxon     EFI_SERVICE_BINDING_DESTROY_CHILD DestroyChild;
1078530d68baSNigel Croxon } EFI_SERVICE_BINDING;
1079530d68baSNigel Croxon 
1080533a042dSNigel Croxon 
10818118d087SNigel Croxon 
10828118d087SNigel Croxon /*
10838118d087SNigel Croxon  * EFI Driver Binding Protocol
10848118d087SNigel Croxon  * UEFI Specification Version 2.5 Section 10.1
10858118d087SNigel Croxon  */
10868118d087SNigel Croxon #define EFI_DRIVER_BINDING_PROTOCOL_GUID \
1087533a042dSNigel Croxon     { 0x18A031AB, 0xB443, 0x4D1A, { 0xA5, 0xC0, 0x0C, 0x09, 0x26, 0x1E, 0x9F, 0x71} }
10881b10394eSNigel Croxon #define DRIVER_BINDING_PROTOCOL EFI_DRIVER_BINDING_PROTOCOL_GUID
1089533a042dSNigel Croxon 
10908118d087SNigel Croxon INTERFACE_DECL(_EFI_DRIVER_BINDING_PROTOCOL);
1091533a042dSNigel Croxon 
1092533a042dSNigel Croxon typedef
1093533a042dSNigel Croxon EFI_STATUS
10948118d087SNigel Croxon (EFIAPI *EFI_DRIVER_BINDING_PROTOCOL_SUPPORTED) (
10958118d087SNigel Croxon   IN      struct _EFI_DRIVER_BINDING_PROTOCOL *This,
1096533a042dSNigel Croxon   IN      EFI_HANDLE                          ControllerHandle,
1097533a042dSNigel Croxon   IN      EFI_DEVICE_PATH                     *RemainingDevicePath OPTIONAL);
1098533a042dSNigel Croxon 
1099533a042dSNigel Croxon typedef
1100533a042dSNigel Croxon EFI_STATUS
11018118d087SNigel Croxon (EFIAPI *EFI_DRIVER_BINDING_PROTOCOL_START) (
11028118d087SNigel Croxon   IN      struct _EFI_DRIVER_BINDING_PROTOCOL *This,
1103533a042dSNigel Croxon   IN      EFI_HANDLE                          ControllerHandle,
1104533a042dSNigel Croxon   IN      EFI_DEVICE_PATH                     *RemainingDevicePath OPTIONAL);
1105533a042dSNigel Croxon 
1106533a042dSNigel Croxon typedef
1107533a042dSNigel Croxon EFI_STATUS
11088118d087SNigel Croxon (EFIAPI *EFI_DRIVER_BINDING_PROTOCOL_STOP) (
11098118d087SNigel Croxon   IN      struct _EFI_DRIVER_BINDING_PROTOCOL *This,
1110533a042dSNigel Croxon   IN      EFI_HANDLE                          ControllerHandle,
1111533a042dSNigel Croxon   IN      UINTN                               NumberOfChildren,
1112533a042dSNigel Croxon   IN      EFI_HANDLE                          *ChildHandleBuffer OPTIONAL);
1113533a042dSNigel Croxon 
11148118d087SNigel Croxon typedef struct _EFI_DRIVER_BINDING_PROTOCOL {
11158118d087SNigel Croxon   EFI_DRIVER_BINDING_PROTOCOL_SUPPORTED       Supported;
11168118d087SNigel Croxon   EFI_DRIVER_BINDING_PROTOCOL_START           Start;
11178118d087SNigel Croxon   EFI_DRIVER_BINDING_PROTOCOL_STOP            Stop;
1118533a042dSNigel Croxon   UINT32                                      Version;
1119533a042dSNigel Croxon   EFI_HANDLE                                  ImageHandle;
1120533a042dSNigel Croxon   EFI_HANDLE                                  DriverBindingHandle;
11218118d087SNigel Croxon } EFI_DRIVER_BINDING_PROTOCOL;
1122533a042dSNigel Croxon 
11231b10394eSNigel Croxon typedef struct _EFI_DRIVER_BINDING_PROTOCOL _EFI_DRIVER_BINDING;
11241b10394eSNigel Croxon typedef EFI_DRIVER_BINDING_PROTOCOL EFI_DRIVER_BINDING;
1125883702e8SNigel Croxon 
11268118d087SNigel Croxon 
11278118d087SNigel Croxon /*
11288118d087SNigel Croxon  * Backwards compatibility with older GNU-EFI versions. Deprecated.
11298118d087SNigel Croxon  */
11308118d087SNigel Croxon #define EFI_DRIVER_SUPPORTED         EFI_DRIVER_BINDING_PROTOCOL_SUPPORTED
11318118d087SNigel Croxon #define EFI_DRIVER_START             EFI_DRIVER_BINDING_PROTOCOL_START
11328118d087SNigel Croxon #define EFI_DRIVER_STOP              EFI_DRIVER_BINDING_PROTOCOL_STOP
11338118d087SNigel Croxon 
11348118d087SNigel Croxon 
11358118d087SNigel Croxon 
11368118d087SNigel Croxon /*
11378118d087SNigel Croxon  * EFI Component Name Protocol
11388118d087SNigel Croxon  * Deprecated - use EFI Component Name 2 Protocol instead
11398118d087SNigel Croxon  */
11408118d087SNigel Croxon #define EFI_COMPONENT_NAME_PROTOCOL_GUID \
1141883702e8SNigel Croxon     {0x107A772C, 0xD5E1, 0x11D4, { 0x9A, 0x46, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D} }
11421b10394eSNigel Croxon #define COMPONENT_NAME_PROTOCOL EFI_COMPONENT_NAME_PROTOCOL_GUID
1143883702e8SNigel Croxon 
11448118d087SNigel Croxon INTERFACE_DECL(_EFI_COMPONENT_NAME_PROTOCOL);
1145883702e8SNigel Croxon 
1146883702e8SNigel Croxon typedef
1147883702e8SNigel Croxon EFI_STATUS
1148883702e8SNigel Croxon (EFIAPI *EFI_COMPONENT_NAME_GET_DRIVER_NAME) (
11498118d087SNigel Croxon   IN      struct _EFI_COMPONENT_NAME_PROTOCOL   *This,
1150883702e8SNigel Croxon   IN      CHAR8                                 *Language,
1151883702e8SNigel Croxon   OUT     CHAR16                                **DriverName);
1152883702e8SNigel Croxon 
1153883702e8SNigel Croxon typedef
1154883702e8SNigel Croxon EFI_STATUS
1155883702e8SNigel Croxon (EFIAPI *EFI_COMPONENT_NAME_GET_CONTROLLER_NAME) (
11568118d087SNigel Croxon   IN      struct _EFI_COMPONENT_NAME_PROTOCOL   *This,
1157883702e8SNigel Croxon   IN      EFI_HANDLE                            ControllerHandle,
1158883702e8SNigel Croxon   IN      EFI_HANDLE                            ChildHandle OPTIONAL,
1159883702e8SNigel Croxon   IN      CHAR8                                 *Language,
1160883702e8SNigel Croxon   OUT     CHAR16                                **ControllerName);
1161883702e8SNigel Croxon 
11628118d087SNigel Croxon typedef struct _EFI_COMPONENT_NAME_PROTOCOL {
1163883702e8SNigel Croxon   EFI_COMPONENT_NAME_GET_DRIVER_NAME      GetDriverName;
1164883702e8SNigel Croxon   EFI_COMPONENT_NAME_GET_CONTROLLER_NAME  GetControllerName;
1165883702e8SNigel Croxon   CHAR8                                   *SupportedLanguages;
11668118d087SNigel Croxon } EFI_COMPONENT_NAME_PROTOCOL;
1167883702e8SNigel Croxon 
11681b10394eSNigel Croxon typedef struct _EFI_COMPONENT_NAME_PROTOCOL _EFI_COMPONENT_NAME;
11691b10394eSNigel Croxon typedef EFI_COMPONENT_NAME_PROTOCOL EFI_COMPONENT_NAME;
11708118d087SNigel Croxon 
11718118d087SNigel Croxon 
11728118d087SNigel Croxon /*
11738118d087SNigel Croxon  * EFI Component Name 2 Protocol
11748118d087SNigel Croxon  * UEFI Specification Version 2.5 Section 10.5
11758118d087SNigel Croxon  */
11768118d087SNigel Croxon #define EFI_COMPONENT_NAME2_PROTOCOL_GUID \
1177883702e8SNigel Croxon     {0x6A7A5CFF, 0xE8D9, 0x4F70, { 0xBA, 0xDA, 0x75, 0xAB, 0x30, 0x25, 0xCE, 0x14} }
11781b10394eSNigel Croxon #define COMPONENT_NAME2_PROTOCOL EFI_COMPONENT_NAME2_PROTOCOL_GUID
1179883702e8SNigel Croxon 
11808118d087SNigel Croxon INTERFACE_DECL(_EFI_COMPONENT_NAME2_PROTOCOL);
1181883702e8SNigel Croxon 
1182883702e8SNigel Croxon typedef
1183883702e8SNigel Croxon EFI_STATUS
1184883702e8SNigel Croxon (EFIAPI *EFI_COMPONENT_NAME2_GET_DRIVER_NAME) (
11858118d087SNigel Croxon   IN      struct _EFI_COMPONENT_NAME2_PROTOCOL   *This,
1186883702e8SNigel Croxon   IN      CHAR8                                  *Language,
1187883702e8SNigel Croxon   OUT     CHAR16                                 **DriverName);
1188883702e8SNigel Croxon 
1189883702e8SNigel Croxon typedef
1190883702e8SNigel Croxon EFI_STATUS
1191883702e8SNigel Croxon (EFIAPI *EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) (
11928118d087SNigel Croxon   IN      struct _EFI_COMPONENT_NAME2_PROTOCOL   *This,
1193883702e8SNigel Croxon   IN      EFI_HANDLE                             ControllerHandle,
1194883702e8SNigel Croxon   IN      EFI_HANDLE                             ChildHandle OPTIONAL,
1195883702e8SNigel Croxon   IN      CHAR8                                  *Language,
1196883702e8SNigel Croxon   OUT     CHAR16                                 **ControllerName);
1197883702e8SNigel Croxon 
11988118d087SNigel Croxon typedef struct _EFI_COMPONENT_NAME2_PROTOCOL {
1199883702e8SNigel Croxon   EFI_COMPONENT_NAME2_GET_DRIVER_NAME       GetDriverName;
1200883702e8SNigel Croxon   EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME   GetControllerName;
1201883702e8SNigel Croxon   CHAR8                                     *SupportedLanguages;
12028118d087SNigel Croxon } EFI_COMPONENT_NAME2_PROTOCOL;
1203883702e8SNigel Croxon 
12041b10394eSNigel Croxon typedef struct _EFI_COMPONENT_NAME2_PROTOCOL _EFI_COMPONENT_NAME2;
12051b10394eSNigel Croxon typedef EFI_COMPONENT_NAME2_PROTOCOL EFI_COMPONENT_NAME2;
12068118d087SNigel Croxon 
12078118d087SNigel Croxon 
12088118d087SNigel Croxon 
12098118d087SNigel Croxon /*
12108118d087SNigel Croxon  * EFI Loaded Image Protocol
12118118d087SNigel Croxon  * UEFI Specification Version 2.5 Section 8.1
12128118d087SNigel Croxon  */
12138118d087SNigel Croxon #define EFI_LOADED_IMAGE_PROTOCOL_GUID \
12143b31a5e3SNigel Croxon     { 0x5B1B31A1, 0x9562, 0x11d2, {0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B} }
12151b10394eSNigel Croxon #define LOADED_IMAGE_PROTOCOL EFI_LOADED_IMAGE_PROTOCOL_GUID
12163b31a5e3SNigel Croxon 
12178118d087SNigel Croxon #define EFI_LOADED_IMAGE_PROTOCOL_REVISION  0x1000
12181b10394eSNigel Croxon #define EFI_IMAGE_INFORMATION_REVISION  EFI_LOADED_IMAGE_PROTOCOL_REVISION
12198118d087SNigel Croxon 
12203b31a5e3SNigel Croxon typedef
12213b31a5e3SNigel Croxon EFI_STATUS
12223b31a5e3SNigel Croxon (EFIAPI *EFI_IMAGE_UNLOAD) (
12233b31a5e3SNigel Croxon     IN EFI_HANDLE                   ImageHandle
12243b31a5e3SNigel Croxon     );
12253b31a5e3SNigel Croxon 
12263b31a5e3SNigel Croxon typedef struct {
12273b31a5e3SNigel Croxon     UINT32                          Revision;
12283b31a5e3SNigel Croxon     EFI_HANDLE                      ParentHandle;
12293b31a5e3SNigel Croxon     struct _EFI_SYSTEM_TABLE        *SystemTable;
12303b31a5e3SNigel Croxon 
12313b31a5e3SNigel Croxon     // Source location of image
12323b31a5e3SNigel Croxon     EFI_HANDLE                      DeviceHandle;
12333b31a5e3SNigel Croxon     EFI_DEVICE_PATH                 *FilePath;
12343b31a5e3SNigel Croxon     VOID                            *Reserved;
12353b31a5e3SNigel Croxon 
12363b31a5e3SNigel Croxon     // Images load options
12373b31a5e3SNigel Croxon     UINT32                          LoadOptionsSize;
12383b31a5e3SNigel Croxon     VOID                            *LoadOptions;
12393b31a5e3SNigel Croxon 
12403b31a5e3SNigel Croxon     // Location of where image was loaded
12413b31a5e3SNigel Croxon     VOID                            *ImageBase;
12423b31a5e3SNigel Croxon     UINT64                          ImageSize;
12433b31a5e3SNigel Croxon     EFI_MEMORY_TYPE                 ImageCodeType;
12443b31a5e3SNigel Croxon     EFI_MEMORY_TYPE                 ImageDataType;
12453b31a5e3SNigel Croxon 
12463b31a5e3SNigel Croxon     // If the driver image supports a dynamic unload request
12473b31a5e3SNigel Croxon     EFI_IMAGE_UNLOAD                Unload;
12488118d087SNigel Croxon } EFI_LOADED_IMAGE_PROTOCOL;
12493b31a5e3SNigel Croxon 
12501b10394eSNigel Croxon typedef EFI_LOADED_IMAGE_PROTOCOL EFI_LOADED_IMAGE;
12518118d087SNigel Croxon 
125269df7422SPeter Jones #define EFI_LOADED_IMAGE_DEVICE_PATH_PROTOCOL_GUID \
125369df7422SPeter Jones     {0xbc62157e, 0x3e33, 0x4fec, {0x99, 0x20, 0x2d, 0x3b, 0x36, 0xd7, 0x50, 0xdf} }
12548118d087SNigel Croxon 
12558118d087SNigel Croxon /*
12568118d087SNigel Croxon  * Random Number Generator Protocol
12578118d087SNigel Croxon  * UEFI Specification Version 2.5 Section 35.5
12588118d087SNigel Croxon  */
12599b0fe34eSNigel Croxon #define EFI_RNG_PROTOCOL_GUID                          \
12609b0fe34eSNigel Croxon           { 0x3152bca5, 0xeade, 0x433d, {0x86, 0x2e, 0xc0, 0x1c, 0xdc, 0x29, 0x1f, 0x44} }
12619b0fe34eSNigel Croxon 
12629b0fe34eSNigel Croxon typedef EFI_GUID EFI_RNG_ALGORITHM;
12639b0fe34eSNigel Croxon 
12649b0fe34eSNigel Croxon #define EFI_RNG_ALGORITHM_SP800_90_HASH_256_GUID       \
12659b0fe34eSNigel Croxon      {0xa7af67cb, 0x603b, 0x4d42, {0xba, 0x21, 0x70, 0xbf, 0xb6, 0x29, 0x3f, 0x96} }
12669b0fe34eSNigel Croxon 
12679b0fe34eSNigel Croxon #define EFI_RNG_ALGORITHM_SP800_90_HMAC_256_GUID       \
12689b0fe34eSNigel Croxon      {0xc5149b43, 0xae85, 0x4f53, {0x99, 0x82, 0xb9, 0x43, 0x35, 0xd3, 0xa9, 0xe7} }
12699b0fe34eSNigel Croxon 
12709b0fe34eSNigel Croxon #define EFI_RNG_ALGORITHM_SP800_90_CTR_256_GUID        \
12719b0fe34eSNigel Croxon      {0x44f0de6e, 0x4d8c, 0x4045, {0xa8, 0xc7, 0x4d, 0xd1, 0x68, 0x85, 0x6b, 0x9e} }
12729b0fe34eSNigel Croxon 
12739b0fe34eSNigel Croxon #define EFI_RNG_ALGORITHM_X9_31_3DES_GUID              \
12749b0fe34eSNigel Croxon      {0x63c4785a, 0xca34, 0x4012, {0xa3, 0xc8, 0x0b, 0x6a, 0x32, 0x4f, 0x55, 0x46} }
12759b0fe34eSNigel Croxon 
12769b0fe34eSNigel Croxon #define EFI_RNG_ALGORITHM_X9_31_AES_GUID               \
12779b0fe34eSNigel Croxon      {0xacd03321, 0x777e, 0x4d3d, {0xb1, 0xc8, 0x20, 0xcf, 0xd8, 0x88, 0x20, 0xc9} }
12789b0fe34eSNigel Croxon 
12799b0fe34eSNigel Croxon #define EFI_RNG_ALGORITHM_RAW                          \
12809b0fe34eSNigel Croxon      {0xe43176d7, 0xb6e8, 0x4827, {0xb7, 0x84, 0x7f, 0xfd, 0xc4, 0xb6, 0x85, 0x61} }
12819b0fe34eSNigel Croxon 
12829b0fe34eSNigel Croxon INTERFACE_DECL(_EFI_RNG_PROTOCOL);
12839b0fe34eSNigel Croxon 
12849b0fe34eSNigel Croxon typedef
12859b0fe34eSNigel Croxon EFI_STATUS
12869b0fe34eSNigel Croxon (EFIAPI *EFI_RNG_GET_INFO) (
12879b0fe34eSNigel Croxon   IN      struct _EFI_RNG_PROTOCOL   *This,
12889b0fe34eSNigel Croxon   IN OUT  UINTN                      *RNGAlgorithmListSize,
12899b0fe34eSNigel Croxon   OUT     EFI_RNG_ALGORITHM          *RNGAlgorithmList
12909b0fe34eSNigel Croxon );
12919b0fe34eSNigel Croxon 
12929b0fe34eSNigel Croxon typedef
12939b0fe34eSNigel Croxon EFI_STATUS
12949b0fe34eSNigel Croxon (EFIAPI *EFI_RNG_GET_RNG) (
12959b0fe34eSNigel Croxon   IN      struct _EFI_RNG_PROTOCOL   *This,
12969b0fe34eSNigel Croxon   IN      EFI_RNG_ALGORITHM          *RNGAlgorithm,           OPTIONAL
12979b0fe34eSNigel Croxon   IN      UINTN                      RNGValueLength,
12989b0fe34eSNigel Croxon   OUT     UINT8                      *RNGValue
12999b0fe34eSNigel Croxon );
13009b0fe34eSNigel Croxon 
13019b0fe34eSNigel Croxon typedef struct _EFI_RNG_PROTOCOL {
13029b0fe34eSNigel Croxon           EFI_RNG_GET_INFO           GetInfo;
13039b0fe34eSNigel Croxon           EFI_RNG_GET_RNG            GetRNG;
13049b0fe34eSNigel Croxon } EFI_RNG_PROTOCOL;
13059b0fe34eSNigel Croxon 
13069b0fe34eSNigel Croxon 
130763213a7bSNigel Croxon //
130863213a7bSNigel Croxon // EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL
130963213a7bSNigel Croxon //
131063213a7bSNigel Croxon 
131163213a7bSNigel Croxon #define EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL_GUID          \
131263213a7bSNigel Croxon           { 0x6b30c738, 0xa391, 0x11d4, {0x9a, 0x3b, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
131363213a7bSNigel Croxon 
131463213a7bSNigel Croxon INTERFACE_DECL(_EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL);
131563213a7bSNigel Croxon 
131663213a7bSNigel Croxon typedef
131763213a7bSNigel Croxon EFI_STATUS
131863213a7bSNigel Croxon (EFIAPI *EFI_PLATFORM_DRIVER_OVERRIDE_GET_DRIVER) (
131963213a7bSNigel Croxon IN      struct _EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL  *This,
132063213a7bSNigel Croxon IN      EFI_HANDLE                                      ControllerHandle,
132163213a7bSNigel Croxon IN OUT  EFI_HANDLE                                     *DriverImageHandle);
132263213a7bSNigel Croxon 
132363213a7bSNigel Croxon typedef
132463213a7bSNigel Croxon EFI_STATUS
132563213a7bSNigel Croxon (EFIAPI *EFI_PLATFORM_DRIVER_OVERRIDE_GET_DRIVER_PATH) (
132663213a7bSNigel Croxon IN      struct _EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL  *This,
132763213a7bSNigel Croxon IN      EFI_HANDLE                                      ControllerHandle,
132863213a7bSNigel Croxon IN OUT  EFI_DEVICE_PATH                               **DriverImagePath);
132963213a7bSNigel Croxon 
133063213a7bSNigel Croxon typedef
133163213a7bSNigel Croxon EFI_STATUS
133263213a7bSNigel Croxon (EFIAPI *EFI_PLATFORM_DRIVER_OVERRIDE_DRIVER_LOADED) (
133363213a7bSNigel Croxon IN      struct _EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL  *This,
133463213a7bSNigel Croxon IN      EFI_HANDLE                                      ControllerHandle,
133563213a7bSNigel Croxon IN      EFI_DEVICE_PATH                                *DriverImagePath,
133663213a7bSNigel Croxon IN      EFI_HANDLE                                      DriverImageHandle);
133763213a7bSNigel Croxon 
133863213a7bSNigel Croxon typedef struct _EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL {
133963213a7bSNigel Croxon   EFI_PLATFORM_DRIVER_OVERRIDE_GET_DRIVER       GetDriver;
134063213a7bSNigel Croxon   EFI_PLATFORM_DRIVER_OVERRIDE_GET_DRIVER_PATH  GetDriverPath;
134163213a7bSNigel Croxon   EFI_PLATFORM_DRIVER_OVERRIDE_DRIVER_LOADED    DriverLoaded;
134263213a7bSNigel Croxon } EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL;
134363213a7bSNigel Croxon 
134463213a7bSNigel Croxon //
134563213a7bSNigel Croxon // EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL
134663213a7bSNigel Croxon //
134763213a7bSNigel Croxon 
134863213a7bSNigel Croxon #define EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL_GUID          \
134963213a7bSNigel Croxon           { 0x3bc1b285, 0x8a15, 0x4a82, {0xaa, 0xbf, 0x4d, 0x7d, 0x13, 0xfb, 0x32, 0x65} }
135063213a7bSNigel Croxon 
135163213a7bSNigel Croxon INTERFACE_DECL(_EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL);
135263213a7bSNigel Croxon 
135363213a7bSNigel Croxon typedef
135463213a7bSNigel Croxon EFI_STATUS
135563213a7bSNigel Croxon (EFIAPI *EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_GET_DRIVER) (
135663213a7bSNigel Croxon IN      struct _EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL  *This,
135763213a7bSNigel Croxon IN OUT  EFI_HANDLE                                         *DriverImageHandle);
135863213a7bSNigel Croxon 
135963213a7bSNigel Croxon typedef struct _EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL {
136063213a7bSNigel Croxon   EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_GET_DRIVER       GetDriver;
136163213a7bSNigel Croxon } EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL;
136263213a7bSNigel Croxon 
136363213a7bSNigel Croxon //
136463213a7bSNigel Croxon // EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL
136563213a7bSNigel Croxon //
136663213a7bSNigel Croxon 
136763213a7bSNigel Croxon #define EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL_GUID          \
136863213a7bSNigel Croxon           { 0xb1ee129e, 0xda36, 0x4181, {0x91, 0xf8, 0x04, 0xa4, 0x92, 0x37, 0x66, 0xa7} }
136963213a7bSNigel Croxon 
137063213a7bSNigel Croxon INTERFACE_DECL(_EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL);
137163213a7bSNigel Croxon 
137263213a7bSNigel Croxon typedef
137363213a7bSNigel Croxon UINT32
137463213a7bSNigel Croxon (EFIAPI *EFI_DRIVER_FAMILY_OVERRIDE_GET_VERSION) (
137563213a7bSNigel Croxon IN      struct _EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL  *This);
137663213a7bSNigel Croxon 
137763213a7bSNigel Croxon typedef struct _EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL {
137863213a7bSNigel Croxon   EFI_DRIVER_FAMILY_OVERRIDE_GET_VERSION       GetVersion;
137963213a7bSNigel Croxon } EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL;
138063213a7bSNigel Croxon 
1381447ad9aaSNigel Croxon //
1382447ad9aaSNigel Croxon // EFI_EBC_PROTOCOL
1383447ad9aaSNigel Croxon //
1384447ad9aaSNigel Croxon 
1385447ad9aaSNigel Croxon #define EFI_EBC_INTERPRETER_PROTOCOL_GUID              \
1386447ad9aaSNigel Croxon      {0x13ac6dd1, 0x73d0, 0x11d4, {0xb0, 0x6b, 0x00, 0xaa, 0x00, 0xbd, 0x6d, 0xe7} }
1387447ad9aaSNigel Croxon 
1388447ad9aaSNigel Croxon #define EFI_EBC_PROTOCOL_GUID EFI_EBC_INTERPRETER_PROTOCOL_GUID
1389447ad9aaSNigel Croxon 
1390447ad9aaSNigel Croxon INTERFACE_DECL(_EFI_EBC_PROTOCOL);
1391447ad9aaSNigel Croxon 
1392447ad9aaSNigel Croxon typedef
1393447ad9aaSNigel Croxon EFI_STATUS
1394447ad9aaSNigel Croxon (EFIAPI *EFI_EBC_CREATE_THUNK)(
1395447ad9aaSNigel Croxon   IN struct _EFI_EBC_PROTOCOL   *This,
1396447ad9aaSNigel Croxon   IN EFI_HANDLE                 ImageHandle,
1397447ad9aaSNigel Croxon   IN VOID                       *EbcEntryPoint,
1398447ad9aaSNigel Croxon   OUT VOID                      **Thunk);
1399447ad9aaSNigel Croxon 
1400447ad9aaSNigel Croxon typedef
1401447ad9aaSNigel Croxon EFI_STATUS
1402447ad9aaSNigel Croxon (EFIAPI *EFI_EBC_UNLOAD_IMAGE)(
1403447ad9aaSNigel Croxon   IN struct _EFI_EBC_PROTOCOL   *This,
1404447ad9aaSNigel Croxon   IN EFI_HANDLE                 ImageHandle);
1405447ad9aaSNigel Croxon 
1406447ad9aaSNigel Croxon typedef
1407447ad9aaSNigel Croxon EFI_STATUS
1408447ad9aaSNigel Croxon (EFIAPI *EBC_ICACHE_FLUSH)(
1409447ad9aaSNigel Croxon   IN EFI_PHYSICAL_ADDRESS       Start,
1410447ad9aaSNigel Croxon   IN UINT64                     Length);
1411447ad9aaSNigel Croxon 
1412447ad9aaSNigel Croxon typedef
1413447ad9aaSNigel Croxon EFI_STATUS
1414447ad9aaSNigel Croxon (EFIAPI *EFI_EBC_REGISTER_ICACHE_FLUSH)(
1415447ad9aaSNigel Croxon   IN struct _EFI_EBC_PROTOCOL   *This,
1416447ad9aaSNigel Croxon   IN EBC_ICACHE_FLUSH           Flush);
1417447ad9aaSNigel Croxon 
1418447ad9aaSNigel Croxon typedef
1419447ad9aaSNigel Croxon EFI_STATUS
1420447ad9aaSNigel Croxon (EFIAPI *EFI_EBC_GET_VERSION)(
1421447ad9aaSNigel Croxon   IN struct _EFI_EBC_PROTOCOL   *This,
1422447ad9aaSNigel Croxon   IN OUT UINT64                 *Version);
1423447ad9aaSNigel Croxon 
1424447ad9aaSNigel Croxon typedef struct _EFI_EBC_PROTOCOL {
1425447ad9aaSNigel Croxon   EFI_EBC_CREATE_THUNK          CreateThunk;
1426447ad9aaSNigel Croxon   EFI_EBC_UNLOAD_IMAGE          UnloadImage;
1427447ad9aaSNigel Croxon   EFI_EBC_REGISTER_ICACHE_FLUSH RegisterICacheFlush;
1428447ad9aaSNigel Croxon   EFI_EBC_GET_VERSION           GetVersion;
1429447ad9aaSNigel Croxon } EFI_EBC_PROTOCOL;
143063213a7bSNigel Croxon 
1431*ce625f35SPeter Jones INTERFACE_DECL(_EFI_MEMORY_ATTRIBUTE_PROTOCOL);
1432*ce625f35SPeter Jones 
1433*ce625f35SPeter Jones typedef
1434*ce625f35SPeter Jones EFI_STATUS
1435*ce625f35SPeter Jones (EFIAPI *EFI_GET_MEMORY_ATTRIBUTES)(
1436*ce625f35SPeter Jones   IN struct _EFI_MEMORY_ATTRIBUTE_PROTOCOL      *This,
1437*ce625f35SPeter Jones   IN EFI_PHYSICAL_ADDRESS                       BaseAddress,
1438*ce625f35SPeter Jones   IN UINT64                                     Length,
1439*ce625f35SPeter Jones   OUT UINT64                                    *Attributes
1440*ce625f35SPeter Jones   );
1441*ce625f35SPeter Jones 
1442*ce625f35SPeter Jones typedef
1443*ce625f35SPeter Jones EFI_STATUS
1444*ce625f35SPeter Jones (EFIAPI *EFI_SET_MEMORY_ATTRIBUTES)(
1445*ce625f35SPeter Jones   IN struct _EFI_MEMORY_ATTRIBUTE_PROTOCOL      *This,
1446*ce625f35SPeter Jones   IN EFI_PHYSICAL_ADDRESS                       BaseAddress,
1447*ce625f35SPeter Jones   IN UINT64                                     Length,
1448*ce625f35SPeter Jones   IN UINT64                                     Attributes
1449*ce625f35SPeter Jones   );
1450*ce625f35SPeter Jones 
1451*ce625f35SPeter Jones typedef
1452*ce625f35SPeter Jones EFI_STATUS
1453*ce625f35SPeter Jones (EFIAPI *EFI_CLEAR_MEMORY_ATTRIBUTES)(
1454*ce625f35SPeter Jones   IN struct _EFI_MEMORY_ATTRIBUTE_PROTOCOL      *This,
1455*ce625f35SPeter Jones   IN EFI_PHYSICAL_ADDRESS                       BaseAddress,
1456*ce625f35SPeter Jones   IN UINT64                                     Length,
1457*ce625f35SPeter Jones   IN UINT64                                     Attributes
1458*ce625f35SPeter Jones   );
1459*ce625f35SPeter Jones 
1460*ce625f35SPeter Jones typedef struct _EFI_MEMORY_ATTRIBUTE_PROTOCOL {
1461*ce625f35SPeter Jones   EFI_GET_MEMORY_ATTRIBUTES     GetMemoryAttributes;
1462*ce625f35SPeter Jones   EFI_SET_MEMORY_ATTRIBUTES     SetMemoryAttributes;
1463*ce625f35SPeter Jones   EFI_CLEAR_MEMORY_ATTRIBUTES   ClearMemoryAttributes;
1464*ce625f35SPeter Jones } EFI_MEMORY_ATTRIBUTE_PROTOCOL;
1465*ce625f35SPeter Jones 
1466530d68baSNigel Croxon #endif
1467