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
148#define EFI_SMBIOS_TABLE_GUID \
149 {0xEB9D2D31, 0x2D88, 0x11D3, {0x9A, 0x16, 0x0, 0x90, 0x27, 0x3F, 0xC1, 0x4D} }
150
151// ACPI 1.0 Table GUID in EFI System Table
152#define EFI_ACPI_TABLE_GUID \
153 {0xEB9D2D30, 0x2D88, 0x11D3, {0x9A, 0x16, 0x0, 0x90, 0x27, 0x3F, 0xC1, 0x4D} }
154
155// ACPI 2.0 Table GUID in EFI System Table
156#define EFI_ACPI_20_TABLE_GUID \
157 {0x8868E871, 0xE4f1, 0x11D3, {0xBC, 0x22, 0x0, 0x80, 0xC7, 0x3C, 0x88, 0x81} }
158
159typedef union {
160 EFI_GUID Guid;
161 EFI_UINT8 Raw[16];
162} EFI_GUID_UNION;
163
164//
165// EFI Time Abstraction:
166// Year: 2000 - 20XX
167// Month: 1 - 12
168// Day: 1 - 31
169// Hour: 0 - 23
170// Minute: 0 - 59
171// Second: 0 - 59
172// Nanosecond: 0 - 999,999,999
173// TimeZone: -1440 to 1440 or 2047
174//
175typedef struct {
176EFI_UINT16 Year;
177EFI_UINT8 Month;
178EFI_UINT8 Day;
179EFI_UINT8 Hour;
180EFI_UINT8 Minute;
181EFI_UINT8 Second;
182EFI_UINT8 Pad1;
183EFI_UINT32 Nanosecond;
184EFI_INT16 TimeZone;
185EFI_UINT8 Daylight;
186EFI_UINT8 Pad2;
187} EFI_TIME;
188
189
190// Bit definitions for EFI_TIME.Daylight
191
192#define EFI_TIME_ADJUST_DAYLIGHT 0x01
193#define EFI_TIME_IN_DAYLIGHT 0x02
194
195
196// Value definition for EFI_TIME.TimeZone
197
198#define EFI_UNSPECIFIED_TIMEZONE 0x07FF
199
200typedef enum {
201EfiReservedMemoryType,// 0
202EfiLoaderCode,
203EfiLoaderData,
204EfiBootServicesCode,
205EfiBootServicesData,
206EfiRuntimeServicesCode,
207EfiRuntimeServicesData,
208EfiConventionalMemory,
209EfiUnusableMemory,
210EfiACPIReclaimMemory,
211EfiACPIMemoryNVS,
212EfiMemoryMappedIO,
213EfiMemoryMappedIOPortSpace,
214EfiPalCode,
215EfiMaxMemoryType// 14
216} EFI_MEMORY_TYPE;
217
218typedef struct {
219EFI_UINT64Signature;
220EFI_UINT32Revision;
221EFI_UINT32HeaderSize;
222EFI_UINT32CRC32;
223EFI_UINT32Reserved;
224} __attribute__((aligned(8))) EFI_TABLE_HEADER;
225
226// possible caching types for the memory range
227#define EFI_MEMORY_UC0x0000000000000001ULL/* uncached */
228#define EFI_MEMORY_WC0x0000000000000002ULL/* write-coalescing */
229#define EFI_MEMORY_WT0x0000000000000004ULL/* write-through */
230#define EFI_MEMORY_WB0x0000000000000008ULL/* write-back */
231#define EFI_MEMORY_UCE0x0000000000000010ULL/* uncached, exported */
232
233// physical memory protection on range
234
235#define EFI_MEMORY_WP0x0000000000001000ULL/* write-protect */
236#define EFI_MEMORY_RP0x0000000000002000ULL/* read-protect */
237#define EFI_MEMORY_XP0x0000000000004000ULL/* execute-protect */
238
239// range requires a runtime mapping
240
241#define EFI_MEMORY_RUNTIME 0x8000000000000000ULL
242#define EFI_MEMORY_KERN_RESERVED (1ULL << 59)
243typedef EFI_UINT64 EFI_PHYSICAL_ADDRESS;
244typedef EFI_UINT64 EFI_VIRTUAL_ADDRESS;
245
246#define EFI_MEMORY_DESCRIPTOR_VERSION 1
247typedef struct {
248EFI_UINT32 Type;
249EFI_UINT32 Pad;
250EFI_PHYSICAL_ADDRESS PhysicalStart;
251EFI_VIRTUAL_ADDRESS VirtualStart;
252EFI_UINT64 NumberOfPages;
253EFI_UINT64 Attribute;
254} __attribute__((aligned(8))) EFI_MEMORY_DESCRIPTOR;
255
256
257typedef
258EFI_RUNTIMESERVICE
259EFI_STATUS
260(EFIAPI *EFI_SET_VIRTUAL_ADDRESS_MAP) (
261 IN EFI_UINTN MemoryMapSize,
262 IN EFI_UINTN DescriptorSize,
263 IN EFI_UINT32 DescriptorVersion,
264 IN EFI_MEMORY_DESCRIPTOR * VirtualMap
265 ) __attribute__((regparm(0)));
266
267typedef
268EFI_RUNTIMESERVICE
269EFI_STATUS
270(EFIAPI *EFI_CONVERT_POINTER) (
271 IN EFI_UINTN DebugDisposition,
272 IN OUT VOID **Address
273 ) __attribute__((regparm(0)));
274
275
276// Variable attributes
277
278#define EFI_VARIABLE_NON_VOLATILE 0x00000001
279#define EFI_VARIABLE_BOOTSERVICE_ACCESS 0x00000002
280#define EFI_VARIABLE_RUNTIME_ACCESS 0x00000004
281#define EFI_VARIABLE_READ_ONLY 0x00000008
282
283typedef
284EFI_RUNTIMESERVICE
285EFI_STATUS
286(EFIAPI *EFI_GET_VARIABLE) (
287 IN EFI_CHAR16 * VariableName,
288 IN EFI_GUID * VendorGuid,
289 OUT EFI_UINT32 * Attributes OPTIONAL,
290 IN OUT EFI_UINTN * DataSize,
291 OUT VOID * Data
292 ) __attribute__((regparm(0)));
293
294typedef
295EFI_RUNTIMESERVICE
296EFI_STATUS
297(EFIAPI *EFI_GET_NEXT_VARIABLE_NAME) (
298 IN OUT EFI_UINTN * VariableNameSize,
299 IN OUT EFI_CHAR16 * VariableName,
300 IN OUT EFI_GUID * VendorGuid
301 ) __attribute__((regparm(0)));
302
303typedef
304EFI_RUNTIMESERVICE
305EFI_STATUS
306(EFIAPI *EFI_SET_VARIABLE) (
307 IN EFI_CHAR16 * VariableName,
308 IN EFI_GUID * VendorGuid,
309 IN EFI_UINT32 Attributes,
310 IN EFI_UINTN DataSize,
311 IN VOID * Data
312 ) __attribute__((regparm(0)));
313
314
315// EFI Time
316
317typedef struct {
318EFI_UINT32 Resolution;
319EFI_UINT32 Accuracy;
320EFI_BOOLEAN SetsToZero;
321} __attribute__((aligned(4))) EFI_TIME_CAPABILITIES;
322
323typedef
324EFI_RUNTIMESERVICE
325EFI_STATUS
326(EFIAPI *EFI_GET_TIME) (
327 OUT EFI_TIME * Time,
328 OUT EFI_TIME_CAPABILITIES * Capabilities OPTIONAL
329 ) __attribute__((regparm(0)));
330
331typedef
332EFI_RUNTIMESERVICE
333EFI_STATUS
334(EFIAPI *EFI_SET_TIME) (
335 IN EFI_TIME * Time
336 ) __attribute__((regparm(0)));
337
338typedef
339EFI_RUNTIMESERVICE
340EFI_STATUS
341(EFIAPI *EFI_GET_WAKEUP_TIME) (
342 OUT EFI_BOOLEAN * Enabled,
343 OUT EFI_BOOLEAN * Pending,
344 OUT EFI_TIME * Time
345 ) __attribute__((regparm(0)));
346
347typedef
348EFI_RUNTIMESERVICE
349EFI_STATUS
350(EFIAPI *EFI_SET_WAKEUP_TIME) (
351 IN EFI_BOOLEAN Enable,
352 IN EFI_TIME * Time OPTIONAL
353 ) __attribute((regparm(0)));
354
355typedef enum {
356 EfiResetCold,
357 EfiResetWarm,
358 EfiResetShutdown,
359
360#ifdef TIANO_EXTENSION_FLAG
361 EfiResetUpdate
362#endif
363
364} EFI_RESET_TYPE;
365
366typedef
367EFI_RUNTIMESERVICE
368VOID
369(EFIAPI *EFI_RESET_SYSTEM) (
370 IN EFI_RESET_TYPE ResetType,
371 IN EFI_STATUS ResetStatus,
372 IN EFI_UINTN DataSize,
373 IN EFI_CHAR16 * ResetData OPTIONAL
374 ) __attribute__((regparm(0)));
375
376typedef
377EFI_RUNTIMESERVICE
378EFI_STATUS
379(EFIAPI *EFI_GET_NEXT_HIGH_MONO_COUNT) (
380 OUT EFI_UINT32 * HighCount
381 ) __attribute__((regparm(0)));
382
383// Definition of Status Code extended data header
384
385// HeaderSize The size of the architecture. This is specified to enable the future expansion
386
387// Size The size of the data in bytes. This does not include the size of the header structure.
388
389// Type A GUID defining the type of the data
390
391#ifdef TIANO_EXTENSION_FLAG
392
393typedef
394EFI_RUNTIMESERVICE
395EFI_STATUS
396(EFIAPI *EFI_REPORT_STATUS_CODE) (
397 IN EFI_STATUS_CODE_TYPE Type,
398 IN EFI_STATUS_CODE_VALUE Value,
399 IN EFI_UINT32 Instance,
400 IN EFI_GUID * CallerId OPTIONAL,
401 IN EFI_STATUS_CODE_DATA * Data OPTIONAL
402 ) __attribute__((regparm(0)));
403
404#endif
405//
406// EFI Runtime Services Table
407//
408#define EFI_RUNTIME_SERVICES_SIGNATURE 0x56524553544e5552ULL
409#define EFI_RUNTIME_SERVICES_REVISION ((EFI_SPECIFICATION_MAJOR_REVISION << 16) | (EFI_SPECIFICATION_MINOR_REVISION))
410
411typedef struct {
412EFI_TABLE_HEADERHdr;
413
414// Time Services
415EFI_PTR32GetTime;
416EFI_PTR32SetTime;
417EFI_PTR32GetWakeupTime;
418EFI_PTR32SetWakeupTime;
419
420// Virtual Memory Services
421
422EFI_PTR32 SetVirtualAddressMap;
423EFI_PTR32 ConvertPointer;
424
425
426// Variable Services
427EFI_PTR32 GetVariable;
428EFI_PTR32 GetNextVariableName;
429EFI_PTR32 SetVariable;
430
431// Miscellaneous Services
432EFI_PTR32 GetNextHighMonotonicCount;
433EFI_PTR32 ResetSystem;
434
435#ifdef TIANO_EXTENSION_FLAG
436
437// ////////////////////////////////////////////////////
438// Extended EFI Services
439//////////////////////////////////////////////////////
440
441EFI_PTR32 ReportStatusCode;
442#endif
443
444} __attribute__((aligned(8))) EFI_RUNTIME_SERVICES_32;
445
446typedef struct {
447EFI_TABLE_HEADER Hdr;
448
449
450// Time services
451
452EFI_PTR64 GetTime;
453EFI_PTR64 SetTime;
454EFI_PTR64 GetWakeupTime;
455EFI_PTR64 SetWakeupTime;
456
457// Virtual memory services
458
459EFI_PTR64 SetVirtualAddressMap;
460EFI_PTR64 ConvertPointer;
461
462// Variable services
463
464EFI_PTR64 GetVariable;
465EFI_PTR64 GetNextVariableName;
466EFI_PTR64 SetVariable;
467
468// Misc
469
470EFI_PTR64 GetNextHighMonotonicCount;
471EFI_PTR64 ResetSystem;
472
473#ifdef TIANO_EXTENSION_FLAG
474
475// ////////////////////////////////////////////////////
476// Extended EFI Services
477//////////////////////////////////////////////////////
478
479EFI_PTR64 ReportStatusCode;
480#endif
481
482} __attribute__((aligned(8))) EFI_RUNTIME_SERVICES_64;
483
484//
485// EFI Configuration Table
486//
487typedef struct {
488EFI_GUID VendorGuid;
489EFI_PTR32 VendorTable;
490} EFI_CONFIGURATION_TABLE_32;
491
492typedef struct {
493EFI_GUID VendorGuid;
494EFI_PTR64 VendorTable;
495} __attribute__((aligned(8))) EFI_CONFIGURATION_TABLE_64;
496
497
498// EFI System Table
499
500#define EFI_SYSTEM_TABLE_SIGNATURE 0x5453595320494249ULL
501#define EFI_SYSTEM_TABLE_REVISION ((EFI_SPECIFICATION_MAJOR_REVISION << 16) | (EFI_SPECIFICATION_MINOR_REVISION))
502#define EFI_2_30_SYSTEM_TABLE_REVISION ((2 << 16) | (30))
503#define EFI_2_20_SYSTEM_TABLE_REVISION ((2 << 16) | (20))
504#define EFI_2_10_SYSTEM_TABLE_REVISION ((2 << 16) | (10))
505#define EFI_2_00_SYSTEM_TABLE_REVISION ((2 << 16) | (00))
506#define EFI_1_10_SYSTEM_TABLE_REVISION ((1 << 16) | (10))
507#define EFI_1_02_SYSTEM_TABLE_REVISION ((1 << 16) | (02))
508
509typedef struct EFI_SYSTEM_TABLE_32 {
510EFI_TABLE_HEADER Hdr;
511
512EFI_PTR32 FirmwareVendor;
513EFI_UINT32 FirmwareRevision;
514
515EFI_HANDLE32 ConsoleInHandle;
516EFI_PTR32 ConIn;
517
518EFI_HANDLE32 ConsoleOutHandle;
519EFI_PTR32 ConOut;
520
521EFI_HANDLE32 StandardErrorHandle;
522EFI_PTR32 StdErr;
523
524EFI_PTR32 RuntimeServices;
525EFI_PTR32 BootServices;
526
527EFI_UINT32 NumberOfTableEntries;
528EFI_PTR32 ConfigurationTable;
529
530} __attribute__((aligned(8))) EFI_SYSTEM_TABLE_32;
531
532typedef struct EFI_SYSTEM_TABLE_64 {
533EFI_TABLE_HEADER Hdr;
534
535EFI_PTR64 FirmwareVendor;
536EFI_UINT32 FirmwareRevision;
537
538EFI_UINT32 __pad;
539EFI_HANDLE64 ConsoleInHandle;
540EFI_PTR64 ConIn;
541
542EFI_HANDLE64 ConsoleOutHandle;
543EFI_PTR64 ConOut;
544
545EFI_HANDLE64 StandardErrorHandle;
546EFI_PTR64 StdErr;
547
548EFI_PTR64 RuntimeServices;
549EFI_PTR64 BootServices;
550
551EFI_UINT64 NumberOfTableEntries;
552EFI_PTR64 ConfigurationTable;
553} __attribute__((aligned(8))) EFI_SYSTEM_TABLE_64;
554
555#endif /* _PEXPERT_I386_EFI_H */
556

Archive Download this file

Revision: 2781