/* $FreeBSD: src/sys/boot/efi/include/efidef.h,v 1.2 2002/05/19 03:17:20 marcel Exp $ */ #ifndef _EFI_DEF_H #define _EFI_DEF_H /*++ Copyright (c) 1998 Intel Corporation Module Name: efidef.h Abstract: EFI definitions Revision History --*/ typedef UINT16 CHAR16; typedef UINT8 CHAR8; typedef UINT8 BOOLEAN; #ifndef TRUE #define TRUE ((BOOLEAN) 1) #define FALSE ((BOOLEAN) 0) #endif #ifndef NULL #define NULL ((VOID *) 0) #endif typedef UINTN EFI_STATUS; typedef UINT64 EFI_LBA; typedef UINTN EFI_TPL; typedef VOID *EFI_HANDLE; typedef VOID *EFI_EVENT; /* * Prototype argument decoration for EFI parameters to indicate * their direction * * IN - argument is passed into the function * OUT - argument (pointer) is returned from the function * OPTIONAL - argument is optional */ #ifndef IN #define IN #define OUT #define OPTIONAL #endif /* * A GUID */ typedef struct { UINT32 Data1; UINT16 Data2; UINT16 Data3; UINT8 Data4[8]; } EFI_GUID; /* * Time */ typedef struct { UINT16 Year; /* 1998 - 20XX */ UINT8 Month; /* 1 - 12 */ UINT8 Day; /* 1 - 31 */ UINT8 Hour; /* 0 - 23 */ UINT8 Minute; /* 0 - 59 */ UINT8 Second; /* 0 - 59 */ UINT8 Pad1; UINT32 Nanosecond; /* 0 - 999,999,999 */ INT16 TimeZone; /* -1440 to 1440 or 2047 */ UINT8 Daylight; UINT8 Pad2; } EFI_TIME; /* Bit definitions for EFI_TIME.Daylight */ #define EFI_TIME_ADJUST_DAYLIGHT 0x01 #define EFI_TIME_IN_DAYLIGHT 0x02 /* Value definition for EFI_TIME.TimeZone */ #define EFI_UNSPECIFIED_TIMEZONE 0x07FF /* * Networking */ typedef struct { UINT8 Addr[4]; } EFI_IPv4_ADDRESS; typedef struct { UINT8 Addr[16]; } EFI_IPv6_ADDRESS; typedef struct { UINT8 Addr[32]; } EFI_MAC_ADDRESS; /* * Memory */ typedef UINT64 EFI_PHYSICAL_ADDRESS; typedef UINT64 EFI_VIRTUAL_ADDRESS; typedef enum { AllocateAnyPages, AllocateMaxAddress, AllocateAddress, MaxAllocateType } EFI_ALLOCATE_TYPE; /* * Preseve the attr on any range supplied. * ConventialMemory must have WB,SR,SW when supplied. * When allocating from ConventialMemory always make it WB,SR,SW * When returning to ConventialMemory always make it WB,SR,SW * When getting the memory map, or on RT for runtime types */ typedef enum { EfiReservedMemoryType, EfiLoaderCode, EfiLoaderData, EfiBootServicesCode, EfiBootServicesData, EfiRuntimeServicesCode, EfiRuntimeServicesData, EfiConventionalMemory, EfiUnusableMemory, EfiACPIReclaimMemory, EfiACPIMemoryNVS, EfiMemoryMappedIO, EfiMemoryMappedIOPortSpace, EfiPalCode, EfiMaxMemoryType } EFI_MEMORY_TYPE; /* possible caching types for the memory range */ #define EFI_MEMORY_UC 0x0000000000000001 #define EFI_MEMORY_WC 0x0000000000000002 #define EFI_MEMORY_WT 0x0000000000000004 #define EFI_MEMORY_WB 0x0000000000000008 #define EFI_MEMORY_UCE 0x0000000000000010 /* physical memory protection on range */ #define EFI_MEMORY_WP 0x0000000000001000 #define EFI_MEMORY_RP 0x0000000000002000 #define EFI_MEMORY_XP 0x0000000000004000 /* range requires a runtime mapping */ #define EFI_MEMORY_RUNTIME 0x8000000000000000 #define EFI_MEMORY_DESCRIPTOR_VERSION 1 typedef struct { UINT32 Type; /* 32 bit padding */ EFI_PHYSICAL_ADDRESS PhysicalStart; EFI_VIRTUAL_ADDRESS VirtualStart; UINT64 NumberOfPages; UINT64 Attribute; } EFI_MEMORY_DESCRIPTOR; /* * International Language */ typedef UINT8 ISO_639_2; #define ISO_639_2_ENTRY_SIZE 3 #define EFI_PAGE_SIZE 4096 #define EFI_PAGE_MASK 0xFFF #define EFI_PAGE_SHIFT 12 #define EFI_SIZE_TO_PAGES(a) \ ( ((a) >> EFI_PAGE_SHIFT) + ((a) & EFI_PAGE_MASK ? 1 : 0) ) #endif