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

Archive Download this file

Revision: 2683