xref: /openbsd-src/sys/stand/efi/include/efiapi.h (revision 9593dc34da13a12012033a17061c846c208061c2)
1060fee10Skettenis /* $FreeBSD: head/sys/boot/efi/include/efiapi.h 278234 2015-02-05 07:19:30Z rpaulo $ */
2060fee10Skettenis #ifndef _EFI_API_H
3060fee10Skettenis #define _EFI_API_H
4060fee10Skettenis 
5060fee10Skettenis /*++
6060fee10Skettenis 
7060fee10Skettenis Copyright (c)  1999 - 2002 Intel Corporation. All rights reserved
8060fee10Skettenis This software and associated documentation (if any) is furnished
9060fee10Skettenis under a license and may only be used or copied in accordance
10060fee10Skettenis with the terms of the license. Except as permitted by such
11060fee10Skettenis license, no part of this software or documentation may be
12060fee10Skettenis reproduced, stored in a retrieval system, or transmitted in any
13060fee10Skettenis form or by any means without the express written consent of
14060fee10Skettenis Intel Corporation.
15060fee10Skettenis 
16060fee10Skettenis Module Name:
17060fee10Skettenis 
18060fee10Skettenis     efiapi.h
19060fee10Skettenis 
20060fee10Skettenis Abstract:
21060fee10Skettenis 
22060fee10Skettenis     Global EFI runtime & boot service interfaces
23060fee10Skettenis 
24060fee10Skettenis 
25060fee10Skettenis 
26060fee10Skettenis 
27060fee10Skettenis Revision History
28060fee10Skettenis 
29060fee10Skettenis --*/
30060fee10Skettenis 
31060fee10Skettenis //
32060fee10Skettenis // EFI Specification Revision
33060fee10Skettenis //
34060fee10Skettenis 
35060fee10Skettenis #define EFI_SPECIFICATION_MAJOR_REVISION 1
36060fee10Skettenis #define EFI_SPECIFICATION_MINOR_REVISION 10
37060fee10Skettenis 
38060fee10Skettenis //
39060fee10Skettenis // Declare forward referenced data structures
40060fee10Skettenis //
41060fee10Skettenis 
42060fee10Skettenis INTERFACE_DECL(_EFI_SYSTEM_TABLE);
43060fee10Skettenis 
44060fee10Skettenis //
45060fee10Skettenis // EFI Memory
46060fee10Skettenis //
47060fee10Skettenis 
48060fee10Skettenis typedef
49060fee10Skettenis EFI_STATUS
50060fee10Skettenis (EFIAPI *EFI_ALLOCATE_PAGES) (
51060fee10Skettenis     IN EFI_ALLOCATE_TYPE            Type,
52060fee10Skettenis     IN EFI_MEMORY_TYPE              MemoryType,
53060fee10Skettenis     IN UINTN                        NoPages,
54060fee10Skettenis     OUT EFI_PHYSICAL_ADDRESS        *Memory
55060fee10Skettenis     );
56060fee10Skettenis 
57060fee10Skettenis typedef
58060fee10Skettenis EFI_STATUS
59060fee10Skettenis (EFIAPI *EFI_FREE_PAGES) (
60060fee10Skettenis     IN EFI_PHYSICAL_ADDRESS         Memory,
61060fee10Skettenis     IN UINTN                        NoPages
62060fee10Skettenis     );
63060fee10Skettenis 
64060fee10Skettenis typedef
65060fee10Skettenis EFI_STATUS
66060fee10Skettenis (EFIAPI *EFI_GET_MEMORY_MAP) (
67060fee10Skettenis     IN OUT UINTN                    *MemoryMapSize,
68060fee10Skettenis     IN OUT EFI_MEMORY_DESCRIPTOR    *MemoryMap,
69060fee10Skettenis     OUT UINTN                       *MapKey,
70060fee10Skettenis     OUT UINTN                       *DescriptorSize,
71060fee10Skettenis     OUT UINT32                      *DescriptorVersion
72060fee10Skettenis     );
73060fee10Skettenis 
74060fee10Skettenis #define NextMemoryDescriptor(Ptr,Size)  ((EFI_MEMORY_DESCRIPTOR *) (((UINT8 *) Ptr) + Size))
75060fee10Skettenis 
76060fee10Skettenis 
77060fee10Skettenis typedef
78060fee10Skettenis EFI_STATUS
79060fee10Skettenis (EFIAPI *EFI_ALLOCATE_POOL) (
80060fee10Skettenis     IN EFI_MEMORY_TYPE              PoolType,
81060fee10Skettenis     IN UINTN                        Size,
82060fee10Skettenis     OUT VOID                        **Buffer
83060fee10Skettenis     );
84060fee10Skettenis 
85060fee10Skettenis typedef
86060fee10Skettenis EFI_STATUS
87060fee10Skettenis (EFIAPI *EFI_FREE_POOL) (
88060fee10Skettenis     IN VOID                         *Buffer
89060fee10Skettenis     );
90060fee10Skettenis 
91060fee10Skettenis typedef
92060fee10Skettenis EFI_STATUS
93060fee10Skettenis (EFIAPI *EFI_SET_VIRTUAL_ADDRESS_MAP) (
94060fee10Skettenis     IN UINTN                        MemoryMapSize,
95060fee10Skettenis     IN UINTN                        DescriptorSize,
96060fee10Skettenis     IN UINT32                       DescriptorVersion,
97060fee10Skettenis     IN EFI_MEMORY_DESCRIPTOR        *VirtualMap
98060fee10Skettenis     );
99060fee10Skettenis 
100060fee10Skettenis 
101060fee10Skettenis #define EFI_OPTIONAL_PTR            0x00000001
102060fee10Skettenis #define EFI_INTERNAL_FNC            0x00000002      // Pointer to internal runtime fnc
103060fee10Skettenis #define EFI_INTERNAL_PTR            0x00000004      // Pointer to internal runtime data
104060fee10Skettenis 
105060fee10Skettenis 
106060fee10Skettenis typedef
107060fee10Skettenis EFI_STATUS
108060fee10Skettenis (EFIAPI *EFI_CONVERT_POINTER) (
109060fee10Skettenis     IN UINTN                        DebugDisposition,
110060fee10Skettenis     IN OUT VOID                     **Address
111060fee10Skettenis     );
112060fee10Skettenis 
113060fee10Skettenis 
114060fee10Skettenis //
115060fee10Skettenis // EFI Events
116060fee10Skettenis //
117060fee10Skettenis 
118060fee10Skettenis 
119060fee10Skettenis 
120060fee10Skettenis #define EVT_TIMER                           0x80000000
121060fee10Skettenis #define EVT_RUNTIME                         0x40000000
122060fee10Skettenis #define EVT_RUNTIME_CONTEXT                 0x20000000
123060fee10Skettenis 
124060fee10Skettenis #define EVT_NOTIFY_WAIT                     0x00000100
125060fee10Skettenis #define EVT_NOTIFY_SIGNAL                   0x00000200
126060fee10Skettenis 
127060fee10Skettenis #define EVT_SIGNAL_EXIT_BOOT_SERVICES       0x00000201
128060fee10Skettenis #define EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE   0x60000202
129060fee10Skettenis 
130060fee10Skettenis #define EVT_EFI_SIGNAL_MASK                 0x000000FF
131060fee10Skettenis #define EVT_EFI_SIGNAL_MAX                  2
132060fee10Skettenis 
133060fee10Skettenis typedef
134060fee10Skettenis VOID
135060fee10Skettenis (EFIAPI *EFI_EVENT_NOTIFY) (
136060fee10Skettenis     IN EFI_EVENT                Event,
137060fee10Skettenis     IN VOID                     *Context
138060fee10Skettenis     );
139060fee10Skettenis 
140060fee10Skettenis typedef
141060fee10Skettenis EFI_STATUS
142060fee10Skettenis (EFIAPI *EFI_CREATE_EVENT) (
143060fee10Skettenis     IN UINT32                       Type,
144060fee10Skettenis     IN EFI_TPL                      NotifyTpl,
145060fee10Skettenis     IN EFI_EVENT_NOTIFY             NotifyFunction,
146060fee10Skettenis     IN VOID                         *NotifyContext,
147060fee10Skettenis     OUT EFI_EVENT                   *Event
148060fee10Skettenis     );
149060fee10Skettenis 
150060fee10Skettenis typedef enum {
151060fee10Skettenis     TimerCancel,
152060fee10Skettenis     TimerPeriodic,
153060fee10Skettenis     TimerRelative,
154060fee10Skettenis     TimerTypeMax
155060fee10Skettenis } EFI_TIMER_DELAY;
156060fee10Skettenis 
157060fee10Skettenis typedef
158060fee10Skettenis EFI_STATUS
159060fee10Skettenis (EFIAPI *EFI_SET_TIMER) (
160060fee10Skettenis     IN EFI_EVENT                Event,
161060fee10Skettenis     IN EFI_TIMER_DELAY          Type,
162060fee10Skettenis     IN UINT64                   TriggerTime
163060fee10Skettenis     );
164060fee10Skettenis 
165060fee10Skettenis typedef
166060fee10Skettenis EFI_STATUS
167060fee10Skettenis (EFIAPI *EFI_SIGNAL_EVENT) (
168060fee10Skettenis     IN EFI_EVENT                Event
169060fee10Skettenis     );
170060fee10Skettenis 
171060fee10Skettenis typedef
172060fee10Skettenis EFI_STATUS
173060fee10Skettenis (EFIAPI *EFI_WAIT_FOR_EVENT) (
174060fee10Skettenis     IN UINTN                    NumberOfEvents,
175060fee10Skettenis     IN EFI_EVENT                *Event,
176060fee10Skettenis     OUT UINTN                   *Index
177060fee10Skettenis     );
178060fee10Skettenis 
179060fee10Skettenis typedef
180060fee10Skettenis EFI_STATUS
181060fee10Skettenis (EFIAPI *EFI_CLOSE_EVENT) (
182060fee10Skettenis     IN EFI_EVENT                Event
183060fee10Skettenis     );
184060fee10Skettenis 
185060fee10Skettenis typedef
186060fee10Skettenis EFI_STATUS
187060fee10Skettenis (EFIAPI *EFI_CHECK_EVENT) (
188060fee10Skettenis     IN EFI_EVENT                Event
189060fee10Skettenis     );
190060fee10Skettenis 
191060fee10Skettenis //
192060fee10Skettenis // Task priority level
193060fee10Skettenis //
194060fee10Skettenis 
195060fee10Skettenis #define TPL_APPLICATION    4
196060fee10Skettenis #define TPL_CALLBACK       8
197060fee10Skettenis #define TPL_NOTIFY        16
198060fee10Skettenis #define TPL_HIGH_LEVEL    31
199060fee10Skettenis 
200060fee10Skettenis typedef
201060fee10Skettenis EFI_TPL
202060fee10Skettenis (EFIAPI *EFI_RAISE_TPL) (
203060fee10Skettenis     IN EFI_TPL      NewTpl
204060fee10Skettenis     );
205060fee10Skettenis 
206060fee10Skettenis typedef
207060fee10Skettenis VOID
208060fee10Skettenis (EFIAPI *EFI_RESTORE_TPL) (
209060fee10Skettenis     IN EFI_TPL      OldTpl
210060fee10Skettenis     );
211060fee10Skettenis 
212060fee10Skettenis 
213060fee10Skettenis //
214*9593dc34Smglocker // EFI platform variables
215060fee10Skettenis //
216060fee10Skettenis 
217060fee10Skettenis #define EFI_GLOBAL_VARIABLE     \
218aa2a8ca5Sjsg     { 0x8BE4DF61, 0x93CA, 0x11d2, { 0xAA, 0x0D, 0x00, 0xE0, 0x98, 0x03, 0x2B, 0x8C } }
219060fee10Skettenis 
220060fee10Skettenis // Variable attributes
221060fee10Skettenis #define EFI_VARIABLE_NON_VOLATILE           0x00000001
222060fee10Skettenis #define EFI_VARIABLE_BOOTSERVICE_ACCESS     0x00000002
223060fee10Skettenis #define EFI_VARIABLE_RUNTIME_ACCESS         0x00000004
224060fee10Skettenis 
225060fee10Skettenis // Variable size limitation
226060fee10Skettenis #define EFI_MAXIMUM_VARIABLE_SIZE           1024
227060fee10Skettenis 
228060fee10Skettenis typedef
229060fee10Skettenis EFI_STATUS
230060fee10Skettenis (EFIAPI *EFI_GET_VARIABLE) (
231060fee10Skettenis     IN CHAR16                       *VariableName,
232060fee10Skettenis     IN EFI_GUID                     *VendorGuid,
233060fee10Skettenis     OUT UINT32                      *Attributes OPTIONAL,
234060fee10Skettenis     IN OUT UINTN                    *DataSize,
235060fee10Skettenis     OUT VOID                        *Data
236060fee10Skettenis     );
237060fee10Skettenis 
238060fee10Skettenis typedef
239060fee10Skettenis EFI_STATUS
240060fee10Skettenis (EFIAPI *EFI_GET_NEXT_VARIABLE_NAME) (
241060fee10Skettenis     IN OUT UINTN                    *VariableNameSize,
242060fee10Skettenis     IN OUT CHAR16                   *VariableName,
243060fee10Skettenis     IN OUT EFI_GUID                 *VendorGuid
244060fee10Skettenis     );
245060fee10Skettenis 
246060fee10Skettenis 
247060fee10Skettenis typedef
248060fee10Skettenis EFI_STATUS
249060fee10Skettenis (EFIAPI *EFI_SET_VARIABLE) (
250060fee10Skettenis     IN CHAR16                       *VariableName,
251060fee10Skettenis     IN EFI_GUID                     *VendorGuid,
252060fee10Skettenis     IN UINT32                       Attributes,
253060fee10Skettenis     IN UINTN                        DataSize,
254060fee10Skettenis     IN VOID                         *Data
255060fee10Skettenis     );
256060fee10Skettenis 
257060fee10Skettenis 
258060fee10Skettenis //
259060fee10Skettenis // EFI Time
260060fee10Skettenis //
261060fee10Skettenis 
262060fee10Skettenis typedef struct {
263060fee10Skettenis         UINT32                      Resolution;     // 1e-6 parts per million
264060fee10Skettenis         UINT32                      Accuracy;       // hertz
265060fee10Skettenis         BOOLEAN                     SetsToZero;     // Set clears sub-second time
266060fee10Skettenis } EFI_TIME_CAPABILITIES;
267060fee10Skettenis 
268060fee10Skettenis 
269060fee10Skettenis typedef
270060fee10Skettenis EFI_STATUS
271060fee10Skettenis (EFIAPI *EFI_GET_TIME) (
272060fee10Skettenis     OUT EFI_TIME                    *Time,
273060fee10Skettenis     OUT EFI_TIME_CAPABILITIES       *Capabilities OPTIONAL
274060fee10Skettenis     );
275060fee10Skettenis 
276060fee10Skettenis typedef
277060fee10Skettenis EFI_STATUS
278060fee10Skettenis (EFIAPI *EFI_SET_TIME) (
279060fee10Skettenis     IN EFI_TIME                     *Time
280060fee10Skettenis     );
281060fee10Skettenis 
282060fee10Skettenis typedef
283060fee10Skettenis EFI_STATUS
284060fee10Skettenis (EFIAPI *EFI_GET_WAKEUP_TIME) (
285060fee10Skettenis     OUT BOOLEAN                     *Enabled,
286060fee10Skettenis     OUT BOOLEAN                     *Pending,
287060fee10Skettenis     OUT EFI_TIME                    *Time
288060fee10Skettenis     );
289060fee10Skettenis 
290060fee10Skettenis typedef
291060fee10Skettenis EFI_STATUS
292060fee10Skettenis (EFIAPI *EFI_SET_WAKEUP_TIME) (
293060fee10Skettenis     IN BOOLEAN                      Enable,
294060fee10Skettenis     IN EFI_TIME                     *Time OPTIONAL
295060fee10Skettenis     );
296060fee10Skettenis 
297060fee10Skettenis 
298060fee10Skettenis //
299060fee10Skettenis // Image functions
300060fee10Skettenis //
301060fee10Skettenis 
302060fee10Skettenis 
303060fee10Skettenis // PE32+ Subsystem type for EFI images
304060fee10Skettenis 
305060fee10Skettenis #if !defined(IMAGE_SUBSYSTEM_EFI_APPLICATION)
306060fee10Skettenis #define IMAGE_SUBSYSTEM_EFI_APPLICATION             10
307060fee10Skettenis #define IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER     11
308060fee10Skettenis #define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER          12
309060fee10Skettenis #endif
310060fee10Skettenis 
311060fee10Skettenis // PE32+ Machine type for EFI images
312060fee10Skettenis 
313060fee10Skettenis #if !defined(EFI_IMAGE_MACHINE_IA32)
314060fee10Skettenis #define EFI_IMAGE_MACHINE_IA32      0x014c
315060fee10Skettenis #endif
316060fee10Skettenis 
317060fee10Skettenis #if !defined(EFI_IMAGE_MACHINE_EBC)
318060fee10Skettenis #define EFI_IMAGE_MACHINE_EBC       0x0EBC
319060fee10Skettenis #endif
320060fee10Skettenis 
321060fee10Skettenis // Image Entry prototype
322060fee10Skettenis 
323060fee10Skettenis typedef
324060fee10Skettenis EFI_STATUS
325060fee10Skettenis (EFIAPI *EFI_IMAGE_ENTRY_POINT) (
326060fee10Skettenis     IN EFI_HANDLE                   ImageHandle,
327060fee10Skettenis     IN struct _EFI_SYSTEM_TABLE     *SystemTable
328060fee10Skettenis     );
329060fee10Skettenis 
330060fee10Skettenis typedef
331060fee10Skettenis EFI_STATUS
332060fee10Skettenis (EFIAPI *EFI_IMAGE_LOAD) (
333060fee10Skettenis     IN BOOLEAN                      BootPolicy,
334060fee10Skettenis     IN EFI_HANDLE                   ParentImageHandle,
335060fee10Skettenis     IN EFI_DEVICE_PATH              *FilePath,
336060fee10Skettenis     IN VOID                         *SourceBuffer   OPTIONAL,
337060fee10Skettenis     IN UINTN                        SourceSize,
338060fee10Skettenis     OUT EFI_HANDLE                  *ImageHandle
339060fee10Skettenis     );
340060fee10Skettenis 
341060fee10Skettenis typedef
342060fee10Skettenis EFI_STATUS
343060fee10Skettenis (EFIAPI *EFI_IMAGE_START) (
344060fee10Skettenis     IN EFI_HANDLE                   ImageHandle,
345060fee10Skettenis     OUT UINTN                       *ExitDataSize,
346060fee10Skettenis     OUT CHAR16                      **ExitData  OPTIONAL
347060fee10Skettenis     );
348060fee10Skettenis 
349060fee10Skettenis typedef
350060fee10Skettenis EFI_STATUS
351060fee10Skettenis (EFIAPI *EFI_EXIT) (
352060fee10Skettenis     IN EFI_HANDLE                   ImageHandle,
353060fee10Skettenis     IN EFI_STATUS                   ExitStatus,
354060fee10Skettenis     IN UINTN                        ExitDataSize,
355060fee10Skettenis     IN CHAR16                       *ExitData OPTIONAL
356060fee10Skettenis     );
357060fee10Skettenis 
358060fee10Skettenis typedef
359060fee10Skettenis EFI_STATUS
360060fee10Skettenis (EFIAPI *EFI_IMAGE_UNLOAD) (
361060fee10Skettenis     IN EFI_HANDLE                   ImageHandle
362060fee10Skettenis     );
363060fee10Skettenis 
364060fee10Skettenis 
365060fee10Skettenis // Image handle
366060fee10Skettenis #define LOADED_IMAGE_PROTOCOL      \
367060fee10Skettenis     { 0x5B1B31A1, 0x9562, 0x11d2, { 0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B } }
368060fee10Skettenis 
369060fee10Skettenis #define EFI_LOADED_IMAGE_INFORMATION_REVISION      0x1000
370060fee10Skettenis typedef struct {
371060fee10Skettenis     UINT32                          Revision;
372060fee10Skettenis     EFI_HANDLE                      ParentHandle;
373060fee10Skettenis     struct _EFI_SYSTEM_TABLE        *SystemTable;
374060fee10Skettenis 
375060fee10Skettenis     // Source location of image
376060fee10Skettenis     EFI_HANDLE                      DeviceHandle;
377060fee10Skettenis     EFI_DEVICE_PATH                 *FilePath;
378060fee10Skettenis     VOID                            *Reserved;
379060fee10Skettenis 
380060fee10Skettenis     // Images load options
381060fee10Skettenis     UINT32                          LoadOptionsSize;
382060fee10Skettenis     VOID                            *LoadOptions;
383060fee10Skettenis 
384060fee10Skettenis     // Location of where image was loaded
385060fee10Skettenis     VOID                            *ImageBase;
386060fee10Skettenis     UINT64                          ImageSize;
387060fee10Skettenis     EFI_MEMORY_TYPE                 ImageCodeType;
388060fee10Skettenis     EFI_MEMORY_TYPE                 ImageDataType;
389060fee10Skettenis 
390060fee10Skettenis     // If the driver image supports a dynamic unload request
391060fee10Skettenis     EFI_IMAGE_UNLOAD                Unload;
392060fee10Skettenis 
393060fee10Skettenis } EFI_LOADED_IMAGE;
394060fee10Skettenis 
395060fee10Skettenis 
396060fee10Skettenis typedef
397060fee10Skettenis EFI_STATUS
398060fee10Skettenis (EFIAPI *EFI_EXIT_BOOT_SERVICES) (
399060fee10Skettenis     IN EFI_HANDLE                   ImageHandle,
400060fee10Skettenis     IN UINTN                        MapKey
401060fee10Skettenis     );
402060fee10Skettenis 
403060fee10Skettenis //
404060fee10Skettenis // Misc
405060fee10Skettenis //
406060fee10Skettenis 
407060fee10Skettenis 
408060fee10Skettenis typedef
409060fee10Skettenis EFI_STATUS
410060fee10Skettenis (EFIAPI *EFI_STALL) (
411060fee10Skettenis     IN UINTN                    Microseconds
412060fee10Skettenis     );
413060fee10Skettenis 
414060fee10Skettenis typedef
415060fee10Skettenis EFI_STATUS
416060fee10Skettenis (EFIAPI *EFI_SET_WATCHDOG_TIMER) (
417060fee10Skettenis     IN UINTN                    Timeout,
418060fee10Skettenis     IN UINT64                   WatchdogCode,
419060fee10Skettenis     IN UINTN                    DataSize,
420060fee10Skettenis     IN CHAR16                   *WatchdogData OPTIONAL
421060fee10Skettenis     );
422060fee10Skettenis 
423060fee10Skettenis 
424060fee10Skettenis typedef enum {
425060fee10Skettenis     EfiResetCold,
426060fee10Skettenis     EfiResetWarm,
427060fee10Skettenis     EfiResetShutdown
428060fee10Skettenis } EFI_RESET_TYPE;
429060fee10Skettenis 
430060fee10Skettenis typedef
431060fee10Skettenis VOID
432060fee10Skettenis (EFIAPI *EFI_RESET_SYSTEM) (
433060fee10Skettenis     IN EFI_RESET_TYPE           ResetType,
434060fee10Skettenis     IN EFI_STATUS               ResetStatus,
435060fee10Skettenis     IN UINTN                    DataSize,
436060fee10Skettenis     IN CHAR16                   *ResetData OPTIONAL
437060fee10Skettenis     );
438060fee10Skettenis 
439060fee10Skettenis typedef
440060fee10Skettenis EFI_STATUS
441060fee10Skettenis (EFIAPI *EFI_GET_NEXT_MONOTONIC_COUNT) (
442060fee10Skettenis     OUT UINT64                  *Count
443060fee10Skettenis     );
444060fee10Skettenis 
445060fee10Skettenis typedef
446060fee10Skettenis EFI_STATUS
447060fee10Skettenis (EFIAPI *EFI_GET_NEXT_HIGH_MONO_COUNT) (
448060fee10Skettenis     OUT UINT32                  *HighCount
449060fee10Skettenis     );
450060fee10Skettenis 
451060fee10Skettenis //
452060fee10Skettenis // Protocol handler functions
453060fee10Skettenis //
454060fee10Skettenis 
455060fee10Skettenis typedef enum {
456060fee10Skettenis     EFI_NATIVE_INTERFACE
457060fee10Skettenis } EFI_INTERFACE_TYPE;
458060fee10Skettenis 
459060fee10Skettenis typedef
460060fee10Skettenis EFI_STATUS
461060fee10Skettenis (EFIAPI *EFI_INSTALL_PROTOCOL_INTERFACE) (
462060fee10Skettenis     IN OUT EFI_HANDLE           *Handle,
463060fee10Skettenis     IN EFI_GUID                 *Protocol,
464060fee10Skettenis     IN EFI_INTERFACE_TYPE       InterfaceType,
465060fee10Skettenis     IN VOID                     *Interface
466060fee10Skettenis     );
467060fee10Skettenis 
468060fee10Skettenis typedef
469060fee10Skettenis EFI_STATUS
470060fee10Skettenis (EFIAPI *EFI_REINSTALL_PROTOCOL_INTERFACE) (
471060fee10Skettenis     IN EFI_HANDLE               Handle,
472060fee10Skettenis     IN EFI_GUID                 *Protocol,
473060fee10Skettenis     IN VOID                     *OldInterface,
474060fee10Skettenis     IN VOID                     *NewInterface
475060fee10Skettenis     );
476060fee10Skettenis 
477060fee10Skettenis typedef
478060fee10Skettenis EFI_STATUS
479060fee10Skettenis (EFIAPI *EFI_UNINSTALL_PROTOCOL_INTERFACE) (
480060fee10Skettenis     IN EFI_HANDLE               Handle,
481060fee10Skettenis     IN EFI_GUID                 *Protocol,
482060fee10Skettenis     IN VOID                     *Interface
483060fee10Skettenis     );
484060fee10Skettenis 
485060fee10Skettenis typedef
486060fee10Skettenis EFI_STATUS
487060fee10Skettenis (EFIAPI *EFI_HANDLE_PROTOCOL) (
488060fee10Skettenis     IN EFI_HANDLE               Handle,
489060fee10Skettenis     IN EFI_GUID                 *Protocol,
490060fee10Skettenis     OUT VOID                    **Interface
491060fee10Skettenis     );
492060fee10Skettenis 
493060fee10Skettenis typedef
494060fee10Skettenis EFI_STATUS
495060fee10Skettenis (EFIAPI *EFI_REGISTER_PROTOCOL_NOTIFY) (
496060fee10Skettenis     IN EFI_GUID                 *Protocol,
497060fee10Skettenis     IN EFI_EVENT                Event,
498060fee10Skettenis     OUT VOID                    **Registration
499060fee10Skettenis     );
500060fee10Skettenis 
501060fee10Skettenis typedef enum {
502060fee10Skettenis     AllHandles,
503060fee10Skettenis     ByRegisterNotify,
504060fee10Skettenis     ByProtocol
505060fee10Skettenis } EFI_LOCATE_SEARCH_TYPE;
506060fee10Skettenis 
507060fee10Skettenis typedef
508060fee10Skettenis EFI_STATUS
509060fee10Skettenis (EFIAPI *EFI_LOCATE_HANDLE) (
510060fee10Skettenis     IN EFI_LOCATE_SEARCH_TYPE   SearchType,
511060fee10Skettenis     IN EFI_GUID                 *Protocol OPTIONAL,
512060fee10Skettenis     IN VOID                     *SearchKey OPTIONAL,
513060fee10Skettenis     IN OUT UINTN                *BufferSize,
514060fee10Skettenis     OUT EFI_HANDLE              *Buffer
515060fee10Skettenis     );
516060fee10Skettenis 
517060fee10Skettenis typedef
518060fee10Skettenis EFI_STATUS
519060fee10Skettenis (EFIAPI *EFI_LOCATE_DEVICE_PATH) (
520060fee10Skettenis     IN EFI_GUID                 *Protocol,
521060fee10Skettenis     IN OUT EFI_DEVICE_PATH      **DevicePath,
522060fee10Skettenis     OUT EFI_HANDLE              *Device
523060fee10Skettenis     );
524060fee10Skettenis 
525060fee10Skettenis typedef
526060fee10Skettenis EFI_STATUS
527060fee10Skettenis (EFIAPI *EFI_INSTALL_CONFIGURATION_TABLE) (
528060fee10Skettenis     IN EFI_GUID                 *Guid,
529060fee10Skettenis     IN VOID                     *Table
530060fee10Skettenis     );
531060fee10Skettenis 
532060fee10Skettenis typedef
533060fee10Skettenis EFI_STATUS
534060fee10Skettenis (EFIAPI *EFI_RESERVED_SERVICE) (
535060fee10Skettenis     );
536060fee10Skettenis 
537060fee10Skettenis typedef
538060fee10Skettenis EFI_STATUS
539060fee10Skettenis (EFIAPI *EFI_CONNECT_CONTROLLER) (
540060fee10Skettenis   IN  EFI_HANDLE                    ControllerHandle,
541060fee10Skettenis   IN  EFI_HANDLE                    *DriverImageHandle    OPTIONAL,
542060fee10Skettenis   IN  EFI_DEVICE_PATH               *RemainingDevicePath  OPTIONAL,
543060fee10Skettenis   IN  BOOLEAN                       Recursive
544060fee10Skettenis   );
545060fee10Skettenis 
546060fee10Skettenis typedef
547060fee10Skettenis EFI_STATUS
548060fee10Skettenis (EFIAPI *EFI_DISCONNECT_CONTROLLER)(
549060fee10Skettenis   IN EFI_HANDLE           ControllerHandle,
550060fee10Skettenis   IN EFI_HANDLE           DriverImageHandle, OPTIONAL
551060fee10Skettenis   IN EFI_HANDLE           ChildHandle        OPTIONAL
552060fee10Skettenis   );
553060fee10Skettenis 
554060fee10Skettenis #define EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL	 0x00000001
555060fee10Skettenis #define EFI_OPEN_PROTOCOL_GET_PROTOCOL	       0x00000002
556060fee10Skettenis #define EFI_OPEN_PROTOCOL_TEST_PROTOCOL        0x00000004
557060fee10Skettenis #define EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER  0x00000008
558060fee10Skettenis #define EFI_OPEN_PROTOCOL_BY_DRIVER            0x00000010
559060fee10Skettenis #define EFI_OPEN_PROTOCOL_EXCLUSIVE            0x00000020
560060fee10Skettenis 
561060fee10Skettenis typedef
562060fee10Skettenis EFI_STATUS
563060fee10Skettenis (EFIAPI *EFI_OPEN_PROTOCOL) (
564060fee10Skettenis   IN EFI_HANDLE                 Handle,
565060fee10Skettenis   IN EFI_GUID                   *Protocol,
566060fee10Skettenis   OUT VOID                      **Interface,
567060fee10Skettenis   IN  EFI_HANDLE                ImageHandle,
568060fee10Skettenis   IN  EFI_HANDLE                ControllerHandle, OPTIONAL
569060fee10Skettenis   IN  UINT32                    Attributes
570060fee10Skettenis   );
571060fee10Skettenis 
572060fee10Skettenis typedef
573060fee10Skettenis EFI_STATUS
574060fee10Skettenis (EFIAPI *EFI_CLOSE_PROTOCOL) (
575060fee10Skettenis   IN EFI_HANDLE               Handle,
576060fee10Skettenis   IN EFI_GUID                 *Protocol,
577060fee10Skettenis   IN EFI_HANDLE               ImageHandle,
578060fee10Skettenis   IN EFI_HANDLE               DeviceHandle
579060fee10Skettenis   );
580060fee10Skettenis 
581060fee10Skettenis typedef struct {
582060fee10Skettenis   EFI_HANDLE                  AgentHandle;
583060fee10Skettenis   EFI_HANDLE                  ControllerHandle;
584060fee10Skettenis   UINT32                      Attributes;
585060fee10Skettenis   UINT32                      OpenCount;
586060fee10Skettenis } EFI_OPEN_PROTOCOL_INFORMATION_ENTRY;
587060fee10Skettenis 
588060fee10Skettenis typedef
589060fee10Skettenis EFI_STATUS
590060fee10Skettenis (EFIAPI *EFI_OPEN_PROTOCOL_INFORMATION) (
591060fee10Skettenis   IN  EFI_HANDLE                          UserHandle,
592060fee10Skettenis   IN  EFI_GUID                            *Protocol,
593060fee10Skettenis   IN  EFI_OPEN_PROTOCOL_INFORMATION_ENTRY **EntryBuffer,
594060fee10Skettenis   OUT UINTN                               *EntryCount
595060fee10Skettenis   );
596060fee10Skettenis 
597060fee10Skettenis typedef
598060fee10Skettenis EFI_STATUS
599060fee10Skettenis (EFIAPI *EFI_PROTOCOLS_PER_HANDLE) (
600060fee10Skettenis   IN EFI_HANDLE       UserHandle,
601060fee10Skettenis   OUT EFI_GUID        ***ProtocolBuffer,
602060fee10Skettenis   OUT UINTN           *ProtocolBufferCount
603060fee10Skettenis   );
604060fee10Skettenis 
605060fee10Skettenis typedef
606060fee10Skettenis EFI_STATUS
607060fee10Skettenis (EFIAPI *EFI_LOCATE_HANDLE_BUFFER) (
608060fee10Skettenis   IN EFI_LOCATE_SEARCH_TYPE       SearchType,
609060fee10Skettenis   IN EFI_GUID                     *Protocol OPTIONAL,
610060fee10Skettenis   IN VOID                         *SearchKey OPTIONAL,
611060fee10Skettenis   IN OUT UINTN                    *NumberHandles,
612060fee10Skettenis   OUT EFI_HANDLE                  **Buffer
613060fee10Skettenis   );
614060fee10Skettenis 
615060fee10Skettenis typedef
616060fee10Skettenis EFI_STATUS
617060fee10Skettenis (EFIAPI *EFI_LOCATE_PROTOCOL) (
618060fee10Skettenis   EFI_GUID  *Protocol,
619060fee10Skettenis   VOID      *Registration, OPTIONAL
620060fee10Skettenis   VOID      **Interface
621060fee10Skettenis   );
622060fee10Skettenis 
623060fee10Skettenis typedef
624060fee10Skettenis EFI_STATUS
625060fee10Skettenis (EFIAPI *EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES) (
626060fee10Skettenis   IN OUT EFI_HANDLE           *Handle,
627060fee10Skettenis   ...
628060fee10Skettenis   );
629060fee10Skettenis 
630060fee10Skettenis typedef
631060fee10Skettenis EFI_STATUS
632060fee10Skettenis (EFIAPI *EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES) (
633060fee10Skettenis   IN EFI_HANDLE           Handle,
634060fee10Skettenis   ...
635060fee10Skettenis   );
636060fee10Skettenis 
637060fee10Skettenis typedef
638060fee10Skettenis EFI_STATUS
639060fee10Skettenis (EFIAPI *EFI_CALCULATE_CRC32) (
640060fee10Skettenis   IN  VOID                              *Data,
641060fee10Skettenis   IN  UINTN                             DataSize,
642060fee10Skettenis   OUT UINT32                            *Crc32
643060fee10Skettenis   );
644060fee10Skettenis 
645060fee10Skettenis typedef
646060fee10Skettenis VOID
647060fee10Skettenis (EFIAPI *EFI_COPY_MEM) (
648060fee10Skettenis   IN VOID     *Destination,
649060fee10Skettenis   IN VOID     *Source,
650060fee10Skettenis   IN UINTN    Length
651060fee10Skettenis   );
652060fee10Skettenis 
653060fee10Skettenis typedef
654060fee10Skettenis VOID
655060fee10Skettenis (EFIAPI *EFI_SET_MEM) (
656060fee10Skettenis   IN VOID     *Buffer,
657060fee10Skettenis   IN UINTN    Size,
658060fee10Skettenis   IN UINT8    Value
659060fee10Skettenis   );
660060fee10Skettenis 
661060fee10Skettenis //
662060fee10Skettenis // Standard EFI table header
663060fee10Skettenis //
664060fee10Skettenis 
665060fee10Skettenis typedef struct _EFI_TABLE_HEARDER {
666060fee10Skettenis   UINT64                      Signature;
667060fee10Skettenis   UINT32                      Revision;
668060fee10Skettenis   UINT32                      HeaderSize;
669060fee10Skettenis   UINT32                      CRC32;
670060fee10Skettenis   UINT32                      Reserved;
671060fee10Skettenis } EFI_TABLE_HEADER;
672060fee10Skettenis 
673060fee10Skettenis 
674060fee10Skettenis //
675*9593dc34Smglocker // EFI Runtime Services Table
676060fee10Skettenis //
677060fee10Skettenis 
678060fee10Skettenis #define EFI_RUNTIME_SERVICES_SIGNATURE  0x56524553544e5552
679060fee10Skettenis #define EFI_RUNTIME_SERVICES_REVISION   ((EFI_SPECIFICATION_MAJOR_REVISION<<16) | (EFI_SPECIFICATION_MINOR_REVISION))
680060fee10Skettenis 
681060fee10Skettenis typedef struct  {
682060fee10Skettenis   EFI_TABLE_HEADER                Hdr;
683060fee10Skettenis 
684060fee10Skettenis   //
685060fee10Skettenis   // Time services
686060fee10Skettenis   //
687060fee10Skettenis 
688060fee10Skettenis   EFI_GET_TIME                    GetTime;
689060fee10Skettenis   EFI_SET_TIME                    SetTime;
690060fee10Skettenis   EFI_GET_WAKEUP_TIME             GetWakeupTime;
691060fee10Skettenis   EFI_SET_WAKEUP_TIME             SetWakeupTime;
692060fee10Skettenis 
693060fee10Skettenis   //
694060fee10Skettenis   // Virtual memory services
695060fee10Skettenis   //
696060fee10Skettenis 
697060fee10Skettenis   EFI_SET_VIRTUAL_ADDRESS_MAP     SetVirtualAddressMap;
698060fee10Skettenis   EFI_CONVERT_POINTER             ConvertPointer;
699060fee10Skettenis 
700060fee10Skettenis   //
701060fee10Skettenis   // Variable serviers
702060fee10Skettenis   //
703060fee10Skettenis 
704060fee10Skettenis   EFI_GET_VARIABLE                GetVariable;
705060fee10Skettenis   EFI_GET_NEXT_VARIABLE_NAME      GetNextVariableName;
706060fee10Skettenis   EFI_SET_VARIABLE                SetVariable;
707060fee10Skettenis 
708060fee10Skettenis   //
709060fee10Skettenis   // Misc
710060fee10Skettenis   //
711060fee10Skettenis 
712060fee10Skettenis   EFI_GET_NEXT_HIGH_MONO_COUNT    GetNextHighMonotonicCount;
713060fee10Skettenis   EFI_RESET_SYSTEM                ResetSystem;
714060fee10Skettenis 
715060fee10Skettenis } EFI_RUNTIME_SERVICES;
716060fee10Skettenis 
717060fee10Skettenis 
718060fee10Skettenis //
719060fee10Skettenis // EFI Boot Services Table
720060fee10Skettenis //
721060fee10Skettenis 
722060fee10Skettenis #define EFI_BOOT_SERVICES_SIGNATURE     0x56524553544f4f42
723060fee10Skettenis #define EFI_BOOT_SERVICES_REVISION      ((EFI_SPECIFICATION_MAJOR_REVISION<<16) | (EFI_SPECIFICATION_MINOR_REVISION))
724060fee10Skettenis 
725060fee10Skettenis typedef struct {
726060fee10Skettenis 
727060fee10Skettenis   EFI_TABLE_HEADER                Hdr;
728060fee10Skettenis 
729060fee10Skettenis   //
730060fee10Skettenis   // Task priority functions
731060fee10Skettenis   //
732060fee10Skettenis 
733060fee10Skettenis   EFI_RAISE_TPL                   RaiseTPL;
734060fee10Skettenis   EFI_RESTORE_TPL                 RestoreTPL;
735060fee10Skettenis 
736060fee10Skettenis   //
737060fee10Skettenis   // Memory functions
738060fee10Skettenis   //
739060fee10Skettenis 
740060fee10Skettenis   EFI_ALLOCATE_PAGES              AllocatePages;
741060fee10Skettenis   EFI_FREE_PAGES                  FreePages;
742060fee10Skettenis   EFI_GET_MEMORY_MAP              GetMemoryMap;
743060fee10Skettenis   EFI_ALLOCATE_POOL               AllocatePool;
744060fee10Skettenis   EFI_FREE_POOL                   FreePool;
745060fee10Skettenis 
746060fee10Skettenis   //
747060fee10Skettenis   // Event & timer functions
748060fee10Skettenis   //
749060fee10Skettenis 
750060fee10Skettenis   EFI_CREATE_EVENT                CreateEvent;
751060fee10Skettenis   EFI_SET_TIMER                   SetTimer;
752060fee10Skettenis   EFI_WAIT_FOR_EVENT              WaitForEvent;
753060fee10Skettenis   EFI_SIGNAL_EVENT                SignalEvent;
754060fee10Skettenis   EFI_CLOSE_EVENT                 CloseEvent;
755060fee10Skettenis   EFI_CHECK_EVENT                 CheckEvent;
756060fee10Skettenis 
757060fee10Skettenis   //
758060fee10Skettenis   // Protocol handler functions
759060fee10Skettenis   //
760060fee10Skettenis 
761060fee10Skettenis   EFI_INSTALL_PROTOCOL_INTERFACE  InstallProtocolInterface;
762060fee10Skettenis   EFI_REINSTALL_PROTOCOL_INTERFACE ReinstallProtocolInterface;
763060fee10Skettenis   EFI_UNINSTALL_PROTOCOL_INTERFACE UninstallProtocolInterface;
764060fee10Skettenis   EFI_HANDLE_PROTOCOL             HandleProtocol;
765060fee10Skettenis   VOID                            *Reserved;
766060fee10Skettenis   EFI_REGISTER_PROTOCOL_NOTIFY    RegisterProtocolNotify;
767060fee10Skettenis   EFI_LOCATE_HANDLE               LocateHandle;
768060fee10Skettenis   EFI_LOCATE_DEVICE_PATH          LocateDevicePath;
769060fee10Skettenis   EFI_INSTALL_CONFIGURATION_TABLE InstallConfigurationTable;
770060fee10Skettenis 
771060fee10Skettenis   //
772060fee10Skettenis   // Image functions
773060fee10Skettenis   //
774060fee10Skettenis 
775060fee10Skettenis   EFI_IMAGE_LOAD                  LoadImage;
776060fee10Skettenis   EFI_IMAGE_START                 StartImage;
777060fee10Skettenis   EFI_EXIT                        Exit;
778060fee10Skettenis   EFI_IMAGE_UNLOAD                UnloadImage;
779060fee10Skettenis   EFI_EXIT_BOOT_SERVICES          ExitBootServices;
780060fee10Skettenis 
781060fee10Skettenis   //
782060fee10Skettenis   // Misc functions
783060fee10Skettenis   //
784060fee10Skettenis 
785060fee10Skettenis   EFI_GET_NEXT_MONOTONIC_COUNT    GetNextMonotonicCount;
786060fee10Skettenis   EFI_STALL                       Stall;
787060fee10Skettenis   EFI_SET_WATCHDOG_TIMER          SetWatchdogTimer;
788060fee10Skettenis 
789060fee10Skettenis   //
790060fee10Skettenis   // DriverSupport Services
791060fee10Skettenis   //
792060fee10Skettenis   EFI_CONNECT_CONTROLLER	        ConnectController;
793060fee10Skettenis   EFI_DISCONNECT_CONTROLLER       DisconnectController;
794060fee10Skettenis 
795060fee10Skettenis   //
796060fee10Skettenis   // Open and Close Protocol Services
797060fee10Skettenis   //
798060fee10Skettenis   EFI_OPEN_PROTOCOL               OpenProtocol;
799060fee10Skettenis   EFI_CLOSE_PROTOCOL              CloseProtocol;
800060fee10Skettenis   EFI_OPEN_PROTOCOL_INFORMATION   OpenProtocolInformation;
801060fee10Skettenis 
802060fee10Skettenis   //
803060fee10Skettenis   // Library Services to reduce size of drivers
804060fee10Skettenis   //
805060fee10Skettenis   EFI_PROTOCOLS_PER_HANDLE        ProtocolsPerHandle;
806060fee10Skettenis   EFI_LOCATE_HANDLE_BUFFER        LocateHandleBuffer;
807060fee10Skettenis   EFI_LOCATE_PROTOCOL             LocateProtocol;
808060fee10Skettenis 
809060fee10Skettenis   EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES    InstallMultipleProtocolInterfaces;
810060fee10Skettenis   EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES  UninstallMultipleProtocolInterfaces;
811060fee10Skettenis 
812060fee10Skettenis   //
813060fee10Skettenis   // CRC32 services
814060fee10Skettenis   //
815060fee10Skettenis   EFI_CALCULATE_CRC32             CalculateCrc32;
816060fee10Skettenis 
817060fee10Skettenis   //
818060fee10Skettenis   // Memory Utility Services
819060fee10Skettenis   //
820060fee10Skettenis   EFI_COPY_MEM                    CopyMem;
821060fee10Skettenis   EFI_SET_MEM                     SetMem;
822060fee10Skettenis 
823060fee10Skettenis } EFI_BOOT_SERVICES;
824060fee10Skettenis 
825060fee10Skettenis 
826060fee10Skettenis //
827060fee10Skettenis // EFI Configuration Table and GUID definitions
828060fee10Skettenis //
829060fee10Skettenis 
830060fee10Skettenis #define MPS_TABLE_GUID    \
831060fee10Skettenis   { 0xeb9d2d2f, 0x2d88, 0x11d3,	\
832060fee10Skettenis     { 0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d } }
833060fee10Skettenis 
834060fee10Skettenis #define ACPI_TABLE_GUID    \
835060fee10Skettenis   { 0xeb9d2d30, 0x2d88, 0x11d3,	\
836060fee10Skettenis     { 0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d } }
837060fee10Skettenis 
838060fee10Skettenis #define ACPI_20_TABLE_GUID  \
839060fee10Skettenis   { 0x8868e871, 0xe4f1, 0x11d3,	\
840060fee10Skettenis     { 0xbc, 0x22, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 } }
841060fee10Skettenis 
842060fee10Skettenis #define SMBIOS_TABLE_GUID    \
843060fee10Skettenis   { 0xeb9d2d31, 0x2d88, 0x11d3,	\
844060fee10Skettenis     { 0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d } }
845060fee10Skettenis 
8464befd8f0Spatrick #define SMBIOS3_TABLE_GUID	\
8474befd8f0Spatrick   { 0xf2fd1544, 0x9794, 0x4a2c,	\
8484befd8f0Spatrick     { 0x99, 0x2e, 0xe5, 0xbb, 0xcf, 0x20, 0xe3, 0x94 } }
8494befd8f0Spatrick 
850060fee10Skettenis #define SAL_SYSTEM_TABLE_GUID    \
851060fee10Skettenis   { 0xeb9d2d32, 0x2d88, 0x11d3,	\
852060fee10Skettenis     { 0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d } }
853060fee10Skettenis 
854060fee10Skettenis #define FDT_TABLE_GUID    \
855060fee10Skettenis   { 0xb1b621d5, 0xf19c, 0x41a5,	\
856060fee10Skettenis     { 0x83, 0x0b, 0xd9, 0x15, 0x2c, 0x69, 0xaa, 0xe0 } }
857060fee10Skettenis 
858060fee10Skettenis #define DXE_SERVICES_TABLE_GUID	\
859060fee10Skettenis   { 0x5ad34ba, 0x6f02, 0x4214,	\
860060fee10Skettenis     { 0x95, 0x2e, 0x4d, 0xa0, 0x39, 0x8e, 0x2b, 0xb9 } }
861060fee10Skettenis 
862060fee10Skettenis #define	HOB_LIST_TABLE_GUID	\
863060fee10Skettenis   { 0x7739f24c, 0x93d7, 0x11d4,	\
864060fee10Skettenis     { 0x9a, 0x3a, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d } }
865060fee10Skettenis 
866060fee10Skettenis #define MEMORY_TYPE_INFORMATION_TABLE_GUID \
867060fee10Skettenis   { 0x4c19049f, 0x4137, 0x4dd3,	\
868060fee10Skettenis     { 0x9c, 0x10, 0x8b, 0x97, 0xa8, 0x3f, 0xfd, 0xfa } }
869060fee10Skettenis 
870060fee10Skettenis #define DEBUG_IMAGE_INFO_TABLE_GUID \
871060fee10Skettenis   { 0x49152e77, 0x1ada, 0x4764,	\
872060fee10Skettenis     { 0xb7, 0xa2, 0x7a, 0xfe, 0xfe, 0xd9, 0x5e, 0x8b } }
873060fee10Skettenis 
8748584df4eSkettenis #define EFI_SYSTEM_RESOURCE_TABLE_GUID \
8758584df4eSkettenis   { 0xb122a263, 0x3661, 0x4f68,	\
8768584df4eSkettenis     { 0x99, 0x29, 0x78, 0xf8, 0xb0, 0xd6, 0x21, 0x80 } }
8778584df4eSkettenis 
878060fee10Skettenis typedef struct _EFI_CONFIGURATION_TABLE {
879060fee10Skettenis   EFI_GUID                VendorGuid;
880060fee10Skettenis   VOID                    *VendorTable;
881060fee10Skettenis } EFI_CONFIGURATION_TABLE;
882060fee10Skettenis 
883060fee10Skettenis 
884060fee10Skettenis //
885060fee10Skettenis // EFI System Table
886060fee10Skettenis //
887060fee10Skettenis 
888060fee10Skettenis 
889060fee10Skettenis 
890060fee10Skettenis 
891060fee10Skettenis #define EFI_SYSTEM_TABLE_SIGNATURE      0x5453595320494249
892060fee10Skettenis #define EFI_SYSTEM_TABLE_REVISION      ((EFI_SPECIFICATION_MAJOR_REVISION<<16) | (EFI_SPECIFICATION_MINOR_REVISION))
893060fee10Skettenis #define EFI_1_10_SYSTEM_TABLE_REVISION ((1<<16) | 10)
894060fee10Skettenis #define EFI_1_02_SYSTEM_TABLE_REVISION ((1<<16) | 02)
895060fee10Skettenis 
896060fee10Skettenis typedef struct _EFI_SYSTEM_TABLE {
897060fee10Skettenis   EFI_TABLE_HEADER                Hdr;
898060fee10Skettenis 
899060fee10Skettenis   CHAR16                          *FirmwareVendor;
900060fee10Skettenis   UINT32                          FirmwareRevision;
901060fee10Skettenis 
902060fee10Skettenis   EFI_HANDLE                      ConsoleInHandle;
903060fee10Skettenis   SIMPLE_INPUT_INTERFACE          *ConIn;
904060fee10Skettenis 
905060fee10Skettenis   EFI_HANDLE                      ConsoleOutHandle;
906060fee10Skettenis   SIMPLE_TEXT_OUTPUT_INTERFACE    *ConOut;
907060fee10Skettenis 
908060fee10Skettenis   EFI_HANDLE                      StandardErrorHandle;
909060fee10Skettenis   SIMPLE_TEXT_OUTPUT_INTERFACE    *StdErr;
910060fee10Skettenis 
911060fee10Skettenis   EFI_RUNTIME_SERVICES            *RuntimeServices;
912060fee10Skettenis   EFI_BOOT_SERVICES               *BootServices;
913060fee10Skettenis 
914060fee10Skettenis   UINTN                           NumberOfTableEntries;
915060fee10Skettenis   EFI_CONFIGURATION_TABLE         *ConfigurationTable;
916060fee10Skettenis 
917060fee10Skettenis } EFI_SYSTEM_TABLE;
918060fee10Skettenis 
9198584df4eSkettenis //
9208584df4eSkettenis // EFI System Resource Table
9218584df4eSkettenis //
9228584df4eSkettenis 
9238584df4eSkettenis typedef struct _EFI_SYSTEM_RESOURCE_TABLE {
9248584df4eSkettenis   UINT32	FwResourceCount;
9258584df4eSkettenis   UINT32	FwResourceCountMax;
9268584df4eSkettenis   UINT64	FwResourceVersion;
9278584df4eSkettenis   //EFI_SYSTEM_RESOURCE_ENTRY Entries[];
9288584df4eSkettenis } EFI_SYSTEM_RESOURCE_TABLE;
9298584df4eSkettenis 
9308584df4eSkettenis #define EFI_SYSTEM_RESOURCE_TABLE_FIRMWARE_RESOURCE_VERSION 1
9318584df4eSkettenis 
9328584df4eSkettenis typedef struct _EFI_SYSTEM_RESOURCE_ENTRY {
9338584df4eSkettenis   EFI_GUID      FwClass;
9348584df4eSkettenis   UINT32        FwType;
9358584df4eSkettenis   UINT32        FwVersion;
9368584df4eSkettenis   UINT32        LowestSupportedFwVersion;
9378584df4eSkettenis   UINT32        CapsuleFlags;
9388584df4eSkettenis   UINT32        LastAttemptVersion;
9398584df4eSkettenis   UINT32        LastAttemptStatus;
9408584df4eSkettenis } EFI_SYSTEM_RESOURCE_ENTRY;
9418584df4eSkettenis 
942060fee10Skettenis #endif
943