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