Home | History | Annotate | Line # | Download | only in inc
      1      1.1  jakllsch /*	$NetBSD: efiprot.h,v 1.1.1.3 2021/09/30 18:50:09 jmcneill Exp $	*/
      2      1.1  jakllsch 
      3      1.1  jakllsch #ifndef _EFI_PROT_H
      4      1.1  jakllsch #define _EFI_PROT_H
      5      1.1  jakllsch 
      6      1.1  jakllsch /*++
      7      1.1  jakllsch 
      8      1.1  jakllsch Copyright (c) 1998  Intel Corporation
      9      1.1  jakllsch 
     10      1.1  jakllsch Module Name:
     11      1.1  jakllsch 
     12      1.1  jakllsch     efiprot.h
     13      1.1  jakllsch 
     14      1.1  jakllsch Abstract:
     15      1.1  jakllsch 
     16      1.1  jakllsch     EFI Protocols
     17      1.1  jakllsch 
     18      1.1  jakllsch 
     19      1.1  jakllsch 
     20      1.1  jakllsch Revision History
     21      1.1  jakllsch 
     22      1.1  jakllsch --*/
     23      1.1  jakllsch 
     24      1.1  jakllsch //
     25      1.1  jakllsch //  FPSWA library protocol
     26      1.1  jakllsch //
     27  1.1.1.2  jmcneill #define EFI_FPSWA_PROTOCOL_GUID \
     28      1.1  jakllsch     { 0xc41b6531, 0x97b9, 0x11d3, {0x9a, 0x29, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
     29  1.1.1.2  jmcneill #define FPSWA_PROTOCOL EFI_FPSWA_PROTOCOL_GUID
     30      1.1  jakllsch 
     31      1.1  jakllsch //
     32      1.1  jakllsch // Device Path protocol
     33      1.1  jakllsch //
     34      1.1  jakllsch 
     35  1.1.1.2  jmcneill #define EFI_DEVICE_PATH_PROTOCOL_GUID \
     36      1.1  jakllsch     { 0x9576e91, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
     37  1.1.1.2  jmcneill #define DEVICE_PATH_PROTOCOL EFI_DEVICE_PATH_PROTOCOL_GUID
     38      1.1  jakllsch 
     39      1.1  jakllsch 
     40      1.1  jakllsch //
     41      1.1  jakllsch // Block IO protocol
     42      1.1  jakllsch //
     43      1.1  jakllsch 
     44  1.1.1.2  jmcneill #define EFI_BLOCK_IO_PROTOCOL_GUID \
     45      1.1  jakllsch     { 0x964e5b21, 0x6459, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
     46  1.1.1.2  jmcneill #define BLOCK_IO_PROTOCOL EFI_BLOCK_IO_PROTOCOL_GUID
     47      1.1  jakllsch 
     48  1.1.1.2  jmcneill #define EFI_BLOCK_IO_PROTOCOL_REVISION    0x00010000
     49  1.1.1.2  jmcneill #define EFI_BLOCK_IO_PROTOCOL_REVISION2   0x00020001
     50  1.1.1.2  jmcneill #define EFI_BLOCK_IO_PROTOCOL_REVISION3   ((2<<16) | 31)
     51  1.1.1.2  jmcneill #define EFI_BLOCK_IO_INTERFACE_REVISION   EFI_BLOCK_IO_PROTOCOL_REVISION
     52  1.1.1.2  jmcneill #define EFI_BLOCK_IO_INTERFACE_REVISION2  EFI_BLOCK_IO_PROTOCOL_REVISION2
     53  1.1.1.2  jmcneill #define EFI_BLOCK_IO_INTERFACE_REVISION3  EFI_BLOCK_IO_PROTOCOL_REVISION3
     54  1.1.1.2  jmcneill 
     55  1.1.1.2  jmcneill INTERFACE_DECL(_EFI_BLOCK_IO_PROTOCOL);
     56      1.1  jakllsch 
     57      1.1  jakllsch typedef
     58      1.1  jakllsch EFI_STATUS
     59      1.1  jakllsch (EFIAPI *EFI_BLOCK_RESET) (
     60  1.1.1.2  jmcneill     IN struct _EFI_BLOCK_IO_PROTOCOL  *This,
     61  1.1.1.2  jmcneill     IN BOOLEAN                        ExtendedVerification
     62      1.1  jakllsch     );
     63      1.1  jakllsch 
     64      1.1  jakllsch typedef
     65      1.1  jakllsch EFI_STATUS
     66      1.1  jakllsch (EFIAPI *EFI_BLOCK_READ) (
     67  1.1.1.2  jmcneill     IN struct _EFI_BLOCK_IO_PROTOCOL  *This,
     68  1.1.1.2  jmcneill     IN UINT32                         MediaId,
     69  1.1.1.2  jmcneill     IN EFI_LBA                        LBA,
     70  1.1.1.2  jmcneill     IN UINTN                          BufferSize,
     71  1.1.1.2  jmcneill     OUT VOID                          *Buffer
     72      1.1  jakllsch     );
     73      1.1  jakllsch 
     74      1.1  jakllsch 
     75      1.1  jakllsch typedef
     76      1.1  jakllsch EFI_STATUS
     77      1.1  jakllsch (EFIAPI *EFI_BLOCK_WRITE) (
     78  1.1.1.2  jmcneill     IN struct _EFI_BLOCK_IO_PROTOCOL  *This,
     79  1.1.1.2  jmcneill     IN UINT32                         MediaId,
     80  1.1.1.2  jmcneill     IN EFI_LBA                        LBA,
     81  1.1.1.2  jmcneill     IN UINTN                          BufferSize,
     82  1.1.1.2  jmcneill     IN VOID                           *Buffer
     83      1.1  jakllsch     );
     84      1.1  jakllsch 
     85      1.1  jakllsch 
     86      1.1  jakllsch typedef
     87      1.1  jakllsch EFI_STATUS
     88      1.1  jakllsch (EFIAPI *EFI_BLOCK_FLUSH) (
     89  1.1.1.2  jmcneill     IN struct _EFI_BLOCK_IO_PROTOCOL  *This
     90      1.1  jakllsch     );
     91      1.1  jakllsch 
     92      1.1  jakllsch 
     93      1.1  jakllsch 
     94      1.1  jakllsch typedef struct {
     95      1.1  jakllsch     UINT32              MediaId;
     96      1.1  jakllsch     BOOLEAN             RemovableMedia;
     97      1.1  jakllsch     BOOLEAN             MediaPresent;
     98      1.1  jakllsch 
     99      1.1  jakllsch     BOOLEAN             LogicalPartition;
    100      1.1  jakllsch     BOOLEAN             ReadOnly;
    101      1.1  jakllsch     BOOLEAN             WriteCaching;
    102      1.1  jakllsch 
    103      1.1  jakllsch     UINT32              BlockSize;
    104      1.1  jakllsch     UINT32              IoAlign;
    105      1.1  jakllsch 
    106      1.1  jakllsch     EFI_LBA             LastBlock;
    107      1.1  jakllsch 
    108      1.1  jakllsch     /* revision 2 */
    109      1.1  jakllsch     EFI_LBA             LowestAlignedLba;
    110      1.1  jakllsch     UINT32              LogicalBlocksPerPhysicalBlock;
    111      1.1  jakllsch     /* revision 3 */
    112      1.1  jakllsch     UINT32              OptimalTransferLengthGranularity;
    113      1.1  jakllsch } EFI_BLOCK_IO_MEDIA;
    114      1.1  jakllsch 
    115  1.1.1.2  jmcneill typedef struct _EFI_BLOCK_IO_PROTOCOL {
    116      1.1  jakllsch     UINT64                  Revision;
    117      1.1  jakllsch 
    118      1.1  jakllsch     EFI_BLOCK_IO_MEDIA      *Media;
    119      1.1  jakllsch 
    120      1.1  jakllsch     EFI_BLOCK_RESET         Reset;
    121      1.1  jakllsch     EFI_BLOCK_READ          ReadBlocks;
    122      1.1  jakllsch     EFI_BLOCK_WRITE         WriteBlocks;
    123      1.1  jakllsch     EFI_BLOCK_FLUSH         FlushBlocks;
    124      1.1  jakllsch 
    125  1.1.1.2  jmcneill } EFI_BLOCK_IO_PROTOCOL;
    126  1.1.1.2  jmcneill 
    127  1.1.1.2  jmcneill typedef struct _EFI_BLOCK_IO_PROTOCOL _EFI_BLOCK_IO;
    128  1.1.1.2  jmcneill typedef EFI_BLOCK_IO_PROTOCOL EFI_BLOCK_IO;
    129  1.1.1.2  jmcneill 
    130  1.1.1.2  jmcneill #define EFI_BLOCK_IO2_PROTOCOL_GUID \
    131  1.1.1.2  jmcneill     { 0xa77b2472, 0xe282, 0x4e9f, {0xa2, 0x45, 0xc2, 0xc0, 0xe2, 0x7b, 0xbc, 0xc1} }
    132  1.1.1.2  jmcneill 
    133  1.1.1.2  jmcneill INTERFACE_DECL(_EFI_BLOCK_IO2_PROTOCOL);
    134  1.1.1.2  jmcneill 
    135  1.1.1.2  jmcneill typedef struct {
    136  1.1.1.2  jmcneill     EFI_EVENT               Event;
    137  1.1.1.2  jmcneill     EFI_STATUS              TransactionStatus;
    138  1.1.1.2  jmcneill } EFI_BLOCK_IO2_TOKEN;
    139  1.1.1.2  jmcneill 
    140  1.1.1.2  jmcneill typedef
    141  1.1.1.2  jmcneill EFI_STATUS
    142  1.1.1.2  jmcneill (EFIAPI *EFI_BLOCK_RESET_EX) (
    143  1.1.1.2  jmcneill     IN struct _EFI_BLOCK_IO2_PROTOCOL  *This,
    144  1.1.1.2  jmcneill     IN BOOLEAN                         ExtendedVerification
    145  1.1.1.2  jmcneill     );
    146  1.1.1.2  jmcneill 
    147  1.1.1.2  jmcneill typedef
    148  1.1.1.2  jmcneill EFI_STATUS
    149  1.1.1.2  jmcneill (EFIAPI *EFI_BLOCK_READ_EX) (
    150  1.1.1.2  jmcneill     IN struct _EFI_BLOCK_IO2_PROTOCOL  *This,
    151  1.1.1.2  jmcneill     IN UINT32                          MediaId,
    152  1.1.1.2  jmcneill     IN EFI_LBA                         LBA,
    153  1.1.1.2  jmcneill     IN OUT EFI_BLOCK_IO2_TOKEN         *Token,
    154  1.1.1.2  jmcneill     IN UINTN                           BufferSize,
    155  1.1.1.2  jmcneill     OUT VOID                           *Buffer
    156  1.1.1.2  jmcneill     );
    157  1.1.1.2  jmcneill 
    158  1.1.1.2  jmcneill typedef
    159  1.1.1.2  jmcneill EFI_STATUS
    160  1.1.1.2  jmcneill (EFIAPI *EFI_BLOCK_WRITE_EX) (
    161  1.1.1.2  jmcneill     IN struct _EFI_BLOCK_IO2_PROTOCOL  *This,
    162  1.1.1.2  jmcneill     IN UINT32                          MediaId,
    163  1.1.1.2  jmcneill     IN EFI_LBA                         LBA,
    164  1.1.1.2  jmcneill     IN OUT EFI_BLOCK_IO2_TOKEN         *Token,
    165  1.1.1.2  jmcneill     IN UINTN                           BufferSize,
    166  1.1.1.2  jmcneill     IN VOID                            *Buffer
    167  1.1.1.2  jmcneill     );
    168      1.1  jakllsch 
    169  1.1.1.2  jmcneill typedef
    170  1.1.1.2  jmcneill EFI_STATUS
    171  1.1.1.2  jmcneill (EFIAPI *EFI_BLOCK_FLUSH_EX) (
    172  1.1.1.2  jmcneill     IN struct _EFI_BLOCK_IO2_PROTOCOL  *This,
    173  1.1.1.2  jmcneill     IN OUT EFI_BLOCK_IO2_TOKEN         *Token
    174  1.1.1.2  jmcneill     );
    175      1.1  jakllsch 
    176  1.1.1.2  jmcneill typedef struct _EFI_BLOCK_IO2_PROTOCOL {
    177  1.1.1.2  jmcneill     EFI_BLOCK_IO_MEDIA  *Media;
    178  1.1.1.2  jmcneill     EFI_BLOCK_RESET_EX  Reset;
    179  1.1.1.2  jmcneill     EFI_BLOCK_READ_EX   ReadBlocksEx;
    180  1.1.1.2  jmcneill     EFI_BLOCK_WRITE_EX  WriteBlocksEx;
    181  1.1.1.2  jmcneill     EFI_BLOCK_FLUSH_EX  FlushBlocksEx;
    182  1.1.1.2  jmcneill } EFI_BLOCK_IO2_PROTOCOL;
    183      1.1  jakllsch 
    184      1.1  jakllsch //
    185      1.1  jakllsch // Disk Block IO protocol
    186      1.1  jakllsch //
    187      1.1  jakllsch 
    188  1.1.1.2  jmcneill #define EFI_DISK_IO_PROTOCOL_GUID \
    189      1.1  jakllsch     { 0xce345171, 0xba0b, 0x11d2,  {0x8e, 0x4f, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
    190  1.1.1.2  jmcneill #define DISK_IO_PROTOCOL EFI_DISK_IO_PROTOCOL_GUID
    191  1.1.1.2  jmcneill 
    192  1.1.1.2  jmcneill #define EFI_DISK_IO_PROTOCOL_REVISION  0x00010000
    193  1.1.1.2  jmcneill #define EFI_DISK_IO_INTERFACE_REVISION EFI_DISK_IO_PROTOCOL_REVISION
    194      1.1  jakllsch 
    195  1.1.1.2  jmcneill INTERFACE_DECL(_EFI_DISK_IO_PROTOCOL);
    196      1.1  jakllsch 
    197      1.1  jakllsch typedef
    198      1.1  jakllsch EFI_STATUS
    199      1.1  jakllsch (EFIAPI *EFI_DISK_READ) (
    200  1.1.1.2  jmcneill     IN struct _EFI_DISK_IO_PROTOCOL  *This,
    201  1.1.1.2  jmcneill     IN UINT32                        MediaId,
    202  1.1.1.2  jmcneill     IN UINT64                        Offset,
    203  1.1.1.2  jmcneill     IN UINTN                         BufferSize,
    204  1.1.1.2  jmcneill     OUT VOID                         *Buffer
    205      1.1  jakllsch     );
    206      1.1  jakllsch 
    207      1.1  jakllsch 
    208      1.1  jakllsch typedef
    209      1.1  jakllsch EFI_STATUS
    210      1.1  jakllsch (EFIAPI *EFI_DISK_WRITE) (
    211  1.1.1.2  jmcneill     IN struct _EFI_DISK_IO_PROTOCOL  *This,
    212  1.1.1.2  jmcneill     IN UINT32                        MediaId,
    213  1.1.1.2  jmcneill     IN UINT64                        Offset,
    214  1.1.1.2  jmcneill     IN UINTN                         BufferSize,
    215  1.1.1.2  jmcneill     IN VOID                          *Buffer
    216      1.1  jakllsch     );
    217      1.1  jakllsch 
    218      1.1  jakllsch 
    219  1.1.1.2  jmcneill typedef struct _EFI_DISK_IO_PROTOCOL {
    220      1.1  jakllsch     UINT64              Revision;
    221      1.1  jakllsch     EFI_DISK_READ       ReadDisk;
    222      1.1  jakllsch     EFI_DISK_WRITE      WriteDisk;
    223  1.1.1.2  jmcneill } EFI_DISK_IO_PROTOCOL;
    224  1.1.1.2  jmcneill 
    225  1.1.1.2  jmcneill typedef struct _EFI_DISK_IO_PROTOCOL _EFI_DISK_IO;
    226  1.1.1.2  jmcneill typedef EFI_DISK_IO_PROTOCOL EFI_DISK_IO;
    227  1.1.1.2  jmcneill 
    228      1.1  jakllsch 
    229  1.1.1.2  jmcneill #define EFI_DISK_IO2_PROTOCOL_GUID \
    230  1.1.1.2  jmcneill     { 0x151c8eae, 0x7f2c, 0x472c,  {0x9e, 0x54, 0x98, 0x28, 0x19, 0x4f, 0x6a, 0x88} }
    231  1.1.1.2  jmcneill 
    232  1.1.1.2  jmcneill #define EFI_DISK_IO2_PROTOCOL_REVISION  0x00020000
    233  1.1.1.2  jmcneill 
    234  1.1.1.2  jmcneill INTERFACE_DECL(_EFI_DISK_IO2_PROTOCOL);
    235  1.1.1.2  jmcneill 
    236  1.1.1.2  jmcneill typedef struct {
    237  1.1.1.2  jmcneill     EFI_EVENT  Event;
    238  1.1.1.2  jmcneill     EFI_STATUS TransactionStatus;
    239  1.1.1.2  jmcneill } EFI_DISK_IO2_TOKEN;
    240  1.1.1.2  jmcneill 
    241  1.1.1.2  jmcneill typedef
    242  1.1.1.2  jmcneill EFI_STATUS
    243  1.1.1.2  jmcneill (EFIAPI *EFI_DISK_CANCEL_EX) (
    244  1.1.1.2  jmcneill     IN struct _EFI_DISK_IO2_PROTOCOL  *This
    245  1.1.1.2  jmcneill     );
    246  1.1.1.2  jmcneill 
    247  1.1.1.2  jmcneill typedef
    248  1.1.1.2  jmcneill EFI_STATUS
    249  1.1.1.2  jmcneill (EFIAPI *EFI_DISK_READ_EX) (
    250  1.1.1.2  jmcneill     IN struct _EFI_DISK_IO2_PROTOCOL  *This,
    251  1.1.1.2  jmcneill     IN UINT32                         MediaId,
    252  1.1.1.2  jmcneill     IN UINT64                         Offset,
    253  1.1.1.2  jmcneill     IN OUT EFI_DISK_IO2_TOKEN         *Token,
    254  1.1.1.2  jmcneill     IN UINTN                          BufferSize,
    255  1.1.1.2  jmcneill     OUT VOID                          *Buffer
    256  1.1.1.2  jmcneill     );
    257  1.1.1.2  jmcneill 
    258  1.1.1.2  jmcneill typedef
    259  1.1.1.2  jmcneill EFI_STATUS
    260  1.1.1.2  jmcneill (EFIAPI *EFI_DISK_WRITE_EX) (
    261  1.1.1.2  jmcneill     IN struct _EFI_DISK_IO2_PROTOCOL  *This,
    262  1.1.1.2  jmcneill     IN UINT32                         MediaId,
    263  1.1.1.2  jmcneill     IN UINT64                         Offset,
    264  1.1.1.2  jmcneill     IN OUT EFI_DISK_IO2_TOKEN         *Token,
    265  1.1.1.2  jmcneill     IN UINTN                          BufferSize,
    266  1.1.1.2  jmcneill     IN VOID                           *Buffer
    267  1.1.1.2  jmcneill     );
    268  1.1.1.2  jmcneill 
    269  1.1.1.2  jmcneill typedef
    270  1.1.1.2  jmcneill EFI_STATUS
    271  1.1.1.2  jmcneill (EFIAPI *EFI_DISK_FLUSH_EX) (
    272  1.1.1.2  jmcneill     IN struct _EFI_DISK_IO2_PROTOCOL  *This,
    273  1.1.1.2  jmcneill     IN OUT EFI_DISK_IO2_TOKEN         *Token
    274  1.1.1.2  jmcneill     );
    275  1.1.1.2  jmcneill 
    276  1.1.1.2  jmcneill typedef struct _EFI_DISK_IO2_PROTOCOL {
    277  1.1.1.2  jmcneill     UINT64                            Revision;
    278  1.1.1.2  jmcneill     EFI_DISK_CANCEL_EX                Cancel;
    279  1.1.1.2  jmcneill     EFI_DISK_READ_EX                  ReadDiskEx;
    280  1.1.1.2  jmcneill     EFI_DISK_WRITE_EX                 WriteDiskEx;
    281  1.1.1.2  jmcneill     EFI_DISK_FLUSH_EX                 FlushDiskEx;
    282  1.1.1.2  jmcneill } EFI_DISK_IO2_PROTOCOL;
    283      1.1  jakllsch 
    284      1.1  jakllsch //
    285      1.1  jakllsch // Simple file system protocol
    286      1.1  jakllsch //
    287      1.1  jakllsch 
    288  1.1.1.2  jmcneill #define EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID \
    289      1.1  jakllsch     { 0x964e5b22, 0x6459, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
    290  1.1.1.2  jmcneill #define SIMPLE_FILE_SYSTEM_PROTOCOL EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID
    291      1.1  jakllsch 
    292  1.1.1.2  jmcneill INTERFACE_DECL(_EFI_SIMPLE_FILE_SYSTEM_PROTOCOL);
    293      1.1  jakllsch INTERFACE_DECL(_EFI_FILE_HANDLE);
    294      1.1  jakllsch 
    295      1.1  jakllsch typedef
    296      1.1  jakllsch EFI_STATUS
    297      1.1  jakllsch (EFIAPI *EFI_VOLUME_OPEN) (
    298  1.1.1.2  jmcneill     IN struct _EFI_SIMPLE_FILE_SYSTEM_PROTOCOL    *This,
    299  1.1.1.2  jmcneill     OUT struct _EFI_FILE_HANDLE                   **Root
    300      1.1  jakllsch     );
    301      1.1  jakllsch 
    302  1.1.1.2  jmcneill #define EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_REVISION  0x00010000
    303  1.1.1.2  jmcneill #define EFI_FILE_IO_INTERFACE_REVISION EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_REVISION
    304      1.1  jakllsch 
    305  1.1.1.2  jmcneill typedef struct _EFI_SIMPLE_FILE_SYSTEM_PROTOCOL {
    306      1.1  jakllsch     UINT64                  Revision;
    307      1.1  jakllsch     EFI_VOLUME_OPEN         OpenVolume;
    308  1.1.1.2  jmcneill } EFI_SIMPLE_FILE_SYSTEM_PROTOCOL;
    309  1.1.1.2  jmcneill 
    310  1.1.1.2  jmcneill typedef struct _EFI_SIMPLE_FILE_SYSTEM_PROTOCOL _EFI_FILE_IO_INTERFACE;
    311  1.1.1.2  jmcneill typedef EFI_SIMPLE_FILE_SYSTEM_PROTOCOL EFI_FILE_IO_INTERFACE;
    312      1.1  jakllsch 
    313      1.1  jakllsch //
    314      1.1  jakllsch //
    315      1.1  jakllsch //
    316      1.1  jakllsch 
    317      1.1  jakllsch typedef
    318      1.1  jakllsch EFI_STATUS
    319      1.1  jakllsch (EFIAPI *EFI_FILE_OPEN) (
    320      1.1  jakllsch     IN struct _EFI_FILE_HANDLE  *File,
    321      1.1  jakllsch     OUT struct _EFI_FILE_HANDLE **NewHandle,
    322      1.1  jakllsch     IN CHAR16                   *FileName,
    323      1.1  jakllsch     IN UINT64                   OpenMode,
    324      1.1  jakllsch     IN UINT64                   Attributes
    325      1.1  jakllsch     );
    326      1.1  jakllsch 
    327      1.1  jakllsch // Open modes
    328      1.1  jakllsch #define EFI_FILE_MODE_READ      0x0000000000000001
    329      1.1  jakllsch #define EFI_FILE_MODE_WRITE     0x0000000000000002
    330      1.1  jakllsch #define EFI_FILE_MODE_CREATE    0x8000000000000000
    331      1.1  jakllsch 
    332      1.1  jakllsch // File attributes
    333      1.1  jakllsch #define EFI_FILE_READ_ONLY      0x0000000000000001
    334      1.1  jakllsch #define EFI_FILE_HIDDEN         0x0000000000000002
    335      1.1  jakllsch #define EFI_FILE_SYSTEM         0x0000000000000004
    336      1.1  jakllsch #define EFI_FILE_RESERVIED      0x0000000000000008
    337      1.1  jakllsch #define EFI_FILE_DIRECTORY      0x0000000000000010
    338      1.1  jakllsch #define EFI_FILE_ARCHIVE        0x0000000000000020
    339      1.1  jakllsch #define EFI_FILE_VALID_ATTR     0x0000000000000037
    340      1.1  jakllsch 
    341      1.1  jakllsch typedef
    342      1.1  jakllsch EFI_STATUS
    343      1.1  jakllsch (EFIAPI *EFI_FILE_CLOSE) (
    344      1.1  jakllsch     IN struct _EFI_FILE_HANDLE  *File
    345      1.1  jakllsch     );
    346      1.1  jakllsch 
    347      1.1  jakllsch typedef
    348      1.1  jakllsch EFI_STATUS
    349      1.1  jakllsch (EFIAPI *EFI_FILE_DELETE) (
    350      1.1  jakllsch     IN struct _EFI_FILE_HANDLE  *File
    351      1.1  jakllsch     );
    352      1.1  jakllsch 
    353      1.1  jakllsch typedef
    354      1.1  jakllsch EFI_STATUS
    355      1.1  jakllsch (EFIAPI *EFI_FILE_READ) (
    356      1.1  jakllsch     IN struct _EFI_FILE_HANDLE  *File,
    357      1.1  jakllsch     IN OUT UINTN                *BufferSize,
    358      1.1  jakllsch     OUT VOID                    *Buffer
    359      1.1  jakllsch     );
    360      1.1  jakllsch 
    361      1.1  jakllsch typedef
    362      1.1  jakllsch EFI_STATUS
    363      1.1  jakllsch (EFIAPI *EFI_FILE_WRITE) (
    364      1.1  jakllsch     IN struct _EFI_FILE_HANDLE  *File,
    365      1.1  jakllsch     IN OUT UINTN                *BufferSize,
    366      1.1  jakllsch     IN VOID                     *Buffer
    367      1.1  jakllsch     );
    368      1.1  jakllsch 
    369      1.1  jakllsch typedef
    370      1.1  jakllsch EFI_STATUS
    371      1.1  jakllsch (EFIAPI *EFI_FILE_SET_POSITION) (
    372      1.1  jakllsch     IN struct _EFI_FILE_HANDLE  *File,
    373      1.1  jakllsch     IN UINT64                   Position
    374      1.1  jakllsch     );
    375      1.1  jakllsch 
    376      1.1  jakllsch typedef
    377      1.1  jakllsch EFI_STATUS
    378      1.1  jakllsch (EFIAPI *EFI_FILE_GET_POSITION) (
    379      1.1  jakllsch     IN struct _EFI_FILE_HANDLE  *File,
    380      1.1  jakllsch     OUT UINT64                  *Position
    381      1.1  jakllsch     );
    382      1.1  jakllsch 
    383      1.1  jakllsch typedef
    384      1.1  jakllsch EFI_STATUS
    385      1.1  jakllsch (EFIAPI *EFI_FILE_GET_INFO) (
    386      1.1  jakllsch     IN struct _EFI_FILE_HANDLE  *File,
    387      1.1  jakllsch     IN EFI_GUID                 *InformationType,
    388      1.1  jakllsch     IN OUT UINTN                *BufferSize,
    389      1.1  jakllsch     OUT VOID                    *Buffer
    390      1.1  jakllsch     );
    391      1.1  jakllsch 
    392      1.1  jakllsch typedef
    393      1.1  jakllsch EFI_STATUS
    394      1.1  jakllsch (EFIAPI *EFI_FILE_SET_INFO) (
    395      1.1  jakllsch     IN struct _EFI_FILE_HANDLE  *File,
    396      1.1  jakllsch     IN EFI_GUID                 *InformationType,
    397      1.1  jakllsch     IN UINTN                    BufferSize,
    398      1.1  jakllsch     IN VOID                     *Buffer
    399      1.1  jakllsch     );
    400      1.1  jakllsch 
    401      1.1  jakllsch typedef
    402      1.1  jakllsch EFI_STATUS
    403      1.1  jakllsch (EFIAPI *EFI_FILE_FLUSH) (
    404      1.1  jakllsch     IN struct _EFI_FILE_HANDLE  *File
    405      1.1  jakllsch     );
    406      1.1  jakllsch 
    407  1.1.1.2  jmcneill typedef struct {
    408  1.1.1.2  jmcneill     EFI_EVENT       Event;
    409  1.1.1.2  jmcneill     EFI_STATUS      Status;
    410  1.1.1.2  jmcneill     UINTN           BufferSize;
    411  1.1.1.2  jmcneill     VOID            *Buffer;
    412  1.1.1.2  jmcneill } EFI_FILE_IO_TOKEN;
    413  1.1.1.2  jmcneill 
    414  1.1.1.2  jmcneill typedef
    415  1.1.1.2  jmcneill EFI_STATUS
    416  1.1.1.2  jmcneill (EFIAPI *EFI_FILE_OPEN_EX)(
    417  1.1.1.2  jmcneill     IN struct _EFI_FILE_HANDLE  *File,
    418  1.1.1.2  jmcneill     OUT struct _EFI_FILE_HANDLE **NewHandle,
    419  1.1.1.2  jmcneill     IN CHAR16                   *FileName,
    420  1.1.1.2  jmcneill     IN UINT64                   OpenMode,
    421  1.1.1.2  jmcneill     IN UINT64                   Attributes,
    422  1.1.1.2  jmcneill     IN OUT EFI_FILE_IO_TOKEN    *Token
    423  1.1.1.2  jmcneill     );
    424  1.1.1.2  jmcneill 
    425  1.1.1.2  jmcneill typedef
    426  1.1.1.2  jmcneill EFI_STATUS
    427  1.1.1.2  jmcneill (EFIAPI *EFI_FILE_READ_EX) (
    428  1.1.1.2  jmcneill     IN struct _EFI_FILE_HANDLE  *File,
    429  1.1.1.2  jmcneill     IN OUT EFI_FILE_IO_TOKEN    *Token
    430  1.1.1.2  jmcneill     );
    431  1.1.1.2  jmcneill 
    432  1.1.1.2  jmcneill typedef
    433  1.1.1.2  jmcneill EFI_STATUS
    434  1.1.1.2  jmcneill (EFIAPI *EFI_FILE_WRITE_EX) (
    435  1.1.1.2  jmcneill     IN struct _EFI_FILE_HANDLE  *File,
    436  1.1.1.2  jmcneill     IN OUT EFI_FILE_IO_TOKEN    *Token
    437  1.1.1.2  jmcneill     );
    438  1.1.1.2  jmcneill 
    439  1.1.1.2  jmcneill typedef
    440  1.1.1.2  jmcneill EFI_STATUS
    441  1.1.1.2  jmcneill (EFIAPI *EFI_FILE_FLUSH_EX) (
    442  1.1.1.2  jmcneill     IN struct _EFI_FILE_HANDLE  *File,
    443  1.1.1.2  jmcneill     IN OUT EFI_FILE_IO_TOKEN    *Token
    444  1.1.1.2  jmcneill     );
    445      1.1  jakllsch 
    446  1.1.1.2  jmcneill #define EFI_FILE_PROTOCOL_REVISION         0x00010000
    447  1.1.1.2  jmcneill #define EFI_FILE_PROTOCOL_REVISION2        0x00020000
    448  1.1.1.2  jmcneill #define EFI_FILE_PROTOCOL_LATEST_REVISION  EFI_FILE_PROTOCOL_REVISION2
    449  1.1.1.2  jmcneill #define EFI_FILE_HANDLE_REVISION           EFI_FILE_PROTOCOL_REVISION
    450      1.1  jakllsch 
    451      1.1  jakllsch typedef struct _EFI_FILE_HANDLE {
    452      1.1  jakllsch     UINT64                  Revision;
    453      1.1  jakllsch     EFI_FILE_OPEN           Open;
    454      1.1  jakllsch     EFI_FILE_CLOSE          Close;
    455      1.1  jakllsch     EFI_FILE_DELETE         Delete;
    456      1.1  jakllsch     EFI_FILE_READ           Read;
    457      1.1  jakllsch     EFI_FILE_WRITE          Write;
    458      1.1  jakllsch     EFI_FILE_GET_POSITION   GetPosition;
    459      1.1  jakllsch     EFI_FILE_SET_POSITION   SetPosition;
    460      1.1  jakllsch     EFI_FILE_GET_INFO       GetInfo;
    461      1.1  jakllsch     EFI_FILE_SET_INFO       SetInfo;
    462      1.1  jakllsch     EFI_FILE_FLUSH          Flush;
    463  1.1.1.2  jmcneill     EFI_FILE_OPEN_EX        OpenEx;
    464  1.1.1.2  jmcneill     EFI_FILE_READ_EX        ReadEx;
    465  1.1.1.2  jmcneill     EFI_FILE_WRITE_EX       WriteEx;
    466  1.1.1.2  jmcneill     EFI_FILE_FLUSH_EX       FlushEx;
    467  1.1.1.2  jmcneill } EFI_FILE_PROTOCOL, *EFI_FILE_HANDLE;
    468  1.1.1.2  jmcneill 
    469  1.1.1.2  jmcneill typedef EFI_FILE_PROTOCOL EFI_FILE;
    470      1.1  jakllsch 
    471      1.1  jakllsch 
    472      1.1  jakllsch //
    473      1.1  jakllsch // File information types
    474      1.1  jakllsch //
    475      1.1  jakllsch 
    476      1.1  jakllsch #define EFI_FILE_INFO_ID   \
    477      1.1  jakllsch     { 0x9576e92, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
    478      1.1  jakllsch 
    479      1.1  jakllsch typedef struct {
    480      1.1  jakllsch     UINT64                  Size;
    481      1.1  jakllsch     UINT64                  FileSize;
    482      1.1  jakllsch     UINT64                  PhysicalSize;
    483      1.1  jakllsch     EFI_TIME                CreateTime;
    484      1.1  jakllsch     EFI_TIME                LastAccessTime;
    485      1.1  jakllsch     EFI_TIME                ModificationTime;
    486      1.1  jakllsch     UINT64                  Attribute;
    487      1.1  jakllsch     CHAR16                  FileName[1];
    488      1.1  jakllsch } EFI_FILE_INFO;
    489      1.1  jakllsch 
    490      1.1  jakllsch //
    491      1.1  jakllsch // The FileName field of the EFI_FILE_INFO data structure is variable length.
    492      1.1  jakllsch // Whenever code needs to know the size of the EFI_FILE_INFO data structure, it needs to
    493  1.1.1.2  jmcneill // be the size of the data structure without the FileName field.  The following macro
    494      1.1  jakllsch // computes this size correctly no matter how big the FileName array is declared.
    495  1.1.1.2  jmcneill // This is required to make the EFI_FILE_INFO data structure ANSI compilant.
    496      1.1  jakllsch //
    497      1.1  jakllsch 
    498      1.1  jakllsch #define SIZE_OF_EFI_FILE_INFO EFI_FIELD_OFFSET(EFI_FILE_INFO,FileName)
    499      1.1  jakllsch 
    500      1.1  jakllsch #define EFI_FILE_SYSTEM_INFO_ID    \
    501      1.1  jakllsch     { 0x9576e93, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
    502      1.1  jakllsch 
    503      1.1  jakllsch typedef struct {
    504      1.1  jakllsch     UINT64                  Size;
    505      1.1  jakllsch     BOOLEAN                 ReadOnly;
    506      1.1  jakllsch     UINT64                  VolumeSize;
    507      1.1  jakllsch     UINT64                  FreeSpace;
    508      1.1  jakllsch     UINT32                  BlockSize;
    509      1.1  jakllsch     CHAR16                  VolumeLabel[1];
    510      1.1  jakllsch } EFI_FILE_SYSTEM_INFO;
    511      1.1  jakllsch 
    512      1.1  jakllsch //
    513      1.1  jakllsch // The VolumeLabel field of the EFI_FILE_SYSTEM_INFO data structure is variable length.
    514      1.1  jakllsch // Whenever code needs to know the size of the EFI_FILE_SYSTEM_INFO data structure, it needs
    515  1.1.1.2  jmcneill // to be the size of the data structure without the VolumeLable field.  The following macro
    516      1.1  jakllsch // computes this size correctly no matter how big the VolumeLable array is declared.
    517  1.1.1.2  jmcneill // This is required to make the EFI_FILE_SYSTEM_INFO data structure ANSI compilant.
    518      1.1  jakllsch //
    519      1.1  jakllsch 
    520      1.1  jakllsch #define SIZE_OF_EFI_FILE_SYSTEM_INFO EFI_FIELD_OFFSET(EFI_FILE_SYSTEM_INFO,VolumeLabel)
    521      1.1  jakllsch 
    522  1.1.1.3  jmcneill #define EFI_FILE_SYSTEM_VOLUME_LABEL_ID    \
    523      1.1  jakllsch     { 0xDB47D7D3,0xFE81, 0x11d3, {0x9A, 0x35, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D} }
    524      1.1  jakllsch 
    525      1.1  jakllsch typedef struct {
    526      1.1  jakllsch     CHAR16                  VolumeLabel[1];
    527  1.1.1.3  jmcneill } EFI_FILE_SYSTEM_VOLUME_LABEL;
    528      1.1  jakllsch 
    529  1.1.1.3  jmcneill #define SIZE_OF_EFI_FILE_SYSTEM_VOLUME_LABEL_INFO EFI_FIELD_OFFSET(EFI_FILE_SYSTEM_VOLUME_LABEL,VolumeLabel)
    530  1.1.1.3  jmcneill 
    531  1.1.1.3  jmcneill //
    532  1.1.1.3  jmcneill // For compatibility with older versions of gnu-efi
    533  1.1.1.3  jmcneill //
    534  1.1.1.3  jmcneill #define EFI_FILE_SYSTEM_VOLUME_LABEL_INFO_ID EFI_FILE_SYSTEM_VOLUME_LABEL_ID
    535  1.1.1.3  jmcneill #define EFI_FILE_SYSTEM_VOLUME_LABEL_INFO    EFI_FILE_SYSTEM_VOLUME_LABEL
    536      1.1  jakllsch 
    537      1.1  jakllsch //
    538      1.1  jakllsch // Load file protocol
    539      1.1  jakllsch //
    540      1.1  jakllsch 
    541      1.1  jakllsch 
    542  1.1.1.2  jmcneill #define EFI_LOAD_FILE_PROTOCOL_GUID \
    543      1.1  jakllsch     { 0x56EC3091, 0x954C, 0x11d2, {0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B} }
    544  1.1.1.2  jmcneill #define LOAD_FILE_PROTOCOL EFI_LOAD_FILE_PROTOCOL_GUID
    545      1.1  jakllsch 
    546  1.1.1.2  jmcneill INTERFACE_DECL(_EFI_LOAD_FILE_PROTOCOL);
    547      1.1  jakllsch 
    548      1.1  jakllsch typedef
    549      1.1  jakllsch EFI_STATUS
    550      1.1  jakllsch (EFIAPI *EFI_LOAD_FILE) (
    551  1.1.1.2  jmcneill     IN struct _EFI_LOAD_FILE_PROTOCOL  *This,
    552      1.1  jakllsch     IN EFI_DEVICE_PATH                  *FilePath,
    553      1.1  jakllsch     IN BOOLEAN                          BootPolicy,
    554      1.1  jakllsch     IN OUT UINTN                        *BufferSize,
    555      1.1  jakllsch     IN VOID                             *Buffer OPTIONAL
    556      1.1  jakllsch     );
    557      1.1  jakllsch 
    558  1.1.1.2  jmcneill typedef struct _EFI_LOAD_FILE_PROTOCOL {
    559      1.1  jakllsch     EFI_LOAD_FILE                       LoadFile;
    560  1.1.1.2  jmcneill } EFI_LOAD_FILE_PROTOCOL;
    561      1.1  jakllsch 
    562  1.1.1.2  jmcneill typedef struct _EFI_LOAD_FILE_PROTOCOL _EFI_LOAD_FILE_INTERFACE;
    563  1.1.1.2  jmcneill typedef EFI_LOAD_FILE_PROTOCOL EFI_LOAD_FILE_INTERFACE;
    564      1.1  jakllsch 
    565      1.1  jakllsch //
    566      1.1  jakllsch // Device IO protocol
    567      1.1  jakllsch //
    568      1.1  jakllsch 
    569  1.1.1.2  jmcneill #define EFI_DEVICE_IO_PROTOCOL_GUID \
    570      1.1  jakllsch     { 0xaf6ac311, 0x84c3, 0x11d2, {0x8e, 0x3c, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
    571  1.1.1.2  jmcneill #define DEVICE_IO_PROTOCOL EFI_DEVICE_IO_PROTOCOL_GUID
    572      1.1  jakllsch 
    573  1.1.1.2  jmcneill INTERFACE_DECL(_EFI_DEVICE_IO_PROTOCOL);
    574      1.1  jakllsch 
    575      1.1  jakllsch typedef enum {
    576      1.1  jakllsch     IO_UINT8,
    577      1.1  jakllsch     IO_UINT16,
    578      1.1  jakllsch     IO_UINT32,
    579      1.1  jakllsch     IO_UINT64,
    580      1.1  jakllsch //
    581      1.1  jakllsch // Specification Change: Copy from MMIO to MMIO vs. MMIO to buffer, buffer to MMIO
    582      1.1  jakllsch //
    583      1.1  jakllsch     MMIO_COPY_UINT8,
    584      1.1  jakllsch     MMIO_COPY_UINT16,
    585      1.1  jakllsch     MMIO_COPY_UINT32,
    586      1.1  jakllsch     MMIO_COPY_UINT64
    587      1.1  jakllsch } EFI_IO_WIDTH;
    588      1.1  jakllsch 
    589      1.1  jakllsch #define EFI_PCI_ADDRESS(_bus,_dev,_func) \
    590      1.1  jakllsch     ( (UINT64) ( (((UINTN)_bus) << 24) + (((UINTN)_dev) << 16) + (((UINTN)_func) << 8) ) )
    591      1.1  jakllsch 
    592      1.1  jakllsch 
    593      1.1  jakllsch typedef
    594      1.1  jakllsch EFI_STATUS
    595      1.1  jakllsch (EFIAPI *EFI_DEVICE_IO) (
    596  1.1.1.2  jmcneill     IN struct _EFI_DEVICE_IO_PROTOCOL *This,
    597      1.1  jakllsch     IN EFI_IO_WIDTH                 Width,
    598      1.1  jakllsch     IN UINT64                       Address,
    599      1.1  jakllsch     IN UINTN                        Count,
    600      1.1  jakllsch     IN OUT VOID                     *Buffer
    601      1.1  jakllsch     );
    602      1.1  jakllsch 
    603      1.1  jakllsch typedef struct {
    604      1.1  jakllsch     EFI_DEVICE_IO                   Read;
    605      1.1  jakllsch     EFI_DEVICE_IO                   Write;
    606      1.1  jakllsch } EFI_IO_ACCESS;
    607      1.1  jakllsch 
    608  1.1.1.2  jmcneill typedef
    609      1.1  jakllsch EFI_STATUS
    610      1.1  jakllsch (EFIAPI *EFI_PCI_DEVICE_PATH) (
    611  1.1.1.2  jmcneill     IN struct _EFI_DEVICE_IO_PROTOCOL   *This,
    612      1.1  jakllsch     IN UINT64                           Address,
    613      1.1  jakllsch     IN OUT EFI_DEVICE_PATH              **PciDevicePath
    614      1.1  jakllsch     );
    615      1.1  jakllsch 
    616      1.1  jakllsch typedef enum {
    617      1.1  jakllsch     EfiBusMasterRead,
    618      1.1  jakllsch     EfiBusMasterWrite,
    619      1.1  jakllsch     EfiBusMasterCommonBuffer
    620      1.1  jakllsch } EFI_IO_OPERATION_TYPE;
    621      1.1  jakllsch 
    622      1.1  jakllsch typedef
    623      1.1  jakllsch EFI_STATUS
    624      1.1  jakllsch (EFIAPI *EFI_IO_MAP) (
    625  1.1.1.2  jmcneill     IN struct _EFI_DEVICE_IO_PROTOCOL   *This,
    626      1.1  jakllsch     IN EFI_IO_OPERATION_TYPE            Operation,
    627      1.1  jakllsch     IN EFI_PHYSICAL_ADDRESS             *HostAddress,
    628      1.1  jakllsch     IN OUT UINTN                        *NumberOfBytes,
    629      1.1  jakllsch     OUT EFI_PHYSICAL_ADDRESS            *DeviceAddress,
    630      1.1  jakllsch     OUT VOID                            **Mapping
    631      1.1  jakllsch     );
    632      1.1  jakllsch 
    633      1.1  jakllsch typedef
    634      1.1  jakllsch EFI_STATUS
    635      1.1  jakllsch (EFIAPI *EFI_IO_UNMAP) (
    636  1.1.1.2  jmcneill     IN struct _EFI_DEVICE_IO_PROTOCOL   *This,
    637      1.1  jakllsch     IN VOID                             *Mapping
    638      1.1  jakllsch     );
    639      1.1  jakllsch 
    640      1.1  jakllsch typedef
    641      1.1  jakllsch EFI_STATUS
    642      1.1  jakllsch (EFIAPI *EFI_IO_ALLOCATE_BUFFER) (
    643  1.1.1.2  jmcneill     IN struct _EFI_DEVICE_IO_PROTOCOL   *This,
    644      1.1  jakllsch     IN EFI_ALLOCATE_TYPE                Type,
    645      1.1  jakllsch     IN EFI_MEMORY_TYPE                  MemoryType,
    646      1.1  jakllsch     IN UINTN                            Pages,
    647      1.1  jakllsch     IN OUT EFI_PHYSICAL_ADDRESS         *HostAddress
    648      1.1  jakllsch     );
    649      1.1  jakllsch 
    650      1.1  jakllsch typedef
    651      1.1  jakllsch EFI_STATUS
    652      1.1  jakllsch (EFIAPI *EFI_IO_FLUSH) (
    653  1.1.1.2  jmcneill     IN struct _EFI_DEVICE_IO_PROTOCOL   *This
    654      1.1  jakllsch     );
    655      1.1  jakllsch 
    656      1.1  jakllsch typedef
    657      1.1  jakllsch EFI_STATUS
    658      1.1  jakllsch (EFIAPI *EFI_IO_FREE_BUFFER) (
    659  1.1.1.2  jmcneill     IN struct _EFI_DEVICE_IO_PROTOCOL   *This,
    660      1.1  jakllsch     IN UINTN                            Pages,
    661      1.1  jakllsch     IN EFI_PHYSICAL_ADDRESS             HostAddress
    662      1.1  jakllsch     );
    663      1.1  jakllsch 
    664  1.1.1.2  jmcneill typedef struct _EFI_DEVICE_IO_PROTOCOL {
    665      1.1  jakllsch     EFI_IO_ACCESS                       Mem;
    666      1.1  jakllsch     EFI_IO_ACCESS                       Io;
    667      1.1  jakllsch     EFI_IO_ACCESS                       Pci;
    668      1.1  jakllsch     EFI_IO_MAP                          Map;
    669      1.1  jakllsch     EFI_PCI_DEVICE_PATH                 PciDevicePath;
    670      1.1  jakllsch     EFI_IO_UNMAP                        Unmap;
    671      1.1  jakllsch     EFI_IO_ALLOCATE_BUFFER              AllocateBuffer;
    672      1.1  jakllsch     EFI_IO_FLUSH                        Flush;
    673      1.1  jakllsch     EFI_IO_FREE_BUFFER                  FreeBuffer;
    674  1.1.1.2  jmcneill } EFI_DEVICE_IO_PROTOCOL;
    675      1.1  jakllsch 
    676  1.1.1.2  jmcneill typedef struct _EFI_DEVICE_IO_PROTOCOL _EFI_DEVICE_IO_INTERFACE;
    677  1.1.1.2  jmcneill typedef EFI_DEVICE_IO_PROTOCOL EFI_DEVICE_IO_INTERFACE;
    678      1.1  jakllsch 
    679      1.1  jakllsch //
    680      1.1  jakllsch // Unicode Collation protocol
    681      1.1  jakllsch //
    682      1.1  jakllsch 
    683  1.1.1.2  jmcneill #define EFI_UNICODE_COLLATION_PROTOCOL_GUID \
    684      1.1  jakllsch     { 0x1d85cd7f, 0xf43d, 0x11d2, {0x9a, 0xc,  0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
    685  1.1.1.2  jmcneill #define UNICODE_COLLATION_PROTOCOL EFI_UNICODE_COLLATION_PROTOCOL_GUID
    686      1.1  jakllsch 
    687  1.1.1.2  jmcneill #define EFI_UNICODE_BYTE_ORDER_MARK       (CHAR16)(0xfeff)
    688  1.1.1.2  jmcneill #define UNICODE_BYTE_ORDER_MARK EFI_UNICODE_BYTE_ORDER_MARK
    689      1.1  jakllsch 
    690  1.1.1.2  jmcneill INTERFACE_DECL(_EFI_UNICODE_COLLATION_PROTOCOL);
    691      1.1  jakllsch 
    692      1.1  jakllsch typedef
    693      1.1  jakllsch INTN
    694      1.1  jakllsch (EFIAPI *EFI_UNICODE_STRICOLL) (
    695  1.1.1.2  jmcneill     IN struct _EFI_UNICODE_COLLATION_PROTOCOL  *This,
    696      1.1  jakllsch     IN CHAR16                         *s1,
    697      1.1  jakllsch     IN CHAR16                         *s2
    698      1.1  jakllsch     );
    699      1.1  jakllsch 
    700      1.1  jakllsch typedef
    701      1.1  jakllsch BOOLEAN
    702      1.1  jakllsch (EFIAPI *EFI_UNICODE_METAIMATCH) (
    703  1.1.1.2  jmcneill     IN struct _EFI_UNICODE_COLLATION_PROTOCOL  *This,
    704      1.1  jakllsch     IN CHAR16                         *String,
    705      1.1  jakllsch     IN CHAR16                         *Pattern
    706      1.1  jakllsch     );
    707      1.1  jakllsch 
    708      1.1  jakllsch typedef
    709      1.1  jakllsch VOID
    710      1.1  jakllsch (EFIAPI *EFI_UNICODE_STRLWR) (
    711  1.1.1.2  jmcneill     IN struct _EFI_UNICODE_COLLATION_PROTOCOL  *This,
    712      1.1  jakllsch     IN OUT CHAR16                       *Str
    713      1.1  jakllsch     );
    714      1.1  jakllsch 
    715      1.1  jakllsch typedef
    716      1.1  jakllsch VOID
    717      1.1  jakllsch (EFIAPI *EFI_UNICODE_STRUPR) (
    718  1.1.1.2  jmcneill     IN struct _EFI_UNICODE_COLLATION_PROTOCOL  *This,
    719      1.1  jakllsch     IN OUT CHAR16                       *Str
    720      1.1  jakllsch     );
    721      1.1  jakllsch 
    722      1.1  jakllsch typedef
    723      1.1  jakllsch VOID
    724      1.1  jakllsch (EFIAPI *EFI_UNICODE_FATTOSTR) (
    725  1.1.1.2  jmcneill     IN struct _EFI_UNICODE_COLLATION_PROTOCOL  *This,
    726      1.1  jakllsch     IN UINTN                            FatSize,
    727      1.1  jakllsch     IN CHAR8                            *Fat,
    728      1.1  jakllsch     OUT CHAR16                          *String
    729      1.1  jakllsch     );
    730      1.1  jakllsch 
    731      1.1  jakllsch typedef
    732      1.1  jakllsch BOOLEAN
    733      1.1  jakllsch (EFIAPI *EFI_UNICODE_STRTOFAT) (
    734  1.1.1.2  jmcneill     IN struct _EFI_UNICODE_COLLATION_PROTOCOL  *This,
    735      1.1  jakllsch     IN CHAR16                           *String,
    736      1.1  jakllsch     IN UINTN                            FatSize,
    737      1.1  jakllsch     OUT CHAR8                           *Fat
    738      1.1  jakllsch     );
    739      1.1  jakllsch 
    740  1.1.1.2  jmcneill //
    741  1.1.1.2  jmcneill // Hash Protocol
    742  1.1.1.2  jmcneill //
    743  1.1.1.2  jmcneill #define EFI_HASH_PROTOCOL_GUID \
    744  1.1.1.2  jmcneill   { 0xC5184932, 0xDBA5, 0x46DB, { 0xA5, 0xBA, 0xCC, 0x0B, 0xDA, 0x9C, 0x14, 0x35 } }
    745  1.1.1.2  jmcneill #define HASH_PROTOCOL EFI_HASH_PROTOCOL_GUID
    746  1.1.1.2  jmcneill 
    747  1.1.1.2  jmcneill #define EFI_HASH_ALGORITHM_SHA1_GUID \
    748  1.1.1.2  jmcneill   { 0x2AE9D80F, 0x3FB2, 0x4095, { 0xB7, 0xB1, 0xE9, 0x31, 0x57, 0xB9, 0x46, 0xB6 } } // Deprecated
    749  1.1.1.2  jmcneill #define EFI_HASH_ALGORITHM_SHA1 EFI_HASH_ALGORITHM_SHA1_GUID
    750  1.1.1.2  jmcneill 
    751  1.1.1.2  jmcneill #define EFI_HASH_ALGORITHM_SHA224_GUID \
    752  1.1.1.2  jmcneill   { 0x8DF01A06, 0x9BD5, 0x4BF7, { 0xB0, 0x21, 0xDB, 0x4F, 0xD9, 0xCC, 0xF4, 0x5B } } // Deprecated
    753  1.1.1.2  jmcneill #define EFI_HASH_ALGORITHM_SHA224 EFI_HASH_ALGORITHM_SHA224_GUID
    754  1.1.1.2  jmcneill 
    755  1.1.1.2  jmcneill #define EFI_HASH_ALGORITHM_SHA256_GUID \
    756  1.1.1.2  jmcneill   { 0x51AA59DE, 0xFDF2, 0x4EA3, { 0xBC, 0x63, 0x87, 0x5F, 0xB7, 0x84, 0x2E, 0xE9 } } // Deprecated
    757  1.1.1.2  jmcneill #define EFI_HASH_ALGORITHM_SHA256 EFI_HASH_ALGORITHM_SHA256_GUID
    758  1.1.1.2  jmcneill 
    759  1.1.1.2  jmcneill #define EFI_HASH_ALGORITHM_SHA384_GUID \
    760  1.1.1.2  jmcneill   { 0xEFA96432, 0xDE33, 0x4DD2, { 0xAE, 0xE6, 0x32, 0x8C, 0x33, 0xDF, 0x77, 0x7A } } // Deprecated
    761  1.1.1.2  jmcneill #define EFI_HASH_ALGORITHM_SHA384 EFI_HASH_ALGORITHM_SHA384_GUID
    762  1.1.1.2  jmcneill 
    763  1.1.1.2  jmcneill #define EFI_HASH_ALGORITHM_SHA512_GUID \
    764  1.1.1.2  jmcneill   { 0xCAA4381E, 0x750C, 0x4770, { 0xB8, 0x70, 0x7A, 0x23, 0xB4, 0xE4, 0x21, 0x30 } } // Deprecated
    765  1.1.1.2  jmcneill #define EFI_HASH_ALGORITHM_SHA512 EFI_HASH_ALGORITHM_SHA512_GUID
    766      1.1  jakllsch 
    767  1.1.1.2  jmcneill #define EFI_HASH_ALGORITHM_MD5_GUID \
    768  1.1.1.2  jmcneill   { 0x0AF7C79C, 0x65B5, 0x4319, { 0xB0, 0xAE, 0x44, 0xEC, 0x48, 0x4E, 0x4A, 0xD7 } } // Deprecated
    769  1.1.1.2  jmcneill #define EFI_HASH_ALGORITHM_MD5 EFI_HASH_ALGORITHM_MD5_GUID
    770  1.1.1.2  jmcneill 
    771  1.1.1.2  jmcneill #define EFI_HASH_ALGORITHM_SHA1_NOPAD_GUID \
    772  1.1.1.2  jmcneill   { 0x24C5DC2F, 0x53E2, 0x40CA, { 0x9E, 0xD6, 0xA5, 0xD9, 0xA4, 0x9F, 0x46, 0x3B } }
    773  1.1.1.2  jmcneill #define EFI_HASH_ALGORITHM_SHA1_NOPAD EFI_HASH_ALGORITHM_SHA1_NOPAD_GUID
    774  1.1.1.2  jmcneill 
    775  1.1.1.2  jmcneill #define EFI_HASH_ALGORITHM_SHA256_NOPAD_GUID \
    776  1.1.1.2  jmcneill   { 0x8628752A, 0x6CB7, 0x4814, { 0x96, 0xFC, 0x24, 0xA8, 0x15, 0xAC, 0x22, 0x26 } }
    777  1.1.1.2  jmcneill #define EFI_HASH_ALGORITHM_SHA256_NOPAD EFI_HASH_ALGORITHM_SHA256_NOPAD_GUID
    778  1.1.1.2  jmcneill 
    779  1.1.1.2  jmcneill 
    780  1.1.1.2  jmcneill INTERFACE_DECL(_EFI_HASH_PROTOCOL);
    781  1.1.1.2  jmcneill 
    782  1.1.1.2  jmcneill typedef UINT8 EFI_MD5_HASH[16];
    783  1.1.1.2  jmcneill typedef UINT8 EFI_SHA1_HASH[20];
    784  1.1.1.2  jmcneill typedef UINT8 EFI_SHA224_HASH[28];
    785  1.1.1.2  jmcneill typedef UINT8 EFI_SHA256_HASH[32];
    786  1.1.1.2  jmcneill typedef UINT8 EFI_SHA384_HASH[48];
    787  1.1.1.2  jmcneill typedef UINT8 EFI_SHA512_HASH[64];
    788  1.1.1.2  jmcneill typedef union _EFI_HASH_OUTPUT {
    789  1.1.1.2  jmcneill   EFI_MD5_HASH                    *Md5Hash;
    790  1.1.1.2  jmcneill   EFI_SHA1_HASH                   *Sha1Hash;
    791  1.1.1.2  jmcneill   EFI_SHA224_HASH                 *Sha224Hash;
    792  1.1.1.2  jmcneill   EFI_SHA256_HASH                 *Sha256Hash;
    793  1.1.1.2  jmcneill   EFI_SHA384_HASH                 *Sha384Hash;
    794  1.1.1.2  jmcneill   EFI_SHA512_HASH                 *Sha512Hash;
    795  1.1.1.2  jmcneill } EFI_HASH_OUTPUT;
    796  1.1.1.2  jmcneill 
    797  1.1.1.2  jmcneill typedef
    798  1.1.1.2  jmcneill EFI_STATUS
    799  1.1.1.2  jmcneill (EFIAPI *EFI_HASH_GET_HASH_SIZE) (
    800  1.1.1.2  jmcneill   IN CONST struct _EFI_HASH_PROTOCOL  *This,
    801  1.1.1.2  jmcneill   IN CONST EFI_GUID               *HashAlgorithm,
    802  1.1.1.2  jmcneill   OUT UINTN                       *HashSize);
    803  1.1.1.2  jmcneill 
    804  1.1.1.2  jmcneill typedef
    805  1.1.1.2  jmcneill EFI_STATUS
    806  1.1.1.2  jmcneill (EFIAPI *EFI_HASH_HASH) (
    807  1.1.1.2  jmcneill   IN CONST struct _EFI_HASH_PROTOCOL  *This,
    808  1.1.1.2  jmcneill   IN CONST EFI_GUID               *HashAlgorithm,
    809  1.1.1.2  jmcneill   IN BOOLEAN                      Extend,
    810  1.1.1.2  jmcneill   IN CONST UINT8                  *Message,
    811  1.1.1.2  jmcneill   IN UINT64                       MessageSize,
    812  1.1.1.2  jmcneill   IN OUT EFI_HASH_OUTPUT          *Hash);
    813  1.1.1.2  jmcneill 
    814  1.1.1.2  jmcneill typedef struct _EFI_HASH_PROTOCOL {
    815  1.1.1.2  jmcneill   EFI_HASH_GET_HASH_SIZE                  GetHashSize;
    816  1.1.1.2  jmcneill   EFI_HASH_HASH                           Hash;
    817  1.1.1.2  jmcneill } EFI_HASH_PROTOCOL;
    818  1.1.1.2  jmcneill 
    819  1.1.1.2  jmcneill typedef struct _EFI_HASH_PROTOCOL _EFI_HASH;
    820  1.1.1.2  jmcneill typedef EFI_HASH_PROTOCOL EFI_HASH;
    821  1.1.1.2  jmcneill 
    822  1.1.1.2  jmcneill 
    823  1.1.1.2  jmcneill typedef struct _EFI_UNICODE_COLLATION_PROTOCOL {
    824      1.1  jakllsch 
    825      1.1  jakllsch     // general
    826      1.1  jakllsch     EFI_UNICODE_STRICOLL                StriColl;
    827      1.1  jakllsch     EFI_UNICODE_METAIMATCH              MetaiMatch;
    828      1.1  jakllsch     EFI_UNICODE_STRLWR                  StrLwr;
    829      1.1  jakllsch     EFI_UNICODE_STRUPR                  StrUpr;
    830      1.1  jakllsch 
    831      1.1  jakllsch     // for supporting fat volumes
    832      1.1  jakllsch     EFI_UNICODE_FATTOSTR                FatToStr;
    833      1.1  jakllsch     EFI_UNICODE_STRTOFAT                StrToFat;
    834      1.1  jakllsch 
    835      1.1  jakllsch     CHAR8                               *SupportedLanguages;
    836  1.1.1.2  jmcneill } EFI_UNICODE_COLLATION_PROTOCOL;
    837  1.1.1.2  jmcneill 
    838  1.1.1.2  jmcneill typedef EFI_UNICODE_COLLATION_PROTOCOL EFI_UNICODE_COLLATION_INTERFACE;
    839      1.1  jakllsch 
    840      1.1  jakllsch /* Graphics output protocol */
    841      1.1  jakllsch #define EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID \
    842  1.1.1.2  jmcneill    { 0x9042a9de, 0x23dc, 0x4a38, {0x96, 0xfb, 0x7a, 0xde, 0xd0, 0x80, 0x51, 0x6a } }
    843      1.1  jakllsch typedef struct _EFI_GRAPHICS_OUTPUT_PROTOCOL EFI_GRAPHICS_OUTPUT_PROTOCOL;
    844      1.1  jakllsch 
    845      1.1  jakllsch typedef struct {
    846      1.1  jakllsch   UINT32            RedMask;
    847      1.1  jakllsch   UINT32            GreenMask;
    848      1.1  jakllsch   UINT32            BlueMask;
    849      1.1  jakllsch   UINT32            ReservedMask;
    850      1.1  jakllsch } EFI_PIXEL_BITMASK;
    851      1.1  jakllsch 
    852      1.1  jakllsch typedef enum {
    853      1.1  jakllsch   PixelRedGreenBlueReserved8BitPerColor,
    854      1.1  jakllsch   PixelBlueGreenRedReserved8BitPerColor,
    855      1.1  jakllsch   PixelBitMask,
    856      1.1  jakllsch   PixelBltOnly,
    857      1.1  jakllsch   PixelFormatMax
    858      1.1  jakllsch } EFI_GRAPHICS_PIXEL_FORMAT;
    859      1.1  jakllsch 
    860      1.1  jakllsch typedef struct {
    861      1.1  jakllsch   UINT32                     Version;
    862      1.1  jakllsch   UINT32                     HorizontalResolution;
    863      1.1  jakllsch   UINT32                     VerticalResolution;
    864      1.1  jakllsch   EFI_GRAPHICS_PIXEL_FORMAT  PixelFormat;
    865      1.1  jakllsch   EFI_PIXEL_BITMASK          PixelInformation;
    866      1.1  jakllsch   UINT32                     PixelsPerScanLine;
    867      1.1  jakllsch } EFI_GRAPHICS_OUTPUT_MODE_INFORMATION;
    868      1.1  jakllsch 
    869      1.1  jakllsch /**
    870      1.1  jakllsch   Return the current video mode information.
    871      1.1  jakllsch 
    872      1.1  jakllsch   @param  This       Protocol instance pointer.
    873      1.1  jakllsch   @param  ModeNumber The mode number to return information on.
    874      1.1  jakllsch   @param  SizeOfInfo A pointer to the size, in bytes, of the Info buffer.
    875      1.1  jakllsch   @param  Info       A pointer to callee allocated buffer that returns information about ModeNumber.
    876      1.1  jakllsch 
    877      1.1  jakllsch   @retval EFI_SUCCESS           Mode information returned.
    878      1.1  jakllsch   @retval EFI_BUFFER_TOO_SMALL  The Info buffer was too small.
    879      1.1  jakllsch   @retval EFI_DEVICE_ERROR      A hardware error occurred trying to retrieve the video mode.
    880      1.1  jakllsch   @retval EFI_NOT_STARTED       Video display is not initialized. Call SetMode ()
    881      1.1  jakllsch   @retval EFI_INVALID_PARAMETER One of the input args was NULL.
    882      1.1  jakllsch 
    883      1.1  jakllsch **/
    884      1.1  jakllsch typedef
    885      1.1  jakllsch EFI_STATUS
    886      1.1  jakllsch (EFIAPI *EFI_GRAPHICS_OUTPUT_PROTOCOL_QUERY_MODE) (
    887      1.1  jakllsch   IN  EFI_GRAPHICS_OUTPUT_PROTOCOL          *This,
    888      1.1  jakllsch   IN  UINT32                                ModeNumber,
    889      1.1  jakllsch   OUT UINTN                                 *SizeOfInfo,
    890      1.1  jakllsch   OUT EFI_GRAPHICS_OUTPUT_MODE_INFORMATION  **Info
    891      1.1  jakllsch   )
    892      1.1  jakllsch ;
    893      1.1  jakllsch 
    894      1.1  jakllsch /**
    895      1.1  jakllsch   Return the current video mode information.
    896      1.1  jakllsch 
    897      1.1  jakllsch   @param  This              Protocol instance pointer.
    898      1.1  jakllsch   @param  ModeNumber        The mode number to be set.
    899      1.1  jakllsch 
    900      1.1  jakllsch   @retval EFI_SUCCESS       Graphics mode was changed.
    901      1.1  jakllsch   @retval EFI_DEVICE_ERROR  The device had an error and could not complete the request.
    902      1.1  jakllsch   @retval EFI_UNSUPPORTED   ModeNumber is not supported by this device.
    903      1.1  jakllsch 
    904      1.1  jakllsch **/
    905      1.1  jakllsch typedef
    906      1.1  jakllsch EFI_STATUS
    907      1.1  jakllsch (EFIAPI *EFI_GRAPHICS_OUTPUT_PROTOCOL_SET_MODE) (
    908      1.1  jakllsch   IN  EFI_GRAPHICS_OUTPUT_PROTOCOL *This,
    909      1.1  jakllsch   IN  UINT32                       ModeNumber
    910      1.1  jakllsch   );
    911      1.1  jakllsch 
    912      1.1  jakllsch typedef struct {
    913      1.1  jakllsch   UINT8 Blue;
    914      1.1  jakllsch   UINT8 Green;
    915      1.1  jakllsch   UINT8 Red;
    916      1.1  jakllsch   UINT8 Reserved;
    917      1.1  jakllsch } EFI_GRAPHICS_OUTPUT_BLT_PIXEL;
    918      1.1  jakllsch 
    919      1.1  jakllsch typedef union {
    920      1.1  jakllsch   EFI_GRAPHICS_OUTPUT_BLT_PIXEL Pixel;
    921      1.1  jakllsch   UINT32                        Raw;
    922      1.1  jakllsch } EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION;
    923      1.1  jakllsch 
    924      1.1  jakllsch typedef enum {
    925      1.1  jakllsch   EfiBltVideoFill,
    926      1.1  jakllsch   EfiBltVideoToBltBuffer,
    927  1.1.1.2  jmcneill   EfiBltBufferToVideo,
    928      1.1  jakllsch   EfiBltVideoToVideo,
    929      1.1  jakllsch   EfiGraphicsOutputBltOperationMax
    930      1.1  jakllsch } EFI_GRAPHICS_OUTPUT_BLT_OPERATION;
    931      1.1  jakllsch 
    932      1.1  jakllsch /**
    933      1.1  jakllsch   The following table defines actions for BltOperations:
    934      1.1  jakllsch 
    935  1.1.1.2  jmcneill   <B>EfiBltVideoFill</B> - Write data from the  BltBuffer pixel (SourceX, SourceY)
    936  1.1.1.2  jmcneill   directly to every pixel of the video display rectangle
    937  1.1.1.2  jmcneill   (DestinationX, DestinationY) (DestinationX + Width, DestinationY + Height).
    938      1.1  jakllsch   Only one pixel will be used from the BltBuffer. Delta is NOT used.
    939      1.1  jakllsch 
    940  1.1.1.2  jmcneill   <B>EfiBltVideoToBltBuffer</B> - Read data from the video display rectangle
    941  1.1.1.2  jmcneill   (SourceX, SourceY) (SourceX + Width, SourceY + Height) and place it in
    942  1.1.1.2  jmcneill   the BltBuffer rectangle (DestinationX, DestinationY )
    943  1.1.1.2  jmcneill   (DestinationX + Width, DestinationY + Height). If DestinationX or
    944  1.1.1.2  jmcneill   DestinationY is not zero then Delta must be set to the length in bytes
    945      1.1  jakllsch   of a row in the BltBuffer.
    946      1.1  jakllsch 
    947  1.1.1.2  jmcneill   <B>EfiBltBufferToVideo</B> - Write data from the  BltBuffer rectangle
    948  1.1.1.2  jmcneill   (SourceX, SourceY) (SourceX + Width, SourceY + Height) directly to the
    949  1.1.1.2  jmcneill   video display rectangle (DestinationX, DestinationY)
    950  1.1.1.2  jmcneill   (DestinationX + Width, DestinationY + Height). If SourceX or SourceY is
    951  1.1.1.2  jmcneill   not zero then Delta must be set to the length in bytes of a row in the
    952      1.1  jakllsch   BltBuffer.
    953      1.1  jakllsch 
    954      1.1  jakllsch   <B>EfiBltVideoToVideo</B> - Copy from the video display rectangle (SourceX, SourceY)
    955  1.1.1.2  jmcneill   (SourceX + Width, SourceY + Height) .to the video display rectangle
    956  1.1.1.2  jmcneill   (DestinationX, DestinationY) (DestinationX + Width, DestinationY + Height).
    957      1.1  jakllsch   The BltBuffer and Delta  are not used in this mode.
    958      1.1  jakllsch 
    959      1.1  jakllsch   @param  This         Protocol instance pointer.
    960      1.1  jakllsch   @param  BltBuffer    Buffer containing data to blit into video buffer. This
    961      1.1  jakllsch                        buffer has a size of Width*Height*sizeof(EFI_GRAPHICS_OUTPUT_BLT_PIXEL)
    962      1.1  jakllsch   @param  BltOperation Operation to perform on BlitBuffer and video memory
    963      1.1  jakllsch   @param  SourceX      X coordinate of source for the BltBuffer.
    964      1.1  jakllsch   @param  SourceY      Y coordinate of source for the BltBuffer.
    965      1.1  jakllsch   @param  DestinationX X coordinate of destination for the BltBuffer.
    966      1.1  jakllsch   @param  DestinationY Y coordinate of destination for the BltBuffer.
    967      1.1  jakllsch   @param  Width        Width of rectangle in BltBuffer in pixels.
    968      1.1  jakllsch   @param  Height       Hight of rectangle in BltBuffer in pixels.
    969      1.1  jakllsch   @param  Delta        OPTIONAL
    970      1.1  jakllsch 
    971      1.1  jakllsch   @retval EFI_SUCCESS           The Blt operation completed.
    972      1.1  jakllsch   @retval EFI_INVALID_PARAMETER BltOperation is not valid.
    973      1.1  jakllsch   @retval EFI_DEVICE_ERROR      A hardware error occured writting to the video buffer.
    974      1.1  jakllsch 
    975      1.1  jakllsch **/
    976      1.1  jakllsch typedef
    977      1.1  jakllsch EFI_STATUS
    978      1.1  jakllsch (EFIAPI *EFI_GRAPHICS_OUTPUT_PROTOCOL_BLT) (
    979      1.1  jakllsch   IN  EFI_GRAPHICS_OUTPUT_PROTOCOL            *This,
    980      1.1  jakllsch   IN  EFI_GRAPHICS_OUTPUT_BLT_PIXEL           *BltBuffer,   OPTIONAL
    981      1.1  jakllsch   IN  EFI_GRAPHICS_OUTPUT_BLT_OPERATION       BltOperation,
    982      1.1  jakllsch   IN  UINTN                                   SourceX,
    983      1.1  jakllsch   IN  UINTN                                   SourceY,
    984      1.1  jakllsch   IN  UINTN                                   DestinationX,
    985      1.1  jakllsch   IN  UINTN                                   DestinationY,
    986      1.1  jakllsch   IN  UINTN                                   Width,
    987      1.1  jakllsch   IN  UINTN                                   Height,
    988      1.1  jakllsch   IN  UINTN                                   Delta         OPTIONAL
    989      1.1  jakllsch   );
    990      1.1  jakllsch 
    991      1.1  jakllsch typedef struct {
    992      1.1  jakllsch   UINT32                                 MaxMode;
    993      1.1  jakllsch   UINT32                                 Mode;
    994      1.1  jakllsch   EFI_GRAPHICS_OUTPUT_MODE_INFORMATION   *Info;
    995      1.1  jakllsch   UINTN                                  SizeOfInfo;
    996      1.1  jakllsch   EFI_PHYSICAL_ADDRESS                   FrameBufferBase;
    997      1.1  jakllsch   UINTN                                  FrameBufferSize;
    998      1.1  jakllsch } EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE;
    999      1.1  jakllsch 
   1000      1.1  jakllsch struct _EFI_GRAPHICS_OUTPUT_PROTOCOL {
   1001      1.1  jakllsch   EFI_GRAPHICS_OUTPUT_PROTOCOL_QUERY_MODE  QueryMode;
   1002      1.1  jakllsch   EFI_GRAPHICS_OUTPUT_PROTOCOL_SET_MODE    SetMode;
   1003      1.1  jakllsch   EFI_GRAPHICS_OUTPUT_PROTOCOL_BLT         Blt;
   1004      1.1  jakllsch   EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE        *Mode;
   1005      1.1  jakllsch };
   1006      1.1  jakllsch 
   1007  1.1.1.2  jmcneill 
   1008  1.1.1.2  jmcneill 
   1009  1.1.1.2  jmcneill /*
   1010  1.1.1.2  jmcneill  * EFI EDID Discovered Protocol
   1011  1.1.1.2  jmcneill  * UEFI Specification Version 2.5 Section 11.9
   1012  1.1.1.2  jmcneill  */
   1013  1.1.1.2  jmcneill #define EFI_EDID_DISCOVERED_PROTOCOL_GUID \
   1014  1.1.1.2  jmcneill     { 0x1C0C34F6, 0xD380, 0x41FA, { 0xA0, 0x49, 0x8a, 0xD0, 0x6C, 0x1A, 0x66, 0xAA} }
   1015  1.1.1.2  jmcneill 
   1016  1.1.1.2  jmcneill typedef struct _EFI_EDID_DISCOVERED_PROTOCOL {
   1017  1.1.1.2  jmcneill     UINT32   SizeOfEdid;
   1018  1.1.1.2  jmcneill     UINT8   *Edid;
   1019  1.1.1.2  jmcneill } EFI_EDID_DISCOVERED_PROTOCOL;
   1020  1.1.1.2  jmcneill 
   1021  1.1.1.2  jmcneill 
   1022  1.1.1.2  jmcneill 
   1023  1.1.1.2  jmcneill /*
   1024  1.1.1.2  jmcneill  * EFI EDID Active Protocol
   1025  1.1.1.2  jmcneill  * UEFI Specification Version 2.5 Section 11.9
   1026  1.1.1.2  jmcneill  */
   1027  1.1.1.2  jmcneill #define EFI_EDID_ACTIVE_PROTOCOL_GUID \
   1028  1.1.1.2  jmcneill     { 0xBD8C1056, 0x9F36, 0x44EC, { 0x92, 0xA8, 0xA6, 0x33, 0x7F, 0x81, 0x79, 0x86} }
   1029  1.1.1.2  jmcneill 
   1030  1.1.1.2  jmcneill typedef struct _EFI_EDID_ACTIVE_PROTOCOL {
   1031  1.1.1.2  jmcneill     UINT32   SizeOfEdid;
   1032  1.1.1.2  jmcneill     UINT8   *Edid;
   1033  1.1.1.2  jmcneill } EFI_EDID_ACTIVE_PROTOCOL;
   1034  1.1.1.2  jmcneill 
   1035  1.1.1.2  jmcneill 
   1036  1.1.1.2  jmcneill 
   1037  1.1.1.2  jmcneill /*
   1038  1.1.1.2  jmcneill  * EFI EDID Override Protocol
   1039  1.1.1.2  jmcneill  * UEFI Specification Version 2.5 Section 11.9
   1040  1.1.1.2  jmcneill  */
   1041  1.1.1.2  jmcneill #define EFI_EDID_OVERRIDE_PROTOCOL_GUID \
   1042  1.1.1.2  jmcneill     { 0x48ECB431, 0xFB72, 0x45C0, { 0xA9, 0x22, 0xF4, 0x58, 0xFE, 0x04, 0x0B, 0xD5} }
   1043  1.1.1.2  jmcneill 
   1044  1.1.1.2  jmcneill INTERFACE_DECL(_EFI_EDID_OVERRIDE_PROTOCOL);
   1045  1.1.1.2  jmcneill 
   1046  1.1.1.2  jmcneill typedef
   1047  1.1.1.2  jmcneill EFI_STATUS
   1048  1.1.1.2  jmcneill (EFIAPI *EFI_EDID_OVERRIDE_PROTOCOL_GET_EDID) (
   1049  1.1.1.2  jmcneill   IN      struct _EFI_EDID_OVERRIDE_PROTOCOL   *This,
   1050  1.1.1.2  jmcneill   IN      EFI_HANDLE                           *ChildHandle,
   1051  1.1.1.2  jmcneill   OUT     UINT32                               *Attributes,
   1052  1.1.1.2  jmcneill   IN OUT  UINTN                                *EdidSize,
   1053  1.1.1.2  jmcneill   IN OUT  UINT8                               **Edid);
   1054  1.1.1.2  jmcneill 
   1055  1.1.1.2  jmcneill typedef struct _EFI_EDID_OVERRIDE_PROTOCOL {
   1056  1.1.1.2  jmcneill     EFI_EDID_OVERRIDE_PROTOCOL_GET_EDID  GetEdid;
   1057  1.1.1.2  jmcneill } EFI_EDID_OVERRIDE_PROTOCOL;
   1058  1.1.1.2  jmcneill 
   1059  1.1.1.2  jmcneill 
   1060  1.1.1.2  jmcneill 
   1061      1.1  jakllsch INTERFACE_DECL(_EFI_SERVICE_BINDING);
   1062      1.1  jakllsch 
   1063      1.1  jakllsch typedef
   1064      1.1  jakllsch EFI_STATUS
   1065      1.1  jakllsch (EFIAPI *EFI_SERVICE_BINDING_CREATE_CHILD) (
   1066      1.1  jakllsch     IN struct _EFI_SERVICE_BINDING *This,
   1067      1.1  jakllsch     IN EFI_HANDLE                  *ChildHandle
   1068      1.1  jakllsch     );
   1069      1.1  jakllsch 
   1070      1.1  jakllsch typedef
   1071      1.1  jakllsch EFI_STATUS
   1072      1.1  jakllsch (EFIAPI *EFI_SERVICE_BINDING_DESTROY_CHILD) (
   1073      1.1  jakllsch     IN struct _EFI_SERVICE_BINDING *This,
   1074      1.1  jakllsch     IN EFI_HANDLE                  ChildHandle
   1075      1.1  jakllsch     );
   1076      1.1  jakllsch 
   1077      1.1  jakllsch typedef struct _EFI_SERVICE_BINDING {
   1078      1.1  jakllsch     EFI_SERVICE_BINDING_CREATE_CHILD  CreateChild;
   1079      1.1  jakllsch     EFI_SERVICE_BINDING_DESTROY_CHILD DestroyChild;
   1080      1.1  jakllsch } EFI_SERVICE_BINDING;
   1081      1.1  jakllsch 
   1082      1.1  jakllsch 
   1083  1.1.1.2  jmcneill 
   1084  1.1.1.2  jmcneill /*
   1085  1.1.1.2  jmcneill  * EFI Driver Binding Protocol
   1086  1.1.1.2  jmcneill  * UEFI Specification Version 2.5 Section 10.1
   1087  1.1.1.2  jmcneill  */
   1088  1.1.1.2  jmcneill #define EFI_DRIVER_BINDING_PROTOCOL_GUID \
   1089  1.1.1.2  jmcneill     { 0x18A031AB, 0xB443, 0x4D1A, { 0xA5, 0xC0, 0x0C, 0x09, 0x26, 0x1E, 0x9F, 0x71} }
   1090  1.1.1.2  jmcneill #define DRIVER_BINDING_PROTOCOL EFI_DRIVER_BINDING_PROTOCOL_GUID
   1091  1.1.1.2  jmcneill 
   1092  1.1.1.2  jmcneill INTERFACE_DECL(_EFI_DRIVER_BINDING_PROTOCOL);
   1093  1.1.1.2  jmcneill 
   1094  1.1.1.2  jmcneill typedef
   1095  1.1.1.2  jmcneill EFI_STATUS
   1096  1.1.1.2  jmcneill (EFIAPI *EFI_DRIVER_BINDING_PROTOCOL_SUPPORTED) (
   1097  1.1.1.2  jmcneill   IN      struct _EFI_DRIVER_BINDING_PROTOCOL *This,
   1098  1.1.1.2  jmcneill   IN      EFI_HANDLE                          ControllerHandle,
   1099  1.1.1.2  jmcneill   IN      EFI_DEVICE_PATH                     *RemainingDevicePath OPTIONAL);
   1100  1.1.1.2  jmcneill 
   1101  1.1.1.2  jmcneill typedef
   1102  1.1.1.2  jmcneill EFI_STATUS
   1103  1.1.1.2  jmcneill (EFIAPI *EFI_DRIVER_BINDING_PROTOCOL_START) (
   1104  1.1.1.2  jmcneill   IN      struct _EFI_DRIVER_BINDING_PROTOCOL *This,
   1105  1.1.1.2  jmcneill   IN      EFI_HANDLE                          ControllerHandle,
   1106  1.1.1.2  jmcneill   IN      EFI_DEVICE_PATH                     *RemainingDevicePath OPTIONAL);
   1107  1.1.1.2  jmcneill 
   1108  1.1.1.2  jmcneill typedef
   1109  1.1.1.2  jmcneill EFI_STATUS
   1110  1.1.1.2  jmcneill (EFIAPI *EFI_DRIVER_BINDING_PROTOCOL_STOP) (
   1111  1.1.1.2  jmcneill   IN      struct _EFI_DRIVER_BINDING_PROTOCOL *This,
   1112  1.1.1.2  jmcneill   IN      EFI_HANDLE                          ControllerHandle,
   1113  1.1.1.2  jmcneill   IN      UINTN                               NumberOfChildren,
   1114  1.1.1.2  jmcneill   IN      EFI_HANDLE                          *ChildHandleBuffer OPTIONAL);
   1115  1.1.1.2  jmcneill 
   1116  1.1.1.2  jmcneill typedef struct _EFI_DRIVER_BINDING_PROTOCOL {
   1117  1.1.1.2  jmcneill   EFI_DRIVER_BINDING_PROTOCOL_SUPPORTED       Supported;
   1118  1.1.1.2  jmcneill   EFI_DRIVER_BINDING_PROTOCOL_START           Start;
   1119  1.1.1.2  jmcneill   EFI_DRIVER_BINDING_PROTOCOL_STOP            Stop;
   1120  1.1.1.2  jmcneill   UINT32                                      Version;
   1121  1.1.1.2  jmcneill   EFI_HANDLE                                  ImageHandle;
   1122  1.1.1.2  jmcneill   EFI_HANDLE                                  DriverBindingHandle;
   1123  1.1.1.2  jmcneill } EFI_DRIVER_BINDING_PROTOCOL;
   1124  1.1.1.2  jmcneill 
   1125  1.1.1.2  jmcneill typedef struct _EFI_DRIVER_BINDING_PROTOCOL _EFI_DRIVER_BINDING;
   1126  1.1.1.2  jmcneill typedef EFI_DRIVER_BINDING_PROTOCOL EFI_DRIVER_BINDING;
   1127  1.1.1.2  jmcneill 
   1128  1.1.1.2  jmcneill 
   1129  1.1.1.2  jmcneill /*
   1130  1.1.1.2  jmcneill  * Backwards compatibility with older GNU-EFI versions. Deprecated.
   1131  1.1.1.2  jmcneill  */
   1132  1.1.1.2  jmcneill #define EFI_DRIVER_SUPPORTED         EFI_DRIVER_BINDING_PROTOCOL_SUPPORTED
   1133  1.1.1.2  jmcneill #define EFI_DRIVER_START             EFI_DRIVER_BINDING_PROTOCOL_START
   1134  1.1.1.2  jmcneill #define EFI_DRIVER_STOP              EFI_DRIVER_BINDING_PROTOCOL_STOP
   1135  1.1.1.2  jmcneill 
   1136  1.1.1.2  jmcneill 
   1137  1.1.1.2  jmcneill 
   1138  1.1.1.2  jmcneill /*
   1139  1.1.1.2  jmcneill  * EFI Component Name Protocol
   1140  1.1.1.2  jmcneill  * Deprecated - use EFI Component Name 2 Protocol instead
   1141  1.1.1.2  jmcneill  */
   1142  1.1.1.2  jmcneill #define EFI_COMPONENT_NAME_PROTOCOL_GUID \
   1143  1.1.1.2  jmcneill     {0x107A772C, 0xD5E1, 0x11D4, { 0x9A, 0x46, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D} }
   1144  1.1.1.2  jmcneill #define COMPONENT_NAME_PROTOCOL EFI_COMPONENT_NAME_PROTOCOL_GUID
   1145  1.1.1.2  jmcneill 
   1146  1.1.1.2  jmcneill INTERFACE_DECL(_EFI_COMPONENT_NAME_PROTOCOL);
   1147  1.1.1.2  jmcneill 
   1148  1.1.1.2  jmcneill typedef
   1149  1.1.1.2  jmcneill EFI_STATUS
   1150  1.1.1.2  jmcneill (EFIAPI *EFI_COMPONENT_NAME_GET_DRIVER_NAME) (
   1151  1.1.1.2  jmcneill   IN      struct _EFI_COMPONENT_NAME_PROTOCOL   *This,
   1152  1.1.1.2  jmcneill   IN      CHAR8                                 *Language,
   1153  1.1.1.2  jmcneill   OUT     CHAR16                                **DriverName);
   1154  1.1.1.2  jmcneill 
   1155  1.1.1.2  jmcneill typedef
   1156  1.1.1.2  jmcneill EFI_STATUS
   1157  1.1.1.2  jmcneill (EFIAPI *EFI_COMPONENT_NAME_GET_CONTROLLER_NAME) (
   1158  1.1.1.2  jmcneill   IN      struct _EFI_COMPONENT_NAME_PROTOCOL   *This,
   1159  1.1.1.2  jmcneill   IN      EFI_HANDLE                            ControllerHandle,
   1160  1.1.1.2  jmcneill   IN      EFI_HANDLE                            ChildHandle OPTIONAL,
   1161  1.1.1.2  jmcneill   IN      CHAR8                                 *Language,
   1162  1.1.1.2  jmcneill   OUT     CHAR16                                **ControllerName);
   1163  1.1.1.2  jmcneill 
   1164  1.1.1.2  jmcneill typedef struct _EFI_COMPONENT_NAME_PROTOCOL {
   1165  1.1.1.2  jmcneill   EFI_COMPONENT_NAME_GET_DRIVER_NAME      GetDriverName;
   1166  1.1.1.2  jmcneill   EFI_COMPONENT_NAME_GET_CONTROLLER_NAME  GetControllerName;
   1167  1.1.1.2  jmcneill   CHAR8                                   *SupportedLanguages;
   1168  1.1.1.2  jmcneill } EFI_COMPONENT_NAME_PROTOCOL;
   1169  1.1.1.2  jmcneill 
   1170  1.1.1.2  jmcneill typedef struct _EFI_COMPONENT_NAME_PROTOCOL _EFI_COMPONENT_NAME;
   1171  1.1.1.2  jmcneill typedef EFI_COMPONENT_NAME_PROTOCOL EFI_COMPONENT_NAME;
   1172  1.1.1.2  jmcneill 
   1173  1.1.1.2  jmcneill 
   1174  1.1.1.2  jmcneill /*
   1175  1.1.1.2  jmcneill  * EFI Component Name 2 Protocol
   1176  1.1.1.2  jmcneill  * UEFI Specification Version 2.5 Section 10.5
   1177  1.1.1.2  jmcneill  */
   1178  1.1.1.2  jmcneill #define EFI_COMPONENT_NAME2_PROTOCOL_GUID \
   1179  1.1.1.2  jmcneill     {0x6A7A5CFF, 0xE8D9, 0x4F70, { 0xBA, 0xDA, 0x75, 0xAB, 0x30, 0x25, 0xCE, 0x14} }
   1180  1.1.1.2  jmcneill #define COMPONENT_NAME2_PROTOCOL EFI_COMPONENT_NAME2_PROTOCOL_GUID
   1181  1.1.1.2  jmcneill 
   1182  1.1.1.2  jmcneill INTERFACE_DECL(_EFI_COMPONENT_NAME2_PROTOCOL);
   1183  1.1.1.2  jmcneill 
   1184  1.1.1.2  jmcneill typedef
   1185  1.1.1.2  jmcneill EFI_STATUS
   1186  1.1.1.2  jmcneill (EFIAPI *EFI_COMPONENT_NAME2_GET_DRIVER_NAME) (
   1187  1.1.1.2  jmcneill   IN      struct _EFI_COMPONENT_NAME2_PROTOCOL   *This,
   1188  1.1.1.2  jmcneill   IN      CHAR8                                  *Language,
   1189  1.1.1.2  jmcneill   OUT     CHAR16                                 **DriverName);
   1190  1.1.1.2  jmcneill 
   1191  1.1.1.2  jmcneill typedef
   1192  1.1.1.2  jmcneill EFI_STATUS
   1193  1.1.1.2  jmcneill (EFIAPI *EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) (
   1194  1.1.1.2  jmcneill   IN      struct _EFI_COMPONENT_NAME2_PROTOCOL   *This,
   1195  1.1.1.2  jmcneill   IN      EFI_HANDLE                             ControllerHandle,
   1196  1.1.1.2  jmcneill   IN      EFI_HANDLE                             ChildHandle OPTIONAL,
   1197  1.1.1.2  jmcneill   IN      CHAR8                                  *Language,
   1198  1.1.1.2  jmcneill   OUT     CHAR16                                 **ControllerName);
   1199  1.1.1.2  jmcneill 
   1200  1.1.1.2  jmcneill typedef struct _EFI_COMPONENT_NAME2_PROTOCOL {
   1201  1.1.1.2  jmcneill   EFI_COMPONENT_NAME2_GET_DRIVER_NAME       GetDriverName;
   1202  1.1.1.2  jmcneill   EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME   GetControllerName;
   1203  1.1.1.2  jmcneill   CHAR8                                     *SupportedLanguages;
   1204  1.1.1.2  jmcneill } EFI_COMPONENT_NAME2_PROTOCOL;
   1205  1.1.1.2  jmcneill 
   1206  1.1.1.2  jmcneill typedef struct _EFI_COMPONENT_NAME2_PROTOCOL _EFI_COMPONENT_NAME2;
   1207  1.1.1.2  jmcneill typedef EFI_COMPONENT_NAME2_PROTOCOL EFI_COMPONENT_NAME2;
   1208  1.1.1.2  jmcneill 
   1209  1.1.1.2  jmcneill 
   1210  1.1.1.2  jmcneill 
   1211  1.1.1.2  jmcneill /*
   1212  1.1.1.2  jmcneill  * EFI Loaded Image Protocol
   1213  1.1.1.2  jmcneill  * UEFI Specification Version 2.5 Section 8.1
   1214  1.1.1.2  jmcneill  */
   1215  1.1.1.2  jmcneill #define EFI_LOADED_IMAGE_PROTOCOL_GUID \
   1216  1.1.1.2  jmcneill     { 0x5B1B31A1, 0x9562, 0x11d2, {0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B} }
   1217  1.1.1.2  jmcneill #define LOADED_IMAGE_PROTOCOL EFI_LOADED_IMAGE_PROTOCOL_GUID
   1218  1.1.1.2  jmcneill 
   1219  1.1.1.2  jmcneill #define EFI_LOADED_IMAGE_PROTOCOL_REVISION  0x1000
   1220  1.1.1.2  jmcneill #define EFI_IMAGE_INFORMATION_REVISION  EFI_LOADED_IMAGE_PROTOCOL_REVISION
   1221  1.1.1.2  jmcneill 
   1222  1.1.1.2  jmcneill typedef
   1223  1.1.1.2  jmcneill EFI_STATUS
   1224  1.1.1.2  jmcneill (EFIAPI *EFI_IMAGE_UNLOAD) (
   1225  1.1.1.2  jmcneill     IN EFI_HANDLE                   ImageHandle
   1226  1.1.1.2  jmcneill     );
   1227  1.1.1.2  jmcneill 
   1228  1.1.1.2  jmcneill typedef struct {
   1229  1.1.1.2  jmcneill     UINT32                          Revision;
   1230  1.1.1.2  jmcneill     EFI_HANDLE                      ParentHandle;
   1231  1.1.1.2  jmcneill     struct _EFI_SYSTEM_TABLE        *SystemTable;
   1232  1.1.1.2  jmcneill 
   1233  1.1.1.2  jmcneill     // Source location of image
   1234  1.1.1.2  jmcneill     EFI_HANDLE                      DeviceHandle;
   1235  1.1.1.2  jmcneill     EFI_DEVICE_PATH                 *FilePath;
   1236  1.1.1.2  jmcneill     VOID                            *Reserved;
   1237  1.1.1.2  jmcneill 
   1238  1.1.1.2  jmcneill     // Images load options
   1239  1.1.1.2  jmcneill     UINT32                          LoadOptionsSize;
   1240  1.1.1.2  jmcneill     VOID                            *LoadOptions;
   1241  1.1.1.2  jmcneill 
   1242  1.1.1.2  jmcneill     // Location of where image was loaded
   1243  1.1.1.2  jmcneill     VOID                            *ImageBase;
   1244  1.1.1.2  jmcneill     UINT64                          ImageSize;
   1245  1.1.1.2  jmcneill     EFI_MEMORY_TYPE                 ImageCodeType;
   1246  1.1.1.2  jmcneill     EFI_MEMORY_TYPE                 ImageDataType;
   1247  1.1.1.2  jmcneill 
   1248  1.1.1.2  jmcneill     // If the driver image supports a dynamic unload request
   1249  1.1.1.2  jmcneill     EFI_IMAGE_UNLOAD                Unload;
   1250  1.1.1.2  jmcneill } EFI_LOADED_IMAGE_PROTOCOL;
   1251  1.1.1.2  jmcneill 
   1252  1.1.1.2  jmcneill typedef EFI_LOADED_IMAGE_PROTOCOL EFI_LOADED_IMAGE;
   1253  1.1.1.2  jmcneill 
   1254  1.1.1.3  jmcneill #define EFI_LOADED_IMAGE_DEVICE_PATH_PROTOCOL_GUID \
   1255  1.1.1.3  jmcneill     {0xbc62157e, 0x3e33, 0x4fec, {0x99, 0x20, 0x2d, 0x3b, 0x36, 0xd7, 0x50, 0xdf} }
   1256  1.1.1.2  jmcneill 
   1257  1.1.1.2  jmcneill /*
   1258  1.1.1.2  jmcneill  * Random Number Generator Protocol
   1259  1.1.1.2  jmcneill  * UEFI Specification Version 2.5 Section 35.5
   1260  1.1.1.2  jmcneill  */
   1261  1.1.1.2  jmcneill #define EFI_RNG_PROTOCOL_GUID                          \
   1262  1.1.1.2  jmcneill           { 0x3152bca5, 0xeade, 0x433d, {0x86, 0x2e, 0xc0, 0x1c, 0xdc, 0x29, 0x1f, 0x44} }
   1263  1.1.1.2  jmcneill 
   1264  1.1.1.2  jmcneill typedef EFI_GUID EFI_RNG_ALGORITHM;
   1265  1.1.1.2  jmcneill 
   1266  1.1.1.2  jmcneill #define EFI_RNG_ALGORITHM_SP800_90_HASH_256_GUID       \
   1267  1.1.1.2  jmcneill      {0xa7af67cb, 0x603b, 0x4d42, {0xba, 0x21, 0x70, 0xbf, 0xb6, 0x29, 0x3f, 0x96} }
   1268  1.1.1.2  jmcneill 
   1269  1.1.1.2  jmcneill #define EFI_RNG_ALGORITHM_SP800_90_HMAC_256_GUID       \
   1270  1.1.1.2  jmcneill      {0xc5149b43, 0xae85, 0x4f53, {0x99, 0x82, 0xb9, 0x43, 0x35, 0xd3, 0xa9, 0xe7} }
   1271  1.1.1.2  jmcneill 
   1272  1.1.1.2  jmcneill #define EFI_RNG_ALGORITHM_SP800_90_CTR_256_GUID        \
   1273  1.1.1.2  jmcneill      {0x44f0de6e, 0x4d8c, 0x4045, {0xa8, 0xc7, 0x4d, 0xd1, 0x68, 0x85, 0x6b, 0x9e} }
   1274  1.1.1.2  jmcneill 
   1275  1.1.1.2  jmcneill #define EFI_RNG_ALGORITHM_X9_31_3DES_GUID              \
   1276  1.1.1.2  jmcneill      {0x63c4785a, 0xca34, 0x4012, {0xa3, 0xc8, 0x0b, 0x6a, 0x32, 0x4f, 0x55, 0x46} }
   1277  1.1.1.2  jmcneill 
   1278  1.1.1.2  jmcneill #define EFI_RNG_ALGORITHM_X9_31_AES_GUID               \
   1279  1.1.1.2  jmcneill      {0xacd03321, 0x777e, 0x4d3d, {0xb1, 0xc8, 0x20, 0xcf, 0xd8, 0x88, 0x20, 0xc9} }
   1280  1.1.1.2  jmcneill 
   1281  1.1.1.2  jmcneill #define EFI_RNG_ALGORITHM_RAW                          \
   1282  1.1.1.2  jmcneill      {0xe43176d7, 0xb6e8, 0x4827, {0xb7, 0x84, 0x7f, 0xfd, 0xc4, 0xb6, 0x85, 0x61} }
   1283  1.1.1.2  jmcneill 
   1284  1.1.1.2  jmcneill INTERFACE_DECL(_EFI_RNG_PROTOCOL);
   1285  1.1.1.2  jmcneill 
   1286  1.1.1.2  jmcneill typedef
   1287  1.1.1.2  jmcneill EFI_STATUS
   1288  1.1.1.2  jmcneill (EFIAPI *EFI_RNG_GET_INFO) (
   1289  1.1.1.2  jmcneill   IN      struct _EFI_RNG_PROTOCOL   *This,
   1290  1.1.1.2  jmcneill   IN OUT  UINTN                      *RNGAlgorithmListSize,
   1291  1.1.1.2  jmcneill   OUT     EFI_RNG_ALGORITHM          *RNGAlgorithmList
   1292  1.1.1.2  jmcneill );
   1293  1.1.1.2  jmcneill 
   1294  1.1.1.2  jmcneill typedef
   1295  1.1.1.2  jmcneill EFI_STATUS
   1296  1.1.1.2  jmcneill (EFIAPI *EFI_RNG_GET_RNG) (
   1297  1.1.1.2  jmcneill   IN      struct _EFI_RNG_PROTOCOL   *This,
   1298  1.1.1.2  jmcneill   IN      EFI_RNG_ALGORITHM          *RNGAlgorithm,           OPTIONAL
   1299  1.1.1.2  jmcneill   IN      UINTN                      RNGValueLength,
   1300  1.1.1.2  jmcneill   OUT     UINT8                      *RNGValue
   1301  1.1.1.2  jmcneill );
   1302  1.1.1.2  jmcneill 
   1303  1.1.1.2  jmcneill typedef struct _EFI_RNG_PROTOCOL {
   1304  1.1.1.2  jmcneill           EFI_RNG_GET_INFO           GetInfo;
   1305  1.1.1.2  jmcneill           EFI_RNG_GET_RNG            GetRNG;
   1306  1.1.1.2  jmcneill } EFI_RNG_PROTOCOL;
   1307  1.1.1.2  jmcneill 
   1308  1.1.1.2  jmcneill 
   1309  1.1.1.2  jmcneill //
   1310  1.1.1.2  jmcneill // EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL
   1311  1.1.1.2  jmcneill //
   1312  1.1.1.2  jmcneill 
   1313  1.1.1.2  jmcneill #define EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL_GUID          \
   1314  1.1.1.2  jmcneill           { 0x6b30c738, 0xa391, 0x11d4, {0x9a, 0x3b, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
   1315  1.1.1.2  jmcneill 
   1316  1.1.1.2  jmcneill INTERFACE_DECL(_EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL);
   1317  1.1.1.2  jmcneill 
   1318  1.1.1.2  jmcneill typedef
   1319  1.1.1.2  jmcneill EFI_STATUS
   1320  1.1.1.2  jmcneill (EFIAPI *EFI_PLATFORM_DRIVER_OVERRIDE_GET_DRIVER) (
   1321  1.1.1.2  jmcneill IN      struct _EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL  *This,
   1322  1.1.1.2  jmcneill IN      EFI_HANDLE                                      ControllerHandle,
   1323  1.1.1.2  jmcneill IN OUT  EFI_HANDLE                                     *DriverImageHandle);
   1324  1.1.1.2  jmcneill 
   1325  1.1.1.2  jmcneill typedef
   1326  1.1.1.2  jmcneill EFI_STATUS
   1327  1.1.1.2  jmcneill (EFIAPI *EFI_PLATFORM_DRIVER_OVERRIDE_GET_DRIVER_PATH) (
   1328  1.1.1.2  jmcneill IN      struct _EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL  *This,
   1329  1.1.1.2  jmcneill IN      EFI_HANDLE                                      ControllerHandle,
   1330  1.1.1.2  jmcneill IN OUT  EFI_DEVICE_PATH                               **DriverImagePath);
   1331  1.1.1.2  jmcneill 
   1332  1.1.1.2  jmcneill typedef
   1333  1.1.1.2  jmcneill EFI_STATUS
   1334  1.1.1.2  jmcneill (EFIAPI *EFI_PLATFORM_DRIVER_OVERRIDE_DRIVER_LOADED) (
   1335  1.1.1.2  jmcneill IN      struct _EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL  *This,
   1336  1.1.1.2  jmcneill IN      EFI_HANDLE                                      ControllerHandle,
   1337  1.1.1.2  jmcneill IN      EFI_DEVICE_PATH                                *DriverImagePath,
   1338  1.1.1.2  jmcneill IN      EFI_HANDLE                                      DriverImageHandle);
   1339  1.1.1.2  jmcneill 
   1340  1.1.1.2  jmcneill typedef struct _EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL {
   1341  1.1.1.2  jmcneill   EFI_PLATFORM_DRIVER_OVERRIDE_GET_DRIVER       GetDriver;
   1342  1.1.1.2  jmcneill   EFI_PLATFORM_DRIVER_OVERRIDE_GET_DRIVER_PATH  GetDriverPath;
   1343  1.1.1.2  jmcneill   EFI_PLATFORM_DRIVER_OVERRIDE_DRIVER_LOADED    DriverLoaded;
   1344  1.1.1.2  jmcneill } EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL;
   1345  1.1.1.2  jmcneill 
   1346  1.1.1.2  jmcneill //
   1347  1.1.1.2  jmcneill // EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL
   1348  1.1.1.2  jmcneill //
   1349  1.1.1.2  jmcneill 
   1350  1.1.1.2  jmcneill #define EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL_GUID          \
   1351  1.1.1.2  jmcneill           { 0x3bc1b285, 0x8a15, 0x4a82, {0xaa, 0xbf, 0x4d, 0x7d, 0x13, 0xfb, 0x32, 0x65} }
   1352  1.1.1.2  jmcneill 
   1353  1.1.1.2  jmcneill INTERFACE_DECL(_EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL);
   1354  1.1.1.2  jmcneill 
   1355  1.1.1.2  jmcneill typedef
   1356  1.1.1.2  jmcneill EFI_STATUS
   1357  1.1.1.2  jmcneill (EFIAPI *EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_GET_DRIVER) (
   1358  1.1.1.2  jmcneill IN      struct _EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL  *This,
   1359  1.1.1.2  jmcneill IN OUT  EFI_HANDLE                                         *DriverImageHandle);
   1360  1.1.1.2  jmcneill 
   1361  1.1.1.2  jmcneill typedef struct _EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL {
   1362  1.1.1.2  jmcneill   EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_GET_DRIVER       GetDriver;
   1363  1.1.1.2  jmcneill } EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL;
   1364  1.1.1.2  jmcneill 
   1365  1.1.1.2  jmcneill //
   1366  1.1.1.2  jmcneill // EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL
   1367  1.1.1.2  jmcneill //
   1368  1.1.1.2  jmcneill 
   1369  1.1.1.2  jmcneill #define EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL_GUID          \
   1370  1.1.1.2  jmcneill           { 0xb1ee129e, 0xda36, 0x4181, {0x91, 0xf8, 0x04, 0xa4, 0x92, 0x37, 0x66, 0xa7} }
   1371  1.1.1.2  jmcneill 
   1372  1.1.1.2  jmcneill INTERFACE_DECL(_EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL);
   1373  1.1.1.2  jmcneill 
   1374  1.1.1.2  jmcneill typedef
   1375  1.1.1.2  jmcneill UINT32
   1376  1.1.1.2  jmcneill (EFIAPI *EFI_DRIVER_FAMILY_OVERRIDE_GET_VERSION) (
   1377  1.1.1.2  jmcneill IN      struct _EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL  *This);
   1378  1.1.1.2  jmcneill 
   1379  1.1.1.2  jmcneill typedef struct _EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL {
   1380  1.1.1.2  jmcneill   EFI_DRIVER_FAMILY_OVERRIDE_GET_VERSION       GetVersion;
   1381  1.1.1.2  jmcneill } EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL;
   1382  1.1.1.2  jmcneill 
   1383  1.1.1.2  jmcneill //
   1384  1.1.1.2  jmcneill // EFI_EBC_PROTOCOL
   1385  1.1.1.2  jmcneill //
   1386  1.1.1.2  jmcneill 
   1387  1.1.1.2  jmcneill #define EFI_EBC_INTERPRETER_PROTOCOL_GUID              \
   1388  1.1.1.2  jmcneill      {0x13ac6dd1, 0x73d0, 0x11d4, {0xb0, 0x6b, 0x00, 0xaa, 0x00, 0xbd, 0x6d, 0xe7} }
   1389  1.1.1.2  jmcneill 
   1390  1.1.1.2  jmcneill #define EFI_EBC_PROTOCOL_GUID EFI_EBC_INTERPRETER_PROTOCOL_GUID
   1391  1.1.1.2  jmcneill 
   1392  1.1.1.2  jmcneill INTERFACE_DECL(_EFI_EBC_PROTOCOL);
   1393  1.1.1.2  jmcneill 
   1394  1.1.1.2  jmcneill typedef
   1395  1.1.1.2  jmcneill EFI_STATUS
   1396  1.1.1.2  jmcneill (EFIAPI *EFI_EBC_CREATE_THUNK)(
   1397  1.1.1.2  jmcneill   IN struct _EFI_EBC_PROTOCOL   *This,
   1398  1.1.1.2  jmcneill   IN EFI_HANDLE                 ImageHandle,
   1399  1.1.1.2  jmcneill   IN VOID                       *EbcEntryPoint,
   1400  1.1.1.2  jmcneill   OUT VOID                      **Thunk);
   1401  1.1.1.2  jmcneill 
   1402  1.1.1.2  jmcneill typedef
   1403  1.1.1.2  jmcneill EFI_STATUS
   1404  1.1.1.2  jmcneill (EFIAPI *EFI_EBC_UNLOAD_IMAGE)(
   1405  1.1.1.2  jmcneill   IN struct _EFI_EBC_PROTOCOL   *This,
   1406  1.1.1.2  jmcneill   IN EFI_HANDLE                 ImageHandle);
   1407  1.1.1.2  jmcneill 
   1408  1.1.1.2  jmcneill typedef
   1409  1.1.1.2  jmcneill EFI_STATUS
   1410  1.1.1.2  jmcneill (EFIAPI *EBC_ICACHE_FLUSH)(
   1411  1.1.1.2  jmcneill   IN EFI_PHYSICAL_ADDRESS       Start,
   1412  1.1.1.2  jmcneill   IN UINT64                     Length);
   1413  1.1.1.2  jmcneill 
   1414  1.1.1.2  jmcneill typedef
   1415  1.1.1.2  jmcneill EFI_STATUS
   1416  1.1.1.2  jmcneill (EFIAPI *EFI_EBC_REGISTER_ICACHE_FLUSH)(
   1417  1.1.1.2  jmcneill   IN struct _EFI_EBC_PROTOCOL   *This,
   1418  1.1.1.2  jmcneill   IN EBC_ICACHE_FLUSH           Flush);
   1419  1.1.1.2  jmcneill 
   1420  1.1.1.2  jmcneill typedef
   1421  1.1.1.2  jmcneill EFI_STATUS
   1422  1.1.1.2  jmcneill (EFIAPI *EFI_EBC_GET_VERSION)(
   1423  1.1.1.2  jmcneill   IN struct _EFI_EBC_PROTOCOL   *This,
   1424  1.1.1.2  jmcneill   IN OUT UINT64                 *Version);
   1425  1.1.1.2  jmcneill 
   1426  1.1.1.2  jmcneill typedef struct _EFI_EBC_PROTOCOL {
   1427  1.1.1.2  jmcneill   EFI_EBC_CREATE_THUNK          CreateThunk;
   1428  1.1.1.2  jmcneill   EFI_EBC_UNLOAD_IMAGE          UnloadImage;
   1429  1.1.1.2  jmcneill   EFI_EBC_REGISTER_ICACHE_FLUSH RegisterICacheFlush;
   1430  1.1.1.2  jmcneill   EFI_EBC_GET_VERSION           GetVersion;
   1431  1.1.1.2  jmcneill } EFI_EBC_PROTOCOL;
   1432  1.1.1.2  jmcneill 
   1433  1.1.1.2  jmcneill #endif
   1434