1/* $NetBSD: efiapi.h,v 1.4 2021/09/30 19:02:47 jmcneill Exp $ */ 2 3#ifndef _EFI_API_H 4#define _EFI_API_H 5 6/*++ 7 8Copyright (c) 1998 Intel Corporation 9 10Module Name: 11 12 efiapi.h 13 14Abstract: 15 16 Global EFI runtime & boot service interfaces 17 18 19 20 21Revision 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 36INTERFACE_DECL(_EFI_SYSTEM_TABLE); 37 38// 39// EFI Memory 40// 41 42typedef 43EFI_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 51typedef 52EFI_STATUS 53(EFIAPI *EFI_FREE_PAGES) ( 54 IN EFI_PHYSICAL_ADDRESS Memory, 55 IN UINTN NoPages 56 ); 57 58typedef 59EFI_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 71typedef 72EFI_STATUS 73(EFIAPI *EFI_ALLOCATE_POOL) ( 74 IN EFI_MEMORY_TYPE PoolType, 75 IN UINTN Size, 76 OUT VOID **Buffer 77 ); 78 79typedef 80EFI_STATUS 81(EFIAPI *EFI_FREE_POOL) ( 82 IN VOID *Buffer 83 ); 84 85typedef 86EFI_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 100typedef 101EFI_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 136typedef 137VOID 138(EFIAPI *EFI_EVENT_NOTIFY) ( 139 IN EFI_EVENT Event, 140 IN VOID *Context 141 ); 142 143typedef 144EFI_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 153typedef enum { 154 TimerCancel, 155 TimerPeriodic, 156 TimerRelative, 157 TimerTypeMax 158} EFI_TIMER_DELAY; 159 160typedef 161EFI_STATUS 162(EFIAPI *EFI_SET_TIMER) ( 163 IN EFI_EVENT Event, 164 IN EFI_TIMER_DELAY Type, 165 IN UINT64 TriggerTime 166 ); 167 168typedef 169EFI_STATUS 170(EFIAPI *EFI_SIGNAL_EVENT) ( 171 IN EFI_EVENT Event 172 ); 173 174typedef 175EFI_STATUS 176(EFIAPI *EFI_WAIT_FOR_EVENT) ( 177 IN UINTN NumberOfEvents, 178 IN EFI_EVENT *Event, 179 OUT UINTN *Index 180 ); 181 182typedef 183EFI_STATUS 184(EFIAPI *EFI_CLOSE_EVENT) ( 185 IN EFI_EVENT Event 186 ); 187 188typedef 189EFI_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 206typedef 207EFI_TPL 208(EFIAPI *EFI_RAISE_TPL) ( 209 IN EFI_TPL NewTpl 210 ); 211 212typedef 213VOID 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 238typedef 239EFI_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 248typedef 249EFI_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 257typedef 258EFI_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 272typedef 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 279typedef 280EFI_STATUS 281(EFIAPI *EFI_GET_TIME) ( 282 OUT EFI_TIME *Time, 283 OUT EFI_TIME_CAPABILITIES *Capabilities OPTIONAL 284 ); 285 286typedef 287EFI_STATUS 288(EFIAPI *EFI_SET_TIME) ( 289 IN EFI_TIME *Time 290 ); 291 292typedef 293EFI_STATUS 294(EFIAPI *EFI_GET_WAKEUP_TIME) ( 295 OUT BOOLEAN *Enabled, 296 OUT BOOLEAN *Pending, 297 OUT EFI_TIME *Time 298 ); 299 300typedef 301EFI_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#if !defined(EFI_IMAGE_MACHINE_RISCV32) 348#define EFI_IMAGE_MACHINE_RISCV32 0x5032 349#endif 350 351#if !defined(EFI_IMAGE_MACHINE_RISCV64) 352#define EFI_IMAGE_MACHINE_RISCV64 0x5064 353#endif 354 355#if !defined(EFI_IMAGE_MACHINE_RISCV128) 356#define EFI_IMAGE_MACHINE_RISCV128 0x5128 357#endif 358 359// Image Entry prototype 360 361typedef 362EFI_STATUS 363(EFIAPI *EFI_IMAGE_ENTRY_POINT) ( 364 IN EFI_HANDLE ImageHandle, 365 IN struct _EFI_SYSTEM_TABLE *SystemTable 366 ); 367 368typedef 369EFI_STATUS 370(EFIAPI *EFI_IMAGE_LOAD) ( 371 IN BOOLEAN BootPolicy, 372 IN EFI_HANDLE ParentImageHandle, 373 IN EFI_DEVICE_PATH *FilePath, 374 IN VOID *SourceBuffer OPTIONAL, 375 IN UINTN SourceSize, 376 OUT EFI_HANDLE *ImageHandle 377 ); 378 379typedef 380EFI_STATUS 381(EFIAPI *EFI_IMAGE_START) ( 382 IN EFI_HANDLE ImageHandle, 383 OUT UINTN *ExitDataSize, 384 OUT CHAR16 **ExitData OPTIONAL 385 ); 386 387typedef 388EFI_STATUS 389(EFIAPI *EFI_EXIT) ( 390 IN EFI_HANDLE ImageHandle, 391 IN EFI_STATUS ExitStatus, 392 IN UINTN ExitDataSize, 393 IN CHAR16 *ExitData OPTIONAL 394 ); 395 396 397// Image handle 398/*#define LOADED_IMAGE_PROTOCOL \ 399 { 0x5B1B31A1, 0x9562, 0x11d2, {0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B} } 400 401#define EFI_IMAGE_INFORMATION_REVISION 0x1000 402typedef struct { 403 UINT32 Revision; 404 EFI_HANDLE ParentHandle; 405 struct _EFI_SYSTEM_TABLE *SystemTable; 406 407 // Source location of image 408 EFI_HANDLE DeviceHandle; 409 EFI_DEVICE_PATH *FilePath; 410 VOID *Reserved; 411 412 // Images load options 413 UINT32 LoadOptionsSize; 414 VOID *LoadOptions; 415 416 // Location of where image was loaded 417 VOID *ImageBase; 418 UINT64 ImageSize; 419 EFI_MEMORY_TYPE ImageCodeType; 420 EFI_MEMORY_TYPE ImageDataType; 421 422 // If the driver image supports a dynamic unload request 423 EFI_IMAGE_UNLOAD Unload; 424 425} EFI_LOADED_IMAGE;*/ 426 427 428typedef 429EFI_STATUS 430(EFIAPI *EFI_EXIT_BOOT_SERVICES) ( 431 IN EFI_HANDLE ImageHandle, 432 IN UINTN MapKey 433 ); 434 435// 436// Misc 437// 438 439 440typedef 441EFI_STATUS 442(EFIAPI *EFI_STALL) ( 443 IN UINTN Microseconds 444 ); 445 446typedef 447EFI_STATUS 448(EFIAPI *EFI_SET_WATCHDOG_TIMER) ( 449 IN UINTN Timeout, 450 IN UINT64 WatchdogCode, 451 IN UINTN DataSize, 452 IN CHAR16 *WatchdogData OPTIONAL 453 ); 454 455typedef 456EFI_STATUS 457(EFIAPI *EFI_CONNECT_CONTROLLER) ( 458 IN EFI_HANDLE ControllerHandle, 459 IN EFI_HANDLE *DriverImageHandle OPTIONAL, 460 IN EFI_DEVICE_PATH *RemainingDevicePath OPTIONAL, 461 IN BOOLEAN Recursive 462 ); 463 464typedef 465EFI_STATUS 466(EFIAPI *EFI_DISCONNECT_CONTROLLER) ( 467 IN EFI_HANDLE ControllerHandle, 468 IN EFI_HANDLE DriverImageHandle OPTIONAL, 469 IN EFI_HANDLE ChildHandle OPTIONAL 470 ); 471 472#define EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL 0x00000001 473#define EFI_OPEN_PROTOCOL_GET_PROTOCOL 0x00000002 474#define EFI_OPEN_PROTOCOL_TEST_PROTOCOL 0x00000004 475#define EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER 0x00000008 476#define EFI_OPEN_PROTOCOL_BY_DRIVER 0x00000010 477#define EFI_OPEN_PROTOCOL_EXCLUSIVE 0x00000020 478 479typedef 480EFI_STATUS 481(EFIAPI *EFI_OPEN_PROTOCOL) ( 482 IN EFI_HANDLE Handle, 483 IN EFI_GUID *Protocol, 484 OUT VOID **Interface OPTIONAL, 485 IN EFI_HANDLE AgentHandle, 486 IN EFI_HANDLE ControllerHandle, 487 IN UINT32 Attributes 488 ); 489 490typedef 491EFI_STATUS 492(EFIAPI *EFI_CLOSE_PROTOCOL) ( 493 IN EFI_HANDLE Handle, 494 IN EFI_GUID *Protocol, 495 IN EFI_HANDLE AgentHandle, 496 IN EFI_HANDLE ControllerHandle 497 ); 498 499typedef struct { 500 EFI_HANDLE AgentHandle; 501 EFI_HANDLE ControllerHandle; 502 UINT32 Attributes; 503 UINT32 OpenCount; 504} EFI_OPEN_PROTOCOL_INFORMATION_ENTRY; 505 506typedef 507EFI_STATUS 508(EFIAPI *EFI_OPEN_PROTOCOL_INFORMATION) ( 509 IN EFI_HANDLE Handle, 510 IN EFI_GUID *Protocol, 511 OUT EFI_OPEN_PROTOCOL_INFORMATION_ENTRY **EntryBuffer, 512 OUT UINTN *EntryCount 513 ); 514 515typedef 516EFI_STATUS 517(EFIAPI *EFI_PROTOCOLS_PER_HANDLE) ( 518 IN EFI_HANDLE Handle, 519 OUT EFI_GUID ***ProtocolBuffer, 520 OUT UINTN *ProtocolBufferCount 521 ); 522 523typedef enum { 524 AllHandles, 525 ByRegisterNotify, 526 ByProtocol 527} EFI_LOCATE_SEARCH_TYPE; 528 529typedef 530EFI_STATUS 531(EFIAPI *EFI_LOCATE_HANDLE_BUFFER) ( 532 IN EFI_LOCATE_SEARCH_TYPE SearchType, 533 IN EFI_GUID *Protocol OPTIONAL, 534 IN VOID *SearchKey OPTIONAL, 535 IN OUT UINTN *NoHandles, 536 OUT EFI_HANDLE **Buffer 537 ); 538 539typedef 540EFI_STATUS 541(EFIAPI *EFI_LOCATE_PROTOCOL) ( 542 IN EFI_GUID *Protocol, 543 IN VOID *Registration OPTIONAL, 544 OUT VOID **Interface 545 ); 546 547typedef 548EFI_STATUS 549(EFIAPI *EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES) ( 550 IN OUT EFI_HANDLE *Handle, 551 ... 552 ); 553 554typedef 555EFI_STATUS 556(EFIAPI *EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES) ( 557 IN OUT EFI_HANDLE Handle, 558 ... 559 ); 560 561typedef 562EFI_STATUS 563(EFIAPI *EFI_CALCULATE_CRC32) ( 564 IN VOID *Data, 565 IN UINTN DataSize, 566 OUT UINT32 *Crc32 567 ); 568 569typedef 570VOID 571(EFIAPI *EFI_COPY_MEM) ( 572 IN VOID *Destination, 573 IN VOID *Source, 574 IN UINTN Length 575 ); 576 577typedef 578VOID 579(EFIAPI *EFI_SET_MEM) ( 580 IN VOID *Buffer, 581 IN UINTN Size, 582 IN UINT8 Value 583 ); 584 585 586typedef 587EFI_STATUS 588(EFIAPI *EFI_CREATE_EVENT_EX) ( 589 IN UINT32 Type, 590 IN EFI_TPL NotifyTpl, 591 IN EFI_EVENT_NOTIFY NotifyFunction OPTIONAL, 592 IN const VOID *NotifyContext OPTIONAL, 593 IN const EFI_GUID *EventGroup OPTIONAL, 594 OUT EFI_EVENT *Event 595 ); 596 597typedef enum { 598 EfiResetCold, 599 EfiResetWarm, 600 EfiResetShutdown 601} EFI_RESET_TYPE; 602 603typedef 604EFI_STATUS 605(EFIAPI *EFI_RESET_SYSTEM) ( 606 IN EFI_RESET_TYPE ResetType, 607 IN EFI_STATUS ResetStatus, 608 IN UINTN DataSize, 609 IN CHAR16 *ResetData OPTIONAL 610 ); 611 612typedef 613EFI_STATUS 614(EFIAPI *EFI_GET_NEXT_MONOTONIC_COUNT) ( 615 OUT UINT64 *Count 616 ); 617 618typedef 619EFI_STATUS 620(EFIAPI *EFI_GET_NEXT_HIGH_MONO_COUNT) ( 621 OUT UINT32 *HighCount 622 ); 623 624typedef struct { 625 UINT64 Length; 626 union { 627 EFI_PHYSICAL_ADDRESS DataBlock; 628 EFI_PHYSICAL_ADDRESS ContinuationPointer; 629 } Union; 630} EFI_CAPSULE_BLOCK_DESCRIPTOR; 631 632typedef struct { 633 EFI_GUID CapsuleGuid; 634 UINT32 HeaderSize; 635 UINT32 Flags; 636 UINT32 CapsuleImageSize; 637} EFI_CAPSULE_HEADER; 638 639#define CAPSULE_FLAGS_PERSIST_ACROSS_RESET 0x00010000 640#define CAPSULE_FLAGS_POPULATE_SYSTEM_TABLE 0x00020000 641#define CAPSULE_FLAGS_INITIATE_RESET 0x00040000 642 643typedef 644EFI_STATUS 645(EFIAPI *EFI_UPDATE_CAPSULE) ( 646 IN EFI_CAPSULE_HEADER **CapsuleHeaderArray, 647 IN UINTN CapsuleCount, 648 IN EFI_PHYSICAL_ADDRESS ScatterGatherList OPTIONAL 649 ); 650 651typedef 652EFI_STATUS 653(EFIAPI *EFI_QUERY_CAPSULE_CAPABILITIES) ( 654 IN EFI_CAPSULE_HEADER **CapsuleHeaderArray, 655 IN UINTN CapsuleCount, 656 OUT UINT64 *MaximumCapsuleSize, 657 OUT EFI_RESET_TYPE *ResetType 658 ); 659 660typedef 661EFI_STATUS 662(EFIAPI *EFI_QUERY_VARIABLE_INFO) ( 663 IN UINT32 Attributes, 664 OUT UINT64 *MaximumVariableStorageSize, 665 OUT UINT64 *RemainingVariableStorageSize, 666 OUT UINT64 *MaximumVariableSize 667 ); 668 669// 670// Protocol handler functions 671// 672 673typedef enum { 674 EFI_NATIVE_INTERFACE, 675 EFI_PCODE_INTERFACE 676} EFI_INTERFACE_TYPE; 677 678typedef 679EFI_STATUS 680(EFIAPI *EFI_INSTALL_PROTOCOL_INTERFACE) ( 681 IN OUT EFI_HANDLE *Handle, 682 IN EFI_GUID *Protocol, 683 IN EFI_INTERFACE_TYPE InterfaceType, 684 IN VOID *Interface 685 ); 686 687typedef 688EFI_STATUS 689(EFIAPI *EFI_REINSTALL_PROTOCOL_INTERFACE) ( 690 IN EFI_HANDLE Handle, 691 IN EFI_GUID *Protocol, 692 IN VOID *OldInterface, 693 IN VOID *NewInterface 694 ); 695 696typedef 697EFI_STATUS 698(EFIAPI *EFI_UNINSTALL_PROTOCOL_INTERFACE) ( 699 IN EFI_HANDLE Handle, 700 IN EFI_GUID *Protocol, 701 IN VOID *Interface 702 ); 703 704typedef 705EFI_STATUS 706(EFIAPI *EFI_HANDLE_PROTOCOL) ( 707 IN EFI_HANDLE Handle, 708 IN EFI_GUID *Protocol, 709 OUT VOID **Interface 710 ); 711 712typedef 713EFI_STATUS 714(EFIAPI *EFI_REGISTER_PROTOCOL_NOTIFY) ( 715 IN EFI_GUID *Protocol, 716 IN EFI_EVENT Event, 717 OUT VOID **Registration 718 ); 719 720typedef 721EFI_STATUS 722(EFIAPI *EFI_LOCATE_HANDLE) ( 723 IN EFI_LOCATE_SEARCH_TYPE SearchType, 724 IN EFI_GUID *Protocol OPTIONAL, 725 IN VOID *SearchKey OPTIONAL, 726 IN OUT UINTN *BufferSize, 727 OUT EFI_HANDLE *Buffer 728 ); 729 730typedef 731EFI_STATUS 732(EFIAPI *EFI_LOCATE_DEVICE_PATH) ( 733 IN EFI_GUID *Protocol, 734 IN OUT EFI_DEVICE_PATH **DevicePath, 735 OUT EFI_HANDLE *Device 736 ); 737 738typedef 739EFI_STATUS 740(EFIAPI *EFI_INSTALL_CONFIGURATION_TABLE) ( 741 IN EFI_GUID *Guid, 742 IN VOID *Table 743 ); 744 745typedef 746EFI_STATUS 747(EFIAPI *EFI_RESERVED_SERVICE) ( 748 ); 749 750// 751// Standard EFI table header 752// 753 754typedef struct _EFI_TABLE_HEADER { 755 UINT64 Signature; 756 UINT32 Revision; 757 UINT32 HeaderSize; 758 UINT32 CRC32; 759 UINT32 Reserved; 760} EFI_TABLE_HEADER; 761 762 763// 764// EFI Runtime Serivces Table 765// 766 767#define EFI_RUNTIME_SERVICES_SIGNATURE 0x56524553544e5552 768#define EFI_RUNTIME_SERVICES_REVISION (EFI_SPECIFICATION_MAJOR_REVISION<<16) | (EFI_SPECIFICATION_MINOR_REVISION) 769 770typedef struct { 771 EFI_TABLE_HEADER Hdr; 772 773 // 774 // Time services 775 // 776 777 EFI_GET_TIME GetTime; 778 EFI_SET_TIME SetTime; 779 EFI_GET_WAKEUP_TIME GetWakeupTime; 780 EFI_SET_WAKEUP_TIME SetWakeupTime; 781 782 // 783 // Virtual memory services 784 // 785 786 EFI_SET_VIRTUAL_ADDRESS_MAP SetVirtualAddressMap; 787 EFI_CONVERT_POINTER ConvertPointer; 788 789 // 790 // Variable serviers 791 // 792 793 EFI_GET_VARIABLE GetVariable; 794 EFI_GET_NEXT_VARIABLE_NAME GetNextVariableName; 795 EFI_SET_VARIABLE SetVariable; 796 797 // 798 // Misc 799 // 800 801 EFI_GET_NEXT_HIGH_MONO_COUNT GetNextHighMonotonicCount; 802 EFI_RESET_SYSTEM ResetSystem; 803 804 EFI_UPDATE_CAPSULE UpdateCapsule; 805 EFI_QUERY_CAPSULE_CAPABILITIES QueryCapsuleCapabilities; 806 EFI_QUERY_VARIABLE_INFO QueryVariableInfo; 807} EFI_RUNTIME_SERVICES; 808 809 810// 811// EFI Boot Services Table 812// 813 814#define EFI_BOOT_SERVICES_SIGNATURE 0x56524553544f4f42 815#define EFI_BOOT_SERVICES_REVISION (EFI_SPECIFICATION_MAJOR_REVISION<<16) | (EFI_SPECIFICATION_MINOR_REVISION) 816 817typedef struct _EFI_BOOT_SERVICES { 818 819 EFI_TABLE_HEADER Hdr; 820 821 // 822 // Task priority functions 823 // 824 825 EFI_RAISE_TPL RaiseTPL; 826 EFI_RESTORE_TPL RestoreTPL; 827 828 // 829 // Memory functions 830 // 831 832 EFI_ALLOCATE_PAGES AllocatePages; 833 EFI_FREE_PAGES FreePages; 834 EFI_GET_MEMORY_MAP GetMemoryMap; 835 EFI_ALLOCATE_POOL AllocatePool; 836 EFI_FREE_POOL FreePool; 837 838 // 839 // Event & timer functions 840 // 841 842 EFI_CREATE_EVENT CreateEvent; 843 EFI_SET_TIMER SetTimer; 844 EFI_WAIT_FOR_EVENT WaitForEvent; 845 EFI_SIGNAL_EVENT SignalEvent; 846 EFI_CLOSE_EVENT CloseEvent; 847 EFI_CHECK_EVENT CheckEvent; 848 849 // 850 // Protocol handler functions 851 // 852 853 EFI_INSTALL_PROTOCOL_INTERFACE InstallProtocolInterface; 854 EFI_REINSTALL_PROTOCOL_INTERFACE ReinstallProtocolInterface; 855 EFI_UNINSTALL_PROTOCOL_INTERFACE UninstallProtocolInterface; 856 EFI_HANDLE_PROTOCOL HandleProtocol; 857 EFI_HANDLE_PROTOCOL PCHandleProtocol; 858 EFI_REGISTER_PROTOCOL_NOTIFY RegisterProtocolNotify; 859 EFI_LOCATE_HANDLE LocateHandle; 860 EFI_LOCATE_DEVICE_PATH LocateDevicePath; 861 EFI_INSTALL_CONFIGURATION_TABLE InstallConfigurationTable; 862 863 // 864 // Image functions 865 // 866 867 EFI_IMAGE_LOAD LoadImage; 868 EFI_IMAGE_START StartImage; 869 EFI_EXIT Exit; 870 EFI_IMAGE_UNLOAD UnloadImage; 871 EFI_EXIT_BOOT_SERVICES ExitBootServices; 872 873 // 874 // Misc functions 875 // 876 877 EFI_GET_NEXT_MONOTONIC_COUNT GetNextMonotonicCount; 878 EFI_STALL Stall; 879 EFI_SET_WATCHDOG_TIMER SetWatchdogTimer; 880 881 // 882 // DriverSupport Services 883 // 884 885 EFI_CONNECT_CONTROLLER ConnectController; 886 EFI_DISCONNECT_CONTROLLER DisconnectController; 887 888 // 889 // Open and Close Protocol Services 890 // 891 EFI_OPEN_PROTOCOL OpenProtocol; 892 EFI_CLOSE_PROTOCOL CloseProtocol; 893 EFI_OPEN_PROTOCOL_INFORMATION OpenProtocolInformation; 894 895 // 896 // Library Services 897 // 898 EFI_PROTOCOLS_PER_HANDLE ProtocolsPerHandle; 899 EFI_LOCATE_HANDLE_BUFFER LocateHandleBuffer; 900 EFI_LOCATE_PROTOCOL LocateProtocol; 901 EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES InstallMultipleProtocolInterfaces; 902 EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES UninstallMultipleProtocolInterfaces; 903 904 // 905 // 32-bit CRC Services 906 // 907 EFI_CALCULATE_CRC32 CalculateCrc32; 908 909 // 910 // Misc Services 911 // 912 EFI_COPY_MEM CopyMem; 913 EFI_SET_MEM SetMem; 914 EFI_CREATE_EVENT_EX CreateEventEx; 915} EFI_BOOT_SERVICES; 916 917 918// 919// EFI Configuration Table and GUID definitions 920// 921 922#define MPS_TABLE_GUID \ 923 { 0xeb9d2d2f, 0x2d88, 0x11d3, {0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} } 924 925#define ACPI_TABLE_GUID \ 926 { 0xeb9d2d30, 0x2d88, 0x11d3, {0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} } 927 928#define ACPI_20_TABLE_GUID \ 929 { 0x8868e871, 0xe4f1, 0x11d3, {0xbc, 0x22, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81} } 930 931#define SMBIOS_TABLE_GUID \ 932 { 0xeb9d2d31, 0x2d88, 0x11d3, {0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} } 933 934#define SMBIOS3_TABLE_GUID \ 935 { 0xf2fd1544, 0x9794, 0x4a2c, {0x99, 0x2e, 0xe5, 0xbb, 0xcf, 0x20, 0xe3, 0x94} } 936 937#define SAL_SYSTEM_TABLE_GUID \ 938 { 0xeb9d2d32, 0x2d88, 0x11d3, {0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} } 939 940/* DIG64 Headless Console & Debug Port Table. */ 941#define HCDP_TABLE_GUID \ 942 { 0xf951938d, 0x620b, 0x42ef, {0x82, 0x79, 0xa8, 0x4b, 0x79, 0x61, 0x78, 0x98} } 943 944#define EFI_DTB_TABLE_GUID \ 945 { 0xb1b621d5, 0xf19c, 0x41a5, {0x83, 0x0b, 0xd9, 0x15, 0x2c, 0x69, 0xaa, 0xe0} } 946 947typedef struct _EFI_CONFIGURATION_TABLE { 948 EFI_GUID VendorGuid; 949 VOID *VendorTable; 950} EFI_CONFIGURATION_TABLE; 951 952 953// 954// EFI System Table 955// 956 957 958 959 960#define EFI_SYSTEM_TABLE_SIGNATURE 0x5453595320494249 961#define EFI_SYSTEM_TABLE_REVISION (EFI_SPECIFICATION_MAJOR_REVISION<<16) | (EFI_SPECIFICATION_MINOR_REVISION) 962 963typedef struct _EFI_SYSTEM_TABLE { 964 EFI_TABLE_HEADER Hdr; 965 966 CHAR16 *FirmwareVendor; 967 UINT32 FirmwareRevision; 968 969 EFI_HANDLE ConsoleInHandle; 970 SIMPLE_INPUT_INTERFACE *ConIn; 971 972 EFI_HANDLE ConsoleOutHandle; 973 SIMPLE_TEXT_OUTPUT_INTERFACE *ConOut; 974 975 EFI_HANDLE StandardErrorHandle; 976 SIMPLE_TEXT_OUTPUT_INTERFACE *StdErr; 977 978 EFI_RUNTIME_SERVICES *RuntimeServices; 979 EFI_BOOT_SERVICES *BootServices; 980 981 UINTN NumberOfTableEntries; 982 EFI_CONFIGURATION_TABLE *ConfigurationTable; 983 984} EFI_SYSTEM_TABLE; 985 986#endif 987 988