xref: /illumos-gate/usr/src/uts/common/sys/efi.h (revision 051bd850)
141f1e5ceSToomas Soome /*
241f1e5ceSToomas Soome  * This file and its contents are supplied under the terms of the
341f1e5ceSToomas Soome  * Common Development and Distribution License ("CDDL"), version 1.0.
441f1e5ceSToomas Soome  * You may only use this file in accordance with the terms of version
541f1e5ceSToomas Soome  * 1.0 of the CDDL.
641f1e5ceSToomas Soome  *
741f1e5ceSToomas Soome  * A full copy of the text of the CDDL should have accompanied this
841f1e5ceSToomas Soome  * source.  A copy of the CDDL is also available via the Internet at
941f1e5ceSToomas Soome  * http://www.illumos.org/license/CDDL.
1041f1e5ceSToomas Soome  */
1141f1e5ceSToomas Soome 
1241f1e5ceSToomas Soome /*
1341f1e5ceSToomas Soome  * Copyright 2016 Toomas Soome <tsoome@me.com>
1441f1e5ceSToomas Soome  */
1541f1e5ceSToomas Soome 
1641f1e5ceSToomas Soome #ifndef _SYS_EFI_H
1741f1e5ceSToomas Soome #define	_SYS_EFI_H
1841f1e5ceSToomas Soome 
1941f1e5ceSToomas Soome /*
2041f1e5ceSToomas Soome  * UEFI related data. Based on UEFI 2.5 specs.
2141f1e5ceSToomas Soome  */
2241f1e5ceSToomas Soome #include <sys/uuid.h>
2341f1e5ceSToomas Soome 
2441f1e5ceSToomas Soome #ifdef __cplusplus
2541f1e5ceSToomas Soome extern "C" {
2641f1e5ceSToomas Soome #endif
2741f1e5ceSToomas Soome 
2841f1e5ceSToomas Soome /* EFI GUIDS */
2941f1e5ceSToomas Soome 
3041f1e5ceSToomas Soome #define	EFI_GLOBAL_VARIABLE	\
3141f1e5ceSToomas Soome 	{ 0x8be4df61, 0x93ca, 0x11d2, 0xaa, 0x0d, \
3241f1e5ceSToomas Soome 	{ 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c } }
3341f1e5ceSToomas Soome 
3441f1e5ceSToomas Soome #define	MPS_TABLE_GUID	\
3541f1e5ceSToomas Soome 	{ 0xeb9d2d2f, 0x2d88, 0x11d3, 0x9a, 0x16, \
3641f1e5ceSToomas Soome 	{ 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d } }
3741f1e5ceSToomas Soome 
3841f1e5ceSToomas Soome #define	ACPI_10_TABLE_GUID	\
3941f1e5ceSToomas Soome 	{ 0xeb9d2d30, 0x2d88, 0x11d3, 0x9a, 0x16, \
4041f1e5ceSToomas Soome 	{ 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d } }
4141f1e5ceSToomas Soome 
4241f1e5ceSToomas Soome #define	EFI_ACPI_TABLE_GUID	\
4341f1e5ceSToomas Soome 	{ 0x8868e871, 0xe4f1, 0x11d3, 0xbc, 0x22, \
4441f1e5ceSToomas Soome 	{ 0x00, 0x80, 0xc7, 0x3c, 0x88, 0x81 } }
4541f1e5ceSToomas Soome 
4641f1e5ceSToomas Soome #define	SMBIOS_TABLE_GUID	\
4741f1e5ceSToomas Soome 	{ 0xeb9d2d31, 0x2d88, 0x11d3, 0x9a, 0x16, \
4841f1e5ceSToomas Soome 	{ 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d } }
4941f1e5ceSToomas Soome 
5041f1e5ceSToomas Soome #define	SAL_SYSTEM_TABLE_GUID	\
5141f1e5ceSToomas Soome 	{ 0xeb9d2d32, 0x2d88, 0x11d3, 0x9a, 0x16, \
5241f1e5ceSToomas Soome 	{ 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d } }
5341f1e5ceSToomas Soome 
5441f1e5ceSToomas Soome #define	SMBIOS3_TABLE_GUID	\
5541f1e5ceSToomas Soome 	{ 0xf2fd1544, 0x9794, 0x4a2c, 0x99, 0x2e, \
5641f1e5ceSToomas Soome 	{ 0xe5, 0xbb, 0xcf, 0x20, 0xe3, 0x94 } }
5741f1e5ceSToomas Soome 
5841f1e5ceSToomas Soome #define	FDT_TABLE_GUID	\
5941f1e5ceSToomas Soome 	{ 0xb1b621d5, 0xf19c, 0x41a5, 0x83, 0x0b, \
6041f1e5ceSToomas Soome 	{ 0xd9, 0x15, 0x2c, 0x69, 0xaa, 0xe0 } }
6141f1e5ceSToomas Soome 
6241f1e5ceSToomas Soome #define	DXE_SERVICES_TABLE_GUID	\
6341f1e5ceSToomas Soome 	{ 0x5ad34ba, 0x6f02, 0x4214, 0x95, 0x2e, \
6441f1e5ceSToomas Soome 	{ 0x4d, 0xa0, 0x39, 0x8e, 0x2b, 0xb9 } }
6541f1e5ceSToomas Soome 
6641f1e5ceSToomas Soome #define	HOB_LIST_TABLE_GUID	\
6741f1e5ceSToomas Soome 	{ 0x7739f24c, 0x93d7, 0x11d4, 0x9a, 0x3a, \
6841f1e5ceSToomas Soome 	{ 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d } }
6941f1e5ceSToomas Soome 
7041f1e5ceSToomas Soome #define	MEMORY_TYPE_INFORMATION_TABLE_GUID	\
7141f1e5ceSToomas Soome 	{ 0x4c19049f, 0x4137, 0x4dd3, 0x9c, 0x10, \
7241f1e5ceSToomas Soome 	{ 0x8b, 0x97, 0xa8, 0x3f, 0xfd, 0xfa } }
7341f1e5ceSToomas Soome 
7441f1e5ceSToomas Soome #define	DEBUG_IMAGE_INFO_TABLE_GUID	\
7541f1e5ceSToomas Soome 	{ 0x49152e77, 0x1ada, 0x4764, 0xb7, 0xa2, \
7641f1e5ceSToomas Soome 	{ 0x7a, 0xfe, 0xfe, 0xd9, 0x5e, 0x8b } }
7741f1e5ceSToomas Soome 
7841f1e5ceSToomas Soome #define	EFI_PROPERTIES_TABLE_GUID	\
7941f1e5ceSToomas Soome 	{ 0x880aaca3, 0x4adc, 0x4a04, 0x90, 0x79, \
8041f1e5ceSToomas Soome 	{ 0xb7, 0x47, 0x34, 0x8, 0x25, 0xe5 } }
8141f1e5ceSToomas Soome 
8241f1e5ceSToomas Soome typedef struct uuid efi_guid_t __aligned(8);
8341f1e5ceSToomas Soome 
8441f1e5ceSToomas Soome /* Memory data */
8541f1e5ceSToomas Soome typedef uint64_t	EFI_PHYSICAL_ADDRESS;
8641f1e5ceSToomas Soome typedef uint64_t	EFI_VIRTUAL_ADDRESS;
8741f1e5ceSToomas Soome 
8841f1e5ceSToomas Soome /*
8941f1e5ceSToomas Soome  * EFI_MEMORY_TYPE enum is defined in UEFI v2.7 page 185.
9041f1e5ceSToomas Soome  */
9141f1e5ceSToomas Soome typedef enum {
9241f1e5ceSToomas Soome 	EfiReservedMemoryType,
9341f1e5ceSToomas Soome 	EfiLoaderCode,
9441f1e5ceSToomas Soome 	EfiLoaderData,
9541f1e5ceSToomas Soome 	EfiBootServicesCode,
9641f1e5ceSToomas Soome 	EfiBootServicesData,
9741f1e5ceSToomas Soome 	EfiRuntimeServicesCode,
9841f1e5ceSToomas Soome 	EfiRuntimeServicesData,
9941f1e5ceSToomas Soome 	EfiConventionalMemory,
10041f1e5ceSToomas Soome 	EfiUnusableMemory,
10141f1e5ceSToomas Soome 	EfiACPIReclaimMemory,
10241f1e5ceSToomas Soome 	EfiACPIMemoryNVS,
10341f1e5ceSToomas Soome 	EfiMemoryMappedIO,
10441f1e5ceSToomas Soome 	EfiMemoryMappedIOPortSpace,
10541f1e5ceSToomas Soome 	EfiPalCode,
10641f1e5ceSToomas Soome 	EfiPersistentMemory,
10741f1e5ceSToomas Soome 	EfiMaxMemoryType
10841f1e5ceSToomas Soome } EFI_MEMORY_TYPE;
10941f1e5ceSToomas Soome 
11041f1e5ceSToomas Soome /* Possible caching types for the memory range */
11141f1e5ceSToomas Soome #define	EFI_MEMORY_UC			0x0000000000000001
11241f1e5ceSToomas Soome #define	EFI_MEMORY_WC			0x0000000000000002
11341f1e5ceSToomas Soome #define	EFI_MEMORY_WT			0x0000000000000004
11441f1e5ceSToomas Soome #define	EFI_MEMORY_WB			0x0000000000000008
11541f1e5ceSToomas Soome #define	EFI_MEMORY_UCE			0x0000000000000010
11641f1e5ceSToomas Soome 
11741f1e5ceSToomas Soome /* Physical memory protection on range */
11841f1e5ceSToomas Soome #define	EFI_MEMORY_WP			0x0000000000001000
11941f1e5ceSToomas Soome #define	EFI_MEMORY_RP			0x0000000000002000
12041f1e5ceSToomas Soome #define	EFI_MEMORY_XP			0x0000000000004000
12141f1e5ceSToomas Soome #define	EFI_MEMORY_NV			0x0000000000008000
12241f1e5ceSToomas Soome #define	EFI_MEMORY_MORE_RELIABLE	0x0000000000010000
12341f1e5ceSToomas Soome #define	EFI_MEMORY_RO			0x0000000000020000
12441f1e5ceSToomas Soome 
12541f1e5ceSToomas Soome /* Range requires a runtime mapping */
12641f1e5ceSToomas Soome #define	EFI_MEMORY_RUNTIME	0x8000000000000000
12741f1e5ceSToomas Soome 
12841f1e5ceSToomas Soome #define	EFI_MEMORY_DESCRIPTOR_VERSION	1
12941f1e5ceSToomas Soome typedef struct {
13041f1e5ceSToomas Soome 	uint32_t		Type;
13141f1e5ceSToomas Soome 	uint32_t		Pad;
132*051bd850SToomas Soome 	EFI_PHYSICAL_ADDRESS	PhysicalStart;
13341f1e5ceSToomas Soome 	EFI_VIRTUAL_ADDRESS	VirtualStart;
13441f1e5ceSToomas Soome 	uint64_t		NumberOfPages;
13541f1e5ceSToomas Soome 	uint64_t		Attribute;
13641f1e5ceSToomas Soome } __packed EFI_MEMORY_DESCRIPTOR;
13741f1e5ceSToomas Soome 
13841f1e5ceSToomas Soome /* Tables */
13941f1e5ceSToomas Soome 
14041f1e5ceSToomas Soome typedef struct {
14141f1e5ceSToomas Soome 	uint64_t Signature;
14241f1e5ceSToomas Soome 	uint32_t Revision;
14341f1e5ceSToomas Soome 	uint32_t HeaderSize;
14441f1e5ceSToomas Soome 	uint32_t CRC32;
14541f1e5ceSToomas Soome 	uint32_t Reserved;
14641f1e5ceSToomas Soome } EFI_TABLE_HEADER;
14741f1e5ceSToomas Soome 
14841f1e5ceSToomas Soome /*
14941f1e5ceSToomas Soome  * The upper 16 bits of the revision contain the major revision value,
15041f1e5ceSToomas Soome  * and the lower 16 bits contain the minor revision value. The minor revision
15141f1e5ceSToomas Soome  * values are binary coded decimals and are limited to the range of 00..99.
15241f1e5ceSToomas Soome  * If the lower digit of the minor revision is 0, the version is printed as:
15341f1e5ceSToomas Soome  * major.minor upper decimal
15441f1e5ceSToomas Soome  * Otherwise the version is printed as:
15541f1e5ceSToomas Soome  * major.minor upper decimal.minor lower decimal
15641f1e5ceSToomas Soome  */
15741f1e5ceSToomas Soome #define	EFI_REV(x, y)		(((x) << 16) || (y))
15841f1e5ceSToomas Soome #define	EFI_REV_MAJOR(x)	(((x) >> 16) & 0xffff)
15941f1e5ceSToomas Soome #define	EFI_REV_MINOR(x)	((x) & 0xffff)
16041f1e5ceSToomas Soome #define	EFI_SYSTEM_TABLE_SIGNATURE	0x5453595320494249
16141f1e5ceSToomas Soome 
16241f1e5ceSToomas Soome typedef uint32_t	efiptr32_t;
16341f1e5ceSToomas Soome typedef uint64_t	efiptr64_t;
16441f1e5ceSToomas Soome 
16541f1e5ceSToomas Soome typedef struct _EFI_CONFIGURATION_TABLE32 {
16641f1e5ceSToomas Soome 	efi_guid_t	VendorGuid;
16741f1e5ceSToomas Soome 	efiptr32_t	VendorTable;
16841f1e5ceSToomas Soome } __packed EFI_CONFIGURATION_TABLE32;
16941f1e5ceSToomas Soome 
17041f1e5ceSToomas Soome typedef struct _EFI_CONFIGURATION_TABLE64 {
17141f1e5ceSToomas Soome 	efi_guid_t	VendorGuid;
17241f1e5ceSToomas Soome 	efiptr64_t	VendorTable;
17341f1e5ceSToomas Soome } __packed EFI_CONFIGURATION_TABLE64;
17441f1e5ceSToomas Soome 
17541f1e5ceSToomas Soome typedef struct _EFI_SYSTEM_TABLE32 {
17641f1e5ceSToomas Soome 	EFI_TABLE_HEADER	Hdr;
17741f1e5ceSToomas Soome 
17841f1e5ceSToomas Soome 	efiptr32_t		FirmwareVendor;
17941f1e5ceSToomas Soome 	uint32_t		FirmwareRevision;
18041f1e5ceSToomas Soome 
18141f1e5ceSToomas Soome 	efiptr32_t		ConsoleInHandle;
18241f1e5ceSToomas Soome 	efiptr32_t		ConIn;
18341f1e5ceSToomas Soome 
18441f1e5ceSToomas Soome 	efiptr32_t		ConsoleOutHandle;
18541f1e5ceSToomas Soome 	efiptr32_t		ConOut;
18641f1e5ceSToomas Soome 
18741f1e5ceSToomas Soome 	efiptr32_t		StandardErrorHandle;
18841f1e5ceSToomas Soome 	efiptr32_t		StdErr;
18941f1e5ceSToomas Soome 
19041f1e5ceSToomas Soome 	efiptr32_t		RuntimeServices;
19141f1e5ceSToomas Soome 	efiptr32_t		BootServices;
19241f1e5ceSToomas Soome 
19341f1e5ceSToomas Soome 	uint32_t		NumberOfTableEntries;
19441f1e5ceSToomas Soome 	efiptr32_t		ConfigurationTable;
19541f1e5ceSToomas Soome } __packed EFI_SYSTEM_TABLE32;
19641f1e5ceSToomas Soome 
19741f1e5ceSToomas Soome typedef struct _EFI_SYSTEM_TABLE64 {
19841f1e5ceSToomas Soome 	EFI_TABLE_HEADER	Hdr;
19941f1e5ceSToomas Soome 
20041f1e5ceSToomas Soome 	efiptr64_t		FirmwareVendor;
20141f1e5ceSToomas Soome 	uint32_t		FirmwareRevision;
20241f1e5ceSToomas Soome 	uint32_t		Pad;
20341f1e5ceSToomas Soome 
20441f1e5ceSToomas Soome 	efiptr64_t		ConsoleInHandle;
20541f1e5ceSToomas Soome 	efiptr64_t		ConIn;
20641f1e5ceSToomas Soome 
20741f1e5ceSToomas Soome 	efiptr64_t		ConsoleOutHandle;
20841f1e5ceSToomas Soome 	efiptr64_t		ConOut;
20941f1e5ceSToomas Soome 
21041f1e5ceSToomas Soome 	efiptr64_t		StandardErrorHandle;
21141f1e5ceSToomas Soome 	efiptr64_t		StdErr;
21241f1e5ceSToomas Soome 
21341f1e5ceSToomas Soome 	efiptr64_t		RuntimeServices;
21441f1e5ceSToomas Soome 	efiptr64_t		BootServices;
21541f1e5ceSToomas Soome 
21641f1e5ceSToomas Soome 	uint64_t		NumberOfTableEntries;
21741f1e5ceSToomas Soome 	efiptr64_t		ConfigurationTable;
21841f1e5ceSToomas Soome } __packed EFI_SYSTEM_TABLE64;
21941f1e5ceSToomas Soome 
22041f1e5ceSToomas Soome #ifdef __cplusplus
22141f1e5ceSToomas Soome }
22241f1e5ceSToomas Soome #endif
22341f1e5ceSToomas Soome 
22441f1e5ceSToomas Soome #endif /* _SYS_EFI_H */
225