1 /* $NetBSD: efiprot.h,v 1.1.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