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