Chameleon

Chameleon Svn Source Tree

Root/branches/slice/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//
75// Modifiers for EFI Runtime and Boot Services
76//
77#define EFI_RUNTIMESERVICE
78#define EFIAPI
79#define IN
80#define OUT
81#define OPTIONAL
82
83#define EFI_MAX_BIT 0x80000000
84
85//
86// Set the upper bit to indicate EFI Error.
87//
88#define EFIERR(a) (EFI_MAX_BIT | (a))
89
90#define EFIWARN(a) (a)
91#define EFI_ERROR(a) (((INTN) (a)) < 0)
92
93#define EFI_SUCCESS 0
94#define EFI_LOAD_ERROR EFIERR (1)
95#define EFI_INVALID_PARAMETER EFIERR (2)
96#define EFI_UNSUPPORTED EFIERR (3)
97#define EFI_BAD_BUFFER_SIZE EFIERR (4)
98#define EFI_BUFFER_TOO_SMALL EFIERR (5)
99#define EFI_NOT_READY EFIERR (6)
100#define EFI_DEVICE_ERROR EFIERR (7)
101#define EFI_WRITE_PROTECTED EFIERR (8)
102#define EFI_OUT_OF_RESOURCES EFIERR (9)
103#define EFI_VOLUME_CORRUPTED EFIERR (10)
104#define EFI_VOLUME_FULL EFIERR (11)
105#define EFI_NO_MEDIA EFIERR (12)
106#define EFI_MEDIA_CHANGED EFIERR (13)
107#define EFI_NOT_FOUND EFIERR (14)
108#define EFI_ACCESS_DENIED EFIERR (15)
109#define EFI_NO_RESPONSE EFIERR (16)
110#define EFI_NO_MAPPING EFIERR (17)
111#define EFI_TIMEOUT EFIERR (18)
112#define EFI_NOT_STARTED EFIERR (19)
113#define EFI_ALREADY_STARTED EFIERR (20)
114#define EFI_ABORTED EFIERR (21)
115#define EFI_ICMP_ERROR EFIERR (22)
116#define EFI_TFTP_ERROR EFIERR (23)
117#define EFI_PROTOCOL_ERROR EFIERR (24)
118#define EFI_INCOMPATIBLE_VERSION EFIERR (25)
119#define EFI_SECURITY_VIOLATION EFIERR (26)
120#define EFI_CRC_ERROR EFIERR (27)
121
122#define EFI_WARN_UNKNOWN_GLYPH EFIWARN (1)
123#define EFI_WARN_DELETE_FAILURE EFIWARN (2)
124#define EFI_WARN_WRITE_FAILURE EFIWARN (3)
125#define EFI_WARN_BUFFER_TOO_SMALL EFIWARN (4)
126
127//
128// EFI Specification Revision information
129//
130#define EFI_SPECIFICATION_MAJOR_REVISION 1
131#define EFI_SPECIFICATION_MINOR_REVISION 10
132//rfc4122
133typedef struct {
134EFI_UINT32 time_low;
135EFI_UINT16 time_mid;
136EFI_UINT16 time_hi_and_version;
137EFI_UINT8clock_seq_hi_and_reserved;
138EFI_UINT8clock_seq_low;
139EFI_UINT8 node[6];
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 {
165 EFI_UINT16 Year;
166 EFI_UINT8 Month;
167 EFI_UINT8 Day;
168 EFI_UINT8 Hour;
169 EFI_UINT8 Minute;
170 EFI_UINT8 Second;
171 EFI_UINT8 Pad1;
172 EFI_UINT32 Nanosecond;
173 EFI_INT16 TimeZone;
174 EFI_UINT8 Daylight;
175 EFI_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 {
190 EfiReservedMemoryType,
191 EfiLoaderCode,
192 EfiLoaderData,
193 EfiBootServicesCode,
194 EfiBootServicesData,
195 EfiRuntimeServicesCode,
196 EfiRuntimeServicesData,
197 EfiConventionalMemory,
198 EfiUnusableMemory,
199 EfiACPIReclaimMemory,
200 EfiACPIMemoryNVS,
201 EfiMemoryMappedIO,
202 EfiMemoryMappedIOPortSpace,
203 EfiPalCode,
204 EfiMaxMemoryType
205} EFI_MEMORY_TYPE;
206
207typedef struct {
208 EFI_UINT64 Signature;
209 EFI_UINT32 Revision;
210 EFI_UINT32 HeaderSize;
211 EFI_UINT32 CRC32;
212 EFI_UINT32 Reserved;
213} __attribute__((aligned(8))) EFI_TABLE_HEADER;
214
215//
216// possible caching types for the memory range
217//
218#define EFI_MEMORY_UC 0x0000000000000001ULL
219#define EFI_MEMORY_WC 0x0000000000000002ULL
220#define EFI_MEMORY_WT 0x0000000000000004ULL
221#define EFI_MEMORY_WB 0x0000000000000008ULL
222#define EFI_MEMORY_UCE 0x0000000000000010ULL
223
224//
225// physical memory protection on range
226//
227#define EFI_MEMORY_WP 0x0000000000001000ULL
228#define EFI_MEMORY_RP 0x0000000000002000ULL
229#define EFI_MEMORY_XP 0x0000000000004000ULL
230
231//
232// range requires a runtime mapping
233//
234#define EFI_MEMORY_RUNTIME 0x8000000000000000ULL
235
236typedef EFI_UINT64 EFI_PHYSICAL_ADDRESS;
237typedef EFI_UINT64 EFI_VIRTUAL_ADDRESS;
238
239#define EFI_MEMORY_DESCRIPTOR_VERSION 1
240typedef struct {
241 EFI_UINT32 Type;
242 EFI_UINT32 Pad;
243 EFI_PHYSICAL_ADDRESS PhysicalStart;
244 EFI_VIRTUAL_ADDRESS VirtualStart;
245 EFI_UINT64 NumberOfPages;
246 EFI_UINT64 Attribute;
247} __attribute__((aligned(8))) EFI_MEMORY_DESCRIPTOR;
248
249
250typedef
251EFI_RUNTIMESERVICE
252EFI_STATUS
253(EFIAPI *EFI_SET_VIRTUAL_ADDRESS_MAP) (
254 IN EFI_UINTN MemoryMapSize,
255 IN EFI_UINTN DescriptorSize,
256 IN EFI_UINT32 DescriptorVersion,
257 IN EFI_MEMORY_DESCRIPTOR * VirtualMap
258 ) __attribute__((regparm(0)));
259
260typedef
261EFI_RUNTIMESERVICE
262EFI_STATUS
263(EFIAPI *EFI_CONVERT_POINTER) (
264 IN EFI_UINTN DebugDisposition,
265 IN OUT VOID **Address
266 ) __attribute__((regparm(0)));
267
268//
269// Variable attributes
270//
271#define EFI_VARIABLE_NON_VOLATILE 0x00000001
272#define EFI_VARIABLE_BOOTSERVICE_ACCESS 0x00000002
273#define EFI_VARIABLE_RUNTIME_ACCESS 0x00000004
274#define EFI_VARIABLE_READ_ONLY 0x00000008
275
276typedef
277EFI_RUNTIMESERVICE
278EFI_STATUS
279(EFIAPI *EFI_GET_VARIABLE) (
280 IN EFI_CHAR16 * VariableName,
281 IN EFI_GUID * VendorGuid,
282 OUT EFI_UINT32 * Attributes OPTIONAL,
283 IN OUT EFI_UINTN * DataSize,
284 OUT VOID * Data
285 ) __attribute__((regparm(0)));
286
287typedef
288EFI_RUNTIMESERVICE
289EFI_STATUS
290(EFIAPI *EFI_GET_NEXT_VARIABLE_NAME) (
291 IN OUT EFI_UINTN * VariableNameSize,
292 IN OUT EFI_CHAR16 * VariableName,
293 IN OUT EFI_GUID * VendorGuid
294 ) __attribute__((regparm(0)));
295
296typedef
297EFI_RUNTIMESERVICE
298EFI_STATUS
299(EFIAPI *EFI_SET_VARIABLE) (
300 IN EFI_CHAR16 * VariableName,
301 IN EFI_GUID * VendorGuid,
302 IN EFI_UINT32 Attributes,
303 IN EFI_UINTN DataSize,
304 IN VOID * Data
305 ) __attribute__((regparm(0)));
306
307//
308// EFI Time
309//
310typedef struct {
311 EFI_UINT32 Resolution;
312 EFI_UINT32 Accuracy;
313 EFI_BOOLEAN SetsToZero;
314} __attribute__((aligned(4))) EFI_TIME_CAPABILITIES;
315
316typedef
317EFI_RUNTIMESERVICE
318EFI_STATUS
319(EFIAPI *EFI_GET_TIME) (
320 OUT EFI_TIME * Time,
321 OUT EFI_TIME_CAPABILITIES * Capabilities OPTIONAL
322 ) __attribute__((regparm(0)));
323
324typedef
325EFI_RUNTIMESERVICE
326EFI_STATUS
327(EFIAPI *EFI_SET_TIME) (
328 IN EFI_TIME * Time
329 ) __attribute__((regparm(0)));
330
331typedef
332EFI_RUNTIMESERVICE
333EFI_STATUS
334(EFIAPI *EFI_GET_WAKEUP_TIME) (
335 OUT EFI_BOOLEAN * Enabled,
336 OUT EFI_BOOLEAN * Pending,
337 OUT EFI_TIME * Time
338 ) __attribute__((regparm(0)));
339
340typedef
341EFI_RUNTIMESERVICE
342EFI_STATUS
343(EFIAPI *EFI_SET_WAKEUP_TIME) (
344 IN EFI_BOOLEAN Enable,
345 IN EFI_TIME * Time OPTIONAL
346 ) __attribute((regparm(0)));
347
348typedef enum {
349 EfiResetCold,
350 EfiResetWarm,
351 EfiResetShutdown,
352
353#ifdef TIANO_EXTENSION_FLAG
354 EfiResetUpdate
355#endif
356
357} EFI_RESET_TYPE;
358
359typedef
360EFI_RUNTIMESERVICE
361VOID
362(EFIAPI *EFI_RESET_SYSTEM) (
363 IN EFI_RESET_TYPE ResetType,
364 IN EFI_STATUS ResetStatus,
365 IN EFI_UINTN DataSize,
366 IN EFI_CHAR16 * ResetData OPTIONAL
367 ) __attribute__((regparm(0)));
368
369typedef
370EFI_RUNTIMESERVICE
371EFI_STATUS
372(EFIAPI *EFI_GET_NEXT_HIGH_MONO_COUNT) (
373 OUT EFI_UINT32 * HighCount
374 ) __attribute__((regparm(0)));
375
376//
377// Definition of Status Code extended data header
378//
379// HeaderSize The size of the architecture. This is specified to enable
380// the future expansion
381//
382// Size The size of the data in bytes. This does not include the size
383// of the header structure.
384//
385// Type A GUID defining the type of the data
386//
387//
388#ifdef TIANO_EXTENSION_FLAG
389
390typedef
391EFI_RUNTIMESERVICE
392EFI_STATUS
393(EFIAPI *EFI_REPORT_STATUS_CODE) (
394 IN EFI_STATUS_CODE_TYPE Type,
395 IN EFI_STATUS_CODE_VALUE Value,
396 IN EFI_UINT32 Instance,
397 IN EFI_GUID * CallerId OPTIONAL,
398 IN EFI_STATUS_CODE_DATA * Data OPTIONAL
399 ) __attribute__((regparm(0)));
400
401#endif
402//
403// EFI Runtime Services Table
404//
405#define EFI_RUNTIME_SERVICES_SIGNATURE 0x56524553544e5552ULL
406#define EFI_RUNTIME_SERVICES_REVISION ((EFI_SPECIFICATION_MAJOR_REVISION << 16) | (EFI_SPECIFICATION_MINOR_REVISION))
407
408typedef struct {
409 EFI_TABLE_HEADER Hdr;
410
411 //
412 // Time services
413 //
414 EFI_PTR32 GetTime;
415 EFI_PTR32 SetTime;
416 EFI_PTR32 GetWakeupTime;
417 EFI_PTR32 SetWakeupTime;
418
419 //
420 // Virtual memory services
421 //
422 EFI_PTR32 SetVirtualAddressMap;
423 EFI_PTR32 ConvertPointer;
424
425 //
426 // Variable services
427 //
428 EFI_PTR32 GetVariable;
429 EFI_PTR32 GetNextVariableName;
430 EFI_PTR32 SetVariable;
431
432 //
433 // Misc
434 //
435 EFI_PTR32 GetNextHighMonotonicCount;
436 EFI_PTR32 ResetSystem;
437
438#ifdef TIANO_EXTENSION_FLAG
439 //
440 // ////////////////////////////////////////////////////
441 // Extended EFI Services
442 //////////////////////////////////////////////////////
443 //
444 EFI_PTR32 ReportStatusCode;
445#endif
446
447} __attribute__((aligned(8))) EFI_RUNTIME_SERVICES_32;
448
449typedef struct {
450 EFI_TABLE_HEADER Hdr;
451
452 //
453 // Time services
454 //
455 EFI_PTR64 GetTime;
456 EFI_PTR64 SetTime;
457 EFI_PTR64 GetWakeupTime;
458 EFI_PTR64 SetWakeupTime;
459
460 //
461 // Virtual memory services
462 //
463 EFI_PTR64 SetVirtualAddressMap;
464 EFI_PTR64 ConvertPointer;
465
466 //
467 // Variable services
468 //
469 EFI_PTR64 GetVariable;
470 EFI_PTR64 GetNextVariableName;
471 EFI_PTR64 SetVariable;
472
473 //
474 // Misc
475 //
476 EFI_PTR64 GetNextHighMonotonicCount;
477 EFI_PTR64 ResetSystem;
478
479#ifdef TIANO_EXTENSION_FLAG
480 //
481 // ////////////////////////////////////////////////////
482 // Extended EFI Services
483 //////////////////////////////////////////////////////
484 //
485 EFI_PTR64 ReportStatusCode;
486#endif
487
488} __attribute__((aligned(8))) EFI_RUNTIME_SERVICES_64;
489
490//
491// EFI Configuration Table
492//
493typedef struct {
494 EFI_GUID VendorGuid;
495 EFI_PTR32 VendorTable;
496} EFI_CONFIGURATION_TABLE_32;
497
498typedef struct {
499 EFI_GUID VendorGuid;
500 EFI_PTR64 VendorTable;
501} __attribute__((aligned(8))) EFI_CONFIGURATION_TABLE_64;
502
503//
504// EFI System Table
505//
506#define EFI_SYSTEM_TABLE_SIGNATURE 0x5453595320494249ULL
507#define EFI_SYSTEM_TABLE_REVISION ((EFI_SPECIFICATION_MAJOR_REVISION << 16) | (EFI_SPECIFICATION_MINOR_REVISION))
508#define EFI_2_00_SYSTEM_TABLE_REVISION ((2 << 16) | 00)
509#define EFI_1_02_SYSTEM_TABLE_REVISION ((1 << 16) | 02)
510#define EFI_1_10_SYSTEM_TABLE_REVISION ((1 << 16) | 10)
511
512typedef struct EFI_SYSTEM_TABLE_32 {
513 EFI_TABLE_HEADER Hdr;
514
515 EFI_PTR32 FirmwareVendor;
516 EFI_UINT32 FirmwareRevision;
517
518 EFI_HANDLE32 ConsoleInHandle;
519 EFI_PTR32 ConIn;
520
521 EFI_HANDLE32 ConsoleOutHandle;
522 EFI_PTR32 ConOut;
523
524 EFI_HANDLE32 StandardErrorHandle;
525 EFI_PTR32 StdErr;
526
527 EFI_PTR32 RuntimeServices;
528 EFI_PTR32 BootServices;
529
530 EFI_UINT32 NumberOfTableEntries;
531 EFI_PTR32 ConfigurationTable;
532
533} __attribute__((aligned(8))) EFI_SYSTEM_TABLE_32;
534
535typedef struct EFI_SYSTEM_TABLE_64 {
536 EFI_TABLE_HEADER Hdr;
537
538 EFI_PTR64 FirmwareVendor;
539 EFI_UINT32 FirmwareRevision;
540
541 EFI_UINT32 __pad;
542
543 EFI_HANDLE64 ConsoleInHandle;
544 EFI_PTR64 ConIn;
545
546 EFI_HANDLE64 ConsoleOutHandle;
547 EFI_PTR64 ConOut;
548
549 EFI_HANDLE64 StandardErrorHandle;
550 EFI_PTR64 StdErr;
551
552 EFI_PTR64 RuntimeServices;
553 EFI_PTR64 BootServices;
554
555 EFI_UINT64 NumberOfTableEntries;
556 EFI_PTR64 ConfigurationTable;
557
558} __attribute__((aligned(8))) EFI_SYSTEM_TABLE_64;
559
560typedef EFI_UINT8EFI_DEVICE_PATH_PROTOCOL;
561
562typedef struct _BLESS_EFI_LOAD_OPTION {
563 EFI_UINT32 Attributes;
564 EFI_UINT16 FilePathListLength;
565 EFI_CHAR16 Description[0];
566 EFI_DEVICE_PATH_PROTOCOL FilePathList[0];
567 EFI_UINT8 OptionalData[0];
568} BLESS_EFI_LOAD_OPTION;
569
570
571#endif /* _PEXPERT_I386_EFI_H */
572

Archive Download this file

Revision: 676