197 lines
3.5 KiB
C
197 lines
3.5 KiB
C
/*++
|
|
|
|
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
|