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