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__ */ |
