/*++ Copyright (c) 2024, Quinn Stephens. Provided under the BSD 3-Clause license. Module Name: efidef.h Abstract: Provides basic EFI type/structure definitions. --*/ #ifndef _EFIDEF_H #define _EFIDEF_H #ifndef VOID #define VOID void #endif #ifndef CONST #define CONST const #endif #ifndef NULL #if defined(__cplusplus) #define NULL 0 #else #define NULL ((VOID *) 0) #endif #endif #if defined(__cplusplus) typedef bool BOOLEAN; #else typedef UINT8 BOOLEAN; #endif #ifndef TRUE #if defined(__cplusplus) typedef bool BOOLEAN; #define TRUE true #define FALSE false #else typedef UINT8 BOOLEAN; #define TRUE ((BOOLEAN) 1) #define FALSE ((BOOLEAN) 0) #endif #endif typedef UINT16 CHAR16; typedef UINT8 CHAR8; typedef UINTN EFI_STATUS; typedef UINT64 EFI_LBA; typedef UINTN EFI_TPL; typedef VOID *EFI_HANDLE; typedef VOID *EFI_EVENT; /* * Decorators to show parameter direction. * * IN - argument passed into routine. * OUT - argument pointer returned by routine. * OPTIONAL - argument is not required. */ #ifndef IN #define IN #define OUT #define OPTIONAL #endif /* * Globally Unique IDentifier. */ typedef struct { UINT32 Data1; UINT16 Data2; UINT16 Data3; UINT8 Data4[8]; } EFI_GUID; /* * Time definitons. */ typedef struct { UINT16 Year; UINT8 Month; UINT8 Day; UINT8 Hour; UINT8 Minute; UINT8 Second; UINT8 Pad1; UINT32 Nanosecond; INT16 Timezone; UINT8 Daylight; UINT8 Pad2; } EFI_TIME; /* For EFI_TIME.Daylight */ #define EFI_TIME_ADJUST_DAYLIGHT 0x01 #define EFI_TIME_IN_DAYLIGHT 0x02 /* For EFI_TIME.TimeZone */ #define EFI_UNSPECIFIED_TIMEZONE 0x07FF /* * Networking definitions. */ 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 definitions. */ typedef UINT64 EFI_PHYSICAL_ADDRESS; typedef UINT64 EFI_VIRTUAL_ADDRESS; typedef enum { AllocateAnyPages, AllocateMaxAddress, AllocateAddress, MaxAllocateType } EFI_ALLOCATE_TYPE; typedef enum { EfiReservedMemoryType, EfiLoaderCode, EfiLoaderData, EfiBootServicesCode, EfiBootServicesData, EfiRuntimeServicesCode, EfiRuntimeServicesData, EfiConventionalMemory, EfiUnusableMemory, EfiACPIReclaimMemory, EfiACPIMemoryNVS, EfiMemoryMappedIO, EfiMemoryMappedIOPortSpace, EfiPalCode, EfiPersistentMemory, EfiUnacceptedMemoryType, EfiMaxMemoryType } EFI_MEMORY_TYPE; /* Memory range caching types */ #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 /* Memory range protection flags */ #define EFI_MEMORY_WP 0x0000000000001000 #define EFI_MEMORY_RP 0x0000000000002000 #define EFI_MEMORY_XP 0x0000000000004000 #define EFI_MEMORY_RO 0x0000000000020000 /* Memory type runtime mapping flags */ #define EFI_MEMORY_NV 0x0000000000008000 #define EFI_MEMORY_RUNTIME 0x8000000000000000 #define EFI_MEMORY_DESCRIPTOR_VERSION 1 typedef struct { UINT32 Type; UINT32 Pad; EFI_PHYSICAL_ADDRESS PhysicalStart; EFI_VIRTUAL_ADDRESS VirtualStart; UINT64 NumberOfPages; UINT64 Attribute; } EFI_MEMORY_DESCRIPTOR; #define EFI_PAGE_SIZE 4096 #define EFI_PAGE_MASK 0xFFF #define EFI_PAGE_SHIFT 12 #define EFI_SIZE_TO_PAGES(s) (((s) >> EFI_PAGE_SHIFT) + ((s) & EFI_PAGE_MASK ? 1 : 0)) #endif