ACPI

From dankwiki

Not to be confused with APIC. The second worst type of coder in the world is the kind that shows up with a bloody shovel. The worst kind is a BIOS coder. Upwards and onwards to ACPI, a creation of the Advanced Configuration and Power Interface group.

Specifications

As of September 2019, the current version of ACPI is Revision 6.3, published January 2019. It is now published as part of the UEFI standards, and administered by the UEFI Forum.

acpidump/acpixtract

acpidump differs subtly and annoyingly between Debian and FreeBSD.

[recombinator](0) $ sudo acpidump  -o recombinator.acpi 
[recombinator](0) $  acpixtract -l recombinator.acpi 

Signature Length  OemId     OemTableId   OemRevision CompilerId CompilerRevision

    DSDT   17452  "INTEL "  "DG965WH "    000006C1    "MSFT"     01000013
    FACS      64
    FACP     116  "INTEL "  "DG965WH "    000006C1    "MSFT"     01000013
    APIC     120  "INTEL "  "DG965WH "    000006C1    "MSFT"     01000013
    WDDT      64  "INTEL "  "DG965WH "    000006C1    "MSFT"     01000013
    MCFG      60  "INTEL "  "DG965WH "    000006C1    "MSFT"     01000013
    ASF!     166  "INTEL "  "DG965WH "    000006C1    "MSFT"     01000013
    HPET      56  "INTEL "  "DG965WH "    000006C1    "MSFT"     01000013
    SSDT     524  "INTEL "  "CpuPm   "    000006C1    "MSFT"     01000013
    SSDT     373  "INTEL "  "Cpu0Ist "    000006C1    "MSFT"     01000013
    SSDT     373  "INTEL "  "Cpu1Ist "    000006C1    "MSFT"     01000013
    SSDT     373  "INTEL "  "Cpu2Ist "    000006C1    "MSFT"     01000013
    SSDT     373  "INTEL "  "Cpu3Ist "    000006C1    "MSFT"     01000013
    RSDT      80  "INTEL "  "DG965WH "    000006C1    "    "     01000013
    RSDP          "INTEL "

Found 15 ACPI tables [20060324]
[recombinator](0) $  acpixtract recombinator.acpi 
Acpi table [DSDT] - 17452 bytes written to DSDT.dat
Acpi table [SSDT] - 524 bytes written to SSDT1.dat
Acpi table [SSDT] - 373 bytes written to SSDT2.dat
Acpi table [SSDT] - 373 bytes written to SSDT3.dat
Acpi table [SSDT] - 373 bytes written to SSDT4.dat
Acpi table [SSDT] - 373 bytes written to SSDT5.dat
[recombinator](0) $ iasl -d DSDT.dat

Intel ACPI Component Architecture
AML Disassembler version 20061109 [May 15 2007]
Copyright (C) 2000 - 2006 Intel Corporation
Supports ACPI Specification Revision 3.0a

Loading Acpi table from file DSDT.dat
Acpi table [DSDT] successfully installed and loaded
Pass 1 parse of [DSDT]
Pass 2 parse of [DSDT]
Parsing Deferred Opcodes (Methods/Buffers/Packages/Regions)
Parsing completed
Disassembly completed, written to "DSDT.dsl"
[recombinator](0) $

DSDT

Differentiated System Description Tables.

[recombinator](0) $ sudo acpidump -t DSDT -b -o acpidump.dsdt
[recombinator](0) $ iasl -d acpidump.dsdt 

Intel ACPI Component Architecture
AML Disassembler version 20061109 [Mar 19 2009]
Copyright (C) 2000 - 2006 Intel Corporation
Supports ACPI Specification Revision 3.0a

Loading Acpi table from file acpidump.dsdt
Acpi table [DSDT] successfully installed and loaded
Pass 1 parse of [DSDT]
Pass 2 parse of [DSDT]
Parsing Deferred Opcodes (Methods/Buffers/Packages/Regions)
..................................................... etc
Parsing completed
Disassembly completed, written to "acpidump.dsl"
[recombinator](0) $ 

Rebuilding a decompiled DSDT

[recombinator](0) $ iasl -tc acpidump.dsl 

Intel ACPI Component Architecture
ASL Optimizing Compiler version 20061109 [Mar 19 2009]
Copyright (C) 2000 - 2006 Intel Corporation
Supports ACPI Specification Revision 3.0a

acpidump.dsl  2186:                     Acquire (MUT0, 0x0FFF)
Warning  1103 -        Possible operator timeout is ignored ^ 

ASL Input:  acpidump.dsl - 5185 lines, 178349 bytes, 1615 keywords
AML Output: acpidump.aml - 15771 bytes 546 named objects 1069 executable opcodes

Compilation complete. 0 Errors, 1 Warnings, 0 Remarks, 597 Optimizations
[recombinator](0) $ 

SRAT

Linux in 2009 gained support for parsing of the BIOS-provided SRAT table (NetBSD also had support by later that year). The SRAT describes memory and processor topology, and the hot-pluggable status of all.

  • Use the CONFIG_X86_64_ACPI_NUMA kernel option to enable SRAT-based enumeration of NUMA.

See also