efi.h revision 1.1
11.1Sjmcneill/* $NetBSD: efi.h,v 1.1 2018/10/28 10:21:42 jmcneill Exp $ */ 21.1Sjmcneill 31.1Sjmcneill/*- 41.1Sjmcneill * Copyright (c) 2004 Marcel Moolenaar 51.1Sjmcneill * All rights reserved. 61.1Sjmcneill * 71.1Sjmcneill * Redistribution and use in source and binary forms, with or without 81.1Sjmcneill * modification, are permitted provided that the following conditions 91.1Sjmcneill * are met: 101.1Sjmcneill * 111.1Sjmcneill * 1. Redistributions of source code must retain the above copyright 121.1Sjmcneill * notice, this list of conditions and the following disclaimer. 131.1Sjmcneill * 2. Redistributions in binary form must reproduce the above copyright 141.1Sjmcneill * notice, this list of conditions and the following disclaimer in the 151.1Sjmcneill * documentation and/or other materials provided with the distribution. 161.1Sjmcneill * 171.1Sjmcneill * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 181.1Sjmcneill * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 191.1Sjmcneill * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 201.1Sjmcneill * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 211.1Sjmcneill * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 221.1Sjmcneill * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 231.1Sjmcneill * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 241.1Sjmcneill * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 251.1Sjmcneill * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 261.1Sjmcneill * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 271.1Sjmcneill * 281.1Sjmcneill * $FreeBSD$ 291.1Sjmcneill */ 301.1Sjmcneill 311.1Sjmcneill/* 321.1Sjmcneill * This file is mainly x86/include/efi.h, which in turn is mainly 331.1Sjmcneill * ia64/include/efi.h with little modifications. 341.1Sjmcneill */ 351.1Sjmcneill 361.1Sjmcneill#ifndef _ARM_EFI_H_ 371.1Sjmcneill#define _ARM_EFI_H_ 381.1Sjmcneill 391.1Sjmcneill#include <sys/uuid.h> 401.1Sjmcneill 411.1Sjmcneill#define EFI_PAGE_SHIFT 12 421.1Sjmcneill#define EFI_PAGE_SIZE (1 << EFI_PAGE_SHIFT) 431.1Sjmcneill#define EFI_PAGE_MASK (EFI_PAGE_SIZE - 1) 441.1Sjmcneill 451.1Sjmcneill#define EFI_TABLE_ACPI20 \ 461.1Sjmcneill {0x8868e871,0xe4f1,0x11d3,0xbc,0x22,{0x00,0x80,0xc7,0x3c,0x88,0x81}} 471.1Sjmcneill#define EFI_TABLE_ACPI10 \ 481.1Sjmcneill {0xeb9d2d30,0x2d88,0x11d3,0x9a,0x16,{0x00,0x90,0x27,0x3f,0xc1,0x4d}} 491.1Sjmcneill#define EFI_TABLE_SMBIOS \ 501.1Sjmcneill {0xeb9d2d31,0x2d88,0x11d3,0x9a,0x16,{0x00,0x90,0x27,0x3f,0xc1,0x4d}} 511.1Sjmcneill#define EFI_TABLE_SMBIOS3 \ 521.1Sjmcneill {0xf2fd1544,0x9794,0x4a2c,0x99,0x2e,{0xe5,0xbb,0xcf,0x20,0xe3,0x94}} 531.1Sjmcneill 541.1Sjmcneillextern const struct uuid EFI_UUID_ACPI20; 551.1Sjmcneillextern const struct uuid EFI_UUID_ACPI10; 561.1Sjmcneillextern const struct uuid EFI_UUID_SMBIOS; 571.1Sjmcneillextern const struct uuid EFI_UUID_SMBIOS3; 581.1Sjmcneill 591.1Sjmcneillextern bool bootmethod_efi; 601.1Sjmcneill 611.1Sjmcneillenum efi_reset { 621.1Sjmcneill EFI_RESET_COLD, 631.1Sjmcneill EFI_RESET_WARM, 641.1Sjmcneill EFI_RESET_SHUTDOWN, 651.1Sjmcneill EFI_RESET_PLATFORM_SPECIFIC, 661.1Sjmcneill}; 671.1Sjmcneill 681.1Sjmcneilltypedef uint16_t efi_char; 691.1Sjmcneilltypedef unsigned long efi_status; 701.1Sjmcneill 711.1Sjmcneillstruct efi_cfgtbl { 721.1Sjmcneill struct uuid ct_uuid; 731.1Sjmcneill void *ct_data; 741.1Sjmcneill}; 751.1Sjmcneill 761.1Sjmcneillstruct efi_md { 771.1Sjmcneill uint32_t md_type; 781.1Sjmcneill#define EFI_MD_TYPE_NULL 0 791.1Sjmcneill#define EFI_MD_TYPE_CODE 1 /* Loader text. */ 801.1Sjmcneill#define EFI_MD_TYPE_DATA 2 /* Loader data. */ 811.1Sjmcneill#define EFI_MD_TYPE_BS_CODE 3 /* Boot services text. */ 821.1Sjmcneill#define EFI_MD_TYPE_BS_DATA 4 /* Boot services data. */ 831.1Sjmcneill#define EFI_MD_TYPE_RT_CODE 5 /* Runtime services text. */ 841.1Sjmcneill#define EFI_MD_TYPE_RT_DATA 6 /* Runtime services data. */ 851.1Sjmcneill#define EFI_MD_TYPE_FREE 7 /* Unused/free memory. */ 861.1Sjmcneill#define EFI_MD_TYPE_BAD 8 /* Bad memory */ 871.1Sjmcneill#define EFI_MD_TYPE_RECLAIM 9 /* ACPI reclaimable memory. */ 881.1Sjmcneill#define EFI_MD_TYPE_FIRMWARE 10 /* ACPI NV memory */ 891.1Sjmcneill#define EFI_MD_TYPE_IOMEM 11 /* Memory-mapped I/O. */ 901.1Sjmcneill#define EFI_MD_TYPE_IOPORT 12 /* I/O port space. */ 911.1Sjmcneill#define EFI_MD_TYPE_PALCODE 13 /* PAL */ 921.1Sjmcneill#define EFI_MD_TYPE_PMEM 14 /* Persistent memory. */ 931.1Sjmcneill uint32_t __pad; 941.1Sjmcneill uint64_t md_phys; 951.1Sjmcneill uint64_t md_virt; 961.1Sjmcneill uint64_t md_pages; 971.1Sjmcneill uint64_t md_attr; 981.1Sjmcneill#define EFI_MD_ATTR_UC 0x0000000000000001UL 991.1Sjmcneill#define EFI_MD_ATTR_WC 0x0000000000000002UL 1001.1Sjmcneill#define EFI_MD_ATTR_WT 0x0000000000000004UL 1011.1Sjmcneill#define EFI_MD_ATTR_WB 0x0000000000000008UL 1021.1Sjmcneill#define EFI_MD_ATTR_UCE 0x0000000000000010UL 1031.1Sjmcneill#define EFI_MD_ATTR_WP 0x0000000000001000UL 1041.1Sjmcneill#define EFI_MD_ATTR_RP 0x0000000000002000UL 1051.1Sjmcneill#define EFI_MD_ATTR_XP 0x0000000000004000UL 1061.1Sjmcneill#define EFI_MD_ATTR_RT 0x8000000000000000UL 1071.1Sjmcneill}; 1081.1Sjmcneill 1091.1Sjmcneillstruct efi_tm { 1101.1Sjmcneill uint16_t tm_year; /* 1998 - 20XX */ 1111.1Sjmcneill uint8_t tm_mon; /* 1 - 12 */ 1121.1Sjmcneill uint8_t tm_mday; /* 1 - 31 */ 1131.1Sjmcneill uint8_t tm_hour; /* 0 - 23 */ 1141.1Sjmcneill uint8_t tm_min; /* 0 - 59 */ 1151.1Sjmcneill uint8_t tm_sec; /* 0 - 59 */ 1161.1Sjmcneill uint8_t __pad1; 1171.1Sjmcneill uint32_t tm_nsec; /* 0 - 999,999,999 */ 1181.1Sjmcneill int16_t tm_tz; /* -1440 to 1440 or 2047 */ 1191.1Sjmcneill uint8_t tm_dst; 1201.1Sjmcneill uint8_t __pad2; 1211.1Sjmcneill}; 1221.1Sjmcneill 1231.1Sjmcneillstruct efi_tmcap { 1241.1Sjmcneill uint32_t tc_res; /* 1e-6 parts per million */ 1251.1Sjmcneill uint32_t tc_prec; /* hertz */ 1261.1Sjmcneill uint8_t tc_stz; /* Set clears sub-second time */ 1271.1Sjmcneill}; 1281.1Sjmcneill 1291.1Sjmcneillstruct efi_tblhdr { 1301.1Sjmcneill uint64_t th_sig; 1311.1Sjmcneill uint32_t th_rev; 1321.1Sjmcneill uint32_t th_hdrsz; 1331.1Sjmcneill uint32_t th_crc32; 1341.1Sjmcneill uint32_t __res; 1351.1Sjmcneill}; 1361.1Sjmcneill 1371.1Sjmcneillstruct efi_rt { 1381.1Sjmcneill struct efi_tblhdr rt_hdr; 1391.1Sjmcneill efi_status (*rt_gettime)(struct efi_tm *, struct efi_tmcap *); 1401.1Sjmcneill efi_status (*rt_settime)(struct efi_tm *); 1411.1Sjmcneill efi_status (*rt_getwaketime)(uint8_t *, uint8_t *, 1421.1Sjmcneill struct efi_tm *); 1431.1Sjmcneill efi_status (*rt_setwaketime)(uint8_t, struct efi_tm *); 1441.1Sjmcneill efi_status (*rt_setvirtual)(u_long, u_long, uint32_t, 1451.1Sjmcneill struct efi_md *); 1461.1Sjmcneill efi_status (*rt_cvtptr)(u_long, void **); 1471.1Sjmcneill efi_status (*rt_getvar)(efi_char *, struct uuid *, uint32_t *, 1481.1Sjmcneill u_long *, void *); 1491.1Sjmcneill efi_status (*rt_scanvar)(u_long *, efi_char *, struct uuid *); 1501.1Sjmcneill efi_status (*rt_setvar)(efi_char *, struct uuid *, uint32_t, 1511.1Sjmcneill u_long, void *); 1521.1Sjmcneill efi_status (*rt_gethicnt)(uint32_t *); 1531.1Sjmcneill efi_status (*rt_reset)(enum efi_reset, efi_status, u_long, 1541.1Sjmcneill efi_char *); 1551.1Sjmcneill}; 1561.1Sjmcneill 1571.1Sjmcneillstruct efi_systbl { 1581.1Sjmcneill struct efi_tblhdr st_hdr; 1591.1Sjmcneill#define EFI_SYSTBL_SIG 0x5453595320494249UL 1601.1Sjmcneill efi_char *st_fwvendor; 1611.1Sjmcneill uint32_t st_fwrev; 1621.1Sjmcneill void *st_cin; 1631.1Sjmcneill void *st_cinif; 1641.1Sjmcneill void *st_cout; 1651.1Sjmcneill void *st_coutif; 1661.1Sjmcneill void *st_cerr; 1671.1Sjmcneill void *st_cerrif; 1681.1Sjmcneill struct efi_rt *st_rt; 1691.1Sjmcneill void *st_bs; 1701.1Sjmcneill u_long st_entries; 1711.1Sjmcneill struct efi_cfgtbl *st_cfgtbl; 1721.1Sjmcneill}; 1731.1Sjmcneill 1741.1Sjmcneill#endif /* _ARM_EFI_H_ */ 175