1 /* $NetBSD: efiprot.h,v 1.1.1.2 2018/08/16 18:17:47 jmcneill 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 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 55 INTERFACE_DECL(_EFI_BLOCK_IO_PROTOCOL); 56 57 typedef 58 EFI_STATUS 59 (EFIAPI *EFI_BLOCK_RESET) ( 60 IN struct _EFI_BLOCK_IO_PROTOCOL *This, 61 IN BOOLEAN ExtendedVerification 62 ); 63 64 typedef 65 EFI_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 75 typedef 76 EFI_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 86 typedef 87 EFI_STATUS 88 (EFIAPI *EFI_BLOCK_FLUSH) ( 89 IN struct _EFI_BLOCK_IO_PROTOCOL *This 90 ); 91 92 93 94 typedef 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 115 typedef 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 127 typedef struct _EFI_BLOCK_IO_PROTOCOL _EFI_BLOCK_IO; 128 typedef 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 133 INTERFACE_DECL(_EFI_BLOCK_IO2_PROTOCOL); 134 135 typedef struct { 136 EFI_EVENT Event; 137 EFI_STATUS TransactionStatus; 138 } EFI_BLOCK_IO2_TOKEN; 139 140 typedef 141 EFI_STATUS 142 (EFIAPI *EFI_BLOCK_RESET_EX) ( 143 IN struct _EFI_BLOCK_IO2_PROTOCOL *This, 144 IN BOOLEAN ExtendedVerification 145 ); 146 147 typedef 148 EFI_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 158 typedef 159 EFI_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 169 typedef 170 EFI_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 176 typedef 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 195 INTERFACE_DECL(_EFI_DISK_IO_PROTOCOL); 196 197 typedef 198 EFI_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 208 typedef 209 EFI_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 219 typedef struct _EFI_DISK_IO_PROTOCOL { 220 UINT64 Revision; 221 EFI_DISK_READ ReadDisk; 222 EFI_DISK_WRITE WriteDisk; 223 } EFI_DISK_IO_PROTOCOL; 224 225 typedef struct _EFI_DISK_IO_PROTOCOL _EFI_DISK_IO; 226 typedef 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 234 INTERFACE_DECL(_EFI_DISK_IO2_PROTOCOL); 235 236 typedef struct { 237 EFI_EVENT Event; 238 EFI_STATUS TransactionStatus; 239 } EFI_DISK_IO2_TOKEN; 240 241 typedef 242 EFI_STATUS 243 (EFIAPI *EFI_DISK_CANCEL_EX) ( 244 IN struct _EFI_DISK_IO2_PROTOCOL *This 245 ); 246 247 typedef 248 EFI_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 258 typedef 259 EFI_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 269 typedef 270 EFI_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 276 typedef 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 292 INTERFACE_DECL(_EFI_SIMPLE_FILE_SYSTEM_PROTOCOL); 293 INTERFACE_DECL(_EFI_FILE_HANDLE); 294 295 typedef 296 EFI_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 305 typedef struct _EFI_SIMPLE_FILE_SYSTEM_PROTOCOL { 306 UINT64 Revision; 307 EFI_VOLUME_OPEN OpenVolume; 308 } EFI_SIMPLE_FILE_SYSTEM_PROTOCOL; 309 310 typedef struct _EFI_SIMPLE_FILE_SYSTEM_PROTOCOL _EFI_FILE_IO_INTERFACE; 311 typedef EFI_SIMPLE_FILE_SYSTEM_PROTOCOL EFI_FILE_IO_INTERFACE; 312 313 // 314 // 315 // 316 317 typedef 318 EFI_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 341 typedef 342 EFI_STATUS 343 (EFIAPI *EFI_FILE_CLOSE) ( 344 IN struct _EFI_FILE_HANDLE *File 345 ); 346 347 typedef 348 EFI_STATUS 349 (EFIAPI *EFI_FILE_DELETE) ( 350 IN struct _EFI_FILE_HANDLE *File 351 ); 352 353 typedef 354 EFI_STATUS 355 (EFIAPI *EFI_FILE_READ) ( 356 IN struct _EFI_FILE_HANDLE *File, 357 IN OUT UINTN *BufferSize, 358 OUT VOID *Buffer 359 ); 360 361 typedef 362 EFI_STATUS 363 (EFIAPI *EFI_FILE_WRITE) ( 364 IN struct _EFI_FILE_HANDLE *File, 365 IN OUT UINTN *BufferSize, 366 IN VOID *Buffer 367 ); 368 369 typedef 370 EFI_STATUS 371 (EFIAPI *EFI_FILE_SET_POSITION) ( 372 IN struct _EFI_FILE_HANDLE *File, 373 IN UINT64 Position 374 ); 375 376 typedef 377 EFI_STATUS 378 (EFIAPI *EFI_FILE_GET_POSITION) ( 379 IN struct _EFI_FILE_HANDLE *File, 380 OUT UINT64 *Position 381 ); 382 383 typedef 384 EFI_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 392 typedef 393 EFI_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 401 typedef 402 EFI_STATUS 403 (EFIAPI *EFI_FILE_FLUSH) ( 404 IN struct _EFI_FILE_HANDLE *File 405 ); 406 407 typedef struct { 408 EFI_EVENT Event; 409 EFI_STATUS Status; 410 UINTN BufferSize; 411 VOID *Buffer; 412 } EFI_FILE_IO_TOKEN; 413 414 typedef 415 EFI_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 425 typedef 426 EFI_STATUS 427 (EFIAPI *EFI_FILE_READ_EX) ( 428 IN struct _EFI_FILE_HANDLE *File, 429 IN OUT EFI_FILE_IO_TOKEN *Token 430 ); 431 432 typedef 433 EFI_STATUS 434 (EFIAPI *EFI_FILE_WRITE_EX) ( 435 IN struct _EFI_FILE_HANDLE *File, 436 IN OUT EFI_FILE_IO_TOKEN *Token 437 ); 438 439 typedef 440 EFI_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 451 typedef 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 469 typedef 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 479 typedef 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 503 typedef 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_INFO_ID \ 523 { 0xDB47D7D3,0xFE81, 0x11d3, {0x9A, 0x35, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D} } 524 525 typedef struct { 526 CHAR16 VolumeLabel[1]; 527 } EFI_FILE_SYSTEM_VOLUME_LABEL_INFO; 528 529 #define SIZE_OF_EFI_FILE_SYSTEM_VOLUME_LABEL_INFO EFI_FIELD_OFFSET(EFI_FILE_SYSTEM_VOLUME_LABEL_INFO,VolumeLabel) 530 531 // 532 // Load file protocol 533 // 534 535 536 #define EFI_LOAD_FILE_PROTOCOL_GUID \ 537 { 0x56EC3091, 0x954C, 0x11d2, {0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B} } 538 #define LOAD_FILE_PROTOCOL EFI_LOAD_FILE_PROTOCOL_GUID 539 540 INTERFACE_DECL(_EFI_LOAD_FILE_PROTOCOL); 541 542 typedef 543 EFI_STATUS 544 (EFIAPI *EFI_LOAD_FILE) ( 545 IN struct _EFI_LOAD_FILE_PROTOCOL *This, 546 IN EFI_DEVICE_PATH *FilePath, 547 IN BOOLEAN BootPolicy, 548 IN OUT UINTN *BufferSize, 549 IN VOID *Buffer OPTIONAL 550 ); 551 552 typedef struct _EFI_LOAD_FILE_PROTOCOL { 553 EFI_LOAD_FILE LoadFile; 554 } EFI_LOAD_FILE_PROTOCOL; 555 556 typedef struct _EFI_LOAD_FILE_PROTOCOL _EFI_LOAD_FILE_INTERFACE; 557 typedef EFI_LOAD_FILE_PROTOCOL EFI_LOAD_FILE_INTERFACE; 558 559 // 560 // Device IO protocol 561 // 562 563 #define EFI_DEVICE_IO_PROTOCOL_GUID \ 564 { 0xaf6ac311, 0x84c3, 0x11d2, {0x8e, 0x3c, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b} } 565 #define DEVICE_IO_PROTOCOL EFI_DEVICE_IO_PROTOCOL_GUID 566 567 INTERFACE_DECL(_EFI_DEVICE_IO_PROTOCOL); 568 569 typedef enum { 570 IO_UINT8, 571 IO_UINT16, 572 IO_UINT32, 573 IO_UINT64, 574 // 575 // Specification Change: Copy from MMIO to MMIO vs. MMIO to buffer, buffer to MMIO 576 // 577 MMIO_COPY_UINT8, 578 MMIO_COPY_UINT16, 579 MMIO_COPY_UINT32, 580 MMIO_COPY_UINT64 581 } EFI_IO_WIDTH; 582 583 #define EFI_PCI_ADDRESS(_bus,_dev,_func) \ 584 ( (UINT64) ( (((UINTN)_bus) << 24) + (((UINTN)_dev) << 16) + (((UINTN)_func) << 8) ) ) 585 586 587 typedef 588 EFI_STATUS 589 (EFIAPI *EFI_DEVICE_IO) ( 590 IN struct _EFI_DEVICE_IO_PROTOCOL *This, 591 IN EFI_IO_WIDTH Width, 592 IN UINT64 Address, 593 IN UINTN Count, 594 IN OUT VOID *Buffer 595 ); 596 597 typedef struct { 598 EFI_DEVICE_IO Read; 599 EFI_DEVICE_IO Write; 600 } EFI_IO_ACCESS; 601 602 typedef 603 EFI_STATUS 604 (EFIAPI *EFI_PCI_DEVICE_PATH) ( 605 IN struct _EFI_DEVICE_IO_PROTOCOL *This, 606 IN UINT64 Address, 607 IN OUT EFI_DEVICE_PATH **PciDevicePath 608 ); 609 610 typedef enum { 611 EfiBusMasterRead, 612 EfiBusMasterWrite, 613 EfiBusMasterCommonBuffer 614 } EFI_IO_OPERATION_TYPE; 615 616 typedef 617 EFI_STATUS 618 (EFIAPI *EFI_IO_MAP) ( 619 IN struct _EFI_DEVICE_IO_PROTOCOL *This, 620 IN EFI_IO_OPERATION_TYPE Operation, 621 IN EFI_PHYSICAL_ADDRESS *HostAddress, 622 IN OUT UINTN *NumberOfBytes, 623 OUT EFI_PHYSICAL_ADDRESS *DeviceAddress, 624 OUT VOID **Mapping 625 ); 626 627 typedef 628 EFI_STATUS 629 (EFIAPI *EFI_IO_UNMAP) ( 630 IN struct _EFI_DEVICE_IO_PROTOCOL *This, 631 IN VOID *Mapping 632 ); 633 634 typedef 635 EFI_STATUS 636 (EFIAPI *EFI_IO_ALLOCATE_BUFFER) ( 637 IN struct _EFI_DEVICE_IO_PROTOCOL *This, 638 IN EFI_ALLOCATE_TYPE Type, 639 IN EFI_MEMORY_TYPE MemoryType, 640 IN UINTN Pages, 641 IN OUT EFI_PHYSICAL_ADDRESS *HostAddress 642 ); 643 644 typedef 645 EFI_STATUS 646 (EFIAPI *EFI_IO_FLUSH) ( 647 IN struct _EFI_DEVICE_IO_PROTOCOL *This 648 ); 649 650 typedef 651 EFI_STATUS 652 (EFIAPI *EFI_IO_FREE_BUFFER) ( 653 IN struct _EFI_DEVICE_IO_PROTOCOL *This, 654 IN UINTN Pages, 655 IN EFI_PHYSICAL_ADDRESS HostAddress 656 ); 657 658 typedef struct _EFI_DEVICE_IO_PROTOCOL { 659 EFI_IO_ACCESS Mem; 660 EFI_IO_ACCESS Io; 661 EFI_IO_ACCESS Pci; 662 EFI_IO_MAP Map; 663 EFI_PCI_DEVICE_PATH PciDevicePath; 664 EFI_IO_UNMAP Unmap; 665 EFI_IO_ALLOCATE_BUFFER AllocateBuffer; 666 EFI_IO_FLUSH Flush; 667 EFI_IO_FREE_BUFFER FreeBuffer; 668 } EFI_DEVICE_IO_PROTOCOL; 669 670 typedef struct _EFI_DEVICE_IO_PROTOCOL _EFI_DEVICE_IO_INTERFACE; 671 typedef EFI_DEVICE_IO_PROTOCOL EFI_DEVICE_IO_INTERFACE; 672 673 // 674 // Unicode Collation protocol 675 // 676 677 #define EFI_UNICODE_COLLATION_PROTOCOL_GUID \ 678 { 0x1d85cd7f, 0xf43d, 0x11d2, {0x9a, 0xc, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} } 679 #define UNICODE_COLLATION_PROTOCOL EFI_UNICODE_COLLATION_PROTOCOL_GUID 680 681 #define EFI_UNICODE_BYTE_ORDER_MARK (CHAR16)(0xfeff) 682 #define UNICODE_BYTE_ORDER_MARK EFI_UNICODE_BYTE_ORDER_MARK 683 684 INTERFACE_DECL(_EFI_UNICODE_COLLATION_PROTOCOL); 685 686 typedef 687 INTN 688 (EFIAPI *EFI_UNICODE_STRICOLL) ( 689 IN struct _EFI_UNICODE_COLLATION_PROTOCOL *This, 690 IN CHAR16 *s1, 691 IN CHAR16 *s2 692 ); 693 694 typedef 695 BOOLEAN 696 (EFIAPI *EFI_UNICODE_METAIMATCH) ( 697 IN struct _EFI_UNICODE_COLLATION_PROTOCOL *This, 698 IN CHAR16 *String, 699 IN CHAR16 *Pattern 700 ); 701 702 typedef 703 VOID 704 (EFIAPI *EFI_UNICODE_STRLWR) ( 705 IN struct _EFI_UNICODE_COLLATION_PROTOCOL *This, 706 IN OUT CHAR16 *Str 707 ); 708 709 typedef 710 VOID 711 (EFIAPI *EFI_UNICODE_STRUPR) ( 712 IN struct _EFI_UNICODE_COLLATION_PROTOCOL *This, 713 IN OUT CHAR16 *Str 714 ); 715 716 typedef 717 VOID 718 (EFIAPI *EFI_UNICODE_FATTOSTR) ( 719 IN struct _EFI_UNICODE_COLLATION_PROTOCOL *This, 720 IN UINTN FatSize, 721 IN CHAR8 *Fat, 722 OUT CHAR16 *String 723 ); 724 725 typedef 726 BOOLEAN 727 (EFIAPI *EFI_UNICODE_STRTOFAT) ( 728 IN struct _EFI_UNICODE_COLLATION_PROTOCOL *This, 729 IN CHAR16 *String, 730 IN UINTN FatSize, 731 OUT CHAR8 *Fat 732 ); 733 734 // 735 // Hash Protocol 736 // 737 #define EFI_HASH_PROTOCOL_GUID \ 738 { 0xC5184932, 0xDBA5, 0x46DB, { 0xA5, 0xBA, 0xCC, 0x0B, 0xDA, 0x9C, 0x14, 0x35 } } 739 #define HASH_PROTOCOL EFI_HASH_PROTOCOL_GUID 740 741 #define EFI_HASH_ALGORITHM_SHA1_GUID \ 742 { 0x2AE9D80F, 0x3FB2, 0x4095, { 0xB7, 0xB1, 0xE9, 0x31, 0x57, 0xB9, 0x46, 0xB6 } } // Deprecated 743 #define EFI_HASH_ALGORITHM_SHA1 EFI_HASH_ALGORITHM_SHA1_GUID 744 745 #define EFI_HASH_ALGORITHM_SHA224_GUID \ 746 { 0x8DF01A06, 0x9BD5, 0x4BF7, { 0xB0, 0x21, 0xDB, 0x4F, 0xD9, 0xCC, 0xF4, 0x5B } } // Deprecated 747 #define EFI_HASH_ALGORITHM_SHA224 EFI_HASH_ALGORITHM_SHA224_GUID 748 749 #define EFI_HASH_ALGORITHM_SHA256_GUID \ 750 { 0x51AA59DE, 0xFDF2, 0x4EA3, { 0xBC, 0x63, 0x87, 0x5F, 0xB7, 0x84, 0x2E, 0xE9 } } // Deprecated 751 #define EFI_HASH_ALGORITHM_SHA256 EFI_HASH_ALGORITHM_SHA256_GUID 752 753 #define EFI_HASH_ALGORITHM_SHA384_GUID \ 754 { 0xEFA96432, 0xDE33, 0x4DD2, { 0xAE, 0xE6, 0x32, 0x8C, 0x33, 0xDF, 0x77, 0x7A } } // Deprecated 755 #define EFI_HASH_ALGORITHM_SHA384 EFI_HASH_ALGORITHM_SHA384_GUID 756 757 #define EFI_HASH_ALGORITHM_SHA512_GUID \ 758 { 0xCAA4381E, 0x750C, 0x4770, { 0xB8, 0x70, 0x7A, 0x23, 0xB4, 0xE4, 0x21, 0x30 } } // Deprecated 759 #define EFI_HASH_ALGORITHM_SHA512 EFI_HASH_ALGORITHM_SHA512_GUID 760 761 #define EFI_HASH_ALGORITHM_MD5_GUID \ 762 { 0x0AF7C79C, 0x65B5, 0x4319, { 0xB0, 0xAE, 0x44, 0xEC, 0x48, 0x4E, 0x4A, 0xD7 } } // Deprecated 763 #define EFI_HASH_ALGORITHM_MD5 EFI_HASH_ALGORITHM_MD5_GUID 764 765 #define EFI_HASH_ALGORITHM_SHA1_NOPAD_GUID \ 766 { 0x24C5DC2F, 0x53E2, 0x40CA, { 0x9E, 0xD6, 0xA5, 0xD9, 0xA4, 0x9F, 0x46, 0x3B } } 767 #define EFI_HASH_ALGORITHM_SHA1_NOPAD EFI_HASH_ALGORITHM_SHA1_NOPAD_GUID 768 769 #define EFI_HASH_ALGORITHM_SHA256_NOPAD_GUID \ 770 { 0x8628752A, 0x6CB7, 0x4814, { 0x96, 0xFC, 0x24, 0xA8, 0x15, 0xAC, 0x22, 0x26 } } 771 #define EFI_HASH_ALGORITHM_SHA256_NOPAD EFI_HASH_ALGORITHM_SHA256_NOPAD_GUID 772 773 774 INTERFACE_DECL(_EFI_HASH_PROTOCOL); 775 776 typedef UINT8 EFI_MD5_HASH[16]; 777 typedef UINT8 EFI_SHA1_HASH[20]; 778 typedef UINT8 EFI_SHA224_HASH[28]; 779 typedef UINT8 EFI_SHA256_HASH[32]; 780 typedef UINT8 EFI_SHA384_HASH[48]; 781 typedef UINT8 EFI_SHA512_HASH[64]; 782 typedef union _EFI_HASH_OUTPUT { 783 EFI_MD5_HASH *Md5Hash; 784 EFI_SHA1_HASH *Sha1Hash; 785 EFI_SHA224_HASH *Sha224Hash; 786 EFI_SHA256_HASH *Sha256Hash; 787 EFI_SHA384_HASH *Sha384Hash; 788 EFI_SHA512_HASH *Sha512Hash; 789 } EFI_HASH_OUTPUT; 790 791 typedef 792 EFI_STATUS 793 (EFIAPI *EFI_HASH_GET_HASH_SIZE) ( 794 IN CONST struct _EFI_HASH_PROTOCOL *This, 795 IN CONST EFI_GUID *HashAlgorithm, 796 OUT UINTN *HashSize); 797 798 typedef 799 EFI_STATUS 800 (EFIAPI *EFI_HASH_HASH) ( 801 IN CONST struct _EFI_HASH_PROTOCOL *This, 802 IN CONST EFI_GUID *HashAlgorithm, 803 IN BOOLEAN Extend, 804 IN CONST UINT8 *Message, 805 IN UINT64 MessageSize, 806 IN OUT EFI_HASH_OUTPUT *Hash); 807 808 typedef struct _EFI_HASH_PROTOCOL { 809 EFI_HASH_GET_HASH_SIZE GetHashSize; 810 EFI_HASH_HASH Hash; 811 } EFI_HASH_PROTOCOL; 812 813 typedef struct _EFI_HASH_PROTOCOL _EFI_HASH; 814 typedef EFI_HASH_PROTOCOL EFI_HASH; 815 816 817 typedef struct _EFI_UNICODE_COLLATION_PROTOCOL { 818 819 // general 820 EFI_UNICODE_STRICOLL StriColl; 821 EFI_UNICODE_METAIMATCH MetaiMatch; 822 EFI_UNICODE_STRLWR StrLwr; 823 EFI_UNICODE_STRUPR StrUpr; 824 825 // for supporting fat volumes 826 EFI_UNICODE_FATTOSTR FatToStr; 827 EFI_UNICODE_STRTOFAT StrToFat; 828 829 CHAR8 *SupportedLanguages; 830 } EFI_UNICODE_COLLATION_PROTOCOL; 831 832 typedef EFI_UNICODE_COLLATION_PROTOCOL EFI_UNICODE_COLLATION_INTERFACE; 833 834 /* Graphics output protocol */ 835 #define EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID \ 836 { 0x9042a9de, 0x23dc, 0x4a38, {0x96, 0xfb, 0x7a, 0xde, 0xd0, 0x80, 0x51, 0x6a } } 837 typedef struct _EFI_GRAPHICS_OUTPUT_PROTOCOL EFI_GRAPHICS_OUTPUT_PROTOCOL; 838 839 typedef struct { 840 UINT32 RedMask; 841 UINT32 GreenMask; 842 UINT32 BlueMask; 843 UINT32 ReservedMask; 844 } EFI_PIXEL_BITMASK; 845 846 typedef enum { 847 PixelRedGreenBlueReserved8BitPerColor, 848 PixelBlueGreenRedReserved8BitPerColor, 849 PixelBitMask, 850 PixelBltOnly, 851 PixelFormatMax 852 } EFI_GRAPHICS_PIXEL_FORMAT; 853 854 typedef struct { 855 UINT32 Version; 856 UINT32 HorizontalResolution; 857 UINT32 VerticalResolution; 858 EFI_GRAPHICS_PIXEL_FORMAT PixelFormat; 859 EFI_PIXEL_BITMASK PixelInformation; 860 UINT32 PixelsPerScanLine; 861 } EFI_GRAPHICS_OUTPUT_MODE_INFORMATION; 862 863 /** 864 Return the current video mode information. 865 866 @param This Protocol instance pointer. 867 @param ModeNumber The mode number to return information on. 868 @param SizeOfInfo A pointer to the size, in bytes, of the Info buffer. 869 @param Info A pointer to callee allocated buffer that returns information about ModeNumber. 870 871 @retval EFI_SUCCESS Mode information returned. 872 @retval EFI_BUFFER_TOO_SMALL The Info buffer was too small. 873 @retval EFI_DEVICE_ERROR A hardware error occurred trying to retrieve the video mode. 874 @retval EFI_NOT_STARTED Video display is not initialized. Call SetMode () 875 @retval EFI_INVALID_PARAMETER One of the input args was NULL. 876 877 **/ 878 typedef 879 EFI_STATUS 880 (EFIAPI *EFI_GRAPHICS_OUTPUT_PROTOCOL_QUERY_MODE) ( 881 IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This, 882 IN UINT32 ModeNumber, 883 OUT UINTN *SizeOfInfo, 884 OUT EFI_GRAPHICS_OUTPUT_MODE_INFORMATION **Info 885 ) 886 ; 887 888 /** 889 Return the current video mode information. 890 891 @param This Protocol instance pointer. 892 @param ModeNumber The mode number to be set. 893 894 @retval EFI_SUCCESS Graphics mode was changed. 895 @retval EFI_DEVICE_ERROR The device had an error and could not complete the request. 896 @retval EFI_UNSUPPORTED ModeNumber is not supported by this device. 897 898 **/ 899 typedef 900 EFI_STATUS 901 (EFIAPI *EFI_GRAPHICS_OUTPUT_PROTOCOL_SET_MODE) ( 902 IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This, 903 IN UINT32 ModeNumber 904 ); 905 906 typedef struct { 907 UINT8 Blue; 908 UINT8 Green; 909 UINT8 Red; 910 UINT8 Reserved; 911 } EFI_GRAPHICS_OUTPUT_BLT_PIXEL; 912 913 typedef union { 914 EFI_GRAPHICS_OUTPUT_BLT_PIXEL Pixel; 915 UINT32 Raw; 916 } EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION; 917 918 typedef enum { 919 EfiBltVideoFill, 920 EfiBltVideoToBltBuffer, 921 EfiBltBufferToVideo, 922 EfiBltVideoToVideo, 923 EfiGraphicsOutputBltOperationMax 924 } EFI_GRAPHICS_OUTPUT_BLT_OPERATION; 925 926 /** 927 The following table defines actions for BltOperations: 928 929 <B>EfiBltVideoFill</B> - Write data from the BltBuffer pixel (SourceX, SourceY) 930 directly to every pixel of the video display rectangle 931 (DestinationX, DestinationY) (DestinationX + Width, DestinationY + Height). 932 Only one pixel will be used from the BltBuffer. Delta is NOT used. 933 934 <B>EfiBltVideoToBltBuffer</B> - Read data from the video display rectangle 935 (SourceX, SourceY) (SourceX + Width, SourceY + Height) and place it in 936 the BltBuffer rectangle (DestinationX, DestinationY ) 937 (DestinationX + Width, DestinationY + Height). If DestinationX or 938 DestinationY is not zero then Delta must be set to the length in bytes 939 of a row in the BltBuffer. 940 941 <B>EfiBltBufferToVideo</B> - Write data from the BltBuffer rectangle 942 (SourceX, SourceY) (SourceX + Width, SourceY + Height) directly to the 943 video display rectangle (DestinationX, DestinationY) 944 (DestinationX + Width, DestinationY + Height). If SourceX or SourceY is 945 not zero then Delta must be set to the length in bytes of a row in the 946 BltBuffer. 947 948 <B>EfiBltVideoToVideo</B> - Copy from the video display rectangle (SourceX, SourceY) 949 (SourceX + Width, SourceY + Height) .to the video display rectangle 950 (DestinationX, DestinationY) (DestinationX + Width, DestinationY + Height). 951 The BltBuffer and Delta are not used in this mode. 952 953 @param This Protocol instance pointer. 954 @param BltBuffer Buffer containing data to blit into video buffer. This 955 buffer has a size of Width*Height*sizeof(EFI_GRAPHICS_OUTPUT_BLT_PIXEL) 956 @param BltOperation Operation to perform on BlitBuffer and video memory 957 @param SourceX X coordinate of source for the BltBuffer. 958 @param SourceY Y coordinate of source for the BltBuffer. 959 @param DestinationX X coordinate of destination for the BltBuffer. 960 @param DestinationY Y coordinate of destination for the BltBuffer. 961 @param Width Width of rectangle in BltBuffer in pixels. 962 @param Height Hight of rectangle in BltBuffer in pixels. 963 @param Delta OPTIONAL 964 965 @retval EFI_SUCCESS The Blt operation completed. 966 @retval EFI_INVALID_PARAMETER BltOperation is not valid. 967 @retval EFI_DEVICE_ERROR A hardware error occured writting to the video buffer. 968 969 **/ 970 typedef 971 EFI_STATUS 972 (EFIAPI *EFI_GRAPHICS_OUTPUT_PROTOCOL_BLT) ( 973 IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This, 974 IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer, OPTIONAL 975 IN EFI_GRAPHICS_OUTPUT_BLT_OPERATION BltOperation, 976 IN UINTN SourceX, 977 IN UINTN SourceY, 978 IN UINTN DestinationX, 979 IN UINTN DestinationY, 980 IN UINTN Width, 981 IN UINTN Height, 982 IN UINTN Delta OPTIONAL 983 ); 984 985 typedef struct { 986 UINT32 MaxMode; 987 UINT32 Mode; 988 EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Info; 989 UINTN SizeOfInfo; 990 EFI_PHYSICAL_ADDRESS FrameBufferBase; 991 UINTN FrameBufferSize; 992 } EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE; 993 994 struct _EFI_GRAPHICS_OUTPUT_PROTOCOL { 995 EFI_GRAPHICS_OUTPUT_PROTOCOL_QUERY_MODE QueryMode; 996 EFI_GRAPHICS_OUTPUT_PROTOCOL_SET_MODE SetMode; 997 EFI_GRAPHICS_OUTPUT_PROTOCOL_BLT Blt; 998 EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE *Mode; 999 }; 1000 1001 1002 1003 /* 1004 * EFI EDID Discovered Protocol 1005 * UEFI Specification Version 2.5 Section 11.9 1006 */ 1007 #define EFI_EDID_DISCOVERED_PROTOCOL_GUID \ 1008 { 0x1C0C34F6, 0xD380, 0x41FA, { 0xA0, 0x49, 0x8a, 0xD0, 0x6C, 0x1A, 0x66, 0xAA} } 1009 1010 typedef struct _EFI_EDID_DISCOVERED_PROTOCOL { 1011 UINT32 SizeOfEdid; 1012 UINT8 *Edid; 1013 } EFI_EDID_DISCOVERED_PROTOCOL; 1014 1015 1016 1017 /* 1018 * EFI EDID Active Protocol 1019 * UEFI Specification Version 2.5 Section 11.9 1020 */ 1021 #define EFI_EDID_ACTIVE_PROTOCOL_GUID \ 1022 { 0xBD8C1056, 0x9F36, 0x44EC, { 0x92, 0xA8, 0xA6, 0x33, 0x7F, 0x81, 0x79, 0x86} } 1023 1024 typedef struct _EFI_EDID_ACTIVE_PROTOCOL { 1025 UINT32 SizeOfEdid; 1026 UINT8 *Edid; 1027 } EFI_EDID_ACTIVE_PROTOCOL; 1028 1029 1030 1031 /* 1032 * EFI EDID Override Protocol 1033 * UEFI Specification Version 2.5 Section 11.9 1034 */ 1035 #define EFI_EDID_OVERRIDE_PROTOCOL_GUID \ 1036 { 0x48ECB431, 0xFB72, 0x45C0, { 0xA9, 0x22, 0xF4, 0x58, 0xFE, 0x04, 0x0B, 0xD5} } 1037 1038 INTERFACE_DECL(_EFI_EDID_OVERRIDE_PROTOCOL); 1039 1040 typedef 1041 EFI_STATUS 1042 (EFIAPI *EFI_EDID_OVERRIDE_PROTOCOL_GET_EDID) ( 1043 IN struct _EFI_EDID_OVERRIDE_PROTOCOL *This, 1044 IN EFI_HANDLE *ChildHandle, 1045 OUT UINT32 *Attributes, 1046 IN OUT UINTN *EdidSize, 1047 IN OUT UINT8 **Edid); 1048 1049 typedef struct _EFI_EDID_OVERRIDE_PROTOCOL { 1050 EFI_EDID_OVERRIDE_PROTOCOL_GET_EDID GetEdid; 1051 } EFI_EDID_OVERRIDE_PROTOCOL; 1052 1053 1054 1055 INTERFACE_DECL(_EFI_SERVICE_BINDING); 1056 1057 typedef 1058 EFI_STATUS 1059 (EFIAPI *EFI_SERVICE_BINDING_CREATE_CHILD) ( 1060 IN struct _EFI_SERVICE_BINDING *This, 1061 IN EFI_HANDLE *ChildHandle 1062 ); 1063 1064 typedef 1065 EFI_STATUS 1066 (EFIAPI *EFI_SERVICE_BINDING_DESTROY_CHILD) ( 1067 IN struct _EFI_SERVICE_BINDING *This, 1068 IN EFI_HANDLE ChildHandle 1069 ); 1070 1071 typedef struct _EFI_SERVICE_BINDING { 1072 EFI_SERVICE_BINDING_CREATE_CHILD CreateChild; 1073 EFI_SERVICE_BINDING_DESTROY_CHILD DestroyChild; 1074 } EFI_SERVICE_BINDING; 1075 1076 1077 1078 /* 1079 * EFI Driver Binding Protocol 1080 * UEFI Specification Version 2.5 Section 10.1 1081 */ 1082 #define EFI_DRIVER_BINDING_PROTOCOL_GUID \ 1083 { 0x18A031AB, 0xB443, 0x4D1A, { 0xA5, 0xC0, 0x0C, 0x09, 0x26, 0x1E, 0x9F, 0x71} } 1084 #define DRIVER_BINDING_PROTOCOL EFI_DRIVER_BINDING_PROTOCOL_GUID 1085 1086 INTERFACE_DECL(_EFI_DRIVER_BINDING_PROTOCOL); 1087 1088 typedef 1089 EFI_STATUS 1090 (EFIAPI *EFI_DRIVER_BINDING_PROTOCOL_SUPPORTED) ( 1091 IN struct _EFI_DRIVER_BINDING_PROTOCOL *This, 1092 IN EFI_HANDLE ControllerHandle, 1093 IN EFI_DEVICE_PATH *RemainingDevicePath OPTIONAL); 1094 1095 typedef 1096 EFI_STATUS 1097 (EFIAPI *EFI_DRIVER_BINDING_PROTOCOL_START) ( 1098 IN struct _EFI_DRIVER_BINDING_PROTOCOL *This, 1099 IN EFI_HANDLE ControllerHandle, 1100 IN EFI_DEVICE_PATH *RemainingDevicePath OPTIONAL); 1101 1102 typedef 1103 EFI_STATUS 1104 (EFIAPI *EFI_DRIVER_BINDING_PROTOCOL_STOP) ( 1105 IN struct _EFI_DRIVER_BINDING_PROTOCOL *This, 1106 IN EFI_HANDLE ControllerHandle, 1107 IN UINTN NumberOfChildren, 1108 IN EFI_HANDLE *ChildHandleBuffer OPTIONAL); 1109 1110 typedef struct _EFI_DRIVER_BINDING_PROTOCOL { 1111 EFI_DRIVER_BINDING_PROTOCOL_SUPPORTED Supported; 1112 EFI_DRIVER_BINDING_PROTOCOL_START Start; 1113 EFI_DRIVER_BINDING_PROTOCOL_STOP Stop; 1114 UINT32 Version; 1115 EFI_HANDLE ImageHandle; 1116 EFI_HANDLE DriverBindingHandle; 1117 } EFI_DRIVER_BINDING_PROTOCOL; 1118 1119 typedef struct _EFI_DRIVER_BINDING_PROTOCOL _EFI_DRIVER_BINDING; 1120 typedef EFI_DRIVER_BINDING_PROTOCOL EFI_DRIVER_BINDING; 1121 1122 1123 /* 1124 * Backwards compatibility with older GNU-EFI versions. Deprecated. 1125 */ 1126 #define EFI_DRIVER_SUPPORTED EFI_DRIVER_BINDING_PROTOCOL_SUPPORTED 1127 #define EFI_DRIVER_START EFI_DRIVER_BINDING_PROTOCOL_START 1128 #define EFI_DRIVER_STOP EFI_DRIVER_BINDING_PROTOCOL_STOP 1129 1130 1131 1132 /* 1133 * EFI Component Name Protocol 1134 * Deprecated - use EFI Component Name 2 Protocol instead 1135 */ 1136 #define EFI_COMPONENT_NAME_PROTOCOL_GUID \ 1137 {0x107A772C, 0xD5E1, 0x11D4, { 0x9A, 0x46, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D} } 1138 #define COMPONENT_NAME_PROTOCOL EFI_COMPONENT_NAME_PROTOCOL_GUID 1139 1140 INTERFACE_DECL(_EFI_COMPONENT_NAME_PROTOCOL); 1141 1142 typedef 1143 EFI_STATUS 1144 (EFIAPI *EFI_COMPONENT_NAME_GET_DRIVER_NAME) ( 1145 IN struct _EFI_COMPONENT_NAME_PROTOCOL *This, 1146 IN CHAR8 *Language, 1147 OUT CHAR16 **DriverName); 1148 1149 typedef 1150 EFI_STATUS 1151 (EFIAPI *EFI_COMPONENT_NAME_GET_CONTROLLER_NAME) ( 1152 IN struct _EFI_COMPONENT_NAME_PROTOCOL *This, 1153 IN EFI_HANDLE ControllerHandle, 1154 IN EFI_HANDLE ChildHandle OPTIONAL, 1155 IN CHAR8 *Language, 1156 OUT CHAR16 **ControllerName); 1157 1158 typedef struct _EFI_COMPONENT_NAME_PROTOCOL { 1159 EFI_COMPONENT_NAME_GET_DRIVER_NAME GetDriverName; 1160 EFI_COMPONENT_NAME_GET_CONTROLLER_NAME GetControllerName; 1161 CHAR8 *SupportedLanguages; 1162 } EFI_COMPONENT_NAME_PROTOCOL; 1163 1164 typedef struct _EFI_COMPONENT_NAME_PROTOCOL _EFI_COMPONENT_NAME; 1165 typedef EFI_COMPONENT_NAME_PROTOCOL EFI_COMPONENT_NAME; 1166 1167 1168 /* 1169 * EFI Component Name 2 Protocol 1170 * UEFI Specification Version 2.5 Section 10.5 1171 */ 1172 #define EFI_COMPONENT_NAME2_PROTOCOL_GUID \ 1173 {0x6A7A5CFF, 0xE8D9, 0x4F70, { 0xBA, 0xDA, 0x75, 0xAB, 0x30, 0x25, 0xCE, 0x14} } 1174 #define COMPONENT_NAME2_PROTOCOL EFI_COMPONENT_NAME2_PROTOCOL_GUID 1175 1176 INTERFACE_DECL(_EFI_COMPONENT_NAME2_PROTOCOL); 1177 1178 typedef 1179 EFI_STATUS 1180 (EFIAPI *EFI_COMPONENT_NAME2_GET_DRIVER_NAME) ( 1181 IN struct _EFI_COMPONENT_NAME2_PROTOCOL *This, 1182 IN CHAR8 *Language, 1183 OUT CHAR16 **DriverName); 1184 1185 typedef 1186 EFI_STATUS 1187 (EFIAPI *EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) ( 1188 IN struct _EFI_COMPONENT_NAME2_PROTOCOL *This, 1189 IN EFI_HANDLE ControllerHandle, 1190 IN EFI_HANDLE ChildHandle OPTIONAL, 1191 IN CHAR8 *Language, 1192 OUT CHAR16 **ControllerName); 1193 1194 typedef struct _EFI_COMPONENT_NAME2_PROTOCOL { 1195 EFI_COMPONENT_NAME2_GET_DRIVER_NAME GetDriverName; 1196 EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME GetControllerName; 1197 CHAR8 *SupportedLanguages; 1198 } EFI_COMPONENT_NAME2_PROTOCOL; 1199 1200 typedef struct _EFI_COMPONENT_NAME2_PROTOCOL _EFI_COMPONENT_NAME2; 1201 typedef EFI_COMPONENT_NAME2_PROTOCOL EFI_COMPONENT_NAME2; 1202 1203 1204 1205 /* 1206 * EFI Loaded Image Protocol 1207 * UEFI Specification Version 2.5 Section 8.1 1208 */ 1209 #define EFI_LOADED_IMAGE_PROTOCOL_GUID \ 1210 { 0x5B1B31A1, 0x9562, 0x11d2, {0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B} } 1211 #define LOADED_IMAGE_PROTOCOL EFI_LOADED_IMAGE_PROTOCOL_GUID 1212 1213 #define EFI_LOADED_IMAGE_PROTOCOL_REVISION 0x1000 1214 #define EFI_IMAGE_INFORMATION_REVISION EFI_LOADED_IMAGE_PROTOCOL_REVISION 1215 1216 typedef 1217 EFI_STATUS 1218 (EFIAPI *EFI_IMAGE_UNLOAD) ( 1219 IN EFI_HANDLE ImageHandle 1220 ); 1221 1222 typedef struct { 1223 UINT32 Revision; 1224 EFI_HANDLE ParentHandle; 1225 struct _EFI_SYSTEM_TABLE *SystemTable; 1226 1227 // Source location of image 1228 EFI_HANDLE DeviceHandle; 1229 EFI_DEVICE_PATH *FilePath; 1230 VOID *Reserved; 1231 1232 // Images load options 1233 UINT32 LoadOptionsSize; 1234 VOID *LoadOptions; 1235 1236 // Location of where image was loaded 1237 VOID *ImageBase; 1238 UINT64 ImageSize; 1239 EFI_MEMORY_TYPE ImageCodeType; 1240 EFI_MEMORY_TYPE ImageDataType; 1241 1242 // If the driver image supports a dynamic unload request 1243 EFI_IMAGE_UNLOAD Unload; 1244 } EFI_LOADED_IMAGE_PROTOCOL; 1245 1246 typedef EFI_LOADED_IMAGE_PROTOCOL EFI_LOADED_IMAGE; 1247 1248 1249 1250 /* 1251 * Random Number Generator Protocol 1252 * UEFI Specification Version 2.5 Section 35.5 1253 */ 1254 #define EFI_RNG_PROTOCOL_GUID \ 1255 { 0x3152bca5, 0xeade, 0x433d, {0x86, 0x2e, 0xc0, 0x1c, 0xdc, 0x29, 0x1f, 0x44} } 1256 1257 typedef EFI_GUID EFI_RNG_ALGORITHM; 1258 1259 #define EFI_RNG_ALGORITHM_SP800_90_HASH_256_GUID \ 1260 {0xa7af67cb, 0x603b, 0x4d42, {0xba, 0x21, 0x70, 0xbf, 0xb6, 0x29, 0x3f, 0x96} } 1261 1262 #define EFI_RNG_ALGORITHM_SP800_90_HMAC_256_GUID \ 1263 {0xc5149b43, 0xae85, 0x4f53, {0x99, 0x82, 0xb9, 0x43, 0x35, 0xd3, 0xa9, 0xe7} } 1264 1265 #define EFI_RNG_ALGORITHM_SP800_90_CTR_256_GUID \ 1266 {0x44f0de6e, 0x4d8c, 0x4045, {0xa8, 0xc7, 0x4d, 0xd1, 0x68, 0x85, 0x6b, 0x9e} } 1267 1268 #define EFI_RNG_ALGORITHM_X9_31_3DES_GUID \ 1269 {0x63c4785a, 0xca34, 0x4012, {0xa3, 0xc8, 0x0b, 0x6a, 0x32, 0x4f, 0x55, 0x46} } 1270 1271 #define EFI_RNG_ALGORITHM_X9_31_AES_GUID \ 1272 {0xacd03321, 0x777e, 0x4d3d, {0xb1, 0xc8, 0x20, 0xcf, 0xd8, 0x88, 0x20, 0xc9} } 1273 1274 #define EFI_RNG_ALGORITHM_RAW \ 1275 {0xe43176d7, 0xb6e8, 0x4827, {0xb7, 0x84, 0x7f, 0xfd, 0xc4, 0xb6, 0x85, 0x61} } 1276 1277 INTERFACE_DECL(_EFI_RNG_PROTOCOL); 1278 1279 typedef 1280 EFI_STATUS 1281 (EFIAPI *EFI_RNG_GET_INFO) ( 1282 IN struct _EFI_RNG_PROTOCOL *This, 1283 IN OUT UINTN *RNGAlgorithmListSize, 1284 OUT EFI_RNG_ALGORITHM *RNGAlgorithmList 1285 ); 1286 1287 typedef 1288 EFI_STATUS 1289 (EFIAPI *EFI_RNG_GET_RNG) ( 1290 IN struct _EFI_RNG_PROTOCOL *This, 1291 IN EFI_RNG_ALGORITHM *RNGAlgorithm, OPTIONAL 1292 IN UINTN RNGValueLength, 1293 OUT UINT8 *RNGValue 1294 ); 1295 1296 typedef struct _EFI_RNG_PROTOCOL { 1297 EFI_RNG_GET_INFO GetInfo; 1298 EFI_RNG_GET_RNG GetRNG; 1299 } EFI_RNG_PROTOCOL; 1300 1301 1302 // 1303 // EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL 1304 // 1305 1306 #define EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL_GUID \ 1307 { 0x6b30c738, 0xa391, 0x11d4, {0x9a, 0x3b, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d} } 1308 1309 INTERFACE_DECL(_EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL); 1310 1311 typedef 1312 EFI_STATUS 1313 (EFIAPI *EFI_PLATFORM_DRIVER_OVERRIDE_GET_DRIVER) ( 1314 IN struct _EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL *This, 1315 IN EFI_HANDLE ControllerHandle, 1316 IN OUT EFI_HANDLE *DriverImageHandle); 1317 1318 typedef 1319 EFI_STATUS 1320 (EFIAPI *EFI_PLATFORM_DRIVER_OVERRIDE_GET_DRIVER_PATH) ( 1321 IN struct _EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL *This, 1322 IN EFI_HANDLE ControllerHandle, 1323 IN OUT EFI_DEVICE_PATH **DriverImagePath); 1324 1325 typedef 1326 EFI_STATUS 1327 (EFIAPI *EFI_PLATFORM_DRIVER_OVERRIDE_DRIVER_LOADED) ( 1328 IN struct _EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL *This, 1329 IN EFI_HANDLE ControllerHandle, 1330 IN EFI_DEVICE_PATH *DriverImagePath, 1331 IN EFI_HANDLE DriverImageHandle); 1332 1333 typedef struct _EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL { 1334 EFI_PLATFORM_DRIVER_OVERRIDE_GET_DRIVER GetDriver; 1335 EFI_PLATFORM_DRIVER_OVERRIDE_GET_DRIVER_PATH GetDriverPath; 1336 EFI_PLATFORM_DRIVER_OVERRIDE_DRIVER_LOADED DriverLoaded; 1337 } EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL; 1338 1339 // 1340 // EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL 1341 // 1342 1343 #define EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL_GUID \ 1344 { 0x3bc1b285, 0x8a15, 0x4a82, {0xaa, 0xbf, 0x4d, 0x7d, 0x13, 0xfb, 0x32, 0x65} } 1345 1346 INTERFACE_DECL(_EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL); 1347 1348 typedef 1349 EFI_STATUS 1350 (EFIAPI *EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_GET_DRIVER) ( 1351 IN struct _EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL *This, 1352 IN OUT EFI_HANDLE *DriverImageHandle); 1353 1354 typedef struct _EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL { 1355 EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_GET_DRIVER GetDriver; 1356 } EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL; 1357 1358 // 1359 // EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL 1360 // 1361 1362 #define EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL_GUID \ 1363 { 0xb1ee129e, 0xda36, 0x4181, {0x91, 0xf8, 0x04, 0xa4, 0x92, 0x37, 0x66, 0xa7} } 1364 1365 INTERFACE_DECL(_EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL); 1366 1367 typedef 1368 UINT32 1369 (EFIAPI *EFI_DRIVER_FAMILY_OVERRIDE_GET_VERSION) ( 1370 IN struct _EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL *This); 1371 1372 typedef struct _EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL { 1373 EFI_DRIVER_FAMILY_OVERRIDE_GET_VERSION GetVersion; 1374 } EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL; 1375 1376 // 1377 // EFI_EBC_PROTOCOL 1378 // 1379 1380 #define EFI_EBC_INTERPRETER_PROTOCOL_GUID \ 1381 {0x13ac6dd1, 0x73d0, 0x11d4, {0xb0, 0x6b, 0x00, 0xaa, 0x00, 0xbd, 0x6d, 0xe7} } 1382 1383 #define EFI_EBC_PROTOCOL_GUID EFI_EBC_INTERPRETER_PROTOCOL_GUID 1384 1385 INTERFACE_DECL(_EFI_EBC_PROTOCOL); 1386 1387 typedef 1388 EFI_STATUS 1389 (EFIAPI *EFI_EBC_CREATE_THUNK)( 1390 IN struct _EFI_EBC_PROTOCOL *This, 1391 IN EFI_HANDLE ImageHandle, 1392 IN VOID *EbcEntryPoint, 1393 OUT VOID **Thunk); 1394 1395 typedef 1396 EFI_STATUS 1397 (EFIAPI *EFI_EBC_UNLOAD_IMAGE)( 1398 IN struct _EFI_EBC_PROTOCOL *This, 1399 IN EFI_HANDLE ImageHandle); 1400 1401 typedef 1402 EFI_STATUS 1403 (EFIAPI *EBC_ICACHE_FLUSH)( 1404 IN EFI_PHYSICAL_ADDRESS Start, 1405 IN UINT64 Length); 1406 1407 typedef 1408 EFI_STATUS 1409 (EFIAPI *EFI_EBC_REGISTER_ICACHE_FLUSH)( 1410 IN struct _EFI_EBC_PROTOCOL *This, 1411 IN EBC_ICACHE_FLUSH Flush); 1412 1413 typedef 1414 EFI_STATUS 1415 (EFIAPI *EFI_EBC_GET_VERSION)( 1416 IN struct _EFI_EBC_PROTOCOL *This, 1417 IN OUT UINT64 *Version); 1418 1419 typedef struct _EFI_EBC_PROTOCOL { 1420 EFI_EBC_CREATE_THUNK CreateThunk; 1421 EFI_EBC_UNLOAD_IMAGE UnloadImage; 1422 EFI_EBC_REGISTER_ICACHE_FLUSH RegisterICacheFlush; 1423 EFI_EBC_GET_VERSION GetVersion; 1424 } EFI_EBC_PROTOCOL; 1425 1426 #endif 1427