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