1 /* $NetBSD: efiapi.h,v 1.3 2018/08/16 18:22:05 jmcneill Exp $ */ 2 3 #ifndef _EFI_API_H 4 #define _EFI_API_H 5 6 /*++ 7 8 Copyright (c) 1998 Intel Corporation 9 10 Module Name: 11 12 efiapi.h 13 14 Abstract: 15 16 Global EFI runtime & boot service interfaces 17 18 19 20 21 Revision History 22 23 --*/ 24 25 // 26 // EFI Specification Revision 27 // 28 29 #define EFI_SPECIFICATION_MAJOR_REVISION 1 30 #define EFI_SPECIFICATION_MINOR_REVISION 02 31 32 // 33 // Declare forward referenced data structures 34 // 35 36 INTERFACE_DECL(_EFI_SYSTEM_TABLE); 37 38 // 39 // EFI Memory 40 // 41 42 typedef 43 EFI_STATUS 44 (EFIAPI *EFI_ALLOCATE_PAGES) ( 45 IN EFI_ALLOCATE_TYPE Type, 46 IN EFI_MEMORY_TYPE MemoryType, 47 IN UINTN NoPages, 48 OUT EFI_PHYSICAL_ADDRESS *Memory 49 ); 50 51 typedef 52 EFI_STATUS 53 (EFIAPI *EFI_FREE_PAGES) ( 54 IN EFI_PHYSICAL_ADDRESS Memory, 55 IN UINTN NoPages 56 ); 57 58 typedef 59 EFI_STATUS 60 (EFIAPI *EFI_GET_MEMORY_MAP) ( 61 IN OUT UINTN *MemoryMapSize, 62 IN OUT EFI_MEMORY_DESCRIPTOR *MemoryMap, 63 OUT UINTN *MapKey, 64 OUT UINTN *DescriptorSize, 65 OUT UINT32 *DescriptorVersion 66 ); 67 68 #define NextMemoryDescriptor(Ptr,Size) ((EFI_MEMORY_DESCRIPTOR *) (((UINT8 *) Ptr) + Size)) 69 70 71 typedef 72 EFI_STATUS 73 (EFIAPI *EFI_ALLOCATE_POOL) ( 74 IN EFI_MEMORY_TYPE PoolType, 75 IN UINTN Size, 76 OUT VOID **Buffer 77 ); 78 79 typedef 80 EFI_STATUS 81 (EFIAPI *EFI_FREE_POOL) ( 82 IN VOID *Buffer 83 ); 84 85 typedef 86 EFI_STATUS 87 (EFIAPI *EFI_SET_VIRTUAL_ADDRESS_MAP) ( 88 IN UINTN MemoryMapSize, 89 IN UINTN DescriptorSize, 90 IN UINT32 DescriptorVersion, 91 IN EFI_MEMORY_DESCRIPTOR *VirtualMap 92 ); 93 94 95 #define EFI_OPTIONAL_PTR 0x00000001 96 #define EFI_INTERNAL_FNC 0x00000002 // Pointer to internal runtime fnc 97 #define EFI_INTERNAL_PTR 0x00000004 // Pointer to internal runtime data 98 99 100 typedef 101 EFI_STATUS 102 (EFIAPI *EFI_CONVERT_POINTER) ( 103 IN UINTN DebugDisposition, 104 IN OUT VOID **Address 105 ); 106 107 108 // 109 // EFI Events 110 // 111 112 #define EVT_TIMER 0x80000000 113 #define EVT_RUNTIME 0x40000000 114 #define EVT_RUNTIME_CONTEXT 0x20000000 115 116 #define EVT_NOTIFY_WAIT 0x00000100 117 #define EVT_NOTIFY_SIGNAL 0x00000200 118 119 #define EVT_SIGNAL_EXIT_BOOT_SERVICES 0x00000201 120 #define EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE 0x60000202 121 122 #define EVT_EFI_SIGNAL_MASK 0x000000FF 123 #define EVT_EFI_SIGNAL_MAX 4 124 125 #define EFI_EVENT_TIMER EVT_TIMER 126 #define EFI_EVENT_RUNTIME EVT_RUNTIME 127 #define EFI_EVENT_RUNTIME_CONTEXT EVT_RUNTIME_CONTEXT 128 #define EFI_EVENT_NOTIFY_WAIT EVT_NOTIFY_WAIT 129 #define EFI_EVENT_NOTIFY_SIGNAL EVT_NOTIFY_SIGNAL 130 #define EFI_EVENT_SIGNAL_EXIT_BOOT_SERVICES EVT_SIGNAL_EXIT_BOOT_SERVICES 131 #define EFI_EVENT_SIGNAL_VIRTUAL_ADDRESS_CHANGE EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE 132 #define EFI_EVENT_EFI_SIGNAL_MASK EVT_EFI_SIGNAL_MASK 133 #define EFI_EVENT_EFI_SIGNAL_MAX EVT_EFI_SIGNAL_MAX 134 135 136 typedef 137 VOID 138 (EFIAPI *EFI_EVENT_NOTIFY) ( 139 IN EFI_EVENT Event, 140 IN VOID *Context 141 ); 142 143 typedef 144 EFI_STATUS 145 (EFIAPI *EFI_CREATE_EVENT) ( 146 IN UINT32 Type, 147 IN EFI_TPL NotifyTpl, 148 IN EFI_EVENT_NOTIFY NotifyFunction, 149 IN VOID *NotifyContext, 150 OUT EFI_EVENT *Event 151 ); 152 153 typedef enum { 154 TimerCancel, 155 TimerPeriodic, 156 TimerRelative, 157 TimerTypeMax 158 } EFI_TIMER_DELAY; 159 160 typedef 161 EFI_STATUS 162 (EFIAPI *EFI_SET_TIMER) ( 163 IN EFI_EVENT Event, 164 IN EFI_TIMER_DELAY Type, 165 IN UINT64 TriggerTime 166 ); 167 168 typedef 169 EFI_STATUS 170 (EFIAPI *EFI_SIGNAL_EVENT) ( 171 IN EFI_EVENT Event 172 ); 173 174 typedef 175 EFI_STATUS 176 (EFIAPI *EFI_WAIT_FOR_EVENT) ( 177 IN UINTN NumberOfEvents, 178 IN EFI_EVENT *Event, 179 OUT UINTN *Index 180 ); 181 182 typedef 183 EFI_STATUS 184 (EFIAPI *EFI_CLOSE_EVENT) ( 185 IN EFI_EVENT Event 186 ); 187 188 typedef 189 EFI_STATUS 190 (EFIAPI *EFI_CHECK_EVENT) ( 191 IN EFI_EVENT Event 192 ); 193 194 // 195 // Task priority level 196 // 197 198 #define TPL_APPLICATION 4 199 #define TPL_CALLBACK 8 200 #define TPL_NOTIFY 16 201 #define TPL_HIGH_LEVEL 31 202 #define EFI_TPL_APPLICATION TPL_APPLICATION 203 #define EFI_TPL_CALLBACK TPL_CALLBACK 204 #define EFI_TPL_NOTIFY TPL_NOTIFY 205 #define EFI_TPL_HIGH_LEVEL TPL_HIGH_LEVEL 206 typedef 207 EFI_TPL 208 (EFIAPI *EFI_RAISE_TPL) ( 209 IN EFI_TPL NewTpl 210 ); 211 212 typedef 213 VOID 214 (EFIAPI *EFI_RESTORE_TPL) ( 215 IN EFI_TPL OldTpl 216 ); 217 218 219 // 220 // EFI platform varibles 221 // 222 223 #define EFI_GLOBAL_VARIABLE \ 224 { 0x8BE4DF61, 0x93CA, 0x11d2, {0xAA, 0x0D, 0x00, 0xE0, 0x98, 0x03, 0x2B, 0x8C} } 225 226 // Variable attributes 227 #define EFI_VARIABLE_NON_VOLATILE 0x00000001 228 #define EFI_VARIABLE_BOOTSERVICE_ACCESS 0x00000002 229 #define EFI_VARIABLE_RUNTIME_ACCESS 0x00000004 230 #define EFI_VARIABLE_HARDWARE_ERROR_RECORD 0x00000008 231 #define EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS 0x00000010 232 #define EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS 0x00000020 233 #define EFI_VARIABLE_APPEND_WRITE 0x00000040 234 235 // Variable size limitation 236 #define EFI_MAXIMUM_VARIABLE_SIZE 1024 237 238 typedef 239 EFI_STATUS 240 (EFIAPI *EFI_GET_VARIABLE) ( 241 IN CHAR16 *VariableName, 242 IN EFI_GUID *VendorGuid, 243 OUT UINT32 *Attributes OPTIONAL, 244 IN OUT UINTN *DataSize, 245 OUT VOID *Data 246 ); 247 248 typedef 249 EFI_STATUS 250 (EFIAPI *EFI_GET_NEXT_VARIABLE_NAME) ( 251 IN OUT UINTN *VariableNameSize, 252 IN OUT CHAR16 *VariableName, 253 IN OUT EFI_GUID *VendorGuid 254 ); 255 256 257 typedef 258 EFI_STATUS 259 (EFIAPI *EFI_SET_VARIABLE) ( 260 IN CHAR16 *VariableName, 261 IN EFI_GUID *VendorGuid, 262 IN UINT32 Attributes, 263 IN UINTN DataSize, 264 IN VOID *Data 265 ); 266 267 268 // 269 // EFI Time 270 // 271 272 typedef struct { 273 UINT32 Resolution; // 1e-6 parts per million 274 UINT32 Accuracy; // hertz 275 BOOLEAN SetsToZero; // Set clears sub-second time 276 } EFI_TIME_CAPABILITIES; 277 278 279 typedef 280 EFI_STATUS 281 (EFIAPI *EFI_GET_TIME) ( 282 OUT EFI_TIME *Time, 283 OUT EFI_TIME_CAPABILITIES *Capabilities OPTIONAL 284 ); 285 286 typedef 287 EFI_STATUS 288 (EFIAPI *EFI_SET_TIME) ( 289 IN EFI_TIME *Time 290 ); 291 292 typedef 293 EFI_STATUS 294 (EFIAPI *EFI_GET_WAKEUP_TIME) ( 295 OUT BOOLEAN *Enabled, 296 OUT BOOLEAN *Pending, 297 OUT EFI_TIME *Time 298 ); 299 300 typedef 301 EFI_STATUS 302 (EFIAPI *EFI_SET_WAKEUP_TIME) ( 303 IN BOOLEAN Enable, 304 IN EFI_TIME *Time OPTIONAL 305 ); 306 307 308 // 309 // Image functions 310 // 311 312 313 // PE32+ Subsystem type for EFI images 314 315 #if !defined(IMAGE_SUBSYSTEM_EFI_APPLICATION) 316 #define IMAGE_SUBSYSTEM_EFI_APPLICATION 10 317 #define IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER 11 318 #define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER 12 319 #endif 320 321 // PE32+ Machine type for EFI images 322 323 #if !defined(EFI_IMAGE_MACHINE_IA32) 324 #define EFI_IMAGE_MACHINE_IA32 0x014c 325 #endif 326 327 #if !defined(EFI_IMAGE_MACHINE_IA64) 328 #define EFI_IMAGE_MACHINE_IA64 0x0200 329 #endif 330 331 #if !defined(EFI_IMAGE_MACHINE_EBC) 332 #define EFI_IMAGE_MACHINE_EBC 0x0EBC 333 #endif 334 335 #if !defined(EFI_IMAGE_MACHINE_X64) 336 #define EFI_IMAGE_MACHINE_X64 0x8664 337 #endif 338 339 #if !defined(EFI_IMAGE_MACHINE_ARMTHUMB_MIXED) 340 #define EFI_IMAGE_MACHINE_ARMTHUMB_MIXED 0x01C2 341 #endif 342 343 #if !defined(EFI_IMAGE_MACHINE_AARCH64) 344 #define EFI_IMAGE_MACHINE_AARCH64 0xAA64 345 #endif 346 347 // Image Entry prototype 348 349 typedef 350 EFI_STATUS 351 (EFIAPI *EFI_IMAGE_ENTRY_POINT) ( 352 IN EFI_HANDLE ImageHandle, 353 IN struct _EFI_SYSTEM_TABLE *SystemTable 354 ); 355 356 typedef 357 EFI_STATUS 358 (EFIAPI *EFI_IMAGE_LOAD) ( 359 IN BOOLEAN BootPolicy, 360 IN EFI_HANDLE ParentImageHandle, 361 IN EFI_DEVICE_PATH *FilePath, 362 IN VOID *SourceBuffer OPTIONAL, 363 IN UINTN SourceSize, 364 OUT EFI_HANDLE *ImageHandle 365 ); 366 367 typedef 368 EFI_STATUS 369 (EFIAPI *EFI_IMAGE_START) ( 370 IN EFI_HANDLE ImageHandle, 371 OUT UINTN *ExitDataSize, 372 OUT CHAR16 **ExitData OPTIONAL 373 ); 374 375 typedef 376 EFI_STATUS 377 (EFIAPI *EFI_EXIT) ( 378 IN EFI_HANDLE ImageHandle, 379 IN EFI_STATUS ExitStatus, 380 IN UINTN ExitDataSize, 381 IN CHAR16 *ExitData OPTIONAL 382 ); 383 384 385 // Image handle 386 /*#define LOADED_IMAGE_PROTOCOL \ 387 { 0x5B1B31A1, 0x9562, 0x11d2, {0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B} } 388 389 #define EFI_IMAGE_INFORMATION_REVISION 0x1000 390 typedef struct { 391 UINT32 Revision; 392 EFI_HANDLE ParentHandle; 393 struct _EFI_SYSTEM_TABLE *SystemTable; 394 395 // Source location of image 396 EFI_HANDLE DeviceHandle; 397 EFI_DEVICE_PATH *FilePath; 398 VOID *Reserved; 399 400 // Images load options 401 UINT32 LoadOptionsSize; 402 VOID *LoadOptions; 403 404 // Location of where image was loaded 405 VOID *ImageBase; 406 UINT64 ImageSize; 407 EFI_MEMORY_TYPE ImageCodeType; 408 EFI_MEMORY_TYPE ImageDataType; 409 410 // If the driver image supports a dynamic unload request 411 EFI_IMAGE_UNLOAD Unload; 412 413 } EFI_LOADED_IMAGE;*/ 414 415 416 typedef 417 EFI_STATUS 418 (EFIAPI *EFI_EXIT_BOOT_SERVICES) ( 419 IN EFI_HANDLE ImageHandle, 420 IN UINTN MapKey 421 ); 422 423 // 424 // Misc 425 // 426 427 428 typedef 429 EFI_STATUS 430 (EFIAPI *EFI_STALL) ( 431 IN UINTN Microseconds 432 ); 433 434 typedef 435 EFI_STATUS 436 (EFIAPI *EFI_SET_WATCHDOG_TIMER) ( 437 IN UINTN Timeout, 438 IN UINT64 WatchdogCode, 439 IN UINTN DataSize, 440 IN CHAR16 *WatchdogData OPTIONAL 441 ); 442 443 typedef 444 EFI_STATUS 445 (EFIAPI *EFI_CONNECT_CONTROLLER) ( 446 IN EFI_HANDLE ControllerHandle, 447 IN EFI_HANDLE *DriverImageHandle OPTIONAL, 448 IN EFI_DEVICE_PATH *RemainingDevicePath OPTIONAL, 449 IN BOOLEAN Recursive 450 ); 451 452 typedef 453 EFI_STATUS 454 (EFIAPI *EFI_DISCONNECT_CONTROLLER) ( 455 IN EFI_HANDLE ControllerHandle, 456 IN EFI_HANDLE DriverImageHandle OPTIONAL, 457 IN EFI_HANDLE ChildHandle OPTIONAL 458 ); 459 460 #define EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL 0x00000001 461 #define EFI_OPEN_PROTOCOL_GET_PROTOCOL 0x00000002 462 #define EFI_OPEN_PROTOCOL_TEST_PROTOCOL 0x00000004 463 #define EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER 0x00000008 464 #define EFI_OPEN_PROTOCOL_BY_DRIVER 0x00000010 465 #define EFI_OPEN_PROTOCOL_EXCLUSIVE 0x00000020 466 467 typedef 468 EFI_STATUS 469 (EFIAPI *EFI_OPEN_PROTOCOL) ( 470 IN EFI_HANDLE Handle, 471 IN EFI_GUID *Protocol, 472 OUT VOID **Interface OPTIONAL, 473 IN EFI_HANDLE AgentHandle, 474 IN EFI_HANDLE ControllerHandle, 475 IN UINT32 Attributes 476 ); 477 478 typedef 479 EFI_STATUS 480 (EFIAPI *EFI_CLOSE_PROTOCOL) ( 481 IN EFI_HANDLE Handle, 482 IN EFI_GUID *Protocol, 483 IN EFI_HANDLE AgentHandle, 484 IN EFI_HANDLE ControllerHandle 485 ); 486 487 typedef struct { 488 EFI_HANDLE AgentHandle; 489 EFI_HANDLE ControllerHandle; 490 UINT32 Attributes; 491 UINT32 OpenCount; 492 } EFI_OPEN_PROTOCOL_INFORMATION_ENTRY; 493 494 typedef 495 EFI_STATUS 496 (EFIAPI *EFI_OPEN_PROTOCOL_INFORMATION) ( 497 IN EFI_HANDLE Handle, 498 IN EFI_GUID *Protocol, 499 OUT EFI_OPEN_PROTOCOL_INFORMATION_ENTRY **EntryBuffer, 500 OUT UINTN *EntryCount 501 ); 502 503 typedef 504 EFI_STATUS 505 (EFIAPI *EFI_PROTOCOLS_PER_HANDLE) ( 506 IN EFI_HANDLE Handle, 507 OUT EFI_GUID ***ProtocolBuffer, 508 OUT UINTN *ProtocolBufferCount 509 ); 510 511 typedef enum { 512 AllHandles, 513 ByRegisterNotify, 514 ByProtocol 515 } EFI_LOCATE_SEARCH_TYPE; 516 517 typedef 518 EFI_STATUS 519 (EFIAPI *EFI_LOCATE_HANDLE_BUFFER) ( 520 IN EFI_LOCATE_SEARCH_TYPE SearchType, 521 IN EFI_GUID *Protocol OPTIONAL, 522 IN VOID *SearchKey OPTIONAL, 523 IN OUT UINTN *NoHandles, 524 OUT EFI_HANDLE **Buffer 525 ); 526 527 typedef 528 EFI_STATUS 529 (EFIAPI *EFI_LOCATE_PROTOCOL) ( 530 IN EFI_GUID *Protocol, 531 IN VOID *Registration OPTIONAL, 532 OUT VOID **Interface 533 ); 534 535 typedef 536 EFI_STATUS 537 (EFIAPI *EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES) ( 538 IN OUT EFI_HANDLE *Handle, 539 ... 540 ); 541 542 typedef 543 EFI_STATUS 544 (EFIAPI *EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES) ( 545 IN OUT EFI_HANDLE Handle, 546 ... 547 ); 548 549 typedef 550 EFI_STATUS 551 (EFIAPI *EFI_CALCULATE_CRC32) ( 552 IN VOID *Data, 553 IN UINTN DataSize, 554 OUT UINT32 *Crc32 555 ); 556 557 typedef 558 VOID 559 (EFIAPI *EFI_COPY_MEM) ( 560 IN VOID *Destination, 561 IN VOID *Source, 562 IN UINTN Length 563 ); 564 565 typedef 566 VOID 567 (EFIAPI *EFI_SET_MEM) ( 568 IN VOID *Buffer, 569 IN UINTN Size, 570 IN UINT8 Value 571 ); 572 573 574 typedef 575 EFI_STATUS 576 (EFIAPI *EFI_CREATE_EVENT_EX) ( 577 IN UINT32 Type, 578 IN EFI_TPL NotifyTpl, 579 IN EFI_EVENT_NOTIFY NotifyFunction OPTIONAL, 580 IN const VOID *NotifyContext OPTIONAL, 581 IN const EFI_GUID EventGroup OPTIONAL, 582 OUT EFI_EVENT *Event 583 ); 584 585 typedef enum { 586 EfiResetCold, 587 EfiResetWarm, 588 EfiResetShutdown 589 } EFI_RESET_TYPE; 590 591 typedef 592 EFI_STATUS 593 (EFIAPI *EFI_RESET_SYSTEM) ( 594 IN EFI_RESET_TYPE ResetType, 595 IN EFI_STATUS ResetStatus, 596 IN UINTN DataSize, 597 IN CHAR16 *ResetData OPTIONAL 598 ); 599 600 typedef 601 EFI_STATUS 602 (EFIAPI *EFI_GET_NEXT_MONOTONIC_COUNT) ( 603 OUT UINT64 *Count 604 ); 605 606 typedef 607 EFI_STATUS 608 (EFIAPI *EFI_GET_NEXT_HIGH_MONO_COUNT) ( 609 OUT UINT32 *HighCount 610 ); 611 612 typedef struct { 613 UINT64 Length; 614 union { 615 EFI_PHYSICAL_ADDRESS DataBlock; 616 EFI_PHYSICAL_ADDRESS ContinuationPointer; 617 } Union; 618 } EFI_CAPSULE_BLOCK_DESCRIPTOR; 619 620 typedef struct { 621 EFI_GUID CapsuleGuid; 622 UINT32 HeaderSize; 623 UINT32 Flags; 624 UINT32 CapsuleImageSize; 625 } EFI_CAPSULE_HEADER; 626 627 #define CAPSULE_FLAGS_PERSIST_ACROSS_RESET 0x00010000 628 #define CAPSULE_FLAGS_POPULATE_SYSTEM_TABLE 0x00020000 629 #define CAPSULE_FLAGS_INITIATE_RESET 0x00040000 630 631 typedef 632 EFI_STATUS 633 (EFIAPI *EFI_UPDATE_CAPSULE) ( 634 IN EFI_CAPSULE_HEADER **CapsuleHeaderArray, 635 IN UINTN CapsuleCount, 636 IN EFI_PHYSICAL_ADDRESS ScatterGatherList OPTIONAL 637 ); 638 639 typedef 640 EFI_STATUS 641 (EFIAPI *EFI_QUERY_CAPSULE_CAPABILITIES) ( 642 IN EFI_CAPSULE_HEADER **CapsuleHeaderArray, 643 IN UINTN CapsuleCount, 644 OUT UINT64 *MaximumCapsuleSize, 645 OUT EFI_RESET_TYPE *ResetType 646 ); 647 648 typedef 649 EFI_STATUS 650 (EFIAPI *EFI_QUERY_VARIABLE_INFO) ( 651 IN UINT32 Attributes, 652 OUT UINT64 *MaximumVariableStorageSize, 653 OUT UINT64 *RemainingVariableStorageSize, 654 OUT UINT64 *MaximumVariableSize 655 ); 656 657 // 658 // Protocol handler functions 659 // 660 661 typedef enum { 662 EFI_NATIVE_INTERFACE, 663 EFI_PCODE_INTERFACE 664 } EFI_INTERFACE_TYPE; 665 666 typedef 667 EFI_STATUS 668 (EFIAPI *EFI_INSTALL_PROTOCOL_INTERFACE) ( 669 IN OUT EFI_HANDLE *Handle, 670 IN EFI_GUID *Protocol, 671 IN EFI_INTERFACE_TYPE InterfaceType, 672 IN VOID *Interface 673 ); 674 675 typedef 676 EFI_STATUS 677 (EFIAPI *EFI_REINSTALL_PROTOCOL_INTERFACE) ( 678 IN EFI_HANDLE Handle, 679 IN EFI_GUID *Protocol, 680 IN VOID *OldInterface, 681 IN VOID *NewInterface 682 ); 683 684 typedef 685 EFI_STATUS 686 (EFIAPI *EFI_UNINSTALL_PROTOCOL_INTERFACE) ( 687 IN EFI_HANDLE Handle, 688 IN EFI_GUID *Protocol, 689 IN VOID *Interface 690 ); 691 692 typedef 693 EFI_STATUS 694 (EFIAPI *EFI_HANDLE_PROTOCOL) ( 695 IN EFI_HANDLE Handle, 696 IN EFI_GUID *Protocol, 697 OUT VOID **Interface 698 ); 699 700 typedef 701 EFI_STATUS 702 (EFIAPI *EFI_REGISTER_PROTOCOL_NOTIFY) ( 703 IN EFI_GUID *Protocol, 704 IN EFI_EVENT Event, 705 OUT VOID **Registration 706 ); 707 708 typedef 709 EFI_STATUS 710 (EFIAPI *EFI_LOCATE_HANDLE) ( 711 IN EFI_LOCATE_SEARCH_TYPE SearchType, 712 IN EFI_GUID *Protocol OPTIONAL, 713 IN VOID *SearchKey OPTIONAL, 714 IN OUT UINTN *BufferSize, 715 OUT EFI_HANDLE *Buffer 716 ); 717 718 typedef 719 EFI_STATUS 720 (EFIAPI *EFI_LOCATE_DEVICE_PATH) ( 721 IN EFI_GUID *Protocol, 722 IN OUT EFI_DEVICE_PATH **DevicePath, 723 OUT EFI_HANDLE *Device 724 ); 725 726 typedef 727 EFI_STATUS 728 (EFIAPI *EFI_INSTALL_CONFIGURATION_TABLE) ( 729 IN EFI_GUID *Guid, 730 IN VOID *Table 731 ); 732 733 typedef 734 EFI_STATUS 735 (EFIAPI *EFI_RESERVED_SERVICE) ( 736 ); 737 738 // 739 // Standard EFI table header 740 // 741 742 typedef struct _EFI_TABLE_HEADER { 743 UINT64 Signature; 744 UINT32 Revision; 745 UINT32 HeaderSize; 746 UINT32 CRC32; 747 UINT32 Reserved; 748 } EFI_TABLE_HEADER; 749 750 751 // 752 // EFI Runtime Serivces Table 753 // 754 755 #define EFI_RUNTIME_SERVICES_SIGNATURE 0x56524553544e5552 756 #define EFI_RUNTIME_SERVICES_REVISION (EFI_SPECIFICATION_MAJOR_REVISION<<16) | (EFI_SPECIFICATION_MINOR_REVISION) 757 758 typedef struct { 759 EFI_TABLE_HEADER Hdr; 760 761 // 762 // Time services 763 // 764 765 EFI_GET_TIME GetTime; 766 EFI_SET_TIME SetTime; 767 EFI_GET_WAKEUP_TIME GetWakeupTime; 768 EFI_SET_WAKEUP_TIME SetWakeupTime; 769 770 // 771 // Virtual memory services 772 // 773 774 EFI_SET_VIRTUAL_ADDRESS_MAP SetVirtualAddressMap; 775 EFI_CONVERT_POINTER ConvertPointer; 776 777 // 778 // Variable serviers 779 // 780 781 EFI_GET_VARIABLE GetVariable; 782 EFI_GET_NEXT_VARIABLE_NAME GetNextVariableName; 783 EFI_SET_VARIABLE SetVariable; 784 785 // 786 // Misc 787 // 788 789 EFI_GET_NEXT_HIGH_MONO_COUNT GetNextHighMonotonicCount; 790 EFI_RESET_SYSTEM ResetSystem; 791 792 EFI_UPDATE_CAPSULE UpdateCapsule; 793 EFI_QUERY_CAPSULE_CAPABILITIES QueryCapsuleCapabilities; 794 EFI_QUERY_VARIABLE_INFO QueryVariableInfo; 795 } EFI_RUNTIME_SERVICES; 796 797 798 // 799 // EFI Boot Services Table 800 // 801 802 #define EFI_BOOT_SERVICES_SIGNATURE 0x56524553544f4f42 803 #define EFI_BOOT_SERVICES_REVISION (EFI_SPECIFICATION_MAJOR_REVISION<<16) | (EFI_SPECIFICATION_MINOR_REVISION) 804 805 typedef struct _EFI_BOOT_SERVICES { 806 807 EFI_TABLE_HEADER Hdr; 808 809 // 810 // Task priority functions 811 // 812 813 EFI_RAISE_TPL RaiseTPL; 814 EFI_RESTORE_TPL RestoreTPL; 815 816 // 817 // Memory functions 818 // 819 820 EFI_ALLOCATE_PAGES AllocatePages; 821 EFI_FREE_PAGES FreePages; 822 EFI_GET_MEMORY_MAP GetMemoryMap; 823 EFI_ALLOCATE_POOL AllocatePool; 824 EFI_FREE_POOL FreePool; 825 826 // 827 // Event & timer functions 828 // 829 830 EFI_CREATE_EVENT CreateEvent; 831 EFI_SET_TIMER SetTimer; 832 EFI_WAIT_FOR_EVENT WaitForEvent; 833 EFI_SIGNAL_EVENT SignalEvent; 834 EFI_CLOSE_EVENT CloseEvent; 835 EFI_CHECK_EVENT CheckEvent; 836 837 // 838 // Protocol handler functions 839 // 840 841 EFI_INSTALL_PROTOCOL_INTERFACE InstallProtocolInterface; 842 EFI_REINSTALL_PROTOCOL_INTERFACE ReinstallProtocolInterface; 843 EFI_UNINSTALL_PROTOCOL_INTERFACE UninstallProtocolInterface; 844 EFI_HANDLE_PROTOCOL HandleProtocol; 845 EFI_HANDLE_PROTOCOL PCHandleProtocol; 846 EFI_REGISTER_PROTOCOL_NOTIFY RegisterProtocolNotify; 847 EFI_LOCATE_HANDLE LocateHandle; 848 EFI_LOCATE_DEVICE_PATH LocateDevicePath; 849 EFI_INSTALL_CONFIGURATION_TABLE InstallConfigurationTable; 850 851 // 852 // Image functions 853 // 854 855 EFI_IMAGE_LOAD LoadImage; 856 EFI_IMAGE_START StartImage; 857 EFI_EXIT Exit; 858 EFI_IMAGE_UNLOAD UnloadImage; 859 EFI_EXIT_BOOT_SERVICES ExitBootServices; 860 861 // 862 // Misc functions 863 // 864 865 EFI_GET_NEXT_MONOTONIC_COUNT GetNextMonotonicCount; 866 EFI_STALL Stall; 867 EFI_SET_WATCHDOG_TIMER SetWatchdogTimer; 868 869 // 870 // DriverSupport Services 871 // 872 873 EFI_CONNECT_CONTROLLER ConnectController; 874 EFI_DISCONNECT_CONTROLLER DisconnectController; 875 876 // 877 // Open and Close Protocol Services 878 // 879 EFI_OPEN_PROTOCOL OpenProtocol; 880 EFI_CLOSE_PROTOCOL CloseProtocol; 881 EFI_OPEN_PROTOCOL_INFORMATION OpenProtocolInformation; 882 883 // 884 // Library Services 885 // 886 EFI_PROTOCOLS_PER_HANDLE ProtocolsPerHandle; 887 EFI_LOCATE_HANDLE_BUFFER LocateHandleBuffer; 888 EFI_LOCATE_PROTOCOL LocateProtocol; 889 EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES InstallMultipleProtocolInterfaces; 890 EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES UninstallMultipleProtocolInterfaces; 891 892 // 893 // 32-bit CRC Services 894 // 895 EFI_CALCULATE_CRC32 CalculateCrc32; 896 897 // 898 // Misc Services 899 // 900 EFI_COPY_MEM CopyMem; 901 EFI_SET_MEM SetMem; 902 EFI_CREATE_EVENT_EX CreateEventEx; 903 } EFI_BOOT_SERVICES; 904 905 906 // 907 // EFI Configuration Table and GUID definitions 908 // 909 910 #define MPS_TABLE_GUID \ 911 { 0xeb9d2d2f, 0x2d88, 0x11d3, {0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} } 912 913 #define ACPI_TABLE_GUID \ 914 { 0xeb9d2d30, 0x2d88, 0x11d3, {0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} } 915 916 #define ACPI_20_TABLE_GUID \ 917 { 0x8868e871, 0xe4f1, 0x11d3, {0xbc, 0x22, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81} } 918 919 #define SMBIOS_TABLE_GUID \ 920 { 0xeb9d2d31, 0x2d88, 0x11d3, {0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} } 921 922 #define SMBIOS3_TABLE_GUID \ 923 { 0xf2fd1544, 0x9794, 0x4a2c, {0x99, 0x2e, 0xe5, 0xbb, 0xcf, 0x20, 0xe3, 0x94} } 924 925 #define SAL_SYSTEM_TABLE_GUID \ 926 { 0xeb9d2d32, 0x2d88, 0x11d3, {0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} } 927 928 /* DIG64 Headless Console & Debug Port Table. */ 929 #define HCDP_TABLE_GUID \ 930 { 0xf951938d, 0x620b, 0x42ef, {0x82, 0x79, 0xa8, 0x4b, 0x79, 0x61, 0x78, 0x98} } 931 932 typedef struct _EFI_CONFIGURATION_TABLE { 933 EFI_GUID VendorGuid; 934 VOID *VendorTable; 935 } EFI_CONFIGURATION_TABLE; 936 937 938 // 939 // EFI System Table 940 // 941 942 943 944 945 #define EFI_SYSTEM_TABLE_SIGNATURE 0x5453595320494249 946 #define EFI_SYSTEM_TABLE_REVISION (EFI_SPECIFICATION_MAJOR_REVISION<<16) | (EFI_SPECIFICATION_MINOR_REVISION) 947 948 typedef struct _EFI_SYSTEM_TABLE { 949 EFI_TABLE_HEADER Hdr; 950 951 CHAR16 *FirmwareVendor; 952 UINT32 FirmwareRevision; 953 954 EFI_HANDLE ConsoleInHandle; 955 SIMPLE_INPUT_INTERFACE *ConIn; 956 957 EFI_HANDLE ConsoleOutHandle; 958 SIMPLE_TEXT_OUTPUT_INTERFACE *ConOut; 959 960 EFI_HANDLE StandardErrorHandle; 961 SIMPLE_TEXT_OUTPUT_INTERFACE *StdErr; 962 963 EFI_RUNTIME_SERVICES *RuntimeServices; 964 EFI_BOOT_SERVICES *BootServices; 965 966 UINTN NumberOfTableEntries; 967 EFI_CONFIGURATION_TABLE *ConfigurationTable; 968 969 } EFI_SYSTEM_TABLE; 970 971 #endif 972 973