freebsd-dev/sys/boot/efi/include/efidef.h

194 lines
4.0 KiB
C
Raw Normal View History

/* $FreeBSD$ */
#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