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