]> git.proxmox.com Git - mirror_edk2.git/blame - StdLib/Include/Ipf/machine/efi.h
Standard Libraries for EDK II.
[mirror_edk2.git] / StdLib / Include / Ipf / machine / efi.h
CommitLineData
2aa62f2b 1/* $NetBSD: efi.h,v 1.1 2006/04/07 14:21:18 cherry Exp $ */\r
2\r
3/*-\r
4 * Copyright (c) 2004 Marcel Moolenaar\r
5 * All rights reserved.\r
6 *\r
7 * Redistribution and use in source and binary forms, with or without\r
8 * modification, are permitted provided that the following conditions\r
9 * are met:\r
10 *\r
11 * 1. Redistributions of source code must retain the above copyright\r
12 * notice, this list of conditions and the following disclaimer.\r
13 * 2. Redistributions in binary form must reproduce the above copyright\r
14 * notice, this list of conditions and the following disclaimer in the\r
15 * documentation and/or other materials provided with the distribution.\r
16 *\r
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\r
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\r
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\r
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\r
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
27 *\r
28 * $FreeBSD$\r
29 */\r
30\r
31#ifndef _MACHINE_EFI_H_\r
32#define _MACHINE_EFI_H_\r
33\r
34#include <sys/uuid.h>\r
35\r
36#define EFI_PAGE_SHIFT 12\r
37#define EFI_PAGE_SIZE (1 << EFI_PAGE_SHIFT)\r
38#define EFI_PAGE_MASK (EFI_PAGE_SIZE - 1)\r
39\r
40#define EFI_TABLE_ACPI20 \\r
41 {0x8868e871,0xe4f1,0x11d3,0xbc,0x22,{0x00,0x80,0xc7,0x3c,0x88,0x81}}\r
42#define EFI_TABLE_SAL \\r
43 {0xeb9d2d32,0x2d88,0x11d3,0x9a,0x16,{0x00,0x90,0x27,0x3f,0xc1,0x4d}}\r
44\r
45enum efi_reset {\r
46 EFI_RESET_COLD,\r
47 EFI_RESET_WARM\r
48};\r
49\r
50typedef uint16_t efi_char;\r
51typedef unsigned long efi_status;\r
52\r
53struct efi_cfgtbl {\r
54 struct uuid ct_uuid;\r
55 uint64_t ct_data;\r
56};\r
57\r
58struct efi_md {\r
59 uint32_t md_type;\r
60#define EFI_MD_TYPE_NULL 0\r
61#define EFI_MD_TYPE_CODE 1 /* Loader text. */\r
62#define EFI_MD_TYPE_DATA 2 /* Loader data. */\r
63#define EFI_MD_TYPE_BS_CODE 3 /* Boot services text. */\r
64#define EFI_MD_TYPE_BS_DATA 4 /* Boot services data. */\r
65#define EFI_MD_TYPE_RT_CODE 5 /* Runtime services text. */\r
66#define EFI_MD_TYPE_RT_DATA 6 /* Runtime services data. */\r
67#define EFI_MD_TYPE_FREE 7 /* Unused/free memory. */\r
68#define EFI_MD_TYPE_BAD 8 /* Bad memory */\r
69#define EFI_MD_TYPE_RECLAIM 9 /* ACPI reclaimable memory. */\r
70#define EFI_MD_TYPE_FIRMWARE 10 /* ACPI NV memory */\r
71#define EFI_MD_TYPE_IOMEM 11 /* Memory-mapped I/O. */\r
72#define EFI_MD_TYPE_IOPORT 12 /* I/O port space. */\r
73#define EFI_MD_TYPE_PALCODE 13 /* PAL */\r
74 uint32_t __pad;\r
75 uint64_t md_phys;\r
76 void *md_virt;\r
77 uint64_t md_pages;\r
78 uint64_t md_attr;\r
79#define EFI_MD_ATTR_UC 0x0000000000000001UL\r
80#define EFI_MD_ATTR_WC 0x0000000000000002UL\r
81#define EFI_MD_ATTR_WT 0x0000000000000004UL\r
82#define EFI_MD_ATTR_WB 0x0000000000000008UL\r
83#define EFI_MD_ATTR_UCE 0x0000000000000010UL\r
84#define EFI_MD_ATTR_WP 0x0000000000001000UL\r
85#define EFI_MD_ATTR_RP 0x0000000000002000UL\r
86#define EFI_MD_ATTR_XP 0x0000000000004000UL\r
87#define EFI_MD_ATTR_RT 0x8000000000000000UL\r
88};\r
89\r
90struct efi_tm {\r
91 uint16_t tm_year; /* 1998 - 20XX */\r
92 uint8_t tm_mon; /* 1 - 12 */\r
93 uint8_t tm_mday; /* 1 - 31 */\r
94 uint8_t tm_hour; /* 0 - 23 */\r
95 uint8_t tm_min; /* 0 - 59 */\r
96 uint8_t tm_sec; /* 0 - 59 */\r
97 uint8_t __pad1;\r
98 uint32_t tm_nsec; /* 0 - 999,999,999 */\r
99 int16_t tm_tz; /* -1440 to 1440 or 2047 */\r
100 uint8_t tm_dst;\r
101 uint8_t __pad2;\r
102};\r
103\r
104struct efi_tmcap {\r
105 uint32_t tc_res; /* 1e-6 parts per million */\r
106 uint32_t tc_prec; /* hertz */\r
107 uint8_t tc_stz; /* Set clears sub-second time */\r
108};\r
109\r
110struct efi_tblhdr {\r
111 uint64_t th_sig;\r
112 uint32_t th_rev;\r
113 uint32_t th_hdrsz;\r
114 uint32_t th_crc32;\r
115 uint32_t __res;\r
116};\r
117\r
118struct efi_rt {\r
119 struct efi_tblhdr rt_hdr;\r
120 efi_status (*rt_gettime)(struct efi_tm *, struct efi_tmcap *);\r
121 efi_status (*rt_settime)(struct efi_tm *);\r
122 efi_status (*rt_getwaketime)(uint8_t *, uint8_t *,\r
123 struct efi_tm *);\r
124 efi_status (*rt_setwaketime)(uint8_t, struct efi_tm *);\r
125 efi_status (*rt_setvirtual)(u_long, u_long, uint32_t,\r
126 struct efi_md *);\r
127 efi_status (*rt_cvtptr)(u_long, void **);\r
128 efi_status (*rt_getvar)(efi_char *, struct uuid *, uint32_t *,\r
129 u_long *, void *);\r
130 efi_status (*rt_scanvar)(u_long *, efi_char *, struct uuid *);\r
131 efi_status (*rt_setvar)(efi_char *, struct uuid *, uint32_t,\r
132 u_long, void *);\r
133 efi_status (*rt_gethicnt)(uint32_t *);\r
134 efi_status (*rt_reset)(enum efi_reset, efi_status, u_long,\r
135 efi_char *);\r
136};\r
137\r
138struct efi_systbl {\r
139 struct efi_tblhdr st_hdr;\r
140#define EFI_SYSTBL_SIG 0x5453595320494249UL\r
141 efi_char *st_fwvendor;\r
142 uint32_t st_fwrev;\r
143 uint32_t __pad;\r
144 void *st_cin;\r
145 void *st_cinif;\r
146 void *st_cout;\r
147 void *st_coutif;\r
148 void *st_cerr;\r
149 void *st_cerrif;\r
150 uint64_t st_rt;\r
151 void *st_bs;\r
152 u_long st_entries;\r
153 uint64_t st_cfgtbl;\r
154};\r
155\r
156void efi_boot_finish(void);\r
157int efi_boot_minimal(uint64_t);\r
158void *efi_get_table(struct uuid *);\r
159void efi_get_time(struct efi_tm *);\r
160struct efi_md *efi_md_first(void);\r
161struct efi_md *efi_md_next(struct efi_md *);\r
162void efi_reset_system(void);\r
163efi_status efi_set_time(struct efi_tm *);\r
164\r
165#endif /* _MACHINE_EFI_H_ */\r