source: mainline/boot/arch/ia64/loader/gefi/inc/efiapi.h@ 86018c1

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 86018c1 was 7208b6c, checked in by Jakub Vana <jakub.vana@…>, 17 years ago

Basic IA64 boot and kernel suport for real machines

  • Property mode set to 100644
File size: 16.7 KB
RevLine 
[7208b6c]1#ifndef _EFI_API_H
2#define _EFI_API_H
3
4/*++
5
6Copyright (c) 1998 Intel Corporation
7
8Module Name:
9
10 efiapi.h
11
12Abstract:
13
14 Global EFI runtime & boot service interfaces
15
16
17
18
19Revision History
20
21--*/
22
23//
24// EFI Specification Revision
25//
26
27#define EFI_SPECIFICATION_MAJOR_REVISION 1
28#define EFI_SPECIFICATION_MINOR_REVISION 02
29
30//
31// Declare forward referenced data structures
32//
33
34INTERFACE_DECL(_EFI_SYSTEM_TABLE);
35
36//
37// EFI Memory
38//
39
40typedef
41EFI_STATUS
42(EFIAPI *EFI_ALLOCATE_PAGES) (
43 IN EFI_ALLOCATE_TYPE Type,
44 IN EFI_MEMORY_TYPE MemoryType,
45 IN UINTN NoPages,
46 OUT EFI_PHYSICAL_ADDRESS *Memory
47 );
48
49typedef
50EFI_STATUS
51(EFIAPI *EFI_FREE_PAGES) (
52 IN EFI_PHYSICAL_ADDRESS Memory,
53 IN UINTN NoPages
54 );
55
56typedef
57EFI_STATUS
58(EFIAPI *EFI_GET_MEMORY_MAP) (
59 IN OUT UINTN *MemoryMapSize,
60 IN OUT EFI_MEMORY_DESCRIPTOR *MemoryMap,
61 OUT UINTN *MapKey,
62 OUT UINTN *DescriptorSize,
63 OUT UINT32 *DescriptorVersion
64 );
65
66#define NextMemoryDescriptor(Ptr,Size) ((EFI_MEMORY_DESCRIPTOR *) (((UINT8 *) Ptr) + Size))
67
68
69typedef
70EFI_STATUS
71(EFIAPI *EFI_ALLOCATE_POOL) (
72 IN EFI_MEMORY_TYPE PoolType,
73 IN UINTN Size,
74 OUT VOID **Buffer
75 );
76
77typedef
78EFI_STATUS
79(EFIAPI *EFI_FREE_POOL) (
80 IN VOID *Buffer
81 );
82
83typedef
84EFI_STATUS
85(EFIAPI *EFI_SET_VIRTUAL_ADDRESS_MAP) (
86 IN UINTN MemoryMapSize,
87 IN UINTN DescriptorSize,
88 IN UINT32 DescriptorVersion,
89 IN EFI_MEMORY_DESCRIPTOR *VirtualMap
90 );
91
92
93#define EFI_OPTIONAL_PTR 0x00000001
94#define EFI_INTERNAL_FNC 0x00000002 // Pointer to internal runtime fnc
95#define EFI_INTERNAL_PTR 0x00000004 // Pointer to internal runtime data
96
97
98typedef
99EFI_STATUS
100(EFIAPI *EFI_CONVERT_POINTER) (
101 IN UINTN DebugDisposition,
102 IN OUT VOID **Address
103 );
104
105
106//
107// EFI Events
108//
109
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 2
124
125typedef
126VOID
127(EFIAPI *EFI_EVENT_NOTIFY) (
128 IN EFI_EVENT Event,
129 IN VOID *Context
130 );
131
132typedef
133EFI_STATUS
134(EFIAPI *EFI_CREATE_EVENT) (
135 IN UINT32 Type,
136 IN EFI_TPL NotifyTpl,
137 IN EFI_EVENT_NOTIFY NotifyFunction,
138 IN VOID *NotifyContext,
139 OUT EFI_EVENT *Event
140 );
141
142typedef enum {
143 TimerCancel,
144 TimerPeriodic,
145 TimerRelative,
146 TimerTypeMax
147} EFI_TIMER_DELAY;
148
149typedef
150EFI_STATUS
151(EFIAPI *EFI_SET_TIMER) (
152 IN EFI_EVENT Event,
153 IN EFI_TIMER_DELAY Type,
154 IN UINT64 TriggerTime
155 );
156
157typedef
158EFI_STATUS
159(EFIAPI *EFI_SIGNAL_EVENT) (
160 IN EFI_EVENT Event
161 );
162
163typedef
164EFI_STATUS
165(EFIAPI *EFI_WAIT_FOR_EVENT) (
166 IN UINTN NumberOfEvents,
167 IN EFI_EVENT *Event,
168 OUT UINTN *Index
169 );
170
171typedef
172EFI_STATUS
173(EFIAPI *EFI_CLOSE_EVENT) (
174 IN EFI_EVENT Event
175 );
176
177typedef
178EFI_STATUS
179(EFIAPI *EFI_CHECK_EVENT) (
180 IN EFI_EVENT Event
181 );
182
183//
184// Task priority level
185//
186
187#define TPL_APPLICATION 4
188#define TPL_CALLBACK 8
189#define TPL_NOTIFY 16
190#define TPL_HIGH_LEVEL 31
191
192typedef
193EFI_TPL
194(EFIAPI *EFI_RAISE_TPL) (
195 IN EFI_TPL NewTpl
196 );
197
198typedef
199VOID
200(EFIAPI *EFI_RESTORE_TPL) (
201 IN EFI_TPL OldTpl
202 );
203
204
205//
206// EFI platform varibles
207//
208
209#define EFI_GLOBAL_VARIABLE \
210 { 0x8BE4DF61, 0x93CA, 0x11d2, {0xAA, 0x0D, 0x00, 0xE0, 0x98, 0x03, 0x2B, 0x8C} }
211
212// Variable attributes
213#define EFI_VARIABLE_NON_VOLATILE 0x00000001
214#define EFI_VARIABLE_BOOTSERVICE_ACCESS 0x00000002
215#define EFI_VARIABLE_RUNTIME_ACCESS 0x00000004
216
217// Variable size limitation
218#define EFI_MAXIMUM_VARIABLE_SIZE 1024
219
220typedef
221EFI_STATUS
222(EFIAPI *EFI_GET_VARIABLE) (
223 IN CHAR16 *VariableName,
224 IN EFI_GUID *VendorGuid,
225 OUT UINT32 *Attributes OPTIONAL,
226 IN OUT UINTN *DataSize,
227 OUT VOID *Data
228 );
229
230typedef
231EFI_STATUS
232(EFIAPI *EFI_GET_NEXT_VARIABLE_NAME) (
233 IN OUT UINTN *VariableNameSize,
234 IN OUT CHAR16 *VariableName,
235 IN OUT EFI_GUID *VendorGuid
236 );
237
238
239typedef
240EFI_STATUS
241(EFIAPI *EFI_SET_VARIABLE) (
242 IN CHAR16 *VariableName,
243 IN EFI_GUID *VendorGuid,
244 IN UINT32 Attributes,
245 IN UINTN DataSize,
246 IN VOID *Data
247 );
248
249
250//
251// EFI Time
252//
253
254typedef struct {
255 UINT32 Resolution; // 1e-6 parts per million
256 UINT32 Accuracy; // hertz
257 BOOLEAN SetsToZero; // Set clears sub-second time
258} EFI_TIME_CAPABILITIES;
259
260
261typedef
262EFI_STATUS
263(EFIAPI *EFI_GET_TIME) (
264 OUT EFI_TIME *Time,
265 OUT EFI_TIME_CAPABILITIES *Capabilities OPTIONAL
266 );
267
268typedef
269EFI_STATUS
270(EFIAPI *EFI_SET_TIME) (
271 IN EFI_TIME *Time
272 );
273
274typedef
275EFI_STATUS
276(EFIAPI *EFI_GET_WAKEUP_TIME) (
277 OUT BOOLEAN *Enabled,
278 OUT BOOLEAN *Pending,
279 OUT EFI_TIME *Time
280 );
281
282typedef
283EFI_STATUS
284(EFIAPI *EFI_SET_WAKEUP_TIME) (
285 IN BOOLEAN Enable,
286 IN EFI_TIME *Time OPTIONAL
287 );
288
289
290//
291// Image functions
292//
293
294
295// PE32+ Subsystem type for EFI images
296
297#if !defined(IMAGE_SUBSYSTEM_EFI_APPLICATION)
298#define IMAGE_SUBSYSTEM_EFI_APPLICATION 10
299#define IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER 11
300#define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER 12
301#endif
302
303// PE32+ Machine type for EFI images
304
305#if !defined(EFI_IMAGE_MACHINE_IA32)
306#define EFI_IMAGE_MACHINE_IA32 0x014c
307#endif
308
309#if !defined(EFI_IMAGE_MACHINE_IA64)
310#define EFI_IMAGE_MACHINE_IA64 0x0200
311#endif
312
313// Image Entry prototype
314
315typedef
316EFI_STATUS
317(EFIAPI *EFI_IMAGE_ENTRY_POINT) (
318 IN EFI_HANDLE ImageHandle,
319 IN struct _EFI_SYSTEM_TABLE *SystemTable
320 );
321
322typedef
323EFI_STATUS
324(EFIAPI *EFI_IMAGE_LOAD) (
325 IN BOOLEAN BootPolicy,
326 IN EFI_HANDLE ParentImageHandle,
327 IN EFI_DEVICE_PATH *FilePath,
328 IN VOID *SourceBuffer OPTIONAL,
329 IN UINTN SourceSize,
330 OUT EFI_HANDLE *ImageHandle
331 );
332
333typedef
334EFI_STATUS
335(EFIAPI *EFI_IMAGE_START) (
336 IN EFI_HANDLE ImageHandle,
337 OUT UINTN *ExitDataSize,
338 OUT CHAR16 **ExitData OPTIONAL
339 );
340
341typedef
342EFI_STATUS
343(EFIAPI *EFI_EXIT) (
344 IN EFI_HANDLE ImageHandle,
345 IN EFI_STATUS ExitStatus,
346 IN UINTN ExitDataSize,
347 IN CHAR16 *ExitData OPTIONAL
348 );
349
350typedef
351EFI_STATUS
352(EFIAPI *EFI_IMAGE_UNLOAD) (
353 IN EFI_HANDLE ImageHandle
354 );
355
356
357// Image handle
358#define LOADED_IMAGE_PROTOCOL \
359 { 0x5B1B31A1, 0x9562, 0x11d2, {0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B} }
360
361#define EFI_IMAGE_INFORMATION_REVISION 0x1000
362typedef struct {
363 UINT32 Revision;
364 EFI_HANDLE ParentHandle;
365 struct _EFI_SYSTEM_TABLE *SystemTable;
366
367 // Source location of image
368 EFI_HANDLE DeviceHandle;
369 EFI_DEVICE_PATH *FilePath;
370 VOID *Reserved;
371
372 // Images load options
373 UINT32 LoadOptionsSize;
374 VOID *LoadOptions;
375
376 // Location of where image was loaded
377 VOID *ImageBase;
378 UINT64 ImageSize;
379 EFI_MEMORY_TYPE ImageCodeType;
380 EFI_MEMORY_TYPE ImageDataType;
381
382 // If the driver image supports a dynamic unload request
383 EFI_IMAGE_UNLOAD Unload;
384
385} EFI_LOADED_IMAGE;
386
387
388typedef
389EFI_STATUS
390(EFIAPI *EFI_EXIT_BOOT_SERVICES) (
391 IN EFI_HANDLE ImageHandle,
392 IN UINTN MapKey
393 );
394
395//
396// Misc
397//
398
399
400typedef
401EFI_STATUS
402(EFIAPI *EFI_STALL) (
403 IN UINTN Microseconds
404 );
405
406typedef
407EFI_STATUS
408(EFIAPI *EFI_SET_WATCHDOG_TIMER) (
409 IN UINTN Timeout,
410 IN UINT64 WatchdogCode,
411 IN UINTN DataSize,
412 IN CHAR16 *WatchdogData OPTIONAL
413 );
414
415
416typedef enum {
417 EfiResetCold,
418 EfiResetWarm
419} EFI_RESET_TYPE;
420
421typedef
422EFI_STATUS
423(EFIAPI *EFI_RESET_SYSTEM) (
424 IN EFI_RESET_TYPE ResetType,
425 IN EFI_STATUS ResetStatus,
426 IN UINTN DataSize,
427 IN CHAR16 *ResetData OPTIONAL
428 );
429
430typedef
431EFI_STATUS
432(EFIAPI *EFI_GET_NEXT_MONOTONIC_COUNT) (
433 OUT UINT64 *Count
434 );
435
436typedef
437EFI_STATUS
438(EFIAPI *EFI_GET_NEXT_HIGH_MONO_COUNT) (
439 OUT UINT32 *HighCount
440 );
441
442//
443// Protocol handler functions
444//
445
446typedef enum {
447 EFI_NATIVE_INTERFACE,
448 EFI_PCODE_INTERFACE
449} EFI_INTERFACE_TYPE;
450
451typedef
452EFI_STATUS
453(EFIAPI *EFI_INSTALL_PROTOCOL_INTERFACE) (
454 IN OUT EFI_HANDLE *Handle,
455 IN EFI_GUID *Protocol,
456 IN EFI_INTERFACE_TYPE InterfaceType,
457 IN VOID *Interface
458 );
459
460typedef
461EFI_STATUS
462(EFIAPI *EFI_REINSTALL_PROTOCOL_INTERFACE) (
463 IN EFI_HANDLE Handle,
464 IN EFI_GUID *Protocol,
465 IN VOID *OldInterface,
466 IN VOID *NewInterface
467 );
468
469typedef
470EFI_STATUS
471(EFIAPI *EFI_UNINSTALL_PROTOCOL_INTERFACE) (
472 IN EFI_HANDLE Handle,
473 IN EFI_GUID *Protocol,
474 IN VOID *Interface
475 );
476
477typedef
478EFI_STATUS
479(EFIAPI *EFI_HANDLE_PROTOCOL) (
480 IN EFI_HANDLE Handle,
481 IN EFI_GUID *Protocol,
482 OUT VOID **Interface
483 );
484
485typedef
486EFI_STATUS
487(EFIAPI *EFI_REGISTER_PROTOCOL_NOTIFY) (
488 IN EFI_GUID *Protocol,
489 IN EFI_EVENT Event,
490 OUT VOID **Registration
491 );
492
493typedef enum {
494 AllHandles,
495 ByRegisterNotify,
496 ByProtocol
497} EFI_LOCATE_SEARCH_TYPE;
498
499typedef
500EFI_STATUS
501(EFIAPI *EFI_LOCATE_HANDLE) (
502 IN EFI_LOCATE_SEARCH_TYPE SearchType,
503 IN EFI_GUID *Protocol OPTIONAL,
504 IN VOID *SearchKey OPTIONAL,
505 IN OUT UINTN *BufferSize,
506 OUT EFI_HANDLE *Buffer
507 );
508
509typedef
510EFI_STATUS
511(EFIAPI *EFI_LOCATE_DEVICE_PATH) (
512 IN EFI_GUID *Protocol,
513 IN OUT EFI_DEVICE_PATH **DevicePath,
514 OUT EFI_HANDLE *Device
515 );
516
517typedef
518EFI_STATUS
519(EFIAPI *EFI_INSTALL_CONFIGURATION_TABLE) (
520 IN EFI_GUID *Guid,
521 IN VOID *Table
522 );
523
524typedef
525EFI_STATUS
526(EFIAPI *EFI_RESERVED_SERVICE) (
527 );
528
529//
530// Standard EFI table header
531//
532
533typedef struct _EFI_TABLE_HEARDER {
534 UINT64 Signature;
535 UINT32 Revision;
536 UINT32 HeaderSize;
537 UINT32 CRC32;
538 UINT32 Reserved;
539} EFI_TABLE_HEADER;
540
541
542//
543// EFI Runtime Serivces Table
544//
545
546#define EFI_RUNTIME_SERVICES_SIGNATURE 0x56524553544e5552
547#define EFI_RUNTIME_SERVICES_REVISION (EFI_SPECIFICATION_MAJOR_REVISION<<16) | (EFI_SPECIFICATION_MINOR_REVISION)
548
549typedef struct {
550 EFI_TABLE_HEADER Hdr;
551
552 //
553 // Time services
554 //
555
556 EFI_GET_TIME GetTime;
557 EFI_SET_TIME SetTime;
558 EFI_GET_WAKEUP_TIME GetWakeupTime;
559 EFI_SET_WAKEUP_TIME SetWakeupTime;
560
561 //
562 // Virtual memory services
563 //
564
565 EFI_SET_VIRTUAL_ADDRESS_MAP SetVirtualAddressMap;
566 EFI_CONVERT_POINTER ConvertPointer;
567
568 //
569 // Variable serviers
570 //
571
572 EFI_GET_VARIABLE GetVariable;
573 EFI_GET_NEXT_VARIABLE_NAME GetNextVariableName;
574 EFI_SET_VARIABLE SetVariable;
575
576 //
577 // Misc
578 //
579
580 EFI_GET_NEXT_HIGH_MONO_COUNT GetNextHighMonotonicCount;
581 EFI_RESET_SYSTEM ResetSystem;
582
583} EFI_RUNTIME_SERVICES;
584
585
586//
587// EFI Boot Services Table
588//
589
590#define EFI_BOOT_SERVICES_SIGNATURE 0x56524553544f4f42
591#define EFI_BOOT_SERVICES_REVISION (EFI_SPECIFICATION_MAJOR_REVISION<<16) | (EFI_SPECIFICATION_MINOR_REVISION)
592
593typedef struct _EFI_BOOT_SERVICES {
594
595 EFI_TABLE_HEADER Hdr;
596
597 //
598 // Task priority functions
599 //
600
601 EFI_RAISE_TPL RaiseTPL;
602 EFI_RESTORE_TPL RestoreTPL;
603
604 //
605 // Memory functions
606 //
607
608 EFI_ALLOCATE_PAGES AllocatePages;
609 EFI_FREE_PAGES FreePages;
610 EFI_GET_MEMORY_MAP GetMemoryMap;
611 EFI_ALLOCATE_POOL AllocatePool;
612 EFI_FREE_POOL FreePool;
613
614 //
615 // Event & timer functions
616 //
617
618 EFI_CREATE_EVENT CreateEvent;
619 EFI_SET_TIMER SetTimer;
620 EFI_WAIT_FOR_EVENT WaitForEvent;
621 EFI_SIGNAL_EVENT SignalEvent;
622 EFI_CLOSE_EVENT CloseEvent;
623 EFI_CHECK_EVENT CheckEvent;
624
625 //
626 // Protocol handler functions
627 //
628
629 EFI_INSTALL_PROTOCOL_INTERFACE InstallProtocolInterface;
630 EFI_REINSTALL_PROTOCOL_INTERFACE ReinstallProtocolInterface;
631 EFI_UNINSTALL_PROTOCOL_INTERFACE UninstallProtocolInterface;
632 EFI_HANDLE_PROTOCOL HandleProtocol;
633 EFI_HANDLE_PROTOCOL PCHandleProtocol;
634 EFI_REGISTER_PROTOCOL_NOTIFY RegisterProtocolNotify;
635 EFI_LOCATE_HANDLE LocateHandle;
636 EFI_LOCATE_DEVICE_PATH LocateDevicePath;
637 EFI_INSTALL_CONFIGURATION_TABLE InstallConfigurationTable;
638
639 //
640 // Image functions
641 //
642
643 EFI_IMAGE_LOAD LoadImage;
644 EFI_IMAGE_START StartImage;
645 EFI_EXIT Exit;
646 EFI_IMAGE_UNLOAD UnloadImage;
647 EFI_EXIT_BOOT_SERVICES ExitBootServices;
648
649 //
650 // Misc functions
651 //
652
653 EFI_GET_NEXT_MONOTONIC_COUNT GetNextMonotonicCount;
654 EFI_STALL Stall;
655 EFI_SET_WATCHDOG_TIMER SetWatchdogTimer;
656
657} EFI_BOOT_SERVICES;
658
659
660//
661// EFI Configuration Table and GUID definitions
662//
663
664#define MPS_TABLE_GUID \
665 { 0xeb9d2d2f, 0x2d88, 0x11d3, {0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
666
667#define ACPI_TABLE_GUID \
668 { 0xeb9d2d30, 0x2d88, 0x11d3, {0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
669
670#define ACPI_20_TABLE_GUID \
671 { 0x8868e871, 0xe4f1, 0x11d3, {0xbc, 0x22, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81} }
672
673#define SMBIOS_TABLE_GUID \
674 { 0xeb9d2d31, 0x2d88, 0x11d3, {0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
675
676#define SAL_SYSTEM_TABLE_GUID \
677 { 0xeb9d2d32, 0x2d88, 0x11d3, {0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
678
679
680typedef struct _EFI_CONFIGURATION_TABLE {
681 EFI_GUID VendorGuid;
682 VOID *VendorTable;
683} EFI_CONFIGURATION_TABLE;
684
685
686//
687// EFI System Table
688//
689
690
691
692
693#define EFI_SYSTEM_TABLE_SIGNATURE 0x5453595320494249
694#define EFI_SYSTEM_TABLE_REVISION (EFI_SPECIFICATION_MAJOR_REVISION<<16) | (EFI_SPECIFICATION_MINOR_REVISION)
695
696typedef struct _EFI_SYSTEM_TABLE {
697 EFI_TABLE_HEADER Hdr;
698
699 CHAR16 *FirmwareVendor;
700 UINT32 FirmwareRevision;
701
702 EFI_HANDLE ConsoleInHandle;
703 SIMPLE_INPUT_INTERFACE *ConIn;
704
705 EFI_HANDLE ConsoleOutHandle;
706 SIMPLE_TEXT_OUTPUT_INTERFACE *ConOut;
707
708 EFI_HANDLE StandardErrorHandle;
709 SIMPLE_TEXT_OUTPUT_INTERFACE *StdErr;
710
711 EFI_RUNTIME_SERVICES *RuntimeServices;
712 EFI_BOOT_SERVICES *BootServices;
713
714 UINTN NumberOfTableEntries;
715 EFI_CONFIGURATION_TABLE *ConfigurationTable;
716
717} EFI_SYSTEM_TABLE;
718
719#endif
720
Note: See TracBrowser for help on using the repository browser.