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