]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - sys/boot/efi/include/efiapi.h
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / sys / boot / efi / include / efiapi.h
1 /* $FreeBSD$ */
2 #ifndef _EFI_API_H
3 #define _EFI_API_H
4
5 /*++
6
7 Copyright (c)  1999 - 2002 Intel Corporation. All rights reserved
8 This software and associated documentation (if any) is furnished
9 under a license and may only be used or copied in accordance
10 with the terms of the license. Except as permitted by such
11 license, no part of this software or documentation may be
12 reproduced, stored in a retrieval system, or transmitted in any
13 form or by any means without the express written consent of
14 Intel Corporation.
15
16 Module Name:
17
18     efiapi.h
19
20 Abstract:
21
22     Global EFI runtime & boot service interfaces
23
24
25
26
27 Revision History
28
29 --*/
30
31 //
32 // EFI Specification Revision
33 //
34
35 #define EFI_SPECIFICATION_MAJOR_REVISION 1
36 #define EFI_SPECIFICATION_MINOR_REVISION 10
37
38 //
39 // Declare forward referenced data structures
40 //
41
42 INTERFACE_DECL(_EFI_SYSTEM_TABLE);
43
44 //
45 // EFI Memory
46 //
47
48 typedef
49 EFI_STATUS
50 (EFIAPI *EFI_ALLOCATE_PAGES) (
51     IN EFI_ALLOCATE_TYPE            Type,
52     IN EFI_MEMORY_TYPE              MemoryType,
53     IN UINTN                        NoPages,
54     OUT EFI_PHYSICAL_ADDRESS        *Memory
55     );
56
57 typedef
58 EFI_STATUS
59 (EFIAPI *EFI_FREE_PAGES) (
60     IN EFI_PHYSICAL_ADDRESS         Memory,
61     IN UINTN                        NoPages
62     );
63
64 typedef
65 EFI_STATUS
66 (EFIAPI *EFI_GET_MEMORY_MAP) (
67     IN OUT UINTN                    *MemoryMapSize,
68     IN OUT EFI_MEMORY_DESCRIPTOR    *MemoryMap,
69     OUT UINTN                       *MapKey,
70     OUT UINTN                       *DescriptorSize,
71     OUT UINT32                      *DescriptorVersion
72     );
73
74 #define NextMemoryDescriptor(Ptr,Size)  ((EFI_MEMORY_DESCRIPTOR *) (((UINT8 *) Ptr) + Size))
75
76
77 typedef
78 EFI_STATUS
79 (EFIAPI *EFI_ALLOCATE_POOL) (
80     IN EFI_MEMORY_TYPE              PoolType,
81     IN UINTN                        Size,
82     OUT VOID                        **Buffer
83     );
84
85 typedef
86 EFI_STATUS
87 (EFIAPI *EFI_FREE_POOL) (
88     IN VOID                         *Buffer
89     );
90
91 typedef 
92 EFI_STATUS
93 (EFIAPI *EFI_SET_VIRTUAL_ADDRESS_MAP) (
94     IN UINTN                        MemoryMapSize,
95     IN UINTN                        DescriptorSize,
96     IN UINT32                       DescriptorVersion,
97     IN EFI_MEMORY_DESCRIPTOR        *VirtualMap
98     );
99
100
101 #define EFI_OPTIONAL_PTR            0x00000001
102 #define EFI_INTERNAL_FNC            0x00000002      // Pointer to internal runtime fnc
103 #define EFI_INTERNAL_PTR            0x00000004      // Pointer to internal runtime data
104
105
106 typedef 
107 EFI_STATUS
108 (EFIAPI *EFI_CONVERT_POINTER) (
109     IN UINTN                        DebugDisposition,
110     IN OUT VOID                     **Address
111     );
112
113
114 //
115 // EFI Events
116 //
117
118
119
120 #define EVT_TIMER                           0x80000000
121 #define EVT_RUNTIME                         0x40000000
122 #define EVT_RUNTIME_CONTEXT                 0x20000000
123
124 #define EVT_NOTIFY_WAIT                     0x00000100
125 #define EVT_NOTIFY_SIGNAL                   0x00000200
126
127 #define EVT_SIGNAL_EXIT_BOOT_SERVICES       0x00000201
128 #define EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE   0x60000202
129
130 #define EVT_EFI_SIGNAL_MASK                 0x000000FF
131 #define EVT_EFI_SIGNAL_MAX                  2
132
133 typedef
134 VOID
135 (EFIAPI *EFI_EVENT_NOTIFY) (
136     IN EFI_EVENT                Event,
137     IN VOID                     *Context
138     );
139
140 typedef
141 EFI_STATUS
142 (EFIAPI *EFI_CREATE_EVENT) (
143     IN UINT32                       Type,
144     IN EFI_TPL                      NotifyTpl,
145     IN EFI_EVENT_NOTIFY             NotifyFunction,
146     IN VOID                         *NotifyContext,
147     OUT EFI_EVENT                   *Event
148     );
149
150 typedef enum {
151     TimerCancel,
152     TimerPeriodic,
153     TimerRelative,
154     TimerTypeMax
155 } EFI_TIMER_DELAY;
156
157 typedef
158 EFI_STATUS
159 (EFIAPI *EFI_SET_TIMER) (
160     IN EFI_EVENT                Event,
161     IN EFI_TIMER_DELAY          Type,
162     IN UINT64                   TriggerTime
163     );
164
165 typedef
166 EFI_STATUS
167 (EFIAPI *EFI_SIGNAL_EVENT) (
168     IN EFI_EVENT                Event
169     );
170
171 typedef 
172 EFI_STATUS
173 (EFIAPI *EFI_WAIT_FOR_EVENT) (
174     IN UINTN                    NumberOfEvents,
175     IN EFI_EVENT                *Event,
176     OUT UINTN                   *Index
177     );
178
179 typedef
180 EFI_STATUS
181 (EFIAPI *EFI_CLOSE_EVENT) (
182     IN EFI_EVENT                Event
183     );
184
185 typedef
186 EFI_STATUS
187 (EFIAPI *EFI_CHECK_EVENT) (
188     IN EFI_EVENT                Event
189     );
190
191 //
192 // Task priority level
193 //
194
195 #define TPL_APPLICATION    4
196 #define TPL_CALLBACK       8
197 #define TPL_NOTIFY        16 
198 #define TPL_HIGH_LEVEL    31 
199
200 typedef
201 EFI_TPL
202 (EFIAPI *EFI_RAISE_TPL) (
203     IN EFI_TPL      NewTpl
204     );
205
206 typedef
207 VOID
208 (EFIAPI *EFI_RESTORE_TPL) (
209     IN EFI_TPL      OldTpl
210     );
211
212
213 //
214 // EFI platform varibles
215 //
216
217 #define EFI_GLOBAL_VARIABLE     \
218     { 0x8BE4DF61, 0x93CA, 0x11d2, 0xAA, 0x0D, 0x00, 0xE0, 0x98, 0x03, 0x2B, 0x8C }
219
220 // Variable attributes
221 #define EFI_VARIABLE_NON_VOLATILE           0x00000001
222 #define EFI_VARIABLE_BOOTSERVICE_ACCESS     0x00000002
223 #define EFI_VARIABLE_RUNTIME_ACCESS         0x00000004
224
225 // Variable size limitation
226 #define EFI_MAXIMUM_VARIABLE_SIZE           1024
227
228 typedef
229 EFI_STATUS
230 (EFIAPI *EFI_GET_VARIABLE) (
231     IN CHAR16                       *VariableName,
232     IN EFI_GUID                     *VendorGuid,
233     OUT UINT32                      *Attributes OPTIONAL,
234     IN OUT UINTN                    *DataSize,
235     OUT VOID                        *Data
236     );
237
238 typedef
239 EFI_STATUS
240 (EFIAPI *EFI_GET_NEXT_VARIABLE_NAME) (
241     IN OUT UINTN                    *VariableNameSize,
242     IN OUT CHAR16                   *VariableName,
243     IN OUT EFI_GUID                 *VendorGuid
244     );
245
246
247 typedef
248 EFI_STATUS
249 (EFIAPI *EFI_SET_VARIABLE) (
250     IN CHAR16                       *VariableName,
251     IN EFI_GUID                     *VendorGuid,
252     IN UINT32                       Attributes,
253     IN UINTN                        DataSize,
254     IN VOID                         *Data
255     );
256
257
258 //
259 // EFI Time
260 //
261
262 typedef struct {
263         UINT32                      Resolution;     // 1e-6 parts per million
264         UINT32                      Accuracy;       // hertz
265         BOOLEAN                     SetsToZero;     // Set clears sub-second time
266 } EFI_TIME_CAPABILITIES;
267
268
269 typedef
270 EFI_STATUS
271 (EFIAPI *EFI_GET_TIME) (
272     OUT EFI_TIME                    *Time,
273     OUT EFI_TIME_CAPABILITIES       *Capabilities OPTIONAL
274     );
275
276 typedef
277 EFI_STATUS
278 (EFIAPI *EFI_SET_TIME) (
279     IN EFI_TIME                     *Time
280     );
281
282 typedef
283 EFI_STATUS
284 (EFIAPI *EFI_GET_WAKEUP_TIME) (
285     OUT BOOLEAN                     *Enabled,
286     OUT BOOLEAN                     *Pending,
287     OUT EFI_TIME                    *Time
288     );
289
290 typedef
291 EFI_STATUS
292 (EFIAPI *EFI_SET_WAKEUP_TIME) (
293     IN BOOLEAN                      Enable,
294     IN EFI_TIME                     *Time OPTIONAL
295     );
296
297
298 //
299 // Image functions
300 //
301
302
303 // PE32+ Subsystem type for EFI images
304
305 #if !defined(IMAGE_SUBSYSTEM_EFI_APPLICATION)
306 #define IMAGE_SUBSYSTEM_EFI_APPLICATION             10
307 #define IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER     11
308 #define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER          12
309 #endif
310
311 // PE32+ Machine type for EFI images
312
313 #if !defined(EFI_IMAGE_MACHINE_IA32)
314 #define EFI_IMAGE_MACHINE_IA32      0x014c
315 #endif
316
317 #if !defined(EFI_IMAGE_MACHINE_IA64)
318 #define EFI_IMAGE_MACHINE_IA64      0x0200
319 #endif
320
321 #if !defined(EFI_IMAGE_MACHINE_EBC)
322 #define EFI_IMAGE_MACHINE_EBC       0x0EBC
323 #endif
324
325 // Image Entry prototype
326
327 typedef 
328 EFI_STATUS
329 (EFIAPI *EFI_IMAGE_ENTRY_POINT) (
330     IN EFI_HANDLE                   ImageHandle,
331     IN struct _EFI_SYSTEM_TABLE     *SystemTable
332     );
333
334 typedef 
335 EFI_STATUS
336 (EFIAPI *EFI_IMAGE_LOAD) (
337     IN BOOLEAN                      BootPolicy,
338     IN EFI_HANDLE                   ParentImageHandle,
339     IN EFI_DEVICE_PATH              *FilePath,
340     IN VOID                         *SourceBuffer   OPTIONAL,
341     IN UINTN                        SourceSize,
342     OUT EFI_HANDLE                  *ImageHandle
343     );
344
345 typedef 
346 EFI_STATUS
347 (EFIAPI *EFI_IMAGE_START) (
348     IN EFI_HANDLE                   ImageHandle,
349     OUT UINTN                       *ExitDataSize,
350     OUT CHAR16                      **ExitData  OPTIONAL
351     );
352
353 typedef
354 EFI_STATUS
355 (EFIAPI *EFI_EXIT) (
356     IN EFI_HANDLE                   ImageHandle,
357     IN EFI_STATUS                   ExitStatus,
358     IN UINTN                        ExitDataSize,
359     IN CHAR16                       *ExitData OPTIONAL
360     );
361
362 typedef 
363 EFI_STATUS
364 (EFIAPI *EFI_IMAGE_UNLOAD) (
365     IN EFI_HANDLE                   ImageHandle
366     );
367
368
369 // Image handle
370 #define LOADED_IMAGE_PROTOCOL      \
371     { 0x5B1B31A1, 0x9562, 0x11d2, 0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B }
372
373 #define EFI_LOADED_IMAGE_INFORMATION_REVISION      0x1000
374 typedef struct {
375     UINT32                          Revision;
376     EFI_HANDLE                      ParentHandle;
377     struct _EFI_SYSTEM_TABLE        *SystemTable;
378
379     // Source location of image
380     EFI_HANDLE                      DeviceHandle;
381     EFI_DEVICE_PATH                 *FilePath;
382     VOID                            *Reserved;
383
384     // Images load options
385     UINT32                          LoadOptionsSize;
386     VOID                            *LoadOptions;
387
388     // Location of where image was loaded
389     VOID                            *ImageBase;
390     UINT64                          ImageSize;
391     EFI_MEMORY_TYPE                 ImageCodeType;
392     EFI_MEMORY_TYPE                 ImageDataType;
393
394     // If the driver image supports a dynamic unload request
395     EFI_IMAGE_UNLOAD                Unload;
396
397 } EFI_LOADED_IMAGE;
398
399
400 typedef
401 EFI_STATUS
402 (EFIAPI *EFI_EXIT_BOOT_SERVICES) (
403     IN EFI_HANDLE                   ImageHandle,
404     IN UINTN                        MapKey
405     );
406
407 //
408 // Misc
409 //
410
411
412 typedef
413 EFI_STATUS
414 (EFIAPI *EFI_STALL) (
415     IN UINTN                    Microseconds
416     );
417
418 typedef
419 EFI_STATUS
420 (EFIAPI *EFI_SET_WATCHDOG_TIMER) (
421     IN UINTN                    Timeout,
422     IN UINT64                   WatchdogCode,
423     IN UINTN                    DataSize,
424     IN CHAR16                   *WatchdogData OPTIONAL
425     );
426
427
428 typedef enum {
429     EfiResetCold,
430     EfiResetWarm,
431     EfiResetShutdown
432 } EFI_RESET_TYPE;
433
434 typedef
435 VOID
436 (EFIAPI *EFI_RESET_SYSTEM) (
437     IN EFI_RESET_TYPE           ResetType,
438     IN EFI_STATUS               ResetStatus,
439     IN UINTN                    DataSize,
440     IN CHAR16                   *ResetData OPTIONAL
441     );
442
443 typedef
444 EFI_STATUS
445 (EFIAPI *EFI_GET_NEXT_MONOTONIC_COUNT) (
446     OUT UINT64                  *Count
447     );
448
449 typedef
450 EFI_STATUS
451 (EFIAPI *EFI_GET_NEXT_HIGH_MONO_COUNT) (
452     OUT UINT32                  *HighCount
453     );
454
455 //
456 // Protocol handler functions
457 //
458
459 typedef enum {
460     EFI_NATIVE_INTERFACE
461 } EFI_INTERFACE_TYPE;
462
463 typedef
464 EFI_STATUS
465 (EFIAPI *EFI_INSTALL_PROTOCOL_INTERFACE) (
466     IN OUT EFI_HANDLE           *Handle,
467     IN EFI_GUID                 *Protocol,
468     IN EFI_INTERFACE_TYPE       InterfaceType,
469     IN VOID                     *Interface
470     );
471
472 typedef
473 EFI_STATUS
474 (EFIAPI *EFI_REINSTALL_PROTOCOL_INTERFACE) (
475     IN EFI_HANDLE               Handle,
476     IN EFI_GUID                 *Protocol,
477     IN VOID                     *OldInterface,
478     IN VOID                     *NewInterface
479     );
480
481 typedef
482 EFI_STATUS
483 (EFIAPI *EFI_UNINSTALL_PROTOCOL_INTERFACE) (
484     IN EFI_HANDLE               Handle,
485     IN EFI_GUID                 *Protocol,
486     IN VOID                     *Interface
487     );
488
489 typedef
490 EFI_STATUS
491 (EFIAPI *EFI_HANDLE_PROTOCOL) (
492     IN EFI_HANDLE               Handle,
493     IN EFI_GUID                 *Protocol,
494     OUT VOID                    **Interface
495     );
496
497 typedef
498 EFI_STATUS 
499 (EFIAPI *EFI_REGISTER_PROTOCOL_NOTIFY) (
500     IN EFI_GUID                 *Protocol,
501     IN EFI_EVENT                Event,
502     OUT VOID                    **Registration
503     );
504
505 typedef enum {
506     AllHandles,
507     ByRegisterNotify,
508     ByProtocol
509 } EFI_LOCATE_SEARCH_TYPE;
510
511 typedef
512 EFI_STATUS
513 (EFIAPI *EFI_LOCATE_HANDLE) (
514     IN EFI_LOCATE_SEARCH_TYPE   SearchType,
515     IN EFI_GUID                 *Protocol OPTIONAL,
516     IN VOID                     *SearchKey OPTIONAL,
517     IN OUT UINTN                *BufferSize,
518     OUT EFI_HANDLE              *Buffer
519     );
520
521 typedef
522 EFI_STATUS
523 (EFIAPI *EFI_LOCATE_DEVICE_PATH) (
524     IN EFI_GUID                 *Protocol,
525     IN OUT EFI_DEVICE_PATH      **DevicePath,
526     OUT EFI_HANDLE              *Device
527     );
528
529 typedef
530 EFI_STATUS
531 (EFIAPI *EFI_INSTALL_CONFIGURATION_TABLE) (
532     IN EFI_GUID                 *Guid,
533     IN VOID                     *Table
534     );
535
536 typedef
537 EFI_STATUS
538 (EFIAPI *EFI_RESERVED_SERVICE) (
539     );
540
541 typedef
542 EFI_STATUS 
543 (EFIAPI *EFI_CONNECT_CONTROLLER) (
544   IN  EFI_HANDLE                    ControllerHandle,
545   IN  EFI_HANDLE                    *DriverImageHandle    OPTIONAL,
546   IN  EFI_DEVICE_PATH               *RemainingDevicePath  OPTIONAL,
547   IN  BOOLEAN                       Recursive
548   );
549
550 typedef
551 EFI_STATUS 
552 (EFIAPI *EFI_DISCONNECT_CONTROLLER)(
553   IN EFI_HANDLE           ControllerHandle,
554   IN EFI_HANDLE           DriverImageHandle, OPTIONAL
555   IN EFI_HANDLE           ChildHandle        OPTIONAL
556   );    
557
558 #define EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL     0x00000001  
559 #define EFI_OPEN_PROTOCOL_GET_PROTOCOL         0x00000002  
560 #define EFI_OPEN_PROTOCOL_TEST_PROTOCOL        0x00000004  
561 #define EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER  0x00000008  
562 #define EFI_OPEN_PROTOCOL_BY_DRIVER            0x00000010  
563 #define EFI_OPEN_PROTOCOL_EXCLUSIVE            0x00000020  
564
565 typedef
566 EFI_STATUS
567 (EFIAPI *EFI_OPEN_PROTOCOL) (
568   IN EFI_HANDLE                 Handle,
569   IN EFI_GUID                   *Protocol,
570   OUT VOID                      **Interface,
571   IN  EFI_HANDLE                ImageHandle,
572   IN  EFI_HANDLE                ControllerHandle, OPTIONAL
573   IN  UINT32                    Attributes
574   );
575
576 typedef
577 EFI_STATUS
578 (EFIAPI *EFI_CLOSE_PROTOCOL) (
579   IN EFI_HANDLE               Handle,
580   IN EFI_GUID                 *Protocol,
581   IN EFI_HANDLE               ImageHandle,
582   IN EFI_HANDLE               DeviceHandle
583   );
584
585 typedef struct {
586   EFI_HANDLE                  AgentHandle;
587   EFI_HANDLE                  ControllerHandle;
588   UINT32                      Attributes;
589   UINT32                      OpenCount;
590 } EFI_OPEN_PROTOCOL_INFORMATION_ENTRY;
591
592 typedef
593 EFI_STATUS
594 (EFIAPI *EFI_OPEN_PROTOCOL_INFORMATION) (
595   IN  EFI_HANDLE                          UserHandle,
596   IN  EFI_GUID                            *Protocol,
597   IN  EFI_OPEN_PROTOCOL_INFORMATION_ENTRY **EntryBuffer,
598   OUT UINTN                               *EntryCount
599   );
600
601 typedef
602 EFI_STATUS
603 (EFIAPI *EFI_PROTOCOLS_PER_HANDLE) (
604   IN EFI_HANDLE       UserHandle,
605   OUT EFI_GUID        ***ProtocolBuffer,
606   OUT UINTN           *ProtocolBufferCount
607   );
608
609 typedef
610 EFI_STATUS
611 (EFIAPI *EFI_LOCATE_HANDLE_BUFFER) (
612   IN EFI_LOCATE_SEARCH_TYPE       SearchType,
613   IN EFI_GUID                     *Protocol OPTIONAL,
614   IN VOID                         *SearchKey OPTIONAL,
615   IN OUT UINTN                    *NumberHandles,
616   OUT EFI_HANDLE                  **Buffer
617   );
618
619 typedef
620 EFI_STATUS
621 (EFIAPI *EFI_LOCATE_PROTOCOL) (
622   EFI_GUID  *Protocol,
623   VOID      *Registration, OPTIONAL
624   VOID      **Interface
625   );
626
627 typedef
628 EFI_STATUS
629 (EFIAPI *EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES) (
630   IN OUT EFI_HANDLE           *Handle,
631   ...
632   );
633
634 typedef
635 EFI_STATUS
636 (EFIAPI *EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES) (
637   IN EFI_HANDLE           Handle,
638   ...
639   );
640
641 typedef
642 EFI_STATUS
643 (EFIAPI *EFI_CALCULATE_CRC32) (
644   IN  VOID                              *Data,
645   IN  UINTN                             DataSize,
646   OUT UINT32                            *Crc32
647   );
648
649 typedef
650 VOID
651 (EFIAPI *EFI_COPY_MEM) (
652   IN VOID     *Destination,
653   IN VOID     *Source,
654   IN UINTN    Length
655   );
656
657 typedef
658 VOID
659 (EFIAPI *EFI_SET_MEM) (
660   IN VOID     *Buffer,
661   IN UINTN    Size,
662   IN UINT8    Value
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 {
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   VOID                            *Reserved;
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   EFI_CONNECT_CONTROLLER                ConnectController;
797   EFI_DISCONNECT_CONTROLLER       DisconnectController;
798
799   //
800   // Open and Close Protocol Services
801   //
802   EFI_OPEN_PROTOCOL               OpenProtocol;
803   EFI_CLOSE_PROTOCOL              CloseProtocol;
804   EFI_OPEN_PROTOCOL_INFORMATION   OpenProtocolInformation;
805
806   //
807   // Library Services to reduce size of drivers
808   //
809   EFI_PROTOCOLS_PER_HANDLE        ProtocolsPerHandle;
810   EFI_LOCATE_HANDLE_BUFFER        LocateHandleBuffer;
811   EFI_LOCATE_PROTOCOL             LocateProtocol;    
812
813   EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES    InstallMultipleProtocolInterfaces;
814   EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES  UninstallMultipleProtocolInterfaces;
815
816   //
817   // CRC32 services
818   //
819   EFI_CALCULATE_CRC32             CalculateCrc32;
820
821   //
822   // Memory Utility Services
823   //
824   EFI_COPY_MEM                    CopyMem;
825   EFI_SET_MEM                     SetMem;
826
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 #define EFI_1_10_SYSTEM_TABLE_REVISION ((1<<16) | 10)
866 #define EFI_1_02_SYSTEM_TABLE_REVISION ((1<<16) | 02)
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