1/* $NetBSD: efiprot.h,v 1.1.1.3 2021/09/30 18:50:09 jmcneill Exp $ */ 2 3#ifndef _EFI_PROT_H 4#define _EFI_PROT_H 5 6/*++ 7 8Copyright (c) 1998 Intel Corporation 9 10Module Name: 11 12 efiprot.h 13 14Abstract: 15 16 EFI Protocols 17 18 19 20Revision History 21 22--*/ 23 24// 25// FPSWA library protocol 26// 27#define EFI_FPSWA_PROTOCOL_GUID \ 28 { 0xc41b6531, 0x97b9, 0x11d3, {0x9a, 0x29, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} } 29#define FPSWA_PROTOCOL EFI_FPSWA_PROTOCOL_GUID 30 31// 32// Device Path protocol 33// 34 35#define EFI_DEVICE_PATH_PROTOCOL_GUID \ 36 { 0x9576e91, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} } 37#define DEVICE_PATH_PROTOCOL EFI_DEVICE_PATH_PROTOCOL_GUID 38 39 40// 41// Block IO protocol 42// 43 44#define EFI_BLOCK_IO_PROTOCOL_GUID \ 45 { 0x964e5b21, 0x6459, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} } 46#define BLOCK_IO_PROTOCOL EFI_BLOCK_IO_PROTOCOL_GUID 47 48#define EFI_BLOCK_IO_PROTOCOL_REVISION 0x00010000 49#define EFI_BLOCK_IO_PROTOCOL_REVISION2 0x00020001 50#define EFI_BLOCK_IO_PROTOCOL_REVISION3 ((2<<16) | 31) 51#define EFI_BLOCK_IO_INTERFACE_REVISION EFI_BLOCK_IO_PROTOCOL_REVISION 52#define EFI_BLOCK_IO_INTERFACE_REVISION2 EFI_BLOCK_IO_PROTOCOL_REVISION2 53#define EFI_BLOCK_IO_INTERFACE_REVISION3 EFI_BLOCK_IO_PROTOCOL_REVISION3 54 55INTERFACE_DECL(_EFI_BLOCK_IO_PROTOCOL); 56 57typedef 58EFI_STATUS 59(EFIAPI *EFI_BLOCK_RESET) ( 60 IN struct _EFI_BLOCK_IO_PROTOCOL *This, 61 IN BOOLEAN ExtendedVerification 62 ); 63 64typedef 65EFI_STATUS 66(EFIAPI *EFI_BLOCK_READ) ( 67 IN struct _EFI_BLOCK_IO_PROTOCOL *This, 68 IN UINT32 MediaId, 69 IN EFI_LBA LBA, 70 IN UINTN BufferSize, 71 OUT VOID *Buffer 72 ); 73 74 75typedef 76EFI_STATUS 77(EFIAPI *EFI_BLOCK_WRITE) ( 78 IN struct _EFI_BLOCK_IO_PROTOCOL *This, 79 IN UINT32 MediaId, 80 IN EFI_LBA LBA, 81 IN UINTN BufferSize, 82 IN VOID *Buffer 83 ); 84 85 86typedef 87EFI_STATUS 88(EFIAPI *EFI_BLOCK_FLUSH) ( 89 IN struct _EFI_BLOCK_IO_PROTOCOL *This 90 ); 91 92 93 94typedef struct { 95 UINT32 MediaId; 96 BOOLEAN RemovableMedia; 97 BOOLEAN MediaPresent; 98 99 BOOLEAN LogicalPartition; 100 BOOLEAN ReadOnly; 101 BOOLEAN WriteCaching; 102 103 UINT32 BlockSize; 104 UINT32 IoAlign; 105 106 EFI_LBA LastBlock; 107 108 /* revision 2 */ 109 EFI_LBA LowestAlignedLba; 110 UINT32 LogicalBlocksPerPhysicalBlock; 111 /* revision 3 */ 112 UINT32 OptimalTransferLengthGranularity; 113} EFI_BLOCK_IO_MEDIA; 114 115typedef struct _EFI_BLOCK_IO_PROTOCOL { 116 UINT64 Revision; 117 118 EFI_BLOCK_IO_MEDIA *Media; 119 120 EFI_BLOCK_RESET Reset; 121 EFI_BLOCK_READ ReadBlocks; 122 EFI_BLOCK_WRITE WriteBlocks; 123 EFI_BLOCK_FLUSH FlushBlocks; 124 125} EFI_BLOCK_IO_PROTOCOL; 126 127typedef struct _EFI_BLOCK_IO_PROTOCOL _EFI_BLOCK_IO; 128typedef EFI_BLOCK_IO_PROTOCOL EFI_BLOCK_IO; 129 130#define EFI_BLOCK_IO2_PROTOCOL_GUID \ 131 { 0xa77b2472, 0xe282, 0x4e9f, {0xa2, 0x45, 0xc2, 0xc0, 0xe2, 0x7b, 0xbc, 0xc1} } 132 133INTERFACE_DECL(_EFI_BLOCK_IO2_PROTOCOL); 134 135typedef struct { 136 EFI_EVENT Event; 137 EFI_STATUS TransactionStatus; 138} EFI_BLOCK_IO2_TOKEN; 139 140typedef 141EFI_STATUS 142(EFIAPI *EFI_BLOCK_RESET_EX) ( 143 IN struct _EFI_BLOCK_IO2_PROTOCOL *This, 144 IN BOOLEAN ExtendedVerification 145 ); 146 147typedef 148EFI_STATUS 149(EFIAPI *EFI_BLOCK_READ_EX) ( 150 IN struct _EFI_BLOCK_IO2_PROTOCOL *This, 151 IN UINT32 MediaId, 152 IN EFI_LBA LBA, 153 IN OUT EFI_BLOCK_IO2_TOKEN *Token, 154 IN UINTN BufferSize, 155 OUT VOID *Buffer 156 ); 157 158typedef 159EFI_STATUS 160(EFIAPI *EFI_BLOCK_WRITE_EX) ( 161 IN struct _EFI_BLOCK_IO2_PROTOCOL *This, 162 IN UINT32 MediaId, 163 IN EFI_LBA LBA, 164 IN OUT EFI_BLOCK_IO2_TOKEN *Token, 165 IN UINTN BufferSize, 166 IN VOID *Buffer 167 ); 168 169typedef 170EFI_STATUS 171(EFIAPI *EFI_BLOCK_FLUSH_EX) ( 172 IN struct _EFI_BLOCK_IO2_PROTOCOL *This, 173 IN OUT EFI_BLOCK_IO2_TOKEN *Token 174 ); 175 176typedef struct _EFI_BLOCK_IO2_PROTOCOL { 177 EFI_BLOCK_IO_MEDIA *Media; 178 EFI_BLOCK_RESET_EX Reset; 179 EFI_BLOCK_READ_EX ReadBlocksEx; 180 EFI_BLOCK_WRITE_EX WriteBlocksEx; 181 EFI_BLOCK_FLUSH_EX FlushBlocksEx; 182} EFI_BLOCK_IO2_PROTOCOL; 183 184// 185// Disk Block IO protocol 186// 187 188#define EFI_DISK_IO_PROTOCOL_GUID \ 189 { 0xce345171, 0xba0b, 0x11d2, {0x8e, 0x4f, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} } 190#define DISK_IO_PROTOCOL EFI_DISK_IO_PROTOCOL_GUID 191 192#define EFI_DISK_IO_PROTOCOL_REVISION 0x00010000 193#define EFI_DISK_IO_INTERFACE_REVISION EFI_DISK_IO_PROTOCOL_REVISION 194 195INTERFACE_DECL(_EFI_DISK_IO_PROTOCOL); 196 197typedef 198EFI_STATUS 199(EFIAPI *EFI_DISK_READ) ( 200 IN struct _EFI_DISK_IO_PROTOCOL *This, 201 IN UINT32 MediaId, 202 IN UINT64 Offset, 203 IN UINTN BufferSize, 204 OUT VOID *Buffer 205 ); 206 207 208typedef 209EFI_STATUS 210(EFIAPI *EFI_DISK_WRITE) ( 211 IN struct _EFI_DISK_IO_PROTOCOL *This, 212 IN UINT32 MediaId, 213 IN UINT64 Offset, 214 IN UINTN BufferSize, 215 IN VOID *Buffer 216 ); 217 218 219typedef struct _EFI_DISK_IO_PROTOCOL { 220 UINT64 Revision; 221 EFI_DISK_READ ReadDisk; 222 EFI_DISK_WRITE WriteDisk; 223} EFI_DISK_IO_PROTOCOL; 224 225typedef struct _EFI_DISK_IO_PROTOCOL _EFI_DISK_IO; 226typedef EFI_DISK_IO_PROTOCOL EFI_DISK_IO; 227 228 229#define EFI_DISK_IO2_PROTOCOL_GUID \ 230 { 0x151c8eae, 0x7f2c, 0x472c, {0x9e, 0x54, 0x98, 0x28, 0x19, 0x4f, 0x6a, 0x88} } 231 232#define EFI_DISK_IO2_PROTOCOL_REVISION 0x00020000 233 234INTERFACE_DECL(_EFI_DISK_IO2_PROTOCOL); 235 236typedef struct { 237 EFI_EVENT Event; 238 EFI_STATUS TransactionStatus; 239} EFI_DISK_IO2_TOKEN; 240 241typedef 242EFI_STATUS 243(EFIAPI *EFI_DISK_CANCEL_EX) ( 244 IN struct _EFI_DISK_IO2_PROTOCOL *This 245 ); 246 247typedef 248EFI_STATUS 249(EFIAPI *EFI_DISK_READ_EX) ( 250 IN struct _EFI_DISK_IO2_PROTOCOL *This, 251 IN UINT32 MediaId, 252 IN UINT64 Offset, 253 IN OUT EFI_DISK_IO2_TOKEN *Token, 254 IN UINTN BufferSize, 255 OUT VOID *Buffer 256 ); 257 258typedef 259EFI_STATUS 260(EFIAPI *EFI_DISK_WRITE_EX) ( 261 IN struct _EFI_DISK_IO2_PROTOCOL *This, 262 IN UINT32 MediaId, 263 IN UINT64 Offset, 264 IN OUT EFI_DISK_IO2_TOKEN *Token, 265 IN UINTN BufferSize, 266 IN VOID *Buffer 267 ); 268 269typedef 270EFI_STATUS 271(EFIAPI *EFI_DISK_FLUSH_EX) ( 272 IN struct _EFI_DISK_IO2_PROTOCOL *This, 273 IN OUT EFI_DISK_IO2_TOKEN *Token 274 ); 275 276typedef struct _EFI_DISK_IO2_PROTOCOL { 277 UINT64 Revision; 278 EFI_DISK_CANCEL_EX Cancel; 279 EFI_DISK_READ_EX ReadDiskEx; 280 EFI_DISK_WRITE_EX WriteDiskEx; 281 EFI_DISK_FLUSH_EX FlushDiskEx; 282} EFI_DISK_IO2_PROTOCOL; 283 284// 285// Simple file system protocol 286// 287 288#define EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID \ 289 { 0x964e5b22, 0x6459, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} } 290#define SIMPLE_FILE_SYSTEM_PROTOCOL EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID 291 292INTERFACE_DECL(_EFI_SIMPLE_FILE_SYSTEM_PROTOCOL); 293INTERFACE_DECL(_EFI_FILE_HANDLE); 294 295typedef 296EFI_STATUS 297(EFIAPI *EFI_VOLUME_OPEN) ( 298 IN struct _EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *This, 299 OUT struct _EFI_FILE_HANDLE **Root 300 ); 301 302#define EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_REVISION 0x00010000 303#define EFI_FILE_IO_INTERFACE_REVISION EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_REVISION 304 305typedef struct _EFI_SIMPLE_FILE_SYSTEM_PROTOCOL { 306 UINT64 Revision; 307 EFI_VOLUME_OPEN OpenVolume; 308} EFI_SIMPLE_FILE_SYSTEM_PROTOCOL; 309 310typedef struct _EFI_SIMPLE_FILE_SYSTEM_PROTOCOL _EFI_FILE_IO_INTERFACE; 311typedef EFI_SIMPLE_FILE_SYSTEM_PROTOCOL EFI_FILE_IO_INTERFACE; 312 313// 314// 315// 316 317typedef 318EFI_STATUS 319(EFIAPI *EFI_FILE_OPEN) ( 320 IN struct _EFI_FILE_HANDLE *File, 321 OUT struct _EFI_FILE_HANDLE **NewHandle, 322 IN CHAR16 *FileName, 323 IN UINT64 OpenMode, 324 IN UINT64 Attributes 325 ); 326 327// Open modes 328#define EFI_FILE_MODE_READ 0x0000000000000001 329#define EFI_FILE_MODE_WRITE 0x0000000000000002 330#define EFI_FILE_MODE_CREATE 0x8000000000000000 331 332// File attributes 333#define EFI_FILE_READ_ONLY 0x0000000000000001 334#define EFI_FILE_HIDDEN 0x0000000000000002 335#define EFI_FILE_SYSTEM 0x0000000000000004 336#define EFI_FILE_RESERVIED 0x0000000000000008 337#define EFI_FILE_DIRECTORY 0x0000000000000010 338#define EFI_FILE_ARCHIVE 0x0000000000000020 339#define EFI_FILE_VALID_ATTR 0x0000000000000037 340 341typedef 342EFI_STATUS 343(EFIAPI *EFI_FILE_CLOSE) ( 344 IN struct _EFI_FILE_HANDLE *File 345 ); 346 347typedef 348EFI_STATUS 349(EFIAPI *EFI_FILE_DELETE) ( 350 IN struct _EFI_FILE_HANDLE *File 351 ); 352 353typedef 354EFI_STATUS 355(EFIAPI *EFI_FILE_READ) ( 356 IN struct _EFI_FILE_HANDLE *File, 357 IN OUT UINTN *BufferSize, 358 OUT VOID *Buffer 359 ); 360 361typedef 362EFI_STATUS 363(EFIAPI *EFI_FILE_WRITE) ( 364 IN struct _EFI_FILE_HANDLE *File, 365 IN OUT UINTN *BufferSize, 366 IN VOID *Buffer 367 ); 368 369typedef 370EFI_STATUS 371(EFIAPI *EFI_FILE_SET_POSITION) ( 372 IN struct _EFI_FILE_HANDLE *File, 373 IN UINT64 Position 374 ); 375 376typedef 377EFI_STATUS 378(EFIAPI *EFI_FILE_GET_POSITION) ( 379 IN struct _EFI_FILE_HANDLE *File, 380 OUT UINT64 *Position 381 ); 382 383typedef 384EFI_STATUS 385(EFIAPI *EFI_FILE_GET_INFO) ( 386 IN struct _EFI_FILE_HANDLE *File, 387 IN EFI_GUID *InformationType, 388 IN OUT UINTN *BufferSize, 389 OUT VOID *Buffer 390 ); 391 392typedef 393EFI_STATUS 394(EFIAPI *EFI_FILE_SET_INFO) ( 395 IN struct _EFI_FILE_HANDLE *File, 396 IN EFI_GUID *InformationType, 397 IN UINTN BufferSize, 398 IN VOID *Buffer 399 ); 400 401typedef 402EFI_STATUS 403(EFIAPI *EFI_FILE_FLUSH) ( 404 IN struct _EFI_FILE_HANDLE *File 405 ); 406 407typedef struct { 408 EFI_EVENT Event; 409 EFI_STATUS Status; 410 UINTN BufferSize; 411 VOID *Buffer; 412} EFI_FILE_IO_TOKEN; 413 414typedef 415EFI_STATUS 416(EFIAPI *EFI_FILE_OPEN_EX)( 417 IN struct _EFI_FILE_HANDLE *File, 418 OUT struct _EFI_FILE_HANDLE **NewHandle, 419 IN CHAR16 *FileName, 420 IN UINT64 OpenMode, 421 IN UINT64 Attributes, 422 IN OUT EFI_FILE_IO_TOKEN *Token 423 ); 424 425typedef 426EFI_STATUS 427(EFIAPI *EFI_FILE_READ_EX) ( 428 IN struct _EFI_FILE_HANDLE *File, 429 IN OUT EFI_FILE_IO_TOKEN *Token 430 ); 431 432typedef 433EFI_STATUS 434(EFIAPI *EFI_FILE_WRITE_EX) ( 435 IN struct _EFI_FILE_HANDLE *File, 436 IN OUT EFI_FILE_IO_TOKEN *Token 437 ); 438 439typedef 440EFI_STATUS 441(EFIAPI *EFI_FILE_FLUSH_EX) ( 442 IN struct _EFI_FILE_HANDLE *File, 443 IN OUT EFI_FILE_IO_TOKEN *Token 444 ); 445 446#define EFI_FILE_PROTOCOL_REVISION 0x00010000 447#define EFI_FILE_PROTOCOL_REVISION2 0x00020000 448#define EFI_FILE_PROTOCOL_LATEST_REVISION EFI_FILE_PROTOCOL_REVISION2 449#define EFI_FILE_HANDLE_REVISION EFI_FILE_PROTOCOL_REVISION 450 451typedef struct _EFI_FILE_HANDLE { 452 UINT64 Revision; 453 EFI_FILE_OPEN Open; 454 EFI_FILE_CLOSE Close; 455 EFI_FILE_DELETE Delete; 456 EFI_FILE_READ Read; 457 EFI_FILE_WRITE Write; 458 EFI_FILE_GET_POSITION GetPosition; 459 EFI_FILE_SET_POSITION SetPosition; 460 EFI_FILE_GET_INFO GetInfo; 461 EFI_FILE_SET_INFO SetInfo; 462 EFI_FILE_FLUSH Flush; 463 EFI_FILE_OPEN_EX OpenEx; 464 EFI_FILE_READ_EX ReadEx; 465 EFI_FILE_WRITE_EX WriteEx; 466 EFI_FILE_FLUSH_EX FlushEx; 467} EFI_FILE_PROTOCOL, *EFI_FILE_HANDLE; 468 469typedef EFI_FILE_PROTOCOL EFI_FILE; 470 471 472// 473// File information types 474// 475 476#define EFI_FILE_INFO_ID \ 477 { 0x9576e92, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} } 478 479typedef struct { 480 UINT64 Size; 481 UINT64 FileSize; 482 UINT64 PhysicalSize; 483 EFI_TIME CreateTime; 484 EFI_TIME LastAccessTime; 485 EFI_TIME ModificationTime; 486 UINT64 Attribute; 487 CHAR16 FileName[1]; 488} EFI_FILE_INFO; 489 490// 491// The FileName field of the EFI_FILE_INFO data structure is variable length. 492// Whenever code needs to know the size of the EFI_FILE_INFO data structure, it needs to 493// be the size of the data structure without the FileName field. The following macro 494// computes this size correctly no matter how big the FileName array is declared. 495// This is required to make the EFI_FILE_INFO data structure ANSI compilant. 496// 497 498#define SIZE_OF_EFI_FILE_INFO EFI_FIELD_OFFSET(EFI_FILE_INFO,FileName) 499 500#define EFI_FILE_SYSTEM_INFO_ID \ 501 { 0x9576e93, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} } 502 503typedef struct { 504 UINT64 Size; 505 BOOLEAN ReadOnly; 506 UINT64 VolumeSize; 507 UINT64 FreeSpace; 508 UINT32 BlockSize; 509 CHAR16 VolumeLabel[1]; 510} EFI_FILE_SYSTEM_INFO; 511 512// 513// The VolumeLabel field of the EFI_FILE_SYSTEM_INFO data structure is variable length. 514// Whenever code needs to know the size of the EFI_FILE_SYSTEM_INFO data structure, it needs 515// to be the size of the data structure without the VolumeLable field. The following macro 516// computes this size correctly no matter how big the VolumeLable array is declared. 517// This is required to make the EFI_FILE_SYSTEM_INFO data structure ANSI compilant. 518// 519 520#define SIZE_OF_EFI_FILE_SYSTEM_INFO EFI_FIELD_OFFSET(EFI_FILE_SYSTEM_INFO,VolumeLabel) 521 522#define EFI_FILE_SYSTEM_VOLUME_LABEL_ID \ 523 { 0xDB47D7D3,0xFE81, 0x11d3, {0x9A, 0x35, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D} } 524 525typedef struct { 526 CHAR16 VolumeLabel[1]; 527} EFI_FILE_SYSTEM_VOLUME_LABEL; 528 529#define SIZE_OF_EFI_FILE_SYSTEM_VOLUME_LABEL_INFO EFI_FIELD_OFFSET(EFI_FILE_SYSTEM_VOLUME_LABEL,VolumeLabel) 530 531// 532// For compatibility with older versions of gnu-efi 533// 534#define EFI_FILE_SYSTEM_VOLUME_LABEL_INFO_ID EFI_FILE_SYSTEM_VOLUME_LABEL_ID 535#define EFI_FILE_SYSTEM_VOLUME_LABEL_INFO EFI_FILE_SYSTEM_VOLUME_LABEL 536 537// 538// Load file protocol 539// 540 541 542#define EFI_LOAD_FILE_PROTOCOL_GUID \ 543 { 0x56EC3091, 0x954C, 0x11d2, {0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B} } 544#define LOAD_FILE_PROTOCOL EFI_LOAD_FILE_PROTOCOL_GUID 545 546INTERFACE_DECL(_EFI_LOAD_FILE_PROTOCOL); 547 548typedef 549EFI_STATUS 550(EFIAPI *EFI_LOAD_FILE) ( 551 IN struct _EFI_LOAD_FILE_PROTOCOL *This, 552 IN EFI_DEVICE_PATH *FilePath, 553 IN BOOLEAN BootPolicy, 554 IN OUT UINTN *BufferSize, 555 IN VOID *Buffer OPTIONAL 556 ); 557 558typedef struct _EFI_LOAD_FILE_PROTOCOL { 559 EFI_LOAD_FILE LoadFile; 560} EFI_LOAD_FILE_PROTOCOL; 561 562typedef struct _EFI_LOAD_FILE_PROTOCOL _EFI_LOAD_FILE_INTERFACE; 563typedef EFI_LOAD_FILE_PROTOCOL EFI_LOAD_FILE_INTERFACE; 564 565// 566// Device IO protocol 567// 568 569#define EFI_DEVICE_IO_PROTOCOL_GUID \ 570 { 0xaf6ac311, 0x84c3, 0x11d2, {0x8e, 0x3c, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b} } 571#define DEVICE_IO_PROTOCOL EFI_DEVICE_IO_PROTOCOL_GUID 572 573INTERFACE_DECL(_EFI_DEVICE_IO_PROTOCOL); 574 575typedef enum { 576 IO_UINT8, 577 IO_UINT16, 578 IO_UINT32, 579 IO_UINT64, 580// 581// Specification Change: Copy from MMIO to MMIO vs. MMIO to buffer, buffer to MMIO 582// 583 MMIO_COPY_UINT8, 584 MMIO_COPY_UINT16, 585 MMIO_COPY_UINT32, 586 MMIO_COPY_UINT64 587} EFI_IO_WIDTH; 588 589#define EFI_PCI_ADDRESS(_bus,_dev,_func) \ 590 ( (UINT64) ( (((UINTN)_bus) << 24) + (((UINTN)_dev) << 16) + (((UINTN)_func) << 8) ) ) 591 592 593typedef 594EFI_STATUS 595(EFIAPI *EFI_DEVICE_IO) ( 596 IN struct _EFI_DEVICE_IO_PROTOCOL *This, 597 IN EFI_IO_WIDTH Width, 598 IN UINT64 Address, 599 IN UINTN Count, 600 IN OUT VOID *Buffer 601 ); 602 603typedef struct { 604 EFI_DEVICE_IO Read; 605 EFI_DEVICE_IO Write; 606} EFI_IO_ACCESS; 607 608typedef 609EFI_STATUS 610(EFIAPI *EFI_PCI_DEVICE_PATH) ( 611 IN struct _EFI_DEVICE_IO_PROTOCOL *This, 612 IN UINT64 Address, 613 IN OUT EFI_DEVICE_PATH **PciDevicePath 614 ); 615 616typedef enum { 617 EfiBusMasterRead, 618 EfiBusMasterWrite, 619 EfiBusMasterCommonBuffer 620} EFI_IO_OPERATION_TYPE; 621 622typedef 623EFI_STATUS 624(EFIAPI *EFI_IO_MAP) ( 625 IN struct _EFI_DEVICE_IO_PROTOCOL *This, 626 IN EFI_IO_OPERATION_TYPE Operation, 627 IN EFI_PHYSICAL_ADDRESS *HostAddress, 628 IN OUT UINTN *NumberOfBytes, 629 OUT EFI_PHYSICAL_ADDRESS *DeviceAddress, 630 OUT VOID **Mapping 631 ); 632 633typedef 634EFI_STATUS 635(EFIAPI *EFI_IO_UNMAP) ( 636 IN struct _EFI_DEVICE_IO_PROTOCOL *This, 637 IN VOID *Mapping 638 ); 639 640typedef 641EFI_STATUS 642(EFIAPI *EFI_IO_ALLOCATE_BUFFER) ( 643 IN struct _EFI_DEVICE_IO_PROTOCOL *This, 644 IN EFI_ALLOCATE_TYPE Type, 645 IN EFI_MEMORY_TYPE MemoryType, 646 IN UINTN Pages, 647 IN OUT EFI_PHYSICAL_ADDRESS *HostAddress 648 ); 649 650typedef 651EFI_STATUS 652(EFIAPI *EFI_IO_FLUSH) ( 653 IN struct _EFI_DEVICE_IO_PROTOCOL *This 654 ); 655 656typedef 657EFI_STATUS 658(EFIAPI *EFI_IO_FREE_BUFFER) ( 659 IN struct _EFI_DEVICE_IO_PROTOCOL *This, 660 IN UINTN Pages, 661 IN EFI_PHYSICAL_ADDRESS HostAddress 662 ); 663 664typedef struct _EFI_DEVICE_IO_PROTOCOL { 665 EFI_IO_ACCESS Mem; 666 EFI_IO_ACCESS Io; 667 EFI_IO_ACCESS Pci; 668 EFI_IO_MAP Map; 669 EFI_PCI_DEVICE_PATH PciDevicePath; 670 EFI_IO_UNMAP Unmap; 671 EFI_IO_ALLOCATE_BUFFER AllocateBuffer; 672 EFI_IO_FLUSH Flush; 673 EFI_IO_FREE_BUFFER FreeBuffer; 674} EFI_DEVICE_IO_PROTOCOL; 675 676typedef struct _EFI_DEVICE_IO_PROTOCOL _EFI_DEVICE_IO_INTERFACE; 677typedef EFI_DEVICE_IO_PROTOCOL EFI_DEVICE_IO_INTERFACE; 678 679// 680// Unicode Collation protocol 681// 682 683#define EFI_UNICODE_COLLATION_PROTOCOL_GUID \ 684 { 0x1d85cd7f, 0xf43d, 0x11d2, {0x9a, 0xc, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} } 685#define UNICODE_COLLATION_PROTOCOL EFI_UNICODE_COLLATION_PROTOCOL_GUID 686 687#define EFI_UNICODE_BYTE_ORDER_MARK (CHAR16)(0xfeff) 688#define UNICODE_BYTE_ORDER_MARK EFI_UNICODE_BYTE_ORDER_MARK 689 690INTERFACE_DECL(_EFI_UNICODE_COLLATION_PROTOCOL); 691 692typedef 693INTN 694(EFIAPI *EFI_UNICODE_STRICOLL) ( 695 IN struct _EFI_UNICODE_COLLATION_PROTOCOL *This, 696 IN CHAR16 *s1, 697 IN CHAR16 *s2 698 ); 699 700typedef 701BOOLEAN 702(EFIAPI *EFI_UNICODE_METAIMATCH) ( 703 IN struct _EFI_UNICODE_COLLATION_PROTOCOL *This, 704 IN CHAR16 *String, 705 IN CHAR16 *Pattern 706 ); 707 708typedef 709VOID 710(EFIAPI *EFI_UNICODE_STRLWR) ( 711 IN struct _EFI_UNICODE_COLLATION_PROTOCOL *This, 712 IN OUT CHAR16 *Str 713 ); 714 715typedef 716VOID 717(EFIAPI *EFI_UNICODE_STRUPR) ( 718 IN struct _EFI_UNICODE_COLLATION_PROTOCOL *This, 719 IN OUT CHAR16 *Str 720 ); 721 722typedef 723VOID 724(EFIAPI *EFI_UNICODE_FATTOSTR) ( 725 IN struct _EFI_UNICODE_COLLATION_PROTOCOL *This, 726 IN UINTN FatSize, 727 IN CHAR8 *Fat, 728 OUT CHAR16 *String 729 ); 730 731typedef 732BOOLEAN 733(EFIAPI *EFI_UNICODE_STRTOFAT) ( 734 IN struct _EFI_UNICODE_COLLATION_PROTOCOL *This, 735 IN CHAR16 *String, 736 IN UINTN FatSize, 737 OUT CHAR8 *Fat 738 ); 739 740// 741// Hash Protocol 742// 743#define EFI_HASH_PROTOCOL_GUID \ 744 { 0xC5184932, 0xDBA5, 0x46DB, { 0xA5, 0xBA, 0xCC, 0x0B, 0xDA, 0x9C, 0x14, 0x35 } } 745#define HASH_PROTOCOL EFI_HASH_PROTOCOL_GUID 746 747#define EFI_HASH_ALGORITHM_SHA1_GUID \ 748 { 0x2AE9D80F, 0x3FB2, 0x4095, { 0xB7, 0xB1, 0xE9, 0x31, 0x57, 0xB9, 0x46, 0xB6 } } // Deprecated 749#define EFI_HASH_ALGORITHM_SHA1 EFI_HASH_ALGORITHM_SHA1_GUID 750 751#define EFI_HASH_ALGORITHM_SHA224_GUID \ 752 { 0x8DF01A06, 0x9BD5, 0x4BF7, { 0xB0, 0x21, 0xDB, 0x4F, 0xD9, 0xCC, 0xF4, 0x5B } } // Deprecated 753#define EFI_HASH_ALGORITHM_SHA224 EFI_HASH_ALGORITHM_SHA224_GUID 754 755#define EFI_HASH_ALGORITHM_SHA256_GUID \ 756 { 0x51AA59DE, 0xFDF2, 0x4EA3, { 0xBC, 0x63, 0x87, 0x5F, 0xB7, 0x84, 0x2E, 0xE9 } } // Deprecated 757#define EFI_HASH_ALGORITHM_SHA256 EFI_HASH_ALGORITHM_SHA256_GUID 758 759#define EFI_HASH_ALGORITHM_SHA384_GUID \ 760 { 0xEFA96432, 0xDE33, 0x4DD2, { 0xAE, 0xE6, 0x32, 0x8C, 0x33, 0xDF, 0x77, 0x7A } } // Deprecated 761#define EFI_HASH_ALGORITHM_SHA384 EFI_HASH_ALGORITHM_SHA384_GUID 762 763#define EFI_HASH_ALGORITHM_SHA512_GUID \ 764 { 0xCAA4381E, 0x750C, 0x4770, { 0xB8, 0x70, 0x7A, 0x23, 0xB4, 0xE4, 0x21, 0x30 } } // Deprecated 765#define EFI_HASH_ALGORITHM_SHA512 EFI_HASH_ALGORITHM_SHA512_GUID 766 767#define EFI_HASH_ALGORITHM_MD5_GUID \ 768 { 0x0AF7C79C, 0x65B5, 0x4319, { 0xB0, 0xAE, 0x44, 0xEC, 0x48, 0x4E, 0x4A, 0xD7 } } // Deprecated 769#define EFI_HASH_ALGORITHM_MD5 EFI_HASH_ALGORITHM_MD5_GUID 770 771#define EFI_HASH_ALGORITHM_SHA1_NOPAD_GUID \ 772 { 0x24C5DC2F, 0x53E2, 0x40CA, { 0x9E, 0xD6, 0xA5, 0xD9, 0xA4, 0x9F, 0x46, 0x3B } } 773#define EFI_HASH_ALGORITHM_SHA1_NOPAD EFI_HASH_ALGORITHM_SHA1_NOPAD_GUID 774 775#define EFI_HASH_ALGORITHM_SHA256_NOPAD_GUID \ 776 { 0x8628752A, 0x6CB7, 0x4814, { 0x96, 0xFC, 0x24, 0xA8, 0x15, 0xAC, 0x22, 0x26 } } 777#define EFI_HASH_ALGORITHM_SHA256_NOPAD EFI_HASH_ALGORITHM_SHA256_NOPAD_GUID 778 779 780INTERFACE_DECL(_EFI_HASH_PROTOCOL); 781 782typedef UINT8 EFI_MD5_HASH[16]; 783typedef UINT8 EFI_SHA1_HASH[20]; 784typedef UINT8 EFI_SHA224_HASH[28]; 785typedef UINT8 EFI_SHA256_HASH[32]; 786typedef UINT8 EFI_SHA384_HASH[48]; 787typedef UINT8 EFI_SHA512_HASH[64]; 788typedef union _EFI_HASH_OUTPUT { 789 EFI_MD5_HASH *Md5Hash; 790 EFI_SHA1_HASH *Sha1Hash; 791 EFI_SHA224_HASH *Sha224Hash; 792 EFI_SHA256_HASH *Sha256Hash; 793 EFI_SHA384_HASH *Sha384Hash; 794 EFI_SHA512_HASH *Sha512Hash; 795} EFI_HASH_OUTPUT; 796 797typedef 798EFI_STATUS 799(EFIAPI *EFI_HASH_GET_HASH_SIZE) ( 800 IN CONST struct _EFI_HASH_PROTOCOL *This, 801 IN CONST EFI_GUID *HashAlgorithm, 802 OUT UINTN *HashSize); 803 804typedef 805EFI_STATUS 806(EFIAPI *EFI_HASH_HASH) ( 807 IN CONST struct _EFI_HASH_PROTOCOL *This, 808 IN CONST EFI_GUID *HashAlgorithm, 809 IN BOOLEAN Extend, 810 IN CONST UINT8 *Message, 811 IN UINT64 MessageSize, 812 IN OUT EFI_HASH_OUTPUT *Hash); 813 814typedef struct _EFI_HASH_PROTOCOL { 815 EFI_HASH_GET_HASH_SIZE GetHashSize; 816 EFI_HASH_HASH Hash; 817} EFI_HASH_PROTOCOL; 818 819typedef struct _EFI_HASH_PROTOCOL _EFI_HASH; 820typedef EFI_HASH_PROTOCOL EFI_HASH; 821 822 823typedef struct _EFI_UNICODE_COLLATION_PROTOCOL { 824 825 // general 826 EFI_UNICODE_STRICOLL StriColl; 827 EFI_UNICODE_METAIMATCH MetaiMatch; 828 EFI_UNICODE_STRLWR StrLwr; 829 EFI_UNICODE_STRUPR StrUpr; 830 831 // for supporting fat volumes 832 EFI_UNICODE_FATTOSTR FatToStr; 833 EFI_UNICODE_STRTOFAT StrToFat; 834 835 CHAR8 *SupportedLanguages; 836} EFI_UNICODE_COLLATION_PROTOCOL; 837 838typedef EFI_UNICODE_COLLATION_PROTOCOL EFI_UNICODE_COLLATION_INTERFACE; 839 840/* Graphics output protocol */ 841#define EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID \ 842 { 0x9042a9de, 0x23dc, 0x4a38, {0x96, 0xfb, 0x7a, 0xde, 0xd0, 0x80, 0x51, 0x6a } } 843typedef struct _EFI_GRAPHICS_OUTPUT_PROTOCOL EFI_GRAPHICS_OUTPUT_PROTOCOL; 844 845typedef struct { 846 UINT32 RedMask; 847 UINT32 GreenMask; 848 UINT32 BlueMask; 849 UINT32 ReservedMask; 850} EFI_PIXEL_BITMASK; 851 852typedef enum { 853 PixelRedGreenBlueReserved8BitPerColor, 854 PixelBlueGreenRedReserved8BitPerColor, 855 PixelBitMask, 856 PixelBltOnly, 857 PixelFormatMax 858} EFI_GRAPHICS_PIXEL_FORMAT; 859 860typedef struct { 861 UINT32 Version; 862 UINT32 HorizontalResolution; 863 UINT32 VerticalResolution; 864 EFI_GRAPHICS_PIXEL_FORMAT PixelFormat; 865 EFI_PIXEL_BITMASK PixelInformation; 866 UINT32 PixelsPerScanLine; 867} EFI_GRAPHICS_OUTPUT_MODE_INFORMATION; 868 869/** 870 Return the current video mode information. 871 872 @param This Protocol instance pointer. 873 @param ModeNumber The mode number to return information on. 874 @param SizeOfInfo A pointer to the size, in bytes, of the Info buffer. 875 @param Info A pointer to callee allocated buffer that returns information about ModeNumber. 876 877 @retval EFI_SUCCESS Mode information returned. 878 @retval EFI_BUFFER_TOO_SMALL The Info buffer was too small. 879 @retval EFI_DEVICE_ERROR A hardware error occurred trying to retrieve the video mode. 880 @retval EFI_NOT_STARTED Video display is not initialized. Call SetMode () 881 @retval EFI_INVALID_PARAMETER One of the input args was NULL. 882 883**/ 884typedef 885EFI_STATUS 886(EFIAPI *EFI_GRAPHICS_OUTPUT_PROTOCOL_QUERY_MODE) ( 887 IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This, 888 IN UINT32 ModeNumber, 889 OUT UINTN *SizeOfInfo, 890 OUT EFI_GRAPHICS_OUTPUT_MODE_INFORMATION **Info 891 ) 892; 893 894/** 895 Return the current video mode information. 896 897 @param This Protocol instance pointer. 898 @param ModeNumber The mode number to be set. 899 900 @retval EFI_SUCCESS Graphics mode was changed. 901 @retval EFI_DEVICE_ERROR The device had an error and could not complete the request. 902 @retval EFI_UNSUPPORTED ModeNumber is not supported by this device. 903 904**/ 905typedef 906EFI_STATUS 907(EFIAPI *EFI_GRAPHICS_OUTPUT_PROTOCOL_SET_MODE) ( 908 IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This, 909 IN UINT32 ModeNumber 910 ); 911 912typedef struct { 913 UINT8 Blue; 914 UINT8 Green; 915 UINT8 Red; 916 UINT8 Reserved; 917} EFI_GRAPHICS_OUTPUT_BLT_PIXEL; 918 919typedef union { 920 EFI_GRAPHICS_OUTPUT_BLT_PIXEL Pixel; 921 UINT32 Raw; 922} EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION; 923 924typedef enum { 925 EfiBltVideoFill, 926 EfiBltVideoToBltBuffer, 927 EfiBltBufferToVideo, 928 EfiBltVideoToVideo, 929 EfiGraphicsOutputBltOperationMax 930} EFI_GRAPHICS_OUTPUT_BLT_OPERATION; 931 932/** 933 The following table defines actions for BltOperations: 934 935 <B>EfiBltVideoFill</B> - Write data from the BltBuffer pixel (SourceX, SourceY) 936 directly to every pixel of the video display rectangle 937 (DestinationX, DestinationY) (DestinationX + Width, DestinationY + Height). 938 Only one pixel will be used from the BltBuffer. Delta is NOT used. 939 940 <B>EfiBltVideoToBltBuffer</B> - Read data from the video display rectangle 941 (SourceX, SourceY) (SourceX + Width, SourceY + Height) and place it in 942 the BltBuffer rectangle (DestinationX, DestinationY ) 943 (DestinationX + Width, DestinationY + Height). If DestinationX or 944 DestinationY is not zero then Delta must be set to the length in bytes 945 of a row in the BltBuffer. 946 947 <B>EfiBltBufferToVideo</B> - Write data from the BltBuffer rectangle 948 (SourceX, SourceY) (SourceX + Width, SourceY + Height) directly to the 949 video display rectangle (DestinationX, DestinationY) 950 (DestinationX + Width, DestinationY + Height). If SourceX or SourceY is 951 not zero then Delta must be set to the length in bytes of a row in the 952 BltBuffer. 953 954 <B>EfiBltVideoToVideo</B> - Copy from the video display rectangle (SourceX, SourceY) 955 (SourceX + Width, SourceY + Height) .to the video display rectangle 956 (DestinationX, DestinationY) (DestinationX + Width, DestinationY + Height). 957 The BltBuffer and Delta are not used in this mode. 958 959 @param This Protocol instance pointer. 960 @param BltBuffer Buffer containing data to blit into video buffer. This 961 buffer has a size of Width*Height*sizeof(EFI_GRAPHICS_OUTPUT_BLT_PIXEL) 962 @param BltOperation Operation to perform on BlitBuffer and video memory 963 @param SourceX X coordinate of source for the BltBuffer. 964 @param SourceY Y coordinate of source for the BltBuffer. 965 @param DestinationX X coordinate of destination for the BltBuffer. 966 @param DestinationY Y coordinate of destination for the BltBuffer. 967 @param Width Width of rectangle in BltBuffer in pixels. 968 @param Height Hight of rectangle in BltBuffer in pixels. 969 @param Delta OPTIONAL 970 971 @retval EFI_SUCCESS The Blt operation completed. 972 @retval EFI_INVALID_PARAMETER BltOperation is not valid. 973 @retval EFI_DEVICE_ERROR A hardware error occured writting to the video buffer. 974 975**/ 976typedef 977EFI_STATUS 978(EFIAPI *EFI_GRAPHICS_OUTPUT_PROTOCOL_BLT) ( 979 IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This, 980 IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer, OPTIONAL 981 IN EFI_GRAPHICS_OUTPUT_BLT_OPERATION BltOperation, 982 IN UINTN SourceX, 983 IN UINTN SourceY, 984 IN UINTN DestinationX, 985 IN UINTN DestinationY, 986 IN UINTN Width, 987 IN UINTN Height, 988 IN UINTN Delta OPTIONAL 989 ); 990 991typedef struct { 992 UINT32 MaxMode; 993 UINT32 Mode; 994 EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Info; 995 UINTN SizeOfInfo; 996 EFI_PHYSICAL_ADDRESS FrameBufferBase; 997 UINTN FrameBufferSize; 998} EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE; 999 1000struct _EFI_GRAPHICS_OUTPUT_PROTOCOL { 1001 EFI_GRAPHICS_OUTPUT_PROTOCOL_QUERY_MODE QueryMode; 1002 EFI_GRAPHICS_OUTPUT_PROTOCOL_SET_MODE SetMode; 1003 EFI_GRAPHICS_OUTPUT_PROTOCOL_BLT Blt; 1004 EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE *Mode; 1005}; 1006 1007 1008 1009/* 1010 * EFI EDID Discovered Protocol 1011 * UEFI Specification Version 2.5 Section 11.9 1012 */ 1013#define EFI_EDID_DISCOVERED_PROTOCOL_GUID \ 1014 { 0x1C0C34F6, 0xD380, 0x41FA, { 0xA0, 0x49, 0x8a, 0xD0, 0x6C, 0x1A, 0x66, 0xAA} } 1015 1016typedef struct _EFI_EDID_DISCOVERED_PROTOCOL { 1017 UINT32 SizeOfEdid; 1018 UINT8 *Edid; 1019} EFI_EDID_DISCOVERED_PROTOCOL; 1020 1021 1022 1023/* 1024 * EFI EDID Active Protocol 1025 * UEFI Specification Version 2.5 Section 11.9 1026 */ 1027#define EFI_EDID_ACTIVE_PROTOCOL_GUID \ 1028 { 0xBD8C1056, 0x9F36, 0x44EC, { 0x92, 0xA8, 0xA6, 0x33, 0x7F, 0x81, 0x79, 0x86} } 1029 1030typedef struct _EFI_EDID_ACTIVE_PROTOCOL { 1031 UINT32 SizeOfEdid; 1032 UINT8 *Edid; 1033} EFI_EDID_ACTIVE_PROTOCOL; 1034 1035 1036 1037/* 1038 * EFI EDID Override Protocol 1039 * UEFI Specification Version 2.5 Section 11.9 1040 */ 1041#define EFI_EDID_OVERRIDE_PROTOCOL_GUID \ 1042 { 0x48ECB431, 0xFB72, 0x45C0, { 0xA9, 0x22, 0xF4, 0x58, 0xFE, 0x04, 0x0B, 0xD5} } 1043 1044INTERFACE_DECL(_EFI_EDID_OVERRIDE_PROTOCOL); 1045 1046typedef 1047EFI_STATUS 1048(EFIAPI *EFI_EDID_OVERRIDE_PROTOCOL_GET_EDID) ( 1049 IN struct _EFI_EDID_OVERRIDE_PROTOCOL *This, 1050 IN EFI_HANDLE *ChildHandle, 1051 OUT UINT32 *Attributes, 1052 IN OUT UINTN *EdidSize, 1053 IN OUT UINT8 **Edid); 1054 1055typedef struct _EFI_EDID_OVERRIDE_PROTOCOL { 1056 EFI_EDID_OVERRIDE_PROTOCOL_GET_EDID GetEdid; 1057} EFI_EDID_OVERRIDE_PROTOCOL; 1058 1059 1060 1061INTERFACE_DECL(_EFI_SERVICE_BINDING); 1062 1063typedef 1064EFI_STATUS 1065(EFIAPI *EFI_SERVICE_BINDING_CREATE_CHILD) ( 1066 IN struct _EFI_SERVICE_BINDING *This, 1067 IN EFI_HANDLE *ChildHandle 1068 ); 1069 1070typedef 1071EFI_STATUS 1072(EFIAPI *EFI_SERVICE_BINDING_DESTROY_CHILD) ( 1073 IN struct _EFI_SERVICE_BINDING *This, 1074 IN EFI_HANDLE ChildHandle 1075 ); 1076 1077typedef struct _EFI_SERVICE_BINDING { 1078 EFI_SERVICE_BINDING_CREATE_CHILD CreateChild; 1079 EFI_SERVICE_BINDING_DESTROY_CHILD DestroyChild; 1080} EFI_SERVICE_BINDING; 1081 1082 1083 1084/* 1085 * EFI Driver Binding Protocol 1086 * UEFI Specification Version 2.5 Section 10.1 1087 */ 1088#define EFI_DRIVER_BINDING_PROTOCOL_GUID \ 1089 { 0x18A031AB, 0xB443, 0x4D1A, { 0xA5, 0xC0, 0x0C, 0x09, 0x26, 0x1E, 0x9F, 0x71} } 1090#define DRIVER_BINDING_PROTOCOL EFI_DRIVER_BINDING_PROTOCOL_GUID 1091 1092INTERFACE_DECL(_EFI_DRIVER_BINDING_PROTOCOL); 1093 1094typedef 1095EFI_STATUS 1096(EFIAPI *EFI_DRIVER_BINDING_PROTOCOL_SUPPORTED) ( 1097 IN struct _EFI_DRIVER_BINDING_PROTOCOL *This, 1098 IN EFI_HANDLE ControllerHandle, 1099 IN EFI_DEVICE_PATH *RemainingDevicePath OPTIONAL); 1100 1101typedef 1102EFI_STATUS 1103(EFIAPI *EFI_DRIVER_BINDING_PROTOCOL_START) ( 1104 IN struct _EFI_DRIVER_BINDING_PROTOCOL *This, 1105 IN EFI_HANDLE ControllerHandle, 1106 IN EFI_DEVICE_PATH *RemainingDevicePath OPTIONAL); 1107 1108typedef 1109EFI_STATUS 1110(EFIAPI *EFI_DRIVER_BINDING_PROTOCOL_STOP) ( 1111 IN struct _EFI_DRIVER_BINDING_PROTOCOL *This, 1112 IN EFI_HANDLE ControllerHandle, 1113 IN UINTN NumberOfChildren, 1114 IN EFI_HANDLE *ChildHandleBuffer OPTIONAL); 1115 1116typedef struct _EFI_DRIVER_BINDING_PROTOCOL { 1117 EFI_DRIVER_BINDING_PROTOCOL_SUPPORTED Supported; 1118 EFI_DRIVER_BINDING_PROTOCOL_START Start; 1119 EFI_DRIVER_BINDING_PROTOCOL_STOP Stop; 1120 UINT32 Version; 1121 EFI_HANDLE ImageHandle; 1122 EFI_HANDLE DriverBindingHandle; 1123} EFI_DRIVER_BINDING_PROTOCOL; 1124 1125typedef struct _EFI_DRIVER_BINDING_PROTOCOL _EFI_DRIVER_BINDING; 1126typedef EFI_DRIVER_BINDING_PROTOCOL EFI_DRIVER_BINDING; 1127 1128 1129/* 1130 * Backwards compatibility with older GNU-EFI versions. Deprecated. 1131 */ 1132#define EFI_DRIVER_SUPPORTED EFI_DRIVER_BINDING_PROTOCOL_SUPPORTED 1133#define EFI_DRIVER_START EFI_DRIVER_BINDING_PROTOCOL_START 1134#define EFI_DRIVER_STOP EFI_DRIVER_BINDING_PROTOCOL_STOP 1135 1136 1137 1138/* 1139 * EFI Component Name Protocol 1140 * Deprecated - use EFI Component Name 2 Protocol instead 1141 */ 1142#define EFI_COMPONENT_NAME_PROTOCOL_GUID \ 1143 {0x107A772C, 0xD5E1, 0x11D4, { 0x9A, 0x46, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D} } 1144#define COMPONENT_NAME_PROTOCOL EFI_COMPONENT_NAME_PROTOCOL_GUID 1145 1146INTERFACE_DECL(_EFI_COMPONENT_NAME_PROTOCOL); 1147 1148typedef 1149EFI_STATUS 1150(EFIAPI *EFI_COMPONENT_NAME_GET_DRIVER_NAME) ( 1151 IN struct _EFI_COMPONENT_NAME_PROTOCOL *This, 1152 IN CHAR8 *Language, 1153 OUT CHAR16 **DriverName); 1154 1155typedef 1156EFI_STATUS 1157(EFIAPI *EFI_COMPONENT_NAME_GET_CONTROLLER_NAME) ( 1158 IN struct _EFI_COMPONENT_NAME_PROTOCOL *This, 1159 IN EFI_HANDLE ControllerHandle, 1160 IN EFI_HANDLE ChildHandle OPTIONAL, 1161 IN CHAR8 *Language, 1162 OUT CHAR16 **ControllerName); 1163 1164typedef struct _EFI_COMPONENT_NAME_PROTOCOL { 1165 EFI_COMPONENT_NAME_GET_DRIVER_NAME GetDriverName; 1166 EFI_COMPONENT_NAME_GET_CONTROLLER_NAME GetControllerName; 1167 CHAR8 *SupportedLanguages; 1168} EFI_COMPONENT_NAME_PROTOCOL; 1169 1170typedef struct _EFI_COMPONENT_NAME_PROTOCOL _EFI_COMPONENT_NAME; 1171typedef EFI_COMPONENT_NAME_PROTOCOL EFI_COMPONENT_NAME; 1172 1173 1174/* 1175 * EFI Component Name 2 Protocol 1176 * UEFI Specification Version 2.5 Section 10.5 1177 */ 1178#define EFI_COMPONENT_NAME2_PROTOCOL_GUID \ 1179 {0x6A7A5CFF, 0xE8D9, 0x4F70, { 0xBA, 0xDA, 0x75, 0xAB, 0x30, 0x25, 0xCE, 0x14} } 1180#define COMPONENT_NAME2_PROTOCOL EFI_COMPONENT_NAME2_PROTOCOL_GUID 1181 1182INTERFACE_DECL(_EFI_COMPONENT_NAME2_PROTOCOL); 1183 1184typedef 1185EFI_STATUS 1186(EFIAPI *EFI_COMPONENT_NAME2_GET_DRIVER_NAME) ( 1187 IN struct _EFI_COMPONENT_NAME2_PROTOCOL *This, 1188 IN CHAR8 *Language, 1189 OUT CHAR16 **DriverName); 1190 1191typedef 1192EFI_STATUS 1193(EFIAPI *EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) ( 1194 IN struct _EFI_COMPONENT_NAME2_PROTOCOL *This, 1195 IN EFI_HANDLE ControllerHandle, 1196 IN EFI_HANDLE ChildHandle OPTIONAL, 1197 IN CHAR8 *Language, 1198 OUT CHAR16 **ControllerName); 1199 1200typedef struct _EFI_COMPONENT_NAME2_PROTOCOL { 1201 EFI_COMPONENT_NAME2_GET_DRIVER_NAME GetDriverName; 1202 EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME GetControllerName; 1203 CHAR8 *SupportedLanguages; 1204} EFI_COMPONENT_NAME2_PROTOCOL; 1205 1206typedef struct _EFI_COMPONENT_NAME2_PROTOCOL _EFI_COMPONENT_NAME2; 1207typedef EFI_COMPONENT_NAME2_PROTOCOL EFI_COMPONENT_NAME2; 1208 1209 1210 1211/* 1212 * EFI Loaded Image Protocol 1213 * UEFI Specification Version 2.5 Section 8.1 1214 */ 1215#define EFI_LOADED_IMAGE_PROTOCOL_GUID \ 1216 { 0x5B1B31A1, 0x9562, 0x11d2, {0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B} } 1217#define LOADED_IMAGE_PROTOCOL EFI_LOADED_IMAGE_PROTOCOL_GUID 1218 1219#define EFI_LOADED_IMAGE_PROTOCOL_REVISION 0x1000 1220#define EFI_IMAGE_INFORMATION_REVISION EFI_LOADED_IMAGE_PROTOCOL_REVISION 1221 1222typedef 1223EFI_STATUS 1224(EFIAPI *EFI_IMAGE_UNLOAD) ( 1225 IN EFI_HANDLE ImageHandle 1226 ); 1227 1228typedef struct { 1229 UINT32 Revision; 1230 EFI_HANDLE ParentHandle; 1231 struct _EFI_SYSTEM_TABLE *SystemTable; 1232 1233 // Source location of image 1234 EFI_HANDLE DeviceHandle; 1235 EFI_DEVICE_PATH *FilePath; 1236 VOID *Reserved; 1237 1238 // Images load options 1239 UINT32 LoadOptionsSize; 1240 VOID *LoadOptions; 1241 1242 // Location of where image was loaded 1243 VOID *ImageBase; 1244 UINT64 ImageSize; 1245 EFI_MEMORY_TYPE ImageCodeType; 1246 EFI_MEMORY_TYPE ImageDataType; 1247 1248 // If the driver image supports a dynamic unload request 1249 EFI_IMAGE_UNLOAD Unload; 1250} EFI_LOADED_IMAGE_PROTOCOL; 1251 1252typedef EFI_LOADED_IMAGE_PROTOCOL EFI_LOADED_IMAGE; 1253 1254#define EFI_LOADED_IMAGE_DEVICE_PATH_PROTOCOL_GUID \ 1255 {0xbc62157e, 0x3e33, 0x4fec, {0x99, 0x20, 0x2d, 0x3b, 0x36, 0xd7, 0x50, 0xdf} } 1256 1257/* 1258 * Random Number Generator Protocol 1259 * UEFI Specification Version 2.5 Section 35.5 1260 */ 1261#define EFI_RNG_PROTOCOL_GUID \ 1262 { 0x3152bca5, 0xeade, 0x433d, {0x86, 0x2e, 0xc0, 0x1c, 0xdc, 0x29, 0x1f, 0x44} } 1263 1264typedef EFI_GUID EFI_RNG_ALGORITHM; 1265 1266#define EFI_RNG_ALGORITHM_SP800_90_HASH_256_GUID \ 1267 {0xa7af67cb, 0x603b, 0x4d42, {0xba, 0x21, 0x70, 0xbf, 0xb6, 0x29, 0x3f, 0x96} } 1268 1269#define EFI_RNG_ALGORITHM_SP800_90_HMAC_256_GUID \ 1270 {0xc5149b43, 0xae85, 0x4f53, {0x99, 0x82, 0xb9, 0x43, 0x35, 0xd3, 0xa9, 0xe7} } 1271 1272#define EFI_RNG_ALGORITHM_SP800_90_CTR_256_GUID \ 1273 {0x44f0de6e, 0x4d8c, 0x4045, {0xa8, 0xc7, 0x4d, 0xd1, 0x68, 0x85, 0x6b, 0x9e} } 1274 1275#define EFI_RNG_ALGORITHM_X9_31_3DES_GUID \ 1276 {0x63c4785a, 0xca34, 0x4012, {0xa3, 0xc8, 0x0b, 0x6a, 0x32, 0x4f, 0x55, 0x46} } 1277 1278#define EFI_RNG_ALGORITHM_X9_31_AES_GUID \ 1279 {0xacd03321, 0x777e, 0x4d3d, {0xb1, 0xc8, 0x20, 0xcf, 0xd8, 0x88, 0x20, 0xc9} } 1280 1281#define EFI_RNG_ALGORITHM_RAW \ 1282 {0xe43176d7, 0xb6e8, 0x4827, {0xb7, 0x84, 0x7f, 0xfd, 0xc4, 0xb6, 0x85, 0x61} } 1283 1284INTERFACE_DECL(_EFI_RNG_PROTOCOL); 1285 1286typedef 1287EFI_STATUS 1288(EFIAPI *EFI_RNG_GET_INFO) ( 1289 IN struct _EFI_RNG_PROTOCOL *This, 1290 IN OUT UINTN *RNGAlgorithmListSize, 1291 OUT EFI_RNG_ALGORITHM *RNGAlgorithmList 1292); 1293 1294typedef 1295EFI_STATUS 1296(EFIAPI *EFI_RNG_GET_RNG) ( 1297 IN struct _EFI_RNG_PROTOCOL *This, 1298 IN EFI_RNG_ALGORITHM *RNGAlgorithm, OPTIONAL 1299 IN UINTN RNGValueLength, 1300 OUT UINT8 *RNGValue 1301); 1302 1303typedef struct _EFI_RNG_PROTOCOL { 1304 EFI_RNG_GET_INFO GetInfo; 1305 EFI_RNG_GET_RNG GetRNG; 1306} EFI_RNG_PROTOCOL; 1307 1308 1309// 1310// EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL 1311// 1312 1313#define EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL_GUID \ 1314 { 0x6b30c738, 0xa391, 0x11d4, {0x9a, 0x3b, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d} } 1315 1316INTERFACE_DECL(_EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL); 1317 1318typedef 1319EFI_STATUS 1320(EFIAPI *EFI_PLATFORM_DRIVER_OVERRIDE_GET_DRIVER) ( 1321IN struct _EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL *This, 1322IN EFI_HANDLE ControllerHandle, 1323IN OUT EFI_HANDLE *DriverImageHandle); 1324 1325typedef 1326EFI_STATUS 1327(EFIAPI *EFI_PLATFORM_DRIVER_OVERRIDE_GET_DRIVER_PATH) ( 1328IN struct _EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL *This, 1329IN EFI_HANDLE ControllerHandle, 1330IN OUT EFI_DEVICE_PATH **DriverImagePath); 1331 1332typedef 1333EFI_STATUS 1334(EFIAPI *EFI_PLATFORM_DRIVER_OVERRIDE_DRIVER_LOADED) ( 1335IN struct _EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL *This, 1336IN EFI_HANDLE ControllerHandle, 1337IN EFI_DEVICE_PATH *DriverImagePath, 1338IN EFI_HANDLE DriverImageHandle); 1339 1340typedef struct _EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL { 1341 EFI_PLATFORM_DRIVER_OVERRIDE_GET_DRIVER GetDriver; 1342 EFI_PLATFORM_DRIVER_OVERRIDE_GET_DRIVER_PATH GetDriverPath; 1343 EFI_PLATFORM_DRIVER_OVERRIDE_DRIVER_LOADED DriverLoaded; 1344} EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL; 1345 1346// 1347// EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL 1348// 1349 1350#define EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL_GUID \ 1351 { 0x3bc1b285, 0x8a15, 0x4a82, {0xaa, 0xbf, 0x4d, 0x7d, 0x13, 0xfb, 0x32, 0x65} } 1352 1353INTERFACE_DECL(_EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL); 1354 1355typedef 1356EFI_STATUS 1357(EFIAPI *EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_GET_DRIVER) ( 1358IN struct _EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL *This, 1359IN OUT EFI_HANDLE *DriverImageHandle); 1360 1361typedef struct _EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL { 1362 EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_GET_DRIVER GetDriver; 1363} EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL; 1364 1365// 1366// EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL 1367// 1368 1369#define EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL_GUID \ 1370 { 0xb1ee129e, 0xda36, 0x4181, {0x91, 0xf8, 0x04, 0xa4, 0x92, 0x37, 0x66, 0xa7} } 1371 1372INTERFACE_DECL(_EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL); 1373 1374typedef 1375UINT32 1376(EFIAPI *EFI_DRIVER_FAMILY_OVERRIDE_GET_VERSION) ( 1377IN struct _EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL *This); 1378 1379typedef struct _EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL { 1380 EFI_DRIVER_FAMILY_OVERRIDE_GET_VERSION GetVersion; 1381} EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL; 1382 1383// 1384// EFI_EBC_PROTOCOL 1385// 1386 1387#define EFI_EBC_INTERPRETER_PROTOCOL_GUID \ 1388 {0x13ac6dd1, 0x73d0, 0x11d4, {0xb0, 0x6b, 0x00, 0xaa, 0x00, 0xbd, 0x6d, 0xe7} } 1389 1390#define EFI_EBC_PROTOCOL_GUID EFI_EBC_INTERPRETER_PROTOCOL_GUID 1391 1392INTERFACE_DECL(_EFI_EBC_PROTOCOL); 1393 1394typedef 1395EFI_STATUS 1396(EFIAPI *EFI_EBC_CREATE_THUNK)( 1397 IN struct _EFI_EBC_PROTOCOL *This, 1398 IN EFI_HANDLE ImageHandle, 1399 IN VOID *EbcEntryPoint, 1400 OUT VOID **Thunk); 1401 1402typedef 1403EFI_STATUS 1404(EFIAPI *EFI_EBC_UNLOAD_IMAGE)( 1405 IN struct _EFI_EBC_PROTOCOL *This, 1406 IN EFI_HANDLE ImageHandle); 1407 1408typedef 1409EFI_STATUS 1410(EFIAPI *EBC_ICACHE_FLUSH)( 1411 IN EFI_PHYSICAL_ADDRESS Start, 1412 IN UINT64 Length); 1413 1414typedef 1415EFI_STATUS 1416(EFIAPI *EFI_EBC_REGISTER_ICACHE_FLUSH)( 1417 IN struct _EFI_EBC_PROTOCOL *This, 1418 IN EBC_ICACHE_FLUSH Flush); 1419 1420typedef 1421EFI_STATUS 1422(EFIAPI *EFI_EBC_GET_VERSION)( 1423 IN struct _EFI_EBC_PROTOCOL *This, 1424 IN OUT UINT64 *Version); 1425 1426typedef struct _EFI_EBC_PROTOCOL { 1427 EFI_EBC_CREATE_THUNK CreateThunk; 1428 EFI_EBC_UNLOAD_IMAGE UnloadImage; 1429 EFI_EBC_REGISTER_ICACHE_FLUSH RegisterICacheFlush; 1430 EFI_EBC_GET_VERSION GetVersion; 1431} EFI_EBC_PROTOCOL; 1432 1433#endif 1434