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