Home | History | Annotate | Line # | Download | only in inc
efiprot.h revision 1.1
      1 /*	$NetBSD: efiprot.h,v 1.1 2014/04/01 16:16:07 jakllsch Exp $	*/
      2 
      3 #ifndef _EFI_PROT_H
      4 #define _EFI_PROT_H
      5 
      6 /*++
      7 
      8 Copyright (c) 1998  Intel Corporation
      9 
     10 Module Name:
     11 
     12     efiprot.h
     13 
     14 Abstract:
     15 
     16     EFI Protocols
     17 
     18 
     19 
     20 Revision History
     21 
     22 --*/
     23 
     24 //
     25 //  FPSWA library protocol
     26 //
     27 #define FPSWA_PROTOCOL          \
     28     { 0xc41b6531, 0x97b9, 0x11d3, {0x9a, 0x29, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
     29 
     30 //
     31 // Device Path protocol
     32 //
     33 
     34 #define DEVICE_PATH_PROTOCOL    \
     35     { 0x9576e91, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
     36 
     37 
     38 //
     39 // Block IO protocol
     40 //
     41 
     42 #define BLOCK_IO_PROTOCOL \
     43     { 0x964e5b21, 0x6459, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
     44 #define EFI_BLOCK_IO_INTERFACE_REVISION   0x00010000
     45 #define EFI_BLOCK_IO_INTERFACE_REVISION2  0x00020001
     46 #define EFI_BLOCK_IO_INTERFACE_REVISION3  ((2<<16) | 31)
     47 
     48 INTERFACE_DECL(_EFI_BLOCK_IO);
     49 
     50 typedef
     51 EFI_STATUS
     52 (EFIAPI *EFI_BLOCK_RESET) (
     53     IN struct _EFI_BLOCK_IO     *This,
     54     IN BOOLEAN                  ExtendedVerification
     55     );
     56 
     57 typedef
     58 EFI_STATUS
     59 (EFIAPI *EFI_BLOCK_READ) (
     60     IN struct _EFI_BLOCK_IO     *This,
     61     IN UINT32                   MediaId,
     62     IN EFI_LBA                  LBA,
     63     IN UINTN                    BufferSize,
     64     OUT VOID                    *Buffer
     65     );
     66 
     67 
     68 typedef
     69 EFI_STATUS
     70 (EFIAPI *EFI_BLOCK_WRITE) (
     71     IN struct _EFI_BLOCK_IO     *This,
     72     IN UINT32                   MediaId,
     73     IN EFI_LBA                  LBA,
     74     IN UINTN                    BufferSize,
     75     IN VOID                     *Buffer
     76     );
     77 
     78 
     79 typedef
     80 EFI_STATUS
     81 (EFIAPI *EFI_BLOCK_FLUSH) (
     82     IN struct _EFI_BLOCK_IO     *This
     83     );
     84 
     85 
     86 
     87 typedef struct {
     88     UINT32              MediaId;
     89     BOOLEAN             RemovableMedia;
     90     BOOLEAN             MediaPresent;
     91 
     92     BOOLEAN             LogicalPartition;
     93     BOOLEAN             ReadOnly;
     94     BOOLEAN             WriteCaching;
     95 
     96     UINT32              BlockSize;
     97     UINT32              IoAlign;
     98 
     99     EFI_LBA             LastBlock;
    100 
    101     /* revision 2 */
    102     EFI_LBA             LowestAlignedLba;
    103     UINT32              LogicalBlocksPerPhysicalBlock;
    104     /* revision 3 */
    105     UINT32              OptimalTransferLengthGranularity;
    106 } EFI_BLOCK_IO_MEDIA;
    107 
    108 typedef struct _EFI_BLOCK_IO {
    109     UINT64                  Revision;
    110 
    111     EFI_BLOCK_IO_MEDIA      *Media;
    112 
    113     EFI_BLOCK_RESET         Reset;
    114     EFI_BLOCK_READ          ReadBlocks;
    115     EFI_BLOCK_WRITE         WriteBlocks;
    116     EFI_BLOCK_FLUSH         FlushBlocks;
    117 
    118 } EFI_BLOCK_IO;
    119 
    120 
    121 
    122 //
    123 // Disk Block IO protocol
    124 //
    125 
    126 #define DISK_IO_PROTOCOL \
    127     { 0xce345171, 0xba0b, 0x11d2,  {0x8e, 0x4f, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
    128 #define EFI_DISK_IO_INTERFACE_REVISION   0x00010000
    129 
    130 INTERFACE_DECL(_EFI_DISK_IO);
    131 
    132 typedef
    133 EFI_STATUS
    134 (EFIAPI *EFI_DISK_READ) (
    135     IN struct _EFI_DISK_IO      *This,
    136     IN UINT32                   MediaId,
    137     IN UINT64                   Offset,
    138     IN UINTN                    BufferSize,
    139     OUT VOID                    *Buffer
    140     );
    141 
    142 
    143 typedef
    144 EFI_STATUS
    145 (EFIAPI *EFI_DISK_WRITE) (
    146     IN struct _EFI_DISK_IO      *This,
    147     IN UINT32                   MediaId,
    148     IN UINT64                   Offset,
    149     IN UINTN                    BufferSize,
    150     IN VOID                     *Buffer
    151     );
    152 
    153 
    154 typedef struct _EFI_DISK_IO {
    155     UINT64              Revision;
    156     EFI_DISK_READ       ReadDisk;
    157     EFI_DISK_WRITE      WriteDisk;
    158 } EFI_DISK_IO;
    159 
    160 
    161 //
    162 // Simple file system protocol
    163 //
    164 
    165 #define SIMPLE_FILE_SYSTEM_PROTOCOL \
    166     { 0x964e5b22, 0x6459, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
    167 
    168 INTERFACE_DECL(_EFI_FILE_IO_INTERFACE);
    169 INTERFACE_DECL(_EFI_FILE_HANDLE);
    170 
    171 typedef
    172 EFI_STATUS
    173 (EFIAPI *EFI_VOLUME_OPEN) (
    174     IN struct _EFI_FILE_IO_INTERFACE    *This,
    175     OUT struct _EFI_FILE_HANDLE         **Root
    176     );
    177 
    178 #define EFI_FILE_IO_INTERFACE_REVISION   0x00010000
    179 
    180 typedef struct _EFI_FILE_IO_INTERFACE {
    181     UINT64                  Revision;
    182     EFI_VOLUME_OPEN         OpenVolume;
    183 } EFI_FILE_IO_INTERFACE;
    184 
    185 //
    186 //
    187 //
    188 
    189 typedef
    190 EFI_STATUS
    191 (EFIAPI *EFI_FILE_OPEN) (
    192     IN struct _EFI_FILE_HANDLE  *File,
    193     OUT struct _EFI_FILE_HANDLE **NewHandle,
    194     IN CHAR16                   *FileName,
    195     IN UINT64                   OpenMode,
    196     IN UINT64                   Attributes
    197     );
    198 
    199 // Open modes
    200 #define EFI_FILE_MODE_READ      0x0000000000000001
    201 #define EFI_FILE_MODE_WRITE     0x0000000000000002
    202 #define EFI_FILE_MODE_CREATE    0x8000000000000000
    203 
    204 // File attributes
    205 #define EFI_FILE_READ_ONLY      0x0000000000000001
    206 #define EFI_FILE_HIDDEN         0x0000000000000002
    207 #define EFI_FILE_SYSTEM         0x0000000000000004
    208 #define EFI_FILE_RESERVIED      0x0000000000000008
    209 #define EFI_FILE_DIRECTORY      0x0000000000000010
    210 #define EFI_FILE_ARCHIVE        0x0000000000000020
    211 #define EFI_FILE_VALID_ATTR     0x0000000000000037
    212 
    213 typedef
    214 EFI_STATUS
    215 (EFIAPI *EFI_FILE_CLOSE) (
    216     IN struct _EFI_FILE_HANDLE  *File
    217     );
    218 
    219 typedef
    220 EFI_STATUS
    221 (EFIAPI *EFI_FILE_DELETE) (
    222     IN struct _EFI_FILE_HANDLE  *File
    223     );
    224 
    225 typedef
    226 EFI_STATUS
    227 (EFIAPI *EFI_FILE_READ) (
    228     IN struct _EFI_FILE_HANDLE  *File,
    229     IN OUT UINTN                *BufferSize,
    230     OUT VOID                    *Buffer
    231     );
    232 
    233 typedef
    234 EFI_STATUS
    235 (EFIAPI *EFI_FILE_WRITE) (
    236     IN struct _EFI_FILE_HANDLE  *File,
    237     IN OUT UINTN                *BufferSize,
    238     IN VOID                     *Buffer
    239     );
    240 
    241 typedef
    242 EFI_STATUS
    243 (EFIAPI *EFI_FILE_SET_POSITION) (
    244     IN struct _EFI_FILE_HANDLE  *File,
    245     IN UINT64                   Position
    246     );
    247 
    248 typedef
    249 EFI_STATUS
    250 (EFIAPI *EFI_FILE_GET_POSITION) (
    251     IN struct _EFI_FILE_HANDLE  *File,
    252     OUT UINT64                  *Position
    253     );
    254 
    255 typedef
    256 EFI_STATUS
    257 (EFIAPI *EFI_FILE_GET_INFO) (
    258     IN struct _EFI_FILE_HANDLE  *File,
    259     IN EFI_GUID                 *InformationType,
    260     IN OUT UINTN                *BufferSize,
    261     OUT VOID                    *Buffer
    262     );
    263 
    264 typedef
    265 EFI_STATUS
    266 (EFIAPI *EFI_FILE_SET_INFO) (
    267     IN struct _EFI_FILE_HANDLE  *File,
    268     IN EFI_GUID                 *InformationType,
    269     IN UINTN                    BufferSize,
    270     IN VOID                     *Buffer
    271     );
    272 
    273 typedef
    274 EFI_STATUS
    275 (EFIAPI *EFI_FILE_FLUSH) (
    276     IN struct _EFI_FILE_HANDLE  *File
    277     );
    278 
    279 
    280 
    281 #define EFI_FILE_HANDLE_REVISION         0x00010000
    282 typedef struct _EFI_FILE_HANDLE {
    283     UINT64                  Revision;
    284     EFI_FILE_OPEN           Open;
    285     EFI_FILE_CLOSE          Close;
    286     EFI_FILE_DELETE         Delete;
    287     EFI_FILE_READ           Read;
    288     EFI_FILE_WRITE          Write;
    289     EFI_FILE_GET_POSITION   GetPosition;
    290     EFI_FILE_SET_POSITION   SetPosition;
    291     EFI_FILE_GET_INFO       GetInfo;
    292     EFI_FILE_SET_INFO       SetInfo;
    293     EFI_FILE_FLUSH          Flush;
    294 } EFI_FILE, *EFI_FILE_HANDLE;
    295 
    296 
    297 //
    298 // File information types
    299 //
    300 
    301 #define EFI_FILE_INFO_ID   \
    302     { 0x9576e92, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
    303 
    304 typedef struct {
    305     UINT64                  Size;
    306     UINT64                  FileSize;
    307     UINT64                  PhysicalSize;
    308     EFI_TIME                CreateTime;
    309     EFI_TIME                LastAccessTime;
    310     EFI_TIME                ModificationTime;
    311     UINT64                  Attribute;
    312     CHAR16                  FileName[1];
    313 } EFI_FILE_INFO;
    314 
    315 //
    316 // The FileName field of the EFI_FILE_INFO data structure is variable length.
    317 // Whenever code needs to know the size of the EFI_FILE_INFO data structure, it needs to
    318 // be the size of the data structure without the FileName field.  The following macro
    319 // computes this size correctly no matter how big the FileName array is declared.
    320 // This is required to make the EFI_FILE_INFO data structure ANSI compilant.
    321 //
    322 
    323 #define SIZE_OF_EFI_FILE_INFO EFI_FIELD_OFFSET(EFI_FILE_INFO,FileName)
    324 
    325 #define EFI_FILE_SYSTEM_INFO_ID    \
    326     { 0x9576e93, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
    327 
    328 typedef struct {
    329     UINT64                  Size;
    330     BOOLEAN                 ReadOnly;
    331     UINT64                  VolumeSize;
    332     UINT64                  FreeSpace;
    333     UINT32                  BlockSize;
    334     CHAR16                  VolumeLabel[1];
    335 } EFI_FILE_SYSTEM_INFO;
    336 
    337 //
    338 // The VolumeLabel field of the EFI_FILE_SYSTEM_INFO data structure is variable length.
    339 // Whenever code needs to know the size of the EFI_FILE_SYSTEM_INFO data structure, it needs
    340 // to be the size of the data structure without the VolumeLable field.  The following macro
    341 // computes this size correctly no matter how big the VolumeLable array is declared.
    342 // This is required to make the EFI_FILE_SYSTEM_INFO data structure ANSI compilant.
    343 //
    344 
    345 #define SIZE_OF_EFI_FILE_SYSTEM_INFO EFI_FIELD_OFFSET(EFI_FILE_SYSTEM_INFO,VolumeLabel)
    346 
    347 #define EFI_FILE_SYSTEM_VOLUME_LABEL_INFO_ID    \
    348     { 0xDB47D7D3,0xFE81, 0x11d3, {0x9A, 0x35, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D} }
    349 
    350 typedef struct {
    351     CHAR16                  VolumeLabel[1];
    352 } EFI_FILE_SYSTEM_VOLUME_LABEL_INFO;
    353 
    354 #define SIZE_OF_EFI_FILE_SYSTEM_VOLUME_LABEL_INFO EFI_FIELD_OFFSET(EFI_FILE_SYSTEM_VOLUME_LABEL_INFO,VolumeLabel)
    355 
    356 //
    357 // Load file protocol
    358 //
    359 
    360 
    361 #define LOAD_FILE_PROTOCOL \
    362     { 0x56EC3091, 0x954C, 0x11d2, {0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B} }
    363 
    364 INTERFACE_DECL(_EFI_LOAD_FILE_INTERFACE);
    365 
    366 typedef
    367 EFI_STATUS
    368 (EFIAPI *EFI_LOAD_FILE) (
    369     IN struct _EFI_LOAD_FILE_INTERFACE  *This,
    370     IN EFI_DEVICE_PATH                  *FilePath,
    371     IN BOOLEAN                          BootPolicy,
    372     IN OUT UINTN                        *BufferSize,
    373     IN VOID                             *Buffer OPTIONAL
    374     );
    375 
    376 typedef struct _EFI_LOAD_FILE_INTERFACE {
    377     EFI_LOAD_FILE                       LoadFile;
    378 } EFI_LOAD_FILE_INTERFACE;
    379 
    380 
    381 //
    382 // Device IO protocol
    383 //
    384 
    385 #define DEVICE_IO_PROTOCOL \
    386     { 0xaf6ac311, 0x84c3, 0x11d2, {0x8e, 0x3c, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
    387 
    388 INTERFACE_DECL(_EFI_DEVICE_IO_INTERFACE);
    389 
    390 typedef enum {
    391     IO_UINT8,
    392     IO_UINT16,
    393     IO_UINT32,
    394     IO_UINT64,
    395 //
    396 // Specification Change: Copy from MMIO to MMIO vs. MMIO to buffer, buffer to MMIO
    397 //
    398     MMIO_COPY_UINT8,
    399     MMIO_COPY_UINT16,
    400     MMIO_COPY_UINT32,
    401     MMIO_COPY_UINT64
    402 } EFI_IO_WIDTH;
    403 
    404 #define EFI_PCI_ADDRESS(_bus,_dev,_func) \
    405     ( (UINT64) ( (((UINTN)_bus) << 24) + (((UINTN)_dev) << 16) + (((UINTN)_func) << 8) ) )
    406 
    407 
    408 typedef
    409 EFI_STATUS
    410 (EFIAPI *EFI_DEVICE_IO) (
    411     IN struct _EFI_DEVICE_IO_INTERFACE *This,
    412     IN EFI_IO_WIDTH                 Width,
    413     IN UINT64                       Address,
    414     IN UINTN                        Count,
    415     IN OUT VOID                     *Buffer
    416     );
    417 
    418 typedef struct {
    419     EFI_DEVICE_IO                   Read;
    420     EFI_DEVICE_IO                   Write;
    421 } EFI_IO_ACCESS;
    422 
    423 typedef
    424 EFI_STATUS
    425 (EFIAPI *EFI_PCI_DEVICE_PATH) (
    426     IN struct _EFI_DEVICE_IO_INTERFACE  *This,
    427     IN UINT64                           Address,
    428     IN OUT EFI_DEVICE_PATH              **PciDevicePath
    429     );
    430 
    431 typedef enum {
    432     EfiBusMasterRead,
    433     EfiBusMasterWrite,
    434     EfiBusMasterCommonBuffer
    435 } EFI_IO_OPERATION_TYPE;
    436 
    437 typedef
    438 EFI_STATUS
    439 (EFIAPI *EFI_IO_MAP) (
    440     IN struct _EFI_DEVICE_IO_INTERFACE  *This,
    441     IN EFI_IO_OPERATION_TYPE            Operation,
    442     IN EFI_PHYSICAL_ADDRESS             *HostAddress,
    443     IN OUT UINTN                        *NumberOfBytes,
    444     OUT EFI_PHYSICAL_ADDRESS            *DeviceAddress,
    445     OUT VOID                            **Mapping
    446     );
    447 
    448 typedef
    449 EFI_STATUS
    450 (EFIAPI *EFI_IO_UNMAP) (
    451     IN struct _EFI_DEVICE_IO_INTERFACE  *This,
    452     IN VOID                             *Mapping
    453     );
    454 
    455 typedef
    456 EFI_STATUS
    457 (EFIAPI *EFI_IO_ALLOCATE_BUFFER) (
    458     IN struct _EFI_DEVICE_IO_INTERFACE  *This,
    459     IN EFI_ALLOCATE_TYPE                Type,
    460     IN EFI_MEMORY_TYPE                  MemoryType,
    461     IN UINTN                            Pages,
    462     IN OUT EFI_PHYSICAL_ADDRESS         *HostAddress
    463     );
    464 
    465 typedef
    466 EFI_STATUS
    467 (EFIAPI *EFI_IO_FLUSH) (
    468     IN struct _EFI_DEVICE_IO_INTERFACE  *This
    469     );
    470 
    471 typedef
    472 EFI_STATUS
    473 (EFIAPI *EFI_IO_FREE_BUFFER) (
    474     IN struct _EFI_DEVICE_IO_INTERFACE  *This,
    475     IN UINTN                            Pages,
    476     IN EFI_PHYSICAL_ADDRESS             HostAddress
    477     );
    478 
    479 typedef struct _EFI_DEVICE_IO_INTERFACE {
    480     EFI_IO_ACCESS                       Mem;
    481     EFI_IO_ACCESS                       Io;
    482     EFI_IO_ACCESS                       Pci;
    483     EFI_IO_MAP                          Map;
    484     EFI_PCI_DEVICE_PATH                 PciDevicePath;
    485     EFI_IO_UNMAP                        Unmap;
    486     EFI_IO_ALLOCATE_BUFFER              AllocateBuffer;
    487     EFI_IO_FLUSH                        Flush;
    488     EFI_IO_FREE_BUFFER                  FreeBuffer;
    489 } EFI_DEVICE_IO_INTERFACE;
    490 
    491 
    492 //
    493 // Unicode Collation protocol
    494 //
    495 
    496 #define UNICODE_COLLATION_PROTOCOL \
    497     { 0x1d85cd7f, 0xf43d, 0x11d2, {0x9a, 0xc,  0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
    498 
    499 #define UNICODE_BYTE_ORDER_MARK       (CHAR16)(0xfeff)
    500 
    501 INTERFACE_DECL(_EFI_UNICODE_COLLATION_INTERFACE);
    502 
    503 typedef
    504 INTN
    505 (EFIAPI *EFI_UNICODE_STRICOLL) (
    506     IN struct _EFI_UNICODE_COLLATION_INTERFACE  *This,
    507     IN CHAR16                         *s1,
    508     IN CHAR16                         *s2
    509     );
    510 
    511 typedef
    512 BOOLEAN
    513 (EFIAPI *EFI_UNICODE_METAIMATCH) (
    514     IN struct _EFI_UNICODE_COLLATION_INTERFACE  *This,
    515     IN CHAR16                         *String,
    516     IN CHAR16                         *Pattern
    517     );
    518 
    519 typedef
    520 VOID
    521 (EFIAPI *EFI_UNICODE_STRLWR) (
    522     IN struct _EFI_UNICODE_COLLATION_INTERFACE  *This,
    523     IN OUT CHAR16                       *Str
    524     );
    525 
    526 typedef
    527 VOID
    528 (EFIAPI *EFI_UNICODE_STRUPR) (
    529     IN struct _EFI_UNICODE_COLLATION_INTERFACE  *This,
    530     IN OUT CHAR16                       *Str
    531     );
    532 
    533 typedef
    534 VOID
    535 (EFIAPI *EFI_UNICODE_FATTOSTR) (
    536     IN struct _EFI_UNICODE_COLLATION_INTERFACE  *This,
    537     IN UINTN                            FatSize,
    538     IN CHAR8                            *Fat,
    539     OUT CHAR16                          *String
    540     );
    541 
    542 typedef
    543 BOOLEAN
    544 (EFIAPI *EFI_UNICODE_STRTOFAT) (
    545     IN struct _EFI_UNICODE_COLLATION_INTERFACE  *This,
    546     IN CHAR16                           *String,
    547     IN UINTN                            FatSize,
    548     OUT CHAR8                           *Fat
    549     );
    550 
    551 
    552 typedef struct _EFI_UNICODE_COLLATION_INTERFACE {
    553 
    554     // general
    555     EFI_UNICODE_STRICOLL                StriColl;
    556     EFI_UNICODE_METAIMATCH              MetaiMatch;
    557     EFI_UNICODE_STRLWR                  StrLwr;
    558     EFI_UNICODE_STRUPR                  StrUpr;
    559 
    560     // for supporting fat volumes
    561     EFI_UNICODE_FATTOSTR                FatToStr;
    562     EFI_UNICODE_STRTOFAT                StrToFat;
    563 
    564     CHAR8                               *SupportedLanguages;
    565 } EFI_UNICODE_COLLATION_INTERFACE;
    566 
    567 /* Graphics output protocol */
    568 #define EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID \
    569   { \
    570     0x9042a9de, 0x23dc, 0x4a38, {0x96, 0xfb, 0x7a, 0xde, 0xd0, 0x80, 0x51, 0x6a } \
    571   }
    572 
    573 typedef struct _EFI_GRAPHICS_OUTPUT_PROTOCOL EFI_GRAPHICS_OUTPUT_PROTOCOL;
    574 
    575 typedef struct {
    576   UINT32            RedMask;
    577   UINT32            GreenMask;
    578   UINT32            BlueMask;
    579   UINT32            ReservedMask;
    580 } EFI_PIXEL_BITMASK;
    581 
    582 typedef enum {
    583   PixelRedGreenBlueReserved8BitPerColor,
    584   PixelBlueGreenRedReserved8BitPerColor,
    585   PixelBitMask,
    586   PixelBltOnly,
    587   PixelFormatMax
    588 } EFI_GRAPHICS_PIXEL_FORMAT;
    589 
    590 typedef struct {
    591   UINT32                     Version;
    592   UINT32                     HorizontalResolution;
    593   UINT32                     VerticalResolution;
    594   EFI_GRAPHICS_PIXEL_FORMAT  PixelFormat;
    595   EFI_PIXEL_BITMASK          PixelInformation;
    596   UINT32                     PixelsPerScanLine;
    597 } EFI_GRAPHICS_OUTPUT_MODE_INFORMATION;
    598 
    599 /**
    600   Return the current video mode information.
    601 
    602   @param  This       Protocol instance pointer.
    603   @param  ModeNumber The mode number to return information on.
    604   @param  SizeOfInfo A pointer to the size, in bytes, of the Info buffer.
    605   @param  Info       A pointer to callee allocated buffer that returns information about ModeNumber.
    606 
    607   @retval EFI_SUCCESS           Mode information returned.
    608   @retval EFI_BUFFER_TOO_SMALL  The Info buffer was too small.
    609   @retval EFI_DEVICE_ERROR      A hardware error occurred trying to retrieve the video mode.
    610   @retval EFI_NOT_STARTED       Video display is not initialized. Call SetMode ()
    611   @retval EFI_INVALID_PARAMETER One of the input args was NULL.
    612 
    613 **/
    614 typedef
    615 EFI_STATUS
    616 (EFIAPI *EFI_GRAPHICS_OUTPUT_PROTOCOL_QUERY_MODE) (
    617   IN  EFI_GRAPHICS_OUTPUT_PROTOCOL          *This,
    618   IN  UINT32                                ModeNumber,
    619   OUT UINTN                                 *SizeOfInfo,
    620   OUT EFI_GRAPHICS_OUTPUT_MODE_INFORMATION  **Info
    621   )
    622 ;
    623 
    624 /**
    625   Return the current video mode information.
    626 
    627   @param  This              Protocol instance pointer.
    628   @param  ModeNumber        The mode number to be set.
    629 
    630   @retval EFI_SUCCESS       Graphics mode was changed.
    631   @retval EFI_DEVICE_ERROR  The device had an error and could not complete the request.
    632   @retval EFI_UNSUPPORTED   ModeNumber is not supported by this device.
    633 
    634 **/
    635 typedef
    636 EFI_STATUS
    637 (EFIAPI *EFI_GRAPHICS_OUTPUT_PROTOCOL_SET_MODE) (
    638   IN  EFI_GRAPHICS_OUTPUT_PROTOCOL *This,
    639   IN  UINT32                       ModeNumber
    640   );
    641 
    642 typedef struct {
    643   UINT8 Blue;
    644   UINT8 Green;
    645   UINT8 Red;
    646   UINT8 Reserved;
    647 } EFI_GRAPHICS_OUTPUT_BLT_PIXEL;
    648 
    649 typedef union {
    650   EFI_GRAPHICS_OUTPUT_BLT_PIXEL Pixel;
    651   UINT32                        Raw;
    652 } EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION;
    653 
    654 typedef enum {
    655   EfiBltVideoFill,
    656   EfiBltVideoToBltBuffer,
    657   EfiBltBufferToVideo,
    658   EfiBltVideoToVideo,
    659   EfiGraphicsOutputBltOperationMax
    660 } EFI_GRAPHICS_OUTPUT_BLT_OPERATION;
    661 
    662 /**
    663   The following table defines actions for BltOperations:
    664 
    665   <B>EfiBltVideoFill</B> - Write data from the  BltBuffer pixel (SourceX, SourceY)
    666   directly to every pixel of the video display rectangle
    667   (DestinationX, DestinationY) (DestinationX + Width, DestinationY + Height).
    668   Only one pixel will be used from the BltBuffer. Delta is NOT used.
    669 
    670   <B>EfiBltVideoToBltBuffer</B> - Read data from the video display rectangle
    671   (SourceX, SourceY) (SourceX + Width, SourceY + Height) and place it in
    672   the BltBuffer rectangle (DestinationX, DestinationY )
    673   (DestinationX + Width, DestinationY + Height). If DestinationX or
    674   DestinationY is not zero then Delta must be set to the length in bytes
    675   of a row in the BltBuffer.
    676 
    677   <B>EfiBltBufferToVideo</B> - Write data from the  BltBuffer rectangle
    678   (SourceX, SourceY) (SourceX + Width, SourceY + Height) directly to the
    679   video display rectangle (DestinationX, DestinationY)
    680   (DestinationX + Width, DestinationY + Height). If SourceX or SourceY is
    681   not zero then Delta must be set to the length in bytes of a row in the
    682   BltBuffer.
    683 
    684   <B>EfiBltVideoToVideo</B> - Copy from the video display rectangle (SourceX, SourceY)
    685   (SourceX + Width, SourceY + Height) .to the video display rectangle
    686   (DestinationX, DestinationY) (DestinationX + Width, DestinationY + Height).
    687   The BltBuffer and Delta  are not used in this mode.
    688 
    689   @param  This         Protocol instance pointer.
    690   @param  BltBuffer    Buffer containing data to blit into video buffer. This
    691                        buffer has a size of Width*Height*sizeof(EFI_GRAPHICS_OUTPUT_BLT_PIXEL)
    692   @param  BltOperation Operation to perform on BlitBuffer and video memory
    693   @param  SourceX      X coordinate of source for the BltBuffer.
    694   @param  SourceY      Y coordinate of source for the BltBuffer.
    695   @param  DestinationX X coordinate of destination for the BltBuffer.
    696   @param  DestinationY Y coordinate of destination for the BltBuffer.
    697   @param  Width        Width of rectangle in BltBuffer in pixels.
    698   @param  Height       Hight of rectangle in BltBuffer in pixels.
    699   @param  Delta        OPTIONAL
    700 
    701   @retval EFI_SUCCESS           The Blt operation completed.
    702   @retval EFI_INVALID_PARAMETER BltOperation is not valid.
    703   @retval EFI_DEVICE_ERROR      A hardware error occured writting to the video buffer.
    704 
    705 **/
    706 typedef
    707 EFI_STATUS
    708 (EFIAPI *EFI_GRAPHICS_OUTPUT_PROTOCOL_BLT) (
    709   IN  EFI_GRAPHICS_OUTPUT_PROTOCOL            *This,
    710   IN  EFI_GRAPHICS_OUTPUT_BLT_PIXEL           *BltBuffer,   OPTIONAL
    711   IN  EFI_GRAPHICS_OUTPUT_BLT_OPERATION       BltOperation,
    712   IN  UINTN                                   SourceX,
    713   IN  UINTN                                   SourceY,
    714   IN  UINTN                                   DestinationX,
    715   IN  UINTN                                   DestinationY,
    716   IN  UINTN                                   Width,
    717   IN  UINTN                                   Height,
    718   IN  UINTN                                   Delta         OPTIONAL
    719   );
    720 
    721 typedef struct {
    722   UINT32                                 MaxMode;
    723   UINT32                                 Mode;
    724   EFI_GRAPHICS_OUTPUT_MODE_INFORMATION   *Info;
    725   UINTN                                  SizeOfInfo;
    726   EFI_PHYSICAL_ADDRESS                   FrameBufferBase;
    727   UINTN                                  FrameBufferSize;
    728 } EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE;
    729 
    730 struct _EFI_GRAPHICS_OUTPUT_PROTOCOL {
    731   EFI_GRAPHICS_OUTPUT_PROTOCOL_QUERY_MODE  QueryMode;
    732   EFI_GRAPHICS_OUTPUT_PROTOCOL_SET_MODE    SetMode;
    733   EFI_GRAPHICS_OUTPUT_PROTOCOL_BLT         Blt;
    734   EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE        *Mode;
    735 };
    736 
    737 INTERFACE_DECL(_EFI_SERVICE_BINDING);
    738 
    739 typedef
    740 EFI_STATUS
    741 (EFIAPI *EFI_SERVICE_BINDING_CREATE_CHILD) (
    742     IN struct _EFI_SERVICE_BINDING *This,
    743     IN EFI_HANDLE                  *ChildHandle
    744     );
    745 
    746 typedef
    747 EFI_STATUS
    748 (EFIAPI *EFI_SERVICE_BINDING_DESTROY_CHILD) (
    749     IN struct _EFI_SERVICE_BINDING *This,
    750     IN EFI_HANDLE                  ChildHandle
    751     );
    752 
    753 typedef struct _EFI_SERVICE_BINDING {
    754     EFI_SERVICE_BINDING_CREATE_CHILD  CreateChild;
    755     EFI_SERVICE_BINDING_DESTROY_CHILD DestroyChild;
    756 } EFI_SERVICE_BINDING;
    757 
    758 #endif
    759 
    760