diff options
Diffstat (limited to 'include/acpi/actbl.h')
-rw-r--r-- | include/acpi/actbl.h | 282 |
1 files changed, 120 insertions, 162 deletions
diff --git a/include/acpi/actbl.h b/include/acpi/actbl.h index b5cdcca444c8..a46f406e1c94 100644 --- a/include/acpi/actbl.h +++ b/include/acpi/actbl.h | |||
@@ -44,27 +44,24 @@ | |||
44 | #ifndef __ACTBL_H__ | 44 | #ifndef __ACTBL_H__ |
45 | #define __ACTBL_H__ | 45 | #define __ACTBL_H__ |
46 | 46 | ||
47 | |||
48 | /* | 47 | /* |
49 | * Values for description table header signatures | 48 | * Values for description table header signatures |
50 | */ | 49 | */ |
51 | #define RSDP_NAME "RSDP" | 50 | #define RSDP_NAME "RSDP" |
52 | #define RSDP_SIG "RSD PTR " /* RSDT Pointer signature */ | 51 | #define RSDP_SIG "RSD PTR " /* RSDT Pointer signature */ |
53 | #define APIC_SIG "APIC" /* Multiple APIC Description Table */ | 52 | #define APIC_SIG "APIC" /* Multiple APIC Description Table */ |
54 | #define DSDT_SIG "DSDT" /* Differentiated System Description Table */ | 53 | #define DSDT_SIG "DSDT" /* Differentiated System Description Table */ |
55 | #define FADT_SIG "FACP" /* Fixed ACPI Description Table */ | 54 | #define FADT_SIG "FACP" /* Fixed ACPI Description Table */ |
56 | #define FACS_SIG "FACS" /* Firmware ACPI Control Structure */ | 55 | #define FACS_SIG "FACS" /* Firmware ACPI Control Structure */ |
57 | #define PSDT_SIG "PSDT" /* Persistent System Description Table */ | 56 | #define PSDT_SIG "PSDT" /* Persistent System Description Table */ |
58 | #define RSDT_SIG "RSDT" /* Root System Description Table */ | 57 | #define RSDT_SIG "RSDT" /* Root System Description Table */ |
59 | #define XSDT_SIG "XSDT" /* Extended System Description Table */ | 58 | #define XSDT_SIG "XSDT" /* Extended System Description Table */ |
60 | #define SSDT_SIG "SSDT" /* Secondary System Description Table */ | 59 | #define SSDT_SIG "SSDT" /* Secondary System Description Table */ |
61 | #define SBST_SIG "SBST" /* Smart Battery Specification Table */ | 60 | #define SBST_SIG "SBST" /* Smart Battery Specification Table */ |
62 | #define SPIC_SIG "SPIC" /* IOSAPIC table */ | 61 | #define SPIC_SIG "SPIC" /* IOSAPIC table */ |
63 | #define BOOT_SIG "BOOT" /* Boot table */ | 62 | #define BOOT_SIG "BOOT" /* Boot table */ |
64 | 63 | ||
65 | 64 | #define GL_OWNED 0x02 /* Ownership of global lock is bit 1 */ | |
66 | #define GL_OWNED 0x02 /* Ownership of global lock is bit 1 */ | ||
67 | |||
68 | 65 | ||
69 | /* | 66 | /* |
70 | * Common table types. The base code can remain | 67 | * Common table types. The base code can remain |
@@ -75,7 +72,6 @@ | |||
75 | #define FACS_DESCRIPTOR struct facs_descriptor_rev2 | 72 | #define FACS_DESCRIPTOR struct facs_descriptor_rev2 |
76 | #define FADT_DESCRIPTOR struct fadt_descriptor_rev2 | 73 | #define FADT_DESCRIPTOR struct fadt_descriptor_rev2 |
77 | 74 | ||
78 | |||
79 | #pragma pack(1) | 75 | #pragma pack(1) |
80 | 76 | ||
81 | /* | 77 | /* |
@@ -84,45 +80,37 @@ | |||
84 | * NOTE: The tables that are specific to ACPI versions (1.0, 2.0, etc.) | 80 | * NOTE: The tables that are specific to ACPI versions (1.0, 2.0, etc.) |
85 | * are in separate files. | 81 | * are in separate files. |
86 | */ | 82 | */ |
87 | struct rsdp_descriptor /* Root System Descriptor Pointer */ | 83 | struct rsdp_descriptor { /* Root System Descriptor Pointer */ |
88 | { | 84 | char signature[8]; /* ACPI signature, contains "RSD PTR " */ |
89 | char signature [8]; /* ACPI signature, contains "RSD PTR " */ | 85 | u8 checksum; /* ACPI 1.0 checksum */ |
90 | u8 checksum; /* To make sum of struct == 0 */ | 86 | char oem_id[6]; /* OEM identification */ |
91 | char oem_id [6]; /* OEM identification */ | 87 | u8 revision; /* Must be (0) for ACPI 1.0 or (2) for ACPI 2.0+ */ |
92 | u8 revision; /* Must be 0 for 1.0, 2 for 2.0 */ | 88 | u32 rsdt_physical_address; /* 32-bit physical address of the RSDT */ |
93 | u32 rsdt_physical_address; /* 32-bit physical address of RSDT */ | 89 | u32 length; /* XSDT Length in bytes, including header */ |
94 | u32 length; /* XSDT Length in bytes including hdr */ | 90 | u64 xsdt_physical_address; /* 64-bit physical address of the XSDT */ |
95 | u64 xsdt_physical_address; /* 64-bit physical address of XSDT */ | 91 | u8 extended_checksum; /* Checksum of entire table (ACPI 2.0) */ |
96 | u8 extended_checksum; /* Checksum of entire table */ | 92 | char reserved[3]; /* Reserved, must be zero */ |
97 | char reserved [3]; /* Reserved field must be 0 */ | ||
98 | }; | 93 | }; |
99 | 94 | ||
100 | 95 | struct acpi_common_facs { /* Common FACS for internal use */ | |
101 | struct acpi_common_facs /* Common FACS for internal use */ | 96 | u32 *global_lock; |
102 | { | 97 | u64 *firmware_waking_vector; |
103 | u32 *global_lock; | 98 | u8 vector_width; |
104 | u64 *firmware_waking_vector; | ||
105 | u8 vector_width; | ||
106 | }; | 99 | }; |
107 | 100 | ||
108 | |||
109 | #define ACPI_TABLE_HEADER_DEF /* ACPI common table header */ \ | 101 | #define ACPI_TABLE_HEADER_DEF /* ACPI common table header */ \ |
110 | char signature [4]; /* ACPI signature (4 ASCII characters) */\ | 102 | char signature[4]; /* ASCII table signature */\ |
111 | u32 length; /* Length of table, in bytes, including header */\ | 103 | u32 length; /* Length of table in bytes, including this header */\ |
112 | u8 revision; /* ACPI Specification minor version # */\ | 104 | u8 revision; /* ACPI Specification minor version # */\ |
113 | u8 checksum; /* To make sum of entire table == 0 */\ | 105 | u8 checksum; /* To make sum of entire table == 0 */\ |
114 | char oem_id [6]; /* OEM identification */\ | 106 | char oem_id[6]; /* ASCII OEM identification */\ |
115 | char oem_table_id [8]; /* OEM table identification */\ | 107 | char oem_table_id[8]; /* ASCII OEM table identification */\ |
116 | u32 oem_revision; /* OEM revision number */\ | 108 | u32 oem_revision; /* OEM revision number */\ |
117 | char asl_compiler_id [4]; /* ASL compiler vendor ID */\ | 109 | char asl_compiler_id [4]; /* ASCII ASL compiler vendor ID */\ |
118 | u32 asl_compiler_revision; /* ASL compiler revision number */ | 110 | u32 asl_compiler_revision; /* ASL compiler version */ |
119 | |||
120 | |||
121 | struct acpi_table_header /* ACPI common table header */ | ||
122 | { | ||
123 | ACPI_TABLE_HEADER_DEF | ||
124 | }; | ||
125 | 111 | ||
112 | struct acpi_table_header { /* ACPI common table header */ | ||
113 | ACPI_TABLE_HEADER_DEF}; | ||
126 | 114 | ||
127 | /* | 115 | /* |
128 | * MADT values and structures | 116 | * MADT values and structures |
@@ -135,12 +123,15 @@ struct acpi_table_header /* ACPI common table header */ | |||
135 | 123 | ||
136 | /* Master MADT */ | 124 | /* Master MADT */ |
137 | 125 | ||
138 | struct multiple_apic_table | 126 | struct multiple_apic_table { |
139 | { | 127 | ACPI_TABLE_HEADER_DEF /* ACPI common table header */ |
140 | ACPI_TABLE_HEADER_DEF /* ACPI common table header */ | 128 | u32 local_apic_address; /* Physical address of local APIC */ |
141 | u32 local_apic_address; /* Physical address of local APIC */ | 129 | |
142 | u32 PCATcompat : 1; /* A one indicates system also has dual 8259s */ | 130 | /* Flags (32 bits) */ |
143 | u32 reserved1 : 31; | 131 | |
132 | u8 PCATcompat:1; /* 00: System also has dual 8259s */ | ||
133 | u8:7; /* 01-07: Reserved, must be zero */ | ||
134 | u8 reserved1[3]; /* 08-31: Reserved, must be zero */ | ||
144 | }; | 135 | }; |
145 | 136 | ||
146 | /* Values for Type in APIC_HEADER_DEF */ | 137 | /* Values for Type in APIC_HEADER_DEF */ |
@@ -154,7 +145,7 @@ struct multiple_apic_table | |||
154 | #define APIC_IO_SAPIC 6 | 145 | #define APIC_IO_SAPIC 6 |
155 | #define APIC_LOCAL_SAPIC 7 | 146 | #define APIC_LOCAL_SAPIC 7 |
156 | #define APIC_XRUPT_SOURCE 8 | 147 | #define APIC_XRUPT_SOURCE 8 |
157 | #define APIC_RESERVED 9 /* 9 and greater are reserved */ | 148 | #define APIC_RESERVED 9 /* 9 and greater are reserved */ |
158 | 149 | ||
159 | /* | 150 | /* |
160 | * MADT sub-structures (Follow MULTIPLE_APIC_DESCRIPTION_TABLE) | 151 | * MADT sub-structures (Follow MULTIPLE_APIC_DESCRIPTION_TABLE) |
@@ -163,10 +154,8 @@ struct multiple_apic_table | |||
163 | u8 type; \ | 154 | u8 type; \ |
164 | u8 length; | 155 | u8 length; |
165 | 156 | ||
166 | struct apic_header | 157 | struct apic_header { |
167 | { | 158 | APIC_HEADER_DEF}; |
168 | APIC_HEADER_DEF | ||
169 | }; | ||
170 | 159 | ||
171 | /* Values for MPS INTI flags */ | 160 | /* Values for MPS INTI flags */ |
172 | 161 | ||
@@ -180,117 +169,90 @@ struct apic_header | |||
180 | #define TRIGGER_RESERVED 2 | 169 | #define TRIGGER_RESERVED 2 |
181 | #define TRIGGER_LEVEL 3 | 170 | #define TRIGGER_LEVEL 3 |
182 | 171 | ||
183 | /* Common flag definitions */ | 172 | /* Common flag definitions (16 bits each) */ |
184 | 173 | ||
185 | #define MPS_INTI_FLAGS \ | 174 | #define MPS_INTI_FLAGS \ |
186 | u16 polarity : 2; /* Polarity of APIC I/O input signals */\ | 175 | u8 polarity : 2; /* 00-01: Polarity of APIC I/O input signals */\ |
187 | u16 trigger_mode : 2; /* Trigger mode of APIC input signals */\ | 176 | u8 trigger_mode : 2; /* 02-03: Trigger mode of APIC input signals */\ |
188 | u16 reserved1 : 12; /* Reserved, must be zero */ | 177 | u8 : 4; /* 04-07: Reserved, must be zero */\ |
178 | u8 reserved1; /* 08-15: Reserved, must be zero */ | ||
189 | 179 | ||
190 | #define LOCAL_APIC_FLAGS \ | 180 | #define LOCAL_APIC_FLAGS \ |
191 | u32 processor_enabled: 1; /* Processor is usable if set */\ | 181 | u8 processor_enabled: 1; /* 00: Processor is usable if set */\ |
192 | u32 reserved2 : 31; /* Reserved, must be zero */ | 182 | u8 : 7; /* 01-07: Reserved, must be zero */\ |
183 | u8 reserved2; /* 08-15: Reserved, must be zero */ | ||
193 | 184 | ||
194 | /* Sub-structures for MADT */ | 185 | /* Sub-structures for MADT */ |
195 | 186 | ||
196 | struct madt_processor_apic | 187 | struct madt_processor_apic { |
197 | { | 188 | APIC_HEADER_DEF u8 processor_id; /* ACPI processor id */ |
198 | APIC_HEADER_DEF | 189 | u8 local_apic_id; /* Processor's local APIC id */ |
199 | u8 processor_id; /* ACPI processor id */ | 190 | LOCAL_APIC_FLAGS}; |
200 | u8 local_apic_id; /* Processor's local APIC id */ | 191 | |
201 | LOCAL_APIC_FLAGS | 192 | struct madt_io_apic { |
202 | }; | 193 | APIC_HEADER_DEF u8 io_apic_id; /* I/O APIC ID */ |
203 | 194 | u8 reserved; /* Reserved - must be zero */ | |
204 | struct madt_io_apic | 195 | u32 address; /* APIC physical address */ |
205 | { | 196 | u32 interrupt; /* Global system interrupt where INTI |
206 | APIC_HEADER_DEF | 197 | * lines start */ |
207 | u8 io_apic_id; /* I/O APIC ID */ | ||
208 | u8 reserved; /* Reserved - must be zero */ | ||
209 | u32 address; /* APIC physical address */ | ||
210 | u32 interrupt; /* Global system interrupt where INTI | ||
211 | * lines start */ | ||
212 | }; | 198 | }; |
213 | 199 | ||
214 | struct madt_interrupt_override | 200 | struct madt_interrupt_override { |
215 | { | 201 | APIC_HEADER_DEF u8 bus; /* 0 - ISA */ |
216 | APIC_HEADER_DEF | 202 | u8 source; /* Interrupt source (IRQ) */ |
217 | u8 bus; /* 0 - ISA */ | 203 | u32 interrupt; /* Global system interrupt */ |
218 | u8 source; /* Interrupt source (IRQ) */ | 204 | MPS_INTI_FLAGS}; |
219 | u32 interrupt; /* Global system interrupt */ | ||
220 | MPS_INTI_FLAGS | ||
221 | }; | ||
222 | 205 | ||
223 | struct madt_nmi_source | 206 | struct madt_nmi_source { |
224 | { | 207 | APIC_HEADER_DEF MPS_INTI_FLAGS u32 interrupt; /* Global system interrupt */ |
225 | APIC_HEADER_DEF | ||
226 | MPS_INTI_FLAGS | ||
227 | u32 interrupt; /* Global system interrupt */ | ||
228 | }; | 208 | }; |
229 | 209 | ||
230 | struct madt_local_apic_nmi | 210 | struct madt_local_apic_nmi { |
231 | { | 211 | APIC_HEADER_DEF u8 processor_id; /* ACPI processor id */ |
232 | APIC_HEADER_DEF | 212 | MPS_INTI_FLAGS u8 lint; /* LINTn to which NMI is connected */ |
233 | u8 processor_id; /* ACPI processor id */ | ||
234 | MPS_INTI_FLAGS | ||
235 | u8 lint; /* LINTn to which NMI is connected */ | ||
236 | }; | 213 | }; |
237 | 214 | ||
238 | struct madt_address_override | 215 | struct madt_address_override { |
239 | { | 216 | APIC_HEADER_DEF u16 reserved; /* Reserved, must be zero */ |
240 | APIC_HEADER_DEF | 217 | u64 address; /* APIC physical address */ |
241 | u16 reserved; /* Reserved - must be zero */ | ||
242 | u64 address; /* APIC physical address */ | ||
243 | }; | 218 | }; |
244 | 219 | ||
245 | struct madt_io_sapic | 220 | struct madt_io_sapic { |
246 | { | 221 | APIC_HEADER_DEF u8 io_sapic_id; /* I/O SAPIC ID */ |
247 | APIC_HEADER_DEF | 222 | u8 reserved; /* Reserved, must be zero */ |
248 | u8 io_sapic_id; /* I/O SAPIC ID */ | 223 | u32 interrupt_base; /* Glocal interrupt for SAPIC start */ |
249 | u8 reserved; /* Reserved - must be zero */ | 224 | u64 address; /* SAPIC physical address */ |
250 | u32 interrupt_base; /* Glocal interrupt for SAPIC start */ | ||
251 | u64 address; /* SAPIC physical address */ | ||
252 | }; | 225 | }; |
253 | 226 | ||
254 | struct madt_local_sapic | 227 | struct madt_local_sapic { |
255 | { | 228 | APIC_HEADER_DEF u8 processor_id; /* ACPI processor id */ |
256 | APIC_HEADER_DEF | 229 | u8 local_sapic_id; /* SAPIC ID */ |
257 | u8 processor_id; /* ACPI processor id */ | 230 | u8 local_sapic_eid; /* SAPIC EID */ |
258 | u8 local_sapic_id; /* SAPIC ID */ | 231 | u8 reserved[3]; /* Reserved, must be zero */ |
259 | u8 local_sapic_eid; /* SAPIC EID */ | 232 | LOCAL_APIC_FLAGS u32 processor_uID; /* Numeric UID - ACPI 3.0 */ |
260 | u8 reserved [3]; /* Reserved - must be zero */ | 233 | char processor_uIDstring[1]; /* String UID - ACPI 3.0 */ |
261 | LOCAL_APIC_FLAGS | ||
262 | u32 processor_uID; /* Numeric UID - ACPI 3.0 */ | ||
263 | char processor_uIDstring[1]; /* String UID - ACPI 3.0 */ | ||
264 | }; | 234 | }; |
265 | 235 | ||
266 | struct madt_interrupt_source | 236 | struct madt_interrupt_source { |
267 | { | 237 | APIC_HEADER_DEF MPS_INTI_FLAGS u8 interrupt_type; /* 1=PMI, 2=INIT, 3=corrected */ |
268 | APIC_HEADER_DEF | 238 | u8 processor_id; /* Processor ID */ |
269 | MPS_INTI_FLAGS | 239 | u8 processor_eid; /* Processor EID */ |
270 | u8 interrupt_type; /* 1=PMI, 2=INIT, 3=corrected */ | 240 | u8 io_sapic_vector; /* Vector value for PMI interrupts */ |
271 | u8 processor_id; /* Processor ID */ | 241 | u32 interrupt; /* Global system interrupt */ |
272 | u8 processor_eid; /* Processor EID */ | 242 | u32 flags; /* Interrupt Source Flags */ |
273 | u8 io_sapic_vector; /* Vector value for PMI interrupts */ | ||
274 | u32 interrupt; /* Global system interrupt */ | ||
275 | u32 flags; /* Interrupt Source Flags */ | ||
276 | }; | 243 | }; |
277 | 244 | ||
278 | |||
279 | /* | 245 | /* |
280 | * Smart Battery | 246 | * Smart Battery |
281 | */ | 247 | */ |
282 | struct smart_battery_table | 248 | struct smart_battery_table { |
283 | { | 249 | ACPI_TABLE_HEADER_DEF u32 warning_level; |
284 | ACPI_TABLE_HEADER_DEF | 250 | u32 low_level; |
285 | u32 warning_level; | 251 | u32 critical_level; |
286 | u32 low_level; | ||
287 | u32 critical_level; | ||
288 | }; | 252 | }; |
289 | 253 | ||
290 | |||
291 | #pragma pack() | 254 | #pragma pack() |
292 | 255 | ||
293 | |||
294 | /* | 256 | /* |
295 | * ACPI Table information. We save the table address, length, | 257 | * ACPI Table information. We save the table address, length, |
296 | * and type of memory allocation (mapped or allocated) for each | 258 | * and type of memory allocation (mapped or allocated) for each |
@@ -314,39 +276,35 @@ struct smart_battery_table | |||
314 | 276 | ||
315 | /* Data about each known table type */ | 277 | /* Data about each known table type */ |
316 | 278 | ||
317 | struct acpi_table_support | 279 | struct acpi_table_support { |
318 | { | 280 | char *name; |
319 | char *name; | 281 | char *signature; |
320 | char *signature; | 282 | void **global_ptr; |
321 | void **global_ptr; | 283 | u8 sig_length; |
322 | u8 sig_length; | 284 | u8 flags; |
323 | u8 flags; | ||
324 | }; | 285 | }; |
325 | 286 | ||
326 | |||
327 | /* | 287 | /* |
328 | * Get the ACPI version-specific tables | 288 | * Get the ACPI version-specific tables |
329 | */ | 289 | */ |
330 | #include "actbl1.h" /* Acpi 1.0 table definitions */ | 290 | #include "actbl1.h" /* Acpi 1.0 table definitions */ |
331 | #include "actbl2.h" /* Acpi 2.0 table definitions */ | 291 | #include "actbl2.h" /* Acpi 2.0 table definitions */ |
332 | 292 | ||
333 | extern u8 acpi_fadt_is_v1; /* is set to 1 if FADT is revision 1, | 293 | extern u8 acpi_fadt_is_v1; /* is set to 1 if FADT is revision 1, |
334 | * needed for certain workarounds */ | 294 | * needed for certain workarounds */ |
335 | 295 | ||
336 | #pragma pack(1) | 296 | #pragma pack(1) |
337 | /* | 297 | /* |
338 | * High performance timer | 298 | * High performance timer |
339 | */ | 299 | */ |
340 | struct hpet_table | 300 | struct hpet_table { |
341 | { | 301 | ACPI_TABLE_HEADER_DEF u32 hardware_id; |
342 | ACPI_TABLE_HEADER_DEF | 302 | struct acpi_generic_address base_address; |
343 | u32 hardware_id; | 303 | u8 hpet_number; |
344 | struct acpi_generic_address base_address; | 304 | u16 clock_tick; |
345 | u8 hpet_number; | 305 | u8 attributes; |
346 | u16 clock_tick; | ||
347 | u8 attributes; | ||
348 | }; | 306 | }; |
349 | 307 | ||
350 | #pragma pack() | 308 | #pragma pack() |
351 | 309 | ||
352 | #endif /* __ACTBL_H__ */ | 310 | #endif /* __ACTBL_H__ */ |