efiapi.h revision 1.4 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
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 #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
136 typedef
137 VOID
138 (EFIAPI *EFI_EVENT_NOTIFY) (
139 IN EFI_EVENT Event,
140 IN VOID *Context
141 );
142
143 typedef
144 EFI_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
153 typedef enum {
154 TimerCancel,
155 TimerPeriodic,
156 TimerRelative,
157 TimerTypeMax
158 } EFI_TIMER_DELAY;
159
160 typedef
161 EFI_STATUS
162 (EFIAPI *EFI_SET_TIMER) (
163 IN EFI_EVENT Event,
164 IN EFI_TIMER_DELAY Type,
165 IN UINT64 TriggerTime
166 );
167
168 typedef
169 EFI_STATUS
170 (EFIAPI *EFI_SIGNAL_EVENT) (
171 IN EFI_EVENT Event
172 );
173
174 typedef
175 EFI_STATUS
176 (EFIAPI *EFI_WAIT_FOR_EVENT) (
177 IN UINTN NumberOfEvents,
178 IN EFI_EVENT *Event,
179 OUT UINTN *Index
180 );
181
182 typedef
183 EFI_STATUS
184 (EFIAPI *EFI_CLOSE_EVENT) (
185 IN EFI_EVENT Event
186 );
187
188 typedef
189 EFI_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
206 typedef
207 EFI_TPL
208 (EFIAPI *EFI_RAISE_TPL) (
209 IN EFI_TPL NewTpl
210 );
211
212 typedef
213 VOID
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
238 typedef
239 EFI_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
248 typedef
249 EFI_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
257 typedef
258 EFI_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
272 typedef 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
279 typedef
280 EFI_STATUS
281 (EFIAPI *EFI_GET_TIME) (
282 OUT EFI_TIME *Time,
283 OUT EFI_TIME_CAPABILITIES *Capabilities OPTIONAL
284 );
285
286 typedef
287 EFI_STATUS
288 (EFIAPI *EFI_SET_TIME) (
289 IN EFI_TIME *Time
290 );
291
292 typedef
293 EFI_STATUS
294 (EFIAPI *EFI_GET_WAKEUP_TIME) (
295 OUT BOOLEAN *Enabled,
296 OUT BOOLEAN *Pending,
297 OUT EFI_TIME *Time
298 );
299
300 typedef
301 EFI_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
361 typedef
362 EFI_STATUS
363 (EFIAPI *EFI_IMAGE_ENTRY_POINT) (
364 IN EFI_HANDLE ImageHandle,
365 IN struct _EFI_SYSTEM_TABLE *SystemTable
366 );
367
368 typedef
369 EFI_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
379 typedef
380 EFI_STATUS
381 (EFIAPI *EFI_IMAGE_START) (
382 IN EFI_HANDLE ImageHandle,
383 OUT UINTN *ExitDataSize,
384 OUT CHAR16 **ExitData OPTIONAL
385 );
386
387 typedef
388 EFI_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
402 typedef 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
428 typedef
429 EFI_STATUS
430 (EFIAPI *EFI_EXIT_BOOT_SERVICES) (
431 IN EFI_HANDLE ImageHandle,
432 IN UINTN MapKey
433 );
434
435 //
436 // Misc
437 //
438
439
440 typedef
441 EFI_STATUS
442 (EFIAPI *EFI_STALL) (
443 IN UINTN Microseconds
444 );
445
446 typedef
447 EFI_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
455 typedef
456 EFI_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
464 typedef
465 EFI_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
479 typedef
480 EFI_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
490 typedef
491 EFI_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
499 typedef struct {
500 EFI_HANDLE AgentHandle;
501 EFI_HANDLE ControllerHandle;
502 UINT32 Attributes;
503 UINT32 OpenCount;
504 } EFI_OPEN_PROTOCOL_INFORMATION_ENTRY;
505
506 typedef
507 EFI_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
515 typedef
516 EFI_STATUS
517 (EFIAPI *EFI_PROTOCOLS_PER_HANDLE) (
518 IN EFI_HANDLE Handle,
519 OUT EFI_GUID ***ProtocolBuffer,
520 OUT UINTN *ProtocolBufferCount
521 );
522
523 typedef enum {
524 AllHandles,
525 ByRegisterNotify,
526 ByProtocol
527 } EFI_LOCATE_SEARCH_TYPE;
528
529 typedef
530 EFI_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
539 typedef
540 EFI_STATUS
541 (EFIAPI *EFI_LOCATE_PROTOCOL) (
542 IN EFI_GUID *Protocol,
543 IN VOID *Registration OPTIONAL,
544 OUT VOID **Interface
545 );
546
547 typedef
548 EFI_STATUS
549 (EFIAPI *EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES) (
550 IN OUT EFI_HANDLE *Handle,
551 ...
552 );
553
554 typedef
555 EFI_STATUS
556 (EFIAPI *EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES) (
557 IN OUT EFI_HANDLE Handle,
558 ...
559 );
560
561 typedef
562 EFI_STATUS
563 (EFIAPI *EFI_CALCULATE_CRC32) (
564 IN VOID *Data,
565 IN UINTN DataSize,
566 OUT UINT32 *Crc32
567 );
568
569 typedef
570 VOID
571 (EFIAPI *EFI_COPY_MEM) (
572 IN VOID *Destination,
573 IN VOID *Source,
574 IN UINTN Length
575 );
576
577 typedef
578 VOID
579 (EFIAPI *EFI_SET_MEM) (
580 IN VOID *Buffer,
581 IN UINTN Size,
582 IN UINT8 Value
583 );
584
585
586 typedef
587 EFI_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
597 typedef enum {
598 EfiResetCold,
599 EfiResetWarm,
600 EfiResetShutdown
601 } EFI_RESET_TYPE;
602
603 typedef
604 EFI_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
612 typedef
613 EFI_STATUS
614 (EFIAPI *EFI_GET_NEXT_MONOTONIC_COUNT) (
615 OUT UINT64 *Count
616 );
617
618 typedef
619 EFI_STATUS
620 (EFIAPI *EFI_GET_NEXT_HIGH_MONO_COUNT) (
621 OUT UINT32 *HighCount
622 );
623
624 typedef struct {
625 UINT64 Length;
626 union {
627 EFI_PHYSICAL_ADDRESS DataBlock;
628 EFI_PHYSICAL_ADDRESS ContinuationPointer;
629 } Union;
630 } EFI_CAPSULE_BLOCK_DESCRIPTOR;
631
632 typedef 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
643 typedef
644 EFI_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
651 typedef
652 EFI_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
660 typedef
661 EFI_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
673 typedef enum {
674 EFI_NATIVE_INTERFACE,
675 EFI_PCODE_INTERFACE
676 } EFI_INTERFACE_TYPE;
677
678 typedef
679 EFI_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
687 typedef
688 EFI_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
696 typedef
697 EFI_STATUS
698 (EFIAPI *EFI_UNINSTALL_PROTOCOL_INTERFACE) (
699 IN EFI_HANDLE Handle,
700 IN EFI_GUID *Protocol,
701 IN VOID *Interface
702 );
703
704 typedef
705 EFI_STATUS
706 (EFIAPI *EFI_HANDLE_PROTOCOL) (
707 IN EFI_HANDLE Handle,
708 IN EFI_GUID *Protocol,
709 OUT VOID **Interface
710 );
711
712 typedef
713 EFI_STATUS
714 (EFIAPI *EFI_REGISTER_PROTOCOL_NOTIFY) (
715 IN EFI_GUID *Protocol,
716 IN EFI_EVENT Event,
717 OUT VOID **Registration
718 );
719
720 typedef
721 EFI_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
730 typedef
731 EFI_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
738 typedef
739 EFI_STATUS
740 (EFIAPI *EFI_INSTALL_CONFIGURATION_TABLE) (
741 IN EFI_GUID *Guid,
742 IN VOID *Table
743 );
744
745 typedef
746 EFI_STATUS
747 (EFIAPI *EFI_RESERVED_SERVICE) (
748 );
749
750 //
751 // Standard EFI table header
752 //
753
754 typedef 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
770 typedef 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
817 typedef 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
947 typedef 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
963 typedef 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