Sync EDKII BaseTools to BaseTools project r1971
[mirror_edk2.git] / BaseTools / Source / C / Include / Common / UefiBaseTypes.h
1 /** @file
2 Defines data types and constants introduced in UEFI.
3
4 Copyright (c) 2006 - 2007, Intel Corporation. All rights reserved.<BR>
5
6 This program and the accompanying materials are licensed and made available
7 under the terms and conditions of the BSD License which accompanies this
8 distribution. The full text of the license may be found at:
9 http://opensource.org/licenses/bsd-license.php
10
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
13
14 File Name: UefiBaseTypes.h
15
16 **/
17
18 #ifndef __UEFI_BASETYPE_H__
19 #define __UEFI_BASETYPE_H__
20
21 #include <Common/BaseTypes.h>
22
23 //
24 // Basical data type definitions introduced in UEFI.
25 //
26 typedef struct {
27 UINT32 Data1;
28 UINT16 Data2;
29 UINT16 Data3;
30 UINT8 Data4[8];
31 } EFI_GUID;
32
33 typedef RETURN_STATUS EFI_STATUS;
34 typedef VOID *EFI_HANDLE;
35
36 typedef VOID *EFI_EVENT;
37
38 typedef UINTN EFI_TPL;
39
40
41 typedef UINT64 EFI_LBA;
42
43
44 typedef UINT16 STRING_REF;
45
46 typedef UINT64 EFI_PHYSICAL_ADDRESS;
47 typedef UINT64 EFI_VIRTUAL_ADDRESS;
48
49 //
50 // EFI Time Abstraction:
51 // Year: 2000 - 20XX
52 // Month: 1 - 12
53 // Day: 1 - 31
54 // Hour: 0 - 23
55 // Minute: 0 - 59
56 // Second: 0 - 59
57 // Nanosecond: 0 - 999,999,999
58 // TimeZone: -1440 to 1440 or 2047
59 //
60 typedef struct {
61 UINT16 Year;
62 UINT8 Month;
63 UINT8 Day;
64 UINT8 Hour;
65 UINT8 Minute;
66 UINT8 Second;
67 UINT8 Pad1;
68 UINT32 Nanosecond;
69 INT16 TimeZone;
70 UINT8 Daylight;
71 UINT8 Pad2;
72 } EFI_TIME;
73
74
75 //
76 // Networking Definitions
77 //
78 typedef struct {
79 UINT8 Addr[4];
80 } EFI_IPv4_ADDRESS;
81
82 typedef struct {
83 UINT8 Addr[16];
84 } EFI_IPv6_ADDRESS;
85
86 typedef struct {
87 UINT8 Addr[32];
88 } EFI_MAC_ADDRESS;
89
90 typedef union {
91 UINT32 Addr[4];
92 EFI_IPv4_ADDRESS v4;
93 EFI_IPv6_ADDRESS v6;
94 } EFI_IP_ADDRESS;
95
96
97 //
98 // Enumeration of EFI_STATUS.
99 //
100 #define EFI_SUCCESS RETURN_SUCCESS
101 #define EFI_LOAD_ERROR RETURN_LOAD_ERROR
102 #define EFI_INVALID_PARAMETER RETURN_INVALID_PARAMETER
103 #define EFI_UNSUPPORTED RETURN_UNSUPPORTED
104 #define EFI_BAD_BUFFER_SIZE RETURN_BAD_BUFFER_SIZE
105 #define EFI_BUFFER_TOO_SMALL RETURN_BUFFER_TOO_SMALL
106 #define EFI_NOT_READY RETURN_NOT_READY
107 #define EFI_DEVICE_ERROR RETURN_DEVICE_ERROR
108 #define EFI_WRITE_PROTECTED RETURN_WRITE_PROTECTED
109 #define EFI_OUT_OF_RESOURCES RETURN_OUT_OF_RESOURCES
110 #define EFI_VOLUME_CORRUPTED RETURN_VOLUME_CORRUPTED
111 #define EFI_VOLUME_FULL RETURN_VOLUME_FULL
112 #define EFI_NO_MEDIA RETURN_NO_MEDIA
113 #define EFI_MEDIA_CHANGED RETURN_MEDIA_CHANGED
114 #define EFI_NOT_FOUND RETURN_NOT_FOUND
115 #define EFI_ACCESS_DENIED RETURN_ACCESS_DENIED
116 #define EFI_NO_RESPONSE RETURN_NO_RESPONSE
117 #define EFI_NO_MAPPING RETURN_NO_MAPPING
118 #define EFI_TIMEOUT RETURN_TIMEOUT
119 #define EFI_NOT_STARTED RETURN_NOT_STARTED
120 #define EFI_ALREADY_STARTED RETURN_ALREADY_STARTED
121 #define EFI_ABORTED RETURN_ABORTED
122 #define EFI_ICMP_ERROR RETURN_ICMP_ERROR
123 #define EFI_TFTP_ERROR RETURN_TFTP_ERROR
124 #define EFI_PROTOCOL_ERROR RETURN_PROTOCOL_ERROR
125 #define EFI_INCOMPATIBLE_VERSION RETURN_INCOMPATIBLE_VERSION
126 #define EFI_SECURITY_VIOLATION RETURN_SECURITY_VIOLATION
127 #define EFI_CRC_ERROR RETURN_CRC_ERROR
128 #define EFI_END_OF_MEDIA RETURN_END_OF_MEDIA
129 #define EFI_END_OF_FILE RETURN_END_OF_FILE
130
131 #define EFI_WARN_UNKNOWN_GLYPH RETURN_WARN_UNKNOWN_GLYPH
132 #define EFI_WARN_DELETE_FAILURE RETURN_WARN_DELETE_FAILURE
133 #define EFI_WARN_WRITE_FAILURE RETURN_WARN_WRITE_FAILURE
134 #define EFI_WARN_BUFFER_TOO_SMALL RETURN_WARN_BUFFER_TOO_SMALL
135
136
137 #define NULL_HANDLE ((VOID *) 0)
138
139 //
140 // Define macro to encode the status code.
141 //
142 #define EFIERR(_a) ENCODE_ERROR(_a)
143
144 #define EFI_ERROR(A) RETURN_ERROR(A)
145
146 //
147 // Define macros to build data structure signatures from characters.
148 //
149 #define EFI_SIGNATURE_16(A, B) ((A) | (B << 8))
150 #define EFI_SIGNATURE_32(A, B, C, D) (EFI_SIGNATURE_16 (A, B) | (EFI_SIGNATURE_16 (C, D) << 16))
151 #define EFI_SIGNATURE_64(A, B, C, D, E, F, G, H) \
152 (EFI_SIGNATURE_32 (A, B, C, D) | ((UINT64) (EFI_SIGNATURE_32 (E, F, G, H)) << 32))
153
154
155 //
156 // Returns the byte offset to a field within a structure
157 //
158 #define EFI_FIELD_OFFSET(TYPE,Field) ((UINTN)(&(((TYPE *) 0)->Field)))
159
160 //
161 // The EFI memory allocation functions work in units of EFI_PAGEs that are
162 // 4K. This should in no way be confused with the page size of the processor.
163 // An EFI_PAGE is just the quanta of memory in EFI.
164 //
165 #define EFI_PAGE_SIZE 0x1000
166 #define EFI_PAGE_MASK 0xFFF
167 #define EFI_PAGE_SHIFT 12
168
169 #define EFI_SIZE_TO_PAGES(a) (((a) >> EFI_PAGE_SHIFT) + (((a) & EFI_PAGE_MASK) ? 1 : 0))
170
171 #define EFI_PAGES_TO_SIZE(a) ( (a) << EFI_PAGE_SHIFT)
172
173
174 #define EFI_MAX_BIT MAX_BIT
175 #define EFI_MAX_ADDRESS MAX_ADDRESS
176
177 #endif