]> git.proxmox.com Git - mirror_edk2.git/blob - EdkCompatibilityPkg/Foundation/Efi/Include/EfiTypes.h
3fba60ff5d156607d589b2e4ed11c7d29be6c531
[mirror_edk2.git] / EdkCompatibilityPkg / Foundation / Efi / Include / EfiTypes.h
1 /*++
2
3 Copyright (c) 2004, Intel Corporation. All rights reserved.<BR>
4 This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
8
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11
12 Module Name:
13
14 EfiTypes.h
15
16 Abstract:
17
18 EFI defined types. Use these types when ever possible!
19
20 --*/
21
22 #ifndef _EFI_TYPES_H_
23 #define _EFI_TYPES_H_
24
25 //
26 // EFI Data Types based on ANSI C integer types in EfiBind.h
27 //
28 typedef uint8_t BOOLEAN;
29 typedef intn_t INTN;
30 typedef uintn_t UINTN;
31 typedef int8_t INT8;
32 typedef uint8_t UINT8;
33 typedef int16_t INT16;
34 typedef uint16_t UINT16;
35 typedef int32_t INT32;
36 typedef uint32_t UINT32;
37 typedef int64_t INT64;
38 typedef uint64_t UINT64;
39 typedef char CHAR8;
40 typedef uint16_t CHAR16;
41 typedef UINT64 EFI_LBA;
42
43 //
44 // Modifiers for EFI Data Types used to self document code.
45 // Please see EFI coding convention for proper usage.
46 //
47 #ifndef IN
48 //
49 // Some other envirnments use this construct, so #ifndef to prevent
50 // mulitple definition.
51 //
52 #define IN
53 #define OUT
54 #define OPTIONAL
55 #endif
56
57 #ifndef UNALIGNED
58 #define UNALIGNED
59 #endif
60
61 //
62 // Modifiers for EFI Runtime and Boot Services
63 //
64 #define EFI_RUNTIMESERVICE
65 #define EFI_BOOTSERVICE
66
67 //
68 // Boot Service add in EFI 1.1
69 //
70 #define EFI_BOOTSERVICE11
71
72 //
73 // Modifiers to absract standard types to aid in debug of problems
74 //
75 #define CONST const
76 #define STATIC static
77 #define VOID void
78 #define VOLATILE volatile
79
80 //
81 // Modifier to ensure that all protocol member functions and EFI intrinsics
82 // use the correct C calling convention. All protocol member functions and
83 // EFI intrinsics are required to modify thier member functions with EFIAPI.
84 //
85 #ifndef EFIAPI
86 #define EFIAPI _EFIAPI
87 #endif
88
89 //
90 // EFI Constants. They may exist in other build structures, so #ifndef them.
91 //
92 #ifndef TRUE
93 #define TRUE ((BOOLEAN) 1 == 1)
94 #endif
95
96 #ifndef FALSE
97 #define FALSE ((BOOLEAN) 0 == 1)
98 #endif
99
100 #ifndef NULL
101 #define NULL ((VOID *) 0)
102 #endif
103 //
104 // EFI Data Types derived from other EFI data types.
105 //
106 typedef UINTN EFI_STATUS;
107
108 typedef VOID *EFI_HANDLE;
109 #define NULL_HANDLE ((VOID *) 0)
110
111 typedef VOID *EFI_EVENT;
112 typedef UINTN EFI_TPL;
113
114 typedef struct {
115 UINT32 Data1;
116 UINT16 Data2;
117 UINT16 Data3;
118 UINT8 Data4[8];
119 } EFI_GUID;
120
121 typedef union {
122 EFI_GUID Guid;
123 UINT8 Raw[16];
124 } EFI_GUID_UNION;
125
126 //
127 // EFI Time Abstraction:
128 // Year: 2000 - 20XX
129 // Month: 1 - 12
130 // Day: 1 - 31
131 // Hour: 0 - 23
132 // Minute: 0 - 59
133 // Second: 0 - 59
134 // Nanosecond: 0 - 999,999,999
135 // TimeZone: -1440 to 1440 or 2047
136 //
137 typedef struct {
138 UINT16 Year;
139 UINT8 Month;
140 UINT8 Day;
141 UINT8 Hour;
142 UINT8 Minute;
143 UINT8 Second;
144 UINT8 Pad1;
145 UINT32 Nanosecond;
146 INT16 TimeZone;
147 UINT8 Daylight;
148 UINT8 Pad2;
149 } EFI_TIME;
150
151 //
152 // Bit definitions for EFI_TIME.Daylight
153 //
154 #define EFI_TIME_ADJUST_DAYLIGHT 0x01
155 #define EFI_TIME_IN_DAYLIGHT 0x02
156
157 //
158 // Value definition for EFI_TIME.TimeZone
159 //
160 #define EFI_UNSPECIFIED_TIMEZONE 0x07FF
161
162 //
163 // Networking
164 //
165 typedef struct {
166 UINT8 Addr[4];
167 } EFI_IPv4_ADDRESS;
168
169 typedef struct {
170 UINT8 Addr[16];
171 } EFI_IPv6_ADDRESS;
172
173 typedef struct {
174 UINT8 Addr[32];
175 } EFI_MAC_ADDRESS;
176
177 typedef union {
178 UINT32 Addr[4];
179 EFI_IPv4_ADDRESS v4;
180 EFI_IPv6_ADDRESS v6;
181 } EFI_IP_ADDRESS;
182
183 typedef enum {
184 EfiReservedMemoryType,
185 EfiLoaderCode,
186 EfiLoaderData,
187 EfiBootServicesCode,
188 EfiBootServicesData,
189 EfiRuntimeServicesCode,
190 EfiRuntimeServicesData,
191 EfiConventionalMemory,
192 EfiUnusableMemory,
193 EfiACPIReclaimMemory,
194 EfiACPIMemoryNVS,
195 EfiMemoryMappedIO,
196 EfiMemoryMappedIOPortSpace,
197 EfiPalCode,
198 EfiMaxMemoryType
199 } EFI_MEMORY_TYPE;
200
201 typedef enum {
202 AllocateAnyPages,
203 AllocateMaxAddress,
204 AllocateAddress,
205 MaxAllocateType
206 } EFI_ALLOCATE_TYPE;
207
208 typedef struct {
209 UINT64 Signature;
210 UINT32 Revision;
211 UINT32 HeaderSize;
212 UINT32 CRC32;
213 UINT32 Reserved;
214 } EFI_TABLE_HEADER;
215
216 //
217 // possible caching types for the memory range
218 //
219 #define EFI_MEMORY_UC 0x0000000000000001
220 #define EFI_MEMORY_WC 0x0000000000000002
221 #define EFI_MEMORY_WT 0x0000000000000004
222 #define EFI_MEMORY_WB 0x0000000000000008
223 #define EFI_MEMORY_UCE 0x0000000000000010
224
225 //
226 // physical memory protection on range
227 //
228 #define EFI_MEMORY_WP 0x0000000000001000
229 #define EFI_MEMORY_RP 0x0000000000002000
230 #define EFI_MEMORY_XP 0x0000000000004000
231
232 //
233 // range requires a runtime mapping
234 //
235 #define EFI_MEMORY_RUNTIME 0x8000000000000000ULL
236
237 typedef UINT64 EFI_PHYSICAL_ADDRESS;
238 typedef UINT64 EFI_VIRTUAL_ADDRESS;
239
240 #define EFI_MEMORY_DESCRIPTOR_VERSION 1
241 typedef struct {
242 UINT32 Type;
243 UINT32 Pad;
244 EFI_PHYSICAL_ADDRESS PhysicalStart;
245 EFI_VIRTUAL_ADDRESS VirtualStart;
246 UINT64 NumberOfPages;
247 UINT64 Attribute;
248 } EFI_MEMORY_DESCRIPTOR;
249
250 //
251 // The EFI memory allocation functions work in units of EFI_PAGEs that are
252 // 4K. This should in no way be confused with the page size of the processor.
253 // An EFI_PAGE is just the quanta of memory in EFI.
254 //
255 #define EFI_PAGE_SIZE 4096
256 #define EFI_PAGE_MASK 0xFFF
257 #define EFI_PAGE_SHIFT 12
258
259 #define EFI_SIZE_TO_PAGES(a) (((a) >> EFI_PAGE_SHIFT) + (((a) & EFI_PAGE_MASK) ? 1 : 0))
260
261 #define EFI_PAGES_TO_SIZE(a) ( (a) << EFI_PAGE_SHIFT)
262
263 //
264 // ALIGN_POINTER - aligns a pointer to the lowest boundry
265 //
266 #define ALIGN_POINTER(p, s) ((VOID *) (p + ((s - ((UINTN) p)) & (s - 1))))
267
268 //
269 // ALIGN_VARIABLE - aligns a variable up to the next natural boundry for int size of a processor
270 //
271 #define ALIGN_VARIABLE(Value, Adjustment) \
272 (UINTN) Adjustment = 0; \
273 if ((UINTN) Value % sizeof (UINTN)) { \
274 (UINTN) Adjustment = sizeof (UINTN) - ((UINTN) Value % sizeof (UINTN)); \
275 } \
276 Value = (UINTN) Value + (UINTN) Adjustment
277
278 //
279 // EFI_FIELD_OFFSET - returns the byte offset to a field within a structure
280 //
281 #define EFI_FIELD_OFFSET(TYPE,Field) ((UINTN)(&(((TYPE *) 0)->Field)))
282
283 //
284 // CONTAINING_RECORD - returns a pointer to the structure
285 // from one of it's elements.
286 //
287 #define _CR(Record, TYPE, Field) ((TYPE *) ((CHAR8 *) (Record) - (CHAR8 *) &(((TYPE *) 0)->Field)))
288
289 //
290 // Define macros to build data structure signatures from characters.
291 //
292 #define EFI_SIGNATURE_16(A, B) ((A) | (B << 8))
293 #define EFI_SIGNATURE_32(A, B, C, D) (EFI_SIGNATURE_16 (A, B) | (EFI_SIGNATURE_16 (C, D) << 16))
294 #define EFI_SIGNATURE_64(A, B, C, D, E, F, G, H) \
295 (EFI_SIGNATURE_32 (A, B, C, D) | ((UINT64) (EFI_SIGNATURE_32 (E, F, G, H)) << 32))
296
297 #endif