1/** @file 2 Defines data types and constants introduced in UEFI. 3 4Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR> 5Portions copyright (c) 2011 - 2016, 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 IPv4_ADDRESS EFI_IPv4_ADDRESS; 91 92/// 93/// 16-byte buffer. An IPv6 internet protocol address. 94/// 95typedef IPv6_ADDRESS EFI_IPv6_ADDRESS; 96 97/// 98/// 32-byte buffer containing a network Media Access Control address. 99/// 100typedef struct { 101 UINT8 Addr[32]; 102} EFI_MAC_ADDRESS; 103 104/// 105/// 16-byte buffer aligned on a 4-byte boundary. 106/// An IPv4 or IPv6 internet protocol address. 107/// 108typedef union { 109 UINT32 Addr[4]; 110 EFI_IPv4_ADDRESS v4; 111 EFI_IPv6_ADDRESS v6; 112} EFI_IP_ADDRESS; 113 114 115/// 116/// Enumeration of EFI_STATUS. 117///@{ 118#define EFI_SUCCESS RETURN_SUCCESS 119#define EFI_LOAD_ERROR RETURN_LOAD_ERROR 120#define EFI_INVALID_PARAMETER RETURN_INVALID_PARAMETER 121#define EFI_UNSUPPORTED RETURN_UNSUPPORTED 122#define EFI_BAD_BUFFER_SIZE RETURN_BAD_BUFFER_SIZE 123#define EFI_BUFFER_TOO_SMALL RETURN_BUFFER_TOO_SMALL 124#define EFI_NOT_READY RETURN_NOT_READY 125#define EFI_DEVICE_ERROR RETURN_DEVICE_ERROR 126#define EFI_WRITE_PROTECTED RETURN_WRITE_PROTECTED 127#define EFI_OUT_OF_RESOURCES RETURN_OUT_OF_RESOURCES 128#define EFI_VOLUME_CORRUPTED RETURN_VOLUME_CORRUPTED 129#define EFI_VOLUME_FULL RETURN_VOLUME_FULL 130#define EFI_NO_MEDIA RETURN_NO_MEDIA 131#define EFI_MEDIA_CHANGED RETURN_MEDIA_CHANGED 132#define EFI_NOT_FOUND RETURN_NOT_FOUND 133#define EFI_ACCESS_DENIED RETURN_ACCESS_DENIED 134#define EFI_NO_RESPONSE RETURN_NO_RESPONSE 135#define EFI_NO_MAPPING RETURN_NO_MAPPING 136#define EFI_TIMEOUT RETURN_TIMEOUT 137#define EFI_NOT_STARTED RETURN_NOT_STARTED 138#define EFI_ALREADY_STARTED RETURN_ALREADY_STARTED 139#define EFI_ABORTED RETURN_ABORTED 140#define EFI_ICMP_ERROR RETURN_ICMP_ERROR 141#define EFI_TFTP_ERROR RETURN_TFTP_ERROR 142#define EFI_PROTOCOL_ERROR RETURN_PROTOCOL_ERROR 143#define EFI_INCOMPATIBLE_VERSION RETURN_INCOMPATIBLE_VERSION 144#define EFI_SECURITY_VIOLATION RETURN_SECURITY_VIOLATION 145#define EFI_CRC_ERROR RETURN_CRC_ERROR 146#define EFI_END_OF_MEDIA RETURN_END_OF_MEDIA 147#define EFI_END_OF_FILE RETURN_END_OF_FILE 148#define EFI_INVALID_LANGUAGE RETURN_INVALID_LANGUAGE 149#define EFI_COMPROMISED_DATA RETURN_COMPROMISED_DATA 150#define EFI_HTTP_ERROR RETURN_HTTP_ERROR 151 152#define EFI_WARN_UNKNOWN_GLYPH RETURN_WARN_UNKNOWN_GLYPH 153#define EFI_WARN_DELETE_FAILURE RETURN_WARN_DELETE_FAILURE 154#define EFI_WARN_WRITE_FAILURE RETURN_WARN_WRITE_FAILURE 155#define EFI_WARN_BUFFER_TOO_SMALL RETURN_WARN_BUFFER_TOO_SMALL 156#define EFI_WARN_STALE_DATA RETURN_WARN_STALE_DATA 157#define EFI_WARN_FILE_SYSTEM RETURN_WARN_FILE_SYSTEM 158///@} 159 160/// 161/// Define macro to encode the status code. 162/// 163#define EFIERR(_a) ENCODE_ERROR(_a) 164 165#define EFI_ERROR(A) RETURN_ERROR(A) 166 167/// 168/// ICMP error definitions 169///@{ 170#define EFI_NETWORK_UNREACHABLE EFIERR(100) 171#define EFI_HOST_UNREACHABLE EFIERR(101) 172#define EFI_PROTOCOL_UNREACHABLE EFIERR(102) 173#define EFI_PORT_UNREACHABLE EFIERR(103) 174///@} 175 176/// 177/// Tcp connection status definitions 178///@{ 179#define EFI_CONNECTION_FIN EFIERR(104) 180#define EFI_CONNECTION_RESET EFIERR(105) 181#define EFI_CONNECTION_REFUSED EFIERR(106) 182///@} 183 184// 185// The EFI memory allocation functions work in units of EFI_PAGEs that are 186// 4KB. This should in no way be confused with the page size of the processor. 187// An EFI_PAGE is just the quanta of memory in EFI. 188// 189#define EFI_PAGE_SIZE SIZE_4KB 190#define EFI_PAGE_MASK 0xFFF 191#define EFI_PAGE_SHIFT 12 192 193/** 194 Macro that converts a size, in bytes, to a number of EFI_PAGESs. 195 196 @param Size A size in bytes. This parameter is assumed to be type UINTN. 197 Passing in a parameter that is larger than UINTN may produce 198 unexpected results. 199 200 @return The number of EFI_PAGESs associated with the number of bytes specified 201 by Size. 202 203**/ 204#define EFI_SIZE_TO_PAGES(Size) (((Size) >> EFI_PAGE_SHIFT) + (((Size) & EFI_PAGE_MASK) ? 1 : 0)) 205 206/** 207 Macro that converts a number of EFI_PAGEs to a size in bytes. 208 209 @param Pages The number of EFI_PAGES. This parameter is assumed to be 210 type UINTN. Passing in a parameter that is larger than 211 UINTN may produce unexpected results. 212 213 @return The number of bytes associated with the number of EFI_PAGEs specified 214 by Pages. 215 216**/ 217#define EFI_PAGES_TO_SIZE(Pages) ((Pages) << EFI_PAGE_SHIFT) 218 219/// 220/// PE32+ Machine type for IA32 UEFI images. 221/// 222#define EFI_IMAGE_MACHINE_IA32 0x014C 223 224/// 225/// PE32+ Machine type for IA64 UEFI images. 226/// 227#define EFI_IMAGE_MACHINE_IA64 0x0200 228 229/// 230/// PE32+ Machine type for EBC UEFI images. 231/// 232#define EFI_IMAGE_MACHINE_EBC 0x0EBC 233 234/// 235/// PE32+ Machine type for X64 UEFI images. 236/// 237#define EFI_IMAGE_MACHINE_X64 0x8664 238 239/// 240/// PE32+ Machine type for ARM mixed ARM and Thumb/Thumb2 images. 241/// 242#define EFI_IMAGE_MACHINE_ARMTHUMB_MIXED 0x01C2 243 244/// 245/// PE32+ Machine type for AARCH64 A64 images. 246/// 247#define EFI_IMAGE_MACHINE_AARCH64 0xAA64 248 249 250#if defined (MDE_CPU_IA32) 251 252#define EFI_IMAGE_MACHINE_TYPE_SUPPORTED(Machine) \ 253 (((Machine) == EFI_IMAGE_MACHINE_IA32) || ((Machine) == EFI_IMAGE_MACHINE_EBC)) 254 255#define EFI_IMAGE_MACHINE_CROSS_TYPE_SUPPORTED(Machine) ((Machine) == EFI_IMAGE_MACHINE_X64) 256 257#elif defined (MDE_CPU_IPF) 258 259#define EFI_IMAGE_MACHINE_TYPE_SUPPORTED(Machine) \ 260 (((Machine) == EFI_IMAGE_MACHINE_IA64) || ((Machine) == EFI_IMAGE_MACHINE_EBC)) 261 262#define EFI_IMAGE_MACHINE_CROSS_TYPE_SUPPORTED(Machine) (FALSE) 263 264#elif defined (MDE_CPU_X64) 265 266#define EFI_IMAGE_MACHINE_TYPE_SUPPORTED(Machine) \ 267 (((Machine) == EFI_IMAGE_MACHINE_X64) || ((Machine) == EFI_IMAGE_MACHINE_EBC)) 268 269#define EFI_IMAGE_MACHINE_CROSS_TYPE_SUPPORTED(Machine) ((Machine) == EFI_IMAGE_MACHINE_IA32) 270 271#elif defined (MDE_CPU_ARM) 272 273#define EFI_IMAGE_MACHINE_TYPE_SUPPORTED(Machine) \ 274 (((Machine) == EFI_IMAGE_MACHINE_ARMTHUMB_MIXED) || ((Machine) == EFI_IMAGE_MACHINE_EBC)) 275 276#define EFI_IMAGE_MACHINE_CROSS_TYPE_SUPPORTED(Machine) ((Machine) == EFI_IMAGE_MACHINE_ARMTHUMB_MIXED) 277 278#elif defined (MDE_CPU_AARCH64) 279 280#define EFI_IMAGE_MACHINE_TYPE_SUPPORTED(Machine) \ 281 (((Machine) == EFI_IMAGE_MACHINE_AARCH64) || ((Machine) == EFI_IMAGE_MACHINE_EBC)) 282 283#define EFI_IMAGE_MACHINE_CROSS_TYPE_SUPPORTED(Machine) (FALSE) 284 285#elif defined (MDE_CPU_EBC) 286 287/// 288/// This is just to make sure you can cross compile with the EBC compiler. 289/// It does not make sense to have a PE loader coded in EBC. 290/// 291#define EFI_IMAGE_MACHINE_TYPE_SUPPORTED(Machine) ((Machine) == EFI_IMAGE_MACHINE_EBC) 292 293#define EFI_IMAGE_MACHINE_CROSS_TYPE_SUPPORTED(Machine) (FALSE) 294 295#else 296#error Unknown Processor Type 297#endif 298 299#endif 300