Chameleon

Chameleon Svn Source Tree

Root/trunk/i386/libsaio/efi.h

1/*
2 * Copyright (c) 2005 Apple Computer, Inc. All rights reserved.
3 *
4 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
5 *
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. The rights granted to you under the License
10 * may not be used to create, or enable the creation or redistribution of,
11 * unlawful or unlicensed copies of an Apple operating system, or to
12 * circumvent, violate, or enable the circumvention or violation of, any
13 * terms of an Apple operating system software license agreement.
14 *
15 * Please obtain a copy of the License at
16 * http://www.opensource.apple.com/apsl/ and read it before using this file.
17 *
18 * The Original Code and all software distributed under the License are
19 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
20 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
21 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
22 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
23 * Please see the License for the specific language governing rights and
24 * limitations under the License.
25 *
26 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
27 */
28
29#ifndef _PEXPERT_I386_EFI_H
30#define _PEXPERT_I386_EFI_H
31
32#include <stdint.h>
33
34typedef uint8_t EFI_UINT8;
35typedef uint16_t EFI_UINT16;
36typedef uint32_t EFI_UINT32;
37typedef uint64_t EFI_UINT64;
38
39typedef uint32_t EFI_UINTN; /* natural size for firmware, not kernel */
40
41typedef int8_t EFI_INT8;
42typedef int16_t EFI_INT16;
43typedef int32_t EFI_INT32;
44typedef int64_t EFI_INT64;
45
46typedef int8_t EFI_CHAR8;
47typedef int16_t EFI_CHAR16;
48typedef int32_t EFI_CHAR32;
49typedef int64_t EFI_CHAR64;
50
51typedef uint32_t EFI_STATUS;
52typedef uint8_t EFI_BOOLEAN;
53typedef void VOID;
54
55typedef uint32_t EFI_PTR32;
56typedef uint32_t EFI_HANDLE32;
57
58typedef uint64_t EFI_PTR64;
59typedef uint64_t EFI_HANDLE64;
60/*
61
62Portions Copyright 2004, Intel Corporation
63All rights reserved. This program and the accompanying materials
64are licensed and made available under the terms and conditions of the BSD License
65which accompanies this distribution. The full text of the license may be found at
66 http://opensource.org/licenses/bsd-license.php
67
68THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
69WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
70
71*/
72
73
74// Modifiers for EFI Runtime and Boot Services
75
76#define EFI_RUNTIMESERVICE
77#define EFIAPI
78#define IN
79#define OUT
80#define OPTIONAL
81
82#define EFI_MAX_BIT 0x80000000
83
84// Set the upper bit to indicate EFI Error.
85#define EFIERR(a) (EFI_MAX_BIT | (a))
86
87#define EFIWARN(a) (a)
88#define EFI_ERROR(a) (((INTN) (a)) < 0)
89
90#define EFI_SUCCESS 0
91#define EFI_LOAD_ERROR EFIERR (1)
92#define EFI_INVALID_PARAMETER EFIERR (2)
93#define EFI_UNSUPPORTED EFIERR (3)
94#define EFI_BAD_BUFFER_SIZE EFIERR (4)
95#define EFI_BUFFER_TOO_SMALL EFIERR (5)
96#define EFI_NOT_READY EFIERR (6)
97#define EFI_DEVICE_ERROR EFIERR (7)
98#define EFI_WRITE_PROTECTED EFIERR (8)
99#define EFI_OUT_OF_RESOURCES EFIERR (9)
100#define EFI_VOLUME_CORRUPTED EFIERR (10)
101#define EFI_VOLUME_FULL EFIERR (11)
102#define EFI_NO_MEDIA EFIERR (12)
103#define EFI_MEDIA_CHANGED EFIERR (13)
104#define EFI_NOT_FOUND EFIERR (14)
105#define EFI_ACCESS_DENIED EFIERR (15)
106#define EFI_NO_RESPONSE EFIERR (16)
107#define EFI_NO_MAPPING EFIERR (17)
108#define EFI_TIMEOUT EFIERR (18)
109#define EFI_NOT_STARTED EFIERR (19)
110#define EFI_ALREADY_STARTED EFIERR (20)
111#define EFI_ABORTED EFIERR (21)
112#define EFI_ICMP_ERROR EFIERR (22)
113#define EFI_TFTP_ERROR EFIERR (23)
114#define EFI_PROTOCOL_ERROR EFIERR (24)
115#define EFI_INCOMPATIBLE_VERSION EFIERR (25)
116#define EFI_SECURITY_VIOLATION EFIERR (26)
117#define EFI_CRC_ERROR EFIERR (27)
118#define EFI_END_OF_MEDIA EFIERR (28)
119#define EFI_END_OF_FILE EFIERR (31)
120#define EFI_INVALID_LANGUAGE EFIERR (32)
121#define EFI_COMPROMISED_DATA EFIERR (33)
122
123#define EFI_WARN_UNKNOWN_GLYPH EFIWARN (1)
124#define EFI_WARN_DELETE_FAILURE EFIWARN (2)
125#define EFI_WARN_WRITE_FAILURE EFIWARN (3)
126#define EFI_WARN_BUFFER_TOO_SMALL EFIWARN (4)
127#define EFI_WARN_STALE_DATA EFIWARN (5)
128
129//
130// EFI Specification Revision information
131//
132#define EFI_SPECIFICATION_MAJOR_REVISION 1
133#define EFI_SPECIFICATION_MINOR_REVISION 10
134
135typedef struct {
136 EFI_UINT32 Data1;
137 EFI_UINT16 Data2;
138 EFI_UINT16 Data3;
139 EFI_UINT8 Data4[8];
140} EFI_GUID;
141
142#define APPLE_VENDOR_GUID \
143 {0xAC39C713, 0x7E50, 0x423D, {0x88, 0x9D, 0x27, 0x8F, 0xCC, 0x34, 0x22, 0xB6} }
144
145#define EFI_GLOBAL_VARIABLE_GUID \
146 {0x8BE4DF61, 0x93CA, 0x11D2, {0xAA, 0x0D, 0x00, 0xE0, 0x98, 0x03, 0x2B, 0x8C} }
147
148typedef union {
149 EFI_GUID Guid;
150 EFI_UINT8 Raw[16];
151} EFI_GUID_UNION;
152
153//
154// EFI Time Abstraction:
155// Year: 2000 - 20XX
156// Month: 1 - 12
157// Day: 1 - 31
158// Hour: 0 - 23
159// Minute: 0 - 59
160// Second: 0 - 59
161// Nanosecond: 0 - 999,999,999
162// TimeZone: -1440 to 1440 or 2047
163//
164typedef struct {
165EFI_UINT16 Year;
166EFI_UINT8 Month;
167EFI_UINT8 Day;
168EFI_UINT8 Hour;
169EFI_UINT8 Minute;
170EFI_UINT8 Second;
171EFI_UINT8 Pad1;
172EFI_UINT32 Nanosecond;
173EFI_INT16 TimeZone;
174EFI_UINT8 Daylight;
175EFI_UINT8 Pad2;
176} EFI_TIME;
177
178
179// Bit definitions for EFI_TIME.Daylight
180
181#define EFI_TIME_ADJUST_DAYLIGHT 0x01
182#define EFI_TIME_IN_DAYLIGHT 0x02
183
184
185// Value definition for EFI_TIME.TimeZone
186
187#define EFI_UNSPECIFIED_TIMEZONE 0x07FF
188
189typedef enum {
190EfiReservedMemoryType,// 0
191EfiLoaderCode,
192EfiLoaderData,
193EfiBootServicesCode,
194EfiBootServicesData,
195EfiRuntimeServicesCode,
196EfiRuntimeServicesData,
197EfiConventionalMemory,
198EfiUnusableMemory,
199EfiACPIReclaimMemory,
200EfiACPIMemoryNVS,
201EfiMemoryMappedIO,
202EfiMemoryMappedIOPortSpace,
203EfiPalCode,
204EfiMaxMemoryType// 14
205} EFI_MEMORY_TYPE;
206
207typedef struct {
208EFI_UINT64Signature;
209EFI_UINT32Revision;
210EFI_UINT32HeaderSize;
211EFI_UINT32CRC32;
212EFI_UINT32Reserved;
213} __attribute__((aligned(8))) EFI_TABLE_HEADER;
214
215// possible caching types for the memory range
216#define EFI_MEMORY_UC0x0000000000000001ULL/* uncached */
217#define EFI_MEMORY_WC0x0000000000000002ULL/* write-coalescing */
218#define EFI_MEMORY_WT0x0000000000000004ULL/* write-through */
219#define EFI_MEMORY_WB0x0000000000000008ULL/* write-back */
220#define EFI_MEMORY_UCE0x0000000000000010ULL/* uncached, exported */
221
222// physical memory protection on range
223
224#define EFI_MEMORY_WP 0x0000000000001000ULL
225#define EFI_MEMORY_RP 0x0000000000002000ULL
226#define EFI_MEMORY_XP 0x0000000000004000ULL
227
228
229// range requires a runtime mapping
230
231#define EFI_MEMORY_RUNTIME 0x8000000000000000ULL
232#define EFI_MEMORY_KERN_RESERVED (1ULL << 59)
233typedef EFI_UINT64 EFI_PHYSICAL_ADDRESS;
234typedef EFI_UINT64 EFI_VIRTUAL_ADDRESS;
235
236#define EFI_MEMORY_DESCRIPTOR_VERSION 1
237typedef struct {
238EFI_UINT32 Type;
239EFI_UINT32 Pad;
240EFI_PHYSICAL_ADDRESS PhysicalStart;
241EFI_VIRTUAL_ADDRESS VirtualStart;
242EFI_UINT64 NumberOfPages;
243EFI_UINT64 Attribute;
244} __attribute__((aligned(8))) EFI_MEMORY_DESCRIPTOR;
245
246
247typedef
248EFI_RUNTIMESERVICE
249EFI_STATUS
250(EFIAPI *EFI_SET_VIRTUAL_ADDRESS_MAP) (
251 IN EFI_UINTN MemoryMapSize,
252 IN EFI_UINTN DescriptorSize,
253 IN EFI_UINT32 DescriptorVersion,
254 IN EFI_MEMORY_DESCRIPTOR * VirtualMap
255 ) __attribute__((regparm(0)));
256
257typedef
258EFI_RUNTIMESERVICE
259EFI_STATUS
260(EFIAPI *EFI_CONVERT_POINTER) (
261 IN EFI_UINTN DebugDisposition,
262 IN OUT VOID **Address
263 ) __attribute__((regparm(0)));
264
265
266// Variable attributes
267
268#define EFI_VARIABLE_NON_VOLATILE 0x00000001
269#define EFI_VARIABLE_BOOTSERVICE_ACCESS 0x00000002
270#define EFI_VARIABLE_RUNTIME_ACCESS 0x00000004
271#define EFI_VARIABLE_READ_ONLY 0x00000008
272
273typedef
274EFI_RUNTIMESERVICE
275EFI_STATUS
276(EFIAPI *EFI_GET_VARIABLE) (
277 IN EFI_CHAR16 * VariableName,
278 IN EFI_GUID * VendorGuid,
279 OUT EFI_UINT32 * Attributes OPTIONAL,
280 IN OUT EFI_UINTN * DataSize,
281 OUT VOID * Data
282 ) __attribute__((regparm(0)));
283
284typedef
285EFI_RUNTIMESERVICE
286EFI_STATUS
287(EFIAPI *EFI_GET_NEXT_VARIABLE_NAME) (
288 IN OUT EFI_UINTN * VariableNameSize,
289 IN OUT EFI_CHAR16 * VariableName,
290 IN OUT EFI_GUID * VendorGuid
291 ) __attribute__((regparm(0)));
292
293typedef
294EFI_RUNTIMESERVICE
295EFI_STATUS
296(EFIAPI *EFI_SET_VARIABLE) (
297 IN EFI_CHAR16 * VariableName,
298 IN EFI_GUID * VendorGuid,
299 IN EFI_UINT32 Attributes,
300 IN EFI_UINTN DataSize,
301 IN VOID * Data
302 ) __attribute__((regparm(0)));
303
304
305// EFI Time
306
307typedef struct {
308EFI_UINT32 Resolution;
309EFI_UINT32 Accuracy;
310EFI_BOOLEAN SetsToZero;
311} __attribute__((aligned(4))) EFI_TIME_CAPABILITIES;
312
313typedef
314EFI_RUNTIMESERVICE
315EFI_STATUS
316(EFIAPI *EFI_GET_TIME) (
317 OUT EFI_TIME * Time,
318 OUT EFI_TIME_CAPABILITIES * Capabilities OPTIONAL
319 ) __attribute__((regparm(0)));
320
321typedef
322EFI_RUNTIMESERVICE
323EFI_STATUS
324(EFIAPI *EFI_SET_TIME) (
325 IN EFI_TIME * Time
326 ) __attribute__((regparm(0)));
327
328typedef
329EFI_RUNTIMESERVICE
330EFI_STATUS
331(EFIAPI *EFI_GET_WAKEUP_TIME) (
332 OUT EFI_BOOLEAN * Enabled,
333 OUT EFI_BOOLEAN * Pending,
334 OUT EFI_TIME * Time
335 ) __attribute__((regparm(0)));
336
337typedef
338EFI_RUNTIMESERVICE
339EFI_STATUS
340(EFIAPI *EFI_SET_WAKEUP_TIME) (
341 IN EFI_BOOLEAN Enable,
342 IN EFI_TIME * Time OPTIONAL
343 ) __attribute((regparm(0)));
344
345typedef enum {
346 EfiResetCold,
347 EfiResetWarm,
348 EfiResetShutdown,
349
350#ifdef TIANO_EXTENSION_FLAG
351 EfiResetUpdate
352#endif
353
354} EFI_RESET_TYPE;
355
356typedef
357EFI_RUNTIMESERVICE
358VOID
359(EFIAPI *EFI_RESET_SYSTEM) (
360 IN EFI_RESET_TYPE ResetType,
361 IN EFI_STATUS ResetStatus,
362 IN EFI_UINTN DataSize,
363 IN EFI_CHAR16 * ResetData OPTIONAL
364 ) __attribute__((regparm(0)));
365
366typedef
367EFI_RUNTIMESERVICE
368EFI_STATUS
369(EFIAPI *EFI_GET_NEXT_HIGH_MONO_COUNT) (
370 OUT EFI_UINT32 * HighCount
371 ) __attribute__((regparm(0)));
372
373// Definition of Status Code extended data header
374
375// HeaderSize The size of the architecture. This is specified to enable the future expansion
376
377// Size The size of the data in bytes. This does not include the size of the header structure.
378
379// Type A GUID defining the type of the data
380
381#ifdef TIANO_EXTENSION_FLAG
382
383typedef
384EFI_RUNTIMESERVICE
385EFI_STATUS
386(EFIAPI *EFI_REPORT_STATUS_CODE) (
387 IN EFI_STATUS_CODE_TYPE Type,
388 IN EFI_STATUS_CODE_VALUE Value,
389 IN EFI_UINT32 Instance,
390 IN EFI_GUID * CallerId OPTIONAL,
391 IN EFI_STATUS_CODE_DATA * Data OPTIONAL
392 ) __attribute__((regparm(0)));
393
394#endif
395//
396// EFI Runtime Services Table
397//
398#define EFI_RUNTIME_SERVICES_SIGNATURE 0x56524553544e5552ULL
399#define EFI_RUNTIME_SERVICES_REVISION ((EFI_SPECIFICATION_MAJOR_REVISION << 16) | (EFI_SPECIFICATION_MINOR_REVISION))
400
401typedef struct {
402EFI_TABLE_HEADERHdr;
403
404// Time Services
405EFI_PTR32GetTime;
406EFI_PTR32SetTime;
407EFI_PTR32GetWakeupTime;
408EFI_PTR32SetWakeupTime;
409
410// Virtual Memory Services
411
412EFI_PTR32 SetVirtualAddressMap;
413EFI_PTR32 ConvertPointer;
414
415
416// Variable Services
417EFI_PTR32 GetVariable;
418EFI_PTR32 GetNextVariableName;
419EFI_PTR32 SetVariable;
420
421// Miscellaneous Services
422EFI_PTR32 GetNextHighMonotonicCount;
423EFI_PTR32 ResetSystem;
424
425#ifdef TIANO_EXTENSION_FLAG
426
427// ////////////////////////////////////////////////////
428// Extended EFI Services
429//////////////////////////////////////////////////////
430
431EFI_PTR32 ReportStatusCode;
432#endif
433
434} __attribute__((aligned(8))) EFI_RUNTIME_SERVICES_32;
435
436typedef struct {
437EFI_TABLE_HEADER Hdr;
438
439
440// Time services
441
442EFI_PTR64 GetTime;
443EFI_PTR64 SetTime;
444EFI_PTR64 GetWakeupTime;
445EFI_PTR64 SetWakeupTime;
446
447// Virtual memory services
448
449EFI_PTR64 SetVirtualAddressMap;
450EFI_PTR64 ConvertPointer;
451
452// Variable services
453
454EFI_PTR64 GetVariable;
455EFI_PTR64 GetNextVariableName;
456EFI_PTR64 SetVariable;
457
458// Misc
459
460EFI_PTR64 GetNextHighMonotonicCount;
461EFI_PTR64 ResetSystem;
462
463#ifdef TIANO_EXTENSION_FLAG
464
465// ////////////////////////////////////////////////////
466// Extended EFI Services
467//////////////////////////////////////////////////////
468
469EFI_PTR64 ReportStatusCode;
470#endif
471
472} __attribute__((aligned(8))) EFI_RUNTIME_SERVICES_64;
473
474//
475// EFI Configuration Table
476//
477typedef struct {
478EFI_GUID VendorGuid;
479EFI_PTR32 VendorTable;
480} EFI_CONFIGURATION_TABLE_32;
481
482typedef struct {
483EFI_GUID VendorGuid;
484EFI_PTR64 VendorTable;
485} __attribute__((aligned(8))) EFI_CONFIGURATION_TABLE_64;
486
487
488// EFI System Table
489
490#define EFI_SYSTEM_TABLE_SIGNATURE 0x5453595320494249ULL
491#define EFI_SYSTEM_TABLE_REVISION ((EFI_SPECIFICATION_MAJOR_REVISION << 16) | (EFI_SPECIFICATION_MINOR_REVISION))
492#define EFI_2_00_SYSTEM_TABLE_REVISION ((2 << 16) | 00)
493#define EFI_1_02_SYSTEM_TABLE_REVISION ((1 << 16) | 02)
494#define EFI_1_10_SYSTEM_TABLE_REVISION ((1 << 16) | 10)
495
496typedef struct EFI_SYSTEM_TABLE_32 {
497EFI_TABLE_HEADER Hdr;
498
499EFI_PTR32 FirmwareVendor;
500EFI_UINT32 FirmwareRevision;
501
502EFI_HANDLE32 ConsoleInHandle;
503EFI_PTR32 ConIn;
504
505EFI_HANDLE32 ConsoleOutHandle;
506EFI_PTR32 ConOut;
507
508EFI_HANDLE32 StandardErrorHandle;
509EFI_PTR32 StdErr;
510
511EFI_PTR32 RuntimeServices;
512EFI_PTR32 BootServices;
513
514EFI_UINT32 NumberOfTableEntries;
515EFI_PTR32 ConfigurationTable;
516
517} __attribute__((aligned(8))) EFI_SYSTEM_TABLE_32;
518
519typedef struct EFI_SYSTEM_TABLE_64 {
520EFI_TABLE_HEADER Hdr;
521
522EFI_PTR64 FirmwareVendor;
523EFI_UINT32 FirmwareRevision;
524
525EFI_UINT32 __pad;
526EFI_HANDLE64 ConsoleInHandle;
527EFI_PTR64 ConIn;
528
529EFI_HANDLE64 ConsoleOutHandle;
530EFI_PTR64 ConOut;
531
532EFI_HANDLE64 StandardErrorHandle;
533EFI_PTR64 StdErr;
534
535EFI_PTR64 RuntimeServices;
536EFI_PTR64 BootServices;
537
538EFI_UINT64 NumberOfTableEntries;
539EFI_PTR64 ConfigurationTable;
540} __attribute__((aligned(8))) EFI_SYSTEM_TABLE_64;
541
542#endif /* _PEXPERT_I386_EFI_H */
543

Archive Download this file

Revision: 2634