1/* $FreeBSD$ */ 2#ifndef _EFI_DEF_H 3#define _EFI_DEF_H 4 5/*++ 6 7Copyright (c) 1999 - 2002 Intel Corporation. All rights reserved 8This software and associated documentation (if any) is furnished 9under a license and may only be used or copied in accordance 10with the terms of the license. Except as permitted by such 11license, no part of this software or documentation may be 12reproduced, stored in a retrieval system, or transmitted in any 13form or by any means without the express written consent of 14Intel Corporation. 15 16Module Name: 17 18 efidef.h 19 20Abstract: 21 22 EFI definitions 23 24 25 26 27Revision History 28 29--*/ 30 31typedef UINT16 CHAR16; 32typedef UINT8 CHAR8; 33typedef UINT8 BOOLEAN; 34 35#ifndef TRUE 36 #define TRUE ((BOOLEAN) 1) 37 #define FALSE ((BOOLEAN) 0) 38#endif 39 40#ifndef NULL 41 #define NULL ((VOID *) 0) 42#endif 43 44typedef UINTN EFI_STATUS; 45typedef UINT64 EFI_LBA; 46typedef UINTN EFI_TPL; 47typedef VOID *EFI_HANDLE; 48typedef VOID *EFI_EVENT; 49 50 51// 52// Prototype argument decoration for EFI parameters to indicate 53// their direction 54// 55// IN - argument is passed into the function 56// OUT - argument (pointer) is returned from the function 57// OPTIONAL - argument is optional 58// 59 60#ifndef IN 61 #define IN 62 #define OUT 63 #define OPTIONAL 64#endif 65 66 67// 68// A GUID 69// 70 71typedef struct { 72 UINT32 Data1; 73 UINT16 Data2; 74 UINT16 Data3; 75 UINT8 Data4[8]; 76} EFI_GUID; 77 78 79// 80// Time 81// 82 83typedef struct { 84 UINT16 Year; // 1998 - 20XX 85 UINT8 Month; // 1 - 12 86 UINT8 Day; // 1 - 31 87 UINT8 Hour; // 0 - 23 88 UINT8 Minute; // 0 - 59 89 UINT8 Second; // 0 - 59 90 UINT8 Pad1; 91 UINT32 Nanosecond; // 0 - 999,999,999 92 INT16 TimeZone; // -1440 to 1440 or 2047 93 UINT8 Daylight; 94 UINT8 Pad2; 95} EFI_TIME; 96 97// Bit definitions for EFI_TIME.Daylight 98#define EFI_TIME_ADJUST_DAYLIGHT 0x01 99#define EFI_TIME_IN_DAYLIGHT 0x02 100 101// Value definition for EFI_TIME.TimeZone 102#define EFI_UNSPECIFIED_TIMEZONE 0x07FF 103 104 105 106// 107// Networking 108// 109 110typedef struct { 111 UINT8 Addr[4]; 112} EFI_IPv4_ADDRESS; 113 114typedef struct { 115 UINT8 Addr[16]; 116} EFI_IPv6_ADDRESS; 117 118typedef struct { 119 UINT8 Addr[32]; 120} EFI_MAC_ADDRESS; 121 122// 123// Memory 124// 125 126typedef UINT64 EFI_PHYSICAL_ADDRESS; 127typedef UINT64 EFI_VIRTUAL_ADDRESS; 128 129typedef enum { 130 AllocateAnyPages, 131 AllocateMaxAddress, 132 AllocateAddress, 133 MaxAllocateType 134} EFI_ALLOCATE_TYPE; 135 136//Preseve the attr on any range supplied. 137//ConventialMemory must have WB,SR,SW when supplied. 138//When allocating from ConventialMemory always make it WB,SR,SW 139//When returning to ConventialMemory always make it WB,SR,SW 140//When getting the memory map, or on RT for runtime types 141 142 143typedef enum { 144 EfiReservedMemoryType, 145 EfiLoaderCode, 146 EfiLoaderData, 147 EfiBootServicesCode, 148 EfiBootServicesData, 149 EfiRuntimeServicesCode, 150 EfiRuntimeServicesData, 151 EfiConventionalMemory, 152 EfiUnusableMemory, 153 EfiACPIReclaimMemory, 154 EfiACPIMemoryNVS, 155 EfiMemoryMappedIO, 156 EfiMemoryMappedIOPortSpace, 157 EfiPalCode, 158 EfiMaxMemoryType 159} EFI_MEMORY_TYPE; 160 161// possible caching types for the memory range 162#define EFI_MEMORY_UC 0x0000000000000001 163#define EFI_MEMORY_WC 0x0000000000000002 164#define EFI_MEMORY_WT 0x0000000000000004 165#define EFI_MEMORY_WB 0x0000000000000008 166#define EFI_MEMORY_UCE 0x0000000000000010 167 168// physical memory protection on range 169#define EFI_MEMORY_WP 0x0000000000001000 170#define EFI_MEMORY_RP 0x0000000000002000 171#define EFI_MEMORY_XP 0x0000000000004000 172 173// range requires a runtime mapping 174#define EFI_MEMORY_RUNTIME 0x8000000000000000 175 176#define EFI_MEMORY_DESCRIPTOR_VERSION 1 177typedef struct { 178 UINT32 Type; // Field size is 32 bits followed by 32 bit pad 179 EFI_PHYSICAL_ADDRESS PhysicalStart; // Field size is 64 bits 180 EFI_VIRTUAL_ADDRESS VirtualStart; // Field size is 64 bits 181 UINT64 NumberOfPages; // Field size is 64 bits 182 UINT64 Attribute; // Field size is 64 bits 183} EFI_MEMORY_DESCRIPTOR; 184 185// 186// International Language 187// 188 189typedef UINT8 ISO_639_2; 190#define ISO_639_2_ENTRY_SIZE 3 191 192// 193// 194// 195 196#define EFI_PAGE_SIZE 4096 197#define EFI_PAGE_MASK 0xFFF 198#define EFI_PAGE_SHIFT 12 199 200#define EFI_SIZE_TO_PAGES(a) \ 201 ( ((a) >> EFI_PAGE_SHIFT) + (((a) & EFI_PAGE_MASK) ? 1 : 0) ) 202 203#endif 204