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