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 // Hash Protocol 551 // 552 #define HASH_PROTOCOL \ 553 { 0xC5184932, 0xDBA5, 0x46DB, { 0xA5, 0xBA, 0xCC, 0x0B, 0xDA, 0x9C, 0x14, 0x35 } } 554 555 #define EFI_HASH_ALGORITHM_SHA1 \ 556 { 0x2AE9D80F, 0x3FB2, 0x4095, { 0xB7, 0xB1, 0xE9, 0x31, 0x57, 0xB9, 0x46, 0xB6 } } // Deprecated 557 558 #define EFI_HASH_ALGORITHM_SHA224 \ 559 { 0x8DF01A06, 0x9BD5, 0x4BF7, { 0xB0, 0x21, 0xDB, 0x4F, 0xD9, 0xCC, 0xF4, 0x5B } } // Deprecated 560 561 #define EFI_HASH_ALGORITHM_SHA256 \ 562 { 0x51AA59DE, 0xFDF2, 0x4EA3, { 0xBC, 0x63, 0x87, 0x5F, 0xB7, 0x84, 0x2E, 0xE9 } } // Deprecated 563 564 #define EFI_HASH_ALGORITHM_SHA384 \ 565 { 0xEFA96432, 0xDE33, 0x4DD2, { 0xAE, 0xE6, 0x32, 0x8C, 0x33, 0xDF, 0x77, 0x7A } } // Deprecated 566 567 #define EFI_HASH_ALGORITHM_SHA512 \ 568 { 0xCAA4381E, 0x750C, 0x4770, { 0xB8, 0x70, 0x7A, 0x23, 0xB4, 0xE4, 0x21, 0x30 } } // Deprecated 569 570 #define EFI_HASH_ALGORITHM_MD5 \ 571 { 0x0AF7C79C, 0x65B5, 0x4319, { 0xB0, 0xAE, 0x44, 0xEC, 0x48, 0x4E, 0x4A, 0xD7 } } // Deprecated 572 573 #define EFI_HASH_ALGORITHM_SHA1_NOPAD \ 574 { 0x24C5DC2F, 0x53E2, 0x40CA, { 0x9E, 0xD6, 0xA5, 0xD9, 0xA4, 0x9F, 0x46, 0x3B } } 575 576 #define EFI_HASH_ALGORITHM_SHA256_NOPAD \ 577 { 0x8628752A, 0x6CB7, 0x4814, { 0x96, 0xFC, 0x24, 0xA8, 0x15, 0xAC, 0x22, 0x26 } } 578 579 580 INTERFACE_DECL(_EFI_HASH); 581 582 typedef UINT8 EFI_MD5_HASH[16]; 583 typedef UINT8 EFI_SHA1_HASH[20]; 584 typedef UINT8 EFI_SHA224_HASH[28]; 585 typedef UINT8 EFI_SHA256_HASH[32]; 586 typedef UINT8 EFI_SHA384_HASH[48]; 587 typedef UINT8 EFI_SHA512_HASH[64]; 588 typedef union _EFI_HASH_OUTPUT { 589 EFI_MD5_HASH *Md5Hash; 590 EFI_SHA1_HASH *Sha1Hash; 591 EFI_SHA224_HASH *Sha224Hash; 592 EFI_SHA256_HASH *Sha256Hash; 593 EFI_SHA384_HASH *Sha384Hash; 594 EFI_SHA512_HASH *Sha512Hash; 595 } EFI_HASH_OUTPUT; 596 597 typedef 598 EFI_STATUS 599 (EFIAPI *EFI_HASH_GET_HASH_SIZE) ( 600 IN CONST struct _EFI_HASH *This, 601 IN CONST EFI_GUID *HashAlgorithm, 602 OUT UINTN *HashSize); 603 604 typedef 605 EFI_STATUS 606 (EFIAPI *EFI_HASH_HASH) ( 607 IN CONST struct _EFI_HASH *This, 608 IN CONST EFI_GUID *HashAlgorithm, 609 IN BOOLEAN Extend, 610 IN CONST UINT8 *Message, 611 IN UINT64 MessageSize, 612 IN OUT EFI_HASH_OUTPUT *Hash); 613 614 typedef struct _EFI_HASH { 615 EFI_HASH_GET_HASH_SIZE GetHashSize; 616 EFI_HASH_HASH Hash; 617 } EFI_HASH; 618 619 620 typedef struct _EFI_UNICODE_COLLATION_INTERFACE { 621 622 // general 623 EFI_UNICODE_STRICOLL StriColl; 624 EFI_UNICODE_METAIMATCH MetaiMatch; 625 EFI_UNICODE_STRLWR StrLwr; 626 EFI_UNICODE_STRUPR StrUpr; 627 628 // for supporting fat volumes 629 EFI_UNICODE_FATTOSTR FatToStr; 630 EFI_UNICODE_STRTOFAT StrToFat; 631 632 CHAR8 *SupportedLanguages; 633 } EFI_UNICODE_COLLATION_INTERFACE; 634 635 /* Graphics output protocol */ 636 #define EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID \ 637 { \ 638 0x9042a9de, 0x23dc, 0x4a38, {0x96, 0xfb, 0x7a, 0xde, 0xd0, 0x80, 0x51, 0x6a } \ 639 } 640 641 typedef struct _EFI_GRAPHICS_OUTPUT_PROTOCOL EFI_GRAPHICS_OUTPUT_PROTOCOL; 642 643 typedef struct { 644 UINT32 RedMask; 645 UINT32 GreenMask; 646 UINT32 BlueMask; 647 UINT32 ReservedMask; 648 } EFI_PIXEL_BITMASK; 649 650 typedef enum { 651 PixelRedGreenBlueReserved8BitPerColor, 652 PixelBlueGreenRedReserved8BitPerColor, 653 PixelBitMask, 654 PixelBltOnly, 655 PixelFormatMax 656 } EFI_GRAPHICS_PIXEL_FORMAT; 657 658 typedef struct { 659 UINT32 Version; 660 UINT32 HorizontalResolution; 661 UINT32 VerticalResolution; 662 EFI_GRAPHICS_PIXEL_FORMAT PixelFormat; 663 EFI_PIXEL_BITMASK PixelInformation; 664 UINT32 PixelsPerScanLine; 665 } EFI_GRAPHICS_OUTPUT_MODE_INFORMATION; 666 667 /** 668 Return the current video mode information. 669 670 @param This Protocol instance pointer. 671 @param ModeNumber The mode number to return information on. 672 @param SizeOfInfo A pointer to the size, in bytes, of the Info buffer. 673 @param Info A pointer to callee allocated buffer that returns information about ModeNumber. 674 675 @retval EFI_SUCCESS Mode information returned. 676 @retval EFI_BUFFER_TOO_SMALL The Info buffer was too small. 677 @retval EFI_DEVICE_ERROR A hardware error occurred trying to retrieve the video mode. 678 @retval EFI_NOT_STARTED Video display is not initialized. Call SetMode () 679 @retval EFI_INVALID_PARAMETER One of the input args was NULL. 680 681 **/ 682 typedef 683 EFI_STATUS 684 (EFIAPI *EFI_GRAPHICS_OUTPUT_PROTOCOL_QUERY_MODE) ( 685 IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This, 686 IN UINT32 ModeNumber, 687 OUT UINTN *SizeOfInfo, 688 OUT EFI_GRAPHICS_OUTPUT_MODE_INFORMATION **Info 689 ) 690 ; 691 692 /** 693 Return the current video mode information. 694 695 @param This Protocol instance pointer. 696 @param ModeNumber The mode number to be set. 697 698 @retval EFI_SUCCESS Graphics mode was changed. 699 @retval EFI_DEVICE_ERROR The device had an error and could not complete the request. 700 @retval EFI_UNSUPPORTED ModeNumber is not supported by this device. 701 702 **/ 703 typedef 704 EFI_STATUS 705 (EFIAPI *EFI_GRAPHICS_OUTPUT_PROTOCOL_SET_MODE) ( 706 IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This, 707 IN UINT32 ModeNumber 708 ); 709 710 typedef struct { 711 UINT8 Blue; 712 UINT8 Green; 713 UINT8 Red; 714 UINT8 Reserved; 715 } EFI_GRAPHICS_OUTPUT_BLT_PIXEL; 716 717 typedef union { 718 EFI_GRAPHICS_OUTPUT_BLT_PIXEL Pixel; 719 UINT32 Raw; 720 } EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION; 721 722 typedef enum { 723 EfiBltVideoFill, 724 EfiBltVideoToBltBuffer, 725 EfiBltBufferToVideo, 726 EfiBltVideoToVideo, 727 EfiGraphicsOutputBltOperationMax 728 } EFI_GRAPHICS_OUTPUT_BLT_OPERATION; 729 730 /** 731 The following table defines actions for BltOperations: 732 733 <B>EfiBltVideoFill</B> - Write data from the BltBuffer pixel (SourceX, SourceY) 734 directly to every pixel of the video display rectangle 735 (DestinationX, DestinationY) (DestinationX + Width, DestinationY + Height). 736 Only one pixel will be used from the BltBuffer. Delta is NOT used. 737 738 <B>EfiBltVideoToBltBuffer</B> - Read data from the video display rectangle 739 (SourceX, SourceY) (SourceX + Width, SourceY + Height) and place it in 740 the BltBuffer rectangle (DestinationX, DestinationY ) 741 (DestinationX + Width, DestinationY + Height). If DestinationX or 742 DestinationY is not zero then Delta must be set to the length in bytes 743 of a row in the BltBuffer. 744 745 <B>EfiBltBufferToVideo</B> - Write data from the BltBuffer rectangle 746 (SourceX, SourceY) (SourceX + Width, SourceY + Height) directly to the 747 video display rectangle (DestinationX, DestinationY) 748 (DestinationX + Width, DestinationY + Height). If SourceX or SourceY is 749 not zero then Delta must be set to the length in bytes of a row in the 750 BltBuffer. 751 752 <B>EfiBltVideoToVideo</B> - Copy from the video display rectangle (SourceX, SourceY) 753 (SourceX + Width, SourceY + Height) .to the video display rectangle 754 (DestinationX, DestinationY) (DestinationX + Width, DestinationY + Height). 755 The BltBuffer and Delta are not used in this mode. 756 757 @param This Protocol instance pointer. 758 @param BltBuffer Buffer containing data to blit into video buffer. This 759 buffer has a size of Width*Height*sizeof(EFI_GRAPHICS_OUTPUT_BLT_PIXEL) 760 @param BltOperation Operation to perform on BlitBuffer and video memory 761 @param SourceX X coordinate of source for the BltBuffer. 762 @param SourceY Y coordinate of source for the BltBuffer. 763 @param DestinationX X coordinate of destination for the BltBuffer. 764 @param DestinationY Y coordinate of destination for the BltBuffer. 765 @param Width Width of rectangle in BltBuffer in pixels. 766 @param Height Hight of rectangle in BltBuffer in pixels. 767 @param Delta OPTIONAL 768 769 @retval EFI_SUCCESS The Blt operation completed. 770 @retval EFI_INVALID_PARAMETER BltOperation is not valid. 771 @retval EFI_DEVICE_ERROR A hardware error occured writting to the video buffer. 772 773 **/ 774 typedef 775 EFI_STATUS 776 (EFIAPI *EFI_GRAPHICS_OUTPUT_PROTOCOL_BLT) ( 777 IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This, 778 IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer, OPTIONAL 779 IN EFI_GRAPHICS_OUTPUT_BLT_OPERATION BltOperation, 780 IN UINTN SourceX, 781 IN UINTN SourceY, 782 IN UINTN DestinationX, 783 IN UINTN DestinationY, 784 IN UINTN Width, 785 IN UINTN Height, 786 IN UINTN Delta OPTIONAL 787 ); 788 789 typedef struct { 790 UINT32 MaxMode; 791 UINT32 Mode; 792 EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Info; 793 UINTN SizeOfInfo; 794 EFI_PHYSICAL_ADDRESS FrameBufferBase; 795 UINTN FrameBufferSize; 796 } EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE; 797 798 struct _EFI_GRAPHICS_OUTPUT_PROTOCOL { 799 EFI_GRAPHICS_OUTPUT_PROTOCOL_QUERY_MODE QueryMode; 800 EFI_GRAPHICS_OUTPUT_PROTOCOL_SET_MODE SetMode; 801 EFI_GRAPHICS_OUTPUT_PROTOCOL_BLT Blt; 802 EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE *Mode; 803 }; 804 805 INTERFACE_DECL(_EFI_SERVICE_BINDING); 806 807 typedef 808 EFI_STATUS 809 (EFIAPI *EFI_SERVICE_BINDING_CREATE_CHILD) ( 810 IN struct _EFI_SERVICE_BINDING *This, 811 IN EFI_HANDLE *ChildHandle 812 ); 813 814 typedef 815 EFI_STATUS 816 (EFIAPI *EFI_SERVICE_BINDING_DESTROY_CHILD) ( 817 IN struct _EFI_SERVICE_BINDING *This, 818 IN EFI_HANDLE ChildHandle 819 ); 820 821 typedef struct _EFI_SERVICE_BINDING { 822 EFI_SERVICE_BINDING_CREATE_CHILD CreateChild; 823 EFI_SERVICE_BINDING_DESTROY_CHILD DestroyChild; 824 } EFI_SERVICE_BINDING; 825 826 // 827 // Driver Binding Protocol 828 // 829 830 #define DRIVER_BINDING_PROTOCOL \ 831 { 0x18A031AB, 0xB443, 0x4D1A, { 0xA5, 0xC0, 0x0C, 0x09, 0x26, 0x1E, 0x9F, 0x71} } 832 833 INTERFACE_DECL(_EFI_DRIVER_BINDING); 834 835 typedef 836 EFI_STATUS 837 (EFIAPI *EFI_DRIVER_SUPPORTED) ( 838 IN struct _EFI_DRIVER_BINDING *This, 839 IN EFI_HANDLE ControllerHandle, 840 IN EFI_DEVICE_PATH *RemainingDevicePath OPTIONAL); 841 842 typedef 843 EFI_STATUS 844 (EFIAPI *EFI_DRIVER_START) ( 845 IN struct _EFI_DRIVER_BINDING *This, 846 IN EFI_HANDLE ControllerHandle, 847 IN EFI_DEVICE_PATH *RemainingDevicePath OPTIONAL); 848 849 typedef 850 EFI_STATUS 851 (EFIAPI *EFI_DRIVER_STOP) ( 852 IN struct _EFI_DRIVER_BINDING *This, 853 IN EFI_HANDLE ControllerHandle, 854 IN UINTN NumberOfChildren, 855 IN EFI_HANDLE *ChildHandleBuffer OPTIONAL); 856 857 typedef struct _EFI_DRIVER_BINDING { 858 EFI_DRIVER_SUPPORTED Supported; 859 EFI_DRIVER_START Start; 860 EFI_DRIVER_STOP Stop; 861 UINT32 Version; 862 EFI_HANDLE ImageHandle; 863 EFI_HANDLE DriverBindingHandle; 864 } EFI_DRIVER_BINDING; 865 866 // 867 // Component Name Protocol 868 // Deprecated - use Component Name 2 Protocol instead 869 // 870 871 #define COMPONENT_NAME_PROTOCOL \ 872 {0x107A772C, 0xD5E1, 0x11D4, { 0x9A, 0x46, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D} } 873 874 INTERFACE_DECL(_EFI_COMPONENT_NAME); 875 876 typedef 877 EFI_STATUS 878 (EFIAPI *EFI_COMPONENT_NAME_GET_DRIVER_NAME) ( 879 IN struct _EFI_COMPONENT_NAME *This, 880 IN CHAR8 *Language, 881 OUT CHAR16 **DriverName); 882 883 typedef 884 EFI_STATUS 885 (EFIAPI *EFI_COMPONENT_NAME_GET_CONTROLLER_NAME) ( 886 IN struct _EFI_COMPONENT_NAME *This, 887 IN EFI_HANDLE ControllerHandle, 888 IN EFI_HANDLE ChildHandle OPTIONAL, 889 IN CHAR8 *Language, 890 OUT CHAR16 **ControllerName); 891 892 typedef struct _EFI_COMPONENT_NAME { 893 EFI_COMPONENT_NAME_GET_DRIVER_NAME GetDriverName; 894 EFI_COMPONENT_NAME_GET_CONTROLLER_NAME GetControllerName; 895 CHAR8 *SupportedLanguages; 896 } EFI_COMPONENT_NAME; 897 898 // 899 // Component Name 2 Protocol 900 // 901 902 #define COMPONENT_NAME2_PROTOCOL \ 903 {0x6A7A5CFF, 0xE8D9, 0x4F70, { 0xBA, 0xDA, 0x75, 0xAB, 0x30, 0x25, 0xCE, 0x14} } 904 905 INTERFACE_DECL(_EFI_COMPONENT_NAME2); 906 907 typedef 908 EFI_STATUS 909 (EFIAPI *EFI_COMPONENT_NAME2_GET_DRIVER_NAME) ( 910 IN struct _EFI_COMPONENT_NAME2 *This, 911 IN CHAR8 *Language, 912 OUT CHAR16 **DriverName); 913 914 typedef 915 EFI_STATUS 916 (EFIAPI *EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) ( 917 IN struct _EFI_COMPONENT_NAME2 *This, 918 IN EFI_HANDLE ControllerHandle, 919 IN EFI_HANDLE ChildHandle OPTIONAL, 920 IN CHAR8 *Language, 921 OUT CHAR16 **ControllerName); 922 923 typedef struct _EFI_COMPONENT_NAME2 { 924 EFI_COMPONENT_NAME2_GET_DRIVER_NAME GetDriverName; 925 EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME GetControllerName; 926 CHAR8 *SupportedLanguages; 927 } EFI_COMPONENT_NAME2; 928 929 930 // 931 // Loaded Image Protocol 932 // 933 #define LOADED_IMAGE_PROTOCOL \ 934 { 0x5B1B31A1, 0x9562, 0x11d2, {0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B} } 935 936 typedef 937 EFI_STATUS 938 (EFIAPI *EFI_IMAGE_UNLOAD) ( 939 IN EFI_HANDLE ImageHandle 940 ); 941 942 #define EFI_IMAGE_INFORMATION_REVISION 0x1000 943 typedef struct { 944 UINT32 Revision; 945 EFI_HANDLE ParentHandle; 946 struct _EFI_SYSTEM_TABLE *SystemTable; 947 948 // Source location of image 949 EFI_HANDLE DeviceHandle; 950 EFI_DEVICE_PATH *FilePath; 951 VOID *Reserved; 952 953 // Images load options 954 UINT32 LoadOptionsSize; 955 VOID *LoadOptions; 956 957 // Location of where image was loaded 958 VOID *ImageBase; 959 UINT64 ImageSize; 960 EFI_MEMORY_TYPE ImageCodeType; 961 EFI_MEMORY_TYPE ImageDataType; 962 963 // If the driver image supports a dynamic unload request 964 EFI_IMAGE_UNLOAD Unload; 965 } EFI_LOADED_IMAGE; 966 967 968 // 969 // EFI_RNG_PROTOCOL 970 // 971 972 #define EFI_RNG_PROTOCOL_GUID \ 973 { 0x3152bca5, 0xeade, 0x433d, {0x86, 0x2e, 0xc0, 0x1c, 0xdc, 0x29, 0x1f, 0x44} } 974 975 typedef EFI_GUID EFI_RNG_ALGORITHM; 976 977 #define EFI_RNG_ALGORITHM_SP800_90_HASH_256_GUID \ 978 {0xa7af67cb, 0x603b, 0x4d42, {0xba, 0x21, 0x70, 0xbf, 0xb6, 0x29, 0x3f, 0x96} } 979 980 #define EFI_RNG_ALGORITHM_SP800_90_HMAC_256_GUID \ 981 {0xc5149b43, 0xae85, 0x4f53, {0x99, 0x82, 0xb9, 0x43, 0x35, 0xd3, 0xa9, 0xe7} } 982 983 #define EFI_RNG_ALGORITHM_SP800_90_CTR_256_GUID \ 984 {0x44f0de6e, 0x4d8c, 0x4045, {0xa8, 0xc7, 0x4d, 0xd1, 0x68, 0x85, 0x6b, 0x9e} } 985 986 #define EFI_RNG_ALGORITHM_X9_31_3DES_GUID \ 987 {0x63c4785a, 0xca34, 0x4012, {0xa3, 0xc8, 0x0b, 0x6a, 0x32, 0x4f, 0x55, 0x46} } 988 989 #define EFI_RNG_ALGORITHM_X9_31_AES_GUID \ 990 {0xacd03321, 0x777e, 0x4d3d, {0xb1, 0xc8, 0x20, 0xcf, 0xd8, 0x88, 0x20, 0xc9} } 991 992 #define EFI_RNG_ALGORITHM_RAW \ 993 {0xe43176d7, 0xb6e8, 0x4827, {0xb7, 0x84, 0x7f, 0xfd, 0xc4, 0xb6, 0x85, 0x61} } 994 995 INTERFACE_DECL(_EFI_RNG_PROTOCOL); 996 997 typedef 998 EFI_STATUS 999 (EFIAPI *EFI_RNG_GET_INFO) ( 1000 IN struct _EFI_RNG_PROTOCOL *This, 1001 IN OUT UINTN *RNGAlgorithmListSize, 1002 OUT EFI_RNG_ALGORITHM *RNGAlgorithmList 1003 ); 1004 1005 typedef 1006 EFI_STATUS 1007 (EFIAPI *EFI_RNG_GET_RNG) ( 1008 IN struct _EFI_RNG_PROTOCOL *This, 1009 IN EFI_RNG_ALGORITHM *RNGAlgorithm, OPTIONAL 1010 IN UINTN RNGValueLength, 1011 OUT UINT8 *RNGValue 1012 ); 1013 1014 typedef struct _EFI_RNG_PROTOCOL { 1015 EFI_RNG_GET_INFO GetInfo; 1016 EFI_RNG_GET_RNG GetRNG; 1017 } EFI_RNG_PROTOCOL; 1018 1019 1020 #endif 1021 1022