Merge to trunk head (r46631)
[reactos.git] / hal / halx86 / include / halacpi.h
1 #pragma once
2
3 //
4 // Should be shared with FreeLDR
5 //
6 typedef struct _ACPI_E820_ENTRY
7 {
8 PHYSICAL_ADDRESS Base;
9 LARGE_INTEGER Length;
10 ULONGLONG Type;
11 } ACPI_E820_ENTRY, *PACPI_E820_ENTRY;
12
13 typedef struct _ACPI_BIOS_MULTI_NODE
14 {
15 PHYSICAL_ADDRESS RsdtAddress;
16 ULONGLONG Count;
17 ACPI_E820_ENTRY E820Entry[1];
18 } ACPI_BIOS_MULTI_NODE, *PACPI_BIOS_MULTI_NODE;
19
20 //
21 // ACPI Signatures
22 //
23 #define RSDP_SIGNATURE 0x2052545020445352 // "RSD PTR "
24 #define FACS_SIGNATURE 0x53434146 // "FACS"
25 #define FADT_SIGNATURE 0x50434146 // "FACP"
26 #define RSDT_SIGNATURE 0x54445352 // "RSDT"
27 #define APIC_SIGNATURE 0x43495041 // "APIC"
28 #define DSDT_SIGNATURE 0x54445344 // "DSDT"
29 #define SSDT_SIGNATURE 0x54445353 // "SSDT"
30 #define PSDT_SIGNATURE 0x54445350 // "PSDT"
31 #define SBST_SIGNATURE 0x54534253 // "SBST"
32 #define DBGP_SIGNATURE 0x50474244 // "DBGP"
33 #define XSDT_SIGNATURE 'TDSX'
34 #define BOOT_SIGNATURE 'TOOB'
35 #define SRAT_SIGNATURE 'TARS'
36
37 //
38 // FADT Flags
39 //
40 #define ACPI_TMR_VAL_EXT 0x100
41
42 //
43 // ACPI Generic Register Address
44 //
45 typedef struct _GEN_ADDR
46 {
47 UCHAR AddressSpaceID;
48 UCHAR BitWidth;
49 UCHAR BitOffset;
50 UCHAR Reserved;
51 PHYSICAL_ADDRESS Address;
52 } GEN_ADDR, *PGEN_ADDR;
53
54 //
55 // ACPI BIOS Structures (packed)
56 //
57 #include <pshpack1.h>
58 typedef struct _RSDP
59 {
60 ULONGLONG Signature;
61 UCHAR Checksum;
62 UCHAR OEMID[6];
63 UCHAR Reserved[1];
64 ULONG RsdtAddress;
65 } RSDP;
66 typedef RSDP *PRSDP;
67
68 typedef struct _DESCRIPTION_HEADER
69 {
70 ULONG Signature;
71 ULONG Length;
72 UCHAR Revision;
73 UCHAR Checksum;
74 UCHAR OEMID[6];
75 UCHAR OEMTableID[8];
76 ULONG OEMRevision;
77 UCHAR CreatorID[4];
78 ULONG CreatorRev;
79 } DESCRIPTION_HEADER;
80 typedef DESCRIPTION_HEADER *PDESCRIPTION_HEADER;
81
82 typedef struct _FACS
83 {
84 ULONG Signature;
85 ULONG Length;
86 ULONG HardwareSignature;
87 ULONG pFirmwareWakingVector;
88 ULONG GlobalLock;
89 ULONG Flags;
90 PHYSICAL_ADDRESS x_FirmwareWakingVector;
91 UCHAR version;
92 UCHAR Reserved[32];
93 } FACS;
94 typedef FACS *PFACS;
95
96 typedef struct _FADT
97 {
98 DESCRIPTION_HEADER Header;
99 ULONG facs;
100 ULONG dsdt;
101 UCHAR int_model;
102 UCHAR pm_profile;
103 USHORT sci_int_vector;
104 ULONG smi_cmd_io_port;
105 UCHAR acpi_on_value;
106 UCHAR acpi_off_value;
107 UCHAR s4bios_req;
108 UCHAR pstate_control;
109 ULONG pm1a_evt_blk_io_port;
110 ULONG pm1b_evt_blk_io_port;
111 ULONG pm1a_ctrl_blk_io_port;
112 ULONG pm1b_ctrl_blk_io_port;
113 ULONG pm2_ctrl_blk_io_port;
114 ULONG pm_tmr_blk_io_port;
115 ULONG gp0_blk_io_port;
116 ULONG gp1_blk_io_port;
117 UCHAR pm1_evt_len;
118 UCHAR pm1_ctrl_len;
119 UCHAR pm2_ctrl_len;
120 UCHAR pm_tmr_len;
121 UCHAR gp0_blk_len;
122 UCHAR gp1_blk_len;
123 UCHAR gp1_base;
124 UCHAR cstate_control;
125 USHORT lvl2_latency;
126 USHORT lvl3_latency;
127 USHORT flush_size;
128 USHORT flush_stride;
129 UCHAR duty_offset;
130 UCHAR duty_width;
131 UCHAR day_alarm_index;
132 UCHAR month_alarm_index;
133 UCHAR century_alarm_index;
134 USHORT boot_arch;
135 UCHAR reserved3[1];
136 ULONG flags;
137 GEN_ADDR reset_reg;
138 UCHAR reset_val;
139 UCHAR reserved4[3];
140 PHYSICAL_ADDRESS x_firmware_ctrl;
141 PHYSICAL_ADDRESS x_dsdt;
142 GEN_ADDR x_pm1a_evt_blk;
143 GEN_ADDR x_pm1b_evt_blk;
144 GEN_ADDR x_pm1a_ctrl_blk;
145 GEN_ADDR x_pm1b_ctrl_blk;
146 GEN_ADDR x_pm2_ctrl_blk;
147 GEN_ADDR x_pm_tmr_blk;
148 GEN_ADDR x_gp0_blk;
149 GEN_ADDR x_gp1_blk;
150 } FADT;
151 typedef FADT *PFADT;
152
153 typedef struct _DSDT
154 {
155 DESCRIPTION_HEADER Header;
156 UCHAR DiffDefBlock[ANYSIZE_ARRAY];
157 } DSDT;
158 typedef DSDT *PDSDT;
159
160 typedef struct _RSDT
161 {
162 DESCRIPTION_HEADER Header;
163 ULONG Tables[ANYSIZE_ARRAY];
164 } RSDT;
165 typedef RSDT *PRSDT;
166
167 typedef struct _XSDT
168 {
169 DESCRIPTION_HEADER Header;
170 PHYSICAL_ADDRESS Tables[ANYSIZE_ARRAY];
171 } XSDT;
172 typedef XSDT *PXSDT;
173 #include <poppack.h>
174
175 //
176 // Microsoft-specific (pretty much) ACPI Tables, normal MS ABI packing
177 //
178 typedef struct _DEBUG_PORT_TABLE
179 {
180 DESCRIPTION_HEADER Header;
181 UCHAR InterfaceType;
182 UCHAR Reserved[3];
183 GEN_ADDR BaseAddress;
184 } DEBUG_PORT_TABLE, *PDEBUG_PORT_TABLE;
185
186 typedef struct _BOOT_TABLE
187 {
188 DESCRIPTION_HEADER Header;
189 UCHAR CMOSIndex;
190 UCHAR Reserved[3];
191 } BOOT_TABLE, *PBOOT_TABLE;
192
193 typedef struct _ACPI_SRAT
194 {
195 DESCRIPTION_HEADER Header;
196 UCHAR TableRevision;
197 ULONG Reserved[2];
198 } ACPI_SRAT, *PACPI_SRAT;
199
200 //
201 // Internal HAL structure
202 //
203 typedef struct _ACPI_CACHED_TABLE
204 {
205 LIST_ENTRY Links;
206 DESCRIPTION_HEADER Header;
207 // table follows
208 // ...
209 } ACPI_CACHED_TABLE, *PACPI_CACHED_TABLE;
210
211 NTSTATUS
212 NTAPI
213 HalpAcpiTableCacheInit(
214 IN PLOADER_PARAMETER_BLOCK LoaderBlock
215 );
216
217 PVOID
218 NTAPI
219 HalpAcpiGetTable(
220 IN PLOADER_PARAMETER_BLOCK LoaderBlock,
221 IN ULONG Signature
222 );
223
224 NTSTATUS
225 NTAPI
226 HalpSetupAcpiPhase0(
227 IN PLOADER_PARAMETER_BLOCK LoaderBlock
228 );
229
230 PVOID
231 NTAPI
232 HalAcpiGetTable(
233 IN PLOADER_PARAMETER_BLOCK LoaderBlock,
234 IN ULONG Signature
235 );
236
237 /* EOF */