Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | /****************************************************************************** |
2 | * | |
793c2388 | 3 | * Name: actbl.h - Basic ACPI Table Definitions |
1da177e4 LT |
4 | * |
5 | *****************************************************************************/ | |
6 | ||
7 | /* | |
4a90c7e8 | 8 | * Copyright (C) 2000 - 2006, R. Byron Moore |
1da177e4 LT |
9 | * All rights reserved. |
10 | * | |
11 | * Redistribution and use in source and binary forms, with or without | |
12 | * modification, are permitted provided that the following conditions | |
13 | * are met: | |
14 | * 1. Redistributions of source code must retain the above copyright | |
15 | * notice, this list of conditions, and the following disclaimer, | |
16 | * without modification. | |
17 | * 2. Redistributions in binary form must reproduce at minimum a disclaimer | |
18 | * substantially similar to the "NO WARRANTY" disclaimer below | |
19 | * ("Disclaimer") and any redistribution must be conditioned upon | |
20 | * including a substantially similar Disclaimer requirement for further | |
21 | * binary redistribution. | |
22 | * 3. Neither the names of the above-listed copyright holders nor the names | |
23 | * of any contributors may be used to endorse or promote products derived | |
24 | * from this software without specific prior written permission. | |
25 | * | |
26 | * Alternatively, this software may be distributed under the terms of the | |
27 | * GNU General Public License ("GPL") version 2 as published by the Free | |
28 | * Software Foundation. | |
29 | * | |
30 | * NO WARRANTY | |
31 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |
32 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | |
33 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR | |
34 | * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | |
35 | * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |
36 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | |
37 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |
38 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |
39 | * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING | |
40 | * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |
41 | * POSSIBILITY OF SUCH DAMAGES. | |
42 | */ | |
43 | ||
44 | #ifndef __ACTBL_H__ | |
45 | #define __ACTBL_H__ | |
46 | ||
defba1d8 | 47 | /* |
793c2388 BM |
48 | * Values for description table header signatures. Useful because they make |
49 | * it more difficult to inadvertently type in the wrong signature. | |
1da177e4 | 50 | */ |
4be44fcd LB |
51 | #define DSDT_SIG "DSDT" /* Differentiated System Description Table */ |
52 | #define FADT_SIG "FACP" /* Fixed ACPI Description Table */ | |
53 | #define FACS_SIG "FACS" /* Firmware ACPI Control Structure */ | |
54 | #define PSDT_SIG "PSDT" /* Persistent System Description Table */ | |
793c2388 | 55 | #define RSDP_SIG "RSD PTR " /* Root System Description Pointer */ |
4be44fcd LB |
56 | #define RSDT_SIG "RSDT" /* Root System Description Table */ |
57 | #define XSDT_SIG "XSDT" /* Extended System Description Table */ | |
58 | #define SSDT_SIG "SSDT" /* Secondary System Description Table */ | |
793c2388 | 59 | #define RSDP_NAME "RSDP" |
1da177e4 LT |
60 | |
61 | /* | |
793c2388 BM |
62 | * All tables and structures must be byte-packed to match the ACPI |
63 | * specification, since the tables are provided by the system BIOS | |
1da177e4 | 64 | */ |
1da177e4 LT |
65 | #pragma pack(1) |
66 | ||
67 | /* | |
793c2388 BM |
68 | * These are the ACPI tables that are directly consumed by the subsystem. |
69 | * | |
70 | * The RSDP and FACS do not use the common ACPI table header. All other ACPI | |
71 | * tables use the header. | |
1da177e4 | 72 | * |
793c2388 BM |
73 | * Note about bitfields: The u8 type is used for bitfields in ACPI tables. |
74 | * This is the only type that is even remotely portable. Anything else is not | |
75 | * portable, so do not use any other bitfield types. | |
1da177e4 | 76 | */ |
1da177e4 | 77 | |
793c2388 BM |
78 | /******************************************************************************* |
79 | * | |
80 | * ACPI Table Header. This common header is used by all tables except the | |
81 | * RSDP and FACS. The define is used for direct inclusion of header into | |
82 | * other ACPI tables | |
83 | * | |
84 | ******************************************************************************/ | |
1da177e4 | 85 | |
793c2388 | 86 | #define ACPI_TABLE_HEADER_DEF \ |
f9f4601f RM |
87 | char signature[4]; /* ASCII table signature */\ |
88 | u32 length; /* Length of table in bytes, including this header */\ | |
1da177e4 LT |
89 | u8 revision; /* ACPI Specification minor version # */\ |
90 | u8 checksum; /* To make sum of entire table == 0 */\ | |
f9f4601f RM |
91 | char oem_id[6]; /* ASCII OEM identification */\ |
92 | char oem_table_id[8]; /* ASCII OEM table identification */\ | |
1da177e4 | 93 | u32 oem_revision; /* OEM revision number */\ |
793c2388 | 94 | char asl_compiler_id[4]; /* ASCII ASL compiler vendor ID */\ |
4be44fcd | 95 | u32 asl_compiler_revision; /* ASL compiler version */ |
1da177e4 | 96 | |
793c2388 | 97 | struct acpi_table_header { |
4be44fcd | 98 | ACPI_TABLE_HEADER_DEF}; |
1da177e4 LT |
99 | |
100 | /* | |
793c2388 | 101 | * GAS - Generic Address Structure (ACPI 2.0+) |
1da177e4 | 102 | */ |
793c2388 BM |
103 | struct acpi_generic_address { |
104 | u8 address_space_id; /* Address space where struct or register exists */ | |
105 | u8 register_bit_width; /* Size in bits of given register */ | |
106 | u8 register_bit_offset; /* Bit offset within the register */ | |
107 | u8 access_width; /* Minimum Access size (ACPI 3.0) */ | |
108 | u64 address; /* 64-bit address of struct or register */ | |
109 | }; | |
1da177e4 | 110 | |
793c2388 BM |
111 | /******************************************************************************* |
112 | * | |
113 | * RSDP - Root System Description Pointer (Signature is "RSD PTR ") | |
114 | * | |
115 | ******************************************************************************/ | |
116 | ||
117 | struct rsdp_descriptor { | |
118 | char signature[8]; /* ACPI signature, contains "RSD PTR " */ | |
119 | u8 checksum; /* ACPI 1.0 checksum */ | |
120 | char oem_id[6]; /* OEM identification */ | |
121 | u8 revision; /* Must be (0) for ACPI 1.0 or (2) for ACPI 2.0+ */ | |
122 | u32 rsdt_physical_address; /* 32-bit physical address of the RSDT */ | |
123 | u32 length; /* Table length in bytes, including header (ACPI 2.0+) */ | |
124 | u64 xsdt_physical_address; /* 64-bit physical address of the XSDT (ACPI 2.0+) */ | |
125 | u8 extended_checksum; /* Checksum of entire table (ACPI 2.0+) */ | |
126 | u8 reserved[3]; /* Reserved, must be zero */ | |
127 | }; | |
1da177e4 | 128 | |
793c2388 | 129 | #define ACPI_RSDP_REV0_SIZE 20 /* Size of original ACPI 1.0 RSDP */ |
1da177e4 | 130 | |
793c2388 BM |
131 | /******************************************************************************* |
132 | * | |
133 | * RSDT/XSDT - Root System Description Tables | |
134 | * | |
135 | ******************************************************************************/ | |
1da177e4 | 136 | |
793c2388 BM |
137 | struct rsdt_descriptor { |
138 | ACPI_TABLE_HEADER_DEF u32 table_offset_entry[1]; /* Array of pointers to ACPI tables */ | |
139 | }; | |
140 | ||
141 | struct xsdt_descriptor { | |
142 | ACPI_TABLE_HEADER_DEF u64 table_offset_entry[1]; /* Array of pointers to ACPI tables */ | |
143 | }; | |
144 | ||
145 | /******************************************************************************* | |
146 | * | |
147 | * FACS - Firmware ACPI Control Structure (FACS) | |
148 | * | |
149 | ******************************************************************************/ | |
150 | ||
151 | struct facs_descriptor { | |
152 | char signature[4]; /* ASCII table signature */ | |
153 | u32 length; /* Length of structure, in bytes */ | |
154 | u32 hardware_signature; /* Hardware configuration signature */ | |
155 | u32 firmware_waking_vector; /* 32-bit physical address of the Firmware Waking Vector */ | |
156 | u32 global_lock; /* Global Lock for shared hardware resources */ | |
f9f4601f RM |
157 | |
158 | /* Flags (32 bits) */ | |
159 | ||
793c2388 | 160 | u8 S4bios_f:1; /* 00: S4BIOS support is present */ |
4be44fcd LB |
161 | u8:7; /* 01-07: Reserved, must be zero */ |
162 | u8 reserved1[3]; /* 08-31: Reserved, must be zero */ | |
1da177e4 | 163 | |
793c2388 BM |
164 | u64 xfirmware_waking_vector; /* 64-bit version of the Firmware Waking Vector (ACPI 2.0+) */ |
165 | u8 version; /* Version of this table (ACPI 2.0+) */ | |
166 | u8 reserved[31]; /* Reserved, must be zero */ | |
167 | }; | |
1da177e4 | 168 | |
793c2388 BM |
169 | #define ACPI_GLOCK_PENDING 0x01 /* 00: Pending global lock ownership */ |
170 | #define ACPI_GLOCK_OWNED 0x02 /* 01: Global lock is owned */ | |
1da177e4 LT |
171 | |
172 | /* | |
793c2388 | 173 | * Common FACS - This is a version-independent FACS structure used for internal use only |
1da177e4 | 174 | */ |
793c2388 BM |
175 | struct acpi_common_facs { |
176 | u32 *global_lock; | |
177 | u64 *firmware_waking_vector; | |
178 | u8 vector_width; | |
1da177e4 LT |
179 | }; |
180 | ||
793c2388 BM |
181 | /******************************************************************************* |
182 | * | |
183 | * FADT - Fixed ACPI Description Table (Signature "FACP") | |
184 | * | |
185 | ******************************************************************************/ | |
186 | ||
187 | /* Fields common to all versions of the FADT */ | |
188 | ||
189 | #define ACPI_FADT_COMMON \ | |
190 | ACPI_TABLE_HEADER_DEF \ | |
191 | u32 V1_firmware_ctrl; /* 32-bit physical address of FACS */ \ | |
192 | u32 V1_dsdt; /* 32-bit physical address of DSDT */ \ | |
193 | u8 reserved1; /* System Interrupt Model isn't used in ACPI 2.0*/ \ | |
194 | u8 prefer_PM_profile; /* Conveys preferred power management profile to OSPM. */ \ | |
195 | u16 sci_int; /* System vector of SCI interrupt */ \ | |
196 | u32 smi_cmd; /* Port address of SMI command port */ \ | |
197 | u8 acpi_enable; /* Value to write to smi_cmd to enable ACPI */ \ | |
198 | u8 acpi_disable; /* Value to write to smi_cmd to disable ACPI */ \ | |
199 | u8 S4bios_req; /* Value to write to SMI CMD to enter S4BIOS state */ \ | |
200 | u8 pstate_cnt; /* Processor performance state control*/ \ | |
201 | u32 V1_pm1a_evt_blk; /* Port address of Power Mgt 1a Event Reg Blk */ \ | |
202 | u32 V1_pm1b_evt_blk; /* Port address of Power Mgt 1b Event Reg Blk */ \ | |
203 | u32 V1_pm1a_cnt_blk; /* Port address of Power Mgt 1a Control Reg Blk */ \ | |
204 | u32 V1_pm1b_cnt_blk; /* Port address of Power Mgt 1b Control Reg Blk */ \ | |
205 | u32 V1_pm2_cnt_blk; /* Port address of Power Mgt 2 Control Reg Blk */ \ | |
206 | u32 V1_pm_tmr_blk; /* Port address of Power Mgt Timer Ctrl Reg Blk */ \ | |
207 | u32 V1_gpe0_blk; /* Port addr of General Purpose acpi_event 0 Reg Blk */ \ | |
208 | u32 V1_gpe1_blk; /* Port addr of General Purpose acpi_event 1 Reg Blk */ \ | |
958dd242 BM |
209 | u8 pm1_evt_len; /* Byte Length of ports at pm1_x_evt_blk */ \ |
210 | u8 pm1_cnt_len; /* Byte Length of ports at pm1_x_cnt_blk */ \ | |
793c2388 BM |
211 | u8 pm2_cnt_len; /* Byte Length of ports at pm2_cnt_blk */ \ |
212 | u8 pm_tm_len; /* Byte Length of ports at pm_tm_blk */ \ | |
213 | u8 gpe0_blk_len; /* Byte Length of ports at gpe0_blk */ \ | |
214 | u8 gpe1_blk_len; /* Byte Length of ports at gpe1_blk */ \ | |
215 | u8 gpe1_base; /* Offset in gpe model where gpe1 events start */ \ | |
216 | u8 cst_cnt; /* Support for the _CST object and C States change notification.*/ \ | |
217 | u16 plvl2_lat; /* Worst case HW latency to enter/exit C2 state */ \ | |
218 | u16 plvl3_lat; /* Worst case HW latency to enter/exit C3 state */ \ | |
219 | u16 flush_size; /* Processor's memory cache line width, in bytes */ \ | |
220 | u16 flush_stride; /* Number of flush strides that need to be read */ \ | |
221 | u8 duty_offset; /* Processor's duty cycle index in processor's P_CNT reg*/ \ | |
222 | u8 duty_width; /* Processor's duty cycle value bit width in P_CNT register.*/ \ | |
223 | u8 day_alrm; /* Index to day-of-month alarm in RTC CMOS RAM */ \ | |
224 | u8 mon_alrm; /* Index to month-of-year alarm in RTC CMOS RAM */ \ | |
225 | u8 century; /* Index to century in RTC CMOS RAM */ \ | |
226 | u16 iapc_boot_arch; /* IA-PC Boot Architecture Flags. See Table 5-10 for description*/ \ | |
227 | u8 reserved2; /* Reserved, must be zero */ | |
1da177e4 | 228 | |
793c2388 BM |
229 | /* |
230 | * ACPI 2.0+ FADT | |
231 | */ | |
232 | struct fadt_descriptor { | |
233 | ACPI_FADT_COMMON | |
234 | /* Flags (32 bits) */ | |
235 | u8 wb_invd:1; /* 00: The wbinvd instruction works properly */ | |
236 | u8 wb_invd_flush:1; /* 01: The wbinvd flushes but does not invalidate */ | |
237 | u8 proc_c1:1; /* 02: All processors support C1 state */ | |
238 | u8 plvl2_up:1; /* 03: C2 state works on MP system */ | |
239 | u8 pwr_button:1; /* 04: Power button is handled as a generic feature */ | |
240 | u8 sleep_button:1; /* 05: Sleep button is handled as a generic feature, or not present */ | |
241 | u8 fixed_rTC:1; /* 06: RTC wakeup stat not in fixed register space */ | |
242 | u8 rtcs4:1; /* 07: RTC wakeup stat not possible from S4 */ | |
243 | u8 tmr_val_ext:1; /* 08: tmr_val is 32 bits 0=24-bits */ | |
244 | u8 dock_cap:1; /* 09: Docking supported */ | |
245 | u8 reset_reg_sup:1; /* 10: System reset via the FADT RESET_REG supported */ | |
246 | u8 sealed_case:1; /* 11: No internal expansion capabilities and case is sealed */ | |
247 | u8 headless:1; /* 12: No local video capabilities or local input devices */ | |
248 | u8 cpu_sw_sleep:1; /* 13: Must execute native instruction after writing SLP_TYPx register */ | |
249 | ||
250 | u8 pci_exp_wak:1; /* 14: System supports PCIEXP_WAKE (STS/EN) bits (ACPI 3.0) */ | |
251 | u8 use_platform_clock:1; /* 15: OSPM should use platform-provided timer (ACPI 3.0) */ | |
252 | u8 S4rtc_sts_valid:1; /* 16: Contents of RTC_STS valid after S4 wake (ACPI 3.0) */ | |
253 | u8 remote_power_on_capable:1; /* 17: System is compatible with remote power on (ACPI 3.0) */ | |
254 | u8 force_apic_cluster_model:1; /* 18: All local APICs must use cluster model (ACPI 3.0) */ | |
958dd242 | 255 | u8 force_apic_physical_destination_mode:1; /* 19: All local x_aPICs must use physical dest mode (ACPI 3.0) */ |
793c2388 BM |
256 | u8:4; /* 20-23: Reserved, must be zero */ |
257 | u8 reserved3; /* 24-31: Reserved, must be zero */ | |
258 | ||
259 | struct acpi_generic_address reset_register; /* Reset register address in GAS format */ | |
260 | u8 reset_value; /* Value to write to the reset_register port to reset the system */ | |
261 | u8 reserved4[3]; /* These three bytes must be zero */ | |
262 | u64 xfirmware_ctrl; /* 64-bit physical address of FACS */ | |
263 | u64 Xdsdt; /* 64-bit physical address of DSDT */ | |
264 | struct acpi_generic_address xpm1a_evt_blk; /* Extended Power Mgt 1a acpi_event Reg Blk address */ | |
265 | struct acpi_generic_address xpm1b_evt_blk; /* Extended Power Mgt 1b acpi_event Reg Blk address */ | |
266 | struct acpi_generic_address xpm1a_cnt_blk; /* Extended Power Mgt 1a Control Reg Blk address */ | |
267 | struct acpi_generic_address xpm1b_cnt_blk; /* Extended Power Mgt 1b Control Reg Blk address */ | |
268 | struct acpi_generic_address xpm2_cnt_blk; /* Extended Power Mgt 2 Control Reg Blk address */ | |
269 | struct acpi_generic_address xpm_tmr_blk; /* Extended Power Mgt Timer Ctrl Reg Blk address */ | |
270 | struct acpi_generic_address xgpe0_blk; /* Extended General Purpose acpi_event 0 Reg Blk address */ | |
271 | struct acpi_generic_address xgpe1_blk; /* Extended General Purpose acpi_event 1 Reg Blk address */ | |
1da177e4 LT |
272 | }; |
273 | ||
793c2388 BM |
274 | /* |
275 | * "Down-revved" ACPI 2.0 FADT descriptor | |
276 | * Defined here to allow compiler to generate the length of the struct | |
277 | */ | |
278 | struct fadt_descriptor_rev2_minus { | |
279 | ACPI_FADT_COMMON u32 flags; | |
280 | struct acpi_generic_address reset_register; /* Reset register address in GAS format */ | |
281 | u8 reset_value; /* Value to write to the reset_register port to reset the system. */ | |
282 | u8 reserved7[3]; /* Reserved, must be zero */ | |
1da177e4 LT |
283 | }; |
284 | ||
793c2388 BM |
285 | /* |
286 | * ACPI 1.0 FADT | |
287 | * Defined here to allow compiler to generate the length of the struct | |
288 | */ | |
289 | struct fadt_descriptor_rev1 { | |
290 | ACPI_FADT_COMMON u32 flags; | |
1da177e4 LT |
291 | }; |
292 | ||
793c2388 | 293 | /* FADT: Prefered Power Management Profiles */ |
1da177e4 | 294 | |
793c2388 BM |
295 | #define PM_UNSPECIFIED 0 |
296 | #define PM_DESKTOP 1 | |
297 | #define PM_MOBILE 2 | |
298 | #define PM_WORKSTATION 3 | |
299 | #define PM_ENTERPRISE_SERVER 4 | |
300 | #define PM_SOHO_SERVER 5 | |
301 | #define PM_APPLIANCE_PC 6 | |
1da177e4 | 302 | |
793c2388 | 303 | /* FADT: Boot Arch Flags */ |
1da177e4 | 304 | |
793c2388 BM |
305 | #define BAF_LEGACY_DEVICES 0x0001 |
306 | #define BAF_8042_KEYBOARD_CONTROLLER 0x0002 | |
307 | ||
308 | #define FADT2_REVISION_ID 3 | |
309 | #define FADT2_MINUS_REVISION_ID 2 | |
310 | ||
311 | /* Reset to default packing */ | |
1da177e4 | 312 | |
1da177e4 LT |
313 | #pragma pack() |
314 | ||
793c2388 BM |
315 | /* |
316 | * This macro is temporary until the table bitfield flag definitions | |
317 | * are removed and replaced by a Flags field. | |
318 | */ | |
319 | #define ACPI_FLAG_OFFSET(d,f,o) (u8) (ACPI_OFFSET (d,f) + \ | |
320 | sizeof(((d *)0)->f) + o) | |
321 | /* | |
322 | * Get the remaining ACPI tables | |
323 | */ | |
324 | #include "actbl1.h" | |
325 | ||
1da177e4 LT |
326 | /* |
327 | * ACPI Table information. We save the table address, length, | |
328 | * and type of memory allocation (mapped or allocated) for each | |
329 | * table for 1) when we exit, and 2) if a new table is installed | |
330 | */ | |
331 | #define ACPI_MEM_NOT_ALLOCATED 0 | |
332 | #define ACPI_MEM_ALLOCATED 1 | |
333 | #define ACPI_MEM_MAPPED 2 | |
334 | ||
335 | /* Definitions for the Flags bitfield member of struct acpi_table_support */ | |
336 | ||
337 | #define ACPI_TABLE_SINGLE 0x00 | |
338 | #define ACPI_TABLE_MULTIPLE 0x01 | |
339 | #define ACPI_TABLE_EXECUTABLE 0x02 | |
340 | ||
341 | #define ACPI_TABLE_ROOT 0x00 | |
342 | #define ACPI_TABLE_PRIMARY 0x10 | |
343 | #define ACPI_TABLE_SECONDARY 0x20 | |
344 | #define ACPI_TABLE_ALL 0x30 | |
345 | #define ACPI_TABLE_TYPE_MASK 0x30 | |
346 | ||
347 | /* Data about each known table type */ | |
348 | ||
4be44fcd LB |
349 | struct acpi_table_support { |
350 | char *name; | |
351 | char *signature; | |
352 | void **global_ptr; | |
353 | u8 sig_length; | |
354 | u8 flags; | |
1da177e4 LT |
355 | }; |
356 | ||
4be44fcd LB |
357 | extern u8 acpi_fadt_is_v1; /* is set to 1 if FADT is revision 1, |
358 | * needed for certain workarounds */ | |
793c2388 | 359 | /* Macros used to generate offsets to specific table fields */ |
1da177e4 | 360 | |
793c2388 BM |
361 | #define ACPI_FACS_OFFSET(f) (u8) ACPI_OFFSET (struct facs_descriptor,f) |
362 | #define ACPI_FADT_OFFSET(f) (u8) ACPI_OFFSET (struct fadt_descriptor, f) | |
363 | #define ACPI_GAS_OFFSET(f) (u8) ACPI_OFFSET (struct acpi_generic_address,f) | |
364 | #define ACPI_HDR_OFFSET(f) (u8) ACPI_OFFSET (struct acpi_table_header,f) | |
365 | #define ACPI_RSDP_OFFSET(f) (u8) ACPI_OFFSET (struct rsdp_descriptor,f) | |
1da177e4 | 366 | |
793c2388 BM |
367 | #define ACPI_FADT_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (struct fadt_descriptor,f,o) |
368 | #define ACPI_FACS_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (struct facs_descriptor,f,o) | |
1da177e4 | 369 | |
4be44fcd | 370 | #endif /* __ACTBL_H__ */ |