7 Copyright (c) 1998 Intel Corporation
15 Global EFI runtime & boot service interfaces
25 * EFI Specification Revision
28 #define EFI_SPECIFICATION_MAJOR_REVISION 1
29 #define EFI_SPECIFICATION_MINOR_REVISION 02
32 * Declare forward referenced data structures
35 INTERFACE_DECL(_EFI_SYSTEM_TABLE);
43 (EFIAPI *EFI_ALLOCATE_PAGES) (
44 IN EFI_ALLOCATE_TYPE Type,
45 IN EFI_MEMORY_TYPE MemoryType,
47 OUT EFI_PHYSICAL_ADDRESS *Memory
52 (EFIAPI *EFI_FREE_PAGES) (
53 IN EFI_PHYSICAL_ADDRESS Memory,
59 (EFIAPI *EFI_GET_MEMORY_MAP) (
60 IN OUT UINTN *MemoryMapSize,
61 IN OUT EFI_MEMORY_DESCRIPTOR *MemoryMap,
63 OUT UINTN *DescriptorSize,
64 OUT UINT32 *DescriptorVersion
67 #define NextMemoryDescriptor(Ptr,Size) ((EFI_MEMORY_DESCRIPTOR *) (((UINT8 *) Ptr) + Size))
72 (EFIAPI *EFI_ALLOCATE_POOL) (
73 IN EFI_MEMORY_TYPE PoolType,
80 (EFIAPI *EFI_FREE_POOL) (
86 (EFIAPI *EFI_SET_VIRTUAL_ADDRESS_MAP) (
87 IN UINTN MemoryMapSize,
88 IN UINTN DescriptorSize,
89 IN UINT32 DescriptorVersion,
90 IN EFI_MEMORY_DESCRIPTOR *VirtualMap
94 #define EFI_OPTIONAL_PTR 0x00000001
95 #define EFI_INTERNAL_FNC 0x00000002 /* Pointer to internal runtime fnc */
96 #define EFI_INTERNAL_PTR 0x00000004 /* Pointer to internal runtime data */
101 (EFIAPI *EFI_CONVERT_POINTER) (
102 IN UINTN DebugDisposition,
103 IN OUT VOID **Address
113 #define EVT_TIMER 0x80000000
114 #define EVT_RUNTIME 0x40000000
115 #define EVT_RUNTIME_CONTEXT 0x20000000
117 #define EVT_NOTIFY_WAIT 0x00000100
118 #define EVT_NOTIFY_SIGNAL 0x00000200
120 #define EVT_SIGNAL_EXIT_BOOT_SERVICES 0x00000201
121 #define EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE 0x60000202
123 #define EVT_EFI_SIGNAL_MASK 0x000000FF
124 #define EVT_EFI_SIGNAL_MAX 2
128 (EFIAPI *EFI_EVENT_NOTIFY) (
135 (EFIAPI *EFI_CREATE_EVENT) (
137 IN EFI_TPL NotifyTpl,
138 IN EFI_EVENT_NOTIFY NotifyFunction,
139 IN VOID *NotifyContext,
152 (EFIAPI *EFI_SET_TIMER) (
154 IN EFI_TIMER_DELAY Type,
155 IN UINT64 TriggerTime
160 (EFIAPI *EFI_SIGNAL_EVENT) (
166 (EFIAPI *EFI_WAIT_FOR_EVENT) (
167 IN UINTN NumberOfEvents,
174 (EFIAPI *EFI_CLOSE_EVENT) (
180 (EFIAPI *EFI_CHECK_EVENT) (
185 * Task priority level
188 #define TPL_APPLICATION 4
189 #define TPL_CALLBACK 8
190 #define TPL_NOTIFY 16
191 #define TPL_HIGH_LEVEL 31
195 (EFIAPI *EFI_RAISE_TPL) (
201 (EFIAPI *EFI_RESTORE_TPL) (
207 * EFI platform variables
210 #define EFI_GLOBAL_VARIABLE \
211 { 0x8BE4DF61, 0x93CA, 0x11d2, 0xAA, 0x0D, 0x00, 0xE0, 0x98, 0x03, 0x2B, 0x8C }
213 /* Variable attributes */
214 #define EFI_VARIABLE_NON_VOLATILE 0x00000001
215 #define EFI_VARIABLE_BOOTSERVICE_ACCESS 0x00000002
216 #define EFI_VARIABLE_RUNTIME_ACCESS 0x00000004
218 /* Variable size limitation */
219 #define EFI_MAXIMUM_VARIABLE_SIZE 1024
223 (EFIAPI *EFI_GET_VARIABLE) (
224 IN CHAR16 *VariableName,
225 IN EFI_GUID *VendorGuid,
226 OUT UINT32 *Attributes OPTIONAL,
227 IN OUT UINTN *DataSize,
233 (EFIAPI *EFI_GET_NEXT_VARIABLE_NAME) (
234 IN OUT UINTN *VariableNameSize,
235 IN OUT CHAR16 *VariableName,
236 IN OUT EFI_GUID *VendorGuid
242 (EFIAPI *EFI_SET_VARIABLE) (
243 IN CHAR16 *VariableName,
244 IN EFI_GUID *VendorGuid,
245 IN UINT32 Attributes,
256 UINT32 Resolution; /* 1e-6 parts per million */
257 UINT32 Accuracy; /* hertz */
258 BOOLEAN SetsToZero; /* Set clears sub-second time */
259 } EFI_TIME_CAPABILITIES;
264 (EFIAPI *EFI_GET_TIME) (
266 OUT EFI_TIME_CAPABILITIES *Capabilities OPTIONAL
271 (EFIAPI *EFI_SET_TIME) (
277 (EFIAPI *EFI_GET_WAKEUP_TIME) (
278 OUT BOOLEAN *Enabled,
279 OUT BOOLEAN *Pending,
285 (EFIAPI *EFI_SET_WAKEUP_TIME) (
287 IN EFI_TIME *Time OPTIONAL
296 /* PE32+ Subsystem type for EFI images */
298 #if !defined(IMAGE_SUBSYSTEM_EFI_APPLICATION)
299 #define IMAGE_SUBSYSTEM_EFI_APPLICATION 10
300 #define IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER 11
301 #define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER 12
304 /* PE32+ Machine type for EFI images */
306 #if !defined(EFI_IMAGE_MACHINE_IA32)
307 #define EFI_IMAGE_MACHINE_IA32 0x014c
310 #if !defined(EFI_IMAGE_MACHINE_IA64)
311 #define EFI_IMAGE_MACHINE_IA64 0x0200
314 /* Image Entry prototype */
318 (EFIAPI *EFI_IMAGE_ENTRY_POINT) (
319 IN EFI_HANDLE ImageHandle,
320 IN struct _EFI_SYSTEM_TABLE *SystemTable
325 (EFIAPI *EFI_IMAGE_LOAD) (
326 IN BOOLEAN BootPolicy,
327 IN EFI_HANDLE ParentImageHandle,
328 IN EFI_DEVICE_PATH *FilePath,
329 IN VOID *SourceBuffer OPTIONAL,
331 OUT EFI_HANDLE *ImageHandle
336 (EFIAPI *EFI_IMAGE_START) (
337 IN EFI_HANDLE ImageHandle,
338 OUT UINTN *ExitDataSize,
339 OUT CHAR16 **ExitData OPTIONAL
345 IN EFI_HANDLE ImageHandle,
346 IN EFI_STATUS ExitStatus,
347 IN UINTN ExitDataSize,
348 IN CHAR16 *ExitData OPTIONAL
353 (EFIAPI *EFI_IMAGE_UNLOAD) (
354 IN EFI_HANDLE ImageHandle
359 #define LOADED_IMAGE_PROTOCOL \
360 { 0x5B1B31A1, 0x9562, 0x11d2, 0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B }
362 #define EFI_IMAGE_INFORMATION_REVISION 0x1000
365 EFI_HANDLE ParentHandle;
366 struct _EFI_SYSTEM_TABLE *SystemTable;
368 /* Source location of image */
369 EFI_HANDLE DeviceHandle;
370 EFI_DEVICE_PATH *FilePath;
373 /* Images load options */
374 UINT32 LoadOptionsSize;
377 /* Location of where image was loaded */
380 EFI_MEMORY_TYPE ImageCodeType;
381 EFI_MEMORY_TYPE ImageDataType;
383 /* If the driver image supports a dynamic unload request */
384 EFI_IMAGE_UNLOAD Unload;
391 (EFIAPI *EFI_EXIT_BOOT_SERVICES) (
392 IN EFI_HANDLE ImageHandle,
403 (EFIAPI *EFI_STALL) (
404 IN UINTN Microseconds
409 (EFIAPI *EFI_SET_WATCHDOG_TIMER) (
411 IN UINT64 WatchdogCode,
413 IN CHAR16 *WatchdogData OPTIONAL
424 (EFIAPI *EFI_RESET_SYSTEM) (
425 IN EFI_RESET_TYPE ResetType,
426 IN EFI_STATUS ResetStatus,
428 IN CHAR16 *ResetData OPTIONAL
433 (EFIAPI *EFI_GET_NEXT_MONOTONIC_COUNT) (
439 (EFIAPI *EFI_GET_NEXT_HIGH_MONO_COUNT) (
440 OUT UINT32 *HighCount
444 * Protocol handler functions
448 EFI_NATIVE_INTERFACE,
450 } EFI_INTERFACE_TYPE;
454 (EFIAPI *EFI_INSTALL_PROTOCOL_INTERFACE) (
455 IN OUT EFI_HANDLE *Handle,
456 IN EFI_GUID *Protocol,
457 IN EFI_INTERFACE_TYPE InterfaceType,
463 (EFIAPI *EFI_REINSTALL_PROTOCOL_INTERFACE) (
464 IN EFI_HANDLE Handle,
465 IN EFI_GUID *Protocol,
466 IN VOID *OldInterface,
467 IN VOID *NewInterface
472 (EFIAPI *EFI_UNINSTALL_PROTOCOL_INTERFACE) (
473 IN EFI_HANDLE Handle,
474 IN EFI_GUID *Protocol,
480 (EFIAPI *EFI_HANDLE_PROTOCOL) (
481 IN EFI_HANDLE Handle,
482 IN EFI_GUID *Protocol,
488 (EFIAPI *EFI_REGISTER_PROTOCOL_NOTIFY) (
489 IN EFI_GUID *Protocol,
491 OUT VOID **Registration
498 } EFI_LOCATE_SEARCH_TYPE;
502 (EFIAPI *EFI_LOCATE_HANDLE) (
503 IN EFI_LOCATE_SEARCH_TYPE SearchType,
504 IN EFI_GUID *Protocol OPTIONAL,
505 IN VOID *SearchKey OPTIONAL,
506 IN OUT UINTN *BufferSize,
507 OUT EFI_HANDLE *Buffer
512 (EFIAPI *EFI_LOCATE_DEVICE_PATH) (
513 IN EFI_GUID *Protocol,
514 IN OUT EFI_DEVICE_PATH **DevicePath,
515 OUT EFI_HANDLE *Device
520 (EFIAPI *EFI_INSTALL_CONFIGURATION_TABLE) (
527 (EFIAPI *EFI_RESERVED_SERVICE) (
532 * Standard EFI table header
535 typedef struct _EFI_TABLE_HEARDER {
545 * EFI Runtime Serivces Table
548 #define EFI_RUNTIME_SERVICES_SIGNATURE 0x56524553544e5552
549 #define EFI_RUNTIME_SERVICES_REVISION (EFI_SPECIFICATION_MAJOR_REVISION<<16) | (EFI_SPECIFICATION_MINOR_REVISION)
552 EFI_TABLE_HEADER Hdr;
556 EFI_GET_TIME GetTime;
557 EFI_SET_TIME SetTime;
558 EFI_GET_WAKEUP_TIME GetWakeupTime;
559 EFI_SET_WAKEUP_TIME SetWakeupTime;
561 /* Virtual memory services */
563 EFI_SET_VIRTUAL_ADDRESS_MAP SetVirtualAddressMap;
564 EFI_CONVERT_POINTER ConvertPointer;
566 /* Variable serviers */
568 EFI_GET_VARIABLE GetVariable;
569 EFI_GET_NEXT_VARIABLE_NAME GetNextVariableName;
570 EFI_SET_VARIABLE SetVariable;
574 EFI_GET_NEXT_HIGH_MONO_COUNT GetNextHighMonotonicCount;
575 EFI_RESET_SYSTEM ResetSystem;
577 } EFI_RUNTIME_SERVICES;
581 * EFI Boot Services Table
584 #define EFI_BOOT_SERVICES_SIGNATURE 0x56524553544f4f42
585 #define EFI_BOOT_SERVICES_REVISION (EFI_SPECIFICATION_MAJOR_REVISION<<16) | (EFI_SPECIFICATION_MINOR_REVISION)
587 typedef struct _EFI_BOOT_SERVICES {
589 EFI_TABLE_HEADER Hdr;
591 /* Task priority functions */
593 EFI_RAISE_TPL RaiseTPL;
594 EFI_RESTORE_TPL RestoreTPL;
596 /* Memory functions */
598 EFI_ALLOCATE_PAGES AllocatePages;
599 EFI_FREE_PAGES FreePages;
600 EFI_GET_MEMORY_MAP GetMemoryMap;
601 EFI_ALLOCATE_POOL AllocatePool;
602 EFI_FREE_POOL FreePool;
604 /* Event & timer functions */
606 EFI_CREATE_EVENT CreateEvent;
607 EFI_SET_TIMER SetTimer;
608 EFI_WAIT_FOR_EVENT WaitForEvent;
609 EFI_SIGNAL_EVENT SignalEvent;
610 EFI_CLOSE_EVENT CloseEvent;
611 EFI_CHECK_EVENT CheckEvent;
613 /* Protocol handler functions */
615 EFI_INSTALL_PROTOCOL_INTERFACE InstallProtocolInterface;
616 EFI_REINSTALL_PROTOCOL_INTERFACE ReinstallProtocolInterface;
617 EFI_UNINSTALL_PROTOCOL_INTERFACE UninstallProtocolInterface;
618 EFI_HANDLE_PROTOCOL HandleProtocol;
619 EFI_HANDLE_PROTOCOL PCHandleProtocol;
620 EFI_REGISTER_PROTOCOL_NOTIFY RegisterProtocolNotify;
621 EFI_LOCATE_HANDLE LocateHandle;
622 EFI_LOCATE_DEVICE_PATH LocateDevicePath;
623 EFI_INSTALL_CONFIGURATION_TABLE InstallConfigurationTable;
625 /* Image functions */
627 EFI_IMAGE_LOAD LoadImage;
628 EFI_IMAGE_START StartImage;
630 EFI_IMAGE_UNLOAD UnloadImage;
631 EFI_EXIT_BOOT_SERVICES ExitBootServices;
635 EFI_GET_NEXT_MONOTONIC_COUNT GetNextMonotonicCount;
637 EFI_SET_WATCHDOG_TIMER SetWatchdogTimer;
643 * EFI Configuration Table and GUID definitions
646 #define MPS_TABLE_GUID \
647 { 0xeb9d2d2f, 0x2d88, 0x11d3, { 0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d } }
649 #define ACPI_TABLE_GUID \
650 { 0xeb9d2d30, 0x2d88, 0x11d3, { 0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d } }
652 #define ACPI_20_TABLE_GUID \
653 { 0x8868e871, 0xe4f1, 0x11d3, { 0xbc, 0x22, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 } }
655 #define SMBIOS_TABLE_GUID \
656 { 0xeb9d2d31, 0x2d88, 0x11d3, { 0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d } }
658 #define SAL_SYSTEM_TABLE_GUID \
659 { 0xeb9d2d32, 0x2d88, 0x11d3, { 0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d } }
661 /* DIG64 Headless Console & Debug Port Table. */
662 #define HCDP_TABLE_GUID \
663 {0xf951938d,0x620b,0x42ef,{0x82,0x79,0xa8,0x4b,0x79,0x61,0x78,0x98}}
665 typedef struct _EFI_CONFIGURATION_TABLE {
668 } EFI_CONFIGURATION_TABLE;
678 #define EFI_SYSTEM_TABLE_SIGNATURE 0x5453595320494249
679 #define EFI_SYSTEM_TABLE_REVISION (EFI_SPECIFICATION_MAJOR_REVISION<<16) | (EFI_SPECIFICATION_MINOR_REVISION)
681 typedef struct _EFI_SYSTEM_TABLE {
682 EFI_TABLE_HEADER Hdr;
684 CHAR16 *FirmwareVendor;
685 UINT32 FirmwareRevision;
687 EFI_HANDLE ConsoleInHandle;
688 SIMPLE_INPUT_INTERFACE *ConIn;
690 EFI_HANDLE ConsoleOutHandle;
691 SIMPLE_TEXT_OUTPUT_INTERFACE *ConOut;
693 EFI_HANDLE StandardErrorHandle;
694 SIMPLE_TEXT_OUTPUT_INTERFACE *StdErr;
696 EFI_RUNTIME_SERVICES *RuntimeServices;
697 EFI_BOOT_SERVICES *BootServices;
699 UINTN NumberOfTableEntries;
700 EFI_CONFIGURATION_TABLE *ConfigurationTable;