1199767fToomas Soome/* $FreeBSD$ */
2199767fToomas Soome#ifndef _EFI_DEF_H
3199767fToomas Soome#define _EFI_DEF_H
4199767fToomas Soome
5199767fToomas Soome/*++
6199767fToomas Soome
7199767fToomas SoomeCopyright (c)  1999 - 2002 Intel Corporation. All rights reserved
8199767fToomas SoomeThis software and associated documentation (if any) is furnished
9199767fToomas Soomeunder a license and may only be used or copied in accordance
10199767fToomas Soomewith the terms of the license. Except as permitted by such
11199767fToomas Soomelicense, no part of this software or documentation may be
12199767fToomas Soomereproduced, stored in a retrieval system, or transmitted in any
13199767fToomas Soomeform or by any means without the express written consent of
14199767fToomas SoomeIntel Corporation.
15199767fToomas Soome
16199767fToomas SoomeModule Name:
17199767fToomas Soome
18199767fToomas Soome    efidef.h
19199767fToomas Soome
20199767fToomas SoomeAbstract:
21199767fToomas Soome
22199767fToomas Soome    EFI definitions
23199767fToomas Soome
24199767fToomas Soome
25199767fToomas Soome
26199767fToomas Soome
27199767fToomas SoomeRevision History
28199767fToomas Soome
29199767fToomas Soome--*/
30199767fToomas Soome
31199767fToomas Soometypedef UINT16          CHAR16;
32199767fToomas Soometypedef UINT8           CHAR8;
33199767fToomas Soome#ifndef ACPI_THREAD_ID		/* ACPI's definitions are fine */
34199767fToomas Soometypedef UINT8           BOOLEAN;
35199767fToomas Soome#endif
36199767fToomas Soome
37199767fToomas Soome#ifndef TRUE
38199767fToomas Soome    #define TRUE    ((BOOLEAN) 1)
39199767fToomas Soome    #define FALSE   ((BOOLEAN) 0)
40199767fToomas Soome#endif
41199767fToomas Soome
42199767fToomas Soome#ifndef NULL
43199767fToomas Soome    #define NULL    ((VOID *) 0)
44199767fToomas Soome#endif
45199767fToomas Soome
46199767fToomas Soometypedef UINTN           EFI_STATUS;
47199767fToomas Soometypedef UINT64          EFI_LBA;
48199767fToomas Soometypedef UINTN           EFI_TPL;
49199767fToomas Soometypedef VOID            *EFI_HANDLE;
50199767fToomas Soometypedef VOID            *EFI_EVENT;
51199767fToomas Soome
52199767fToomas Soome
53199767fToomas Soome//
54199767fToomas Soome// Prototype argument decoration for EFI parameters to indicate
55199767fToomas Soome// their direction
56199767fToomas Soome//
57199767fToomas Soome// IN - argument is passed into the function
58199767fToomas Soome// OUT - argument (pointer) is returned from the function
59199767fToomas Soome// OPTIONAL - argument is optional
60199767fToomas Soome//
61199767fToomas Soome
62199767fToomas Soome#ifndef IN
63199767fToomas Soome    #define IN
64199767fToomas Soome    #define OUT
65199767fToomas Soome    #define OPTIONAL
66199767fToomas Soome#endif
67199767fToomas Soome
68199767fToomas Soome
69199767fToomas Soome//
70199767fToomas Soome// A GUID
71199767fToomas Soome//
72199767fToomas Soome
73199767fToomas Soometypedef struct {
74199767fToomas Soome    UINT32  Data1;
75199767fToomas Soome    UINT16  Data2;
76199767fToomas Soome    UINT16  Data3;
77199767fToomas Soome    UINT8   Data4[8];
78199767fToomas Soome} EFI_GUID;
79199767fToomas Soome
80199767fToomas Soome
81199767fToomas Soome//
82199767fToomas Soome// Time
83199767fToomas Soome//
84199767fToomas Soome
85199767fToomas Soometypedef struct {
86199767fToomas Soome    UINT16      Year;       // 1998 - 20XX
87199767fToomas Soome    UINT8       Month;      // 1 - 12
88199767fToomas Soome    UINT8       Day;        // 1 - 31
89199767fToomas Soome    UINT8       Hour;       // 0 - 23
90199767fToomas Soome    UINT8       Minute;     // 0 - 59
91199767fToomas Soome    UINT8       Second;     // 0 - 59
92199767fToomas Soome    UINT8       Pad1;
93199767fToomas Soome    UINT32      Nanosecond; // 0 - 999,999,999
94199767fToomas Soome    INT16       TimeZone;   // -1440 to 1440 or 2047
95199767fToomas Soome    UINT8       Daylight;
96199767fToomas Soome    UINT8       Pad2;
97199767fToomas Soome} EFI_TIME;
98199767fToomas Soome
99199767fToomas Soome// Bit definitions for EFI_TIME.Daylight
100199767fToomas Soome#define EFI_TIME_ADJUST_DAYLIGHT    0x01
101199767fToomas Soome#define EFI_TIME_IN_DAYLIGHT        0x02
102199767fToomas Soome
103199767fToomas Soome// Value definition for EFI_TIME.TimeZone
104199767fToomas Soome#define EFI_UNSPECIFIED_TIMEZONE    0x07FF
105199767fToomas Soome
106199767fToomas Soome
107199767fToomas Soome
108199767fToomas Soome//
109199767fToomas Soome// Networking
110199767fToomas Soome//
111199767fToomas Soome
112199767fToomas Soometypedef struct {
113199767fToomas Soome    UINT8                   Addr[4];
114199767fToomas Soome} EFI_IPv4_ADDRESS;
115199767fToomas Soome
116199767fToomas Soometypedef struct {
117199767fToomas Soome    UINT8                   Addr[16];
118199767fToomas Soome} EFI_IPv6_ADDRESS;
119199767fToomas Soome
120199767fToomas Soometypedef struct {
121199767fToomas Soome    UINT8                   Addr[32];
122199767fToomas Soome} EFI_MAC_ADDRESS;
123199767fToomas Soome
124199767fToomas Soometypedef struct {
125199767fToomas Soome    UINT32 ReceivedQueueTimeoutValue;
126199767fToomas Soome    UINT32 TransmitQueueTimeoutValue;
127199767fToomas Soome    UINT16 ProtocolTypeFilter;
128199767fToomas Soome    BOOLEAN EnableUnicastReceive;
129199767fToomas Soome    BOOLEAN EnableMulticastReceive;
130199767fToomas Soome    BOOLEAN EnableBroadcastReceive;
131199767fToomas Soome    BOOLEAN EnablePromiscuousReceive;
132199767fToomas Soome    BOOLEAN FlushQueuesOnReset;
133199767fToomas Soome    BOOLEAN EnableReceiveTimestamps;
134199767fToomas Soome    BOOLEAN DisableBackgroundPolling;
136199767fToomas Soome
137199767fToomas Soome//
138199767fToomas Soome// Memory
139199767fToomas Soome//
140199767fToomas Soome
141199767fToomas Soometypedef UINT64          EFI_PHYSICAL_ADDRESS;
142199767fToomas Soometypedef UINT64          EFI_VIRTUAL_ADDRESS;
143199767fToomas Soome
144199767fToomas Soometypedef enum {
145199767fToomas Soome    AllocateAnyPages,
146199767fToomas Soome    AllocateMaxAddress,
147199767fToomas Soome    AllocateAddress,
148199767fToomas Soome    MaxAllocateType
149199767fToomas Soome} EFI_ALLOCATE_TYPE;
150199767fToomas Soome
151199767fToomas Soome//Preseve the attr on any range supplied.
152199767fToomas Soome//ConventialMemory must have WB,SR,SW when supplied.
153199767fToomas Soome//When allocating from ConventialMemory always make it WB,SR,SW
154199767fToomas Soome//When returning to ConventialMemory always make it WB,SR,SW
155199767fToomas Soome//When getting the memory map, or on RT for runtime types
156199767fToomas Soome
157199767fToomas Soome
158199767fToomas Soometypedef enum {
159199767fToomas Soome    EfiReservedMemoryType,
160199767fToomas Soome    EfiLoaderCode,
161199767fToomas Soome    EfiLoaderData,
162199767fToomas Soome    EfiBootServicesCode,
163199767fToomas Soome    EfiBootServicesData,
164199767fToomas Soome    EfiRuntimeServicesCode,
165199767fToomas Soome    EfiRuntimeServicesData,
166199767fToomas Soome    EfiConventionalMemory,
167199767fToomas Soome    EfiUnusableMemory,
168199767fToomas Soome    EfiACPIReclaimMemory,
169199767fToomas Soome    EfiACPIMemoryNVS,
170199767fToomas Soome    EfiMemoryMappedIO,
171199767fToomas Soome    EfiMemoryMappedIOPortSpace,
172199767fToomas Soome    EfiPalCode,
173eee5904Toomas Soome    EfiPersistentMemory,
174199767fToomas Soome    EfiMaxMemoryType
175199767fToomas Soome} EFI_MEMORY_TYPE;
176199767fToomas Soome
177199767fToomas Soome// possible caching types for the memory range
178eee5904Toomas Soome#define	EFI_MEMORY_UC			0x0000000000000001
179eee5904Toomas Soome#define	EFI_MEMORY_WC			0x0000000000000002
180eee5904Toomas Soome#define	EFI_MEMORY_WT			0x0000000000000004
181eee5904Toomas Soome#define	EFI_MEMORY_WB			0x0000000000000008
182eee5904Toomas Soome#define	EFI_MEMORY_UCE			0x0000000000000010
183eee5904Toomas Soome
184eee5904Toomas Soome// physical memory protection on range
185eee5904Toomas Soome#define	EFI_MEMORY_WP			0x0000000000001000
186eee5904Toomas Soome#define	EFI_MEMORY_RP			0x0000000000002000
187eee5904Toomas Soome#define	EFI_MEMORY_XP			0x0000000000004000
188eee5904Toomas Soome#define	EFI_MEMORY_NV			0x0000000000008000
189eee5904Toomas Soome#define	EFI_MEMORY_MORE_RELIABLE	0x0000000000010000
190eee5904Toomas Soome#define	EFI_MEMORY_RO			0x0000000000020000
191199767fToomas Soome
192199767fToomas Soome// range requires a runtime mapping
193eee5904Toomas Soome#define	EFI_MEMORY_RUNTIME		0x8000000000000000
194199767fToomas Soome
195eee5904Toomas Soome#define	EFI_MEMORY_DESCRIPTOR_VERSION  1
196199767fToomas Soometypedef struct {
197199767fToomas Soome    UINT32                          Type;           // Field size is 32 bits followed by 32 bit pad
198feff18aToomas Soome    UINT32                          Pad;
199199767fToomas Soome    EFI_PHYSICAL_ADDRESS            PhysicalStart;  // Field size is 64 bits
200199767fToomas Soome    EFI_VIRTUAL_ADDRESS             VirtualStart;   // Field size is 64 bits
201199767fToomas Soome    UINT64                          NumberOfPages;  // Field size is 64 bits
202199767fToomas Soome    UINT64                          Attribute;      // Field size is 64 bits
203feff18aToomas Soome} __packed EFI_MEMORY_DESCRIPTOR;
204199767fToomas Soome
205199767fToomas Soome//
206199767fToomas Soome// International Language
207199767fToomas Soome//
208199767fToomas Soome
209199767fToomas Soometypedef UINT8   ISO_639_2;
210199767fToomas Soome#define ISO_639_2_ENTRY_SIZE    3
211199767fToomas Soome
212199767fToomas Soome//
213199767fToomas Soome//
214199767fToomas Soome//
215199767fToomas Soome
216199767fToomas Soome#define EFI_PAGE_SIZE   4096
217199767fToomas Soome#define EFI_PAGE_MASK   0xFFF
218199767fToomas Soome#define EFI_PAGE_SHIFT  12
219199767fToomas Soome
220199767fToomas Soome#define EFI_SIZE_TO_PAGES(a)  \
221199767fToomas Soome    ( ((a) >> EFI_PAGE_SHIFT) + (((a) & EFI_PAGE_MASK) ? 1 : 0) )
222199767fToomas Soome
223199767fToomas Soome#endif