1/* $NetBSD: efiapi.h,v 1.1 2006/04/07 14:21:29 cherry Exp $ */ 2/* $FreeBSD: src/sys/boot/efi/include/efiapi.h,v 1.6 2003/12/10 19:08:09 jhb Exp $ */ 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 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 127typedef 128VOID 129(EFIAPI *EFI_EVENT_NOTIFY) ( 130 IN EFI_EVENT Event, 131 IN VOID *Context 132 ); 133 134typedef 135EFI_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 144typedef enum { 145 TimerCancel, 146 TimerPeriodic, 147 TimerRelative, 148 TimerTypeMax 149} EFI_TIMER_DELAY; 150 151typedef 152EFI_STATUS 153(EFIAPI *EFI_SET_TIMER) ( 154 IN EFI_EVENT Event, 155 IN EFI_TIMER_DELAY Type, 156 IN UINT64 TriggerTime 157 ); 158 159typedef 160EFI_STATUS 161(EFIAPI *EFI_SIGNAL_EVENT) ( 162 IN EFI_EVENT Event 163 ); 164 165typedef 166EFI_STATUS 167(EFIAPI *EFI_WAIT_FOR_EVENT) ( 168 IN UINTN NumberOfEvents, 169 IN EFI_EVENT *Event, 170 OUT UINTN *Index 171 ); 172 173typedef 174EFI_STATUS 175(EFIAPI *EFI_CLOSE_EVENT) ( 176 IN EFI_EVENT Event 177 ); 178 179typedef 180EFI_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 194typedef 195EFI_TPL 196(EFIAPI *EFI_RAISE_TPL) ( 197 IN EFI_TPL NewTpl 198 ); 199 200typedef 201VOID 202(EFIAPI *EFI_RESTORE_TPL) ( 203 IN EFI_TPL OldTpl 204 ); 205 206 207/* 208 * EFI platform variables 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 222typedef 223EFI_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 232typedef 233EFI_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 241typedef 242EFI_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 256typedef 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 263typedef 264EFI_STATUS 265(EFIAPI *EFI_GET_TIME) ( 266 OUT EFI_TIME *Time, 267 OUT EFI_TIME_CAPABILITIES *Capabilities OPTIONAL 268 ); 269 270typedef 271EFI_STATUS 272(EFIAPI *EFI_SET_TIME) ( 273 IN EFI_TIME *Time 274 ); 275 276typedef 277EFI_STATUS 278(EFIAPI *EFI_GET_WAKEUP_TIME) ( 279 OUT BOOLEAN *Enabled, 280 OUT BOOLEAN *Pending, 281 OUT EFI_TIME *Time 282 ); 283 284typedef 285EFI_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 317typedef 318EFI_STATUS 319(EFIAPI *EFI_IMAGE_ENTRY_POINT) ( 320 IN EFI_HANDLE ImageHandle, 321 IN struct _EFI_SYSTEM_TABLE *SystemTable 322 ); 323 324typedef 325EFI_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 335typedef 336EFI_STATUS 337(EFIAPI *EFI_IMAGE_START) ( 338 IN EFI_HANDLE ImageHandle, 339 OUT UINTN *ExitDataSize, 340 OUT CHAR16 **ExitData OPTIONAL 341 ); 342 343typedef 344EFI_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 352typedef 353EFI_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 364typedef 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 390typedef 391EFI_STATUS 392(EFIAPI *EFI_EXIT_BOOT_SERVICES) ( 393 IN EFI_HANDLE ImageHandle, 394 IN UINTN MapKey 395 ); 396 397/* 398 * Misc 399 */ 400 401 402typedef 403EFI_STATUS 404(EFIAPI *EFI_STALL) ( 405 IN UINTN Microseconds 406 ); 407 408typedef 409EFI_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 418typedef enum { 419 EfiResetCold, 420 EfiResetWarm 421} EFI_RESET_TYPE; 422 423typedef 424EFI_STATUS 425(EFIAPI *EFI_RESET_SYSTEM) ( 426 IN EFI_RESET_TYPE ResetType, 427 IN EFI_STATUS ResetStatus, 428 IN UINTN DataSize, 429 IN CHAR16 *ResetData OPTIONAL 430 ); 431 432typedef 433EFI_STATUS 434(EFIAPI *EFI_GET_NEXT_MONOTONIC_COUNT) ( 435 OUT UINT64 *Count 436 ); 437 438typedef 439EFI_STATUS 440(EFIAPI *EFI_GET_NEXT_HIGH_MONO_COUNT) ( 441 OUT UINT32 *HighCount 442 ); 443 444/* 445 * Protocol handler functions 446 */ 447 448typedef enum { 449 EFI_NATIVE_INTERFACE, 450 EFI_PCODE_INTERFACE 451} EFI_INTERFACE_TYPE; 452 453typedef 454EFI_STATUS 455(EFIAPI *EFI_INSTALL_PROTOCOL_INTERFACE) ( 456 IN OUT EFI_HANDLE *Handle, 457 IN EFI_GUID *Protocol, 458 IN EFI_INTERFACE_TYPE InterfaceType, 459 IN VOID *Interface 460 ); 461 462typedef 463EFI_STATUS 464(EFIAPI *EFI_REINSTALL_PROTOCOL_INTERFACE) ( 465 IN EFI_HANDLE Handle, 466 IN EFI_GUID *Protocol, 467 IN VOID *OldInterface, 468 IN VOID *NewInterface 469 ); 470 471typedef 472EFI_STATUS 473(EFIAPI *EFI_UNINSTALL_PROTOCOL_INTERFACE) ( 474 IN EFI_HANDLE Handle, 475 IN EFI_GUID *Protocol, 476 IN VOID *Interface 477 ); 478 479typedef 480EFI_STATUS 481(EFIAPI *EFI_HANDLE_PROTOCOL) ( 482 IN EFI_HANDLE Handle, 483 IN EFI_GUID *Protocol, 484 OUT VOID **Interface 485 ); 486 487typedef 488EFI_STATUS 489(EFIAPI *EFI_REGISTER_PROTOCOL_NOTIFY) ( 490 IN EFI_GUID *Protocol, 491 IN EFI_EVENT Event, 492 OUT VOID **Registration 493 ); 494 495typedef enum { 496 AllHandles, 497 ByRegisterNotify, 498 ByProtocol 499} EFI_LOCATE_SEARCH_TYPE; 500 501typedef 502EFI_STATUS 503(EFIAPI *EFI_LOCATE_HANDLE) ( 504 IN EFI_LOCATE_SEARCH_TYPE SearchType, 505 IN EFI_GUID *Protocol OPTIONAL, 506 IN VOID *SearchKey OPTIONAL, 507 IN OUT UINTN *BufferSize, 508 OUT EFI_HANDLE *Buffer 509 ); 510 511typedef 512EFI_STATUS 513(EFIAPI *EFI_LOCATE_DEVICE_PATH) ( 514 IN EFI_GUID *Protocol, 515 IN OUT EFI_DEVICE_PATH **DevicePath, 516 OUT EFI_HANDLE *Device 517 ); 518 519typedef 520EFI_STATUS 521(EFIAPI *EFI_INSTALL_CONFIGURATION_TABLE) ( 522 IN EFI_GUID *Guid, 523 IN VOID *Table 524 ); 525 526typedef 527EFI_STATUS 528(EFIAPI *EFI_RESERVED_SERVICE) ( 529 VOID 530 ); 531 532/* 533 * Standard EFI table header 534 */ 535 536typedef struct _EFI_TABLE_HEARDER { 537 UINT64 Signature; 538 UINT32 Revision; 539 UINT32 HeaderSize; 540 UINT32 CRC32; 541 UINT32 Reserved; 542} EFI_TABLE_HEADER; 543 544 545/* 546 * EFI Runtime Serivces Table 547 */ 548 549#define EFI_RUNTIME_SERVICES_SIGNATURE 0x56524553544e5552 550#define EFI_RUNTIME_SERVICES_REVISION (EFI_SPECIFICATION_MAJOR_REVISION<<16) | (EFI_SPECIFICATION_MINOR_REVISION) 551 552typedef struct { 553 EFI_TABLE_HEADER Hdr; 554 555 /* Time services */ 556 557 EFI_GET_TIME GetTime; 558 EFI_SET_TIME SetTime; 559 EFI_GET_WAKEUP_TIME GetWakeupTime; 560 EFI_SET_WAKEUP_TIME SetWakeupTime; 561 562 /* Virtual memory services */ 563 564 EFI_SET_VIRTUAL_ADDRESS_MAP SetVirtualAddressMap; 565 EFI_CONVERT_POINTER ConvertPointer; 566 567 /* Variable serviers */ 568 569 EFI_GET_VARIABLE GetVariable; 570 EFI_GET_NEXT_VARIABLE_NAME GetNextVariableName; 571 EFI_SET_VARIABLE SetVariable; 572 573 /* Misc */ 574 575 EFI_GET_NEXT_HIGH_MONO_COUNT GetNextHighMonotonicCount; 576 EFI_RESET_SYSTEM ResetSystem; 577 578} EFI_RUNTIME_SERVICES; 579 580 581/* 582 * EFI Boot Services Table 583 */ 584 585#define EFI_BOOT_SERVICES_SIGNATURE 0x56524553544f4f42 586#define EFI_BOOT_SERVICES_REVISION (EFI_SPECIFICATION_MAJOR_REVISION<<16) | (EFI_SPECIFICATION_MINOR_REVISION) 587 588typedef struct _EFI_BOOT_SERVICES { 589 590 EFI_TABLE_HEADER Hdr; 591 592 /* Task priority functions */ 593 594 EFI_RAISE_TPL RaiseTPL; 595 EFI_RESTORE_TPL RestoreTPL; 596 597 /* Memory functions */ 598 599 EFI_ALLOCATE_PAGES AllocatePages; 600 EFI_FREE_PAGES FreePages; 601 EFI_GET_MEMORY_MAP GetMemoryMap; 602 EFI_ALLOCATE_POOL AllocatePool; 603 EFI_FREE_POOL FreePool; 604 605 /* Event & timer functions */ 606 607 EFI_CREATE_EVENT CreateEvent; 608 EFI_SET_TIMER SetTimer; 609 EFI_WAIT_FOR_EVENT WaitForEvent; 610 EFI_SIGNAL_EVENT SignalEvent; 611 EFI_CLOSE_EVENT CloseEvent; 612 EFI_CHECK_EVENT CheckEvent; 613 614 /* Protocol handler functions */ 615 616 EFI_INSTALL_PROTOCOL_INTERFACE InstallProtocolInterface; 617 EFI_REINSTALL_PROTOCOL_INTERFACE ReinstallProtocolInterface; 618 EFI_UNINSTALL_PROTOCOL_INTERFACE UninstallProtocolInterface; 619 EFI_HANDLE_PROTOCOL HandleProtocol; 620 EFI_HANDLE_PROTOCOL PCHandleProtocol; 621 EFI_REGISTER_PROTOCOL_NOTIFY RegisterProtocolNotify; 622 EFI_LOCATE_HANDLE LocateHandle; 623 EFI_LOCATE_DEVICE_PATH LocateDevicePath; 624 EFI_INSTALL_CONFIGURATION_TABLE InstallConfigurationTable; 625 626 /* Image functions */ 627 628 EFI_IMAGE_LOAD LoadImage; 629 EFI_IMAGE_START StartImage; 630 EFI_EXIT Exit; 631 EFI_IMAGE_UNLOAD UnloadImage; 632 EFI_EXIT_BOOT_SERVICES ExitBootServices; 633 634 /* Misc functions */ 635 636 EFI_GET_NEXT_MONOTONIC_COUNT GetNextMonotonicCount; 637 EFI_STALL Stall; 638 EFI_SET_WATCHDOG_TIMER SetWatchdogTimer; 639 640} EFI_BOOT_SERVICES; 641 642 643/* 644 * EFI Configuration Table and GUID definitions 645 */ 646 647#define MPS_TABLE_GUID \ 648 { 0xeb9d2d2f, 0x2d88, 0x11d3, { 0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d } } 649 650#define ACPI_TABLE_GUID \ 651 { 0xeb9d2d30, 0x2d88, 0x11d3, { 0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d } } 652 653#define ACPI_20_TABLE_GUID \ 654 { 0x8868e871, 0xe4f1, 0x11d3, { 0xbc, 0x22, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 } } 655 656#define SMBIOS_TABLE_GUID \ 657 { 0xeb9d2d31, 0x2d88, 0x11d3, { 0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d } } 658 659#define SAL_SYSTEM_TABLE_GUID \ 660 { 0xeb9d2d32, 0x2d88, 0x11d3, { 0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d } } 661 662/* DIG64 Headless Console & Debug Port Table. */ 663#define HCDP_TABLE_GUID \ 664 {0xf951938d,0x620b,0x42ef,{0x82,0x79,0xa8,0x4b,0x79,0x61,0x78,0x98}} 665 666typedef struct _EFI_CONFIGURATION_TABLE { 667 EFI_GUID VendorGuid; 668 VOID *VendorTable; 669} EFI_CONFIGURATION_TABLE; 670 671 672/* 673 * EFI System Table 674 */ 675 676 677 678 679#define EFI_SYSTEM_TABLE_SIGNATURE 0x5453595320494249 680#define EFI_SYSTEM_TABLE_REVISION (EFI_SPECIFICATION_MAJOR_REVISION<<16) | (EFI_SPECIFICATION_MINOR_REVISION) 681 682typedef struct _EFI_SYSTEM_TABLE { 683 EFI_TABLE_HEADER Hdr; 684 685 CHAR16 *FirmwareVendor; 686 UINT32 FirmwareRevision; 687 688 EFI_HANDLE ConsoleInHandle; 689 SIMPLE_INPUT_INTERFACE *ConIn; 690 691 EFI_HANDLE ConsoleOutHandle; 692 SIMPLE_TEXT_OUTPUT_INTERFACE *ConOut; 693 694 EFI_HANDLE StandardErrorHandle; 695 SIMPLE_TEXT_OUTPUT_INTERFACE *StdErr; 696 697 EFI_RUNTIME_SERVICES *RuntimeServices; 698 EFI_BOOT_SERVICES *BootServices; 699 700 UINTN NumberOfTableEntries; 701 EFI_CONFIGURATION_TABLE *ConfigurationTable; 702 703} EFI_SYSTEM_TABLE; 704 705#endif 706