]> git.proxmox.com Git - mirror_edk2.git/blame - MdePkg/Include/Uefi/UefiBaseType.h
NetworkPkg: Fix suspicious dereference of pointer 'Mode.Ia'
[mirror_edk2.git] / MdePkg / Include / Uefi / UefiBaseType.h
CommitLineData
c311f86b 1/** @file\r
959ccb23 2 Defines data types and constants introduced in UEFI.\r
3\r
76336e4e 4Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>\r
b4319afb
HL
5Portions copyright (c) 2011 - 2013, ARM Ltd. All rights reserved.<BR>\r
6\r
af2dc6a7 7This program and the accompanying materials are licensed and made available under \r
8the terms and conditions of the BSD License that accompanies this distribution. \r
9The full text of the license may be found at\r
10http://opensource.org/licenses/bsd-license.php. \r
11 \r
12THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
13WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
959ccb23 14\r
15**/\r
16\r
17#ifndef __UEFI_BASETYPE_H__\r
18#define __UEFI_BASETYPE_H__\r
19\r
a0f1b047 20#include <Base.h>\r
959ccb23 21\r
e0c047a0 22//\r
eaad1319 23// Basic data type definitions introduced in UEFI.\r
e0c047a0 24//\r
25\r
26///\r
27/// 128-bit buffer containing a unique identifier value.\r
8b13229b 28///\r
00edb218 29typedef GUID EFI_GUID;\r
3f748e52 30///\r
af2dc6a7 31/// Function return status for EFI API.\r
3f748e52 32///\r
00edb218 33typedef RETURN_STATUS EFI_STATUS;\r
e0c047a0 34///\r
35/// A collection of related interfaces.\r
36///\r
00edb218 37typedef VOID *EFI_HANDLE;\r
e0c047a0 38///\r
39/// Handle to an event structure.\r
40///\r
00edb218 41typedef VOID *EFI_EVENT;\r
e0c047a0 42///\r
43/// Task priority level.\r
44///\r
00edb218 45typedef UINTN EFI_TPL;\r
e0c047a0 46///\r
47/// Logical block address.\r
48///\r
00edb218 49typedef UINT64 EFI_LBA;\r
6617fcc2 50\r
51///\r
52/// 64-bit physical memory address.\r
53///\r
00edb218 54typedef UINT64 EFI_PHYSICAL_ADDRESS;\r
6617fcc2 55\r
56///\r
57/// 64-bit virtual memory address.\r
58///\r
00edb218 59typedef UINT64 EFI_VIRTUAL_ADDRESS;\r
959ccb23 60\r
fb5148a0 61///\r
62/// EFI Time Abstraction:\r
e189264e 63/// Year: 1900 - 9999\r
fb5148a0 64/// Month: 1 - 12\r
65/// Day: 1 - 31\r
66/// Hour: 0 - 23\r
67/// Minute: 0 - 59\r
68/// Second: 0 - 59\r
69/// Nanosecond: 0 - 999,999,999\r
70/// TimeZone: -1440 to 1440 or 2047\r
71///\r
959ccb23 72typedef struct {\r
73 UINT16 Year;\r
74 UINT8 Month;\r
75 UINT8 Day;\r
76 UINT8 Hour;\r
77 UINT8 Minute;\r
78 UINT8 Second;\r
79 UINT8 Pad1;\r
80 UINT32 Nanosecond;\r
81 INT16 TimeZone;\r
82 UINT8 Daylight;\r
83 UINT8 Pad2;\r
84} EFI_TIME;\r
85\r
d1f95000 86\r
e0c047a0 87///\r
88/// 4-byte buffer. An IPv4 internet protocol address.\r
89///\r
d1f95000 90typedef struct {\r
91 UINT8 Addr[4];\r
92} EFI_IPv4_ADDRESS;\r
93\r
e0c047a0 94///\r
af2dc6a7 95/// 16-byte buffer. An IPv6 internet protocol address.\r
e0c047a0 96///\r
d1f95000 97typedef struct {\r
98 UINT8 Addr[16];\r
99} EFI_IPv6_ADDRESS;\r
100\r
e0c047a0 101///\r
102/// 32-byte buffer containing a network Media Access Control address.\r
103///\r
d1f95000 104typedef struct {\r
105 UINT8 Addr[32];\r
106} EFI_MAC_ADDRESS;\r
107\r
e0c047a0 108///\r
109/// 16-byte buffer aligned on a 4-byte boundary.\r
110/// An IPv4 or IPv6 internet protocol address.\r
111///\r
d1f95000 112typedef union {\r
113 UINT32 Addr[4];\r
114 EFI_IPv4_ADDRESS v4;\r
115 EFI_IPv6_ADDRESS v6;\r
116} EFI_IP_ADDRESS;\r
117\r
118\r
d674ed53 119///\r
120/// Enumeration of EFI_STATUS.\r
121///@{ \r
959ccb23 122#define EFI_SUCCESS RETURN_SUCCESS \r
123#define EFI_LOAD_ERROR RETURN_LOAD_ERROR \r
124#define EFI_INVALID_PARAMETER RETURN_INVALID_PARAMETER \r
125#define EFI_UNSUPPORTED RETURN_UNSUPPORTED \r
126#define EFI_BAD_BUFFER_SIZE RETURN_BAD_BUFFER_SIZE \r
127#define EFI_BUFFER_TOO_SMALL RETURN_BUFFER_TOO_SMALL \r
128#define EFI_NOT_READY RETURN_NOT_READY \r
129#define EFI_DEVICE_ERROR RETURN_DEVICE_ERROR \r
130#define EFI_WRITE_PROTECTED RETURN_WRITE_PROTECTED \r
131#define EFI_OUT_OF_RESOURCES RETURN_OUT_OF_RESOURCES \r
132#define EFI_VOLUME_CORRUPTED RETURN_VOLUME_CORRUPTED \r
133#define EFI_VOLUME_FULL RETURN_VOLUME_FULL \r
134#define EFI_NO_MEDIA RETURN_NO_MEDIA \r
135#define EFI_MEDIA_CHANGED RETURN_MEDIA_CHANGED \r
136#define EFI_NOT_FOUND RETURN_NOT_FOUND \r
137#define EFI_ACCESS_DENIED RETURN_ACCESS_DENIED \r
138#define EFI_NO_RESPONSE RETURN_NO_RESPONSE \r
139#define EFI_NO_MAPPING RETURN_NO_MAPPING \r
140#define EFI_TIMEOUT RETURN_TIMEOUT \r
141#define EFI_NOT_STARTED RETURN_NOT_STARTED \r
142#define EFI_ALREADY_STARTED RETURN_ALREADY_STARTED \r
143#define EFI_ABORTED RETURN_ABORTED \r
144#define EFI_ICMP_ERROR RETURN_ICMP_ERROR \r
145#define EFI_TFTP_ERROR RETURN_TFTP_ERROR \r
146#define EFI_PROTOCOL_ERROR RETURN_PROTOCOL_ERROR \r
147#define EFI_INCOMPATIBLE_VERSION RETURN_INCOMPATIBLE_VERSION \r
148#define EFI_SECURITY_VIOLATION RETURN_SECURITY_VIOLATION \r
149#define EFI_CRC_ERROR RETURN_CRC_ERROR \r
150#define EFI_END_OF_MEDIA RETURN_END_OF_MEDIA\r
151#define EFI_END_OF_FILE RETURN_END_OF_FILE\r
54cf8780 152#define EFI_INVALID_LANGUAGE RETURN_INVALID_LANGUAGE\r
76336e4e 153#define EFI_COMPROMISED_DATA RETURN_COMPROMISED_DATA\r
959ccb23 154\r
155#define EFI_WARN_UNKNOWN_GLYPH RETURN_WARN_UNKNOWN_GLYPH \r
156#define EFI_WARN_DELETE_FAILURE RETURN_WARN_DELETE_FAILURE \r
157#define EFI_WARN_WRITE_FAILURE RETURN_WARN_WRITE_FAILURE \r
158#define EFI_WARN_BUFFER_TOO_SMALL RETURN_WARN_BUFFER_TOO_SMALL\r
76336e4e 159#define EFI_WARN_STALE_DATA RETURN_WARN_STALE_DATA\r
d674ed53 160///@}\r
959ccb23 161\r
d674ed53 162///\r
163/// Define macro to encode the status code.\r
164/// \r
00edb218 165#define EFIERR(_a) ENCODE_ERROR(_a)\r
959ccb23 166\r
167#define EFI_ERROR(A) RETURN_ERROR(A)\r
168\r
d674ed53 169///\r
170/// ICMP error definitions\r
171///@{\r
172#define EFI_NETWORK_UNREACHABLE EFIERR(100)\r
173#define EFI_HOST_UNREACHABLE EFIERR(101) \r
174#define EFI_PROTOCOL_UNREACHABLE EFIERR(102)\r
175#define EFI_PORT_UNREACHABLE EFIERR(103)\r
176///@}\r
959ccb23 177\r
d674ed53 178///\r
179/// Tcp connection status definitions\r
180///@{\r
181#define EFI_CONNECTION_FIN EFIERR(104)\r
182#define EFI_CONNECTION_RESET EFIERR(105)\r
183#define EFI_CONNECTION_REFUSED EFIERR(106)\r
184///@}\r
959ccb23 185\r
186//\r
187// The EFI memory allocation functions work in units of EFI_PAGEs that are\r
b4221611 188// 4KB. This should in no way be confused with the page size of the processor.\r
959ccb23 189// An EFI_PAGE is just the quanta of memory in EFI.\r
190//\r
b4221611 191#define EFI_PAGE_SIZE SIZE_4KB\r
00edb218
A
192#define EFI_PAGE_MASK 0xFFF\r
193#define EFI_PAGE_SHIFT 12\r
959ccb23 194\r
b4221611 195/**\r
196 Macro that converts a size, in bytes, to a number of EFI_PAGESs.\r
197\r
198 @param Size A size in bytes. This parameter is assumed to be type UINTN. \r
199 Passing in a parameter that is larger than UINTN may produce \r
200 unexpected results.\r
201\r
202 @return The number of EFI_PAGESs associated with the number of bytes specified\r
203 by Size.\r
204\r
205**/\r
206#define EFI_SIZE_TO_PAGES(Size) (((Size) >> EFI_PAGE_SHIFT) + (((Size) & EFI_PAGE_MASK) ? 1 : 0))\r
207\r
208/**\r
209 Macro that converts a number of EFI_PAGEs to a size in bytes.\r
210\r
211 @param Pages The number of EFI_PAGES. This parameter is assumed to be \r
212 type UINTN. Passing in a parameter that is larger than \r
213 UINTN may produce unexpected results.\r
214\r
215 @return The number of bytes associated with the number of EFI_PAGEs specified \r
216 by Pages.\r
217 \r
218**/\r
219#define EFI_PAGES_TO_SIZE(Pages) ((Pages) << EFI_PAGE_SHIFT)\r
959ccb23 220\r
4ab0dff3 221///\r
af2dc6a7 222/// PE32+ Machine type for IA32 UEFI images.\r
4ab0dff3 223///\r
97f8b30c 224#define EFI_IMAGE_MACHINE_IA32 0x014C\r
4ab0dff3 225\r
226///\r
af2dc6a7 227/// PE32+ Machine type for IA64 UEFI images.\r
4ab0dff3 228///\r
97f8b30c 229#define EFI_IMAGE_MACHINE_IA64 0x0200\r
4ab0dff3 230\r
231///\r
af2dc6a7 232/// PE32+ Machine type for EBC UEFI images.\r
4ab0dff3 233///\r
97f8b30c 234#define EFI_IMAGE_MACHINE_EBC 0x0EBC\r
4ab0dff3 235\r
236///\r
af2dc6a7 237/// PE32+ Machine type for X64 UEFI images.\r
4ab0dff3 238///\r
97f8b30c 239#define EFI_IMAGE_MACHINE_X64 0x8664\r
4ab0dff3 240\r
ebd04fc2 241///\r
af2dc6a7 242/// PE32+ Machine type for ARM mixed ARM and Thumb/Thumb2 images.\r
ebd04fc2 243///\r
244#define EFI_IMAGE_MACHINE_ARMTHUMB_MIXED 0x01C2\r
245\r
b4319afb
HL
246///\r
247/// PE32+ Machine type for AARCH64 A64 images.\r
248///\r
249#define EFI_IMAGE_MACHINE_AARCH64 0xAA64\r
250\r
4ab0dff3 251\r
252#if defined (MDE_CPU_IA32)\r
253\r
254#define EFI_IMAGE_MACHINE_TYPE_SUPPORTED(Machine) \\r
255 (((Machine) == EFI_IMAGE_MACHINE_IA32) || ((Machine) == EFI_IMAGE_MACHINE_EBC))\r
256\r
257#define EFI_IMAGE_MACHINE_CROSS_TYPE_SUPPORTED(Machine) ((Machine) == EFI_IMAGE_MACHINE_X64) \r
258\r
259#elif defined (MDE_CPU_IPF)\r
260\r
261#define EFI_IMAGE_MACHINE_TYPE_SUPPORTED(Machine) \\r
262 (((Machine) == EFI_IMAGE_MACHINE_IA64) || ((Machine) == EFI_IMAGE_MACHINE_EBC))\r
263\r
264#define EFI_IMAGE_MACHINE_CROSS_TYPE_SUPPORTED(Machine) (FALSE) \r
265\r
266#elif defined (MDE_CPU_X64)\r
267\r
268#define EFI_IMAGE_MACHINE_TYPE_SUPPORTED(Machine) \\r
269 (((Machine) == EFI_IMAGE_MACHINE_X64) || ((Machine) == EFI_IMAGE_MACHINE_EBC))\r
270\r
271#define EFI_IMAGE_MACHINE_CROSS_TYPE_SUPPORTED(Machine) ((Machine) == EFI_IMAGE_MACHINE_IA32) \r
272\r
ebd04fc2 273#elif defined (MDE_CPU_ARM)\r
274\r
275#define EFI_IMAGE_MACHINE_TYPE_SUPPORTED(Machine) \\r
276 (((Machine) == EFI_IMAGE_MACHINE_ARMTHUMB_MIXED) || ((Machine) == EFI_IMAGE_MACHINE_EBC))\r
277\r
278#define EFI_IMAGE_MACHINE_CROSS_TYPE_SUPPORTED(Machine) ((Machine) == EFI_IMAGE_MACHINE_ARMTHUMB_MIXED) \r
279\r
b4319afb
HL
280#elif defined (MDE_CPU_AARCH64)\r
281\r
282#define EFI_IMAGE_MACHINE_TYPE_SUPPORTED(Machine) \\r
283 (((Machine) == EFI_IMAGE_MACHINE_AARCH64) || ((Machine) == EFI_IMAGE_MACHINE_EBC))\r
284\r
285#define EFI_IMAGE_MACHINE_CROSS_TYPE_SUPPORTED(Machine) (FALSE)\r
286\r
4ab0dff3 287#elif defined (MDE_CPU_EBC)\r
288\r
289///\r
eaad1319 290/// This is just to make sure you can cross compile with the EBC compiler.\r
8992ce06 291/// It does not make sense to have a PE loader coded in EBC. \r
4ab0dff3 292///\r
293#define EFI_IMAGE_MACHINE_TYPE_SUPPORTED(Machine) ((Machine) == EFI_IMAGE_MACHINE_EBC)\r
294\r
295#define EFI_IMAGE_MACHINE_CROSS_TYPE_SUPPORTED(Machine) (FALSE) \r
296\r
297#else\r
298#error Unknown Processor Type\r
299#endif\r
f4e8509b 300\r
959ccb23 301#endif\r