| #ifndef _EFI_PROT_H | 
 | #define _EFI_PROT_H | 
 |  | 
 | /*++ | 
 |  | 
 | Copyright (c) 1998  Intel Corporation | 
 |  | 
 | Module Name: | 
 |  | 
 |     efiprot.h | 
 |  | 
 | Abstract: | 
 |  | 
 |     EFI Protocols | 
 |  | 
 |  | 
 |  | 
 | Revision History | 
 |  | 
 | --*/ | 
 |  | 
 | // | 
 | //  FPSWA library protocol | 
 | // | 
 | #define FPSWA_PROTOCOL          \ | 
 |     { 0xc41b6531, 0x97b9, 0x11d3, {0x9a, 0x29, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} } | 
 |  | 
 | // | 
 | // Device Path protocol | 
 | // | 
 |  | 
 | #define DEVICE_PATH_PROTOCOL    \ | 
 |     { 0x9576e91, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} } | 
 |  | 
 |  | 
 | // | 
 | // Block IO protocol | 
 | // | 
 |  | 
 | #define BLOCK_IO_PROTOCOL \ | 
 |     { 0x964e5b21, 0x6459, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} } | 
 | #define EFI_BLOCK_IO_INTERFACE_REVISION   0x00010000 | 
 | #define EFI_BLOCK_IO_INTERFACE_REVISION2  0x00020001 | 
 | #define EFI_BLOCK_IO_INTERFACE_REVISION3  ((2<<16) | 31) | 
 |  | 
 | INTERFACE_DECL(_EFI_BLOCK_IO); | 
 |  | 
 | typedef | 
 | EFI_STATUS | 
 | (EFIAPI *EFI_BLOCK_RESET) ( | 
 |     IN struct _EFI_BLOCK_IO     *This, | 
 |     IN BOOLEAN                  ExtendedVerification | 
 |     ); | 
 |  | 
 | typedef | 
 | EFI_STATUS | 
 | (EFIAPI *EFI_BLOCK_READ) ( | 
 |     IN struct _EFI_BLOCK_IO     *This, | 
 |     IN UINT32                   MediaId, | 
 |     IN EFI_LBA                  LBA, | 
 |     IN UINTN                    BufferSize, | 
 |     OUT VOID                    *Buffer | 
 |     ); | 
 |  | 
 |  | 
 | typedef | 
 | EFI_STATUS | 
 | (EFIAPI *EFI_BLOCK_WRITE) ( | 
 |     IN struct _EFI_BLOCK_IO     *This, | 
 |     IN UINT32                   MediaId, | 
 |     IN EFI_LBA                  LBA, | 
 |     IN UINTN                    BufferSize, | 
 |     IN VOID                     *Buffer | 
 |     ); | 
 |  | 
 |  | 
 | typedef | 
 | EFI_STATUS | 
 | (EFIAPI *EFI_BLOCK_FLUSH) ( | 
 |     IN struct _EFI_BLOCK_IO     *This | 
 |     ); | 
 |  | 
 |  | 
 |  | 
 | typedef struct { | 
 |     UINT32              MediaId; | 
 |     BOOLEAN             RemovableMedia; | 
 |     BOOLEAN             MediaPresent; | 
 |  | 
 |     BOOLEAN             LogicalPartition; | 
 |     BOOLEAN             ReadOnly; | 
 |     BOOLEAN             WriteCaching; | 
 |  | 
 |     UINT32              BlockSize; | 
 |     UINT32              IoAlign; | 
 |  | 
 |     EFI_LBA             LastBlock; | 
 |  | 
 |     /* revision 2 */ | 
 |     EFI_LBA             LowestAlignedLba; | 
 |     UINT32              LogicalBlocksPerPhysicalBlock; | 
 |     /* revision 3 */ | 
 |     UINT32              OptimalTransferLengthGranularity; | 
 | } EFI_BLOCK_IO_MEDIA; | 
 |  | 
 | typedef struct _EFI_BLOCK_IO { | 
 |     UINT64                  Revision; | 
 |  | 
 |     EFI_BLOCK_IO_MEDIA      *Media; | 
 |  | 
 |     EFI_BLOCK_RESET         Reset; | 
 |     EFI_BLOCK_READ          ReadBlocks; | 
 |     EFI_BLOCK_WRITE         WriteBlocks; | 
 |     EFI_BLOCK_FLUSH         FlushBlocks; | 
 |  | 
 | } EFI_BLOCK_IO; | 
 |  | 
 |  | 
 |  | 
 | // | 
 | // Disk Block IO protocol | 
 | // | 
 |  | 
 | #define DISK_IO_PROTOCOL \ | 
 |     { 0xce345171, 0xba0b, 0x11d2,  {0x8e, 0x4f, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} } | 
 | #define EFI_DISK_IO_INTERFACE_REVISION   0x00010000 | 
 |  | 
 | INTERFACE_DECL(_EFI_DISK_IO); | 
 |  | 
 | typedef | 
 | EFI_STATUS | 
 | (EFIAPI *EFI_DISK_READ) ( | 
 |     IN struct _EFI_DISK_IO      *This, | 
 |     IN UINT32                   MediaId, | 
 |     IN UINT64                   Offset, | 
 |     IN UINTN                    BufferSize, | 
 |     OUT VOID                    *Buffer | 
 |     ); | 
 |  | 
 |  | 
 | typedef | 
 | EFI_STATUS | 
 | (EFIAPI *EFI_DISK_WRITE) ( | 
 |     IN struct _EFI_DISK_IO      *This, | 
 |     IN UINT32                   MediaId, | 
 |     IN UINT64                   Offset, | 
 |     IN UINTN                    BufferSize, | 
 |     IN VOID                     *Buffer | 
 |     ); | 
 |  | 
 |  | 
 | typedef struct _EFI_DISK_IO { | 
 |     UINT64              Revision; | 
 |     EFI_DISK_READ       ReadDisk; | 
 |     EFI_DISK_WRITE      WriteDisk; | 
 | } EFI_DISK_IO; | 
 |  | 
 |  | 
 | // | 
 | // Simple file system protocol | 
 | // | 
 |  | 
 | #define SIMPLE_FILE_SYSTEM_PROTOCOL \ | 
 |     { 0x964e5b22, 0x6459, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} } | 
 |  | 
 | INTERFACE_DECL(_EFI_FILE_IO_INTERFACE); | 
 | INTERFACE_DECL(_EFI_FILE_HANDLE); | 
 |  | 
 | typedef | 
 | EFI_STATUS | 
 | (EFIAPI *EFI_VOLUME_OPEN) ( | 
 |     IN struct _EFI_FILE_IO_INTERFACE    *This, | 
 |     OUT struct _EFI_FILE_HANDLE         **Root | 
 |     ); | 
 |  | 
 | #define EFI_FILE_IO_INTERFACE_REVISION   0x00010000 | 
 |  | 
 | typedef struct _EFI_FILE_IO_INTERFACE { | 
 |     UINT64                  Revision; | 
 |     EFI_VOLUME_OPEN         OpenVolume; | 
 | } EFI_FILE_IO_INTERFACE; | 
 |  | 
 | // | 
 | // | 
 | // | 
 |  | 
 | typedef | 
 | EFI_STATUS | 
 | (EFIAPI *EFI_FILE_OPEN) ( | 
 |     IN struct _EFI_FILE_HANDLE  *File, | 
 |     OUT struct _EFI_FILE_HANDLE **NewHandle, | 
 |     IN CHAR16                   *FileName, | 
 |     IN UINT64                   OpenMode, | 
 |     IN UINT64                   Attributes | 
 |     ); | 
 |  | 
 | // Open modes | 
 | #define EFI_FILE_MODE_READ      0x0000000000000001 | 
 | #define EFI_FILE_MODE_WRITE     0x0000000000000002 | 
 | #define EFI_FILE_MODE_CREATE    0x8000000000000000 | 
 |  | 
 | // File attributes | 
 | #define EFI_FILE_READ_ONLY      0x0000000000000001 | 
 | #define EFI_FILE_HIDDEN         0x0000000000000002 | 
 | #define EFI_FILE_SYSTEM         0x0000000000000004 | 
 | #define EFI_FILE_RESERVIED      0x0000000000000008 | 
 | #define EFI_FILE_DIRECTORY      0x0000000000000010 | 
 | #define EFI_FILE_ARCHIVE        0x0000000000000020 | 
 | #define EFI_FILE_VALID_ATTR     0x0000000000000037 | 
 |  | 
 | typedef | 
 | EFI_STATUS | 
 | (EFIAPI *EFI_FILE_CLOSE) ( | 
 |     IN struct _EFI_FILE_HANDLE  *File | 
 |     ); | 
 |  | 
 | typedef | 
 | EFI_STATUS | 
 | (EFIAPI *EFI_FILE_DELETE) ( | 
 |     IN struct _EFI_FILE_HANDLE  *File | 
 |     ); | 
 |  | 
 | typedef | 
 | EFI_STATUS | 
 | (EFIAPI *EFI_FILE_READ) ( | 
 |     IN struct _EFI_FILE_HANDLE  *File, | 
 |     IN OUT UINTN                *BufferSize, | 
 |     OUT VOID                    *Buffer | 
 |     ); | 
 |  | 
 | typedef | 
 | EFI_STATUS | 
 | (EFIAPI *EFI_FILE_WRITE) ( | 
 |     IN struct _EFI_FILE_HANDLE  *File, | 
 |     IN OUT UINTN                *BufferSize, | 
 |     IN VOID                     *Buffer | 
 |     ); | 
 |  | 
 | typedef | 
 | EFI_STATUS | 
 | (EFIAPI *EFI_FILE_SET_POSITION) ( | 
 |     IN struct _EFI_FILE_HANDLE  *File, | 
 |     IN UINT64                   Position | 
 |     ); | 
 |  | 
 | typedef | 
 | EFI_STATUS | 
 | (EFIAPI *EFI_FILE_GET_POSITION) ( | 
 |     IN struct _EFI_FILE_HANDLE  *File, | 
 |     OUT UINT64                  *Position | 
 |     ); | 
 |  | 
 | typedef | 
 | EFI_STATUS | 
 | (EFIAPI *EFI_FILE_GET_INFO) ( | 
 |     IN struct _EFI_FILE_HANDLE  *File, | 
 |     IN EFI_GUID                 *InformationType, | 
 |     IN OUT UINTN                *BufferSize, | 
 |     OUT VOID                    *Buffer | 
 |     ); | 
 |  | 
 | typedef | 
 | EFI_STATUS | 
 | (EFIAPI *EFI_FILE_SET_INFO) ( | 
 |     IN struct _EFI_FILE_HANDLE  *File, | 
 |     IN EFI_GUID                 *InformationType, | 
 |     IN UINTN                    BufferSize, | 
 |     IN VOID                     *Buffer | 
 |     ); | 
 |  | 
 | typedef | 
 | EFI_STATUS | 
 | (EFIAPI *EFI_FILE_FLUSH) ( | 
 |     IN struct _EFI_FILE_HANDLE  *File | 
 |     ); | 
 |  | 
 |  | 
 |  | 
 | #define EFI_FILE_HANDLE_REVISION         0x00010000 | 
 | typedef struct _EFI_FILE_HANDLE { | 
 |     UINT64                  Revision; | 
 |     EFI_FILE_OPEN           Open; | 
 |     EFI_FILE_CLOSE          Close; | 
 |     EFI_FILE_DELETE         Delete; | 
 |     EFI_FILE_READ           Read; | 
 |     EFI_FILE_WRITE          Write; | 
 |     EFI_FILE_GET_POSITION   GetPosition; | 
 |     EFI_FILE_SET_POSITION   SetPosition; | 
 |     EFI_FILE_GET_INFO       GetInfo; | 
 |     EFI_FILE_SET_INFO       SetInfo; | 
 |     EFI_FILE_FLUSH          Flush; | 
 | } EFI_FILE, *EFI_FILE_HANDLE; | 
 |  | 
 |  | 
 | // | 
 | // File information types | 
 | // | 
 |  | 
 | #define EFI_FILE_INFO_ID   \ | 
 |     { 0x9576e92, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} } | 
 |  | 
 | typedef struct { | 
 |     UINT64                  Size; | 
 |     UINT64                  FileSize; | 
 |     UINT64                  PhysicalSize; | 
 |     EFI_TIME                CreateTime; | 
 |     EFI_TIME                LastAccessTime; | 
 |     EFI_TIME                ModificationTime; | 
 |     UINT64                  Attribute; | 
 |     CHAR16                  FileName[1]; | 
 | } EFI_FILE_INFO; | 
 |  | 
 | // | 
 | // The FileName field of the EFI_FILE_INFO data structure is variable length. | 
 | // Whenever code needs to know the size of the EFI_FILE_INFO data structure, it needs to | 
 | // be the size of the data structure without the FileName field.  The following macro  | 
 | // computes this size correctly no matter how big the FileName array is declared. | 
 | // This is required to make the EFI_FILE_INFO data structure ANSI compilant.  | 
 | // | 
 |  | 
 | #define SIZE_OF_EFI_FILE_INFO EFI_FIELD_OFFSET(EFI_FILE_INFO,FileName) | 
 |  | 
 | #define EFI_FILE_SYSTEM_INFO_ID    \ | 
 |     { 0x9576e93, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} } | 
 |  | 
 | typedef struct { | 
 |     UINT64                  Size; | 
 |     BOOLEAN                 ReadOnly; | 
 |     UINT64                  VolumeSize; | 
 |     UINT64                  FreeSpace; | 
 |     UINT32                  BlockSize; | 
 |     CHAR16                  VolumeLabel[1]; | 
 | } EFI_FILE_SYSTEM_INFO; | 
 |  | 
 | // | 
 | // The VolumeLabel field of the EFI_FILE_SYSTEM_INFO data structure is variable length. | 
 | // Whenever code needs to know the size of the EFI_FILE_SYSTEM_INFO data structure, it needs | 
 | // to be the size of the data structure without the VolumeLable field.  The following macro  | 
 | // computes this size correctly no matter how big the VolumeLable array is declared. | 
 | // This is required to make the EFI_FILE_SYSTEM_INFO data structure ANSI compilant.  | 
 | // | 
 |  | 
 | #define SIZE_OF_EFI_FILE_SYSTEM_INFO EFI_FIELD_OFFSET(EFI_FILE_SYSTEM_INFO,VolumeLabel) | 
 |  | 
 | #define EFI_FILE_SYSTEM_VOLUME_LABEL_INFO_ID    \ | 
 |     { 0xDB47D7D3,0xFE81, 0x11d3, {0x9A, 0x35, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D} } | 
 |  | 
 | typedef struct { | 
 |     CHAR16                  VolumeLabel[1]; | 
 | } EFI_FILE_SYSTEM_VOLUME_LABEL_INFO; | 
 |  | 
 | #define SIZE_OF_EFI_FILE_SYSTEM_VOLUME_LABEL_INFO EFI_FIELD_OFFSET(EFI_FILE_SYSTEM_VOLUME_LABEL_INFO,VolumeLabel) | 
 |  | 
 | // | 
 | // Load file protocol | 
 | // | 
 |  | 
 |  | 
 | #define LOAD_FILE_PROTOCOL \ | 
 |     { 0x56EC3091, 0x954C, 0x11d2, {0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B} } | 
 |  | 
 | INTERFACE_DECL(_EFI_LOAD_FILE_INTERFACE); | 
 |  | 
 | typedef | 
 | EFI_STATUS | 
 | (EFIAPI *EFI_LOAD_FILE) ( | 
 |     IN struct _EFI_LOAD_FILE_INTERFACE  *This, | 
 |     IN EFI_DEVICE_PATH                  *FilePath, | 
 |     IN BOOLEAN                          BootPolicy, | 
 |     IN OUT UINTN                        *BufferSize, | 
 |     IN VOID                             *Buffer OPTIONAL | 
 |     ); | 
 |  | 
 | typedef struct _EFI_LOAD_FILE_INTERFACE { | 
 |     EFI_LOAD_FILE                       LoadFile; | 
 | } EFI_LOAD_FILE_INTERFACE; | 
 |  | 
 |  | 
 | // | 
 | // Device IO protocol | 
 | // | 
 |  | 
 | #define DEVICE_IO_PROTOCOL \ | 
 |     { 0xaf6ac311, 0x84c3, 0x11d2, {0x8e, 0x3c, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b} } | 
 |  | 
 | INTERFACE_DECL(_EFI_DEVICE_IO_INTERFACE); | 
 |  | 
 | typedef enum { | 
 |     IO_UINT8, | 
 |     IO_UINT16, | 
 |     IO_UINT32, | 
 |     IO_UINT64, | 
 | // | 
 | // Specification Change: Copy from MMIO to MMIO vs. MMIO to buffer, buffer to MMIO | 
 | // | 
 |     MMIO_COPY_UINT8, | 
 |     MMIO_COPY_UINT16, | 
 |     MMIO_COPY_UINT32, | 
 |     MMIO_COPY_UINT64 | 
 | } EFI_IO_WIDTH; | 
 |  | 
 | #define EFI_PCI_ADDRESS(_bus,_dev,_func) \ | 
 |     ( (UINT64) ( (((UINTN)_bus) << 24) + (((UINTN)_dev) << 16) + (((UINTN)_func) << 8) ) ) | 
 |  | 
 |  | 
 | typedef | 
 | EFI_STATUS | 
 | (EFIAPI *EFI_DEVICE_IO) ( | 
 |     IN struct _EFI_DEVICE_IO_INTERFACE *This, | 
 |     IN EFI_IO_WIDTH                 Width, | 
 |     IN UINT64                       Address, | 
 |     IN UINTN                        Count, | 
 |     IN OUT VOID                     *Buffer | 
 |     ); | 
 |  | 
 | typedef struct { | 
 |     EFI_DEVICE_IO                   Read; | 
 |     EFI_DEVICE_IO                   Write; | 
 | } EFI_IO_ACCESS; | 
 |  | 
 | typedef  | 
 | EFI_STATUS | 
 | (EFIAPI *EFI_PCI_DEVICE_PATH) ( | 
 |     IN struct _EFI_DEVICE_IO_INTERFACE  *This, | 
 |     IN UINT64                           Address, | 
 |     IN OUT EFI_DEVICE_PATH              **PciDevicePath | 
 |     ); | 
 |  | 
 | typedef enum { | 
 |     EfiBusMasterRead, | 
 |     EfiBusMasterWrite, | 
 |     EfiBusMasterCommonBuffer | 
 | } EFI_IO_OPERATION_TYPE; | 
 |  | 
 | typedef | 
 | EFI_STATUS | 
 | (EFIAPI *EFI_IO_MAP) ( | 
 |     IN struct _EFI_DEVICE_IO_INTERFACE  *This, | 
 |     IN EFI_IO_OPERATION_TYPE            Operation, | 
 |     IN EFI_PHYSICAL_ADDRESS             *HostAddress, | 
 |     IN OUT UINTN                        *NumberOfBytes, | 
 |     OUT EFI_PHYSICAL_ADDRESS            *DeviceAddress, | 
 |     OUT VOID                            **Mapping | 
 |     ); | 
 |  | 
 | typedef | 
 | EFI_STATUS | 
 | (EFIAPI *EFI_IO_UNMAP) ( | 
 |     IN struct _EFI_DEVICE_IO_INTERFACE  *This, | 
 |     IN VOID                             *Mapping | 
 |     ); | 
 |  | 
 | typedef | 
 | EFI_STATUS | 
 | (EFIAPI *EFI_IO_ALLOCATE_BUFFER) ( | 
 |     IN struct _EFI_DEVICE_IO_INTERFACE  *This, | 
 |     IN EFI_ALLOCATE_TYPE                Type, | 
 |     IN EFI_MEMORY_TYPE                  MemoryType, | 
 |     IN UINTN                            Pages, | 
 |     IN OUT EFI_PHYSICAL_ADDRESS         *HostAddress | 
 |     ); | 
 |  | 
 | typedef | 
 | EFI_STATUS | 
 | (EFIAPI *EFI_IO_FLUSH) ( | 
 |     IN struct _EFI_DEVICE_IO_INTERFACE  *This | 
 |     ); | 
 |  | 
 | typedef | 
 | EFI_STATUS | 
 | (EFIAPI *EFI_IO_FREE_BUFFER) ( | 
 |     IN struct _EFI_DEVICE_IO_INTERFACE  *This, | 
 |     IN UINTN                            Pages, | 
 |     IN EFI_PHYSICAL_ADDRESS             HostAddress | 
 |     ); | 
 |  | 
 | typedef struct _EFI_DEVICE_IO_INTERFACE { | 
 |     EFI_IO_ACCESS                       Mem; | 
 |     EFI_IO_ACCESS                       Io; | 
 |     EFI_IO_ACCESS                       Pci; | 
 |     EFI_IO_MAP                          Map; | 
 |     EFI_PCI_DEVICE_PATH                 PciDevicePath; | 
 |     EFI_IO_UNMAP                        Unmap; | 
 |     EFI_IO_ALLOCATE_BUFFER              AllocateBuffer; | 
 |     EFI_IO_FLUSH                        Flush; | 
 |     EFI_IO_FREE_BUFFER                  FreeBuffer; | 
 | } EFI_DEVICE_IO_INTERFACE; | 
 |  | 
 |  | 
 | // | 
 | // Unicode Collation protocol | 
 | // | 
 |  | 
 | #define UNICODE_COLLATION_PROTOCOL \ | 
 |     { 0x1d85cd7f, 0xf43d, 0x11d2, {0x9a, 0xc,  0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} } | 
 |  | 
 | #define UNICODE_BYTE_ORDER_MARK       (CHAR16)(0xfeff) | 
 |  | 
 | INTERFACE_DECL(_EFI_UNICODE_COLLATION_INTERFACE); | 
 |  | 
 | typedef | 
 | INTN | 
 | (EFIAPI *EFI_UNICODE_STRICOLL) ( | 
 |     IN struct _EFI_UNICODE_COLLATION_INTERFACE  *This, | 
 |     IN CHAR16                         *s1, | 
 |     IN CHAR16                         *s2 | 
 |     ); | 
 |  | 
 | typedef | 
 | BOOLEAN | 
 | (EFIAPI *EFI_UNICODE_METAIMATCH) ( | 
 |     IN struct _EFI_UNICODE_COLLATION_INTERFACE  *This, | 
 |     IN CHAR16                         *String, | 
 |     IN CHAR16                         *Pattern | 
 |     ); | 
 |  | 
 | typedef | 
 | VOID | 
 | (EFIAPI *EFI_UNICODE_STRLWR) ( | 
 |     IN struct _EFI_UNICODE_COLLATION_INTERFACE  *This, | 
 |     IN OUT CHAR16                       *Str | 
 |     ); | 
 |  | 
 | typedef | 
 | VOID | 
 | (EFIAPI *EFI_UNICODE_STRUPR) ( | 
 |     IN struct _EFI_UNICODE_COLLATION_INTERFACE  *This, | 
 |     IN OUT CHAR16                       *Str | 
 |     ); | 
 |  | 
 | typedef | 
 | VOID | 
 | (EFIAPI *EFI_UNICODE_FATTOSTR) ( | 
 |     IN struct _EFI_UNICODE_COLLATION_INTERFACE  *This, | 
 |     IN UINTN                            FatSize, | 
 |     IN CHAR8                            *Fat, | 
 |     OUT CHAR16                          *String | 
 |     ); | 
 |  | 
 | typedef | 
 | BOOLEAN | 
 | (EFIAPI *EFI_UNICODE_STRTOFAT) ( | 
 |     IN struct _EFI_UNICODE_COLLATION_INTERFACE  *This, | 
 |     IN CHAR16                           *String, | 
 |     IN UINTN                            FatSize, | 
 |     OUT CHAR8                           *Fat | 
 |     ); | 
 |  | 
 |  | 
 | typedef struct _EFI_UNICODE_COLLATION_INTERFACE { | 
 |  | 
 |     // general | 
 |     EFI_UNICODE_STRICOLL                StriColl; | 
 |     EFI_UNICODE_METAIMATCH              MetaiMatch; | 
 |     EFI_UNICODE_STRLWR                  StrLwr; | 
 |     EFI_UNICODE_STRUPR                  StrUpr; | 
 |  | 
 |     // for supporting fat volumes | 
 |     EFI_UNICODE_FATTOSTR                FatToStr; | 
 |     EFI_UNICODE_STRTOFAT                StrToFat; | 
 |  | 
 |     CHAR8                               *SupportedLanguages; | 
 | } EFI_UNICODE_COLLATION_INTERFACE; | 
 |  | 
 | /* Graphics output protocol */ | 
 | #define EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID \ | 
 |   { \ | 
 |     0x9042a9de, 0x23dc, 0x4a38, {0x96, 0xfb, 0x7a, 0xde, 0xd0, 0x80, 0x51, 0x6a } \ | 
 |   } | 
 |  | 
 | typedef struct _EFI_GRAPHICS_OUTPUT_PROTOCOL EFI_GRAPHICS_OUTPUT_PROTOCOL; | 
 |  | 
 | typedef struct { | 
 |   UINT32            RedMask; | 
 |   UINT32            GreenMask; | 
 |   UINT32            BlueMask; | 
 |   UINT32            ReservedMask; | 
 | } EFI_PIXEL_BITMASK; | 
 |  | 
 | typedef enum { | 
 |   PixelRedGreenBlueReserved8BitPerColor, | 
 |   PixelBlueGreenRedReserved8BitPerColor, | 
 |   PixelBitMask, | 
 |   PixelBltOnly, | 
 |   PixelFormatMax | 
 | } EFI_GRAPHICS_PIXEL_FORMAT; | 
 |  | 
 | typedef struct { | 
 |   UINT32                     Version; | 
 |   UINT32                     HorizontalResolution; | 
 |   UINT32                     VerticalResolution; | 
 |   EFI_GRAPHICS_PIXEL_FORMAT  PixelFormat; | 
 |   EFI_PIXEL_BITMASK          PixelInformation; | 
 |   UINT32                     PixelsPerScanLine; | 
 | } EFI_GRAPHICS_OUTPUT_MODE_INFORMATION; | 
 |  | 
 | /** | 
 |   Return the current video mode information. | 
 |  | 
 |   @param  This       Protocol instance pointer. | 
 |   @param  ModeNumber The mode number to return information on. | 
 |   @param  SizeOfInfo A pointer to the size, in bytes, of the Info buffer. | 
 |   @param  Info       A pointer to callee allocated buffer that returns information about ModeNumber. | 
 |  | 
 |   @retval EFI_SUCCESS           Mode information returned. | 
 |   @retval EFI_BUFFER_TOO_SMALL  The Info buffer was too small. | 
 |   @retval EFI_DEVICE_ERROR      A hardware error occurred trying to retrieve the video mode. | 
 |   @retval EFI_NOT_STARTED       Video display is not initialized. Call SetMode () | 
 |   @retval EFI_INVALID_PARAMETER One of the input args was NULL. | 
 |  | 
 | **/ | 
 | typedef | 
 | EFI_STATUS | 
 | (EFIAPI *EFI_GRAPHICS_OUTPUT_PROTOCOL_QUERY_MODE) ( | 
 |   IN  EFI_GRAPHICS_OUTPUT_PROTOCOL          *This, | 
 |   IN  UINT32                                ModeNumber, | 
 |   OUT UINTN                                 *SizeOfInfo, | 
 |   OUT EFI_GRAPHICS_OUTPUT_MODE_INFORMATION  **Info | 
 |   ) | 
 | ; | 
 |  | 
 | /** | 
 |   Return the current video mode information. | 
 |  | 
 |   @param  This              Protocol instance pointer. | 
 |   @param  ModeNumber        The mode number to be set. | 
 |  | 
 |   @retval EFI_SUCCESS       Graphics mode was changed. | 
 |   @retval EFI_DEVICE_ERROR  The device had an error and could not complete the request. | 
 |   @retval EFI_UNSUPPORTED   ModeNumber is not supported by this device. | 
 |  | 
 | **/ | 
 | typedef | 
 | EFI_STATUS | 
 | (EFIAPI *EFI_GRAPHICS_OUTPUT_PROTOCOL_SET_MODE) ( | 
 |   IN  EFI_GRAPHICS_OUTPUT_PROTOCOL *This, | 
 |   IN  UINT32                       ModeNumber | 
 |   ); | 
 |  | 
 | typedef struct { | 
 |   UINT8 Blue; | 
 |   UINT8 Green; | 
 |   UINT8 Red; | 
 |   UINT8 Reserved; | 
 | } EFI_GRAPHICS_OUTPUT_BLT_PIXEL; | 
 |  | 
 | typedef union { | 
 |   EFI_GRAPHICS_OUTPUT_BLT_PIXEL Pixel; | 
 |   UINT32                        Raw; | 
 | } EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION; | 
 |  | 
 | typedef enum { | 
 |   EfiBltVideoFill, | 
 |   EfiBltVideoToBltBuffer, | 
 |   EfiBltBufferToVideo,  | 
 |   EfiBltVideoToVideo, | 
 |   EfiGraphicsOutputBltOperationMax | 
 | } EFI_GRAPHICS_OUTPUT_BLT_OPERATION; | 
 |  | 
 | /** | 
 |   The following table defines actions for BltOperations: | 
 |  | 
 |   <B>EfiBltVideoFill</B> - Write data from the  BltBuffer pixel (SourceX, SourceY)  | 
 |   directly to every pixel of the video display rectangle  | 
 |   (DestinationX, DestinationY) (DestinationX + Width, DestinationY + Height).  | 
 |   Only one pixel will be used from the BltBuffer. Delta is NOT used. | 
 |  | 
 |   <B>EfiBltVideoToBltBuffer</B> - Read data from the video display rectangle  | 
 |   (SourceX, SourceY) (SourceX + Width, SourceY + Height) and place it in  | 
 |   the BltBuffer rectangle (DestinationX, DestinationY )  | 
 |   (DestinationX + Width, DestinationY + Height). If DestinationX or  | 
 |   DestinationY is not zero then Delta must be set to the length in bytes  | 
 |   of a row in the BltBuffer. | 
 |  | 
 |   <B>EfiBltBufferToVideo</B> - Write data from the  BltBuffer rectangle  | 
 |   (SourceX, SourceY) (SourceX + Width, SourceY + Height) directly to the  | 
 |   video display rectangle (DestinationX, DestinationY)  | 
 |   (DestinationX + Width, DestinationY + Height). If SourceX or SourceY is  | 
 |   not zero then Delta must be set to the length in bytes of a row in the  | 
 |   BltBuffer. | 
 |  | 
 |   <B>EfiBltVideoToVideo</B> - Copy from the video display rectangle (SourceX, SourceY) | 
 |   (SourceX + Width, SourceY + Height) .to the video display rectangle  | 
 |   (DestinationX, DestinationY) (DestinationX + Width, DestinationY + Height).  | 
 |   The BltBuffer and Delta  are not used in this mode. | 
 |  | 
 |   @param  This         Protocol instance pointer. | 
 |   @param  BltBuffer    Buffer containing data to blit into video buffer. This | 
 |                        buffer has a size of Width*Height*sizeof(EFI_GRAPHICS_OUTPUT_BLT_PIXEL) | 
 |   @param  BltOperation Operation to perform on BlitBuffer and video memory | 
 |   @param  SourceX      X coordinate of source for the BltBuffer. | 
 |   @param  SourceY      Y coordinate of source for the BltBuffer. | 
 |   @param  DestinationX X coordinate of destination for the BltBuffer. | 
 |   @param  DestinationY Y coordinate of destination for the BltBuffer. | 
 |   @param  Width        Width of rectangle in BltBuffer in pixels. | 
 |   @param  Height       Hight of rectangle in BltBuffer in pixels. | 
 |   @param  Delta        OPTIONAL | 
 |  | 
 |   @retval EFI_SUCCESS           The Blt operation completed. | 
 |   @retval EFI_INVALID_PARAMETER BltOperation is not valid. | 
 |   @retval EFI_DEVICE_ERROR      A hardware error occured writting to the video buffer. | 
 |  | 
 | **/ | 
 | typedef | 
 | EFI_STATUS | 
 | (EFIAPI *EFI_GRAPHICS_OUTPUT_PROTOCOL_BLT) ( | 
 |   IN  EFI_GRAPHICS_OUTPUT_PROTOCOL            *This, | 
 |   IN  EFI_GRAPHICS_OUTPUT_BLT_PIXEL           *BltBuffer,   OPTIONAL | 
 |   IN  EFI_GRAPHICS_OUTPUT_BLT_OPERATION       BltOperation, | 
 |   IN  UINTN                                   SourceX, | 
 |   IN  UINTN                                   SourceY, | 
 |   IN  UINTN                                   DestinationX, | 
 |   IN  UINTN                                   DestinationY, | 
 |   IN  UINTN                                   Width, | 
 |   IN  UINTN                                   Height, | 
 |   IN  UINTN                                   Delta         OPTIONAL | 
 |   ); | 
 |  | 
 | typedef struct { | 
 |   UINT32                                 MaxMode; | 
 |   UINT32                                 Mode; | 
 |   EFI_GRAPHICS_OUTPUT_MODE_INFORMATION   *Info; | 
 |   UINTN                                  SizeOfInfo; | 
 |   EFI_PHYSICAL_ADDRESS                   FrameBufferBase; | 
 |   UINTN                                  FrameBufferSize; | 
 | } EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE; | 
 |  | 
 | struct _EFI_GRAPHICS_OUTPUT_PROTOCOL { | 
 |   EFI_GRAPHICS_OUTPUT_PROTOCOL_QUERY_MODE  QueryMode; | 
 |   EFI_GRAPHICS_OUTPUT_PROTOCOL_SET_MODE    SetMode; | 
 |   EFI_GRAPHICS_OUTPUT_PROTOCOL_BLT         Blt; | 
 |   EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE        *Mode; | 
 | }; | 
 |  | 
 | INTERFACE_DECL(_EFI_SERVICE_BINDING); | 
 |  | 
 | typedef | 
 | EFI_STATUS | 
 | (EFIAPI *EFI_SERVICE_BINDING_CREATE_CHILD) ( | 
 |     IN struct _EFI_SERVICE_BINDING *This, | 
 |     IN EFI_HANDLE                  *ChildHandle | 
 |     ); | 
 |  | 
 | typedef | 
 | EFI_STATUS | 
 | (EFIAPI *EFI_SERVICE_BINDING_DESTROY_CHILD) ( | 
 |     IN struct _EFI_SERVICE_BINDING *This, | 
 |     IN EFI_HANDLE                  ChildHandle | 
 |     ); | 
 |  | 
 | typedef struct _EFI_SERVICE_BINDING { | 
 |     EFI_SERVICE_BINDING_CREATE_CHILD  CreateChild; | 
 |     EFI_SERVICE_BINDING_DESTROY_CHILD DestroyChild; | 
 | } EFI_SERVICE_BINDING; | 
 |  | 
 | #endif | 
 |  |