1060fee10Skettenis /* $FreeBSD: head/sys/boot/efi/include/efidef.h 279038 2015-02-20 01:40:55Z imp $ */ 2060fee10Skettenis #ifndef _EFI_DEF_H 3060fee10Skettenis #define _EFI_DEF_H 4060fee10Skettenis 5060fee10Skettenis /*++ 6060fee10Skettenis 7060fee10Skettenis Copyright (c) 1999 - 2002 Intel Corporation. All rights reserved 8060fee10Skettenis This software and associated documentation (if any) is furnished 9060fee10Skettenis under a license and may only be used or copied in accordance 10060fee10Skettenis with the terms of the license. Except as permitted by such 11060fee10Skettenis license, no part of this software or documentation may be 12060fee10Skettenis reproduced, stored in a retrieval system, or transmitted in any 13060fee10Skettenis form or by any means without the express written consent of 14060fee10Skettenis Intel Corporation. 15060fee10Skettenis 16060fee10Skettenis Module Name: 17060fee10Skettenis 18060fee10Skettenis efidef.h 19060fee10Skettenis 20060fee10Skettenis Abstract: 21060fee10Skettenis 22060fee10Skettenis EFI definitions 23060fee10Skettenis 24060fee10Skettenis 25060fee10Skettenis 26060fee10Skettenis 27060fee10Skettenis Revision History 28060fee10Skettenis 29060fee10Skettenis --*/ 30060fee10Skettenis 31060fee10Skettenis typedef UINT16 CHAR16; 32060fee10Skettenis typedef UINT8 CHAR8; 33060fee10Skettenis #ifndef ACPI_THREAD_ID /* ACPI's definitions are fine */ 34060fee10Skettenis typedef UINT8 BOOLEAN; 35060fee10Skettenis #endif 36060fee10Skettenis 37060fee10Skettenis #ifndef TRUE 38060fee10Skettenis #define TRUE ((BOOLEAN) 1) 39060fee10Skettenis #define FALSE ((BOOLEAN) 0) 40060fee10Skettenis #endif 41060fee10Skettenis 42060fee10Skettenis #ifndef NULL 43060fee10Skettenis #define NULL ((VOID *) 0) 44060fee10Skettenis #endif 45060fee10Skettenis 46060fee10Skettenis typedef UINTN EFI_STATUS; 47060fee10Skettenis typedef UINT64 EFI_LBA; 48060fee10Skettenis typedef UINTN EFI_TPL; 49060fee10Skettenis typedef VOID *EFI_HANDLE; 50060fee10Skettenis typedef VOID *EFI_EVENT; 51060fee10Skettenis 52060fee10Skettenis 53060fee10Skettenis // 54060fee10Skettenis // Prototype argument decoration for EFI parameters to indicate 55060fee10Skettenis // their direction 56060fee10Skettenis // 57060fee10Skettenis // IN - argument is passed into the function 58060fee10Skettenis // OUT - argument (pointer) is returned from the function 59060fee10Skettenis // OPTIONAL - argument is optional 60060fee10Skettenis // 61060fee10Skettenis 62060fee10Skettenis #ifndef IN 63060fee10Skettenis #define IN 64060fee10Skettenis #define OUT 65060fee10Skettenis #define OPTIONAL 66060fee10Skettenis #endif 67060fee10Skettenis 68060fee10Skettenis 69060fee10Skettenis // 70060fee10Skettenis // A GUID 71060fee10Skettenis // 72060fee10Skettenis 73060fee10Skettenis typedef struct { 74060fee10Skettenis UINT32 Data1; 75060fee10Skettenis UINT16 Data2; 76060fee10Skettenis UINT16 Data3; 77060fee10Skettenis UINT8 Data4[8]; 78060fee10Skettenis } EFI_GUID; 79060fee10Skettenis 80060fee10Skettenis 81060fee10Skettenis // 82060fee10Skettenis // Time 83060fee10Skettenis // 84060fee10Skettenis 85060fee10Skettenis typedef struct { 86060fee10Skettenis UINT16 Year; // 1998 - 20XX 87060fee10Skettenis UINT8 Month; // 1 - 12 88060fee10Skettenis UINT8 Day; // 1 - 31 89060fee10Skettenis UINT8 Hour; // 0 - 23 90060fee10Skettenis UINT8 Minute; // 0 - 59 91060fee10Skettenis UINT8 Second; // 0 - 59 92060fee10Skettenis UINT8 Pad1; 93060fee10Skettenis UINT32 Nanosecond; // 0 - 999,999,999 94060fee10Skettenis INT16 TimeZone; // -1440 to 1440 or 2047 95060fee10Skettenis UINT8 Daylight; 96060fee10Skettenis UINT8 Pad2; 97060fee10Skettenis } EFI_TIME; 98060fee10Skettenis 99060fee10Skettenis // Bit definitions for EFI_TIME.Daylight 100060fee10Skettenis #define EFI_TIME_ADJUST_DAYLIGHT 0x01 101060fee10Skettenis #define EFI_TIME_IN_DAYLIGHT 0x02 102060fee10Skettenis 103060fee10Skettenis // Value definition for EFI_TIME.TimeZone 104060fee10Skettenis #define EFI_UNSPECIFIED_TIMEZONE 0x07FF 105060fee10Skettenis 106060fee10Skettenis 107060fee10Skettenis 108060fee10Skettenis // 109060fee10Skettenis // Networking 110060fee10Skettenis // 111060fee10Skettenis 112060fee10Skettenis typedef struct { 113060fee10Skettenis UINT8 Addr[4]; 114060fee10Skettenis } EFI_IPv4_ADDRESS; 115060fee10Skettenis 116060fee10Skettenis typedef struct { 117060fee10Skettenis UINT8 Addr[16]; 118060fee10Skettenis } EFI_IPv6_ADDRESS; 119060fee10Skettenis 120060fee10Skettenis typedef struct { 121060fee10Skettenis UINT8 Addr[32]; 122060fee10Skettenis } EFI_MAC_ADDRESS; 123060fee10Skettenis 124060fee10Skettenis // 125060fee10Skettenis // Memory 126060fee10Skettenis // 127060fee10Skettenis 128060fee10Skettenis typedef UINT64 EFI_PHYSICAL_ADDRESS; 129060fee10Skettenis typedef UINT64 EFI_VIRTUAL_ADDRESS; 130060fee10Skettenis 131060fee10Skettenis typedef enum { 132060fee10Skettenis AllocateAnyPages, 133060fee10Skettenis AllocateMaxAddress, 134060fee10Skettenis AllocateAddress, 135060fee10Skettenis MaxAllocateType 136060fee10Skettenis } EFI_ALLOCATE_TYPE; 137060fee10Skettenis 138*9593dc34Smglocker //Preserve the attr on any range supplied. 139060fee10Skettenis //ConventialMemory must have WB,SR,SW when supplied. 140060fee10Skettenis //When allocating from ConventialMemory always make it WB,SR,SW 141060fee10Skettenis //When returning to ConventialMemory always make it WB,SR,SW 142060fee10Skettenis //When getting the memory map, or on RT for runtime types 143060fee10Skettenis 144060fee10Skettenis 145060fee10Skettenis typedef enum { 146060fee10Skettenis EfiReservedMemoryType, 147060fee10Skettenis EfiLoaderCode, 148060fee10Skettenis EfiLoaderData, 149060fee10Skettenis EfiBootServicesCode, 150060fee10Skettenis EfiBootServicesData, 151060fee10Skettenis EfiRuntimeServicesCode, 152060fee10Skettenis EfiRuntimeServicesData, 153060fee10Skettenis EfiConventionalMemory, 154060fee10Skettenis EfiUnusableMemory, 155060fee10Skettenis EfiACPIReclaimMemory, 156060fee10Skettenis EfiACPIMemoryNVS, 157060fee10Skettenis EfiMemoryMappedIO, 158060fee10Skettenis EfiMemoryMappedIOPortSpace, 159060fee10Skettenis EfiPalCode, 160060fee10Skettenis EfiMaxMemoryType 161060fee10Skettenis } EFI_MEMORY_TYPE; 162060fee10Skettenis 163060fee10Skettenis // possible caching types for the memory range 164060fee10Skettenis #define EFI_MEMORY_UC 0x0000000000000001 165060fee10Skettenis #define EFI_MEMORY_WC 0x0000000000000002 166060fee10Skettenis #define EFI_MEMORY_WT 0x0000000000000004 167060fee10Skettenis #define EFI_MEMORY_WB 0x0000000000000008 168060fee10Skettenis #define EFI_MEMORY_UCE 0x0000000000000010 169060fee10Skettenis 170060fee10Skettenis // physical memory protection on range 171060fee10Skettenis #define EFI_MEMORY_WP 0x0000000000001000 172060fee10Skettenis #define EFI_MEMORY_RP 0x0000000000002000 173060fee10Skettenis #define EFI_MEMORY_XP 0x0000000000004000 174060fee10Skettenis 175060fee10Skettenis // range requires a runtime mapping 176060fee10Skettenis #define EFI_MEMORY_RUNTIME 0x8000000000000000 177060fee10Skettenis 178060fee10Skettenis #define EFI_MEMORY_DESCRIPTOR_VERSION 1 179060fee10Skettenis typedef struct { 180060fee10Skettenis UINT32 Type; // Field size is 32 bits followed by 32 bit pad 181060fee10Skettenis UINT32 Pad; 182060fee10Skettenis EFI_PHYSICAL_ADDRESS PhysicalStart; // Field size is 64 bits 183060fee10Skettenis EFI_VIRTUAL_ADDRESS VirtualStart; // Field size is 64 bits 184060fee10Skettenis UINT64 NumberOfPages; // Field size is 64 bits 185060fee10Skettenis UINT64 Attribute; // Field size is 64 bits 186060fee10Skettenis } EFI_MEMORY_DESCRIPTOR; 187060fee10Skettenis 188060fee10Skettenis // 189060fee10Skettenis // International Language 190060fee10Skettenis // 191060fee10Skettenis 192060fee10Skettenis typedef UINT8 ISO_639_2; 193060fee10Skettenis #define ISO_639_2_ENTRY_SIZE 3 194060fee10Skettenis 195060fee10Skettenis // 196060fee10Skettenis // 197060fee10Skettenis // 198060fee10Skettenis 199060fee10Skettenis #define EFI_PAGE_SIZE 4096 200060fee10Skettenis #define EFI_PAGE_MASK 0xFFF 201060fee10Skettenis #define EFI_PAGE_SHIFT 12 202060fee10Skettenis 203060fee10Skettenis #define EFI_SIZE_TO_PAGES(a) \ 204060fee10Skettenis ( ((a) >> EFI_PAGE_SHIFT) + (((a) & EFI_PAGE_MASK) ? 1 : 0) ) 205060fee10Skettenis 206060fee10Skettenis #endif 207