From 0ed93f4c05896145434adbce5fa328643260dd2e Mon Sep 17 00:00:00 2001 From: Ani Sinha Date: Fri, 18 Sep 2020 14:11:09 +0530 Subject: [PATCH] tests/acpi: update golden master DSDT binary table blobs for q35 In the previously applied commit ("piix4: don't reserve hw resources when hotplug is off globally"), we make changes to the ACPI DSDT tables such that some ACPI code are not generated when bsel is absent. Since as of this point in time, in q35 machines, we do not use bsel for pci buses, we need to update the DSDT table blobs. This patch updates the DSDT golden master tables for q35 machines. At the same time, we clear bios-tables-test-allowed-diff.h for future changes which update tables. Following is a typical diff between the q35 acpi DSDT table blobs: @@ -1,30 +1,30 @@ /* * Intel ACPI Component Architecture * AML/ASL+ Disassembler version 20180105 (64-bit version) * Copyright (c) 2000 - 2018 Intel Corporation * * Disassembling to symbolic ASL+ operators * - * Disassembly of tests/data/acpi/q35/DSDT, Tue Sep 15 18:52:47 2020 + * Disassembly of /tmp/aml-3O0DR0, Tue Sep 15 18:52:47 2020 * * Original Table Header: * Signature "DSDT" - * Length 0x00001DFE (7678) + * Length 0x00001DF6 (7670) * Revision 0x01 **** 32-bit table (V1), no 64-bit math support - * Checksum 0xAC + * Checksum 0x17 * OEM ID "BOCHS " * OEM Table ID "BXPCDSDT" * OEM Revision 0x00000001 (1) * Compiler ID "BXPC" * Compiler Version 0x00000001 (1) */ DefinitionBlock ("", "DSDT", 1, "BOCHS ", "BXPCDSDT", 0x00000001) { Scope (\) { OperationRegion (DBG, SystemIO, 0x0402, One) Field (DBG, ByteAcc, NoLock, Preserve) { DBGB, 8 } @@ -3113,24 +3113,20 @@ Name (_ADR, 0x00010000) // _ADR: Address Method (_S1D, 0, NotSerialized) // _S1D: S1 Device State { Return (Zero) } Method (_S2D, 0, NotSerialized) // _S2D: S2 Device State { Return (Zero) } Method (_S3D, 0, NotSerialized) // _S3D: S3 Device State { Return (Zero) } } - - Method (PCNT, 0, NotSerialized) - { - } } } } Signed-off-by: Ani Sinha Acked-by: Igor Mammedov Message-Id: <20200918084111.15339-12-ani@anisinha.ca> Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin --- tests/.vhost-user-test.c.swo | Bin 0 -> 16384 bytes tests/Makefile.include.orig | 1012 +++++ tests/Makefile.orig | 569 +++ tests/bios-tables-test.c.orig | 925 +++++ tests/data/acpi/diff-aml.sh | 0 tests/data/acpi/disassemle-aml.py | 21 + tests/data/acpi/microvm/APIC.dsl | 56 + tests/data/acpi/microvm/DSDT.dsl | 121 + tests/data/acpi/microvm/FACP.dsl | 196 + tests/data/acpi/pc/APIC.acpihmat.dsl | 112 + tests/data/acpi/pc/APIC.bridge | Bin 0 -> 120 bytes tests/data/acpi/pc/APIC.bridge.dsl | 104 + tests/data/acpi/pc/APIC.cphp.dsl | 146 + tests/data/acpi/pc/APIC.dimmpxm.dsl | 129 + tests/data/acpi/pc/APIC.dsl | 104 + tests/data/acpi/pc/APIC.hpbridge | Bin 0 -> 120 bytes tests/data/acpi/pc/APIC.ipmikcs | Bin 0 -> 120 bytes tests/data/acpi/pc/APIC.ipmikcs.dsl | 104 + tests/data/acpi/pc/APIC.memhp | Bin 0 -> 120 bytes tests/data/acpi/pc/APIC.memhp.dsl | 104 + tests/data/acpi/pc/APIC.numamem | Bin 0 -> 120 bytes tests/data/acpi/pc/APIC.numamem.dsl | 104 + tests/data/acpi/pc/APIC.roothp | Bin 0 -> 120 bytes tests/data/acpi/pc/DSDT.acpihmat.dsl | 1619 ++++++++ tests/data/acpi/pc/DSDT.bridge.dsl | 1800 +++++++++ tests/data/acpi/pc/DSDT.cphp.dsl | 1466 +++++++ tests/data/acpi/pc/DSDT.dimmpxm.dsl | 1719 ++++++++ tests/data/acpi/pc/DSDT.dsl | 1407 +++++++ tests/data/acpi/pc/DSDT.hpbridge | Bin 4895 -> 5021 bytes tests/data/acpi/pc/DSDT.ipmikcs.dsl | 1337 +++++++ tests/data/acpi/pc/DSDT.memhp.dsl | 1625 ++++++++ tests/data/acpi/pc/DSDT.numamem.dsl | 1321 ++++++ tests/data/acpi/pc/DSDT.roothp | Bin 5130 -> 5256 bytes tests/data/acpi/pc/FACP.acpihmat | Bin 0 -> 116 bytes tests/data/acpi/pc/FACP.acpihmat.dsl | 99 + tests/data/acpi/pc/FACP.bridge | Bin 0 -> 116 bytes tests/data/acpi/pc/FACP.bridge.dsl | 99 + tests/data/acpi/pc/FACP.cphp | Bin 0 -> 116 bytes tests/data/acpi/pc/FACP.cphp.dsl | 99 + tests/data/acpi/pc/FACP.dimmpxm | Bin 0 -> 116 bytes tests/data/acpi/pc/FACP.dimmpxm.dsl | 99 + tests/data/acpi/pc/FACP.dsl | 99 + tests/data/acpi/pc/FACP.hpbridge | Bin 0 -> 116 bytes tests/data/acpi/pc/FACP.ipmikcs | Bin 0 -> 116 bytes tests/data/acpi/pc/FACP.ipmikcs.dsl | 99 + tests/data/acpi/pc/FACP.memhp | Bin 0 -> 116 bytes tests/data/acpi/pc/FACP.memhp.dsl | 99 + tests/data/acpi/pc/FACP.numamem | Bin 0 -> 116 bytes tests/data/acpi/pc/FACP.numamem.dsl | 99 + tests/data/acpi/pc/FACP.roothp | Bin 0 -> 116 bytes tests/data/acpi/pc/FACS.acpihmat | Bin 0 -> 64 bytes tests/data/acpi/pc/FACS.acpihmat.dsl | 32 + tests/data/acpi/pc/FACS.bridge | Bin 0 -> 64 bytes tests/data/acpi/pc/FACS.bridge.dsl | 32 + tests/data/acpi/pc/FACS.cphp | Bin 0 -> 64 bytes tests/data/acpi/pc/FACS.cphp.dsl | 32 + tests/data/acpi/pc/FACS.dimmpxm | Bin 0 -> 64 bytes tests/data/acpi/pc/FACS.dimmpxm.dsl | 32 + tests/data/acpi/pc/FACS.dsl | 32 + tests/data/acpi/pc/FACS.hpbridge | Bin 0 -> 64 bytes tests/data/acpi/pc/FACS.ipmikcs | Bin 0 -> 64 bytes tests/data/acpi/pc/FACS.ipmikcs.dsl | 32 + tests/data/acpi/pc/FACS.memhp | Bin 0 -> 64 bytes tests/data/acpi/pc/FACS.memhp.dsl | 32 + tests/data/acpi/pc/FACS.numamem | Bin 0 -> 64 bytes tests/data/acpi/pc/FACS.numamem.dsl | 32 + tests/data/acpi/pc/FACS.roothp | Bin 0 -> 64 bytes tests/data/acpi/pc/HMAT.acpihmat.dsl | 132 + tests/data/acpi/pc/HMAT.dsl | 132 + tests/data/acpi/pc/HPET.acpihmat | Bin 0 -> 56 bytes tests/data/acpi/pc/HPET.acpihmat.dsl | 43 + tests/data/acpi/pc/HPET.bridge | Bin 0 -> 56 bytes tests/data/acpi/pc/HPET.bridge.dsl | 43 + tests/data/acpi/pc/HPET.cphp | Bin 0 -> 56 bytes tests/data/acpi/pc/HPET.cphp.dsl | 43 + tests/data/acpi/pc/HPET.dimmpxm | Bin 0 -> 56 bytes tests/data/acpi/pc/HPET.dimmpxm.dsl | 43 + tests/data/acpi/pc/HPET.dsl | 43 + tests/data/acpi/pc/HPET.hpbridge | Bin 0 -> 56 bytes tests/data/acpi/pc/HPET.ipmikcs | Bin 0 -> 56 bytes tests/data/acpi/pc/HPET.ipmikcs.dsl | 43 + tests/data/acpi/pc/HPET.memhp | Bin 0 -> 56 bytes tests/data/acpi/pc/HPET.memhp.dsl | 43 + tests/data/acpi/pc/HPET.numamem | Bin 0 -> 56 bytes tests/data/acpi/pc/HPET.numamem.dsl | 43 + tests/data/acpi/pc/HPET.roothp | Bin 0 -> 56 bytes tests/data/acpi/pc/NFIT.dimmpxm.dsl | 115 + tests/data/acpi/pc/NFIT.dsl | 115 + tests/data/acpi/pc/SLIT.cphp.dsl | 31 + tests/data/acpi/pc/SLIT.dsl | 31 + tests/data/acpi/pc/SLIT.memhp.dsl | 31 + tests/data/acpi/pc/SRAT.acpihmat.dsl | 137 + tests/data/acpi/pc/SRAT.cphp.dsl | 168 + tests/data/acpi/pc/SRAT.dimmpxm.dsl | 194 + tests/data/acpi/pc/SRAT.dsl | 108 + tests/data/acpi/pc/SRAT.memhp.dsl | 125 + tests/data/acpi/pc/SRAT.numamem.dsl | 108 + tests/data/acpi/pc/SSDT.dsl | 205 + tests/data/acpi/pc/WAET.acpihmat | Bin 0 -> 40 bytes tests/data/acpi/pc/WAET.acpihmat.dsl | 31 + tests/data/acpi/pc/WAET.bridge | Bin 0 -> 40 bytes tests/data/acpi/pc/WAET.bridge.dsl | 31 + tests/data/acpi/pc/WAET.cphp | Bin 0 -> 40 bytes tests/data/acpi/pc/WAET.cphp.dsl | 31 + tests/data/acpi/pc/WAET.dimmpxm | Bin 0 -> 40 bytes tests/data/acpi/pc/WAET.dimmpxm.dsl | 31 + tests/data/acpi/pc/WAET.dsl | 31 + tests/data/acpi/pc/WAET.hpbridge | Bin 0 -> 40 bytes tests/data/acpi/pc/WAET.ipmikcs | Bin 0 -> 40 bytes tests/data/acpi/pc/WAET.ipmikcs.dsl | 31 + tests/data/acpi/pc/WAET.memhp | Bin 0 -> 40 bytes tests/data/acpi/pc/WAET.memhp.dsl | 31 + tests/data/acpi/pc/WAET.numamem | Bin 0 -> 40 bytes tests/data/acpi/pc/WAET.numamem.dsl | 31 + tests/data/acpi/pc/WAET.roothp | Bin 0 -> 40 bytes tests/data/acpi/q35/APIC.acpihmat.dsl | 112 + tests/data/acpi/q35/APIC.bridge | Bin 0 -> 120 bytes tests/data/acpi/q35/APIC.bridge.dsl | 104 + tests/data/acpi/q35/APIC.cphp.dsl | 146 + tests/data/acpi/q35/APIC.dimmpxm.dsl | 129 + tests/data/acpi/q35/APIC.dsl | 104 + tests/data/acpi/q35/APIC.ipmibt | Bin 0 -> 120 bytes tests/data/acpi/q35/APIC.ipmibt.dsl | 104 + tests/data/acpi/q35/APIC.memhp | Bin 0 -> 120 bytes tests/data/acpi/q35/APIC.memhp.dsl | 104 + tests/data/acpi/q35/APIC.mmio64 | Bin 0 -> 120 bytes tests/data/acpi/q35/APIC.mmio64.dsl | 104 + tests/data/acpi/q35/APIC.numamem | Bin 0 -> 120 bytes tests/data/acpi/q35/APIC.numamem.dsl | 104 + tests/data/acpi/q35/APIC.tis | Bin 0 -> 120 bytes tests/data/acpi/q35/APIC.tis.dsl | 104 + tests/data/acpi/q35/DSDT | Bin 7804 -> 7796 bytes tests/data/acpi/q35/DSDT.acpihmat | Bin 9129 -> 9121 bytes tests/data/acpi/q35/DSDT.acpihmat.dsl | 3436 ++++++++++++++++ tests/data/acpi/q35/DSDT.bridge | Bin 7821 -> 7814 bytes tests/data/acpi/q35/DSDT.bridge.dsl | 3141 +++++++++++++++ tests/data/acpi/q35/DSDT.cphp | Bin 8268 -> 8260 bytes tests/data/acpi/q35/DSDT.cphp.dsl | 3283 +++++++++++++++ tests/data/acpi/q35/DSDT.dimmpxm | Bin 9458 -> 9450 bytes tests/data/acpi/q35/DSDT.dimmpxm.dsl | 3535 +++++++++++++++++ tests/data/acpi/q35/DSDT.dsl | 3351 ++++++++++++++++ tests/data/acpi/q35/DSDT.ipmibt | Bin 7879 -> 7871 bytes tests/data/acpi/q35/DSDT.ipmibt.dsl | 3156 +++++++++++++++ tests/data/acpi/q35/DSDT.memhp | Bin 9163 -> 9155 bytes tests/data/acpi/q35/DSDT.memhp.dsl | 3442 ++++++++++++++++ tests/data/acpi/q35/DSDT.mmio64 | Bin 8934 -> 8927 bytes tests/data/acpi/q35/DSDT.mmio64.dsl | 3377 ++++++++++++++++ tests/data/acpi/q35/DSDT.numamem | Bin 7810 -> 7802 bytes tests/data/acpi/q35/DSDT.numamem.dsl | 3138 +++++++++++++++ tests/data/acpi/q35/DSDT.tis | Bin 8409 -> 8402 bytes tests/data/acpi/q35/DSDT.tis.dsl | 3321 ++++++++++++++++ tests/data/acpi/q35/FACP.acpihmat | Bin 0 -> 244 bytes tests/data/acpi/q35/FACP.acpihmat.dsl | 179 + tests/data/acpi/q35/FACP.bridge | Bin 0 -> 244 bytes tests/data/acpi/q35/FACP.bridge.dsl | 179 + tests/data/acpi/q35/FACP.cphp | Bin 0 -> 244 bytes tests/data/acpi/q35/FACP.cphp.dsl | 179 + tests/data/acpi/q35/FACP.dimmpxm | Bin 0 -> 244 bytes tests/data/acpi/q35/FACP.dimmpxm.dsl | 179 + tests/data/acpi/q35/FACP.dsl | 179 + tests/data/acpi/q35/FACP.ipmibt | Bin 0 -> 244 bytes tests/data/acpi/q35/FACP.ipmibt.dsl | 179 + tests/data/acpi/q35/FACP.memhp | Bin 0 -> 244 bytes tests/data/acpi/q35/FACP.memhp.dsl | 179 + tests/data/acpi/q35/FACP.mmio64 | Bin 0 -> 244 bytes tests/data/acpi/q35/FACP.mmio64.dsl | 179 + tests/data/acpi/q35/FACP.numamem | Bin 0 -> 244 bytes tests/data/acpi/q35/FACP.numamem.dsl | 179 + tests/data/acpi/q35/FACP.tis | Bin 0 -> 244 bytes tests/data/acpi/q35/FACP.tis.dsl | 179 + tests/data/acpi/q35/FACS.acpihmat | Bin 0 -> 64 bytes tests/data/acpi/q35/FACS.acpihmat.dsl | 32 + tests/data/acpi/q35/FACS.bridge | Bin 0 -> 64 bytes tests/data/acpi/q35/FACS.bridge.dsl | 32 + tests/data/acpi/q35/FACS.cphp | Bin 0 -> 64 bytes tests/data/acpi/q35/FACS.cphp.dsl | 32 + tests/data/acpi/q35/FACS.dimmpxm | Bin 0 -> 64 bytes tests/data/acpi/q35/FACS.dimmpxm.dsl | 32 + tests/data/acpi/q35/FACS.dsl | 32 + tests/data/acpi/q35/FACS.ipmibt | Bin 0 -> 64 bytes tests/data/acpi/q35/FACS.ipmibt.dsl | 32 + tests/data/acpi/q35/FACS.memhp | Bin 0 -> 64 bytes tests/data/acpi/q35/FACS.memhp.dsl | 32 + tests/data/acpi/q35/FACS.mmio64 | Bin 0 -> 64 bytes tests/data/acpi/q35/FACS.mmio64.dsl | 32 + tests/data/acpi/q35/FACS.numamem | Bin 0 -> 64 bytes tests/data/acpi/q35/FACS.numamem.dsl | 32 + tests/data/acpi/q35/FACS.tis | Bin 0 -> 64 bytes tests/data/acpi/q35/FACS.tis.dsl | 32 + tests/data/acpi/q35/HMAT.acpihmat.dsl | 132 + tests/data/acpi/q35/HMAT.dsl | 132 + tests/data/acpi/q35/HPET.acpihmat | Bin 0 -> 56 bytes tests/data/acpi/q35/HPET.acpihmat.dsl | 43 + tests/data/acpi/q35/HPET.bridge | Bin 0 -> 56 bytes tests/data/acpi/q35/HPET.bridge.dsl | 43 + tests/data/acpi/q35/HPET.cphp | Bin 0 -> 56 bytes tests/data/acpi/q35/HPET.cphp.dsl | 43 + tests/data/acpi/q35/HPET.dimmpxm | Bin 0 -> 56 bytes tests/data/acpi/q35/HPET.dimmpxm.dsl | 43 + tests/data/acpi/q35/HPET.dsl | 43 + tests/data/acpi/q35/HPET.ipmibt | Bin 0 -> 56 bytes tests/data/acpi/q35/HPET.ipmibt.dsl | 43 + tests/data/acpi/q35/HPET.memhp | Bin 0 -> 56 bytes tests/data/acpi/q35/HPET.memhp.dsl | 43 + tests/data/acpi/q35/HPET.mmio64 | Bin 0 -> 56 bytes tests/data/acpi/q35/HPET.mmio64.dsl | 43 + tests/data/acpi/q35/HPET.numamem | Bin 0 -> 56 bytes tests/data/acpi/q35/HPET.numamem.dsl | 43 + tests/data/acpi/q35/HPET.tis | Bin 0 -> 56 bytes tests/data/acpi/q35/HPET.tis.dsl | 43 + tests/data/acpi/q35/MCFG.acpihmat | Bin 0 -> 60 bytes tests/data/acpi/q35/MCFG.acpihmat.dsl | 36 + tests/data/acpi/q35/MCFG.bridge | Bin 0 -> 60 bytes tests/data/acpi/q35/MCFG.bridge.dsl | 36 + tests/data/acpi/q35/MCFG.cphp | Bin 0 -> 60 bytes tests/data/acpi/q35/MCFG.cphp.dsl | 36 + tests/data/acpi/q35/MCFG.dimmpxm | Bin 0 -> 60 bytes tests/data/acpi/q35/MCFG.dimmpxm.dsl | 36 + tests/data/acpi/q35/MCFG.dsl | 36 + tests/data/acpi/q35/MCFG.ipmibt | Bin 0 -> 60 bytes tests/data/acpi/q35/MCFG.ipmibt.dsl | 36 + tests/data/acpi/q35/MCFG.memhp | Bin 0 -> 60 bytes tests/data/acpi/q35/MCFG.memhp.dsl | 36 + tests/data/acpi/q35/MCFG.mmio64 | Bin 0 -> 60 bytes tests/data/acpi/q35/MCFG.mmio64.dsl | 36 + tests/data/acpi/q35/MCFG.numamem | Bin 0 -> 60 bytes tests/data/acpi/q35/MCFG.numamem.dsl | 36 + tests/data/acpi/q35/MCFG.tis | Bin 0 -> 60 bytes tests/data/acpi/q35/MCFG.tis.dsl | 36 + tests/data/acpi/q35/NFIT.dimmpxm.dsl | 115 + tests/data/acpi/q35/NFIT.dsl | 115 + tests/data/acpi/q35/SLIT.cphp.dsl | 31 + tests/data/acpi/q35/SLIT.dsl | 31 + tests/data/acpi/q35/SLIT.memhp.dsl | 31 + tests/data/acpi/q35/SRAT.acpihmat.dsl | 137 + tests/data/acpi/q35/SRAT.cphp.dsl | 168 + tests/data/acpi/q35/SRAT.dimmpxm.dsl | 194 + tests/data/acpi/q35/SRAT.dsl | 108 + tests/data/acpi/q35/SRAT.memhp.dsl | 125 + tests/data/acpi/q35/SRAT.mmio64.dsl | 108 + tests/data/acpi/q35/SRAT.numamem.dsl | 108 + tests/data/acpi/q35/SSDT.dsl | 205 + tests/data/acpi/q35/TPM2.dsl | 38 + tests/data/acpi/q35/TPM2.tis.dsl | 38 + tests/data/acpi/q35/WAET.acpihmat | Bin 0 -> 40 bytes tests/data/acpi/q35/WAET.acpihmat.dsl | 31 + tests/data/acpi/q35/WAET.bridge | Bin 0 -> 40 bytes tests/data/acpi/q35/WAET.bridge.dsl | 31 + tests/data/acpi/q35/WAET.cphp | Bin 0 -> 40 bytes tests/data/acpi/q35/WAET.cphp.dsl | 31 + tests/data/acpi/q35/WAET.dimmpxm | Bin 0 -> 40 bytes tests/data/acpi/q35/WAET.dimmpxm.dsl | 31 + tests/data/acpi/q35/WAET.dsl | 31 + tests/data/acpi/q35/WAET.ipmibt | Bin 0 -> 40 bytes tests/data/acpi/q35/WAET.ipmibt.dsl | 31 + tests/data/acpi/q35/WAET.memhp | Bin 0 -> 40 bytes tests/data/acpi/q35/WAET.memhp.dsl | 31 + tests/data/acpi/q35/WAET.mmio64 | Bin 0 -> 40 bytes tests/data/acpi/q35/WAET.mmio64.dsl | 31 + tests/data/acpi/q35/WAET.numamem | Bin 0 -> 40 bytes tests/data/acpi/q35/WAET.numamem.dsl | 31 + tests/data/acpi/q35/WAET.tis | Bin 0 -> 40 bytes tests/data/acpi/q35/WAET.tis.dsl | 31 + tests/data/acpi/virt/APIC.dsl | 78 + tests/data/acpi/virt/APIC.memhp.dsl | 78 + tests/data/acpi/virt/APIC.numamem.dsl | 78 + tests/data/acpi/virt/DSDT.dsl | 1906 +++++++++ tests/data/acpi/virt/DSDT.memhp.dsl | 2215 +++++++++++ tests/data/acpi/virt/DSDT.numamem.dsl | 1906 +++++++++ tests/data/acpi/virt/FACP.dsl | 196 + tests/data/acpi/virt/FACP.memhp.dsl | 196 + tests/data/acpi/virt/FACP.numamem.dsl | 196 + tests/data/acpi/virt/GTDT.dsl | 61 + tests/data/acpi/virt/GTDT.memhp.dsl | 61 + tests/data/acpi/virt/GTDT.numamem.dsl | 61 + tests/data/acpi/virt/MCFG.dsl | 36 + tests/data/acpi/virt/MCFG.memhp.dsl | 36 + tests/data/acpi/virt/MCFG.numamem.dsl | 36 + tests/data/acpi/virt/NFIT.dsl | 103 + tests/data/acpi/virt/NFIT.memhp.dsl | 103 + tests/data/acpi/virt/SLIT.dsl | 31 + tests/data/acpi/virt/SLIT.memhp.dsl | 31 + tests/data/acpi/virt/SPCR.dsl | 57 + tests/data/acpi/virt/SPCR.memhp.dsl | 57 + tests/data/acpi/virt/SPCR.numamem.dsl | 57 + tests/data/acpi/virt/SRAT.dsl | 57 + tests/data/acpi/virt/SRAT.memhp.dsl | 107 + tests/data/acpi/virt/SRAT.numamem.dsl | 57 + tests/data/acpi/virt/SSDT.dsl | 205 + .../bios-tables-test.x86_64.iso.raw | Bin 0 -> 425984 bytes tests/libqtest.c.orig | 1106 ++++++ tests/qemu-iotests/core.12067 | Bin 0 -> 22716416 bytes tests/qtest/bios-tables-test-allowed-diff.h | 10 - .../bios-tables-test-allowed-diff.h.orig | 18 + .../qtest/bios-tables-test-allowed-diff.h.rej | 9 + tests/qtest/bios-tables-test.c.orig | 1200 ++++++ tests/qtest/bios-tables-test.c.rej | 22 + tests/test-qapi-event.c | 198 + tests/test-qmp-introspect.c | 58 + tests/test-qmp-marshal.c | 383 ++ tests/vhost-user-bridge | Bin 0 -> 83120 bytes tests/vhost-user-bridge.c.orig | 1432 +++++++ tests/vhost-user-test.c.orig | 364 ++ 303 files changed, 71489 insertions(+), 10 deletions(-) create mode 100644 tests/.vhost-user-test.c.swo create mode 100644 tests/Makefile.include.orig create mode 100644 tests/Makefile.orig create mode 100644 tests/bios-tables-test.c.orig create mode 100644 tests/data/acpi/diff-aml.sh create mode 100644 tests/data/acpi/disassemle-aml.py create mode 100644 tests/data/acpi/microvm/APIC.dsl create mode 100644 tests/data/acpi/microvm/DSDT.dsl create mode 100644 tests/data/acpi/microvm/FACP.dsl create mode 100644 tests/data/acpi/pc/APIC.acpihmat.dsl create mode 100644 tests/data/acpi/pc/APIC.bridge create mode 100644 tests/data/acpi/pc/APIC.bridge.dsl create mode 100644 tests/data/acpi/pc/APIC.cphp.dsl create mode 100644 tests/data/acpi/pc/APIC.dimmpxm.dsl create mode 100644 tests/data/acpi/pc/APIC.dsl create mode 100644 tests/data/acpi/pc/APIC.hpbridge create mode 100644 tests/data/acpi/pc/APIC.ipmikcs create mode 100644 tests/data/acpi/pc/APIC.ipmikcs.dsl create mode 100644 tests/data/acpi/pc/APIC.memhp create mode 100644 tests/data/acpi/pc/APIC.memhp.dsl create mode 100644 tests/data/acpi/pc/APIC.numamem create mode 100644 tests/data/acpi/pc/APIC.numamem.dsl create mode 100644 tests/data/acpi/pc/APIC.roothp create mode 100644 tests/data/acpi/pc/DSDT.acpihmat.dsl create mode 100644 tests/data/acpi/pc/DSDT.bridge.dsl create mode 100644 tests/data/acpi/pc/DSDT.cphp.dsl create mode 100644 tests/data/acpi/pc/DSDT.dimmpxm.dsl create mode 100644 tests/data/acpi/pc/DSDT.dsl create mode 100644 tests/data/acpi/pc/DSDT.ipmikcs.dsl create mode 100644 tests/data/acpi/pc/DSDT.memhp.dsl create mode 100644 tests/data/acpi/pc/DSDT.numamem.dsl create mode 100644 tests/data/acpi/pc/FACP.acpihmat create mode 100644 tests/data/acpi/pc/FACP.acpihmat.dsl create mode 100644 tests/data/acpi/pc/FACP.bridge create mode 100644 tests/data/acpi/pc/FACP.bridge.dsl create mode 100644 tests/data/acpi/pc/FACP.cphp create mode 100644 tests/data/acpi/pc/FACP.cphp.dsl create mode 100644 tests/data/acpi/pc/FACP.dimmpxm create mode 100644 tests/data/acpi/pc/FACP.dimmpxm.dsl create mode 100644 tests/data/acpi/pc/FACP.dsl create mode 100644 tests/data/acpi/pc/FACP.hpbridge create mode 100644 tests/data/acpi/pc/FACP.ipmikcs create mode 100644 tests/data/acpi/pc/FACP.ipmikcs.dsl create mode 100644 tests/data/acpi/pc/FACP.memhp create mode 100644 tests/data/acpi/pc/FACP.memhp.dsl create mode 100644 tests/data/acpi/pc/FACP.numamem create mode 100644 tests/data/acpi/pc/FACP.numamem.dsl create mode 100644 tests/data/acpi/pc/FACP.roothp create mode 100644 tests/data/acpi/pc/FACS.acpihmat create mode 100644 tests/data/acpi/pc/FACS.acpihmat.dsl create mode 100644 tests/data/acpi/pc/FACS.bridge create mode 100644 tests/data/acpi/pc/FACS.bridge.dsl create mode 100644 tests/data/acpi/pc/FACS.cphp create mode 100644 tests/data/acpi/pc/FACS.cphp.dsl create mode 100644 tests/data/acpi/pc/FACS.dimmpxm create mode 100644 tests/data/acpi/pc/FACS.dimmpxm.dsl create mode 100644 tests/data/acpi/pc/FACS.dsl create mode 100644 tests/data/acpi/pc/FACS.hpbridge create mode 100644 tests/data/acpi/pc/FACS.ipmikcs create mode 100644 tests/data/acpi/pc/FACS.ipmikcs.dsl create mode 100644 tests/data/acpi/pc/FACS.memhp create mode 100644 tests/data/acpi/pc/FACS.memhp.dsl create mode 100644 tests/data/acpi/pc/FACS.numamem create mode 100644 tests/data/acpi/pc/FACS.numamem.dsl create mode 100644 tests/data/acpi/pc/FACS.roothp create mode 100644 tests/data/acpi/pc/HMAT.acpihmat.dsl create mode 100644 tests/data/acpi/pc/HMAT.dsl create mode 100644 tests/data/acpi/pc/HPET.acpihmat create mode 100644 tests/data/acpi/pc/HPET.acpihmat.dsl create mode 100644 tests/data/acpi/pc/HPET.bridge create mode 100644 tests/data/acpi/pc/HPET.bridge.dsl create mode 100644 tests/data/acpi/pc/HPET.cphp create mode 100644 tests/data/acpi/pc/HPET.cphp.dsl create mode 100644 tests/data/acpi/pc/HPET.dimmpxm create mode 100644 tests/data/acpi/pc/HPET.dimmpxm.dsl create mode 100644 tests/data/acpi/pc/HPET.dsl create mode 100644 tests/data/acpi/pc/HPET.hpbridge create mode 100644 tests/data/acpi/pc/HPET.ipmikcs create mode 100644 tests/data/acpi/pc/HPET.ipmikcs.dsl create mode 100644 tests/data/acpi/pc/HPET.memhp create mode 100644 tests/data/acpi/pc/HPET.memhp.dsl create mode 100644 tests/data/acpi/pc/HPET.numamem create mode 100644 tests/data/acpi/pc/HPET.numamem.dsl create mode 100644 tests/data/acpi/pc/HPET.roothp create mode 100644 tests/data/acpi/pc/NFIT.dimmpxm.dsl create mode 100644 tests/data/acpi/pc/NFIT.dsl create mode 100644 tests/data/acpi/pc/SLIT.cphp.dsl create mode 100644 tests/data/acpi/pc/SLIT.dsl create mode 100644 tests/data/acpi/pc/SLIT.memhp.dsl create mode 100644 tests/data/acpi/pc/SRAT.acpihmat.dsl create mode 100644 tests/data/acpi/pc/SRAT.cphp.dsl create mode 100644 tests/data/acpi/pc/SRAT.dimmpxm.dsl create mode 100644 tests/data/acpi/pc/SRAT.dsl create mode 100644 tests/data/acpi/pc/SRAT.memhp.dsl create mode 100644 tests/data/acpi/pc/SRAT.numamem.dsl create mode 100644 tests/data/acpi/pc/SSDT.dsl create mode 100644 tests/data/acpi/pc/WAET.acpihmat create mode 100644 tests/data/acpi/pc/WAET.acpihmat.dsl create mode 100644 tests/data/acpi/pc/WAET.bridge create mode 100644 tests/data/acpi/pc/WAET.bridge.dsl create mode 100644 tests/data/acpi/pc/WAET.cphp create mode 100644 tests/data/acpi/pc/WAET.cphp.dsl create mode 100644 tests/data/acpi/pc/WAET.dimmpxm create mode 100644 tests/data/acpi/pc/WAET.dimmpxm.dsl create mode 100644 tests/data/acpi/pc/WAET.dsl create mode 100644 tests/data/acpi/pc/WAET.hpbridge create mode 100644 tests/data/acpi/pc/WAET.ipmikcs create mode 100644 tests/data/acpi/pc/WAET.ipmikcs.dsl create mode 100644 tests/data/acpi/pc/WAET.memhp create mode 100644 tests/data/acpi/pc/WAET.memhp.dsl create mode 100644 tests/data/acpi/pc/WAET.numamem create mode 100644 tests/data/acpi/pc/WAET.numamem.dsl create mode 100644 tests/data/acpi/pc/WAET.roothp create mode 100644 tests/data/acpi/q35/APIC.acpihmat.dsl create mode 100644 tests/data/acpi/q35/APIC.bridge create mode 100644 tests/data/acpi/q35/APIC.bridge.dsl create mode 100644 tests/data/acpi/q35/APIC.cphp.dsl create mode 100644 tests/data/acpi/q35/APIC.dimmpxm.dsl create mode 100644 tests/data/acpi/q35/APIC.dsl create mode 100644 tests/data/acpi/q35/APIC.ipmibt create mode 100644 tests/data/acpi/q35/APIC.ipmibt.dsl create mode 100644 tests/data/acpi/q35/APIC.memhp create mode 100644 tests/data/acpi/q35/APIC.memhp.dsl create mode 100644 tests/data/acpi/q35/APIC.mmio64 create mode 100644 tests/data/acpi/q35/APIC.mmio64.dsl create mode 100644 tests/data/acpi/q35/APIC.numamem create mode 100644 tests/data/acpi/q35/APIC.numamem.dsl create mode 100644 tests/data/acpi/q35/APIC.tis create mode 100644 tests/data/acpi/q35/APIC.tis.dsl create mode 100644 tests/data/acpi/q35/DSDT.acpihmat.dsl create mode 100644 tests/data/acpi/q35/DSDT.bridge.dsl create mode 100644 tests/data/acpi/q35/DSDT.cphp.dsl create mode 100644 tests/data/acpi/q35/DSDT.dimmpxm.dsl create mode 100644 tests/data/acpi/q35/DSDT.dsl create mode 100644 tests/data/acpi/q35/DSDT.ipmibt.dsl create mode 100644 tests/data/acpi/q35/DSDT.memhp.dsl create mode 100644 tests/data/acpi/q35/DSDT.mmio64.dsl create mode 100644 tests/data/acpi/q35/DSDT.numamem.dsl create mode 100644 tests/data/acpi/q35/DSDT.tis.dsl create mode 100644 tests/data/acpi/q35/FACP.acpihmat create mode 100644 tests/data/acpi/q35/FACP.acpihmat.dsl create mode 100644 tests/data/acpi/q35/FACP.bridge create mode 100644 tests/data/acpi/q35/FACP.bridge.dsl create mode 100644 tests/data/acpi/q35/FACP.cphp create mode 100644 tests/data/acpi/q35/FACP.cphp.dsl create mode 100644 tests/data/acpi/q35/FACP.dimmpxm create mode 100644 tests/data/acpi/q35/FACP.dimmpxm.dsl create mode 100644 tests/data/acpi/q35/FACP.dsl create mode 100644 tests/data/acpi/q35/FACP.ipmibt create mode 100644 tests/data/acpi/q35/FACP.ipmibt.dsl create mode 100644 tests/data/acpi/q35/FACP.memhp create mode 100644 tests/data/acpi/q35/FACP.memhp.dsl create mode 100644 tests/data/acpi/q35/FACP.mmio64 create mode 100644 tests/data/acpi/q35/FACP.mmio64.dsl create mode 100644 tests/data/acpi/q35/FACP.numamem create mode 100644 tests/data/acpi/q35/FACP.numamem.dsl create mode 100644 tests/data/acpi/q35/FACP.tis create mode 100644 tests/data/acpi/q35/FACP.tis.dsl create mode 100644 tests/data/acpi/q35/FACS.acpihmat create mode 100644 tests/data/acpi/q35/FACS.acpihmat.dsl create mode 100644 tests/data/acpi/q35/FACS.bridge create mode 100644 tests/data/acpi/q35/FACS.bridge.dsl create mode 100644 tests/data/acpi/q35/FACS.cphp create mode 100644 tests/data/acpi/q35/FACS.cphp.dsl create mode 100644 tests/data/acpi/q35/FACS.dimmpxm create mode 100644 tests/data/acpi/q35/FACS.dimmpxm.dsl create mode 100644 tests/data/acpi/q35/FACS.dsl create mode 100644 tests/data/acpi/q35/FACS.ipmibt create mode 100644 tests/data/acpi/q35/FACS.ipmibt.dsl create mode 100644 tests/data/acpi/q35/FACS.memhp create mode 100644 tests/data/acpi/q35/FACS.memhp.dsl create mode 100644 tests/data/acpi/q35/FACS.mmio64 create mode 100644 tests/data/acpi/q35/FACS.mmio64.dsl create mode 100644 tests/data/acpi/q35/FACS.numamem create mode 100644 tests/data/acpi/q35/FACS.numamem.dsl create mode 100644 tests/data/acpi/q35/FACS.tis create mode 100644 tests/data/acpi/q35/FACS.tis.dsl create mode 100644 tests/data/acpi/q35/HMAT.acpihmat.dsl create mode 100644 tests/data/acpi/q35/HMAT.dsl create mode 100644 tests/data/acpi/q35/HPET.acpihmat create mode 100644 tests/data/acpi/q35/HPET.acpihmat.dsl create mode 100644 tests/data/acpi/q35/HPET.bridge create mode 100644 tests/data/acpi/q35/HPET.bridge.dsl create mode 100644 tests/data/acpi/q35/HPET.cphp create mode 100644 tests/data/acpi/q35/HPET.cphp.dsl create mode 100644 tests/data/acpi/q35/HPET.dimmpxm create mode 100644 tests/data/acpi/q35/HPET.dimmpxm.dsl create mode 100644 tests/data/acpi/q35/HPET.dsl create mode 100644 tests/data/acpi/q35/HPET.ipmibt create mode 100644 tests/data/acpi/q35/HPET.ipmibt.dsl create mode 100644 tests/data/acpi/q35/HPET.memhp create mode 100644 tests/data/acpi/q35/HPET.memhp.dsl create mode 100644 tests/data/acpi/q35/HPET.mmio64 create mode 100644 tests/data/acpi/q35/HPET.mmio64.dsl create mode 100644 tests/data/acpi/q35/HPET.numamem create mode 100644 tests/data/acpi/q35/HPET.numamem.dsl create mode 100644 tests/data/acpi/q35/HPET.tis create mode 100644 tests/data/acpi/q35/HPET.tis.dsl create mode 100644 tests/data/acpi/q35/MCFG.acpihmat create mode 100644 tests/data/acpi/q35/MCFG.acpihmat.dsl create mode 100644 tests/data/acpi/q35/MCFG.bridge create mode 100644 tests/data/acpi/q35/MCFG.bridge.dsl create mode 100644 tests/data/acpi/q35/MCFG.cphp create mode 100644 tests/data/acpi/q35/MCFG.cphp.dsl create mode 100644 tests/data/acpi/q35/MCFG.dimmpxm create mode 100644 tests/data/acpi/q35/MCFG.dimmpxm.dsl create mode 100644 tests/data/acpi/q35/MCFG.dsl create mode 100644 tests/data/acpi/q35/MCFG.ipmibt create mode 100644 tests/data/acpi/q35/MCFG.ipmibt.dsl create mode 100644 tests/data/acpi/q35/MCFG.memhp create mode 100644 tests/data/acpi/q35/MCFG.memhp.dsl create mode 100644 tests/data/acpi/q35/MCFG.mmio64 create mode 100644 tests/data/acpi/q35/MCFG.mmio64.dsl create mode 100644 tests/data/acpi/q35/MCFG.numamem create mode 100644 tests/data/acpi/q35/MCFG.numamem.dsl create mode 100644 tests/data/acpi/q35/MCFG.tis create mode 100644 tests/data/acpi/q35/MCFG.tis.dsl create mode 100644 tests/data/acpi/q35/NFIT.dimmpxm.dsl create mode 100644 tests/data/acpi/q35/NFIT.dsl create mode 100644 tests/data/acpi/q35/SLIT.cphp.dsl create mode 100644 tests/data/acpi/q35/SLIT.dsl create mode 100644 tests/data/acpi/q35/SLIT.memhp.dsl create mode 100644 tests/data/acpi/q35/SRAT.acpihmat.dsl create mode 100644 tests/data/acpi/q35/SRAT.cphp.dsl create mode 100644 tests/data/acpi/q35/SRAT.dimmpxm.dsl create mode 100644 tests/data/acpi/q35/SRAT.dsl create mode 100644 tests/data/acpi/q35/SRAT.memhp.dsl create mode 100644 tests/data/acpi/q35/SRAT.mmio64.dsl create mode 100644 tests/data/acpi/q35/SRAT.numamem.dsl create mode 100644 tests/data/acpi/q35/SSDT.dsl create mode 100644 tests/data/acpi/q35/TPM2.dsl create mode 100644 tests/data/acpi/q35/TPM2.tis.dsl create mode 100644 tests/data/acpi/q35/WAET.acpihmat create mode 100644 tests/data/acpi/q35/WAET.acpihmat.dsl create mode 100644 tests/data/acpi/q35/WAET.bridge create mode 100644 tests/data/acpi/q35/WAET.bridge.dsl create mode 100644 tests/data/acpi/q35/WAET.cphp create mode 100644 tests/data/acpi/q35/WAET.cphp.dsl create mode 100644 tests/data/acpi/q35/WAET.dimmpxm create mode 100644 tests/data/acpi/q35/WAET.dimmpxm.dsl create mode 100644 tests/data/acpi/q35/WAET.dsl create mode 100644 tests/data/acpi/q35/WAET.ipmibt create mode 100644 tests/data/acpi/q35/WAET.ipmibt.dsl create mode 100644 tests/data/acpi/q35/WAET.memhp create mode 100644 tests/data/acpi/q35/WAET.memhp.dsl create mode 100644 tests/data/acpi/q35/WAET.mmio64 create mode 100644 tests/data/acpi/q35/WAET.mmio64.dsl create mode 100644 tests/data/acpi/q35/WAET.numamem create mode 100644 tests/data/acpi/q35/WAET.numamem.dsl create mode 100644 tests/data/acpi/q35/WAET.tis create mode 100644 tests/data/acpi/q35/WAET.tis.dsl create mode 100644 tests/data/acpi/virt/APIC.dsl create mode 100644 tests/data/acpi/virt/APIC.memhp.dsl create mode 100644 tests/data/acpi/virt/APIC.numamem.dsl create mode 100644 tests/data/acpi/virt/DSDT.dsl create mode 100644 tests/data/acpi/virt/DSDT.memhp.dsl create mode 100644 tests/data/acpi/virt/DSDT.numamem.dsl create mode 100644 tests/data/acpi/virt/FACP.dsl create mode 100644 tests/data/acpi/virt/FACP.memhp.dsl create mode 100644 tests/data/acpi/virt/FACP.numamem.dsl create mode 100644 tests/data/acpi/virt/GTDT.dsl create mode 100644 tests/data/acpi/virt/GTDT.memhp.dsl create mode 100644 tests/data/acpi/virt/GTDT.numamem.dsl create mode 100644 tests/data/acpi/virt/MCFG.dsl create mode 100644 tests/data/acpi/virt/MCFG.memhp.dsl create mode 100644 tests/data/acpi/virt/MCFG.numamem.dsl create mode 100644 tests/data/acpi/virt/NFIT.dsl create mode 100644 tests/data/acpi/virt/NFIT.memhp.dsl create mode 100644 tests/data/acpi/virt/SLIT.dsl create mode 100644 tests/data/acpi/virt/SLIT.memhp.dsl create mode 100644 tests/data/acpi/virt/SPCR.dsl create mode 100644 tests/data/acpi/virt/SPCR.memhp.dsl create mode 100644 tests/data/acpi/virt/SPCR.numamem.dsl create mode 100644 tests/data/acpi/virt/SRAT.dsl create mode 100644 tests/data/acpi/virt/SRAT.memhp.dsl create mode 100644 tests/data/acpi/virt/SRAT.numamem.dsl create mode 100644 tests/data/acpi/virt/SSDT.dsl create mode 100644 tests/data/uefi-boot-images/bios-tables-test.x86_64.iso.raw create mode 100644 tests/libqtest.c.orig create mode 100644 tests/qemu-iotests/core.12067 create mode 100644 tests/qtest/bios-tables-test-allowed-diff.h.orig create mode 100644 tests/qtest/bios-tables-test-allowed-diff.h.rej create mode 100644 tests/qtest/bios-tables-test.c.orig create mode 100644 tests/qtest/bios-tables-test.c.rej create mode 100644 tests/test-qapi-event.c create mode 100644 tests/test-qmp-introspect.c create mode 100644 tests/test-qmp-marshal.c create mode 100755 tests/vhost-user-bridge create mode 100644 tests/vhost-user-bridge.c.orig create mode 100644 tests/vhost-user-test.c.orig diff --git a/tests/.vhost-user-test.c.swo b/tests/.vhost-user-test.c.swo new file mode 100644 index 0000000000000000000000000000000000000000..5545d2bef350c4c4197c70c9789465cfee8f84ce GIT binary patch literal 16384 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 + +tests/qapi-schema/doc-good.test.texi: $(SRC_PATH)/tests/qapi-schema/doc-good.json $(qapi-py) + $(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-gen.py \ + -o tests/qapi-schema -p "doc-good-" $<, \ + "GEN","$@") + @mv tests/qapi-schema/doc-good-qapi-doc.texi $@ + @rm -f tests/qapi-schema/doc-good-qapi-*.[ch] tests/qapi-schema/doc-good-qmp-*.[ch] + +tests/test-string-output-visitor$(EXESUF): tests/test-string-output-visitor.o $(test-qapi-obj-y) +tests/test-string-input-visitor$(EXESUF): tests/test-string-input-visitor.o $(test-qapi-obj-y) +tests/test-qmp-event$(EXESUF): tests/test-qmp-event.o $(test-qapi-obj-y) +tests/test-qobject-output-visitor$(EXESUF): tests/test-qobject-output-visitor.o $(test-qapi-obj-y) +tests/test-clone-visitor$(EXESUF): tests/test-clone-visitor.o $(test-qapi-obj-y) +tests/test-qobject-input-visitor$(EXESUF): tests/test-qobject-input-visitor.o $(test-qapi-obj-y) +tests/test-qmp-cmds$(EXESUF): tests/test-qmp-cmds.o tests/test-qapi-commands.o $(test-qapi-obj-y) +tests/test-visitor-serialization$(EXESUF): tests/test-visitor-serialization.o $(test-qapi-obj-y) +tests/test-opts-visitor$(EXESUF): tests/test-opts-visitor.o $(test-qapi-obj-y) + +tests/test-shift128$(EXESUF): tests/test-shift128.o $(test-util-obj-y) +tests/test-mul64$(EXESUF): tests/test-mul64.o $(test-util-obj-y) +tests/test-bitops$(EXESUF): tests/test-bitops.o $(test-util-obj-y) +tests/test-bitcnt$(EXESUF): tests/test-bitcnt.o $(test-util-obj-y) +tests/test-crypto-hash$(EXESUF): tests/test-crypto-hash.o $(test-crypto-obj-y) +tests/benchmark-crypto-hash$(EXESUF): tests/benchmark-crypto-hash.o $(test-crypto-obj-y) +tests/test-crypto-hmac$(EXESUF): tests/test-crypto-hmac.o $(test-crypto-obj-y) +tests/benchmark-crypto-hmac$(EXESUF): tests/benchmark-crypto-hmac.o $(test-crypto-obj-y) +tests/test-crypto-cipher$(EXESUF): tests/test-crypto-cipher.o $(test-crypto-obj-y) +tests/benchmark-crypto-cipher$(EXESUF): tests/benchmark-crypto-cipher.o $(test-crypto-obj-y) +tests/test-crypto-secret$(EXESUF): tests/test-crypto-secret.o $(test-crypto-obj-y) +tests/test-crypto-xts$(EXESUF): tests/test-crypto-xts.o $(test-crypto-obj-y) + +tests/crypto-tls-x509-helpers.o-cflags := $(TASN1_CFLAGS) +tests/crypto-tls-x509-helpers.o-libs := $(TASN1_LIBS) +tests/pkix_asn1_tab.o-cflags := $(TASN1_CFLAGS) + +tests/test-crypto-tlscredsx509.o-cflags := $(TASN1_CFLAGS) +tests/test-crypto-tlscredsx509$(EXESUF): tests/test-crypto-tlscredsx509.o \ + tests/crypto-tls-x509-helpers.o tests/pkix_asn1_tab.o $(test-crypto-obj-y) + +tests/test-crypto-tlssession.o-cflags := $(TASN1_CFLAGS) +tests/test-crypto-tlssession$(EXESUF): tests/test-crypto-tlssession.o \ + tests/crypto-tls-x509-helpers.o tests/pkix_asn1_tab.o \ + tests/crypto-tls-psk-helpers.o \ + $(test-crypto-obj-y) +tests/test-util-sockets$(EXESUF): tests/test-util-sockets.o \ + tests/socket-helpers.o $(test-util-obj-y) +tests/test-io-task$(EXESUF): tests/test-io-task.o $(test-io-obj-y) +tests/test-io-channel-socket$(EXESUF): tests/test-io-channel-socket.o \ + tests/io-channel-helpers.o tests/socket-helpers.o $(test-io-obj-y) +tests/tpm-crb-swtpm-test$(EXESUF): tests/tpm-crb-swtpm-test.o tests/tpm-emu.o \ + tests/tpm-util.o tests/tpm-tests.o $(test-io-obj-y) +tests/tpm-crb-test$(EXESUF): tests/tpm-crb-test.o tests/tpm-emu.o $(test-io-obj-y) +tests/tpm-tis-swtpm-test$(EXESUF): tests/tpm-tis-swtpm-test.o tests/tpm-emu.o \ + tests/tpm-util.o tests/tpm-tests.o $(test-io-obj-y) +tests/tpm-tis-test$(EXESUF): tests/tpm-tis-test.o tests/tpm-emu.o $(test-io-obj-y) +tests/test-io-channel-file$(EXESUF): tests/test-io-channel-file.o \ + tests/io-channel-helpers.o $(test-io-obj-y) +tests/test-io-channel-tls$(EXESUF): tests/test-io-channel-tls.o \ + tests/crypto-tls-x509-helpers.o tests/pkix_asn1_tab.o \ + tests/io-channel-helpers.o $(test-io-obj-y) +tests/test-io-channel-command$(EXESUF): tests/test-io-channel-command.o \ + tests/io-channel-helpers.o $(test-io-obj-y) +tests/test-io-channel-buffer$(EXESUF): tests/test-io-channel-buffer.o \ + tests/io-channel-helpers.o $(test-io-obj-y) +tests/test-crypto-pbkdf$(EXESUF): tests/test-crypto-pbkdf.o $(test-crypto-obj-y) +tests/test-crypto-ivgen$(EXESUF): tests/test-crypto-ivgen.o $(test-crypto-obj-y) +tests/test-crypto-afsplit$(EXESUF): tests/test-crypto-afsplit.o $(test-crypto-obj-y) +tests/test-crypto-block$(EXESUF): tests/test-crypto-block.o $(test-crypto-obj-y) + +libqos-obj-y = tests/libqos/pci.o tests/libqos/fw_cfg.o tests/libqos/malloc.o +libqos-obj-y += tests/libqos/i2c.o tests/libqos/libqos.o +libqos-spapr-obj-y = $(libqos-obj-y) tests/libqos/malloc-spapr.o +libqos-spapr-obj-y += tests/libqos/libqos-spapr.o +libqos-spapr-obj-y += tests/libqos/rtas.o +libqos-spapr-obj-y += tests/libqos/pci-spapr.o +libqos-pc-obj-y = $(libqos-obj-y) tests/libqos/pci-pc.o +libqos-pc-obj-y += tests/libqos/malloc-pc.o tests/libqos/libqos-pc.o +libqos-pc-obj-y += tests/libqos/ahci.o +libqos-omap-obj-y = $(libqos-obj-y) tests/libqos/i2c-omap.o +libqos-imx-obj-y = $(libqos-obj-y) tests/libqos/i2c-imx.o +libqos-usb-obj-y = $(libqos-spapr-obj-y) $(libqos-pc-obj-y) tests/libqos/usb.o +libqos-virtio-obj-y = $(libqos-spapr-obj-y) $(libqos-pc-obj-y) tests/libqos/virtio.o tests/libqos/virtio-pci.o tests/libqos/virtio-mmio.o tests/libqos/malloc-generic.o + +tests/qmp-test$(EXESUF): tests/qmp-test.o +tests/qmp-cmd-test$(EXESUF): tests/qmp-cmd-test.o +tests/device-introspect-test$(EXESUF): tests/device-introspect-test.o +tests/rtc-test$(EXESUF): tests/rtc-test.o +tests/m48t59-test$(EXESUF): tests/m48t59-test.o +tests/hexloader-test$(EXESUF): tests/hexloader-test.o +tests/endianness-test$(EXESUF): tests/endianness-test.o +tests/spapr-phb-test$(EXESUF): tests/spapr-phb-test.o $(libqos-obj-y) +tests/prom-env-test$(EXESUF): tests/prom-env-test.o $(libqos-obj-y) +tests/rtas-test$(EXESUF): tests/rtas-test.o $(libqos-spapr-obj-y) +tests/fdc-test$(EXESUF): tests/fdc-test.o +tests/ide-test$(EXESUF): tests/ide-test.o $(libqos-pc-obj-y) +tests/ahci-test$(EXESUF): tests/ahci-test.o $(libqos-pc-obj-y) +tests/ipmi-kcs-test$(EXESUF): tests/ipmi-kcs-test.o +tests/ipmi-bt-test$(EXESUF): tests/ipmi-bt-test.o +tests/hd-geo-test$(EXESUF): tests/hd-geo-test.o +tests/boot-order-test$(EXESUF): tests/boot-order-test.o $(libqos-obj-y) +tests/boot-serial-test$(EXESUF): tests/boot-serial-test.o $(libqos-obj-y) +tests/bios-tables-test$(EXESUF): tests/bios-tables-test.o \ + tests/boot-sector.o tests/acpi-utils.o $(libqos-obj-y) +tests/pxe-test$(EXESUF): tests/pxe-test.o tests/boot-sector.o $(libqos-obj-y) +tests/tmp105-test$(EXESUF): tests/tmp105-test.o $(libqos-omap-obj-y) +tests/pca9552-test$(EXESUF): tests/pca9552-test.o $(libqos-omap-obj-y) +tests/ds1338-test$(EXESUF): tests/ds1338-test.o $(libqos-imx-obj-y) +tests/microbit-test$(EXESUF): tests/microbit-test.o +tests/m25p80-test$(EXESUF): tests/m25p80-test.o +tests/i440fx-test$(EXESUF): tests/i440fx-test.o $(libqos-pc-obj-y) +tests/q35-test$(EXESUF): tests/q35-test.o $(libqos-pc-obj-y) +tests/fw_cfg-test$(EXESUF): tests/fw_cfg-test.o $(libqos-pc-obj-y) +tests/e1000-test$(EXESUF): tests/e1000-test.o +tests/e1000e-test$(EXESUF): tests/e1000e-test.o $(libqos-pc-obj-y) +tests/rtl8139-test$(EXESUF): tests/rtl8139-test.o $(libqos-pc-obj-y) +tests/pcnet-test$(EXESUF): tests/pcnet-test.o +tests/pnv-xscom-test$(EXESUF): tests/pnv-xscom-test.o +tests/eepro100-test$(EXESUF): tests/eepro100-test.o +tests/vmxnet3-test$(EXESUF): tests/vmxnet3-test.o +tests/ne2000-test$(EXESUF): tests/ne2000-test.o +tests/wdt_ib700-test$(EXESUF): tests/wdt_ib700-test.o +tests/tco-test$(EXESUF): tests/tco-test.o $(libqos-pc-obj-y) +tests/virtio-balloon-test$(EXESUF): tests/virtio-balloon-test.o $(libqos-virtio-obj-y) +tests/virtio-blk-test$(EXESUF): tests/virtio-blk-test.o $(libqos-virtio-obj-y) +tests/virtio-ccw-test$(EXESUF): tests/virtio-ccw-test.o +tests/virtio-net-test$(EXESUF): tests/virtio-net-test.o $(libqos-pc-obj-y) $(libqos-virtio-obj-y) +tests/virtio-rng-test$(EXESUF): tests/virtio-rng-test.o $(libqos-pc-obj-y) +tests/virtio-scsi-test$(EXESUF): tests/virtio-scsi-test.o $(libqos-virtio-obj-y) +tests/virtio-9p-test$(EXESUF): tests/virtio-9p-test.o $(libqos-virtio-obj-y) +tests/virtio-serial-test$(EXESUF): tests/virtio-serial-test.o $(libqos-virtio-obj-y) +tests/virtio-console-test$(EXESUF): tests/virtio-console-test.o $(libqos-virtio-obj-y) +tests/tpci200-test$(EXESUF): tests/tpci200-test.o +tests/display-vga-test$(EXESUF): tests/display-vga-test.o +tests/ipoctal232-test$(EXESUF): tests/ipoctal232-test.o +tests/qom-test$(EXESUF): tests/qom-test.o +tests/test-hmp$(EXESUF): tests/test-hmp.o +tests/machine-none-test$(EXESUF): tests/machine-none-test.o +tests/drive_del-test$(EXESUF): tests/drive_del-test.o $(libqos-virtio-obj-y) +tests/qdev-monitor-test$(EXESUF): tests/qdev-monitor-test.o $(libqos-pc-obj-y) +tests/nvme-test$(EXESUF): tests/nvme-test.o $(libqos-pc-obj-y) +tests/pvpanic-test$(EXESUF): tests/pvpanic-test.o +tests/i82801b11-test$(EXESUF): tests/i82801b11-test.o +tests/ac97-test$(EXESUF): tests/ac97-test.o +tests/es1370-test$(EXESUF): tests/es1370-test.o +tests/intel-hda-test$(EXESUF): tests/intel-hda-test.o +tests/ioh3420-test$(EXESUF): tests/ioh3420-test.o +tests/usb-hcd-ohci-test$(EXESUF): tests/usb-hcd-ohci-test.o $(libqos-usb-obj-y) +tests/usb-hcd-uhci-test$(EXESUF): tests/usb-hcd-uhci-test.o $(libqos-usb-obj-y) +tests/usb-hcd-ehci-test$(EXESUF): tests/usb-hcd-ehci-test.o $(libqos-usb-obj-y) +tests/usb-hcd-xhci-test$(EXESUF): tests/usb-hcd-xhci-test.o $(libqos-usb-obj-y) +tests/cpu-plug-test$(EXESUF): tests/cpu-plug-test.o +tests/migration-test$(EXESUF): tests/migration-test.o +tests/vhost-user-test$(EXESUF): tests/vhost-user-test.o $(test-util-obj-y) \ + $(qtest-obj-y) $(test-io-obj-y) $(libqos-virtio-obj-y) $(libqos-pc-obj-y) \ + $(chardev-obj-y) +tests/qemu-iotests/socket_scm_helper$(EXESUF): tests/qemu-iotests/socket_scm_helper.o +tests/test-qemu-opts$(EXESUF): tests/test-qemu-opts.o $(test-util-obj-y) +tests/test-keyval$(EXESUF): tests/test-keyval.o $(test-util-obj-y) $(test-qapi-obj-y) +tests/test-write-threshold$(EXESUF): tests/test-write-threshold.o $(test-block-obj-y) +tests/test-netfilter$(EXESUF): tests/test-netfilter.o $(qtest-obj-y) +tests/test-filter-mirror$(EXESUF): tests/test-filter-mirror.o $(qtest-obj-y) +tests/test-filter-redirector$(EXESUF): tests/test-filter-redirector.o $(qtest-obj-y) +tests/test-x86-cpuid-compat$(EXESUF): tests/test-x86-cpuid-compat.o $(qtest-obj-y) +tests/ivshmem-test$(EXESUF): tests/ivshmem-test.o contrib/ivshmem-server/ivshmem-server.o $(libqos-pc-obj-y) $(libqos-spapr-obj-y) +tests/megasas-test$(EXESUF): tests/megasas-test.o $(libqos-spapr-obj-y) $(libqos-pc-obj-y) +tests/vhost-user-bridge$(EXESUF): tests/vhost-user-bridge.o $(test-util-obj-y) libvhost-user.a +tests/test-uuid$(EXESUF): tests/test-uuid.o $(test-util-obj-y) +tests/test-arm-mptimer$(EXESUF): tests/test-arm-mptimer.o +tests/test-qapi-util$(EXESUF): tests/test-qapi-util.o $(test-util-obj-y) +tests/numa-test$(EXESUF): tests/numa-test.o +tests/vmgenid-test$(EXESUF): tests/vmgenid-test.o tests/boot-sector.o tests/acpi-utils.o +tests/sdhci-test$(EXESUF): tests/sdhci-test.o $(libqos-pc-obj-y) +tests/cdrom-test$(EXESUF): tests/cdrom-test.o tests/boot-sector.o $(libqos-obj-y) + +tests/migration/stress$(EXESUF): tests/migration/stress.o + $(call quiet-command, $(LINKPROG) -static -O3 $(PTHREAD_LIB) -o $@ $< ,"LINK","$(TARGET_DIR)$@") + +INITRD_WORK_DIR=tests/migration/initrd + +tests/migration/initrd-stress.img: tests/migration/stress$(EXESUF) + mkdir -p $(INITRD_WORK_DIR) + cp $< $(INITRD_WORK_DIR)/init + (cd $(INITRD_WORK_DIR) && (find | cpio --quiet -o -H newc | gzip -9)) > $@ + rm $(INITRD_WORK_DIR)/init + rmdir $(INITRD_WORK_DIR) + +ifeq ($(CONFIG_POSIX),y) +LIBS += -lutil +endif + +# QTest rules + +TARGETS=$(patsubst %-softmmu,%, $(filter %-softmmu,$(TARGET_DIRS))) +ifeq ($(CONFIG_POSIX),y) +QTEST_TARGETS = $(TARGETS) +check-qtest-y=$(foreach TARGET,$(TARGETS), $(check-qtest-$(TARGET)-y)) +check-qtest-y += $(check-qtest-generic-y) +else +QTEST_TARGETS = +endif + +qtest-obj-y = tests/libqtest.o $(test-util-obj-y) +$(check-qtest-y): $(qtest-obj-y) + +tests/test-qga$(EXESUF): qemu-ga$(EXESUF) +tests/test-qga$(EXESUF): tests/test-qga.o $(qtest-obj-y) + +SPEED = quick + +# gtester tests, possibly with verbose output +# do_test_tap runs all tests, even if some of them fail, while do_test_human +# stops at the first failure unless -k is given on the command line + +define do_test_human_k + $(quiet-@)rc=0; $(foreach COMMAND, $1, \ + $(call quiet-command-run, \ + export MALLOC_PERTURB_=$${MALLOC_PERTURB_:-$$(( $${RANDOM:-0} % 255 + 1))} $2; \ + $(COMMAND) -m=$(SPEED) -k --tap < /dev/null \ + | ./scripts/tap-driver.pl --test-name="$(notdir $(COMMAND))" $(if $(V),, --show-failures-only) \ + || rc=$$?;, "TEST", "$@: $(COMMAND)")) exit $$rc +endef +define do_test_human_no_k + $(foreach COMMAND, $1, \ + $(call quiet-command, \ + MALLOC_PERTURB_=$${MALLOC_PERTURB_:-$$(( $${RANDOM:-0} % 255 + 1))} $2 \ + $(COMMAND) -m=$(SPEED) -k --tap < /dev/null \ + | ./scripts/tap-driver.pl --test-name="$(notdir $(COMMAND))" $(if $(V),, --show-failures-only), \ + "TEST", "$@: $(COMMAND)") +) +endef +do_test_human = \ + $(if $(findstring k, $(MAKEFLAGS)), $(do_test_human_k), $(do_test_human_no_k)) + +define do_test_tap + $(call quiet-command, \ + { export MALLOC_PERTURB_=$${MALLOC_PERTURB_:-$$(( $${RANDOM:-0} % 255 + 1))} $2; \ + $(foreach COMMAND, $1, \ + $(COMMAND) -m=$(SPEED) -k --tap < /dev/null \ + | sed "s/^[a-z][a-z]* [0-9]* /&$(notdir $(COMMAND)) /" || true; ) } \ + | ./scripts/tap-merge.pl | tee "$@" \ + | ./scripts/tap-driver.pl $(if $(V),, --show-failures-only), \ + "TAP","$@") +endef + +.PHONY: $(patsubst %, check-qtest-%, $(QTEST_TARGETS)) +$(patsubst %, check-qtest-%, $(QTEST_TARGETS)): check-qtest-%: subdir-%-softmmu $(check-qtest-y) + $(call do_test_human,$(check-qtest-$*-y) $(check-qtest-generic-y), \ + QTEST_QEMU_BINARY=$*-softmmu/qemu-system-$* \ + QTEST_QEMU_IMG=qemu-img$(EXESUF)) + +check-unit: $(check-unit-y) + $(call do_test_human, $^) + +check-speed: $(check-speed-y) + $(call do_test_human, $^) + +# gtester tests with TAP output + +$(patsubst %, check-report-qtest-%.tap, $(QTEST_TARGETS)): check-report-qtest-%.tap: $(check-qtest-y) + $(call do_test_tap, $(check-qtest-$*-y) $(check-qtest-generic-y), \ + QTEST_QEMU_BINARY=$*-softmmu/qemu-system-$* \ + QTEST_QEMU_IMG=qemu-img$(EXESUF)) + +check-report-unit.tap: $(check-unit-y) + $(call do_test_tap,$^) + +# Reports and overall runs + +check-report.tap: $(patsubst %,check-report-qtest-%.tap, $(QTEST_TARGETS)) check-report-unit.tap + $(call quiet-command,./scripts/tap-merge.py $^ > $@,"GEN","$@") + +# Per guest TCG tests + +LINUX_USER_TARGETS=$(filter %-linux-user,$(TARGET_DIRS)) +BUILD_TCG_TARGET_RULES=$(patsubst %,build-tcg-tests-%, $(LINUX_USER_TARGETS)) +CLEAN_TCG_TARGET_RULES=$(patsubst %,clean-tcg-tests-%, $(LINUX_USER_TARGETS)) +RUN_TCG_TARGET_RULES=$(patsubst %,run-tcg-tests-%, $(LINUX_USER_TARGETS)) + +ifeq ($(HAVE_USER_DOCKER),y) +# Probe for the Docker Builds needed for each build +$(foreach PROBE_TARGET,$(TARGET_DIRS), \ + $(eval -include $(SRC_PATH)/tests/tcg/Makefile.probe) \ + $(if $(DOCKER_PREREQ), \ + $(eval build-tcg-tests-$(PROBE_TARGET): $(DOCKER_PREREQ)))) +endif + +build-tcg-tests-%: + $(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C $* V="$(V)" \ + SKIP_DOCKER_BUILD=1 TARGET_DIR="$*/" guest-tests, \ + "BUILD", "TCG tests for $*") + +run-tcg-tests-%: % build-tcg-tests-% + $(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C $* V="$(V)" \ + SKIP_DOCKER_BUILD=1 TARGET_DIR="$*/" run-guest-tests, \ + "RUN", "TCG tests for $*") + +clean-tcg-tests-%: + $(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C $* V="$(V)" TARGET_DIR="$*/" clean-guest-tests,) + +.PHONY: build-tcg +build-tcg: $(BUILD_TCG_TARGET_RULES) + +.PHONY: check-tcg +check-tcg: $(RUN_TCG_TARGET_RULES) + +.PHONY: clean-tcg +clean-tcg: $(CLEAN_TCG_TARGET_RULES) + +# Other tests + +QEMU_IOTESTS_HELPERS-$(call land,$(CONFIG_SOFTMMU),$(CONFIG_LINUX)) = tests/qemu-iotests/socket_scm_helper$(EXESUF) + +.PHONY: check-tests/qemu-iotests-quick.sh +check-tests/qemu-iotests-quick.sh: tests/qemu-iotests-quick.sh qemu-img$(EXESUF) qemu-io$(EXESUF) $(QEMU_IOTESTS_HELPERS-y) + $< + +.PHONY: $(patsubst %, check-%, $(check-qapi-schema-y)) +$(patsubst %, check-%, $(check-qapi-schema-y)): check-%.json: $(SRC_PATH)/%.json + $(call quiet-command, PYTHONPATH=$(SRC_PATH)/scripts \ + $(PYTHON) $(SRC_PATH)/tests/qapi-schema/test-qapi.py \ + $^ >$*.test.out 2>$*.test.err; \ + echo $$? >$*.test.exit, \ + "TEST","$*.out") + @# Sanitize error messages (make them independent of build directory) + @perl -p -e 's|\Q$(SRC_PATH)\E/||g' $*.test.err | diff -u $(SRC_PATH)/$*.err - + @diff -u $(SRC_PATH)/$*.out $*.test.out + @diff -u $(SRC_PATH)/$*.exit $*.test.exit + +.PHONY: check-tests/qapi-schema/doc-good.texi +check-tests/qapi-schema/doc-good.texi: tests/qapi-schema/doc-good.test.texi + @diff -u $(SRC_PATH)/tests/qapi-schema/doc-good.texi $< + +.PHONY: check-decodetree +check-decodetree: + $(call quiet-command, \ + cd $(SRC_PATH)/tests/decode && \ + ./check.sh "$(PYTHON)" "$(SRC_PATH)/scripts/decodetree.py", \ + TEST, decodetree.py) + +# Python venv for running tests + +.PHONY: check-venv check-acceptance + +TESTS_VENV_DIR=$(BUILD_DIR)/tests/venv +TESTS_VENV_REQ=$(SRC_PATH)/tests/requirements.txt +TESTS_RESULTS_DIR=$(BUILD_DIR)/tests/results +# Controls the output generated by Avocado when running tests. +# Any number of command separated loggers are accepted. For more +# information please refer to "avocado --help". +AVOCADO_SHOW=none + +PYTHON3 = $(shell $(PYTHON) -c 'import sys; print(1 if sys.version_info >= (3, 0) else 0)') +ifeq ($(PYTHON3), 1) +$(TESTS_VENV_DIR): $(TESTS_VENV_REQ) + $(call quiet-command, \ + $(PYTHON) -m venv --system-site-packages $@, \ + VENV, $@) + $(call quiet-command, \ + $(TESTS_VENV_DIR)/bin/python -m pip -q install -r $(TESTS_VENV_REQ), \ + PIP, $(TESTS_VENV_REQ)) + $(call quiet-command, touch $@) +else +$(TESTS_VENV_DIR): + $(error "venv directory for tests requires Python 3") +endif + +$(TESTS_RESULTS_DIR): + $(call quiet-command, mkdir -p $@, \ + MKDIR, $@) + +check-venv: $(TESTS_VENV_DIR) + +check-acceptance: check-venv $(TESTS_RESULTS_DIR) + $(call quiet-command, \ + $(TESTS_VENV_DIR)/bin/python -m avocado \ + --show=$(AVOCADO_SHOW) run --job-results-dir=$(TESTS_RESULTS_DIR) \ + --failfast=on $(SRC_PATH)/tests/acceptance, \ + "AVOCADO", "tests/acceptance") + +# Consolidated targets + +.PHONY: check-qapi-schema check-qtest check-unit check check-clean +check-qapi-schema: $(patsubst %,check-%, $(check-qapi-schema-y)) check-tests/qapi-schema/doc-good.texi +check-qtest: $(patsubst %,check-qtest-%, $(QTEST_TARGETS)) +check-block: $(patsubst %,check-%, $(check-block-y)) +check: check-qapi-schema check-unit check-qtest check-decodetree +check-clean: + rm -rf $(check-unit-y) tests/*.o $(QEMU_IOTESTS_HELPERS-y) + rm -rf $(sort $(foreach target,$(SYSEMU_TARGET_LIST), $(check-qtest-$(target)-y)) $(check-qtest-generic-y)) + rm -f tests/test-qapi-gen-timestamp + rm -rf $(TESTS_VENV_DIR) $(TESTS_RESULTS_DIR) + +clean: check-clean + +# Build the help program automatically + +all: $(QEMU_IOTESTS_HELPERS-y) + +-include $(wildcard tests/*.d) +-include $(wildcard tests/libqos/*.d) + +endif diff --git a/tests/Makefile.orig b/tests/Makefile.orig new file mode 100644 index 0000000000..e6474ba31b --- /dev/null +++ b/tests/Makefile.orig @@ -0,0 +1,569 @@ +export SRC_PATH + +qapi-py = $(SRC_PATH)/scripts/qapi.py $(SRC_PATH)/scripts/ordereddict.py + +# Get the list of all supported sysemu targets +SYSEMU_TARGET_LIST := $(subst -softmmu.mak,,$(notdir \ + $(wildcard $(SRC_PATH)/default-configs/*-softmmu.mak))) + +check-unit-y = tests/check-qdict$(EXESUF) +gcov-files-check-qdict-y = qobject/qdict.c +check-unit-y += tests/check-qfloat$(EXESUF) +gcov-files-check-qfloat-y = qobject/qfloat.c +check-unit-y += tests/check-qint$(EXESUF) +gcov-files-check-qint-y = qobject/qint.c +check-unit-y += tests/check-qstring$(EXESUF) +gcov-files-check-qstring-y = qobject/qstring.c +check-unit-y += tests/check-qlist$(EXESUF) +gcov-files-check-qlist-y = qobject/qlist.c +check-unit-y += tests/check-qjson$(EXESUF) +gcov-files-check-qjson-y = qobject/qjson.c +check-unit-y += tests/test-qmp-output-visitor$(EXESUF) +gcov-files-test-qmp-output-visitor-y = qapi/qmp-output-visitor.c +check-unit-y += tests/test-qmp-input-visitor$(EXESUF) +gcov-files-test-qmp-input-visitor-y = qapi/qmp-input-visitor.c +check-unit-y += tests/test-qmp-input-strict$(EXESUF) +check-unit-y += tests/test-qmp-commands$(EXESUF) +gcov-files-test-qmp-commands-y = qapi/qmp-dispatch.c +check-unit-y += tests/test-string-input-visitor$(EXESUF) +gcov-files-test-string-input-visitor-y = qapi/string-input-visitor.c +check-unit-y += tests/test-string-output-visitor$(EXESUF) +gcov-files-test-string-output-visitor-y = qapi/string-output-visitor.c +check-unit-y += tests/test-qmp-event$(EXESUF) +gcov-files-test-qmp-event-y += qapi/qmp-event.c +check-unit-y += tests/test-opts-visitor$(EXESUF) +gcov-files-test-opts-visitor-y = qapi/opts-visitor.c +check-unit-y += tests/test-coroutine$(EXESUF) +gcov-files-test-coroutine-y = coroutine-$(CONFIG_COROUTINE_BACKEND).c +check-unit-y += tests/test-visitor-serialization$(EXESUF) +check-unit-y += tests/test-iov$(EXESUF) +gcov-files-test-iov-y = util/iov.c +check-unit-y += tests/test-aio$(EXESUF) +check-unit-$(CONFIG_POSIX) += tests/test-rfifolock$(EXESUF) +check-unit-y += tests/test-throttle$(EXESUF) +gcov-files-test-aio-$(CONFIG_WIN32) = aio-win32.c +gcov-files-test-aio-$(CONFIG_POSIX) = aio-posix.c +check-unit-y += tests/test-thread-pool$(EXESUF) +gcov-files-test-thread-pool-y = thread-pool.c +gcov-files-test-hbitmap-y = util/hbitmap.c +check-unit-y += tests/test-hbitmap$(EXESUF) +check-unit-y += tests/test-x86-cpuid$(EXESUF) +# all code tested by test-x86-cpuid is inside topology.h +gcov-files-test-x86-cpuid-y = +ifeq ($(CONFIG_SOFTMMU),y) +check-unit-y += tests/test-xbzrle$(EXESUF) +gcov-files-test-xbzrle-y = migration/xbzrle.c +check-unit-$(CONFIG_POSIX) += tests/test-vmstate$(EXESUF) +endif +check-unit-y += tests/test-cutils$(EXESUF) +gcov-files-test-cutils-y += util/cutils.c +check-unit-y += tests/test-mul64$(EXESUF) +gcov-files-test-mul64-y = util/host-utils.c +check-unit-y += tests/test-int128$(EXESUF) +# all code tested by test-int128 is inside int128.h +gcov-files-test-int128-y = +check-unit-y += tests/rcutorture$(EXESUF) +gcov-files-rcutorture-y = util/rcu.c +check-unit-y += tests/test-rcu-list$(EXESUF) +gcov-files-test-rcu-list-y = util/rcu.c +check-unit-y += tests/test-bitops$(EXESUF) +check-unit-$(CONFIG_HAS_GLIB_SUBPROCESS_TESTS) += tests/test-qdev-global-props$(EXESUF) +check-unit-y += tests/check-qom-interface$(EXESUF) +gcov-files-check-qom-interface-y = qom/object.c +check-unit-y += tests/check-qom-proplist$(EXESUF) +gcov-files-check-qom-proplist-y = qom/object.c +check-unit-y += tests/test-qemu-opts$(EXESUF) +gcov-files-test-qemu-opts-y = qom/test-qemu-opts.c +check-unit-y += tests/test-write-threshold$(EXESUF) +gcov-files-test-write-threshold-y = block/write-threshold.c +check-unit-$(CONFIG_GNUTLS_HASH) += tests/test-crypto-hash$(EXESUF) +check-unit-y += tests/test-crypto-cipher$(EXESUF) +check-unit-$(CONFIG_GNUTLS) += tests/test-crypto-tlscredsx509$(EXESUF) +check-unit-$(CONFIG_GNUTLS) += tests/test-crypto-tlssession$(EXESUF) + +check-block-$(CONFIG_POSIX) += tests/qemu-iotests-quick.sh + +# All QTests for now are POSIX-only, but the dependencies are +# really in libqtest, not in the testcases themselves. + +gcov-files-ipack-y += hw/ipack/ipack.c +check-qtest-ipack-y += tests/ipoctal232-test$(EXESUF) +gcov-files-ipack-y += hw/char/ipoctal232.c + +check-qtest-virtioserial-y += tests/virtio-console-test$(EXESUF) +gcov-files-virtioserial-y += hw/char/virtio-console.c + +gcov-files-virtio-y += i386-softmmu/hw/virtio/virtio.c +check-qtest-virtio-y += tests/virtio-net-test$(EXESUF) +gcov-files-virtio-y += i386-softmmu/hw/net/virtio-net.c +check-qtest-virtio-y += tests/virtio-balloon-test$(EXESUF) +gcov-files-virtio-y += i386-softmmu/hw/virtio/virtio-balloon.c +check-qtest-virtio-y += tests/virtio-blk-test$(EXESUF) +gcov-files-virtio-y += i386-softmmu/hw/block/virtio-blk.c +check-qtest-virtio-y += tests/virtio-rng-test$(EXESUF) +gcov-files-virtio-y += hw/virtio/virtio-rng.c +check-qtest-virtio-y += tests/virtio-scsi-test$(EXESUF) +gcov-files-virtio-y += i386-softmmu/hw/scsi/virtio-scsi.c +ifeq ($(CONFIG_VIRTIO)$(CONFIG_VIRTFS)$(CONFIG_PCI),yyy) +check-qtest-virtio-y += tests/virtio-9p-test$(EXESUF) +gcov-files-virtio-y += hw/9pfs/virtio-9p.c +gcov-files-virtio-y += i386-softmmu/hw/9pfs/virtio-9p-device.c +endif +check-qtest-virtio-y += tests/virtio-serial-test$(EXESUF) +gcov-files-virtio-y += i386-softmmu/hw/char/virtio-serial-bus.c +check-qtest-virtio-y += $(check-qtest-virtioserial-y) +gcov-files-virtio-y += $(gcov-files-virtioserial-y) + +check-qtest-pci-y += tests/e1000-test$(EXESUF) +gcov-files-pci-y += hw/net/e1000.c +check-qtest-pci-y += tests/rtl8139-test$(EXESUF) +gcov-files-pci-y += hw/net/rtl8139.c +check-qtest-pci-y += tests/pcnet-test$(EXESUF) +gcov-files-pci-y += hw/net/pcnet.c +gcov-files-pci-y += hw/net/pcnet-pci.c +check-qtest-pci-y += tests/eepro100-test$(EXESUF) +gcov-files-pci-y += hw/net/eepro100.c +check-qtest-pci-y += tests/ne2000-test$(EXESUF) +gcov-files-pci-y += hw/net/ne2000.c +check-qtest-pci-y += tests/nvme-test$(EXESUF) +gcov-files-pci-y += hw/block/nvme.c +check-qtest-pci-y += tests/ac97-test$(EXESUF) +gcov-files-pci-y += hw/audio/ac97.c +check-qtest-pci-y += tests/es1370-test$(EXESUF) +gcov-files-pci-y += hw/audio/es1370.c +check-qtest-pci-y += $(check-qtest-virtio-y) +gcov-files-pci-y += $(gcov-files-virtio-y) hw/virtio/virtio-pci.c +check-qtest-pci-y += tests/tpci200-test$(EXESUF) +gcov-files-pci-y += hw/ipack/tpci200.c +check-qtest-pci-y += $(check-qtest-ipack-y) +gcov-files-pci-y += $(gcov-files-ipack-y) +check-qtest-pci-y += tests/display-vga-test$(EXESUF) +gcov-files-pci-y += hw/display/vga.c +gcov-files-pci-y += hw/display/cirrus_vga.c +gcov-files-pci-y += hw/display/vga-pci.c +gcov-files-pci-y += hw/display/virtio-gpu.c +gcov-files-pci-y += hw/display/virtio-gpu-pci.c +gcov-files-pci-$(CONFIG_VIRTIO_VGA) += hw/display/virtio-vga.c +check-qtest-pci-y += tests/intel-hda-test$(EXESUF) +gcov-files-pci-y += hw/audio/intel-hda.c hw/audio/hda-codec.c + +check-qtest-i386-y = tests/endianness-test$(EXESUF) +check-qtest-i386-y += tests/fdc-test$(EXESUF) +gcov-files-i386-y = hw/block/fdc.c +check-qtest-i386-y += tests/ide-test$(EXESUF) +check-qtest-i386-y += tests/ahci-test$(EXESUF) +check-qtest-i386-y += tests/hd-geo-test$(EXESUF) +gcov-files-i386-y += hw/block/hd-geometry.c +check-qtest-i386-y += tests/boot-order-test$(EXESUF) +check-qtest-i386-y += tests/bios-tables-test$(EXESUF) +check-qtest-i386-y += tests/rtc-test$(EXESUF) +check-qtest-i386-y += tests/i440fx-test$(EXESUF) +check-qtest-i386-y += tests/fw_cfg-test$(EXESUF) +check-qtest-i386-y += tests/drive_del-test$(EXESUF) +check-qtest-i386-y += tests/wdt_ib700-test$(EXESUF) +check-qtest-i386-y += tests/tco-test$(EXESUF) +gcov-files-i386-y += hw/watchdog/watchdog.c hw/watchdog/wdt_ib700.c +check-qtest-i386-y += $(check-qtest-pci-y) +gcov-files-i386-y += $(gcov-files-pci-y) +check-qtest-i386-y += tests/vmxnet3-test$(EXESUF) +gcov-files-i386-y += hw/net/vmxnet3.c +gcov-files-i386-y += hw/net/vmxnet_rx_pkt.c +gcov-files-i386-y += hw/net/vmxnet_tx_pkt.c +check-qtest-i386-y += tests/pvpanic-test$(EXESUF) +gcov-files-i386-y += i386-softmmu/hw/misc/pvpanic.c +check-qtest-i386-y += tests/i82801b11-test$(EXESUF) +gcov-files-i386-y += hw/pci-bridge/i82801b11.c +check-qtest-i386-y += tests/ioh3420-test$(EXESUF) +gcov-files-i386-y += hw/pci-bridge/ioh3420.c +check-qtest-i386-y += tests/usb-hcd-ohci-test$(EXESUF) +gcov-files-i386-y += hw/usb/hcd-ohci.c +check-qtest-i386-y += tests/usb-hcd-uhci-test$(EXESUF) +gcov-files-i386-y += hw/usb/hcd-uhci.c +check-qtest-i386-y += tests/usb-hcd-ehci-test$(EXESUF) +gcov-files-i386-y += hw/usb/hcd-ehci.c +gcov-files-i386-y += hw/usb/dev-hid.c +gcov-files-i386-y += hw/usb/dev-storage.c +check-qtest-i386-y += tests/usb-hcd-xhci-test$(EXESUF) +gcov-files-i386-y += hw/usb/hcd-xhci.c +check-qtest-i386-y += tests/pc-cpu-test$(EXESUF) +check-qtest-i386-y += tests/q35-test$(EXESUF) +gcov-files-i386-y += hw/pci-host/q35.c +ifeq ($(CONFIG_VHOST_NET),y) +check-qtest-i386-$(CONFIG_LINUX) += tests/vhost-user-test$(EXESUF) +endif +check-qtest-x86_64-y = $(check-qtest-i386-y) +gcov-files-i386-y += i386-softmmu/hw/timer/mc146818rtc.c +gcov-files-x86_64-y = $(subst i386-softmmu/,x86_64-softmmu/,$(gcov-files-i386-y)) +check-qtest-mips-y = tests/endianness-test$(EXESUF) +check-qtest-mips64-y = tests/endianness-test$(EXESUF) +check-qtest-mips64el-y = tests/endianness-test$(EXESUF) +check-qtest-ppc-y = tests/endianness-test$(EXESUF) +check-qtest-ppc64-y = tests/endianness-test$(EXESUF) +check-qtest-sh4-y = tests/endianness-test$(EXESUF) +check-qtest-sh4eb-y = tests/endianness-test$(EXESUF) +check-qtest-sparc64-y = tests/endianness-test$(EXESUF) +#check-qtest-sparc-y = tests/m48t59-test$(EXESUF) +#check-qtest-sparc64-y += tests/m48t59-test$(EXESUF) +gcov-files-sparc-y += hw/timer/m48t59.c +gcov-files-sparc64-y += hw/timer/m48t59.c +check-qtest-arm-y = tests/tmp105-test$(EXESUF) +check-qtest-arm-y = tests/ds1338-test$(EXESUF) +gcov-files-arm-y += hw/misc/tmp105.c +check-qtest-arm-y += tests/virtio-blk-test$(EXESUF) +gcov-files-arm-y += arm-softmmu/hw/block/virtio-blk.c +check-qtest-ppc-y += tests/boot-order-test$(EXESUF) +check-qtest-ppc64-y += tests/boot-order-test$(EXESUF) +check-qtest-ppc64-y += tests/spapr-phb-test$(EXESUF) +gcov-files-ppc64-y += ppc64-softmmu/hw/ppc/spapr_pci.c +check-qtest-microblazeel-y = $(check-qtest-microblaze-y) +check-qtest-xtensaeb-y = $(check-qtest-xtensa-y) + +# qom-test works for all sysemu architectures: +$(foreach target,$(SYSEMU_TARGET_LIST), \ + $(if $(findstring tests/qom-test$(EXESUF), $(check-qtest-$(target)-y)),, \ + $(eval check-qtest-$(target)-y += tests/qom-test$(EXESUF)))) + +check-qapi-schema-y := $(addprefix tests/qapi-schema/, \ + comments.json empty.json enum-empty.json enum-missing-data.json \ + enum-wrong-data.json enum-int-member.json enum-dict-member.json \ + enum-clash-member.json enum-max-member.json enum-union-clash.json \ + enum-bad-name.json enum-bad-prefix.json \ + funny-char.json indented-expr.json \ + missing-type.json bad-ident.json ident-with-escape.json \ + escape-outside-string.json unknown-escape.json \ + escape-too-short.json escape-too-big.json unicode-str.json \ + double-type.json bad-base.json bad-type-bool.json bad-type-int.json \ + bad-type-dict.json double-data.json unknown-expr-key.json \ + redefined-type.json redefined-command.json redefined-builtin.json \ + redefined-event.json command-int.json bad-data.json event-max.json \ + type-bypass-bad-gen.json \ + args-invalid.json \ + args-array-empty.json args-array-unknown.json args-int.json \ + args-unknown.json args-member-unknown.json args-member-array.json \ + args-member-array-bad.json args-alternate.json args-union.json \ + args-any.json \ + returns-array-bad.json returns-int.json returns-dict.json \ + returns-unknown.json returns-alternate.json returns-whitelist.json \ + missing-colon.json missing-comma-list.json missing-comma-object.json \ + struct-data-invalid.json struct-member-invalid.json \ + nested-struct-data.json non-objects.json \ + qapi-schema-test.json quoted-structural-chars.json \ + leading-comma-list.json leading-comma-object.json \ + trailing-comma-list.json trailing-comma-object.json \ + unclosed-list.json unclosed-object.json unclosed-string.json \ + duplicate-key.json union-invalid-base.json union-bad-branch.json \ + union-optional-branch.json union-unknown.json union-max.json \ + flat-union-optional-discriminator.json flat-union-no-base.json \ + flat-union-invalid-discriminator.json flat-union-inline.json \ + flat-union-invalid-branch-key.json flat-union-reverse-define.json \ + flat-union-string-discriminator.json union-base-no-discriminator.json \ + flat-union-bad-discriminator.json flat-union-bad-base.json \ + flat-union-base-any.json \ + flat-union-array-branch.json flat-union-int-branch.json \ + flat-union-base-union.json flat-union-branch-clash.json \ + alternate-nested.json alternate-unknown.json alternate-clash.json \ + alternate-good.json alternate-base.json alternate-array.json \ + alternate-conflict-string.json alternate-conflict-dict.json \ + include-simple.json include-relpath.json include-format-err.json \ + include-non-file.json include-no-file.json include-before-err.json \ + include-nested-err.json include-self-cycle.json include-cycle.json \ + include-repetition.json event-nest-struct.json event-case.json \ + struct-base-clash.json struct-base-clash-deep.json ) + +GENERATED_HEADERS += tests/test-qapi-types.h tests/test-qapi-visit.h \ + tests/test-qmp-commands.h tests/test-qapi-event.h \ + tests/test-qmp-introspect.h + +test-obj-y = tests/check-qint.o tests/check-qstring.o tests/check-qdict.o \ + tests/check-qlist.o tests/check-qfloat.o tests/check-qjson.o \ + tests/test-coroutine.o tests/test-string-output-visitor.o \ + tests/test-string-input-visitor.o tests/test-qmp-output-visitor.o \ + tests/test-qmp-input-visitor.o tests/test-qmp-input-strict.o \ + tests/test-qmp-commands.o tests/test-visitor-serialization.o \ + tests/test-x86-cpuid.o tests/test-mul64.o tests/test-int128.o \ + tests/test-opts-visitor.o tests/test-qmp-event.o \ + tests/rcutorture.o tests/test-rcu-list.o + +$(test-obj-y): QEMU_INCLUDES += -Itests +QEMU_CFLAGS += -I$(SRC_PATH)/tests + + +# Deps that are common to various different sets of tests below +test-util-obj-y = libqemuutil.a libqemustub.a +test-qom-obj-y = $(qom-obj-y) $(test-util-obj-y) +test-qapi-obj-y = tests/test-qapi-visit.o tests/test-qapi-types.o \ + tests/test-qapi-event.o tests/test-qmp-introspect.o \ + $(test-qom-obj-y) +test-crypto-obj-y = $(crypto-obj-y) $(test-qom-obj-y) +test-block-obj-y = $(block-obj-y) $(test-crypto-obj-y) + +tests/check-qint$(EXESUF): tests/check-qint.o $(test-util-obj-y) +tests/check-qstring$(EXESUF): tests/check-qstring.o $(test-util-obj-y) +tests/check-qdict$(EXESUF): tests/check-qdict.o $(test-util-obj-y) +tests/check-qlist$(EXESUF): tests/check-qlist.o $(test-util-obj-y) +tests/check-qfloat$(EXESUF): tests/check-qfloat.o $(test-util-obj-y) +tests/check-qjson$(EXESUF): tests/check-qjson.o $(test-util-obj-y) +tests/check-qom-interface$(EXESUF): tests/check-qom-interface.o $(test-qom-obj-y) +tests/check-qom-proplist$(EXESUF): tests/check-qom-proplist.o $(test-qom-obj-y) +tests/test-coroutine$(EXESUF): tests/test-coroutine.o $(test-block-obj-y) +tests/test-aio$(EXESUF): tests/test-aio.o $(test-block-obj-y) +tests/test-rfifolock$(EXESUF): tests/test-rfifolock.o $(test-util-obj-y) +tests/test-throttle$(EXESUF): tests/test-throttle.o $(test-block-obj-y) +tests/test-thread-pool$(EXESUF): tests/test-thread-pool.o $(test-block-obj-y) +tests/test-iov$(EXESUF): tests/test-iov.o $(test-util-obj-y) +tests/test-hbitmap$(EXESUF): tests/test-hbitmap.o $(test-util-obj-y) +tests/test-x86-cpuid$(EXESUF): tests/test-x86-cpuid.o +tests/test-xbzrle$(EXESUF): tests/test-xbzrle.o migration/xbzrle.o page_cache.o $(test-util-obj-y) +tests/test-cutils$(EXESUF): tests/test-cutils.o util/cutils.o +tests/test-int128$(EXESUF): tests/test-int128.o +tests/rcutorture$(EXESUF): tests/rcutorture.o $(test-util-obj-y) +tests/test-rcu-list$(EXESUF): tests/test-rcu-list.o $(test-util-obj-y) + +tests/test-qdev-global-props$(EXESUF): tests/test-qdev-global-props.o \ + hw/core/qdev.o hw/core/qdev-properties.o hw/core/hotplug.o\ + hw/core/irq.o \ + hw/core/fw-path-provider.o \ + $(test-qapi-obj-y) +tests/test-vmstate$(EXESUF): tests/test-vmstate.o \ + migration/vmstate.o migration/qemu-file.o migration/qemu-file-buf.o \ + migration/qemu-file-unix.o qjson.o \ + $(test-qom-obj-y) + +tests/test-qapi-types.c tests/test-qapi-types.h :\ +$(SRC_PATH)/tests/qapi-schema/qapi-schema-test.json $(SRC_PATH)/scripts/qapi-types.py $(qapi-py) + $(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-types.py \ + $(gen-out-type) -o tests -p "test-" $<, \ + " GEN $@") +tests/test-qapi-visit.c tests/test-qapi-visit.h :\ +$(SRC_PATH)/tests/qapi-schema/qapi-schema-test.json $(SRC_PATH)/scripts/qapi-visit.py $(qapi-py) + $(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-visit.py \ + $(gen-out-type) -o tests -p "test-" $<, \ + " GEN $@") +tests/test-qmp-commands.h tests/test-qmp-marshal.c :\ +$(SRC_PATH)/tests/qapi-schema/qapi-schema-test.json $(SRC_PATH)/scripts/qapi-commands.py $(qapi-py) + $(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-commands.py \ + $(gen-out-type) -o tests -p "test-" $<, \ + " GEN $@") +tests/test-qapi-event.c tests/test-qapi-event.h :\ +$(SRC_PATH)/tests/qapi-schema/qapi-schema-test.json $(SRC_PATH)/scripts/qapi-event.py $(qapi-py) + $(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-event.py \ + $(gen-out-type) -o tests -p "test-" $<, \ + " GEN $@") +tests/test-qmp-introspect.c tests/test-qmp-introspect.h :\ +$(SRC_PATH)/tests/qapi-schema/qapi-schema-test.json $(SRC_PATH)/scripts/qapi-introspect.py $(qapi-py) + $(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-introspect.py \ + $(gen-out-type) -o tests -p "test-" $<, \ + " GEN $@") + +tests/test-string-output-visitor$(EXESUF): tests/test-string-output-visitor.o $(test-qapi-obj-y) +tests/test-string-input-visitor$(EXESUF): tests/test-string-input-visitor.o $(test-qapi-obj-y) +tests/test-qmp-event$(EXESUF): tests/test-qmp-event.o $(test-qapi-obj-y) +tests/test-qmp-output-visitor$(EXESUF): tests/test-qmp-output-visitor.o $(test-qapi-obj-y) +tests/test-qmp-input-visitor$(EXESUF): tests/test-qmp-input-visitor.o $(test-qapi-obj-y) +tests/test-qmp-input-strict$(EXESUF): tests/test-qmp-input-strict.o $(test-qapi-obj-y) +tests/test-qmp-commands$(EXESUF): tests/test-qmp-commands.o tests/test-qmp-marshal.o $(test-qapi-obj-y) +tests/test-visitor-serialization$(EXESUF): tests/test-visitor-serialization.o $(test-qapi-obj-y) +tests/test-opts-visitor$(EXESUF): tests/test-opts-visitor.o $(test-qapi-obj-y) + +tests/test-mul64$(EXESUF): tests/test-mul64.o $(test-util-obj-y) +tests/test-bitops$(EXESUF): tests/test-bitops.o $(test-util-obj-y) +tests/test-crypto-hash$(EXESUF): tests/test-crypto-hash.o $(test-crypto-obj-y) +tests/test-crypto-cipher$(EXESUF): tests/test-crypto-cipher.o $(test-crypto-obj-y) +tests/test-crypto-tlscredsx509$(EXESUF): tests/test-crypto-tlscredsx509.o \ + tests/crypto-tls-x509-helpers.o tests/pkix_asn1_tab.o $(test-crypto-obj-y) +tests/test-crypto-tlssession$(EXESUF): tests/test-crypto-tlssession.o \ + tests/crypto-tls-x509-helpers.o tests/pkix_asn1_tab.o $(test-crypto-obj-y) + +libqos-obj-y = tests/libqos/pci.o tests/libqos/fw_cfg.o tests/libqos/malloc.o +libqos-obj-y += tests/libqos/i2c.o tests/libqos/libqos.o +libqos-pc-obj-y = $(libqos-obj-y) tests/libqos/pci-pc.o +libqos-pc-obj-y += tests/libqos/malloc-pc.o tests/libqos/libqos-pc.o +libqos-pc-obj-y += tests/libqos/ahci.o +libqos-omap-obj-y = $(libqos-obj-y) tests/libqos/i2c-omap.o +libqos-imx-obj-y = $(libqos-obj-y) tests/libqos/i2c-imx.o +libqos-usb-obj-y = $(libqos-pc-obj-y) tests/libqos/usb.o +libqos-virtio-obj-y = $(libqos-pc-obj-y) tests/libqos/virtio.o tests/libqos/virtio-pci.o tests/libqos/virtio-mmio.o tests/libqos/malloc-generic.o + +tests/rtc-test$(EXESUF): tests/rtc-test.o +tests/m48t59-test$(EXESUF): tests/m48t59-test.o +tests/endianness-test$(EXESUF): tests/endianness-test.o +tests/spapr-phb-test$(EXESUF): tests/spapr-phb-test.o $(libqos-obj-y) +tests/fdc-test$(EXESUF): tests/fdc-test.o +tests/ide-test$(EXESUF): tests/ide-test.o $(libqos-pc-obj-y) +tests/ahci-test$(EXESUF): tests/ahci-test.o $(libqos-pc-obj-y) +tests/hd-geo-test$(EXESUF): tests/hd-geo-test.o +tests/boot-order-test$(EXESUF): tests/boot-order-test.o $(libqos-obj-y) +tests/bios-tables-test$(EXESUF): tests/bios-tables-test.o $(libqos-obj-y) +tests/tmp105-test$(EXESUF): tests/tmp105-test.o $(libqos-omap-obj-y) +tests/ds1338-test$(EXESUF): tests/ds1338-test.o $(libqos-imx-obj-y) +tests/i440fx-test$(EXESUF): tests/i440fx-test.o $(libqos-pc-obj-y) +tests/q35-test$(EXESUF): tests/q35-test.o $(libqos-pc-obj-y) +tests/fw_cfg-test$(EXESUF): tests/fw_cfg-test.o $(libqos-pc-obj-y) +tests/e1000-test$(EXESUF): tests/e1000-test.o +tests/rtl8139-test$(EXESUF): tests/rtl8139-test.o $(libqos-pc-obj-y) +tests/pcnet-test$(EXESUF): tests/pcnet-test.o +tests/eepro100-test$(EXESUF): tests/eepro100-test.o +tests/vmxnet3-test$(EXESUF): tests/vmxnet3-test.o +tests/ne2000-test$(EXESUF): tests/ne2000-test.o +tests/wdt_ib700-test$(EXESUF): tests/wdt_ib700-test.o +tests/tco-test$(EXESUF): tests/tco-test.o $(libqos-pc-obj-y) +tests/virtio-balloon-test$(EXESUF): tests/virtio-balloon-test.o +tests/virtio-blk-test$(EXESUF): tests/virtio-blk-test.o $(libqos-virtio-obj-y) +tests/virtio-net-test$(EXESUF): tests/virtio-net-test.o $(libqos-pc-obj-y) $(libqos-virtio-obj-y) +tests/virtio-rng-test$(EXESUF): tests/virtio-rng-test.o $(libqos-pc-obj-y) +tests/virtio-scsi-test$(EXESUF): tests/virtio-scsi-test.o $(libqos-virtio-obj-y) +tests/virtio-9p-test$(EXESUF): tests/virtio-9p-test.o +tests/virtio-serial-test$(EXESUF): tests/virtio-serial-test.o +tests/virtio-console-test$(EXESUF): tests/virtio-console-test.o +tests/tpci200-test$(EXESUF): tests/tpci200-test.o +tests/display-vga-test$(EXESUF): tests/display-vga-test.o +tests/ipoctal232-test$(EXESUF): tests/ipoctal232-test.o +tests/qom-test$(EXESUF): tests/qom-test.o +tests/drive_del-test$(EXESUF): tests/drive_del-test.o $(libqos-pc-obj-y) +tests/qdev-monitor-test$(EXESUF): tests/qdev-monitor-test.o $(libqos-pc-obj-y) +tests/nvme-test$(EXESUF): tests/nvme-test.o +tests/pvpanic-test$(EXESUF): tests/pvpanic-test.o +tests/i82801b11-test$(EXESUF): tests/i82801b11-test.o +tests/ac97-test$(EXESUF): tests/ac97-test.o +tests/es1370-test$(EXESUF): tests/es1370-test.o +tests/intel-hda-test$(EXESUF): tests/intel-hda-test.o +tests/ioh3420-test$(EXESUF): tests/ioh3420-test.o +tests/usb-hcd-ohci-test$(EXESUF): tests/usb-hcd-ohci-test.o $(libqos-usb-obj-y) +tests/usb-hcd-uhci-test$(EXESUF): tests/usb-hcd-uhci-test.o $(libqos-usb-obj-y) +tests/usb-hcd-ehci-test$(EXESUF): tests/usb-hcd-ehci-test.o $(libqos-usb-obj-y) +tests/usb-hcd-xhci-test$(EXESUF): tests/usb-hcd-xhci-test.o $(libqos-usb-obj-y) +tests/pc-cpu-test$(EXESUF): tests/pc-cpu-test.o +tests/vhost-user-test$(EXESUF): tests/vhost-user-test.o qemu-char.o qemu-timer.o $(qtest-obj-y) +tests/qemu-iotests/socket_scm_helper$(EXESUF): tests/qemu-iotests/socket_scm_helper.o +tests/test-qemu-opts$(EXESUF): tests/test-qemu-opts.o $(test-util-obj-y) +tests/test-write-threshold$(EXESUF): tests/test-write-threshold.o $(test-block-obj-y) + +ifeq ($(CONFIG_POSIX),y) +LIBS += -lutil +endif +LIBS += $(TEST_LIBS) +CFLAGS += $(TEST_CFLAGS) + +# QTest rules + +TARGETS=$(patsubst %-softmmu,%, $(filter %-softmmu,$(TARGET_DIRS))) +ifeq ($(CONFIG_POSIX),y) +QTEST_TARGETS=$(foreach TARGET,$(TARGETS), $(if $(check-qtest-$(TARGET)-y), $(TARGET),)) +check-qtest-y=$(foreach TARGET,$(TARGETS), $(check-qtest-$(TARGET)-y)) +endif + +qtest-obj-y = tests/libqtest.o $(test-util-obj-y) +$(check-qtest-y): $(qtest-obj-y) + +.PHONY: check-help +check-help: + @echo "Regression testing targets:" + @echo + @echo " make check Run all tests" + @echo " make check-qtest-TARGET Run qtest tests for given target" + @echo " make check-qtest Run qtest tests" + @echo " make check-unit Run qobject tests" + @echo " make check-qapi-schema Run QAPI schema tests" + @echo " make check-block Run block tests" + @echo " make check-report.html Generates an HTML test report" + @echo " make check-clean Clean the tests" + @echo + @echo "Please note that HTML reports do not regenerate if the unit tests" + @echo "has not changed." + @echo + @echo "The variable SPEED can be set to control the gtester speed setting." + @echo "Default options are -k and (for make V=1) --verbose; they can be" + @echo "changed with variable GTESTER_OPTIONS." + +SPEED = quick +GTESTER_OPTIONS = -k $(if $(V),--verbose,-q) +GCOV_OPTIONS = -n $(if $(V),-f,) + +# gtester tests, possibly with verbose output + +.PHONY: $(patsubst %, check-qtest-%, $(QTEST_TARGETS)) +$(patsubst %, check-qtest-%, $(QTEST_TARGETS)): check-qtest-%: $(check-qtest-y) + $(if $(CONFIG_GCOV),@rm -f *.gcda */*.gcda */*/*.gcda */*/*/*.gcda,) + $(call quiet-command,QTEST_QEMU_BINARY=$*-softmmu/qemu-system-$* \ + QTEST_QEMU_IMG=qemu-img$(EXESUF) \ + MALLOC_PERTURB_=$${MALLOC_PERTURB_:-$$((RANDOM % 255 + 1))} \ + gtester $(GTESTER_OPTIONS) -m=$(SPEED) $(check-qtest-$*-y),"GTESTER $@") + $(if $(CONFIG_GCOV),@for f in $(gcov-files-$*-y); do \ + echo Gcov report for $$f:;\ + $(GCOV) $(GCOV_OPTIONS) $$f -o `dirname $$f`; \ + done,) + +.PHONY: $(patsubst %, check-%, $(check-unit-y)) +$(patsubst %, check-%, $(check-unit-y)): check-%: % + $(if $(CONFIG_GCOV),@rm -f *.gcda */*.gcda */*/*.gcda */*/*/*.gcda,) + $(call quiet-command, \ + MALLOC_PERTURB_=$${MALLOC_PERTURB_:-$$((RANDOM % 255 + 1))} \ + gtester $(GTESTER_OPTIONS) -m=$(SPEED) $*,"GTESTER $*") + $(if $(CONFIG_GCOV),@for f in $(gcov-files-$(subst tests/,,$*)-y); do \ + echo Gcov report for $$f:;\ + $(GCOV) $(GCOV_OPTIONS) $$f -o `dirname $$f`; \ + done,) + +# gtester tests with XML output + +$(patsubst %, check-report-qtest-%.xml, $(QTEST_TARGETS)): check-report-qtest-%.xml: $(check-qtest-y) + $(call quiet-command,QTEST_QEMU_BINARY=$*-softmmu/qemu-system-$* \ + QTEST_QEMU_IMG=qemu-img$(EXESUF) \ + gtester -q $(GTESTER_OPTIONS) -o $@ -m=$(SPEED) $(check-qtest-$*-y),"GTESTER $@") + +check-report-unit.xml: $(check-unit-y) + $(call quiet-command,gtester -q $(GTESTER_OPTIONS) -o $@ -m=$(SPEED) $^, "GTESTER $@") + +# Reports and overall runs + +check-report.xml: $(patsubst %,check-report-qtest-%.xml, $(QTEST_TARGETS)) check-report-unit.xml + $(call quiet-command,$(SRC_PATH)/scripts/gtester-cat $^ > $@, " GEN $@") + +check-report.html: check-report.xml + $(call quiet-command,gtester-report $< > $@, " GEN $@") + + +# Other tests + +QEMU_IOTESTS_HELPERS-$(CONFIG_LINUX) = tests/qemu-iotests/socket_scm_helper$(EXESUF) + +.PHONY: check-tests/qemu-iotests-quick.sh +check-tests/qemu-iotests-quick.sh: tests/qemu-iotests-quick.sh qemu-img$(EXESUF) qemu-io$(EXESUF) $(QEMU_IOTESTS_HELPERS-y) + $< + +.PHONY: check-tests/test-qapi.py +check-tests/test-qapi.py: tests/test-qapi.py + +.PHONY: $(patsubst %, check-%, $(check-qapi-schema-y)) +$(patsubst %, check-%, $(check-qapi-schema-y)): check-%.json: $(SRC_PATH)/%.json + $(call quiet-command, PYTHONPATH=$(SRC_PATH)/scripts \ + $(PYTHON) $(SRC_PATH)/tests/qapi-schema/test-qapi.py \ + $^ >$*.test.out 2>$*.test.err; \ + echo $$? >$*.test.exit, \ + " TEST $*.out") + @diff -q $(SRC_PATH)/$*.out $*.test.out + @# Sanitize error messages (make them independent of build directory) + @perl -p -e 's|\Q$(SRC_PATH)\E/||g' $*.test.err | diff -q $(SRC_PATH)/$*.err - + @diff -q $(SRC_PATH)/$*.exit $*.test.exit + +# Consolidated targets + +.PHONY: check-qapi-schema check-qtest check-unit check check-clean +check-qapi-schema: $(patsubst %,check-%, $(check-qapi-schema-y)) +check-qtest: $(patsubst %,check-qtest-%, $(QTEST_TARGETS)) +check-unit: $(patsubst %,check-%, $(check-unit-y)) +check-block: $(patsubst %,check-%, $(check-block-y)) +check: check-qapi-schema check-unit check-qtest +check-clean: + $(MAKE) -C tests/tcg clean + rm -rf $(check-unit-y) tests/*.o $(QEMU_IOTESTS_HELPERS-y) + rm -rf $(sort $(foreach target,$(SYSEMU_TARGET_LIST), $(check-qtest-$(target)-y))) + +clean: check-clean + +# Build the help program automatically + +all: $(QEMU_IOTESTS_HELPERS-y) + +-include $(wildcard tests/*.d) +-include $(wildcard tests/libqos/*.d) diff --git a/tests/bios-tables-test.c.orig b/tests/bios-tables-test.c.orig new file mode 100644 index 0000000000..d455b2abfc --- /dev/null +++ b/tests/bios-tables-test.c.orig @@ -0,0 +1,925 @@ +/* + * Boot order test cases. + * + * Copyright (c) 2013 Red Hat Inc. + * + * Authors: + * Michael S. Tsirkin , + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. + */ + +#include "qemu/osdep.h" +#include +#include "qemu-common.h" +#include "hw/firmware/smbios.h" +#include "qemu/bitmap.h" +#include "acpi-utils.h" +#include "boot-sector.h" + +#define MACHINE_PC "pc" +#define MACHINE_Q35 "q35" + +#define ACPI_REBUILD_EXPECTED_AML "TEST_ACPI_REBUILD_AML" + +typedef struct { + const char *machine; + const char *variant; + uint32_t rsdp_addr; + uint8_t rsdp_table[36 /* ACPI 2.0+ RSDP size */]; + AcpiRsdtDescriptorRev1 rsdt_table; + uint32_t dsdt_addr; + uint32_t facs_addr; + AcpiFacsDescriptorRev1 facs_table; + uint32_t *rsdt_tables_addr; + int rsdt_tables_nr; + GArray *tables; + uint32_t smbios_ep_addr; + struct smbios_21_entry_point smbios_ep_table; + uint8_t *required_struct_types; + int required_struct_types_len; + QTestState *qts; +} test_data; + +static char disk[] = "tests/acpi-test-disk-XXXXXX"; +static const char *data_dir = "tests/data/acpi"; +#ifdef CONFIG_IASL +static const char *iasl = stringify(CONFIG_IASL); +#else +static const char *iasl; +#endif + +static void free_test_data(test_data *data) +{ + AcpiSdtTable *temp; + int i; + + g_free(data->rsdt_tables_addr); + + for (i = 0; i < data->tables->len; ++i) { + temp = &g_array_index(data->tables, AcpiSdtTable, i); + g_free(temp->aml); + if (temp->aml_file && + !temp->tmp_files_retain && + g_strstr_len(temp->aml_file, -1, "aml-")) { + unlink(temp->aml_file); + } + g_free(temp->aml_file); + g_free(temp->asl); + if (temp->asl_file && + !temp->tmp_files_retain) { + unlink(temp->asl_file); + } + g_free(temp->asl_file); + } + + g_array_free(data->tables, true); +} + +static void test_acpi_rsdp_address(test_data *data) +{ + uint32_t off = acpi_find_rsdp_address(data->qts); + g_assert_cmphex(off, <, 0x100000); + data->rsdp_addr = off; +} + +static void test_acpi_rsdp_table(test_data *data) +{ + uint8_t *rsdp_table = data->rsdp_table, revision; + uint32_t addr = data->rsdp_addr; + + acpi_parse_rsdp_table(data->qts, addr, rsdp_table); + revision = rsdp_table[15 /* Revision offset */]; + + switch (revision) { + case 0: /* ACPI 1.0 RSDP */ + /* With rev 1, checksum is only for the first 20 bytes */ + g_assert(!acpi_calc_checksum(rsdp_table, 20)); + break; + case 2: /* ACPI 2.0+ RSDP */ + /* With revision 2, we have 2 checksums */ + g_assert(!acpi_calc_checksum(rsdp_table, 20)); + g_assert(!acpi_calc_checksum(rsdp_table, 36)); + break; + default: + g_assert_not_reached(); + } +} + +static void test_acpi_rsdt_table(test_data *data) +{ + AcpiRsdtDescriptorRev1 *rsdt_table = &data->rsdt_table; + uint32_t addr = acpi_get_rsdt_address(data->rsdp_table); + uint32_t *tables; + int tables_nr; + uint8_t checksum; + uint32_t rsdt_table_length; + + /* read the header */ + ACPI_READ_TABLE_HEADER(data->qts, rsdt_table, addr); + ACPI_ASSERT_CMP(rsdt_table->signature, "RSDT"); + + rsdt_table_length = le32_to_cpu(rsdt_table->length); + + /* compute the table entries in rsdt */ + tables_nr = (rsdt_table_length - sizeof(AcpiRsdtDescriptorRev1)) / + sizeof(uint32_t); + g_assert(tables_nr > 0); + + /* get the addresses of the tables pointed by rsdt */ + tables = g_new0(uint32_t, tables_nr); + ACPI_READ_ARRAY_PTR(data->qts, tables, tables_nr, addr); + + checksum = acpi_calc_checksum((uint8_t *)rsdt_table, rsdt_table_length) + + acpi_calc_checksum((uint8_t *)tables, + tables_nr * sizeof(uint32_t)); + g_assert(!checksum); + + /* SSDT tables after FADT */ + data->rsdt_tables_addr = tables; + data->rsdt_tables_nr = tables_nr; +} + +static void fadt_fetch_facs_and_dsdt_ptrs(test_data *data) +{ + uint32_t addr; + AcpiTableHeader hdr; + + /* FADT table comes first */ + addr = le32_to_cpu(data->rsdt_tables_addr[0]); + ACPI_READ_TABLE_HEADER(data->qts, &hdr, addr); + ACPI_ASSERT_CMP(hdr.signature, "FACP"); + + ACPI_READ_FIELD(data->qts, data->facs_addr, addr); + ACPI_READ_FIELD(data->qts, data->dsdt_addr, addr); +} + +static void sanitize_fadt_ptrs(test_data *data) +{ + /* fixup pointers in FADT */ + int i; + + for (i = 0; i < data->tables->len; i++) { + AcpiSdtTable *sdt = &g_array_index(data->tables, AcpiSdtTable, i); + + if (memcmp(&sdt->header.signature, "FACP", 4)) { + continue; + } + + /* check original FADT checksum before sanitizing table */ + g_assert(!(uint8_t)( + acpi_calc_checksum((uint8_t *)sdt, sizeof(AcpiTableHeader)) + + acpi_calc_checksum((uint8_t *)sdt->aml, sdt->aml_len) + )); + + /* sdt->aml field offset := spec offset - header size */ + memset(sdt->aml + 0, 0, 4); /* sanitize FIRMWARE_CTRL(36) ptr */ + memset(sdt->aml + 4, 0, 4); /* sanitize DSDT(40) ptr */ + if (sdt->header.revision >= 3) { + memset(sdt->aml + 96, 0, 8); /* sanitize X_FIRMWARE_CTRL(132) ptr */ + memset(sdt->aml + 104, 0, 8); /* sanitize X_DSDT(140) ptr */ + } + + /* update checksum */ + sdt->header.checksum = 0; + sdt->header.checksum -= + acpi_calc_checksum((uint8_t *)sdt, sizeof(AcpiTableHeader)) + + acpi_calc_checksum((uint8_t *)sdt->aml, sdt->aml_len); + break; + } +} + +static void test_acpi_facs_table(test_data *data) +{ + AcpiFacsDescriptorRev1 *facs_table = &data->facs_table; + uint32_t addr = le32_to_cpu(data->facs_addr); + + ACPI_READ_FIELD(data->qts, facs_table->signature, addr); + ACPI_READ_FIELD(data->qts, facs_table->length, addr); + ACPI_READ_FIELD(data->qts, facs_table->hardware_signature, addr); + ACPI_READ_FIELD(data->qts, facs_table->firmware_waking_vector, addr); + ACPI_READ_FIELD(data->qts, facs_table->global_lock, addr); + ACPI_READ_FIELD(data->qts, facs_table->flags, addr); + ACPI_READ_ARRAY(data->qts, facs_table->resverved3, addr); + + ACPI_ASSERT_CMP(facs_table->signature, "FACS"); +} + +/** fetch_table + * load ACPI table at @addr into table descriptor @sdt_table + * and check that header checksum matches actual one. + */ +static void fetch_table(QTestState *qts, AcpiSdtTable *sdt_table, uint32_t addr) +{ + uint8_t checksum; + + memset(sdt_table, 0, sizeof(*sdt_table)); + ACPI_READ_TABLE_HEADER(qts, &sdt_table->header, addr); + + sdt_table->aml_len = le32_to_cpu(sdt_table->header.length) + - sizeof(AcpiTableHeader); + sdt_table->aml = g_malloc0(sdt_table->aml_len); + ACPI_READ_ARRAY_PTR(qts, sdt_table->aml, sdt_table->aml_len, addr); + + checksum = acpi_calc_checksum((uint8_t *)sdt_table, + sizeof(AcpiTableHeader)) + + acpi_calc_checksum((uint8_t *)sdt_table->aml, + sdt_table->aml_len); + g_assert(!checksum); +} + +static void test_acpi_dsdt_table(test_data *data) +{ + AcpiSdtTable dsdt_table; + uint32_t addr = le32_to_cpu(data->dsdt_addr); + + fetch_table(data->qts, &dsdt_table, addr); + ACPI_ASSERT_CMP(dsdt_table.header.signature, "DSDT"); + + /* Since DSDT isn't in RSDT, add DSDT to ASL test tables list manually */ + g_array_append_val(data->tables, dsdt_table); +} + +/* Load all tables and add to test list directly RSDT referenced tables */ +static void fetch_rsdt_referenced_tables(test_data *data) +{ + int tables_nr = data->rsdt_tables_nr; + int i; + + for (i = 0; i < tables_nr; i++) { + AcpiSdtTable ssdt_table; + uint32_t addr; + + addr = le32_to_cpu(data->rsdt_tables_addr[i]); + fetch_table(data->qts, &ssdt_table, addr); + + /* Add table to ASL test tables list */ + g_array_append_val(data->tables, ssdt_table); + } +} + +static void dump_aml_files(test_data *data, bool rebuild) +{ + AcpiSdtTable *sdt; + GError *error = NULL; + gchar *aml_file = NULL; + gint fd; + ssize_t ret; + int i; + + for (i = 0; i < data->tables->len; ++i) { + const char *ext = data->variant ? data->variant : ""; + sdt = &g_array_index(data->tables, AcpiSdtTable, i); + g_assert(sdt->aml); + + if (rebuild) { + aml_file = g_strdup_printf("%s/%s/%.4s%s", data_dir, data->machine, + (gchar *)&sdt->header.signature, ext); + fd = g_open(aml_file, O_WRONLY|O_TRUNC|O_CREAT, + S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH); + } else { + fd = g_file_open_tmp("aml-XXXXXX", &sdt->aml_file, &error); + g_assert_no_error(error); + } + g_assert(fd >= 0); + + ret = qemu_write_full(fd, sdt, sizeof(AcpiTableHeader)); + g_assert(ret == sizeof(AcpiTableHeader)); + ret = qemu_write_full(fd, sdt->aml, sdt->aml_len); + g_assert(ret == sdt->aml_len); + + close(fd); + + g_free(aml_file); + } +} + +static bool compare_signature(AcpiSdtTable *sdt, const char *signature) +{ + return !memcmp(&sdt->header.signature, signature, 4); +} + +static bool load_asl(GArray *sdts, AcpiSdtTable *sdt) +{ + AcpiSdtTable *temp; + GError *error = NULL; + GString *command_line = g_string_new(iasl); + gint fd; + gchar *out, *out_err; + gboolean ret; + int i; + + fd = g_file_open_tmp("asl-XXXXXX.dsl", &sdt->asl_file, &error); + g_assert_no_error(error); + close(fd); + + /* build command line */ + g_string_append_printf(command_line, " -p %s ", sdt->asl_file); + if (compare_signature(sdt, "DSDT") || + compare_signature(sdt, "SSDT")) { + for (i = 0; i < sdts->len; ++i) { + temp = &g_array_index(sdts, AcpiSdtTable, i); + if (compare_signature(temp, "DSDT") || + compare_signature(temp, "SSDT")) { + g_string_append_printf(command_line, "-e %s ", temp->aml_file); + } + } + } + g_string_append_printf(command_line, "-d %s", sdt->aml_file); + + /* pass 'out' and 'out_err' in order to be redirected */ + ret = g_spawn_command_line_sync(command_line->str, &out, &out_err, NULL, &error); + g_assert_no_error(error); + if (ret) { + ret = g_file_get_contents(sdt->asl_file, &sdt->asl, + &sdt->asl_len, &error); + g_assert(ret); + g_assert_no_error(error); + ret = (sdt->asl_len > 0); + } + + g_free(out); + g_free(out_err); + g_string_free(command_line, true); + + return !ret; +} + +#define COMMENT_END "*/" +#define DEF_BLOCK "DefinitionBlock (" +#define BLOCK_NAME_END "," + +static GString *normalize_asl(gchar *asl_code) +{ + GString *asl = g_string_new(asl_code); + gchar *comment, *block_name; + + /* strip comments (different generation days) */ + comment = g_strstr_len(asl->str, asl->len, COMMENT_END); + if (comment) { + comment += strlen(COMMENT_END); + while (*comment == '\n') { + comment++; + } + asl = g_string_erase(asl, 0, comment - asl->str); + } + + /* strip def block name (it has file path in it) */ + if (g_str_has_prefix(asl->str, DEF_BLOCK)) { + block_name = g_strstr_len(asl->str, asl->len, BLOCK_NAME_END); + g_assert(block_name); + asl = g_string_erase(asl, 0, + block_name + sizeof(BLOCK_NAME_END) - asl->str); + } + + return asl; +} + +static GArray *load_expected_aml(test_data *data) +{ + int i; + AcpiSdtTable *sdt; + GError *error = NULL; + gboolean ret; + + GArray *exp_tables = g_array_new(false, true, sizeof(AcpiSdtTable)); + if (getenv("V")) { + fputc('\n', stderr); + } + for (i = 0; i < data->tables->len; ++i) { + AcpiSdtTable exp_sdt; + gchar *aml_file = NULL; + const char *ext = data->variant ? data->variant : ""; + + sdt = &g_array_index(data->tables, AcpiSdtTable, i); + + memset(&exp_sdt, 0, sizeof(exp_sdt)); + exp_sdt.header.signature = sdt->header.signature; + +try_again: + aml_file = g_strdup_printf("%s/%s/%.4s%s", data_dir, data->machine, + (gchar *)&sdt->header.signature, ext); + if (getenv("V")) { + fprintf(stderr, "Looking for expected file '%s'\n", aml_file); + } + if (g_file_test(aml_file, G_FILE_TEST_EXISTS)) { + exp_sdt.aml_file = aml_file; + } else if (*ext != '\0') { + /* try fallback to generic (extension less) expected file */ + ext = ""; + g_free(aml_file); + goto try_again; + } + g_assert(exp_sdt.aml_file); + if (getenv("V")) { + fprintf(stderr, "Using expected file '%s'\n", aml_file); + } + ret = g_file_get_contents(aml_file, &exp_sdt.aml, + &exp_sdt.aml_len, &error); + g_assert(ret); + g_assert_no_error(error); + g_assert(exp_sdt.aml); + g_assert(exp_sdt.aml_len); + + g_array_append_val(exp_tables, exp_sdt); + } + + return exp_tables; +} + +/* test the list of tables in @data->tables against reference tables */ +static void test_acpi_asl(test_data *data) +{ + int i; + AcpiSdtTable *sdt, *exp_sdt; + test_data exp_data; + gboolean exp_err, err; + + memset(&exp_data, 0, sizeof(exp_data)); + exp_data.tables = load_expected_aml(data); + dump_aml_files(data, false); + for (i = 0; i < data->tables->len; ++i) { + GString *asl, *exp_asl; + + sdt = &g_array_index(data->tables, AcpiSdtTable, i); + exp_sdt = &g_array_index(exp_data.tables, AcpiSdtTable, i); + + err = load_asl(data->tables, sdt); + asl = normalize_asl(sdt->asl); + + exp_err = load_asl(exp_data.tables, exp_sdt); + exp_asl = normalize_asl(exp_sdt->asl); + + /* TODO: check for warnings */ + g_assert(!err || exp_err); + + if (g_strcmp0(asl->str, exp_asl->str)) { + if (exp_err) { + fprintf(stderr, + "Warning! iasl couldn't parse the expected aml\n"); + } else { + uint32_t signature = cpu_to_le32(exp_sdt->header.signature); + sdt->tmp_files_retain = true; + exp_sdt->tmp_files_retain = true; + fprintf(stderr, + "acpi-test: Warning! %.4s mismatch. " + "Actual [asl:%s, aml:%s], Expected [asl:%s, aml:%s].\n", + (gchar *)&signature, + sdt->asl_file, sdt->aml_file, + exp_sdt->asl_file, exp_sdt->aml_file); + if (getenv("V")) { + const char *diff_cmd = getenv("DIFF"); + if (diff_cmd) { + int ret G_GNUC_UNUSED; + char *diff = g_strdup_printf("%s %s %s", diff_cmd, + exp_sdt->asl_file, sdt->asl_file); + ret = system(diff) ; + g_free(diff); + } else { + fprintf(stderr, "acpi-test: Warning. not showing " + "difference since no diff utility is specified. " + "Set 'DIFF' environment variable to a preferred " + "diff utility and run 'make V=1 check' again to " + "see ASL difference."); + } + } + } + } + g_string_free(asl, true); + g_string_free(exp_asl, true); + } + + free_test_data(&exp_data); +} + +static bool smbios_ep_table_ok(test_data *data) +{ + struct smbios_21_entry_point *ep_table = &data->smbios_ep_table; + uint32_t addr = data->smbios_ep_addr; + + ACPI_READ_ARRAY(data->qts, ep_table->anchor_string, addr); + if (memcmp(ep_table->anchor_string, "_SM_", 4)) { + return false; + } + ACPI_READ_FIELD(data->qts, ep_table->checksum, addr); + ACPI_READ_FIELD(data->qts, ep_table->length, addr); + ACPI_READ_FIELD(data->qts, ep_table->smbios_major_version, addr); + ACPI_READ_FIELD(data->qts, ep_table->smbios_minor_version, addr); + ACPI_READ_FIELD(data->qts, ep_table->max_structure_size, addr); + ACPI_READ_FIELD(data->qts, ep_table->entry_point_revision, addr); + ACPI_READ_ARRAY(data->qts, ep_table->formatted_area, addr); + ACPI_READ_ARRAY(data->qts, ep_table->intermediate_anchor_string, addr); + if (memcmp(ep_table->intermediate_anchor_string, "_DMI_", 5)) { + return false; + } + ACPI_READ_FIELD(data->qts, ep_table->intermediate_checksum, addr); + ACPI_READ_FIELD(data->qts, ep_table->structure_table_length, addr); + if (ep_table->structure_table_length == 0) { + return false; + } + ACPI_READ_FIELD(data->qts, ep_table->structure_table_address, addr); + ACPI_READ_FIELD(data->qts, ep_table->number_of_structures, addr); + if (ep_table->number_of_structures == 0) { + return false; + } + ACPI_READ_FIELD(data->qts, ep_table->smbios_bcd_revision, addr); + if (acpi_calc_checksum((uint8_t *)ep_table, sizeof *ep_table) || + acpi_calc_checksum((uint8_t *)ep_table + 0x10, + sizeof *ep_table - 0x10)) { + return false; + } + return true; +} + +static void test_smbios_entry_point(test_data *data) +{ + uint32_t off; + + /* find smbios entry point structure */ + for (off = 0xf0000; off < 0x100000; off += 0x10) { + uint8_t sig[] = "_SM_"; + int i; + + for (i = 0; i < sizeof sig - 1; ++i) { + sig[i] = qtest_readb(data->qts, off + i); + } + + if (!memcmp(sig, "_SM_", sizeof sig)) { + /* signature match, but is this a valid entry point? */ + data->smbios_ep_addr = off; + if (smbios_ep_table_ok(data)) { + break; + } + } + } + + g_assert_cmphex(off, <, 0x100000); +} + +static inline bool smbios_single_instance(uint8_t type) +{ + switch (type) { + case 0: + case 1: + case 2: + case 3: + case 16: + case 32: + case 127: + return true; + default: + return false; + } +} + +static void test_smbios_structs(test_data *data) +{ + DECLARE_BITMAP(struct_bitmap, SMBIOS_MAX_TYPE+1) = { 0 }; + struct smbios_21_entry_point *ep_table = &data->smbios_ep_table; + uint32_t addr = le32_to_cpu(ep_table->structure_table_address); + int i, len, max_len = 0; + uint8_t type, prv, crt; + + /* walk the smbios tables */ + for (i = 0; i < le16_to_cpu(ep_table->number_of_structures); i++) { + + /* grab type and formatted area length from struct header */ + type = qtest_readb(data->qts, addr); + g_assert_cmpuint(type, <=, SMBIOS_MAX_TYPE); + len = qtest_readb(data->qts, addr + 1); + + /* single-instance structs must not have been encountered before */ + if (smbios_single_instance(type)) { + g_assert(!test_bit(type, struct_bitmap)); + } + set_bit(type, struct_bitmap); + + /* seek to end of unformatted string area of this struct ("\0\0") */ + prv = crt = 1; + while (prv || crt) { + prv = crt; + crt = qtest_readb(data->qts, addr + len); + len++; + } + + /* keep track of max. struct size */ + if (max_len < len) { + max_len = len; + g_assert_cmpuint(max_len, <=, ep_table->max_structure_size); + } + + /* start of next structure */ + addr += len; + } + + /* total table length and max struct size must match entry point values */ + g_assert_cmpuint(le16_to_cpu(ep_table->structure_table_length), ==, + addr - le32_to_cpu(ep_table->structure_table_address)); + g_assert_cmpuint(le16_to_cpu(ep_table->max_structure_size), ==, max_len); + + /* required struct types must all be present */ + for (i = 0; i < data->required_struct_types_len; i++) { + g_assert(test_bit(data->required_struct_types[i], struct_bitmap)); + } +} + +static void test_acpi_one(const char *params, test_data *data) +{ + char *args; + + /* Disable kernel irqchip to be able to override apic irq0. */ + args = g_strdup_printf("-machine %s,accel=%s,kernel-irqchip=off " + "-net none -display none %s " + "-drive id=hd0,if=none,file=%s,format=raw " + "-device ide-hd,drive=hd0 ", + data->machine, "kvm:tcg", + params ? params : "", disk); + + data->qts = qtest_init(args); + + boot_sector_test(data->qts); + + data->tables = g_array_new(false, true, sizeof(AcpiSdtTable)); + test_acpi_rsdp_address(data); + test_acpi_rsdp_table(data); + test_acpi_rsdt_table(data); + fadt_fetch_facs_and_dsdt_ptrs(data); + test_acpi_facs_table(data); + test_acpi_dsdt_table(data); + fetch_rsdt_referenced_tables(data); + + sanitize_fadt_ptrs(data); + + if (iasl) { + if (getenv(ACPI_REBUILD_EXPECTED_AML)) { + dump_aml_files(data, true); + } else { + test_acpi_asl(data); + } + } + + test_smbios_entry_point(data); + test_smbios_structs(data); + + assert(!global_qtest); + qtest_quit(data->qts); + g_free(args); +} + +static uint8_t base_required_struct_types[] = { + 0, 1, 3, 4, 16, 17, 19, 32, 127 +}; + +static void test_acpi_piix4_tcg(void) +{ + test_data data; + + /* Supplying -machine accel argument overrides the default (qtest). + * This is to make guest actually run. + */ + memset(&data, 0, sizeof(data)); + data.machine = MACHINE_PC; + data.required_struct_types = base_required_struct_types; + data.required_struct_types_len = ARRAY_SIZE(base_required_struct_types); + test_acpi_one(NULL, &data); + free_test_data(&data); +} + +static void test_acpi_piix4_tcg_bridge(void) +{ + test_data data; + + memset(&data, 0, sizeof(data)); + data.machine = MACHINE_PC; + data.variant = ".bridge"; + data.required_struct_types = base_required_struct_types; + data.required_struct_types_len = ARRAY_SIZE(base_required_struct_types); + test_acpi_one("-device pci-bridge,chassis_nr=1", &data); + free_test_data(&data); +} + +static void test_acpi_q35_tcg(void) +{ + test_data data; + + memset(&data, 0, sizeof(data)); + data.machine = MACHINE_Q35; + data.required_struct_types = base_required_struct_types; + data.required_struct_types_len = ARRAY_SIZE(base_required_struct_types); + test_acpi_one(NULL, &data); + free_test_data(&data); +} + +static void test_acpi_q35_tcg_bridge(void) +{ + test_data data; + + memset(&data, 0, sizeof(data)); + data.machine = MACHINE_Q35; + data.variant = ".bridge"; + data.required_struct_types = base_required_struct_types; + data.required_struct_types_len = ARRAY_SIZE(base_required_struct_types); + test_acpi_one("-device pci-bridge,chassis_nr=1", + &data); + free_test_data(&data); +} + +static void test_acpi_q35_tcg_mmio64(void) +{ + test_data data = { + .machine = MACHINE_Q35, + .variant = ".mmio64", + .required_struct_types = base_required_struct_types, + .required_struct_types_len = ARRAY_SIZE(base_required_struct_types) + }; + + test_acpi_one("-m 128M,slots=1,maxmem=2G " + "-device pci-testdev,membar=2G", + &data); + free_test_data(&data); +} + +static void test_acpi_piix4_tcg_cphp(void) +{ + test_data data; + + memset(&data, 0, sizeof(data)); + data.machine = MACHINE_PC; + data.variant = ".cphp"; + test_acpi_one("-smp 2,cores=3,sockets=2,maxcpus=6" + " -numa node -numa node" + " -numa dist,src=0,dst=1,val=21", + &data); + free_test_data(&data); +} + +static void test_acpi_q35_tcg_cphp(void) +{ + test_data data; + + memset(&data, 0, sizeof(data)); + data.machine = MACHINE_Q35; + data.variant = ".cphp"; + test_acpi_one(" -smp 2,cores=3,sockets=2,maxcpus=6" + " -numa node -numa node" + " -numa dist,src=0,dst=1,val=21", + &data); + free_test_data(&data); +} + +static uint8_t ipmi_required_struct_types[] = { + 0, 1, 3, 4, 16, 17, 19, 32, 38, 127 +}; + +static void test_acpi_q35_tcg_ipmi(void) +{ + test_data data; + + memset(&data, 0, sizeof(data)); + data.machine = MACHINE_Q35; + data.variant = ".ipmibt"; + data.required_struct_types = ipmi_required_struct_types; + data.required_struct_types_len = ARRAY_SIZE(ipmi_required_struct_types); + test_acpi_one("-device ipmi-bmc-sim,id=bmc0" + " -device isa-ipmi-bt,bmc=bmc0", + &data); + free_test_data(&data); +} + +static void test_acpi_piix4_tcg_ipmi(void) +{ + test_data data; + + /* Supplying -machine accel argument overrides the default (qtest). + * This is to make guest actually run. + */ + memset(&data, 0, sizeof(data)); + data.machine = MACHINE_PC; + data.variant = ".ipmikcs"; + data.required_struct_types = ipmi_required_struct_types; + data.required_struct_types_len = ARRAY_SIZE(ipmi_required_struct_types); + test_acpi_one("-device ipmi-bmc-sim,id=bmc0" + " -device isa-ipmi-kcs,irq=0,bmc=bmc0", + &data); + free_test_data(&data); +} + +static void test_acpi_q35_tcg_memhp(void) +{ + test_data data; + + memset(&data, 0, sizeof(data)); + data.machine = MACHINE_Q35; + data.variant = ".memhp"; + test_acpi_one(" -m 128,slots=3,maxmem=1G" + " -numa node -numa node" + " -numa dist,src=0,dst=1,val=21", + &data); + free_test_data(&data); +} + +static void test_acpi_piix4_tcg_memhp(void) +{ + test_data data; + + memset(&data, 0, sizeof(data)); + data.machine = MACHINE_PC; + data.variant = ".memhp"; + test_acpi_one(" -m 128,slots=3,maxmem=1G" + " -numa node -numa node" + " -numa dist,src=0,dst=1,val=21", + &data); + free_test_data(&data); +} + +static void test_acpi_q35_tcg_numamem(void) +{ + test_data data; + + memset(&data, 0, sizeof(data)); + data.machine = MACHINE_Q35; + data.variant = ".numamem"; + test_acpi_one(" -numa node -numa node,mem=128", &data); + free_test_data(&data); +} + +static void test_acpi_piix4_tcg_numamem(void) +{ + test_data data; + + memset(&data, 0, sizeof(data)); + data.machine = MACHINE_PC; + data.variant = ".numamem"; + test_acpi_one(" -numa node -numa node,mem=128", &data); + free_test_data(&data); +} + +static void test_acpi_tcg_dimm_pxm(const char *machine) +{ + test_data data; + + memset(&data, 0, sizeof(data)); + data.machine = machine; + data.variant = ".dimmpxm"; + test_acpi_one(" -machine nvdimm=on,nvdimm-persistence=cpu" + " -smp 4,sockets=4" + " -m 128M,slots=3,maxmem=1G" + " -numa node,mem=32M,nodeid=0" + " -numa node,mem=32M,nodeid=1" + " -numa node,mem=32M,nodeid=2" + " -numa node,mem=32M,nodeid=3" + " -numa cpu,node-id=0,socket-id=0" + " -numa cpu,node-id=1,socket-id=1" + " -numa cpu,node-id=2,socket-id=2" + " -numa cpu,node-id=3,socket-id=3" + " -object memory-backend-ram,id=ram0,size=128M" + " -object memory-backend-ram,id=nvm0,size=128M" + " -device pc-dimm,id=dimm0,memdev=ram0,node=1" + " -device nvdimm,id=dimm1,memdev=nvm0,node=2", + &data); + free_test_data(&data); +} + +static void test_acpi_q35_tcg_dimm_pxm(void) +{ + test_acpi_tcg_dimm_pxm(MACHINE_Q35); +} + +static void test_acpi_piix4_tcg_dimm_pxm(void) +{ + test_acpi_tcg_dimm_pxm(MACHINE_PC); +} + +int main(int argc, char *argv[]) +{ + const char *arch = qtest_get_arch(); + int ret; + + ret = boot_sector_init(disk); + if(ret) + return ret; + + g_test_init(&argc, &argv, NULL); + + if (strcmp(arch, "i386") == 0 || strcmp(arch, "x86_64") == 0) { + qtest_add_func("acpi/piix4", test_acpi_piix4_tcg); + qtest_add_func("acpi/piix4/bridge", test_acpi_piix4_tcg_bridge); + qtest_add_func("acpi/q35", test_acpi_q35_tcg); + qtest_add_func("acpi/q35/bridge", test_acpi_q35_tcg_bridge); + qtest_add_func("acpi/q35/mmio64", test_acpi_q35_tcg_mmio64); + qtest_add_func("acpi/piix4/ipmi", test_acpi_piix4_tcg_ipmi); + qtest_add_func("acpi/q35/ipmi", test_acpi_q35_tcg_ipmi); + qtest_add_func("acpi/piix4/cpuhp", test_acpi_piix4_tcg_cphp); + qtest_add_func("acpi/q35/cpuhp", test_acpi_q35_tcg_cphp); + qtest_add_func("acpi/piix4/memhp", test_acpi_piix4_tcg_memhp); + qtest_add_func("acpi/q35/memhp", test_acpi_q35_tcg_memhp); + qtest_add_func("acpi/piix4/numamem", test_acpi_piix4_tcg_numamem); + qtest_add_func("acpi/q35/numamem", test_acpi_q35_tcg_numamem); + qtest_add_func("acpi/piix4/dimmpxm", test_acpi_piix4_tcg_dimm_pxm); + qtest_add_func("acpi/q35/dimmpxm", test_acpi_q35_tcg_dimm_pxm); + } + ret = g_test_run(); + boot_sector_cleanup(disk); + return ret; +} diff --git a/tests/data/acpi/diff-aml.sh b/tests/data/acpi/diff-aml.sh new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/data/acpi/disassemle-aml.py b/tests/data/acpi/disassemle-aml.py new file mode 100644 index 0000000000..0398fada63 --- /dev/null +++ b/tests/data/acpi/disassemle-aml.py @@ -0,0 +1,21 @@ +#!/usr/bin/python + +import os, re +root = "tests/data/acpi" +for machine in os.listdir(root): + machine_root = os.path.join(root, machine) + if not os.path.isdir(machine_root): + continue + files = os.listdir(machine_root): + for file in files: + if file.endswith(".dsl"): + continue + extension_prefix = "^[^.]*\." + if re.match(extension_prefix, file): + variant = re.sub(extension_prefix, "", file) + + +for dirpath, dirnames, filenames in os.walk("tests/data/acpi"): + for file in files: + if file.endswith(".txt"): + print(os.path.join(root, file)) diff --git a/tests/data/acpi/microvm/APIC.dsl b/tests/data/acpi/microvm/APIC.dsl new file mode 100644 index 0000000000..02f56dce43 --- /dev/null +++ b/tests/data/acpi/microvm/APIC.dsl @@ -0,0 +1,56 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/microvm/APIC, Mon Sep 28 17:24:38 2020 + * + * ACPI Data Table [APIC] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "APIC" [Multiple APIC Description Table (MADT)] +[004h 0004 4] Table Length : 00000046 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : D7 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCAPIC" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Local Apic Address : FEE00000 +[028h 0040 4] Flags (decoded below) : 00000001 + PC-AT Compatibility : 1 + +[02Ch 0044 1] Subtable Type : 00 [Processor Local APIC] +[02Dh 0045 1] Length : 08 +[02Eh 0046 1] Processor ID : 00 +[02Fh 0047 1] Local Apic ID : 00 +[030h 0048 4] Flags (decoded below) : 00000001 + Processor Enabled : 1 + Runtime Online Capable : 0 + +[034h 0052 1] Subtable Type : 01 [I/O APIC] +[035h 0053 1] Length : 0C +[036h 0054 1] I/O Apic ID : 00 +[037h 0055 1] Reserved : 00 +[038h 0056 4] Address : FEC00000 +[03Ch 0060 4] Interrupt : 00000000 + +[040h 0064 1] Subtable Type : 04 [Local APIC NMI] +[041h 0065 1] Length : 06 +[042h 0066 1] Processor ID : FF +[043h 0067 2] Flags (decoded below) : 0000 + Polarity : 0 + Trigger Mode : 0 +[045h 0069 1] Interrupt Input LINT : 01 + +Raw Table Data: Length 70 (0x46) + + 0000: 41 50 49 43 46 00 00 00 01 D7 42 4F 43 48 53 20 // APICF.....BOCHS + 0010: 42 58 50 43 41 50 49 43 01 00 00 00 42 58 50 43 // BXPCAPIC....BXPC + 0020: 01 00 00 00 00 00 E0 FE 01 00 00 00 00 08 00 00 // ................ + 0030: 01 00 00 00 01 0C 00 00 00 00 C0 FE 00 00 00 00 // ................ + 0040: 04 06 FF 00 00 01 // ...... diff --git a/tests/data/acpi/microvm/DSDT.dsl b/tests/data/acpi/microvm/DSDT.dsl new file mode 100644 index 0000000000..fd53f08128 --- /dev/null +++ b/tests/data/acpi/microvm/DSDT.dsl @@ -0,0 +1,121 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembling to symbolic ASL+ operators + * + * Disassembly of tests/data/acpi/microvm/DSDT, Mon Sep 28 17:24:38 2020 + * + * Original Table Header: + * Signature "DSDT" + * Length 0x0000016D (365) + * Revision 0x02 + * Checksum 0x62 + * OEM ID "BOCHS " + * OEM Table ID "BXPCDSDT" + * OEM Revision 0x00000001 (1) + * Compiler ID "BXPC" + * Compiler Version 0x00000001 (1) + */ +DefinitionBlock ("", "DSDT", 2, "BOCHS ", "BXPCDSDT", 0x00000001) +{ + Scope (_SB) + { + Device (FWCF) + { + Name (_HID, "QEMU0002") // _HID: Hardware ID + Name (_STA, 0x0B) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0510, // Range Minimum + 0x0510, // Range Maximum + 0x01, // Alignment + 0x0C, // Length + ) + }) + } + + Device (COM1) + { + Name (_HID, EisaId ("PNP0501") /* 16550A-compatible COM Serial Port */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x03F8, // Range Minimum + 0x03F8, // Range Maximum + 0x00, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {4} + }) + } + + Device (GED) + { + Name (_HID, "ACPI0013" /* Generic Event Device */) // _HID: Hardware ID + Name (_UID, "GED") // _UID: Unique ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Edge, ActiveHigh, Exclusive, ,, ) + { + 0x00000009, + } + }) + OperationRegion (EREG, SystemMemory, 0xFEA00000, 0x04) + Field (EREG, DWordAcc, NoLock, WriteAsZeros) + { + ESEL, 32 + } + + Method (_EVT, 1, Serialized) // _EVT: Event + { + Local0 = ESEL /* \_SB_.GED_.ESEL */ + If (((Local0 & 0x02) == 0x02)) + { + Notify (PWRB, 0x80) // Status Change + } + } + } + + Device (PWRB) + { + Name (_HID, "PNP0C0C" /* Power Button Device */) // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + } + + Device (VR07) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x07) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0xFEB00E00, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000017, + } + }) + } + } + + Scope (\) + { + Name (_S5, Package (0x04) // _S5_: S5 System State + { + 0x05, + Zero, + Zero, + Zero + }) + } +} + diff --git a/tests/data/acpi/microvm/FACP.dsl b/tests/data/acpi/microvm/FACP.dsl new file mode 100644 index 0000000000..4cf780caec --- /dev/null +++ b/tests/data/acpi/microvm/FACP.dsl @@ -0,0 +1,196 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/microvm/FACP, Mon Sep 28 17:24:38 2020 + * + * ACPI Data Table [FACP] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "FACP" [Fixed ACPI Description Table (FADT)] +[004h 0004 4] Table Length : 0000010C +[008h 0008 1] Revision : 05 +[009h 0009 1] Checksum : 7E +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCFACP" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] FACS Address : 00000000 +[028h 0040 4] DSDT Address : 00000000 +[02Ch 0044 1] Model : 00 +[02Dh 0045 1] PM Profile : 00 [Unspecified] +[02Eh 0046 2] SCI Interrupt : 0000 +[030h 0048 4] SMI Command Port : 00000000 +[034h 0052 1] ACPI Enable Value : 00 +[035h 0053 1] ACPI Disable Value : 00 +[036h 0054 1] S4BIOS Command : 00 +[037h 0055 1] P-State Control : 00 +[038h 0056 4] PM1A Event Block Address : 00000000 +[03Ch 0060 4] PM1B Event Block Address : 00000000 +[040h 0064 4] PM1A Control Block Address : 00000000 +[044h 0068 4] PM1B Control Block Address : 00000000 +[048h 0072 4] PM2 Control Block Address : 00000000 +[04Ch 0076 4] PM Timer Block Address : 00000000 +[050h 0080 4] GPE0 Block Address : 00000000 +[054h 0084 4] GPE1 Block Address : 00000000 +[058h 0088 1] PM1 Event Block Length : 00 +[059h 0089 1] PM1 Control Block Length : 00 +[05Ah 0090 1] PM2 Control Block Length : 00 +[05Bh 0091 1] PM Timer Block Length : 00 +[05Ch 0092 1] GPE0 Block Length : 00 +[05Dh 0093 1] GPE1 Block Length : 00 +[05Eh 0094 1] GPE1 Base Offset : 00 +[05Fh 0095 1] _CST Support : 00 +[060h 0096 2] C2 Latency : 0000 +[062h 0098 2] C3 Latency : 0000 +[064h 0100 2] CPU Cache Size : 0000 +[066h 0102 2] Cache Flush Stride : 0000 +[068h 0104 1] Duty Cycle Offset : 00 +[069h 0105 1] Duty Cycle Width : 00 +[06Ah 0106 1] RTC Day Alarm Index : 00 +[06Bh 0107 1] RTC Month Alarm Index : 00 +[06Ch 0108 1] RTC Century Index : 00 +[06Dh 0109 2] Boot Flags (decoded below) : 0000 + Legacy Devices Supported (V2) : 0 + 8042 Present on ports 60/64 (V2) : 0 + VGA Not Present (V4) : 0 + MSI Not Supported (V4) : 0 + PCIe ASPM Not Supported (V4) : 0 + CMOS RTC Not Present (V5) : 0 +[06Fh 0111 1] Reserved : 00 +[070h 0112 4] Flags (decoded below) : 00100400 + WBINVD instruction is operational (V1) : 0 + WBINVD flushes all caches (V1) : 0 + All CPUs support C1 (V1) : 0 + C2 works on MP system (V1) : 0 + Control Method Power Button (V1) : 0 + Control Method Sleep Button (V1) : 0 + RTC wake not in fixed reg space (V1) : 0 + RTC can wake system from S4 (V1) : 0 + 32-bit PM Timer (V1) : 0 + Docking Supported (V1) : 0 + Reset Register Supported (V2) : 1 + Sealed Case (V3) : 0 + Headless - No Video (V3) : 0 + Use native instr after SLP_TYPx (V3) : 0 + PCIEXP_WAK Bits Supported (V4) : 0 + Use Platform Timer (V4) : 0 + RTC_STS valid on S4 wake (V4) : 0 + Remote Power-on capable (V4) : 0 + Use APIC Cluster Model (V4) : 0 + Use APIC Physical Destination Mode (V4) : 0 + Hardware Reduced (V5) : 1 + Low Power S0 Idle (V5) : 0 + +[074h 0116 12] Reset Register : [Generic Address Structure] +[074h 0116 1] Space ID : 00 [SystemMemory] +[075h 0117 1] Bit Width : 08 +[076h 0118 1] Bit Offset : 00 +[077h 0119 1] Encoded Access Width : 00 [Undefined/Legacy] +[078h 0120 8] Address : 00000000FEA00202 + +[080h 0128 1] Value to cause reset : 42 +[081h 0129 2] ARM Flags (decoded below) : 0000 + PSCI Compliant : 0 + Must use HVC for PSCI : 0 + +[083h 0131 1] FADT Minor Revision : 00 +[084h 0132 8] FACS Address : 0000000000000000 +[08Ch 0140 8] DSDT Address : 0000000000000000 +[094h 0148 12] PM1A Event Block : [Generic Address Structure] +[094h 0148 1] Space ID : 00 [SystemMemory] +[095h 0149 1] Bit Width : 00 +[096h 0150 1] Bit Offset : 00 +[097h 0151 1] Encoded Access Width : 00 [Undefined/Legacy] +[098h 0152 8] Address : 0000000000000000 + +[0A0h 0160 12] PM1B Event Block : [Generic Address Structure] +[0A0h 0160 1] Space ID : 00 [SystemMemory] +[0A1h 0161 1] Bit Width : 00 +[0A2h 0162 1] Bit Offset : 00 +[0A3h 0163 1] Encoded Access Width : 00 [Undefined/Legacy] +[0A4h 0164 8] Address : 0000000000000000 + +[0ACh 0172 12] PM1A Control Block : [Generic Address Structure] +[0ACh 0172 1] Space ID : 00 [SystemMemory] +[0ADh 0173 1] Bit Width : 00 +[0AEh 0174 1] Bit Offset : 00 +[0AFh 0175 1] Encoded Access Width : 00 [Undefined/Legacy] +[0B0h 0176 8] Address : 0000000000000000 + +[0B8h 0184 12] PM1B Control Block : [Generic Address Structure] +[0B8h 0184 1] Space ID : 00 [SystemMemory] +[0B9h 0185 1] Bit Width : 00 +[0BAh 0186 1] Bit Offset : 00 +[0BBh 0187 1] Encoded Access Width : 00 [Undefined/Legacy] +[0BCh 0188 8] Address : 0000000000000000 + +[0C4h 0196 12] PM2 Control Block : [Generic Address Structure] +[0C4h 0196 1] Space ID : 00 [SystemMemory] +[0C5h 0197 1] Bit Width : 00 +[0C6h 0198 1] Bit Offset : 00 +[0C7h 0199 1] Encoded Access Width : 00 [Undefined/Legacy] +[0C8h 0200 8] Address : 0000000000000000 + +[0D0h 0208 12] PM Timer Block : [Generic Address Structure] +[0D0h 0208 1] Space ID : 00 [SystemMemory] +[0D1h 0209 1] Bit Width : 00 +[0D2h 0210 1] Bit Offset : 00 +[0D3h 0211 1] Encoded Access Width : 00 [Undefined/Legacy] +[0D4h 0212 8] Address : 0000000000000000 + +[0DCh 0220 12] GPE0 Block : [Generic Address Structure] +[0DCh 0220 1] Space ID : 00 [SystemMemory] +[0DDh 0221 1] Bit Width : 00 +[0DEh 0222 1] Bit Offset : 00 +[0DFh 0223 1] Encoded Access Width : 00 [Undefined/Legacy] +[0E0h 0224 8] Address : 0000000000000000 + +[0E8h 0232 12] GPE1 Block : [Generic Address Structure] +[0E8h 0232 1] Space ID : 00 [SystemMemory] +[0E9h 0233 1] Bit Width : 00 +[0EAh 0234 1] Bit Offset : 00 +[0EBh 0235 1] Encoded Access Width : 00 [Undefined/Legacy] +[0ECh 0236 8] Address : 0000000000000000 + + +[0F4h 0244 12] Sleep Control Register : [Generic Address Structure] +[0F4h 0244 1] Space ID : 00 [SystemMemory] +[0F5h 0245 1] Bit Width : 08 +[0F6h 0246 1] Bit Offset : 00 +[0F7h 0247 1] Encoded Access Width : 00 [Undefined/Legacy] +[0F8h 0248 8] Address : 00000000FEA00200 + +[100h 0256 12] Sleep Status Register : [Generic Address Structure] +[100h 0256 1] Space ID : 00 [SystemMemory] +[101h 0257 1] Bit Width : 08 +[102h 0258 1] Bit Offset : 00 +[103h 0259 1] Encoded Access Width : 00 [Undefined/Legacy] +[104h 0260 8] Address : 00000000FEA00201 + +/**** ACPI table terminates in the middle of a data structure! (dump table) */ + +Raw Table Data: Length 268 (0x10C) + + 0000: 46 41 43 50 0C 01 00 00 05 7E 42 4F 43 48 53 20 // FACP.....~BOCHS + 0010: 42 58 50 43 46 41 43 50 01 00 00 00 42 58 50 43 // BXPCFACP....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0070: 00 04 10 00 00 08 00 00 02 02 A0 FE 00 00 00 00 // ................ + 0080: 42 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // B............... + 0090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00F0: 00 00 00 00 00 08 00 00 00 02 A0 FE 00 00 00 00 // ................ + 0100: 00 08 00 00 01 02 A0 FE 00 00 00 00 // ............ diff --git a/tests/data/acpi/pc/APIC.acpihmat.dsl b/tests/data/acpi/pc/APIC.acpihmat.dsl new file mode 100644 index 0000000000..15155cac55 --- /dev/null +++ b/tests/data/acpi/pc/APIC.acpihmat.dsl @@ -0,0 +1,112 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/APIC.acpihmat, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [APIC] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "APIC" [Multiple APIC Description Table (MADT)] +[004h 0004 4] Table Length : 00000080 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : DA +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCAPIC" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Local Apic Address : FEE00000 +[028h 0040 4] Flags (decoded below) : 00000001 + PC-AT Compatibility : 1 + +[02Ch 0044 1] Subtable Type : 00 [Processor Local APIC] +[02Dh 0045 1] Length : 08 +[02Eh 0046 1] Processor ID : 00 +[02Fh 0047 1] Local Apic ID : 00 +[030h 0048 4] Flags (decoded below) : 00000001 + Processor Enabled : 1 + Runtime Online Capable : 0 + +[034h 0052 1] Subtable Type : 00 [Processor Local APIC] +[035h 0053 1] Length : 08 +[036h 0054 1] Processor ID : 01 +[037h 0055 1] Local Apic ID : 01 +[038h 0056 4] Flags (decoded below) : 00000001 + Processor Enabled : 1 + Runtime Online Capable : 0 + +[03Ch 0060 1] Subtable Type : 01 [I/O APIC] +[03Dh 0061 1] Length : 0C +[03Eh 0062 1] I/O Apic ID : 00 +[03Fh 0063 1] Reserved : 00 +[040h 0064 4] Address : FEC00000 +[044h 0068 4] Interrupt : 00000000 + +[048h 0072 1] Subtable Type : 02 [Interrupt Source Override] +[049h 0073 1] Length : 0A +[04Ah 0074 1] Bus : 00 +[04Bh 0075 1] Source : 00 +[04Ch 0076 4] Interrupt : 00000002 +[050h 0080 2] Flags (decoded below) : 0000 + Polarity : 0 + Trigger Mode : 0 + +[052h 0082 1] Subtable Type : 02 [Interrupt Source Override] +[053h 0083 1] Length : 0A +[054h 0084 1] Bus : 00 +[055h 0085 1] Source : 05 +[056h 0086 4] Interrupt : 00000005 +[05Ah 0090 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[05Ch 0092 1] Subtable Type : 02 [Interrupt Source Override] +[05Dh 0093 1] Length : 0A +[05Eh 0094 1] Bus : 00 +[05Fh 0095 1] Source : 09 +[060h 0096 4] Interrupt : 00000009 +[064h 0100 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[066h 0102 1] Subtable Type : 02 [Interrupt Source Override] +[067h 0103 1] Length : 0A +[068h 0104 1] Bus : 00 +[069h 0105 1] Source : 0A +[06Ah 0106 4] Interrupt : 0000000A +[06Eh 0110 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[070h 0112 1] Subtable Type : 02 [Interrupt Source Override] +[071h 0113 1] Length : 0A +[072h 0114 1] Bus : 00 +[073h 0115 1] Source : 0B +[074h 0116 4] Interrupt : 0000000B +[078h 0120 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[07Ah 0122 1] Subtable Type : 04 [Local APIC NMI] +[07Bh 0123 1] Length : 06 +[07Ch 0124 1] Processor ID : FF +[07Dh 0125 2] Flags (decoded below) : 0000 + Polarity : 0 + Trigger Mode : 0 +[07Fh 0127 1] Interrupt Input LINT : 01 + +Raw Table Data: Length 128 (0x80) + + 0000: 41 50 49 43 80 00 00 00 01 DA 42 4F 43 48 53 20 // APIC......BOCHS + 0010: 42 58 50 43 41 50 49 43 01 00 00 00 42 58 50 43 // BXPCAPIC....BXPC + 0020: 01 00 00 00 00 00 E0 FE 01 00 00 00 00 08 00 00 // ................ + 0030: 01 00 00 00 00 08 01 01 01 00 00 00 01 0C 00 00 // ................ + 0040: 00 00 C0 FE 00 00 00 00 02 0A 00 00 02 00 00 00 // ................ + 0050: 00 00 02 0A 00 05 05 00 00 00 0D 00 02 0A 00 09 // ................ + 0060: 09 00 00 00 0D 00 02 0A 00 0A 0A 00 00 00 0D 00 // ................ + 0070: 02 0A 00 0B 0B 00 00 00 0D 00 04 06 FF 00 00 01 // ................ diff --git a/tests/data/acpi/pc/APIC.bridge b/tests/data/acpi/pc/APIC.bridge new file mode 100644 index 0000000000000000000000000000000000000000..84509e0ae4cabeb5ead3e42a4edfa50abddbc17d GIT binary patch literal 120 zcmXxa!3}^Q5CzeJh!M~pYz4T;NfIxXVtJNg1Ga!>Nx1C1{A?&WU4VMyp0;C+XGx*t lqyVuLp4vKrRL!#8RjziR+mCh_11utIyPWItzG)agP(M8=4FLcE literal 0 HcmV?d00001 diff --git a/tests/data/acpi/pc/APIC.bridge.dsl b/tests/data/acpi/pc/APIC.bridge.dsl new file mode 100644 index 0000000000..2828370063 --- /dev/null +++ b/tests/data/acpi/pc/APIC.bridge.dsl @@ -0,0 +1,104 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/APIC.bridge, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [APIC] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "APIC" [Multiple APIC Description Table (MADT)] +[004h 0004 4] Table Length : 00000078 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : ED +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCAPIC" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Local Apic Address : FEE00000 +[028h 0040 4] Flags (decoded below) : 00000001 + PC-AT Compatibility : 1 + +[02Ch 0044 1] Subtable Type : 00 [Processor Local APIC] +[02Dh 0045 1] Length : 08 +[02Eh 0046 1] Processor ID : 00 +[02Fh 0047 1] Local Apic ID : 00 +[030h 0048 4] Flags (decoded below) : 00000001 + Processor Enabled : 1 + Runtime Online Capable : 0 + +[034h 0052 1] Subtable Type : 01 [I/O APIC] +[035h 0053 1] Length : 0C +[036h 0054 1] I/O Apic ID : 00 +[037h 0055 1] Reserved : 00 +[038h 0056 4] Address : FEC00000 +[03Ch 0060 4] Interrupt : 00000000 + +[040h 0064 1] Subtable Type : 02 [Interrupt Source Override] +[041h 0065 1] Length : 0A +[042h 0066 1] Bus : 00 +[043h 0067 1] Source : 00 +[044h 0068 4] Interrupt : 00000002 +[048h 0072 2] Flags (decoded below) : 0000 + Polarity : 0 + Trigger Mode : 0 + +[04Ah 0074 1] Subtable Type : 02 [Interrupt Source Override] +[04Bh 0075 1] Length : 0A +[04Ch 0076 1] Bus : 00 +[04Dh 0077 1] Source : 05 +[04Eh 0078 4] Interrupt : 00000005 +[052h 0082 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[054h 0084 1] Subtable Type : 02 [Interrupt Source Override] +[055h 0085 1] Length : 0A +[056h 0086 1] Bus : 00 +[057h 0087 1] Source : 09 +[058h 0088 4] Interrupt : 00000009 +[05Ch 0092 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[05Eh 0094 1] Subtable Type : 02 [Interrupt Source Override] +[05Fh 0095 1] Length : 0A +[060h 0096 1] Bus : 00 +[061h 0097 1] Source : 0A +[062h 0098 4] Interrupt : 0000000A +[066h 0102 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[068h 0104 1] Subtable Type : 02 [Interrupt Source Override] +[069h 0105 1] Length : 0A +[06Ah 0106 1] Bus : 00 +[06Bh 0107 1] Source : 0B +[06Ch 0108 4] Interrupt : 0000000B +[070h 0112 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[072h 0114 1] Subtable Type : 04 [Local APIC NMI] +[073h 0115 1] Length : 06 +[074h 0116 1] Processor ID : FF +[075h 0117 2] Flags (decoded below) : 0000 + Polarity : 0 + Trigger Mode : 0 +[077h 0119 1] Interrupt Input LINT : 01 + +Raw Table Data: Length 120 (0x78) + + 0000: 41 50 49 43 78 00 00 00 01 ED 42 4F 43 48 53 20 // APICx.....BOCHS + 0010: 42 58 50 43 41 50 49 43 01 00 00 00 42 58 50 43 // BXPCAPIC....BXPC + 0020: 01 00 00 00 00 00 E0 FE 01 00 00 00 00 08 00 00 // ................ + 0030: 01 00 00 00 01 0C 00 00 00 00 C0 FE 00 00 00 00 // ................ + 0040: 02 0A 00 00 02 00 00 00 00 00 02 0A 00 05 05 00 // ................ + 0050: 00 00 0D 00 02 0A 00 09 09 00 00 00 0D 00 02 0A // ................ + 0060: 00 0A 0A 00 00 00 0D 00 02 0A 00 0B 0B 00 00 00 // ................ + 0070: 0D 00 04 06 FF 00 00 01 // ........ diff --git a/tests/data/acpi/pc/APIC.cphp.dsl b/tests/data/acpi/pc/APIC.cphp.dsl new file mode 100644 index 0000000000..b4b043229a --- /dev/null +++ b/tests/data/acpi/pc/APIC.cphp.dsl @@ -0,0 +1,146 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/APIC.cphp, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [APIC] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "APIC" [Multiple APIC Description Table (MADT)] +[004h 0004 4] Table Length : 000000A0 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 7B +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCAPIC" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Local Apic Address : FEE00000 +[028h 0040 4] Flags (decoded below) : 00000001 + PC-AT Compatibility : 1 + +[02Ch 0044 1] Subtable Type : 00 [Processor Local APIC] +[02Dh 0045 1] Length : 08 +[02Eh 0046 1] Processor ID : 00 +[02Fh 0047 1] Local Apic ID : 00 +[030h 0048 4] Flags (decoded below) : 00000001 + Processor Enabled : 1 + Runtime Online Capable : 0 + +[034h 0052 1] Subtable Type : 00 [Processor Local APIC] +[035h 0053 1] Length : 08 +[036h 0054 1] Processor ID : 01 +[037h 0055 1] Local Apic ID : 01 +[038h 0056 4] Flags (decoded below) : 00000001 + Processor Enabled : 1 + Runtime Online Capable : 0 + +[03Ch 0060 1] Subtable Type : 00 [Processor Local APIC] +[03Dh 0061 1] Length : 08 +[03Eh 0062 1] Processor ID : 02 +[03Fh 0063 1] Local Apic ID : 02 +[040h 0064 4] Flags (decoded below) : 00000000 + Processor Enabled : 0 + Runtime Online Capable : 0 + +[044h 0068 1] Subtable Type : 00 [Processor Local APIC] +[045h 0069 1] Length : 08 +[046h 0070 1] Processor ID : 03 +[047h 0071 1] Local Apic ID : 04 +[048h 0072 4] Flags (decoded below) : 00000000 + Processor Enabled : 0 + Runtime Online Capable : 0 + +[04Ch 0076 1] Subtable Type : 00 [Processor Local APIC] +[04Dh 0077 1] Length : 08 +[04Eh 0078 1] Processor ID : 04 +[04Fh 0079 1] Local Apic ID : 05 +[050h 0080 4] Flags (decoded below) : 00000000 + Processor Enabled : 0 + Runtime Online Capable : 0 + +[054h 0084 1] Subtable Type : 00 [Processor Local APIC] +[055h 0085 1] Length : 08 +[056h 0086 1] Processor ID : 05 +[057h 0087 1] Local Apic ID : 06 +[058h 0088 4] Flags (decoded below) : 00000000 + Processor Enabled : 0 + Runtime Online Capable : 0 + +[05Ch 0092 1] Subtable Type : 01 [I/O APIC] +[05Dh 0093 1] Length : 0C +[05Eh 0094 1] I/O Apic ID : 00 +[05Fh 0095 1] Reserved : 00 +[060h 0096 4] Address : FEC00000 +[064h 0100 4] Interrupt : 00000000 + +[068h 0104 1] Subtable Type : 02 [Interrupt Source Override] +[069h 0105 1] Length : 0A +[06Ah 0106 1] Bus : 00 +[06Bh 0107 1] Source : 00 +[06Ch 0108 4] Interrupt : 00000002 +[070h 0112 2] Flags (decoded below) : 0000 + Polarity : 0 + Trigger Mode : 0 + +[072h 0114 1] Subtable Type : 02 [Interrupt Source Override] +[073h 0115 1] Length : 0A +[074h 0116 1] Bus : 00 +[075h 0117 1] Source : 05 +[076h 0118 4] Interrupt : 00000005 +[07Ah 0122 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[07Ch 0124 1] Subtable Type : 02 [Interrupt Source Override] +[07Dh 0125 1] Length : 0A +[07Eh 0126 1] Bus : 00 +[07Fh 0127 1] Source : 09 +[080h 0128 4] Interrupt : 00000009 +[084h 0132 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[086h 0134 1] Subtable Type : 02 [Interrupt Source Override] +[087h 0135 1] Length : 0A +[088h 0136 1] Bus : 00 +[089h 0137 1] Source : 0A +[08Ah 0138 4] Interrupt : 0000000A +[08Eh 0142 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[090h 0144 1] Subtable Type : 02 [Interrupt Source Override] +[091h 0145 1] Length : 0A +[092h 0146 1] Bus : 00 +[093h 0147 1] Source : 0B +[094h 0148 4] Interrupt : 0000000B +[098h 0152 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[09Ah 0154 1] Subtable Type : 04 [Local APIC NMI] +[09Bh 0155 1] Length : 06 +[09Ch 0156 1] Processor ID : FF +[09Dh 0157 2] Flags (decoded below) : 0000 + Polarity : 0 + Trigger Mode : 0 +[09Fh 0159 1] Interrupt Input LINT : 01 + +Raw Table Data: Length 160 (0xA0) + + 0000: 41 50 49 43 A0 00 00 00 01 7B 42 4F 43 48 53 20 // APIC.....{BOCHS + 0010: 42 58 50 43 41 50 49 43 01 00 00 00 42 58 50 43 // BXPCAPIC....BXPC + 0020: 01 00 00 00 00 00 E0 FE 01 00 00 00 00 08 00 00 // ................ + 0030: 01 00 00 00 00 08 01 01 01 00 00 00 00 08 02 02 // ................ + 0040: 00 00 00 00 00 08 03 04 00 00 00 00 00 08 04 05 // ................ + 0050: 00 00 00 00 00 08 05 06 00 00 00 00 01 0C 00 00 // ................ + 0060: 00 00 C0 FE 00 00 00 00 02 0A 00 00 02 00 00 00 // ................ + 0070: 00 00 02 0A 00 05 05 00 00 00 0D 00 02 0A 00 09 // ................ + 0080: 09 00 00 00 0D 00 02 0A 00 0A 0A 00 00 00 0D 00 // ................ + 0090: 02 0A 00 0B 0B 00 00 00 0D 00 04 06 FF 00 00 01 // ................ diff --git a/tests/data/acpi/pc/APIC.dimmpxm.dsl b/tests/data/acpi/pc/APIC.dimmpxm.dsl new file mode 100644 index 0000000000..adabdcc603 --- /dev/null +++ b/tests/data/acpi/pc/APIC.dimmpxm.dsl @@ -0,0 +1,129 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/APIC.dimmpxm, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [APIC] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "APIC" [Multiple APIC Description Table (MADT)] +[004h 0004 4] Table Length : 00000090 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : AE +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCAPIC" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Local Apic Address : FEE00000 +[028h 0040 4] Flags (decoded below) : 00000001 + PC-AT Compatibility : 1 + +[02Ch 0044 1] Subtable Type : 00 [Processor Local APIC] +[02Dh 0045 1] Length : 08 +[02Eh 0046 1] Processor ID : 00 +[02Fh 0047 1] Local Apic ID : 00 +[030h 0048 4] Flags (decoded below) : 00000001 + Processor Enabled : 1 + Runtime Online Capable : 0 + +[034h 0052 1] Subtable Type : 00 [Processor Local APIC] +[035h 0053 1] Length : 08 +[036h 0054 1] Processor ID : 01 +[037h 0055 1] Local Apic ID : 01 +[038h 0056 4] Flags (decoded below) : 00000001 + Processor Enabled : 1 + Runtime Online Capable : 0 + +[03Ch 0060 1] Subtable Type : 00 [Processor Local APIC] +[03Dh 0061 1] Length : 08 +[03Eh 0062 1] Processor ID : 02 +[03Fh 0063 1] Local Apic ID : 02 +[040h 0064 4] Flags (decoded below) : 00000001 + Processor Enabled : 1 + Runtime Online Capable : 0 + +[044h 0068 1] Subtable Type : 00 [Processor Local APIC] +[045h 0069 1] Length : 08 +[046h 0070 1] Processor ID : 03 +[047h 0071 1] Local Apic ID : 03 +[048h 0072 4] Flags (decoded below) : 00000001 + Processor Enabled : 1 + Runtime Online Capable : 0 + +[04Ch 0076 1] Subtable Type : 01 [I/O APIC] +[04Dh 0077 1] Length : 0C +[04Eh 0078 1] I/O Apic ID : 00 +[04Fh 0079 1] Reserved : 00 +[050h 0080 4] Address : FEC00000 +[054h 0084 4] Interrupt : 00000000 + +[058h 0088 1] Subtable Type : 02 [Interrupt Source Override] +[059h 0089 1] Length : 0A +[05Ah 0090 1] Bus : 00 +[05Bh 0091 1] Source : 00 +[05Ch 0092 4] Interrupt : 00000002 +[060h 0096 2] Flags (decoded below) : 0000 + Polarity : 0 + Trigger Mode : 0 + +[062h 0098 1] Subtable Type : 02 [Interrupt Source Override] +[063h 0099 1] Length : 0A +[064h 0100 1] Bus : 00 +[065h 0101 1] Source : 05 +[066h 0102 4] Interrupt : 00000005 +[06Ah 0106 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[06Ch 0108 1] Subtable Type : 02 [Interrupt Source Override] +[06Dh 0109 1] Length : 0A +[06Eh 0110 1] Bus : 00 +[06Fh 0111 1] Source : 09 +[070h 0112 4] Interrupt : 00000009 +[074h 0116 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[076h 0118 1] Subtable Type : 02 [Interrupt Source Override] +[077h 0119 1] Length : 0A +[078h 0120 1] Bus : 00 +[079h 0121 1] Source : 0A +[07Ah 0122 4] Interrupt : 0000000A +[07Eh 0126 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[080h 0128 1] Subtable Type : 02 [Interrupt Source Override] +[081h 0129 1] Length : 0A +[082h 0130 1] Bus : 00 +[083h 0131 1] Source : 0B +[084h 0132 4] Interrupt : 0000000B +[088h 0136 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[08Ah 0138 1] Subtable Type : 04 [Local APIC NMI] +[08Bh 0139 1] Length : 06 +[08Ch 0140 1] Processor ID : FF +[08Dh 0141 2] Flags (decoded below) : 0000 + Polarity : 0 + Trigger Mode : 0 +[08Fh 0143 1] Interrupt Input LINT : 01 + +Raw Table Data: Length 144 (0x90) + + 0000: 41 50 49 43 90 00 00 00 01 AE 42 4F 43 48 53 20 // APIC......BOCHS + 0010: 42 58 50 43 41 50 49 43 01 00 00 00 42 58 50 43 // BXPCAPIC....BXPC + 0020: 01 00 00 00 00 00 E0 FE 01 00 00 00 00 08 00 00 // ................ + 0030: 01 00 00 00 00 08 01 01 01 00 00 00 00 08 02 02 // ................ + 0040: 01 00 00 00 00 08 03 03 01 00 00 00 01 0C 00 00 // ................ + 0050: 00 00 C0 FE 00 00 00 00 02 0A 00 00 02 00 00 00 // ................ + 0060: 00 00 02 0A 00 05 05 00 00 00 0D 00 02 0A 00 09 // ................ + 0070: 09 00 00 00 0D 00 02 0A 00 0A 0A 00 00 00 0D 00 // ................ + 0080: 02 0A 00 0B 0B 00 00 00 0D 00 04 06 FF 00 00 01 // ................ diff --git a/tests/data/acpi/pc/APIC.dsl b/tests/data/acpi/pc/APIC.dsl new file mode 100644 index 0000000000..d9516fc1f2 --- /dev/null +++ b/tests/data/acpi/pc/APIC.dsl @@ -0,0 +1,104 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/APIC.roothp, Mon Sep 28 17:24:38 2020 + * + * ACPI Data Table [APIC] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "APIC" [Multiple APIC Description Table (MADT)] +[004h 0004 4] Table Length : 00000078 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : ED +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCAPIC" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Local Apic Address : FEE00000 +[028h 0040 4] Flags (decoded below) : 00000001 + PC-AT Compatibility : 1 + +[02Ch 0044 1] Subtable Type : 00 [Processor Local APIC] +[02Dh 0045 1] Length : 08 +[02Eh 0046 1] Processor ID : 00 +[02Fh 0047 1] Local Apic ID : 00 +[030h 0048 4] Flags (decoded below) : 00000001 + Processor Enabled : 1 + Runtime Online Capable : 0 + +[034h 0052 1] Subtable Type : 01 [I/O APIC] +[035h 0053 1] Length : 0C +[036h 0054 1] I/O Apic ID : 00 +[037h 0055 1] Reserved : 00 +[038h 0056 4] Address : FEC00000 +[03Ch 0060 4] Interrupt : 00000000 + +[040h 0064 1] Subtable Type : 02 [Interrupt Source Override] +[041h 0065 1] Length : 0A +[042h 0066 1] Bus : 00 +[043h 0067 1] Source : 00 +[044h 0068 4] Interrupt : 00000002 +[048h 0072 2] Flags (decoded below) : 0000 + Polarity : 0 + Trigger Mode : 0 + +[04Ah 0074 1] Subtable Type : 02 [Interrupt Source Override] +[04Bh 0075 1] Length : 0A +[04Ch 0076 1] Bus : 00 +[04Dh 0077 1] Source : 05 +[04Eh 0078 4] Interrupt : 00000005 +[052h 0082 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[054h 0084 1] Subtable Type : 02 [Interrupt Source Override] +[055h 0085 1] Length : 0A +[056h 0086 1] Bus : 00 +[057h 0087 1] Source : 09 +[058h 0088 4] Interrupt : 00000009 +[05Ch 0092 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[05Eh 0094 1] Subtable Type : 02 [Interrupt Source Override] +[05Fh 0095 1] Length : 0A +[060h 0096 1] Bus : 00 +[061h 0097 1] Source : 0A +[062h 0098 4] Interrupt : 0000000A +[066h 0102 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[068h 0104 1] Subtable Type : 02 [Interrupt Source Override] +[069h 0105 1] Length : 0A +[06Ah 0106 1] Bus : 00 +[06Bh 0107 1] Source : 0B +[06Ch 0108 4] Interrupt : 0000000B +[070h 0112 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[072h 0114 1] Subtable Type : 04 [Local APIC NMI] +[073h 0115 1] Length : 06 +[074h 0116 1] Processor ID : FF +[075h 0117 2] Flags (decoded below) : 0000 + Polarity : 0 + Trigger Mode : 0 +[077h 0119 1] Interrupt Input LINT : 01 + +Raw Table Data: Length 120 (0x78) + + 0000: 41 50 49 43 78 00 00 00 01 ED 42 4F 43 48 53 20 // APICx.....BOCHS + 0010: 42 58 50 43 41 50 49 43 01 00 00 00 42 58 50 43 // BXPCAPIC....BXPC + 0020: 01 00 00 00 00 00 E0 FE 01 00 00 00 00 08 00 00 // ................ + 0030: 01 00 00 00 01 0C 00 00 00 00 C0 FE 00 00 00 00 // ................ + 0040: 02 0A 00 00 02 00 00 00 00 00 02 0A 00 05 05 00 // ................ + 0050: 00 00 0D 00 02 0A 00 09 09 00 00 00 0D 00 02 0A // ................ + 0060: 00 0A 0A 00 00 00 0D 00 02 0A 00 0B 0B 00 00 00 // ................ + 0070: 0D 00 04 06 FF 00 00 01 // ........ diff --git a/tests/data/acpi/pc/APIC.hpbridge b/tests/data/acpi/pc/APIC.hpbridge new file mode 100644 index 0000000000000000000000000000000000000000..84509e0ae4cabeb5ead3e42a4edfa50abddbc17d GIT binary patch literal 120 zcmXxa!3}^Q5CzeJh!M~pYz4T;NfIxXVtJNg1Ga!>Nx1C1{A?&WU4VMyp0;C+XGx*t lqyVuLp4vKrRL!#8RjziR+mCh_11utIyPWItzG)agP(M8=4FLcE literal 0 HcmV?d00001 diff --git a/tests/data/acpi/pc/APIC.ipmikcs b/tests/data/acpi/pc/APIC.ipmikcs new file mode 100644 index 0000000000000000000000000000000000000000..84509e0ae4cabeb5ead3e42a4edfa50abddbc17d GIT binary patch literal 120 zcmXxa!3}^Q5CzeJh!M~pYz4T;NfIxXVtJNg1Ga!>Nx1C1{A?&WU4VMyp0;C+XGx*t lqyVuLp4vKrRL!#8RjziR+mCh_11utIyPWItzG)agP(M8=4FLcE literal 0 HcmV?d00001 diff --git a/tests/data/acpi/pc/APIC.ipmikcs.dsl b/tests/data/acpi/pc/APIC.ipmikcs.dsl new file mode 100644 index 0000000000..28198bed68 --- /dev/null +++ b/tests/data/acpi/pc/APIC.ipmikcs.dsl @@ -0,0 +1,104 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/APIC.ipmikcs, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [APIC] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "APIC" [Multiple APIC Description Table (MADT)] +[004h 0004 4] Table Length : 00000078 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : ED +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCAPIC" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Local Apic Address : FEE00000 +[028h 0040 4] Flags (decoded below) : 00000001 + PC-AT Compatibility : 1 + +[02Ch 0044 1] Subtable Type : 00 [Processor Local APIC] +[02Dh 0045 1] Length : 08 +[02Eh 0046 1] Processor ID : 00 +[02Fh 0047 1] Local Apic ID : 00 +[030h 0048 4] Flags (decoded below) : 00000001 + Processor Enabled : 1 + Runtime Online Capable : 0 + +[034h 0052 1] Subtable Type : 01 [I/O APIC] +[035h 0053 1] Length : 0C +[036h 0054 1] I/O Apic ID : 00 +[037h 0055 1] Reserved : 00 +[038h 0056 4] Address : FEC00000 +[03Ch 0060 4] Interrupt : 00000000 + +[040h 0064 1] Subtable Type : 02 [Interrupt Source Override] +[041h 0065 1] Length : 0A +[042h 0066 1] Bus : 00 +[043h 0067 1] Source : 00 +[044h 0068 4] Interrupt : 00000002 +[048h 0072 2] Flags (decoded below) : 0000 + Polarity : 0 + Trigger Mode : 0 + +[04Ah 0074 1] Subtable Type : 02 [Interrupt Source Override] +[04Bh 0075 1] Length : 0A +[04Ch 0076 1] Bus : 00 +[04Dh 0077 1] Source : 05 +[04Eh 0078 4] Interrupt : 00000005 +[052h 0082 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[054h 0084 1] Subtable Type : 02 [Interrupt Source Override] +[055h 0085 1] Length : 0A +[056h 0086 1] Bus : 00 +[057h 0087 1] Source : 09 +[058h 0088 4] Interrupt : 00000009 +[05Ch 0092 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[05Eh 0094 1] Subtable Type : 02 [Interrupt Source Override] +[05Fh 0095 1] Length : 0A +[060h 0096 1] Bus : 00 +[061h 0097 1] Source : 0A +[062h 0098 4] Interrupt : 0000000A +[066h 0102 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[068h 0104 1] Subtable Type : 02 [Interrupt Source Override] +[069h 0105 1] Length : 0A +[06Ah 0106 1] Bus : 00 +[06Bh 0107 1] Source : 0B +[06Ch 0108 4] Interrupt : 0000000B +[070h 0112 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[072h 0114 1] Subtable Type : 04 [Local APIC NMI] +[073h 0115 1] Length : 06 +[074h 0116 1] Processor ID : FF +[075h 0117 2] Flags (decoded below) : 0000 + Polarity : 0 + Trigger Mode : 0 +[077h 0119 1] Interrupt Input LINT : 01 + +Raw Table Data: Length 120 (0x78) + + 0000: 41 50 49 43 78 00 00 00 01 ED 42 4F 43 48 53 20 // APICx.....BOCHS + 0010: 42 58 50 43 41 50 49 43 01 00 00 00 42 58 50 43 // BXPCAPIC....BXPC + 0020: 01 00 00 00 00 00 E0 FE 01 00 00 00 00 08 00 00 // ................ + 0030: 01 00 00 00 01 0C 00 00 00 00 C0 FE 00 00 00 00 // ................ + 0040: 02 0A 00 00 02 00 00 00 00 00 02 0A 00 05 05 00 // ................ + 0050: 00 00 0D 00 02 0A 00 09 09 00 00 00 0D 00 02 0A // ................ + 0060: 00 0A 0A 00 00 00 0D 00 02 0A 00 0B 0B 00 00 00 // ................ + 0070: 0D 00 04 06 FF 00 00 01 // ........ diff --git a/tests/data/acpi/pc/APIC.memhp b/tests/data/acpi/pc/APIC.memhp new file mode 100644 index 0000000000000000000000000000000000000000..84509e0ae4cabeb5ead3e42a4edfa50abddbc17d GIT binary patch literal 120 zcmXxa!3}^Q5CzeJh!M~pYz4T;NfIxXVtJNg1Ga!>Nx1C1{A?&WU4VMyp0;C+XGx*t lqyVuLp4vKrRL!#8RjziR+mCh_11utIyPWItzG)agP(M8=4FLcE literal 0 HcmV?d00001 diff --git a/tests/data/acpi/pc/APIC.memhp.dsl b/tests/data/acpi/pc/APIC.memhp.dsl new file mode 100644 index 0000000000..b8449c0bde --- /dev/null +++ b/tests/data/acpi/pc/APIC.memhp.dsl @@ -0,0 +1,104 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/APIC.memhp, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [APIC] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "APIC" [Multiple APIC Description Table (MADT)] +[004h 0004 4] Table Length : 00000078 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : ED +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCAPIC" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Local Apic Address : FEE00000 +[028h 0040 4] Flags (decoded below) : 00000001 + PC-AT Compatibility : 1 + +[02Ch 0044 1] Subtable Type : 00 [Processor Local APIC] +[02Dh 0045 1] Length : 08 +[02Eh 0046 1] Processor ID : 00 +[02Fh 0047 1] Local Apic ID : 00 +[030h 0048 4] Flags (decoded below) : 00000001 + Processor Enabled : 1 + Runtime Online Capable : 0 + +[034h 0052 1] Subtable Type : 01 [I/O APIC] +[035h 0053 1] Length : 0C +[036h 0054 1] I/O Apic ID : 00 +[037h 0055 1] Reserved : 00 +[038h 0056 4] Address : FEC00000 +[03Ch 0060 4] Interrupt : 00000000 + +[040h 0064 1] Subtable Type : 02 [Interrupt Source Override] +[041h 0065 1] Length : 0A +[042h 0066 1] Bus : 00 +[043h 0067 1] Source : 00 +[044h 0068 4] Interrupt : 00000002 +[048h 0072 2] Flags (decoded below) : 0000 + Polarity : 0 + Trigger Mode : 0 + +[04Ah 0074 1] Subtable Type : 02 [Interrupt Source Override] +[04Bh 0075 1] Length : 0A +[04Ch 0076 1] Bus : 00 +[04Dh 0077 1] Source : 05 +[04Eh 0078 4] Interrupt : 00000005 +[052h 0082 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[054h 0084 1] Subtable Type : 02 [Interrupt Source Override] +[055h 0085 1] Length : 0A +[056h 0086 1] Bus : 00 +[057h 0087 1] Source : 09 +[058h 0088 4] Interrupt : 00000009 +[05Ch 0092 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[05Eh 0094 1] Subtable Type : 02 [Interrupt Source Override] +[05Fh 0095 1] Length : 0A +[060h 0096 1] Bus : 00 +[061h 0097 1] Source : 0A +[062h 0098 4] Interrupt : 0000000A +[066h 0102 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[068h 0104 1] Subtable Type : 02 [Interrupt Source Override] +[069h 0105 1] Length : 0A +[06Ah 0106 1] Bus : 00 +[06Bh 0107 1] Source : 0B +[06Ch 0108 4] Interrupt : 0000000B +[070h 0112 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[072h 0114 1] Subtable Type : 04 [Local APIC NMI] +[073h 0115 1] Length : 06 +[074h 0116 1] Processor ID : FF +[075h 0117 2] Flags (decoded below) : 0000 + Polarity : 0 + Trigger Mode : 0 +[077h 0119 1] Interrupt Input LINT : 01 + +Raw Table Data: Length 120 (0x78) + + 0000: 41 50 49 43 78 00 00 00 01 ED 42 4F 43 48 53 20 // APICx.....BOCHS + 0010: 42 58 50 43 41 50 49 43 01 00 00 00 42 58 50 43 // BXPCAPIC....BXPC + 0020: 01 00 00 00 00 00 E0 FE 01 00 00 00 00 08 00 00 // ................ + 0030: 01 00 00 00 01 0C 00 00 00 00 C0 FE 00 00 00 00 // ................ + 0040: 02 0A 00 00 02 00 00 00 00 00 02 0A 00 05 05 00 // ................ + 0050: 00 00 0D 00 02 0A 00 09 09 00 00 00 0D 00 02 0A // ................ + 0060: 00 0A 0A 00 00 00 0D 00 02 0A 00 0B 0B 00 00 00 // ................ + 0070: 0D 00 04 06 FF 00 00 01 // ........ diff --git a/tests/data/acpi/pc/APIC.numamem b/tests/data/acpi/pc/APIC.numamem new file mode 100644 index 0000000000000000000000000000000000000000..84509e0ae4cabeb5ead3e42a4edfa50abddbc17d GIT binary patch literal 120 zcmXxa!3}^Q5CzeJh!M~pYz4T;NfIxXVtJNg1Ga!>Nx1C1{A?&WU4VMyp0;C+XGx*t lqyVuLp4vKrRL!#8RjziR+mCh_11utIyPWItzG)agP(M8=4FLcE literal 0 HcmV?d00001 diff --git a/tests/data/acpi/pc/APIC.numamem.dsl b/tests/data/acpi/pc/APIC.numamem.dsl new file mode 100644 index 0000000000..d75e4283d1 --- /dev/null +++ b/tests/data/acpi/pc/APIC.numamem.dsl @@ -0,0 +1,104 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/APIC.numamem, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [APIC] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "APIC" [Multiple APIC Description Table (MADT)] +[004h 0004 4] Table Length : 00000078 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : ED +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCAPIC" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Local Apic Address : FEE00000 +[028h 0040 4] Flags (decoded below) : 00000001 + PC-AT Compatibility : 1 + +[02Ch 0044 1] Subtable Type : 00 [Processor Local APIC] +[02Dh 0045 1] Length : 08 +[02Eh 0046 1] Processor ID : 00 +[02Fh 0047 1] Local Apic ID : 00 +[030h 0048 4] Flags (decoded below) : 00000001 + Processor Enabled : 1 + Runtime Online Capable : 0 + +[034h 0052 1] Subtable Type : 01 [I/O APIC] +[035h 0053 1] Length : 0C +[036h 0054 1] I/O Apic ID : 00 +[037h 0055 1] Reserved : 00 +[038h 0056 4] Address : FEC00000 +[03Ch 0060 4] Interrupt : 00000000 + +[040h 0064 1] Subtable Type : 02 [Interrupt Source Override] +[041h 0065 1] Length : 0A +[042h 0066 1] Bus : 00 +[043h 0067 1] Source : 00 +[044h 0068 4] Interrupt : 00000002 +[048h 0072 2] Flags (decoded below) : 0000 + Polarity : 0 + Trigger Mode : 0 + +[04Ah 0074 1] Subtable Type : 02 [Interrupt Source Override] +[04Bh 0075 1] Length : 0A +[04Ch 0076 1] Bus : 00 +[04Dh 0077 1] Source : 05 +[04Eh 0078 4] Interrupt : 00000005 +[052h 0082 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[054h 0084 1] Subtable Type : 02 [Interrupt Source Override] +[055h 0085 1] Length : 0A +[056h 0086 1] Bus : 00 +[057h 0087 1] Source : 09 +[058h 0088 4] Interrupt : 00000009 +[05Ch 0092 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[05Eh 0094 1] Subtable Type : 02 [Interrupt Source Override] +[05Fh 0095 1] Length : 0A +[060h 0096 1] Bus : 00 +[061h 0097 1] Source : 0A +[062h 0098 4] Interrupt : 0000000A +[066h 0102 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[068h 0104 1] Subtable Type : 02 [Interrupt Source Override] +[069h 0105 1] Length : 0A +[06Ah 0106 1] Bus : 00 +[06Bh 0107 1] Source : 0B +[06Ch 0108 4] Interrupt : 0000000B +[070h 0112 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[072h 0114 1] Subtable Type : 04 [Local APIC NMI] +[073h 0115 1] Length : 06 +[074h 0116 1] Processor ID : FF +[075h 0117 2] Flags (decoded below) : 0000 + Polarity : 0 + Trigger Mode : 0 +[077h 0119 1] Interrupt Input LINT : 01 + +Raw Table Data: Length 120 (0x78) + + 0000: 41 50 49 43 78 00 00 00 01 ED 42 4F 43 48 53 20 // APICx.....BOCHS + 0010: 42 58 50 43 41 50 49 43 01 00 00 00 42 58 50 43 // BXPCAPIC....BXPC + 0020: 01 00 00 00 00 00 E0 FE 01 00 00 00 00 08 00 00 // ................ + 0030: 01 00 00 00 01 0C 00 00 00 00 C0 FE 00 00 00 00 // ................ + 0040: 02 0A 00 00 02 00 00 00 00 00 02 0A 00 05 05 00 // ................ + 0050: 00 00 0D 00 02 0A 00 09 09 00 00 00 0D 00 02 0A // ................ + 0060: 00 0A 0A 00 00 00 0D 00 02 0A 00 0B 0B 00 00 00 // ................ + 0070: 0D 00 04 06 FF 00 00 01 // ........ diff --git a/tests/data/acpi/pc/APIC.roothp b/tests/data/acpi/pc/APIC.roothp new file mode 100644 index 0000000000000000000000000000000000000000..84509e0ae4cabeb5ead3e42a4edfa50abddbc17d GIT binary patch literal 120 zcmXxa!3}^Q5CzeJh!M~pYz4T;NfIxXVtJNg1Ga!>Nx1C1{A?&WU4VMyp0;C+XGx*t lqyVuLp4vKrRL!#8RjziR+mCh_11utIyPWItzG)agP(M8=4FLcE literal 0 HcmV?d00001 diff --git a/tests/data/acpi/pc/DSDT.acpihmat.dsl b/tests/data/acpi/pc/DSDT.acpihmat.dsl new file mode 100644 index 0000000000..b2a4b1bd7f --- /dev/null +++ b/tests/data/acpi/pc/DSDT.acpihmat.dsl @@ -0,0 +1,1619 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembling to symbolic ASL+ operators + * + * Disassembly of tests/data/acpi/pc/DSDT.acpihmat, Tue Aug 4 11:14:15 2020 + * + * Original Table Header: + * Signature "DSDT" + * Length 0x00001872 (6258) + * Revision 0x01 **** 32-bit table (V1), no 64-bit math support + * Checksum 0x8E + * OEM ID "BOCHS " + * OEM Table ID "BXPCDSDT" + * OEM Revision 0x00000001 (1) + * Compiler ID "BXPC" + * Compiler Version 0x00000001 (1) + */ +DefinitionBlock ("", "DSDT", 1, "BOCHS ", "BXPCDSDT", 0x00000001) +{ + Scope (\) + { + OperationRegion (DBG, SystemIO, 0x0402, One) + Field (DBG, ByteAcc, NoLock, Preserve) + { + DBGB, 8 + } + + Method (DBUG, 1, NotSerialized) + { + ToHexString (Arg0, Local0) + ToBuffer (Local0, Local0) + Local1 = (SizeOf (Local0) - One) + Local2 = Zero + While ((Local2 < Local1)) + { + DBGB = DerefOf (Local0 [Local2]) + Local2++ + } + + DBGB = 0x0A + } + } + + Scope (_SB) + { + Device (PCI0) + { + Name (_HID, EisaId ("PNP0A03") /* PCI Bus */) // _HID: Hardware ID + Name (_ADR, Zero) // _ADR: Address + Name (_UID, Zero) // _UID: Unique ID + } + } + + Scope (_SB) + { + Device (HPET) + { + Name (_HID, EisaId ("PNP0103") /* HPET System Timer */) // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + OperationRegion (HPTM, SystemMemory, 0xFED00000, 0x0400) + Field (HPTM, DWordAcc, Lock, Preserve) + { + VEND, 32, + PRD, 32 + } + + Method (_STA, 0, NotSerialized) // _STA: Status + { + Local0 = VEND /* \_SB_.HPET.VEND */ + Local1 = PRD /* \_SB_.HPET.PRD_ */ + Local0 >>= 0x10 + If (((Local0 == Zero) || (Local0 == 0xFFFF))) + { + Return (Zero) + } + + If (((Local1 == Zero) || (Local1 > 0x05F5E100))) + { + Return (Zero) + } + + Return (0x0F) + } + + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadOnly, + 0xFED00000, // Address Base + 0x00000400, // Address Length + ) + }) + } + } + + Scope (_SB.PCI0) + { + Device (ISA) + { + Name (_ADR, 0x00010000) // _ADR: Address + OperationRegion (P40C, PCI_Config, 0x60, 0x04) + } + } + + Scope (_SB.PCI0.ISA) + { + Device (KBD) + { + Name (_HID, EisaId ("PNP0303") /* IBM Enhanced Keyboard (101/102-key, PS/2 Mouse) */) // _HID: Hardware ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0060, // Range Minimum + 0x0060, // Range Maximum + 0x01, // Alignment + 0x01, // Length + ) + IO (Decode16, + 0x0064, // Range Minimum + 0x0064, // Range Maximum + 0x01, // Alignment + 0x01, // Length + ) + IRQNoFlags () + {1} + }) + } + + Device (MOU) + { + Name (_HID, EisaId ("PNP0F13") /* PS/2 Mouse */) // _HID: Hardware ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IRQNoFlags () + {12} + }) + } + + Device (FDC0) + { + Name (_HID, EisaId ("PNP0700")) // _HID: Hardware ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x03F2, // Range Minimum + 0x03F2, // Range Maximum + 0x00, // Alignment + 0x04, // Length + ) + IO (Decode16, + 0x03F7, // Range Minimum + 0x03F7, // Range Maximum + 0x00, // Alignment + 0x01, // Length + ) + IRQNoFlags () + {6} + DMA (Compatibility, NotBusMaster, Transfer8, ) + {2} + }) + Device (FLPA) + { + Name (_ADR, Zero) // _ADR: Address + Name (_FDI, Package (0x10) // _FDI: Floppy Drive Information + { + Zero, + 0x05, + 0x4F, + 0x30, + One, + 0xAF, + 0x02, + 0x25, + 0x02, + 0x12, + 0x1B, + 0xFF, + 0x6C, + 0xF6, + 0x0F, + 0x08 + }) + } + + Name (_FDE, Buffer (0x14) // _FDE: Floppy Disk Enumerate + { + /* 0000 */ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........ + /* 0008 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........ + /* 0010 */ 0x02, 0x00, 0x00, 0x00 // .... + }) + } + + Device (LPT1) + { + Name (_HID, EisaId ("PNP0400") /* Standard LPT Parallel Port */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0378, // Range Minimum + 0x0378, // Range Maximum + 0x08, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {7} + }) + } + + Device (COM1) + { + Name (_HID, EisaId ("PNP0501") /* 16550A-compatible COM Serial Port */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x03F8, // Range Minimum + 0x03F8, // Range Maximum + 0x00, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {4} + }) + } + + Device (RTC) + { + Name (_HID, EisaId ("PNP0B00") /* AT Real-Time Clock */) // _HID: Hardware ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0070, // Range Minimum + 0x0070, // Range Maximum + 0x01, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {8} + }) + } + } + + Scope (_SB.PCI0) + { + OperationRegion (PCST, SystemIO, 0xAE00, 0x08) + Field (PCST, DWordAcc, NoLock, WriteAsZeros) + { + PCIU, 32, + PCID, 32 + } + + OperationRegion (SEJ, SystemIO, 0xAE08, 0x04) + Field (SEJ, DWordAcc, NoLock, WriteAsZeros) + { + B0EJ, 32 + } + + OperationRegion (BNMR, SystemIO, 0xAE10, 0x04) + Field (BNMR, DWordAcc, NoLock, WriteAsZeros) + { + BNUM, 32 + } + + Mutex (BLCK, 0x00) + Method (PCEJ, 2, NotSerialized) + { + Acquire (BLCK, 0xFFFF) + BNUM = Arg0 + B0EJ = (One << Arg1) + Release (BLCK) + Return (Zero) + } + } + + Scope (_SB) + { + Scope (PCI0) + { + Method (_PRT, 0, NotSerialized) // _PRT: PCI Routing Table + { + Local0 = Package (0x80){} + Local1 = Zero + While ((Local1 < 0x80)) + { + Local2 = (Local1 >> 0x02) + Local3 = ((Local1 + Local2) & 0x03) + If ((Local3 == Zero)) + { + Local4 = Package (0x04) + { + Zero, + Zero, + LNKD, + Zero + } + } + + If ((Local3 == One)) + { + If ((Local1 == 0x04)) + { + Local4 = Package (0x04) + { + Zero, + Zero, + LNKS, + Zero + } + } + Else + { + Local4 = Package (0x04) + { + Zero, + Zero, + LNKA, + Zero + } + } + } + + If ((Local3 == 0x02)) + { + Local4 = Package (0x04) + { + Zero, + Zero, + LNKB, + Zero + } + } + + If ((Local3 == 0x03)) + { + Local4 = Package (0x04) + { + Zero, + Zero, + LNKC, + Zero + } + } + + Local4 [Zero] = ((Local2 << 0x10) | 0xFFFF) + Local4 [One] = (Local1 & 0x03) + Local0 [Local1] = Local4 + Local1++ + } + + Return (Local0) + } + } + + Field (PCI0.ISA.P40C, ByteAcc, NoLock, Preserve) + { + PRQ0, 8, + PRQ1, 8, + PRQ2, 8, + PRQ3, 8 + } + + Method (IQST, 1, NotSerialized) + { + If ((0x80 & Arg0)) + { + Return (0x09) + } + + Return (0x0B) + } + + Method (IQCR, 1, Serialized) + { + Name (PRR0, ResourceTemplate () + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, _Y00) + { + 0x00000000, + } + }) + CreateDWordField (PRR0, \_SB.IQCR._Y00._INT, PRRI) // _INT: Interrupts + If ((Arg0 < 0x80)) + { + PRRI = Arg0 + } + + Return (PRR0) /* \_SB_.IQCR.PRR0 */ + } + + Device (LNKA) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQ0)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQ0 |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQ0)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQ0 = PRRI /* \_SB_.LNKA._SRS.PRRI */ + } + } + + Device (LNKB) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQ1)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQ1 |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQ1)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQ1 = PRRI /* \_SB_.LNKB._SRS.PRRI */ + } + } + + Device (LNKC) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x02) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQ2)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQ2 |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQ2)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQ2 = PRRI /* \_SB_.LNKC._SRS.PRRI */ + } + } + + Device (LNKD) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x03) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQ3)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQ3 |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQ3)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQ3 = PRRI /* \_SB_.LNKD._SRS.PRRI */ + } + } + + Device (LNKS) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x04) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000009, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (0x0B) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (_PRS) /* \_SB_.LNKS._PRS */ + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + } + + Scope (_SB) + { + Device (\_SB.PCI0.PRES) + { + Name (_HID, EisaId ("PNP0A06") /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "CPU Hotplug resources") // _UID: Unique ID + Mutex (CPLK, 0x00) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0xAF00, // Range Minimum + 0xAF00, // Range Maximum + 0x01, // Alignment + 0x0C, // Length + ) + }) + OperationRegion (PRST, SystemIO, 0xAF00, 0x0C) + Field (PRST, ByteAcc, NoLock, WriteAsZeros) + { + Offset (0x04), + CPEN, 1, + CINS, 1, + CRMV, 1, + CEJ0, 1, + Offset (0x05), + CCMD, 8 + } + + Field (PRST, DWordAcc, NoLock, Preserve) + { + CSEL, 32, + Offset (0x08), + CDAT, 32 + } + + Method (_INI, 0, Serialized) // _INI: Initialize + { + CSEL = Zero + } + } + + Device (\_SB.CPUS) + { + Name (_HID, "ACPI0010" /* Processor Container Device */) // _HID: Hardware ID + Name (_CID, EisaId ("PNP0A05") /* Generic Container Device */) // _CID: Compatible ID + Method (CTFY, 2, NotSerialized) + { + If ((Arg0 == Zero)) + { + Notify (C000, Arg1) + } + + If ((Arg0 == One)) + { + Notify (C001, Arg1) + } + } + + Method (CSTA, 1, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + Local0 = Zero + If ((\_SB.PCI0.PRES.CPEN == One)) + { + Local0 = 0x0F + } + + Release (\_SB.PCI0.PRES.CPLK) + Return (Local0) + } + + Method (CEJ0, 1, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + \_SB.PCI0.PRES.CEJ0 = One + Release (\_SB.PCI0.PRES.CPLK) + } + + Method (CSCN, 0, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + Local0 = One + While ((Local0 == One)) + { + Local0 = Zero + \_SB.PCI0.PRES.CCMD = Zero + If ((\_SB.PCI0.PRES.CINS == One)) + { + CTFY (\_SB.PCI0.PRES.CDAT, One) + \_SB.PCI0.PRES.CINS = One + Local0 = One + } + ElseIf ((\_SB.PCI0.PRES.CRMV == One)) + { + CTFY (\_SB.PCI0.PRES.CDAT, 0x03) + \_SB.PCI0.PRES.CRMV = One + Local0 = One + } + } + + Release (\_SB.PCI0.PRES.CPLK) + } + + Method (COST, 4, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + \_SB.PCI0.PRES.CCMD = One + \_SB.PCI0.PRES.CDAT = Arg1 + \_SB.PCI0.PRES.CCMD = 0x02 + \_SB.PCI0.PRES.CDAT = Arg2 + Release (\_SB.PCI0.PRES.CPLK) + } + + Processor (C000, 0x00, 0x00000000, 0x00) + { + Method (_STA, 0, Serialized) // _STA: Status + { + Return (CSTA (Zero)) + } + + Name (_MAT, Buffer (0x08) // _MAT: Multiple APIC Table Entry + { + 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 // ........ + }) + Method (_OST, 3, Serialized) // _OST: OSPM Status Indication + { + COST (Zero, Arg0, Arg1, Arg2) + } + + Name (_PXM, Zero) // _PXM: Device Proximity + } + + Processor (C001, 0x01, 0x00000000, 0x00) + { + Method (_STA, 0, Serialized) // _STA: Status + { + Return (CSTA (One)) + } + + Name (_MAT, Buffer (0x08) // _MAT: Multiple APIC Table Entry + { + 0x00, 0x08, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00 // ........ + }) + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + CEJ0 (One) + } + + Method (_OST, 3, Serialized) // _OST: OSPM Status Indication + { + COST (One, Arg0, Arg1, Arg2) + } + + Name (_PXM, Zero) // _PXM: Device Proximity + } + } + } + + Method (\_GPE._E02, 0, NotSerialized) // _Exx: Edge-Triggered GPE, xx=0x00-0xFF + { + \_SB.CPUS.CSCN () + } + + Device (\_SB.PCI0.MHPD) + { + Name (_HID, "PNP0A06" /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "Memory hotplug resources") // _UID: Unique ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0A00, // Range Minimum + 0x0A00, // Range Maximum + 0x00, // Alignment + 0x18, // Length + ) + }) + OperationRegion (HPMR, SystemIO, 0x0A00, 0x18) + } + + Device (\_SB.MHPC) + { + Name (_HID, "PNP0A06" /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "DIMM devices") // _UID: Unique ID + Name (MDNR, 0x02) + Field (\_SB.PCI0.MHPD.HPMR, DWordAcc, NoLock, Preserve) + { + MRBL, 32, + MRBH, 32, + MRLL, 32, + MRLH, 32, + MPX, 32 + } + + Field (\_SB.PCI0.MHPD.HPMR, ByteAcc, NoLock, WriteAsZeros) + { + Offset (0x14), + MES, 1, + MINS, 1, + MRMV, 1, + MEJ, 1 + } + + Field (\_SB.PCI0.MHPD.HPMR, DWordAcc, NoLock, Preserve) + { + MSEL, 32, + MOEV, 32, + MOSC, 32 + } + + Method (_STA, 0, NotSerialized) // _STA: Status + { + If ((MDNR == Zero)) + { + Return (Zero) + } + + Return (0x0B) + } + + Mutex (MLCK, 0x00) + Method (MSCN, 0, NotSerialized) + { + If ((MDNR == Zero)) + { + Return (Zero) + } + + Local0 = Zero + Acquire (MLCK, 0xFFFF) + While ((Local0 < MDNR)) + { + MSEL = Local0 + If ((MINS == One)) + { + MTFY (Local0, One) + MINS = One + } + ElseIf ((MRMV == One)) + { + MTFY (Local0, 0x03) + MRMV = One + } + + Local0 += One + } + + Release (MLCK) + Return (One) + } + + Method (MRST, 1, NotSerialized) + { + Local0 = Zero + Acquire (MLCK, 0xFFFF) + MSEL = ToInteger (Arg0) + If ((MES == One)) + { + Local0 = 0x0F + } + + Release (MLCK) + Return (Local0) + } + + Method (MCRS, 1, Serialized) + { + Acquire (MLCK, 0xFFFF) + MSEL = ToInteger (Arg0) + Name (MR64, ResourceTemplate () + { + QWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x0000000000000000, // Granularity + 0x0000000000000000, // Range Minimum + 0xFFFFFFFFFFFFFFFE, // Range Maximum + 0x0000000000000000, // Translation Offset + 0xFFFFFFFFFFFFFFFF, // Length + ,, _Y01, AddressRangeMemory, TypeStatic) + }) + CreateDWordField (MR64, \_SB.MHPC.MCRS._Y01._MIN, MINL) // _MIN: Minimum Base Address + CreateDWordField (MR64, 0x12, MINH) + CreateDWordField (MR64, \_SB.MHPC.MCRS._Y01._LEN, LENL) // _LEN: Length + CreateDWordField (MR64, 0x2A, LENH) + CreateDWordField (MR64, \_SB.MHPC.MCRS._Y01._MAX, MAXL) // _MAX: Maximum Base Address + CreateDWordField (MR64, 0x1A, MAXH) + MINH = MRBH /* \_SB_.MHPC.MRBH */ + MINL = MRBL /* \_SB_.MHPC.MRBL */ + LENH = MRLH /* \_SB_.MHPC.MRLH */ + LENL = MRLL /* \_SB_.MHPC.MRLL */ + MAXL = (MINL + LENL) /* \_SB_.MHPC.MCRS.LENL */ + MAXH = (MINH + LENH) /* \_SB_.MHPC.MCRS.LENH */ + If ((MAXL < MINL)) + { + MAXH += One + } + + If ((MAXL < One)) + { + MAXH -= One + } + + MAXL -= One + If ((MAXH == Zero)) + { + Name (MR32, ResourceTemplate () + { + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x00000000, // Granularity + 0x00000000, // Range Minimum + 0xFFFFFFFE, // Range Maximum + 0x00000000, // Translation Offset + 0xFFFFFFFF, // Length + ,, _Y02, AddressRangeMemory, TypeStatic) + }) + CreateDWordField (MR32, \_SB.MHPC.MCRS._Y02._MIN, MIN) // _MIN: Minimum Base Address + CreateDWordField (MR32, \_SB.MHPC.MCRS._Y02._MAX, MAX) // _MAX: Maximum Base Address + CreateDWordField (MR32, \_SB.MHPC.MCRS._Y02._LEN, LEN) // _LEN: Length + MIN = MINL /* \_SB_.MHPC.MCRS.MINL */ + MAX = MAXL /* \_SB_.MHPC.MCRS.MAXL */ + LEN = LENL /* \_SB_.MHPC.MCRS.LENL */ + Release (MLCK) + Return (MR32) /* \_SB_.MHPC.MCRS.MR32 */ + } + + Release (MLCK) + Return (MR64) /* \_SB_.MHPC.MCRS.MR64 */ + } + + Method (MPXM, 1, NotSerialized) + { + Acquire (MLCK, 0xFFFF) + MSEL = ToInteger (Arg0) + Local0 = MPX /* \_SB_.MHPC.MPX_ */ + Release (MLCK) + Return (Local0) + } + + Method (MOST, 4, NotSerialized) + { + Acquire (MLCK, 0xFFFF) + MSEL = ToInteger (Arg0) + MOEV = Arg1 + MOSC = Arg2 + Release (MLCK) + } + + Method (MEJ0, 2, NotSerialized) + { + Acquire (MLCK, 0xFFFF) + MSEL = ToInteger (Arg0) + MEJ = One + Release (MLCK) + } + + Device (MP00) + { + Name (_UID, "0x00") // _UID: Unique ID + Name (_HID, EisaId ("PNP0C80") /* Memory Device */) // _HID: Hardware ID + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (MCRS (_UID)) + } + + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (MRST (_UID)) + } + + Method (_PXM, 0, NotSerialized) // _PXM: Device Proximity + { + Return (MPXM (_UID)) + } + + Method (_OST, 3, NotSerialized) // _OST: OSPM Status Indication + { + MOST (_UID, Arg0, Arg1, Arg2) + } + + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + MEJ0 (_UID, Arg0) + } + } + + Device (MP01) + { + Name (_UID, "0x01") // _UID: Unique ID + Name (_HID, EisaId ("PNP0C80") /* Memory Device */) // _HID: Hardware ID + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (MCRS (_UID)) + } + + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (MRST (_UID)) + } + + Method (_PXM, 0, NotSerialized) // _PXM: Device Proximity + { + Return (MPXM (_UID)) + } + + Method (_OST, 3, NotSerialized) // _OST: OSPM Status Indication + { + MOST (_UID, Arg0, Arg1, Arg2) + } + + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + MEJ0 (_UID, Arg0) + } + } + + Method (MTFY, 2, NotSerialized) + { + If ((Arg0 == Zero)) + { + Notify (MP00, Arg1) + } + + If ((Arg0 == One)) + { + Notify (MP01, Arg1) + } + } + } + + Method (\_GPE._E03, 0, NotSerialized) // _Exx: Edge-Triggered GPE, xx=0x00-0xFF + { + \_SB.MHPC.MSCN () + } + + Scope (_GPE) + { + Name (_HID, "ACPI0006" /* GPE Block Device */) // _HID: Hardware ID + Method (_E01, 0, NotSerialized) // _Exx: Edge-Triggered GPE, xx=0x00-0xFF + { + Acquire (\_SB.PCI0.BLCK, 0xFFFF) + \_SB.PCI0.PCNT () + Release (\_SB.PCI0.BLCK) + } + } + + Scope (\_SB.PCI0) + { + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode, + 0x0000, // Granularity + 0x0000, // Range Minimum + 0x00FF, // Range Maximum + 0x0000, // Translation Offset + 0x0100, // Length + ,, ) + IO (Decode16, + 0x0CF8, // Range Minimum + 0x0CF8, // Range Maximum + 0x01, // Alignment + 0x08, // Length + ) + WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, + 0x0000, // Granularity + 0x0000, // Range Minimum + 0x0CF7, // Range Maximum + 0x0000, // Translation Offset + 0x0CF8, // Length + ,, , TypeStatic, DenseTranslation) + WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, + 0x0000, // Granularity + 0x0D00, // Range Minimum + 0xFFFF, // Range Maximum + 0x0000, // Translation Offset + 0xF300, // Length + ,, , TypeStatic, DenseTranslation) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x00000000, // Granularity + 0x000A0000, // Range Minimum + 0x000BFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0x00020000, // Length + ,, , AddressRangeMemory, TypeStatic) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite, + 0x00000000, // Granularity + 0x08000000, // Range Minimum + 0xFEBFFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0xF6C00000, // Length + ,, , AddressRangeMemory, TypeStatic) + QWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x0000000000000000, // Granularity + 0x00000001C0000000, // Range Minimum + 0x000000023FFFFFFF, // Range Maximum + 0x0000000000000000, // Translation Offset + 0x0000000080000000, // Length + ,, , AddressRangeMemory, TypeStatic) + }) + Device (GPE0) + { + Name (_HID, "PNP0A06" /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "GPE0 resources") // _UID: Unique ID + Name (_STA, 0x0B) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0xAFE0, // Range Minimum + 0xAFE0, // Range Maximum + 0x01, // Alignment + 0x04, // Length + ) + }) + } + + Device (PHPR) + { + Name (_HID, "PNP0A06" /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "PCI Hotplug resources") // _UID: Unique ID + Name (_STA, 0x0B) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0xAE00, // Range Minimum + 0xAE00, // Range Maximum + 0x01, // Alignment + 0x14, // Length + ) + }) + } + } + + Scope (\) + { + Name (_S3, Package (0x04) // _S3_: S3 System State + { + One, + One, + Zero, + Zero + }) + Name (_S4, Package (0x04) // _S4_: S4 System State + { + 0x02, + 0x02, + Zero, + Zero + }) + Name (_S5, Package (0x04) // _S5_: S5 System State + { + Zero, + Zero, + Zero, + Zero + }) + } + + Scope (\_SB.PCI0) + { + Device (FWCF) + { + Name (_HID, "QEMU0002") // _HID: Hardware ID + Name (_STA, 0x0B) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0510, // Range Minimum + 0x0510, // Range Maximum + 0x01, // Alignment + 0x0C, // Length + ) + }) + } + } + + Scope (\_SB) + { + Scope (PCI0) + { + Name (BSEL, Zero) + Device (S00) + { + Name (_ADR, Zero) // _ADR: Address + } + + Device (S10) + { + Name (_ADR, 0x00020000) // _ADR: Address + Method (_S1D, 0, NotSerialized) // _S1D: S1 Device State + { + Return (Zero) + } + + Method (_S2D, 0, NotSerialized) // _S2D: S2 Device State + { + Return (Zero) + } + + Method (_S3D, 0, NotSerialized) // _S3D: S3 Device State + { + Return (Zero) + } + } + + Device (S18) + { + Name (_SUN, 0x03) // _SUN: Slot User Number + Name (_ADR, 0x00030000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S20) + { + Name (_SUN, 0x04) // _SUN: Slot User Number + Name (_ADR, 0x00040000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S28) + { + Name (_SUN, 0x05) // _SUN: Slot User Number + Name (_ADR, 0x00050000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S30) + { + Name (_SUN, 0x06) // _SUN: Slot User Number + Name (_ADR, 0x00060000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S38) + { + Name (_SUN, 0x07) // _SUN: Slot User Number + Name (_ADR, 0x00070000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S40) + { + Name (_SUN, 0x08) // _SUN: Slot User Number + Name (_ADR, 0x00080000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S48) + { + Name (_SUN, 0x09) // _SUN: Slot User Number + Name (_ADR, 0x00090000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S50) + { + Name (_SUN, 0x0A) // _SUN: Slot User Number + Name (_ADR, 0x000A0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S58) + { + Name (_SUN, 0x0B) // _SUN: Slot User Number + Name (_ADR, 0x000B0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S60) + { + Name (_SUN, 0x0C) // _SUN: Slot User Number + Name (_ADR, 0x000C0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S68) + { + Name (_SUN, 0x0D) // _SUN: Slot User Number + Name (_ADR, 0x000D0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S70) + { + Name (_SUN, 0x0E) // _SUN: Slot User Number + Name (_ADR, 0x000E0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S78) + { + Name (_SUN, 0x0F) // _SUN: Slot User Number + Name (_ADR, 0x000F0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S80) + { + Name (_SUN, 0x10) // _SUN: Slot User Number + Name (_ADR, 0x00100000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S88) + { + Name (_SUN, 0x11) // _SUN: Slot User Number + Name (_ADR, 0x00110000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S90) + { + Name (_SUN, 0x12) // _SUN: Slot User Number + Name (_ADR, 0x00120000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S98) + { + Name (_SUN, 0x13) // _SUN: Slot User Number + Name (_ADR, 0x00130000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SA0) + { + Name (_SUN, 0x14) // _SUN: Slot User Number + Name (_ADR, 0x00140000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SA8) + { + Name (_SUN, 0x15) // _SUN: Slot User Number + Name (_ADR, 0x00150000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SB0) + { + Name (_SUN, 0x16) // _SUN: Slot User Number + Name (_ADR, 0x00160000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SB8) + { + Name (_SUN, 0x17) // _SUN: Slot User Number + Name (_ADR, 0x00170000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SC0) + { + Name (_SUN, 0x18) // _SUN: Slot User Number + Name (_ADR, 0x00180000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SC8) + { + Name (_SUN, 0x19) // _SUN: Slot User Number + Name (_ADR, 0x00190000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SD0) + { + Name (_SUN, 0x1A) // _SUN: Slot User Number + Name (_ADR, 0x001A0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SD8) + { + Name (_SUN, 0x1B) // _SUN: Slot User Number + Name (_ADR, 0x001B0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SE0) + { + Name (_SUN, 0x1C) // _SUN: Slot User Number + Name (_ADR, 0x001C0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SE8) + { + Name (_SUN, 0x1D) // _SUN: Slot User Number + Name (_ADR, 0x001D0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SF0) + { + Name (_SUN, 0x1E) // _SUN: Slot User Number + Name (_ADR, 0x001E0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SF8) + { + Name (_SUN, 0x1F) // _SUN: Slot User Number + Name (_ADR, 0x001F0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Method (DVNT, 2, NotSerialized) + { + If ((Arg0 & 0x08)) + { + Notify (S18, Arg1) + } + + If ((Arg0 & 0x10)) + { + Notify (S20, Arg1) + } + + If ((Arg0 & 0x20)) + { + Notify (S28, Arg1) + } + + If ((Arg0 & 0x40)) + { + Notify (S30, Arg1) + } + + If ((Arg0 & 0x80)) + { + Notify (S38, Arg1) + } + + If ((Arg0 & 0x0100)) + { + Notify (S40, Arg1) + } + + If ((Arg0 & 0x0200)) + { + Notify (S48, Arg1) + } + + If ((Arg0 & 0x0400)) + { + Notify (S50, Arg1) + } + + If ((Arg0 & 0x0800)) + { + Notify (S58, Arg1) + } + + If ((Arg0 & 0x1000)) + { + Notify (S60, Arg1) + } + + If ((Arg0 & 0x2000)) + { + Notify (S68, Arg1) + } + + If ((Arg0 & 0x4000)) + { + Notify (S70, Arg1) + } + + If ((Arg0 & 0x8000)) + { + Notify (S78, Arg1) + } + + If ((Arg0 & 0x00010000)) + { + Notify (S80, Arg1) + } + + If ((Arg0 & 0x00020000)) + { + Notify (S88, Arg1) + } + + If ((Arg0 & 0x00040000)) + { + Notify (S90, Arg1) + } + + If ((Arg0 & 0x00080000)) + { + Notify (S98, Arg1) + } + + If ((Arg0 & 0x00100000)) + { + Notify (SA0, Arg1) + } + + If ((Arg0 & 0x00200000)) + { + Notify (SA8, Arg1) + } + + If ((Arg0 & 0x00400000)) + { + Notify (SB0, Arg1) + } + + If ((Arg0 & 0x00800000)) + { + Notify (SB8, Arg1) + } + + If ((Arg0 & 0x01000000)) + { + Notify (SC0, Arg1) + } + + If ((Arg0 & 0x02000000)) + { + Notify (SC8, Arg1) + } + + If ((Arg0 & 0x04000000)) + { + Notify (SD0, Arg1) + } + + If ((Arg0 & 0x08000000)) + { + Notify (SD8, Arg1) + } + + If ((Arg0 & 0x10000000)) + { + Notify (SE0, Arg1) + } + + If ((Arg0 & 0x20000000)) + { + Notify (SE8, Arg1) + } + + If ((Arg0 & 0x40000000)) + { + Notify (SF0, Arg1) + } + + If ((Arg0 & 0x80000000)) + { + Notify (SF8, Arg1) + } + } + + Method (PCNT, 0, NotSerialized) + { + BNUM = Zero + DVNT (PCIU, One) + DVNT (PCID, 0x03) + } + } + } +} + diff --git a/tests/data/acpi/pc/DSDT.bridge.dsl b/tests/data/acpi/pc/DSDT.bridge.dsl new file mode 100644 index 0000000000..3311b57ecb --- /dev/null +++ b/tests/data/acpi/pc/DSDT.bridge.dsl @@ -0,0 +1,1800 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembling to symbolic ASL+ operators + * + * Disassembly of tests/data/acpi/pc/DSDT.bridge, Tue Aug 4 11:14:15 2020 + * + * Original Table Header: + * Signature "DSDT" + * Length 0x00001A89 (6793) + * Revision 0x01 **** 32-bit table (V1), no 64-bit math support + * Checksum 0x09 + * OEM ID "BOCHS " + * OEM Table ID "BXPCDSDT" + * OEM Revision 0x00000001 (1) + * Compiler ID "BXPC" + * Compiler Version 0x00000001 (1) + */ +DefinitionBlock ("", "DSDT", 1, "BOCHS ", "BXPCDSDT", 0x00000001) +{ + Scope (\) + { + OperationRegion (DBG, SystemIO, 0x0402, One) + Field (DBG, ByteAcc, NoLock, Preserve) + { + DBGB, 8 + } + + Method (DBUG, 1, NotSerialized) + { + ToHexString (Arg0, Local0) + ToBuffer (Local0, Local0) + Local1 = (SizeOf (Local0) - One) + Local2 = Zero + While ((Local2 < Local1)) + { + DBGB = DerefOf (Local0 [Local2]) + Local2++ + } + + DBGB = 0x0A + } + } + + Scope (_SB) + { + Device (PCI0) + { + Name (_HID, EisaId ("PNP0A03") /* PCI Bus */) // _HID: Hardware ID + Name (_ADR, Zero) // _ADR: Address + Name (_UID, Zero) // _UID: Unique ID + } + } + + Scope (_SB) + { + Device (HPET) + { + Name (_HID, EisaId ("PNP0103") /* HPET System Timer */) // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + OperationRegion (HPTM, SystemMemory, 0xFED00000, 0x0400) + Field (HPTM, DWordAcc, Lock, Preserve) + { + VEND, 32, + PRD, 32 + } + + Method (_STA, 0, NotSerialized) // _STA: Status + { + Local0 = VEND /* \_SB_.HPET.VEND */ + Local1 = PRD /* \_SB_.HPET.PRD_ */ + Local0 >>= 0x10 + If (((Local0 == Zero) || (Local0 == 0xFFFF))) + { + Return (Zero) + } + + If (((Local1 == Zero) || (Local1 > 0x05F5E100))) + { + Return (Zero) + } + + Return (0x0F) + } + + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadOnly, + 0xFED00000, // Address Base + 0x00000400, // Address Length + ) + }) + } + } + + Scope (_SB.PCI0) + { + Device (ISA) + { + Name (_ADR, 0x00010000) // _ADR: Address + OperationRegion (P40C, PCI_Config, 0x60, 0x04) + } + } + + Scope (_SB.PCI0.ISA) + { + Device (KBD) + { + Name (_HID, EisaId ("PNP0303") /* IBM Enhanced Keyboard (101/102-key, PS/2 Mouse) */) // _HID: Hardware ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0060, // Range Minimum + 0x0060, // Range Maximum + 0x01, // Alignment + 0x01, // Length + ) + IO (Decode16, + 0x0064, // Range Minimum + 0x0064, // Range Maximum + 0x01, // Alignment + 0x01, // Length + ) + IRQNoFlags () + {1} + }) + } + + Device (MOU) + { + Name (_HID, EisaId ("PNP0F13") /* PS/2 Mouse */) // _HID: Hardware ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IRQNoFlags () + {12} + }) + } + + Device (FDC0) + { + Name (_HID, EisaId ("PNP0700")) // _HID: Hardware ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x03F2, // Range Minimum + 0x03F2, // Range Maximum + 0x00, // Alignment + 0x04, // Length + ) + IO (Decode16, + 0x03F7, // Range Minimum + 0x03F7, // Range Maximum + 0x00, // Alignment + 0x01, // Length + ) + IRQNoFlags () + {6} + DMA (Compatibility, NotBusMaster, Transfer8, ) + {2} + }) + Device (FLPA) + { + Name (_ADR, Zero) // _ADR: Address + Name (_FDI, Package (0x10) // _FDI: Floppy Drive Information + { + Zero, + 0x05, + 0x4F, + 0x30, + One, + 0xAF, + 0x02, + 0x25, + 0x02, + 0x12, + 0x1B, + 0xFF, + 0x6C, + 0xF6, + 0x0F, + 0x08 + }) + } + + Name (_FDE, Buffer (0x14) // _FDE: Floppy Disk Enumerate + { + /* 0000 */ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........ + /* 0008 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........ + /* 0010 */ 0x02, 0x00, 0x00, 0x00 // .... + }) + } + + Device (LPT1) + { + Name (_HID, EisaId ("PNP0400") /* Standard LPT Parallel Port */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0378, // Range Minimum + 0x0378, // Range Maximum + 0x08, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {7} + }) + } + + Device (COM1) + { + Name (_HID, EisaId ("PNP0501") /* 16550A-compatible COM Serial Port */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x03F8, // Range Minimum + 0x03F8, // Range Maximum + 0x00, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {4} + }) + } + + Device (RTC) + { + Name (_HID, EisaId ("PNP0B00") /* AT Real-Time Clock */) // _HID: Hardware ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0070, // Range Minimum + 0x0070, // Range Maximum + 0x01, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {8} + }) + } + } + + Scope (_SB.PCI0) + { + OperationRegion (PCST, SystemIO, 0xAE00, 0x08) + Field (PCST, DWordAcc, NoLock, WriteAsZeros) + { + PCIU, 32, + PCID, 32 + } + + OperationRegion (SEJ, SystemIO, 0xAE08, 0x04) + Field (SEJ, DWordAcc, NoLock, WriteAsZeros) + { + B0EJ, 32 + } + + OperationRegion (BNMR, SystemIO, 0xAE10, 0x04) + Field (BNMR, DWordAcc, NoLock, WriteAsZeros) + { + BNUM, 32 + } + + Mutex (BLCK, 0x00) + Method (PCEJ, 2, NotSerialized) + { + Acquire (BLCK, 0xFFFF) + BNUM = Arg0 + B0EJ = (One << Arg1) + Release (BLCK) + Return (Zero) + } + } + + Scope (_SB) + { + Scope (PCI0) + { + Method (_PRT, 0, NotSerialized) // _PRT: PCI Routing Table + { + Local0 = Package (0x80){} + Local1 = Zero + While ((Local1 < 0x80)) + { + Local2 = (Local1 >> 0x02) + Local3 = ((Local1 + Local2) & 0x03) + If ((Local3 == Zero)) + { + Local4 = Package (0x04) + { + Zero, + Zero, + LNKD, + Zero + } + } + + If ((Local3 == One)) + { + If ((Local1 == 0x04)) + { + Local4 = Package (0x04) + { + Zero, + Zero, + LNKS, + Zero + } + } + Else + { + Local4 = Package (0x04) + { + Zero, + Zero, + LNKA, + Zero + } + } + } + + If ((Local3 == 0x02)) + { + Local4 = Package (0x04) + { + Zero, + Zero, + LNKB, + Zero + } + } + + If ((Local3 == 0x03)) + { + Local4 = Package (0x04) + { + Zero, + Zero, + LNKC, + Zero + } + } + + Local4 [Zero] = ((Local2 << 0x10) | 0xFFFF) + Local4 [One] = (Local1 & 0x03) + Local0 [Local1] = Local4 + Local1++ + } + + Return (Local0) + } + } + + Field (PCI0.ISA.P40C, ByteAcc, NoLock, Preserve) + { + PRQ0, 8, + PRQ1, 8, + PRQ2, 8, + PRQ3, 8 + } + + Method (IQST, 1, NotSerialized) + { + If ((0x80 & Arg0)) + { + Return (0x09) + } + + Return (0x0B) + } + + Method (IQCR, 1, Serialized) + { + Name (PRR0, ResourceTemplate () + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, _Y00) + { + 0x00000000, + } + }) + CreateDWordField (PRR0, \_SB.IQCR._Y00._INT, PRRI) // _INT: Interrupts + If ((Arg0 < 0x80)) + { + PRRI = Arg0 + } + + Return (PRR0) /* \_SB_.IQCR.PRR0 */ + } + + Device (LNKA) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQ0)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQ0 |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQ0)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQ0 = PRRI /* \_SB_.LNKA._SRS.PRRI */ + } + } + + Device (LNKB) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQ1)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQ1 |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQ1)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQ1 = PRRI /* \_SB_.LNKB._SRS.PRRI */ + } + } + + Device (LNKC) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x02) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQ2)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQ2 |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQ2)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQ2 = PRRI /* \_SB_.LNKC._SRS.PRRI */ + } + } + + Device (LNKD) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x03) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQ3)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQ3 |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQ3)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQ3 = PRRI /* \_SB_.LNKD._SRS.PRRI */ + } + } + + Device (LNKS) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x04) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000009, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (0x0B) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (_PRS) /* \_SB_.LNKS._PRS */ + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + } + + Scope (_SB) + { + Device (\_SB.PCI0.PRES) + { + Name (_HID, EisaId ("PNP0A06") /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "CPU Hotplug resources") // _UID: Unique ID + Mutex (CPLK, 0x00) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0xAF00, // Range Minimum + 0xAF00, // Range Maximum + 0x01, // Alignment + 0x0C, // Length + ) + }) + OperationRegion (PRST, SystemIO, 0xAF00, 0x0C) + Field (PRST, ByteAcc, NoLock, WriteAsZeros) + { + Offset (0x04), + CPEN, 1, + CINS, 1, + CRMV, 1, + CEJ0, 1, + Offset (0x05), + CCMD, 8 + } + + Field (PRST, DWordAcc, NoLock, Preserve) + { + CSEL, 32, + Offset (0x08), + CDAT, 32 + } + + Method (_INI, 0, Serialized) // _INI: Initialize + { + CSEL = Zero + } + } + + Device (\_SB.CPUS) + { + Name (_HID, "ACPI0010" /* Processor Container Device */) // _HID: Hardware ID + Name (_CID, EisaId ("PNP0A05") /* Generic Container Device */) // _CID: Compatible ID + Method (CTFY, 2, NotSerialized) + { + If ((Arg0 == Zero)) + { + Notify (C000, Arg1) + } + } + + Method (CSTA, 1, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + Local0 = Zero + If ((\_SB.PCI0.PRES.CPEN == One)) + { + Local0 = 0x0F + } + + Release (\_SB.PCI0.PRES.CPLK) + Return (Local0) + } + + Method (CEJ0, 1, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + \_SB.PCI0.PRES.CEJ0 = One + Release (\_SB.PCI0.PRES.CPLK) + } + + Method (CSCN, 0, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + Local0 = One + While ((Local0 == One)) + { + Local0 = Zero + \_SB.PCI0.PRES.CCMD = Zero + If ((\_SB.PCI0.PRES.CINS == One)) + { + CTFY (\_SB.PCI0.PRES.CDAT, One) + \_SB.PCI0.PRES.CINS = One + Local0 = One + } + ElseIf ((\_SB.PCI0.PRES.CRMV == One)) + { + CTFY (\_SB.PCI0.PRES.CDAT, 0x03) + \_SB.PCI0.PRES.CRMV = One + Local0 = One + } + } + + Release (\_SB.PCI0.PRES.CPLK) + } + + Method (COST, 4, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + \_SB.PCI0.PRES.CCMD = One + \_SB.PCI0.PRES.CDAT = Arg1 + \_SB.PCI0.PRES.CCMD = 0x02 + \_SB.PCI0.PRES.CDAT = Arg2 + Release (\_SB.PCI0.PRES.CPLK) + } + + Processor (C000, 0x00, 0x00000000, 0x00) + { + Method (_STA, 0, Serialized) // _STA: Status + { + Return (CSTA (Zero)) + } + + Name (_MAT, Buffer (0x08) // _MAT: Multiple APIC Table Entry + { + 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 // ........ + }) + Method (_OST, 3, Serialized) // _OST: OSPM Status Indication + { + COST (Zero, Arg0, Arg1, Arg2) + } + } + } + } + + Method (\_GPE._E02, 0, NotSerialized) // _Exx: Edge-Triggered GPE, xx=0x00-0xFF + { + \_SB.CPUS.CSCN () + } + + Scope (_GPE) + { + Name (_HID, "ACPI0006" /* GPE Block Device */) // _HID: Hardware ID + Method (_E01, 0, NotSerialized) // _Exx: Edge-Triggered GPE, xx=0x00-0xFF + { + Acquire (\_SB.PCI0.BLCK, 0xFFFF) + \_SB.PCI0.PCNT () + Release (\_SB.PCI0.BLCK) + } + } + + Scope (\_SB.PCI0) + { + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode, + 0x0000, // Granularity + 0x0000, // Range Minimum + 0x00FF, // Range Maximum + 0x0000, // Translation Offset + 0x0100, // Length + ,, ) + IO (Decode16, + 0x0CF8, // Range Minimum + 0x0CF8, // Range Maximum + 0x01, // Alignment + 0x08, // Length + ) + WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, + 0x0000, // Granularity + 0x0000, // Range Minimum + 0x0CF7, // Range Maximum + 0x0000, // Translation Offset + 0x0CF8, // Length + ,, , TypeStatic, DenseTranslation) + WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, + 0x0000, // Granularity + 0x0D00, // Range Minimum + 0xFFFF, // Range Maximum + 0x0000, // Translation Offset + 0xF300, // Length + ,, , TypeStatic, DenseTranslation) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x00000000, // Granularity + 0x000A0000, // Range Minimum + 0x000BFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0x00020000, // Length + ,, , AddressRangeMemory, TypeStatic) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite, + 0x00000000, // Granularity + 0x08000000, // Range Minimum + 0xFEBFFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0xF6C00000, // Length + ,, , AddressRangeMemory, TypeStatic) + QWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x0000000000000000, // Granularity + 0x0000000100000000, // Range Minimum + 0x000000017FFFFFFF, // Range Maximum + 0x0000000000000000, // Translation Offset + 0x0000000080000000, // Length + ,, , AddressRangeMemory, TypeStatic) + }) + Device (GPE0) + { + Name (_HID, "PNP0A06" /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "GPE0 resources") // _UID: Unique ID + Name (_STA, 0x0B) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0xAFE0, // Range Minimum + 0xAFE0, // Range Maximum + 0x01, // Alignment + 0x04, // Length + ) + }) + } + + Device (PHPR) + { + Name (_HID, "PNP0A06" /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "PCI Hotplug resources") // _UID: Unique ID + Name (_STA, 0x0B) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0xAE00, // Range Minimum + 0xAE00, // Range Maximum + 0x01, // Alignment + 0x14, // Length + ) + }) + } + } + + Scope (\) + { + Name (_S3, Package (0x04) // _S3_: S3 System State + { + One, + One, + Zero, + Zero + }) + Name (_S4, Package (0x04) // _S4_: S4 System State + { + 0x02, + 0x02, + Zero, + Zero + }) + Name (_S5, Package (0x04) // _S5_: S5 System State + { + Zero, + Zero, + Zero, + Zero + }) + } + + Scope (\_SB.PCI0) + { + Device (FWCF) + { + Name (_HID, "QEMU0002") // _HID: Hardware ID + Name (_STA, 0x0B) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0510, // Range Minimum + 0x0510, // Range Maximum + 0x01, // Alignment + 0x0C, // Length + ) + }) + } + } + + Scope (\_SB) + { + Scope (PCI0) + { + Name (BSEL, Zero) + Device (S00) + { + Name (_ADR, Zero) // _ADR: Address + } + + Device (S10) + { + Name (_ADR, 0x00020000) // _ADR: Address + Method (_S1D, 0, NotSerialized) // _S1D: S1 Device State + { + Return (Zero) + } + + Method (_S2D, 0, NotSerialized) // _S2D: S2 Device State + { + Return (Zero) + } + + Method (_S3D, 0, NotSerialized) // _S3D: S3 Device State + { + Return (Zero) + } + } + + Device (S18) + { + Name (_ADR, 0x00030000) // _ADR: Address + Name (BSEL, One) + Device (S00) + { + Name (_SUN, Zero) // _SUN: Slot User Number + Name (_ADR, Zero) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S08) + { + Name (_SUN, One) // _SUN: Slot User Number + Name (_ADR, 0x00010000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S10) + { + Name (_SUN, 0x02) // _SUN: Slot User Number + Name (_ADR, 0x00020000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S18) + { + Name (_SUN, 0x03) // _SUN: Slot User Number + Name (_ADR, 0x00030000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S20) + { + Name (_SUN, 0x04) // _SUN: Slot User Number + Name (_ADR, 0x00040000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S28) + { + Name (_SUN, 0x05) // _SUN: Slot User Number + Name (_ADR, 0x00050000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S30) + { + Name (_SUN, 0x06) // _SUN: Slot User Number + Name (_ADR, 0x00060000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S38) + { + Name (_SUN, 0x07) // _SUN: Slot User Number + Name (_ADR, 0x00070000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S40) + { + Name (_SUN, 0x08) // _SUN: Slot User Number + Name (_ADR, 0x00080000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S48) + { + Name (_SUN, 0x09) // _SUN: Slot User Number + Name (_ADR, 0x00090000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S50) + { + Name (_SUN, 0x0A) // _SUN: Slot User Number + Name (_ADR, 0x000A0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S58) + { + Name (_SUN, 0x0B) // _SUN: Slot User Number + Name (_ADR, 0x000B0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S60) + { + Name (_SUN, 0x0C) // _SUN: Slot User Number + Name (_ADR, 0x000C0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S68) + { + Name (_SUN, 0x0D) // _SUN: Slot User Number + Name (_ADR, 0x000D0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S70) + { + Name (_SUN, 0x0E) // _SUN: Slot User Number + Name (_ADR, 0x000E0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S78) + { + Name (_SUN, 0x0F) // _SUN: Slot User Number + Name (_ADR, 0x000F0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S80) + { + Name (_SUN, 0x10) // _SUN: Slot User Number + Name (_ADR, 0x00100000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S88) + { + Name (_SUN, 0x11) // _SUN: Slot User Number + Name (_ADR, 0x00110000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S90) + { + Name (_SUN, 0x12) // _SUN: Slot User Number + Name (_ADR, 0x00120000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S98) + { + Name (_SUN, 0x13) // _SUN: Slot User Number + Name (_ADR, 0x00130000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SA0) + { + Name (_SUN, 0x14) // _SUN: Slot User Number + Name (_ADR, 0x00140000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SA8) + { + Name (_SUN, 0x15) // _SUN: Slot User Number + Name (_ADR, 0x00150000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SB0) + { + Name (_SUN, 0x16) // _SUN: Slot User Number + Name (_ADR, 0x00160000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SB8) + { + Name (_SUN, 0x17) // _SUN: Slot User Number + Name (_ADR, 0x00170000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SC0) + { + Name (_SUN, 0x18) // _SUN: Slot User Number + Name (_ADR, 0x00180000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SC8) + { + Name (_SUN, 0x19) // _SUN: Slot User Number + Name (_ADR, 0x00190000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SD0) + { + Name (_SUN, 0x1A) // _SUN: Slot User Number + Name (_ADR, 0x001A0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SD8) + { + Name (_SUN, 0x1B) // _SUN: Slot User Number + Name (_ADR, 0x001B0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SE0) + { + Name (_SUN, 0x1C) // _SUN: Slot User Number + Name (_ADR, 0x001C0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SE8) + { + Name (_SUN, 0x1D) // _SUN: Slot User Number + Name (_ADR, 0x001D0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SF0) + { + Name (_SUN, 0x1E) // _SUN: Slot User Number + Name (_ADR, 0x001E0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SF8) + { + Name (_SUN, 0x1F) // _SUN: Slot User Number + Name (_ADR, 0x001F0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Method (DVNT, 2, NotSerialized) + { + If ((Arg0 & One)) + { + Notify (S00, Arg1) + } + + If ((Arg0 & 0x02)) + { + Notify (S08, Arg1) + } + + If ((Arg0 & 0x04)) + { + Notify (S10, Arg1) + } + + If ((Arg0 & 0x08)) + { + Notify (S18, Arg1) + } + + If ((Arg0 & 0x10)) + { + Notify (S20, Arg1) + } + + If ((Arg0 & 0x20)) + { + Notify (S28, Arg1) + } + + If ((Arg0 & 0x40)) + { + Notify (S30, Arg1) + } + + If ((Arg0 & 0x80)) + { + Notify (S38, Arg1) + } + + If ((Arg0 & 0x0100)) + { + Notify (S40, Arg1) + } + + If ((Arg0 & 0x0200)) + { + Notify (S48, Arg1) + } + + If ((Arg0 & 0x0400)) + { + Notify (S50, Arg1) + } + + If ((Arg0 & 0x0800)) + { + Notify (S58, Arg1) + } + + If ((Arg0 & 0x1000)) + { + Notify (S60, Arg1) + } + + If ((Arg0 & 0x2000)) + { + Notify (S68, Arg1) + } + + If ((Arg0 & 0x4000)) + { + Notify (S70, Arg1) + } + + If ((Arg0 & 0x8000)) + { + Notify (S78, Arg1) + } + + If ((Arg0 & 0x00010000)) + { + Notify (S80, Arg1) + } + + If ((Arg0 & 0x00020000)) + { + Notify (S88, Arg1) + } + + If ((Arg0 & 0x00040000)) + { + Notify (S90, Arg1) + } + + If ((Arg0 & 0x00080000)) + { + Notify (S98, Arg1) + } + + If ((Arg0 & 0x00100000)) + { + Notify (SA0, Arg1) + } + + If ((Arg0 & 0x00200000)) + { + Notify (SA8, Arg1) + } + + If ((Arg0 & 0x00400000)) + { + Notify (SB0, Arg1) + } + + If ((Arg0 & 0x00800000)) + { + Notify (SB8, Arg1) + } + + If ((Arg0 & 0x01000000)) + { + Notify (SC0, Arg1) + } + + If ((Arg0 & 0x02000000)) + { + Notify (SC8, Arg1) + } + + If ((Arg0 & 0x04000000)) + { + Notify (SD0, Arg1) + } + + If ((Arg0 & 0x08000000)) + { + Notify (SD8, Arg1) + } + + If ((Arg0 & 0x10000000)) + { + Notify (SE0, Arg1) + } + + If ((Arg0 & 0x20000000)) + { + Notify (SE8, Arg1) + } + + If ((Arg0 & 0x40000000)) + { + Notify (SF0, Arg1) + } + + If ((Arg0 & 0x80000000)) + { + Notify (SF8, Arg1) + } + } + + Method (PCNT, 0, NotSerialized) + { + BNUM = One + DVNT (PCIU, One) + DVNT (PCID, 0x03) + } + } + + Device (S20) + { + Name (_SUN, 0x04) // _SUN: Slot User Number + Name (_ADR, 0x00040000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S28) + { + Name (_SUN, 0x05) // _SUN: Slot User Number + Name (_ADR, 0x00050000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S30) + { + Name (_SUN, 0x06) // _SUN: Slot User Number + Name (_ADR, 0x00060000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S38) + { + Name (_SUN, 0x07) // _SUN: Slot User Number + Name (_ADR, 0x00070000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S40) + { + Name (_SUN, 0x08) // _SUN: Slot User Number + Name (_ADR, 0x00080000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S48) + { + Name (_SUN, 0x09) // _SUN: Slot User Number + Name (_ADR, 0x00090000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S50) + { + Name (_SUN, 0x0A) // _SUN: Slot User Number + Name (_ADR, 0x000A0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S58) + { + Name (_SUN, 0x0B) // _SUN: Slot User Number + Name (_ADR, 0x000B0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S60) + { + Name (_SUN, 0x0C) // _SUN: Slot User Number + Name (_ADR, 0x000C0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S68) + { + Name (_SUN, 0x0D) // _SUN: Slot User Number + Name (_ADR, 0x000D0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S70) + { + Name (_SUN, 0x0E) // _SUN: Slot User Number + Name (_ADR, 0x000E0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S78) + { + Name (_SUN, 0x0F) // _SUN: Slot User Number + Name (_ADR, 0x000F0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S80) + { + Name (_SUN, 0x10) // _SUN: Slot User Number + Name (_ADR, 0x00100000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S88) + { + Name (_SUN, 0x11) // _SUN: Slot User Number + Name (_ADR, 0x00110000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S90) + { + Name (_SUN, 0x12) // _SUN: Slot User Number + Name (_ADR, 0x00120000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S98) + { + Name (_SUN, 0x13) // _SUN: Slot User Number + Name (_ADR, 0x00130000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SA0) + { + Name (_SUN, 0x14) // _SUN: Slot User Number + Name (_ADR, 0x00140000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SA8) + { + Name (_SUN, 0x15) // _SUN: Slot User Number + Name (_ADR, 0x00150000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SB0) + { + Name (_SUN, 0x16) // _SUN: Slot User Number + Name (_ADR, 0x00160000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SB8) + { + Name (_SUN, 0x17) // _SUN: Slot User Number + Name (_ADR, 0x00170000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SC0) + { + Name (_SUN, 0x18) // _SUN: Slot User Number + Name (_ADR, 0x00180000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SC8) + { + Name (_SUN, 0x19) // _SUN: Slot User Number + Name (_ADR, 0x00190000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SD0) + { + Name (_SUN, 0x1A) // _SUN: Slot User Number + Name (_ADR, 0x001A0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SD8) + { + Name (_SUN, 0x1B) // _SUN: Slot User Number + Name (_ADR, 0x001B0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SE0) + { + Name (_SUN, 0x1C) // _SUN: Slot User Number + Name (_ADR, 0x001C0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SE8) + { + Name (_SUN, 0x1D) // _SUN: Slot User Number + Name (_ADR, 0x001D0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SF0) + { + Name (_SUN, 0x1E) // _SUN: Slot User Number + Name (_ADR, 0x001E0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SF8) + { + Name (_SUN, 0x1F) // _SUN: Slot User Number + Name (_ADR, 0x001F0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Method (DVNT, 2, NotSerialized) + { + If ((Arg0 & 0x10)) + { + Notify (S20, Arg1) + } + + If ((Arg0 & 0x20)) + { + Notify (S28, Arg1) + } + + If ((Arg0 & 0x40)) + { + Notify (S30, Arg1) + } + + If ((Arg0 & 0x80)) + { + Notify (S38, Arg1) + } + + If ((Arg0 & 0x0100)) + { + Notify (S40, Arg1) + } + + If ((Arg0 & 0x0200)) + { + Notify (S48, Arg1) + } + + If ((Arg0 & 0x0400)) + { + Notify (S50, Arg1) + } + + If ((Arg0 & 0x0800)) + { + Notify (S58, Arg1) + } + + If ((Arg0 & 0x1000)) + { + Notify (S60, Arg1) + } + + If ((Arg0 & 0x2000)) + { + Notify (S68, Arg1) + } + + If ((Arg0 & 0x4000)) + { + Notify (S70, Arg1) + } + + If ((Arg0 & 0x8000)) + { + Notify (S78, Arg1) + } + + If ((Arg0 & 0x00010000)) + { + Notify (S80, Arg1) + } + + If ((Arg0 & 0x00020000)) + { + Notify (S88, Arg1) + } + + If ((Arg0 & 0x00040000)) + { + Notify (S90, Arg1) + } + + If ((Arg0 & 0x00080000)) + { + Notify (S98, Arg1) + } + + If ((Arg0 & 0x00100000)) + { + Notify (SA0, Arg1) + } + + If ((Arg0 & 0x00200000)) + { + Notify (SA8, Arg1) + } + + If ((Arg0 & 0x00400000)) + { + Notify (SB0, Arg1) + } + + If ((Arg0 & 0x00800000)) + { + Notify (SB8, Arg1) + } + + If ((Arg0 & 0x01000000)) + { + Notify (SC0, Arg1) + } + + If ((Arg0 & 0x02000000)) + { + Notify (SC8, Arg1) + } + + If ((Arg0 & 0x04000000)) + { + Notify (SD0, Arg1) + } + + If ((Arg0 & 0x08000000)) + { + Notify (SD8, Arg1) + } + + If ((Arg0 & 0x10000000)) + { + Notify (SE0, Arg1) + } + + If ((Arg0 & 0x20000000)) + { + Notify (SE8, Arg1) + } + + If ((Arg0 & 0x40000000)) + { + Notify (SF0, Arg1) + } + + If ((Arg0 & 0x80000000)) + { + Notify (SF8, Arg1) + } + } + + Method (PCNT, 0, NotSerialized) + { + BNUM = Zero + DVNT (PCIU, One) + DVNT (PCID, 0x03) + ^S18.PCNT () + } + } + } +} + diff --git a/tests/data/acpi/pc/DSDT.cphp.dsl b/tests/data/acpi/pc/DSDT.cphp.dsl new file mode 100644 index 0000000000..22ed37d7dc --- /dev/null +++ b/tests/data/acpi/pc/DSDT.cphp.dsl @@ -0,0 +1,1466 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembling to symbolic ASL+ operators + * + * Disassembly of tests/data/acpi/pc/DSDT.cphp, Tue Aug 4 11:14:15 2020 + * + * Original Table Header: + * Signature "DSDT" + * Length 0x00001515 (5397) + * Revision 0x01 **** 32-bit table (V1), no 64-bit math support + * Checksum 0x39 + * OEM ID "BOCHS " + * OEM Table ID "BXPCDSDT" + * OEM Revision 0x00000001 (1) + * Compiler ID "BXPC" + * Compiler Version 0x00000001 (1) + */ +DefinitionBlock ("", "DSDT", 1, "BOCHS ", "BXPCDSDT", 0x00000001) +{ + Scope (\) + { + OperationRegion (DBG, SystemIO, 0x0402, One) + Field (DBG, ByteAcc, NoLock, Preserve) + { + DBGB, 8 + } + + Method (DBUG, 1, NotSerialized) + { + ToHexString (Arg0, Local0) + ToBuffer (Local0, Local0) + Local1 = (SizeOf (Local0) - One) + Local2 = Zero + While ((Local2 < Local1)) + { + DBGB = DerefOf (Local0 [Local2]) + Local2++ + } + + DBGB = 0x0A + } + } + + Scope (_SB) + { + Device (PCI0) + { + Name (_HID, EisaId ("PNP0A03") /* PCI Bus */) // _HID: Hardware ID + Name (_ADR, Zero) // _ADR: Address + Name (_UID, Zero) // _UID: Unique ID + } + } + + Scope (_SB) + { + Device (HPET) + { + Name (_HID, EisaId ("PNP0103") /* HPET System Timer */) // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + OperationRegion (HPTM, SystemMemory, 0xFED00000, 0x0400) + Field (HPTM, DWordAcc, Lock, Preserve) + { + VEND, 32, + PRD, 32 + } + + Method (_STA, 0, NotSerialized) // _STA: Status + { + Local0 = VEND /* \_SB_.HPET.VEND */ + Local1 = PRD /* \_SB_.HPET.PRD_ */ + Local0 >>= 0x10 + If (((Local0 == Zero) || (Local0 == 0xFFFF))) + { + Return (Zero) + } + + If (((Local1 == Zero) || (Local1 > 0x05F5E100))) + { + Return (Zero) + } + + Return (0x0F) + } + + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadOnly, + 0xFED00000, // Address Base + 0x00000400, // Address Length + ) + }) + } + } + + Scope (_SB.PCI0) + { + Device (ISA) + { + Name (_ADR, 0x00010000) // _ADR: Address + OperationRegion (P40C, PCI_Config, 0x60, 0x04) + } + } + + Scope (_SB.PCI0.ISA) + { + Device (KBD) + { + Name (_HID, EisaId ("PNP0303") /* IBM Enhanced Keyboard (101/102-key, PS/2 Mouse) */) // _HID: Hardware ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0060, // Range Minimum + 0x0060, // Range Maximum + 0x01, // Alignment + 0x01, // Length + ) + IO (Decode16, + 0x0064, // Range Minimum + 0x0064, // Range Maximum + 0x01, // Alignment + 0x01, // Length + ) + IRQNoFlags () + {1} + }) + } + + Device (MOU) + { + Name (_HID, EisaId ("PNP0F13") /* PS/2 Mouse */) // _HID: Hardware ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IRQNoFlags () + {12} + }) + } + + Device (FDC0) + { + Name (_HID, EisaId ("PNP0700")) // _HID: Hardware ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x03F2, // Range Minimum + 0x03F2, // Range Maximum + 0x00, // Alignment + 0x04, // Length + ) + IO (Decode16, + 0x03F7, // Range Minimum + 0x03F7, // Range Maximum + 0x00, // Alignment + 0x01, // Length + ) + IRQNoFlags () + {6} + DMA (Compatibility, NotBusMaster, Transfer8, ) + {2} + }) + Device (FLPA) + { + Name (_ADR, Zero) // _ADR: Address + Name (_FDI, Package (0x10) // _FDI: Floppy Drive Information + { + Zero, + 0x05, + 0x4F, + 0x30, + One, + 0xAF, + 0x02, + 0x25, + 0x02, + 0x12, + 0x1B, + 0xFF, + 0x6C, + 0xF6, + 0x0F, + 0x08 + }) + } + + Name (_FDE, Buffer (0x14) // _FDE: Floppy Disk Enumerate + { + /* 0000 */ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........ + /* 0008 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........ + /* 0010 */ 0x02, 0x00, 0x00, 0x00 // .... + }) + } + + Device (LPT1) + { + Name (_HID, EisaId ("PNP0400") /* Standard LPT Parallel Port */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0378, // Range Minimum + 0x0378, // Range Maximum + 0x08, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {7} + }) + } + + Device (COM1) + { + Name (_HID, EisaId ("PNP0501") /* 16550A-compatible COM Serial Port */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x03F8, // Range Minimum + 0x03F8, // Range Maximum + 0x00, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {4} + }) + } + + Device (RTC) + { + Name (_HID, EisaId ("PNP0B00") /* AT Real-Time Clock */) // _HID: Hardware ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0070, // Range Minimum + 0x0070, // Range Maximum + 0x01, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {8} + }) + } + } + + Scope (_SB.PCI0) + { + OperationRegion (PCST, SystemIO, 0xAE00, 0x08) + Field (PCST, DWordAcc, NoLock, WriteAsZeros) + { + PCIU, 32, + PCID, 32 + } + + OperationRegion (SEJ, SystemIO, 0xAE08, 0x04) + Field (SEJ, DWordAcc, NoLock, WriteAsZeros) + { + B0EJ, 32 + } + + OperationRegion (BNMR, SystemIO, 0xAE10, 0x04) + Field (BNMR, DWordAcc, NoLock, WriteAsZeros) + { + BNUM, 32 + } + + Mutex (BLCK, 0x00) + Method (PCEJ, 2, NotSerialized) + { + Acquire (BLCK, 0xFFFF) + BNUM = Arg0 + B0EJ = (One << Arg1) + Release (BLCK) + Return (Zero) + } + } + + Scope (_SB) + { + Scope (PCI0) + { + Method (_PRT, 0, NotSerialized) // _PRT: PCI Routing Table + { + Local0 = Package (0x80){} + Local1 = Zero + While ((Local1 < 0x80)) + { + Local2 = (Local1 >> 0x02) + Local3 = ((Local1 + Local2) & 0x03) + If ((Local3 == Zero)) + { + Local4 = Package (0x04) + { + Zero, + Zero, + LNKD, + Zero + } + } + + If ((Local3 == One)) + { + If ((Local1 == 0x04)) + { + Local4 = Package (0x04) + { + Zero, + Zero, + LNKS, + Zero + } + } + Else + { + Local4 = Package (0x04) + { + Zero, + Zero, + LNKA, + Zero + } + } + } + + If ((Local3 == 0x02)) + { + Local4 = Package (0x04) + { + Zero, + Zero, + LNKB, + Zero + } + } + + If ((Local3 == 0x03)) + { + Local4 = Package (0x04) + { + Zero, + Zero, + LNKC, + Zero + } + } + + Local4 [Zero] = ((Local2 << 0x10) | 0xFFFF) + Local4 [One] = (Local1 & 0x03) + Local0 [Local1] = Local4 + Local1++ + } + + Return (Local0) + } + } + + Field (PCI0.ISA.P40C, ByteAcc, NoLock, Preserve) + { + PRQ0, 8, + PRQ1, 8, + PRQ2, 8, + PRQ3, 8 + } + + Method (IQST, 1, NotSerialized) + { + If ((0x80 & Arg0)) + { + Return (0x09) + } + + Return (0x0B) + } + + Method (IQCR, 1, Serialized) + { + Name (PRR0, ResourceTemplate () + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, _Y00) + { + 0x00000000, + } + }) + CreateDWordField (PRR0, \_SB.IQCR._Y00._INT, PRRI) // _INT: Interrupts + If ((Arg0 < 0x80)) + { + PRRI = Arg0 + } + + Return (PRR0) /* \_SB_.IQCR.PRR0 */ + } + + Device (LNKA) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQ0)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQ0 |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQ0)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQ0 = PRRI /* \_SB_.LNKA._SRS.PRRI */ + } + } + + Device (LNKB) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQ1)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQ1 |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQ1)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQ1 = PRRI /* \_SB_.LNKB._SRS.PRRI */ + } + } + + Device (LNKC) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x02) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQ2)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQ2 |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQ2)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQ2 = PRRI /* \_SB_.LNKC._SRS.PRRI */ + } + } + + Device (LNKD) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x03) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQ3)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQ3 |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQ3)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQ3 = PRRI /* \_SB_.LNKD._SRS.PRRI */ + } + } + + Device (LNKS) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x04) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000009, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (0x0B) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (_PRS) /* \_SB_.LNKS._PRS */ + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + } + + Scope (_SB) + { + Device (\_SB.PCI0.PRES) + { + Name (_HID, EisaId ("PNP0A06") /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "CPU Hotplug resources") // _UID: Unique ID + Mutex (CPLK, 0x00) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0xAF00, // Range Minimum + 0xAF00, // Range Maximum + 0x01, // Alignment + 0x0C, // Length + ) + }) + OperationRegion (PRST, SystemIO, 0xAF00, 0x0C) + Field (PRST, ByteAcc, NoLock, WriteAsZeros) + { + Offset (0x04), + CPEN, 1, + CINS, 1, + CRMV, 1, + CEJ0, 1, + Offset (0x05), + CCMD, 8 + } + + Field (PRST, DWordAcc, NoLock, Preserve) + { + CSEL, 32, + Offset (0x08), + CDAT, 32 + } + + Method (_INI, 0, Serialized) // _INI: Initialize + { + CSEL = Zero + } + } + + Device (\_SB.CPUS) + { + Name (_HID, "ACPI0010" /* Processor Container Device */) // _HID: Hardware ID + Name (_CID, EisaId ("PNP0A05") /* Generic Container Device */) // _CID: Compatible ID + Method (CTFY, 2, NotSerialized) + { + If ((Arg0 == Zero)) + { + Notify (C000, Arg1) + } + + If ((Arg0 == One)) + { + Notify (C001, Arg1) + } + + If ((Arg0 == 0x02)) + { + Notify (C002, Arg1) + } + + If ((Arg0 == 0x03)) + { + Notify (C003, Arg1) + } + + If ((Arg0 == 0x04)) + { + Notify (C004, Arg1) + } + + If ((Arg0 == 0x05)) + { + Notify (C005, Arg1) + } + } + + Method (CSTA, 1, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + Local0 = Zero + If ((\_SB.PCI0.PRES.CPEN == One)) + { + Local0 = 0x0F + } + + Release (\_SB.PCI0.PRES.CPLK) + Return (Local0) + } + + Method (CEJ0, 1, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + \_SB.PCI0.PRES.CEJ0 = One + Release (\_SB.PCI0.PRES.CPLK) + } + + Method (CSCN, 0, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + Local0 = One + While ((Local0 == One)) + { + Local0 = Zero + \_SB.PCI0.PRES.CCMD = Zero + If ((\_SB.PCI0.PRES.CINS == One)) + { + CTFY (\_SB.PCI0.PRES.CDAT, One) + \_SB.PCI0.PRES.CINS = One + Local0 = One + } + ElseIf ((\_SB.PCI0.PRES.CRMV == One)) + { + CTFY (\_SB.PCI0.PRES.CDAT, 0x03) + \_SB.PCI0.PRES.CRMV = One + Local0 = One + } + } + + Release (\_SB.PCI0.PRES.CPLK) + } + + Method (COST, 4, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + \_SB.PCI0.PRES.CCMD = One + \_SB.PCI0.PRES.CDAT = Arg1 + \_SB.PCI0.PRES.CCMD = 0x02 + \_SB.PCI0.PRES.CDAT = Arg2 + Release (\_SB.PCI0.PRES.CPLK) + } + + Processor (C000, 0x00, 0x00000000, 0x00) + { + Method (_STA, 0, Serialized) // _STA: Status + { + Return (CSTA (Zero)) + } + + Name (_MAT, Buffer (0x08) // _MAT: Multiple APIC Table Entry + { + 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 // ........ + }) + Method (_OST, 3, Serialized) // _OST: OSPM Status Indication + { + COST (Zero, Arg0, Arg1, Arg2) + } + + Name (_PXM, Zero) // _PXM: Device Proximity + } + + Processor (C001, 0x01, 0x00000000, 0x00) + { + Method (_STA, 0, Serialized) // _STA: Status + { + Return (CSTA (One)) + } + + Name (_MAT, Buffer (0x08) // _MAT: Multiple APIC Table Entry + { + 0x00, 0x08, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00 // ........ + }) + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + CEJ0 (One) + } + + Method (_OST, 3, Serialized) // _OST: OSPM Status Indication + { + COST (One, Arg0, Arg1, Arg2) + } + + Name (_PXM, Zero) // _PXM: Device Proximity + } + + Processor (C002, 0x02, 0x00000000, 0x00) + { + Method (_STA, 0, Serialized) // _STA: Status + { + Return (CSTA (0x02)) + } + + Name (_MAT, Buffer (0x08) // _MAT: Multiple APIC Table Entry + { + 0x00, 0x08, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00 // ........ + }) + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + CEJ0 (0x02) + } + + Method (_OST, 3, Serialized) // _OST: OSPM Status Indication + { + COST (0x02, Arg0, Arg1, Arg2) + } + + Name (_PXM, Zero) // _PXM: Device Proximity + } + + Processor (C003, 0x03, 0x00000000, 0x00) + { + Method (_STA, 0, Serialized) // _STA: Status + { + Return (CSTA (0x03)) + } + + Name (_MAT, Buffer (0x08) // _MAT: Multiple APIC Table Entry + { + 0x00, 0x08, 0x03, 0x04, 0x01, 0x00, 0x00, 0x00 // ........ + }) + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + CEJ0 (0x03) + } + + Method (_OST, 3, Serialized) // _OST: OSPM Status Indication + { + COST (0x03, Arg0, Arg1, Arg2) + } + + Name (_PXM, One) // _PXM: Device Proximity + } + + Processor (C004, 0x04, 0x00000000, 0x00) + { + Method (_STA, 0, Serialized) // _STA: Status + { + Return (CSTA (0x04)) + } + + Name (_MAT, Buffer (0x08) // _MAT: Multiple APIC Table Entry + { + 0x00, 0x08, 0x04, 0x05, 0x01, 0x00, 0x00, 0x00 // ........ + }) + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + CEJ0 (0x04) + } + + Method (_OST, 3, Serialized) // _OST: OSPM Status Indication + { + COST (0x04, Arg0, Arg1, Arg2) + } + + Name (_PXM, One) // _PXM: Device Proximity + } + + Processor (C005, 0x05, 0x00000000, 0x00) + { + Method (_STA, 0, Serialized) // _STA: Status + { + Return (CSTA (0x05)) + } + + Name (_MAT, Buffer (0x08) // _MAT: Multiple APIC Table Entry + { + 0x00, 0x08, 0x05, 0x06, 0x01, 0x00, 0x00, 0x00 // ........ + }) + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + CEJ0 (0x05) + } + + Method (_OST, 3, Serialized) // _OST: OSPM Status Indication + { + COST (0x05, Arg0, Arg1, Arg2) + } + + Name (_PXM, One) // _PXM: Device Proximity + } + } + } + + Method (\_GPE._E02, 0, NotSerialized) // _Exx: Edge-Triggered GPE, xx=0x00-0xFF + { + \_SB.CPUS.CSCN () + } + + Scope (_GPE) + { + Name (_HID, "ACPI0006" /* GPE Block Device */) // _HID: Hardware ID + Method (_E01, 0, NotSerialized) // _Exx: Edge-Triggered GPE, xx=0x00-0xFF + { + Acquire (\_SB.PCI0.BLCK, 0xFFFF) + \_SB.PCI0.PCNT () + Release (\_SB.PCI0.BLCK) + } + } + + Scope (\_SB.PCI0) + { + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode, + 0x0000, // Granularity + 0x0000, // Range Minimum + 0x00FF, // Range Maximum + 0x0000, // Translation Offset + 0x0100, // Length + ,, ) + IO (Decode16, + 0x0CF8, // Range Minimum + 0x0CF8, // Range Maximum + 0x01, // Alignment + 0x08, // Length + ) + WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, + 0x0000, // Granularity + 0x0000, // Range Minimum + 0x0CF7, // Range Maximum + 0x0000, // Translation Offset + 0x0CF8, // Length + ,, , TypeStatic, DenseTranslation) + WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, + 0x0000, // Granularity + 0x0D00, // Range Minimum + 0xFFFF, // Range Maximum + 0x0000, // Translation Offset + 0xF300, // Length + ,, , TypeStatic, DenseTranslation) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x00000000, // Granularity + 0x000A0000, // Range Minimum + 0x000BFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0x00020000, // Length + ,, , AddressRangeMemory, TypeStatic) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite, + 0x00000000, // Granularity + 0x08000000, // Range Minimum + 0xFEBFFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0xF6C00000, // Length + ,, , AddressRangeMemory, TypeStatic) + QWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x0000000000000000, // Granularity + 0x0000000100000000, // Range Minimum + 0x000000017FFFFFFF, // Range Maximum + 0x0000000000000000, // Translation Offset + 0x0000000080000000, // Length + ,, , AddressRangeMemory, TypeStatic) + }) + Device (GPE0) + { + Name (_HID, "PNP0A06" /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "GPE0 resources") // _UID: Unique ID + Name (_STA, 0x0B) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0xAFE0, // Range Minimum + 0xAFE0, // Range Maximum + 0x01, // Alignment + 0x04, // Length + ) + }) + } + + Device (PHPR) + { + Name (_HID, "PNP0A06" /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "PCI Hotplug resources") // _UID: Unique ID + Name (_STA, 0x0B) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0xAE00, // Range Minimum + 0xAE00, // Range Maximum + 0x01, // Alignment + 0x14, // Length + ) + }) + } + } + + Scope (\) + { + Name (_S3, Package (0x04) // _S3_: S3 System State + { + One, + One, + Zero, + Zero + }) + Name (_S4, Package (0x04) // _S4_: S4 System State + { + 0x02, + 0x02, + Zero, + Zero + }) + Name (_S5, Package (0x04) // _S5_: S5 System State + { + Zero, + Zero, + Zero, + Zero + }) + } + + Scope (\_SB.PCI0) + { + Device (FWCF) + { + Name (_HID, "QEMU0002") // _HID: Hardware ID + Name (_STA, 0x0B) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0510, // Range Minimum + 0x0510, // Range Maximum + 0x01, // Alignment + 0x0C, // Length + ) + }) + } + } + + Scope (\_SB) + { + Scope (PCI0) + { + Name (BSEL, Zero) + Device (S00) + { + Name (_ADR, Zero) // _ADR: Address + } + + Device (S10) + { + Name (_ADR, 0x00020000) // _ADR: Address + Method (_S1D, 0, NotSerialized) // _S1D: S1 Device State + { + Return (Zero) + } + + Method (_S2D, 0, NotSerialized) // _S2D: S2 Device State + { + Return (Zero) + } + + Method (_S3D, 0, NotSerialized) // _S3D: S3 Device State + { + Return (Zero) + } + } + + Device (S18) + { + Name (_SUN, 0x03) // _SUN: Slot User Number + Name (_ADR, 0x00030000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S20) + { + Name (_SUN, 0x04) // _SUN: Slot User Number + Name (_ADR, 0x00040000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S28) + { + Name (_SUN, 0x05) // _SUN: Slot User Number + Name (_ADR, 0x00050000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S30) + { + Name (_SUN, 0x06) // _SUN: Slot User Number + Name (_ADR, 0x00060000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S38) + { + Name (_SUN, 0x07) // _SUN: Slot User Number + Name (_ADR, 0x00070000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S40) + { + Name (_SUN, 0x08) // _SUN: Slot User Number + Name (_ADR, 0x00080000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S48) + { + Name (_SUN, 0x09) // _SUN: Slot User Number + Name (_ADR, 0x00090000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S50) + { + Name (_SUN, 0x0A) // _SUN: Slot User Number + Name (_ADR, 0x000A0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S58) + { + Name (_SUN, 0x0B) // _SUN: Slot User Number + Name (_ADR, 0x000B0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S60) + { + Name (_SUN, 0x0C) // _SUN: Slot User Number + Name (_ADR, 0x000C0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S68) + { + Name (_SUN, 0x0D) // _SUN: Slot User Number + Name (_ADR, 0x000D0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S70) + { + Name (_SUN, 0x0E) // _SUN: Slot User Number + Name (_ADR, 0x000E0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S78) + { + Name (_SUN, 0x0F) // _SUN: Slot User Number + Name (_ADR, 0x000F0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S80) + { + Name (_SUN, 0x10) // _SUN: Slot User Number + Name (_ADR, 0x00100000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S88) + { + Name (_SUN, 0x11) // _SUN: Slot User Number + Name (_ADR, 0x00110000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S90) + { + Name (_SUN, 0x12) // _SUN: Slot User Number + Name (_ADR, 0x00120000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S98) + { + Name (_SUN, 0x13) // _SUN: Slot User Number + Name (_ADR, 0x00130000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SA0) + { + Name (_SUN, 0x14) // _SUN: Slot User Number + Name (_ADR, 0x00140000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SA8) + { + Name (_SUN, 0x15) // _SUN: Slot User Number + Name (_ADR, 0x00150000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SB0) + { + Name (_SUN, 0x16) // _SUN: Slot User Number + Name (_ADR, 0x00160000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SB8) + { + Name (_SUN, 0x17) // _SUN: Slot User Number + Name (_ADR, 0x00170000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SC0) + { + Name (_SUN, 0x18) // _SUN: Slot User Number + Name (_ADR, 0x00180000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SC8) + { + Name (_SUN, 0x19) // _SUN: Slot User Number + Name (_ADR, 0x00190000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SD0) + { + Name (_SUN, 0x1A) // _SUN: Slot User Number + Name (_ADR, 0x001A0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SD8) + { + Name (_SUN, 0x1B) // _SUN: Slot User Number + Name (_ADR, 0x001B0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SE0) + { + Name (_SUN, 0x1C) // _SUN: Slot User Number + Name (_ADR, 0x001C0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SE8) + { + Name (_SUN, 0x1D) // _SUN: Slot User Number + Name (_ADR, 0x001D0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SF0) + { + Name (_SUN, 0x1E) // _SUN: Slot User Number + Name (_ADR, 0x001E0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SF8) + { + Name (_SUN, 0x1F) // _SUN: Slot User Number + Name (_ADR, 0x001F0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Method (DVNT, 2, NotSerialized) + { + If ((Arg0 & 0x08)) + { + Notify (S18, Arg1) + } + + If ((Arg0 & 0x10)) + { + Notify (S20, Arg1) + } + + If ((Arg0 & 0x20)) + { + Notify (S28, Arg1) + } + + If ((Arg0 & 0x40)) + { + Notify (S30, Arg1) + } + + If ((Arg0 & 0x80)) + { + Notify (S38, Arg1) + } + + If ((Arg0 & 0x0100)) + { + Notify (S40, Arg1) + } + + If ((Arg0 & 0x0200)) + { + Notify (S48, Arg1) + } + + If ((Arg0 & 0x0400)) + { + Notify (S50, Arg1) + } + + If ((Arg0 & 0x0800)) + { + Notify (S58, Arg1) + } + + If ((Arg0 & 0x1000)) + { + Notify (S60, Arg1) + } + + If ((Arg0 & 0x2000)) + { + Notify (S68, Arg1) + } + + If ((Arg0 & 0x4000)) + { + Notify (S70, Arg1) + } + + If ((Arg0 & 0x8000)) + { + Notify (S78, Arg1) + } + + If ((Arg0 & 0x00010000)) + { + Notify (S80, Arg1) + } + + If ((Arg0 & 0x00020000)) + { + Notify (S88, Arg1) + } + + If ((Arg0 & 0x00040000)) + { + Notify (S90, Arg1) + } + + If ((Arg0 & 0x00080000)) + { + Notify (S98, Arg1) + } + + If ((Arg0 & 0x00100000)) + { + Notify (SA0, Arg1) + } + + If ((Arg0 & 0x00200000)) + { + Notify (SA8, Arg1) + } + + If ((Arg0 & 0x00400000)) + { + Notify (SB0, Arg1) + } + + If ((Arg0 & 0x00800000)) + { + Notify (SB8, Arg1) + } + + If ((Arg0 & 0x01000000)) + { + Notify (SC0, Arg1) + } + + If ((Arg0 & 0x02000000)) + { + Notify (SC8, Arg1) + } + + If ((Arg0 & 0x04000000)) + { + Notify (SD0, Arg1) + } + + If ((Arg0 & 0x08000000)) + { + Notify (SD8, Arg1) + } + + If ((Arg0 & 0x10000000)) + { + Notify (SE0, Arg1) + } + + If ((Arg0 & 0x20000000)) + { + Notify (SE8, Arg1) + } + + If ((Arg0 & 0x40000000)) + { + Notify (SF0, Arg1) + } + + If ((Arg0 & 0x80000000)) + { + Notify (SF8, Arg1) + } + } + + Method (PCNT, 0, NotSerialized) + { + BNUM = Zero + DVNT (PCIU, One) + DVNT (PCID, 0x03) + } + } + } +} + diff --git a/tests/data/acpi/pc/DSDT.dimmpxm.dsl b/tests/data/acpi/pc/DSDT.dimmpxm.dsl new file mode 100644 index 0000000000..798056147b --- /dev/null +++ b/tests/data/acpi/pc/DSDT.dimmpxm.dsl @@ -0,0 +1,1719 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembling to symbolic ASL+ operators + * + * Disassembly of tests/data/acpi/pc/DSDT.dimmpxm, Tue Aug 4 11:14:15 2020 + * + * Original Table Header: + * Signature "DSDT" + * Length 0x000019BB (6587) + * Revision 0x01 **** 32-bit table (V1), no 64-bit math support + * Checksum 0x21 + * OEM ID "BOCHS " + * OEM Table ID "BXPCDSDT" + * OEM Revision 0x00000001 (1) + * Compiler ID "BXPC" + * Compiler Version 0x00000001 (1) + */ +DefinitionBlock ("", "DSDT", 1, "BOCHS ", "BXPCDSDT", 0x00000001) +{ + External (_SB_.NVDR, UnknownObj) + + Scope (\) + { + OperationRegion (DBG, SystemIO, 0x0402, One) + Field (DBG, ByteAcc, NoLock, Preserve) + { + DBGB, 8 + } + + Method (DBUG, 1, NotSerialized) + { + ToHexString (Arg0, Local0) + ToBuffer (Local0, Local0) + Local1 = (SizeOf (Local0) - One) + Local2 = Zero + While ((Local2 < Local1)) + { + DBGB = DerefOf (Local0 [Local2]) + Local2++ + } + + DBGB = 0x0A + } + } + + Scope (_SB) + { + Device (PCI0) + { + Name (_HID, EisaId ("PNP0A03") /* PCI Bus */) // _HID: Hardware ID + Name (_ADR, Zero) // _ADR: Address + Name (_UID, Zero) // _UID: Unique ID + } + } + + Scope (_SB) + { + Device (HPET) + { + Name (_HID, EisaId ("PNP0103") /* HPET System Timer */) // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + OperationRegion (HPTM, SystemMemory, 0xFED00000, 0x0400) + Field (HPTM, DWordAcc, Lock, Preserve) + { + VEND, 32, + PRD, 32 + } + + Method (_STA, 0, NotSerialized) // _STA: Status + { + Local0 = VEND /* \_SB_.HPET.VEND */ + Local1 = PRD /* \_SB_.HPET.PRD_ */ + Local0 >>= 0x10 + If (((Local0 == Zero) || (Local0 == 0xFFFF))) + { + Return (Zero) + } + + If (((Local1 == Zero) || (Local1 > 0x05F5E100))) + { + Return (Zero) + } + + Return (0x0F) + } + + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadOnly, + 0xFED00000, // Address Base + 0x00000400, // Address Length + ) + }) + } + } + + Scope (_SB.PCI0) + { + Device (ISA) + { + Name (_ADR, 0x00010000) // _ADR: Address + OperationRegion (P40C, PCI_Config, 0x60, 0x04) + } + } + + Scope (_SB.PCI0.ISA) + { + Device (KBD) + { + Name (_HID, EisaId ("PNP0303") /* IBM Enhanced Keyboard (101/102-key, PS/2 Mouse) */) // _HID: Hardware ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0060, // Range Minimum + 0x0060, // Range Maximum + 0x01, // Alignment + 0x01, // Length + ) + IO (Decode16, + 0x0064, // Range Minimum + 0x0064, // Range Maximum + 0x01, // Alignment + 0x01, // Length + ) + IRQNoFlags () + {1} + }) + } + + Device (MOU) + { + Name (_HID, EisaId ("PNP0F13") /* PS/2 Mouse */) // _HID: Hardware ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IRQNoFlags () + {12} + }) + } + + Device (FDC0) + { + Name (_HID, EisaId ("PNP0700")) // _HID: Hardware ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x03F2, // Range Minimum + 0x03F2, // Range Maximum + 0x00, // Alignment + 0x04, // Length + ) + IO (Decode16, + 0x03F7, // Range Minimum + 0x03F7, // Range Maximum + 0x00, // Alignment + 0x01, // Length + ) + IRQNoFlags () + {6} + DMA (Compatibility, NotBusMaster, Transfer8, ) + {2} + }) + Device (FLPA) + { + Name (_ADR, Zero) // _ADR: Address + Name (_FDI, Package (0x10) // _FDI: Floppy Drive Information + { + Zero, + 0x05, + 0x4F, + 0x30, + One, + 0xAF, + 0x02, + 0x25, + 0x02, + 0x12, + 0x1B, + 0xFF, + 0x6C, + 0xF6, + 0x0F, + 0x08 + }) + } + + Name (_FDE, Buffer (0x14) // _FDE: Floppy Disk Enumerate + { + /* 0000 */ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........ + /* 0008 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........ + /* 0010 */ 0x02, 0x00, 0x00, 0x00 // .... + }) + } + + Device (LPT1) + { + Name (_HID, EisaId ("PNP0400") /* Standard LPT Parallel Port */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0378, // Range Minimum + 0x0378, // Range Maximum + 0x08, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {7} + }) + } + + Device (COM1) + { + Name (_HID, EisaId ("PNP0501") /* 16550A-compatible COM Serial Port */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x03F8, // Range Minimum + 0x03F8, // Range Maximum + 0x00, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {4} + }) + } + + Device (RTC) + { + Name (_HID, EisaId ("PNP0B00") /* AT Real-Time Clock */) // _HID: Hardware ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0070, // Range Minimum + 0x0070, // Range Maximum + 0x01, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {8} + }) + } + } + + Scope (_SB.PCI0) + { + OperationRegion (PCST, SystemIO, 0xAE00, 0x08) + Field (PCST, DWordAcc, NoLock, WriteAsZeros) + { + PCIU, 32, + PCID, 32 + } + + OperationRegion (SEJ, SystemIO, 0xAE08, 0x04) + Field (SEJ, DWordAcc, NoLock, WriteAsZeros) + { + B0EJ, 32 + } + + OperationRegion (BNMR, SystemIO, 0xAE10, 0x04) + Field (BNMR, DWordAcc, NoLock, WriteAsZeros) + { + BNUM, 32 + } + + Mutex (BLCK, 0x00) + Method (PCEJ, 2, NotSerialized) + { + Acquire (BLCK, 0xFFFF) + BNUM = Arg0 + B0EJ = (One << Arg1) + Release (BLCK) + Return (Zero) + } + } + + Scope (_SB) + { + Scope (PCI0) + { + Method (_PRT, 0, NotSerialized) // _PRT: PCI Routing Table + { + Local0 = Package (0x80){} + Local1 = Zero + While ((Local1 < 0x80)) + { + Local2 = (Local1 >> 0x02) + Local3 = ((Local1 + Local2) & 0x03) + If ((Local3 == Zero)) + { + Local4 = Package (0x04) + { + Zero, + Zero, + LNKD, + Zero + } + } + + If ((Local3 == One)) + { + If ((Local1 == 0x04)) + { + Local4 = Package (0x04) + { + Zero, + Zero, + LNKS, + Zero + } + } + Else + { + Local4 = Package (0x04) + { + Zero, + Zero, + LNKA, + Zero + } + } + } + + If ((Local3 == 0x02)) + { + Local4 = Package (0x04) + { + Zero, + Zero, + LNKB, + Zero + } + } + + If ((Local3 == 0x03)) + { + Local4 = Package (0x04) + { + Zero, + Zero, + LNKC, + Zero + } + } + + Local4 [Zero] = ((Local2 << 0x10) | 0xFFFF) + Local4 [One] = (Local1 & 0x03) + Local0 [Local1] = Local4 + Local1++ + } + + Return (Local0) + } + } + + Field (PCI0.ISA.P40C, ByteAcc, NoLock, Preserve) + { + PRQ0, 8, + PRQ1, 8, + PRQ2, 8, + PRQ3, 8 + } + + Method (IQST, 1, NotSerialized) + { + If ((0x80 & Arg0)) + { + Return (0x09) + } + + Return (0x0B) + } + + Method (IQCR, 1, Serialized) + { + Name (PRR0, ResourceTemplate () + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, _Y00) + { + 0x00000000, + } + }) + CreateDWordField (PRR0, \_SB.IQCR._Y00._INT, PRRI) // _INT: Interrupts + If ((Arg0 < 0x80)) + { + PRRI = Arg0 + } + + Return (PRR0) /* \_SB_.IQCR.PRR0 */ + } + + Device (LNKA) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQ0)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQ0 |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQ0)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQ0 = PRRI /* \_SB_.LNKA._SRS.PRRI */ + } + } + + Device (LNKB) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQ1)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQ1 |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQ1)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQ1 = PRRI /* \_SB_.LNKB._SRS.PRRI */ + } + } + + Device (LNKC) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x02) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQ2)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQ2 |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQ2)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQ2 = PRRI /* \_SB_.LNKC._SRS.PRRI */ + } + } + + Device (LNKD) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x03) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQ3)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQ3 |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQ3)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQ3 = PRRI /* \_SB_.LNKD._SRS.PRRI */ + } + } + + Device (LNKS) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x04) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000009, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (0x0B) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (_PRS) /* \_SB_.LNKS._PRS */ + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + } + + Scope (_SB) + { + Device (\_SB.PCI0.PRES) + { + Name (_HID, EisaId ("PNP0A06") /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "CPU Hotplug resources") // _UID: Unique ID + Mutex (CPLK, 0x00) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0xAF00, // Range Minimum + 0xAF00, // Range Maximum + 0x01, // Alignment + 0x0C, // Length + ) + }) + OperationRegion (PRST, SystemIO, 0xAF00, 0x0C) + Field (PRST, ByteAcc, NoLock, WriteAsZeros) + { + Offset (0x04), + CPEN, 1, + CINS, 1, + CRMV, 1, + CEJ0, 1, + Offset (0x05), + CCMD, 8 + } + + Field (PRST, DWordAcc, NoLock, Preserve) + { + CSEL, 32, + Offset (0x08), + CDAT, 32 + } + + Method (_INI, 0, Serialized) // _INI: Initialize + { + CSEL = Zero + } + } + + Device (\_SB.CPUS) + { + Name (_HID, "ACPI0010" /* Processor Container Device */) // _HID: Hardware ID + Name (_CID, EisaId ("PNP0A05") /* Generic Container Device */) // _CID: Compatible ID + Method (CTFY, 2, NotSerialized) + { + If ((Arg0 == Zero)) + { + Notify (C000, Arg1) + } + + If ((Arg0 == One)) + { + Notify (C001, Arg1) + } + + If ((Arg0 == 0x02)) + { + Notify (C002, Arg1) + } + + If ((Arg0 == 0x03)) + { + Notify (C003, Arg1) + } + } + + Method (CSTA, 1, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + Local0 = Zero + If ((\_SB.PCI0.PRES.CPEN == One)) + { + Local0 = 0x0F + } + + Release (\_SB.PCI0.PRES.CPLK) + Return (Local0) + } + + Method (CEJ0, 1, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + \_SB.PCI0.PRES.CEJ0 = One + Release (\_SB.PCI0.PRES.CPLK) + } + + Method (CSCN, 0, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + Local0 = One + While ((Local0 == One)) + { + Local0 = Zero + \_SB.PCI0.PRES.CCMD = Zero + If ((\_SB.PCI0.PRES.CINS == One)) + { + CTFY (\_SB.PCI0.PRES.CDAT, One) + \_SB.PCI0.PRES.CINS = One + Local0 = One + } + ElseIf ((\_SB.PCI0.PRES.CRMV == One)) + { + CTFY (\_SB.PCI0.PRES.CDAT, 0x03) + \_SB.PCI0.PRES.CRMV = One + Local0 = One + } + } + + Release (\_SB.PCI0.PRES.CPLK) + } + + Method (COST, 4, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + \_SB.PCI0.PRES.CCMD = One + \_SB.PCI0.PRES.CDAT = Arg1 + \_SB.PCI0.PRES.CCMD = 0x02 + \_SB.PCI0.PRES.CDAT = Arg2 + Release (\_SB.PCI0.PRES.CPLK) + } + + Processor (C000, 0x00, 0x00000000, 0x00) + { + Method (_STA, 0, Serialized) // _STA: Status + { + Return (CSTA (Zero)) + } + + Name (_MAT, Buffer (0x08) // _MAT: Multiple APIC Table Entry + { + 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 // ........ + }) + Method (_OST, 3, Serialized) // _OST: OSPM Status Indication + { + COST (Zero, Arg0, Arg1, Arg2) + } + + Name (_PXM, Zero) // _PXM: Device Proximity + } + + Processor (C001, 0x01, 0x00000000, 0x00) + { + Method (_STA, 0, Serialized) // _STA: Status + { + Return (CSTA (One)) + } + + Name (_MAT, Buffer (0x08) // _MAT: Multiple APIC Table Entry + { + 0x00, 0x08, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00 // ........ + }) + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + CEJ0 (One) + } + + Method (_OST, 3, Serialized) // _OST: OSPM Status Indication + { + COST (One, Arg0, Arg1, Arg2) + } + + Name (_PXM, One) // _PXM: Device Proximity + } + + Processor (C002, 0x02, 0x00000000, 0x00) + { + Method (_STA, 0, Serialized) // _STA: Status + { + Return (CSTA (0x02)) + } + + Name (_MAT, Buffer (0x08) // _MAT: Multiple APIC Table Entry + { + 0x00, 0x08, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00 // ........ + }) + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + CEJ0 (0x02) + } + + Method (_OST, 3, Serialized) // _OST: OSPM Status Indication + { + COST (0x02, Arg0, Arg1, Arg2) + } + + Name (_PXM, 0x02) // _PXM: Device Proximity + } + + Processor (C003, 0x03, 0x00000000, 0x00) + { + Method (_STA, 0, Serialized) // _STA: Status + { + Return (CSTA (0x03)) + } + + Name (_MAT, Buffer (0x08) // _MAT: Multiple APIC Table Entry + { + 0x00, 0x08, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00 // ........ + }) + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + CEJ0 (0x03) + } + + Method (_OST, 3, Serialized) // _OST: OSPM Status Indication + { + COST (0x03, Arg0, Arg1, Arg2) + } + + Name (_PXM, 0x03) // _PXM: Device Proximity + } + } + } + + Method (\_GPE._E02, 0, NotSerialized) // _Exx: Edge-Triggered GPE, xx=0x00-0xFF + { + \_SB.CPUS.CSCN () + } + + Device (\_SB.PCI0.MHPD) + { + Name (_HID, "PNP0A06" /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "Memory hotplug resources") // _UID: Unique ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0A00, // Range Minimum + 0x0A00, // Range Maximum + 0x00, // Alignment + 0x18, // Length + ) + }) + OperationRegion (HPMR, SystemIO, 0x0A00, 0x18) + } + + Device (\_SB.MHPC) + { + Name (_HID, "PNP0A06" /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "DIMM devices") // _UID: Unique ID + Name (MDNR, 0x03) + Field (\_SB.PCI0.MHPD.HPMR, DWordAcc, NoLock, Preserve) + { + MRBL, 32, + MRBH, 32, + MRLL, 32, + MRLH, 32, + MPX, 32 + } + + Field (\_SB.PCI0.MHPD.HPMR, ByteAcc, NoLock, WriteAsZeros) + { + Offset (0x14), + MES, 1, + MINS, 1, + MRMV, 1, + MEJ, 1 + } + + Field (\_SB.PCI0.MHPD.HPMR, DWordAcc, NoLock, Preserve) + { + MSEL, 32, + MOEV, 32, + MOSC, 32 + } + + Method (_STA, 0, NotSerialized) // _STA: Status + { + If ((MDNR == Zero)) + { + Return (Zero) + } + + Return (0x0B) + } + + Mutex (MLCK, 0x00) + Method (MSCN, 0, NotSerialized) + { + If ((MDNR == Zero)) + { + Return (Zero) + } + + Local0 = Zero + Acquire (MLCK, 0xFFFF) + While ((Local0 < MDNR)) + { + MSEL = Local0 + If ((MINS == One)) + { + MTFY (Local0, One) + MINS = One + } + ElseIf ((MRMV == One)) + { + MTFY (Local0, 0x03) + MRMV = One + } + + Local0 += One + } + + Release (MLCK) + Return (One) + } + + Method (MRST, 1, NotSerialized) + { + Local0 = Zero + Acquire (MLCK, 0xFFFF) + MSEL = ToInteger (Arg0) + If ((MES == One)) + { + Local0 = 0x0F + } + + Release (MLCK) + Return (Local0) + } + + Method (MCRS, 1, Serialized) + { + Acquire (MLCK, 0xFFFF) + MSEL = ToInteger (Arg0) + Name (MR64, ResourceTemplate () + { + QWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x0000000000000000, // Granularity + 0x0000000000000000, // Range Minimum + 0xFFFFFFFFFFFFFFFE, // Range Maximum + 0x0000000000000000, // Translation Offset + 0xFFFFFFFFFFFFFFFF, // Length + ,, _Y01, AddressRangeMemory, TypeStatic) + }) + CreateDWordField (MR64, \_SB.MHPC.MCRS._Y01._MIN, MINL) // _MIN: Minimum Base Address + CreateDWordField (MR64, 0x12, MINH) + CreateDWordField (MR64, \_SB.MHPC.MCRS._Y01._LEN, LENL) // _LEN: Length + CreateDWordField (MR64, 0x2A, LENH) + CreateDWordField (MR64, \_SB.MHPC.MCRS._Y01._MAX, MAXL) // _MAX: Maximum Base Address + CreateDWordField (MR64, 0x1A, MAXH) + MINH = MRBH /* \_SB_.MHPC.MRBH */ + MINL = MRBL /* \_SB_.MHPC.MRBL */ + LENH = MRLH /* \_SB_.MHPC.MRLH */ + LENL = MRLL /* \_SB_.MHPC.MRLL */ + MAXL = (MINL + LENL) /* \_SB_.MHPC.MCRS.LENL */ + MAXH = (MINH + LENH) /* \_SB_.MHPC.MCRS.LENH */ + If ((MAXL < MINL)) + { + MAXH += One + } + + If ((MAXL < One)) + { + MAXH -= One + } + + MAXL -= One + If ((MAXH == Zero)) + { + Name (MR32, ResourceTemplate () + { + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x00000000, // Granularity + 0x00000000, // Range Minimum + 0xFFFFFFFE, // Range Maximum + 0x00000000, // Translation Offset + 0xFFFFFFFF, // Length + ,, _Y02, AddressRangeMemory, TypeStatic) + }) + CreateDWordField (MR32, \_SB.MHPC.MCRS._Y02._MIN, MIN) // _MIN: Minimum Base Address + CreateDWordField (MR32, \_SB.MHPC.MCRS._Y02._MAX, MAX) // _MAX: Maximum Base Address + CreateDWordField (MR32, \_SB.MHPC.MCRS._Y02._LEN, LEN) // _LEN: Length + MIN = MINL /* \_SB_.MHPC.MCRS.MINL */ + MAX = MAXL /* \_SB_.MHPC.MCRS.MAXL */ + LEN = LENL /* \_SB_.MHPC.MCRS.LENL */ + Release (MLCK) + Return (MR32) /* \_SB_.MHPC.MCRS.MR32 */ + } + + Release (MLCK) + Return (MR64) /* \_SB_.MHPC.MCRS.MR64 */ + } + + Method (MPXM, 1, NotSerialized) + { + Acquire (MLCK, 0xFFFF) + MSEL = ToInteger (Arg0) + Local0 = MPX /* \_SB_.MHPC.MPX_ */ + Release (MLCK) + Return (Local0) + } + + Method (MOST, 4, NotSerialized) + { + Acquire (MLCK, 0xFFFF) + MSEL = ToInteger (Arg0) + MOEV = Arg1 + MOSC = Arg2 + Release (MLCK) + } + + Method (MEJ0, 2, NotSerialized) + { + Acquire (MLCK, 0xFFFF) + MSEL = ToInteger (Arg0) + MEJ = One + Release (MLCK) + } + + Device (MP00) + { + Name (_UID, "0x00") // _UID: Unique ID + Name (_HID, EisaId ("PNP0C80") /* Memory Device */) // _HID: Hardware ID + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (MCRS (_UID)) + } + + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (MRST (_UID)) + } + + Method (_PXM, 0, NotSerialized) // _PXM: Device Proximity + { + Return (MPXM (_UID)) + } + + Method (_OST, 3, NotSerialized) // _OST: OSPM Status Indication + { + MOST (_UID, Arg0, Arg1, Arg2) + } + + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + MEJ0 (_UID, Arg0) + } + } + + Device (MP01) + { + Name (_UID, "0x01") // _UID: Unique ID + Name (_HID, EisaId ("PNP0C80") /* Memory Device */) // _HID: Hardware ID + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (MCRS (_UID)) + } + + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (MRST (_UID)) + } + + Method (_PXM, 0, NotSerialized) // _PXM: Device Proximity + { + Return (MPXM (_UID)) + } + + Method (_OST, 3, NotSerialized) // _OST: OSPM Status Indication + { + MOST (_UID, Arg0, Arg1, Arg2) + } + + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + MEJ0 (_UID, Arg0) + } + } + + Device (MP02) + { + Name (_UID, "0x02") // _UID: Unique ID + Name (_HID, EisaId ("PNP0C80") /* Memory Device */) // _HID: Hardware ID + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (MCRS (_UID)) + } + + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (MRST (_UID)) + } + + Method (_PXM, 0, NotSerialized) // _PXM: Device Proximity + { + Return (MPXM (_UID)) + } + + Method (_OST, 3, NotSerialized) // _OST: OSPM Status Indication + { + MOST (_UID, Arg0, Arg1, Arg2) + } + + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + MEJ0 (_UID, Arg0) + } + } + + Method (MTFY, 2, NotSerialized) + { + If ((Arg0 == Zero)) + { + Notify (MP00, Arg1) + } + + If ((Arg0 == One)) + { + Notify (MP01, Arg1) + } + + If ((Arg0 == 0x02)) + { + Notify (MP02, Arg1) + } + } + } + + Method (\_GPE._E03, 0, NotSerialized) // _Exx: Edge-Triggered GPE, xx=0x00-0xFF + { + \_SB.MHPC.MSCN () + } + + Scope (_GPE) + { + Name (_HID, "ACPI0006" /* GPE Block Device */) // _HID: Hardware ID + Method (_E01, 0, NotSerialized) // _Exx: Edge-Triggered GPE, xx=0x00-0xFF + { + Acquire (\_SB.PCI0.BLCK, 0xFFFF) + \_SB.PCI0.PCNT () + Release (\_SB.PCI0.BLCK) + } + + Method (_E04, 0, NotSerialized) // _Exx: Edge-Triggered GPE, xx=0x00-0xFF + { + Notify (\_SB.NVDR, 0x80) // Status Change + } + } + + Scope (\_SB.PCI0) + { + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode, + 0x0000, // Granularity + 0x0000, // Range Minimum + 0x00FF, // Range Maximum + 0x0000, // Translation Offset + 0x0100, // Length + ,, ) + IO (Decode16, + 0x0CF8, // Range Minimum + 0x0CF8, // Range Maximum + 0x01, // Alignment + 0x08, // Length + ) + WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, + 0x0000, // Granularity + 0x0000, // Range Minimum + 0x0CF7, // Range Maximum + 0x0000, // Translation Offset + 0x0CF8, // Length + ,, , TypeStatic, DenseTranslation) + WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, + 0x0000, // Granularity + 0x0D00, // Range Minimum + 0xFFFF, // Range Maximum + 0x0000, // Translation Offset + 0xF300, // Length + ,, , TypeStatic, DenseTranslation) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x00000000, // Granularity + 0x000A0000, // Range Minimum + 0x000BFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0x00020000, // Length + ,, , AddressRangeMemory, TypeStatic) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite, + 0x00000000, // Granularity + 0x08000000, // Range Minimum + 0xFEBFFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0xF6C00000, // Length + ,, , AddressRangeMemory, TypeStatic) + QWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x0000000000000000, // Granularity + 0x0000000200000000, // Range Minimum + 0x000000027FFFFFFF, // Range Maximum + 0x0000000000000000, // Translation Offset + 0x0000000080000000, // Length + ,, , AddressRangeMemory, TypeStatic) + }) + Device (GPE0) + { + Name (_HID, "PNP0A06" /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "GPE0 resources") // _UID: Unique ID + Name (_STA, 0x0B) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0xAFE0, // Range Minimum + 0xAFE0, // Range Maximum + 0x01, // Alignment + 0x04, // Length + ) + }) + } + + Device (PHPR) + { + Name (_HID, "PNP0A06" /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "PCI Hotplug resources") // _UID: Unique ID + Name (_STA, 0x0B) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0xAE00, // Range Minimum + 0xAE00, // Range Maximum + 0x01, // Alignment + 0x14, // Length + ) + }) + } + } + + Scope (\) + { + Name (_S3, Package (0x04) // _S3_: S3 System State + { + One, + One, + Zero, + Zero + }) + Name (_S4, Package (0x04) // _S4_: S4 System State + { + 0x02, + 0x02, + Zero, + Zero + }) + Name (_S5, Package (0x04) // _S5_: S5 System State + { + Zero, + Zero, + Zero, + Zero + }) + } + + Scope (\_SB.PCI0) + { + Device (FWCF) + { + Name (_HID, "QEMU0002") // _HID: Hardware ID + Name (_STA, 0x0B) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0510, // Range Minimum + 0x0510, // Range Maximum + 0x01, // Alignment + 0x0C, // Length + ) + }) + } + } + + Scope (\_SB) + { + Scope (PCI0) + { + Name (BSEL, Zero) + Device (S00) + { + Name (_ADR, Zero) // _ADR: Address + } + + Device (S10) + { + Name (_ADR, 0x00020000) // _ADR: Address + Method (_S1D, 0, NotSerialized) // _S1D: S1 Device State + { + Return (Zero) + } + + Method (_S2D, 0, NotSerialized) // _S2D: S2 Device State + { + Return (Zero) + } + + Method (_S3D, 0, NotSerialized) // _S3D: S3 Device State + { + Return (Zero) + } + } + + Device (S18) + { + Name (_SUN, 0x03) // _SUN: Slot User Number + Name (_ADR, 0x00030000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S20) + { + Name (_SUN, 0x04) // _SUN: Slot User Number + Name (_ADR, 0x00040000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S28) + { + Name (_SUN, 0x05) // _SUN: Slot User Number + Name (_ADR, 0x00050000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S30) + { + Name (_SUN, 0x06) // _SUN: Slot User Number + Name (_ADR, 0x00060000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S38) + { + Name (_SUN, 0x07) // _SUN: Slot User Number + Name (_ADR, 0x00070000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S40) + { + Name (_SUN, 0x08) // _SUN: Slot User Number + Name (_ADR, 0x00080000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S48) + { + Name (_SUN, 0x09) // _SUN: Slot User Number + Name (_ADR, 0x00090000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S50) + { + Name (_SUN, 0x0A) // _SUN: Slot User Number + Name (_ADR, 0x000A0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S58) + { + Name (_SUN, 0x0B) // _SUN: Slot User Number + Name (_ADR, 0x000B0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S60) + { + Name (_SUN, 0x0C) // _SUN: Slot User Number + Name (_ADR, 0x000C0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S68) + { + Name (_SUN, 0x0D) // _SUN: Slot User Number + Name (_ADR, 0x000D0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S70) + { + Name (_SUN, 0x0E) // _SUN: Slot User Number + Name (_ADR, 0x000E0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S78) + { + Name (_SUN, 0x0F) // _SUN: Slot User Number + Name (_ADR, 0x000F0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S80) + { + Name (_SUN, 0x10) // _SUN: Slot User Number + Name (_ADR, 0x00100000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S88) + { + Name (_SUN, 0x11) // _SUN: Slot User Number + Name (_ADR, 0x00110000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S90) + { + Name (_SUN, 0x12) // _SUN: Slot User Number + Name (_ADR, 0x00120000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S98) + { + Name (_SUN, 0x13) // _SUN: Slot User Number + Name (_ADR, 0x00130000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SA0) + { + Name (_SUN, 0x14) // _SUN: Slot User Number + Name (_ADR, 0x00140000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SA8) + { + Name (_SUN, 0x15) // _SUN: Slot User Number + Name (_ADR, 0x00150000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SB0) + { + Name (_SUN, 0x16) // _SUN: Slot User Number + Name (_ADR, 0x00160000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SB8) + { + Name (_SUN, 0x17) // _SUN: Slot User Number + Name (_ADR, 0x00170000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SC0) + { + Name (_SUN, 0x18) // _SUN: Slot User Number + Name (_ADR, 0x00180000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SC8) + { + Name (_SUN, 0x19) // _SUN: Slot User Number + Name (_ADR, 0x00190000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SD0) + { + Name (_SUN, 0x1A) // _SUN: Slot User Number + Name (_ADR, 0x001A0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SD8) + { + Name (_SUN, 0x1B) // _SUN: Slot User Number + Name (_ADR, 0x001B0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SE0) + { + Name (_SUN, 0x1C) // _SUN: Slot User Number + Name (_ADR, 0x001C0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SE8) + { + Name (_SUN, 0x1D) // _SUN: Slot User Number + Name (_ADR, 0x001D0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SF0) + { + Name (_SUN, 0x1E) // _SUN: Slot User Number + Name (_ADR, 0x001E0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SF8) + { + Name (_SUN, 0x1F) // _SUN: Slot User Number + Name (_ADR, 0x001F0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Method (DVNT, 2, NotSerialized) + { + If ((Arg0 & 0x08)) + { + Notify (S18, Arg1) + } + + If ((Arg0 & 0x10)) + { + Notify (S20, Arg1) + } + + If ((Arg0 & 0x20)) + { + Notify (S28, Arg1) + } + + If ((Arg0 & 0x40)) + { + Notify (S30, Arg1) + } + + If ((Arg0 & 0x80)) + { + Notify (S38, Arg1) + } + + If ((Arg0 & 0x0100)) + { + Notify (S40, Arg1) + } + + If ((Arg0 & 0x0200)) + { + Notify (S48, Arg1) + } + + If ((Arg0 & 0x0400)) + { + Notify (S50, Arg1) + } + + If ((Arg0 & 0x0800)) + { + Notify (S58, Arg1) + } + + If ((Arg0 & 0x1000)) + { + Notify (S60, Arg1) + } + + If ((Arg0 & 0x2000)) + { + Notify (S68, Arg1) + } + + If ((Arg0 & 0x4000)) + { + Notify (S70, Arg1) + } + + If ((Arg0 & 0x8000)) + { + Notify (S78, Arg1) + } + + If ((Arg0 & 0x00010000)) + { + Notify (S80, Arg1) + } + + If ((Arg0 & 0x00020000)) + { + Notify (S88, Arg1) + } + + If ((Arg0 & 0x00040000)) + { + Notify (S90, Arg1) + } + + If ((Arg0 & 0x00080000)) + { + Notify (S98, Arg1) + } + + If ((Arg0 & 0x00100000)) + { + Notify (SA0, Arg1) + } + + If ((Arg0 & 0x00200000)) + { + Notify (SA8, Arg1) + } + + If ((Arg0 & 0x00400000)) + { + Notify (SB0, Arg1) + } + + If ((Arg0 & 0x00800000)) + { + Notify (SB8, Arg1) + } + + If ((Arg0 & 0x01000000)) + { + Notify (SC0, Arg1) + } + + If ((Arg0 & 0x02000000)) + { + Notify (SC8, Arg1) + } + + If ((Arg0 & 0x04000000)) + { + Notify (SD0, Arg1) + } + + If ((Arg0 & 0x08000000)) + { + Notify (SD8, Arg1) + } + + If ((Arg0 & 0x10000000)) + { + Notify (SE0, Arg1) + } + + If ((Arg0 & 0x20000000)) + { + Notify (SE8, Arg1) + } + + If ((Arg0 & 0x40000000)) + { + Notify (SF0, Arg1) + } + + If ((Arg0 & 0x80000000)) + { + Notify (SF8, Arg1) + } + } + + Method (PCNT, 0, NotSerialized) + { + BNUM = Zero + DVNT (PCIU, One) + DVNT (PCID, 0x03) + } + } + } +} + diff --git a/tests/data/acpi/pc/DSDT.dsl b/tests/data/acpi/pc/DSDT.dsl new file mode 100644 index 0000000000..da2b413efc --- /dev/null +++ b/tests/data/acpi/pc/DSDT.dsl @@ -0,0 +1,1407 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembling to symbolic ASL+ operators + * + * Disassembly of tests/data/acpi/pc/DSDT.roothp, Mon Sep 28 17:24:38 2020 + * + * Original Table Header: + * Signature "DSDT" + * Length 0x00001488 (5256) + * Revision 0x01 **** 32-bit table (V1), no 64-bit math support + * Checksum 0xF2 + * OEM ID "BOCHS " + * OEM Table ID "BXPCDSDT" + * OEM Revision 0x00000001 (1) + * Compiler ID "BXPC" + * Compiler Version 0x00000001 (1) + */ +DefinitionBlock ("", "DSDT", 1, "BOCHS ", "BXPCDSDT", 0x00000001) +{ + Scope (\) + { + OperationRegion (DBG, SystemIO, 0x0402, One) + Field (DBG, ByteAcc, NoLock, Preserve) + { + DBGB, 8 + } + + Method (DBUG, 1, NotSerialized) + { + ToHexString (Arg0, Local0) + ToBuffer (Local0, Local0) + Local1 = (SizeOf (Local0) - One) + Local2 = Zero + While ((Local2 < Local1)) + { + DBGB = DerefOf (Local0 [Local2]) + Local2++ + } + + DBGB = 0x0A + } + } + + Scope (_SB) + { + Device (PCI0) + { + Name (_HID, EisaId ("PNP0A03") /* PCI Bus */) // _HID: Hardware ID + Name (_ADR, Zero) // _ADR: Address + Name (_UID, Zero) // _UID: Unique ID + } + } + + Scope (_SB) + { + Device (HPET) + { + Name (_HID, EisaId ("PNP0103") /* HPET System Timer */) // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + OperationRegion (HPTM, SystemMemory, 0xFED00000, 0x0400) + Field (HPTM, DWordAcc, Lock, Preserve) + { + VEND, 32, + PRD, 32 + } + + Method (_STA, 0, NotSerialized) // _STA: Status + { + Local0 = VEND /* \_SB_.HPET.VEND */ + Local1 = PRD /* \_SB_.HPET.PRD_ */ + Local0 >>= 0x10 + If (((Local0 == Zero) || (Local0 == 0xFFFF))) + { + Return (Zero) + } + + If (((Local1 == Zero) || (Local1 > 0x05F5E100))) + { + Return (Zero) + } + + Return (0x0F) + } + + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadOnly, + 0xFED00000, // Address Base + 0x00000400, // Address Length + ) + }) + } + } + + Scope (_SB.PCI0) + { + Device (ISA) + { + Name (_ADR, 0x00010000) // _ADR: Address + OperationRegion (P40C, PCI_Config, 0x60, 0x04) + } + } + + Scope (_SB.PCI0.ISA) + { + Device (KBD) + { + Name (_HID, EisaId ("PNP0303") /* IBM Enhanced Keyboard (101/102-key, PS/2 Mouse) */) // _HID: Hardware ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0060, // Range Minimum + 0x0060, // Range Maximum + 0x01, // Alignment + 0x01, // Length + ) + IO (Decode16, + 0x0064, // Range Minimum + 0x0064, // Range Maximum + 0x01, // Alignment + 0x01, // Length + ) + IRQNoFlags () + {1} + }) + } + + Device (MOU) + { + Name (_HID, EisaId ("PNP0F13") /* PS/2 Mouse */) // _HID: Hardware ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IRQNoFlags () + {12} + }) + } + + Device (FDC0) + { + Name (_HID, EisaId ("PNP0700")) // _HID: Hardware ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x03F2, // Range Minimum + 0x03F2, // Range Maximum + 0x00, // Alignment + 0x04, // Length + ) + IO (Decode16, + 0x03F7, // Range Minimum + 0x03F7, // Range Maximum + 0x00, // Alignment + 0x01, // Length + ) + IRQNoFlags () + {6} + DMA (Compatibility, NotBusMaster, Transfer8, ) + {2} + }) + Device (FLPA) + { + Name (_ADR, Zero) // _ADR: Address + Name (_FDI, Package (0x10) // _FDI: Floppy Drive Information + { + Zero, + 0x05, + 0x4F, + 0x30, + One, + 0xAF, + 0x02, + 0x25, + 0x02, + 0x12, + 0x1B, + 0xFF, + 0x6C, + 0xF6, + 0x0F, + 0x08 + }) + } + + Name (_FDE, Buffer (0x14) // _FDE: Floppy Disk Enumerate + { + /* 0000 */ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........ + /* 0008 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........ + /* 0010 */ 0x02, 0x00, 0x00, 0x00 // .... + }) + } + + Device (LPT1) + { + Name (_HID, EisaId ("PNP0400") /* Standard LPT Parallel Port */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0378, // Range Minimum + 0x0378, // Range Maximum + 0x08, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {7} + }) + } + + Device (COM1) + { + Name (_HID, EisaId ("PNP0501") /* 16550A-compatible COM Serial Port */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x03F8, // Range Minimum + 0x03F8, // Range Maximum + 0x00, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {4} + }) + } + + Device (RTC) + { + Name (_HID, EisaId ("PNP0B00") /* AT Real-Time Clock */) // _HID: Hardware ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0070, // Range Minimum + 0x0070, // Range Maximum + 0x01, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {8} + }) + } + } + + Scope (_SB.PCI0) + { + OperationRegion (PCST, SystemIO, 0xAE00, 0x08) + Field (PCST, DWordAcc, NoLock, WriteAsZeros) + { + PCIU, 32, + PCID, 32 + } + + OperationRegion (SEJ, SystemIO, 0xAE08, 0x04) + Field (SEJ, DWordAcc, NoLock, WriteAsZeros) + { + B0EJ, 32 + } + + OperationRegion (BNMR, SystemIO, 0xAE10, 0x04) + Field (BNMR, DWordAcc, NoLock, WriteAsZeros) + { + BNUM, 32 + } + + Mutex (BLCK, 0x00) + Method (PCEJ, 2, NotSerialized) + { + Acquire (BLCK, 0xFFFF) + BNUM = Arg0 + B0EJ = (One << Arg1) + Release (BLCK) + Return (Zero) + } + } + + Scope (_SB) + { + Scope (PCI0) + { + Method (_PRT, 0, NotSerialized) // _PRT: PCI Routing Table + { + Local0 = Package (0x80){} + Local1 = Zero + While ((Local1 < 0x80)) + { + Local2 = (Local1 >> 0x02) + Local3 = ((Local1 + Local2) & 0x03) + If ((Local3 == Zero)) + { + Local4 = Package (0x04) + { + Zero, + Zero, + LNKD, + Zero + } + } + + If ((Local3 == One)) + { + If ((Local1 == 0x04)) + { + Local4 = Package (0x04) + { + Zero, + Zero, + LNKS, + Zero + } + } + Else + { + Local4 = Package (0x04) + { + Zero, + Zero, + LNKA, + Zero + } + } + } + + If ((Local3 == 0x02)) + { + Local4 = Package (0x04) + { + Zero, + Zero, + LNKB, + Zero + } + } + + If ((Local3 == 0x03)) + { + Local4 = Package (0x04) + { + Zero, + Zero, + LNKC, + Zero + } + } + + Local4 [Zero] = ((Local2 << 0x10) | 0xFFFF) + Local4 [One] = (Local1 & 0x03) + Local0 [Local1] = Local4 + Local1++ + } + + Return (Local0) + } + } + + Field (PCI0.ISA.P40C, ByteAcc, NoLock, Preserve) + { + PRQ0, 8, + PRQ1, 8, + PRQ2, 8, + PRQ3, 8 + } + + Method (IQST, 1, NotSerialized) + { + If ((0x80 & Arg0)) + { + Return (0x09) + } + + Return (0x0B) + } + + Method (IQCR, 1, Serialized) + { + Name (PRR0, ResourceTemplate () + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, _Y00) + { + 0x00000000, + } + }) + CreateDWordField (PRR0, \_SB.IQCR._Y00._INT, PRRI) // _INT: Interrupts + If ((Arg0 < 0x80)) + { + PRRI = Arg0 + } + + Return (PRR0) /* \_SB_.IQCR.PRR0 */ + } + + Device (LNKA) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQ0)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQ0 |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQ0)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQ0 = PRRI /* \_SB_.LNKA._SRS.PRRI */ + } + } + + Device (LNKB) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQ1)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQ1 |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQ1)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQ1 = PRRI /* \_SB_.LNKB._SRS.PRRI */ + } + } + + Device (LNKC) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x02) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQ2)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQ2 |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQ2)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQ2 = PRRI /* \_SB_.LNKC._SRS.PRRI */ + } + } + + Device (LNKD) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x03) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQ3)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQ3 |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQ3)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQ3 = PRRI /* \_SB_.LNKD._SRS.PRRI */ + } + } + + Device (LNKS) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x04) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000009, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (0x0B) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (_PRS) /* \_SB_.LNKS._PRS */ + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + } + + Scope (_SB) + { + Device (\_SB.PCI0.PRES) + { + Name (_HID, EisaId ("PNP0A06") /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "CPU Hotplug resources") // _UID: Unique ID + Mutex (CPLK, 0x00) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0xAF00, // Range Minimum + 0xAF00, // Range Maximum + 0x01, // Alignment + 0x0C, // Length + ) + }) + OperationRegion (PRST, SystemIO, 0xAF00, 0x0C) + Field (PRST, ByteAcc, NoLock, WriteAsZeros) + { + Offset (0x04), + CPEN, 1, + CINS, 1, + CRMV, 1, + CEJ0, 1, + Offset (0x05), + CCMD, 8 + } + + Field (PRST, DWordAcc, NoLock, Preserve) + { + CSEL, 32, + Offset (0x08), + CDAT, 32 + } + + Method (_INI, 0, Serialized) // _INI: Initialize + { + CSEL = Zero + } + } + + Device (\_SB.CPUS) + { + Name (_HID, "ACPI0010" /* Processor Container Device */) // _HID: Hardware ID + Name (_CID, EisaId ("PNP0A05") /* Generic Container Device */) // _CID: Compatible ID + Method (CTFY, 2, NotSerialized) + { + If ((Arg0 == Zero)) + { + Notify (C000, Arg1) + } + } + + Method (CSTA, 1, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + Local0 = Zero + If ((\_SB.PCI0.PRES.CPEN == One)) + { + Local0 = 0x0F + } + + Release (\_SB.PCI0.PRES.CPLK) + Return (Local0) + } + + Method (CEJ0, 1, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + \_SB.PCI0.PRES.CEJ0 = One + Release (\_SB.PCI0.PRES.CPLK) + } + + Method (CSCN, 0, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + Name (CNEW, Package (0xFF){}) + Local3 = Zero + Local4 = One + While ((Local4 == One)) + { + Local4 = Zero + Local0 = One + Local1 = Zero + While (((Local0 == One) && (Local3 < One))) + { + Local0 = Zero + \_SB.PCI0.PRES.CSEL = Local3 + \_SB.PCI0.PRES.CCMD = Zero + If ((\_SB.PCI0.PRES.CDAT < Local3)) + { + Break + } + + If ((Local1 == 0xFF)) + { + Local4 = One + Break + } + + Local3 = \_SB.PCI0.PRES.CDAT + If ((\_SB.PCI0.PRES.CINS == One)) + { + CNEW [Local1] = Local3 + Local1++ + Local0 = One + } + ElseIf ((\_SB.PCI0.PRES.CRMV == One)) + { + CTFY (Local3, 0x03) + \_SB.PCI0.PRES.CRMV = One + Local0 = One + } + + Local3++ + } + + Local2 = Zero + While ((Local2 < Local1)) + { + Local3 = DerefOf (CNEW [Local2]) + CTFY (Local3, One) + Debug = Local3 + \_SB.PCI0.PRES.CSEL = Local3 + \_SB.PCI0.PRES.CINS = One + Local2++ + } + } + + Release (\_SB.PCI0.PRES.CPLK) + } + + Method (COST, 4, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + \_SB.PCI0.PRES.CCMD = One + \_SB.PCI0.PRES.CDAT = Arg1 + \_SB.PCI0.PRES.CCMD = 0x02 + \_SB.PCI0.PRES.CDAT = Arg2 + Release (\_SB.PCI0.PRES.CPLK) + } + + Processor (C000, 0x00, 0x00000000, 0x00) + { + Method (_STA, 0, Serialized) // _STA: Status + { + Return (CSTA (Zero)) + } + + Name (_MAT, Buffer (0x08) // _MAT: Multiple APIC Table Entry + { + 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 // ........ + }) + Method (_OST, 3, Serialized) // _OST: OSPM Status Indication + { + COST (Zero, Arg0, Arg1, Arg2) + } + } + } + } + + Method (\_GPE._E02, 0, NotSerialized) // _Exx: Edge-Triggered GPE, xx=0x00-0xFF + { + \_SB.CPUS.CSCN () + } + + Scope (_GPE) + { + Name (_HID, "ACPI0006" /* GPE Block Device */) // _HID: Hardware ID + Method (_E01, 0, NotSerialized) // _Exx: Edge-Triggered GPE, xx=0x00-0xFF + { + Acquire (\_SB.PCI0.BLCK, 0xFFFF) + \_SB.PCI0.PCNT () + Release (\_SB.PCI0.BLCK) + } + } + + Scope (\_SB.PCI0) + { + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode, + 0x0000, // Granularity + 0x0000, // Range Minimum + 0x00FF, // Range Maximum + 0x0000, // Translation Offset + 0x0100, // Length + ,, ) + IO (Decode16, + 0x0CF8, // Range Minimum + 0x0CF8, // Range Maximum + 0x01, // Alignment + 0x08, // Length + ) + WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, + 0x0000, // Granularity + 0x0000, // Range Minimum + 0x0CF7, // Range Maximum + 0x0000, // Translation Offset + 0x0CF8, // Length + ,, , TypeStatic, DenseTranslation) + WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, + 0x0000, // Granularity + 0x0D00, // Range Minimum + 0xFFFF, // Range Maximum + 0x0000, // Translation Offset + 0xF300, // Length + ,, , TypeStatic, DenseTranslation) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x00000000, // Granularity + 0x000A0000, // Range Minimum + 0x000BFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0x00020000, // Length + ,, , AddressRangeMemory, TypeStatic) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite, + 0x00000000, // Granularity + 0x08000000, // Range Minimum + 0xFEBFFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0xF6C00000, // Length + ,, , AddressRangeMemory, TypeStatic) + QWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x0000000000000000, // Granularity + 0x0000000100000000, // Range Minimum + 0x000000017FFFFFFF, // Range Maximum + 0x0000000000000000, // Translation Offset + 0x0000000080000000, // Length + ,, , AddressRangeMemory, TypeStatic) + }) + Device (GPE0) + { + Name (_HID, "PNP0A06" /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "GPE0 resources") // _UID: Unique ID + Name (_STA, 0x0B) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0xAFE0, // Range Minimum + 0xAFE0, // Range Maximum + 0x01, // Alignment + 0x04, // Length + ) + }) + } + + Device (PHPR) + { + Name (_HID, "PNP0A06" /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "PCI Hotplug resources") // _UID: Unique ID + Name (_STA, 0x0B) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0xAE00, // Range Minimum + 0xAE00, // Range Maximum + 0x01, // Alignment + 0x14, // Length + ) + }) + } + } + + Scope (\) + { + Name (_S3, Package (0x04) // _S3_: S3 System State + { + One, + One, + Zero, + Zero + }) + Name (_S4, Package (0x04) // _S4_: S4 System State + { + 0x02, + 0x02, + Zero, + Zero + }) + Name (_S5, Package (0x04) // _S5_: S5 System State + { + Zero, + Zero, + Zero, + Zero + }) + } + + Scope (\_SB.PCI0) + { + Device (FWCF) + { + Name (_HID, "QEMU0002") // _HID: Hardware ID + Name (_STA, 0x0B) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0510, // Range Minimum + 0x0510, // Range Maximum + 0x01, // Alignment + 0x0C, // Length + ) + }) + } + } + + Scope (\_SB) + { + Scope (PCI0) + { + Device (S00) + { + Name (_ADR, Zero) // _ADR: Address + } + + Device (S10) + { + Name (_ADR, 0x00020000) // _ADR: Address + Method (_S1D, 0, NotSerialized) // _S1D: S1 Device State + { + Return (Zero) + } + + Method (_S2D, 0, NotSerialized) // _S2D: S2 Device State + { + Return (Zero) + } + + Method (_S3D, 0, NotSerialized) // _S3D: S3 Device State + { + Return (Zero) + } + } + + Device (S18) + { + Name (_ADR, 0x00030000) // _ADR: Address + Name (BSEL, Zero) + Device (S00) + { + Name (_SUN, Zero) // _SUN: Slot User Number + Name (_ADR, Zero) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S08) + { + Name (_SUN, One) // _SUN: Slot User Number + Name (_ADR, 0x00010000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S10) + { + Name (_SUN, 0x02) // _SUN: Slot User Number + Name (_ADR, 0x00020000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S18) + { + Name (_SUN, 0x03) // _SUN: Slot User Number + Name (_ADR, 0x00030000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S20) + { + Name (_SUN, 0x04) // _SUN: Slot User Number + Name (_ADR, 0x00040000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S28) + { + Name (_SUN, 0x05) // _SUN: Slot User Number + Name (_ADR, 0x00050000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S30) + { + Name (_SUN, 0x06) // _SUN: Slot User Number + Name (_ADR, 0x00060000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S38) + { + Name (_SUN, 0x07) // _SUN: Slot User Number + Name (_ADR, 0x00070000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S40) + { + Name (_SUN, 0x08) // _SUN: Slot User Number + Name (_ADR, 0x00080000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S48) + { + Name (_SUN, 0x09) // _SUN: Slot User Number + Name (_ADR, 0x00090000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S50) + { + Name (_SUN, 0x0A) // _SUN: Slot User Number + Name (_ADR, 0x000A0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S58) + { + Name (_SUN, 0x0B) // _SUN: Slot User Number + Name (_ADR, 0x000B0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S60) + { + Name (_SUN, 0x0C) // _SUN: Slot User Number + Name (_ADR, 0x000C0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S68) + { + Name (_SUN, 0x0D) // _SUN: Slot User Number + Name (_ADR, 0x000D0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S70) + { + Name (_SUN, 0x0E) // _SUN: Slot User Number + Name (_ADR, 0x000E0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S78) + { + Name (_SUN, 0x0F) // _SUN: Slot User Number + Name (_ADR, 0x000F0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S80) + { + Name (_SUN, 0x10) // _SUN: Slot User Number + Name (_ADR, 0x00100000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S88) + { + Name (_SUN, 0x11) // _SUN: Slot User Number + Name (_ADR, 0x00110000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S90) + { + Name (_SUN, 0x12) // _SUN: Slot User Number + Name (_ADR, 0x00120000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S98) + { + Name (_SUN, 0x13) // _SUN: Slot User Number + Name (_ADR, 0x00130000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SA0) + { + Name (_SUN, 0x14) // _SUN: Slot User Number + Name (_ADR, 0x00140000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SA8) + { + Name (_SUN, 0x15) // _SUN: Slot User Number + Name (_ADR, 0x00150000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SB0) + { + Name (_SUN, 0x16) // _SUN: Slot User Number + Name (_ADR, 0x00160000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SB8) + { + Name (_SUN, 0x17) // _SUN: Slot User Number + Name (_ADR, 0x00170000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SC0) + { + Name (_SUN, 0x18) // _SUN: Slot User Number + Name (_ADR, 0x00180000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SC8) + { + Name (_SUN, 0x19) // _SUN: Slot User Number + Name (_ADR, 0x00190000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SD0) + { + Name (_SUN, 0x1A) // _SUN: Slot User Number + Name (_ADR, 0x001A0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SD8) + { + Name (_SUN, 0x1B) // _SUN: Slot User Number + Name (_ADR, 0x001B0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SE0) + { + Name (_SUN, 0x1C) // _SUN: Slot User Number + Name (_ADR, 0x001C0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SE8) + { + Name (_SUN, 0x1D) // _SUN: Slot User Number + Name (_ADR, 0x001D0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SF0) + { + Name (_SUN, 0x1E) // _SUN: Slot User Number + Name (_ADR, 0x001E0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SF8) + { + Name (_SUN, 0x1F) // _SUN: Slot User Number + Name (_ADR, 0x001F0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Method (DVNT, 2, NotSerialized) + { + If ((Arg0 & One)) + { + Notify (S00, Arg1) + } + + If ((Arg0 & 0x02)) + { + Notify (S08, Arg1) + } + + If ((Arg0 & 0x04)) + { + Notify (S10, Arg1) + } + + If ((Arg0 & 0x08)) + { + Notify (S18, Arg1) + } + + If ((Arg0 & 0x10)) + { + Notify (S20, Arg1) + } + + If ((Arg0 & 0x20)) + { + Notify (S28, Arg1) + } + + If ((Arg0 & 0x40)) + { + Notify (S30, Arg1) + } + + If ((Arg0 & 0x80)) + { + Notify (S38, Arg1) + } + + If ((Arg0 & 0x0100)) + { + Notify (S40, Arg1) + } + + If ((Arg0 & 0x0200)) + { + Notify (S48, Arg1) + } + + If ((Arg0 & 0x0400)) + { + Notify (S50, Arg1) + } + + If ((Arg0 & 0x0800)) + { + Notify (S58, Arg1) + } + + If ((Arg0 & 0x1000)) + { + Notify (S60, Arg1) + } + + If ((Arg0 & 0x2000)) + { + Notify (S68, Arg1) + } + + If ((Arg0 & 0x4000)) + { + Notify (S70, Arg1) + } + + If ((Arg0 & 0x8000)) + { + Notify (S78, Arg1) + } + + If ((Arg0 & 0x00010000)) + { + Notify (S80, Arg1) + } + + If ((Arg0 & 0x00020000)) + { + Notify (S88, Arg1) + } + + If ((Arg0 & 0x00040000)) + { + Notify (S90, Arg1) + } + + If ((Arg0 & 0x00080000)) + { + Notify (S98, Arg1) + } + + If ((Arg0 & 0x00100000)) + { + Notify (SA0, Arg1) + } + + If ((Arg0 & 0x00200000)) + { + Notify (SA8, Arg1) + } + + If ((Arg0 & 0x00400000)) + { + Notify (SB0, Arg1) + } + + If ((Arg0 & 0x00800000)) + { + Notify (SB8, Arg1) + } + + If ((Arg0 & 0x01000000)) + { + Notify (SC0, Arg1) + } + + If ((Arg0 & 0x02000000)) + { + Notify (SC8, Arg1) + } + + If ((Arg0 & 0x04000000)) + { + Notify (SD0, Arg1) + } + + If ((Arg0 & 0x08000000)) + { + Notify (SD8, Arg1) + } + + If ((Arg0 & 0x10000000)) + { + Notify (SE0, Arg1) + } + + If ((Arg0 & 0x20000000)) + { + Notify (SE8, Arg1) + } + + If ((Arg0 & 0x40000000)) + { + Notify (SF0, Arg1) + } + + If ((Arg0 & 0x80000000)) + { + Notify (SF8, Arg1) + } + } + + Method (PCNT, 0, NotSerialized) + { + BNUM = Zero + DVNT (PCIU, One) + DVNT (PCID, 0x03) + } + } + + Method (PCNT, 0, NotSerialized) + { + ^S18.PCNT () + } + } + } +} + diff --git a/tests/data/acpi/pc/DSDT.hpbridge b/tests/data/acpi/pc/DSDT.hpbridge index b0751398541bdf88ce405be9742aeba0b375dbc3..56032bcf1ba4e251f16c9028429826090531efdd 100644 GIT binary patch delta 323 zcmbQQHdmd?CD+d@E<%%27z-Fu3K$a#7!nux@JyJTz&JITv4A0=AUQ^#B|g|GKET=2ARx#! z*g4qMr+@)n(An2zf%sH(Q5VOMG5)3}Gx_L>Kk+ p3oc+xSm@2Nz=LJ74X30ox&jx+5H4m+eL=oq1&j%scXK}C1OS!|HcS8j diff --git a/tests/data/acpi/pc/DSDT.ipmikcs.dsl b/tests/data/acpi/pc/DSDT.ipmikcs.dsl new file mode 100644 index 0000000000..2e4b524ab8 --- /dev/null +++ b/tests/data/acpi/pc/DSDT.ipmikcs.dsl @@ -0,0 +1,1337 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembling to symbolic ASL+ operators + * + * Disassembly of tests/data/acpi/pc/DSDT.ipmikcs, Tue Aug 4 11:14:15 2020 + * + * Original Table Header: + * Signature "DSDT" + * Length 0x0000138E (5006) + * Revision 0x01 **** 32-bit table (V1), no 64-bit math support + * Checksum 0x54 + * OEM ID "BOCHS " + * OEM Table ID "BXPCDSDT" + * OEM Revision 0x00000001 (1) + * Compiler ID "BXPC" + * Compiler Version 0x00000001 (1) + */ +DefinitionBlock ("", "DSDT", 1, "BOCHS ", "BXPCDSDT", 0x00000001) +{ + Scope (\) + { + OperationRegion (DBG, SystemIO, 0x0402, One) + Field (DBG, ByteAcc, NoLock, Preserve) + { + DBGB, 8 + } + + Method (DBUG, 1, NotSerialized) + { + ToHexString (Arg0, Local0) + ToBuffer (Local0, Local0) + Local1 = (SizeOf (Local0) - One) + Local2 = Zero + While ((Local2 < Local1)) + { + DBGB = DerefOf (Local0 [Local2]) + Local2++ + } + + DBGB = 0x0A + } + } + + Scope (_SB) + { + Device (PCI0) + { + Name (_HID, EisaId ("PNP0A03") /* PCI Bus */) // _HID: Hardware ID + Name (_ADR, Zero) // _ADR: Address + Name (_UID, Zero) // _UID: Unique ID + } + } + + Scope (_SB) + { + Device (HPET) + { + Name (_HID, EisaId ("PNP0103") /* HPET System Timer */) // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + OperationRegion (HPTM, SystemMemory, 0xFED00000, 0x0400) + Field (HPTM, DWordAcc, Lock, Preserve) + { + VEND, 32, + PRD, 32 + } + + Method (_STA, 0, NotSerialized) // _STA: Status + { + Local0 = VEND /* \_SB_.HPET.VEND */ + Local1 = PRD /* \_SB_.HPET.PRD_ */ + Local0 >>= 0x10 + If (((Local0 == Zero) || (Local0 == 0xFFFF))) + { + Return (Zero) + } + + If (((Local1 == Zero) || (Local1 > 0x05F5E100))) + { + Return (Zero) + } + + Return (0x0F) + } + + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadOnly, + 0xFED00000, // Address Base + 0x00000400, // Address Length + ) + }) + } + } + + Scope (_SB.PCI0) + { + Device (ISA) + { + Name (_ADR, 0x00010000) // _ADR: Address + OperationRegion (P40C, PCI_Config, 0x60, 0x04) + } + } + + Scope (_SB.PCI0.ISA) + { + Device (MI1) + { + Name (_HID, EisaId ("IPI0001")) // _HID: Hardware ID + Name (_STR, "ipmi_kcs") // _STR: Description String + Name (_UID, One) // _UID: Unique ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0CA2, // Range Minimum + 0x0CA3, // Range Maximum + 0x01, // Alignment + 0x02, // Length + ) + }) + Name (_IFT, One) // _IFT: IPMI Interface Type + Name (_SRV, 0x0200) // _SRV: IPMI Spec Revision + } + + Device (KBD) + { + Name (_HID, EisaId ("PNP0303") /* IBM Enhanced Keyboard (101/102-key, PS/2 Mouse) */) // _HID: Hardware ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0060, // Range Minimum + 0x0060, // Range Maximum + 0x01, // Alignment + 0x01, // Length + ) + IO (Decode16, + 0x0064, // Range Minimum + 0x0064, // Range Maximum + 0x01, // Alignment + 0x01, // Length + ) + IRQNoFlags () + {1} + }) + } + + Device (MOU) + { + Name (_HID, EisaId ("PNP0F13") /* PS/2 Mouse */) // _HID: Hardware ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IRQNoFlags () + {12} + }) + } + + Device (FDC0) + { + Name (_HID, EisaId ("PNP0700")) // _HID: Hardware ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x03F2, // Range Minimum + 0x03F2, // Range Maximum + 0x00, // Alignment + 0x04, // Length + ) + IO (Decode16, + 0x03F7, // Range Minimum + 0x03F7, // Range Maximum + 0x00, // Alignment + 0x01, // Length + ) + IRQNoFlags () + {6} + DMA (Compatibility, NotBusMaster, Transfer8, ) + {2} + }) + Device (FLPA) + { + Name (_ADR, Zero) // _ADR: Address + Name (_FDI, Package (0x10) // _FDI: Floppy Drive Information + { + Zero, + 0x05, + 0x4F, + 0x30, + One, + 0xAF, + 0x02, + 0x25, + 0x02, + 0x12, + 0x1B, + 0xFF, + 0x6C, + 0xF6, + 0x0F, + 0x08 + }) + } + + Name (_FDE, Buffer (0x14) // _FDE: Floppy Disk Enumerate + { + /* 0000 */ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........ + /* 0008 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........ + /* 0010 */ 0x02, 0x00, 0x00, 0x00 // .... + }) + } + + Device (LPT1) + { + Name (_HID, EisaId ("PNP0400") /* Standard LPT Parallel Port */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0378, // Range Minimum + 0x0378, // Range Maximum + 0x08, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {7} + }) + } + + Device (COM1) + { + Name (_HID, EisaId ("PNP0501") /* 16550A-compatible COM Serial Port */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x03F8, // Range Minimum + 0x03F8, // Range Maximum + 0x00, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {4} + }) + } + + Device (RTC) + { + Name (_HID, EisaId ("PNP0B00") /* AT Real-Time Clock */) // _HID: Hardware ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0070, // Range Minimum + 0x0070, // Range Maximum + 0x01, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {8} + }) + } + } + + Scope (_SB.PCI0) + { + OperationRegion (PCST, SystemIO, 0xAE00, 0x08) + Field (PCST, DWordAcc, NoLock, WriteAsZeros) + { + PCIU, 32, + PCID, 32 + } + + OperationRegion (SEJ, SystemIO, 0xAE08, 0x04) + Field (SEJ, DWordAcc, NoLock, WriteAsZeros) + { + B0EJ, 32 + } + + OperationRegion (BNMR, SystemIO, 0xAE10, 0x04) + Field (BNMR, DWordAcc, NoLock, WriteAsZeros) + { + BNUM, 32 + } + + Mutex (BLCK, 0x00) + Method (PCEJ, 2, NotSerialized) + { + Acquire (BLCK, 0xFFFF) + BNUM = Arg0 + B0EJ = (One << Arg1) + Release (BLCK) + Return (Zero) + } + } + + Scope (_SB) + { + Scope (PCI0) + { + Method (_PRT, 0, NotSerialized) // _PRT: PCI Routing Table + { + Local0 = Package (0x80){} + Local1 = Zero + While ((Local1 < 0x80)) + { + Local2 = (Local1 >> 0x02) + Local3 = ((Local1 + Local2) & 0x03) + If ((Local3 == Zero)) + { + Local4 = Package (0x04) + { + Zero, + Zero, + LNKD, + Zero + } + } + + If ((Local3 == One)) + { + If ((Local1 == 0x04)) + { + Local4 = Package (0x04) + { + Zero, + Zero, + LNKS, + Zero + } + } + Else + { + Local4 = Package (0x04) + { + Zero, + Zero, + LNKA, + Zero + } + } + } + + If ((Local3 == 0x02)) + { + Local4 = Package (0x04) + { + Zero, + Zero, + LNKB, + Zero + } + } + + If ((Local3 == 0x03)) + { + Local4 = Package (0x04) + { + Zero, + Zero, + LNKC, + Zero + } + } + + Local4 [Zero] = ((Local2 << 0x10) | 0xFFFF) + Local4 [One] = (Local1 & 0x03) + Local0 [Local1] = Local4 + Local1++ + } + + Return (Local0) + } + } + + Field (PCI0.ISA.P40C, ByteAcc, NoLock, Preserve) + { + PRQ0, 8, + PRQ1, 8, + PRQ2, 8, + PRQ3, 8 + } + + Method (IQST, 1, NotSerialized) + { + If ((0x80 & Arg0)) + { + Return (0x09) + } + + Return (0x0B) + } + + Method (IQCR, 1, Serialized) + { + Name (PRR0, ResourceTemplate () + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, _Y00) + { + 0x00000000, + } + }) + CreateDWordField (PRR0, \_SB.IQCR._Y00._INT, PRRI) // _INT: Interrupts + If ((Arg0 < 0x80)) + { + PRRI = Arg0 + } + + Return (PRR0) /* \_SB_.IQCR.PRR0 */ + } + + Device (LNKA) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQ0)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQ0 |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQ0)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQ0 = PRRI /* \_SB_.LNKA._SRS.PRRI */ + } + } + + Device (LNKB) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQ1)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQ1 |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQ1)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQ1 = PRRI /* \_SB_.LNKB._SRS.PRRI */ + } + } + + Device (LNKC) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x02) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQ2)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQ2 |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQ2)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQ2 = PRRI /* \_SB_.LNKC._SRS.PRRI */ + } + } + + Device (LNKD) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x03) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQ3)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQ3 |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQ3)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQ3 = PRRI /* \_SB_.LNKD._SRS.PRRI */ + } + } + + Device (LNKS) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x04) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000009, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (0x0B) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (_PRS) /* \_SB_.LNKS._PRS */ + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + } + + Scope (_SB) + { + Device (\_SB.PCI0.PRES) + { + Name (_HID, EisaId ("PNP0A06") /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "CPU Hotplug resources") // _UID: Unique ID + Mutex (CPLK, 0x00) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0xAF00, // Range Minimum + 0xAF00, // Range Maximum + 0x01, // Alignment + 0x0C, // Length + ) + }) + OperationRegion (PRST, SystemIO, 0xAF00, 0x0C) + Field (PRST, ByteAcc, NoLock, WriteAsZeros) + { + Offset (0x04), + CPEN, 1, + CINS, 1, + CRMV, 1, + CEJ0, 1, + Offset (0x05), + CCMD, 8 + } + + Field (PRST, DWordAcc, NoLock, Preserve) + { + CSEL, 32, + Offset (0x08), + CDAT, 32 + } + + Method (_INI, 0, Serialized) // _INI: Initialize + { + CSEL = Zero + } + } + + Device (\_SB.CPUS) + { + Name (_HID, "ACPI0010" /* Processor Container Device */) // _HID: Hardware ID + Name (_CID, EisaId ("PNP0A05") /* Generic Container Device */) // _CID: Compatible ID + Method (CTFY, 2, NotSerialized) + { + If ((Arg0 == Zero)) + { + Notify (C000, Arg1) + } + } + + Method (CSTA, 1, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + Local0 = Zero + If ((\_SB.PCI0.PRES.CPEN == One)) + { + Local0 = 0x0F + } + + Release (\_SB.PCI0.PRES.CPLK) + Return (Local0) + } + + Method (CEJ0, 1, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + \_SB.PCI0.PRES.CEJ0 = One + Release (\_SB.PCI0.PRES.CPLK) + } + + Method (CSCN, 0, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + Local0 = One + While ((Local0 == One)) + { + Local0 = Zero + \_SB.PCI0.PRES.CCMD = Zero + If ((\_SB.PCI0.PRES.CINS == One)) + { + CTFY (\_SB.PCI0.PRES.CDAT, One) + \_SB.PCI0.PRES.CINS = One + Local0 = One + } + ElseIf ((\_SB.PCI0.PRES.CRMV == One)) + { + CTFY (\_SB.PCI0.PRES.CDAT, 0x03) + \_SB.PCI0.PRES.CRMV = One + Local0 = One + } + } + + Release (\_SB.PCI0.PRES.CPLK) + } + + Method (COST, 4, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + \_SB.PCI0.PRES.CCMD = One + \_SB.PCI0.PRES.CDAT = Arg1 + \_SB.PCI0.PRES.CCMD = 0x02 + \_SB.PCI0.PRES.CDAT = Arg2 + Release (\_SB.PCI0.PRES.CPLK) + } + + Processor (C000, 0x00, 0x00000000, 0x00) + { + Method (_STA, 0, Serialized) // _STA: Status + { + Return (CSTA (Zero)) + } + + Name (_MAT, Buffer (0x08) // _MAT: Multiple APIC Table Entry + { + 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 // ........ + }) + Method (_OST, 3, Serialized) // _OST: OSPM Status Indication + { + COST (Zero, Arg0, Arg1, Arg2) + } + } + } + } + + Method (\_GPE._E02, 0, NotSerialized) // _Exx: Edge-Triggered GPE, xx=0x00-0xFF + { + \_SB.CPUS.CSCN () + } + + Scope (_GPE) + { + Name (_HID, "ACPI0006" /* GPE Block Device */) // _HID: Hardware ID + Method (_E01, 0, NotSerialized) // _Exx: Edge-Triggered GPE, xx=0x00-0xFF + { + Acquire (\_SB.PCI0.BLCK, 0xFFFF) + \_SB.PCI0.PCNT () + Release (\_SB.PCI0.BLCK) + } + } + + Scope (\_SB.PCI0) + { + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode, + 0x0000, // Granularity + 0x0000, // Range Minimum + 0x00FF, // Range Maximum + 0x0000, // Translation Offset + 0x0100, // Length + ,, ) + IO (Decode16, + 0x0CF8, // Range Minimum + 0x0CF8, // Range Maximum + 0x01, // Alignment + 0x08, // Length + ) + WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, + 0x0000, // Granularity + 0x0000, // Range Minimum + 0x0CF7, // Range Maximum + 0x0000, // Translation Offset + 0x0CF8, // Length + ,, , TypeStatic, DenseTranslation) + WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, + 0x0000, // Granularity + 0x0D00, // Range Minimum + 0xFFFF, // Range Maximum + 0x0000, // Translation Offset + 0xF300, // Length + ,, , TypeStatic, DenseTranslation) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x00000000, // Granularity + 0x000A0000, // Range Minimum + 0x000BFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0x00020000, // Length + ,, , AddressRangeMemory, TypeStatic) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite, + 0x00000000, // Granularity + 0x08000000, // Range Minimum + 0xFEBFFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0xF6C00000, // Length + ,, , AddressRangeMemory, TypeStatic) + QWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x0000000000000000, // Granularity + 0x0000000100000000, // Range Minimum + 0x000000017FFFFFFF, // Range Maximum + 0x0000000000000000, // Translation Offset + 0x0000000080000000, // Length + ,, , AddressRangeMemory, TypeStatic) + }) + Device (GPE0) + { + Name (_HID, "PNP0A06" /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "GPE0 resources") // _UID: Unique ID + Name (_STA, 0x0B) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0xAFE0, // Range Minimum + 0xAFE0, // Range Maximum + 0x01, // Alignment + 0x04, // Length + ) + }) + } + + Device (PHPR) + { + Name (_HID, "PNP0A06" /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "PCI Hotplug resources") // _UID: Unique ID + Name (_STA, 0x0B) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0xAE00, // Range Minimum + 0xAE00, // Range Maximum + 0x01, // Alignment + 0x14, // Length + ) + }) + } + } + + Scope (\) + { + Name (_S3, Package (0x04) // _S3_: S3 System State + { + One, + One, + Zero, + Zero + }) + Name (_S4, Package (0x04) // _S4_: S4 System State + { + 0x02, + 0x02, + Zero, + Zero + }) + Name (_S5, Package (0x04) // _S5_: S5 System State + { + Zero, + Zero, + Zero, + Zero + }) + } + + Scope (\_SB.PCI0) + { + Device (FWCF) + { + Name (_HID, "QEMU0002") // _HID: Hardware ID + Name (_STA, 0x0B) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0510, // Range Minimum + 0x0510, // Range Maximum + 0x01, // Alignment + 0x0C, // Length + ) + }) + } + } + + Scope (\_SB) + { + Scope (PCI0) + { + Name (BSEL, Zero) + Device (S00) + { + Name (_ADR, Zero) // _ADR: Address + } + + Device (S10) + { + Name (_ADR, 0x00020000) // _ADR: Address + Method (_S1D, 0, NotSerialized) // _S1D: S1 Device State + { + Return (Zero) + } + + Method (_S2D, 0, NotSerialized) // _S2D: S2 Device State + { + Return (Zero) + } + + Method (_S3D, 0, NotSerialized) // _S3D: S3 Device State + { + Return (Zero) + } + } + + Device (S18) + { + Name (_SUN, 0x03) // _SUN: Slot User Number + Name (_ADR, 0x00030000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S20) + { + Name (_SUN, 0x04) // _SUN: Slot User Number + Name (_ADR, 0x00040000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S28) + { + Name (_SUN, 0x05) // _SUN: Slot User Number + Name (_ADR, 0x00050000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S30) + { + Name (_SUN, 0x06) // _SUN: Slot User Number + Name (_ADR, 0x00060000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S38) + { + Name (_SUN, 0x07) // _SUN: Slot User Number + Name (_ADR, 0x00070000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S40) + { + Name (_SUN, 0x08) // _SUN: Slot User Number + Name (_ADR, 0x00080000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S48) + { + Name (_SUN, 0x09) // _SUN: Slot User Number + Name (_ADR, 0x00090000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S50) + { + Name (_SUN, 0x0A) // _SUN: Slot User Number + Name (_ADR, 0x000A0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S58) + { + Name (_SUN, 0x0B) // _SUN: Slot User Number + Name (_ADR, 0x000B0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S60) + { + Name (_SUN, 0x0C) // _SUN: Slot User Number + Name (_ADR, 0x000C0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S68) + { + Name (_SUN, 0x0D) // _SUN: Slot User Number + Name (_ADR, 0x000D0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S70) + { + Name (_SUN, 0x0E) // _SUN: Slot User Number + Name (_ADR, 0x000E0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S78) + { + Name (_SUN, 0x0F) // _SUN: Slot User Number + Name (_ADR, 0x000F0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S80) + { + Name (_SUN, 0x10) // _SUN: Slot User Number + Name (_ADR, 0x00100000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S88) + { + Name (_SUN, 0x11) // _SUN: Slot User Number + Name (_ADR, 0x00110000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S90) + { + Name (_SUN, 0x12) // _SUN: Slot User Number + Name (_ADR, 0x00120000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S98) + { + Name (_SUN, 0x13) // _SUN: Slot User Number + Name (_ADR, 0x00130000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SA0) + { + Name (_SUN, 0x14) // _SUN: Slot User Number + Name (_ADR, 0x00140000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SA8) + { + Name (_SUN, 0x15) // _SUN: Slot User Number + Name (_ADR, 0x00150000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SB0) + { + Name (_SUN, 0x16) // _SUN: Slot User Number + Name (_ADR, 0x00160000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SB8) + { + Name (_SUN, 0x17) // _SUN: Slot User Number + Name (_ADR, 0x00170000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SC0) + { + Name (_SUN, 0x18) // _SUN: Slot User Number + Name (_ADR, 0x00180000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SC8) + { + Name (_SUN, 0x19) // _SUN: Slot User Number + Name (_ADR, 0x00190000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SD0) + { + Name (_SUN, 0x1A) // _SUN: Slot User Number + Name (_ADR, 0x001A0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SD8) + { + Name (_SUN, 0x1B) // _SUN: Slot User Number + Name (_ADR, 0x001B0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SE0) + { + Name (_SUN, 0x1C) // _SUN: Slot User Number + Name (_ADR, 0x001C0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SE8) + { + Name (_SUN, 0x1D) // _SUN: Slot User Number + Name (_ADR, 0x001D0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SF0) + { + Name (_SUN, 0x1E) // _SUN: Slot User Number + Name (_ADR, 0x001E0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SF8) + { + Name (_SUN, 0x1F) // _SUN: Slot User Number + Name (_ADR, 0x001F0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Method (DVNT, 2, NotSerialized) + { + If ((Arg0 & 0x08)) + { + Notify (S18, Arg1) + } + + If ((Arg0 & 0x10)) + { + Notify (S20, Arg1) + } + + If ((Arg0 & 0x20)) + { + Notify (S28, Arg1) + } + + If ((Arg0 & 0x40)) + { + Notify (S30, Arg1) + } + + If ((Arg0 & 0x80)) + { + Notify (S38, Arg1) + } + + If ((Arg0 & 0x0100)) + { + Notify (S40, Arg1) + } + + If ((Arg0 & 0x0200)) + { + Notify (S48, Arg1) + } + + If ((Arg0 & 0x0400)) + { + Notify (S50, Arg1) + } + + If ((Arg0 & 0x0800)) + { + Notify (S58, Arg1) + } + + If ((Arg0 & 0x1000)) + { + Notify (S60, Arg1) + } + + If ((Arg0 & 0x2000)) + { + Notify (S68, Arg1) + } + + If ((Arg0 & 0x4000)) + { + Notify (S70, Arg1) + } + + If ((Arg0 & 0x8000)) + { + Notify (S78, Arg1) + } + + If ((Arg0 & 0x00010000)) + { + Notify (S80, Arg1) + } + + If ((Arg0 & 0x00020000)) + { + Notify (S88, Arg1) + } + + If ((Arg0 & 0x00040000)) + { + Notify (S90, Arg1) + } + + If ((Arg0 & 0x00080000)) + { + Notify (S98, Arg1) + } + + If ((Arg0 & 0x00100000)) + { + Notify (SA0, Arg1) + } + + If ((Arg0 & 0x00200000)) + { + Notify (SA8, Arg1) + } + + If ((Arg0 & 0x00400000)) + { + Notify (SB0, Arg1) + } + + If ((Arg0 & 0x00800000)) + { + Notify (SB8, Arg1) + } + + If ((Arg0 & 0x01000000)) + { + Notify (SC0, Arg1) + } + + If ((Arg0 & 0x02000000)) + { + Notify (SC8, Arg1) + } + + If ((Arg0 & 0x04000000)) + { + Notify (SD0, Arg1) + } + + If ((Arg0 & 0x08000000)) + { + Notify (SD8, Arg1) + } + + If ((Arg0 & 0x10000000)) + { + Notify (SE0, Arg1) + } + + If ((Arg0 & 0x20000000)) + { + Notify (SE8, Arg1) + } + + If ((Arg0 & 0x40000000)) + { + Notify (SF0, Arg1) + } + + If ((Arg0 & 0x80000000)) + { + Notify (SF8, Arg1) + } + } + + Method (PCNT, 0, NotSerialized) + { + BNUM = Zero + DVNT (PCIU, One) + DVNT (PCID, 0x03) + } + } + } +} + diff --git a/tests/data/acpi/pc/DSDT.memhp.dsl b/tests/data/acpi/pc/DSDT.memhp.dsl new file mode 100644 index 0000000000..299315051e --- /dev/null +++ b/tests/data/acpi/pc/DSDT.memhp.dsl @@ -0,0 +1,1625 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembling to symbolic ASL+ operators + * + * Disassembly of tests/data/acpi/pc/DSDT.memhp, Tue Aug 4 11:14:15 2020 + * + * Original Table Header: + * Signature "DSDT" + * Length 0x00001895 (6293) + * Revision 0x01 **** 32-bit table (V1), no 64-bit math support + * Checksum 0xB2 + * OEM ID "BOCHS " + * OEM Table ID "BXPCDSDT" + * OEM Revision 0x00000001 (1) + * Compiler ID "BXPC" + * Compiler Version 0x00000001 (1) + */ +DefinitionBlock ("", "DSDT", 1, "BOCHS ", "BXPCDSDT", 0x00000001) +{ + Scope (\) + { + OperationRegion (DBG, SystemIO, 0x0402, One) + Field (DBG, ByteAcc, NoLock, Preserve) + { + DBGB, 8 + } + + Method (DBUG, 1, NotSerialized) + { + ToHexString (Arg0, Local0) + ToBuffer (Local0, Local0) + Local1 = (SizeOf (Local0) - One) + Local2 = Zero + While ((Local2 < Local1)) + { + DBGB = DerefOf (Local0 [Local2]) + Local2++ + } + + DBGB = 0x0A + } + } + + Scope (_SB) + { + Device (PCI0) + { + Name (_HID, EisaId ("PNP0A03") /* PCI Bus */) // _HID: Hardware ID + Name (_ADR, Zero) // _ADR: Address + Name (_UID, Zero) // _UID: Unique ID + } + } + + Scope (_SB) + { + Device (HPET) + { + Name (_HID, EisaId ("PNP0103") /* HPET System Timer */) // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + OperationRegion (HPTM, SystemMemory, 0xFED00000, 0x0400) + Field (HPTM, DWordAcc, Lock, Preserve) + { + VEND, 32, + PRD, 32 + } + + Method (_STA, 0, NotSerialized) // _STA: Status + { + Local0 = VEND /* \_SB_.HPET.VEND */ + Local1 = PRD /* \_SB_.HPET.PRD_ */ + Local0 >>= 0x10 + If (((Local0 == Zero) || (Local0 == 0xFFFF))) + { + Return (Zero) + } + + If (((Local1 == Zero) || (Local1 > 0x05F5E100))) + { + Return (Zero) + } + + Return (0x0F) + } + + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadOnly, + 0xFED00000, // Address Base + 0x00000400, // Address Length + ) + }) + } + } + + Scope (_SB.PCI0) + { + Device (ISA) + { + Name (_ADR, 0x00010000) // _ADR: Address + OperationRegion (P40C, PCI_Config, 0x60, 0x04) + } + } + + Scope (_SB.PCI0.ISA) + { + Device (KBD) + { + Name (_HID, EisaId ("PNP0303") /* IBM Enhanced Keyboard (101/102-key, PS/2 Mouse) */) // _HID: Hardware ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0060, // Range Minimum + 0x0060, // Range Maximum + 0x01, // Alignment + 0x01, // Length + ) + IO (Decode16, + 0x0064, // Range Minimum + 0x0064, // Range Maximum + 0x01, // Alignment + 0x01, // Length + ) + IRQNoFlags () + {1} + }) + } + + Device (MOU) + { + Name (_HID, EisaId ("PNP0F13") /* PS/2 Mouse */) // _HID: Hardware ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IRQNoFlags () + {12} + }) + } + + Device (FDC0) + { + Name (_HID, EisaId ("PNP0700")) // _HID: Hardware ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x03F2, // Range Minimum + 0x03F2, // Range Maximum + 0x00, // Alignment + 0x04, // Length + ) + IO (Decode16, + 0x03F7, // Range Minimum + 0x03F7, // Range Maximum + 0x00, // Alignment + 0x01, // Length + ) + IRQNoFlags () + {6} + DMA (Compatibility, NotBusMaster, Transfer8, ) + {2} + }) + Device (FLPA) + { + Name (_ADR, Zero) // _ADR: Address + Name (_FDI, Package (0x10) // _FDI: Floppy Drive Information + { + Zero, + 0x05, + 0x4F, + 0x30, + One, + 0xAF, + 0x02, + 0x25, + 0x02, + 0x12, + 0x1B, + 0xFF, + 0x6C, + 0xF6, + 0x0F, + 0x08 + }) + } + + Name (_FDE, Buffer (0x14) // _FDE: Floppy Disk Enumerate + { + /* 0000 */ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........ + /* 0008 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........ + /* 0010 */ 0x02, 0x00, 0x00, 0x00 // .... + }) + } + + Device (LPT1) + { + Name (_HID, EisaId ("PNP0400") /* Standard LPT Parallel Port */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0378, // Range Minimum + 0x0378, // Range Maximum + 0x08, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {7} + }) + } + + Device (COM1) + { + Name (_HID, EisaId ("PNP0501") /* 16550A-compatible COM Serial Port */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x03F8, // Range Minimum + 0x03F8, // Range Maximum + 0x00, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {4} + }) + } + + Device (RTC) + { + Name (_HID, EisaId ("PNP0B00") /* AT Real-Time Clock */) // _HID: Hardware ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0070, // Range Minimum + 0x0070, // Range Maximum + 0x01, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {8} + }) + } + } + + Scope (_SB.PCI0) + { + OperationRegion (PCST, SystemIO, 0xAE00, 0x08) + Field (PCST, DWordAcc, NoLock, WriteAsZeros) + { + PCIU, 32, + PCID, 32 + } + + OperationRegion (SEJ, SystemIO, 0xAE08, 0x04) + Field (SEJ, DWordAcc, NoLock, WriteAsZeros) + { + B0EJ, 32 + } + + OperationRegion (BNMR, SystemIO, 0xAE10, 0x04) + Field (BNMR, DWordAcc, NoLock, WriteAsZeros) + { + BNUM, 32 + } + + Mutex (BLCK, 0x00) + Method (PCEJ, 2, NotSerialized) + { + Acquire (BLCK, 0xFFFF) + BNUM = Arg0 + B0EJ = (One << Arg1) + Release (BLCK) + Return (Zero) + } + } + + Scope (_SB) + { + Scope (PCI0) + { + Method (_PRT, 0, NotSerialized) // _PRT: PCI Routing Table + { + Local0 = Package (0x80){} + Local1 = Zero + While ((Local1 < 0x80)) + { + Local2 = (Local1 >> 0x02) + Local3 = ((Local1 + Local2) & 0x03) + If ((Local3 == Zero)) + { + Local4 = Package (0x04) + { + Zero, + Zero, + LNKD, + Zero + } + } + + If ((Local3 == One)) + { + If ((Local1 == 0x04)) + { + Local4 = Package (0x04) + { + Zero, + Zero, + LNKS, + Zero + } + } + Else + { + Local4 = Package (0x04) + { + Zero, + Zero, + LNKA, + Zero + } + } + } + + If ((Local3 == 0x02)) + { + Local4 = Package (0x04) + { + Zero, + Zero, + LNKB, + Zero + } + } + + If ((Local3 == 0x03)) + { + Local4 = Package (0x04) + { + Zero, + Zero, + LNKC, + Zero + } + } + + Local4 [Zero] = ((Local2 << 0x10) | 0xFFFF) + Local4 [One] = (Local1 & 0x03) + Local0 [Local1] = Local4 + Local1++ + } + + Return (Local0) + } + } + + Field (PCI0.ISA.P40C, ByteAcc, NoLock, Preserve) + { + PRQ0, 8, + PRQ1, 8, + PRQ2, 8, + PRQ3, 8 + } + + Method (IQST, 1, NotSerialized) + { + If ((0x80 & Arg0)) + { + Return (0x09) + } + + Return (0x0B) + } + + Method (IQCR, 1, Serialized) + { + Name (PRR0, ResourceTemplate () + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, _Y00) + { + 0x00000000, + } + }) + CreateDWordField (PRR0, \_SB.IQCR._Y00._INT, PRRI) // _INT: Interrupts + If ((Arg0 < 0x80)) + { + PRRI = Arg0 + } + + Return (PRR0) /* \_SB_.IQCR.PRR0 */ + } + + Device (LNKA) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQ0)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQ0 |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQ0)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQ0 = PRRI /* \_SB_.LNKA._SRS.PRRI */ + } + } + + Device (LNKB) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQ1)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQ1 |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQ1)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQ1 = PRRI /* \_SB_.LNKB._SRS.PRRI */ + } + } + + Device (LNKC) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x02) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQ2)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQ2 |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQ2)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQ2 = PRRI /* \_SB_.LNKC._SRS.PRRI */ + } + } + + Device (LNKD) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x03) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQ3)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQ3 |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQ3)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQ3 = PRRI /* \_SB_.LNKD._SRS.PRRI */ + } + } + + Device (LNKS) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x04) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000009, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (0x0B) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (_PRS) /* \_SB_.LNKS._PRS */ + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + } + + Scope (_SB) + { + Device (\_SB.PCI0.PRES) + { + Name (_HID, EisaId ("PNP0A06") /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "CPU Hotplug resources") // _UID: Unique ID + Mutex (CPLK, 0x00) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0xAF00, // Range Minimum + 0xAF00, // Range Maximum + 0x01, // Alignment + 0x0C, // Length + ) + }) + OperationRegion (PRST, SystemIO, 0xAF00, 0x0C) + Field (PRST, ByteAcc, NoLock, WriteAsZeros) + { + Offset (0x04), + CPEN, 1, + CINS, 1, + CRMV, 1, + CEJ0, 1, + Offset (0x05), + CCMD, 8 + } + + Field (PRST, DWordAcc, NoLock, Preserve) + { + CSEL, 32, + Offset (0x08), + CDAT, 32 + } + + Method (_INI, 0, Serialized) // _INI: Initialize + { + CSEL = Zero + } + } + + Device (\_SB.CPUS) + { + Name (_HID, "ACPI0010" /* Processor Container Device */) // _HID: Hardware ID + Name (_CID, EisaId ("PNP0A05") /* Generic Container Device */) // _CID: Compatible ID + Method (CTFY, 2, NotSerialized) + { + If ((Arg0 == Zero)) + { + Notify (C000, Arg1) + } + } + + Method (CSTA, 1, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + Local0 = Zero + If ((\_SB.PCI0.PRES.CPEN == One)) + { + Local0 = 0x0F + } + + Release (\_SB.PCI0.PRES.CPLK) + Return (Local0) + } + + Method (CEJ0, 1, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + \_SB.PCI0.PRES.CEJ0 = One + Release (\_SB.PCI0.PRES.CPLK) + } + + Method (CSCN, 0, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + Local0 = One + While ((Local0 == One)) + { + Local0 = Zero + \_SB.PCI0.PRES.CCMD = Zero + If ((\_SB.PCI0.PRES.CINS == One)) + { + CTFY (\_SB.PCI0.PRES.CDAT, One) + \_SB.PCI0.PRES.CINS = One + Local0 = One + } + ElseIf ((\_SB.PCI0.PRES.CRMV == One)) + { + CTFY (\_SB.PCI0.PRES.CDAT, 0x03) + \_SB.PCI0.PRES.CRMV = One + Local0 = One + } + } + + Release (\_SB.PCI0.PRES.CPLK) + } + + Method (COST, 4, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + \_SB.PCI0.PRES.CCMD = One + \_SB.PCI0.PRES.CDAT = Arg1 + \_SB.PCI0.PRES.CCMD = 0x02 + \_SB.PCI0.PRES.CDAT = Arg2 + Release (\_SB.PCI0.PRES.CPLK) + } + + Processor (C000, 0x00, 0x00000000, 0x00) + { + Method (_STA, 0, Serialized) // _STA: Status + { + Return (CSTA (Zero)) + } + + Name (_MAT, Buffer (0x08) // _MAT: Multiple APIC Table Entry + { + 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 // ........ + }) + Method (_OST, 3, Serialized) // _OST: OSPM Status Indication + { + COST (Zero, Arg0, Arg1, Arg2) + } + + Name (_PXM, Zero) // _PXM: Device Proximity + } + } + } + + Method (\_GPE._E02, 0, NotSerialized) // _Exx: Edge-Triggered GPE, xx=0x00-0xFF + { + \_SB.CPUS.CSCN () + } + + Device (\_SB.PCI0.MHPD) + { + Name (_HID, "PNP0A06" /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "Memory hotplug resources") // _UID: Unique ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0A00, // Range Minimum + 0x0A00, // Range Maximum + 0x00, // Alignment + 0x18, // Length + ) + }) + OperationRegion (HPMR, SystemIO, 0x0A00, 0x18) + } + + Device (\_SB.MHPC) + { + Name (_HID, "PNP0A06" /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "DIMM devices") // _UID: Unique ID + Name (MDNR, 0x03) + Field (\_SB.PCI0.MHPD.HPMR, DWordAcc, NoLock, Preserve) + { + MRBL, 32, + MRBH, 32, + MRLL, 32, + MRLH, 32, + MPX, 32 + } + + Field (\_SB.PCI0.MHPD.HPMR, ByteAcc, NoLock, WriteAsZeros) + { + Offset (0x14), + MES, 1, + MINS, 1, + MRMV, 1, + MEJ, 1 + } + + Field (\_SB.PCI0.MHPD.HPMR, DWordAcc, NoLock, Preserve) + { + MSEL, 32, + MOEV, 32, + MOSC, 32 + } + + Method (_STA, 0, NotSerialized) // _STA: Status + { + If ((MDNR == Zero)) + { + Return (Zero) + } + + Return (0x0B) + } + + Mutex (MLCK, 0x00) + Method (MSCN, 0, NotSerialized) + { + If ((MDNR == Zero)) + { + Return (Zero) + } + + Local0 = Zero + Acquire (MLCK, 0xFFFF) + While ((Local0 < MDNR)) + { + MSEL = Local0 + If ((MINS == One)) + { + MTFY (Local0, One) + MINS = One + } + ElseIf ((MRMV == One)) + { + MTFY (Local0, 0x03) + MRMV = One + } + + Local0 += One + } + + Release (MLCK) + Return (One) + } + + Method (MRST, 1, NotSerialized) + { + Local0 = Zero + Acquire (MLCK, 0xFFFF) + MSEL = ToInteger (Arg0) + If ((MES == One)) + { + Local0 = 0x0F + } + + Release (MLCK) + Return (Local0) + } + + Method (MCRS, 1, Serialized) + { + Acquire (MLCK, 0xFFFF) + MSEL = ToInteger (Arg0) + Name (MR64, ResourceTemplate () + { + QWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x0000000000000000, // Granularity + 0x0000000000000000, // Range Minimum + 0xFFFFFFFFFFFFFFFE, // Range Maximum + 0x0000000000000000, // Translation Offset + 0xFFFFFFFFFFFFFFFF, // Length + ,, _Y01, AddressRangeMemory, TypeStatic) + }) + CreateDWordField (MR64, \_SB.MHPC.MCRS._Y01._MIN, MINL) // _MIN: Minimum Base Address + CreateDWordField (MR64, 0x12, MINH) + CreateDWordField (MR64, \_SB.MHPC.MCRS._Y01._LEN, LENL) // _LEN: Length + CreateDWordField (MR64, 0x2A, LENH) + CreateDWordField (MR64, \_SB.MHPC.MCRS._Y01._MAX, MAXL) // _MAX: Maximum Base Address + CreateDWordField (MR64, 0x1A, MAXH) + MINH = MRBH /* \_SB_.MHPC.MRBH */ + MINL = MRBL /* \_SB_.MHPC.MRBL */ + LENH = MRLH /* \_SB_.MHPC.MRLH */ + LENL = MRLL /* \_SB_.MHPC.MRLL */ + MAXL = (MINL + LENL) /* \_SB_.MHPC.MCRS.LENL */ + MAXH = (MINH + LENH) /* \_SB_.MHPC.MCRS.LENH */ + If ((MAXL < MINL)) + { + MAXH += One + } + + If ((MAXL < One)) + { + MAXH -= One + } + + MAXL -= One + If ((MAXH == Zero)) + { + Name (MR32, ResourceTemplate () + { + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x00000000, // Granularity + 0x00000000, // Range Minimum + 0xFFFFFFFE, // Range Maximum + 0x00000000, // Translation Offset + 0xFFFFFFFF, // Length + ,, _Y02, AddressRangeMemory, TypeStatic) + }) + CreateDWordField (MR32, \_SB.MHPC.MCRS._Y02._MIN, MIN) // _MIN: Minimum Base Address + CreateDWordField (MR32, \_SB.MHPC.MCRS._Y02._MAX, MAX) // _MAX: Maximum Base Address + CreateDWordField (MR32, \_SB.MHPC.MCRS._Y02._LEN, LEN) // _LEN: Length + MIN = MINL /* \_SB_.MHPC.MCRS.MINL */ + MAX = MAXL /* \_SB_.MHPC.MCRS.MAXL */ + LEN = LENL /* \_SB_.MHPC.MCRS.LENL */ + Release (MLCK) + Return (MR32) /* \_SB_.MHPC.MCRS.MR32 */ + } + + Release (MLCK) + Return (MR64) /* \_SB_.MHPC.MCRS.MR64 */ + } + + Method (MPXM, 1, NotSerialized) + { + Acquire (MLCK, 0xFFFF) + MSEL = ToInteger (Arg0) + Local0 = MPX /* \_SB_.MHPC.MPX_ */ + Release (MLCK) + Return (Local0) + } + + Method (MOST, 4, NotSerialized) + { + Acquire (MLCK, 0xFFFF) + MSEL = ToInteger (Arg0) + MOEV = Arg1 + MOSC = Arg2 + Release (MLCK) + } + + Method (MEJ0, 2, NotSerialized) + { + Acquire (MLCK, 0xFFFF) + MSEL = ToInteger (Arg0) + MEJ = One + Release (MLCK) + } + + Device (MP00) + { + Name (_UID, "0x00") // _UID: Unique ID + Name (_HID, EisaId ("PNP0C80") /* Memory Device */) // _HID: Hardware ID + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (MCRS (_UID)) + } + + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (MRST (_UID)) + } + + Method (_PXM, 0, NotSerialized) // _PXM: Device Proximity + { + Return (MPXM (_UID)) + } + + Method (_OST, 3, NotSerialized) // _OST: OSPM Status Indication + { + MOST (_UID, Arg0, Arg1, Arg2) + } + + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + MEJ0 (_UID, Arg0) + } + } + + Device (MP01) + { + Name (_UID, "0x01") // _UID: Unique ID + Name (_HID, EisaId ("PNP0C80") /* Memory Device */) // _HID: Hardware ID + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (MCRS (_UID)) + } + + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (MRST (_UID)) + } + + Method (_PXM, 0, NotSerialized) // _PXM: Device Proximity + { + Return (MPXM (_UID)) + } + + Method (_OST, 3, NotSerialized) // _OST: OSPM Status Indication + { + MOST (_UID, Arg0, Arg1, Arg2) + } + + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + MEJ0 (_UID, Arg0) + } + } + + Device (MP02) + { + Name (_UID, "0x02") // _UID: Unique ID + Name (_HID, EisaId ("PNP0C80") /* Memory Device */) // _HID: Hardware ID + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (MCRS (_UID)) + } + + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (MRST (_UID)) + } + + Method (_PXM, 0, NotSerialized) // _PXM: Device Proximity + { + Return (MPXM (_UID)) + } + + Method (_OST, 3, NotSerialized) // _OST: OSPM Status Indication + { + MOST (_UID, Arg0, Arg1, Arg2) + } + + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + MEJ0 (_UID, Arg0) + } + } + + Method (MTFY, 2, NotSerialized) + { + If ((Arg0 == Zero)) + { + Notify (MP00, Arg1) + } + + If ((Arg0 == One)) + { + Notify (MP01, Arg1) + } + + If ((Arg0 == 0x02)) + { + Notify (MP02, Arg1) + } + } + } + + Method (\_GPE._E03, 0, NotSerialized) // _Exx: Edge-Triggered GPE, xx=0x00-0xFF + { + \_SB.MHPC.MSCN () + } + + Scope (_GPE) + { + Name (_HID, "ACPI0006" /* GPE Block Device */) // _HID: Hardware ID + Method (_E01, 0, NotSerialized) // _Exx: Edge-Triggered GPE, xx=0x00-0xFF + { + Acquire (\_SB.PCI0.BLCK, 0xFFFF) + \_SB.PCI0.PCNT () + Release (\_SB.PCI0.BLCK) + } + } + + Scope (\_SB.PCI0) + { + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode, + 0x0000, // Granularity + 0x0000, // Range Minimum + 0x00FF, // Range Maximum + 0x0000, // Translation Offset + 0x0100, // Length + ,, ) + IO (Decode16, + 0x0CF8, // Range Minimum + 0x0CF8, // Range Maximum + 0x01, // Alignment + 0x08, // Length + ) + WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, + 0x0000, // Granularity + 0x0000, // Range Minimum + 0x0CF7, // Range Maximum + 0x0000, // Translation Offset + 0x0CF8, // Length + ,, , TypeStatic, DenseTranslation) + WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, + 0x0000, // Granularity + 0x0D00, // Range Minimum + 0xFFFF, // Range Maximum + 0x0000, // Translation Offset + 0xF300, // Length + ,, , TypeStatic, DenseTranslation) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x00000000, // Granularity + 0x000A0000, // Range Minimum + 0x000BFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0x00020000, // Length + ,, , AddressRangeMemory, TypeStatic) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite, + 0x00000000, // Granularity + 0x08000000, // Range Minimum + 0xFEBFFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0xF6C00000, // Length + ,, , AddressRangeMemory, TypeStatic) + QWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x0000000000000000, // Granularity + 0x0000000200000000, // Range Minimum + 0x000000027FFFFFFF, // Range Maximum + 0x0000000000000000, // Translation Offset + 0x0000000080000000, // Length + ,, , AddressRangeMemory, TypeStatic) + }) + Device (GPE0) + { + Name (_HID, "PNP0A06" /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "GPE0 resources") // _UID: Unique ID + Name (_STA, 0x0B) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0xAFE0, // Range Minimum + 0xAFE0, // Range Maximum + 0x01, // Alignment + 0x04, // Length + ) + }) + } + + Device (PHPR) + { + Name (_HID, "PNP0A06" /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "PCI Hotplug resources") // _UID: Unique ID + Name (_STA, 0x0B) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0xAE00, // Range Minimum + 0xAE00, // Range Maximum + 0x01, // Alignment + 0x14, // Length + ) + }) + } + } + + Scope (\) + { + Name (_S3, Package (0x04) // _S3_: S3 System State + { + One, + One, + Zero, + Zero + }) + Name (_S4, Package (0x04) // _S4_: S4 System State + { + 0x02, + 0x02, + Zero, + Zero + }) + Name (_S5, Package (0x04) // _S5_: S5 System State + { + Zero, + Zero, + Zero, + Zero + }) + } + + Scope (\_SB.PCI0) + { + Device (FWCF) + { + Name (_HID, "QEMU0002") // _HID: Hardware ID + Name (_STA, 0x0B) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0510, // Range Minimum + 0x0510, // Range Maximum + 0x01, // Alignment + 0x0C, // Length + ) + }) + } + } + + Scope (\_SB) + { + Scope (PCI0) + { + Name (BSEL, Zero) + Device (S00) + { + Name (_ADR, Zero) // _ADR: Address + } + + Device (S10) + { + Name (_ADR, 0x00020000) // _ADR: Address + Method (_S1D, 0, NotSerialized) // _S1D: S1 Device State + { + Return (Zero) + } + + Method (_S2D, 0, NotSerialized) // _S2D: S2 Device State + { + Return (Zero) + } + + Method (_S3D, 0, NotSerialized) // _S3D: S3 Device State + { + Return (Zero) + } + } + + Device (S18) + { + Name (_SUN, 0x03) // _SUN: Slot User Number + Name (_ADR, 0x00030000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S20) + { + Name (_SUN, 0x04) // _SUN: Slot User Number + Name (_ADR, 0x00040000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S28) + { + Name (_SUN, 0x05) // _SUN: Slot User Number + Name (_ADR, 0x00050000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S30) + { + Name (_SUN, 0x06) // _SUN: Slot User Number + Name (_ADR, 0x00060000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S38) + { + Name (_SUN, 0x07) // _SUN: Slot User Number + Name (_ADR, 0x00070000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S40) + { + Name (_SUN, 0x08) // _SUN: Slot User Number + Name (_ADR, 0x00080000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S48) + { + Name (_SUN, 0x09) // _SUN: Slot User Number + Name (_ADR, 0x00090000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S50) + { + Name (_SUN, 0x0A) // _SUN: Slot User Number + Name (_ADR, 0x000A0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S58) + { + Name (_SUN, 0x0B) // _SUN: Slot User Number + Name (_ADR, 0x000B0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S60) + { + Name (_SUN, 0x0C) // _SUN: Slot User Number + Name (_ADR, 0x000C0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S68) + { + Name (_SUN, 0x0D) // _SUN: Slot User Number + Name (_ADR, 0x000D0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S70) + { + Name (_SUN, 0x0E) // _SUN: Slot User Number + Name (_ADR, 0x000E0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S78) + { + Name (_SUN, 0x0F) // _SUN: Slot User Number + Name (_ADR, 0x000F0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S80) + { + Name (_SUN, 0x10) // _SUN: Slot User Number + Name (_ADR, 0x00100000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S88) + { + Name (_SUN, 0x11) // _SUN: Slot User Number + Name (_ADR, 0x00110000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S90) + { + Name (_SUN, 0x12) // _SUN: Slot User Number + Name (_ADR, 0x00120000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S98) + { + Name (_SUN, 0x13) // _SUN: Slot User Number + Name (_ADR, 0x00130000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SA0) + { + Name (_SUN, 0x14) // _SUN: Slot User Number + Name (_ADR, 0x00140000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SA8) + { + Name (_SUN, 0x15) // _SUN: Slot User Number + Name (_ADR, 0x00150000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SB0) + { + Name (_SUN, 0x16) // _SUN: Slot User Number + Name (_ADR, 0x00160000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SB8) + { + Name (_SUN, 0x17) // _SUN: Slot User Number + Name (_ADR, 0x00170000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SC0) + { + Name (_SUN, 0x18) // _SUN: Slot User Number + Name (_ADR, 0x00180000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SC8) + { + Name (_SUN, 0x19) // _SUN: Slot User Number + Name (_ADR, 0x00190000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SD0) + { + Name (_SUN, 0x1A) // _SUN: Slot User Number + Name (_ADR, 0x001A0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SD8) + { + Name (_SUN, 0x1B) // _SUN: Slot User Number + Name (_ADR, 0x001B0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SE0) + { + Name (_SUN, 0x1C) // _SUN: Slot User Number + Name (_ADR, 0x001C0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SE8) + { + Name (_SUN, 0x1D) // _SUN: Slot User Number + Name (_ADR, 0x001D0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SF0) + { + Name (_SUN, 0x1E) // _SUN: Slot User Number + Name (_ADR, 0x001E0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SF8) + { + Name (_SUN, 0x1F) // _SUN: Slot User Number + Name (_ADR, 0x001F0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Method (DVNT, 2, NotSerialized) + { + If ((Arg0 & 0x08)) + { + Notify (S18, Arg1) + } + + If ((Arg0 & 0x10)) + { + Notify (S20, Arg1) + } + + If ((Arg0 & 0x20)) + { + Notify (S28, Arg1) + } + + If ((Arg0 & 0x40)) + { + Notify (S30, Arg1) + } + + If ((Arg0 & 0x80)) + { + Notify (S38, Arg1) + } + + If ((Arg0 & 0x0100)) + { + Notify (S40, Arg1) + } + + If ((Arg0 & 0x0200)) + { + Notify (S48, Arg1) + } + + If ((Arg0 & 0x0400)) + { + Notify (S50, Arg1) + } + + If ((Arg0 & 0x0800)) + { + Notify (S58, Arg1) + } + + If ((Arg0 & 0x1000)) + { + Notify (S60, Arg1) + } + + If ((Arg0 & 0x2000)) + { + Notify (S68, Arg1) + } + + If ((Arg0 & 0x4000)) + { + Notify (S70, Arg1) + } + + If ((Arg0 & 0x8000)) + { + Notify (S78, Arg1) + } + + If ((Arg0 & 0x00010000)) + { + Notify (S80, Arg1) + } + + If ((Arg0 & 0x00020000)) + { + Notify (S88, Arg1) + } + + If ((Arg0 & 0x00040000)) + { + Notify (S90, Arg1) + } + + If ((Arg0 & 0x00080000)) + { + Notify (S98, Arg1) + } + + If ((Arg0 & 0x00100000)) + { + Notify (SA0, Arg1) + } + + If ((Arg0 & 0x00200000)) + { + Notify (SA8, Arg1) + } + + If ((Arg0 & 0x00400000)) + { + Notify (SB0, Arg1) + } + + If ((Arg0 & 0x00800000)) + { + Notify (SB8, Arg1) + } + + If ((Arg0 & 0x01000000)) + { + Notify (SC0, Arg1) + } + + If ((Arg0 & 0x02000000)) + { + Notify (SC8, Arg1) + } + + If ((Arg0 & 0x04000000)) + { + Notify (SD0, Arg1) + } + + If ((Arg0 & 0x08000000)) + { + Notify (SD8, Arg1) + } + + If ((Arg0 & 0x10000000)) + { + Notify (SE0, Arg1) + } + + If ((Arg0 & 0x20000000)) + { + Notify (SE8, Arg1) + } + + If ((Arg0 & 0x40000000)) + { + Notify (SF0, Arg1) + } + + If ((Arg0 & 0x80000000)) + { + Notify (SF8, Arg1) + } + } + + Method (PCNT, 0, NotSerialized) + { + BNUM = Zero + DVNT (PCIU, One) + DVNT (PCID, 0x03) + } + } + } +} + diff --git a/tests/data/acpi/pc/DSDT.numamem.dsl b/tests/data/acpi/pc/DSDT.numamem.dsl new file mode 100644 index 0000000000..3d08447f1e --- /dev/null +++ b/tests/data/acpi/pc/DSDT.numamem.dsl @@ -0,0 +1,1321 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembling to symbolic ASL+ operators + * + * Disassembly of tests/data/acpi/pc/DSDT.numamem, Tue Aug 4 11:14:15 2020 + * + * Original Table Header: + * Signature "DSDT" + * Length 0x0000134C (4940) + * Revision 0x01 **** 32-bit table (V1), no 64-bit math support + * Checksum 0x6A + * OEM ID "BOCHS " + * OEM Table ID "BXPCDSDT" + * OEM Revision 0x00000001 (1) + * Compiler ID "BXPC" + * Compiler Version 0x00000001 (1) + */ +DefinitionBlock ("", "DSDT", 1, "BOCHS ", "BXPCDSDT", 0x00000001) +{ + Scope (\) + { + OperationRegion (DBG, SystemIO, 0x0402, One) + Field (DBG, ByteAcc, NoLock, Preserve) + { + DBGB, 8 + } + + Method (DBUG, 1, NotSerialized) + { + ToHexString (Arg0, Local0) + ToBuffer (Local0, Local0) + Local1 = (SizeOf (Local0) - One) + Local2 = Zero + While ((Local2 < Local1)) + { + DBGB = DerefOf (Local0 [Local2]) + Local2++ + } + + DBGB = 0x0A + } + } + + Scope (_SB) + { + Device (PCI0) + { + Name (_HID, EisaId ("PNP0A03") /* PCI Bus */) // _HID: Hardware ID + Name (_ADR, Zero) // _ADR: Address + Name (_UID, Zero) // _UID: Unique ID + } + } + + Scope (_SB) + { + Device (HPET) + { + Name (_HID, EisaId ("PNP0103") /* HPET System Timer */) // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + OperationRegion (HPTM, SystemMemory, 0xFED00000, 0x0400) + Field (HPTM, DWordAcc, Lock, Preserve) + { + VEND, 32, + PRD, 32 + } + + Method (_STA, 0, NotSerialized) // _STA: Status + { + Local0 = VEND /* \_SB_.HPET.VEND */ + Local1 = PRD /* \_SB_.HPET.PRD_ */ + Local0 >>= 0x10 + If (((Local0 == Zero) || (Local0 == 0xFFFF))) + { + Return (Zero) + } + + If (((Local1 == Zero) || (Local1 > 0x05F5E100))) + { + Return (Zero) + } + + Return (0x0F) + } + + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadOnly, + 0xFED00000, // Address Base + 0x00000400, // Address Length + ) + }) + } + } + + Scope (_SB.PCI0) + { + Device (ISA) + { + Name (_ADR, 0x00010000) // _ADR: Address + OperationRegion (P40C, PCI_Config, 0x60, 0x04) + } + } + + Scope (_SB.PCI0.ISA) + { + Device (KBD) + { + Name (_HID, EisaId ("PNP0303") /* IBM Enhanced Keyboard (101/102-key, PS/2 Mouse) */) // _HID: Hardware ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0060, // Range Minimum + 0x0060, // Range Maximum + 0x01, // Alignment + 0x01, // Length + ) + IO (Decode16, + 0x0064, // Range Minimum + 0x0064, // Range Maximum + 0x01, // Alignment + 0x01, // Length + ) + IRQNoFlags () + {1} + }) + } + + Device (MOU) + { + Name (_HID, EisaId ("PNP0F13") /* PS/2 Mouse */) // _HID: Hardware ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IRQNoFlags () + {12} + }) + } + + Device (FDC0) + { + Name (_HID, EisaId ("PNP0700")) // _HID: Hardware ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x03F2, // Range Minimum + 0x03F2, // Range Maximum + 0x00, // Alignment + 0x04, // Length + ) + IO (Decode16, + 0x03F7, // Range Minimum + 0x03F7, // Range Maximum + 0x00, // Alignment + 0x01, // Length + ) + IRQNoFlags () + {6} + DMA (Compatibility, NotBusMaster, Transfer8, ) + {2} + }) + Device (FLPA) + { + Name (_ADR, Zero) // _ADR: Address + Name (_FDI, Package (0x10) // _FDI: Floppy Drive Information + { + Zero, + 0x05, + 0x4F, + 0x30, + One, + 0xAF, + 0x02, + 0x25, + 0x02, + 0x12, + 0x1B, + 0xFF, + 0x6C, + 0xF6, + 0x0F, + 0x08 + }) + } + + Name (_FDE, Buffer (0x14) // _FDE: Floppy Disk Enumerate + { + /* 0000 */ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........ + /* 0008 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........ + /* 0010 */ 0x02, 0x00, 0x00, 0x00 // .... + }) + } + + Device (LPT1) + { + Name (_HID, EisaId ("PNP0400") /* Standard LPT Parallel Port */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0378, // Range Minimum + 0x0378, // Range Maximum + 0x08, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {7} + }) + } + + Device (COM1) + { + Name (_HID, EisaId ("PNP0501") /* 16550A-compatible COM Serial Port */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x03F8, // Range Minimum + 0x03F8, // Range Maximum + 0x00, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {4} + }) + } + + Device (RTC) + { + Name (_HID, EisaId ("PNP0B00") /* AT Real-Time Clock */) // _HID: Hardware ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0070, // Range Minimum + 0x0070, // Range Maximum + 0x01, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {8} + }) + } + } + + Scope (_SB.PCI0) + { + OperationRegion (PCST, SystemIO, 0xAE00, 0x08) + Field (PCST, DWordAcc, NoLock, WriteAsZeros) + { + PCIU, 32, + PCID, 32 + } + + OperationRegion (SEJ, SystemIO, 0xAE08, 0x04) + Field (SEJ, DWordAcc, NoLock, WriteAsZeros) + { + B0EJ, 32 + } + + OperationRegion (BNMR, SystemIO, 0xAE10, 0x04) + Field (BNMR, DWordAcc, NoLock, WriteAsZeros) + { + BNUM, 32 + } + + Mutex (BLCK, 0x00) + Method (PCEJ, 2, NotSerialized) + { + Acquire (BLCK, 0xFFFF) + BNUM = Arg0 + B0EJ = (One << Arg1) + Release (BLCK) + Return (Zero) + } + } + + Scope (_SB) + { + Scope (PCI0) + { + Method (_PRT, 0, NotSerialized) // _PRT: PCI Routing Table + { + Local0 = Package (0x80){} + Local1 = Zero + While ((Local1 < 0x80)) + { + Local2 = (Local1 >> 0x02) + Local3 = ((Local1 + Local2) & 0x03) + If ((Local3 == Zero)) + { + Local4 = Package (0x04) + { + Zero, + Zero, + LNKD, + Zero + } + } + + If ((Local3 == One)) + { + If ((Local1 == 0x04)) + { + Local4 = Package (0x04) + { + Zero, + Zero, + LNKS, + Zero + } + } + Else + { + Local4 = Package (0x04) + { + Zero, + Zero, + LNKA, + Zero + } + } + } + + If ((Local3 == 0x02)) + { + Local4 = Package (0x04) + { + Zero, + Zero, + LNKB, + Zero + } + } + + If ((Local3 == 0x03)) + { + Local4 = Package (0x04) + { + Zero, + Zero, + LNKC, + Zero + } + } + + Local4 [Zero] = ((Local2 << 0x10) | 0xFFFF) + Local4 [One] = (Local1 & 0x03) + Local0 [Local1] = Local4 + Local1++ + } + + Return (Local0) + } + } + + Field (PCI0.ISA.P40C, ByteAcc, NoLock, Preserve) + { + PRQ0, 8, + PRQ1, 8, + PRQ2, 8, + PRQ3, 8 + } + + Method (IQST, 1, NotSerialized) + { + If ((0x80 & Arg0)) + { + Return (0x09) + } + + Return (0x0B) + } + + Method (IQCR, 1, Serialized) + { + Name (PRR0, ResourceTemplate () + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, _Y00) + { + 0x00000000, + } + }) + CreateDWordField (PRR0, \_SB.IQCR._Y00._INT, PRRI) // _INT: Interrupts + If ((Arg0 < 0x80)) + { + PRRI = Arg0 + } + + Return (PRR0) /* \_SB_.IQCR.PRR0 */ + } + + Device (LNKA) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQ0)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQ0 |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQ0)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQ0 = PRRI /* \_SB_.LNKA._SRS.PRRI */ + } + } + + Device (LNKB) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQ1)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQ1 |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQ1)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQ1 = PRRI /* \_SB_.LNKB._SRS.PRRI */ + } + } + + Device (LNKC) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x02) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQ2)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQ2 |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQ2)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQ2 = PRRI /* \_SB_.LNKC._SRS.PRRI */ + } + } + + Device (LNKD) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x03) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQ3)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQ3 |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQ3)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQ3 = PRRI /* \_SB_.LNKD._SRS.PRRI */ + } + } + + Device (LNKS) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x04) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000009, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (0x0B) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (_PRS) /* \_SB_.LNKS._PRS */ + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + } + + Scope (_SB) + { + Device (\_SB.PCI0.PRES) + { + Name (_HID, EisaId ("PNP0A06") /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "CPU Hotplug resources") // _UID: Unique ID + Mutex (CPLK, 0x00) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0xAF00, // Range Minimum + 0xAF00, // Range Maximum + 0x01, // Alignment + 0x0C, // Length + ) + }) + OperationRegion (PRST, SystemIO, 0xAF00, 0x0C) + Field (PRST, ByteAcc, NoLock, WriteAsZeros) + { + Offset (0x04), + CPEN, 1, + CINS, 1, + CRMV, 1, + CEJ0, 1, + Offset (0x05), + CCMD, 8 + } + + Field (PRST, DWordAcc, NoLock, Preserve) + { + CSEL, 32, + Offset (0x08), + CDAT, 32 + } + + Method (_INI, 0, Serialized) // _INI: Initialize + { + CSEL = Zero + } + } + + Device (\_SB.CPUS) + { + Name (_HID, "ACPI0010" /* Processor Container Device */) // _HID: Hardware ID + Name (_CID, EisaId ("PNP0A05") /* Generic Container Device */) // _CID: Compatible ID + Method (CTFY, 2, NotSerialized) + { + If ((Arg0 == Zero)) + { + Notify (C000, Arg1) + } + } + + Method (CSTA, 1, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + Local0 = Zero + If ((\_SB.PCI0.PRES.CPEN == One)) + { + Local0 = 0x0F + } + + Release (\_SB.PCI0.PRES.CPLK) + Return (Local0) + } + + Method (CEJ0, 1, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + \_SB.PCI0.PRES.CEJ0 = One + Release (\_SB.PCI0.PRES.CPLK) + } + + Method (CSCN, 0, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + Local0 = One + While ((Local0 == One)) + { + Local0 = Zero + \_SB.PCI0.PRES.CCMD = Zero + If ((\_SB.PCI0.PRES.CINS == One)) + { + CTFY (\_SB.PCI0.PRES.CDAT, One) + \_SB.PCI0.PRES.CINS = One + Local0 = One + } + ElseIf ((\_SB.PCI0.PRES.CRMV == One)) + { + CTFY (\_SB.PCI0.PRES.CDAT, 0x03) + \_SB.PCI0.PRES.CRMV = One + Local0 = One + } + } + + Release (\_SB.PCI0.PRES.CPLK) + } + + Method (COST, 4, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + \_SB.PCI0.PRES.CCMD = One + \_SB.PCI0.PRES.CDAT = Arg1 + \_SB.PCI0.PRES.CCMD = 0x02 + \_SB.PCI0.PRES.CDAT = Arg2 + Release (\_SB.PCI0.PRES.CPLK) + } + + Processor (C000, 0x00, 0x00000000, 0x00) + { + Method (_STA, 0, Serialized) // _STA: Status + { + Return (CSTA (Zero)) + } + + Name (_MAT, Buffer (0x08) // _MAT: Multiple APIC Table Entry + { + 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 // ........ + }) + Method (_OST, 3, Serialized) // _OST: OSPM Status Indication + { + COST (Zero, Arg0, Arg1, Arg2) + } + + Name (_PXM, Zero) // _PXM: Device Proximity + } + } + } + + Method (\_GPE._E02, 0, NotSerialized) // _Exx: Edge-Triggered GPE, xx=0x00-0xFF + { + \_SB.CPUS.CSCN () + } + + Scope (_GPE) + { + Name (_HID, "ACPI0006" /* GPE Block Device */) // _HID: Hardware ID + Method (_E01, 0, NotSerialized) // _Exx: Edge-Triggered GPE, xx=0x00-0xFF + { + Acquire (\_SB.PCI0.BLCK, 0xFFFF) + \_SB.PCI0.PCNT () + Release (\_SB.PCI0.BLCK) + } + } + + Scope (\_SB.PCI0) + { + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode, + 0x0000, // Granularity + 0x0000, // Range Minimum + 0x00FF, // Range Maximum + 0x0000, // Translation Offset + 0x0100, // Length + ,, ) + IO (Decode16, + 0x0CF8, // Range Minimum + 0x0CF8, // Range Maximum + 0x01, // Alignment + 0x08, // Length + ) + WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, + 0x0000, // Granularity + 0x0000, // Range Minimum + 0x0CF7, // Range Maximum + 0x0000, // Translation Offset + 0x0CF8, // Length + ,, , TypeStatic, DenseTranslation) + WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, + 0x0000, // Granularity + 0x0D00, // Range Minimum + 0xFFFF, // Range Maximum + 0x0000, // Translation Offset + 0xF300, // Length + ,, , TypeStatic, DenseTranslation) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x00000000, // Granularity + 0x000A0000, // Range Minimum + 0x000BFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0x00020000, // Length + ,, , AddressRangeMemory, TypeStatic) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite, + 0x00000000, // Granularity + 0x08000000, // Range Minimum + 0xFEBFFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0xF6C00000, // Length + ,, , AddressRangeMemory, TypeStatic) + QWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x0000000000000000, // Granularity + 0x0000000100000000, // Range Minimum + 0x000000017FFFFFFF, // Range Maximum + 0x0000000000000000, // Translation Offset + 0x0000000080000000, // Length + ,, , AddressRangeMemory, TypeStatic) + }) + Device (GPE0) + { + Name (_HID, "PNP0A06" /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "GPE0 resources") // _UID: Unique ID + Name (_STA, 0x0B) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0xAFE0, // Range Minimum + 0xAFE0, // Range Maximum + 0x01, // Alignment + 0x04, // Length + ) + }) + } + + Device (PHPR) + { + Name (_HID, "PNP0A06" /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "PCI Hotplug resources") // _UID: Unique ID + Name (_STA, 0x0B) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0xAE00, // Range Minimum + 0xAE00, // Range Maximum + 0x01, // Alignment + 0x14, // Length + ) + }) + } + } + + Scope (\) + { + Name (_S3, Package (0x04) // _S3_: S3 System State + { + One, + One, + Zero, + Zero + }) + Name (_S4, Package (0x04) // _S4_: S4 System State + { + 0x02, + 0x02, + Zero, + Zero + }) + Name (_S5, Package (0x04) // _S5_: S5 System State + { + Zero, + Zero, + Zero, + Zero + }) + } + + Scope (\_SB.PCI0) + { + Device (FWCF) + { + Name (_HID, "QEMU0002") // _HID: Hardware ID + Name (_STA, 0x0B) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0510, // Range Minimum + 0x0510, // Range Maximum + 0x01, // Alignment + 0x0C, // Length + ) + }) + } + } + + Scope (\_SB) + { + Scope (PCI0) + { + Name (BSEL, Zero) + Device (S00) + { + Name (_ADR, Zero) // _ADR: Address + } + + Device (S10) + { + Name (_ADR, 0x00020000) // _ADR: Address + Method (_S1D, 0, NotSerialized) // _S1D: S1 Device State + { + Return (Zero) + } + + Method (_S2D, 0, NotSerialized) // _S2D: S2 Device State + { + Return (Zero) + } + + Method (_S3D, 0, NotSerialized) // _S3D: S3 Device State + { + Return (Zero) + } + } + + Device (S18) + { + Name (_SUN, 0x03) // _SUN: Slot User Number + Name (_ADR, 0x00030000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S20) + { + Name (_SUN, 0x04) // _SUN: Slot User Number + Name (_ADR, 0x00040000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S28) + { + Name (_SUN, 0x05) // _SUN: Slot User Number + Name (_ADR, 0x00050000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S30) + { + Name (_SUN, 0x06) // _SUN: Slot User Number + Name (_ADR, 0x00060000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S38) + { + Name (_SUN, 0x07) // _SUN: Slot User Number + Name (_ADR, 0x00070000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S40) + { + Name (_SUN, 0x08) // _SUN: Slot User Number + Name (_ADR, 0x00080000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S48) + { + Name (_SUN, 0x09) // _SUN: Slot User Number + Name (_ADR, 0x00090000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S50) + { + Name (_SUN, 0x0A) // _SUN: Slot User Number + Name (_ADR, 0x000A0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S58) + { + Name (_SUN, 0x0B) // _SUN: Slot User Number + Name (_ADR, 0x000B0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S60) + { + Name (_SUN, 0x0C) // _SUN: Slot User Number + Name (_ADR, 0x000C0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S68) + { + Name (_SUN, 0x0D) // _SUN: Slot User Number + Name (_ADR, 0x000D0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S70) + { + Name (_SUN, 0x0E) // _SUN: Slot User Number + Name (_ADR, 0x000E0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S78) + { + Name (_SUN, 0x0F) // _SUN: Slot User Number + Name (_ADR, 0x000F0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S80) + { + Name (_SUN, 0x10) // _SUN: Slot User Number + Name (_ADR, 0x00100000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S88) + { + Name (_SUN, 0x11) // _SUN: Slot User Number + Name (_ADR, 0x00110000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S90) + { + Name (_SUN, 0x12) // _SUN: Slot User Number + Name (_ADR, 0x00120000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (S98) + { + Name (_SUN, 0x13) // _SUN: Slot User Number + Name (_ADR, 0x00130000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SA0) + { + Name (_SUN, 0x14) // _SUN: Slot User Number + Name (_ADR, 0x00140000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SA8) + { + Name (_SUN, 0x15) // _SUN: Slot User Number + Name (_ADR, 0x00150000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SB0) + { + Name (_SUN, 0x16) // _SUN: Slot User Number + Name (_ADR, 0x00160000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SB8) + { + Name (_SUN, 0x17) // _SUN: Slot User Number + Name (_ADR, 0x00170000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SC0) + { + Name (_SUN, 0x18) // _SUN: Slot User Number + Name (_ADR, 0x00180000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SC8) + { + Name (_SUN, 0x19) // _SUN: Slot User Number + Name (_ADR, 0x00190000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SD0) + { + Name (_SUN, 0x1A) // _SUN: Slot User Number + Name (_ADR, 0x001A0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SD8) + { + Name (_SUN, 0x1B) // _SUN: Slot User Number + Name (_ADR, 0x001B0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SE0) + { + Name (_SUN, 0x1C) // _SUN: Slot User Number + Name (_ADR, 0x001C0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SE8) + { + Name (_SUN, 0x1D) // _SUN: Slot User Number + Name (_ADR, 0x001D0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SF0) + { + Name (_SUN, 0x1E) // _SUN: Slot User Number + Name (_ADR, 0x001E0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Device (SF8) + { + Name (_SUN, 0x1F) // _SUN: Slot User Number + Name (_ADR, 0x001F0000) // _ADR: Address + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + PCEJ (BSEL, _SUN) + } + } + + Method (DVNT, 2, NotSerialized) + { + If ((Arg0 & 0x08)) + { + Notify (S18, Arg1) + } + + If ((Arg0 & 0x10)) + { + Notify (S20, Arg1) + } + + If ((Arg0 & 0x20)) + { + Notify (S28, Arg1) + } + + If ((Arg0 & 0x40)) + { + Notify (S30, Arg1) + } + + If ((Arg0 & 0x80)) + { + Notify (S38, Arg1) + } + + If ((Arg0 & 0x0100)) + { + Notify (S40, Arg1) + } + + If ((Arg0 & 0x0200)) + { + Notify (S48, Arg1) + } + + If ((Arg0 & 0x0400)) + { + Notify (S50, Arg1) + } + + If ((Arg0 & 0x0800)) + { + Notify (S58, Arg1) + } + + If ((Arg0 & 0x1000)) + { + Notify (S60, Arg1) + } + + If ((Arg0 & 0x2000)) + { + Notify (S68, Arg1) + } + + If ((Arg0 & 0x4000)) + { + Notify (S70, Arg1) + } + + If ((Arg0 & 0x8000)) + { + Notify (S78, Arg1) + } + + If ((Arg0 & 0x00010000)) + { + Notify (S80, Arg1) + } + + If ((Arg0 & 0x00020000)) + { + Notify (S88, Arg1) + } + + If ((Arg0 & 0x00040000)) + { + Notify (S90, Arg1) + } + + If ((Arg0 & 0x00080000)) + { + Notify (S98, Arg1) + } + + If ((Arg0 & 0x00100000)) + { + Notify (SA0, Arg1) + } + + If ((Arg0 & 0x00200000)) + { + Notify (SA8, Arg1) + } + + If ((Arg0 & 0x00400000)) + { + Notify (SB0, Arg1) + } + + If ((Arg0 & 0x00800000)) + { + Notify (SB8, Arg1) + } + + If ((Arg0 & 0x01000000)) + { + Notify (SC0, Arg1) + } + + If ((Arg0 & 0x02000000)) + { + Notify (SC8, Arg1) + } + + If ((Arg0 & 0x04000000)) + { + Notify (SD0, Arg1) + } + + If ((Arg0 & 0x08000000)) + { + Notify (SD8, Arg1) + } + + If ((Arg0 & 0x10000000)) + { + Notify (SE0, Arg1) + } + + If ((Arg0 & 0x20000000)) + { + Notify (SE8, Arg1) + } + + If ((Arg0 & 0x40000000)) + { + Notify (SF0, Arg1) + } + + If ((Arg0 & 0x80000000)) + { + Notify (SF8, Arg1) + } + } + + Method (PCNT, 0, NotSerialized) + { + BNUM = Zero + DVNT (PCIU, One) + DVNT (PCID, 0x03) + } + } + } +} + diff --git a/tests/data/acpi/pc/DSDT.roothp b/tests/data/acpi/pc/DSDT.roothp index 886a5e6952f6f034bdd80d44d43de5975a1a4b0f..18caa0765fc10adb29e01717390ead6c63cd0f3c 100644 GIT binary patch delta 323 zcmeCu=+NYH33dtT5Mf|o{Irp43mcP{-Q)votC@U_C+D*NWpWdnoWmhg&*ALn8ZN~2 zzkngRfH7r}i_qj0#sY?v0>*>_hQviaJQF4-FiuToEMQ0|NRH8Gi4S&)4{-K02nccw zb`Ey+DPTYsboO;wAU+jc)WtC*dFcYq$%$P53m8+D7Qp1|VP=68EKr#Y6Nd?V`UNu< zBzJ%unaEI@SiqRD(0qX@hO!{vFh=JPx5#8J<^o1^GlG1>3K$bglM5J<7P+!aO-d|i k1{;{fknGG2(!^Mh9Bo*TJXwcBmDSTPxHM_AE$3M-04)<@N&o-= delta 193 zcmeCs?9$+J33dtL5@BFqe72Em3mcP<+2jLktC{?@C+D*NW%A&goWmi*SHPIC$dP+; z0%HL~LIJ~MLoQ*z1@0`9WAs_#gPr07oIMQ!f?R{0J^g|iokQFr(ZyXHLl_Gf(M3J| of(sZE7J9QR@L-v2!zrnYuE51Hgo_zdUyyHD0b|1E-JEB+0A02<>i_@% diff --git a/tests/data/acpi/pc/FACP.acpihmat b/tests/data/acpi/pc/FACP.acpihmat new file mode 100644 index 0000000000000000000000000000000000000000..261ebdc5d1c3bdf18fb7935314a04fd7f6f92a7a GIT binary patch literal 116 zcmXwtu?c`M5CAU{f>v3<8QdUw2zCZ+9K-=!#ll)}B1g~(A|dgbJ1#hhE1-5i$vF3Z mi4vSd1?0~DQFL6u`v9g~U7cwS+-Lm_S_8=@TMi7svB3xKUJn5P literal 0 HcmV?d00001 diff --git a/tests/data/acpi/pc/FACP.acpihmat.dsl b/tests/data/acpi/pc/FACP.acpihmat.dsl new file mode 100644 index 0000000000..226fd58ec9 --- /dev/null +++ b/tests/data/acpi/pc/FACP.acpihmat.dsl @@ -0,0 +1,99 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/FACP.acpihmat, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [FACP] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "FACP" [Fixed ACPI Description Table (FADT)] +[004h 0004 4] Table Length : 00000074 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : A1 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCFACP" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] FACS Address : 00000000 +[028h 0040 4] DSDT Address : 00000000 +[02Ch 0044 1] Model : 01 +[02Dh 0045 1] PM Profile : 00 [Unspecified] +[02Eh 0046 2] SCI Interrupt : 0009 +[030h 0048 4] SMI Command Port : 000000B2 +[034h 0052 1] ACPI Enable Value : F1 +[035h 0053 1] ACPI Disable Value : F0 +[036h 0054 1] S4BIOS Command : 00 +[037h 0055 1] P-State Control : 00 +[038h 0056 4] PM1A Event Block Address : 00000600 +[03Ch 0060 4] PM1B Event Block Address : 00000000 +[040h 0064 4] PM1A Control Block Address : 00000604 +[044h 0068 4] PM1B Control Block Address : 00000000 +[048h 0072 4] PM2 Control Block Address : 00000000 +[04Ch 0076 4] PM Timer Block Address : 00000608 +[050h 0080 4] GPE0 Block Address : 0000AFE0 +[054h 0084 4] GPE1 Block Address : 00000000 +[058h 0088 1] PM1 Event Block Length : 04 +[059h 0089 1] PM1 Control Block Length : 02 +[05Ah 0090 1] PM2 Control Block Length : 00 +[05Bh 0091 1] PM Timer Block Length : 04 +[05Ch 0092 1] GPE0 Block Length : 04 +[05Dh 0093 1] GPE1 Block Length : 00 +[05Eh 0094 1] GPE1 Base Offset : 00 +[05Fh 0095 1] _CST Support : 00 +[060h 0096 2] C2 Latency : 0FFF +[062h 0098 2] C3 Latency : 0FFF +[064h 0100 2] CPU Cache Size : 0000 +[066h 0102 2] Cache Flush Stride : 0000 +[068h 0104 1] Duty Cycle Offset : 00 +[069h 0105 1] Duty Cycle Width : 00 +[06Ah 0106 1] RTC Day Alarm Index : 00 +[06Bh 0107 1] RTC Month Alarm Index : 00 +[06Ch 0108 1] RTC Century Index : 32 +[06Dh 0109 2] Boot Flags (decoded below) : 0000 + Legacy Devices Supported (V2) : 0 + 8042 Present on ports 60/64 (V2) : 0 + VGA Not Present (V4) : 0 + MSI Not Supported (V4) : 0 + PCIe ASPM Not Supported (V4) : 0 + CMOS RTC Not Present (V5) : 0 +[06Fh 0111 1] Reserved : 00 +[070h 0112 4] Flags (decoded below) : 000080A5 + WBINVD instruction is operational (V1) : 1 + WBINVD flushes all caches (V1) : 0 + All CPUs support C1 (V1) : 1 + C2 works on MP system (V1) : 0 + Control Method Power Button (V1) : 0 + Control Method Sleep Button (V1) : 1 + RTC wake not in fixed reg space (V1) : 0 + RTC can wake system from S4 (V1) : 1 + 32-bit PM Timer (V1) : 0 + Docking Supported (V1) : 0 + Reset Register Supported (V2) : 0 + Sealed Case (V3) : 0 + Headless - No Video (V3) : 0 + Use native instr after SLP_TYPx (V3) : 0 + PCIEXP_WAK Bits Supported (V4) : 0 + Use Platform Timer (V4) : 1 + RTC_STS valid on S4 wake (V4) : 0 + Remote Power-on capable (V4) : 0 + Use APIC Cluster Model (V4) : 0 + Use APIC Physical Destination Mode (V4) : 0 + Hardware Reduced (V5) : 0 + Low Power S0 Idle (V5) : 0 + +Raw Table Data: Length 116 (0x74) + + 0000: 46 41 43 50 74 00 00 00 01 A1 42 4F 43 48 53 20 // FACPt.....BOCHS + 0010: 42 58 50 43 46 41 43 50 01 00 00 00 42 58 50 43 // BXPCFACP....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 01 00 09 00 // ................ + 0030: B2 00 00 00 F1 F0 00 00 00 06 00 00 00 00 00 00 // ................ + 0040: 04 06 00 00 00 00 00 00 00 00 00 00 08 06 00 00 // ................ + 0050: E0 AF 00 00 00 00 00 00 04 02 00 04 04 00 00 00 // ................ + 0060: FF 0F FF 0F 00 00 00 00 00 00 00 00 32 00 00 00 // ............2... + 0070: A5 80 00 00 // .... diff --git a/tests/data/acpi/pc/FACP.bridge b/tests/data/acpi/pc/FACP.bridge new file mode 100644 index 0000000000000000000000000000000000000000..261ebdc5d1c3bdf18fb7935314a04fd7f6f92a7a GIT binary patch literal 116 zcmXwtu?c`M5CAU{f>v3<8QdUw2zCZ+9K-=!#ll)}B1g~(A|dgbJ1#hhE1-5i$vF3Z mi4vSd1?0~DQFL6u`v9g~U7cwS+-Lm_S_8=@TMi7svB3xKUJn5P literal 0 HcmV?d00001 diff --git a/tests/data/acpi/pc/FACP.bridge.dsl b/tests/data/acpi/pc/FACP.bridge.dsl new file mode 100644 index 0000000000..11b371812d --- /dev/null +++ b/tests/data/acpi/pc/FACP.bridge.dsl @@ -0,0 +1,99 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/FACP.bridge, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [FACP] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "FACP" [Fixed ACPI Description Table (FADT)] +[004h 0004 4] Table Length : 00000074 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : A1 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCFACP" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] FACS Address : 00000000 +[028h 0040 4] DSDT Address : 00000000 +[02Ch 0044 1] Model : 01 +[02Dh 0045 1] PM Profile : 00 [Unspecified] +[02Eh 0046 2] SCI Interrupt : 0009 +[030h 0048 4] SMI Command Port : 000000B2 +[034h 0052 1] ACPI Enable Value : F1 +[035h 0053 1] ACPI Disable Value : F0 +[036h 0054 1] S4BIOS Command : 00 +[037h 0055 1] P-State Control : 00 +[038h 0056 4] PM1A Event Block Address : 00000600 +[03Ch 0060 4] PM1B Event Block Address : 00000000 +[040h 0064 4] PM1A Control Block Address : 00000604 +[044h 0068 4] PM1B Control Block Address : 00000000 +[048h 0072 4] PM2 Control Block Address : 00000000 +[04Ch 0076 4] PM Timer Block Address : 00000608 +[050h 0080 4] GPE0 Block Address : 0000AFE0 +[054h 0084 4] GPE1 Block Address : 00000000 +[058h 0088 1] PM1 Event Block Length : 04 +[059h 0089 1] PM1 Control Block Length : 02 +[05Ah 0090 1] PM2 Control Block Length : 00 +[05Bh 0091 1] PM Timer Block Length : 04 +[05Ch 0092 1] GPE0 Block Length : 04 +[05Dh 0093 1] GPE1 Block Length : 00 +[05Eh 0094 1] GPE1 Base Offset : 00 +[05Fh 0095 1] _CST Support : 00 +[060h 0096 2] C2 Latency : 0FFF +[062h 0098 2] C3 Latency : 0FFF +[064h 0100 2] CPU Cache Size : 0000 +[066h 0102 2] Cache Flush Stride : 0000 +[068h 0104 1] Duty Cycle Offset : 00 +[069h 0105 1] Duty Cycle Width : 00 +[06Ah 0106 1] RTC Day Alarm Index : 00 +[06Bh 0107 1] RTC Month Alarm Index : 00 +[06Ch 0108 1] RTC Century Index : 32 +[06Dh 0109 2] Boot Flags (decoded below) : 0000 + Legacy Devices Supported (V2) : 0 + 8042 Present on ports 60/64 (V2) : 0 + VGA Not Present (V4) : 0 + MSI Not Supported (V4) : 0 + PCIe ASPM Not Supported (V4) : 0 + CMOS RTC Not Present (V5) : 0 +[06Fh 0111 1] Reserved : 00 +[070h 0112 4] Flags (decoded below) : 000080A5 + WBINVD instruction is operational (V1) : 1 + WBINVD flushes all caches (V1) : 0 + All CPUs support C1 (V1) : 1 + C2 works on MP system (V1) : 0 + Control Method Power Button (V1) : 0 + Control Method Sleep Button (V1) : 1 + RTC wake not in fixed reg space (V1) : 0 + RTC can wake system from S4 (V1) : 1 + 32-bit PM Timer (V1) : 0 + Docking Supported (V1) : 0 + Reset Register Supported (V2) : 0 + Sealed Case (V3) : 0 + Headless - No Video (V3) : 0 + Use native instr after SLP_TYPx (V3) : 0 + PCIEXP_WAK Bits Supported (V4) : 0 + Use Platform Timer (V4) : 1 + RTC_STS valid on S4 wake (V4) : 0 + Remote Power-on capable (V4) : 0 + Use APIC Cluster Model (V4) : 0 + Use APIC Physical Destination Mode (V4) : 0 + Hardware Reduced (V5) : 0 + Low Power S0 Idle (V5) : 0 + +Raw Table Data: Length 116 (0x74) + + 0000: 46 41 43 50 74 00 00 00 01 A1 42 4F 43 48 53 20 // FACPt.....BOCHS + 0010: 42 58 50 43 46 41 43 50 01 00 00 00 42 58 50 43 // BXPCFACP....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 01 00 09 00 // ................ + 0030: B2 00 00 00 F1 F0 00 00 00 06 00 00 00 00 00 00 // ................ + 0040: 04 06 00 00 00 00 00 00 00 00 00 00 08 06 00 00 // ................ + 0050: E0 AF 00 00 00 00 00 00 04 02 00 04 04 00 00 00 // ................ + 0060: FF 0F FF 0F 00 00 00 00 00 00 00 00 32 00 00 00 // ............2... + 0070: A5 80 00 00 // .... diff --git a/tests/data/acpi/pc/FACP.cphp b/tests/data/acpi/pc/FACP.cphp new file mode 100644 index 0000000000000000000000000000000000000000..261ebdc5d1c3bdf18fb7935314a04fd7f6f92a7a GIT binary patch literal 116 zcmXwtu?c`M5CAU{f>v3<8QdUw2zCZ+9K-=!#ll)}B1g~(A|dgbJ1#hhE1-5i$vF3Z mi4vSd1?0~DQFL6u`v9g~U7cwS+-Lm_S_8=@TMi7svB3xKUJn5P literal 0 HcmV?d00001 diff --git a/tests/data/acpi/pc/FACP.cphp.dsl b/tests/data/acpi/pc/FACP.cphp.dsl new file mode 100644 index 0000000000..affffe9b64 --- /dev/null +++ b/tests/data/acpi/pc/FACP.cphp.dsl @@ -0,0 +1,99 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/FACP.cphp, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [FACP] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "FACP" [Fixed ACPI Description Table (FADT)] +[004h 0004 4] Table Length : 00000074 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : A1 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCFACP" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] FACS Address : 00000000 +[028h 0040 4] DSDT Address : 00000000 +[02Ch 0044 1] Model : 01 +[02Dh 0045 1] PM Profile : 00 [Unspecified] +[02Eh 0046 2] SCI Interrupt : 0009 +[030h 0048 4] SMI Command Port : 000000B2 +[034h 0052 1] ACPI Enable Value : F1 +[035h 0053 1] ACPI Disable Value : F0 +[036h 0054 1] S4BIOS Command : 00 +[037h 0055 1] P-State Control : 00 +[038h 0056 4] PM1A Event Block Address : 00000600 +[03Ch 0060 4] PM1B Event Block Address : 00000000 +[040h 0064 4] PM1A Control Block Address : 00000604 +[044h 0068 4] PM1B Control Block Address : 00000000 +[048h 0072 4] PM2 Control Block Address : 00000000 +[04Ch 0076 4] PM Timer Block Address : 00000608 +[050h 0080 4] GPE0 Block Address : 0000AFE0 +[054h 0084 4] GPE1 Block Address : 00000000 +[058h 0088 1] PM1 Event Block Length : 04 +[059h 0089 1] PM1 Control Block Length : 02 +[05Ah 0090 1] PM2 Control Block Length : 00 +[05Bh 0091 1] PM Timer Block Length : 04 +[05Ch 0092 1] GPE0 Block Length : 04 +[05Dh 0093 1] GPE1 Block Length : 00 +[05Eh 0094 1] GPE1 Base Offset : 00 +[05Fh 0095 1] _CST Support : 00 +[060h 0096 2] C2 Latency : 0FFF +[062h 0098 2] C3 Latency : 0FFF +[064h 0100 2] CPU Cache Size : 0000 +[066h 0102 2] Cache Flush Stride : 0000 +[068h 0104 1] Duty Cycle Offset : 00 +[069h 0105 1] Duty Cycle Width : 00 +[06Ah 0106 1] RTC Day Alarm Index : 00 +[06Bh 0107 1] RTC Month Alarm Index : 00 +[06Ch 0108 1] RTC Century Index : 32 +[06Dh 0109 2] Boot Flags (decoded below) : 0000 + Legacy Devices Supported (V2) : 0 + 8042 Present on ports 60/64 (V2) : 0 + VGA Not Present (V4) : 0 + MSI Not Supported (V4) : 0 + PCIe ASPM Not Supported (V4) : 0 + CMOS RTC Not Present (V5) : 0 +[06Fh 0111 1] Reserved : 00 +[070h 0112 4] Flags (decoded below) : 000080A5 + WBINVD instruction is operational (V1) : 1 + WBINVD flushes all caches (V1) : 0 + All CPUs support C1 (V1) : 1 + C2 works on MP system (V1) : 0 + Control Method Power Button (V1) : 0 + Control Method Sleep Button (V1) : 1 + RTC wake not in fixed reg space (V1) : 0 + RTC can wake system from S4 (V1) : 1 + 32-bit PM Timer (V1) : 0 + Docking Supported (V1) : 0 + Reset Register Supported (V2) : 0 + Sealed Case (V3) : 0 + Headless - No Video (V3) : 0 + Use native instr after SLP_TYPx (V3) : 0 + PCIEXP_WAK Bits Supported (V4) : 0 + Use Platform Timer (V4) : 1 + RTC_STS valid on S4 wake (V4) : 0 + Remote Power-on capable (V4) : 0 + Use APIC Cluster Model (V4) : 0 + Use APIC Physical Destination Mode (V4) : 0 + Hardware Reduced (V5) : 0 + Low Power S0 Idle (V5) : 0 + +Raw Table Data: Length 116 (0x74) + + 0000: 46 41 43 50 74 00 00 00 01 A1 42 4F 43 48 53 20 // FACPt.....BOCHS + 0010: 42 58 50 43 46 41 43 50 01 00 00 00 42 58 50 43 // BXPCFACP....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 01 00 09 00 // ................ + 0030: B2 00 00 00 F1 F0 00 00 00 06 00 00 00 00 00 00 // ................ + 0040: 04 06 00 00 00 00 00 00 00 00 00 00 08 06 00 00 // ................ + 0050: E0 AF 00 00 00 00 00 00 04 02 00 04 04 00 00 00 // ................ + 0060: FF 0F FF 0F 00 00 00 00 00 00 00 00 32 00 00 00 // ............2... + 0070: A5 80 00 00 // .... diff --git a/tests/data/acpi/pc/FACP.dimmpxm b/tests/data/acpi/pc/FACP.dimmpxm new file mode 100644 index 0000000000000000000000000000000000000000..261ebdc5d1c3bdf18fb7935314a04fd7f6f92a7a GIT binary patch literal 116 zcmXwtu?c`M5CAU{f>v3<8QdUw2zCZ+9K-=!#ll)}B1g~(A|dgbJ1#hhE1-5i$vF3Z mi4vSd1?0~DQFL6u`v9g~U7cwS+-Lm_S_8=@TMi7svB3xKUJn5P literal 0 HcmV?d00001 diff --git a/tests/data/acpi/pc/FACP.dimmpxm.dsl b/tests/data/acpi/pc/FACP.dimmpxm.dsl new file mode 100644 index 0000000000..fd5a5ef375 --- /dev/null +++ b/tests/data/acpi/pc/FACP.dimmpxm.dsl @@ -0,0 +1,99 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/FACP.dimmpxm, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [FACP] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "FACP" [Fixed ACPI Description Table (FADT)] +[004h 0004 4] Table Length : 00000074 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : A1 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCFACP" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] FACS Address : 00000000 +[028h 0040 4] DSDT Address : 00000000 +[02Ch 0044 1] Model : 01 +[02Dh 0045 1] PM Profile : 00 [Unspecified] +[02Eh 0046 2] SCI Interrupt : 0009 +[030h 0048 4] SMI Command Port : 000000B2 +[034h 0052 1] ACPI Enable Value : F1 +[035h 0053 1] ACPI Disable Value : F0 +[036h 0054 1] S4BIOS Command : 00 +[037h 0055 1] P-State Control : 00 +[038h 0056 4] PM1A Event Block Address : 00000600 +[03Ch 0060 4] PM1B Event Block Address : 00000000 +[040h 0064 4] PM1A Control Block Address : 00000604 +[044h 0068 4] PM1B Control Block Address : 00000000 +[048h 0072 4] PM2 Control Block Address : 00000000 +[04Ch 0076 4] PM Timer Block Address : 00000608 +[050h 0080 4] GPE0 Block Address : 0000AFE0 +[054h 0084 4] GPE1 Block Address : 00000000 +[058h 0088 1] PM1 Event Block Length : 04 +[059h 0089 1] PM1 Control Block Length : 02 +[05Ah 0090 1] PM2 Control Block Length : 00 +[05Bh 0091 1] PM Timer Block Length : 04 +[05Ch 0092 1] GPE0 Block Length : 04 +[05Dh 0093 1] GPE1 Block Length : 00 +[05Eh 0094 1] GPE1 Base Offset : 00 +[05Fh 0095 1] _CST Support : 00 +[060h 0096 2] C2 Latency : 0FFF +[062h 0098 2] C3 Latency : 0FFF +[064h 0100 2] CPU Cache Size : 0000 +[066h 0102 2] Cache Flush Stride : 0000 +[068h 0104 1] Duty Cycle Offset : 00 +[069h 0105 1] Duty Cycle Width : 00 +[06Ah 0106 1] RTC Day Alarm Index : 00 +[06Bh 0107 1] RTC Month Alarm Index : 00 +[06Ch 0108 1] RTC Century Index : 32 +[06Dh 0109 2] Boot Flags (decoded below) : 0000 + Legacy Devices Supported (V2) : 0 + 8042 Present on ports 60/64 (V2) : 0 + VGA Not Present (V4) : 0 + MSI Not Supported (V4) : 0 + PCIe ASPM Not Supported (V4) : 0 + CMOS RTC Not Present (V5) : 0 +[06Fh 0111 1] Reserved : 00 +[070h 0112 4] Flags (decoded below) : 000080A5 + WBINVD instruction is operational (V1) : 1 + WBINVD flushes all caches (V1) : 0 + All CPUs support C1 (V1) : 1 + C2 works on MP system (V1) : 0 + Control Method Power Button (V1) : 0 + Control Method Sleep Button (V1) : 1 + RTC wake not in fixed reg space (V1) : 0 + RTC can wake system from S4 (V1) : 1 + 32-bit PM Timer (V1) : 0 + Docking Supported (V1) : 0 + Reset Register Supported (V2) : 0 + Sealed Case (V3) : 0 + Headless - No Video (V3) : 0 + Use native instr after SLP_TYPx (V3) : 0 + PCIEXP_WAK Bits Supported (V4) : 0 + Use Platform Timer (V4) : 1 + RTC_STS valid on S4 wake (V4) : 0 + Remote Power-on capable (V4) : 0 + Use APIC Cluster Model (V4) : 0 + Use APIC Physical Destination Mode (V4) : 0 + Hardware Reduced (V5) : 0 + Low Power S0 Idle (V5) : 0 + +Raw Table Data: Length 116 (0x74) + + 0000: 46 41 43 50 74 00 00 00 01 A1 42 4F 43 48 53 20 // FACPt.....BOCHS + 0010: 42 58 50 43 46 41 43 50 01 00 00 00 42 58 50 43 // BXPCFACP....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 01 00 09 00 // ................ + 0030: B2 00 00 00 F1 F0 00 00 00 06 00 00 00 00 00 00 // ................ + 0040: 04 06 00 00 00 00 00 00 00 00 00 00 08 06 00 00 // ................ + 0050: E0 AF 00 00 00 00 00 00 04 02 00 04 04 00 00 00 // ................ + 0060: FF 0F FF 0F 00 00 00 00 00 00 00 00 32 00 00 00 // ............2... + 0070: A5 80 00 00 // .... diff --git a/tests/data/acpi/pc/FACP.dsl b/tests/data/acpi/pc/FACP.dsl new file mode 100644 index 0000000000..c5e3718772 --- /dev/null +++ b/tests/data/acpi/pc/FACP.dsl @@ -0,0 +1,99 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/FACP.roothp, Mon Sep 28 17:24:38 2020 + * + * ACPI Data Table [FACP] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "FACP" [Fixed ACPI Description Table (FADT)] +[004h 0004 4] Table Length : 00000074 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : A1 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCFACP" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] FACS Address : 00000000 +[028h 0040 4] DSDT Address : 00000000 +[02Ch 0044 1] Model : 01 +[02Dh 0045 1] PM Profile : 00 [Unspecified] +[02Eh 0046 2] SCI Interrupt : 0009 +[030h 0048 4] SMI Command Port : 000000B2 +[034h 0052 1] ACPI Enable Value : F1 +[035h 0053 1] ACPI Disable Value : F0 +[036h 0054 1] S4BIOS Command : 00 +[037h 0055 1] P-State Control : 00 +[038h 0056 4] PM1A Event Block Address : 00000600 +[03Ch 0060 4] PM1B Event Block Address : 00000000 +[040h 0064 4] PM1A Control Block Address : 00000604 +[044h 0068 4] PM1B Control Block Address : 00000000 +[048h 0072 4] PM2 Control Block Address : 00000000 +[04Ch 0076 4] PM Timer Block Address : 00000608 +[050h 0080 4] GPE0 Block Address : 0000AFE0 +[054h 0084 4] GPE1 Block Address : 00000000 +[058h 0088 1] PM1 Event Block Length : 04 +[059h 0089 1] PM1 Control Block Length : 02 +[05Ah 0090 1] PM2 Control Block Length : 00 +[05Bh 0091 1] PM Timer Block Length : 04 +[05Ch 0092 1] GPE0 Block Length : 04 +[05Dh 0093 1] GPE1 Block Length : 00 +[05Eh 0094 1] GPE1 Base Offset : 00 +[05Fh 0095 1] _CST Support : 00 +[060h 0096 2] C2 Latency : 0FFF +[062h 0098 2] C3 Latency : 0FFF +[064h 0100 2] CPU Cache Size : 0000 +[066h 0102 2] Cache Flush Stride : 0000 +[068h 0104 1] Duty Cycle Offset : 00 +[069h 0105 1] Duty Cycle Width : 00 +[06Ah 0106 1] RTC Day Alarm Index : 00 +[06Bh 0107 1] RTC Month Alarm Index : 00 +[06Ch 0108 1] RTC Century Index : 32 +[06Dh 0109 2] Boot Flags (decoded below) : 0000 + Legacy Devices Supported (V2) : 0 + 8042 Present on ports 60/64 (V2) : 0 + VGA Not Present (V4) : 0 + MSI Not Supported (V4) : 0 + PCIe ASPM Not Supported (V4) : 0 + CMOS RTC Not Present (V5) : 0 +[06Fh 0111 1] Reserved : 00 +[070h 0112 4] Flags (decoded below) : 000080A5 + WBINVD instruction is operational (V1) : 1 + WBINVD flushes all caches (V1) : 0 + All CPUs support C1 (V1) : 1 + C2 works on MP system (V1) : 0 + Control Method Power Button (V1) : 0 + Control Method Sleep Button (V1) : 1 + RTC wake not in fixed reg space (V1) : 0 + RTC can wake system from S4 (V1) : 1 + 32-bit PM Timer (V1) : 0 + Docking Supported (V1) : 0 + Reset Register Supported (V2) : 0 + Sealed Case (V3) : 0 + Headless - No Video (V3) : 0 + Use native instr after SLP_TYPx (V3) : 0 + PCIEXP_WAK Bits Supported (V4) : 0 + Use Platform Timer (V4) : 1 + RTC_STS valid on S4 wake (V4) : 0 + Remote Power-on capable (V4) : 0 + Use APIC Cluster Model (V4) : 0 + Use APIC Physical Destination Mode (V4) : 0 + Hardware Reduced (V5) : 0 + Low Power S0 Idle (V5) : 0 + +Raw Table Data: Length 116 (0x74) + + 0000: 46 41 43 50 74 00 00 00 01 A1 42 4F 43 48 53 20 // FACPt.....BOCHS + 0010: 42 58 50 43 46 41 43 50 01 00 00 00 42 58 50 43 // BXPCFACP....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 01 00 09 00 // ................ + 0030: B2 00 00 00 F1 F0 00 00 00 06 00 00 00 00 00 00 // ................ + 0040: 04 06 00 00 00 00 00 00 00 00 00 00 08 06 00 00 // ................ + 0050: E0 AF 00 00 00 00 00 00 04 02 00 04 04 00 00 00 // ................ + 0060: FF 0F FF 0F 00 00 00 00 00 00 00 00 32 00 00 00 // ............2... + 0070: A5 80 00 00 // .... diff --git a/tests/data/acpi/pc/FACP.hpbridge b/tests/data/acpi/pc/FACP.hpbridge new file mode 100644 index 0000000000000000000000000000000000000000..261ebdc5d1c3bdf18fb7935314a04fd7f6f92a7a GIT binary patch literal 116 zcmXwtu?c`M5CAU{f>v3<8QdUw2zCZ+9K-=!#ll)}B1g~(A|dgbJ1#hhE1-5i$vF3Z mi4vSd1?0~DQFL6u`v9g~U7cwS+-Lm_S_8=@TMi7svB3xKUJn5P literal 0 HcmV?d00001 diff --git a/tests/data/acpi/pc/FACP.ipmikcs b/tests/data/acpi/pc/FACP.ipmikcs new file mode 100644 index 0000000000000000000000000000000000000000..261ebdc5d1c3bdf18fb7935314a04fd7f6f92a7a GIT binary patch literal 116 zcmXwtu?c`M5CAU{f>v3<8QdUw2zCZ+9K-=!#ll)}B1g~(A|dgbJ1#hhE1-5i$vF3Z mi4vSd1?0~DQFL6u`v9g~U7cwS+-Lm_S_8=@TMi7svB3xKUJn5P literal 0 HcmV?d00001 diff --git a/tests/data/acpi/pc/FACP.ipmikcs.dsl b/tests/data/acpi/pc/FACP.ipmikcs.dsl new file mode 100644 index 0000000000..3f1dd018da --- /dev/null +++ b/tests/data/acpi/pc/FACP.ipmikcs.dsl @@ -0,0 +1,99 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/FACP.ipmikcs, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [FACP] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "FACP" [Fixed ACPI Description Table (FADT)] +[004h 0004 4] Table Length : 00000074 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : A1 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCFACP" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] FACS Address : 00000000 +[028h 0040 4] DSDT Address : 00000000 +[02Ch 0044 1] Model : 01 +[02Dh 0045 1] PM Profile : 00 [Unspecified] +[02Eh 0046 2] SCI Interrupt : 0009 +[030h 0048 4] SMI Command Port : 000000B2 +[034h 0052 1] ACPI Enable Value : F1 +[035h 0053 1] ACPI Disable Value : F0 +[036h 0054 1] S4BIOS Command : 00 +[037h 0055 1] P-State Control : 00 +[038h 0056 4] PM1A Event Block Address : 00000600 +[03Ch 0060 4] PM1B Event Block Address : 00000000 +[040h 0064 4] PM1A Control Block Address : 00000604 +[044h 0068 4] PM1B Control Block Address : 00000000 +[048h 0072 4] PM2 Control Block Address : 00000000 +[04Ch 0076 4] PM Timer Block Address : 00000608 +[050h 0080 4] GPE0 Block Address : 0000AFE0 +[054h 0084 4] GPE1 Block Address : 00000000 +[058h 0088 1] PM1 Event Block Length : 04 +[059h 0089 1] PM1 Control Block Length : 02 +[05Ah 0090 1] PM2 Control Block Length : 00 +[05Bh 0091 1] PM Timer Block Length : 04 +[05Ch 0092 1] GPE0 Block Length : 04 +[05Dh 0093 1] GPE1 Block Length : 00 +[05Eh 0094 1] GPE1 Base Offset : 00 +[05Fh 0095 1] _CST Support : 00 +[060h 0096 2] C2 Latency : 0FFF +[062h 0098 2] C3 Latency : 0FFF +[064h 0100 2] CPU Cache Size : 0000 +[066h 0102 2] Cache Flush Stride : 0000 +[068h 0104 1] Duty Cycle Offset : 00 +[069h 0105 1] Duty Cycle Width : 00 +[06Ah 0106 1] RTC Day Alarm Index : 00 +[06Bh 0107 1] RTC Month Alarm Index : 00 +[06Ch 0108 1] RTC Century Index : 32 +[06Dh 0109 2] Boot Flags (decoded below) : 0000 + Legacy Devices Supported (V2) : 0 + 8042 Present on ports 60/64 (V2) : 0 + VGA Not Present (V4) : 0 + MSI Not Supported (V4) : 0 + PCIe ASPM Not Supported (V4) : 0 + CMOS RTC Not Present (V5) : 0 +[06Fh 0111 1] Reserved : 00 +[070h 0112 4] Flags (decoded below) : 000080A5 + WBINVD instruction is operational (V1) : 1 + WBINVD flushes all caches (V1) : 0 + All CPUs support C1 (V1) : 1 + C2 works on MP system (V1) : 0 + Control Method Power Button (V1) : 0 + Control Method Sleep Button (V1) : 1 + RTC wake not in fixed reg space (V1) : 0 + RTC can wake system from S4 (V1) : 1 + 32-bit PM Timer (V1) : 0 + Docking Supported (V1) : 0 + Reset Register Supported (V2) : 0 + Sealed Case (V3) : 0 + Headless - No Video (V3) : 0 + Use native instr after SLP_TYPx (V3) : 0 + PCIEXP_WAK Bits Supported (V4) : 0 + Use Platform Timer (V4) : 1 + RTC_STS valid on S4 wake (V4) : 0 + Remote Power-on capable (V4) : 0 + Use APIC Cluster Model (V4) : 0 + Use APIC Physical Destination Mode (V4) : 0 + Hardware Reduced (V5) : 0 + Low Power S0 Idle (V5) : 0 + +Raw Table Data: Length 116 (0x74) + + 0000: 46 41 43 50 74 00 00 00 01 A1 42 4F 43 48 53 20 // FACPt.....BOCHS + 0010: 42 58 50 43 46 41 43 50 01 00 00 00 42 58 50 43 // BXPCFACP....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 01 00 09 00 // ................ + 0030: B2 00 00 00 F1 F0 00 00 00 06 00 00 00 00 00 00 // ................ + 0040: 04 06 00 00 00 00 00 00 00 00 00 00 08 06 00 00 // ................ + 0050: E0 AF 00 00 00 00 00 00 04 02 00 04 04 00 00 00 // ................ + 0060: FF 0F FF 0F 00 00 00 00 00 00 00 00 32 00 00 00 // ............2... + 0070: A5 80 00 00 // .... diff --git a/tests/data/acpi/pc/FACP.memhp b/tests/data/acpi/pc/FACP.memhp new file mode 100644 index 0000000000000000000000000000000000000000..261ebdc5d1c3bdf18fb7935314a04fd7f6f92a7a GIT binary patch literal 116 zcmXwtu?c`M5CAU{f>v3<8QdUw2zCZ+9K-=!#ll)}B1g~(A|dgbJ1#hhE1-5i$vF3Z mi4vSd1?0~DQFL6u`v9g~U7cwS+-Lm_S_8=@TMi7svB3xKUJn5P literal 0 HcmV?d00001 diff --git a/tests/data/acpi/pc/FACP.memhp.dsl b/tests/data/acpi/pc/FACP.memhp.dsl new file mode 100644 index 0000000000..b2c466e989 --- /dev/null +++ b/tests/data/acpi/pc/FACP.memhp.dsl @@ -0,0 +1,99 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/FACP.memhp, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [FACP] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "FACP" [Fixed ACPI Description Table (FADT)] +[004h 0004 4] Table Length : 00000074 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : A1 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCFACP" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] FACS Address : 00000000 +[028h 0040 4] DSDT Address : 00000000 +[02Ch 0044 1] Model : 01 +[02Dh 0045 1] PM Profile : 00 [Unspecified] +[02Eh 0046 2] SCI Interrupt : 0009 +[030h 0048 4] SMI Command Port : 000000B2 +[034h 0052 1] ACPI Enable Value : F1 +[035h 0053 1] ACPI Disable Value : F0 +[036h 0054 1] S4BIOS Command : 00 +[037h 0055 1] P-State Control : 00 +[038h 0056 4] PM1A Event Block Address : 00000600 +[03Ch 0060 4] PM1B Event Block Address : 00000000 +[040h 0064 4] PM1A Control Block Address : 00000604 +[044h 0068 4] PM1B Control Block Address : 00000000 +[048h 0072 4] PM2 Control Block Address : 00000000 +[04Ch 0076 4] PM Timer Block Address : 00000608 +[050h 0080 4] GPE0 Block Address : 0000AFE0 +[054h 0084 4] GPE1 Block Address : 00000000 +[058h 0088 1] PM1 Event Block Length : 04 +[059h 0089 1] PM1 Control Block Length : 02 +[05Ah 0090 1] PM2 Control Block Length : 00 +[05Bh 0091 1] PM Timer Block Length : 04 +[05Ch 0092 1] GPE0 Block Length : 04 +[05Dh 0093 1] GPE1 Block Length : 00 +[05Eh 0094 1] GPE1 Base Offset : 00 +[05Fh 0095 1] _CST Support : 00 +[060h 0096 2] C2 Latency : 0FFF +[062h 0098 2] C3 Latency : 0FFF +[064h 0100 2] CPU Cache Size : 0000 +[066h 0102 2] Cache Flush Stride : 0000 +[068h 0104 1] Duty Cycle Offset : 00 +[069h 0105 1] Duty Cycle Width : 00 +[06Ah 0106 1] RTC Day Alarm Index : 00 +[06Bh 0107 1] RTC Month Alarm Index : 00 +[06Ch 0108 1] RTC Century Index : 32 +[06Dh 0109 2] Boot Flags (decoded below) : 0000 + Legacy Devices Supported (V2) : 0 + 8042 Present on ports 60/64 (V2) : 0 + VGA Not Present (V4) : 0 + MSI Not Supported (V4) : 0 + PCIe ASPM Not Supported (V4) : 0 + CMOS RTC Not Present (V5) : 0 +[06Fh 0111 1] Reserved : 00 +[070h 0112 4] Flags (decoded below) : 000080A5 + WBINVD instruction is operational (V1) : 1 + WBINVD flushes all caches (V1) : 0 + All CPUs support C1 (V1) : 1 + C2 works on MP system (V1) : 0 + Control Method Power Button (V1) : 0 + Control Method Sleep Button (V1) : 1 + RTC wake not in fixed reg space (V1) : 0 + RTC can wake system from S4 (V1) : 1 + 32-bit PM Timer (V1) : 0 + Docking Supported (V1) : 0 + Reset Register Supported (V2) : 0 + Sealed Case (V3) : 0 + Headless - No Video (V3) : 0 + Use native instr after SLP_TYPx (V3) : 0 + PCIEXP_WAK Bits Supported (V4) : 0 + Use Platform Timer (V4) : 1 + RTC_STS valid on S4 wake (V4) : 0 + Remote Power-on capable (V4) : 0 + Use APIC Cluster Model (V4) : 0 + Use APIC Physical Destination Mode (V4) : 0 + Hardware Reduced (V5) : 0 + Low Power S0 Idle (V5) : 0 + +Raw Table Data: Length 116 (0x74) + + 0000: 46 41 43 50 74 00 00 00 01 A1 42 4F 43 48 53 20 // FACPt.....BOCHS + 0010: 42 58 50 43 46 41 43 50 01 00 00 00 42 58 50 43 // BXPCFACP....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 01 00 09 00 // ................ + 0030: B2 00 00 00 F1 F0 00 00 00 06 00 00 00 00 00 00 // ................ + 0040: 04 06 00 00 00 00 00 00 00 00 00 00 08 06 00 00 // ................ + 0050: E0 AF 00 00 00 00 00 00 04 02 00 04 04 00 00 00 // ................ + 0060: FF 0F FF 0F 00 00 00 00 00 00 00 00 32 00 00 00 // ............2... + 0070: A5 80 00 00 // .... diff --git a/tests/data/acpi/pc/FACP.numamem b/tests/data/acpi/pc/FACP.numamem new file mode 100644 index 0000000000000000000000000000000000000000..261ebdc5d1c3bdf18fb7935314a04fd7f6f92a7a GIT binary patch literal 116 zcmXwtu?c`M5CAU{f>v3<8QdUw2zCZ+9K-=!#ll)}B1g~(A|dgbJ1#hhE1-5i$vF3Z mi4vSd1?0~DQFL6u`v9g~U7cwS+-Lm_S_8=@TMi7svB3xKUJn5P literal 0 HcmV?d00001 diff --git a/tests/data/acpi/pc/FACP.numamem.dsl b/tests/data/acpi/pc/FACP.numamem.dsl new file mode 100644 index 0000000000..34ed95d536 --- /dev/null +++ b/tests/data/acpi/pc/FACP.numamem.dsl @@ -0,0 +1,99 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/FACP.numamem, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [FACP] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "FACP" [Fixed ACPI Description Table (FADT)] +[004h 0004 4] Table Length : 00000074 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : A1 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCFACP" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] FACS Address : 00000000 +[028h 0040 4] DSDT Address : 00000000 +[02Ch 0044 1] Model : 01 +[02Dh 0045 1] PM Profile : 00 [Unspecified] +[02Eh 0046 2] SCI Interrupt : 0009 +[030h 0048 4] SMI Command Port : 000000B2 +[034h 0052 1] ACPI Enable Value : F1 +[035h 0053 1] ACPI Disable Value : F0 +[036h 0054 1] S4BIOS Command : 00 +[037h 0055 1] P-State Control : 00 +[038h 0056 4] PM1A Event Block Address : 00000600 +[03Ch 0060 4] PM1B Event Block Address : 00000000 +[040h 0064 4] PM1A Control Block Address : 00000604 +[044h 0068 4] PM1B Control Block Address : 00000000 +[048h 0072 4] PM2 Control Block Address : 00000000 +[04Ch 0076 4] PM Timer Block Address : 00000608 +[050h 0080 4] GPE0 Block Address : 0000AFE0 +[054h 0084 4] GPE1 Block Address : 00000000 +[058h 0088 1] PM1 Event Block Length : 04 +[059h 0089 1] PM1 Control Block Length : 02 +[05Ah 0090 1] PM2 Control Block Length : 00 +[05Bh 0091 1] PM Timer Block Length : 04 +[05Ch 0092 1] GPE0 Block Length : 04 +[05Dh 0093 1] GPE1 Block Length : 00 +[05Eh 0094 1] GPE1 Base Offset : 00 +[05Fh 0095 1] _CST Support : 00 +[060h 0096 2] C2 Latency : 0FFF +[062h 0098 2] C3 Latency : 0FFF +[064h 0100 2] CPU Cache Size : 0000 +[066h 0102 2] Cache Flush Stride : 0000 +[068h 0104 1] Duty Cycle Offset : 00 +[069h 0105 1] Duty Cycle Width : 00 +[06Ah 0106 1] RTC Day Alarm Index : 00 +[06Bh 0107 1] RTC Month Alarm Index : 00 +[06Ch 0108 1] RTC Century Index : 32 +[06Dh 0109 2] Boot Flags (decoded below) : 0000 + Legacy Devices Supported (V2) : 0 + 8042 Present on ports 60/64 (V2) : 0 + VGA Not Present (V4) : 0 + MSI Not Supported (V4) : 0 + PCIe ASPM Not Supported (V4) : 0 + CMOS RTC Not Present (V5) : 0 +[06Fh 0111 1] Reserved : 00 +[070h 0112 4] Flags (decoded below) : 000080A5 + WBINVD instruction is operational (V1) : 1 + WBINVD flushes all caches (V1) : 0 + All CPUs support C1 (V1) : 1 + C2 works on MP system (V1) : 0 + Control Method Power Button (V1) : 0 + Control Method Sleep Button (V1) : 1 + RTC wake not in fixed reg space (V1) : 0 + RTC can wake system from S4 (V1) : 1 + 32-bit PM Timer (V1) : 0 + Docking Supported (V1) : 0 + Reset Register Supported (V2) : 0 + Sealed Case (V3) : 0 + Headless - No Video (V3) : 0 + Use native instr after SLP_TYPx (V3) : 0 + PCIEXP_WAK Bits Supported (V4) : 0 + Use Platform Timer (V4) : 1 + RTC_STS valid on S4 wake (V4) : 0 + Remote Power-on capable (V4) : 0 + Use APIC Cluster Model (V4) : 0 + Use APIC Physical Destination Mode (V4) : 0 + Hardware Reduced (V5) : 0 + Low Power S0 Idle (V5) : 0 + +Raw Table Data: Length 116 (0x74) + + 0000: 46 41 43 50 74 00 00 00 01 A1 42 4F 43 48 53 20 // FACPt.....BOCHS + 0010: 42 58 50 43 46 41 43 50 01 00 00 00 42 58 50 43 // BXPCFACP....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 01 00 09 00 // ................ + 0030: B2 00 00 00 F1 F0 00 00 00 06 00 00 00 00 00 00 // ................ + 0040: 04 06 00 00 00 00 00 00 00 00 00 00 08 06 00 00 // ................ + 0050: E0 AF 00 00 00 00 00 00 04 02 00 04 04 00 00 00 // ................ + 0060: FF 0F FF 0F 00 00 00 00 00 00 00 00 32 00 00 00 // ............2... + 0070: A5 80 00 00 // .... diff --git a/tests/data/acpi/pc/FACP.roothp b/tests/data/acpi/pc/FACP.roothp new file mode 100644 index 0000000000000000000000000000000000000000..261ebdc5d1c3bdf18fb7935314a04fd7f6f92a7a GIT binary patch literal 116 zcmXwtu?c`M5CAU{f>v3<8QdUw2zCZ+9K-=!#ll)}B1g~(A|dgbJ1#hhE1-5i$vF3Z mi4vSd1?0~DQFL6u`v9g~U7cwS+-Lm_S_8=@TMi7svB3xKUJn5P literal 0 HcmV?d00001 diff --git a/tests/data/acpi/pc/FACS.acpihmat b/tests/data/acpi/pc/FACS.acpihmat new file mode 100644 index 0000000000000000000000000000000000000000..fc67ecc40782bd7fe8921e430d7de67f0bfaad93 GIT binary patch literal 64 PcmZ>BbPjf4ARhn#RKNjV literal 0 HcmV?d00001 diff --git a/tests/data/acpi/pc/FACS.acpihmat.dsl b/tests/data/acpi/pc/FACS.acpihmat.dsl new file mode 100644 index 0000000000..bff165ba4e --- /dev/null +++ b/tests/data/acpi/pc/FACS.acpihmat.dsl @@ -0,0 +1,32 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/FACS.acpihmat, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [FACS] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "FACS" +[004h 0004 4] Length : 00000040 +[008h 0008 4] Hardware Signature : 00000000 +[00Ch 0012 4] 32 Firmware Waking Vector : 00000000 +[010h 0016 4] Global Lock : 00000000 +[014h 0020 4] Flags (decoded below) : 00000000 + S4BIOS Support Present : 0 + 64-bit Wake Supported (V2) : 0 +[018h 0024 8] 64 Firmware Waking Vector : 0000000000000000 +[020h 0032 1] Version : 00 +[021h 0033 3] Reserved : 000000 +[024h 0036 4] OspmFlags (decoded below) : 00000000 + 64-bit Wake Env Required (V2) : 0 + +Raw Table Data: Length 64 (0x40) + + 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 // FACS@........... + 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ diff --git a/tests/data/acpi/pc/FACS.bridge b/tests/data/acpi/pc/FACS.bridge new file mode 100644 index 0000000000000000000000000000000000000000..fc67ecc40782bd7fe8921e430d7de67f0bfaad93 GIT binary patch literal 64 PcmZ>BbPjf4ARhn#RKNjV literal 0 HcmV?d00001 diff --git a/tests/data/acpi/pc/FACS.bridge.dsl b/tests/data/acpi/pc/FACS.bridge.dsl new file mode 100644 index 0000000000..981354f0f3 --- /dev/null +++ b/tests/data/acpi/pc/FACS.bridge.dsl @@ -0,0 +1,32 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/FACS.bridge, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [FACS] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "FACS" +[004h 0004 4] Length : 00000040 +[008h 0008 4] Hardware Signature : 00000000 +[00Ch 0012 4] 32 Firmware Waking Vector : 00000000 +[010h 0016 4] Global Lock : 00000000 +[014h 0020 4] Flags (decoded below) : 00000000 + S4BIOS Support Present : 0 + 64-bit Wake Supported (V2) : 0 +[018h 0024 8] 64 Firmware Waking Vector : 0000000000000000 +[020h 0032 1] Version : 00 +[021h 0033 3] Reserved : 000000 +[024h 0036 4] OspmFlags (decoded below) : 00000000 + 64-bit Wake Env Required (V2) : 0 + +Raw Table Data: Length 64 (0x40) + + 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 // FACS@........... + 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ diff --git a/tests/data/acpi/pc/FACS.cphp b/tests/data/acpi/pc/FACS.cphp new file mode 100644 index 0000000000000000000000000000000000000000..fc67ecc40782bd7fe8921e430d7de67f0bfaad93 GIT binary patch literal 64 PcmZ>BbPjf4ARhn#RKNjV literal 0 HcmV?d00001 diff --git a/tests/data/acpi/pc/FACS.cphp.dsl b/tests/data/acpi/pc/FACS.cphp.dsl new file mode 100644 index 0000000000..bb44e525b9 --- /dev/null +++ b/tests/data/acpi/pc/FACS.cphp.dsl @@ -0,0 +1,32 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/FACS.cphp, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [FACS] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "FACS" +[004h 0004 4] Length : 00000040 +[008h 0008 4] Hardware Signature : 00000000 +[00Ch 0012 4] 32 Firmware Waking Vector : 00000000 +[010h 0016 4] Global Lock : 00000000 +[014h 0020 4] Flags (decoded below) : 00000000 + S4BIOS Support Present : 0 + 64-bit Wake Supported (V2) : 0 +[018h 0024 8] 64 Firmware Waking Vector : 0000000000000000 +[020h 0032 1] Version : 00 +[021h 0033 3] Reserved : 000000 +[024h 0036 4] OspmFlags (decoded below) : 00000000 + 64-bit Wake Env Required (V2) : 0 + +Raw Table Data: Length 64 (0x40) + + 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 // FACS@........... + 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ diff --git a/tests/data/acpi/pc/FACS.dimmpxm b/tests/data/acpi/pc/FACS.dimmpxm new file mode 100644 index 0000000000000000000000000000000000000000..fc67ecc40782bd7fe8921e430d7de67f0bfaad93 GIT binary patch literal 64 PcmZ>BbPjf4ARhn#RKNjV literal 0 HcmV?d00001 diff --git a/tests/data/acpi/pc/FACS.dimmpxm.dsl b/tests/data/acpi/pc/FACS.dimmpxm.dsl new file mode 100644 index 0000000000..e7586d3236 --- /dev/null +++ b/tests/data/acpi/pc/FACS.dimmpxm.dsl @@ -0,0 +1,32 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/FACS.dimmpxm, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [FACS] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "FACS" +[004h 0004 4] Length : 00000040 +[008h 0008 4] Hardware Signature : 00000000 +[00Ch 0012 4] 32 Firmware Waking Vector : 00000000 +[010h 0016 4] Global Lock : 00000000 +[014h 0020 4] Flags (decoded below) : 00000000 + S4BIOS Support Present : 0 + 64-bit Wake Supported (V2) : 0 +[018h 0024 8] 64 Firmware Waking Vector : 0000000000000000 +[020h 0032 1] Version : 00 +[021h 0033 3] Reserved : 000000 +[024h 0036 4] OspmFlags (decoded below) : 00000000 + 64-bit Wake Env Required (V2) : 0 + +Raw Table Data: Length 64 (0x40) + + 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 // FACS@........... + 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ diff --git a/tests/data/acpi/pc/FACS.dsl b/tests/data/acpi/pc/FACS.dsl new file mode 100644 index 0000000000..11d622cdf7 --- /dev/null +++ b/tests/data/acpi/pc/FACS.dsl @@ -0,0 +1,32 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/FACS.roothp, Mon Sep 28 17:24:38 2020 + * + * ACPI Data Table [FACS] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "FACS" +[004h 0004 4] Length : 00000040 +[008h 0008 4] Hardware Signature : 00000000 +[00Ch 0012 4] 32 Firmware Waking Vector : 00000000 +[010h 0016 4] Global Lock : 00000000 +[014h 0020 4] Flags (decoded below) : 00000000 + S4BIOS Support Present : 0 + 64-bit Wake Supported (V2) : 0 +[018h 0024 8] 64 Firmware Waking Vector : 0000000000000000 +[020h 0032 1] Version : 00 +[021h 0033 3] Reserved : 000000 +[024h 0036 4] OspmFlags (decoded below) : 00000000 + 64-bit Wake Env Required (V2) : 0 + +Raw Table Data: Length 64 (0x40) + + 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 // FACS@........... + 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ diff --git a/tests/data/acpi/pc/FACS.hpbridge b/tests/data/acpi/pc/FACS.hpbridge new file mode 100644 index 0000000000000000000000000000000000000000..fc67ecc40782bd7fe8921e430d7de67f0bfaad93 GIT binary patch literal 64 PcmZ>BbPjf4ARhn#RKNjV literal 0 HcmV?d00001 diff --git a/tests/data/acpi/pc/FACS.ipmikcs b/tests/data/acpi/pc/FACS.ipmikcs new file mode 100644 index 0000000000000000000000000000000000000000..fc67ecc40782bd7fe8921e430d7de67f0bfaad93 GIT binary patch literal 64 PcmZ>BbPjf4ARhn#RKNjV literal 0 HcmV?d00001 diff --git a/tests/data/acpi/pc/FACS.ipmikcs.dsl b/tests/data/acpi/pc/FACS.ipmikcs.dsl new file mode 100644 index 0000000000..f4b7c9718c --- /dev/null +++ b/tests/data/acpi/pc/FACS.ipmikcs.dsl @@ -0,0 +1,32 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/FACS.ipmikcs, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [FACS] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "FACS" +[004h 0004 4] Length : 00000040 +[008h 0008 4] Hardware Signature : 00000000 +[00Ch 0012 4] 32 Firmware Waking Vector : 00000000 +[010h 0016 4] Global Lock : 00000000 +[014h 0020 4] Flags (decoded below) : 00000000 + S4BIOS Support Present : 0 + 64-bit Wake Supported (V2) : 0 +[018h 0024 8] 64 Firmware Waking Vector : 0000000000000000 +[020h 0032 1] Version : 00 +[021h 0033 3] Reserved : 000000 +[024h 0036 4] OspmFlags (decoded below) : 00000000 + 64-bit Wake Env Required (V2) : 0 + +Raw Table Data: Length 64 (0x40) + + 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 // FACS@........... + 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ diff --git a/tests/data/acpi/pc/FACS.memhp b/tests/data/acpi/pc/FACS.memhp new file mode 100644 index 0000000000000000000000000000000000000000..fc67ecc40782bd7fe8921e430d7de67f0bfaad93 GIT binary patch literal 64 PcmZ>BbPjf4ARhn#RKNjV literal 0 HcmV?d00001 diff --git a/tests/data/acpi/pc/FACS.memhp.dsl b/tests/data/acpi/pc/FACS.memhp.dsl new file mode 100644 index 0000000000..da2e230a62 --- /dev/null +++ b/tests/data/acpi/pc/FACS.memhp.dsl @@ -0,0 +1,32 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/FACS.memhp, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [FACS] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "FACS" +[004h 0004 4] Length : 00000040 +[008h 0008 4] Hardware Signature : 00000000 +[00Ch 0012 4] 32 Firmware Waking Vector : 00000000 +[010h 0016 4] Global Lock : 00000000 +[014h 0020 4] Flags (decoded below) : 00000000 + S4BIOS Support Present : 0 + 64-bit Wake Supported (V2) : 0 +[018h 0024 8] 64 Firmware Waking Vector : 0000000000000000 +[020h 0032 1] Version : 00 +[021h 0033 3] Reserved : 000000 +[024h 0036 4] OspmFlags (decoded below) : 00000000 + 64-bit Wake Env Required (V2) : 0 + +Raw Table Data: Length 64 (0x40) + + 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 // FACS@........... + 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ diff --git a/tests/data/acpi/pc/FACS.numamem b/tests/data/acpi/pc/FACS.numamem new file mode 100644 index 0000000000000000000000000000000000000000..fc67ecc40782bd7fe8921e430d7de67f0bfaad93 GIT binary patch literal 64 PcmZ>BbPjf4ARhn#RKNjV literal 0 HcmV?d00001 diff --git a/tests/data/acpi/pc/FACS.numamem.dsl b/tests/data/acpi/pc/FACS.numamem.dsl new file mode 100644 index 0000000000..c856f8b230 --- /dev/null +++ b/tests/data/acpi/pc/FACS.numamem.dsl @@ -0,0 +1,32 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/FACS.numamem, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [FACS] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "FACS" +[004h 0004 4] Length : 00000040 +[008h 0008 4] Hardware Signature : 00000000 +[00Ch 0012 4] 32 Firmware Waking Vector : 00000000 +[010h 0016 4] Global Lock : 00000000 +[014h 0020 4] Flags (decoded below) : 00000000 + S4BIOS Support Present : 0 + 64-bit Wake Supported (V2) : 0 +[018h 0024 8] 64 Firmware Waking Vector : 0000000000000000 +[020h 0032 1] Version : 00 +[021h 0033 3] Reserved : 000000 +[024h 0036 4] OspmFlags (decoded below) : 00000000 + 64-bit Wake Env Required (V2) : 0 + +Raw Table Data: Length 64 (0x40) + + 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 // FACS@........... + 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ diff --git a/tests/data/acpi/pc/FACS.roothp b/tests/data/acpi/pc/FACS.roothp new file mode 100644 index 0000000000000000000000000000000000000000..fc67ecc40782bd7fe8921e430d7de67f0bfaad93 GIT binary patch literal 64 PcmZ>BbPjf4ARhn#RKNjV literal 0 HcmV?d00001 diff --git a/tests/data/acpi/pc/HMAT.acpihmat.dsl b/tests/data/acpi/pc/HMAT.acpihmat.dsl new file mode 100644 index 0000000000..b55564d383 --- /dev/null +++ b/tests/data/acpi/pc/HMAT.acpihmat.dsl @@ -0,0 +1,132 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/HMAT.acpihmat, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [HMAT] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "HMAT" [Heterogeneous Memory Attributes Table] +[004h 0004 4] Table Length : 00000118 +[008h 0008 1] Revision : 02 +[009h 0009 1] Checksum : 98 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCHMAT" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Reserved : 00000000 + +[028h 0040 2] Structure Type : 0000 [Memory Proximity Domain Attributes] +[02Ah 0042 2] Reserved : 0000 +[02Ch 0044 4] Length : 00000028 +[030h 0048 2] Flags (decoded below) : 0001 + Processor Proximity Domain Valid : 1 +[032h 0050 2] Reserved1 : 0000 +[034h 0052 4] Processor Proximity Domain : 00000000 +[038h 0056 4] Memory Proximity Domain : 00000000 +[03Ch 0060 4] Reserved2 : 00000000 +[040h 0064 8] Reserved3 : 0000000000000000 +[048h 0072 8] Reserved4 : 0000000000000000 + +[050h 0080 2] Structure Type : 0000 [Memory Proximity Domain Attributes] +[052h 0082 2] Reserved : 0000 +[054h 0084 4] Length : 00000028 +[058h 0088 2] Flags (decoded below) : 0001 + Processor Proximity Domain Valid : 1 +[05Ah 0090 2] Reserved1 : 0000 +[05Ch 0092 4] Processor Proximity Domain : 00000000 +[060h 0096 4] Memory Proximity Domain : 00000001 +[064h 0100 4] Reserved2 : 00000000 +[068h 0104 8] Reserved3 : 0000000000000000 +[070h 0112 8] Reserved4 : 0000000000000000 + +[078h 0120 2] Structure Type : 0001 [System Locality Latency and Bandwidth Information] +[07Ah 0122 2] Reserved : 0000 +[07Ch 0124 4] Length : 00000030 +[080h 0128 1] Flags (decoded below) : 00 + Memory Hierarchy : 0 +[081h 0129 1] Data Type : 00 +[082h 0130 2] Reserved1 : 0000 +[084h 0132 4] Initiator Proximity Domains # : 00000001 +[088h 0136 4] Target Proximity Domains # : 00000002 +[08Ch 0140 4] Reserved2 : 00000000 +[090h 0144 8] Entry Base Unit : 00000000000003E8 +[098h 0152 4] Initiator Proximity Domain List : 00000000 +[09Ch 0156 4] Target Proximity Domain List : 00000000 +[0A0h 0160 4] Target Proximity Domain List : 00000001 +[0A4h 0164 2] Entry : 0001 +[0A6h 0166 2] Entry : FFFE + +[0A8h 0168 2] Structure Type : 0001 [System Locality Latency and Bandwidth Information] +[0AAh 0170 2] Reserved : 0000 +[0ACh 0172 4] Length : 00000030 +[0B0h 0176 1] Flags (decoded below) : 00 + Memory Hierarchy : 0 +[0B1h 0177 1] Data Type : 03 +[0B2h 0178 2] Reserved1 : 0000 +[0B4h 0180 4] Initiator Proximity Domains # : 00000001 +[0B8h 0184 4] Target Proximity Domains # : 00000002 +[0BCh 0188 4] Reserved2 : 00000000 +[0C0h 0192 8] Entry Base Unit : 0000000000000001 +[0C8h 0200 4] Initiator Proximity Domain List : 00000000 +[0CCh 0204 4] Target Proximity Domain List : 00000000 +[0D0h 0208 4] Target Proximity Domain List : 00000001 +[0D4h 0212 2] Entry : FFFE +[0D6h 0214 2] Entry : 7FFF + +[0D8h 0216 2] Structure Type : 0002 [Memory Side Cache Information] +[0DAh 0218 2] Reserved : 0000 +[0DCh 0220 4] Length : 00000020 +[0E0h 0224 4] Memory Proximity Domain : 00000000 +[0E4h 0228 4] Reserved1 : 00000000 +[0E8h 0232 8] Memory Side Cache Size : 0000000000002800 +[0F0h 0240 4] Cache Attributes (decoded below) : 00081111 + Total Cache Levels : 1 + Cache Level : 1 + Cache Associativity : 1 + Write Policy : 1 + Cache Line Size : 0008 +[0F4h 0244 2] Reserved2 : 0000 +[0F6h 0246 2] SMBIOS Handle # : 0000 + +[0F8h 0248 2] Structure Type : 0002 [Memory Side Cache Information] +[0FAh 0250 2] Reserved : 0000 +[0FCh 0252 4] Length : 00000020 +[100h 0256 4] Memory Proximity Domain : 00000001 +[104h 0260 4] Reserved1 : 00000000 +[108h 0264 8] Memory Side Cache Size : 0000000000002800 +[110h 0272 4] Cache Attributes (decoded below) : 00081111 + Total Cache Levels : 1 + Cache Level : 1 + Cache Associativity : 1 + Write Policy : 1 + Cache Line Size : 0008 +[114h 0276 2] Reserved2 : 0000 +[116h 0278 2] SMBIOS Handle # : 0000 + +Raw Table Data: Length 280 (0x118) + + 0000: 48 4D 41 54 18 01 00 00 02 98 42 4F 43 48 53 20 // HMAT......BOCHS + 0010: 42 58 50 43 48 4D 41 54 01 00 00 00 42 58 50 43 // BXPCHMAT....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 28 00 00 00 // ............(... + 0030: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0050: 00 00 00 00 28 00 00 00 01 00 00 00 00 00 00 00 // ....(........... + 0060: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0070: 00 00 00 00 00 00 00 00 01 00 00 00 30 00 00 00 // ............0... + 0080: 00 00 00 00 01 00 00 00 02 00 00 00 00 00 00 00 // ................ + 0090: E8 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00A0: 01 00 00 00 01 00 FE FF 01 00 00 00 30 00 00 00 // ............0... + 00B0: 00 03 00 00 01 00 00 00 02 00 00 00 00 00 00 00 // ................ + 00C0: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00D0: 01 00 00 00 FE FF FF 7F 02 00 00 00 20 00 00 00 // ............ ... + 00E0: 00 00 00 00 00 00 00 00 00 28 00 00 00 00 00 00 // .........(...... + 00F0: 11 11 08 00 00 00 00 00 02 00 00 00 20 00 00 00 // ............ ... + 0100: 01 00 00 00 00 00 00 00 00 28 00 00 00 00 00 00 // .........(...... + 0110: 11 11 08 00 00 00 00 00 // ........ diff --git a/tests/data/acpi/pc/HMAT.dsl b/tests/data/acpi/pc/HMAT.dsl new file mode 100644 index 0000000000..8031f62433 --- /dev/null +++ b/tests/data/acpi/pc/HMAT.dsl @@ -0,0 +1,132 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/HMAT.acpihmat, Mon Sep 28 17:24:38 2020 + * + * ACPI Data Table [HMAT] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "HMAT" [Heterogeneous Memory Attributes Table] +[004h 0004 4] Table Length : 00000118 +[008h 0008 1] Revision : 02 +[009h 0009 1] Checksum : 98 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCHMAT" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Reserved : 00000000 + +[028h 0040 2] Structure Type : 0000 [Memory Proximity Domain Attributes] +[02Ah 0042 2] Reserved : 0000 +[02Ch 0044 4] Length : 00000028 +[030h 0048 2] Flags (decoded below) : 0001 + Processor Proximity Domain Valid : 1 +[032h 0050 2] Reserved1 : 0000 +[034h 0052 4] Processor Proximity Domain : 00000000 +[038h 0056 4] Memory Proximity Domain : 00000000 +[03Ch 0060 4] Reserved2 : 00000000 +[040h 0064 8] Reserved3 : 0000000000000000 +[048h 0072 8] Reserved4 : 0000000000000000 + +[050h 0080 2] Structure Type : 0000 [Memory Proximity Domain Attributes] +[052h 0082 2] Reserved : 0000 +[054h 0084 4] Length : 00000028 +[058h 0088 2] Flags (decoded below) : 0001 + Processor Proximity Domain Valid : 1 +[05Ah 0090 2] Reserved1 : 0000 +[05Ch 0092 4] Processor Proximity Domain : 00000000 +[060h 0096 4] Memory Proximity Domain : 00000001 +[064h 0100 4] Reserved2 : 00000000 +[068h 0104 8] Reserved3 : 0000000000000000 +[070h 0112 8] Reserved4 : 0000000000000000 + +[078h 0120 2] Structure Type : 0001 [System Locality Latency and Bandwidth Information] +[07Ah 0122 2] Reserved : 0000 +[07Ch 0124 4] Length : 00000030 +[080h 0128 1] Flags (decoded below) : 00 + Memory Hierarchy : 0 +[081h 0129 1] Data Type : 00 +[082h 0130 2] Reserved1 : 0000 +[084h 0132 4] Initiator Proximity Domains # : 00000001 +[088h 0136 4] Target Proximity Domains # : 00000002 +[08Ch 0140 4] Reserved2 : 00000000 +[090h 0144 8] Entry Base Unit : 00000000000003E8 +[098h 0152 4] Initiator Proximity Domain List : 00000000 +[09Ch 0156 4] Target Proximity Domain List : 00000000 +[0A0h 0160 4] Target Proximity Domain List : 00000001 +[0A4h 0164 2] Entry : 0001 +[0A6h 0166 2] Entry : FFFE + +[0A8h 0168 2] Structure Type : 0001 [System Locality Latency and Bandwidth Information] +[0AAh 0170 2] Reserved : 0000 +[0ACh 0172 4] Length : 00000030 +[0B0h 0176 1] Flags (decoded below) : 00 + Memory Hierarchy : 0 +[0B1h 0177 1] Data Type : 03 +[0B2h 0178 2] Reserved1 : 0000 +[0B4h 0180 4] Initiator Proximity Domains # : 00000001 +[0B8h 0184 4] Target Proximity Domains # : 00000002 +[0BCh 0188 4] Reserved2 : 00000000 +[0C0h 0192 8] Entry Base Unit : 0000000000000001 +[0C8h 0200 4] Initiator Proximity Domain List : 00000000 +[0CCh 0204 4] Target Proximity Domain List : 00000000 +[0D0h 0208 4] Target Proximity Domain List : 00000001 +[0D4h 0212 2] Entry : FFFE +[0D6h 0214 2] Entry : 7FFF + +[0D8h 0216 2] Structure Type : 0002 [Memory Side Cache Information] +[0DAh 0218 2] Reserved : 0000 +[0DCh 0220 4] Length : 00000020 +[0E0h 0224 4] Memory Proximity Domain : 00000000 +[0E4h 0228 4] Reserved1 : 00000000 +[0E8h 0232 8] Memory Side Cache Size : 0000000000002800 +[0F0h 0240 4] Cache Attributes (decoded below) : 00081111 + Total Cache Levels : 1 + Cache Level : 1 + Cache Associativity : 1 + Write Policy : 1 + Cache Line Size : 0008 +[0F4h 0244 2] Reserved2 : 0000 +[0F6h 0246 2] SMBIOS Handle # : 0000 + +[0F8h 0248 2] Structure Type : 0002 [Memory Side Cache Information] +[0FAh 0250 2] Reserved : 0000 +[0FCh 0252 4] Length : 00000020 +[100h 0256 4] Memory Proximity Domain : 00000001 +[104h 0260 4] Reserved1 : 00000000 +[108h 0264 8] Memory Side Cache Size : 0000000000002800 +[110h 0272 4] Cache Attributes (decoded below) : 00081111 + Total Cache Levels : 1 + Cache Level : 1 + Cache Associativity : 1 + Write Policy : 1 + Cache Line Size : 0008 +[114h 0276 2] Reserved2 : 0000 +[116h 0278 2] SMBIOS Handle # : 0000 + +Raw Table Data: Length 280 (0x118) + + 0000: 48 4D 41 54 18 01 00 00 02 98 42 4F 43 48 53 20 // HMAT......BOCHS + 0010: 42 58 50 43 48 4D 41 54 01 00 00 00 42 58 50 43 // BXPCHMAT....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 28 00 00 00 // ............(... + 0030: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0050: 00 00 00 00 28 00 00 00 01 00 00 00 00 00 00 00 // ....(........... + 0060: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0070: 00 00 00 00 00 00 00 00 01 00 00 00 30 00 00 00 // ............0... + 0080: 00 00 00 00 01 00 00 00 02 00 00 00 00 00 00 00 // ................ + 0090: E8 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00A0: 01 00 00 00 01 00 FE FF 01 00 00 00 30 00 00 00 // ............0... + 00B0: 00 03 00 00 01 00 00 00 02 00 00 00 00 00 00 00 // ................ + 00C0: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00D0: 01 00 00 00 FE FF FF 7F 02 00 00 00 20 00 00 00 // ............ ... + 00E0: 00 00 00 00 00 00 00 00 00 28 00 00 00 00 00 00 // .........(...... + 00F0: 11 11 08 00 00 00 00 00 02 00 00 00 20 00 00 00 // ............ ... + 0100: 01 00 00 00 00 00 00 00 00 28 00 00 00 00 00 00 // .........(...... + 0110: 11 11 08 00 00 00 00 00 // ........ diff --git a/tests/data/acpi/pc/HPET.acpihmat b/tests/data/acpi/pc/HPET.acpihmat new file mode 100644 index 0000000000000000000000000000000000000000..df689b8f99c1c43cfd7d63bdede3bcdfd23b7de1 GIT binary patch literal 56 zcmeYWa1F6wU|?WmcJg=j2v%^42ypfYa1CK(U|;~TK{Vr{wgv_;xbP1`GcW)EHY*AN literal 0 HcmV?d00001 diff --git a/tests/data/acpi/pc/HPET.acpihmat.dsl b/tests/data/acpi/pc/HPET.acpihmat.dsl new file mode 100644 index 0000000000..9029afb2a2 --- /dev/null +++ b/tests/data/acpi/pc/HPET.acpihmat.dsl @@ -0,0 +1,43 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/HPET.acpihmat, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [HPET] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "HPET" [High Precision Event Timer table] +[004h 0004 4] Table Length : 00000038 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 03 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCHPET" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Hardware Block ID : 8086A201 + +[028h 0040 12] Timer Block Register : [Generic Address Structure] +[028h 0040 1] Space ID : 00 [SystemMemory] +[029h 0041 1] Bit Width : 00 +[02Ah 0042 1] Bit Offset : 00 +[02Bh 0043 1] Encoded Access Width : 00 [Undefined/Legacy] +[02Ch 0044 8] Address : 00000000FED00000 + +[034h 0052 1] Sequence Number : 00 +[035h 0053 2] Minimum Clock Ticks : 0000 +[037h 0055 1] Flags (decoded below) : 00 + 4K Page Protect : 0 + 64K Page Protect : 0 + +Raw Table Data: Length 56 (0x38) + + 0000: 48 50 45 54 38 00 00 00 01 03 42 4F 43 48 53 20 // HPET8.....BOCHS + 0010: 42 58 50 43 48 50 45 54 01 00 00 00 42 58 50 43 // BXPCHPET....BXPC + 0020: 01 00 00 00 01 A2 86 80 00 00 00 00 00 00 D0 FE // ................ + 0030: 00 00 00 00 00 00 00 00 // ........ diff --git a/tests/data/acpi/pc/HPET.bridge b/tests/data/acpi/pc/HPET.bridge new file mode 100644 index 0000000000000000000000000000000000000000..df689b8f99c1c43cfd7d63bdede3bcdfd23b7de1 GIT binary patch literal 56 zcmeYWa1F6wU|?WmcJg=j2v%^42ypfYa1CK(U|;~TK{Vr{wgv_;xbP1`GcW)EHY*AN literal 0 HcmV?d00001 diff --git a/tests/data/acpi/pc/HPET.bridge.dsl b/tests/data/acpi/pc/HPET.bridge.dsl new file mode 100644 index 0000000000..936616faa8 --- /dev/null +++ b/tests/data/acpi/pc/HPET.bridge.dsl @@ -0,0 +1,43 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/HPET.bridge, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [HPET] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "HPET" [High Precision Event Timer table] +[004h 0004 4] Table Length : 00000038 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 03 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCHPET" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Hardware Block ID : 8086A201 + +[028h 0040 12] Timer Block Register : [Generic Address Structure] +[028h 0040 1] Space ID : 00 [SystemMemory] +[029h 0041 1] Bit Width : 00 +[02Ah 0042 1] Bit Offset : 00 +[02Bh 0043 1] Encoded Access Width : 00 [Undefined/Legacy] +[02Ch 0044 8] Address : 00000000FED00000 + +[034h 0052 1] Sequence Number : 00 +[035h 0053 2] Minimum Clock Ticks : 0000 +[037h 0055 1] Flags (decoded below) : 00 + 4K Page Protect : 0 + 64K Page Protect : 0 + +Raw Table Data: Length 56 (0x38) + + 0000: 48 50 45 54 38 00 00 00 01 03 42 4F 43 48 53 20 // HPET8.....BOCHS + 0010: 42 58 50 43 48 50 45 54 01 00 00 00 42 58 50 43 // BXPCHPET....BXPC + 0020: 01 00 00 00 01 A2 86 80 00 00 00 00 00 00 D0 FE // ................ + 0030: 00 00 00 00 00 00 00 00 // ........ diff --git a/tests/data/acpi/pc/HPET.cphp b/tests/data/acpi/pc/HPET.cphp new file mode 100644 index 0000000000000000000000000000000000000000..df689b8f99c1c43cfd7d63bdede3bcdfd23b7de1 GIT binary patch literal 56 zcmeYWa1F6wU|?WmcJg=j2v%^42ypfYa1CK(U|;~TK{Vr{wgv_;xbP1`GcW)EHY*AN literal 0 HcmV?d00001 diff --git a/tests/data/acpi/pc/HPET.cphp.dsl b/tests/data/acpi/pc/HPET.cphp.dsl new file mode 100644 index 0000000000..e095a43ee7 --- /dev/null +++ b/tests/data/acpi/pc/HPET.cphp.dsl @@ -0,0 +1,43 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/HPET.cphp, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [HPET] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "HPET" [High Precision Event Timer table] +[004h 0004 4] Table Length : 00000038 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 03 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCHPET" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Hardware Block ID : 8086A201 + +[028h 0040 12] Timer Block Register : [Generic Address Structure] +[028h 0040 1] Space ID : 00 [SystemMemory] +[029h 0041 1] Bit Width : 00 +[02Ah 0042 1] Bit Offset : 00 +[02Bh 0043 1] Encoded Access Width : 00 [Undefined/Legacy] +[02Ch 0044 8] Address : 00000000FED00000 + +[034h 0052 1] Sequence Number : 00 +[035h 0053 2] Minimum Clock Ticks : 0000 +[037h 0055 1] Flags (decoded below) : 00 + 4K Page Protect : 0 + 64K Page Protect : 0 + +Raw Table Data: Length 56 (0x38) + + 0000: 48 50 45 54 38 00 00 00 01 03 42 4F 43 48 53 20 // HPET8.....BOCHS + 0010: 42 58 50 43 48 50 45 54 01 00 00 00 42 58 50 43 // BXPCHPET....BXPC + 0020: 01 00 00 00 01 A2 86 80 00 00 00 00 00 00 D0 FE // ................ + 0030: 00 00 00 00 00 00 00 00 // ........ diff --git a/tests/data/acpi/pc/HPET.dimmpxm b/tests/data/acpi/pc/HPET.dimmpxm new file mode 100644 index 0000000000000000000000000000000000000000..df689b8f99c1c43cfd7d63bdede3bcdfd23b7de1 GIT binary patch literal 56 zcmeYWa1F6wU|?WmcJg=j2v%^42ypfYa1CK(U|;~TK{Vr{wgv_;xbP1`GcW)EHY*AN literal 0 HcmV?d00001 diff --git a/tests/data/acpi/pc/HPET.dimmpxm.dsl b/tests/data/acpi/pc/HPET.dimmpxm.dsl new file mode 100644 index 0000000000..84ce218492 --- /dev/null +++ b/tests/data/acpi/pc/HPET.dimmpxm.dsl @@ -0,0 +1,43 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/HPET.dimmpxm, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [HPET] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "HPET" [High Precision Event Timer table] +[004h 0004 4] Table Length : 00000038 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 03 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCHPET" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Hardware Block ID : 8086A201 + +[028h 0040 12] Timer Block Register : [Generic Address Structure] +[028h 0040 1] Space ID : 00 [SystemMemory] +[029h 0041 1] Bit Width : 00 +[02Ah 0042 1] Bit Offset : 00 +[02Bh 0043 1] Encoded Access Width : 00 [Undefined/Legacy] +[02Ch 0044 8] Address : 00000000FED00000 + +[034h 0052 1] Sequence Number : 00 +[035h 0053 2] Minimum Clock Ticks : 0000 +[037h 0055 1] Flags (decoded below) : 00 + 4K Page Protect : 0 + 64K Page Protect : 0 + +Raw Table Data: Length 56 (0x38) + + 0000: 48 50 45 54 38 00 00 00 01 03 42 4F 43 48 53 20 // HPET8.....BOCHS + 0010: 42 58 50 43 48 50 45 54 01 00 00 00 42 58 50 43 // BXPCHPET....BXPC + 0020: 01 00 00 00 01 A2 86 80 00 00 00 00 00 00 D0 FE // ................ + 0030: 00 00 00 00 00 00 00 00 // ........ diff --git a/tests/data/acpi/pc/HPET.dsl b/tests/data/acpi/pc/HPET.dsl new file mode 100644 index 0000000000..b392de5c95 --- /dev/null +++ b/tests/data/acpi/pc/HPET.dsl @@ -0,0 +1,43 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/HPET.roothp, Mon Sep 28 17:24:38 2020 + * + * ACPI Data Table [HPET] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "HPET" [High Precision Event Timer table] +[004h 0004 4] Table Length : 00000038 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 03 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCHPET" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Hardware Block ID : 8086A201 + +[028h 0040 12] Timer Block Register : [Generic Address Structure] +[028h 0040 1] Space ID : 00 [SystemMemory] +[029h 0041 1] Bit Width : 00 +[02Ah 0042 1] Bit Offset : 00 +[02Bh 0043 1] Encoded Access Width : 00 [Undefined/Legacy] +[02Ch 0044 8] Address : 00000000FED00000 + +[034h 0052 1] Sequence Number : 00 +[035h 0053 2] Minimum Clock Ticks : 0000 +[037h 0055 1] Flags (decoded below) : 00 + 4K Page Protect : 0 + 64K Page Protect : 0 + +Raw Table Data: Length 56 (0x38) + + 0000: 48 50 45 54 38 00 00 00 01 03 42 4F 43 48 53 20 // HPET8.....BOCHS + 0010: 42 58 50 43 48 50 45 54 01 00 00 00 42 58 50 43 // BXPCHPET....BXPC + 0020: 01 00 00 00 01 A2 86 80 00 00 00 00 00 00 D0 FE // ................ + 0030: 00 00 00 00 00 00 00 00 // ........ diff --git a/tests/data/acpi/pc/HPET.hpbridge b/tests/data/acpi/pc/HPET.hpbridge new file mode 100644 index 0000000000000000000000000000000000000000..df689b8f99c1c43cfd7d63bdede3bcdfd23b7de1 GIT binary patch literal 56 zcmeYWa1F6wU|?WmcJg=j2v%^42ypfYa1CK(U|;~TK{Vr{wgv_;xbP1`GcW)EHY*AN literal 0 HcmV?d00001 diff --git a/tests/data/acpi/pc/HPET.ipmikcs b/tests/data/acpi/pc/HPET.ipmikcs new file mode 100644 index 0000000000000000000000000000000000000000..df689b8f99c1c43cfd7d63bdede3bcdfd23b7de1 GIT binary patch literal 56 zcmeYWa1F6wU|?WmcJg=j2v%^42ypfYa1CK(U|;~TK{Vr{wgv_;xbP1`GcW)EHY*AN literal 0 HcmV?d00001 diff --git a/tests/data/acpi/pc/HPET.ipmikcs.dsl b/tests/data/acpi/pc/HPET.ipmikcs.dsl new file mode 100644 index 0000000000..34d10927dc --- /dev/null +++ b/tests/data/acpi/pc/HPET.ipmikcs.dsl @@ -0,0 +1,43 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/HPET.ipmikcs, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [HPET] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "HPET" [High Precision Event Timer table] +[004h 0004 4] Table Length : 00000038 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 03 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCHPET" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Hardware Block ID : 8086A201 + +[028h 0040 12] Timer Block Register : [Generic Address Structure] +[028h 0040 1] Space ID : 00 [SystemMemory] +[029h 0041 1] Bit Width : 00 +[02Ah 0042 1] Bit Offset : 00 +[02Bh 0043 1] Encoded Access Width : 00 [Undefined/Legacy] +[02Ch 0044 8] Address : 00000000FED00000 + +[034h 0052 1] Sequence Number : 00 +[035h 0053 2] Minimum Clock Ticks : 0000 +[037h 0055 1] Flags (decoded below) : 00 + 4K Page Protect : 0 + 64K Page Protect : 0 + +Raw Table Data: Length 56 (0x38) + + 0000: 48 50 45 54 38 00 00 00 01 03 42 4F 43 48 53 20 // HPET8.....BOCHS + 0010: 42 58 50 43 48 50 45 54 01 00 00 00 42 58 50 43 // BXPCHPET....BXPC + 0020: 01 00 00 00 01 A2 86 80 00 00 00 00 00 00 D0 FE // ................ + 0030: 00 00 00 00 00 00 00 00 // ........ diff --git a/tests/data/acpi/pc/HPET.memhp b/tests/data/acpi/pc/HPET.memhp new file mode 100644 index 0000000000000000000000000000000000000000..df689b8f99c1c43cfd7d63bdede3bcdfd23b7de1 GIT binary patch literal 56 zcmeYWa1F6wU|?WmcJg=j2v%^42ypfYa1CK(U|;~TK{Vr{wgv_;xbP1`GcW)EHY*AN literal 0 HcmV?d00001 diff --git a/tests/data/acpi/pc/HPET.memhp.dsl b/tests/data/acpi/pc/HPET.memhp.dsl new file mode 100644 index 0000000000..f9f62dd9c8 --- /dev/null +++ b/tests/data/acpi/pc/HPET.memhp.dsl @@ -0,0 +1,43 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/HPET.memhp, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [HPET] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "HPET" [High Precision Event Timer table] +[004h 0004 4] Table Length : 00000038 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 03 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCHPET" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Hardware Block ID : 8086A201 + +[028h 0040 12] Timer Block Register : [Generic Address Structure] +[028h 0040 1] Space ID : 00 [SystemMemory] +[029h 0041 1] Bit Width : 00 +[02Ah 0042 1] Bit Offset : 00 +[02Bh 0043 1] Encoded Access Width : 00 [Undefined/Legacy] +[02Ch 0044 8] Address : 00000000FED00000 + +[034h 0052 1] Sequence Number : 00 +[035h 0053 2] Minimum Clock Ticks : 0000 +[037h 0055 1] Flags (decoded below) : 00 + 4K Page Protect : 0 + 64K Page Protect : 0 + +Raw Table Data: Length 56 (0x38) + + 0000: 48 50 45 54 38 00 00 00 01 03 42 4F 43 48 53 20 // HPET8.....BOCHS + 0010: 42 58 50 43 48 50 45 54 01 00 00 00 42 58 50 43 // BXPCHPET....BXPC + 0020: 01 00 00 00 01 A2 86 80 00 00 00 00 00 00 D0 FE // ................ + 0030: 00 00 00 00 00 00 00 00 // ........ diff --git a/tests/data/acpi/pc/HPET.numamem b/tests/data/acpi/pc/HPET.numamem new file mode 100644 index 0000000000000000000000000000000000000000..df689b8f99c1c43cfd7d63bdede3bcdfd23b7de1 GIT binary patch literal 56 zcmeYWa1F6wU|?WmcJg=j2v%^42ypfYa1CK(U|;~TK{Vr{wgv_;xbP1`GcW)EHY*AN literal 0 HcmV?d00001 diff --git a/tests/data/acpi/pc/HPET.numamem.dsl b/tests/data/acpi/pc/HPET.numamem.dsl new file mode 100644 index 0000000000..1f51efad19 --- /dev/null +++ b/tests/data/acpi/pc/HPET.numamem.dsl @@ -0,0 +1,43 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/HPET.numamem, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [HPET] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "HPET" [High Precision Event Timer table] +[004h 0004 4] Table Length : 00000038 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 03 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCHPET" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Hardware Block ID : 8086A201 + +[028h 0040 12] Timer Block Register : [Generic Address Structure] +[028h 0040 1] Space ID : 00 [SystemMemory] +[029h 0041 1] Bit Width : 00 +[02Ah 0042 1] Bit Offset : 00 +[02Bh 0043 1] Encoded Access Width : 00 [Undefined/Legacy] +[02Ch 0044 8] Address : 00000000FED00000 + +[034h 0052 1] Sequence Number : 00 +[035h 0053 2] Minimum Clock Ticks : 0000 +[037h 0055 1] Flags (decoded below) : 00 + 4K Page Protect : 0 + 64K Page Protect : 0 + +Raw Table Data: Length 56 (0x38) + + 0000: 48 50 45 54 38 00 00 00 01 03 42 4F 43 48 53 20 // HPET8.....BOCHS + 0010: 42 58 50 43 48 50 45 54 01 00 00 00 42 58 50 43 // BXPCHPET....BXPC + 0020: 01 00 00 00 01 A2 86 80 00 00 00 00 00 00 D0 FE // ................ + 0030: 00 00 00 00 00 00 00 00 // ........ diff --git a/tests/data/acpi/pc/HPET.roothp b/tests/data/acpi/pc/HPET.roothp new file mode 100644 index 0000000000000000000000000000000000000000..df689b8f99c1c43cfd7d63bdede3bcdfd23b7de1 GIT binary patch literal 56 zcmeYWa1F6wU|?WmcJg=j2v%^42ypfYa1CK(U|;~TK{Vr{wgv_;xbP1`GcW)EHY*AN literal 0 HcmV?d00001 diff --git a/tests/data/acpi/pc/NFIT.dimmpxm.dsl b/tests/data/acpi/pc/NFIT.dimmpxm.dsl new file mode 100644 index 0000000000..33212b0a17 --- /dev/null +++ b/tests/data/acpi/pc/NFIT.dimmpxm.dsl @@ -0,0 +1,115 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/NFIT.dimmpxm, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [NFIT] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "NFIT" [NVDIMM Firmware Interface Table] +[004h 0004 4] Table Length : 000000F0 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 24 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCNFIT" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Reserved : 00000000 + +[028h 0040 2] Subtable Type : 0000 [System Physical Address Range] +[02Ah 0042 2] Length : 0038 + +[02Ch 0044 2] Range Index : 0004 +[02Eh 0046 2] Flags (decoded below) : 0003 + Add/Online Operation Only : 1 + Proximity Domain Valid : 1 +[030h 0048 4] Reserved : 00000000 +[034h 0052 4] Proximity Domain : 00000002 +[038h 0056 16] Region Type GUID : 66F0D379-B4F3-4074-AC43-0D3318B78CDB +[048h 0072 8] Address Range Base : 0000000108000000 +[050h 0080 8] Address Range Length : 0000000008000000 +[058h 0088 8] Memory Map Attribute : 0000000000008008 + +[060h 0096 2] Subtable Type : 0001 [Memory Range Map] +[062h 0098 2] Length : 0030 + +[064h 0100 4] Device Handle : 00000002 +[068h 0104 2] Physical Id : 0000 +[06Ah 0106 2] Region Id : 0000 +[06Ch 0108 2] Range Index : 0004 +[06Eh 0110 2] Control Region Index : 0005 +[070h 0112 8] Region Size : 0000000008000000 +[078h 0120 8] Region Offset : 0000000000000000 +[080h 0128 8] Address Region Base : 0000000000000000 +[088h 0136 2] Interleave Index : 0000 +[08Ah 0138 2] Interleave Ways : 0001 +[08Ch 0140 2] Flags : 0000 + Save to device failed : 0 + Restore from device failed : 0 + Platform flush failed : 0 + Device not armed : 0 + Health events observed : 0 + Health events enabled : 0 + Mapping failed : 0 +[08Eh 0142 2] Reserved : 0000 + +[090h 0144 2] Subtable Type : 0004 [NVDIMM Control Region] +[092h 0146 2] Length : 0050 + +[094h 0148 2] Region Index : 0005 +[096h 0150 2] Vendor Id : 8086 +[098h 0152 2] Device Id : 0001 +[09Ah 0154 2] Revision Id : 0001 +[09Ch 0156 2] Subsystem Vendor Id : 0000 +[09Eh 0158 2] Subsystem Device Id : 0000 +[0A0h 0160 2] Subsystem Revision Id : 0000 +[0A2h 0162 1] Valid Fields : 00 +[0A3h 0163 1] Manufacturing Location : 00 +[0A4h 0164 2] Manufacturing Date : 0000 +[0A6h 0166 2] Reserved : 0000 +[0A8h 0168 4] Serial Number : 00123457 +[0ACh 0172 2] Code : 0301 +[0AEh 0174 2] Window Count : 0000 +[0B0h 0176 8] Window Size : 0000000000000000 +[0B8h 0184 8] Command Offset : 0000000000000000 +[0C0h 0192 8] Command Size : 0000000000000000 +[0C8h 0200 8] Status Offset : 0000000000000000 +[0D0h 0208 8] Status Size : 0000000000000000 +[0D8h 0216 2] Flags : 0000 + Windows buffered : 0 +[0DAh 0218 6] Reserved1 : 000000000000 + +[0E0h 0224 2] Subtable Type : 0007 [Platform Capabilities] +[0E2h 0226 2] Length : 0010 + +[0E4h 0228 1] Highest Capability : 01 +[0E5h 0229 3] Reserved : 000000 +[0E8h 0232 4] Capabilities (decoded below) : 00000003 + Cache Flush to NVDIMM : 1 + Memory Flush to NVDIMM : 1 + Memory Mirroring : 0 +[0ECh 0236 4] Reserved : 00000000 + +Raw Table Data: Length 240 (0xF0) + + 0000: 4E 46 49 54 F0 00 00 00 01 24 42 4F 43 48 53 20 // NFIT.....$BOCHS + 0010: 42 58 50 43 4E 46 49 54 01 00 00 00 42 58 50 43 // BXPCNFIT....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 38 00 04 00 03 00 // ..........8..... + 0030: 00 00 00 00 02 00 00 00 79 D3 F0 66 F3 B4 74 40 // ........y..f..t@ + 0040: AC 43 0D 33 18 B7 8C DB 00 00 00 08 01 00 00 00 // .C.3............ + 0050: 00 00 00 08 00 00 00 00 08 80 00 00 00 00 00 00 // ................ + 0060: 01 00 30 00 02 00 00 00 00 00 00 00 04 00 05 00 // ..0............. + 0070: 00 00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0080: 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 // ................ + 0090: 04 00 50 00 05 00 86 80 01 00 01 00 00 00 00 00 // ..P............. + 00A0: 00 00 00 00 00 00 00 00 57 34 12 00 01 03 00 00 // ........W4...... + 00B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00E0: 07 00 10 00 01 00 00 00 03 00 00 00 00 00 00 00 // ................ diff --git a/tests/data/acpi/pc/NFIT.dsl b/tests/data/acpi/pc/NFIT.dsl new file mode 100644 index 0000000000..f4a8034f87 --- /dev/null +++ b/tests/data/acpi/pc/NFIT.dsl @@ -0,0 +1,115 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/NFIT.dimmpxm, Mon Sep 28 17:24:38 2020 + * + * ACPI Data Table [NFIT] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "NFIT" [NVDIMM Firmware Interface Table] +[004h 0004 4] Table Length : 000000F0 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 24 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCNFIT" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Reserved : 00000000 + +[028h 0040 2] Subtable Type : 0000 [System Physical Address Range] +[02Ah 0042 2] Length : 0038 + +[02Ch 0044 2] Range Index : 0004 +[02Eh 0046 2] Flags (decoded below) : 0003 + Add/Online Operation Only : 1 + Proximity Domain Valid : 1 +[030h 0048 4] Reserved : 00000000 +[034h 0052 4] Proximity Domain : 00000002 +[038h 0056 16] Region Type GUID : 66F0D379-B4F3-4074-AC43-0D3318B78CDB +[048h 0072 8] Address Range Base : 0000000108000000 +[050h 0080 8] Address Range Length : 0000000008000000 +[058h 0088 8] Memory Map Attribute : 0000000000008008 + +[060h 0096 2] Subtable Type : 0001 [Memory Range Map] +[062h 0098 2] Length : 0030 + +[064h 0100 4] Device Handle : 00000002 +[068h 0104 2] Physical Id : 0000 +[06Ah 0106 2] Region Id : 0000 +[06Ch 0108 2] Range Index : 0004 +[06Eh 0110 2] Control Region Index : 0005 +[070h 0112 8] Region Size : 0000000008000000 +[078h 0120 8] Region Offset : 0000000000000000 +[080h 0128 8] Address Region Base : 0000000000000000 +[088h 0136 2] Interleave Index : 0000 +[08Ah 0138 2] Interleave Ways : 0001 +[08Ch 0140 2] Flags : 0000 + Save to device failed : 0 + Restore from device failed : 0 + Platform flush failed : 0 + Device not armed : 0 + Health events observed : 0 + Health events enabled : 0 + Mapping failed : 0 +[08Eh 0142 2] Reserved : 0000 + +[090h 0144 2] Subtable Type : 0004 [NVDIMM Control Region] +[092h 0146 2] Length : 0050 + +[094h 0148 2] Region Index : 0005 +[096h 0150 2] Vendor Id : 8086 +[098h 0152 2] Device Id : 0001 +[09Ah 0154 2] Revision Id : 0001 +[09Ch 0156 2] Subsystem Vendor Id : 0000 +[09Eh 0158 2] Subsystem Device Id : 0000 +[0A0h 0160 2] Subsystem Revision Id : 0000 +[0A2h 0162 1] Valid Fields : 00 +[0A3h 0163 1] Manufacturing Location : 00 +[0A4h 0164 2] Manufacturing Date : 0000 +[0A6h 0166 2] Reserved : 0000 +[0A8h 0168 4] Serial Number : 00123457 +[0ACh 0172 2] Code : 0301 +[0AEh 0174 2] Window Count : 0000 +[0B0h 0176 8] Window Size : 0000000000000000 +[0B8h 0184 8] Command Offset : 0000000000000000 +[0C0h 0192 8] Command Size : 0000000000000000 +[0C8h 0200 8] Status Offset : 0000000000000000 +[0D0h 0208 8] Status Size : 0000000000000000 +[0D8h 0216 2] Flags : 0000 + Windows buffered : 0 +[0DAh 0218 6] Reserved1 : 000000000000 + +[0E0h 0224 2] Subtable Type : 0007 [Platform Capabilities] +[0E2h 0226 2] Length : 0010 + +[0E4h 0228 1] Highest Capability : 01 +[0E5h 0229 3] Reserved : 000000 +[0E8h 0232 4] Capabilities (decoded below) : 00000003 + Cache Flush to NVDIMM : 1 + Memory Flush to NVDIMM : 1 + Memory Mirroring : 0 +[0ECh 0236 4] Reserved : 00000000 + +Raw Table Data: Length 240 (0xF0) + + 0000: 4E 46 49 54 F0 00 00 00 01 24 42 4F 43 48 53 20 // NFIT.....$BOCHS + 0010: 42 58 50 43 4E 46 49 54 01 00 00 00 42 58 50 43 // BXPCNFIT....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 38 00 04 00 03 00 // ..........8..... + 0030: 00 00 00 00 02 00 00 00 79 D3 F0 66 F3 B4 74 40 // ........y..f..t@ + 0040: AC 43 0D 33 18 B7 8C DB 00 00 00 08 01 00 00 00 // .C.3............ + 0050: 00 00 00 08 00 00 00 00 08 80 00 00 00 00 00 00 // ................ + 0060: 01 00 30 00 02 00 00 00 00 00 00 00 04 00 05 00 // ..0............. + 0070: 00 00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0080: 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 // ................ + 0090: 04 00 50 00 05 00 86 80 01 00 01 00 00 00 00 00 // ..P............. + 00A0: 00 00 00 00 00 00 00 00 57 34 12 00 01 03 00 00 // ........W4...... + 00B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00E0: 07 00 10 00 01 00 00 00 03 00 00 00 00 00 00 00 // ................ diff --git a/tests/data/acpi/pc/SLIT.cphp.dsl b/tests/data/acpi/pc/SLIT.cphp.dsl new file mode 100644 index 0000000000..20289608db --- /dev/null +++ b/tests/data/acpi/pc/SLIT.cphp.dsl @@ -0,0 +1,31 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/SLIT.cphp, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [SLIT] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "SLIT" [System Locality Information Table] +[004h 0004 4] Table Length : 00000030 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 2C +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCSLIT" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 8] Localities : 0000000000000002 +[02Ch 0044 2] Locality 0 : 0A 15 +[02Eh 0046 2] Locality 1 : 15 0A + +Raw Table Data: Length 48 (0x30) + + 0000: 53 4C 49 54 30 00 00 00 01 2C 42 4F 43 48 53 20 // SLIT0....,BOCHS + 0010: 42 58 50 43 53 4C 49 54 01 00 00 00 42 58 50 43 // BXPCSLIT....BXPC + 0020: 01 00 00 00 02 00 00 00 00 00 00 00 0A 15 15 0A // ................ diff --git a/tests/data/acpi/pc/SLIT.dsl b/tests/data/acpi/pc/SLIT.dsl new file mode 100644 index 0000000000..8b923249af --- /dev/null +++ b/tests/data/acpi/pc/SLIT.dsl @@ -0,0 +1,31 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/SLIT.memhp, Mon Sep 28 17:24:38 2020 + * + * ACPI Data Table [SLIT] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "SLIT" [System Locality Information Table] +[004h 0004 4] Table Length : 00000030 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 2C +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCSLIT" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 8] Localities : 0000000000000002 +[02Ch 0044 2] Locality 0 : 0A 15 +[02Eh 0046 2] Locality 1 : 15 0A + +Raw Table Data: Length 48 (0x30) + + 0000: 53 4C 49 54 30 00 00 00 01 2C 42 4F 43 48 53 20 // SLIT0....,BOCHS + 0010: 42 58 50 43 53 4C 49 54 01 00 00 00 42 58 50 43 // BXPCSLIT....BXPC + 0020: 01 00 00 00 02 00 00 00 00 00 00 00 0A 15 15 0A // ................ diff --git a/tests/data/acpi/pc/SLIT.memhp.dsl b/tests/data/acpi/pc/SLIT.memhp.dsl new file mode 100644 index 0000000000..b3a0170144 --- /dev/null +++ b/tests/data/acpi/pc/SLIT.memhp.dsl @@ -0,0 +1,31 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/SLIT.memhp, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [SLIT] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "SLIT" [System Locality Information Table] +[004h 0004 4] Table Length : 00000030 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 2C +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCSLIT" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 8] Localities : 0000000000000002 +[02Ch 0044 2] Locality 0 : 0A 15 +[02Eh 0046 2] Locality 1 : 15 0A + +Raw Table Data: Length 48 (0x30) + + 0000: 53 4C 49 54 30 00 00 00 01 2C 42 4F 43 48 53 20 // SLIT0....,BOCHS + 0010: 42 58 50 43 53 4C 49 54 01 00 00 00 42 58 50 43 // BXPCSLIT....BXPC + 0020: 01 00 00 00 02 00 00 00 00 00 00 00 0A 15 15 0A // ................ diff --git a/tests/data/acpi/pc/SRAT.acpihmat.dsl b/tests/data/acpi/pc/SRAT.acpihmat.dsl new file mode 100644 index 0000000000..e3c788672f --- /dev/null +++ b/tests/data/acpi/pc/SRAT.acpihmat.dsl @@ -0,0 +1,137 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/SRAT.acpihmat, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [SRAT] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "SRAT" [System Resource Affinity Table] +[004h 0004 4] Table Length : 00000118 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : C0 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCSRAT" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Table Revision : 00000001 +[028h 0040 8] Reserved : 0000000000000000 + +[030h 0048 1] Subtable Type : 00 [Processor Local APIC/SAPIC Affinity] +[031h 0049 1] Length : 10 + +[032h 0050 1] Proximity Domain Low(8) : 00 +[033h 0051 1] Apic ID : 00 +[034h 0052 4] Flags (decoded below) : 00000001 + Enabled : 1 +[038h 0056 1] Local Sapic EID : 00 +[039h 0057 3] Proximity Domain High(24) : 000000 +[03Ch 0060 4] Clock Domain : 00000000 + +[040h 0064 1] Subtable Type : 00 [Processor Local APIC/SAPIC Affinity] +[041h 0065 1] Length : 10 + +[042h 0066 1] Proximity Domain Low(8) : 00 +[043h 0067 1] Apic ID : 01 +[044h 0068 4] Flags (decoded below) : 00000001 + Enabled : 1 +[048h 0072 1] Local Sapic EID : 00 +[049h 0073 3] Proximity Domain High(24) : 000000 +[04Ch 0076 4] Clock Domain : 00000000 + +[050h 0080 1] Subtable Type : 01 [Memory Affinity] +[051h 0081 1] Length : 28 + +[052h 0082 4] Proximity Domain : 00000000 +[056h 0086 2] Reserved1 : 0000 +[058h 0088 8] Base Address : 0000000000000000 +[060h 0096 8] Address Length : 00000000000A0000 +[068h 0104 4] Reserved2 : 00000000 +[06Ch 0108 4] Flags (decoded below) : 00000001 + Enabled : 1 + Hot Pluggable : 0 + Non-Volatile : 0 +[070h 0112 8] Reserved3 : 0000000000000000 + +[078h 0120 1] Subtable Type : 01 [Memory Affinity] +[079h 0121 1] Length : 28 + +[07Ah 0122 4] Proximity Domain : 00000000 +[07Eh 0126 2] Reserved1 : 0000 +[080h 0128 8] Base Address : 0000000000100000 +[088h 0136 8] Address Length : 0000000003F00000 +[090h 0144 4] Reserved2 : 00000000 +[094h 0148 4] Flags (decoded below) : 00000001 + Enabled : 1 + Hot Pluggable : 0 + Non-Volatile : 0 +[098h 0152 8] Reserved3 : 0000000000000000 + +[0A0h 0160 1] Subtable Type : 01 [Memory Affinity] +[0A1h 0161 1] Length : 28 + +[0A2h 0162 4] Proximity Domain : 00000001 +[0A6h 0166 2] Reserved1 : 0000 +[0A8h 0168 8] Base Address : 0000000004000000 +[0B0h 0176 8] Address Length : 0000000004000000 +[0B8h 0184 4] Reserved2 : 00000000 +[0BCh 0188 4] Flags (decoded below) : 00000001 + Enabled : 1 + Hot Pluggable : 0 + Non-Volatile : 0 +[0C0h 0192 8] Reserved3 : 0000000000000000 + +[0C8h 0200 1] Subtable Type : 01 [Memory Affinity] +[0C9h 0201 1] Length : 28 + +[0CAh 0202 4] Proximity Domain : 00000000 +[0CEh 0206 2] Reserved1 : 0000 +[0D0h 0208 8] Base Address : 0000000000000000 +[0D8h 0216 8] Address Length : 0000000000000000 +[0E0h 0224 4] Reserved2 : 00000000 +[0E4h 0228 4] Flags (decoded below) : 00000000 + Enabled : 0 + Hot Pluggable : 0 + Non-Volatile : 0 +[0E8h 0232 8] Reserved3 : 0000000000000000 + +[0F0h 0240 1] Subtable Type : 01 [Memory Affinity] +[0F1h 0241 1] Length : 28 + +[0F2h 0242 4] Proximity Domain : 00000001 +[0F6h 0246 2] Reserved1 : 0000 +[0F8h 0248 8] Base Address : 0000000100000000 +[100h 0256 8] Address Length : 00000000B8000000 +[108h 0264 4] Reserved2 : 00000000 +[10Ch 0268 4] Flags (decoded below) : 00000003 + Enabled : 1 + Hot Pluggable : 1 + Non-Volatile : 0 +[110h 0272 8] Reserved3 : 0000000000000000 + +Raw Table Data: Length 280 (0x118) + + 0000: 53 52 41 54 18 01 00 00 01 C0 42 4F 43 48 53 20 // SRAT......BOCHS + 0010: 42 58 50 43 53 52 41 54 01 00 00 00 42 58 50 43 // BXPCSRAT....BXPC + 0020: 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0030: 00 10 00 00 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0040: 00 10 00 01 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0050: 01 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // .(.............. + 0060: 00 00 0A 00 00 00 00 00 00 00 00 00 01 00 00 00 // ................ + 0070: 00 00 00 00 00 00 00 00 01 28 00 00 00 00 00 00 // .........(...... + 0080: 00 00 10 00 00 00 00 00 00 00 F0 03 00 00 00 00 // ................ + 0090: 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00A0: 01 28 01 00 00 00 00 00 00 00 00 04 00 00 00 00 // .(.............. + 00B0: 00 00 00 04 00 00 00 00 00 00 00 00 01 00 00 00 // ................ + 00C0: 00 00 00 00 00 00 00 00 01 28 00 00 00 00 00 00 // .........(...... + 00D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00F0: 01 28 01 00 00 00 00 00 00 00 00 00 01 00 00 00 // .(.............. + 0100: 00 00 00 B8 00 00 00 00 00 00 00 00 03 00 00 00 // ................ + 0110: 00 00 00 00 00 00 00 00 // ........ diff --git a/tests/data/acpi/pc/SRAT.cphp.dsl b/tests/data/acpi/pc/SRAT.cphp.dsl new file mode 100644 index 0000000000..20c38ee3cc --- /dev/null +++ b/tests/data/acpi/pc/SRAT.cphp.dsl @@ -0,0 +1,168 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/SRAT.cphp, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [SRAT] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "SRAT" [System Resource Affinity Table] +[004h 0004 4] Table Length : 00000130 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 36 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCSRAT" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Table Revision : 00000001 +[028h 0040 8] Reserved : 0000000000000000 + +[030h 0048 1] Subtable Type : 00 [Processor Local APIC/SAPIC Affinity] +[031h 0049 1] Length : 10 + +[032h 0050 1] Proximity Domain Low(8) : 00 +[033h 0051 1] Apic ID : 00 +[034h 0052 4] Flags (decoded below) : 00000001 + Enabled : 1 +[038h 0056 1] Local Sapic EID : 00 +[039h 0057 3] Proximity Domain High(24) : 000000 +[03Ch 0060 4] Clock Domain : 00000000 + +[040h 0064 1] Subtable Type : 00 [Processor Local APIC/SAPIC Affinity] +[041h 0065 1] Length : 10 + +[042h 0066 1] Proximity Domain Low(8) : 00 +[043h 0067 1] Apic ID : 01 +[044h 0068 4] Flags (decoded below) : 00000001 + Enabled : 1 +[048h 0072 1] Local Sapic EID : 00 +[049h 0073 3] Proximity Domain High(24) : 000000 +[04Ch 0076 4] Clock Domain : 00000000 + +[050h 0080 1] Subtable Type : 00 [Processor Local APIC/SAPIC Affinity] +[051h 0081 1] Length : 10 + +[052h 0082 1] Proximity Domain Low(8) : 00 +[053h 0083 1] Apic ID : 02 +[054h 0084 4] Flags (decoded below) : 00000001 + Enabled : 1 +[058h 0088 1] Local Sapic EID : 00 +[059h 0089 3] Proximity Domain High(24) : 000000 +[05Ch 0092 4] Clock Domain : 00000000 + +[060h 0096 1] Subtable Type : 00 [Processor Local APIC/SAPIC Affinity] +[061h 0097 1] Length : 10 + +[062h 0098 1] Proximity Domain Low(8) : 01 +[063h 0099 1] Apic ID : 04 +[064h 0100 4] Flags (decoded below) : 00000001 + Enabled : 1 +[068h 0104 1] Local Sapic EID : 00 +[069h 0105 3] Proximity Domain High(24) : 000000 +[06Ch 0108 4] Clock Domain : 00000000 + +[070h 0112 1] Subtable Type : 00 [Processor Local APIC/SAPIC Affinity] +[071h 0113 1] Length : 10 + +[072h 0114 1] Proximity Domain Low(8) : 01 +[073h 0115 1] Apic ID : 05 +[074h 0116 4] Flags (decoded below) : 00000001 + Enabled : 1 +[078h 0120 1] Local Sapic EID : 00 +[079h 0121 3] Proximity Domain High(24) : 000000 +[07Ch 0124 4] Clock Domain : 00000000 + +[080h 0128 1] Subtable Type : 00 [Processor Local APIC/SAPIC Affinity] +[081h 0129 1] Length : 10 + +[082h 0130 1] Proximity Domain Low(8) : 01 +[083h 0131 1] Apic ID : 06 +[084h 0132 4] Flags (decoded below) : 00000001 + Enabled : 1 +[088h 0136 1] Local Sapic EID : 00 +[089h 0137 3] Proximity Domain High(24) : 000000 +[08Ch 0140 4] Clock Domain : 00000000 + +[090h 0144 1] Subtable Type : 01 [Memory Affinity] +[091h 0145 1] Length : 28 + +[092h 0146 4] Proximity Domain : 00000000 +[096h 0150 2] Reserved1 : 0000 +[098h 0152 8] Base Address : 0000000000000000 +[0A0h 0160 8] Address Length : 00000000000A0000 +[0A8h 0168 4] Reserved2 : 00000000 +[0ACh 0172 4] Flags (decoded below) : 00000001 + Enabled : 1 + Hot Pluggable : 0 + Non-Volatile : 0 +[0B0h 0176 8] Reserved3 : 0000000000000000 + +[0B8h 0184 1] Subtable Type : 01 [Memory Affinity] +[0B9h 0185 1] Length : 28 + +[0BAh 0186 4] Proximity Domain : 00000000 +[0BEh 0190 2] Reserved1 : 0000 +[0C0h 0192 8] Base Address : 0000000000100000 +[0C8h 0200 8] Address Length : 0000000003F00000 +[0D0h 0208 4] Reserved2 : 00000000 +[0D4h 0212 4] Flags (decoded below) : 00000001 + Enabled : 1 + Hot Pluggable : 0 + Non-Volatile : 0 +[0D8h 0216 8] Reserved3 : 0000000000000000 + +[0E0h 0224 1] Subtable Type : 01 [Memory Affinity] +[0E1h 0225 1] Length : 28 + +[0E2h 0226 4] Proximity Domain : 00000001 +[0E6h 0230 2] Reserved1 : 0000 +[0E8h 0232 8] Base Address : 0000000004000000 +[0F0h 0240 8] Address Length : 0000000004000000 +[0F8h 0248 4] Reserved2 : 00000000 +[0FCh 0252 4] Flags (decoded below) : 00000001 + Enabled : 1 + Hot Pluggable : 0 + Non-Volatile : 0 +[100h 0256 8] Reserved3 : 0000000000000000 + +[108h 0264 1] Subtable Type : 01 [Memory Affinity] +[109h 0265 1] Length : 28 + +[10Ah 0266 4] Proximity Domain : 00000000 +[10Eh 0270 2] Reserved1 : 0000 +[110h 0272 8] Base Address : 0000000000000000 +[118h 0280 8] Address Length : 0000000000000000 +[120h 0288 4] Reserved2 : 00000000 +[124h 0292 4] Flags (decoded below) : 00000000 + Enabled : 0 + Hot Pluggable : 0 + Non-Volatile : 0 +[128h 0296 8] Reserved3 : 0000000000000000 + +Raw Table Data: Length 304 (0x130) + + 0000: 53 52 41 54 30 01 00 00 01 36 42 4F 43 48 53 20 // SRAT0....6BOCHS + 0010: 42 58 50 43 53 52 41 54 01 00 00 00 42 58 50 43 // BXPCSRAT....BXPC + 0020: 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0030: 00 10 00 00 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0040: 00 10 00 01 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0050: 00 10 00 02 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0060: 00 10 01 04 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0070: 00 10 01 05 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0080: 00 10 01 06 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0090: 01 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // .(.............. + 00A0: 00 00 0A 00 00 00 00 00 00 00 00 00 01 00 00 00 // ................ + 00B0: 00 00 00 00 00 00 00 00 01 28 00 00 00 00 00 00 // .........(...... + 00C0: 00 00 10 00 00 00 00 00 00 00 F0 03 00 00 00 00 // ................ + 00D0: 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00E0: 01 28 01 00 00 00 00 00 00 00 00 04 00 00 00 00 // .(.............. + 00F0: 00 00 00 04 00 00 00 00 00 00 00 00 01 00 00 00 // ................ + 0100: 00 00 00 00 00 00 00 00 01 28 00 00 00 00 00 00 // .........(...... + 0110: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0120: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ diff --git a/tests/data/acpi/pc/SRAT.dimmpxm.dsl b/tests/data/acpi/pc/SRAT.dimmpxm.dsl new file mode 100644 index 0000000000..888fef1b5c --- /dev/null +++ b/tests/data/acpi/pc/SRAT.dimmpxm.dsl @@ -0,0 +1,194 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/SRAT.dimmpxm, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [SRAT] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "SRAT" [System Resource Affinity Table] +[004h 0004 4] Table Length : 00000188 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 68 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCSRAT" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Table Revision : 00000001 +[028h 0040 8] Reserved : 0000000000000000 + +[030h 0048 1] Subtable Type : 00 [Processor Local APIC/SAPIC Affinity] +[031h 0049 1] Length : 10 + +[032h 0050 1] Proximity Domain Low(8) : 00 +[033h 0051 1] Apic ID : 00 +[034h 0052 4] Flags (decoded below) : 00000001 + Enabled : 1 +[038h 0056 1] Local Sapic EID : 00 +[039h 0057 3] Proximity Domain High(24) : 000000 +[03Ch 0060 4] Clock Domain : 00000000 + +[040h 0064 1] Subtable Type : 00 [Processor Local APIC/SAPIC Affinity] +[041h 0065 1] Length : 10 + +[042h 0066 1] Proximity Domain Low(8) : 01 +[043h 0067 1] Apic ID : 01 +[044h 0068 4] Flags (decoded below) : 00000001 + Enabled : 1 +[048h 0072 1] Local Sapic EID : 00 +[049h 0073 3] Proximity Domain High(24) : 000000 +[04Ch 0076 4] Clock Domain : 00000000 + +[050h 0080 1] Subtable Type : 00 [Processor Local APIC/SAPIC Affinity] +[051h 0081 1] Length : 10 + +[052h 0082 1] Proximity Domain Low(8) : 02 +[053h 0083 1] Apic ID : 02 +[054h 0084 4] Flags (decoded below) : 00000001 + Enabled : 1 +[058h 0088 1] Local Sapic EID : 00 +[059h 0089 3] Proximity Domain High(24) : 000000 +[05Ch 0092 4] Clock Domain : 00000000 + +[060h 0096 1] Subtable Type : 00 [Processor Local APIC/SAPIC Affinity] +[061h 0097 1] Length : 10 + +[062h 0098 1] Proximity Domain Low(8) : 03 +[063h 0099 1] Apic ID : 03 +[064h 0100 4] Flags (decoded below) : 00000001 + Enabled : 1 +[068h 0104 1] Local Sapic EID : 00 +[069h 0105 3] Proximity Domain High(24) : 000000 +[06Ch 0108 4] Clock Domain : 00000000 + +[070h 0112 1] Subtable Type : 01 [Memory Affinity] +[071h 0113 1] Length : 28 + +[072h 0114 4] Proximity Domain : 00000000 +[076h 0118 2] Reserved1 : 0000 +[078h 0120 8] Base Address : 0000000000000000 +[080h 0128 8] Address Length : 00000000000A0000 +[088h 0136 4] Reserved2 : 00000000 +[08Ch 0140 4] Flags (decoded below) : 00000001 + Enabled : 1 + Hot Pluggable : 0 + Non-Volatile : 0 +[090h 0144 8] Reserved3 : 0000000000000000 + +[098h 0152 1] Subtable Type : 01 [Memory Affinity] +[099h 0153 1] Length : 28 + +[09Ah 0154 4] Proximity Domain : 00000000 +[09Eh 0158 2] Reserved1 : 0000 +[0A0h 0160 8] Base Address : 0000000000100000 +[0A8h 0168 8] Address Length : 0000000001F00000 +[0B0h 0176 4] Reserved2 : 00000000 +[0B4h 0180 4] Flags (decoded below) : 00000001 + Enabled : 1 + Hot Pluggable : 0 + Non-Volatile : 0 +[0B8h 0184 8] Reserved3 : 0000000000000000 + +[0C0h 0192 1] Subtable Type : 01 [Memory Affinity] +[0C1h 0193 1] Length : 28 + +[0C2h 0194 4] Proximity Domain : 00000001 +[0C6h 0198 2] Reserved1 : 0000 +[0C8h 0200 8] Base Address : 0000000002000000 +[0D0h 0208 8] Address Length : 0000000002000000 +[0D8h 0216 4] Reserved2 : 00000000 +[0DCh 0220 4] Flags (decoded below) : 00000001 + Enabled : 1 + Hot Pluggable : 0 + Non-Volatile : 0 +[0E0h 0224 8] Reserved3 : 0000000000000000 + +[0E8h 0232 1] Subtable Type : 01 [Memory Affinity] +[0E9h 0233 1] Length : 28 + +[0EAh 0234 4] Proximity Domain : 00000002 +[0EEh 0238 2] Reserved1 : 0000 +[0F0h 0240 8] Base Address : 0000000004000000 +[0F8h 0248 8] Address Length : 0000000002000000 +[100h 0256 4] Reserved2 : 00000000 +[104h 0260 4] Flags (decoded below) : 00000001 + Enabled : 1 + Hot Pluggable : 0 + Non-Volatile : 0 +[108h 0264 8] Reserved3 : 0000000000000000 + +[110h 0272 1] Subtable Type : 01 [Memory Affinity] +[111h 0273 1] Length : 28 + +[112h 0274 4] Proximity Domain : 00000003 +[116h 0278 2] Reserved1 : 0000 +[118h 0280 8] Base Address : 0000000006000000 +[120h 0288 8] Address Length : 0000000002000000 +[128h 0296 4] Reserved2 : 00000000 +[12Ch 0300 4] Flags (decoded below) : 00000001 + Enabled : 1 + Hot Pluggable : 0 + Non-Volatile : 0 +[130h 0304 8] Reserved3 : 0000000000000000 + +[138h 0312 1] Subtable Type : 01 [Memory Affinity] +[139h 0313 1] Length : 28 + +[13Ah 0314 4] Proximity Domain : 00000002 +[13Eh 0318 2] Reserved1 : 0000 +[140h 0320 8] Base Address : 0000000108000000 +[148h 0328 8] Address Length : 0000000008000000 +[150h 0336 4] Reserved2 : 00000000 +[154h 0340 4] Flags (decoded below) : 00000005 + Enabled : 1 + Hot Pluggable : 0 + Non-Volatile : 1 +[158h 0344 8] Reserved3 : 0000000000000000 + +[160h 0352 1] Subtable Type : 01 [Memory Affinity] +[161h 0353 1] Length : 28 + +[162h 0354 4] Proximity Domain : 00000003 +[166h 0358 2] Reserved1 : 0000 +[168h 0360 8] Base Address : 0000000100000000 +[170h 0368 8] Address Length : 00000000F8000000 +[178h 0376 4] Reserved2 : 00000000 +[17Ch 0380 4] Flags (decoded below) : 00000003 + Enabled : 1 + Hot Pluggable : 1 + Non-Volatile : 0 +[180h 0384 8] Reserved3 : 0000000000000000 + +Raw Table Data: Length 392 (0x188) + + 0000: 53 52 41 54 88 01 00 00 01 68 42 4F 43 48 53 20 // SRAT.....hBOCHS + 0010: 42 58 50 43 53 52 41 54 01 00 00 00 42 58 50 43 // BXPCSRAT....BXPC + 0020: 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0030: 00 10 00 00 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0040: 00 10 01 01 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0050: 00 10 02 02 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0060: 00 10 03 03 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0070: 01 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // .(.............. + 0080: 00 00 0A 00 00 00 00 00 00 00 00 00 01 00 00 00 // ................ + 0090: 00 00 00 00 00 00 00 00 01 28 00 00 00 00 00 00 // .........(...... + 00A0: 00 00 10 00 00 00 00 00 00 00 F0 01 00 00 00 00 // ................ + 00B0: 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00C0: 01 28 01 00 00 00 00 00 00 00 00 02 00 00 00 00 // .(.............. + 00D0: 00 00 00 02 00 00 00 00 00 00 00 00 01 00 00 00 // ................ + 00E0: 00 00 00 00 00 00 00 00 01 28 02 00 00 00 00 00 // .........(...... + 00F0: 00 00 00 04 00 00 00 00 00 00 00 02 00 00 00 00 // ................ + 0100: 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0110: 01 28 03 00 00 00 00 00 00 00 00 06 00 00 00 00 // .(.............. + 0120: 00 00 00 02 00 00 00 00 00 00 00 00 01 00 00 00 // ................ + 0130: 00 00 00 00 00 00 00 00 01 28 02 00 00 00 00 00 // .........(...... + 0140: 00 00 00 08 01 00 00 00 00 00 00 08 00 00 00 00 // ................ + 0150: 00 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0160: 01 28 03 00 00 00 00 00 00 00 00 00 01 00 00 00 // .(.............. + 0170: 00 00 00 F8 00 00 00 00 00 00 00 00 03 00 00 00 // ................ + 0180: 00 00 00 00 00 00 00 00 // ........ diff --git a/tests/data/acpi/pc/SRAT.dsl b/tests/data/acpi/pc/SRAT.dsl new file mode 100644 index 0000000000..77bbfebc81 --- /dev/null +++ b/tests/data/acpi/pc/SRAT.dsl @@ -0,0 +1,108 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/SRAT.numamem, Mon Sep 28 17:24:38 2020 + * + * ACPI Data Table [SRAT] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "SRAT" [System Resource Affinity Table] +[004h 0004 4] Table Length : 000000E0 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : F5 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCSRAT" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Table Revision : 00000001 +[028h 0040 8] Reserved : 0000000000000000 + +[030h 0048 1] Subtable Type : 00 [Processor Local APIC/SAPIC Affinity] +[031h 0049 1] Length : 10 + +[032h 0050 1] Proximity Domain Low(8) : 00 +[033h 0051 1] Apic ID : 00 +[034h 0052 4] Flags (decoded below) : 00000001 + Enabled : 1 +[038h 0056 1] Local Sapic EID : 00 +[039h 0057 3] Proximity Domain High(24) : 000000 +[03Ch 0060 4] Clock Domain : 00000000 + +[040h 0064 1] Subtable Type : 01 [Memory Affinity] +[041h 0065 1] Length : 28 + +[042h 0066 4] Proximity Domain : 00000001 +[046h 0070 2] Reserved1 : 0000 +[048h 0072 8] Base Address : 0000000000000000 +[050h 0080 8] Address Length : 00000000000A0000 +[058h 0088 4] Reserved2 : 00000000 +[05Ch 0092 4] Flags (decoded below) : 00000001 + Enabled : 1 + Hot Pluggable : 0 + Non-Volatile : 0 +[060h 0096 8] Reserved3 : 0000000000000000 + +[068h 0104 1] Subtable Type : 01 [Memory Affinity] +[069h 0105 1] Length : 28 + +[06Ah 0106 4] Proximity Domain : 00000001 +[06Eh 0110 2] Reserved1 : 0000 +[070h 0112 8] Base Address : 0000000000100000 +[078h 0120 8] Address Length : 0000000007F00000 +[080h 0128 4] Reserved2 : 00000000 +[084h 0132 4] Flags (decoded below) : 00000001 + Enabled : 1 + Hot Pluggable : 0 + Non-Volatile : 0 +[088h 0136 8] Reserved3 : 0000000000000000 + +[090h 0144 1] Subtable Type : 01 [Memory Affinity] +[091h 0145 1] Length : 28 + +[092h 0146 4] Proximity Domain : 00000000 +[096h 0150 2] Reserved1 : 0000 +[098h 0152 8] Base Address : 0000000000000000 +[0A0h 0160 8] Address Length : 0000000000000000 +[0A8h 0168 4] Reserved2 : 00000000 +[0ACh 0172 4] Flags (decoded below) : 00000000 + Enabled : 0 + Hot Pluggable : 0 + Non-Volatile : 0 +[0B0h 0176 8] Reserved3 : 0000000000000000 + +[0B8h 0184 1] Subtable Type : 01 [Memory Affinity] +[0B9h 0185 1] Length : 28 + +[0BAh 0186 4] Proximity Domain : 00000000 +[0BEh 0190 2] Reserved1 : 0000 +[0C0h 0192 8] Base Address : 0000000000000000 +[0C8h 0200 8] Address Length : 0000000000000000 +[0D0h 0208 4] Reserved2 : 00000000 +[0D4h 0212 4] Flags (decoded below) : 00000000 + Enabled : 0 + Hot Pluggable : 0 + Non-Volatile : 0 +[0D8h 0216 8] Reserved3 : 0000000000000000 + +Raw Table Data: Length 224 (0xE0) + + 0000: 53 52 41 54 E0 00 00 00 01 F5 42 4F 43 48 53 20 // SRAT......BOCHS + 0010: 42 58 50 43 53 52 41 54 01 00 00 00 42 58 50 43 // BXPCSRAT....BXPC + 0020: 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0030: 00 10 00 00 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0040: 01 28 01 00 00 00 00 00 00 00 00 00 00 00 00 00 // .(.............. + 0050: 00 00 0A 00 00 00 00 00 00 00 00 00 01 00 00 00 // ................ + 0060: 00 00 00 00 00 00 00 00 01 28 01 00 00 00 00 00 // .........(...... + 0070: 00 00 10 00 00 00 00 00 00 00 F0 07 00 00 00 00 // ................ + 0080: 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0090: 01 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // .(.............. + 00A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00B0: 00 00 00 00 00 00 00 00 01 28 00 00 00 00 00 00 // .........(...... + 00C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ diff --git a/tests/data/acpi/pc/SRAT.memhp.dsl b/tests/data/acpi/pc/SRAT.memhp.dsl new file mode 100644 index 0000000000..803f9c8f1a --- /dev/null +++ b/tests/data/acpi/pc/SRAT.memhp.dsl @@ -0,0 +1,125 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/SRAT.memhp, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [SRAT] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "SRAT" [System Resource Affinity Table] +[004h 0004 4] Table Length : 00000108 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : A2 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCSRAT" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Table Revision : 00000001 +[028h 0040 8] Reserved : 0000000000000000 + +[030h 0048 1] Subtable Type : 00 [Processor Local APIC/SAPIC Affinity] +[031h 0049 1] Length : 10 + +[032h 0050 1] Proximity Domain Low(8) : 00 +[033h 0051 1] Apic ID : 00 +[034h 0052 4] Flags (decoded below) : 00000001 + Enabled : 1 +[038h 0056 1] Local Sapic EID : 00 +[039h 0057 3] Proximity Domain High(24) : 000000 +[03Ch 0060 4] Clock Domain : 00000000 + +[040h 0064 1] Subtable Type : 01 [Memory Affinity] +[041h 0065 1] Length : 28 + +[042h 0066 4] Proximity Domain : 00000000 +[046h 0070 2] Reserved1 : 0000 +[048h 0072 8] Base Address : 0000000000000000 +[050h 0080 8] Address Length : 00000000000A0000 +[058h 0088 4] Reserved2 : 00000000 +[05Ch 0092 4] Flags (decoded below) : 00000001 + Enabled : 1 + Hot Pluggable : 0 + Non-Volatile : 0 +[060h 0096 8] Reserved3 : 0000000000000000 + +[068h 0104 1] Subtable Type : 01 [Memory Affinity] +[069h 0105 1] Length : 28 + +[06Ah 0106 4] Proximity Domain : 00000000 +[06Eh 0110 2] Reserved1 : 0000 +[070h 0112 8] Base Address : 0000000000100000 +[078h 0120 8] Address Length : 0000000003F00000 +[080h 0128 4] Reserved2 : 00000000 +[084h 0132 4] Flags (decoded below) : 00000001 + Enabled : 1 + Hot Pluggable : 0 + Non-Volatile : 0 +[088h 0136 8] Reserved3 : 0000000000000000 + +[090h 0144 1] Subtable Type : 01 [Memory Affinity] +[091h 0145 1] Length : 28 + +[092h 0146 4] Proximity Domain : 00000001 +[096h 0150 2] Reserved1 : 0000 +[098h 0152 8] Base Address : 0000000004000000 +[0A0h 0160 8] Address Length : 0000000004000000 +[0A8h 0168 4] Reserved2 : 00000000 +[0ACh 0172 4] Flags (decoded below) : 00000001 + Enabled : 1 + Hot Pluggable : 0 + Non-Volatile : 0 +[0B0h 0176 8] Reserved3 : 0000000000000000 + +[0B8h 0184 1] Subtable Type : 01 [Memory Affinity] +[0B9h 0185 1] Length : 28 + +[0BAh 0186 4] Proximity Domain : 00000000 +[0BEh 0190 2] Reserved1 : 0000 +[0C0h 0192 8] Base Address : 0000000000000000 +[0C8h 0200 8] Address Length : 0000000000000000 +[0D0h 0208 4] Reserved2 : 00000000 +[0D4h 0212 4] Flags (decoded below) : 00000000 + Enabled : 0 + Hot Pluggable : 0 + Non-Volatile : 0 +[0D8h 0216 8] Reserved3 : 0000000000000000 + +[0E0h 0224 1] Subtable Type : 01 [Memory Affinity] +[0E1h 0225 1] Length : 28 + +[0E2h 0226 4] Proximity Domain : 00000001 +[0E6h 0230 2] Reserved1 : 0000 +[0E8h 0232 8] Base Address : 0000000100000000 +[0F0h 0240 8] Address Length : 00000000F8000000 +[0F8h 0248 4] Reserved2 : 00000000 +[0FCh 0252 4] Flags (decoded below) : 00000003 + Enabled : 1 + Hot Pluggable : 1 + Non-Volatile : 0 +[100h 0256 8] Reserved3 : 0000000000000000 + +Raw Table Data: Length 264 (0x108) + + 0000: 53 52 41 54 08 01 00 00 01 A2 42 4F 43 48 53 20 // SRAT......BOCHS + 0010: 42 58 50 43 53 52 41 54 01 00 00 00 42 58 50 43 // BXPCSRAT....BXPC + 0020: 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0030: 00 10 00 00 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0040: 01 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // .(.............. + 0050: 00 00 0A 00 00 00 00 00 00 00 00 00 01 00 00 00 // ................ + 0060: 00 00 00 00 00 00 00 00 01 28 00 00 00 00 00 00 // .........(...... + 0070: 00 00 10 00 00 00 00 00 00 00 F0 03 00 00 00 00 // ................ + 0080: 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0090: 01 28 01 00 00 00 00 00 00 00 00 04 00 00 00 00 // .(.............. + 00A0: 00 00 00 04 00 00 00 00 00 00 00 00 01 00 00 00 // ................ + 00B0: 00 00 00 00 00 00 00 00 01 28 00 00 00 00 00 00 // .........(...... + 00C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00E0: 01 28 01 00 00 00 00 00 00 00 00 00 01 00 00 00 // .(.............. + 00F0: 00 00 00 F8 00 00 00 00 00 00 00 00 03 00 00 00 // ................ + 0100: 00 00 00 00 00 00 00 00 // ........ diff --git a/tests/data/acpi/pc/SRAT.numamem.dsl b/tests/data/acpi/pc/SRAT.numamem.dsl new file mode 100644 index 0000000000..74f4382dd1 --- /dev/null +++ b/tests/data/acpi/pc/SRAT.numamem.dsl @@ -0,0 +1,108 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/SRAT.numamem, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [SRAT] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "SRAT" [System Resource Affinity Table] +[004h 0004 4] Table Length : 000000E0 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : F5 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCSRAT" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Table Revision : 00000001 +[028h 0040 8] Reserved : 0000000000000000 + +[030h 0048 1] Subtable Type : 00 [Processor Local APIC/SAPIC Affinity] +[031h 0049 1] Length : 10 + +[032h 0050 1] Proximity Domain Low(8) : 00 +[033h 0051 1] Apic ID : 00 +[034h 0052 4] Flags (decoded below) : 00000001 + Enabled : 1 +[038h 0056 1] Local Sapic EID : 00 +[039h 0057 3] Proximity Domain High(24) : 000000 +[03Ch 0060 4] Clock Domain : 00000000 + +[040h 0064 1] Subtable Type : 01 [Memory Affinity] +[041h 0065 1] Length : 28 + +[042h 0066 4] Proximity Domain : 00000001 +[046h 0070 2] Reserved1 : 0000 +[048h 0072 8] Base Address : 0000000000000000 +[050h 0080 8] Address Length : 00000000000A0000 +[058h 0088 4] Reserved2 : 00000000 +[05Ch 0092 4] Flags (decoded below) : 00000001 + Enabled : 1 + Hot Pluggable : 0 + Non-Volatile : 0 +[060h 0096 8] Reserved3 : 0000000000000000 + +[068h 0104 1] Subtable Type : 01 [Memory Affinity] +[069h 0105 1] Length : 28 + +[06Ah 0106 4] Proximity Domain : 00000001 +[06Eh 0110 2] Reserved1 : 0000 +[070h 0112 8] Base Address : 0000000000100000 +[078h 0120 8] Address Length : 0000000007F00000 +[080h 0128 4] Reserved2 : 00000000 +[084h 0132 4] Flags (decoded below) : 00000001 + Enabled : 1 + Hot Pluggable : 0 + Non-Volatile : 0 +[088h 0136 8] Reserved3 : 0000000000000000 + +[090h 0144 1] Subtable Type : 01 [Memory Affinity] +[091h 0145 1] Length : 28 + +[092h 0146 4] Proximity Domain : 00000000 +[096h 0150 2] Reserved1 : 0000 +[098h 0152 8] Base Address : 0000000000000000 +[0A0h 0160 8] Address Length : 0000000000000000 +[0A8h 0168 4] Reserved2 : 00000000 +[0ACh 0172 4] Flags (decoded below) : 00000000 + Enabled : 0 + Hot Pluggable : 0 + Non-Volatile : 0 +[0B0h 0176 8] Reserved3 : 0000000000000000 + +[0B8h 0184 1] Subtable Type : 01 [Memory Affinity] +[0B9h 0185 1] Length : 28 + +[0BAh 0186 4] Proximity Domain : 00000000 +[0BEh 0190 2] Reserved1 : 0000 +[0C0h 0192 8] Base Address : 0000000000000000 +[0C8h 0200 8] Address Length : 0000000000000000 +[0D0h 0208 4] Reserved2 : 00000000 +[0D4h 0212 4] Flags (decoded below) : 00000000 + Enabled : 0 + Hot Pluggable : 0 + Non-Volatile : 0 +[0D8h 0216 8] Reserved3 : 0000000000000000 + +Raw Table Data: Length 224 (0xE0) + + 0000: 53 52 41 54 E0 00 00 00 01 F5 42 4F 43 48 53 20 // SRAT......BOCHS + 0010: 42 58 50 43 53 52 41 54 01 00 00 00 42 58 50 43 // BXPCSRAT....BXPC + 0020: 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0030: 00 10 00 00 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0040: 01 28 01 00 00 00 00 00 00 00 00 00 00 00 00 00 // .(.............. + 0050: 00 00 0A 00 00 00 00 00 00 00 00 00 01 00 00 00 // ................ + 0060: 00 00 00 00 00 00 00 00 01 28 01 00 00 00 00 00 // .........(...... + 0070: 00 00 10 00 00 00 00 00 00 00 F0 07 00 00 00 00 // ................ + 0080: 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0090: 01 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // .(.............. + 00A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00B0: 00 00 00 00 00 00 00 00 01 28 00 00 00 00 00 00 // .........(...... + 00C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ diff --git a/tests/data/acpi/pc/SSDT.dsl b/tests/data/acpi/pc/SSDT.dsl new file mode 100644 index 0000000000..abd64f6133 --- /dev/null +++ b/tests/data/acpi/pc/SSDT.dsl @@ -0,0 +1,205 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembling to symbolic ASL+ operators + * + * Disassembly of tests/data/acpi/pc/SSDT.dimmpxm, Mon Sep 28 17:24:38 2020 + * + * Original Table Header: + * Signature "SSDT" + * Length 0x000002DE (734) + * Revision 0x01 + * Checksum 0x56 + * OEM ID "BOCHS " + * OEM Table ID "NVDIMM" + * OEM Revision 0x00000001 (1) + * Compiler ID "BXPC" + * Compiler Version 0x00000001 (1) + */ +DefinitionBlock ("", "SSDT", 1, "BOCHS ", "NVDIMM", 0x00000001) +{ + Scope (\_SB) + { + Device (NVDR) + { + Name (_HID, "ACPI0012" /* NVDIMM Root Device */) // _HID: Hardware ID + Method (NCAL, 5, Serialized) + { + Local6 = MEMA /* \MEMA */ + OperationRegion (NPIO, SystemIO, 0x0A18, 0x04) + OperationRegion (NRAM, SystemMemory, Local6, 0x1000) + Field (NPIO, DWordAcc, NoLock, Preserve) + { + NTFI, 32 + } + + Field (NRAM, DWordAcc, NoLock, Preserve) + { + HDLE, 32, + REVS, 32, + FUNC, 32, + FARG, 32672 + } + + Field (NRAM, DWordAcc, NoLock, Preserve) + { + RLEN, 32, + ODAT, 32736 + } + + If ((Arg4 == Zero)) + { + Local0 = ToUUID ("2f10e7a4-9e91-11e4-89d3-123b93f75cba") + } + ElseIf ((Arg4 == 0x00010000)) + { + Local0 = ToUUID ("648b9cf2-cda1-4312-8ad9-49c4af32bd62") + } + Else + { + Local0 = ToUUID ("4309ac30-0d11-11e4-9191-0800200c9a66") + } + + If (((Local6 == Zero) | (Arg0 != Local0))) + { + If ((Arg2 == Zero)) + { + Return (Buffer (One) + { + 0x00 // . + }) + } + + Return (Buffer (One) + { + 0x01 // . + }) + } + + HDLE = Arg4 + REVS = Arg1 + FUNC = Arg2 + If (((ObjectType (Arg3) == 0x04) & (SizeOf (Arg3) == One))) + { + Local2 = Arg3 [Zero] + Local3 = DerefOf (Local2) + FARG = Local3 + } + + NTFI = Local6 + Local1 = (RLEN - 0x04) + If ((Local1 < 0x08)) + { + Local2 = Zero + Name (TBUF, Buffer (One) + { + 0x00 // . + }) + Local7 = Buffer (Zero){} + While ((Local2 < Local1)) + { + TBUF [Zero] = DerefOf (ODAT [Local2]) + Concatenate (Local7, TBUF, Local7) + Local2++ + } + + Return (Local7) + } + + Local1 = (Local1 << 0x03) + CreateField (ODAT, Zero, Local1, OBUF) + Return (OBUF) /* \_SB_.NVDR.NCAL.OBUF */ + } + + Method (_DSM, 4, NotSerialized) // _DSM: Device-Specific Method + { + Return (NCAL (Arg0, Arg1, Arg2, Arg3, Zero)) + } + + Name (RSTA, Zero) + Method (RFIT, 1, Serialized) + { + Name (OFST, Zero) + OFST = Arg0 + Local0 = NCAL (ToUUID ("648b9cf2-cda1-4312-8ad9-49c4af32bd62"), One, One, Package (0x01) + { + OFST + }, 0x00010000) + CreateDWordField (Local0, Zero, STAU) + RSTA = STAU /* \_SB_.NVDR.RFIT.STAU */ + If ((Zero != STAU)) + { + Return (Buffer (Zero){}) + } + + Local1 = SizeOf (Local0) + Local1 -= 0x04 + If ((Local1 == Zero)) + { + Return (Buffer (Zero){}) + } + + CreateField (Local0, 0x20, (Local1 << 0x03), BUFF) + Return (BUFF) /* \_SB_.NVDR.RFIT.BUFF */ + } + + Method (_FIT, 0, Serialized) // _FIT: Firmware Interface Table + { + Local2 = Buffer (Zero){} + Local3 = Zero + While (One) + { + Local0 = RFIT (Local3) + Local1 = SizeOf (Local0) + If ((RSTA == 0x0100)) + { + Local2 = Buffer (Zero){} + Local3 = Zero + } + Else + { + If ((Local1 == Zero)) + { + Return (Local2) + } + + Local3 += Local1 + Concatenate (Local2, Local0, Local2) + } + } + } + + Device (NV00) + { + Name (_ADR, One) // _ADR: Address + Method (_DSM, 4, NotSerialized) // _DSM: Device-Specific Method + { + Return (NCAL (Arg0, Arg1, Arg2, Arg3, One)) + } + } + + Device (NV01) + { + Name (_ADR, 0x02) // _ADR: Address + Method (_DSM, 4, NotSerialized) // _DSM: Device-Specific Method + { + Return (NCAL (Arg0, Arg1, Arg2, Arg3, 0x02)) + } + } + + Device (NV02) + { + Name (_ADR, 0x03) // _ADR: Address + Method (_DSM, 4, NotSerialized) // _DSM: Device-Specific Method + { + Return (NCAL (Arg0, Arg1, Arg2, Arg3, 0x03)) + } + } + } + } + + Name (MEMA, 0x07FFE000) +} + diff --git a/tests/data/acpi/pc/WAET.acpihmat b/tests/data/acpi/pc/WAET.acpihmat new file mode 100644 index 0000000000000000000000000000000000000000..c2240f58dff6b2f765386b5a2e506fda4800be3e GIT binary patch literal 40 qcmWG{bPds9U|?YEaPoKd2v%^42yhN}bPZu-U|;~TK{OKs0|Nl8X$JuS literal 0 HcmV?d00001 diff --git a/tests/data/acpi/pc/WAET.acpihmat.dsl b/tests/data/acpi/pc/WAET.acpihmat.dsl new file mode 100644 index 0000000000..991c8773b8 --- /dev/null +++ b/tests/data/acpi/pc/WAET.acpihmat.dsl @@ -0,0 +1,31 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/WAET.acpihmat, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [WAET] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "WAET" [Windows ACPI Emulated Devices Table] +[004h 0004 4] Table Length : 00000028 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 88 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCWAET" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Flags (decoded below) : 00000002 + RTC needs no INT ack : 0 + PM timer, one read only : 1 + +Raw Table Data: Length 40 (0x28) + + 0000: 57 41 45 54 28 00 00 00 01 88 42 4F 43 48 53 20 // WAET(.....BOCHS + 0010: 42 58 50 43 57 41 45 54 01 00 00 00 42 58 50 43 // BXPCWAET....BXPC + 0020: 01 00 00 00 02 00 00 00 // ........ diff --git a/tests/data/acpi/pc/WAET.bridge b/tests/data/acpi/pc/WAET.bridge new file mode 100644 index 0000000000000000000000000000000000000000..c2240f58dff6b2f765386b5a2e506fda4800be3e GIT binary patch literal 40 qcmWG{bPds9U|?YEaPoKd2v%^42yhN}bPZu-U|;~TK{OKs0|Nl8X$JuS literal 0 HcmV?d00001 diff --git a/tests/data/acpi/pc/WAET.bridge.dsl b/tests/data/acpi/pc/WAET.bridge.dsl new file mode 100644 index 0000000000..f47dbb17a7 --- /dev/null +++ b/tests/data/acpi/pc/WAET.bridge.dsl @@ -0,0 +1,31 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/WAET.bridge, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [WAET] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "WAET" [Windows ACPI Emulated Devices Table] +[004h 0004 4] Table Length : 00000028 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 88 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCWAET" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Flags (decoded below) : 00000002 + RTC needs no INT ack : 0 + PM timer, one read only : 1 + +Raw Table Data: Length 40 (0x28) + + 0000: 57 41 45 54 28 00 00 00 01 88 42 4F 43 48 53 20 // WAET(.....BOCHS + 0010: 42 58 50 43 57 41 45 54 01 00 00 00 42 58 50 43 // BXPCWAET....BXPC + 0020: 01 00 00 00 02 00 00 00 // ........ diff --git a/tests/data/acpi/pc/WAET.cphp b/tests/data/acpi/pc/WAET.cphp new file mode 100644 index 0000000000000000000000000000000000000000..c2240f58dff6b2f765386b5a2e506fda4800be3e GIT binary patch literal 40 qcmWG{bPds9U|?YEaPoKd2v%^42yhN}bPZu-U|;~TK{OKs0|Nl8X$JuS literal 0 HcmV?d00001 diff --git a/tests/data/acpi/pc/WAET.cphp.dsl b/tests/data/acpi/pc/WAET.cphp.dsl new file mode 100644 index 0000000000..ff077a14eb --- /dev/null +++ b/tests/data/acpi/pc/WAET.cphp.dsl @@ -0,0 +1,31 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/WAET.cphp, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [WAET] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "WAET" [Windows ACPI Emulated Devices Table] +[004h 0004 4] Table Length : 00000028 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 88 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCWAET" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Flags (decoded below) : 00000002 + RTC needs no INT ack : 0 + PM timer, one read only : 1 + +Raw Table Data: Length 40 (0x28) + + 0000: 57 41 45 54 28 00 00 00 01 88 42 4F 43 48 53 20 // WAET(.....BOCHS + 0010: 42 58 50 43 57 41 45 54 01 00 00 00 42 58 50 43 // BXPCWAET....BXPC + 0020: 01 00 00 00 02 00 00 00 // ........ diff --git a/tests/data/acpi/pc/WAET.dimmpxm b/tests/data/acpi/pc/WAET.dimmpxm new file mode 100644 index 0000000000000000000000000000000000000000..c2240f58dff6b2f765386b5a2e506fda4800be3e GIT binary patch literal 40 qcmWG{bPds9U|?YEaPoKd2v%^42yhN}bPZu-U|;~TK{OKs0|Nl8X$JuS literal 0 HcmV?d00001 diff --git a/tests/data/acpi/pc/WAET.dimmpxm.dsl b/tests/data/acpi/pc/WAET.dimmpxm.dsl new file mode 100644 index 0000000000..b8192c8601 --- /dev/null +++ b/tests/data/acpi/pc/WAET.dimmpxm.dsl @@ -0,0 +1,31 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/WAET.dimmpxm, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [WAET] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "WAET" [Windows ACPI Emulated Devices Table] +[004h 0004 4] Table Length : 00000028 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 88 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCWAET" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Flags (decoded below) : 00000002 + RTC needs no INT ack : 0 + PM timer, one read only : 1 + +Raw Table Data: Length 40 (0x28) + + 0000: 57 41 45 54 28 00 00 00 01 88 42 4F 43 48 53 20 // WAET(.....BOCHS + 0010: 42 58 50 43 57 41 45 54 01 00 00 00 42 58 50 43 // BXPCWAET....BXPC + 0020: 01 00 00 00 02 00 00 00 // ........ diff --git a/tests/data/acpi/pc/WAET.dsl b/tests/data/acpi/pc/WAET.dsl new file mode 100644 index 0000000000..53b6c1dc42 --- /dev/null +++ b/tests/data/acpi/pc/WAET.dsl @@ -0,0 +1,31 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/WAET.roothp, Mon Sep 28 17:24:38 2020 + * + * ACPI Data Table [WAET] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "WAET" [Windows ACPI Emulated Devices Table] +[004h 0004 4] Table Length : 00000028 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 88 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCWAET" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Flags (decoded below) : 00000002 + RTC needs no INT ack : 0 + PM timer, one read only : 1 + +Raw Table Data: Length 40 (0x28) + + 0000: 57 41 45 54 28 00 00 00 01 88 42 4F 43 48 53 20 // WAET(.....BOCHS + 0010: 42 58 50 43 57 41 45 54 01 00 00 00 42 58 50 43 // BXPCWAET....BXPC + 0020: 01 00 00 00 02 00 00 00 // ........ diff --git a/tests/data/acpi/pc/WAET.hpbridge b/tests/data/acpi/pc/WAET.hpbridge new file mode 100644 index 0000000000000000000000000000000000000000..c2240f58dff6b2f765386b5a2e506fda4800be3e GIT binary patch literal 40 qcmWG{bPds9U|?YEaPoKd2v%^42yhN}bPZu-U|;~TK{OKs0|Nl8X$JuS literal 0 HcmV?d00001 diff --git a/tests/data/acpi/pc/WAET.ipmikcs b/tests/data/acpi/pc/WAET.ipmikcs new file mode 100644 index 0000000000000000000000000000000000000000..c2240f58dff6b2f765386b5a2e506fda4800be3e GIT binary patch literal 40 qcmWG{bPds9U|?YEaPoKd2v%^42yhN}bPZu-U|;~TK{OKs0|Nl8X$JuS literal 0 HcmV?d00001 diff --git a/tests/data/acpi/pc/WAET.ipmikcs.dsl b/tests/data/acpi/pc/WAET.ipmikcs.dsl new file mode 100644 index 0000000000..5144bada0f --- /dev/null +++ b/tests/data/acpi/pc/WAET.ipmikcs.dsl @@ -0,0 +1,31 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/WAET.ipmikcs, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [WAET] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "WAET" [Windows ACPI Emulated Devices Table] +[004h 0004 4] Table Length : 00000028 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 88 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCWAET" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Flags (decoded below) : 00000002 + RTC needs no INT ack : 0 + PM timer, one read only : 1 + +Raw Table Data: Length 40 (0x28) + + 0000: 57 41 45 54 28 00 00 00 01 88 42 4F 43 48 53 20 // WAET(.....BOCHS + 0010: 42 58 50 43 57 41 45 54 01 00 00 00 42 58 50 43 // BXPCWAET....BXPC + 0020: 01 00 00 00 02 00 00 00 // ........ diff --git a/tests/data/acpi/pc/WAET.memhp b/tests/data/acpi/pc/WAET.memhp new file mode 100644 index 0000000000000000000000000000000000000000..c2240f58dff6b2f765386b5a2e506fda4800be3e GIT binary patch literal 40 qcmWG{bPds9U|?YEaPoKd2v%^42yhN}bPZu-U|;~TK{OKs0|Nl8X$JuS literal 0 HcmV?d00001 diff --git a/tests/data/acpi/pc/WAET.memhp.dsl b/tests/data/acpi/pc/WAET.memhp.dsl new file mode 100644 index 0000000000..bfe3a036d7 --- /dev/null +++ b/tests/data/acpi/pc/WAET.memhp.dsl @@ -0,0 +1,31 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/WAET.memhp, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [WAET] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "WAET" [Windows ACPI Emulated Devices Table] +[004h 0004 4] Table Length : 00000028 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 88 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCWAET" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Flags (decoded below) : 00000002 + RTC needs no INT ack : 0 + PM timer, one read only : 1 + +Raw Table Data: Length 40 (0x28) + + 0000: 57 41 45 54 28 00 00 00 01 88 42 4F 43 48 53 20 // WAET(.....BOCHS + 0010: 42 58 50 43 57 41 45 54 01 00 00 00 42 58 50 43 // BXPCWAET....BXPC + 0020: 01 00 00 00 02 00 00 00 // ........ diff --git a/tests/data/acpi/pc/WAET.numamem b/tests/data/acpi/pc/WAET.numamem new file mode 100644 index 0000000000000000000000000000000000000000..c2240f58dff6b2f765386b5a2e506fda4800be3e GIT binary patch literal 40 qcmWG{bPds9U|?YEaPoKd2v%^42yhN}bPZu-U|;~TK{OKs0|Nl8X$JuS literal 0 HcmV?d00001 diff --git a/tests/data/acpi/pc/WAET.numamem.dsl b/tests/data/acpi/pc/WAET.numamem.dsl new file mode 100644 index 0000000000..e4c6cf4bf8 --- /dev/null +++ b/tests/data/acpi/pc/WAET.numamem.dsl @@ -0,0 +1,31 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/pc/WAET.numamem, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [WAET] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "WAET" [Windows ACPI Emulated Devices Table] +[004h 0004 4] Table Length : 00000028 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 88 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCWAET" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Flags (decoded below) : 00000002 + RTC needs no INT ack : 0 + PM timer, one read only : 1 + +Raw Table Data: Length 40 (0x28) + + 0000: 57 41 45 54 28 00 00 00 01 88 42 4F 43 48 53 20 // WAET(.....BOCHS + 0010: 42 58 50 43 57 41 45 54 01 00 00 00 42 58 50 43 // BXPCWAET....BXPC + 0020: 01 00 00 00 02 00 00 00 // ........ diff --git a/tests/data/acpi/pc/WAET.roothp b/tests/data/acpi/pc/WAET.roothp new file mode 100644 index 0000000000000000000000000000000000000000..c2240f58dff6b2f765386b5a2e506fda4800be3e GIT binary patch literal 40 qcmWG{bPds9U|?YEaPoKd2v%^42yhN}bPZu-U|;~TK{OKs0|Nl8X$JuS literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/APIC.acpihmat.dsl b/tests/data/acpi/q35/APIC.acpihmat.dsl new file mode 100644 index 0000000000..5fe9fb4669 --- /dev/null +++ b/tests/data/acpi/q35/APIC.acpihmat.dsl @@ -0,0 +1,112 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/APIC.acpihmat, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [APIC] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "APIC" [Multiple APIC Description Table (MADT)] +[004h 0004 4] Table Length : 00000080 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : DA +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCAPIC" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Local Apic Address : FEE00000 +[028h 0040 4] Flags (decoded below) : 00000001 + PC-AT Compatibility : 1 + +[02Ch 0044 1] Subtable Type : 00 [Processor Local APIC] +[02Dh 0045 1] Length : 08 +[02Eh 0046 1] Processor ID : 00 +[02Fh 0047 1] Local Apic ID : 00 +[030h 0048 4] Flags (decoded below) : 00000001 + Processor Enabled : 1 + Runtime Online Capable : 0 + +[034h 0052 1] Subtable Type : 00 [Processor Local APIC] +[035h 0053 1] Length : 08 +[036h 0054 1] Processor ID : 01 +[037h 0055 1] Local Apic ID : 01 +[038h 0056 4] Flags (decoded below) : 00000001 + Processor Enabled : 1 + Runtime Online Capable : 0 + +[03Ch 0060 1] Subtable Type : 01 [I/O APIC] +[03Dh 0061 1] Length : 0C +[03Eh 0062 1] I/O Apic ID : 00 +[03Fh 0063 1] Reserved : 00 +[040h 0064 4] Address : FEC00000 +[044h 0068 4] Interrupt : 00000000 + +[048h 0072 1] Subtable Type : 02 [Interrupt Source Override] +[049h 0073 1] Length : 0A +[04Ah 0074 1] Bus : 00 +[04Bh 0075 1] Source : 00 +[04Ch 0076 4] Interrupt : 00000002 +[050h 0080 2] Flags (decoded below) : 0000 + Polarity : 0 + Trigger Mode : 0 + +[052h 0082 1] Subtable Type : 02 [Interrupt Source Override] +[053h 0083 1] Length : 0A +[054h 0084 1] Bus : 00 +[055h 0085 1] Source : 05 +[056h 0086 4] Interrupt : 00000005 +[05Ah 0090 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[05Ch 0092 1] Subtable Type : 02 [Interrupt Source Override] +[05Dh 0093 1] Length : 0A +[05Eh 0094 1] Bus : 00 +[05Fh 0095 1] Source : 09 +[060h 0096 4] Interrupt : 00000009 +[064h 0100 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[066h 0102 1] Subtable Type : 02 [Interrupt Source Override] +[067h 0103 1] Length : 0A +[068h 0104 1] Bus : 00 +[069h 0105 1] Source : 0A +[06Ah 0106 4] Interrupt : 0000000A +[06Eh 0110 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[070h 0112 1] Subtable Type : 02 [Interrupt Source Override] +[071h 0113 1] Length : 0A +[072h 0114 1] Bus : 00 +[073h 0115 1] Source : 0B +[074h 0116 4] Interrupt : 0000000B +[078h 0120 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[07Ah 0122 1] Subtable Type : 04 [Local APIC NMI] +[07Bh 0123 1] Length : 06 +[07Ch 0124 1] Processor ID : FF +[07Dh 0125 2] Flags (decoded below) : 0000 + Polarity : 0 + Trigger Mode : 0 +[07Fh 0127 1] Interrupt Input LINT : 01 + +Raw Table Data: Length 128 (0x80) + + 0000: 41 50 49 43 80 00 00 00 01 DA 42 4F 43 48 53 20 // APIC......BOCHS + 0010: 42 58 50 43 41 50 49 43 01 00 00 00 42 58 50 43 // BXPCAPIC....BXPC + 0020: 01 00 00 00 00 00 E0 FE 01 00 00 00 00 08 00 00 // ................ + 0030: 01 00 00 00 00 08 01 01 01 00 00 00 01 0C 00 00 // ................ + 0040: 00 00 C0 FE 00 00 00 00 02 0A 00 00 02 00 00 00 // ................ + 0050: 00 00 02 0A 00 05 05 00 00 00 0D 00 02 0A 00 09 // ................ + 0060: 09 00 00 00 0D 00 02 0A 00 0A 0A 00 00 00 0D 00 // ................ + 0070: 02 0A 00 0B 0B 00 00 00 0D 00 04 06 FF 00 00 01 // ................ diff --git a/tests/data/acpi/q35/APIC.bridge b/tests/data/acpi/q35/APIC.bridge new file mode 100644 index 0000000000000000000000000000000000000000..84509e0ae4cabeb5ead3e42a4edfa50abddbc17d GIT binary patch literal 120 zcmXxa!3}^Q5CzeJh!M~pYz4T;NfIxXVtJNg1Ga!>Nx1C1{A?&WU4VMyp0;C+XGx*t lqyVuLp4vKrRL!#8RjziR+mCh_11utIyPWItzG)agP(M8=4FLcE literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/APIC.bridge.dsl b/tests/data/acpi/q35/APIC.bridge.dsl new file mode 100644 index 0000000000..2489067401 --- /dev/null +++ b/tests/data/acpi/q35/APIC.bridge.dsl @@ -0,0 +1,104 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/APIC.bridge, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [APIC] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "APIC" [Multiple APIC Description Table (MADT)] +[004h 0004 4] Table Length : 00000078 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : ED +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCAPIC" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Local Apic Address : FEE00000 +[028h 0040 4] Flags (decoded below) : 00000001 + PC-AT Compatibility : 1 + +[02Ch 0044 1] Subtable Type : 00 [Processor Local APIC] +[02Dh 0045 1] Length : 08 +[02Eh 0046 1] Processor ID : 00 +[02Fh 0047 1] Local Apic ID : 00 +[030h 0048 4] Flags (decoded below) : 00000001 + Processor Enabled : 1 + Runtime Online Capable : 0 + +[034h 0052 1] Subtable Type : 01 [I/O APIC] +[035h 0053 1] Length : 0C +[036h 0054 1] I/O Apic ID : 00 +[037h 0055 1] Reserved : 00 +[038h 0056 4] Address : FEC00000 +[03Ch 0060 4] Interrupt : 00000000 + +[040h 0064 1] Subtable Type : 02 [Interrupt Source Override] +[041h 0065 1] Length : 0A +[042h 0066 1] Bus : 00 +[043h 0067 1] Source : 00 +[044h 0068 4] Interrupt : 00000002 +[048h 0072 2] Flags (decoded below) : 0000 + Polarity : 0 + Trigger Mode : 0 + +[04Ah 0074 1] Subtable Type : 02 [Interrupt Source Override] +[04Bh 0075 1] Length : 0A +[04Ch 0076 1] Bus : 00 +[04Dh 0077 1] Source : 05 +[04Eh 0078 4] Interrupt : 00000005 +[052h 0082 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[054h 0084 1] Subtable Type : 02 [Interrupt Source Override] +[055h 0085 1] Length : 0A +[056h 0086 1] Bus : 00 +[057h 0087 1] Source : 09 +[058h 0088 4] Interrupt : 00000009 +[05Ch 0092 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[05Eh 0094 1] Subtable Type : 02 [Interrupt Source Override] +[05Fh 0095 1] Length : 0A +[060h 0096 1] Bus : 00 +[061h 0097 1] Source : 0A +[062h 0098 4] Interrupt : 0000000A +[066h 0102 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[068h 0104 1] Subtable Type : 02 [Interrupt Source Override] +[069h 0105 1] Length : 0A +[06Ah 0106 1] Bus : 00 +[06Bh 0107 1] Source : 0B +[06Ch 0108 4] Interrupt : 0000000B +[070h 0112 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[072h 0114 1] Subtable Type : 04 [Local APIC NMI] +[073h 0115 1] Length : 06 +[074h 0116 1] Processor ID : FF +[075h 0117 2] Flags (decoded below) : 0000 + Polarity : 0 + Trigger Mode : 0 +[077h 0119 1] Interrupt Input LINT : 01 + +Raw Table Data: Length 120 (0x78) + + 0000: 41 50 49 43 78 00 00 00 01 ED 42 4F 43 48 53 20 // APICx.....BOCHS + 0010: 42 58 50 43 41 50 49 43 01 00 00 00 42 58 50 43 // BXPCAPIC....BXPC + 0020: 01 00 00 00 00 00 E0 FE 01 00 00 00 00 08 00 00 // ................ + 0030: 01 00 00 00 01 0C 00 00 00 00 C0 FE 00 00 00 00 // ................ + 0040: 02 0A 00 00 02 00 00 00 00 00 02 0A 00 05 05 00 // ................ + 0050: 00 00 0D 00 02 0A 00 09 09 00 00 00 0D 00 02 0A // ................ + 0060: 00 0A 0A 00 00 00 0D 00 02 0A 00 0B 0B 00 00 00 // ................ + 0070: 0D 00 04 06 FF 00 00 01 // ........ diff --git a/tests/data/acpi/q35/APIC.cphp.dsl b/tests/data/acpi/q35/APIC.cphp.dsl new file mode 100644 index 0000000000..be8daf5f80 --- /dev/null +++ b/tests/data/acpi/q35/APIC.cphp.dsl @@ -0,0 +1,146 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/APIC.cphp, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [APIC] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "APIC" [Multiple APIC Description Table (MADT)] +[004h 0004 4] Table Length : 000000A0 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 7B +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCAPIC" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Local Apic Address : FEE00000 +[028h 0040 4] Flags (decoded below) : 00000001 + PC-AT Compatibility : 1 + +[02Ch 0044 1] Subtable Type : 00 [Processor Local APIC] +[02Dh 0045 1] Length : 08 +[02Eh 0046 1] Processor ID : 00 +[02Fh 0047 1] Local Apic ID : 00 +[030h 0048 4] Flags (decoded below) : 00000001 + Processor Enabled : 1 + Runtime Online Capable : 0 + +[034h 0052 1] Subtable Type : 00 [Processor Local APIC] +[035h 0053 1] Length : 08 +[036h 0054 1] Processor ID : 01 +[037h 0055 1] Local Apic ID : 01 +[038h 0056 4] Flags (decoded below) : 00000001 + Processor Enabled : 1 + Runtime Online Capable : 0 + +[03Ch 0060 1] Subtable Type : 00 [Processor Local APIC] +[03Dh 0061 1] Length : 08 +[03Eh 0062 1] Processor ID : 02 +[03Fh 0063 1] Local Apic ID : 02 +[040h 0064 4] Flags (decoded below) : 00000000 + Processor Enabled : 0 + Runtime Online Capable : 0 + +[044h 0068 1] Subtable Type : 00 [Processor Local APIC] +[045h 0069 1] Length : 08 +[046h 0070 1] Processor ID : 03 +[047h 0071 1] Local Apic ID : 04 +[048h 0072 4] Flags (decoded below) : 00000000 + Processor Enabled : 0 + Runtime Online Capable : 0 + +[04Ch 0076 1] Subtable Type : 00 [Processor Local APIC] +[04Dh 0077 1] Length : 08 +[04Eh 0078 1] Processor ID : 04 +[04Fh 0079 1] Local Apic ID : 05 +[050h 0080 4] Flags (decoded below) : 00000000 + Processor Enabled : 0 + Runtime Online Capable : 0 + +[054h 0084 1] Subtable Type : 00 [Processor Local APIC] +[055h 0085 1] Length : 08 +[056h 0086 1] Processor ID : 05 +[057h 0087 1] Local Apic ID : 06 +[058h 0088 4] Flags (decoded below) : 00000000 + Processor Enabled : 0 + Runtime Online Capable : 0 + +[05Ch 0092 1] Subtable Type : 01 [I/O APIC] +[05Dh 0093 1] Length : 0C +[05Eh 0094 1] I/O Apic ID : 00 +[05Fh 0095 1] Reserved : 00 +[060h 0096 4] Address : FEC00000 +[064h 0100 4] Interrupt : 00000000 + +[068h 0104 1] Subtable Type : 02 [Interrupt Source Override] +[069h 0105 1] Length : 0A +[06Ah 0106 1] Bus : 00 +[06Bh 0107 1] Source : 00 +[06Ch 0108 4] Interrupt : 00000002 +[070h 0112 2] Flags (decoded below) : 0000 + Polarity : 0 + Trigger Mode : 0 + +[072h 0114 1] Subtable Type : 02 [Interrupt Source Override] +[073h 0115 1] Length : 0A +[074h 0116 1] Bus : 00 +[075h 0117 1] Source : 05 +[076h 0118 4] Interrupt : 00000005 +[07Ah 0122 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[07Ch 0124 1] Subtable Type : 02 [Interrupt Source Override] +[07Dh 0125 1] Length : 0A +[07Eh 0126 1] Bus : 00 +[07Fh 0127 1] Source : 09 +[080h 0128 4] Interrupt : 00000009 +[084h 0132 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[086h 0134 1] Subtable Type : 02 [Interrupt Source Override] +[087h 0135 1] Length : 0A +[088h 0136 1] Bus : 00 +[089h 0137 1] Source : 0A +[08Ah 0138 4] Interrupt : 0000000A +[08Eh 0142 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[090h 0144 1] Subtable Type : 02 [Interrupt Source Override] +[091h 0145 1] Length : 0A +[092h 0146 1] Bus : 00 +[093h 0147 1] Source : 0B +[094h 0148 4] Interrupt : 0000000B +[098h 0152 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[09Ah 0154 1] Subtable Type : 04 [Local APIC NMI] +[09Bh 0155 1] Length : 06 +[09Ch 0156 1] Processor ID : FF +[09Dh 0157 2] Flags (decoded below) : 0000 + Polarity : 0 + Trigger Mode : 0 +[09Fh 0159 1] Interrupt Input LINT : 01 + +Raw Table Data: Length 160 (0xA0) + + 0000: 41 50 49 43 A0 00 00 00 01 7B 42 4F 43 48 53 20 // APIC.....{BOCHS + 0010: 42 58 50 43 41 50 49 43 01 00 00 00 42 58 50 43 // BXPCAPIC....BXPC + 0020: 01 00 00 00 00 00 E0 FE 01 00 00 00 00 08 00 00 // ................ + 0030: 01 00 00 00 00 08 01 01 01 00 00 00 00 08 02 02 // ................ + 0040: 00 00 00 00 00 08 03 04 00 00 00 00 00 08 04 05 // ................ + 0050: 00 00 00 00 00 08 05 06 00 00 00 00 01 0C 00 00 // ................ + 0060: 00 00 C0 FE 00 00 00 00 02 0A 00 00 02 00 00 00 // ................ + 0070: 00 00 02 0A 00 05 05 00 00 00 0D 00 02 0A 00 09 // ................ + 0080: 09 00 00 00 0D 00 02 0A 00 0A 0A 00 00 00 0D 00 // ................ + 0090: 02 0A 00 0B 0B 00 00 00 0D 00 04 06 FF 00 00 01 // ................ diff --git a/tests/data/acpi/q35/APIC.dimmpxm.dsl b/tests/data/acpi/q35/APIC.dimmpxm.dsl new file mode 100644 index 0000000000..798ab91bed --- /dev/null +++ b/tests/data/acpi/q35/APIC.dimmpxm.dsl @@ -0,0 +1,129 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/APIC.dimmpxm, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [APIC] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "APIC" [Multiple APIC Description Table (MADT)] +[004h 0004 4] Table Length : 00000090 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : AE +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCAPIC" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Local Apic Address : FEE00000 +[028h 0040 4] Flags (decoded below) : 00000001 + PC-AT Compatibility : 1 + +[02Ch 0044 1] Subtable Type : 00 [Processor Local APIC] +[02Dh 0045 1] Length : 08 +[02Eh 0046 1] Processor ID : 00 +[02Fh 0047 1] Local Apic ID : 00 +[030h 0048 4] Flags (decoded below) : 00000001 + Processor Enabled : 1 + Runtime Online Capable : 0 + +[034h 0052 1] Subtable Type : 00 [Processor Local APIC] +[035h 0053 1] Length : 08 +[036h 0054 1] Processor ID : 01 +[037h 0055 1] Local Apic ID : 01 +[038h 0056 4] Flags (decoded below) : 00000001 + Processor Enabled : 1 + Runtime Online Capable : 0 + +[03Ch 0060 1] Subtable Type : 00 [Processor Local APIC] +[03Dh 0061 1] Length : 08 +[03Eh 0062 1] Processor ID : 02 +[03Fh 0063 1] Local Apic ID : 02 +[040h 0064 4] Flags (decoded below) : 00000001 + Processor Enabled : 1 + Runtime Online Capable : 0 + +[044h 0068 1] Subtable Type : 00 [Processor Local APIC] +[045h 0069 1] Length : 08 +[046h 0070 1] Processor ID : 03 +[047h 0071 1] Local Apic ID : 03 +[048h 0072 4] Flags (decoded below) : 00000001 + Processor Enabled : 1 + Runtime Online Capable : 0 + +[04Ch 0076 1] Subtable Type : 01 [I/O APIC] +[04Dh 0077 1] Length : 0C +[04Eh 0078 1] I/O Apic ID : 00 +[04Fh 0079 1] Reserved : 00 +[050h 0080 4] Address : FEC00000 +[054h 0084 4] Interrupt : 00000000 + +[058h 0088 1] Subtable Type : 02 [Interrupt Source Override] +[059h 0089 1] Length : 0A +[05Ah 0090 1] Bus : 00 +[05Bh 0091 1] Source : 00 +[05Ch 0092 4] Interrupt : 00000002 +[060h 0096 2] Flags (decoded below) : 0000 + Polarity : 0 + Trigger Mode : 0 + +[062h 0098 1] Subtable Type : 02 [Interrupt Source Override] +[063h 0099 1] Length : 0A +[064h 0100 1] Bus : 00 +[065h 0101 1] Source : 05 +[066h 0102 4] Interrupt : 00000005 +[06Ah 0106 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[06Ch 0108 1] Subtable Type : 02 [Interrupt Source Override] +[06Dh 0109 1] Length : 0A +[06Eh 0110 1] Bus : 00 +[06Fh 0111 1] Source : 09 +[070h 0112 4] Interrupt : 00000009 +[074h 0116 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[076h 0118 1] Subtable Type : 02 [Interrupt Source Override] +[077h 0119 1] Length : 0A +[078h 0120 1] Bus : 00 +[079h 0121 1] Source : 0A +[07Ah 0122 4] Interrupt : 0000000A +[07Eh 0126 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[080h 0128 1] Subtable Type : 02 [Interrupt Source Override] +[081h 0129 1] Length : 0A +[082h 0130 1] Bus : 00 +[083h 0131 1] Source : 0B +[084h 0132 4] Interrupt : 0000000B +[088h 0136 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[08Ah 0138 1] Subtable Type : 04 [Local APIC NMI] +[08Bh 0139 1] Length : 06 +[08Ch 0140 1] Processor ID : FF +[08Dh 0141 2] Flags (decoded below) : 0000 + Polarity : 0 + Trigger Mode : 0 +[08Fh 0143 1] Interrupt Input LINT : 01 + +Raw Table Data: Length 144 (0x90) + + 0000: 41 50 49 43 90 00 00 00 01 AE 42 4F 43 48 53 20 // APIC......BOCHS + 0010: 42 58 50 43 41 50 49 43 01 00 00 00 42 58 50 43 // BXPCAPIC....BXPC + 0020: 01 00 00 00 00 00 E0 FE 01 00 00 00 00 08 00 00 // ................ + 0030: 01 00 00 00 00 08 01 01 01 00 00 00 00 08 02 02 // ................ + 0040: 01 00 00 00 00 08 03 03 01 00 00 00 01 0C 00 00 // ................ + 0050: 00 00 C0 FE 00 00 00 00 02 0A 00 00 02 00 00 00 // ................ + 0060: 00 00 02 0A 00 05 05 00 00 00 0D 00 02 0A 00 09 // ................ + 0070: 09 00 00 00 0D 00 02 0A 00 0A 0A 00 00 00 0D 00 // ................ + 0080: 02 0A 00 0B 0B 00 00 00 0D 00 04 06 FF 00 00 01 // ................ diff --git a/tests/data/acpi/q35/APIC.dsl b/tests/data/acpi/q35/APIC.dsl new file mode 100644 index 0000000000..77d2d2c0a5 --- /dev/null +++ b/tests/data/acpi/q35/APIC.dsl @@ -0,0 +1,104 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/APIC.tis, Mon Sep 28 17:24:38 2020 + * + * ACPI Data Table [APIC] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "APIC" [Multiple APIC Description Table (MADT)] +[004h 0004 4] Table Length : 00000078 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : ED +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCAPIC" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Local Apic Address : FEE00000 +[028h 0040 4] Flags (decoded below) : 00000001 + PC-AT Compatibility : 1 + +[02Ch 0044 1] Subtable Type : 00 [Processor Local APIC] +[02Dh 0045 1] Length : 08 +[02Eh 0046 1] Processor ID : 00 +[02Fh 0047 1] Local Apic ID : 00 +[030h 0048 4] Flags (decoded below) : 00000001 + Processor Enabled : 1 + Runtime Online Capable : 0 + +[034h 0052 1] Subtable Type : 01 [I/O APIC] +[035h 0053 1] Length : 0C +[036h 0054 1] I/O Apic ID : 00 +[037h 0055 1] Reserved : 00 +[038h 0056 4] Address : FEC00000 +[03Ch 0060 4] Interrupt : 00000000 + +[040h 0064 1] Subtable Type : 02 [Interrupt Source Override] +[041h 0065 1] Length : 0A +[042h 0066 1] Bus : 00 +[043h 0067 1] Source : 00 +[044h 0068 4] Interrupt : 00000002 +[048h 0072 2] Flags (decoded below) : 0000 + Polarity : 0 + Trigger Mode : 0 + +[04Ah 0074 1] Subtable Type : 02 [Interrupt Source Override] +[04Bh 0075 1] Length : 0A +[04Ch 0076 1] Bus : 00 +[04Dh 0077 1] Source : 05 +[04Eh 0078 4] Interrupt : 00000005 +[052h 0082 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[054h 0084 1] Subtable Type : 02 [Interrupt Source Override] +[055h 0085 1] Length : 0A +[056h 0086 1] Bus : 00 +[057h 0087 1] Source : 09 +[058h 0088 4] Interrupt : 00000009 +[05Ch 0092 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[05Eh 0094 1] Subtable Type : 02 [Interrupt Source Override] +[05Fh 0095 1] Length : 0A +[060h 0096 1] Bus : 00 +[061h 0097 1] Source : 0A +[062h 0098 4] Interrupt : 0000000A +[066h 0102 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[068h 0104 1] Subtable Type : 02 [Interrupt Source Override] +[069h 0105 1] Length : 0A +[06Ah 0106 1] Bus : 00 +[06Bh 0107 1] Source : 0B +[06Ch 0108 4] Interrupt : 0000000B +[070h 0112 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[072h 0114 1] Subtable Type : 04 [Local APIC NMI] +[073h 0115 1] Length : 06 +[074h 0116 1] Processor ID : FF +[075h 0117 2] Flags (decoded below) : 0000 + Polarity : 0 + Trigger Mode : 0 +[077h 0119 1] Interrupt Input LINT : 01 + +Raw Table Data: Length 120 (0x78) + + 0000: 41 50 49 43 78 00 00 00 01 ED 42 4F 43 48 53 20 // APICx.....BOCHS + 0010: 42 58 50 43 41 50 49 43 01 00 00 00 42 58 50 43 // BXPCAPIC....BXPC + 0020: 01 00 00 00 00 00 E0 FE 01 00 00 00 00 08 00 00 // ................ + 0030: 01 00 00 00 01 0C 00 00 00 00 C0 FE 00 00 00 00 // ................ + 0040: 02 0A 00 00 02 00 00 00 00 00 02 0A 00 05 05 00 // ................ + 0050: 00 00 0D 00 02 0A 00 09 09 00 00 00 0D 00 02 0A // ................ + 0060: 00 0A 0A 00 00 00 0D 00 02 0A 00 0B 0B 00 00 00 // ................ + 0070: 0D 00 04 06 FF 00 00 01 // ........ diff --git a/tests/data/acpi/q35/APIC.ipmibt b/tests/data/acpi/q35/APIC.ipmibt new file mode 100644 index 0000000000000000000000000000000000000000..84509e0ae4cabeb5ead3e42a4edfa50abddbc17d GIT binary patch literal 120 zcmXxa!3}^Q5CzeJh!M~pYz4T;NfIxXVtJNg1Ga!>Nx1C1{A?&WU4VMyp0;C+XGx*t lqyVuLp4vKrRL!#8RjziR+mCh_11utIyPWItzG)agP(M8=4FLcE literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/APIC.ipmibt.dsl b/tests/data/acpi/q35/APIC.ipmibt.dsl new file mode 100644 index 0000000000..127e21e2fe --- /dev/null +++ b/tests/data/acpi/q35/APIC.ipmibt.dsl @@ -0,0 +1,104 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/APIC.ipmibt, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [APIC] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "APIC" [Multiple APIC Description Table (MADT)] +[004h 0004 4] Table Length : 00000078 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : ED +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCAPIC" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Local Apic Address : FEE00000 +[028h 0040 4] Flags (decoded below) : 00000001 + PC-AT Compatibility : 1 + +[02Ch 0044 1] Subtable Type : 00 [Processor Local APIC] +[02Dh 0045 1] Length : 08 +[02Eh 0046 1] Processor ID : 00 +[02Fh 0047 1] Local Apic ID : 00 +[030h 0048 4] Flags (decoded below) : 00000001 + Processor Enabled : 1 + Runtime Online Capable : 0 + +[034h 0052 1] Subtable Type : 01 [I/O APIC] +[035h 0053 1] Length : 0C +[036h 0054 1] I/O Apic ID : 00 +[037h 0055 1] Reserved : 00 +[038h 0056 4] Address : FEC00000 +[03Ch 0060 4] Interrupt : 00000000 + +[040h 0064 1] Subtable Type : 02 [Interrupt Source Override] +[041h 0065 1] Length : 0A +[042h 0066 1] Bus : 00 +[043h 0067 1] Source : 00 +[044h 0068 4] Interrupt : 00000002 +[048h 0072 2] Flags (decoded below) : 0000 + Polarity : 0 + Trigger Mode : 0 + +[04Ah 0074 1] Subtable Type : 02 [Interrupt Source Override] +[04Bh 0075 1] Length : 0A +[04Ch 0076 1] Bus : 00 +[04Dh 0077 1] Source : 05 +[04Eh 0078 4] Interrupt : 00000005 +[052h 0082 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[054h 0084 1] Subtable Type : 02 [Interrupt Source Override] +[055h 0085 1] Length : 0A +[056h 0086 1] Bus : 00 +[057h 0087 1] Source : 09 +[058h 0088 4] Interrupt : 00000009 +[05Ch 0092 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[05Eh 0094 1] Subtable Type : 02 [Interrupt Source Override] +[05Fh 0095 1] Length : 0A +[060h 0096 1] Bus : 00 +[061h 0097 1] Source : 0A +[062h 0098 4] Interrupt : 0000000A +[066h 0102 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[068h 0104 1] Subtable Type : 02 [Interrupt Source Override] +[069h 0105 1] Length : 0A +[06Ah 0106 1] Bus : 00 +[06Bh 0107 1] Source : 0B +[06Ch 0108 4] Interrupt : 0000000B +[070h 0112 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[072h 0114 1] Subtable Type : 04 [Local APIC NMI] +[073h 0115 1] Length : 06 +[074h 0116 1] Processor ID : FF +[075h 0117 2] Flags (decoded below) : 0000 + Polarity : 0 + Trigger Mode : 0 +[077h 0119 1] Interrupt Input LINT : 01 + +Raw Table Data: Length 120 (0x78) + + 0000: 41 50 49 43 78 00 00 00 01 ED 42 4F 43 48 53 20 // APICx.....BOCHS + 0010: 42 58 50 43 41 50 49 43 01 00 00 00 42 58 50 43 // BXPCAPIC....BXPC + 0020: 01 00 00 00 00 00 E0 FE 01 00 00 00 00 08 00 00 // ................ + 0030: 01 00 00 00 01 0C 00 00 00 00 C0 FE 00 00 00 00 // ................ + 0040: 02 0A 00 00 02 00 00 00 00 00 02 0A 00 05 05 00 // ................ + 0050: 00 00 0D 00 02 0A 00 09 09 00 00 00 0D 00 02 0A // ................ + 0060: 00 0A 0A 00 00 00 0D 00 02 0A 00 0B 0B 00 00 00 // ................ + 0070: 0D 00 04 06 FF 00 00 01 // ........ diff --git a/tests/data/acpi/q35/APIC.memhp b/tests/data/acpi/q35/APIC.memhp new file mode 100644 index 0000000000000000000000000000000000000000..84509e0ae4cabeb5ead3e42a4edfa50abddbc17d GIT binary patch literal 120 zcmXxa!3}^Q5CzeJh!M~pYz4T;NfIxXVtJNg1Ga!>Nx1C1{A?&WU4VMyp0;C+XGx*t lqyVuLp4vKrRL!#8RjziR+mCh_11utIyPWItzG)agP(M8=4FLcE literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/APIC.memhp.dsl b/tests/data/acpi/q35/APIC.memhp.dsl new file mode 100644 index 0000000000..1c0cb1dad1 --- /dev/null +++ b/tests/data/acpi/q35/APIC.memhp.dsl @@ -0,0 +1,104 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/APIC.memhp, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [APIC] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "APIC" [Multiple APIC Description Table (MADT)] +[004h 0004 4] Table Length : 00000078 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : ED +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCAPIC" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Local Apic Address : FEE00000 +[028h 0040 4] Flags (decoded below) : 00000001 + PC-AT Compatibility : 1 + +[02Ch 0044 1] Subtable Type : 00 [Processor Local APIC] +[02Dh 0045 1] Length : 08 +[02Eh 0046 1] Processor ID : 00 +[02Fh 0047 1] Local Apic ID : 00 +[030h 0048 4] Flags (decoded below) : 00000001 + Processor Enabled : 1 + Runtime Online Capable : 0 + +[034h 0052 1] Subtable Type : 01 [I/O APIC] +[035h 0053 1] Length : 0C +[036h 0054 1] I/O Apic ID : 00 +[037h 0055 1] Reserved : 00 +[038h 0056 4] Address : FEC00000 +[03Ch 0060 4] Interrupt : 00000000 + +[040h 0064 1] Subtable Type : 02 [Interrupt Source Override] +[041h 0065 1] Length : 0A +[042h 0066 1] Bus : 00 +[043h 0067 1] Source : 00 +[044h 0068 4] Interrupt : 00000002 +[048h 0072 2] Flags (decoded below) : 0000 + Polarity : 0 + Trigger Mode : 0 + +[04Ah 0074 1] Subtable Type : 02 [Interrupt Source Override] +[04Bh 0075 1] Length : 0A +[04Ch 0076 1] Bus : 00 +[04Dh 0077 1] Source : 05 +[04Eh 0078 4] Interrupt : 00000005 +[052h 0082 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[054h 0084 1] Subtable Type : 02 [Interrupt Source Override] +[055h 0085 1] Length : 0A +[056h 0086 1] Bus : 00 +[057h 0087 1] Source : 09 +[058h 0088 4] Interrupt : 00000009 +[05Ch 0092 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[05Eh 0094 1] Subtable Type : 02 [Interrupt Source Override] +[05Fh 0095 1] Length : 0A +[060h 0096 1] Bus : 00 +[061h 0097 1] Source : 0A +[062h 0098 4] Interrupt : 0000000A +[066h 0102 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[068h 0104 1] Subtable Type : 02 [Interrupt Source Override] +[069h 0105 1] Length : 0A +[06Ah 0106 1] Bus : 00 +[06Bh 0107 1] Source : 0B +[06Ch 0108 4] Interrupt : 0000000B +[070h 0112 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[072h 0114 1] Subtable Type : 04 [Local APIC NMI] +[073h 0115 1] Length : 06 +[074h 0116 1] Processor ID : FF +[075h 0117 2] Flags (decoded below) : 0000 + Polarity : 0 + Trigger Mode : 0 +[077h 0119 1] Interrupt Input LINT : 01 + +Raw Table Data: Length 120 (0x78) + + 0000: 41 50 49 43 78 00 00 00 01 ED 42 4F 43 48 53 20 // APICx.....BOCHS + 0010: 42 58 50 43 41 50 49 43 01 00 00 00 42 58 50 43 // BXPCAPIC....BXPC + 0020: 01 00 00 00 00 00 E0 FE 01 00 00 00 00 08 00 00 // ................ + 0030: 01 00 00 00 01 0C 00 00 00 00 C0 FE 00 00 00 00 // ................ + 0040: 02 0A 00 00 02 00 00 00 00 00 02 0A 00 05 05 00 // ................ + 0050: 00 00 0D 00 02 0A 00 09 09 00 00 00 0D 00 02 0A // ................ + 0060: 00 0A 0A 00 00 00 0D 00 02 0A 00 0B 0B 00 00 00 // ................ + 0070: 0D 00 04 06 FF 00 00 01 // ........ diff --git a/tests/data/acpi/q35/APIC.mmio64 b/tests/data/acpi/q35/APIC.mmio64 new file mode 100644 index 0000000000000000000000000000000000000000..84509e0ae4cabeb5ead3e42a4edfa50abddbc17d GIT binary patch literal 120 zcmXxa!3}^Q5CzeJh!M~pYz4T;NfIxXVtJNg1Ga!>Nx1C1{A?&WU4VMyp0;C+XGx*t lqyVuLp4vKrRL!#8RjziR+mCh_11utIyPWItzG)agP(M8=4FLcE literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/APIC.mmio64.dsl b/tests/data/acpi/q35/APIC.mmio64.dsl new file mode 100644 index 0000000000..9a3df90766 --- /dev/null +++ b/tests/data/acpi/q35/APIC.mmio64.dsl @@ -0,0 +1,104 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/APIC.mmio64, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [APIC] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "APIC" [Multiple APIC Description Table (MADT)] +[004h 0004 4] Table Length : 00000078 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : ED +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCAPIC" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Local Apic Address : FEE00000 +[028h 0040 4] Flags (decoded below) : 00000001 + PC-AT Compatibility : 1 + +[02Ch 0044 1] Subtable Type : 00 [Processor Local APIC] +[02Dh 0045 1] Length : 08 +[02Eh 0046 1] Processor ID : 00 +[02Fh 0047 1] Local Apic ID : 00 +[030h 0048 4] Flags (decoded below) : 00000001 + Processor Enabled : 1 + Runtime Online Capable : 0 + +[034h 0052 1] Subtable Type : 01 [I/O APIC] +[035h 0053 1] Length : 0C +[036h 0054 1] I/O Apic ID : 00 +[037h 0055 1] Reserved : 00 +[038h 0056 4] Address : FEC00000 +[03Ch 0060 4] Interrupt : 00000000 + +[040h 0064 1] Subtable Type : 02 [Interrupt Source Override] +[041h 0065 1] Length : 0A +[042h 0066 1] Bus : 00 +[043h 0067 1] Source : 00 +[044h 0068 4] Interrupt : 00000002 +[048h 0072 2] Flags (decoded below) : 0000 + Polarity : 0 + Trigger Mode : 0 + +[04Ah 0074 1] Subtable Type : 02 [Interrupt Source Override] +[04Bh 0075 1] Length : 0A +[04Ch 0076 1] Bus : 00 +[04Dh 0077 1] Source : 05 +[04Eh 0078 4] Interrupt : 00000005 +[052h 0082 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[054h 0084 1] Subtable Type : 02 [Interrupt Source Override] +[055h 0085 1] Length : 0A +[056h 0086 1] Bus : 00 +[057h 0087 1] Source : 09 +[058h 0088 4] Interrupt : 00000009 +[05Ch 0092 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[05Eh 0094 1] Subtable Type : 02 [Interrupt Source Override] +[05Fh 0095 1] Length : 0A +[060h 0096 1] Bus : 00 +[061h 0097 1] Source : 0A +[062h 0098 4] Interrupt : 0000000A +[066h 0102 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[068h 0104 1] Subtable Type : 02 [Interrupt Source Override] +[069h 0105 1] Length : 0A +[06Ah 0106 1] Bus : 00 +[06Bh 0107 1] Source : 0B +[06Ch 0108 4] Interrupt : 0000000B +[070h 0112 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[072h 0114 1] Subtable Type : 04 [Local APIC NMI] +[073h 0115 1] Length : 06 +[074h 0116 1] Processor ID : FF +[075h 0117 2] Flags (decoded below) : 0000 + Polarity : 0 + Trigger Mode : 0 +[077h 0119 1] Interrupt Input LINT : 01 + +Raw Table Data: Length 120 (0x78) + + 0000: 41 50 49 43 78 00 00 00 01 ED 42 4F 43 48 53 20 // APICx.....BOCHS + 0010: 42 58 50 43 41 50 49 43 01 00 00 00 42 58 50 43 // BXPCAPIC....BXPC + 0020: 01 00 00 00 00 00 E0 FE 01 00 00 00 00 08 00 00 // ................ + 0030: 01 00 00 00 01 0C 00 00 00 00 C0 FE 00 00 00 00 // ................ + 0040: 02 0A 00 00 02 00 00 00 00 00 02 0A 00 05 05 00 // ................ + 0050: 00 00 0D 00 02 0A 00 09 09 00 00 00 0D 00 02 0A // ................ + 0060: 00 0A 0A 00 00 00 0D 00 02 0A 00 0B 0B 00 00 00 // ................ + 0070: 0D 00 04 06 FF 00 00 01 // ........ diff --git a/tests/data/acpi/q35/APIC.numamem b/tests/data/acpi/q35/APIC.numamem new file mode 100644 index 0000000000000000000000000000000000000000..84509e0ae4cabeb5ead3e42a4edfa50abddbc17d GIT binary patch literal 120 zcmXxa!3}^Q5CzeJh!M~pYz4T;NfIxXVtJNg1Ga!>Nx1C1{A?&WU4VMyp0;C+XGx*t lqyVuLp4vKrRL!#8RjziR+mCh_11utIyPWItzG)agP(M8=4FLcE literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/APIC.numamem.dsl b/tests/data/acpi/q35/APIC.numamem.dsl new file mode 100644 index 0000000000..f4c5480fd6 --- /dev/null +++ b/tests/data/acpi/q35/APIC.numamem.dsl @@ -0,0 +1,104 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/APIC.numamem, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [APIC] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "APIC" [Multiple APIC Description Table (MADT)] +[004h 0004 4] Table Length : 00000078 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : ED +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCAPIC" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Local Apic Address : FEE00000 +[028h 0040 4] Flags (decoded below) : 00000001 + PC-AT Compatibility : 1 + +[02Ch 0044 1] Subtable Type : 00 [Processor Local APIC] +[02Dh 0045 1] Length : 08 +[02Eh 0046 1] Processor ID : 00 +[02Fh 0047 1] Local Apic ID : 00 +[030h 0048 4] Flags (decoded below) : 00000001 + Processor Enabled : 1 + Runtime Online Capable : 0 + +[034h 0052 1] Subtable Type : 01 [I/O APIC] +[035h 0053 1] Length : 0C +[036h 0054 1] I/O Apic ID : 00 +[037h 0055 1] Reserved : 00 +[038h 0056 4] Address : FEC00000 +[03Ch 0060 4] Interrupt : 00000000 + +[040h 0064 1] Subtable Type : 02 [Interrupt Source Override] +[041h 0065 1] Length : 0A +[042h 0066 1] Bus : 00 +[043h 0067 1] Source : 00 +[044h 0068 4] Interrupt : 00000002 +[048h 0072 2] Flags (decoded below) : 0000 + Polarity : 0 + Trigger Mode : 0 + +[04Ah 0074 1] Subtable Type : 02 [Interrupt Source Override] +[04Bh 0075 1] Length : 0A +[04Ch 0076 1] Bus : 00 +[04Dh 0077 1] Source : 05 +[04Eh 0078 4] Interrupt : 00000005 +[052h 0082 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[054h 0084 1] Subtable Type : 02 [Interrupt Source Override] +[055h 0085 1] Length : 0A +[056h 0086 1] Bus : 00 +[057h 0087 1] Source : 09 +[058h 0088 4] Interrupt : 00000009 +[05Ch 0092 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[05Eh 0094 1] Subtable Type : 02 [Interrupt Source Override] +[05Fh 0095 1] Length : 0A +[060h 0096 1] Bus : 00 +[061h 0097 1] Source : 0A +[062h 0098 4] Interrupt : 0000000A +[066h 0102 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[068h 0104 1] Subtable Type : 02 [Interrupt Source Override] +[069h 0105 1] Length : 0A +[06Ah 0106 1] Bus : 00 +[06Bh 0107 1] Source : 0B +[06Ch 0108 4] Interrupt : 0000000B +[070h 0112 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[072h 0114 1] Subtable Type : 04 [Local APIC NMI] +[073h 0115 1] Length : 06 +[074h 0116 1] Processor ID : FF +[075h 0117 2] Flags (decoded below) : 0000 + Polarity : 0 + Trigger Mode : 0 +[077h 0119 1] Interrupt Input LINT : 01 + +Raw Table Data: Length 120 (0x78) + + 0000: 41 50 49 43 78 00 00 00 01 ED 42 4F 43 48 53 20 // APICx.....BOCHS + 0010: 42 58 50 43 41 50 49 43 01 00 00 00 42 58 50 43 // BXPCAPIC....BXPC + 0020: 01 00 00 00 00 00 E0 FE 01 00 00 00 00 08 00 00 // ................ + 0030: 01 00 00 00 01 0C 00 00 00 00 C0 FE 00 00 00 00 // ................ + 0040: 02 0A 00 00 02 00 00 00 00 00 02 0A 00 05 05 00 // ................ + 0050: 00 00 0D 00 02 0A 00 09 09 00 00 00 0D 00 02 0A // ................ + 0060: 00 0A 0A 00 00 00 0D 00 02 0A 00 0B 0B 00 00 00 // ................ + 0070: 0D 00 04 06 FF 00 00 01 // ........ diff --git a/tests/data/acpi/q35/APIC.tis b/tests/data/acpi/q35/APIC.tis new file mode 100644 index 0000000000000000000000000000000000000000..84509e0ae4cabeb5ead3e42a4edfa50abddbc17d GIT binary patch literal 120 zcmXxa!3}^Q5CzeJh!M~pYz4T;NfIxXVtJNg1Ga!>Nx1C1{A?&WU4VMyp0;C+XGx*t lqyVuLp4vKrRL!#8RjziR+mCh_11utIyPWItzG)agP(M8=4FLcE literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/APIC.tis.dsl b/tests/data/acpi/q35/APIC.tis.dsl new file mode 100644 index 0000000000..ca2373818e --- /dev/null +++ b/tests/data/acpi/q35/APIC.tis.dsl @@ -0,0 +1,104 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/APIC.tis, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [APIC] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "APIC" [Multiple APIC Description Table (MADT)] +[004h 0004 4] Table Length : 00000078 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : ED +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCAPIC" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Local Apic Address : FEE00000 +[028h 0040 4] Flags (decoded below) : 00000001 + PC-AT Compatibility : 1 + +[02Ch 0044 1] Subtable Type : 00 [Processor Local APIC] +[02Dh 0045 1] Length : 08 +[02Eh 0046 1] Processor ID : 00 +[02Fh 0047 1] Local Apic ID : 00 +[030h 0048 4] Flags (decoded below) : 00000001 + Processor Enabled : 1 + Runtime Online Capable : 0 + +[034h 0052 1] Subtable Type : 01 [I/O APIC] +[035h 0053 1] Length : 0C +[036h 0054 1] I/O Apic ID : 00 +[037h 0055 1] Reserved : 00 +[038h 0056 4] Address : FEC00000 +[03Ch 0060 4] Interrupt : 00000000 + +[040h 0064 1] Subtable Type : 02 [Interrupt Source Override] +[041h 0065 1] Length : 0A +[042h 0066 1] Bus : 00 +[043h 0067 1] Source : 00 +[044h 0068 4] Interrupt : 00000002 +[048h 0072 2] Flags (decoded below) : 0000 + Polarity : 0 + Trigger Mode : 0 + +[04Ah 0074 1] Subtable Type : 02 [Interrupt Source Override] +[04Bh 0075 1] Length : 0A +[04Ch 0076 1] Bus : 00 +[04Dh 0077 1] Source : 05 +[04Eh 0078 4] Interrupt : 00000005 +[052h 0082 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[054h 0084 1] Subtable Type : 02 [Interrupt Source Override] +[055h 0085 1] Length : 0A +[056h 0086 1] Bus : 00 +[057h 0087 1] Source : 09 +[058h 0088 4] Interrupt : 00000009 +[05Ch 0092 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[05Eh 0094 1] Subtable Type : 02 [Interrupt Source Override] +[05Fh 0095 1] Length : 0A +[060h 0096 1] Bus : 00 +[061h 0097 1] Source : 0A +[062h 0098 4] Interrupt : 0000000A +[066h 0102 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[068h 0104 1] Subtable Type : 02 [Interrupt Source Override] +[069h 0105 1] Length : 0A +[06Ah 0106 1] Bus : 00 +[06Bh 0107 1] Source : 0B +[06Ch 0108 4] Interrupt : 0000000B +[070h 0112 2] Flags (decoded below) : 000D + Polarity : 1 + Trigger Mode : 3 + +[072h 0114 1] Subtable Type : 04 [Local APIC NMI] +[073h 0115 1] Length : 06 +[074h 0116 1] Processor ID : FF +[075h 0117 2] Flags (decoded below) : 0000 + Polarity : 0 + Trigger Mode : 0 +[077h 0119 1] Interrupt Input LINT : 01 + +Raw Table Data: Length 120 (0x78) + + 0000: 41 50 49 43 78 00 00 00 01 ED 42 4F 43 48 53 20 // APICx.....BOCHS + 0010: 42 58 50 43 41 50 49 43 01 00 00 00 42 58 50 43 // BXPCAPIC....BXPC + 0020: 01 00 00 00 00 00 E0 FE 01 00 00 00 00 08 00 00 // ................ + 0030: 01 00 00 00 01 0C 00 00 00 00 C0 FE 00 00 00 00 // ................ + 0040: 02 0A 00 00 02 00 00 00 00 00 02 0A 00 05 05 00 // ................ + 0050: 00 00 0D 00 02 0A 00 09 09 00 00 00 0D 00 02 0A // ................ + 0060: 00 0A 0A 00 00 00 0D 00 02 0A 00 0B 0B 00 00 00 // ................ + 0070: 0D 00 04 06 FF 00 00 01 // ........ diff --git a/tests/data/acpi/q35/DSDT b/tests/data/acpi/q35/DSDT index d6c26940b1a68d4184f6f2335924099aa28b130a..e7414e78563372fca4d2aab9d16c58c0ff8468f4 100644 GIT binary patch delta 33 ocmexk^TmeCCD-hQE4NWiX5jKOH6#QQ@nuPWD7Z40H)^%$^ZZW delta 42 xcmexj^T&qECD>= 0x10 + If (((Local0 == Zero) || (Local0 == 0xFFFF))) + { + Return (Zero) + } + + If (((Local1 == Zero) || (Local1 > 0x05F5E100))) + { + Return (Zero) + } + + Return (0x0F) + } + + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadOnly, + 0xFED00000, // Address Base + 0x00000400, // Address Length + ) + }) + } + } + + Scope (_SB.PCI0) + { + Device (ISA) + { + Name (_ADR, 0x001F0000) // _ADR: Address + OperationRegion (PIRQ, PCI_Config, 0x60, 0x0C) + } + } + + Scope (_SB.PCI0.ISA) + { + Device (KBD) + { + Name (_HID, EisaId ("PNP0303") /* IBM Enhanced Keyboard (101/102-key, PS/2 Mouse) */) // _HID: Hardware ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0060, // Range Minimum + 0x0060, // Range Maximum + 0x01, // Alignment + 0x01, // Length + ) + IO (Decode16, + 0x0064, // Range Minimum + 0x0064, // Range Maximum + 0x01, // Alignment + 0x01, // Length + ) + IRQNoFlags () + {1} + }) + } + + Device (MOU) + { + Name (_HID, EisaId ("PNP0F13") /* PS/2 Mouse */) // _HID: Hardware ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IRQNoFlags () + {12} + }) + } + + Device (LPT1) + { + Name (_HID, EisaId ("PNP0400") /* Standard LPT Parallel Port */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0378, // Range Minimum + 0x0378, // Range Maximum + 0x08, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {7} + }) + } + + Device (COM1) + { + Name (_HID, EisaId ("PNP0501") /* 16550A-compatible COM Serial Port */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x03F8, // Range Minimum + 0x03F8, // Range Maximum + 0x00, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {4} + }) + } + + Device (RTC) + { + Name (_HID, EisaId ("PNP0B00") /* AT Real-Time Clock */) // _HID: Hardware ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0070, // Range Minimum + 0x0070, // Range Maximum + 0x01, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {8} + }) + } + } + + Name (PICF, Zero) + Method (_PIC, 1, NotSerialized) // _PIC: Interrupt Model + { + PICF = Arg0 + } + + Scope (_SB) + { + Scope (PCI0) + { + Name (PRTP, Package (0x80) + { + Package (0x04) + { + 0xFFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0xFFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0xFFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0xFFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + 0x03, + LNKD, + Zero + } + }) + Name (PRTA, Package (0x80) + { + Package (0x04) + { + 0xFFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0xFFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0xFFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0xFFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + 0x03, + GSID, + Zero + } + }) + Method (_PRT, 0, NotSerialized) // _PRT: PCI Routing Table + { + If ((PICF == Zero)) + { + Return (PRTP) /* \_SB_.PCI0.PRTP */ + } + Else + { + Return (PRTA) /* \_SB_.PCI0.PRTA */ + } + } + } + + Field (PCI0.ISA.PIRQ, ByteAcc, NoLock, Preserve) + { + PRQA, 8, + PRQB, 8, + PRQC, 8, + PRQD, 8, + Offset (0x08), + PRQE, 8, + PRQF, 8, + PRQG, 8, + PRQH, 8 + } + + Method (IQST, 1, NotSerialized) + { + If ((0x80 & Arg0)) + { + Return (0x09) + } + + Return (0x0B) + } + + Method (IQCR, 1, Serialized) + { + Name (PRR0, ResourceTemplate () + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, _Y00) + { + 0x00000000, + } + }) + CreateDWordField (PRR0, \_SB.IQCR._Y00._INT, PRRI) // _INT: Interrupts + PRRI = (Arg0 & 0x0F) + Return (PRR0) /* \_SB_.IQCR.PRR0 */ + } + + Device (LNKA) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQA)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQA |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQA)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQA = PRRI /* \_SB_.LNKA._SRS.PRRI */ + } + } + + Device (LNKB) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQB)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQB |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQB)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQB = PRRI /* \_SB_.LNKB._SRS.PRRI */ + } + } + + Device (LNKC) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x02) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQC)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQC |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQC)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQC = PRRI /* \_SB_.LNKC._SRS.PRRI */ + } + } + + Device (LNKD) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x03) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQD)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQD |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQD)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQD = PRRI /* \_SB_.LNKD._SRS.PRRI */ + } + } + + Device (LNKE) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x04) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQE)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQE |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQE)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQE = PRRI /* \_SB_.LNKE._SRS.PRRI */ + } + } + + Device (LNKF) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x05) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQF)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQF |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQF)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQF = PRRI /* \_SB_.LNKF._SRS.PRRI */ + } + } + + Device (LNKG) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x06) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQG)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQG |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQG)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQG = PRRI /* \_SB_.LNKG._SRS.PRRI */ + } + } + + Device (LNKH) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x07) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQH)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQH |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQH)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQH = PRRI /* \_SB_.LNKH._SRS.PRRI */ + } + } + + Device (GSIA) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x10) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000010, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000010, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIB) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x11) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000011, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000011, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIC) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x12) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000012, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000012, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSID) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x13) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000013, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000013, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIE) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x14) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000014, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000014, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIF) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x15) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000015, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000015, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIG) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x16) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000016, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000016, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIH) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x17) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000017, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000017, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + } + + Scope (_SB.PCI0) + { + Device (SMB0) + { + Name (_ADR, 0x001F0003) // _ADR: Address + } + } + + Scope (_SB) + { + Device (\_SB.PCI0.PRES) + { + Name (_HID, EisaId ("PNP0A06") /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "CPU Hotplug resources") // _UID: Unique ID + Mutex (CPLK, 0x00) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0CD8, // Range Minimum + 0x0CD8, // Range Maximum + 0x01, // Alignment + 0x0C, // Length + ) + }) + OperationRegion (PRST, SystemIO, 0x0CD8, 0x0C) + Field (PRST, ByteAcc, NoLock, WriteAsZeros) + { + Offset (0x04), + CPEN, 1, + CINS, 1, + CRMV, 1, + CEJ0, 1, + Offset (0x05), + CCMD, 8 + } + + Field (PRST, DWordAcc, NoLock, Preserve) + { + CSEL, 32, + Offset (0x08), + CDAT, 32 + } + + Method (_INI, 0, Serialized) // _INI: Initialize + { + CSEL = Zero + } + } + + Device (\_SB.CPUS) + { + Name (_HID, "ACPI0010" /* Processor Container Device */) // _HID: Hardware ID + Name (_CID, EisaId ("PNP0A05") /* Generic Container Device */) // _CID: Compatible ID + Method (CTFY, 2, NotSerialized) + { + If ((Arg0 == Zero)) + { + Notify (C000, Arg1) + } + + If ((Arg0 == One)) + { + Notify (C001, Arg1) + } + } + + Method (CSTA, 1, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + Local0 = Zero + If ((\_SB.PCI0.PRES.CPEN == One)) + { + Local0 = 0x0F + } + + Release (\_SB.PCI0.PRES.CPLK) + Return (Local0) + } + + Method (CEJ0, 1, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + \_SB.PCI0.PRES.CEJ0 = One + Release (\_SB.PCI0.PRES.CPLK) + } + + Method (CSCN, 0, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + Local0 = One + While ((Local0 == One)) + { + Local0 = Zero + \_SB.PCI0.PRES.CCMD = Zero + If ((\_SB.PCI0.PRES.CINS == One)) + { + CTFY (\_SB.PCI0.PRES.CDAT, One) + \_SB.PCI0.PRES.CINS = One + Local0 = One + } + ElseIf ((\_SB.PCI0.PRES.CRMV == One)) + { + CTFY (\_SB.PCI0.PRES.CDAT, 0x03) + \_SB.PCI0.PRES.CRMV = One + Local0 = One + } + } + + Release (\_SB.PCI0.PRES.CPLK) + } + + Method (COST, 4, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + \_SB.PCI0.PRES.CCMD = One + \_SB.PCI0.PRES.CDAT = Arg1 + \_SB.PCI0.PRES.CCMD = 0x02 + \_SB.PCI0.PRES.CDAT = Arg2 + Release (\_SB.PCI0.PRES.CPLK) + } + + Processor (C000, 0x00, 0x00000000, 0x00) + { + Method (_STA, 0, Serialized) // _STA: Status + { + Return (CSTA (Zero)) + } + + Name (_MAT, Buffer (0x08) // _MAT: Multiple APIC Table Entry + { + 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 // ........ + }) + Method (_OST, 3, Serialized) // _OST: OSPM Status Indication + { + COST (Zero, Arg0, Arg1, Arg2) + } + + Name (_PXM, Zero) // _PXM: Device Proximity + } + + Processor (C001, 0x01, 0x00000000, 0x00) + { + Method (_STA, 0, Serialized) // _STA: Status + { + Return (CSTA (One)) + } + + Name (_MAT, Buffer (0x08) // _MAT: Multiple APIC Table Entry + { + 0x00, 0x08, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00 // ........ + }) + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + CEJ0 (One) + } + + Method (_OST, 3, Serialized) // _OST: OSPM Status Indication + { + COST (One, Arg0, Arg1, Arg2) + } + + Name (_PXM, Zero) // _PXM: Device Proximity + } + } + } + + Method (\_GPE._E02, 0, NotSerialized) // _Exx: Edge-Triggered GPE, xx=0x00-0xFF + { + \_SB.CPUS.CSCN () + } + + Device (\_SB.PCI0.MHPD) + { + Name (_HID, "PNP0A06" /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "Memory hotplug resources") // _UID: Unique ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0A00, // Range Minimum + 0x0A00, // Range Maximum + 0x00, // Alignment + 0x18, // Length + ) + }) + OperationRegion (HPMR, SystemIO, 0x0A00, 0x18) + } + + Device (\_SB.MHPC) + { + Name (_HID, "PNP0A06" /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "DIMM devices") // _UID: Unique ID + Name (MDNR, 0x02) + Field (\_SB.PCI0.MHPD.HPMR, DWordAcc, NoLock, Preserve) + { + MRBL, 32, + MRBH, 32, + MRLL, 32, + MRLH, 32, + MPX, 32 + } + + Field (\_SB.PCI0.MHPD.HPMR, ByteAcc, NoLock, WriteAsZeros) + { + Offset (0x14), + MES, 1, + MINS, 1, + MRMV, 1, + MEJ, 1 + } + + Field (\_SB.PCI0.MHPD.HPMR, DWordAcc, NoLock, Preserve) + { + MSEL, 32, + MOEV, 32, + MOSC, 32 + } + + Method (_STA, 0, NotSerialized) // _STA: Status + { + If ((MDNR == Zero)) + { + Return (Zero) + } + + Return (0x0B) + } + + Mutex (MLCK, 0x00) + Method (MSCN, 0, NotSerialized) + { + If ((MDNR == Zero)) + { + Return (Zero) + } + + Local0 = Zero + Acquire (MLCK, 0xFFFF) + While ((Local0 < MDNR)) + { + MSEL = Local0 + If ((MINS == One)) + { + MTFY (Local0, One) + MINS = One + } + ElseIf ((MRMV == One)) + { + MTFY (Local0, 0x03) + MRMV = One + } + + Local0 += One + } + + Release (MLCK) + Return (One) + } + + Method (MRST, 1, NotSerialized) + { + Local0 = Zero + Acquire (MLCK, 0xFFFF) + MSEL = ToInteger (Arg0) + If ((MES == One)) + { + Local0 = 0x0F + } + + Release (MLCK) + Return (Local0) + } + + Method (MCRS, 1, Serialized) + { + Acquire (MLCK, 0xFFFF) + MSEL = ToInteger (Arg0) + Name (MR64, ResourceTemplate () + { + QWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x0000000000000000, // Granularity + 0x0000000000000000, // Range Minimum + 0xFFFFFFFFFFFFFFFE, // Range Maximum + 0x0000000000000000, // Translation Offset + 0xFFFFFFFFFFFFFFFF, // Length + ,, _Y01, AddressRangeMemory, TypeStatic) + }) + CreateDWordField (MR64, \_SB.MHPC.MCRS._Y01._MIN, MINL) // _MIN: Minimum Base Address + CreateDWordField (MR64, 0x12, MINH) + CreateDWordField (MR64, \_SB.MHPC.MCRS._Y01._LEN, LENL) // _LEN: Length + CreateDWordField (MR64, 0x2A, LENH) + CreateDWordField (MR64, \_SB.MHPC.MCRS._Y01._MAX, MAXL) // _MAX: Maximum Base Address + CreateDWordField (MR64, 0x1A, MAXH) + MINH = MRBH /* \_SB_.MHPC.MRBH */ + MINL = MRBL /* \_SB_.MHPC.MRBL */ + LENH = MRLH /* \_SB_.MHPC.MRLH */ + LENL = MRLL /* \_SB_.MHPC.MRLL */ + MAXL = (MINL + LENL) /* \_SB_.MHPC.MCRS.LENL */ + MAXH = (MINH + LENH) /* \_SB_.MHPC.MCRS.LENH */ + If ((MAXL < MINL)) + { + MAXH += One + } + + If ((MAXL < One)) + { + MAXH -= One + } + + MAXL -= One + If ((MAXH == Zero)) + { + Name (MR32, ResourceTemplate () + { + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x00000000, // Granularity + 0x00000000, // Range Minimum + 0xFFFFFFFE, // Range Maximum + 0x00000000, // Translation Offset + 0xFFFFFFFF, // Length + ,, _Y02, AddressRangeMemory, TypeStatic) + }) + CreateDWordField (MR32, \_SB.MHPC.MCRS._Y02._MIN, MIN) // _MIN: Minimum Base Address + CreateDWordField (MR32, \_SB.MHPC.MCRS._Y02._MAX, MAX) // _MAX: Maximum Base Address + CreateDWordField (MR32, \_SB.MHPC.MCRS._Y02._LEN, LEN) // _LEN: Length + MIN = MINL /* \_SB_.MHPC.MCRS.MINL */ + MAX = MAXL /* \_SB_.MHPC.MCRS.MAXL */ + LEN = LENL /* \_SB_.MHPC.MCRS.LENL */ + Release (MLCK) + Return (MR32) /* \_SB_.MHPC.MCRS.MR32 */ + } + + Release (MLCK) + Return (MR64) /* \_SB_.MHPC.MCRS.MR64 */ + } + + Method (MPXM, 1, NotSerialized) + { + Acquire (MLCK, 0xFFFF) + MSEL = ToInteger (Arg0) + Local0 = MPX /* \_SB_.MHPC.MPX_ */ + Release (MLCK) + Return (Local0) + } + + Method (MOST, 4, NotSerialized) + { + Acquire (MLCK, 0xFFFF) + MSEL = ToInteger (Arg0) + MOEV = Arg1 + MOSC = Arg2 + Release (MLCK) + } + + Method (MEJ0, 2, NotSerialized) + { + Acquire (MLCK, 0xFFFF) + MSEL = ToInteger (Arg0) + MEJ = One + Release (MLCK) + } + + Device (MP00) + { + Name (_UID, "0x00") // _UID: Unique ID + Name (_HID, EisaId ("PNP0C80") /* Memory Device */) // _HID: Hardware ID + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (MCRS (_UID)) + } + + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (MRST (_UID)) + } + + Method (_PXM, 0, NotSerialized) // _PXM: Device Proximity + { + Return (MPXM (_UID)) + } + + Method (_OST, 3, NotSerialized) // _OST: OSPM Status Indication + { + MOST (_UID, Arg0, Arg1, Arg2) + } + + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + MEJ0 (_UID, Arg0) + } + } + + Device (MP01) + { + Name (_UID, "0x01") // _UID: Unique ID + Name (_HID, EisaId ("PNP0C80") /* Memory Device */) // _HID: Hardware ID + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (MCRS (_UID)) + } + + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (MRST (_UID)) + } + + Method (_PXM, 0, NotSerialized) // _PXM: Device Proximity + { + Return (MPXM (_UID)) + } + + Method (_OST, 3, NotSerialized) // _OST: OSPM Status Indication + { + MOST (_UID, Arg0, Arg1, Arg2) + } + + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + MEJ0 (_UID, Arg0) + } + } + + Method (MTFY, 2, NotSerialized) + { + If ((Arg0 == Zero)) + { + Notify (MP00, Arg1) + } + + If ((Arg0 == One)) + { + Notify (MP01, Arg1) + } + } + } + + Method (\_GPE._E03, 0, NotSerialized) // _Exx: Edge-Triggered GPE, xx=0x00-0xFF + { + \_SB.MHPC.MSCN () + } + + Scope (_GPE) + { + Name (_HID, "ACPI0006" /* GPE Block Device */) // _HID: Hardware ID + } + + Scope (\_SB.PCI0) + { + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode, + 0x0000, // Granularity + 0x0000, // Range Minimum + 0x00FF, // Range Maximum + 0x0000, // Translation Offset + 0x0100, // Length + ,, ) + IO (Decode16, + 0x0CF8, // Range Minimum + 0x0CF8, // Range Maximum + 0x01, // Alignment + 0x08, // Length + ) + WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, + 0x0000, // Granularity + 0x0000, // Range Minimum + 0x0CF7, // Range Maximum + 0x0000, // Translation Offset + 0x0CF8, // Length + ,, , TypeStatic, DenseTranslation) + WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, + 0x0000, // Granularity + 0x0D00, // Range Minimum + 0xFFFF, // Range Maximum + 0x0000, // Translation Offset + 0xF300, // Length + ,, , TypeStatic, DenseTranslation) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x00000000, // Granularity + 0x000A0000, // Range Minimum + 0x000BFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0x00020000, // Length + ,, , AddressRangeMemory, TypeStatic) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite, + 0x00000000, // Granularity + 0x08000000, // Range Minimum + 0xAFFFFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0xA8000000, // Length + ,, , AddressRangeMemory, TypeStatic) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite, + 0x00000000, // Granularity + 0xC0000000, // Range Minimum + 0xFEBFFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0x3EC00000, // Length + ,, , AddressRangeMemory, TypeStatic) + QWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x0000000000000000, // Granularity + 0x00000001C0000000, // Range Minimum + 0x00000009BFFFFFFF, // Range Maximum + 0x0000000000000000, // Translation Offset + 0x0000000800000000, // Length + ,, , AddressRangeMemory, TypeStatic) + }) + Device (GPE0) + { + Name (_HID, "PNP0A06" /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "GPE0 resources") // _UID: Unique ID + Name (_STA, 0x0B) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0620, // Range Minimum + 0x0620, // Range Maximum + 0x01, // Alignment + 0x10, // Length + ) + }) + } + } + + Scope (\) + { + Name (_S3, Package (0x04) // _S3_: S3 System State + { + One, + One, + Zero, + Zero + }) + Name (_S4, Package (0x04) // _S4_: S4 System State + { + 0x02, + 0x02, + Zero, + Zero + }) + Name (_S5, Package (0x04) // _S5_: S5 System State + { + Zero, + Zero, + Zero, + Zero + }) + } + + Scope (\_SB.PCI0) + { + Device (FWCF) + { + Name (_HID, "QEMU0002") // _HID: Hardware ID + Name (_STA, 0x0B) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0510, // Range Minimum + 0x0510, // Range Maximum + 0x01, // Alignment + 0x0C, // Length + ) + }) + } + } + + Scope (\_SB) + { + Scope (PCI0) + { + Device (S00) + { + Name (_ADR, Zero) // _ADR: Address + } + + Device (S08) + { + Name (_ADR, 0x00010000) // _ADR: Address + Method (_S1D, 0, NotSerialized) // _S1D: S1 Device State + { + Return (Zero) + } + + Method (_S2D, 0, NotSerialized) // _S2D: S2 Device State + { + Return (Zero) + } + + Method (_S3D, 0, NotSerialized) // _S3D: S3 Device State + { + Return (Zero) + } + } + + Method (PCNT, 0, NotSerialized) + { + } + } + } +} + diff --git a/tests/data/acpi/q35/DSDT.bridge b/tests/data/acpi/q35/DSDT.bridge index 0f6c9c68c81cddd2126eea8a7c336b8667202223..118476ff6101e11d6b1f2d3399241d7fd1a6f634 100644 GIT binary patch delta 33 ocmeCRZL{Ta33dr-lVf0D+`W-YMUK;hH6}jTDPF)~vbmf;0GQ4QumAu6 delta 41 wcmZp(?X~4{33dtTm1AIF4ByD5BFE{^8WSJv6ffXD*<8+_U4$*b*)N0v0NR)dw*UYD diff --git a/tests/data/acpi/q35/DSDT.bridge.dsl b/tests/data/acpi/q35/DSDT.bridge.dsl new file mode 100644 index 0000000000..51fbeb729d --- /dev/null +++ b/tests/data/acpi/q35/DSDT.bridge.dsl @@ -0,0 +1,3141 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembling to symbolic ASL+ operators + * + * Disassembly of tests/data/acpi/q35/DSDT.bridge, Tue Aug 4 11:14:15 2020 + * + * Original Table Header: + * Signature "DSDT" + * Length 0x00001E0F (7695) + * Revision 0x01 **** 32-bit table (V1), no 64-bit math support + * Checksum 0x4B + * OEM ID "BOCHS " + * OEM Table ID "BXPCDSDT" + * OEM Revision 0x00000001 (1) + * Compiler ID "BXPC" + * Compiler Version 0x00000001 (1) + */ +DefinitionBlock ("", "DSDT", 1, "BOCHS ", "BXPCDSDT", 0x00000001) +{ + Scope (\) + { + OperationRegion (DBG, SystemIO, 0x0402, One) + Field (DBG, ByteAcc, NoLock, Preserve) + { + DBGB, 8 + } + + Method (DBUG, 1, NotSerialized) + { + ToHexString (Arg0, Local0) + ToBuffer (Local0, Local0) + Local1 = (SizeOf (Local0) - One) + Local2 = Zero + While ((Local2 < Local1)) + { + DBGB = DerefOf (Local0 [Local2]) + Local2++ + } + + DBGB = 0x0A + } + } + + Scope (_SB) + { + Device (PCI0) + { + Name (_HID, EisaId ("PNP0A08") /* PCI Express Bus */) // _HID: Hardware ID + Name (_CID, EisaId ("PNP0A03") /* PCI Bus */) // _CID: Compatible ID + Name (_ADR, Zero) // _ADR: Address + Name (_UID, Zero) // _UID: Unique ID + Method (_OSC, 4, NotSerialized) // _OSC: Operating System Capabilities + { + CreateDWordField (Arg3, Zero, CDW1) + If ((Arg0 == ToUUID ("33db4d5b-1ff7-401c-9657-7441c03dd766") /* PCI Host Bridge Device */)) + { + CreateDWordField (Arg3, 0x04, CDW2) + CreateDWordField (Arg3, 0x08, CDW3) + Local0 = CDW3 /* \_SB_.PCI0._OSC.CDW3 */ + Local0 &= 0x1F + If ((Arg1 != One)) + { + CDW1 |= 0x08 + } + + If ((CDW3 != Local0)) + { + CDW1 |= 0x10 + } + + CDW3 = Local0 + } + Else + { + CDW1 |= 0x04 + } + + Return (Arg3) + } + } + } + + Scope (_SB) + { + Device (HPET) + { + Name (_HID, EisaId ("PNP0103") /* HPET System Timer */) // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + OperationRegion (HPTM, SystemMemory, 0xFED00000, 0x0400) + Field (HPTM, DWordAcc, Lock, Preserve) + { + VEND, 32, + PRD, 32 + } + + Method (_STA, 0, NotSerialized) // _STA: Status + { + Local0 = VEND /* \_SB_.HPET.VEND */ + Local1 = PRD /* \_SB_.HPET.PRD_ */ + Local0 >>= 0x10 + If (((Local0 == Zero) || (Local0 == 0xFFFF))) + { + Return (Zero) + } + + If (((Local1 == Zero) || (Local1 > 0x05F5E100))) + { + Return (Zero) + } + + Return (0x0F) + } + + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadOnly, + 0xFED00000, // Address Base + 0x00000400, // Address Length + ) + }) + } + } + + Scope (_SB.PCI0) + { + Device (ISA) + { + Name (_ADR, 0x001F0000) // _ADR: Address + OperationRegion (PIRQ, PCI_Config, 0x60, 0x0C) + } + } + + Scope (_SB.PCI0.ISA) + { + Device (KBD) + { + Name (_HID, EisaId ("PNP0303") /* IBM Enhanced Keyboard (101/102-key, PS/2 Mouse) */) // _HID: Hardware ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0060, // Range Minimum + 0x0060, // Range Maximum + 0x01, // Alignment + 0x01, // Length + ) + IO (Decode16, + 0x0064, // Range Minimum + 0x0064, // Range Maximum + 0x01, // Alignment + 0x01, // Length + ) + IRQNoFlags () + {1} + }) + } + + Device (MOU) + { + Name (_HID, EisaId ("PNP0F13") /* PS/2 Mouse */) // _HID: Hardware ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IRQNoFlags () + {12} + }) + } + + Device (LPT1) + { + Name (_HID, EisaId ("PNP0400") /* Standard LPT Parallel Port */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0378, // Range Minimum + 0x0378, // Range Maximum + 0x08, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {7} + }) + } + + Device (COM1) + { + Name (_HID, EisaId ("PNP0501") /* 16550A-compatible COM Serial Port */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x03F8, // Range Minimum + 0x03F8, // Range Maximum + 0x00, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {4} + }) + } + + Device (RTC) + { + Name (_HID, EisaId ("PNP0B00") /* AT Real-Time Clock */) // _HID: Hardware ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0070, // Range Minimum + 0x0070, // Range Maximum + 0x01, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {8} + }) + } + } + + Name (PICF, Zero) + Method (_PIC, 1, NotSerialized) // _PIC: Interrupt Model + { + PICF = Arg0 + } + + Scope (_SB) + { + Scope (PCI0) + { + Name (PRTP, Package (0x80) + { + Package (0x04) + { + 0xFFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0xFFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0xFFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0xFFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + 0x03, + LNKD, + Zero + } + }) + Name (PRTA, Package (0x80) + { + Package (0x04) + { + 0xFFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0xFFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0xFFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0xFFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + 0x03, + GSID, + Zero + } + }) + Method (_PRT, 0, NotSerialized) // _PRT: PCI Routing Table + { + If ((PICF == Zero)) + { + Return (PRTP) /* \_SB_.PCI0.PRTP */ + } + Else + { + Return (PRTA) /* \_SB_.PCI0.PRTA */ + } + } + } + + Field (PCI0.ISA.PIRQ, ByteAcc, NoLock, Preserve) + { + PRQA, 8, + PRQB, 8, + PRQC, 8, + PRQD, 8, + Offset (0x08), + PRQE, 8, + PRQF, 8, + PRQG, 8, + PRQH, 8 + } + + Method (IQST, 1, NotSerialized) + { + If ((0x80 & Arg0)) + { + Return (0x09) + } + + Return (0x0B) + } + + Method (IQCR, 1, Serialized) + { + Name (PRR0, ResourceTemplate () + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, _Y00) + { + 0x00000000, + } + }) + CreateDWordField (PRR0, \_SB.IQCR._Y00._INT, PRRI) // _INT: Interrupts + PRRI = (Arg0 & 0x0F) + Return (PRR0) /* \_SB_.IQCR.PRR0 */ + } + + Device (LNKA) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQA)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQA |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQA)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQA = PRRI /* \_SB_.LNKA._SRS.PRRI */ + } + } + + Device (LNKB) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQB)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQB |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQB)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQB = PRRI /* \_SB_.LNKB._SRS.PRRI */ + } + } + + Device (LNKC) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x02) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQC)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQC |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQC)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQC = PRRI /* \_SB_.LNKC._SRS.PRRI */ + } + } + + Device (LNKD) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x03) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQD)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQD |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQD)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQD = PRRI /* \_SB_.LNKD._SRS.PRRI */ + } + } + + Device (LNKE) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x04) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQE)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQE |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQE)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQE = PRRI /* \_SB_.LNKE._SRS.PRRI */ + } + } + + Device (LNKF) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x05) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQF)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQF |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQF)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQF = PRRI /* \_SB_.LNKF._SRS.PRRI */ + } + } + + Device (LNKG) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x06) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQG)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQG |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQG)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQG = PRRI /* \_SB_.LNKG._SRS.PRRI */ + } + } + + Device (LNKH) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x07) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQH)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQH |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQH)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQH = PRRI /* \_SB_.LNKH._SRS.PRRI */ + } + } + + Device (GSIA) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x10) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000010, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000010, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIB) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x11) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000011, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000011, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIC) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x12) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000012, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000012, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSID) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x13) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000013, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000013, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIE) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x14) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000014, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000014, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIF) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x15) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000015, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000015, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIG) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x16) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000016, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000016, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIH) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x17) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000017, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000017, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + } + + Scope (_SB.PCI0) + { + Device (SMB0) + { + Name (_ADR, 0x001F0003) // _ADR: Address + } + } + + Scope (_SB) + { + Device (\_SB.PCI0.PRES) + { + Name (_HID, EisaId ("PNP0A06") /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "CPU Hotplug resources") // _UID: Unique ID + Mutex (CPLK, 0x00) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0CD8, // Range Minimum + 0x0CD8, // Range Maximum + 0x01, // Alignment + 0x0C, // Length + ) + }) + OperationRegion (PRST, SystemIO, 0x0CD8, 0x0C) + Field (PRST, ByteAcc, NoLock, WriteAsZeros) + { + Offset (0x04), + CPEN, 1, + CINS, 1, + CRMV, 1, + CEJ0, 1, + Offset (0x05), + CCMD, 8 + } + + Field (PRST, DWordAcc, NoLock, Preserve) + { + CSEL, 32, + Offset (0x08), + CDAT, 32 + } + + Method (_INI, 0, Serialized) // _INI: Initialize + { + CSEL = Zero + } + } + + Device (\_SB.CPUS) + { + Name (_HID, "ACPI0010" /* Processor Container Device */) // _HID: Hardware ID + Name (_CID, EisaId ("PNP0A05") /* Generic Container Device */) // _CID: Compatible ID + Method (CTFY, 2, NotSerialized) + { + If ((Arg0 == Zero)) + { + Notify (C000, Arg1) + } + } + + Method (CSTA, 1, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + Local0 = Zero + If ((\_SB.PCI0.PRES.CPEN == One)) + { + Local0 = 0x0F + } + + Release (\_SB.PCI0.PRES.CPLK) + Return (Local0) + } + + Method (CEJ0, 1, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + \_SB.PCI0.PRES.CEJ0 = One + Release (\_SB.PCI0.PRES.CPLK) + } + + Method (CSCN, 0, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + Local0 = One + While ((Local0 == One)) + { + Local0 = Zero + \_SB.PCI0.PRES.CCMD = Zero + If ((\_SB.PCI0.PRES.CINS == One)) + { + CTFY (\_SB.PCI0.PRES.CDAT, One) + \_SB.PCI0.PRES.CINS = One + Local0 = One + } + ElseIf ((\_SB.PCI0.PRES.CRMV == One)) + { + CTFY (\_SB.PCI0.PRES.CDAT, 0x03) + \_SB.PCI0.PRES.CRMV = One + Local0 = One + } + } + + Release (\_SB.PCI0.PRES.CPLK) + } + + Method (COST, 4, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + \_SB.PCI0.PRES.CCMD = One + \_SB.PCI0.PRES.CDAT = Arg1 + \_SB.PCI0.PRES.CCMD = 0x02 + \_SB.PCI0.PRES.CDAT = Arg2 + Release (\_SB.PCI0.PRES.CPLK) + } + + Processor (C000, 0x00, 0x00000000, 0x00) + { + Method (_STA, 0, Serialized) // _STA: Status + { + Return (CSTA (Zero)) + } + + Name (_MAT, Buffer (0x08) // _MAT: Multiple APIC Table Entry + { + 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 // ........ + }) + Method (_OST, 3, Serialized) // _OST: OSPM Status Indication + { + COST (Zero, Arg0, Arg1, Arg2) + } + } + } + } + + Method (\_GPE._E02, 0, NotSerialized) // _Exx: Edge-Triggered GPE, xx=0x00-0xFF + { + \_SB.CPUS.CSCN () + } + + Scope (_GPE) + { + Name (_HID, "ACPI0006" /* GPE Block Device */) // _HID: Hardware ID + } + + Scope (\_SB.PCI0) + { + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode, + 0x0000, // Granularity + 0x0000, // Range Minimum + 0x00FF, // Range Maximum + 0x0000, // Translation Offset + 0x0100, // Length + ,, ) + IO (Decode16, + 0x0CF8, // Range Minimum + 0x0CF8, // Range Maximum + 0x01, // Alignment + 0x08, // Length + ) + WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, + 0x0000, // Granularity + 0x0000, // Range Minimum + 0x0CF7, // Range Maximum + 0x0000, // Translation Offset + 0x0CF8, // Length + ,, , TypeStatic, DenseTranslation) + WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, + 0x0000, // Granularity + 0x0D00, // Range Minimum + 0xFFFF, // Range Maximum + 0x0000, // Translation Offset + 0xF300, // Length + ,, , TypeStatic, DenseTranslation) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x00000000, // Granularity + 0x000A0000, // Range Minimum + 0x000BFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0x00020000, // Length + ,, , AddressRangeMemory, TypeStatic) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite, + 0x00000000, // Granularity + 0x08000000, // Range Minimum + 0xAFFFFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0xA8000000, // Length + ,, , AddressRangeMemory, TypeStatic) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite, + 0x00000000, // Granularity + 0xC0000000, // Range Minimum + 0xFEBFFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0x3EC00000, // Length + ,, , AddressRangeMemory, TypeStatic) + QWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x0000000000000000, // Granularity + 0x0000000100000000, // Range Minimum + 0x00000008FFFFFFFF, // Range Maximum + 0x0000000000000000, // Translation Offset + 0x0000000800000000, // Length + ,, , AddressRangeMemory, TypeStatic) + }) + Device (GPE0) + { + Name (_HID, "PNP0A06" /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "GPE0 resources") // _UID: Unique ID + Name (_STA, 0x0B) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0620, // Range Minimum + 0x0620, // Range Maximum + 0x01, // Alignment + 0x10, // Length + ) + }) + } + } + + Scope (\) + { + Name (_S3, Package (0x04) // _S3_: S3 System State + { + One, + One, + Zero, + Zero + }) + Name (_S4, Package (0x04) // _S4_: S4 System State + { + 0x02, + 0x02, + Zero, + Zero + }) + Name (_S5, Package (0x04) // _S5_: S5 System State + { + Zero, + Zero, + Zero, + Zero + }) + } + + Scope (\_SB.PCI0) + { + Device (FWCF) + { + Name (_HID, "QEMU0002") // _HID: Hardware ID + Name (_STA, 0x0B) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0510, // Range Minimum + 0x0510, // Range Maximum + 0x01, // Alignment + 0x0C, // Length + ) + }) + } + } + + Scope (\_SB) + { + Scope (PCI0) + { + Device (S00) + { + Name (_ADR, Zero) // _ADR: Address + } + + Device (S08) + { + Name (_ADR, 0x00010000) // _ADR: Address + Method (_S1D, 0, NotSerialized) // _S1D: S1 Device State + { + Return (Zero) + } + + Method (_S2D, 0, NotSerialized) // _S2D: S2 Device State + { + Return (Zero) + } + + Method (_S3D, 0, NotSerialized) // _S3D: S3 Device State + { + Return (Zero) + } + } + + Device (S10) + { + Name (_ADR, 0x00020000) // _ADR: Address + } + + Method (PCNT, 0, NotSerialized) + { + } + } + } +} + diff --git a/tests/data/acpi/q35/DSDT.cphp b/tests/data/acpi/q35/DSDT.cphp index d7bedee7ff638f11b3bb84ef960364b409a49cce..69c5edf620529e995461ccba63b76a083f25b2b6 100644 GIT binary patch delta 33 ocmX@(aKwSjCD delta 42 xcmX@&aK?elCD>= 0x10 + If (((Local0 == Zero) || (Local0 == 0xFFFF))) + { + Return (Zero) + } + + If (((Local1 == Zero) || (Local1 > 0x05F5E100))) + { + Return (Zero) + } + + Return (0x0F) + } + + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadOnly, + 0xFED00000, // Address Base + 0x00000400, // Address Length + ) + }) + } + } + + Scope (_SB.PCI0) + { + Device (ISA) + { + Name (_ADR, 0x001F0000) // _ADR: Address + OperationRegion (PIRQ, PCI_Config, 0x60, 0x0C) + } + } + + Scope (_SB.PCI0.ISA) + { + Device (KBD) + { + Name (_HID, EisaId ("PNP0303") /* IBM Enhanced Keyboard (101/102-key, PS/2 Mouse) */) // _HID: Hardware ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0060, // Range Minimum + 0x0060, // Range Maximum + 0x01, // Alignment + 0x01, // Length + ) + IO (Decode16, + 0x0064, // Range Minimum + 0x0064, // Range Maximum + 0x01, // Alignment + 0x01, // Length + ) + IRQNoFlags () + {1} + }) + } + + Device (MOU) + { + Name (_HID, EisaId ("PNP0F13") /* PS/2 Mouse */) // _HID: Hardware ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IRQNoFlags () + {12} + }) + } + + Device (LPT1) + { + Name (_HID, EisaId ("PNP0400") /* Standard LPT Parallel Port */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0378, // Range Minimum + 0x0378, // Range Maximum + 0x08, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {7} + }) + } + + Device (COM1) + { + Name (_HID, EisaId ("PNP0501") /* 16550A-compatible COM Serial Port */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x03F8, // Range Minimum + 0x03F8, // Range Maximum + 0x00, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {4} + }) + } + + Device (RTC) + { + Name (_HID, EisaId ("PNP0B00") /* AT Real-Time Clock */) // _HID: Hardware ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0070, // Range Minimum + 0x0070, // Range Maximum + 0x01, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {8} + }) + } + } + + Name (PICF, Zero) + Method (_PIC, 1, NotSerialized) // _PIC: Interrupt Model + { + PICF = Arg0 + } + + Scope (_SB) + { + Scope (PCI0) + { + Name (PRTP, Package (0x80) + { + Package (0x04) + { + 0xFFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0xFFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0xFFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0xFFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + 0x03, + LNKD, + Zero + } + }) + Name (PRTA, Package (0x80) + { + Package (0x04) + { + 0xFFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0xFFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0xFFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0xFFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + 0x03, + GSID, + Zero + } + }) + Method (_PRT, 0, NotSerialized) // _PRT: PCI Routing Table + { + If ((PICF == Zero)) + { + Return (PRTP) /* \_SB_.PCI0.PRTP */ + } + Else + { + Return (PRTA) /* \_SB_.PCI0.PRTA */ + } + } + } + + Field (PCI0.ISA.PIRQ, ByteAcc, NoLock, Preserve) + { + PRQA, 8, + PRQB, 8, + PRQC, 8, + PRQD, 8, + Offset (0x08), + PRQE, 8, + PRQF, 8, + PRQG, 8, + PRQH, 8 + } + + Method (IQST, 1, NotSerialized) + { + If ((0x80 & Arg0)) + { + Return (0x09) + } + + Return (0x0B) + } + + Method (IQCR, 1, Serialized) + { + Name (PRR0, ResourceTemplate () + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, _Y00) + { + 0x00000000, + } + }) + CreateDWordField (PRR0, \_SB.IQCR._Y00._INT, PRRI) // _INT: Interrupts + PRRI = (Arg0 & 0x0F) + Return (PRR0) /* \_SB_.IQCR.PRR0 */ + } + + Device (LNKA) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQA)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQA |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQA)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQA = PRRI /* \_SB_.LNKA._SRS.PRRI */ + } + } + + Device (LNKB) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQB)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQB |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQB)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQB = PRRI /* \_SB_.LNKB._SRS.PRRI */ + } + } + + Device (LNKC) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x02) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQC)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQC |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQC)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQC = PRRI /* \_SB_.LNKC._SRS.PRRI */ + } + } + + Device (LNKD) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x03) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQD)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQD |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQD)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQD = PRRI /* \_SB_.LNKD._SRS.PRRI */ + } + } + + Device (LNKE) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x04) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQE)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQE |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQE)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQE = PRRI /* \_SB_.LNKE._SRS.PRRI */ + } + } + + Device (LNKF) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x05) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQF)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQF |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQF)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQF = PRRI /* \_SB_.LNKF._SRS.PRRI */ + } + } + + Device (LNKG) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x06) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQG)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQG |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQG)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQG = PRRI /* \_SB_.LNKG._SRS.PRRI */ + } + } + + Device (LNKH) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x07) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQH)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQH |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQH)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQH = PRRI /* \_SB_.LNKH._SRS.PRRI */ + } + } + + Device (GSIA) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x10) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000010, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000010, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIB) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x11) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000011, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000011, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIC) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x12) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000012, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000012, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSID) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x13) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000013, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000013, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIE) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x14) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000014, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000014, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIF) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x15) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000015, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000015, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIG) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x16) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000016, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000016, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIH) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x17) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000017, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000017, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + } + + Scope (_SB.PCI0) + { + Device (SMB0) + { + Name (_ADR, 0x001F0003) // _ADR: Address + } + } + + Scope (_SB) + { + Device (\_SB.PCI0.PRES) + { + Name (_HID, EisaId ("PNP0A06") /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "CPU Hotplug resources") // _UID: Unique ID + Mutex (CPLK, 0x00) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0CD8, // Range Minimum + 0x0CD8, // Range Maximum + 0x01, // Alignment + 0x0C, // Length + ) + }) + OperationRegion (PRST, SystemIO, 0x0CD8, 0x0C) + Field (PRST, ByteAcc, NoLock, WriteAsZeros) + { + Offset (0x04), + CPEN, 1, + CINS, 1, + CRMV, 1, + CEJ0, 1, + Offset (0x05), + CCMD, 8 + } + + Field (PRST, DWordAcc, NoLock, Preserve) + { + CSEL, 32, + Offset (0x08), + CDAT, 32 + } + + Method (_INI, 0, Serialized) // _INI: Initialize + { + CSEL = Zero + } + } + + Device (\_SB.CPUS) + { + Name (_HID, "ACPI0010" /* Processor Container Device */) // _HID: Hardware ID + Name (_CID, EisaId ("PNP0A05") /* Generic Container Device */) // _CID: Compatible ID + Method (CTFY, 2, NotSerialized) + { + If ((Arg0 == Zero)) + { + Notify (C000, Arg1) + } + + If ((Arg0 == One)) + { + Notify (C001, Arg1) + } + + If ((Arg0 == 0x02)) + { + Notify (C002, Arg1) + } + + If ((Arg0 == 0x03)) + { + Notify (C003, Arg1) + } + + If ((Arg0 == 0x04)) + { + Notify (C004, Arg1) + } + + If ((Arg0 == 0x05)) + { + Notify (C005, Arg1) + } + } + + Method (CSTA, 1, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + Local0 = Zero + If ((\_SB.PCI0.PRES.CPEN == One)) + { + Local0 = 0x0F + } + + Release (\_SB.PCI0.PRES.CPLK) + Return (Local0) + } + + Method (CEJ0, 1, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + \_SB.PCI0.PRES.CEJ0 = One + Release (\_SB.PCI0.PRES.CPLK) + } + + Method (CSCN, 0, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + Local0 = One + While ((Local0 == One)) + { + Local0 = Zero + \_SB.PCI0.PRES.CCMD = Zero + If ((\_SB.PCI0.PRES.CINS == One)) + { + CTFY (\_SB.PCI0.PRES.CDAT, One) + \_SB.PCI0.PRES.CINS = One + Local0 = One + } + ElseIf ((\_SB.PCI0.PRES.CRMV == One)) + { + CTFY (\_SB.PCI0.PRES.CDAT, 0x03) + \_SB.PCI0.PRES.CRMV = One + Local0 = One + } + } + + Release (\_SB.PCI0.PRES.CPLK) + } + + Method (COST, 4, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + \_SB.PCI0.PRES.CCMD = One + \_SB.PCI0.PRES.CDAT = Arg1 + \_SB.PCI0.PRES.CCMD = 0x02 + \_SB.PCI0.PRES.CDAT = Arg2 + Release (\_SB.PCI0.PRES.CPLK) + } + + Processor (C000, 0x00, 0x00000000, 0x00) + { + Method (_STA, 0, Serialized) // _STA: Status + { + Return (CSTA (Zero)) + } + + Name (_MAT, Buffer (0x08) // _MAT: Multiple APIC Table Entry + { + 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 // ........ + }) + Method (_OST, 3, Serialized) // _OST: OSPM Status Indication + { + COST (Zero, Arg0, Arg1, Arg2) + } + + Name (_PXM, Zero) // _PXM: Device Proximity + } + + Processor (C001, 0x01, 0x00000000, 0x00) + { + Method (_STA, 0, Serialized) // _STA: Status + { + Return (CSTA (One)) + } + + Name (_MAT, Buffer (0x08) // _MAT: Multiple APIC Table Entry + { + 0x00, 0x08, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00 // ........ + }) + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + CEJ0 (One) + } + + Method (_OST, 3, Serialized) // _OST: OSPM Status Indication + { + COST (One, Arg0, Arg1, Arg2) + } + + Name (_PXM, Zero) // _PXM: Device Proximity + } + + Processor (C002, 0x02, 0x00000000, 0x00) + { + Method (_STA, 0, Serialized) // _STA: Status + { + Return (CSTA (0x02)) + } + + Name (_MAT, Buffer (0x08) // _MAT: Multiple APIC Table Entry + { + 0x00, 0x08, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00 // ........ + }) + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + CEJ0 (0x02) + } + + Method (_OST, 3, Serialized) // _OST: OSPM Status Indication + { + COST (0x02, Arg0, Arg1, Arg2) + } + + Name (_PXM, Zero) // _PXM: Device Proximity + } + + Processor (C003, 0x03, 0x00000000, 0x00) + { + Method (_STA, 0, Serialized) // _STA: Status + { + Return (CSTA (0x03)) + } + + Name (_MAT, Buffer (0x08) // _MAT: Multiple APIC Table Entry + { + 0x00, 0x08, 0x03, 0x04, 0x01, 0x00, 0x00, 0x00 // ........ + }) + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + CEJ0 (0x03) + } + + Method (_OST, 3, Serialized) // _OST: OSPM Status Indication + { + COST (0x03, Arg0, Arg1, Arg2) + } + + Name (_PXM, One) // _PXM: Device Proximity + } + + Processor (C004, 0x04, 0x00000000, 0x00) + { + Method (_STA, 0, Serialized) // _STA: Status + { + Return (CSTA (0x04)) + } + + Name (_MAT, Buffer (0x08) // _MAT: Multiple APIC Table Entry + { + 0x00, 0x08, 0x04, 0x05, 0x01, 0x00, 0x00, 0x00 // ........ + }) + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + CEJ0 (0x04) + } + + Method (_OST, 3, Serialized) // _OST: OSPM Status Indication + { + COST (0x04, Arg0, Arg1, Arg2) + } + + Name (_PXM, One) // _PXM: Device Proximity + } + + Processor (C005, 0x05, 0x00000000, 0x00) + { + Method (_STA, 0, Serialized) // _STA: Status + { + Return (CSTA (0x05)) + } + + Name (_MAT, Buffer (0x08) // _MAT: Multiple APIC Table Entry + { + 0x00, 0x08, 0x05, 0x06, 0x01, 0x00, 0x00, 0x00 // ........ + }) + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + CEJ0 (0x05) + } + + Method (_OST, 3, Serialized) // _OST: OSPM Status Indication + { + COST (0x05, Arg0, Arg1, Arg2) + } + + Name (_PXM, One) // _PXM: Device Proximity + } + } + } + + Method (\_GPE._E02, 0, NotSerialized) // _Exx: Edge-Triggered GPE, xx=0x00-0xFF + { + \_SB.CPUS.CSCN () + } + + Scope (_GPE) + { + Name (_HID, "ACPI0006" /* GPE Block Device */) // _HID: Hardware ID + } + + Scope (\_SB.PCI0) + { + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode, + 0x0000, // Granularity + 0x0000, // Range Minimum + 0x00FF, // Range Maximum + 0x0000, // Translation Offset + 0x0100, // Length + ,, ) + IO (Decode16, + 0x0CF8, // Range Minimum + 0x0CF8, // Range Maximum + 0x01, // Alignment + 0x08, // Length + ) + WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, + 0x0000, // Granularity + 0x0000, // Range Minimum + 0x0CF7, // Range Maximum + 0x0000, // Translation Offset + 0x0CF8, // Length + ,, , TypeStatic, DenseTranslation) + WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, + 0x0000, // Granularity + 0x0D00, // Range Minimum + 0xFFFF, // Range Maximum + 0x0000, // Translation Offset + 0xF300, // Length + ,, , TypeStatic, DenseTranslation) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x00000000, // Granularity + 0x000A0000, // Range Minimum + 0x000BFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0x00020000, // Length + ,, , AddressRangeMemory, TypeStatic) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite, + 0x00000000, // Granularity + 0x08000000, // Range Minimum + 0xAFFFFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0xA8000000, // Length + ,, , AddressRangeMemory, TypeStatic) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite, + 0x00000000, // Granularity + 0xC0000000, // Range Minimum + 0xFEBFFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0x3EC00000, // Length + ,, , AddressRangeMemory, TypeStatic) + QWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x0000000000000000, // Granularity + 0x0000000100000000, // Range Minimum + 0x00000008FFFFFFFF, // Range Maximum + 0x0000000000000000, // Translation Offset + 0x0000000800000000, // Length + ,, , AddressRangeMemory, TypeStatic) + }) + Device (GPE0) + { + Name (_HID, "PNP0A06" /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "GPE0 resources") // _UID: Unique ID + Name (_STA, 0x0B) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0620, // Range Minimum + 0x0620, // Range Maximum + 0x01, // Alignment + 0x10, // Length + ) + }) + } + } + + Scope (\) + { + Name (_S3, Package (0x04) // _S3_: S3 System State + { + One, + One, + Zero, + Zero + }) + Name (_S4, Package (0x04) // _S4_: S4 System State + { + 0x02, + 0x02, + Zero, + Zero + }) + Name (_S5, Package (0x04) // _S5_: S5 System State + { + Zero, + Zero, + Zero, + Zero + }) + } + + Scope (\_SB.PCI0) + { + Device (FWCF) + { + Name (_HID, "QEMU0002") // _HID: Hardware ID + Name (_STA, 0x0B) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0510, // Range Minimum + 0x0510, // Range Maximum + 0x01, // Alignment + 0x0C, // Length + ) + }) + } + } + + Scope (\_SB) + { + Scope (PCI0) + { + Device (S00) + { + Name (_ADR, Zero) // _ADR: Address + } + + Device (S08) + { + Name (_ADR, 0x00010000) // _ADR: Address + Method (_S1D, 0, NotSerialized) // _S1D: S1 Device State + { + Return (Zero) + } + + Method (_S2D, 0, NotSerialized) // _S2D: S2 Device State + { + Return (Zero) + } + + Method (_S3D, 0, NotSerialized) // _S3D: S3 Device State + { + Return (Zero) + } + } + + Method (PCNT, 0, NotSerialized) + { + } + } + } +} + diff --git a/tests/data/acpi/q35/DSDT.dimmpxm b/tests/data/acpi/q35/DSDT.dimmpxm index 13e80ae2e5c7606a7260d4cb3ab776488d0697d6..af41acba6e0117191ad8495a30ded7b0acc4d2ca 100644 GIT binary patch delta 33 pcmez5`O1^aCD)(0sz0?3UmMf delta 42 ycmaFm`N@;ZCD>= 0x10 + If (((Local0 == Zero) || (Local0 == 0xFFFF))) + { + Return (Zero) + } + + If (((Local1 == Zero) || (Local1 > 0x05F5E100))) + { + Return (Zero) + } + + Return (0x0F) + } + + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadOnly, + 0xFED00000, // Address Base + 0x00000400, // Address Length + ) + }) + } + } + + Scope (_SB.PCI0) + { + Device (ISA) + { + Name (_ADR, 0x001F0000) // _ADR: Address + OperationRegion (PIRQ, PCI_Config, 0x60, 0x0C) + } + } + + Scope (_SB.PCI0.ISA) + { + Device (KBD) + { + Name (_HID, EisaId ("PNP0303") /* IBM Enhanced Keyboard (101/102-key, PS/2 Mouse) */) // _HID: Hardware ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0060, // Range Minimum + 0x0060, // Range Maximum + 0x01, // Alignment + 0x01, // Length + ) + IO (Decode16, + 0x0064, // Range Minimum + 0x0064, // Range Maximum + 0x01, // Alignment + 0x01, // Length + ) + IRQNoFlags () + {1} + }) + } + + Device (MOU) + { + Name (_HID, EisaId ("PNP0F13") /* PS/2 Mouse */) // _HID: Hardware ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IRQNoFlags () + {12} + }) + } + + Device (LPT1) + { + Name (_HID, EisaId ("PNP0400") /* Standard LPT Parallel Port */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0378, // Range Minimum + 0x0378, // Range Maximum + 0x08, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {7} + }) + } + + Device (COM1) + { + Name (_HID, EisaId ("PNP0501") /* 16550A-compatible COM Serial Port */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x03F8, // Range Minimum + 0x03F8, // Range Maximum + 0x00, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {4} + }) + } + + Device (RTC) + { + Name (_HID, EisaId ("PNP0B00") /* AT Real-Time Clock */) // _HID: Hardware ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0070, // Range Minimum + 0x0070, // Range Maximum + 0x01, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {8} + }) + } + } + + Name (PICF, Zero) + Method (_PIC, 1, NotSerialized) // _PIC: Interrupt Model + { + PICF = Arg0 + } + + Scope (_SB) + { + Scope (PCI0) + { + Name (PRTP, Package (0x80) + { + Package (0x04) + { + 0xFFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0xFFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0xFFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0xFFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + 0x03, + LNKD, + Zero + } + }) + Name (PRTA, Package (0x80) + { + Package (0x04) + { + 0xFFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0xFFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0xFFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0xFFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + 0x03, + GSID, + Zero + } + }) + Method (_PRT, 0, NotSerialized) // _PRT: PCI Routing Table + { + If ((PICF == Zero)) + { + Return (PRTP) /* \_SB_.PCI0.PRTP */ + } + Else + { + Return (PRTA) /* \_SB_.PCI0.PRTA */ + } + } + } + + Field (PCI0.ISA.PIRQ, ByteAcc, NoLock, Preserve) + { + PRQA, 8, + PRQB, 8, + PRQC, 8, + PRQD, 8, + Offset (0x08), + PRQE, 8, + PRQF, 8, + PRQG, 8, + PRQH, 8 + } + + Method (IQST, 1, NotSerialized) + { + If ((0x80 & Arg0)) + { + Return (0x09) + } + + Return (0x0B) + } + + Method (IQCR, 1, Serialized) + { + Name (PRR0, ResourceTemplate () + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, _Y00) + { + 0x00000000, + } + }) + CreateDWordField (PRR0, \_SB.IQCR._Y00._INT, PRRI) // _INT: Interrupts + PRRI = (Arg0 & 0x0F) + Return (PRR0) /* \_SB_.IQCR.PRR0 */ + } + + Device (LNKA) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQA)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQA |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQA)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQA = PRRI /* \_SB_.LNKA._SRS.PRRI */ + } + } + + Device (LNKB) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQB)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQB |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQB)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQB = PRRI /* \_SB_.LNKB._SRS.PRRI */ + } + } + + Device (LNKC) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x02) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQC)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQC |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQC)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQC = PRRI /* \_SB_.LNKC._SRS.PRRI */ + } + } + + Device (LNKD) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x03) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQD)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQD |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQD)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQD = PRRI /* \_SB_.LNKD._SRS.PRRI */ + } + } + + Device (LNKE) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x04) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQE)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQE |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQE)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQE = PRRI /* \_SB_.LNKE._SRS.PRRI */ + } + } + + Device (LNKF) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x05) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQF)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQF |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQF)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQF = PRRI /* \_SB_.LNKF._SRS.PRRI */ + } + } + + Device (LNKG) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x06) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQG)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQG |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQG)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQG = PRRI /* \_SB_.LNKG._SRS.PRRI */ + } + } + + Device (LNKH) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x07) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQH)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQH |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQH)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQH = PRRI /* \_SB_.LNKH._SRS.PRRI */ + } + } + + Device (GSIA) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x10) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000010, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000010, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIB) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x11) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000011, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000011, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIC) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x12) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000012, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000012, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSID) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x13) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000013, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000013, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIE) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x14) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000014, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000014, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIF) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x15) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000015, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000015, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIG) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x16) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000016, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000016, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIH) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x17) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000017, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000017, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + } + + Scope (_SB.PCI0) + { + Device (SMB0) + { + Name (_ADR, 0x001F0003) // _ADR: Address + } + } + + Scope (_SB) + { + Device (\_SB.PCI0.PRES) + { + Name (_HID, EisaId ("PNP0A06") /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "CPU Hotplug resources") // _UID: Unique ID + Mutex (CPLK, 0x00) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0CD8, // Range Minimum + 0x0CD8, // Range Maximum + 0x01, // Alignment + 0x0C, // Length + ) + }) + OperationRegion (PRST, SystemIO, 0x0CD8, 0x0C) + Field (PRST, ByteAcc, NoLock, WriteAsZeros) + { + Offset (0x04), + CPEN, 1, + CINS, 1, + CRMV, 1, + CEJ0, 1, + Offset (0x05), + CCMD, 8 + } + + Field (PRST, DWordAcc, NoLock, Preserve) + { + CSEL, 32, + Offset (0x08), + CDAT, 32 + } + + Method (_INI, 0, Serialized) // _INI: Initialize + { + CSEL = Zero + } + } + + Device (\_SB.CPUS) + { + Name (_HID, "ACPI0010" /* Processor Container Device */) // _HID: Hardware ID + Name (_CID, EisaId ("PNP0A05") /* Generic Container Device */) // _CID: Compatible ID + Method (CTFY, 2, NotSerialized) + { + If ((Arg0 == Zero)) + { + Notify (C000, Arg1) + } + + If ((Arg0 == One)) + { + Notify (C001, Arg1) + } + + If ((Arg0 == 0x02)) + { + Notify (C002, Arg1) + } + + If ((Arg0 == 0x03)) + { + Notify (C003, Arg1) + } + } + + Method (CSTA, 1, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + Local0 = Zero + If ((\_SB.PCI0.PRES.CPEN == One)) + { + Local0 = 0x0F + } + + Release (\_SB.PCI0.PRES.CPLK) + Return (Local0) + } + + Method (CEJ0, 1, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + \_SB.PCI0.PRES.CEJ0 = One + Release (\_SB.PCI0.PRES.CPLK) + } + + Method (CSCN, 0, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + Local0 = One + While ((Local0 == One)) + { + Local0 = Zero + \_SB.PCI0.PRES.CCMD = Zero + If ((\_SB.PCI0.PRES.CINS == One)) + { + CTFY (\_SB.PCI0.PRES.CDAT, One) + \_SB.PCI0.PRES.CINS = One + Local0 = One + } + ElseIf ((\_SB.PCI0.PRES.CRMV == One)) + { + CTFY (\_SB.PCI0.PRES.CDAT, 0x03) + \_SB.PCI0.PRES.CRMV = One + Local0 = One + } + } + + Release (\_SB.PCI0.PRES.CPLK) + } + + Method (COST, 4, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + \_SB.PCI0.PRES.CCMD = One + \_SB.PCI0.PRES.CDAT = Arg1 + \_SB.PCI0.PRES.CCMD = 0x02 + \_SB.PCI0.PRES.CDAT = Arg2 + Release (\_SB.PCI0.PRES.CPLK) + } + + Processor (C000, 0x00, 0x00000000, 0x00) + { + Method (_STA, 0, Serialized) // _STA: Status + { + Return (CSTA (Zero)) + } + + Name (_MAT, Buffer (0x08) // _MAT: Multiple APIC Table Entry + { + 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 // ........ + }) + Method (_OST, 3, Serialized) // _OST: OSPM Status Indication + { + COST (Zero, Arg0, Arg1, Arg2) + } + + Name (_PXM, Zero) // _PXM: Device Proximity + } + + Processor (C001, 0x01, 0x00000000, 0x00) + { + Method (_STA, 0, Serialized) // _STA: Status + { + Return (CSTA (One)) + } + + Name (_MAT, Buffer (0x08) // _MAT: Multiple APIC Table Entry + { + 0x00, 0x08, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00 // ........ + }) + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + CEJ0 (One) + } + + Method (_OST, 3, Serialized) // _OST: OSPM Status Indication + { + COST (One, Arg0, Arg1, Arg2) + } + + Name (_PXM, One) // _PXM: Device Proximity + } + + Processor (C002, 0x02, 0x00000000, 0x00) + { + Method (_STA, 0, Serialized) // _STA: Status + { + Return (CSTA (0x02)) + } + + Name (_MAT, Buffer (0x08) // _MAT: Multiple APIC Table Entry + { + 0x00, 0x08, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00 // ........ + }) + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + CEJ0 (0x02) + } + + Method (_OST, 3, Serialized) // _OST: OSPM Status Indication + { + COST (0x02, Arg0, Arg1, Arg2) + } + + Name (_PXM, 0x02) // _PXM: Device Proximity + } + + Processor (C003, 0x03, 0x00000000, 0x00) + { + Method (_STA, 0, Serialized) // _STA: Status + { + Return (CSTA (0x03)) + } + + Name (_MAT, Buffer (0x08) // _MAT: Multiple APIC Table Entry + { + 0x00, 0x08, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00 // ........ + }) + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + CEJ0 (0x03) + } + + Method (_OST, 3, Serialized) // _OST: OSPM Status Indication + { + COST (0x03, Arg0, Arg1, Arg2) + } + + Name (_PXM, 0x03) // _PXM: Device Proximity + } + } + } + + Method (\_GPE._E02, 0, NotSerialized) // _Exx: Edge-Triggered GPE, xx=0x00-0xFF + { + \_SB.CPUS.CSCN () + } + + Device (\_SB.PCI0.MHPD) + { + Name (_HID, "PNP0A06" /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "Memory hotplug resources") // _UID: Unique ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0A00, // Range Minimum + 0x0A00, // Range Maximum + 0x00, // Alignment + 0x18, // Length + ) + }) + OperationRegion (HPMR, SystemIO, 0x0A00, 0x18) + } + + Device (\_SB.MHPC) + { + Name (_HID, "PNP0A06" /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "DIMM devices") // _UID: Unique ID + Name (MDNR, 0x03) + Field (\_SB.PCI0.MHPD.HPMR, DWordAcc, NoLock, Preserve) + { + MRBL, 32, + MRBH, 32, + MRLL, 32, + MRLH, 32, + MPX, 32 + } + + Field (\_SB.PCI0.MHPD.HPMR, ByteAcc, NoLock, WriteAsZeros) + { + Offset (0x14), + MES, 1, + MINS, 1, + MRMV, 1, + MEJ, 1 + } + + Field (\_SB.PCI0.MHPD.HPMR, DWordAcc, NoLock, Preserve) + { + MSEL, 32, + MOEV, 32, + MOSC, 32 + } + + Method (_STA, 0, NotSerialized) // _STA: Status + { + If ((MDNR == Zero)) + { + Return (Zero) + } + + Return (0x0B) + } + + Mutex (MLCK, 0x00) + Method (MSCN, 0, NotSerialized) + { + If ((MDNR == Zero)) + { + Return (Zero) + } + + Local0 = Zero + Acquire (MLCK, 0xFFFF) + While ((Local0 < MDNR)) + { + MSEL = Local0 + If ((MINS == One)) + { + MTFY (Local0, One) + MINS = One + } + ElseIf ((MRMV == One)) + { + MTFY (Local0, 0x03) + MRMV = One + } + + Local0 += One + } + + Release (MLCK) + Return (One) + } + + Method (MRST, 1, NotSerialized) + { + Local0 = Zero + Acquire (MLCK, 0xFFFF) + MSEL = ToInteger (Arg0) + If ((MES == One)) + { + Local0 = 0x0F + } + + Release (MLCK) + Return (Local0) + } + + Method (MCRS, 1, Serialized) + { + Acquire (MLCK, 0xFFFF) + MSEL = ToInteger (Arg0) + Name (MR64, ResourceTemplate () + { + QWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x0000000000000000, // Granularity + 0x0000000000000000, // Range Minimum + 0xFFFFFFFFFFFFFFFE, // Range Maximum + 0x0000000000000000, // Translation Offset + 0xFFFFFFFFFFFFFFFF, // Length + ,, _Y01, AddressRangeMemory, TypeStatic) + }) + CreateDWordField (MR64, \_SB.MHPC.MCRS._Y01._MIN, MINL) // _MIN: Minimum Base Address + CreateDWordField (MR64, 0x12, MINH) + CreateDWordField (MR64, \_SB.MHPC.MCRS._Y01._LEN, LENL) // _LEN: Length + CreateDWordField (MR64, 0x2A, LENH) + CreateDWordField (MR64, \_SB.MHPC.MCRS._Y01._MAX, MAXL) // _MAX: Maximum Base Address + CreateDWordField (MR64, 0x1A, MAXH) + MINH = MRBH /* \_SB_.MHPC.MRBH */ + MINL = MRBL /* \_SB_.MHPC.MRBL */ + LENH = MRLH /* \_SB_.MHPC.MRLH */ + LENL = MRLL /* \_SB_.MHPC.MRLL */ + MAXL = (MINL + LENL) /* \_SB_.MHPC.MCRS.LENL */ + MAXH = (MINH + LENH) /* \_SB_.MHPC.MCRS.LENH */ + If ((MAXL < MINL)) + { + MAXH += One + } + + If ((MAXL < One)) + { + MAXH -= One + } + + MAXL -= One + If ((MAXH == Zero)) + { + Name (MR32, ResourceTemplate () + { + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x00000000, // Granularity + 0x00000000, // Range Minimum + 0xFFFFFFFE, // Range Maximum + 0x00000000, // Translation Offset + 0xFFFFFFFF, // Length + ,, _Y02, AddressRangeMemory, TypeStatic) + }) + CreateDWordField (MR32, \_SB.MHPC.MCRS._Y02._MIN, MIN) // _MIN: Minimum Base Address + CreateDWordField (MR32, \_SB.MHPC.MCRS._Y02._MAX, MAX) // _MAX: Maximum Base Address + CreateDWordField (MR32, \_SB.MHPC.MCRS._Y02._LEN, LEN) // _LEN: Length + MIN = MINL /* \_SB_.MHPC.MCRS.MINL */ + MAX = MAXL /* \_SB_.MHPC.MCRS.MAXL */ + LEN = LENL /* \_SB_.MHPC.MCRS.LENL */ + Release (MLCK) + Return (MR32) /* \_SB_.MHPC.MCRS.MR32 */ + } + + Release (MLCK) + Return (MR64) /* \_SB_.MHPC.MCRS.MR64 */ + } + + Method (MPXM, 1, NotSerialized) + { + Acquire (MLCK, 0xFFFF) + MSEL = ToInteger (Arg0) + Local0 = MPX /* \_SB_.MHPC.MPX_ */ + Release (MLCK) + Return (Local0) + } + + Method (MOST, 4, NotSerialized) + { + Acquire (MLCK, 0xFFFF) + MSEL = ToInteger (Arg0) + MOEV = Arg1 + MOSC = Arg2 + Release (MLCK) + } + + Method (MEJ0, 2, NotSerialized) + { + Acquire (MLCK, 0xFFFF) + MSEL = ToInteger (Arg0) + MEJ = One + Release (MLCK) + } + + Device (MP00) + { + Name (_UID, "0x00") // _UID: Unique ID + Name (_HID, EisaId ("PNP0C80") /* Memory Device */) // _HID: Hardware ID + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (MCRS (_UID)) + } + + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (MRST (_UID)) + } + + Method (_PXM, 0, NotSerialized) // _PXM: Device Proximity + { + Return (MPXM (_UID)) + } + + Method (_OST, 3, NotSerialized) // _OST: OSPM Status Indication + { + MOST (_UID, Arg0, Arg1, Arg2) + } + + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + MEJ0 (_UID, Arg0) + } + } + + Device (MP01) + { + Name (_UID, "0x01") // _UID: Unique ID + Name (_HID, EisaId ("PNP0C80") /* Memory Device */) // _HID: Hardware ID + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (MCRS (_UID)) + } + + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (MRST (_UID)) + } + + Method (_PXM, 0, NotSerialized) // _PXM: Device Proximity + { + Return (MPXM (_UID)) + } + + Method (_OST, 3, NotSerialized) // _OST: OSPM Status Indication + { + MOST (_UID, Arg0, Arg1, Arg2) + } + + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + MEJ0 (_UID, Arg0) + } + } + + Device (MP02) + { + Name (_UID, "0x02") // _UID: Unique ID + Name (_HID, EisaId ("PNP0C80") /* Memory Device */) // _HID: Hardware ID + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (MCRS (_UID)) + } + + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (MRST (_UID)) + } + + Method (_PXM, 0, NotSerialized) // _PXM: Device Proximity + { + Return (MPXM (_UID)) + } + + Method (_OST, 3, NotSerialized) // _OST: OSPM Status Indication + { + MOST (_UID, Arg0, Arg1, Arg2) + } + + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + MEJ0 (_UID, Arg0) + } + } + + Method (MTFY, 2, NotSerialized) + { + If ((Arg0 == Zero)) + { + Notify (MP00, Arg1) + } + + If ((Arg0 == One)) + { + Notify (MP01, Arg1) + } + + If ((Arg0 == 0x02)) + { + Notify (MP02, Arg1) + } + } + } + + Method (\_GPE._E03, 0, NotSerialized) // _Exx: Edge-Triggered GPE, xx=0x00-0xFF + { + \_SB.MHPC.MSCN () + } + + Scope (_GPE) + { + Name (_HID, "ACPI0006" /* GPE Block Device */) // _HID: Hardware ID + Method (_E04, 0, NotSerialized) // _Exx: Edge-Triggered GPE, xx=0x00-0xFF + { + Notify (\_SB.NVDR, 0x80) // Status Change + } + } + + Scope (\_SB.PCI0) + { + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode, + 0x0000, // Granularity + 0x0000, // Range Minimum + 0x00FF, // Range Maximum + 0x0000, // Translation Offset + 0x0100, // Length + ,, ) + IO (Decode16, + 0x0CF8, // Range Minimum + 0x0CF8, // Range Maximum + 0x01, // Alignment + 0x08, // Length + ) + WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, + 0x0000, // Granularity + 0x0000, // Range Minimum + 0x0CF7, // Range Maximum + 0x0000, // Translation Offset + 0x0CF8, // Length + ,, , TypeStatic, DenseTranslation) + WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, + 0x0000, // Granularity + 0x0D00, // Range Minimum + 0xFFFF, // Range Maximum + 0x0000, // Translation Offset + 0xF300, // Length + ,, , TypeStatic, DenseTranslation) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x00000000, // Granularity + 0x000A0000, // Range Minimum + 0x000BFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0x00020000, // Length + ,, , AddressRangeMemory, TypeStatic) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite, + 0x00000000, // Granularity + 0x08000000, // Range Minimum + 0xAFFFFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0xA8000000, // Length + ,, , AddressRangeMemory, TypeStatic) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite, + 0x00000000, // Granularity + 0xC0000000, // Range Minimum + 0xFEBFFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0x3EC00000, // Length + ,, , AddressRangeMemory, TypeStatic) + QWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x0000000000000000, // Granularity + 0x0000000200000000, // Range Minimum + 0x00000009FFFFFFFF, // Range Maximum + 0x0000000000000000, // Translation Offset + 0x0000000800000000, // Length + ,, , AddressRangeMemory, TypeStatic) + }) + Device (GPE0) + { + Name (_HID, "PNP0A06" /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "GPE0 resources") // _UID: Unique ID + Name (_STA, 0x0B) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0620, // Range Minimum + 0x0620, // Range Maximum + 0x01, // Alignment + 0x10, // Length + ) + }) + } + } + + Scope (\) + { + Name (_S3, Package (0x04) // _S3_: S3 System State + { + One, + One, + Zero, + Zero + }) + Name (_S4, Package (0x04) // _S4_: S4 System State + { + 0x02, + 0x02, + Zero, + Zero + }) + Name (_S5, Package (0x04) // _S5_: S5 System State + { + Zero, + Zero, + Zero, + Zero + }) + } + + Scope (\_SB.PCI0) + { + Device (FWCF) + { + Name (_HID, "QEMU0002") // _HID: Hardware ID + Name (_STA, 0x0B) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0510, // Range Minimum + 0x0510, // Range Maximum + 0x01, // Alignment + 0x0C, // Length + ) + }) + } + } + + Scope (\_SB) + { + Scope (PCI0) + { + Device (S00) + { + Name (_ADR, Zero) // _ADR: Address + } + + Device (S08) + { + Name (_ADR, 0x00010000) // _ADR: Address + Method (_S1D, 0, NotSerialized) // _S1D: S1 Device State + { + Return (Zero) + } + + Method (_S2D, 0, NotSerialized) // _S2D: S2 Device State + { + Return (Zero) + } + + Method (_S3D, 0, NotSerialized) // _S3D: S3 Device State + { + Return (Zero) + } + } + + Method (PCNT, 0, NotSerialized) + { + } + } + } +} + diff --git a/tests/data/acpi/q35/DSDT.dsl b/tests/data/acpi/q35/DSDT.dsl new file mode 100644 index 0000000000..5adfe001c7 --- /dev/null +++ b/tests/data/acpi/q35/DSDT.dsl @@ -0,0 +1,3351 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembling to symbolic ASL+ operators + * + * Disassembly of tests/data/acpi/q35/DSDT.tis, Mon Sep 28 17:24:38 2020 + * + * Original Table Header: + * Signature "DSDT" + * Length 0x000020D2 (8402) + * Revision 0x01 **** 32-bit table (V1), no 64-bit math support + * Checksum 0xF4 + * OEM ID "BOCHS " + * OEM Table ID "BXPCDSDT" + * OEM Revision 0x00000001 (1) + * Compiler ID "BXPC" + * Compiler Version 0x00000001 (1) + */ +DefinitionBlock ("", "DSDT", 1, "BOCHS ", "BXPCDSDT", 0x00000001) +{ + Scope (\) + { + OperationRegion (DBG, SystemIO, 0x0402, One) + Field (DBG, ByteAcc, NoLock, Preserve) + { + DBGB, 8 + } + + Method (DBUG, 1, NotSerialized) + { + ToHexString (Arg0, Local0) + ToBuffer (Local0, Local0) + Local1 = (SizeOf (Local0) - One) + Local2 = Zero + While ((Local2 < Local1)) + { + DBGB = DerefOf (Local0 [Local2]) + Local2++ + } + + DBGB = 0x0A + } + } + + Scope (_SB) + { + Device (PCI0) + { + Name (_HID, EisaId ("PNP0A08") /* PCI Express Bus */) // _HID: Hardware ID + Name (_CID, EisaId ("PNP0A03") /* PCI Bus */) // _CID: Compatible ID + Name (_ADR, Zero) // _ADR: Address + Name (_UID, Zero) // _UID: Unique ID + Method (_OSC, 4, NotSerialized) // _OSC: Operating System Capabilities + { + CreateDWordField (Arg3, Zero, CDW1) + If ((Arg0 == ToUUID ("33db4d5b-1ff7-401c-9657-7441c03dd766") /* PCI Host Bridge Device */)) + { + CreateDWordField (Arg3, 0x04, CDW2) + CreateDWordField (Arg3, 0x08, CDW3) + Local0 = CDW3 /* \_SB_.PCI0._OSC.CDW3 */ + Local0 &= 0x1F + If ((Arg1 != One)) + { + CDW1 |= 0x08 + } + + If ((CDW3 != Local0)) + { + CDW1 |= 0x10 + } + + CDW3 = Local0 + } + Else + { + CDW1 |= 0x04 + } + + Return (Arg3) + } + } + } + + Scope (_SB) + { + Device (HPET) + { + Name (_HID, EisaId ("PNP0103") /* HPET System Timer */) // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + OperationRegion (HPTM, SystemMemory, 0xFED00000, 0x0400) + Field (HPTM, DWordAcc, Lock, Preserve) + { + VEND, 32, + PRD, 32 + } + + Method (_STA, 0, NotSerialized) // _STA: Status + { + Local0 = VEND /* \_SB_.HPET.VEND */ + Local1 = PRD /* \_SB_.HPET.PRD_ */ + Local0 >>= 0x10 + If (((Local0 == Zero) || (Local0 == 0xFFFF))) + { + Return (Zero) + } + + If (((Local1 == Zero) || (Local1 > 0x05F5E100))) + { + Return (Zero) + } + + Return (0x0F) + } + + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadOnly, + 0xFED00000, // Address Base + 0x00000400, // Address Length + ) + }) + } + } + + Scope (_SB.PCI0) + { + Device (ISA) + { + Name (_ADR, 0x001F0000) // _ADR: Address + OperationRegion (PIRQ, PCI_Config, 0x60, 0x0C) + } + } + + Scope (_SB.PCI0.ISA) + { + Device (KBD) + { + Name (_HID, EisaId ("PNP0303") /* IBM Enhanced Keyboard (101/102-key, PS/2 Mouse) */) // _HID: Hardware ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0060, // Range Minimum + 0x0060, // Range Maximum + 0x01, // Alignment + 0x01, // Length + ) + IO (Decode16, + 0x0064, // Range Minimum + 0x0064, // Range Maximum + 0x01, // Alignment + 0x01, // Length + ) + IRQNoFlags () + {1} + }) + } + + Device (MOU) + { + Name (_HID, EisaId ("PNP0F13") /* PS/2 Mouse */) // _HID: Hardware ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IRQNoFlags () + {12} + }) + } + + Device (LPT1) + { + Name (_HID, EisaId ("PNP0400") /* Standard LPT Parallel Port */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0378, // Range Minimum + 0x0378, // Range Maximum + 0x08, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {7} + }) + } + + Device (COM1) + { + Name (_HID, EisaId ("PNP0501") /* 16550A-compatible COM Serial Port */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x03F8, // Range Minimum + 0x03F8, // Range Maximum + 0x00, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {4} + }) + } + + Device (RTC) + { + Name (_HID, EisaId ("PNP0B00") /* AT Real-Time Clock */) // _HID: Hardware ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0070, // Range Minimum + 0x0070, // Range Maximum + 0x01, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {8} + }) + } + } + + Name (PICF, Zero) + Method (_PIC, 1, NotSerialized) // _PIC: Interrupt Model + { + PICF = Arg0 + } + + Scope (_SB) + { + Scope (PCI0) + { + Name (PRTP, Package (0x80) + { + Package (0x04) + { + 0xFFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0xFFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0xFFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0xFFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + 0x03, + LNKD, + Zero + } + }) + Name (PRTA, Package (0x80) + { + Package (0x04) + { + 0xFFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0xFFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0xFFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0xFFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + 0x03, + GSID, + Zero + } + }) + Method (_PRT, 0, NotSerialized) // _PRT: PCI Routing Table + { + If ((PICF == Zero)) + { + Return (PRTP) /* \_SB_.PCI0.PRTP */ + } + Else + { + Return (PRTA) /* \_SB_.PCI0.PRTA */ + } + } + } + + Field (PCI0.ISA.PIRQ, ByteAcc, NoLock, Preserve) + { + PRQA, 8, + PRQB, 8, + PRQC, 8, + PRQD, 8, + Offset (0x08), + PRQE, 8, + PRQF, 8, + PRQG, 8, + PRQH, 8 + } + + Method (IQST, 1, NotSerialized) + { + If ((0x80 & Arg0)) + { + Return (0x09) + } + + Return (0x0B) + } + + Method (IQCR, 1, Serialized) + { + Name (PRR0, ResourceTemplate () + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, _Y00) + { + 0x00000000, + } + }) + CreateDWordField (PRR0, \_SB.IQCR._Y00._INT, PRRI) // _INT: Interrupts + PRRI = (Arg0 & 0x0F) + Return (PRR0) /* \_SB_.IQCR.PRR0 */ + } + + Device (LNKA) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQA)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQA |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQA)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQA = PRRI /* \_SB_.LNKA._SRS.PRRI */ + } + } + + Device (LNKB) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQB)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQB |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQB)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQB = PRRI /* \_SB_.LNKB._SRS.PRRI */ + } + } + + Device (LNKC) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x02) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQC)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQC |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQC)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQC = PRRI /* \_SB_.LNKC._SRS.PRRI */ + } + } + + Device (LNKD) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x03) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQD)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQD |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQD)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQD = PRRI /* \_SB_.LNKD._SRS.PRRI */ + } + } + + Device (LNKE) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x04) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQE)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQE |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQE)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQE = PRRI /* \_SB_.LNKE._SRS.PRRI */ + } + } + + Device (LNKF) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x05) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQF)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQF |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQF)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQF = PRRI /* \_SB_.LNKF._SRS.PRRI */ + } + } + + Device (LNKG) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x06) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQG)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQG |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQG)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQG = PRRI /* \_SB_.LNKG._SRS.PRRI */ + } + } + + Device (LNKH) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x07) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQH)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQH |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQH)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQH = PRRI /* \_SB_.LNKH._SRS.PRRI */ + } + } + + Device (GSIA) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x10) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000010, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000010, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIB) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x11) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000011, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000011, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIC) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x12) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000012, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000012, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSID) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x13) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000013, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000013, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIE) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x14) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000014, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000014, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIF) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x15) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000015, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000015, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIG) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x16) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000016, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000016, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIH) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x17) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000017, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000017, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + } + + Scope (_SB.PCI0) + { + Device (SMB0) + { + Name (_ADR, 0x001F0003) // _ADR: Address + } + } + + Scope (_SB) + { + Device (\_SB.PCI0.PRES) + { + Name (_HID, EisaId ("PNP0A06") /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "CPU Hotplug resources") // _UID: Unique ID + Mutex (CPLK, 0x00) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0CD8, // Range Minimum + 0x0CD8, // Range Maximum + 0x01, // Alignment + 0x0C, // Length + ) + }) + OperationRegion (PRST, SystemIO, 0x0CD8, 0x0C) + Field (PRST, ByteAcc, NoLock, WriteAsZeros) + { + Offset (0x04), + CPEN, 1, + CINS, 1, + CRMV, 1, + CEJ0, 1, + Offset (0x05), + CCMD, 8 + } + + Field (PRST, DWordAcc, NoLock, Preserve) + { + CSEL, 32, + Offset (0x08), + CDAT, 32 + } + + Method (_INI, 0, Serialized) // _INI: Initialize + { + CSEL = Zero + } + } + + Device (\_SB.CPUS) + { + Name (_HID, "ACPI0010" /* Processor Container Device */) // _HID: Hardware ID + Name (_CID, EisaId ("PNP0A05") /* Generic Container Device */) // _CID: Compatible ID + Method (CTFY, 2, NotSerialized) + { + If ((Arg0 == Zero)) + { + Notify (C000, Arg1) + } + } + + Method (CSTA, 1, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + Local0 = Zero + If ((\_SB.PCI0.PRES.CPEN == One)) + { + Local0 = 0x0F + } + + Release (\_SB.PCI0.PRES.CPLK) + Return (Local0) + } + + Method (CEJ0, 1, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + \_SB.PCI0.PRES.CEJ0 = One + Release (\_SB.PCI0.PRES.CPLK) + } + + Method (CSCN, 0, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + Name (CNEW, Package (0xFF){}) + Local3 = Zero + Local4 = One + While ((Local4 == One)) + { + Local4 = Zero + Local0 = One + Local1 = Zero + While (((Local0 == One) && (Local3 < One))) + { + Local0 = Zero + \_SB.PCI0.PRES.CSEL = Local3 + \_SB.PCI0.PRES.CCMD = Zero + If ((\_SB.PCI0.PRES.CDAT < Local3)) + { + Break + } + + If ((Local1 == 0xFF)) + { + Local4 = One + Break + } + + Local3 = \_SB.PCI0.PRES.CDAT + If ((\_SB.PCI0.PRES.CINS == One)) + { + CNEW [Local1] = Local3 + Local1++ + Local0 = One + } + ElseIf ((\_SB.PCI0.PRES.CRMV == One)) + { + CTFY (Local3, 0x03) + \_SB.PCI0.PRES.CRMV = One + Local0 = One + } + + Local3++ + } + + Local2 = Zero + While ((Local2 < Local1)) + { + Local3 = DerefOf (CNEW [Local2]) + CTFY (Local3, One) + Debug = Local3 + \_SB.PCI0.PRES.CSEL = Local3 + \_SB.PCI0.PRES.CINS = One + Local2++ + } + } + + Release (\_SB.PCI0.PRES.CPLK) + } + + Method (COST, 4, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + \_SB.PCI0.PRES.CCMD = One + \_SB.PCI0.PRES.CDAT = Arg1 + \_SB.PCI0.PRES.CCMD = 0x02 + \_SB.PCI0.PRES.CDAT = Arg2 + Release (\_SB.PCI0.PRES.CPLK) + } + + Processor (C000, 0x00, 0x00000000, 0x00) + { + Method (_STA, 0, Serialized) // _STA: Status + { + Return (CSTA (Zero)) + } + + Name (_MAT, Buffer (0x08) // _MAT: Multiple APIC Table Entry + { + 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 // ........ + }) + Method (_OST, 3, Serialized) // _OST: OSPM Status Indication + { + COST (Zero, Arg0, Arg1, Arg2) + } + } + } + } + + Method (\_GPE._E02, 0, NotSerialized) // _Exx: Edge-Triggered GPE, xx=0x00-0xFF + { + \_SB.CPUS.CSCN () + } + + Scope (_GPE) + { + Name (_HID, "ACPI0006" /* GPE Block Device */) // _HID: Hardware ID + } + + Scope (\_SB.PCI0) + { + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode, + 0x0000, // Granularity + 0x0000, // Range Minimum + 0x00FF, // Range Maximum + 0x0000, // Translation Offset + 0x0100, // Length + ,, ) + IO (Decode16, + 0x0CF8, // Range Minimum + 0x0CF8, // Range Maximum + 0x01, // Alignment + 0x08, // Length + ) + WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, + 0x0000, // Granularity + 0x0000, // Range Minimum + 0x0CF7, // Range Maximum + 0x0000, // Translation Offset + 0x0CF8, // Length + ,, , TypeStatic, DenseTranslation) + WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, + 0x0000, // Granularity + 0x0D00, // Range Minimum + 0xFFFF, // Range Maximum + 0x0000, // Translation Offset + 0xF300, // Length + ,, , TypeStatic, DenseTranslation) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x00000000, // Granularity + 0x000A0000, // Range Minimum + 0x000BFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0x00020000, // Length + ,, , AddressRangeMemory, TypeStatic) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite, + 0x00000000, // Granularity + 0x08000000, // Range Minimum + 0xAFFFFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0xA8000000, // Length + ,, , AddressRangeMemory, TypeStatic) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite, + 0x00000000, // Granularity + 0xC0000000, // Range Minimum + 0xFEBFFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0x3EC00000, // Length + ,, , AddressRangeMemory, TypeStatic) + QWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x0000000000000000, // Granularity + 0x0000000100000000, // Range Minimum + 0x00000008FFFFFFFF, // Range Maximum + 0x0000000000000000, // Translation Offset + 0x0000000800000000, // Length + ,, , AddressRangeMemory, TypeStatic) + Memory32Fixed (ReadWrite, + 0xFED40000, // Address Base + 0x00005000, // Address Length + ) + }) + Device (GPE0) + { + Name (_HID, "PNP0A06" /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "GPE0 resources") // _UID: Unique ID + Name (_STA, 0x0B) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0620, // Range Minimum + 0x0620, // Range Maximum + 0x01, // Alignment + 0x10, // Length + ) + }) + } + } + + Scope (\) + { + Name (_S3, Package (0x04) // _S3_: S3 System State + { + One, + One, + Zero, + Zero + }) + Name (_S4, Package (0x04) // _S4_: S4 System State + { + 0x02, + 0x02, + Zero, + Zero + }) + Name (_S5, Package (0x04) // _S5_: S5 System State + { + Zero, + Zero, + Zero, + Zero + }) + } + + Scope (\_SB.PCI0) + { + Device (FWCF) + { + Name (_HID, "QEMU0002") // _HID: Hardware ID + Name (_STA, 0x0B) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0510, // Range Minimum + 0x0510, // Range Maximum + 0x01, // Alignment + 0x0C, // Length + ) + }) + } + } + + Scope (\_SB) + { + Scope (PCI0) + { + Device (S00) + { + Name (_ADR, Zero) // _ADR: Address + } + + Device (S08) + { + Name (_ADR, 0x00010000) // _ADR: Address + Method (_S1D, 0, NotSerialized) // _S1D: S1 Device State + { + Return (Zero) + } + + Method (_S2D, 0, NotSerialized) // _S2D: S2 Device State + { + Return (Zero) + } + + Method (_S3D, 0, NotSerialized) // _S3D: S3 Device State + { + Return (Zero) + } + } + + Device (TPM) + { + Name (_HID, "MSFT0101" /* TPM 2.0 Security Device */) // _HID: Hardware ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0xFED40000, // Address Base + 0x00005000, // Address Length + ) + }) + OperationRegion (TPP2, SystemMemory, 0xFED45100, 0x5A) + Field (TPP2, AnyAcc, NoLock, Preserve) + { + PPIN, 8, + PPIP, 32, + PPRP, 32, + PPRQ, 32, + PPRM, 32, + LPPR, 32 + } + + OperationRegion (TPP3, SystemMemory, 0xFED4515A, One) + Field (TPP3, ByteAcc, NoLock, Preserve) + { + MOVV, 8 + } + + Method (TPFN, 1, Serialized) + { + If ((Arg0 >= 0x0100)) + { + Return (Zero) + } + + OperationRegion (TPP1, SystemMemory, (0xFED45000 + Arg0), One) + Field (TPP1, ByteAcc, NoLock, Preserve) + { + TPPF, 8 + } + + Return (TPPF) /* \_SB_.PCI0.TPM_.TPFN.TPPF */ + } + + Name (TPM2, Package (0x02) + { + Zero, + Zero + }) + Name (TPM3, Package (0x03) + { + Zero, + Zero, + Zero + }) + Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method + { + If ((Arg0 == ToUUID ("3dddfaa6-361b-4eb4-a424-8d10089d1653") /* Physical Presence Interface */)) + { + If ((Arg2 == Zero)) + { + Return (Buffer (0x02) + { + 0xFF, 0x01 // .. + }) + } + + If ((Arg2 == One)) + { + Return ("1.3") + } + + If ((Arg2 == 0x02)) + { + Local0 = DerefOf (Arg3 [Zero]) + Local1 = TPFN (Local0) + If (((Local1 & 0x07) == Zero)) + { + Return (One) + } + + PPRQ = Local0 + PPRM = Zero + Return (Zero) + } + + If ((Arg2 == 0x03)) + { + If ((Arg1 == One)) + { + TPM2 [One] = PPRQ /* \_SB_.PCI0.TPM_.PPRQ */ + Return (TPM2) /* \_SB_.PCI0.TPM_.TPM2 */ + } + + If ((Arg1 == 0x02)) + { + TPM3 [One] = PPRQ /* \_SB_.PCI0.TPM_.PPRQ */ + TPM3 [0x02] = PPRM /* \_SB_.PCI0.TPM_.PPRM */ + Return (TPM3) /* \_SB_.PCI0.TPM_.TPM3 */ + } + } + + If ((Arg2 == 0x04)) + { + Return (0x02) + } + + If ((Arg2 == 0x05)) + { + TPM3 [One] = LPPR /* \_SB_.PCI0.TPM_.LPPR */ + TPM3 [0x02] = PPRP /* \_SB_.PCI0.TPM_.PPRP */ + Return (TPM3) /* \_SB_.PCI0.TPM_.TPM3 */ + } + + If ((Arg2 == 0x06)) + { + Return (0x03) + } + + If ((Arg2 == 0x07)) + { + Local0 = DerefOf (Arg3 [Zero]) + Local1 = TPFN (Local0) + If (((Local1 & 0x07) == Zero)) + { + Return (One) + } + + If (((Local1 & 0x07) == 0x02)) + { + Return (0x03) + } + + If ((Arg1 == One)) + { + PPRQ = Local0 + PPRM = Zero + } + + If ((Arg1 == 0x02)) + { + PPRQ = Local0 + PPRM = DerefOf (Arg3 [One]) + } + + Return (Zero) + } + + If ((Arg2 == 0x08)) + { + Local0 = DerefOf (Arg3 [Zero]) + Local1 = TPFN (Local0) + Return ((Local1 & 0x07)) + } + + Return (Buffer (One) + { + 0x00 // . + }) + } + + If ((Arg0 == ToUUID ("376054ed-cc13-4675-901c-4756d7f2d45d"))) + { + If ((Arg2 == Zero)) + { + Return (Buffer (One) + { + 0x03 // . + }) + } + + If ((Arg2 == One)) + { + Local0 = DerefOf (Arg3 [Zero]) + MOVV = Local0 + Return (Zero) + } + } + } + } + } + } +} + diff --git a/tests/data/acpi/q35/DSDT.ipmibt b/tests/data/acpi/q35/DSDT.ipmibt index 9a1b635dab776fb25e378a00e6ca0cadf9902c25..a650c3041ab9d6688eda843a6a2ab418e1a7ce9b 100644 GIT binary patch delta 33 ocmX?ZyWf_}CD>= 0x10 + If (((Local0 == Zero) || (Local0 == 0xFFFF))) + { + Return (Zero) + } + + If (((Local1 == Zero) || (Local1 > 0x05F5E100))) + { + Return (Zero) + } + + Return (0x0F) + } + + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadOnly, + 0xFED00000, // Address Base + 0x00000400, // Address Length + ) + }) + } + } + + Scope (_SB.PCI0) + { + Device (ISA) + { + Name (_ADR, 0x001F0000) // _ADR: Address + OperationRegion (PIRQ, PCI_Config, 0x60, 0x0C) + } + } + + Scope (_SB.PCI0.ISA) + { + Device (MI1) + { + Name (_HID, EisaId ("IPI0001")) // _HID: Hardware ID + Name (_STR, "ipmi_bt") // _STR: Description String + Name (_UID, One) // _UID: Unique ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x00E4, // Range Minimum + 0x00E6, // Range Maximum + 0x01, // Alignment + 0x03, // Length + ) + IRQNoFlags () + {5} + }) + Name (_IFT, 0x03) // _IFT: IPMI Interface Type + Name (_SRV, 0x0200) // _SRV: IPMI Spec Revision + } + + Device (KBD) + { + Name (_HID, EisaId ("PNP0303") /* IBM Enhanced Keyboard (101/102-key, PS/2 Mouse) */) // _HID: Hardware ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0060, // Range Minimum + 0x0060, // Range Maximum + 0x01, // Alignment + 0x01, // Length + ) + IO (Decode16, + 0x0064, // Range Minimum + 0x0064, // Range Maximum + 0x01, // Alignment + 0x01, // Length + ) + IRQNoFlags () + {1} + }) + } + + Device (MOU) + { + Name (_HID, EisaId ("PNP0F13") /* PS/2 Mouse */) // _HID: Hardware ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IRQNoFlags () + {12} + }) + } + + Device (LPT1) + { + Name (_HID, EisaId ("PNP0400") /* Standard LPT Parallel Port */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0378, // Range Minimum + 0x0378, // Range Maximum + 0x08, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {7} + }) + } + + Device (COM1) + { + Name (_HID, EisaId ("PNP0501") /* 16550A-compatible COM Serial Port */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x03F8, // Range Minimum + 0x03F8, // Range Maximum + 0x00, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {4} + }) + } + + Device (RTC) + { + Name (_HID, EisaId ("PNP0B00") /* AT Real-Time Clock */) // _HID: Hardware ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0070, // Range Minimum + 0x0070, // Range Maximum + 0x01, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {8} + }) + } + } + + Name (PICF, Zero) + Method (_PIC, 1, NotSerialized) // _PIC: Interrupt Model + { + PICF = Arg0 + } + + Scope (_SB) + { + Scope (PCI0) + { + Name (PRTP, Package (0x80) + { + Package (0x04) + { + 0xFFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0xFFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0xFFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0xFFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + 0x03, + LNKD, + Zero + } + }) + Name (PRTA, Package (0x80) + { + Package (0x04) + { + 0xFFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0xFFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0xFFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0xFFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + 0x03, + GSID, + Zero + } + }) + Method (_PRT, 0, NotSerialized) // _PRT: PCI Routing Table + { + If ((PICF == Zero)) + { + Return (PRTP) /* \_SB_.PCI0.PRTP */ + } + Else + { + Return (PRTA) /* \_SB_.PCI0.PRTA */ + } + } + } + + Field (PCI0.ISA.PIRQ, ByteAcc, NoLock, Preserve) + { + PRQA, 8, + PRQB, 8, + PRQC, 8, + PRQD, 8, + Offset (0x08), + PRQE, 8, + PRQF, 8, + PRQG, 8, + PRQH, 8 + } + + Method (IQST, 1, NotSerialized) + { + If ((0x80 & Arg0)) + { + Return (0x09) + } + + Return (0x0B) + } + + Method (IQCR, 1, Serialized) + { + Name (PRR0, ResourceTemplate () + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, _Y00) + { + 0x00000000, + } + }) + CreateDWordField (PRR0, \_SB.IQCR._Y00._INT, PRRI) // _INT: Interrupts + PRRI = (Arg0 & 0x0F) + Return (PRR0) /* \_SB_.IQCR.PRR0 */ + } + + Device (LNKA) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQA)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQA |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQA)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQA = PRRI /* \_SB_.LNKA._SRS.PRRI */ + } + } + + Device (LNKB) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQB)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQB |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQB)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQB = PRRI /* \_SB_.LNKB._SRS.PRRI */ + } + } + + Device (LNKC) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x02) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQC)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQC |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQC)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQC = PRRI /* \_SB_.LNKC._SRS.PRRI */ + } + } + + Device (LNKD) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x03) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQD)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQD |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQD)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQD = PRRI /* \_SB_.LNKD._SRS.PRRI */ + } + } + + Device (LNKE) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x04) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQE)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQE |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQE)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQE = PRRI /* \_SB_.LNKE._SRS.PRRI */ + } + } + + Device (LNKF) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x05) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQF)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQF |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQF)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQF = PRRI /* \_SB_.LNKF._SRS.PRRI */ + } + } + + Device (LNKG) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x06) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQG)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQG |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQG)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQG = PRRI /* \_SB_.LNKG._SRS.PRRI */ + } + } + + Device (LNKH) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x07) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQH)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQH |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQH)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQH = PRRI /* \_SB_.LNKH._SRS.PRRI */ + } + } + + Device (GSIA) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x10) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000010, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000010, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIB) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x11) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000011, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000011, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIC) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x12) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000012, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000012, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSID) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x13) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000013, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000013, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIE) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x14) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000014, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000014, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIF) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x15) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000015, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000015, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIG) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x16) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000016, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000016, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIH) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x17) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000017, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000017, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + } + + Scope (_SB.PCI0) + { + Device (SMB0) + { + Name (_ADR, 0x001F0003) // _ADR: Address + } + } + + Scope (_SB) + { + Device (\_SB.PCI0.PRES) + { + Name (_HID, EisaId ("PNP0A06") /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "CPU Hotplug resources") // _UID: Unique ID + Mutex (CPLK, 0x00) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0CD8, // Range Minimum + 0x0CD8, // Range Maximum + 0x01, // Alignment + 0x0C, // Length + ) + }) + OperationRegion (PRST, SystemIO, 0x0CD8, 0x0C) + Field (PRST, ByteAcc, NoLock, WriteAsZeros) + { + Offset (0x04), + CPEN, 1, + CINS, 1, + CRMV, 1, + CEJ0, 1, + Offset (0x05), + CCMD, 8 + } + + Field (PRST, DWordAcc, NoLock, Preserve) + { + CSEL, 32, + Offset (0x08), + CDAT, 32 + } + + Method (_INI, 0, Serialized) // _INI: Initialize + { + CSEL = Zero + } + } + + Device (\_SB.CPUS) + { + Name (_HID, "ACPI0010" /* Processor Container Device */) // _HID: Hardware ID + Name (_CID, EisaId ("PNP0A05") /* Generic Container Device */) // _CID: Compatible ID + Method (CTFY, 2, NotSerialized) + { + If ((Arg0 == Zero)) + { + Notify (C000, Arg1) + } + } + + Method (CSTA, 1, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + Local0 = Zero + If ((\_SB.PCI0.PRES.CPEN == One)) + { + Local0 = 0x0F + } + + Release (\_SB.PCI0.PRES.CPLK) + Return (Local0) + } + + Method (CEJ0, 1, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + \_SB.PCI0.PRES.CEJ0 = One + Release (\_SB.PCI0.PRES.CPLK) + } + + Method (CSCN, 0, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + Local0 = One + While ((Local0 == One)) + { + Local0 = Zero + \_SB.PCI0.PRES.CCMD = Zero + If ((\_SB.PCI0.PRES.CINS == One)) + { + CTFY (\_SB.PCI0.PRES.CDAT, One) + \_SB.PCI0.PRES.CINS = One + Local0 = One + } + ElseIf ((\_SB.PCI0.PRES.CRMV == One)) + { + CTFY (\_SB.PCI0.PRES.CDAT, 0x03) + \_SB.PCI0.PRES.CRMV = One + Local0 = One + } + } + + Release (\_SB.PCI0.PRES.CPLK) + } + + Method (COST, 4, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + \_SB.PCI0.PRES.CCMD = One + \_SB.PCI0.PRES.CDAT = Arg1 + \_SB.PCI0.PRES.CCMD = 0x02 + \_SB.PCI0.PRES.CDAT = Arg2 + Release (\_SB.PCI0.PRES.CPLK) + } + + Processor (C000, 0x00, 0x00000000, 0x00) + { + Method (_STA, 0, Serialized) // _STA: Status + { + Return (CSTA (Zero)) + } + + Name (_MAT, Buffer (0x08) // _MAT: Multiple APIC Table Entry + { + 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 // ........ + }) + Method (_OST, 3, Serialized) // _OST: OSPM Status Indication + { + COST (Zero, Arg0, Arg1, Arg2) + } + } + } + } + + Method (\_GPE._E02, 0, NotSerialized) // _Exx: Edge-Triggered GPE, xx=0x00-0xFF + { + \_SB.CPUS.CSCN () + } + + Scope (_GPE) + { + Name (_HID, "ACPI0006" /* GPE Block Device */) // _HID: Hardware ID + } + + Scope (\_SB.PCI0) + { + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode, + 0x0000, // Granularity + 0x0000, // Range Minimum + 0x00FF, // Range Maximum + 0x0000, // Translation Offset + 0x0100, // Length + ,, ) + IO (Decode16, + 0x0CF8, // Range Minimum + 0x0CF8, // Range Maximum + 0x01, // Alignment + 0x08, // Length + ) + WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, + 0x0000, // Granularity + 0x0000, // Range Minimum + 0x0CF7, // Range Maximum + 0x0000, // Translation Offset + 0x0CF8, // Length + ,, , TypeStatic, DenseTranslation) + WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, + 0x0000, // Granularity + 0x0D00, // Range Minimum + 0xFFFF, // Range Maximum + 0x0000, // Translation Offset + 0xF300, // Length + ,, , TypeStatic, DenseTranslation) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x00000000, // Granularity + 0x000A0000, // Range Minimum + 0x000BFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0x00020000, // Length + ,, , AddressRangeMemory, TypeStatic) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite, + 0x00000000, // Granularity + 0x08000000, // Range Minimum + 0xAFFFFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0xA8000000, // Length + ,, , AddressRangeMemory, TypeStatic) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite, + 0x00000000, // Granularity + 0xC0000000, // Range Minimum + 0xFEBFFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0x3EC00000, // Length + ,, , AddressRangeMemory, TypeStatic) + QWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x0000000000000000, // Granularity + 0x0000000100000000, // Range Minimum + 0x00000008FFFFFFFF, // Range Maximum + 0x0000000000000000, // Translation Offset + 0x0000000800000000, // Length + ,, , AddressRangeMemory, TypeStatic) + }) + Device (GPE0) + { + Name (_HID, "PNP0A06" /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "GPE0 resources") // _UID: Unique ID + Name (_STA, 0x0B) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0620, // Range Minimum + 0x0620, // Range Maximum + 0x01, // Alignment + 0x10, // Length + ) + }) + } + } + + Scope (\) + { + Name (_S3, Package (0x04) // _S3_: S3 System State + { + One, + One, + Zero, + Zero + }) + Name (_S4, Package (0x04) // _S4_: S4 System State + { + 0x02, + 0x02, + Zero, + Zero + }) + Name (_S5, Package (0x04) // _S5_: S5 System State + { + Zero, + Zero, + Zero, + Zero + }) + } + + Scope (\_SB.PCI0) + { + Device (FWCF) + { + Name (_HID, "QEMU0002") // _HID: Hardware ID + Name (_STA, 0x0B) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0510, // Range Minimum + 0x0510, // Range Maximum + 0x01, // Alignment + 0x0C, // Length + ) + }) + } + } + + Scope (\_SB) + { + Scope (PCI0) + { + Device (S00) + { + Name (_ADR, Zero) // _ADR: Address + } + + Device (S08) + { + Name (_ADR, 0x00010000) // _ADR: Address + Method (_S1D, 0, NotSerialized) // _S1D: S1 Device State + { + Return (Zero) + } + + Method (_S2D, 0, NotSerialized) // _S2D: S2 Device State + { + Return (Zero) + } + + Method (_S3D, 0, NotSerialized) // _S3D: S3 Device State + { + Return (Zero) + } + } + + Method (PCNT, 0, NotSerialized) + { + } + } + } +} + diff --git a/tests/data/acpi/q35/DSDT.memhp b/tests/data/acpi/q35/DSDT.memhp index 55ce4e2293624c2c0725c3bbaaa7ec29acfccfc9..85598ca3f68f437e8d5048e2cb9815f20b332152 100644 GIT binary patch delta 33 ocmX@@e%PJMCD>= 0x10 + If (((Local0 == Zero) || (Local0 == 0xFFFF))) + { + Return (Zero) + } + + If (((Local1 == Zero) || (Local1 > 0x05F5E100))) + { + Return (Zero) + } + + Return (0x0F) + } + + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadOnly, + 0xFED00000, // Address Base + 0x00000400, // Address Length + ) + }) + } + } + + Scope (_SB.PCI0) + { + Device (ISA) + { + Name (_ADR, 0x001F0000) // _ADR: Address + OperationRegion (PIRQ, PCI_Config, 0x60, 0x0C) + } + } + + Scope (_SB.PCI0.ISA) + { + Device (KBD) + { + Name (_HID, EisaId ("PNP0303") /* IBM Enhanced Keyboard (101/102-key, PS/2 Mouse) */) // _HID: Hardware ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0060, // Range Minimum + 0x0060, // Range Maximum + 0x01, // Alignment + 0x01, // Length + ) + IO (Decode16, + 0x0064, // Range Minimum + 0x0064, // Range Maximum + 0x01, // Alignment + 0x01, // Length + ) + IRQNoFlags () + {1} + }) + } + + Device (MOU) + { + Name (_HID, EisaId ("PNP0F13") /* PS/2 Mouse */) // _HID: Hardware ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IRQNoFlags () + {12} + }) + } + + Device (LPT1) + { + Name (_HID, EisaId ("PNP0400") /* Standard LPT Parallel Port */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0378, // Range Minimum + 0x0378, // Range Maximum + 0x08, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {7} + }) + } + + Device (COM1) + { + Name (_HID, EisaId ("PNP0501") /* 16550A-compatible COM Serial Port */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x03F8, // Range Minimum + 0x03F8, // Range Maximum + 0x00, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {4} + }) + } + + Device (RTC) + { + Name (_HID, EisaId ("PNP0B00") /* AT Real-Time Clock */) // _HID: Hardware ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0070, // Range Minimum + 0x0070, // Range Maximum + 0x01, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {8} + }) + } + } + + Name (PICF, Zero) + Method (_PIC, 1, NotSerialized) // _PIC: Interrupt Model + { + PICF = Arg0 + } + + Scope (_SB) + { + Scope (PCI0) + { + Name (PRTP, Package (0x80) + { + Package (0x04) + { + 0xFFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0xFFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0xFFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0xFFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + 0x03, + LNKD, + Zero + } + }) + Name (PRTA, Package (0x80) + { + Package (0x04) + { + 0xFFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0xFFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0xFFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0xFFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + 0x03, + GSID, + Zero + } + }) + Method (_PRT, 0, NotSerialized) // _PRT: PCI Routing Table + { + If ((PICF == Zero)) + { + Return (PRTP) /* \_SB_.PCI0.PRTP */ + } + Else + { + Return (PRTA) /* \_SB_.PCI0.PRTA */ + } + } + } + + Field (PCI0.ISA.PIRQ, ByteAcc, NoLock, Preserve) + { + PRQA, 8, + PRQB, 8, + PRQC, 8, + PRQD, 8, + Offset (0x08), + PRQE, 8, + PRQF, 8, + PRQG, 8, + PRQH, 8 + } + + Method (IQST, 1, NotSerialized) + { + If ((0x80 & Arg0)) + { + Return (0x09) + } + + Return (0x0B) + } + + Method (IQCR, 1, Serialized) + { + Name (PRR0, ResourceTemplate () + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, _Y00) + { + 0x00000000, + } + }) + CreateDWordField (PRR0, \_SB.IQCR._Y00._INT, PRRI) // _INT: Interrupts + PRRI = (Arg0 & 0x0F) + Return (PRR0) /* \_SB_.IQCR.PRR0 */ + } + + Device (LNKA) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQA)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQA |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQA)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQA = PRRI /* \_SB_.LNKA._SRS.PRRI */ + } + } + + Device (LNKB) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQB)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQB |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQB)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQB = PRRI /* \_SB_.LNKB._SRS.PRRI */ + } + } + + Device (LNKC) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x02) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQC)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQC |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQC)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQC = PRRI /* \_SB_.LNKC._SRS.PRRI */ + } + } + + Device (LNKD) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x03) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQD)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQD |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQD)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQD = PRRI /* \_SB_.LNKD._SRS.PRRI */ + } + } + + Device (LNKE) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x04) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQE)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQE |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQE)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQE = PRRI /* \_SB_.LNKE._SRS.PRRI */ + } + } + + Device (LNKF) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x05) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQF)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQF |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQF)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQF = PRRI /* \_SB_.LNKF._SRS.PRRI */ + } + } + + Device (LNKG) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x06) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQG)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQG |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQG)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQG = PRRI /* \_SB_.LNKG._SRS.PRRI */ + } + } + + Device (LNKH) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x07) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQH)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQH |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQH)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQH = PRRI /* \_SB_.LNKH._SRS.PRRI */ + } + } + + Device (GSIA) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x10) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000010, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000010, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIB) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x11) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000011, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000011, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIC) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x12) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000012, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000012, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSID) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x13) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000013, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000013, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIE) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x14) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000014, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000014, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIF) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x15) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000015, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000015, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIG) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x16) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000016, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000016, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIH) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x17) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000017, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000017, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + } + + Scope (_SB.PCI0) + { + Device (SMB0) + { + Name (_ADR, 0x001F0003) // _ADR: Address + } + } + + Scope (_SB) + { + Device (\_SB.PCI0.PRES) + { + Name (_HID, EisaId ("PNP0A06") /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "CPU Hotplug resources") // _UID: Unique ID + Mutex (CPLK, 0x00) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0CD8, // Range Minimum + 0x0CD8, // Range Maximum + 0x01, // Alignment + 0x0C, // Length + ) + }) + OperationRegion (PRST, SystemIO, 0x0CD8, 0x0C) + Field (PRST, ByteAcc, NoLock, WriteAsZeros) + { + Offset (0x04), + CPEN, 1, + CINS, 1, + CRMV, 1, + CEJ0, 1, + Offset (0x05), + CCMD, 8 + } + + Field (PRST, DWordAcc, NoLock, Preserve) + { + CSEL, 32, + Offset (0x08), + CDAT, 32 + } + + Method (_INI, 0, Serialized) // _INI: Initialize + { + CSEL = Zero + } + } + + Device (\_SB.CPUS) + { + Name (_HID, "ACPI0010" /* Processor Container Device */) // _HID: Hardware ID + Name (_CID, EisaId ("PNP0A05") /* Generic Container Device */) // _CID: Compatible ID + Method (CTFY, 2, NotSerialized) + { + If ((Arg0 == Zero)) + { + Notify (C000, Arg1) + } + } + + Method (CSTA, 1, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + Local0 = Zero + If ((\_SB.PCI0.PRES.CPEN == One)) + { + Local0 = 0x0F + } + + Release (\_SB.PCI0.PRES.CPLK) + Return (Local0) + } + + Method (CEJ0, 1, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + \_SB.PCI0.PRES.CEJ0 = One + Release (\_SB.PCI0.PRES.CPLK) + } + + Method (CSCN, 0, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + Local0 = One + While ((Local0 == One)) + { + Local0 = Zero + \_SB.PCI0.PRES.CCMD = Zero + If ((\_SB.PCI0.PRES.CINS == One)) + { + CTFY (\_SB.PCI0.PRES.CDAT, One) + \_SB.PCI0.PRES.CINS = One + Local0 = One + } + ElseIf ((\_SB.PCI0.PRES.CRMV == One)) + { + CTFY (\_SB.PCI0.PRES.CDAT, 0x03) + \_SB.PCI0.PRES.CRMV = One + Local0 = One + } + } + + Release (\_SB.PCI0.PRES.CPLK) + } + + Method (COST, 4, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + \_SB.PCI0.PRES.CCMD = One + \_SB.PCI0.PRES.CDAT = Arg1 + \_SB.PCI0.PRES.CCMD = 0x02 + \_SB.PCI0.PRES.CDAT = Arg2 + Release (\_SB.PCI0.PRES.CPLK) + } + + Processor (C000, 0x00, 0x00000000, 0x00) + { + Method (_STA, 0, Serialized) // _STA: Status + { + Return (CSTA (Zero)) + } + + Name (_MAT, Buffer (0x08) // _MAT: Multiple APIC Table Entry + { + 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 // ........ + }) + Method (_OST, 3, Serialized) // _OST: OSPM Status Indication + { + COST (Zero, Arg0, Arg1, Arg2) + } + + Name (_PXM, Zero) // _PXM: Device Proximity + } + } + } + + Method (\_GPE._E02, 0, NotSerialized) // _Exx: Edge-Triggered GPE, xx=0x00-0xFF + { + \_SB.CPUS.CSCN () + } + + Device (\_SB.PCI0.MHPD) + { + Name (_HID, "PNP0A06" /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "Memory hotplug resources") // _UID: Unique ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0A00, // Range Minimum + 0x0A00, // Range Maximum + 0x00, // Alignment + 0x18, // Length + ) + }) + OperationRegion (HPMR, SystemIO, 0x0A00, 0x18) + } + + Device (\_SB.MHPC) + { + Name (_HID, "PNP0A06" /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "DIMM devices") // _UID: Unique ID + Name (MDNR, 0x03) + Field (\_SB.PCI0.MHPD.HPMR, DWordAcc, NoLock, Preserve) + { + MRBL, 32, + MRBH, 32, + MRLL, 32, + MRLH, 32, + MPX, 32 + } + + Field (\_SB.PCI0.MHPD.HPMR, ByteAcc, NoLock, WriteAsZeros) + { + Offset (0x14), + MES, 1, + MINS, 1, + MRMV, 1, + MEJ, 1 + } + + Field (\_SB.PCI0.MHPD.HPMR, DWordAcc, NoLock, Preserve) + { + MSEL, 32, + MOEV, 32, + MOSC, 32 + } + + Method (_STA, 0, NotSerialized) // _STA: Status + { + If ((MDNR == Zero)) + { + Return (Zero) + } + + Return (0x0B) + } + + Mutex (MLCK, 0x00) + Method (MSCN, 0, NotSerialized) + { + If ((MDNR == Zero)) + { + Return (Zero) + } + + Local0 = Zero + Acquire (MLCK, 0xFFFF) + While ((Local0 < MDNR)) + { + MSEL = Local0 + If ((MINS == One)) + { + MTFY (Local0, One) + MINS = One + } + ElseIf ((MRMV == One)) + { + MTFY (Local0, 0x03) + MRMV = One + } + + Local0 += One + } + + Release (MLCK) + Return (One) + } + + Method (MRST, 1, NotSerialized) + { + Local0 = Zero + Acquire (MLCK, 0xFFFF) + MSEL = ToInteger (Arg0) + If ((MES == One)) + { + Local0 = 0x0F + } + + Release (MLCK) + Return (Local0) + } + + Method (MCRS, 1, Serialized) + { + Acquire (MLCK, 0xFFFF) + MSEL = ToInteger (Arg0) + Name (MR64, ResourceTemplate () + { + QWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x0000000000000000, // Granularity + 0x0000000000000000, // Range Minimum + 0xFFFFFFFFFFFFFFFE, // Range Maximum + 0x0000000000000000, // Translation Offset + 0xFFFFFFFFFFFFFFFF, // Length + ,, _Y01, AddressRangeMemory, TypeStatic) + }) + CreateDWordField (MR64, \_SB.MHPC.MCRS._Y01._MIN, MINL) // _MIN: Minimum Base Address + CreateDWordField (MR64, 0x12, MINH) + CreateDWordField (MR64, \_SB.MHPC.MCRS._Y01._LEN, LENL) // _LEN: Length + CreateDWordField (MR64, 0x2A, LENH) + CreateDWordField (MR64, \_SB.MHPC.MCRS._Y01._MAX, MAXL) // _MAX: Maximum Base Address + CreateDWordField (MR64, 0x1A, MAXH) + MINH = MRBH /* \_SB_.MHPC.MRBH */ + MINL = MRBL /* \_SB_.MHPC.MRBL */ + LENH = MRLH /* \_SB_.MHPC.MRLH */ + LENL = MRLL /* \_SB_.MHPC.MRLL */ + MAXL = (MINL + LENL) /* \_SB_.MHPC.MCRS.LENL */ + MAXH = (MINH + LENH) /* \_SB_.MHPC.MCRS.LENH */ + If ((MAXL < MINL)) + { + MAXH += One + } + + If ((MAXL < One)) + { + MAXH -= One + } + + MAXL -= One + If ((MAXH == Zero)) + { + Name (MR32, ResourceTemplate () + { + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x00000000, // Granularity + 0x00000000, // Range Minimum + 0xFFFFFFFE, // Range Maximum + 0x00000000, // Translation Offset + 0xFFFFFFFF, // Length + ,, _Y02, AddressRangeMemory, TypeStatic) + }) + CreateDWordField (MR32, \_SB.MHPC.MCRS._Y02._MIN, MIN) // _MIN: Minimum Base Address + CreateDWordField (MR32, \_SB.MHPC.MCRS._Y02._MAX, MAX) // _MAX: Maximum Base Address + CreateDWordField (MR32, \_SB.MHPC.MCRS._Y02._LEN, LEN) // _LEN: Length + MIN = MINL /* \_SB_.MHPC.MCRS.MINL */ + MAX = MAXL /* \_SB_.MHPC.MCRS.MAXL */ + LEN = LENL /* \_SB_.MHPC.MCRS.LENL */ + Release (MLCK) + Return (MR32) /* \_SB_.MHPC.MCRS.MR32 */ + } + + Release (MLCK) + Return (MR64) /* \_SB_.MHPC.MCRS.MR64 */ + } + + Method (MPXM, 1, NotSerialized) + { + Acquire (MLCK, 0xFFFF) + MSEL = ToInteger (Arg0) + Local0 = MPX /* \_SB_.MHPC.MPX_ */ + Release (MLCK) + Return (Local0) + } + + Method (MOST, 4, NotSerialized) + { + Acquire (MLCK, 0xFFFF) + MSEL = ToInteger (Arg0) + MOEV = Arg1 + MOSC = Arg2 + Release (MLCK) + } + + Method (MEJ0, 2, NotSerialized) + { + Acquire (MLCK, 0xFFFF) + MSEL = ToInteger (Arg0) + MEJ = One + Release (MLCK) + } + + Device (MP00) + { + Name (_UID, "0x00") // _UID: Unique ID + Name (_HID, EisaId ("PNP0C80") /* Memory Device */) // _HID: Hardware ID + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (MCRS (_UID)) + } + + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (MRST (_UID)) + } + + Method (_PXM, 0, NotSerialized) // _PXM: Device Proximity + { + Return (MPXM (_UID)) + } + + Method (_OST, 3, NotSerialized) // _OST: OSPM Status Indication + { + MOST (_UID, Arg0, Arg1, Arg2) + } + + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + MEJ0 (_UID, Arg0) + } + } + + Device (MP01) + { + Name (_UID, "0x01") // _UID: Unique ID + Name (_HID, EisaId ("PNP0C80") /* Memory Device */) // _HID: Hardware ID + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (MCRS (_UID)) + } + + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (MRST (_UID)) + } + + Method (_PXM, 0, NotSerialized) // _PXM: Device Proximity + { + Return (MPXM (_UID)) + } + + Method (_OST, 3, NotSerialized) // _OST: OSPM Status Indication + { + MOST (_UID, Arg0, Arg1, Arg2) + } + + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + MEJ0 (_UID, Arg0) + } + } + + Device (MP02) + { + Name (_UID, "0x02") // _UID: Unique ID + Name (_HID, EisaId ("PNP0C80") /* Memory Device */) // _HID: Hardware ID + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (MCRS (_UID)) + } + + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (MRST (_UID)) + } + + Method (_PXM, 0, NotSerialized) // _PXM: Device Proximity + { + Return (MPXM (_UID)) + } + + Method (_OST, 3, NotSerialized) // _OST: OSPM Status Indication + { + MOST (_UID, Arg0, Arg1, Arg2) + } + + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + MEJ0 (_UID, Arg0) + } + } + + Method (MTFY, 2, NotSerialized) + { + If ((Arg0 == Zero)) + { + Notify (MP00, Arg1) + } + + If ((Arg0 == One)) + { + Notify (MP01, Arg1) + } + + If ((Arg0 == 0x02)) + { + Notify (MP02, Arg1) + } + } + } + + Method (\_GPE._E03, 0, NotSerialized) // _Exx: Edge-Triggered GPE, xx=0x00-0xFF + { + \_SB.MHPC.MSCN () + } + + Scope (_GPE) + { + Name (_HID, "ACPI0006" /* GPE Block Device */) // _HID: Hardware ID + } + + Scope (\_SB.PCI0) + { + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode, + 0x0000, // Granularity + 0x0000, // Range Minimum + 0x00FF, // Range Maximum + 0x0000, // Translation Offset + 0x0100, // Length + ,, ) + IO (Decode16, + 0x0CF8, // Range Minimum + 0x0CF8, // Range Maximum + 0x01, // Alignment + 0x08, // Length + ) + WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, + 0x0000, // Granularity + 0x0000, // Range Minimum + 0x0CF7, // Range Maximum + 0x0000, // Translation Offset + 0x0CF8, // Length + ,, , TypeStatic, DenseTranslation) + WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, + 0x0000, // Granularity + 0x0D00, // Range Minimum + 0xFFFF, // Range Maximum + 0x0000, // Translation Offset + 0xF300, // Length + ,, , TypeStatic, DenseTranslation) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x00000000, // Granularity + 0x000A0000, // Range Minimum + 0x000BFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0x00020000, // Length + ,, , AddressRangeMemory, TypeStatic) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite, + 0x00000000, // Granularity + 0x08000000, // Range Minimum + 0xAFFFFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0xA8000000, // Length + ,, , AddressRangeMemory, TypeStatic) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite, + 0x00000000, // Granularity + 0xC0000000, // Range Minimum + 0xFEBFFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0x3EC00000, // Length + ,, , AddressRangeMemory, TypeStatic) + QWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x0000000000000000, // Granularity + 0x0000000200000000, // Range Minimum + 0x00000009FFFFFFFF, // Range Maximum + 0x0000000000000000, // Translation Offset + 0x0000000800000000, // Length + ,, , AddressRangeMemory, TypeStatic) + }) + Device (GPE0) + { + Name (_HID, "PNP0A06" /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "GPE0 resources") // _UID: Unique ID + Name (_STA, 0x0B) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0620, // Range Minimum + 0x0620, // Range Maximum + 0x01, // Alignment + 0x10, // Length + ) + }) + } + } + + Scope (\) + { + Name (_S3, Package (0x04) // _S3_: S3 System State + { + One, + One, + Zero, + Zero + }) + Name (_S4, Package (0x04) // _S4_: S4 System State + { + 0x02, + 0x02, + Zero, + Zero + }) + Name (_S5, Package (0x04) // _S5_: S5 System State + { + Zero, + Zero, + Zero, + Zero + }) + } + + Scope (\_SB.PCI0) + { + Device (FWCF) + { + Name (_HID, "QEMU0002") // _HID: Hardware ID + Name (_STA, 0x0B) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0510, // Range Minimum + 0x0510, // Range Maximum + 0x01, // Alignment + 0x0C, // Length + ) + }) + } + } + + Scope (\_SB) + { + Scope (PCI0) + { + Device (S00) + { + Name (_ADR, Zero) // _ADR: Address + } + + Device (S08) + { + Name (_ADR, 0x00010000) // _ADR: Address + Method (_S1D, 0, NotSerialized) // _S1D: S1 Device State + { + Return (Zero) + } + + Method (_S2D, 0, NotSerialized) // _S2D: S2 Device State + { + Return (Zero) + } + + Method (_S3D, 0, NotSerialized) // _S3D: S3 Device State + { + Return (Zero) + } + } + + Method (PCNT, 0, NotSerialized) + { + } + } + } +} + diff --git a/tests/data/acpi/q35/DSDT.mmio64 b/tests/data/acpi/q35/DSDT.mmio64 index 99b7b2ae4ba36b8ca7901626c1561d29100087d2..092fdc32628f5a145b510c2a46de8b02222b1951 100644 GIT binary patch delta 33 pcmaFndf%1HCD>= 0x10 + If (((Local0 == Zero) || (Local0 == 0xFFFF))) + { + Return (Zero) + } + + If (((Local1 == Zero) || (Local1 > 0x05F5E100))) + { + Return (Zero) + } + + Return (0x0F) + } + + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadOnly, + 0xFED00000, // Address Base + 0x00000400, // Address Length + ) + }) + } + } + + Scope (_SB.PCI0) + { + Device (ISA) + { + Name (_ADR, 0x001F0000) // _ADR: Address + OperationRegion (PIRQ, PCI_Config, 0x60, 0x0C) + } + } + + Scope (_SB.PCI0.ISA) + { + Device (KBD) + { + Name (_HID, EisaId ("PNP0303") /* IBM Enhanced Keyboard (101/102-key, PS/2 Mouse) */) // _HID: Hardware ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0060, // Range Minimum + 0x0060, // Range Maximum + 0x01, // Alignment + 0x01, // Length + ) + IO (Decode16, + 0x0064, // Range Minimum + 0x0064, // Range Maximum + 0x01, // Alignment + 0x01, // Length + ) + IRQNoFlags () + {1} + }) + } + + Device (MOU) + { + Name (_HID, EisaId ("PNP0F13") /* PS/2 Mouse */) // _HID: Hardware ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IRQNoFlags () + {12} + }) + } + + Device (LPT1) + { + Name (_HID, EisaId ("PNP0400") /* Standard LPT Parallel Port */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0378, // Range Minimum + 0x0378, // Range Maximum + 0x08, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {7} + }) + } + + Device (COM1) + { + Name (_HID, EisaId ("PNP0501") /* 16550A-compatible COM Serial Port */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x03F8, // Range Minimum + 0x03F8, // Range Maximum + 0x00, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {4} + }) + } + + Device (RTC) + { + Name (_HID, EisaId ("PNP0B00") /* AT Real-Time Clock */) // _HID: Hardware ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0070, // Range Minimum + 0x0070, // Range Maximum + 0x01, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {8} + }) + } + } + + Name (PICF, Zero) + Method (_PIC, 1, NotSerialized) // _PIC: Interrupt Model + { + PICF = Arg0 + } + + Scope (_SB) + { + Scope (PCI0) + { + Name (PRTP, Package (0x80) + { + Package (0x04) + { + 0xFFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0xFFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0xFFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0xFFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + 0x03, + LNKD, + Zero + } + }) + Name (PRTA, Package (0x80) + { + Package (0x04) + { + 0xFFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0xFFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0xFFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0xFFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + 0x03, + GSID, + Zero + } + }) + Method (_PRT, 0, NotSerialized) // _PRT: PCI Routing Table + { + If ((PICF == Zero)) + { + Return (PRTP) /* \_SB_.PCI0.PRTP */ + } + Else + { + Return (PRTA) /* \_SB_.PCI0.PRTA */ + } + } + } + + Field (PCI0.ISA.PIRQ, ByteAcc, NoLock, Preserve) + { + PRQA, 8, + PRQB, 8, + PRQC, 8, + PRQD, 8, + Offset (0x08), + PRQE, 8, + PRQF, 8, + PRQG, 8, + PRQH, 8 + } + + Method (IQST, 1, NotSerialized) + { + If ((0x80 & Arg0)) + { + Return (0x09) + } + + Return (0x0B) + } + + Method (IQCR, 1, Serialized) + { + Name (PRR0, ResourceTemplate () + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, _Y00) + { + 0x00000000, + } + }) + CreateDWordField (PRR0, \_SB.IQCR._Y00._INT, PRRI) // _INT: Interrupts + PRRI = (Arg0 & 0x0F) + Return (PRR0) /* \_SB_.IQCR.PRR0 */ + } + + Device (LNKA) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQA)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQA |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQA)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQA = PRRI /* \_SB_.LNKA._SRS.PRRI */ + } + } + + Device (LNKB) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQB)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQB |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQB)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQB = PRRI /* \_SB_.LNKB._SRS.PRRI */ + } + } + + Device (LNKC) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x02) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQC)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQC |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQC)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQC = PRRI /* \_SB_.LNKC._SRS.PRRI */ + } + } + + Device (LNKD) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x03) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQD)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQD |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQD)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQD = PRRI /* \_SB_.LNKD._SRS.PRRI */ + } + } + + Device (LNKE) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x04) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQE)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQE |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQE)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQE = PRRI /* \_SB_.LNKE._SRS.PRRI */ + } + } + + Device (LNKF) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x05) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQF)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQF |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQF)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQF = PRRI /* \_SB_.LNKF._SRS.PRRI */ + } + } + + Device (LNKG) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x06) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQG)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQG |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQG)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQG = PRRI /* \_SB_.LNKG._SRS.PRRI */ + } + } + + Device (LNKH) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x07) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQH)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQH |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQH)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQH = PRRI /* \_SB_.LNKH._SRS.PRRI */ + } + } + + Device (GSIA) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x10) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000010, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000010, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIB) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x11) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000011, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000011, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIC) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x12) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000012, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000012, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSID) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x13) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000013, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000013, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIE) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x14) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000014, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000014, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIF) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x15) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000015, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000015, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIG) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x16) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000016, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000016, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIH) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x17) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000017, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000017, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + } + + Scope (_SB.PCI0) + { + Device (SMB0) + { + Name (_ADR, 0x001F0003) // _ADR: Address + } + } + + Scope (_SB) + { + Device (\_SB.PCI0.PRES) + { + Name (_HID, EisaId ("PNP0A06") /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "CPU Hotplug resources") // _UID: Unique ID + Mutex (CPLK, 0x00) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0CD8, // Range Minimum + 0x0CD8, // Range Maximum + 0x01, // Alignment + 0x0C, // Length + ) + }) + OperationRegion (PRST, SystemIO, 0x0CD8, 0x0C) + Field (PRST, ByteAcc, NoLock, WriteAsZeros) + { + Offset (0x04), + CPEN, 1, + CINS, 1, + CRMV, 1, + CEJ0, 1, + Offset (0x05), + CCMD, 8 + } + + Field (PRST, DWordAcc, NoLock, Preserve) + { + CSEL, 32, + Offset (0x08), + CDAT, 32 + } + + Method (_INI, 0, Serialized) // _INI: Initialize + { + CSEL = Zero + } + } + + Device (\_SB.CPUS) + { + Name (_HID, "ACPI0010" /* Processor Container Device */) // _HID: Hardware ID + Name (_CID, EisaId ("PNP0A05") /* Generic Container Device */) // _CID: Compatible ID + Method (CTFY, 2, NotSerialized) + { + If ((Arg0 == Zero)) + { + Notify (C000, Arg1) + } + } + + Method (CSTA, 1, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + Local0 = Zero + If ((\_SB.PCI0.PRES.CPEN == One)) + { + Local0 = 0x0F + } + + Release (\_SB.PCI0.PRES.CPLK) + Return (Local0) + } + + Method (CEJ0, 1, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + \_SB.PCI0.PRES.CEJ0 = One + Release (\_SB.PCI0.PRES.CPLK) + } + + Method (CSCN, 0, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + Local0 = One + While ((Local0 == One)) + { + Local0 = Zero + \_SB.PCI0.PRES.CCMD = Zero + If ((\_SB.PCI0.PRES.CINS == One)) + { + CTFY (\_SB.PCI0.PRES.CDAT, One) + \_SB.PCI0.PRES.CINS = One + Local0 = One + } + ElseIf ((\_SB.PCI0.PRES.CRMV == One)) + { + CTFY (\_SB.PCI0.PRES.CDAT, 0x03) + \_SB.PCI0.PRES.CRMV = One + Local0 = One + } + } + + Release (\_SB.PCI0.PRES.CPLK) + } + + Method (COST, 4, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + \_SB.PCI0.PRES.CCMD = One + \_SB.PCI0.PRES.CDAT = Arg1 + \_SB.PCI0.PRES.CCMD = 0x02 + \_SB.PCI0.PRES.CDAT = Arg2 + Release (\_SB.PCI0.PRES.CPLK) + } + + Processor (C000, 0x00, 0x00000000, 0x00) + { + Method (_STA, 0, Serialized) // _STA: Status + { + Return (CSTA (Zero)) + } + + Name (_MAT, Buffer (0x08) // _MAT: Multiple APIC Table Entry + { + 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 // ........ + }) + Method (_OST, 3, Serialized) // _OST: OSPM Status Indication + { + COST (Zero, Arg0, Arg1, Arg2) + } + + Name (_PXM, Zero) // _PXM: Device Proximity + } + } + } + + Method (\_GPE._E02, 0, NotSerialized) // _Exx: Edge-Triggered GPE, xx=0x00-0xFF + { + \_SB.CPUS.CSCN () + } + + Device (\_SB.PCI0.MHPD) + { + Name (_HID, "PNP0A06" /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "Memory hotplug resources") // _UID: Unique ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0A00, // Range Minimum + 0x0A00, // Range Maximum + 0x00, // Alignment + 0x18, // Length + ) + }) + OperationRegion (HPMR, SystemIO, 0x0A00, 0x18) + } + + Device (\_SB.MHPC) + { + Name (_HID, "PNP0A06" /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "DIMM devices") // _UID: Unique ID + Name (MDNR, One) + Field (\_SB.PCI0.MHPD.HPMR, DWordAcc, NoLock, Preserve) + { + MRBL, 32, + MRBH, 32, + MRLL, 32, + MRLH, 32, + MPX, 32 + } + + Field (\_SB.PCI0.MHPD.HPMR, ByteAcc, NoLock, WriteAsZeros) + { + Offset (0x14), + MES, 1, + MINS, 1, + MRMV, 1, + MEJ, 1 + } + + Field (\_SB.PCI0.MHPD.HPMR, DWordAcc, NoLock, Preserve) + { + MSEL, 32, + MOEV, 32, + MOSC, 32 + } + + Method (_STA, 0, NotSerialized) // _STA: Status + { + If ((MDNR == Zero)) + { + Return (Zero) + } + + Return (0x0B) + } + + Mutex (MLCK, 0x00) + Method (MSCN, 0, NotSerialized) + { + If ((MDNR == Zero)) + { + Return (Zero) + } + + Local0 = Zero + Acquire (MLCK, 0xFFFF) + While ((Local0 < MDNR)) + { + MSEL = Local0 + If ((MINS == One)) + { + MTFY (Local0, One) + MINS = One + } + ElseIf ((MRMV == One)) + { + MTFY (Local0, 0x03) + MRMV = One + } + + Local0 += One + } + + Release (MLCK) + Return (One) + } + + Method (MRST, 1, NotSerialized) + { + Local0 = Zero + Acquire (MLCK, 0xFFFF) + MSEL = ToInteger (Arg0) + If ((MES == One)) + { + Local0 = 0x0F + } + + Release (MLCK) + Return (Local0) + } + + Method (MCRS, 1, Serialized) + { + Acquire (MLCK, 0xFFFF) + MSEL = ToInteger (Arg0) + Name (MR64, ResourceTemplate () + { + QWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x0000000000000000, // Granularity + 0x0000000000000000, // Range Minimum + 0xFFFFFFFFFFFFFFFE, // Range Maximum + 0x0000000000000000, // Translation Offset + 0xFFFFFFFFFFFFFFFF, // Length + ,, _Y01, AddressRangeMemory, TypeStatic) + }) + CreateDWordField (MR64, \_SB.MHPC.MCRS._Y01._MIN, MINL) // _MIN: Minimum Base Address + CreateDWordField (MR64, 0x12, MINH) + CreateDWordField (MR64, \_SB.MHPC.MCRS._Y01._LEN, LENL) // _LEN: Length + CreateDWordField (MR64, 0x2A, LENH) + CreateDWordField (MR64, \_SB.MHPC.MCRS._Y01._MAX, MAXL) // _MAX: Maximum Base Address + CreateDWordField (MR64, 0x1A, MAXH) + MINH = MRBH /* \_SB_.MHPC.MRBH */ + MINL = MRBL /* \_SB_.MHPC.MRBL */ + LENH = MRLH /* \_SB_.MHPC.MRLH */ + LENL = MRLL /* \_SB_.MHPC.MRLL */ + MAXL = (MINL + LENL) /* \_SB_.MHPC.MCRS.LENL */ + MAXH = (MINH + LENH) /* \_SB_.MHPC.MCRS.LENH */ + If ((MAXL < MINL)) + { + MAXH += One + } + + If ((MAXL < One)) + { + MAXH -= One + } + + MAXL -= One + If ((MAXH == Zero)) + { + Name (MR32, ResourceTemplate () + { + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x00000000, // Granularity + 0x00000000, // Range Minimum + 0xFFFFFFFE, // Range Maximum + 0x00000000, // Translation Offset + 0xFFFFFFFF, // Length + ,, _Y02, AddressRangeMemory, TypeStatic) + }) + CreateDWordField (MR32, \_SB.MHPC.MCRS._Y02._MIN, MIN) // _MIN: Minimum Base Address + CreateDWordField (MR32, \_SB.MHPC.MCRS._Y02._MAX, MAX) // _MAX: Maximum Base Address + CreateDWordField (MR32, \_SB.MHPC.MCRS._Y02._LEN, LEN) // _LEN: Length + MIN = MINL /* \_SB_.MHPC.MCRS.MINL */ + MAX = MAXL /* \_SB_.MHPC.MCRS.MAXL */ + LEN = LENL /* \_SB_.MHPC.MCRS.LENL */ + Release (MLCK) + Return (MR32) /* \_SB_.MHPC.MCRS.MR32 */ + } + + Release (MLCK) + Return (MR64) /* \_SB_.MHPC.MCRS.MR64 */ + } + + Method (MPXM, 1, NotSerialized) + { + Acquire (MLCK, 0xFFFF) + MSEL = ToInteger (Arg0) + Local0 = MPX /* \_SB_.MHPC.MPX_ */ + Release (MLCK) + Return (Local0) + } + + Method (MOST, 4, NotSerialized) + { + Acquire (MLCK, 0xFFFF) + MSEL = ToInteger (Arg0) + MOEV = Arg1 + MOSC = Arg2 + Release (MLCK) + } + + Method (MEJ0, 2, NotSerialized) + { + Acquire (MLCK, 0xFFFF) + MSEL = ToInteger (Arg0) + MEJ = One + Release (MLCK) + } + + Device (MP00) + { + Name (_UID, "0x00") // _UID: Unique ID + Name (_HID, EisaId ("PNP0C80") /* Memory Device */) // _HID: Hardware ID + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (MCRS (_UID)) + } + + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (MRST (_UID)) + } + + Method (_PXM, 0, NotSerialized) // _PXM: Device Proximity + { + Return (MPXM (_UID)) + } + + Method (_OST, 3, NotSerialized) // _OST: OSPM Status Indication + { + MOST (_UID, Arg0, Arg1, Arg2) + } + + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + MEJ0 (_UID, Arg0) + } + } + + Method (MTFY, 2, NotSerialized) + { + If ((Arg0 == Zero)) + { + Notify (MP00, Arg1) + } + } + } + + Method (\_GPE._E03, 0, NotSerialized) // _Exx: Edge-Triggered GPE, xx=0x00-0xFF + { + \_SB.MHPC.MSCN () + } + + Scope (_GPE) + { + Name (_HID, "ACPI0006" /* GPE Block Device */) // _HID: Hardware ID + } + + Scope (\_SB.PCI0) + { + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode, + 0x0000, // Granularity + 0x0000, // Range Minimum + 0x00FF, // Range Maximum + 0x0000, // Translation Offset + 0x0100, // Length + ,, ) + IO (Decode16, + 0x0CF8, // Range Minimum + 0x0CF8, // Range Maximum + 0x01, // Alignment + 0x08, // Length + ) + WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, + 0x0000, // Granularity + 0x0000, // Range Minimum + 0x0CF7, // Range Maximum + 0x0000, // Translation Offset + 0x0CF8, // Length + ,, , TypeStatic, DenseTranslation) + WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, + 0x0000, // Granularity + 0x0D00, // Range Minimum + 0xFFFF, // Range Maximum + 0x0000, // Translation Offset + 0xF300, // Length + ,, , TypeStatic, DenseTranslation) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x00000000, // Granularity + 0x000A0000, // Range Minimum + 0x000BFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0x00020000, // Length + ,, , AddressRangeMemory, TypeStatic) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite, + 0x00000000, // Granularity + 0x08000000, // Range Minimum + 0xAFFFFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0xA8000000, // Length + ,, , AddressRangeMemory, TypeStatic) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite, + 0x00000000, // Granularity + 0xC0000000, // Range Minimum + 0xFEBFFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0x3EC00000, // Length + ,, , AddressRangeMemory, TypeStatic) + QWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x0000000000000000, // Granularity + 0x0000000200000000, // Range Minimum + 0x00000009FFFFFFFF, // Range Maximum + 0x0000000000000000, // Translation Offset + 0x0000000800000000, // Length + ,, , AddressRangeMemory, TypeStatic) + }) + Device (GPE0) + { + Name (_HID, "PNP0A06" /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "GPE0 resources") // _UID: Unique ID + Name (_STA, 0x0B) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0620, // Range Minimum + 0x0620, // Range Maximum + 0x01, // Alignment + 0x10, // Length + ) + }) + } + } + + Scope (\) + { + Name (_S3, Package (0x04) // _S3_: S3 System State + { + One, + One, + Zero, + Zero + }) + Name (_S4, Package (0x04) // _S4_: S4 System State + { + 0x02, + 0x02, + Zero, + Zero + }) + Name (_S5, Package (0x04) // _S5_: S5 System State + { + Zero, + Zero, + Zero, + Zero + }) + } + + Scope (\_SB.PCI0) + { + Device (FWCF) + { + Name (_HID, "QEMU0002") // _HID: Hardware ID + Name (_STA, 0x0B) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0510, // Range Minimum + 0x0510, // Range Maximum + 0x01, // Alignment + 0x0C, // Length + ) + }) + } + } + + Scope (\_SB) + { + Scope (PCI0) + { + Device (S00) + { + Name (_ADR, Zero) // _ADR: Address + } + + Device (S08) + { + Name (_ADR, 0x00010000) // _ADR: Address + Method (_S1D, 0, NotSerialized) // _S1D: S1 Device State + { + Return (Zero) + } + + Method (_S2D, 0, NotSerialized) // _S2D: S2 Device State + { + Return (Zero) + } + + Method (_S3D, 0, NotSerialized) // _S3D: S3 Device State + { + Return (Zero) + } + } + + Device (S10) + { + Name (_ADR, 0x00020000) // _ADR: Address + } + + Method (PCNT, 0, NotSerialized) + { + } + } + } +} + diff --git a/tests/data/acpi/q35/DSDT.numamem b/tests/data/acpi/q35/DSDT.numamem index 2b2433cc13ec3110abbc8440a0b1ad8c487edb6c..899946255b9111e077e06c5f78be860e863911b9 100644 GIT binary patch delta 33 ocmZp&{bj@D66_LECC9+PcxEG)mK>)WOH6#QQ@nuPWIH)q0Hvo16951J delta 42 xcmexm(`3u#66_MvB*(zOn7ENkOODHrB_=-DDPF*hWwNcDExQO?fU{o+0|4^g3K{?a diff --git a/tests/data/acpi/q35/DSDT.numamem.dsl b/tests/data/acpi/q35/DSDT.numamem.dsl new file mode 100644 index 0000000000..e76de462f0 --- /dev/null +++ b/tests/data/acpi/q35/DSDT.numamem.dsl @@ -0,0 +1,3138 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembling to symbolic ASL+ operators + * + * Disassembly of tests/data/acpi/q35/DSDT.numamem, Tue Aug 4 11:14:15 2020 + * + * Original Table Header: + * Signature "DSDT" + * Length 0x00001E04 (7684) + * Revision 0x01 **** 32-bit table (V1), no 64-bit math support + * Checksum 0x55 + * OEM ID "BOCHS " + * OEM Table ID "BXPCDSDT" + * OEM Revision 0x00000001 (1) + * Compiler ID "BXPC" + * Compiler Version 0x00000001 (1) + */ +DefinitionBlock ("", "DSDT", 1, "BOCHS ", "BXPCDSDT", 0x00000001) +{ + Scope (\) + { + OperationRegion (DBG, SystemIO, 0x0402, One) + Field (DBG, ByteAcc, NoLock, Preserve) + { + DBGB, 8 + } + + Method (DBUG, 1, NotSerialized) + { + ToHexString (Arg0, Local0) + ToBuffer (Local0, Local0) + Local1 = (SizeOf (Local0) - One) + Local2 = Zero + While ((Local2 < Local1)) + { + DBGB = DerefOf (Local0 [Local2]) + Local2++ + } + + DBGB = 0x0A + } + } + + Scope (_SB) + { + Device (PCI0) + { + Name (_HID, EisaId ("PNP0A08") /* PCI Express Bus */) // _HID: Hardware ID + Name (_CID, EisaId ("PNP0A03") /* PCI Bus */) // _CID: Compatible ID + Name (_ADR, Zero) // _ADR: Address + Name (_UID, Zero) // _UID: Unique ID + Method (_OSC, 4, NotSerialized) // _OSC: Operating System Capabilities + { + CreateDWordField (Arg3, Zero, CDW1) + If ((Arg0 == ToUUID ("33db4d5b-1ff7-401c-9657-7441c03dd766") /* PCI Host Bridge Device */)) + { + CreateDWordField (Arg3, 0x04, CDW2) + CreateDWordField (Arg3, 0x08, CDW3) + Local0 = CDW3 /* \_SB_.PCI0._OSC.CDW3 */ + Local0 &= 0x1F + If ((Arg1 != One)) + { + CDW1 |= 0x08 + } + + If ((CDW3 != Local0)) + { + CDW1 |= 0x10 + } + + CDW3 = Local0 + } + Else + { + CDW1 |= 0x04 + } + + Return (Arg3) + } + } + } + + Scope (_SB) + { + Device (HPET) + { + Name (_HID, EisaId ("PNP0103") /* HPET System Timer */) // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + OperationRegion (HPTM, SystemMemory, 0xFED00000, 0x0400) + Field (HPTM, DWordAcc, Lock, Preserve) + { + VEND, 32, + PRD, 32 + } + + Method (_STA, 0, NotSerialized) // _STA: Status + { + Local0 = VEND /* \_SB_.HPET.VEND */ + Local1 = PRD /* \_SB_.HPET.PRD_ */ + Local0 >>= 0x10 + If (((Local0 == Zero) || (Local0 == 0xFFFF))) + { + Return (Zero) + } + + If (((Local1 == Zero) || (Local1 > 0x05F5E100))) + { + Return (Zero) + } + + Return (0x0F) + } + + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadOnly, + 0xFED00000, // Address Base + 0x00000400, // Address Length + ) + }) + } + } + + Scope (_SB.PCI0) + { + Device (ISA) + { + Name (_ADR, 0x001F0000) // _ADR: Address + OperationRegion (PIRQ, PCI_Config, 0x60, 0x0C) + } + } + + Scope (_SB.PCI0.ISA) + { + Device (KBD) + { + Name (_HID, EisaId ("PNP0303") /* IBM Enhanced Keyboard (101/102-key, PS/2 Mouse) */) // _HID: Hardware ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0060, // Range Minimum + 0x0060, // Range Maximum + 0x01, // Alignment + 0x01, // Length + ) + IO (Decode16, + 0x0064, // Range Minimum + 0x0064, // Range Maximum + 0x01, // Alignment + 0x01, // Length + ) + IRQNoFlags () + {1} + }) + } + + Device (MOU) + { + Name (_HID, EisaId ("PNP0F13") /* PS/2 Mouse */) // _HID: Hardware ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IRQNoFlags () + {12} + }) + } + + Device (LPT1) + { + Name (_HID, EisaId ("PNP0400") /* Standard LPT Parallel Port */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0378, // Range Minimum + 0x0378, // Range Maximum + 0x08, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {7} + }) + } + + Device (COM1) + { + Name (_HID, EisaId ("PNP0501") /* 16550A-compatible COM Serial Port */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x03F8, // Range Minimum + 0x03F8, // Range Maximum + 0x00, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {4} + }) + } + + Device (RTC) + { + Name (_HID, EisaId ("PNP0B00") /* AT Real-Time Clock */) // _HID: Hardware ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0070, // Range Minimum + 0x0070, // Range Maximum + 0x01, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {8} + }) + } + } + + Name (PICF, Zero) + Method (_PIC, 1, NotSerialized) // _PIC: Interrupt Model + { + PICF = Arg0 + } + + Scope (_SB) + { + Scope (PCI0) + { + Name (PRTP, Package (0x80) + { + Package (0x04) + { + 0xFFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0xFFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0xFFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0xFFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + 0x03, + LNKD, + Zero + } + }) + Name (PRTA, Package (0x80) + { + Package (0x04) + { + 0xFFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0xFFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0xFFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0xFFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + 0x03, + GSID, + Zero + } + }) + Method (_PRT, 0, NotSerialized) // _PRT: PCI Routing Table + { + If ((PICF == Zero)) + { + Return (PRTP) /* \_SB_.PCI0.PRTP */ + } + Else + { + Return (PRTA) /* \_SB_.PCI0.PRTA */ + } + } + } + + Field (PCI0.ISA.PIRQ, ByteAcc, NoLock, Preserve) + { + PRQA, 8, + PRQB, 8, + PRQC, 8, + PRQD, 8, + Offset (0x08), + PRQE, 8, + PRQF, 8, + PRQG, 8, + PRQH, 8 + } + + Method (IQST, 1, NotSerialized) + { + If ((0x80 & Arg0)) + { + Return (0x09) + } + + Return (0x0B) + } + + Method (IQCR, 1, Serialized) + { + Name (PRR0, ResourceTemplate () + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, _Y00) + { + 0x00000000, + } + }) + CreateDWordField (PRR0, \_SB.IQCR._Y00._INT, PRRI) // _INT: Interrupts + PRRI = (Arg0 & 0x0F) + Return (PRR0) /* \_SB_.IQCR.PRR0 */ + } + + Device (LNKA) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQA)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQA |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQA)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQA = PRRI /* \_SB_.LNKA._SRS.PRRI */ + } + } + + Device (LNKB) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQB)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQB |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQB)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQB = PRRI /* \_SB_.LNKB._SRS.PRRI */ + } + } + + Device (LNKC) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x02) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQC)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQC |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQC)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQC = PRRI /* \_SB_.LNKC._SRS.PRRI */ + } + } + + Device (LNKD) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x03) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQD)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQD |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQD)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQD = PRRI /* \_SB_.LNKD._SRS.PRRI */ + } + } + + Device (LNKE) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x04) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQE)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQE |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQE)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQE = PRRI /* \_SB_.LNKE._SRS.PRRI */ + } + } + + Device (LNKF) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x05) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQF)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQF |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQF)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQF = PRRI /* \_SB_.LNKF._SRS.PRRI */ + } + } + + Device (LNKG) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x06) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQG)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQG |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQG)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQG = PRRI /* \_SB_.LNKG._SRS.PRRI */ + } + } + + Device (LNKH) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x07) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQH)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQH |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQH)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQH = PRRI /* \_SB_.LNKH._SRS.PRRI */ + } + } + + Device (GSIA) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x10) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000010, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000010, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIB) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x11) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000011, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000011, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIC) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x12) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000012, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000012, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSID) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x13) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000013, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000013, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIE) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x14) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000014, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000014, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIF) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x15) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000015, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000015, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIG) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x16) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000016, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000016, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIH) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x17) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000017, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000017, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + } + + Scope (_SB.PCI0) + { + Device (SMB0) + { + Name (_ADR, 0x001F0003) // _ADR: Address + } + } + + Scope (_SB) + { + Device (\_SB.PCI0.PRES) + { + Name (_HID, EisaId ("PNP0A06") /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "CPU Hotplug resources") // _UID: Unique ID + Mutex (CPLK, 0x00) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0CD8, // Range Minimum + 0x0CD8, // Range Maximum + 0x01, // Alignment + 0x0C, // Length + ) + }) + OperationRegion (PRST, SystemIO, 0x0CD8, 0x0C) + Field (PRST, ByteAcc, NoLock, WriteAsZeros) + { + Offset (0x04), + CPEN, 1, + CINS, 1, + CRMV, 1, + CEJ0, 1, + Offset (0x05), + CCMD, 8 + } + + Field (PRST, DWordAcc, NoLock, Preserve) + { + CSEL, 32, + Offset (0x08), + CDAT, 32 + } + + Method (_INI, 0, Serialized) // _INI: Initialize + { + CSEL = Zero + } + } + + Device (\_SB.CPUS) + { + Name (_HID, "ACPI0010" /* Processor Container Device */) // _HID: Hardware ID + Name (_CID, EisaId ("PNP0A05") /* Generic Container Device */) // _CID: Compatible ID + Method (CTFY, 2, NotSerialized) + { + If ((Arg0 == Zero)) + { + Notify (C000, Arg1) + } + } + + Method (CSTA, 1, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + Local0 = Zero + If ((\_SB.PCI0.PRES.CPEN == One)) + { + Local0 = 0x0F + } + + Release (\_SB.PCI0.PRES.CPLK) + Return (Local0) + } + + Method (CEJ0, 1, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + \_SB.PCI0.PRES.CEJ0 = One + Release (\_SB.PCI0.PRES.CPLK) + } + + Method (CSCN, 0, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + Local0 = One + While ((Local0 == One)) + { + Local0 = Zero + \_SB.PCI0.PRES.CCMD = Zero + If ((\_SB.PCI0.PRES.CINS == One)) + { + CTFY (\_SB.PCI0.PRES.CDAT, One) + \_SB.PCI0.PRES.CINS = One + Local0 = One + } + ElseIf ((\_SB.PCI0.PRES.CRMV == One)) + { + CTFY (\_SB.PCI0.PRES.CDAT, 0x03) + \_SB.PCI0.PRES.CRMV = One + Local0 = One + } + } + + Release (\_SB.PCI0.PRES.CPLK) + } + + Method (COST, 4, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + \_SB.PCI0.PRES.CCMD = One + \_SB.PCI0.PRES.CDAT = Arg1 + \_SB.PCI0.PRES.CCMD = 0x02 + \_SB.PCI0.PRES.CDAT = Arg2 + Release (\_SB.PCI0.PRES.CPLK) + } + + Processor (C000, 0x00, 0x00000000, 0x00) + { + Method (_STA, 0, Serialized) // _STA: Status + { + Return (CSTA (Zero)) + } + + Name (_MAT, Buffer (0x08) // _MAT: Multiple APIC Table Entry + { + 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 // ........ + }) + Method (_OST, 3, Serialized) // _OST: OSPM Status Indication + { + COST (Zero, Arg0, Arg1, Arg2) + } + + Name (_PXM, Zero) // _PXM: Device Proximity + } + } + } + + Method (\_GPE._E02, 0, NotSerialized) // _Exx: Edge-Triggered GPE, xx=0x00-0xFF + { + \_SB.CPUS.CSCN () + } + + Scope (_GPE) + { + Name (_HID, "ACPI0006" /* GPE Block Device */) // _HID: Hardware ID + } + + Scope (\_SB.PCI0) + { + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode, + 0x0000, // Granularity + 0x0000, // Range Minimum + 0x00FF, // Range Maximum + 0x0000, // Translation Offset + 0x0100, // Length + ,, ) + IO (Decode16, + 0x0CF8, // Range Minimum + 0x0CF8, // Range Maximum + 0x01, // Alignment + 0x08, // Length + ) + WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, + 0x0000, // Granularity + 0x0000, // Range Minimum + 0x0CF7, // Range Maximum + 0x0000, // Translation Offset + 0x0CF8, // Length + ,, , TypeStatic, DenseTranslation) + WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, + 0x0000, // Granularity + 0x0D00, // Range Minimum + 0xFFFF, // Range Maximum + 0x0000, // Translation Offset + 0xF300, // Length + ,, , TypeStatic, DenseTranslation) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x00000000, // Granularity + 0x000A0000, // Range Minimum + 0x000BFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0x00020000, // Length + ,, , AddressRangeMemory, TypeStatic) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite, + 0x00000000, // Granularity + 0x08000000, // Range Minimum + 0xAFFFFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0xA8000000, // Length + ,, , AddressRangeMemory, TypeStatic) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite, + 0x00000000, // Granularity + 0xC0000000, // Range Minimum + 0xFEBFFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0x3EC00000, // Length + ,, , AddressRangeMemory, TypeStatic) + QWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x0000000000000000, // Granularity + 0x0000000100000000, // Range Minimum + 0x00000008FFFFFFFF, // Range Maximum + 0x0000000000000000, // Translation Offset + 0x0000000800000000, // Length + ,, , AddressRangeMemory, TypeStatic) + }) + Device (GPE0) + { + Name (_HID, "PNP0A06" /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "GPE0 resources") // _UID: Unique ID + Name (_STA, 0x0B) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0620, // Range Minimum + 0x0620, // Range Maximum + 0x01, // Alignment + 0x10, // Length + ) + }) + } + } + + Scope (\) + { + Name (_S3, Package (0x04) // _S3_: S3 System State + { + One, + One, + Zero, + Zero + }) + Name (_S4, Package (0x04) // _S4_: S4 System State + { + 0x02, + 0x02, + Zero, + Zero + }) + Name (_S5, Package (0x04) // _S5_: S5 System State + { + Zero, + Zero, + Zero, + Zero + }) + } + + Scope (\_SB.PCI0) + { + Device (FWCF) + { + Name (_HID, "QEMU0002") // _HID: Hardware ID + Name (_STA, 0x0B) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0510, // Range Minimum + 0x0510, // Range Maximum + 0x01, // Alignment + 0x0C, // Length + ) + }) + } + } + + Scope (\_SB) + { + Scope (PCI0) + { + Device (S00) + { + Name (_ADR, Zero) // _ADR: Address + } + + Device (S08) + { + Name (_ADR, 0x00010000) // _ADR: Address + Method (_S1D, 0, NotSerialized) // _S1D: S1 Device State + { + Return (Zero) + } + + Method (_S2D, 0, NotSerialized) // _S2D: S2 Device State + { + Return (Zero) + } + + Method (_S3D, 0, NotSerialized) // _S3D: S3 Device State + { + Return (Zero) + } + } + + Method (PCNT, 0, NotSerialized) + { + } + } + } +} + diff --git a/tests/data/acpi/q35/DSDT.tis b/tests/data/acpi/q35/DSDT.tis index dd06ee4c348930b0684827ca05747b4f65dbd6b2..08802fbd12eae6ad99f03a8db9a0bc7f95e77cb4 100644 GIT binary patch delta 38 ucmccVc*&8=CDDs0RTDD B46OhF diff --git a/tests/data/acpi/q35/DSDT.tis.dsl b/tests/data/acpi/q35/DSDT.tis.dsl new file mode 100644 index 0000000000..a43e36bfe3 --- /dev/null +++ b/tests/data/acpi/q35/DSDT.tis.dsl @@ -0,0 +1,3321 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembling to symbolic ASL+ operators + * + * Disassembly of tests/data/acpi/q35/DSDT.tis, Tue Aug 4 11:14:15 2020 + * + * Original Table Header: + * Signature "DSDT" + * Length 0x0000205B (8283) + * Revision 0x01 **** 32-bit table (V1), no 64-bit math support + * Checksum 0x84 + * OEM ID "BOCHS " + * OEM Table ID "BXPCDSDT" + * OEM Revision 0x00000001 (1) + * Compiler ID "BXPC" + * Compiler Version 0x00000001 (1) + */ +DefinitionBlock ("", "DSDT", 1, "BOCHS ", "BXPCDSDT", 0x00000001) +{ + Scope (\) + { + OperationRegion (DBG, SystemIO, 0x0402, One) + Field (DBG, ByteAcc, NoLock, Preserve) + { + DBGB, 8 + } + + Method (DBUG, 1, NotSerialized) + { + ToHexString (Arg0, Local0) + ToBuffer (Local0, Local0) + Local1 = (SizeOf (Local0) - One) + Local2 = Zero + While ((Local2 < Local1)) + { + DBGB = DerefOf (Local0 [Local2]) + Local2++ + } + + DBGB = 0x0A + } + } + + Scope (_SB) + { + Device (PCI0) + { + Name (_HID, EisaId ("PNP0A08") /* PCI Express Bus */) // _HID: Hardware ID + Name (_CID, EisaId ("PNP0A03") /* PCI Bus */) // _CID: Compatible ID + Name (_ADR, Zero) // _ADR: Address + Name (_UID, Zero) // _UID: Unique ID + Method (_OSC, 4, NotSerialized) // _OSC: Operating System Capabilities + { + CreateDWordField (Arg3, Zero, CDW1) + If ((Arg0 == ToUUID ("33db4d5b-1ff7-401c-9657-7441c03dd766") /* PCI Host Bridge Device */)) + { + CreateDWordField (Arg3, 0x04, CDW2) + CreateDWordField (Arg3, 0x08, CDW3) + Local0 = CDW3 /* \_SB_.PCI0._OSC.CDW3 */ + Local0 &= 0x1F + If ((Arg1 != One)) + { + CDW1 |= 0x08 + } + + If ((CDW3 != Local0)) + { + CDW1 |= 0x10 + } + + CDW3 = Local0 + } + Else + { + CDW1 |= 0x04 + } + + Return (Arg3) + } + } + } + + Scope (_SB) + { + Device (HPET) + { + Name (_HID, EisaId ("PNP0103") /* HPET System Timer */) // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + OperationRegion (HPTM, SystemMemory, 0xFED00000, 0x0400) + Field (HPTM, DWordAcc, Lock, Preserve) + { + VEND, 32, + PRD, 32 + } + + Method (_STA, 0, NotSerialized) // _STA: Status + { + Local0 = VEND /* \_SB_.HPET.VEND */ + Local1 = PRD /* \_SB_.HPET.PRD_ */ + Local0 >>= 0x10 + If (((Local0 == Zero) || (Local0 == 0xFFFF))) + { + Return (Zero) + } + + If (((Local1 == Zero) || (Local1 > 0x05F5E100))) + { + Return (Zero) + } + + Return (0x0F) + } + + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadOnly, + 0xFED00000, // Address Base + 0x00000400, // Address Length + ) + }) + } + } + + Scope (_SB.PCI0) + { + Device (ISA) + { + Name (_ADR, 0x001F0000) // _ADR: Address + OperationRegion (PIRQ, PCI_Config, 0x60, 0x0C) + } + } + + Scope (_SB.PCI0.ISA) + { + Device (KBD) + { + Name (_HID, EisaId ("PNP0303") /* IBM Enhanced Keyboard (101/102-key, PS/2 Mouse) */) // _HID: Hardware ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0060, // Range Minimum + 0x0060, // Range Maximum + 0x01, // Alignment + 0x01, // Length + ) + IO (Decode16, + 0x0064, // Range Minimum + 0x0064, // Range Maximum + 0x01, // Alignment + 0x01, // Length + ) + IRQNoFlags () + {1} + }) + } + + Device (MOU) + { + Name (_HID, EisaId ("PNP0F13") /* PS/2 Mouse */) // _HID: Hardware ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IRQNoFlags () + {12} + }) + } + + Device (LPT1) + { + Name (_HID, EisaId ("PNP0400") /* Standard LPT Parallel Port */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0378, // Range Minimum + 0x0378, // Range Maximum + 0x08, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {7} + }) + } + + Device (COM1) + { + Name (_HID, EisaId ("PNP0501") /* 16550A-compatible COM Serial Port */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x03F8, // Range Minimum + 0x03F8, // Range Maximum + 0x00, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {4} + }) + } + + Device (RTC) + { + Name (_HID, EisaId ("PNP0B00") /* AT Real-Time Clock */) // _HID: Hardware ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0070, // Range Minimum + 0x0070, // Range Maximum + 0x01, // Alignment + 0x08, // Length + ) + IRQNoFlags () + {8} + }) + } + } + + Name (PICF, Zero) + Method (_PIC, 1, NotSerialized) // _PIC: Interrupt Model + { + PICF = Arg0 + } + + Scope (_SB) + { + Scope (PCI0) + { + Name (PRTP, Package (0x80) + { + Package (0x04) + { + 0xFFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0xFFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0xFFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0xFFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + Zero, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + One, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + 0x02, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + 0x03, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + Zero, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + One, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + 0x02, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + 0x03, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + Zero, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + One, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + 0x02, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + 0x03, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + 0x03, + LNKD, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + Zero, + LNKE, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + One, + LNKF, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + 0x02, + LNKG, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + 0x03, + LNKH, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + Zero, + LNKA, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + One, + LNKB, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + 0x02, + LNKC, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + 0x03, + LNKD, + Zero + } + }) + Name (PRTA, Package (0x80) + { + Package (0x04) + { + 0xFFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0xFFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0xFFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0xFFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + Zero, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + One, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + 0x02, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + 0x03, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + Zero, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + One, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + 0x02, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + 0x03, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + Zero, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + One, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + 0x02, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + 0x03, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + 0x03, + GSID, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + Zero, + GSIE, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + One, + GSIF, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + 0x02, + GSIG, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + 0x03, + GSIH, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + Zero, + GSIA, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + One, + GSIB, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + 0x02, + GSIC, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + 0x03, + GSID, + Zero + } + }) + Method (_PRT, 0, NotSerialized) // _PRT: PCI Routing Table + { + If ((PICF == Zero)) + { + Return (PRTP) /* \_SB_.PCI0.PRTP */ + } + Else + { + Return (PRTA) /* \_SB_.PCI0.PRTA */ + } + } + } + + Field (PCI0.ISA.PIRQ, ByteAcc, NoLock, Preserve) + { + PRQA, 8, + PRQB, 8, + PRQC, 8, + PRQD, 8, + Offset (0x08), + PRQE, 8, + PRQF, 8, + PRQG, 8, + PRQH, 8 + } + + Method (IQST, 1, NotSerialized) + { + If ((0x80 & Arg0)) + { + Return (0x09) + } + + Return (0x0B) + } + + Method (IQCR, 1, Serialized) + { + Name (PRR0, ResourceTemplate () + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, _Y00) + { + 0x00000000, + } + }) + CreateDWordField (PRR0, \_SB.IQCR._Y00._INT, PRRI) // _INT: Interrupts + PRRI = (Arg0 & 0x0F) + Return (PRR0) /* \_SB_.IQCR.PRR0 */ + } + + Device (LNKA) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQA)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQA |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQA)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQA = PRRI /* \_SB_.LNKA._SRS.PRRI */ + } + } + + Device (LNKB) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQB)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQB |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQB)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQB = PRRI /* \_SB_.LNKB._SRS.PRRI */ + } + } + + Device (LNKC) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x02) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQC)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQC |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQC)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQC = PRRI /* \_SB_.LNKC._SRS.PRRI */ + } + } + + Device (LNKD) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x03) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQD)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQD |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQD)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQD = PRRI /* \_SB_.LNKD._SRS.PRRI */ + } + } + + Device (LNKE) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x04) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQE)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQE |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQE)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQE = PRRI /* \_SB_.LNKE._SRS.PRRI */ + } + } + + Device (LNKF) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x05) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQF)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQF |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQF)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQF = PRRI /* \_SB_.LNKF._SRS.PRRI */ + } + } + + Device (LNKG) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x06) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQG)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQG |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQG)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQG = PRRI /* \_SB_.LNKG._SRS.PRRI */ + } + } + + Device (LNKH) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x07) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000005, + 0x0000000A, + 0x0000000B, + } + }) + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (IQST (PRQH)) + } + + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + PRQH |= 0x80 + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (IQCR (PRQH)) + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + CreateDWordField (Arg0, 0x05, PRRI) + PRQH = PRRI /* \_SB_.LNKH._SRS.PRRI */ + } + } + + Device (GSIA) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x10) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000010, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000010, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIB) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x11) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000011, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000011, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIC) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x12) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000012, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000012, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSID) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x13) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000013, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000013, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIE) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x14) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000014, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000014, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIF) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x15) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000015, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000015, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIG) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x16) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000016, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000016, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSIH) + { + Name (_HID, EisaId ("PNP0C0F") /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x17) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000017, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Shared, ,, ) + { + 0x00000017, + } + }) + Method (_DIS, 0, NotSerialized) // _DIS: Disable Device + { + } + + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + } + + Scope (_SB.PCI0) + { + Device (SMB0) + { + Name (_ADR, 0x001F0003) // _ADR: Address + } + } + + Scope (_SB) + { + Device (\_SB.PCI0.PRES) + { + Name (_HID, EisaId ("PNP0A06") /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "CPU Hotplug resources") // _UID: Unique ID + Mutex (CPLK, 0x00) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0CD8, // Range Minimum + 0x0CD8, // Range Maximum + 0x01, // Alignment + 0x0C, // Length + ) + }) + OperationRegion (PRST, SystemIO, 0x0CD8, 0x0C) + Field (PRST, ByteAcc, NoLock, WriteAsZeros) + { + Offset (0x04), + CPEN, 1, + CINS, 1, + CRMV, 1, + CEJ0, 1, + Offset (0x05), + CCMD, 8 + } + + Field (PRST, DWordAcc, NoLock, Preserve) + { + CSEL, 32, + Offset (0x08), + CDAT, 32 + } + + Method (_INI, 0, Serialized) // _INI: Initialize + { + CSEL = Zero + } + } + + Device (\_SB.CPUS) + { + Name (_HID, "ACPI0010" /* Processor Container Device */) // _HID: Hardware ID + Name (_CID, EisaId ("PNP0A05") /* Generic Container Device */) // _CID: Compatible ID + Method (CTFY, 2, NotSerialized) + { + If ((Arg0 == Zero)) + { + Notify (C000, Arg1) + } + } + + Method (CSTA, 1, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + Local0 = Zero + If ((\_SB.PCI0.PRES.CPEN == One)) + { + Local0 = 0x0F + } + + Release (\_SB.PCI0.PRES.CPLK) + Return (Local0) + } + + Method (CEJ0, 1, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + \_SB.PCI0.PRES.CEJ0 = One + Release (\_SB.PCI0.PRES.CPLK) + } + + Method (CSCN, 0, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + Local0 = One + While ((Local0 == One)) + { + Local0 = Zero + \_SB.PCI0.PRES.CCMD = Zero + If ((\_SB.PCI0.PRES.CINS == One)) + { + CTFY (\_SB.PCI0.PRES.CDAT, One) + \_SB.PCI0.PRES.CINS = One + Local0 = One + } + ElseIf ((\_SB.PCI0.PRES.CRMV == One)) + { + CTFY (\_SB.PCI0.PRES.CDAT, 0x03) + \_SB.PCI0.PRES.CRMV = One + Local0 = One + } + } + + Release (\_SB.PCI0.PRES.CPLK) + } + + Method (COST, 4, Serialized) + { + Acquire (\_SB.PCI0.PRES.CPLK, 0xFFFF) + \_SB.PCI0.PRES.CSEL = Arg0 + \_SB.PCI0.PRES.CCMD = One + \_SB.PCI0.PRES.CDAT = Arg1 + \_SB.PCI0.PRES.CCMD = 0x02 + \_SB.PCI0.PRES.CDAT = Arg2 + Release (\_SB.PCI0.PRES.CPLK) + } + + Processor (C000, 0x00, 0x00000000, 0x00) + { + Method (_STA, 0, Serialized) // _STA: Status + { + Return (CSTA (Zero)) + } + + Name (_MAT, Buffer (0x08) // _MAT: Multiple APIC Table Entry + { + 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 // ........ + }) + Method (_OST, 3, Serialized) // _OST: OSPM Status Indication + { + COST (Zero, Arg0, Arg1, Arg2) + } + } + } + } + + Method (\_GPE._E02, 0, NotSerialized) // _Exx: Edge-Triggered GPE, xx=0x00-0xFF + { + \_SB.CPUS.CSCN () + } + + Scope (_GPE) + { + Name (_HID, "ACPI0006" /* GPE Block Device */) // _HID: Hardware ID + } + + Scope (\_SB.PCI0) + { + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode, + 0x0000, // Granularity + 0x0000, // Range Minimum + 0x00FF, // Range Maximum + 0x0000, // Translation Offset + 0x0100, // Length + ,, ) + IO (Decode16, + 0x0CF8, // Range Minimum + 0x0CF8, // Range Maximum + 0x01, // Alignment + 0x08, // Length + ) + WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, + 0x0000, // Granularity + 0x0000, // Range Minimum + 0x0CF7, // Range Maximum + 0x0000, // Translation Offset + 0x0CF8, // Length + ,, , TypeStatic, DenseTranslation) + WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, + 0x0000, // Granularity + 0x0D00, // Range Minimum + 0xFFFF, // Range Maximum + 0x0000, // Translation Offset + 0xF300, // Length + ,, , TypeStatic, DenseTranslation) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x00000000, // Granularity + 0x000A0000, // Range Minimum + 0x000BFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0x00020000, // Length + ,, , AddressRangeMemory, TypeStatic) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite, + 0x00000000, // Granularity + 0x08000000, // Range Minimum + 0xAFFFFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0xA8000000, // Length + ,, , AddressRangeMemory, TypeStatic) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite, + 0x00000000, // Granularity + 0xC0000000, // Range Minimum + 0xFEBFFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0x3EC00000, // Length + ,, , AddressRangeMemory, TypeStatic) + QWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x0000000000000000, // Granularity + 0x0000000100000000, // Range Minimum + 0x00000008FFFFFFFF, // Range Maximum + 0x0000000000000000, // Translation Offset + 0x0000000800000000, // Length + ,, , AddressRangeMemory, TypeStatic) + Memory32Fixed (ReadWrite, + 0xFED40000, // Address Base + 0x00005000, // Address Length + ) + }) + Device (GPE0) + { + Name (_HID, "PNP0A06" /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "GPE0 resources") // _UID: Unique ID + Name (_STA, 0x0B) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0620, // Range Minimum + 0x0620, // Range Maximum + 0x01, // Alignment + 0x10, // Length + ) + }) + } + } + + Scope (\) + { + Name (_S3, Package (0x04) // _S3_: S3 System State + { + One, + One, + Zero, + Zero + }) + Name (_S4, Package (0x04) // _S4_: S4 System State + { + 0x02, + 0x02, + Zero, + Zero + }) + Name (_S5, Package (0x04) // _S5_: S5 System State + { + Zero, + Zero, + Zero, + Zero + }) + } + + Scope (\_SB.PCI0) + { + Device (FWCF) + { + Name (_HID, "QEMU0002") // _HID: Hardware ID + Name (_STA, 0x0B) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0510, // Range Minimum + 0x0510, // Range Maximum + 0x01, // Alignment + 0x0C, // Length + ) + }) + } + } + + Scope (\_SB) + { + Scope (PCI0) + { + Device (S00) + { + Name (_ADR, Zero) // _ADR: Address + } + + Device (S08) + { + Name (_ADR, 0x00010000) // _ADR: Address + Method (_S1D, 0, NotSerialized) // _S1D: S1 Device State + { + Return (Zero) + } + + Method (_S2D, 0, NotSerialized) // _S2D: S2 Device State + { + Return (Zero) + } + + Method (_S3D, 0, NotSerialized) // _S3D: S3 Device State + { + Return (Zero) + } + } + + Method (PCNT, 0, NotSerialized) + { + } + + Device (TPM) + { + Name (_HID, "MSFT0101" /* TPM 2.0 Security Device */) // _HID: Hardware ID + Name (_STA, 0x0F) // _STA: Status + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0xFED40000, // Address Base + 0x00005000, // Address Length + ) + }) + OperationRegion (TPP2, SystemMemory, 0xFED45100, 0x5A) + Field (TPP2, AnyAcc, NoLock, Preserve) + { + PPIN, 8, + PPIP, 32, + PPRP, 32, + PPRQ, 32, + PPRM, 32, + LPPR, 32 + } + + OperationRegion (TPP3, SystemMemory, 0xFED4515A, One) + Field (TPP3, ByteAcc, NoLock, Preserve) + { + MOVV, 8 + } + + Method (TPFN, 1, Serialized) + { + If ((Arg0 >= 0x0100)) + { + Return (Zero) + } + + OperationRegion (TPP1, SystemMemory, (0xFED45000 + Arg0), One) + Field (TPP1, ByteAcc, NoLock, Preserve) + { + TPPF, 8 + } + + Return (TPPF) /* \_SB_.PCI0.TPM_.TPFN.TPPF */ + } + + Name (TPM2, Package (0x02) + { + Zero, + Zero + }) + Name (TPM3, Package (0x03) + { + Zero, + Zero, + Zero + }) + Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method + { + If ((Arg0 == ToUUID ("3dddfaa6-361b-4eb4-a424-8d10089d1653") /* Physical Presence Interface */)) + { + If ((Arg2 == Zero)) + { + Return (Buffer (0x02) + { + 0xFF, 0x01 // .. + }) + } + + If ((Arg2 == One)) + { + Return ("1.3") + } + + If ((Arg2 == 0x02)) + { + Local0 = DerefOf (Arg3 [Zero]) + Local1 = TPFN (Local0) + If (((Local1 & 0x07) == Zero)) + { + Return (One) + } + + PPRQ = Local0 + PPRM = Zero + Return (Zero) + } + + If ((Arg2 == 0x03)) + { + If ((Arg1 == One)) + { + TPM2 [One] = PPRQ /* \_SB_.PCI0.TPM_.PPRQ */ + Return (TPM2) /* \_SB_.PCI0.TPM_.TPM2 */ + } + + If ((Arg1 == 0x02)) + { + TPM3 [One] = PPRQ /* \_SB_.PCI0.TPM_.PPRQ */ + TPM3 [0x02] = PPRM /* \_SB_.PCI0.TPM_.PPRM */ + Return (TPM3) /* \_SB_.PCI0.TPM_.TPM3 */ + } + } + + If ((Arg2 == 0x04)) + { + Return (0x02) + } + + If ((Arg2 == 0x05)) + { + TPM3 [One] = LPPR /* \_SB_.PCI0.TPM_.LPPR */ + TPM3 [0x02] = PPRP /* \_SB_.PCI0.TPM_.PPRP */ + Return (TPM3) /* \_SB_.PCI0.TPM_.TPM3 */ + } + + If ((Arg2 == 0x06)) + { + Return (0x03) + } + + If ((Arg2 == 0x07)) + { + Local0 = DerefOf (Arg3 [Zero]) + Local1 = TPFN (Local0) + If (((Local1 & 0x07) == Zero)) + { + Return (One) + } + + If (((Local1 & 0x07) == 0x02)) + { + Return (0x03) + } + + If ((Arg1 == One)) + { + PPRQ = Local0 + PPRM = Zero + } + + If ((Arg1 == 0x02)) + { + PPRQ = Local0 + PPRM = DerefOf (Arg3 [One]) + } + + Return (Zero) + } + + If ((Arg2 == 0x08)) + { + Local0 = DerefOf (Arg3 [Zero]) + Local1 = TPFN (Local0) + Return ((Local1 & 0x07)) + } + + Return (Buffer (One) + { + 0x00 // . + }) + } + + If ((Arg0 == ToUUID ("376054ed-cc13-4675-901c-4756d7f2d45d"))) + { + If ((Arg2 == Zero)) + { + Return (Buffer (One) + { + 0x03 // . + }) + } + + If ((Arg2 == One)) + { + Local0 = DerefOf (Arg3 [Zero]) + MOVV = Local0 + Return (Zero) + } + } + } + } + } + } +} + diff --git a/tests/data/acpi/q35/FACP.acpihmat b/tests/data/acpi/q35/FACP.acpihmat new file mode 100644 index 0000000000000000000000000000000000000000..72c9d97902a4bbf14896023d9ba78e0899d6517b GIT binary patch literal 244 zcmZvW!3l&w5Cm&fMBzX)aAPn7T@Zh_a390*VJaqIY<_$xgRZV{_35F9p6RZ!ZUy41 z{o4L#+QHebu}%P;RXsw^0z@&8o^EoflBHn0ACZ*6UhIX>*T6i1WUzfs_g)5wdG3cu Q$?M-gG^;%n8J|8O2jpN50RR91 literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/FACP.acpihmat.dsl b/tests/data/acpi/q35/FACP.acpihmat.dsl new file mode 100644 index 0000000000..29466227a1 --- /dev/null +++ b/tests/data/acpi/q35/FACP.acpihmat.dsl @@ -0,0 +1,179 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/FACP.acpihmat, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [FACP] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "FACP" [Fixed ACPI Description Table (FADT)] +[004h 0004 4] Table Length : 000000F4 +[008h 0008 1] Revision : 03 +[009h 0009 1] Checksum : 1F +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCFACP" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] FACS Address : 00000000 +[028h 0040 4] DSDT Address : 00000000 +[02Ch 0044 1] Model : 01 +[02Dh 0045 1] PM Profile : 00 [Unspecified] +[02Eh 0046 2] SCI Interrupt : 0009 +[030h 0048 4] SMI Command Port : 000000B2 +[034h 0052 1] ACPI Enable Value : 02 +[035h 0053 1] ACPI Disable Value : 03 +[036h 0054 1] S4BIOS Command : 00 +[037h 0055 1] P-State Control : 00 +[038h 0056 4] PM1A Event Block Address : 00000600 +[03Ch 0060 4] PM1B Event Block Address : 00000000 +[040h 0064 4] PM1A Control Block Address : 00000604 +[044h 0068 4] PM1B Control Block Address : 00000000 +[048h 0072 4] PM2 Control Block Address : 00000000 +[04Ch 0076 4] PM Timer Block Address : 00000608 +[050h 0080 4] GPE0 Block Address : 00000620 +[054h 0084 4] GPE1 Block Address : 00000000 +[058h 0088 1] PM1 Event Block Length : 04 +[059h 0089 1] PM1 Control Block Length : 02 +[05Ah 0090 1] PM2 Control Block Length : 00 +[05Bh 0091 1] PM Timer Block Length : 04 +[05Ch 0092 1] GPE0 Block Length : 10 +[05Dh 0093 1] GPE1 Block Length : 00 +[05Eh 0094 1] GPE1 Base Offset : 00 +[05Fh 0095 1] _CST Support : 00 +[060h 0096 2] C2 Latency : 0FFF +[062h 0098 2] C3 Latency : 0FFF +[064h 0100 2] CPU Cache Size : 0000 +[066h 0102 2] Cache Flush Stride : 0000 +[068h 0104 1] Duty Cycle Offset : 00 +[069h 0105 1] Duty Cycle Width : 00 +[06Ah 0106 1] RTC Day Alarm Index : 00 +[06Bh 0107 1] RTC Month Alarm Index : 00 +[06Ch 0108 1] RTC Century Index : 32 +[06Dh 0109 2] Boot Flags (decoded below) : 0000 + Legacy Devices Supported (V2) : 0 + 8042 Present on ports 60/64 (V2) : 0 + VGA Not Present (V4) : 0 + MSI Not Supported (V4) : 0 + PCIe ASPM Not Supported (V4) : 0 + CMOS RTC Not Present (V5) : 0 +[06Fh 0111 1] Reserved : 00 +[070h 0112 4] Flags (decoded below) : 000084A5 + WBINVD instruction is operational (V1) : 1 + WBINVD flushes all caches (V1) : 0 + All CPUs support C1 (V1) : 1 + C2 works on MP system (V1) : 0 + Control Method Power Button (V1) : 0 + Control Method Sleep Button (V1) : 1 + RTC wake not in fixed reg space (V1) : 0 + RTC can wake system from S4 (V1) : 1 + 32-bit PM Timer (V1) : 0 + Docking Supported (V1) : 0 + Reset Register Supported (V2) : 1 + Sealed Case (V3) : 0 + Headless - No Video (V3) : 0 + Use native instr after SLP_TYPx (V3) : 0 + PCIEXP_WAK Bits Supported (V4) : 0 + Use Platform Timer (V4) : 1 + RTC_STS valid on S4 wake (V4) : 0 + Remote Power-on capable (V4) : 0 + Use APIC Cluster Model (V4) : 0 + Use APIC Physical Destination Mode (V4) : 0 + Hardware Reduced (V5) : 0 + Low Power S0 Idle (V5) : 0 + +[074h 0116 12] Reset Register : [Generic Address Structure] +[074h 0116 1] Space ID : 01 [SystemIO] +[075h 0117 1] Bit Width : 08 +[076h 0118 1] Bit Offset : 00 +[077h 0119 1] Encoded Access Width : 00 [Undefined/Legacy] +[078h 0120 8] Address : 0000000000000CF9 + +[080h 0128 1] Value to cause reset : 0F +[081h 0129 2] ARM Flags (decoded below) : 0000 + PSCI Compliant : 0 + Must use HVC for PSCI : 0 + +[083h 0131 1] FADT Minor Revision : 00 +[084h 0132 8] FACS Address : 0000000000000000 +[08Ch 0140 8] DSDT Address : 0000000000000000 +[094h 0148 12] PM1A Event Block : [Generic Address Structure] +[094h 0148 1] Space ID : 01 [SystemIO] +[095h 0149 1] Bit Width : 20 +[096h 0150 1] Bit Offset : 00 +[097h 0151 1] Encoded Access Width : 00 [Undefined/Legacy] +[098h 0152 8] Address : 0000000000000600 + +[0A0h 0160 12] PM1B Event Block : [Generic Address Structure] +[0A0h 0160 1] Space ID : 00 [SystemMemory] +[0A1h 0161 1] Bit Width : 00 +[0A2h 0162 1] Bit Offset : 00 +[0A3h 0163 1] Encoded Access Width : 00 [Undefined/Legacy] +[0A4h 0164 8] Address : 0000000000000000 + +[0ACh 0172 12] PM1A Control Block : [Generic Address Structure] +[0ACh 0172 1] Space ID : 01 [SystemIO] +[0ADh 0173 1] Bit Width : 10 +[0AEh 0174 1] Bit Offset : 00 +[0AFh 0175 1] Encoded Access Width : 00 [Undefined/Legacy] +[0B0h 0176 8] Address : 0000000000000604 + +[0B8h 0184 12] PM1B Control Block : [Generic Address Structure] +[0B8h 0184 1] Space ID : 00 [SystemMemory] +[0B9h 0185 1] Bit Width : 00 +[0BAh 0186 1] Bit Offset : 00 +[0BBh 0187 1] Encoded Access Width : 00 [Undefined/Legacy] +[0BCh 0188 8] Address : 0000000000000000 + +[0C4h 0196 12] PM2 Control Block : [Generic Address Structure] +[0C4h 0196 1] Space ID : 00 [SystemMemory] +[0C5h 0197 1] Bit Width : 00 +[0C6h 0198 1] Bit Offset : 00 +[0C7h 0199 1] Encoded Access Width : 00 [Undefined/Legacy] +[0C8h 0200 8] Address : 0000000000000000 + +[0D0h 0208 12] PM Timer Block : [Generic Address Structure] +[0D0h 0208 1] Space ID : 01 [SystemIO] +[0D1h 0209 1] Bit Width : 20 +[0D2h 0210 1] Bit Offset : 00 +[0D3h 0211 1] Encoded Access Width : 00 [Undefined/Legacy] +[0D4h 0212 8] Address : 0000000000000608 + +[0DCh 0220 12] GPE0 Block : [Generic Address Structure] +[0DCh 0220 1] Space ID : 01 [SystemIO] +[0DDh 0221 1] Bit Width : 80 +[0DEh 0222 1] Bit Offset : 00 +[0DFh 0223 1] Encoded Access Width : 00 [Undefined/Legacy] +[0E0h 0224 8] Address : 0000000000000620 + +[0E8h 0232 12] GPE1 Block : [Generic Address Structure] +[0E8h 0232 1] Space ID : 00 [SystemMemory] +[0E9h 0233 1] Bit Width : 00 +[0EAh 0234 1] Bit Offset : 00 +[0EBh 0235 1] Encoded Access Width : 00 [Undefined/Legacy] +[0ECh 0236 8] Address : 0000000000000000 + + +Raw Table Data: Length 244 (0xF4) + + 0000: 46 41 43 50 F4 00 00 00 03 1F 42 4F 43 48 53 20 // FACP......BOCHS + 0010: 42 58 50 43 46 41 43 50 01 00 00 00 42 58 50 43 // BXPCFACP....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 01 00 09 00 // ................ + 0030: B2 00 00 00 02 03 00 00 00 06 00 00 00 00 00 00 // ................ + 0040: 04 06 00 00 00 00 00 00 00 00 00 00 08 06 00 00 // ................ + 0050: 20 06 00 00 00 00 00 00 04 02 00 04 10 00 00 00 // ............... + 0060: FF 0F FF 0F 00 00 00 00 00 00 00 00 32 00 00 00 // ............2... + 0070: A5 84 00 00 01 08 00 00 F9 0C 00 00 00 00 00 00 // ................ + 0080: 0F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0090: 00 00 00 00 01 20 00 00 00 06 00 00 00 00 00 00 // ..... .......... + 00A0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 // ................ + 00B0: 04 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00D0: 01 20 00 00 08 06 00 00 00 00 00 00 01 80 00 00 // . .............. + 00E0: 20 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ............... + 00F0: 00 00 00 00 // .... diff --git a/tests/data/acpi/q35/FACP.bridge b/tests/data/acpi/q35/FACP.bridge new file mode 100644 index 0000000000000000000000000000000000000000..72c9d97902a4bbf14896023d9ba78e0899d6517b GIT binary patch literal 244 zcmZvW!3l&w5Cm&fMBzX)aAPn7T@Zh_a390*VJaqIY<_$xgRZV{_35F9p6RZ!ZUy41 z{o4L#+QHebu}%P;RXsw^0z@&8o^EoflBHn0ACZ*6UhIX>*T6i1WUzfs_g)5wdG3cu Q$?M-gG^;%n8J|8O2jpN50RR91 literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/FACP.bridge.dsl b/tests/data/acpi/q35/FACP.bridge.dsl new file mode 100644 index 0000000000..2416f4391a --- /dev/null +++ b/tests/data/acpi/q35/FACP.bridge.dsl @@ -0,0 +1,179 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/FACP.bridge, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [FACP] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "FACP" [Fixed ACPI Description Table (FADT)] +[004h 0004 4] Table Length : 000000F4 +[008h 0008 1] Revision : 03 +[009h 0009 1] Checksum : 1F +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCFACP" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] FACS Address : 00000000 +[028h 0040 4] DSDT Address : 00000000 +[02Ch 0044 1] Model : 01 +[02Dh 0045 1] PM Profile : 00 [Unspecified] +[02Eh 0046 2] SCI Interrupt : 0009 +[030h 0048 4] SMI Command Port : 000000B2 +[034h 0052 1] ACPI Enable Value : 02 +[035h 0053 1] ACPI Disable Value : 03 +[036h 0054 1] S4BIOS Command : 00 +[037h 0055 1] P-State Control : 00 +[038h 0056 4] PM1A Event Block Address : 00000600 +[03Ch 0060 4] PM1B Event Block Address : 00000000 +[040h 0064 4] PM1A Control Block Address : 00000604 +[044h 0068 4] PM1B Control Block Address : 00000000 +[048h 0072 4] PM2 Control Block Address : 00000000 +[04Ch 0076 4] PM Timer Block Address : 00000608 +[050h 0080 4] GPE0 Block Address : 00000620 +[054h 0084 4] GPE1 Block Address : 00000000 +[058h 0088 1] PM1 Event Block Length : 04 +[059h 0089 1] PM1 Control Block Length : 02 +[05Ah 0090 1] PM2 Control Block Length : 00 +[05Bh 0091 1] PM Timer Block Length : 04 +[05Ch 0092 1] GPE0 Block Length : 10 +[05Dh 0093 1] GPE1 Block Length : 00 +[05Eh 0094 1] GPE1 Base Offset : 00 +[05Fh 0095 1] _CST Support : 00 +[060h 0096 2] C2 Latency : 0FFF +[062h 0098 2] C3 Latency : 0FFF +[064h 0100 2] CPU Cache Size : 0000 +[066h 0102 2] Cache Flush Stride : 0000 +[068h 0104 1] Duty Cycle Offset : 00 +[069h 0105 1] Duty Cycle Width : 00 +[06Ah 0106 1] RTC Day Alarm Index : 00 +[06Bh 0107 1] RTC Month Alarm Index : 00 +[06Ch 0108 1] RTC Century Index : 32 +[06Dh 0109 2] Boot Flags (decoded below) : 0000 + Legacy Devices Supported (V2) : 0 + 8042 Present on ports 60/64 (V2) : 0 + VGA Not Present (V4) : 0 + MSI Not Supported (V4) : 0 + PCIe ASPM Not Supported (V4) : 0 + CMOS RTC Not Present (V5) : 0 +[06Fh 0111 1] Reserved : 00 +[070h 0112 4] Flags (decoded below) : 000084A5 + WBINVD instruction is operational (V1) : 1 + WBINVD flushes all caches (V1) : 0 + All CPUs support C1 (V1) : 1 + C2 works on MP system (V1) : 0 + Control Method Power Button (V1) : 0 + Control Method Sleep Button (V1) : 1 + RTC wake not in fixed reg space (V1) : 0 + RTC can wake system from S4 (V1) : 1 + 32-bit PM Timer (V1) : 0 + Docking Supported (V1) : 0 + Reset Register Supported (V2) : 1 + Sealed Case (V3) : 0 + Headless - No Video (V3) : 0 + Use native instr after SLP_TYPx (V3) : 0 + PCIEXP_WAK Bits Supported (V4) : 0 + Use Platform Timer (V4) : 1 + RTC_STS valid on S4 wake (V4) : 0 + Remote Power-on capable (V4) : 0 + Use APIC Cluster Model (V4) : 0 + Use APIC Physical Destination Mode (V4) : 0 + Hardware Reduced (V5) : 0 + Low Power S0 Idle (V5) : 0 + +[074h 0116 12] Reset Register : [Generic Address Structure] +[074h 0116 1] Space ID : 01 [SystemIO] +[075h 0117 1] Bit Width : 08 +[076h 0118 1] Bit Offset : 00 +[077h 0119 1] Encoded Access Width : 00 [Undefined/Legacy] +[078h 0120 8] Address : 0000000000000CF9 + +[080h 0128 1] Value to cause reset : 0F +[081h 0129 2] ARM Flags (decoded below) : 0000 + PSCI Compliant : 0 + Must use HVC for PSCI : 0 + +[083h 0131 1] FADT Minor Revision : 00 +[084h 0132 8] FACS Address : 0000000000000000 +[08Ch 0140 8] DSDT Address : 0000000000000000 +[094h 0148 12] PM1A Event Block : [Generic Address Structure] +[094h 0148 1] Space ID : 01 [SystemIO] +[095h 0149 1] Bit Width : 20 +[096h 0150 1] Bit Offset : 00 +[097h 0151 1] Encoded Access Width : 00 [Undefined/Legacy] +[098h 0152 8] Address : 0000000000000600 + +[0A0h 0160 12] PM1B Event Block : [Generic Address Structure] +[0A0h 0160 1] Space ID : 00 [SystemMemory] +[0A1h 0161 1] Bit Width : 00 +[0A2h 0162 1] Bit Offset : 00 +[0A3h 0163 1] Encoded Access Width : 00 [Undefined/Legacy] +[0A4h 0164 8] Address : 0000000000000000 + +[0ACh 0172 12] PM1A Control Block : [Generic Address Structure] +[0ACh 0172 1] Space ID : 01 [SystemIO] +[0ADh 0173 1] Bit Width : 10 +[0AEh 0174 1] Bit Offset : 00 +[0AFh 0175 1] Encoded Access Width : 00 [Undefined/Legacy] +[0B0h 0176 8] Address : 0000000000000604 + +[0B8h 0184 12] PM1B Control Block : [Generic Address Structure] +[0B8h 0184 1] Space ID : 00 [SystemMemory] +[0B9h 0185 1] Bit Width : 00 +[0BAh 0186 1] Bit Offset : 00 +[0BBh 0187 1] Encoded Access Width : 00 [Undefined/Legacy] +[0BCh 0188 8] Address : 0000000000000000 + +[0C4h 0196 12] PM2 Control Block : [Generic Address Structure] +[0C4h 0196 1] Space ID : 00 [SystemMemory] +[0C5h 0197 1] Bit Width : 00 +[0C6h 0198 1] Bit Offset : 00 +[0C7h 0199 1] Encoded Access Width : 00 [Undefined/Legacy] +[0C8h 0200 8] Address : 0000000000000000 + +[0D0h 0208 12] PM Timer Block : [Generic Address Structure] +[0D0h 0208 1] Space ID : 01 [SystemIO] +[0D1h 0209 1] Bit Width : 20 +[0D2h 0210 1] Bit Offset : 00 +[0D3h 0211 1] Encoded Access Width : 00 [Undefined/Legacy] +[0D4h 0212 8] Address : 0000000000000608 + +[0DCh 0220 12] GPE0 Block : [Generic Address Structure] +[0DCh 0220 1] Space ID : 01 [SystemIO] +[0DDh 0221 1] Bit Width : 80 +[0DEh 0222 1] Bit Offset : 00 +[0DFh 0223 1] Encoded Access Width : 00 [Undefined/Legacy] +[0E0h 0224 8] Address : 0000000000000620 + +[0E8h 0232 12] GPE1 Block : [Generic Address Structure] +[0E8h 0232 1] Space ID : 00 [SystemMemory] +[0E9h 0233 1] Bit Width : 00 +[0EAh 0234 1] Bit Offset : 00 +[0EBh 0235 1] Encoded Access Width : 00 [Undefined/Legacy] +[0ECh 0236 8] Address : 0000000000000000 + + +Raw Table Data: Length 244 (0xF4) + + 0000: 46 41 43 50 F4 00 00 00 03 1F 42 4F 43 48 53 20 // FACP......BOCHS + 0010: 42 58 50 43 46 41 43 50 01 00 00 00 42 58 50 43 // BXPCFACP....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 01 00 09 00 // ................ + 0030: B2 00 00 00 02 03 00 00 00 06 00 00 00 00 00 00 // ................ + 0040: 04 06 00 00 00 00 00 00 00 00 00 00 08 06 00 00 // ................ + 0050: 20 06 00 00 00 00 00 00 04 02 00 04 10 00 00 00 // ............... + 0060: FF 0F FF 0F 00 00 00 00 00 00 00 00 32 00 00 00 // ............2... + 0070: A5 84 00 00 01 08 00 00 F9 0C 00 00 00 00 00 00 // ................ + 0080: 0F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0090: 00 00 00 00 01 20 00 00 00 06 00 00 00 00 00 00 // ..... .......... + 00A0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 // ................ + 00B0: 04 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00D0: 01 20 00 00 08 06 00 00 00 00 00 00 01 80 00 00 // . .............. + 00E0: 20 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ............... + 00F0: 00 00 00 00 // .... diff --git a/tests/data/acpi/q35/FACP.cphp b/tests/data/acpi/q35/FACP.cphp new file mode 100644 index 0000000000000000000000000000000000000000..72c9d97902a4bbf14896023d9ba78e0899d6517b GIT binary patch literal 244 zcmZvW!3l&w5Cm&fMBzX)aAPn7T@Zh_a390*VJaqIY<_$xgRZV{_35F9p6RZ!ZUy41 z{o4L#+QHebu}%P;RXsw^0z@&8o^EoflBHn0ACZ*6UhIX>*T6i1WUzfs_g)5wdG3cu Q$?M-gG^;%n8J|8O2jpN50RR91 literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/FACP.cphp.dsl b/tests/data/acpi/q35/FACP.cphp.dsl new file mode 100644 index 0000000000..96ee322b53 --- /dev/null +++ b/tests/data/acpi/q35/FACP.cphp.dsl @@ -0,0 +1,179 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/FACP.cphp, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [FACP] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "FACP" [Fixed ACPI Description Table (FADT)] +[004h 0004 4] Table Length : 000000F4 +[008h 0008 1] Revision : 03 +[009h 0009 1] Checksum : 1F +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCFACP" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] FACS Address : 00000000 +[028h 0040 4] DSDT Address : 00000000 +[02Ch 0044 1] Model : 01 +[02Dh 0045 1] PM Profile : 00 [Unspecified] +[02Eh 0046 2] SCI Interrupt : 0009 +[030h 0048 4] SMI Command Port : 000000B2 +[034h 0052 1] ACPI Enable Value : 02 +[035h 0053 1] ACPI Disable Value : 03 +[036h 0054 1] S4BIOS Command : 00 +[037h 0055 1] P-State Control : 00 +[038h 0056 4] PM1A Event Block Address : 00000600 +[03Ch 0060 4] PM1B Event Block Address : 00000000 +[040h 0064 4] PM1A Control Block Address : 00000604 +[044h 0068 4] PM1B Control Block Address : 00000000 +[048h 0072 4] PM2 Control Block Address : 00000000 +[04Ch 0076 4] PM Timer Block Address : 00000608 +[050h 0080 4] GPE0 Block Address : 00000620 +[054h 0084 4] GPE1 Block Address : 00000000 +[058h 0088 1] PM1 Event Block Length : 04 +[059h 0089 1] PM1 Control Block Length : 02 +[05Ah 0090 1] PM2 Control Block Length : 00 +[05Bh 0091 1] PM Timer Block Length : 04 +[05Ch 0092 1] GPE0 Block Length : 10 +[05Dh 0093 1] GPE1 Block Length : 00 +[05Eh 0094 1] GPE1 Base Offset : 00 +[05Fh 0095 1] _CST Support : 00 +[060h 0096 2] C2 Latency : 0FFF +[062h 0098 2] C3 Latency : 0FFF +[064h 0100 2] CPU Cache Size : 0000 +[066h 0102 2] Cache Flush Stride : 0000 +[068h 0104 1] Duty Cycle Offset : 00 +[069h 0105 1] Duty Cycle Width : 00 +[06Ah 0106 1] RTC Day Alarm Index : 00 +[06Bh 0107 1] RTC Month Alarm Index : 00 +[06Ch 0108 1] RTC Century Index : 32 +[06Dh 0109 2] Boot Flags (decoded below) : 0000 + Legacy Devices Supported (V2) : 0 + 8042 Present on ports 60/64 (V2) : 0 + VGA Not Present (V4) : 0 + MSI Not Supported (V4) : 0 + PCIe ASPM Not Supported (V4) : 0 + CMOS RTC Not Present (V5) : 0 +[06Fh 0111 1] Reserved : 00 +[070h 0112 4] Flags (decoded below) : 000084A5 + WBINVD instruction is operational (V1) : 1 + WBINVD flushes all caches (V1) : 0 + All CPUs support C1 (V1) : 1 + C2 works on MP system (V1) : 0 + Control Method Power Button (V1) : 0 + Control Method Sleep Button (V1) : 1 + RTC wake not in fixed reg space (V1) : 0 + RTC can wake system from S4 (V1) : 1 + 32-bit PM Timer (V1) : 0 + Docking Supported (V1) : 0 + Reset Register Supported (V2) : 1 + Sealed Case (V3) : 0 + Headless - No Video (V3) : 0 + Use native instr after SLP_TYPx (V3) : 0 + PCIEXP_WAK Bits Supported (V4) : 0 + Use Platform Timer (V4) : 1 + RTC_STS valid on S4 wake (V4) : 0 + Remote Power-on capable (V4) : 0 + Use APIC Cluster Model (V4) : 0 + Use APIC Physical Destination Mode (V4) : 0 + Hardware Reduced (V5) : 0 + Low Power S0 Idle (V5) : 0 + +[074h 0116 12] Reset Register : [Generic Address Structure] +[074h 0116 1] Space ID : 01 [SystemIO] +[075h 0117 1] Bit Width : 08 +[076h 0118 1] Bit Offset : 00 +[077h 0119 1] Encoded Access Width : 00 [Undefined/Legacy] +[078h 0120 8] Address : 0000000000000CF9 + +[080h 0128 1] Value to cause reset : 0F +[081h 0129 2] ARM Flags (decoded below) : 0000 + PSCI Compliant : 0 + Must use HVC for PSCI : 0 + +[083h 0131 1] FADT Minor Revision : 00 +[084h 0132 8] FACS Address : 0000000000000000 +[08Ch 0140 8] DSDT Address : 0000000000000000 +[094h 0148 12] PM1A Event Block : [Generic Address Structure] +[094h 0148 1] Space ID : 01 [SystemIO] +[095h 0149 1] Bit Width : 20 +[096h 0150 1] Bit Offset : 00 +[097h 0151 1] Encoded Access Width : 00 [Undefined/Legacy] +[098h 0152 8] Address : 0000000000000600 + +[0A0h 0160 12] PM1B Event Block : [Generic Address Structure] +[0A0h 0160 1] Space ID : 00 [SystemMemory] +[0A1h 0161 1] Bit Width : 00 +[0A2h 0162 1] Bit Offset : 00 +[0A3h 0163 1] Encoded Access Width : 00 [Undefined/Legacy] +[0A4h 0164 8] Address : 0000000000000000 + +[0ACh 0172 12] PM1A Control Block : [Generic Address Structure] +[0ACh 0172 1] Space ID : 01 [SystemIO] +[0ADh 0173 1] Bit Width : 10 +[0AEh 0174 1] Bit Offset : 00 +[0AFh 0175 1] Encoded Access Width : 00 [Undefined/Legacy] +[0B0h 0176 8] Address : 0000000000000604 + +[0B8h 0184 12] PM1B Control Block : [Generic Address Structure] +[0B8h 0184 1] Space ID : 00 [SystemMemory] +[0B9h 0185 1] Bit Width : 00 +[0BAh 0186 1] Bit Offset : 00 +[0BBh 0187 1] Encoded Access Width : 00 [Undefined/Legacy] +[0BCh 0188 8] Address : 0000000000000000 + +[0C4h 0196 12] PM2 Control Block : [Generic Address Structure] +[0C4h 0196 1] Space ID : 00 [SystemMemory] +[0C5h 0197 1] Bit Width : 00 +[0C6h 0198 1] Bit Offset : 00 +[0C7h 0199 1] Encoded Access Width : 00 [Undefined/Legacy] +[0C8h 0200 8] Address : 0000000000000000 + +[0D0h 0208 12] PM Timer Block : [Generic Address Structure] +[0D0h 0208 1] Space ID : 01 [SystemIO] +[0D1h 0209 1] Bit Width : 20 +[0D2h 0210 1] Bit Offset : 00 +[0D3h 0211 1] Encoded Access Width : 00 [Undefined/Legacy] +[0D4h 0212 8] Address : 0000000000000608 + +[0DCh 0220 12] GPE0 Block : [Generic Address Structure] +[0DCh 0220 1] Space ID : 01 [SystemIO] +[0DDh 0221 1] Bit Width : 80 +[0DEh 0222 1] Bit Offset : 00 +[0DFh 0223 1] Encoded Access Width : 00 [Undefined/Legacy] +[0E0h 0224 8] Address : 0000000000000620 + +[0E8h 0232 12] GPE1 Block : [Generic Address Structure] +[0E8h 0232 1] Space ID : 00 [SystemMemory] +[0E9h 0233 1] Bit Width : 00 +[0EAh 0234 1] Bit Offset : 00 +[0EBh 0235 1] Encoded Access Width : 00 [Undefined/Legacy] +[0ECh 0236 8] Address : 0000000000000000 + + +Raw Table Data: Length 244 (0xF4) + + 0000: 46 41 43 50 F4 00 00 00 03 1F 42 4F 43 48 53 20 // FACP......BOCHS + 0010: 42 58 50 43 46 41 43 50 01 00 00 00 42 58 50 43 // BXPCFACP....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 01 00 09 00 // ................ + 0030: B2 00 00 00 02 03 00 00 00 06 00 00 00 00 00 00 // ................ + 0040: 04 06 00 00 00 00 00 00 00 00 00 00 08 06 00 00 // ................ + 0050: 20 06 00 00 00 00 00 00 04 02 00 04 10 00 00 00 // ............... + 0060: FF 0F FF 0F 00 00 00 00 00 00 00 00 32 00 00 00 // ............2... + 0070: A5 84 00 00 01 08 00 00 F9 0C 00 00 00 00 00 00 // ................ + 0080: 0F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0090: 00 00 00 00 01 20 00 00 00 06 00 00 00 00 00 00 // ..... .......... + 00A0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 // ................ + 00B0: 04 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00D0: 01 20 00 00 08 06 00 00 00 00 00 00 01 80 00 00 // . .............. + 00E0: 20 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ............... + 00F0: 00 00 00 00 // .... diff --git a/tests/data/acpi/q35/FACP.dimmpxm b/tests/data/acpi/q35/FACP.dimmpxm new file mode 100644 index 0000000000000000000000000000000000000000..72c9d97902a4bbf14896023d9ba78e0899d6517b GIT binary patch literal 244 zcmZvW!3l&w5Cm&fMBzX)aAPn7T@Zh_a390*VJaqIY<_$xgRZV{_35F9p6RZ!ZUy41 z{o4L#+QHebu}%P;RXsw^0z@&8o^EoflBHn0ACZ*6UhIX>*T6i1WUzfs_g)5wdG3cu Q$?M-gG^;%n8J|8O2jpN50RR91 literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/FACP.dimmpxm.dsl b/tests/data/acpi/q35/FACP.dimmpxm.dsl new file mode 100644 index 0000000000..14f7c181b8 --- /dev/null +++ b/tests/data/acpi/q35/FACP.dimmpxm.dsl @@ -0,0 +1,179 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/FACP.dimmpxm, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [FACP] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "FACP" [Fixed ACPI Description Table (FADT)] +[004h 0004 4] Table Length : 000000F4 +[008h 0008 1] Revision : 03 +[009h 0009 1] Checksum : 1F +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCFACP" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] FACS Address : 00000000 +[028h 0040 4] DSDT Address : 00000000 +[02Ch 0044 1] Model : 01 +[02Dh 0045 1] PM Profile : 00 [Unspecified] +[02Eh 0046 2] SCI Interrupt : 0009 +[030h 0048 4] SMI Command Port : 000000B2 +[034h 0052 1] ACPI Enable Value : 02 +[035h 0053 1] ACPI Disable Value : 03 +[036h 0054 1] S4BIOS Command : 00 +[037h 0055 1] P-State Control : 00 +[038h 0056 4] PM1A Event Block Address : 00000600 +[03Ch 0060 4] PM1B Event Block Address : 00000000 +[040h 0064 4] PM1A Control Block Address : 00000604 +[044h 0068 4] PM1B Control Block Address : 00000000 +[048h 0072 4] PM2 Control Block Address : 00000000 +[04Ch 0076 4] PM Timer Block Address : 00000608 +[050h 0080 4] GPE0 Block Address : 00000620 +[054h 0084 4] GPE1 Block Address : 00000000 +[058h 0088 1] PM1 Event Block Length : 04 +[059h 0089 1] PM1 Control Block Length : 02 +[05Ah 0090 1] PM2 Control Block Length : 00 +[05Bh 0091 1] PM Timer Block Length : 04 +[05Ch 0092 1] GPE0 Block Length : 10 +[05Dh 0093 1] GPE1 Block Length : 00 +[05Eh 0094 1] GPE1 Base Offset : 00 +[05Fh 0095 1] _CST Support : 00 +[060h 0096 2] C2 Latency : 0FFF +[062h 0098 2] C3 Latency : 0FFF +[064h 0100 2] CPU Cache Size : 0000 +[066h 0102 2] Cache Flush Stride : 0000 +[068h 0104 1] Duty Cycle Offset : 00 +[069h 0105 1] Duty Cycle Width : 00 +[06Ah 0106 1] RTC Day Alarm Index : 00 +[06Bh 0107 1] RTC Month Alarm Index : 00 +[06Ch 0108 1] RTC Century Index : 32 +[06Dh 0109 2] Boot Flags (decoded below) : 0000 + Legacy Devices Supported (V2) : 0 + 8042 Present on ports 60/64 (V2) : 0 + VGA Not Present (V4) : 0 + MSI Not Supported (V4) : 0 + PCIe ASPM Not Supported (V4) : 0 + CMOS RTC Not Present (V5) : 0 +[06Fh 0111 1] Reserved : 00 +[070h 0112 4] Flags (decoded below) : 000084A5 + WBINVD instruction is operational (V1) : 1 + WBINVD flushes all caches (V1) : 0 + All CPUs support C1 (V1) : 1 + C2 works on MP system (V1) : 0 + Control Method Power Button (V1) : 0 + Control Method Sleep Button (V1) : 1 + RTC wake not in fixed reg space (V1) : 0 + RTC can wake system from S4 (V1) : 1 + 32-bit PM Timer (V1) : 0 + Docking Supported (V1) : 0 + Reset Register Supported (V2) : 1 + Sealed Case (V3) : 0 + Headless - No Video (V3) : 0 + Use native instr after SLP_TYPx (V3) : 0 + PCIEXP_WAK Bits Supported (V4) : 0 + Use Platform Timer (V4) : 1 + RTC_STS valid on S4 wake (V4) : 0 + Remote Power-on capable (V4) : 0 + Use APIC Cluster Model (V4) : 0 + Use APIC Physical Destination Mode (V4) : 0 + Hardware Reduced (V5) : 0 + Low Power S0 Idle (V5) : 0 + +[074h 0116 12] Reset Register : [Generic Address Structure] +[074h 0116 1] Space ID : 01 [SystemIO] +[075h 0117 1] Bit Width : 08 +[076h 0118 1] Bit Offset : 00 +[077h 0119 1] Encoded Access Width : 00 [Undefined/Legacy] +[078h 0120 8] Address : 0000000000000CF9 + +[080h 0128 1] Value to cause reset : 0F +[081h 0129 2] ARM Flags (decoded below) : 0000 + PSCI Compliant : 0 + Must use HVC for PSCI : 0 + +[083h 0131 1] FADT Minor Revision : 00 +[084h 0132 8] FACS Address : 0000000000000000 +[08Ch 0140 8] DSDT Address : 0000000000000000 +[094h 0148 12] PM1A Event Block : [Generic Address Structure] +[094h 0148 1] Space ID : 01 [SystemIO] +[095h 0149 1] Bit Width : 20 +[096h 0150 1] Bit Offset : 00 +[097h 0151 1] Encoded Access Width : 00 [Undefined/Legacy] +[098h 0152 8] Address : 0000000000000600 + +[0A0h 0160 12] PM1B Event Block : [Generic Address Structure] +[0A0h 0160 1] Space ID : 00 [SystemMemory] +[0A1h 0161 1] Bit Width : 00 +[0A2h 0162 1] Bit Offset : 00 +[0A3h 0163 1] Encoded Access Width : 00 [Undefined/Legacy] +[0A4h 0164 8] Address : 0000000000000000 + +[0ACh 0172 12] PM1A Control Block : [Generic Address Structure] +[0ACh 0172 1] Space ID : 01 [SystemIO] +[0ADh 0173 1] Bit Width : 10 +[0AEh 0174 1] Bit Offset : 00 +[0AFh 0175 1] Encoded Access Width : 00 [Undefined/Legacy] +[0B0h 0176 8] Address : 0000000000000604 + +[0B8h 0184 12] PM1B Control Block : [Generic Address Structure] +[0B8h 0184 1] Space ID : 00 [SystemMemory] +[0B9h 0185 1] Bit Width : 00 +[0BAh 0186 1] Bit Offset : 00 +[0BBh 0187 1] Encoded Access Width : 00 [Undefined/Legacy] +[0BCh 0188 8] Address : 0000000000000000 + +[0C4h 0196 12] PM2 Control Block : [Generic Address Structure] +[0C4h 0196 1] Space ID : 00 [SystemMemory] +[0C5h 0197 1] Bit Width : 00 +[0C6h 0198 1] Bit Offset : 00 +[0C7h 0199 1] Encoded Access Width : 00 [Undefined/Legacy] +[0C8h 0200 8] Address : 0000000000000000 + +[0D0h 0208 12] PM Timer Block : [Generic Address Structure] +[0D0h 0208 1] Space ID : 01 [SystemIO] +[0D1h 0209 1] Bit Width : 20 +[0D2h 0210 1] Bit Offset : 00 +[0D3h 0211 1] Encoded Access Width : 00 [Undefined/Legacy] +[0D4h 0212 8] Address : 0000000000000608 + +[0DCh 0220 12] GPE0 Block : [Generic Address Structure] +[0DCh 0220 1] Space ID : 01 [SystemIO] +[0DDh 0221 1] Bit Width : 80 +[0DEh 0222 1] Bit Offset : 00 +[0DFh 0223 1] Encoded Access Width : 00 [Undefined/Legacy] +[0E0h 0224 8] Address : 0000000000000620 + +[0E8h 0232 12] GPE1 Block : [Generic Address Structure] +[0E8h 0232 1] Space ID : 00 [SystemMemory] +[0E9h 0233 1] Bit Width : 00 +[0EAh 0234 1] Bit Offset : 00 +[0EBh 0235 1] Encoded Access Width : 00 [Undefined/Legacy] +[0ECh 0236 8] Address : 0000000000000000 + + +Raw Table Data: Length 244 (0xF4) + + 0000: 46 41 43 50 F4 00 00 00 03 1F 42 4F 43 48 53 20 // FACP......BOCHS + 0010: 42 58 50 43 46 41 43 50 01 00 00 00 42 58 50 43 // BXPCFACP....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 01 00 09 00 // ................ + 0030: B2 00 00 00 02 03 00 00 00 06 00 00 00 00 00 00 // ................ + 0040: 04 06 00 00 00 00 00 00 00 00 00 00 08 06 00 00 // ................ + 0050: 20 06 00 00 00 00 00 00 04 02 00 04 10 00 00 00 // ............... + 0060: FF 0F FF 0F 00 00 00 00 00 00 00 00 32 00 00 00 // ............2... + 0070: A5 84 00 00 01 08 00 00 F9 0C 00 00 00 00 00 00 // ................ + 0080: 0F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0090: 00 00 00 00 01 20 00 00 00 06 00 00 00 00 00 00 // ..... .......... + 00A0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 // ................ + 00B0: 04 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00D0: 01 20 00 00 08 06 00 00 00 00 00 00 01 80 00 00 // . .............. + 00E0: 20 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ............... + 00F0: 00 00 00 00 // .... diff --git a/tests/data/acpi/q35/FACP.dsl b/tests/data/acpi/q35/FACP.dsl new file mode 100644 index 0000000000..1a8893b320 --- /dev/null +++ b/tests/data/acpi/q35/FACP.dsl @@ -0,0 +1,179 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/FACP.tis, Mon Sep 28 17:24:38 2020 + * + * ACPI Data Table [FACP] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "FACP" [Fixed ACPI Description Table (FADT)] +[004h 0004 4] Table Length : 000000F4 +[008h 0008 1] Revision : 03 +[009h 0009 1] Checksum : 1F +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCFACP" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] FACS Address : 00000000 +[028h 0040 4] DSDT Address : 00000000 +[02Ch 0044 1] Model : 01 +[02Dh 0045 1] PM Profile : 00 [Unspecified] +[02Eh 0046 2] SCI Interrupt : 0009 +[030h 0048 4] SMI Command Port : 000000B2 +[034h 0052 1] ACPI Enable Value : 02 +[035h 0053 1] ACPI Disable Value : 03 +[036h 0054 1] S4BIOS Command : 00 +[037h 0055 1] P-State Control : 00 +[038h 0056 4] PM1A Event Block Address : 00000600 +[03Ch 0060 4] PM1B Event Block Address : 00000000 +[040h 0064 4] PM1A Control Block Address : 00000604 +[044h 0068 4] PM1B Control Block Address : 00000000 +[048h 0072 4] PM2 Control Block Address : 00000000 +[04Ch 0076 4] PM Timer Block Address : 00000608 +[050h 0080 4] GPE0 Block Address : 00000620 +[054h 0084 4] GPE1 Block Address : 00000000 +[058h 0088 1] PM1 Event Block Length : 04 +[059h 0089 1] PM1 Control Block Length : 02 +[05Ah 0090 1] PM2 Control Block Length : 00 +[05Bh 0091 1] PM Timer Block Length : 04 +[05Ch 0092 1] GPE0 Block Length : 10 +[05Dh 0093 1] GPE1 Block Length : 00 +[05Eh 0094 1] GPE1 Base Offset : 00 +[05Fh 0095 1] _CST Support : 00 +[060h 0096 2] C2 Latency : 0FFF +[062h 0098 2] C3 Latency : 0FFF +[064h 0100 2] CPU Cache Size : 0000 +[066h 0102 2] Cache Flush Stride : 0000 +[068h 0104 1] Duty Cycle Offset : 00 +[069h 0105 1] Duty Cycle Width : 00 +[06Ah 0106 1] RTC Day Alarm Index : 00 +[06Bh 0107 1] RTC Month Alarm Index : 00 +[06Ch 0108 1] RTC Century Index : 32 +[06Dh 0109 2] Boot Flags (decoded below) : 0000 + Legacy Devices Supported (V2) : 0 + 8042 Present on ports 60/64 (V2) : 0 + VGA Not Present (V4) : 0 + MSI Not Supported (V4) : 0 + PCIe ASPM Not Supported (V4) : 0 + CMOS RTC Not Present (V5) : 0 +[06Fh 0111 1] Reserved : 00 +[070h 0112 4] Flags (decoded below) : 000084A5 + WBINVD instruction is operational (V1) : 1 + WBINVD flushes all caches (V1) : 0 + All CPUs support C1 (V1) : 1 + C2 works on MP system (V1) : 0 + Control Method Power Button (V1) : 0 + Control Method Sleep Button (V1) : 1 + RTC wake not in fixed reg space (V1) : 0 + RTC can wake system from S4 (V1) : 1 + 32-bit PM Timer (V1) : 0 + Docking Supported (V1) : 0 + Reset Register Supported (V2) : 1 + Sealed Case (V3) : 0 + Headless - No Video (V3) : 0 + Use native instr after SLP_TYPx (V3) : 0 + PCIEXP_WAK Bits Supported (V4) : 0 + Use Platform Timer (V4) : 1 + RTC_STS valid on S4 wake (V4) : 0 + Remote Power-on capable (V4) : 0 + Use APIC Cluster Model (V4) : 0 + Use APIC Physical Destination Mode (V4) : 0 + Hardware Reduced (V5) : 0 + Low Power S0 Idle (V5) : 0 + +[074h 0116 12] Reset Register : [Generic Address Structure] +[074h 0116 1] Space ID : 01 [SystemIO] +[075h 0117 1] Bit Width : 08 +[076h 0118 1] Bit Offset : 00 +[077h 0119 1] Encoded Access Width : 00 [Undefined/Legacy] +[078h 0120 8] Address : 0000000000000CF9 + +[080h 0128 1] Value to cause reset : 0F +[081h 0129 2] ARM Flags (decoded below) : 0000 + PSCI Compliant : 0 + Must use HVC for PSCI : 0 + +[083h 0131 1] FADT Minor Revision : 00 +[084h 0132 8] FACS Address : 0000000000000000 +[08Ch 0140 8] DSDT Address : 0000000000000000 +[094h 0148 12] PM1A Event Block : [Generic Address Structure] +[094h 0148 1] Space ID : 01 [SystemIO] +[095h 0149 1] Bit Width : 20 +[096h 0150 1] Bit Offset : 00 +[097h 0151 1] Encoded Access Width : 00 [Undefined/Legacy] +[098h 0152 8] Address : 0000000000000600 + +[0A0h 0160 12] PM1B Event Block : [Generic Address Structure] +[0A0h 0160 1] Space ID : 00 [SystemMemory] +[0A1h 0161 1] Bit Width : 00 +[0A2h 0162 1] Bit Offset : 00 +[0A3h 0163 1] Encoded Access Width : 00 [Undefined/Legacy] +[0A4h 0164 8] Address : 0000000000000000 + +[0ACh 0172 12] PM1A Control Block : [Generic Address Structure] +[0ACh 0172 1] Space ID : 01 [SystemIO] +[0ADh 0173 1] Bit Width : 10 +[0AEh 0174 1] Bit Offset : 00 +[0AFh 0175 1] Encoded Access Width : 00 [Undefined/Legacy] +[0B0h 0176 8] Address : 0000000000000604 + +[0B8h 0184 12] PM1B Control Block : [Generic Address Structure] +[0B8h 0184 1] Space ID : 00 [SystemMemory] +[0B9h 0185 1] Bit Width : 00 +[0BAh 0186 1] Bit Offset : 00 +[0BBh 0187 1] Encoded Access Width : 00 [Undefined/Legacy] +[0BCh 0188 8] Address : 0000000000000000 + +[0C4h 0196 12] PM2 Control Block : [Generic Address Structure] +[0C4h 0196 1] Space ID : 00 [SystemMemory] +[0C5h 0197 1] Bit Width : 00 +[0C6h 0198 1] Bit Offset : 00 +[0C7h 0199 1] Encoded Access Width : 00 [Undefined/Legacy] +[0C8h 0200 8] Address : 0000000000000000 + +[0D0h 0208 12] PM Timer Block : [Generic Address Structure] +[0D0h 0208 1] Space ID : 01 [SystemIO] +[0D1h 0209 1] Bit Width : 20 +[0D2h 0210 1] Bit Offset : 00 +[0D3h 0211 1] Encoded Access Width : 00 [Undefined/Legacy] +[0D4h 0212 8] Address : 0000000000000608 + +[0DCh 0220 12] GPE0 Block : [Generic Address Structure] +[0DCh 0220 1] Space ID : 01 [SystemIO] +[0DDh 0221 1] Bit Width : 80 +[0DEh 0222 1] Bit Offset : 00 +[0DFh 0223 1] Encoded Access Width : 00 [Undefined/Legacy] +[0E0h 0224 8] Address : 0000000000000620 + +[0E8h 0232 12] GPE1 Block : [Generic Address Structure] +[0E8h 0232 1] Space ID : 00 [SystemMemory] +[0E9h 0233 1] Bit Width : 00 +[0EAh 0234 1] Bit Offset : 00 +[0EBh 0235 1] Encoded Access Width : 00 [Undefined/Legacy] +[0ECh 0236 8] Address : 0000000000000000 + + +Raw Table Data: Length 244 (0xF4) + + 0000: 46 41 43 50 F4 00 00 00 03 1F 42 4F 43 48 53 20 // FACP......BOCHS + 0010: 42 58 50 43 46 41 43 50 01 00 00 00 42 58 50 43 // BXPCFACP....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 01 00 09 00 // ................ + 0030: B2 00 00 00 02 03 00 00 00 06 00 00 00 00 00 00 // ................ + 0040: 04 06 00 00 00 00 00 00 00 00 00 00 08 06 00 00 // ................ + 0050: 20 06 00 00 00 00 00 00 04 02 00 04 10 00 00 00 // ............... + 0060: FF 0F FF 0F 00 00 00 00 00 00 00 00 32 00 00 00 // ............2... + 0070: A5 84 00 00 01 08 00 00 F9 0C 00 00 00 00 00 00 // ................ + 0080: 0F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0090: 00 00 00 00 01 20 00 00 00 06 00 00 00 00 00 00 // ..... .......... + 00A0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 // ................ + 00B0: 04 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00D0: 01 20 00 00 08 06 00 00 00 00 00 00 01 80 00 00 // . .............. + 00E0: 20 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ............... + 00F0: 00 00 00 00 // .... diff --git a/tests/data/acpi/q35/FACP.ipmibt b/tests/data/acpi/q35/FACP.ipmibt new file mode 100644 index 0000000000000000000000000000000000000000..72c9d97902a4bbf14896023d9ba78e0899d6517b GIT binary patch literal 244 zcmZvW!3l&w5Cm&fMBzX)aAPn7T@Zh_a390*VJaqIY<_$xgRZV{_35F9p6RZ!ZUy41 z{o4L#+QHebu}%P;RXsw^0z@&8o^EoflBHn0ACZ*6UhIX>*T6i1WUzfs_g)5wdG3cu Q$?M-gG^;%n8J|8O2jpN50RR91 literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/FACP.ipmibt.dsl b/tests/data/acpi/q35/FACP.ipmibt.dsl new file mode 100644 index 0000000000..b6e56c5af2 --- /dev/null +++ b/tests/data/acpi/q35/FACP.ipmibt.dsl @@ -0,0 +1,179 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/FACP.ipmibt, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [FACP] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "FACP" [Fixed ACPI Description Table (FADT)] +[004h 0004 4] Table Length : 000000F4 +[008h 0008 1] Revision : 03 +[009h 0009 1] Checksum : 1F +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCFACP" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] FACS Address : 00000000 +[028h 0040 4] DSDT Address : 00000000 +[02Ch 0044 1] Model : 01 +[02Dh 0045 1] PM Profile : 00 [Unspecified] +[02Eh 0046 2] SCI Interrupt : 0009 +[030h 0048 4] SMI Command Port : 000000B2 +[034h 0052 1] ACPI Enable Value : 02 +[035h 0053 1] ACPI Disable Value : 03 +[036h 0054 1] S4BIOS Command : 00 +[037h 0055 1] P-State Control : 00 +[038h 0056 4] PM1A Event Block Address : 00000600 +[03Ch 0060 4] PM1B Event Block Address : 00000000 +[040h 0064 4] PM1A Control Block Address : 00000604 +[044h 0068 4] PM1B Control Block Address : 00000000 +[048h 0072 4] PM2 Control Block Address : 00000000 +[04Ch 0076 4] PM Timer Block Address : 00000608 +[050h 0080 4] GPE0 Block Address : 00000620 +[054h 0084 4] GPE1 Block Address : 00000000 +[058h 0088 1] PM1 Event Block Length : 04 +[059h 0089 1] PM1 Control Block Length : 02 +[05Ah 0090 1] PM2 Control Block Length : 00 +[05Bh 0091 1] PM Timer Block Length : 04 +[05Ch 0092 1] GPE0 Block Length : 10 +[05Dh 0093 1] GPE1 Block Length : 00 +[05Eh 0094 1] GPE1 Base Offset : 00 +[05Fh 0095 1] _CST Support : 00 +[060h 0096 2] C2 Latency : 0FFF +[062h 0098 2] C3 Latency : 0FFF +[064h 0100 2] CPU Cache Size : 0000 +[066h 0102 2] Cache Flush Stride : 0000 +[068h 0104 1] Duty Cycle Offset : 00 +[069h 0105 1] Duty Cycle Width : 00 +[06Ah 0106 1] RTC Day Alarm Index : 00 +[06Bh 0107 1] RTC Month Alarm Index : 00 +[06Ch 0108 1] RTC Century Index : 32 +[06Dh 0109 2] Boot Flags (decoded below) : 0000 + Legacy Devices Supported (V2) : 0 + 8042 Present on ports 60/64 (V2) : 0 + VGA Not Present (V4) : 0 + MSI Not Supported (V4) : 0 + PCIe ASPM Not Supported (V4) : 0 + CMOS RTC Not Present (V5) : 0 +[06Fh 0111 1] Reserved : 00 +[070h 0112 4] Flags (decoded below) : 000084A5 + WBINVD instruction is operational (V1) : 1 + WBINVD flushes all caches (V1) : 0 + All CPUs support C1 (V1) : 1 + C2 works on MP system (V1) : 0 + Control Method Power Button (V1) : 0 + Control Method Sleep Button (V1) : 1 + RTC wake not in fixed reg space (V1) : 0 + RTC can wake system from S4 (V1) : 1 + 32-bit PM Timer (V1) : 0 + Docking Supported (V1) : 0 + Reset Register Supported (V2) : 1 + Sealed Case (V3) : 0 + Headless - No Video (V3) : 0 + Use native instr after SLP_TYPx (V3) : 0 + PCIEXP_WAK Bits Supported (V4) : 0 + Use Platform Timer (V4) : 1 + RTC_STS valid on S4 wake (V4) : 0 + Remote Power-on capable (V4) : 0 + Use APIC Cluster Model (V4) : 0 + Use APIC Physical Destination Mode (V4) : 0 + Hardware Reduced (V5) : 0 + Low Power S0 Idle (V5) : 0 + +[074h 0116 12] Reset Register : [Generic Address Structure] +[074h 0116 1] Space ID : 01 [SystemIO] +[075h 0117 1] Bit Width : 08 +[076h 0118 1] Bit Offset : 00 +[077h 0119 1] Encoded Access Width : 00 [Undefined/Legacy] +[078h 0120 8] Address : 0000000000000CF9 + +[080h 0128 1] Value to cause reset : 0F +[081h 0129 2] ARM Flags (decoded below) : 0000 + PSCI Compliant : 0 + Must use HVC for PSCI : 0 + +[083h 0131 1] FADT Minor Revision : 00 +[084h 0132 8] FACS Address : 0000000000000000 +[08Ch 0140 8] DSDT Address : 0000000000000000 +[094h 0148 12] PM1A Event Block : [Generic Address Structure] +[094h 0148 1] Space ID : 01 [SystemIO] +[095h 0149 1] Bit Width : 20 +[096h 0150 1] Bit Offset : 00 +[097h 0151 1] Encoded Access Width : 00 [Undefined/Legacy] +[098h 0152 8] Address : 0000000000000600 + +[0A0h 0160 12] PM1B Event Block : [Generic Address Structure] +[0A0h 0160 1] Space ID : 00 [SystemMemory] +[0A1h 0161 1] Bit Width : 00 +[0A2h 0162 1] Bit Offset : 00 +[0A3h 0163 1] Encoded Access Width : 00 [Undefined/Legacy] +[0A4h 0164 8] Address : 0000000000000000 + +[0ACh 0172 12] PM1A Control Block : [Generic Address Structure] +[0ACh 0172 1] Space ID : 01 [SystemIO] +[0ADh 0173 1] Bit Width : 10 +[0AEh 0174 1] Bit Offset : 00 +[0AFh 0175 1] Encoded Access Width : 00 [Undefined/Legacy] +[0B0h 0176 8] Address : 0000000000000604 + +[0B8h 0184 12] PM1B Control Block : [Generic Address Structure] +[0B8h 0184 1] Space ID : 00 [SystemMemory] +[0B9h 0185 1] Bit Width : 00 +[0BAh 0186 1] Bit Offset : 00 +[0BBh 0187 1] Encoded Access Width : 00 [Undefined/Legacy] +[0BCh 0188 8] Address : 0000000000000000 + +[0C4h 0196 12] PM2 Control Block : [Generic Address Structure] +[0C4h 0196 1] Space ID : 00 [SystemMemory] +[0C5h 0197 1] Bit Width : 00 +[0C6h 0198 1] Bit Offset : 00 +[0C7h 0199 1] Encoded Access Width : 00 [Undefined/Legacy] +[0C8h 0200 8] Address : 0000000000000000 + +[0D0h 0208 12] PM Timer Block : [Generic Address Structure] +[0D0h 0208 1] Space ID : 01 [SystemIO] +[0D1h 0209 1] Bit Width : 20 +[0D2h 0210 1] Bit Offset : 00 +[0D3h 0211 1] Encoded Access Width : 00 [Undefined/Legacy] +[0D4h 0212 8] Address : 0000000000000608 + +[0DCh 0220 12] GPE0 Block : [Generic Address Structure] +[0DCh 0220 1] Space ID : 01 [SystemIO] +[0DDh 0221 1] Bit Width : 80 +[0DEh 0222 1] Bit Offset : 00 +[0DFh 0223 1] Encoded Access Width : 00 [Undefined/Legacy] +[0E0h 0224 8] Address : 0000000000000620 + +[0E8h 0232 12] GPE1 Block : [Generic Address Structure] +[0E8h 0232 1] Space ID : 00 [SystemMemory] +[0E9h 0233 1] Bit Width : 00 +[0EAh 0234 1] Bit Offset : 00 +[0EBh 0235 1] Encoded Access Width : 00 [Undefined/Legacy] +[0ECh 0236 8] Address : 0000000000000000 + + +Raw Table Data: Length 244 (0xF4) + + 0000: 46 41 43 50 F4 00 00 00 03 1F 42 4F 43 48 53 20 // FACP......BOCHS + 0010: 42 58 50 43 46 41 43 50 01 00 00 00 42 58 50 43 // BXPCFACP....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 01 00 09 00 // ................ + 0030: B2 00 00 00 02 03 00 00 00 06 00 00 00 00 00 00 // ................ + 0040: 04 06 00 00 00 00 00 00 00 00 00 00 08 06 00 00 // ................ + 0050: 20 06 00 00 00 00 00 00 04 02 00 04 10 00 00 00 // ............... + 0060: FF 0F FF 0F 00 00 00 00 00 00 00 00 32 00 00 00 // ............2... + 0070: A5 84 00 00 01 08 00 00 F9 0C 00 00 00 00 00 00 // ................ + 0080: 0F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0090: 00 00 00 00 01 20 00 00 00 06 00 00 00 00 00 00 // ..... .......... + 00A0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 // ................ + 00B0: 04 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00D0: 01 20 00 00 08 06 00 00 00 00 00 00 01 80 00 00 // . .............. + 00E0: 20 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ............... + 00F0: 00 00 00 00 // .... diff --git a/tests/data/acpi/q35/FACP.memhp b/tests/data/acpi/q35/FACP.memhp new file mode 100644 index 0000000000000000000000000000000000000000..72c9d97902a4bbf14896023d9ba78e0899d6517b GIT binary patch literal 244 zcmZvW!3l&w5Cm&fMBzX)aAPn7T@Zh_a390*VJaqIY<_$xgRZV{_35F9p6RZ!ZUy41 z{o4L#+QHebu}%P;RXsw^0z@&8o^EoflBHn0ACZ*6UhIX>*T6i1WUzfs_g)5wdG3cu Q$?M-gG^;%n8J|8O2jpN50RR91 literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/FACP.memhp.dsl b/tests/data/acpi/q35/FACP.memhp.dsl new file mode 100644 index 0000000000..2405fcdca8 --- /dev/null +++ b/tests/data/acpi/q35/FACP.memhp.dsl @@ -0,0 +1,179 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/FACP.memhp, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [FACP] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "FACP" [Fixed ACPI Description Table (FADT)] +[004h 0004 4] Table Length : 000000F4 +[008h 0008 1] Revision : 03 +[009h 0009 1] Checksum : 1F +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCFACP" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] FACS Address : 00000000 +[028h 0040 4] DSDT Address : 00000000 +[02Ch 0044 1] Model : 01 +[02Dh 0045 1] PM Profile : 00 [Unspecified] +[02Eh 0046 2] SCI Interrupt : 0009 +[030h 0048 4] SMI Command Port : 000000B2 +[034h 0052 1] ACPI Enable Value : 02 +[035h 0053 1] ACPI Disable Value : 03 +[036h 0054 1] S4BIOS Command : 00 +[037h 0055 1] P-State Control : 00 +[038h 0056 4] PM1A Event Block Address : 00000600 +[03Ch 0060 4] PM1B Event Block Address : 00000000 +[040h 0064 4] PM1A Control Block Address : 00000604 +[044h 0068 4] PM1B Control Block Address : 00000000 +[048h 0072 4] PM2 Control Block Address : 00000000 +[04Ch 0076 4] PM Timer Block Address : 00000608 +[050h 0080 4] GPE0 Block Address : 00000620 +[054h 0084 4] GPE1 Block Address : 00000000 +[058h 0088 1] PM1 Event Block Length : 04 +[059h 0089 1] PM1 Control Block Length : 02 +[05Ah 0090 1] PM2 Control Block Length : 00 +[05Bh 0091 1] PM Timer Block Length : 04 +[05Ch 0092 1] GPE0 Block Length : 10 +[05Dh 0093 1] GPE1 Block Length : 00 +[05Eh 0094 1] GPE1 Base Offset : 00 +[05Fh 0095 1] _CST Support : 00 +[060h 0096 2] C2 Latency : 0FFF +[062h 0098 2] C3 Latency : 0FFF +[064h 0100 2] CPU Cache Size : 0000 +[066h 0102 2] Cache Flush Stride : 0000 +[068h 0104 1] Duty Cycle Offset : 00 +[069h 0105 1] Duty Cycle Width : 00 +[06Ah 0106 1] RTC Day Alarm Index : 00 +[06Bh 0107 1] RTC Month Alarm Index : 00 +[06Ch 0108 1] RTC Century Index : 32 +[06Dh 0109 2] Boot Flags (decoded below) : 0000 + Legacy Devices Supported (V2) : 0 + 8042 Present on ports 60/64 (V2) : 0 + VGA Not Present (V4) : 0 + MSI Not Supported (V4) : 0 + PCIe ASPM Not Supported (V4) : 0 + CMOS RTC Not Present (V5) : 0 +[06Fh 0111 1] Reserved : 00 +[070h 0112 4] Flags (decoded below) : 000084A5 + WBINVD instruction is operational (V1) : 1 + WBINVD flushes all caches (V1) : 0 + All CPUs support C1 (V1) : 1 + C2 works on MP system (V1) : 0 + Control Method Power Button (V1) : 0 + Control Method Sleep Button (V1) : 1 + RTC wake not in fixed reg space (V1) : 0 + RTC can wake system from S4 (V1) : 1 + 32-bit PM Timer (V1) : 0 + Docking Supported (V1) : 0 + Reset Register Supported (V2) : 1 + Sealed Case (V3) : 0 + Headless - No Video (V3) : 0 + Use native instr after SLP_TYPx (V3) : 0 + PCIEXP_WAK Bits Supported (V4) : 0 + Use Platform Timer (V4) : 1 + RTC_STS valid on S4 wake (V4) : 0 + Remote Power-on capable (V4) : 0 + Use APIC Cluster Model (V4) : 0 + Use APIC Physical Destination Mode (V4) : 0 + Hardware Reduced (V5) : 0 + Low Power S0 Idle (V5) : 0 + +[074h 0116 12] Reset Register : [Generic Address Structure] +[074h 0116 1] Space ID : 01 [SystemIO] +[075h 0117 1] Bit Width : 08 +[076h 0118 1] Bit Offset : 00 +[077h 0119 1] Encoded Access Width : 00 [Undefined/Legacy] +[078h 0120 8] Address : 0000000000000CF9 + +[080h 0128 1] Value to cause reset : 0F +[081h 0129 2] ARM Flags (decoded below) : 0000 + PSCI Compliant : 0 + Must use HVC for PSCI : 0 + +[083h 0131 1] FADT Minor Revision : 00 +[084h 0132 8] FACS Address : 0000000000000000 +[08Ch 0140 8] DSDT Address : 0000000000000000 +[094h 0148 12] PM1A Event Block : [Generic Address Structure] +[094h 0148 1] Space ID : 01 [SystemIO] +[095h 0149 1] Bit Width : 20 +[096h 0150 1] Bit Offset : 00 +[097h 0151 1] Encoded Access Width : 00 [Undefined/Legacy] +[098h 0152 8] Address : 0000000000000600 + +[0A0h 0160 12] PM1B Event Block : [Generic Address Structure] +[0A0h 0160 1] Space ID : 00 [SystemMemory] +[0A1h 0161 1] Bit Width : 00 +[0A2h 0162 1] Bit Offset : 00 +[0A3h 0163 1] Encoded Access Width : 00 [Undefined/Legacy] +[0A4h 0164 8] Address : 0000000000000000 + +[0ACh 0172 12] PM1A Control Block : [Generic Address Structure] +[0ACh 0172 1] Space ID : 01 [SystemIO] +[0ADh 0173 1] Bit Width : 10 +[0AEh 0174 1] Bit Offset : 00 +[0AFh 0175 1] Encoded Access Width : 00 [Undefined/Legacy] +[0B0h 0176 8] Address : 0000000000000604 + +[0B8h 0184 12] PM1B Control Block : [Generic Address Structure] +[0B8h 0184 1] Space ID : 00 [SystemMemory] +[0B9h 0185 1] Bit Width : 00 +[0BAh 0186 1] Bit Offset : 00 +[0BBh 0187 1] Encoded Access Width : 00 [Undefined/Legacy] +[0BCh 0188 8] Address : 0000000000000000 + +[0C4h 0196 12] PM2 Control Block : [Generic Address Structure] +[0C4h 0196 1] Space ID : 00 [SystemMemory] +[0C5h 0197 1] Bit Width : 00 +[0C6h 0198 1] Bit Offset : 00 +[0C7h 0199 1] Encoded Access Width : 00 [Undefined/Legacy] +[0C8h 0200 8] Address : 0000000000000000 + +[0D0h 0208 12] PM Timer Block : [Generic Address Structure] +[0D0h 0208 1] Space ID : 01 [SystemIO] +[0D1h 0209 1] Bit Width : 20 +[0D2h 0210 1] Bit Offset : 00 +[0D3h 0211 1] Encoded Access Width : 00 [Undefined/Legacy] +[0D4h 0212 8] Address : 0000000000000608 + +[0DCh 0220 12] GPE0 Block : [Generic Address Structure] +[0DCh 0220 1] Space ID : 01 [SystemIO] +[0DDh 0221 1] Bit Width : 80 +[0DEh 0222 1] Bit Offset : 00 +[0DFh 0223 1] Encoded Access Width : 00 [Undefined/Legacy] +[0E0h 0224 8] Address : 0000000000000620 + +[0E8h 0232 12] GPE1 Block : [Generic Address Structure] +[0E8h 0232 1] Space ID : 00 [SystemMemory] +[0E9h 0233 1] Bit Width : 00 +[0EAh 0234 1] Bit Offset : 00 +[0EBh 0235 1] Encoded Access Width : 00 [Undefined/Legacy] +[0ECh 0236 8] Address : 0000000000000000 + + +Raw Table Data: Length 244 (0xF4) + + 0000: 46 41 43 50 F4 00 00 00 03 1F 42 4F 43 48 53 20 // FACP......BOCHS + 0010: 42 58 50 43 46 41 43 50 01 00 00 00 42 58 50 43 // BXPCFACP....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 01 00 09 00 // ................ + 0030: B2 00 00 00 02 03 00 00 00 06 00 00 00 00 00 00 // ................ + 0040: 04 06 00 00 00 00 00 00 00 00 00 00 08 06 00 00 // ................ + 0050: 20 06 00 00 00 00 00 00 04 02 00 04 10 00 00 00 // ............... + 0060: FF 0F FF 0F 00 00 00 00 00 00 00 00 32 00 00 00 // ............2... + 0070: A5 84 00 00 01 08 00 00 F9 0C 00 00 00 00 00 00 // ................ + 0080: 0F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0090: 00 00 00 00 01 20 00 00 00 06 00 00 00 00 00 00 // ..... .......... + 00A0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 // ................ + 00B0: 04 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00D0: 01 20 00 00 08 06 00 00 00 00 00 00 01 80 00 00 // . .............. + 00E0: 20 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ............... + 00F0: 00 00 00 00 // .... diff --git a/tests/data/acpi/q35/FACP.mmio64 b/tests/data/acpi/q35/FACP.mmio64 new file mode 100644 index 0000000000000000000000000000000000000000..72c9d97902a4bbf14896023d9ba78e0899d6517b GIT binary patch literal 244 zcmZvW!3l&w5Cm&fMBzX)aAPn7T@Zh_a390*VJaqIY<_$xgRZV{_35F9p6RZ!ZUy41 z{o4L#+QHebu}%P;RXsw^0z@&8o^EoflBHn0ACZ*6UhIX>*T6i1WUzfs_g)5wdG3cu Q$?M-gG^;%n8J|8O2jpN50RR91 literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/FACP.mmio64.dsl b/tests/data/acpi/q35/FACP.mmio64.dsl new file mode 100644 index 0000000000..9f51c42156 --- /dev/null +++ b/tests/data/acpi/q35/FACP.mmio64.dsl @@ -0,0 +1,179 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/FACP.mmio64, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [FACP] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "FACP" [Fixed ACPI Description Table (FADT)] +[004h 0004 4] Table Length : 000000F4 +[008h 0008 1] Revision : 03 +[009h 0009 1] Checksum : 1F +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCFACP" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] FACS Address : 00000000 +[028h 0040 4] DSDT Address : 00000000 +[02Ch 0044 1] Model : 01 +[02Dh 0045 1] PM Profile : 00 [Unspecified] +[02Eh 0046 2] SCI Interrupt : 0009 +[030h 0048 4] SMI Command Port : 000000B2 +[034h 0052 1] ACPI Enable Value : 02 +[035h 0053 1] ACPI Disable Value : 03 +[036h 0054 1] S4BIOS Command : 00 +[037h 0055 1] P-State Control : 00 +[038h 0056 4] PM1A Event Block Address : 00000600 +[03Ch 0060 4] PM1B Event Block Address : 00000000 +[040h 0064 4] PM1A Control Block Address : 00000604 +[044h 0068 4] PM1B Control Block Address : 00000000 +[048h 0072 4] PM2 Control Block Address : 00000000 +[04Ch 0076 4] PM Timer Block Address : 00000608 +[050h 0080 4] GPE0 Block Address : 00000620 +[054h 0084 4] GPE1 Block Address : 00000000 +[058h 0088 1] PM1 Event Block Length : 04 +[059h 0089 1] PM1 Control Block Length : 02 +[05Ah 0090 1] PM2 Control Block Length : 00 +[05Bh 0091 1] PM Timer Block Length : 04 +[05Ch 0092 1] GPE0 Block Length : 10 +[05Dh 0093 1] GPE1 Block Length : 00 +[05Eh 0094 1] GPE1 Base Offset : 00 +[05Fh 0095 1] _CST Support : 00 +[060h 0096 2] C2 Latency : 0FFF +[062h 0098 2] C3 Latency : 0FFF +[064h 0100 2] CPU Cache Size : 0000 +[066h 0102 2] Cache Flush Stride : 0000 +[068h 0104 1] Duty Cycle Offset : 00 +[069h 0105 1] Duty Cycle Width : 00 +[06Ah 0106 1] RTC Day Alarm Index : 00 +[06Bh 0107 1] RTC Month Alarm Index : 00 +[06Ch 0108 1] RTC Century Index : 32 +[06Dh 0109 2] Boot Flags (decoded below) : 0000 + Legacy Devices Supported (V2) : 0 + 8042 Present on ports 60/64 (V2) : 0 + VGA Not Present (V4) : 0 + MSI Not Supported (V4) : 0 + PCIe ASPM Not Supported (V4) : 0 + CMOS RTC Not Present (V5) : 0 +[06Fh 0111 1] Reserved : 00 +[070h 0112 4] Flags (decoded below) : 000084A5 + WBINVD instruction is operational (V1) : 1 + WBINVD flushes all caches (V1) : 0 + All CPUs support C1 (V1) : 1 + C2 works on MP system (V1) : 0 + Control Method Power Button (V1) : 0 + Control Method Sleep Button (V1) : 1 + RTC wake not in fixed reg space (V1) : 0 + RTC can wake system from S4 (V1) : 1 + 32-bit PM Timer (V1) : 0 + Docking Supported (V1) : 0 + Reset Register Supported (V2) : 1 + Sealed Case (V3) : 0 + Headless - No Video (V3) : 0 + Use native instr after SLP_TYPx (V3) : 0 + PCIEXP_WAK Bits Supported (V4) : 0 + Use Platform Timer (V4) : 1 + RTC_STS valid on S4 wake (V4) : 0 + Remote Power-on capable (V4) : 0 + Use APIC Cluster Model (V4) : 0 + Use APIC Physical Destination Mode (V4) : 0 + Hardware Reduced (V5) : 0 + Low Power S0 Idle (V5) : 0 + +[074h 0116 12] Reset Register : [Generic Address Structure] +[074h 0116 1] Space ID : 01 [SystemIO] +[075h 0117 1] Bit Width : 08 +[076h 0118 1] Bit Offset : 00 +[077h 0119 1] Encoded Access Width : 00 [Undefined/Legacy] +[078h 0120 8] Address : 0000000000000CF9 + +[080h 0128 1] Value to cause reset : 0F +[081h 0129 2] ARM Flags (decoded below) : 0000 + PSCI Compliant : 0 + Must use HVC for PSCI : 0 + +[083h 0131 1] FADT Minor Revision : 00 +[084h 0132 8] FACS Address : 0000000000000000 +[08Ch 0140 8] DSDT Address : 0000000000000000 +[094h 0148 12] PM1A Event Block : [Generic Address Structure] +[094h 0148 1] Space ID : 01 [SystemIO] +[095h 0149 1] Bit Width : 20 +[096h 0150 1] Bit Offset : 00 +[097h 0151 1] Encoded Access Width : 00 [Undefined/Legacy] +[098h 0152 8] Address : 0000000000000600 + +[0A0h 0160 12] PM1B Event Block : [Generic Address Structure] +[0A0h 0160 1] Space ID : 00 [SystemMemory] +[0A1h 0161 1] Bit Width : 00 +[0A2h 0162 1] Bit Offset : 00 +[0A3h 0163 1] Encoded Access Width : 00 [Undefined/Legacy] +[0A4h 0164 8] Address : 0000000000000000 + +[0ACh 0172 12] PM1A Control Block : [Generic Address Structure] +[0ACh 0172 1] Space ID : 01 [SystemIO] +[0ADh 0173 1] Bit Width : 10 +[0AEh 0174 1] Bit Offset : 00 +[0AFh 0175 1] Encoded Access Width : 00 [Undefined/Legacy] +[0B0h 0176 8] Address : 0000000000000604 + +[0B8h 0184 12] PM1B Control Block : [Generic Address Structure] +[0B8h 0184 1] Space ID : 00 [SystemMemory] +[0B9h 0185 1] Bit Width : 00 +[0BAh 0186 1] Bit Offset : 00 +[0BBh 0187 1] Encoded Access Width : 00 [Undefined/Legacy] +[0BCh 0188 8] Address : 0000000000000000 + +[0C4h 0196 12] PM2 Control Block : [Generic Address Structure] +[0C4h 0196 1] Space ID : 00 [SystemMemory] +[0C5h 0197 1] Bit Width : 00 +[0C6h 0198 1] Bit Offset : 00 +[0C7h 0199 1] Encoded Access Width : 00 [Undefined/Legacy] +[0C8h 0200 8] Address : 0000000000000000 + +[0D0h 0208 12] PM Timer Block : [Generic Address Structure] +[0D0h 0208 1] Space ID : 01 [SystemIO] +[0D1h 0209 1] Bit Width : 20 +[0D2h 0210 1] Bit Offset : 00 +[0D3h 0211 1] Encoded Access Width : 00 [Undefined/Legacy] +[0D4h 0212 8] Address : 0000000000000608 + +[0DCh 0220 12] GPE0 Block : [Generic Address Structure] +[0DCh 0220 1] Space ID : 01 [SystemIO] +[0DDh 0221 1] Bit Width : 80 +[0DEh 0222 1] Bit Offset : 00 +[0DFh 0223 1] Encoded Access Width : 00 [Undefined/Legacy] +[0E0h 0224 8] Address : 0000000000000620 + +[0E8h 0232 12] GPE1 Block : [Generic Address Structure] +[0E8h 0232 1] Space ID : 00 [SystemMemory] +[0E9h 0233 1] Bit Width : 00 +[0EAh 0234 1] Bit Offset : 00 +[0EBh 0235 1] Encoded Access Width : 00 [Undefined/Legacy] +[0ECh 0236 8] Address : 0000000000000000 + + +Raw Table Data: Length 244 (0xF4) + + 0000: 46 41 43 50 F4 00 00 00 03 1F 42 4F 43 48 53 20 // FACP......BOCHS + 0010: 42 58 50 43 46 41 43 50 01 00 00 00 42 58 50 43 // BXPCFACP....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 01 00 09 00 // ................ + 0030: B2 00 00 00 02 03 00 00 00 06 00 00 00 00 00 00 // ................ + 0040: 04 06 00 00 00 00 00 00 00 00 00 00 08 06 00 00 // ................ + 0050: 20 06 00 00 00 00 00 00 04 02 00 04 10 00 00 00 // ............... + 0060: FF 0F FF 0F 00 00 00 00 00 00 00 00 32 00 00 00 // ............2... + 0070: A5 84 00 00 01 08 00 00 F9 0C 00 00 00 00 00 00 // ................ + 0080: 0F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0090: 00 00 00 00 01 20 00 00 00 06 00 00 00 00 00 00 // ..... .......... + 00A0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 // ................ + 00B0: 04 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00D0: 01 20 00 00 08 06 00 00 00 00 00 00 01 80 00 00 // . .............. + 00E0: 20 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ............... + 00F0: 00 00 00 00 // .... diff --git a/tests/data/acpi/q35/FACP.numamem b/tests/data/acpi/q35/FACP.numamem new file mode 100644 index 0000000000000000000000000000000000000000..72c9d97902a4bbf14896023d9ba78e0899d6517b GIT binary patch literal 244 zcmZvW!3l&w5Cm&fMBzX)aAPn7T@Zh_a390*VJaqIY<_$xgRZV{_35F9p6RZ!ZUy41 z{o4L#+QHebu}%P;RXsw^0z@&8o^EoflBHn0ACZ*6UhIX>*T6i1WUzfs_g)5wdG3cu Q$?M-gG^;%n8J|8O2jpN50RR91 literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/FACP.numamem.dsl b/tests/data/acpi/q35/FACP.numamem.dsl new file mode 100644 index 0000000000..a5854c1a69 --- /dev/null +++ b/tests/data/acpi/q35/FACP.numamem.dsl @@ -0,0 +1,179 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/FACP.numamem, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [FACP] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "FACP" [Fixed ACPI Description Table (FADT)] +[004h 0004 4] Table Length : 000000F4 +[008h 0008 1] Revision : 03 +[009h 0009 1] Checksum : 1F +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCFACP" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] FACS Address : 00000000 +[028h 0040 4] DSDT Address : 00000000 +[02Ch 0044 1] Model : 01 +[02Dh 0045 1] PM Profile : 00 [Unspecified] +[02Eh 0046 2] SCI Interrupt : 0009 +[030h 0048 4] SMI Command Port : 000000B2 +[034h 0052 1] ACPI Enable Value : 02 +[035h 0053 1] ACPI Disable Value : 03 +[036h 0054 1] S4BIOS Command : 00 +[037h 0055 1] P-State Control : 00 +[038h 0056 4] PM1A Event Block Address : 00000600 +[03Ch 0060 4] PM1B Event Block Address : 00000000 +[040h 0064 4] PM1A Control Block Address : 00000604 +[044h 0068 4] PM1B Control Block Address : 00000000 +[048h 0072 4] PM2 Control Block Address : 00000000 +[04Ch 0076 4] PM Timer Block Address : 00000608 +[050h 0080 4] GPE0 Block Address : 00000620 +[054h 0084 4] GPE1 Block Address : 00000000 +[058h 0088 1] PM1 Event Block Length : 04 +[059h 0089 1] PM1 Control Block Length : 02 +[05Ah 0090 1] PM2 Control Block Length : 00 +[05Bh 0091 1] PM Timer Block Length : 04 +[05Ch 0092 1] GPE0 Block Length : 10 +[05Dh 0093 1] GPE1 Block Length : 00 +[05Eh 0094 1] GPE1 Base Offset : 00 +[05Fh 0095 1] _CST Support : 00 +[060h 0096 2] C2 Latency : 0FFF +[062h 0098 2] C3 Latency : 0FFF +[064h 0100 2] CPU Cache Size : 0000 +[066h 0102 2] Cache Flush Stride : 0000 +[068h 0104 1] Duty Cycle Offset : 00 +[069h 0105 1] Duty Cycle Width : 00 +[06Ah 0106 1] RTC Day Alarm Index : 00 +[06Bh 0107 1] RTC Month Alarm Index : 00 +[06Ch 0108 1] RTC Century Index : 32 +[06Dh 0109 2] Boot Flags (decoded below) : 0000 + Legacy Devices Supported (V2) : 0 + 8042 Present on ports 60/64 (V2) : 0 + VGA Not Present (V4) : 0 + MSI Not Supported (V4) : 0 + PCIe ASPM Not Supported (V4) : 0 + CMOS RTC Not Present (V5) : 0 +[06Fh 0111 1] Reserved : 00 +[070h 0112 4] Flags (decoded below) : 000084A5 + WBINVD instruction is operational (V1) : 1 + WBINVD flushes all caches (V1) : 0 + All CPUs support C1 (V1) : 1 + C2 works on MP system (V1) : 0 + Control Method Power Button (V1) : 0 + Control Method Sleep Button (V1) : 1 + RTC wake not in fixed reg space (V1) : 0 + RTC can wake system from S4 (V1) : 1 + 32-bit PM Timer (V1) : 0 + Docking Supported (V1) : 0 + Reset Register Supported (V2) : 1 + Sealed Case (V3) : 0 + Headless - No Video (V3) : 0 + Use native instr after SLP_TYPx (V3) : 0 + PCIEXP_WAK Bits Supported (V4) : 0 + Use Platform Timer (V4) : 1 + RTC_STS valid on S4 wake (V4) : 0 + Remote Power-on capable (V4) : 0 + Use APIC Cluster Model (V4) : 0 + Use APIC Physical Destination Mode (V4) : 0 + Hardware Reduced (V5) : 0 + Low Power S0 Idle (V5) : 0 + +[074h 0116 12] Reset Register : [Generic Address Structure] +[074h 0116 1] Space ID : 01 [SystemIO] +[075h 0117 1] Bit Width : 08 +[076h 0118 1] Bit Offset : 00 +[077h 0119 1] Encoded Access Width : 00 [Undefined/Legacy] +[078h 0120 8] Address : 0000000000000CF9 + +[080h 0128 1] Value to cause reset : 0F +[081h 0129 2] ARM Flags (decoded below) : 0000 + PSCI Compliant : 0 + Must use HVC for PSCI : 0 + +[083h 0131 1] FADT Minor Revision : 00 +[084h 0132 8] FACS Address : 0000000000000000 +[08Ch 0140 8] DSDT Address : 0000000000000000 +[094h 0148 12] PM1A Event Block : [Generic Address Structure] +[094h 0148 1] Space ID : 01 [SystemIO] +[095h 0149 1] Bit Width : 20 +[096h 0150 1] Bit Offset : 00 +[097h 0151 1] Encoded Access Width : 00 [Undefined/Legacy] +[098h 0152 8] Address : 0000000000000600 + +[0A0h 0160 12] PM1B Event Block : [Generic Address Structure] +[0A0h 0160 1] Space ID : 00 [SystemMemory] +[0A1h 0161 1] Bit Width : 00 +[0A2h 0162 1] Bit Offset : 00 +[0A3h 0163 1] Encoded Access Width : 00 [Undefined/Legacy] +[0A4h 0164 8] Address : 0000000000000000 + +[0ACh 0172 12] PM1A Control Block : [Generic Address Structure] +[0ACh 0172 1] Space ID : 01 [SystemIO] +[0ADh 0173 1] Bit Width : 10 +[0AEh 0174 1] Bit Offset : 00 +[0AFh 0175 1] Encoded Access Width : 00 [Undefined/Legacy] +[0B0h 0176 8] Address : 0000000000000604 + +[0B8h 0184 12] PM1B Control Block : [Generic Address Structure] +[0B8h 0184 1] Space ID : 00 [SystemMemory] +[0B9h 0185 1] Bit Width : 00 +[0BAh 0186 1] Bit Offset : 00 +[0BBh 0187 1] Encoded Access Width : 00 [Undefined/Legacy] +[0BCh 0188 8] Address : 0000000000000000 + +[0C4h 0196 12] PM2 Control Block : [Generic Address Structure] +[0C4h 0196 1] Space ID : 00 [SystemMemory] +[0C5h 0197 1] Bit Width : 00 +[0C6h 0198 1] Bit Offset : 00 +[0C7h 0199 1] Encoded Access Width : 00 [Undefined/Legacy] +[0C8h 0200 8] Address : 0000000000000000 + +[0D0h 0208 12] PM Timer Block : [Generic Address Structure] +[0D0h 0208 1] Space ID : 01 [SystemIO] +[0D1h 0209 1] Bit Width : 20 +[0D2h 0210 1] Bit Offset : 00 +[0D3h 0211 1] Encoded Access Width : 00 [Undefined/Legacy] +[0D4h 0212 8] Address : 0000000000000608 + +[0DCh 0220 12] GPE0 Block : [Generic Address Structure] +[0DCh 0220 1] Space ID : 01 [SystemIO] +[0DDh 0221 1] Bit Width : 80 +[0DEh 0222 1] Bit Offset : 00 +[0DFh 0223 1] Encoded Access Width : 00 [Undefined/Legacy] +[0E0h 0224 8] Address : 0000000000000620 + +[0E8h 0232 12] GPE1 Block : [Generic Address Structure] +[0E8h 0232 1] Space ID : 00 [SystemMemory] +[0E9h 0233 1] Bit Width : 00 +[0EAh 0234 1] Bit Offset : 00 +[0EBh 0235 1] Encoded Access Width : 00 [Undefined/Legacy] +[0ECh 0236 8] Address : 0000000000000000 + + +Raw Table Data: Length 244 (0xF4) + + 0000: 46 41 43 50 F4 00 00 00 03 1F 42 4F 43 48 53 20 // FACP......BOCHS + 0010: 42 58 50 43 46 41 43 50 01 00 00 00 42 58 50 43 // BXPCFACP....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 01 00 09 00 // ................ + 0030: B2 00 00 00 02 03 00 00 00 06 00 00 00 00 00 00 // ................ + 0040: 04 06 00 00 00 00 00 00 00 00 00 00 08 06 00 00 // ................ + 0050: 20 06 00 00 00 00 00 00 04 02 00 04 10 00 00 00 // ............... + 0060: FF 0F FF 0F 00 00 00 00 00 00 00 00 32 00 00 00 // ............2... + 0070: A5 84 00 00 01 08 00 00 F9 0C 00 00 00 00 00 00 // ................ + 0080: 0F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0090: 00 00 00 00 01 20 00 00 00 06 00 00 00 00 00 00 // ..... .......... + 00A0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 // ................ + 00B0: 04 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00D0: 01 20 00 00 08 06 00 00 00 00 00 00 01 80 00 00 // . .............. + 00E0: 20 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ............... + 00F0: 00 00 00 00 // .... diff --git a/tests/data/acpi/q35/FACP.tis b/tests/data/acpi/q35/FACP.tis new file mode 100644 index 0000000000000000000000000000000000000000..72c9d97902a4bbf14896023d9ba78e0899d6517b GIT binary patch literal 244 zcmZvW!3l&w5Cm&fMBzX)aAPn7T@Zh_a390*VJaqIY<_$xgRZV{_35F9p6RZ!ZUy41 z{o4L#+QHebu}%P;RXsw^0z@&8o^EoflBHn0ACZ*6UhIX>*T6i1WUzfs_g)5wdG3cu Q$?M-gG^;%n8J|8O2jpN50RR91 literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/FACP.tis.dsl b/tests/data/acpi/q35/FACP.tis.dsl new file mode 100644 index 0000000000..22f6a34466 --- /dev/null +++ b/tests/data/acpi/q35/FACP.tis.dsl @@ -0,0 +1,179 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/FACP.tis, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [FACP] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "FACP" [Fixed ACPI Description Table (FADT)] +[004h 0004 4] Table Length : 000000F4 +[008h 0008 1] Revision : 03 +[009h 0009 1] Checksum : 1F +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCFACP" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] FACS Address : 00000000 +[028h 0040 4] DSDT Address : 00000000 +[02Ch 0044 1] Model : 01 +[02Dh 0045 1] PM Profile : 00 [Unspecified] +[02Eh 0046 2] SCI Interrupt : 0009 +[030h 0048 4] SMI Command Port : 000000B2 +[034h 0052 1] ACPI Enable Value : 02 +[035h 0053 1] ACPI Disable Value : 03 +[036h 0054 1] S4BIOS Command : 00 +[037h 0055 1] P-State Control : 00 +[038h 0056 4] PM1A Event Block Address : 00000600 +[03Ch 0060 4] PM1B Event Block Address : 00000000 +[040h 0064 4] PM1A Control Block Address : 00000604 +[044h 0068 4] PM1B Control Block Address : 00000000 +[048h 0072 4] PM2 Control Block Address : 00000000 +[04Ch 0076 4] PM Timer Block Address : 00000608 +[050h 0080 4] GPE0 Block Address : 00000620 +[054h 0084 4] GPE1 Block Address : 00000000 +[058h 0088 1] PM1 Event Block Length : 04 +[059h 0089 1] PM1 Control Block Length : 02 +[05Ah 0090 1] PM2 Control Block Length : 00 +[05Bh 0091 1] PM Timer Block Length : 04 +[05Ch 0092 1] GPE0 Block Length : 10 +[05Dh 0093 1] GPE1 Block Length : 00 +[05Eh 0094 1] GPE1 Base Offset : 00 +[05Fh 0095 1] _CST Support : 00 +[060h 0096 2] C2 Latency : 0FFF +[062h 0098 2] C3 Latency : 0FFF +[064h 0100 2] CPU Cache Size : 0000 +[066h 0102 2] Cache Flush Stride : 0000 +[068h 0104 1] Duty Cycle Offset : 00 +[069h 0105 1] Duty Cycle Width : 00 +[06Ah 0106 1] RTC Day Alarm Index : 00 +[06Bh 0107 1] RTC Month Alarm Index : 00 +[06Ch 0108 1] RTC Century Index : 32 +[06Dh 0109 2] Boot Flags (decoded below) : 0000 + Legacy Devices Supported (V2) : 0 + 8042 Present on ports 60/64 (V2) : 0 + VGA Not Present (V4) : 0 + MSI Not Supported (V4) : 0 + PCIe ASPM Not Supported (V4) : 0 + CMOS RTC Not Present (V5) : 0 +[06Fh 0111 1] Reserved : 00 +[070h 0112 4] Flags (decoded below) : 000084A5 + WBINVD instruction is operational (V1) : 1 + WBINVD flushes all caches (V1) : 0 + All CPUs support C1 (V1) : 1 + C2 works on MP system (V1) : 0 + Control Method Power Button (V1) : 0 + Control Method Sleep Button (V1) : 1 + RTC wake not in fixed reg space (V1) : 0 + RTC can wake system from S4 (V1) : 1 + 32-bit PM Timer (V1) : 0 + Docking Supported (V1) : 0 + Reset Register Supported (V2) : 1 + Sealed Case (V3) : 0 + Headless - No Video (V3) : 0 + Use native instr after SLP_TYPx (V3) : 0 + PCIEXP_WAK Bits Supported (V4) : 0 + Use Platform Timer (V4) : 1 + RTC_STS valid on S4 wake (V4) : 0 + Remote Power-on capable (V4) : 0 + Use APIC Cluster Model (V4) : 0 + Use APIC Physical Destination Mode (V4) : 0 + Hardware Reduced (V5) : 0 + Low Power S0 Idle (V5) : 0 + +[074h 0116 12] Reset Register : [Generic Address Structure] +[074h 0116 1] Space ID : 01 [SystemIO] +[075h 0117 1] Bit Width : 08 +[076h 0118 1] Bit Offset : 00 +[077h 0119 1] Encoded Access Width : 00 [Undefined/Legacy] +[078h 0120 8] Address : 0000000000000CF9 + +[080h 0128 1] Value to cause reset : 0F +[081h 0129 2] ARM Flags (decoded below) : 0000 + PSCI Compliant : 0 + Must use HVC for PSCI : 0 + +[083h 0131 1] FADT Minor Revision : 00 +[084h 0132 8] FACS Address : 0000000000000000 +[08Ch 0140 8] DSDT Address : 0000000000000000 +[094h 0148 12] PM1A Event Block : [Generic Address Structure] +[094h 0148 1] Space ID : 01 [SystemIO] +[095h 0149 1] Bit Width : 20 +[096h 0150 1] Bit Offset : 00 +[097h 0151 1] Encoded Access Width : 00 [Undefined/Legacy] +[098h 0152 8] Address : 0000000000000600 + +[0A0h 0160 12] PM1B Event Block : [Generic Address Structure] +[0A0h 0160 1] Space ID : 00 [SystemMemory] +[0A1h 0161 1] Bit Width : 00 +[0A2h 0162 1] Bit Offset : 00 +[0A3h 0163 1] Encoded Access Width : 00 [Undefined/Legacy] +[0A4h 0164 8] Address : 0000000000000000 + +[0ACh 0172 12] PM1A Control Block : [Generic Address Structure] +[0ACh 0172 1] Space ID : 01 [SystemIO] +[0ADh 0173 1] Bit Width : 10 +[0AEh 0174 1] Bit Offset : 00 +[0AFh 0175 1] Encoded Access Width : 00 [Undefined/Legacy] +[0B0h 0176 8] Address : 0000000000000604 + +[0B8h 0184 12] PM1B Control Block : [Generic Address Structure] +[0B8h 0184 1] Space ID : 00 [SystemMemory] +[0B9h 0185 1] Bit Width : 00 +[0BAh 0186 1] Bit Offset : 00 +[0BBh 0187 1] Encoded Access Width : 00 [Undefined/Legacy] +[0BCh 0188 8] Address : 0000000000000000 + +[0C4h 0196 12] PM2 Control Block : [Generic Address Structure] +[0C4h 0196 1] Space ID : 00 [SystemMemory] +[0C5h 0197 1] Bit Width : 00 +[0C6h 0198 1] Bit Offset : 00 +[0C7h 0199 1] Encoded Access Width : 00 [Undefined/Legacy] +[0C8h 0200 8] Address : 0000000000000000 + +[0D0h 0208 12] PM Timer Block : [Generic Address Structure] +[0D0h 0208 1] Space ID : 01 [SystemIO] +[0D1h 0209 1] Bit Width : 20 +[0D2h 0210 1] Bit Offset : 00 +[0D3h 0211 1] Encoded Access Width : 00 [Undefined/Legacy] +[0D4h 0212 8] Address : 0000000000000608 + +[0DCh 0220 12] GPE0 Block : [Generic Address Structure] +[0DCh 0220 1] Space ID : 01 [SystemIO] +[0DDh 0221 1] Bit Width : 80 +[0DEh 0222 1] Bit Offset : 00 +[0DFh 0223 1] Encoded Access Width : 00 [Undefined/Legacy] +[0E0h 0224 8] Address : 0000000000000620 + +[0E8h 0232 12] GPE1 Block : [Generic Address Structure] +[0E8h 0232 1] Space ID : 00 [SystemMemory] +[0E9h 0233 1] Bit Width : 00 +[0EAh 0234 1] Bit Offset : 00 +[0EBh 0235 1] Encoded Access Width : 00 [Undefined/Legacy] +[0ECh 0236 8] Address : 0000000000000000 + + +Raw Table Data: Length 244 (0xF4) + + 0000: 46 41 43 50 F4 00 00 00 03 1F 42 4F 43 48 53 20 // FACP......BOCHS + 0010: 42 58 50 43 46 41 43 50 01 00 00 00 42 58 50 43 // BXPCFACP....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 01 00 09 00 // ................ + 0030: B2 00 00 00 02 03 00 00 00 06 00 00 00 00 00 00 // ................ + 0040: 04 06 00 00 00 00 00 00 00 00 00 00 08 06 00 00 // ................ + 0050: 20 06 00 00 00 00 00 00 04 02 00 04 10 00 00 00 // ............... + 0060: FF 0F FF 0F 00 00 00 00 00 00 00 00 32 00 00 00 // ............2... + 0070: A5 84 00 00 01 08 00 00 F9 0C 00 00 00 00 00 00 // ................ + 0080: 0F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0090: 00 00 00 00 01 20 00 00 00 06 00 00 00 00 00 00 // ..... .......... + 00A0: 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 // ................ + 00B0: 04 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00D0: 01 20 00 00 08 06 00 00 00 00 00 00 01 80 00 00 // . .............. + 00E0: 20 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ............... + 00F0: 00 00 00 00 // .... diff --git a/tests/data/acpi/q35/FACS.acpihmat b/tests/data/acpi/q35/FACS.acpihmat new file mode 100644 index 0000000000000000000000000000000000000000..fc67ecc40782bd7fe8921e430d7de67f0bfaad93 GIT binary patch literal 64 PcmZ>BbPjf4ARhn#RKNjV literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/FACS.acpihmat.dsl b/tests/data/acpi/q35/FACS.acpihmat.dsl new file mode 100644 index 0000000000..0bd98653ce --- /dev/null +++ b/tests/data/acpi/q35/FACS.acpihmat.dsl @@ -0,0 +1,32 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/FACS.acpihmat, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [FACS] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "FACS" +[004h 0004 4] Length : 00000040 +[008h 0008 4] Hardware Signature : 00000000 +[00Ch 0012 4] 32 Firmware Waking Vector : 00000000 +[010h 0016 4] Global Lock : 00000000 +[014h 0020 4] Flags (decoded below) : 00000000 + S4BIOS Support Present : 0 + 64-bit Wake Supported (V2) : 0 +[018h 0024 8] 64 Firmware Waking Vector : 0000000000000000 +[020h 0032 1] Version : 00 +[021h 0033 3] Reserved : 000000 +[024h 0036 4] OspmFlags (decoded below) : 00000000 + 64-bit Wake Env Required (V2) : 0 + +Raw Table Data: Length 64 (0x40) + + 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 // FACS@........... + 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ diff --git a/tests/data/acpi/q35/FACS.bridge b/tests/data/acpi/q35/FACS.bridge new file mode 100644 index 0000000000000000000000000000000000000000..fc67ecc40782bd7fe8921e430d7de67f0bfaad93 GIT binary patch literal 64 PcmZ>BbPjf4ARhn#RKNjV literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/FACS.bridge.dsl b/tests/data/acpi/q35/FACS.bridge.dsl new file mode 100644 index 0000000000..116dce1f2d --- /dev/null +++ b/tests/data/acpi/q35/FACS.bridge.dsl @@ -0,0 +1,32 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/FACS.bridge, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [FACS] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "FACS" +[004h 0004 4] Length : 00000040 +[008h 0008 4] Hardware Signature : 00000000 +[00Ch 0012 4] 32 Firmware Waking Vector : 00000000 +[010h 0016 4] Global Lock : 00000000 +[014h 0020 4] Flags (decoded below) : 00000000 + S4BIOS Support Present : 0 + 64-bit Wake Supported (V2) : 0 +[018h 0024 8] 64 Firmware Waking Vector : 0000000000000000 +[020h 0032 1] Version : 00 +[021h 0033 3] Reserved : 000000 +[024h 0036 4] OspmFlags (decoded below) : 00000000 + 64-bit Wake Env Required (V2) : 0 + +Raw Table Data: Length 64 (0x40) + + 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 // FACS@........... + 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ diff --git a/tests/data/acpi/q35/FACS.cphp b/tests/data/acpi/q35/FACS.cphp new file mode 100644 index 0000000000000000000000000000000000000000..fc67ecc40782bd7fe8921e430d7de67f0bfaad93 GIT binary patch literal 64 PcmZ>BbPjf4ARhn#RKNjV literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/FACS.cphp.dsl b/tests/data/acpi/q35/FACS.cphp.dsl new file mode 100644 index 0000000000..580d502491 --- /dev/null +++ b/tests/data/acpi/q35/FACS.cphp.dsl @@ -0,0 +1,32 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/FACS.cphp, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [FACS] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "FACS" +[004h 0004 4] Length : 00000040 +[008h 0008 4] Hardware Signature : 00000000 +[00Ch 0012 4] 32 Firmware Waking Vector : 00000000 +[010h 0016 4] Global Lock : 00000000 +[014h 0020 4] Flags (decoded below) : 00000000 + S4BIOS Support Present : 0 + 64-bit Wake Supported (V2) : 0 +[018h 0024 8] 64 Firmware Waking Vector : 0000000000000000 +[020h 0032 1] Version : 00 +[021h 0033 3] Reserved : 000000 +[024h 0036 4] OspmFlags (decoded below) : 00000000 + 64-bit Wake Env Required (V2) : 0 + +Raw Table Data: Length 64 (0x40) + + 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 // FACS@........... + 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ diff --git a/tests/data/acpi/q35/FACS.dimmpxm b/tests/data/acpi/q35/FACS.dimmpxm new file mode 100644 index 0000000000000000000000000000000000000000..fc67ecc40782bd7fe8921e430d7de67f0bfaad93 GIT binary patch literal 64 PcmZ>BbPjf4ARhn#RKNjV literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/FACS.dimmpxm.dsl b/tests/data/acpi/q35/FACS.dimmpxm.dsl new file mode 100644 index 0000000000..4106387866 --- /dev/null +++ b/tests/data/acpi/q35/FACS.dimmpxm.dsl @@ -0,0 +1,32 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/FACS.dimmpxm, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [FACS] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "FACS" +[004h 0004 4] Length : 00000040 +[008h 0008 4] Hardware Signature : 00000000 +[00Ch 0012 4] 32 Firmware Waking Vector : 00000000 +[010h 0016 4] Global Lock : 00000000 +[014h 0020 4] Flags (decoded below) : 00000000 + S4BIOS Support Present : 0 + 64-bit Wake Supported (V2) : 0 +[018h 0024 8] 64 Firmware Waking Vector : 0000000000000000 +[020h 0032 1] Version : 00 +[021h 0033 3] Reserved : 000000 +[024h 0036 4] OspmFlags (decoded below) : 00000000 + 64-bit Wake Env Required (V2) : 0 + +Raw Table Data: Length 64 (0x40) + + 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 // FACS@........... + 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ diff --git a/tests/data/acpi/q35/FACS.dsl b/tests/data/acpi/q35/FACS.dsl new file mode 100644 index 0000000000..0595b4ddb9 --- /dev/null +++ b/tests/data/acpi/q35/FACS.dsl @@ -0,0 +1,32 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/FACS.tis, Mon Sep 28 17:24:38 2020 + * + * ACPI Data Table [FACS] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "FACS" +[004h 0004 4] Length : 00000040 +[008h 0008 4] Hardware Signature : 00000000 +[00Ch 0012 4] 32 Firmware Waking Vector : 00000000 +[010h 0016 4] Global Lock : 00000000 +[014h 0020 4] Flags (decoded below) : 00000000 + S4BIOS Support Present : 0 + 64-bit Wake Supported (V2) : 0 +[018h 0024 8] 64 Firmware Waking Vector : 0000000000000000 +[020h 0032 1] Version : 00 +[021h 0033 3] Reserved : 000000 +[024h 0036 4] OspmFlags (decoded below) : 00000000 + 64-bit Wake Env Required (V2) : 0 + +Raw Table Data: Length 64 (0x40) + + 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 // FACS@........... + 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ diff --git a/tests/data/acpi/q35/FACS.ipmibt b/tests/data/acpi/q35/FACS.ipmibt new file mode 100644 index 0000000000000000000000000000000000000000..fc67ecc40782bd7fe8921e430d7de67f0bfaad93 GIT binary patch literal 64 PcmZ>BbPjf4ARhn#RKNjV literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/FACS.ipmibt.dsl b/tests/data/acpi/q35/FACS.ipmibt.dsl new file mode 100644 index 0000000000..8c019f3475 --- /dev/null +++ b/tests/data/acpi/q35/FACS.ipmibt.dsl @@ -0,0 +1,32 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/FACS.ipmibt, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [FACS] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "FACS" +[004h 0004 4] Length : 00000040 +[008h 0008 4] Hardware Signature : 00000000 +[00Ch 0012 4] 32 Firmware Waking Vector : 00000000 +[010h 0016 4] Global Lock : 00000000 +[014h 0020 4] Flags (decoded below) : 00000000 + S4BIOS Support Present : 0 + 64-bit Wake Supported (V2) : 0 +[018h 0024 8] 64 Firmware Waking Vector : 0000000000000000 +[020h 0032 1] Version : 00 +[021h 0033 3] Reserved : 000000 +[024h 0036 4] OspmFlags (decoded below) : 00000000 + 64-bit Wake Env Required (V2) : 0 + +Raw Table Data: Length 64 (0x40) + + 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 // FACS@........... + 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ diff --git a/tests/data/acpi/q35/FACS.memhp b/tests/data/acpi/q35/FACS.memhp new file mode 100644 index 0000000000000000000000000000000000000000..fc67ecc40782bd7fe8921e430d7de67f0bfaad93 GIT binary patch literal 64 PcmZ>BbPjf4ARhn#RKNjV literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/FACS.memhp.dsl b/tests/data/acpi/q35/FACS.memhp.dsl new file mode 100644 index 0000000000..fb6d84c152 --- /dev/null +++ b/tests/data/acpi/q35/FACS.memhp.dsl @@ -0,0 +1,32 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/FACS.memhp, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [FACS] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "FACS" +[004h 0004 4] Length : 00000040 +[008h 0008 4] Hardware Signature : 00000000 +[00Ch 0012 4] 32 Firmware Waking Vector : 00000000 +[010h 0016 4] Global Lock : 00000000 +[014h 0020 4] Flags (decoded below) : 00000000 + S4BIOS Support Present : 0 + 64-bit Wake Supported (V2) : 0 +[018h 0024 8] 64 Firmware Waking Vector : 0000000000000000 +[020h 0032 1] Version : 00 +[021h 0033 3] Reserved : 000000 +[024h 0036 4] OspmFlags (decoded below) : 00000000 + 64-bit Wake Env Required (V2) : 0 + +Raw Table Data: Length 64 (0x40) + + 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 // FACS@........... + 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ diff --git a/tests/data/acpi/q35/FACS.mmio64 b/tests/data/acpi/q35/FACS.mmio64 new file mode 100644 index 0000000000000000000000000000000000000000..fc67ecc40782bd7fe8921e430d7de67f0bfaad93 GIT binary patch literal 64 PcmZ>BbPjf4ARhn#RKNjV literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/FACS.mmio64.dsl b/tests/data/acpi/q35/FACS.mmio64.dsl new file mode 100644 index 0000000000..1a20060749 --- /dev/null +++ b/tests/data/acpi/q35/FACS.mmio64.dsl @@ -0,0 +1,32 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/FACS.mmio64, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [FACS] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "FACS" +[004h 0004 4] Length : 00000040 +[008h 0008 4] Hardware Signature : 00000000 +[00Ch 0012 4] 32 Firmware Waking Vector : 00000000 +[010h 0016 4] Global Lock : 00000000 +[014h 0020 4] Flags (decoded below) : 00000000 + S4BIOS Support Present : 0 + 64-bit Wake Supported (V2) : 0 +[018h 0024 8] 64 Firmware Waking Vector : 0000000000000000 +[020h 0032 1] Version : 00 +[021h 0033 3] Reserved : 000000 +[024h 0036 4] OspmFlags (decoded below) : 00000000 + 64-bit Wake Env Required (V2) : 0 + +Raw Table Data: Length 64 (0x40) + + 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 // FACS@........... + 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ diff --git a/tests/data/acpi/q35/FACS.numamem b/tests/data/acpi/q35/FACS.numamem new file mode 100644 index 0000000000000000000000000000000000000000..fc67ecc40782bd7fe8921e430d7de67f0bfaad93 GIT binary patch literal 64 PcmZ>BbPjf4ARhn#RKNjV literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/FACS.numamem.dsl b/tests/data/acpi/q35/FACS.numamem.dsl new file mode 100644 index 0000000000..740e0bca9a --- /dev/null +++ b/tests/data/acpi/q35/FACS.numamem.dsl @@ -0,0 +1,32 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/FACS.numamem, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [FACS] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "FACS" +[004h 0004 4] Length : 00000040 +[008h 0008 4] Hardware Signature : 00000000 +[00Ch 0012 4] 32 Firmware Waking Vector : 00000000 +[010h 0016 4] Global Lock : 00000000 +[014h 0020 4] Flags (decoded below) : 00000000 + S4BIOS Support Present : 0 + 64-bit Wake Supported (V2) : 0 +[018h 0024 8] 64 Firmware Waking Vector : 0000000000000000 +[020h 0032 1] Version : 00 +[021h 0033 3] Reserved : 000000 +[024h 0036 4] OspmFlags (decoded below) : 00000000 + 64-bit Wake Env Required (V2) : 0 + +Raw Table Data: Length 64 (0x40) + + 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 // FACS@........... + 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ diff --git a/tests/data/acpi/q35/FACS.tis b/tests/data/acpi/q35/FACS.tis new file mode 100644 index 0000000000000000000000000000000000000000..fc67ecc40782bd7fe8921e430d7de67f0bfaad93 GIT binary patch literal 64 PcmZ>BbPjf4ARhn#RKNjV literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/FACS.tis.dsl b/tests/data/acpi/q35/FACS.tis.dsl new file mode 100644 index 0000000000..cb35bde06c --- /dev/null +++ b/tests/data/acpi/q35/FACS.tis.dsl @@ -0,0 +1,32 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/FACS.tis, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [FACS] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "FACS" +[004h 0004 4] Length : 00000040 +[008h 0008 4] Hardware Signature : 00000000 +[00Ch 0012 4] 32 Firmware Waking Vector : 00000000 +[010h 0016 4] Global Lock : 00000000 +[014h 0020 4] Flags (decoded below) : 00000000 + S4BIOS Support Present : 0 + 64-bit Wake Supported (V2) : 0 +[018h 0024 8] 64 Firmware Waking Vector : 0000000000000000 +[020h 0032 1] Version : 00 +[021h 0033 3] Reserved : 000000 +[024h 0036 4] OspmFlags (decoded below) : 00000000 + 64-bit Wake Env Required (V2) : 0 + +Raw Table Data: Length 64 (0x40) + + 0000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 // FACS@........... + 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ diff --git a/tests/data/acpi/q35/HMAT.acpihmat.dsl b/tests/data/acpi/q35/HMAT.acpihmat.dsl new file mode 100644 index 0000000000..4abaa94f78 --- /dev/null +++ b/tests/data/acpi/q35/HMAT.acpihmat.dsl @@ -0,0 +1,132 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/HMAT.acpihmat, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [HMAT] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "HMAT" [Heterogeneous Memory Attributes Table] +[004h 0004 4] Table Length : 00000118 +[008h 0008 1] Revision : 02 +[009h 0009 1] Checksum : 98 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCHMAT" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Reserved : 00000000 + +[028h 0040 2] Structure Type : 0000 [Memory Proximity Domain Attributes] +[02Ah 0042 2] Reserved : 0000 +[02Ch 0044 4] Length : 00000028 +[030h 0048 2] Flags (decoded below) : 0001 + Processor Proximity Domain Valid : 1 +[032h 0050 2] Reserved1 : 0000 +[034h 0052 4] Processor Proximity Domain : 00000000 +[038h 0056 4] Memory Proximity Domain : 00000000 +[03Ch 0060 4] Reserved2 : 00000000 +[040h 0064 8] Reserved3 : 0000000000000000 +[048h 0072 8] Reserved4 : 0000000000000000 + +[050h 0080 2] Structure Type : 0000 [Memory Proximity Domain Attributes] +[052h 0082 2] Reserved : 0000 +[054h 0084 4] Length : 00000028 +[058h 0088 2] Flags (decoded below) : 0001 + Processor Proximity Domain Valid : 1 +[05Ah 0090 2] Reserved1 : 0000 +[05Ch 0092 4] Processor Proximity Domain : 00000000 +[060h 0096 4] Memory Proximity Domain : 00000001 +[064h 0100 4] Reserved2 : 00000000 +[068h 0104 8] Reserved3 : 0000000000000000 +[070h 0112 8] Reserved4 : 0000000000000000 + +[078h 0120 2] Structure Type : 0001 [System Locality Latency and Bandwidth Information] +[07Ah 0122 2] Reserved : 0000 +[07Ch 0124 4] Length : 00000030 +[080h 0128 1] Flags (decoded below) : 00 + Memory Hierarchy : 0 +[081h 0129 1] Data Type : 00 +[082h 0130 2] Reserved1 : 0000 +[084h 0132 4] Initiator Proximity Domains # : 00000001 +[088h 0136 4] Target Proximity Domains # : 00000002 +[08Ch 0140 4] Reserved2 : 00000000 +[090h 0144 8] Entry Base Unit : 00000000000003E8 +[098h 0152 4] Initiator Proximity Domain List : 00000000 +[09Ch 0156 4] Target Proximity Domain List : 00000000 +[0A0h 0160 4] Target Proximity Domain List : 00000001 +[0A4h 0164 2] Entry : 0001 +[0A6h 0166 2] Entry : FFFE + +[0A8h 0168 2] Structure Type : 0001 [System Locality Latency and Bandwidth Information] +[0AAh 0170 2] Reserved : 0000 +[0ACh 0172 4] Length : 00000030 +[0B0h 0176 1] Flags (decoded below) : 00 + Memory Hierarchy : 0 +[0B1h 0177 1] Data Type : 03 +[0B2h 0178 2] Reserved1 : 0000 +[0B4h 0180 4] Initiator Proximity Domains # : 00000001 +[0B8h 0184 4] Target Proximity Domains # : 00000002 +[0BCh 0188 4] Reserved2 : 00000000 +[0C0h 0192 8] Entry Base Unit : 0000000000000001 +[0C8h 0200 4] Initiator Proximity Domain List : 00000000 +[0CCh 0204 4] Target Proximity Domain List : 00000000 +[0D0h 0208 4] Target Proximity Domain List : 00000001 +[0D4h 0212 2] Entry : FFFE +[0D6h 0214 2] Entry : 7FFF + +[0D8h 0216 2] Structure Type : 0002 [Memory Side Cache Information] +[0DAh 0218 2] Reserved : 0000 +[0DCh 0220 4] Length : 00000020 +[0E0h 0224 4] Memory Proximity Domain : 00000000 +[0E4h 0228 4] Reserved1 : 00000000 +[0E8h 0232 8] Memory Side Cache Size : 0000000000002800 +[0F0h 0240 4] Cache Attributes (decoded below) : 00081111 + Total Cache Levels : 1 + Cache Level : 1 + Cache Associativity : 1 + Write Policy : 1 + Cache Line Size : 0008 +[0F4h 0244 2] Reserved2 : 0000 +[0F6h 0246 2] SMBIOS Handle # : 0000 + +[0F8h 0248 2] Structure Type : 0002 [Memory Side Cache Information] +[0FAh 0250 2] Reserved : 0000 +[0FCh 0252 4] Length : 00000020 +[100h 0256 4] Memory Proximity Domain : 00000001 +[104h 0260 4] Reserved1 : 00000000 +[108h 0264 8] Memory Side Cache Size : 0000000000002800 +[110h 0272 4] Cache Attributes (decoded below) : 00081111 + Total Cache Levels : 1 + Cache Level : 1 + Cache Associativity : 1 + Write Policy : 1 + Cache Line Size : 0008 +[114h 0276 2] Reserved2 : 0000 +[116h 0278 2] SMBIOS Handle # : 0000 + +Raw Table Data: Length 280 (0x118) + + 0000: 48 4D 41 54 18 01 00 00 02 98 42 4F 43 48 53 20 // HMAT......BOCHS + 0010: 42 58 50 43 48 4D 41 54 01 00 00 00 42 58 50 43 // BXPCHMAT....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 28 00 00 00 // ............(... + 0030: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0050: 00 00 00 00 28 00 00 00 01 00 00 00 00 00 00 00 // ....(........... + 0060: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0070: 00 00 00 00 00 00 00 00 01 00 00 00 30 00 00 00 // ............0... + 0080: 00 00 00 00 01 00 00 00 02 00 00 00 00 00 00 00 // ................ + 0090: E8 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00A0: 01 00 00 00 01 00 FE FF 01 00 00 00 30 00 00 00 // ............0... + 00B0: 00 03 00 00 01 00 00 00 02 00 00 00 00 00 00 00 // ................ + 00C0: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00D0: 01 00 00 00 FE FF FF 7F 02 00 00 00 20 00 00 00 // ............ ... + 00E0: 00 00 00 00 00 00 00 00 00 28 00 00 00 00 00 00 // .........(...... + 00F0: 11 11 08 00 00 00 00 00 02 00 00 00 20 00 00 00 // ............ ... + 0100: 01 00 00 00 00 00 00 00 00 28 00 00 00 00 00 00 // .........(...... + 0110: 11 11 08 00 00 00 00 00 // ........ diff --git a/tests/data/acpi/q35/HMAT.dsl b/tests/data/acpi/q35/HMAT.dsl new file mode 100644 index 0000000000..43bc9adc98 --- /dev/null +++ b/tests/data/acpi/q35/HMAT.dsl @@ -0,0 +1,132 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/HMAT.acpihmat, Mon Sep 28 17:24:38 2020 + * + * ACPI Data Table [HMAT] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "HMAT" [Heterogeneous Memory Attributes Table] +[004h 0004 4] Table Length : 00000118 +[008h 0008 1] Revision : 02 +[009h 0009 1] Checksum : 98 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCHMAT" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Reserved : 00000000 + +[028h 0040 2] Structure Type : 0000 [Memory Proximity Domain Attributes] +[02Ah 0042 2] Reserved : 0000 +[02Ch 0044 4] Length : 00000028 +[030h 0048 2] Flags (decoded below) : 0001 + Processor Proximity Domain Valid : 1 +[032h 0050 2] Reserved1 : 0000 +[034h 0052 4] Processor Proximity Domain : 00000000 +[038h 0056 4] Memory Proximity Domain : 00000000 +[03Ch 0060 4] Reserved2 : 00000000 +[040h 0064 8] Reserved3 : 0000000000000000 +[048h 0072 8] Reserved4 : 0000000000000000 + +[050h 0080 2] Structure Type : 0000 [Memory Proximity Domain Attributes] +[052h 0082 2] Reserved : 0000 +[054h 0084 4] Length : 00000028 +[058h 0088 2] Flags (decoded below) : 0001 + Processor Proximity Domain Valid : 1 +[05Ah 0090 2] Reserved1 : 0000 +[05Ch 0092 4] Processor Proximity Domain : 00000000 +[060h 0096 4] Memory Proximity Domain : 00000001 +[064h 0100 4] Reserved2 : 00000000 +[068h 0104 8] Reserved3 : 0000000000000000 +[070h 0112 8] Reserved4 : 0000000000000000 + +[078h 0120 2] Structure Type : 0001 [System Locality Latency and Bandwidth Information] +[07Ah 0122 2] Reserved : 0000 +[07Ch 0124 4] Length : 00000030 +[080h 0128 1] Flags (decoded below) : 00 + Memory Hierarchy : 0 +[081h 0129 1] Data Type : 00 +[082h 0130 2] Reserved1 : 0000 +[084h 0132 4] Initiator Proximity Domains # : 00000001 +[088h 0136 4] Target Proximity Domains # : 00000002 +[08Ch 0140 4] Reserved2 : 00000000 +[090h 0144 8] Entry Base Unit : 00000000000003E8 +[098h 0152 4] Initiator Proximity Domain List : 00000000 +[09Ch 0156 4] Target Proximity Domain List : 00000000 +[0A0h 0160 4] Target Proximity Domain List : 00000001 +[0A4h 0164 2] Entry : 0001 +[0A6h 0166 2] Entry : FFFE + +[0A8h 0168 2] Structure Type : 0001 [System Locality Latency and Bandwidth Information] +[0AAh 0170 2] Reserved : 0000 +[0ACh 0172 4] Length : 00000030 +[0B0h 0176 1] Flags (decoded below) : 00 + Memory Hierarchy : 0 +[0B1h 0177 1] Data Type : 03 +[0B2h 0178 2] Reserved1 : 0000 +[0B4h 0180 4] Initiator Proximity Domains # : 00000001 +[0B8h 0184 4] Target Proximity Domains # : 00000002 +[0BCh 0188 4] Reserved2 : 00000000 +[0C0h 0192 8] Entry Base Unit : 0000000000000001 +[0C8h 0200 4] Initiator Proximity Domain List : 00000000 +[0CCh 0204 4] Target Proximity Domain List : 00000000 +[0D0h 0208 4] Target Proximity Domain List : 00000001 +[0D4h 0212 2] Entry : FFFE +[0D6h 0214 2] Entry : 7FFF + +[0D8h 0216 2] Structure Type : 0002 [Memory Side Cache Information] +[0DAh 0218 2] Reserved : 0000 +[0DCh 0220 4] Length : 00000020 +[0E0h 0224 4] Memory Proximity Domain : 00000000 +[0E4h 0228 4] Reserved1 : 00000000 +[0E8h 0232 8] Memory Side Cache Size : 0000000000002800 +[0F0h 0240 4] Cache Attributes (decoded below) : 00081111 + Total Cache Levels : 1 + Cache Level : 1 + Cache Associativity : 1 + Write Policy : 1 + Cache Line Size : 0008 +[0F4h 0244 2] Reserved2 : 0000 +[0F6h 0246 2] SMBIOS Handle # : 0000 + +[0F8h 0248 2] Structure Type : 0002 [Memory Side Cache Information] +[0FAh 0250 2] Reserved : 0000 +[0FCh 0252 4] Length : 00000020 +[100h 0256 4] Memory Proximity Domain : 00000001 +[104h 0260 4] Reserved1 : 00000000 +[108h 0264 8] Memory Side Cache Size : 0000000000002800 +[110h 0272 4] Cache Attributes (decoded below) : 00081111 + Total Cache Levels : 1 + Cache Level : 1 + Cache Associativity : 1 + Write Policy : 1 + Cache Line Size : 0008 +[114h 0276 2] Reserved2 : 0000 +[116h 0278 2] SMBIOS Handle # : 0000 + +Raw Table Data: Length 280 (0x118) + + 0000: 48 4D 41 54 18 01 00 00 02 98 42 4F 43 48 53 20 // HMAT......BOCHS + 0010: 42 58 50 43 48 4D 41 54 01 00 00 00 42 58 50 43 // BXPCHMAT....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 28 00 00 00 // ............(... + 0030: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0050: 00 00 00 00 28 00 00 00 01 00 00 00 00 00 00 00 // ....(........... + 0060: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0070: 00 00 00 00 00 00 00 00 01 00 00 00 30 00 00 00 // ............0... + 0080: 00 00 00 00 01 00 00 00 02 00 00 00 00 00 00 00 // ................ + 0090: E8 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00A0: 01 00 00 00 01 00 FE FF 01 00 00 00 30 00 00 00 // ............0... + 00B0: 00 03 00 00 01 00 00 00 02 00 00 00 00 00 00 00 // ................ + 00C0: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00D0: 01 00 00 00 FE FF FF 7F 02 00 00 00 20 00 00 00 // ............ ... + 00E0: 00 00 00 00 00 00 00 00 00 28 00 00 00 00 00 00 // .........(...... + 00F0: 11 11 08 00 00 00 00 00 02 00 00 00 20 00 00 00 // ............ ... + 0100: 01 00 00 00 00 00 00 00 00 28 00 00 00 00 00 00 // .........(...... + 0110: 11 11 08 00 00 00 00 00 // ........ diff --git a/tests/data/acpi/q35/HPET.acpihmat b/tests/data/acpi/q35/HPET.acpihmat new file mode 100644 index 0000000000000000000000000000000000000000..df689b8f99c1c43cfd7d63bdede3bcdfd23b7de1 GIT binary patch literal 56 zcmeYWa1F6wU|?WmcJg=j2v%^42ypfYa1CK(U|;~TK{Vr{wgv_;xbP1`GcW)EHY*AN literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/HPET.acpihmat.dsl b/tests/data/acpi/q35/HPET.acpihmat.dsl new file mode 100644 index 0000000000..9806b81069 --- /dev/null +++ b/tests/data/acpi/q35/HPET.acpihmat.dsl @@ -0,0 +1,43 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/HPET.acpihmat, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [HPET] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "HPET" [High Precision Event Timer table] +[004h 0004 4] Table Length : 00000038 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 03 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCHPET" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Hardware Block ID : 8086A201 + +[028h 0040 12] Timer Block Register : [Generic Address Structure] +[028h 0040 1] Space ID : 00 [SystemMemory] +[029h 0041 1] Bit Width : 00 +[02Ah 0042 1] Bit Offset : 00 +[02Bh 0043 1] Encoded Access Width : 00 [Undefined/Legacy] +[02Ch 0044 8] Address : 00000000FED00000 + +[034h 0052 1] Sequence Number : 00 +[035h 0053 2] Minimum Clock Ticks : 0000 +[037h 0055 1] Flags (decoded below) : 00 + 4K Page Protect : 0 + 64K Page Protect : 0 + +Raw Table Data: Length 56 (0x38) + + 0000: 48 50 45 54 38 00 00 00 01 03 42 4F 43 48 53 20 // HPET8.....BOCHS + 0010: 42 58 50 43 48 50 45 54 01 00 00 00 42 58 50 43 // BXPCHPET....BXPC + 0020: 01 00 00 00 01 A2 86 80 00 00 00 00 00 00 D0 FE // ................ + 0030: 00 00 00 00 00 00 00 00 // ........ diff --git a/tests/data/acpi/q35/HPET.bridge b/tests/data/acpi/q35/HPET.bridge new file mode 100644 index 0000000000000000000000000000000000000000..df689b8f99c1c43cfd7d63bdede3bcdfd23b7de1 GIT binary patch literal 56 zcmeYWa1F6wU|?WmcJg=j2v%^42ypfYa1CK(U|;~TK{Vr{wgv_;xbP1`GcW)EHY*AN literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/HPET.bridge.dsl b/tests/data/acpi/q35/HPET.bridge.dsl new file mode 100644 index 0000000000..817040df23 --- /dev/null +++ b/tests/data/acpi/q35/HPET.bridge.dsl @@ -0,0 +1,43 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/HPET.bridge, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [HPET] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "HPET" [High Precision Event Timer table] +[004h 0004 4] Table Length : 00000038 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 03 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCHPET" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Hardware Block ID : 8086A201 + +[028h 0040 12] Timer Block Register : [Generic Address Structure] +[028h 0040 1] Space ID : 00 [SystemMemory] +[029h 0041 1] Bit Width : 00 +[02Ah 0042 1] Bit Offset : 00 +[02Bh 0043 1] Encoded Access Width : 00 [Undefined/Legacy] +[02Ch 0044 8] Address : 00000000FED00000 + +[034h 0052 1] Sequence Number : 00 +[035h 0053 2] Minimum Clock Ticks : 0000 +[037h 0055 1] Flags (decoded below) : 00 + 4K Page Protect : 0 + 64K Page Protect : 0 + +Raw Table Data: Length 56 (0x38) + + 0000: 48 50 45 54 38 00 00 00 01 03 42 4F 43 48 53 20 // HPET8.....BOCHS + 0010: 42 58 50 43 48 50 45 54 01 00 00 00 42 58 50 43 // BXPCHPET....BXPC + 0020: 01 00 00 00 01 A2 86 80 00 00 00 00 00 00 D0 FE // ................ + 0030: 00 00 00 00 00 00 00 00 // ........ diff --git a/tests/data/acpi/q35/HPET.cphp b/tests/data/acpi/q35/HPET.cphp new file mode 100644 index 0000000000000000000000000000000000000000..df689b8f99c1c43cfd7d63bdede3bcdfd23b7de1 GIT binary patch literal 56 zcmeYWa1F6wU|?WmcJg=j2v%^42ypfYa1CK(U|;~TK{Vr{wgv_;xbP1`GcW)EHY*AN literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/HPET.cphp.dsl b/tests/data/acpi/q35/HPET.cphp.dsl new file mode 100644 index 0000000000..4134b96873 --- /dev/null +++ b/tests/data/acpi/q35/HPET.cphp.dsl @@ -0,0 +1,43 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/HPET.cphp, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [HPET] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "HPET" [High Precision Event Timer table] +[004h 0004 4] Table Length : 00000038 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 03 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCHPET" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Hardware Block ID : 8086A201 + +[028h 0040 12] Timer Block Register : [Generic Address Structure] +[028h 0040 1] Space ID : 00 [SystemMemory] +[029h 0041 1] Bit Width : 00 +[02Ah 0042 1] Bit Offset : 00 +[02Bh 0043 1] Encoded Access Width : 00 [Undefined/Legacy] +[02Ch 0044 8] Address : 00000000FED00000 + +[034h 0052 1] Sequence Number : 00 +[035h 0053 2] Minimum Clock Ticks : 0000 +[037h 0055 1] Flags (decoded below) : 00 + 4K Page Protect : 0 + 64K Page Protect : 0 + +Raw Table Data: Length 56 (0x38) + + 0000: 48 50 45 54 38 00 00 00 01 03 42 4F 43 48 53 20 // HPET8.....BOCHS + 0010: 42 58 50 43 48 50 45 54 01 00 00 00 42 58 50 43 // BXPCHPET....BXPC + 0020: 01 00 00 00 01 A2 86 80 00 00 00 00 00 00 D0 FE // ................ + 0030: 00 00 00 00 00 00 00 00 // ........ diff --git a/tests/data/acpi/q35/HPET.dimmpxm b/tests/data/acpi/q35/HPET.dimmpxm new file mode 100644 index 0000000000000000000000000000000000000000..df689b8f99c1c43cfd7d63bdede3bcdfd23b7de1 GIT binary patch literal 56 zcmeYWa1F6wU|?WmcJg=j2v%^42ypfYa1CK(U|;~TK{Vr{wgv_;xbP1`GcW)EHY*AN literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/HPET.dimmpxm.dsl b/tests/data/acpi/q35/HPET.dimmpxm.dsl new file mode 100644 index 0000000000..42a7cc5fd6 --- /dev/null +++ b/tests/data/acpi/q35/HPET.dimmpxm.dsl @@ -0,0 +1,43 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/HPET.dimmpxm, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [HPET] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "HPET" [High Precision Event Timer table] +[004h 0004 4] Table Length : 00000038 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 03 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCHPET" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Hardware Block ID : 8086A201 + +[028h 0040 12] Timer Block Register : [Generic Address Structure] +[028h 0040 1] Space ID : 00 [SystemMemory] +[029h 0041 1] Bit Width : 00 +[02Ah 0042 1] Bit Offset : 00 +[02Bh 0043 1] Encoded Access Width : 00 [Undefined/Legacy] +[02Ch 0044 8] Address : 00000000FED00000 + +[034h 0052 1] Sequence Number : 00 +[035h 0053 2] Minimum Clock Ticks : 0000 +[037h 0055 1] Flags (decoded below) : 00 + 4K Page Protect : 0 + 64K Page Protect : 0 + +Raw Table Data: Length 56 (0x38) + + 0000: 48 50 45 54 38 00 00 00 01 03 42 4F 43 48 53 20 // HPET8.....BOCHS + 0010: 42 58 50 43 48 50 45 54 01 00 00 00 42 58 50 43 // BXPCHPET....BXPC + 0020: 01 00 00 00 01 A2 86 80 00 00 00 00 00 00 D0 FE // ................ + 0030: 00 00 00 00 00 00 00 00 // ........ diff --git a/tests/data/acpi/q35/HPET.dsl b/tests/data/acpi/q35/HPET.dsl new file mode 100644 index 0000000000..42c40fd653 --- /dev/null +++ b/tests/data/acpi/q35/HPET.dsl @@ -0,0 +1,43 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/HPET.tis, Mon Sep 28 17:24:38 2020 + * + * ACPI Data Table [HPET] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "HPET" [High Precision Event Timer table] +[004h 0004 4] Table Length : 00000038 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 03 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCHPET" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Hardware Block ID : 8086A201 + +[028h 0040 12] Timer Block Register : [Generic Address Structure] +[028h 0040 1] Space ID : 00 [SystemMemory] +[029h 0041 1] Bit Width : 00 +[02Ah 0042 1] Bit Offset : 00 +[02Bh 0043 1] Encoded Access Width : 00 [Undefined/Legacy] +[02Ch 0044 8] Address : 00000000FED00000 + +[034h 0052 1] Sequence Number : 00 +[035h 0053 2] Minimum Clock Ticks : 0000 +[037h 0055 1] Flags (decoded below) : 00 + 4K Page Protect : 0 + 64K Page Protect : 0 + +Raw Table Data: Length 56 (0x38) + + 0000: 48 50 45 54 38 00 00 00 01 03 42 4F 43 48 53 20 // HPET8.....BOCHS + 0010: 42 58 50 43 48 50 45 54 01 00 00 00 42 58 50 43 // BXPCHPET....BXPC + 0020: 01 00 00 00 01 A2 86 80 00 00 00 00 00 00 D0 FE // ................ + 0030: 00 00 00 00 00 00 00 00 // ........ diff --git a/tests/data/acpi/q35/HPET.ipmibt b/tests/data/acpi/q35/HPET.ipmibt new file mode 100644 index 0000000000000000000000000000000000000000..df689b8f99c1c43cfd7d63bdede3bcdfd23b7de1 GIT binary patch literal 56 zcmeYWa1F6wU|?WmcJg=j2v%^42ypfYa1CK(U|;~TK{Vr{wgv_;xbP1`GcW)EHY*AN literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/HPET.ipmibt.dsl b/tests/data/acpi/q35/HPET.ipmibt.dsl new file mode 100644 index 0000000000..9637f4cf81 --- /dev/null +++ b/tests/data/acpi/q35/HPET.ipmibt.dsl @@ -0,0 +1,43 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/HPET.ipmibt, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [HPET] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "HPET" [High Precision Event Timer table] +[004h 0004 4] Table Length : 00000038 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 03 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCHPET" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Hardware Block ID : 8086A201 + +[028h 0040 12] Timer Block Register : [Generic Address Structure] +[028h 0040 1] Space ID : 00 [SystemMemory] +[029h 0041 1] Bit Width : 00 +[02Ah 0042 1] Bit Offset : 00 +[02Bh 0043 1] Encoded Access Width : 00 [Undefined/Legacy] +[02Ch 0044 8] Address : 00000000FED00000 + +[034h 0052 1] Sequence Number : 00 +[035h 0053 2] Minimum Clock Ticks : 0000 +[037h 0055 1] Flags (decoded below) : 00 + 4K Page Protect : 0 + 64K Page Protect : 0 + +Raw Table Data: Length 56 (0x38) + + 0000: 48 50 45 54 38 00 00 00 01 03 42 4F 43 48 53 20 // HPET8.....BOCHS + 0010: 42 58 50 43 48 50 45 54 01 00 00 00 42 58 50 43 // BXPCHPET....BXPC + 0020: 01 00 00 00 01 A2 86 80 00 00 00 00 00 00 D0 FE // ................ + 0030: 00 00 00 00 00 00 00 00 // ........ diff --git a/tests/data/acpi/q35/HPET.memhp b/tests/data/acpi/q35/HPET.memhp new file mode 100644 index 0000000000000000000000000000000000000000..df689b8f99c1c43cfd7d63bdede3bcdfd23b7de1 GIT binary patch literal 56 zcmeYWa1F6wU|?WmcJg=j2v%^42ypfYa1CK(U|;~TK{Vr{wgv_;xbP1`GcW)EHY*AN literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/HPET.memhp.dsl b/tests/data/acpi/q35/HPET.memhp.dsl new file mode 100644 index 0000000000..2efab15846 --- /dev/null +++ b/tests/data/acpi/q35/HPET.memhp.dsl @@ -0,0 +1,43 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/HPET.memhp, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [HPET] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "HPET" [High Precision Event Timer table] +[004h 0004 4] Table Length : 00000038 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 03 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCHPET" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Hardware Block ID : 8086A201 + +[028h 0040 12] Timer Block Register : [Generic Address Structure] +[028h 0040 1] Space ID : 00 [SystemMemory] +[029h 0041 1] Bit Width : 00 +[02Ah 0042 1] Bit Offset : 00 +[02Bh 0043 1] Encoded Access Width : 00 [Undefined/Legacy] +[02Ch 0044 8] Address : 00000000FED00000 + +[034h 0052 1] Sequence Number : 00 +[035h 0053 2] Minimum Clock Ticks : 0000 +[037h 0055 1] Flags (decoded below) : 00 + 4K Page Protect : 0 + 64K Page Protect : 0 + +Raw Table Data: Length 56 (0x38) + + 0000: 48 50 45 54 38 00 00 00 01 03 42 4F 43 48 53 20 // HPET8.....BOCHS + 0010: 42 58 50 43 48 50 45 54 01 00 00 00 42 58 50 43 // BXPCHPET....BXPC + 0020: 01 00 00 00 01 A2 86 80 00 00 00 00 00 00 D0 FE // ................ + 0030: 00 00 00 00 00 00 00 00 // ........ diff --git a/tests/data/acpi/q35/HPET.mmio64 b/tests/data/acpi/q35/HPET.mmio64 new file mode 100644 index 0000000000000000000000000000000000000000..df689b8f99c1c43cfd7d63bdede3bcdfd23b7de1 GIT binary patch literal 56 zcmeYWa1F6wU|?WmcJg=j2v%^42ypfYa1CK(U|;~TK{Vr{wgv_;xbP1`GcW)EHY*AN literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/HPET.mmio64.dsl b/tests/data/acpi/q35/HPET.mmio64.dsl new file mode 100644 index 0000000000..dba0368678 --- /dev/null +++ b/tests/data/acpi/q35/HPET.mmio64.dsl @@ -0,0 +1,43 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/HPET.mmio64, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [HPET] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "HPET" [High Precision Event Timer table] +[004h 0004 4] Table Length : 00000038 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 03 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCHPET" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Hardware Block ID : 8086A201 + +[028h 0040 12] Timer Block Register : [Generic Address Structure] +[028h 0040 1] Space ID : 00 [SystemMemory] +[029h 0041 1] Bit Width : 00 +[02Ah 0042 1] Bit Offset : 00 +[02Bh 0043 1] Encoded Access Width : 00 [Undefined/Legacy] +[02Ch 0044 8] Address : 00000000FED00000 + +[034h 0052 1] Sequence Number : 00 +[035h 0053 2] Minimum Clock Ticks : 0000 +[037h 0055 1] Flags (decoded below) : 00 + 4K Page Protect : 0 + 64K Page Protect : 0 + +Raw Table Data: Length 56 (0x38) + + 0000: 48 50 45 54 38 00 00 00 01 03 42 4F 43 48 53 20 // HPET8.....BOCHS + 0010: 42 58 50 43 48 50 45 54 01 00 00 00 42 58 50 43 // BXPCHPET....BXPC + 0020: 01 00 00 00 01 A2 86 80 00 00 00 00 00 00 D0 FE // ................ + 0030: 00 00 00 00 00 00 00 00 // ........ diff --git a/tests/data/acpi/q35/HPET.numamem b/tests/data/acpi/q35/HPET.numamem new file mode 100644 index 0000000000000000000000000000000000000000..df689b8f99c1c43cfd7d63bdede3bcdfd23b7de1 GIT binary patch literal 56 zcmeYWa1F6wU|?WmcJg=j2v%^42ypfYa1CK(U|;~TK{Vr{wgv_;xbP1`GcW)EHY*AN literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/HPET.numamem.dsl b/tests/data/acpi/q35/HPET.numamem.dsl new file mode 100644 index 0000000000..e9d18a59fd --- /dev/null +++ b/tests/data/acpi/q35/HPET.numamem.dsl @@ -0,0 +1,43 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/HPET.numamem, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [HPET] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "HPET" [High Precision Event Timer table] +[004h 0004 4] Table Length : 00000038 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 03 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCHPET" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Hardware Block ID : 8086A201 + +[028h 0040 12] Timer Block Register : [Generic Address Structure] +[028h 0040 1] Space ID : 00 [SystemMemory] +[029h 0041 1] Bit Width : 00 +[02Ah 0042 1] Bit Offset : 00 +[02Bh 0043 1] Encoded Access Width : 00 [Undefined/Legacy] +[02Ch 0044 8] Address : 00000000FED00000 + +[034h 0052 1] Sequence Number : 00 +[035h 0053 2] Minimum Clock Ticks : 0000 +[037h 0055 1] Flags (decoded below) : 00 + 4K Page Protect : 0 + 64K Page Protect : 0 + +Raw Table Data: Length 56 (0x38) + + 0000: 48 50 45 54 38 00 00 00 01 03 42 4F 43 48 53 20 // HPET8.....BOCHS + 0010: 42 58 50 43 48 50 45 54 01 00 00 00 42 58 50 43 // BXPCHPET....BXPC + 0020: 01 00 00 00 01 A2 86 80 00 00 00 00 00 00 D0 FE // ................ + 0030: 00 00 00 00 00 00 00 00 // ........ diff --git a/tests/data/acpi/q35/HPET.tis b/tests/data/acpi/q35/HPET.tis new file mode 100644 index 0000000000000000000000000000000000000000..df689b8f99c1c43cfd7d63bdede3bcdfd23b7de1 GIT binary patch literal 56 zcmeYWa1F6wU|?WmcJg=j2v%^42ypfYa1CK(U|;~TK{Vr{wgv_;xbP1`GcW)EHY*AN literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/HPET.tis.dsl b/tests/data/acpi/q35/HPET.tis.dsl new file mode 100644 index 0000000000..471cb5b940 --- /dev/null +++ b/tests/data/acpi/q35/HPET.tis.dsl @@ -0,0 +1,43 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/HPET.tis, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [HPET] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "HPET" [High Precision Event Timer table] +[004h 0004 4] Table Length : 00000038 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 03 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCHPET" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Hardware Block ID : 8086A201 + +[028h 0040 12] Timer Block Register : [Generic Address Structure] +[028h 0040 1] Space ID : 00 [SystemMemory] +[029h 0041 1] Bit Width : 00 +[02Ah 0042 1] Bit Offset : 00 +[02Bh 0043 1] Encoded Access Width : 00 [Undefined/Legacy] +[02Ch 0044 8] Address : 00000000FED00000 + +[034h 0052 1] Sequence Number : 00 +[035h 0053 2] Minimum Clock Ticks : 0000 +[037h 0055 1] Flags (decoded below) : 00 + 4K Page Protect : 0 + 64K Page Protect : 0 + +Raw Table Data: Length 56 (0x38) + + 0000: 48 50 45 54 38 00 00 00 01 03 42 4F 43 48 53 20 // HPET8.....BOCHS + 0010: 42 58 50 43 48 50 45 54 01 00 00 00 42 58 50 43 // BXPCHPET....BXPC + 0020: 01 00 00 00 01 A2 86 80 00 00 00 00 00 00 D0 FE // ................ + 0030: 00 00 00 00 00 00 00 00 // ........ diff --git a/tests/data/acpi/q35/MCFG.acpihmat b/tests/data/acpi/q35/MCFG.acpihmat new file mode 100644 index 0000000000000000000000000000000000000000..79ceb27a038c6e29d098b98dda2e229495f96b7c GIT binary patch literal 60 tcmeZuc5}C3U|?W;@8s|75v<@85#a3W?B>qMz`y`vgJ>kM0m}Xlq5)T;2>}2A literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/MCFG.acpihmat.dsl b/tests/data/acpi/q35/MCFG.acpihmat.dsl new file mode 100644 index 0000000000..8d07f64e9d --- /dev/null +++ b/tests/data/acpi/q35/MCFG.acpihmat.dsl @@ -0,0 +1,36 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/MCFG.acpihmat, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [MCFG] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "MCFG" [Memory Mapped Configuration table] +[004h 0004 4] Table Length : 0000003C +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : EF +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCMCFG" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 8] Reserved : 0000000000000000 + +[02Ch 0044 8] Base Address : 00000000B0000000 +[034h 0052 2] Segment Group Number : 0000 +[036h 0054 1] Start Bus Number : 00 +[037h 0055 1] End Bus Number : FF +[038h 0056 4] Reserved : 00000000 + +Raw Table Data: Length 60 (0x3C) + + 0000: 4D 43 46 47 3C 00 00 00 01 EF 42 4F 43 48 53 20 // MCFG<.....BOCHS + 0010: 42 58 50 43 4D 43 46 47 01 00 00 00 42 58 50 43 // BXPCMCFG....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 B0 // ................ + 0030: 00 00 00 00 00 00 00 FF 00 00 00 00 // ............ diff --git a/tests/data/acpi/q35/MCFG.bridge b/tests/data/acpi/q35/MCFG.bridge new file mode 100644 index 0000000000000000000000000000000000000000..79ceb27a038c6e29d098b98dda2e229495f96b7c GIT binary patch literal 60 tcmeZuc5}C3U|?W;@8s|75v<@85#a3W?B>qMz`y`vgJ>kM0m}Xlq5)T;2>}2A literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/MCFG.bridge.dsl b/tests/data/acpi/q35/MCFG.bridge.dsl new file mode 100644 index 0000000000..6ce54d7228 --- /dev/null +++ b/tests/data/acpi/q35/MCFG.bridge.dsl @@ -0,0 +1,36 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/MCFG.bridge, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [MCFG] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "MCFG" [Memory Mapped Configuration table] +[004h 0004 4] Table Length : 0000003C +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : EF +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCMCFG" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 8] Reserved : 0000000000000000 + +[02Ch 0044 8] Base Address : 00000000B0000000 +[034h 0052 2] Segment Group Number : 0000 +[036h 0054 1] Start Bus Number : 00 +[037h 0055 1] End Bus Number : FF +[038h 0056 4] Reserved : 00000000 + +Raw Table Data: Length 60 (0x3C) + + 0000: 4D 43 46 47 3C 00 00 00 01 EF 42 4F 43 48 53 20 // MCFG<.....BOCHS + 0010: 42 58 50 43 4D 43 46 47 01 00 00 00 42 58 50 43 // BXPCMCFG....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 B0 // ................ + 0030: 00 00 00 00 00 00 00 FF 00 00 00 00 // ............ diff --git a/tests/data/acpi/q35/MCFG.cphp b/tests/data/acpi/q35/MCFG.cphp new file mode 100644 index 0000000000000000000000000000000000000000..79ceb27a038c6e29d098b98dda2e229495f96b7c GIT binary patch literal 60 tcmeZuc5}C3U|?W;@8s|75v<@85#a3W?B>qMz`y`vgJ>kM0m}Xlq5)T;2>}2A literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/MCFG.cphp.dsl b/tests/data/acpi/q35/MCFG.cphp.dsl new file mode 100644 index 0000000000..7ffd7f30db --- /dev/null +++ b/tests/data/acpi/q35/MCFG.cphp.dsl @@ -0,0 +1,36 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/MCFG.cphp, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [MCFG] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "MCFG" [Memory Mapped Configuration table] +[004h 0004 4] Table Length : 0000003C +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : EF +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCMCFG" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 8] Reserved : 0000000000000000 + +[02Ch 0044 8] Base Address : 00000000B0000000 +[034h 0052 2] Segment Group Number : 0000 +[036h 0054 1] Start Bus Number : 00 +[037h 0055 1] End Bus Number : FF +[038h 0056 4] Reserved : 00000000 + +Raw Table Data: Length 60 (0x3C) + + 0000: 4D 43 46 47 3C 00 00 00 01 EF 42 4F 43 48 53 20 // MCFG<.....BOCHS + 0010: 42 58 50 43 4D 43 46 47 01 00 00 00 42 58 50 43 // BXPCMCFG....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 B0 // ................ + 0030: 00 00 00 00 00 00 00 FF 00 00 00 00 // ............ diff --git a/tests/data/acpi/q35/MCFG.dimmpxm b/tests/data/acpi/q35/MCFG.dimmpxm new file mode 100644 index 0000000000000000000000000000000000000000..79ceb27a038c6e29d098b98dda2e229495f96b7c GIT binary patch literal 60 tcmeZuc5}C3U|?W;@8s|75v<@85#a3W?B>qMz`y`vgJ>kM0m}Xlq5)T;2>}2A literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/MCFG.dimmpxm.dsl b/tests/data/acpi/q35/MCFG.dimmpxm.dsl new file mode 100644 index 0000000000..dd7373b692 --- /dev/null +++ b/tests/data/acpi/q35/MCFG.dimmpxm.dsl @@ -0,0 +1,36 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/MCFG.dimmpxm, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [MCFG] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "MCFG" [Memory Mapped Configuration table] +[004h 0004 4] Table Length : 0000003C +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : EF +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCMCFG" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 8] Reserved : 0000000000000000 + +[02Ch 0044 8] Base Address : 00000000B0000000 +[034h 0052 2] Segment Group Number : 0000 +[036h 0054 1] Start Bus Number : 00 +[037h 0055 1] End Bus Number : FF +[038h 0056 4] Reserved : 00000000 + +Raw Table Data: Length 60 (0x3C) + + 0000: 4D 43 46 47 3C 00 00 00 01 EF 42 4F 43 48 53 20 // MCFG<.....BOCHS + 0010: 42 58 50 43 4D 43 46 47 01 00 00 00 42 58 50 43 // BXPCMCFG....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 B0 // ................ + 0030: 00 00 00 00 00 00 00 FF 00 00 00 00 // ............ diff --git a/tests/data/acpi/q35/MCFG.dsl b/tests/data/acpi/q35/MCFG.dsl new file mode 100644 index 0000000000..5179d6d707 --- /dev/null +++ b/tests/data/acpi/q35/MCFG.dsl @@ -0,0 +1,36 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/MCFG.tis, Mon Sep 28 17:24:38 2020 + * + * ACPI Data Table [MCFG] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "MCFG" [Memory Mapped Configuration table] +[004h 0004 4] Table Length : 0000003C +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : EF +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCMCFG" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 8] Reserved : 0000000000000000 + +[02Ch 0044 8] Base Address : 00000000B0000000 +[034h 0052 2] Segment Group Number : 0000 +[036h 0054 1] Start Bus Number : 00 +[037h 0055 1] End Bus Number : FF +[038h 0056 4] Reserved : 00000000 + +Raw Table Data: Length 60 (0x3C) + + 0000: 4D 43 46 47 3C 00 00 00 01 EF 42 4F 43 48 53 20 // MCFG<.....BOCHS + 0010: 42 58 50 43 4D 43 46 47 01 00 00 00 42 58 50 43 // BXPCMCFG....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 B0 // ................ + 0030: 00 00 00 00 00 00 00 FF 00 00 00 00 // ............ diff --git a/tests/data/acpi/q35/MCFG.ipmibt b/tests/data/acpi/q35/MCFG.ipmibt new file mode 100644 index 0000000000000000000000000000000000000000..79ceb27a038c6e29d098b98dda2e229495f96b7c GIT binary patch literal 60 tcmeZuc5}C3U|?W;@8s|75v<@85#a3W?B>qMz`y`vgJ>kM0m}Xlq5)T;2>}2A literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/MCFG.ipmibt.dsl b/tests/data/acpi/q35/MCFG.ipmibt.dsl new file mode 100644 index 0000000000..80c372162c --- /dev/null +++ b/tests/data/acpi/q35/MCFG.ipmibt.dsl @@ -0,0 +1,36 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/MCFG.ipmibt, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [MCFG] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "MCFG" [Memory Mapped Configuration table] +[004h 0004 4] Table Length : 0000003C +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : EF +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCMCFG" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 8] Reserved : 0000000000000000 + +[02Ch 0044 8] Base Address : 00000000B0000000 +[034h 0052 2] Segment Group Number : 0000 +[036h 0054 1] Start Bus Number : 00 +[037h 0055 1] End Bus Number : FF +[038h 0056 4] Reserved : 00000000 + +Raw Table Data: Length 60 (0x3C) + + 0000: 4D 43 46 47 3C 00 00 00 01 EF 42 4F 43 48 53 20 // MCFG<.....BOCHS + 0010: 42 58 50 43 4D 43 46 47 01 00 00 00 42 58 50 43 // BXPCMCFG....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 B0 // ................ + 0030: 00 00 00 00 00 00 00 FF 00 00 00 00 // ............ diff --git a/tests/data/acpi/q35/MCFG.memhp b/tests/data/acpi/q35/MCFG.memhp new file mode 100644 index 0000000000000000000000000000000000000000..79ceb27a038c6e29d098b98dda2e229495f96b7c GIT binary patch literal 60 tcmeZuc5}C3U|?W;@8s|75v<@85#a3W?B>qMz`y`vgJ>kM0m}Xlq5)T;2>}2A literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/MCFG.memhp.dsl b/tests/data/acpi/q35/MCFG.memhp.dsl new file mode 100644 index 0000000000..1b1f666833 --- /dev/null +++ b/tests/data/acpi/q35/MCFG.memhp.dsl @@ -0,0 +1,36 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/MCFG.memhp, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [MCFG] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "MCFG" [Memory Mapped Configuration table] +[004h 0004 4] Table Length : 0000003C +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : EF +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCMCFG" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 8] Reserved : 0000000000000000 + +[02Ch 0044 8] Base Address : 00000000B0000000 +[034h 0052 2] Segment Group Number : 0000 +[036h 0054 1] Start Bus Number : 00 +[037h 0055 1] End Bus Number : FF +[038h 0056 4] Reserved : 00000000 + +Raw Table Data: Length 60 (0x3C) + + 0000: 4D 43 46 47 3C 00 00 00 01 EF 42 4F 43 48 53 20 // MCFG<.....BOCHS + 0010: 42 58 50 43 4D 43 46 47 01 00 00 00 42 58 50 43 // BXPCMCFG....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 B0 // ................ + 0030: 00 00 00 00 00 00 00 FF 00 00 00 00 // ............ diff --git a/tests/data/acpi/q35/MCFG.mmio64 b/tests/data/acpi/q35/MCFG.mmio64 new file mode 100644 index 0000000000000000000000000000000000000000..79ceb27a038c6e29d098b98dda2e229495f96b7c GIT binary patch literal 60 tcmeZuc5}C3U|?W;@8s|75v<@85#a3W?B>qMz`y`vgJ>kM0m}Xlq5)T;2>}2A literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/MCFG.mmio64.dsl b/tests/data/acpi/q35/MCFG.mmio64.dsl new file mode 100644 index 0000000000..79be440f72 --- /dev/null +++ b/tests/data/acpi/q35/MCFG.mmio64.dsl @@ -0,0 +1,36 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/MCFG.mmio64, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [MCFG] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "MCFG" [Memory Mapped Configuration table] +[004h 0004 4] Table Length : 0000003C +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : EF +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCMCFG" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 8] Reserved : 0000000000000000 + +[02Ch 0044 8] Base Address : 00000000B0000000 +[034h 0052 2] Segment Group Number : 0000 +[036h 0054 1] Start Bus Number : 00 +[037h 0055 1] End Bus Number : FF +[038h 0056 4] Reserved : 00000000 + +Raw Table Data: Length 60 (0x3C) + + 0000: 4D 43 46 47 3C 00 00 00 01 EF 42 4F 43 48 53 20 // MCFG<.....BOCHS + 0010: 42 58 50 43 4D 43 46 47 01 00 00 00 42 58 50 43 // BXPCMCFG....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 B0 // ................ + 0030: 00 00 00 00 00 00 00 FF 00 00 00 00 // ............ diff --git a/tests/data/acpi/q35/MCFG.numamem b/tests/data/acpi/q35/MCFG.numamem new file mode 100644 index 0000000000000000000000000000000000000000..79ceb27a038c6e29d098b98dda2e229495f96b7c GIT binary patch literal 60 tcmeZuc5}C3U|?W;@8s|75v<@85#a3W?B>qMz`y`vgJ>kM0m}Xlq5)T;2>}2A literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/MCFG.numamem.dsl b/tests/data/acpi/q35/MCFG.numamem.dsl new file mode 100644 index 0000000000..30b37074d3 --- /dev/null +++ b/tests/data/acpi/q35/MCFG.numamem.dsl @@ -0,0 +1,36 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/MCFG.numamem, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [MCFG] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "MCFG" [Memory Mapped Configuration table] +[004h 0004 4] Table Length : 0000003C +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : EF +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCMCFG" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 8] Reserved : 0000000000000000 + +[02Ch 0044 8] Base Address : 00000000B0000000 +[034h 0052 2] Segment Group Number : 0000 +[036h 0054 1] Start Bus Number : 00 +[037h 0055 1] End Bus Number : FF +[038h 0056 4] Reserved : 00000000 + +Raw Table Data: Length 60 (0x3C) + + 0000: 4D 43 46 47 3C 00 00 00 01 EF 42 4F 43 48 53 20 // MCFG<.....BOCHS + 0010: 42 58 50 43 4D 43 46 47 01 00 00 00 42 58 50 43 // BXPCMCFG....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 B0 // ................ + 0030: 00 00 00 00 00 00 00 FF 00 00 00 00 // ............ diff --git a/tests/data/acpi/q35/MCFG.tis b/tests/data/acpi/q35/MCFG.tis new file mode 100644 index 0000000000000000000000000000000000000000..79ceb27a038c6e29d098b98dda2e229495f96b7c GIT binary patch literal 60 tcmeZuc5}C3U|?W;@8s|75v<@85#a3W?B>qMz`y`vgJ>kM0m}Xlq5)T;2>}2A literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/MCFG.tis.dsl b/tests/data/acpi/q35/MCFG.tis.dsl new file mode 100644 index 0000000000..0a92d698e9 --- /dev/null +++ b/tests/data/acpi/q35/MCFG.tis.dsl @@ -0,0 +1,36 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/MCFG.tis, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [MCFG] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "MCFG" [Memory Mapped Configuration table] +[004h 0004 4] Table Length : 0000003C +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : EF +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCMCFG" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 8] Reserved : 0000000000000000 + +[02Ch 0044 8] Base Address : 00000000B0000000 +[034h 0052 2] Segment Group Number : 0000 +[036h 0054 1] Start Bus Number : 00 +[037h 0055 1] End Bus Number : FF +[038h 0056 4] Reserved : 00000000 + +Raw Table Data: Length 60 (0x3C) + + 0000: 4D 43 46 47 3C 00 00 00 01 EF 42 4F 43 48 53 20 // MCFG<.....BOCHS + 0010: 42 58 50 43 4D 43 46 47 01 00 00 00 42 58 50 43 // BXPCMCFG....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 B0 // ................ + 0030: 00 00 00 00 00 00 00 FF 00 00 00 00 // ............ diff --git a/tests/data/acpi/q35/NFIT.dimmpxm.dsl b/tests/data/acpi/q35/NFIT.dimmpxm.dsl new file mode 100644 index 0000000000..e29b770dca --- /dev/null +++ b/tests/data/acpi/q35/NFIT.dimmpxm.dsl @@ -0,0 +1,115 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/NFIT.dimmpxm, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [NFIT] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "NFIT" [NVDIMM Firmware Interface Table] +[004h 0004 4] Table Length : 000000F0 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 24 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCNFIT" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Reserved : 00000000 + +[028h 0040 2] Subtable Type : 0000 [System Physical Address Range] +[02Ah 0042 2] Length : 0038 + +[02Ch 0044 2] Range Index : 0004 +[02Eh 0046 2] Flags (decoded below) : 0003 + Add/Online Operation Only : 1 + Proximity Domain Valid : 1 +[030h 0048 4] Reserved : 00000000 +[034h 0052 4] Proximity Domain : 00000002 +[038h 0056 16] Region Type GUID : 66F0D379-B4F3-4074-AC43-0D3318B78CDB +[048h 0072 8] Address Range Base : 0000000108000000 +[050h 0080 8] Address Range Length : 0000000008000000 +[058h 0088 8] Memory Map Attribute : 0000000000008008 + +[060h 0096 2] Subtable Type : 0001 [Memory Range Map] +[062h 0098 2] Length : 0030 + +[064h 0100 4] Device Handle : 00000002 +[068h 0104 2] Physical Id : 0000 +[06Ah 0106 2] Region Id : 0000 +[06Ch 0108 2] Range Index : 0004 +[06Eh 0110 2] Control Region Index : 0005 +[070h 0112 8] Region Size : 0000000008000000 +[078h 0120 8] Region Offset : 0000000000000000 +[080h 0128 8] Address Region Base : 0000000000000000 +[088h 0136 2] Interleave Index : 0000 +[08Ah 0138 2] Interleave Ways : 0001 +[08Ch 0140 2] Flags : 0000 + Save to device failed : 0 + Restore from device failed : 0 + Platform flush failed : 0 + Device not armed : 0 + Health events observed : 0 + Health events enabled : 0 + Mapping failed : 0 +[08Eh 0142 2] Reserved : 0000 + +[090h 0144 2] Subtable Type : 0004 [NVDIMM Control Region] +[092h 0146 2] Length : 0050 + +[094h 0148 2] Region Index : 0005 +[096h 0150 2] Vendor Id : 8086 +[098h 0152 2] Device Id : 0001 +[09Ah 0154 2] Revision Id : 0001 +[09Ch 0156 2] Subsystem Vendor Id : 0000 +[09Eh 0158 2] Subsystem Device Id : 0000 +[0A0h 0160 2] Subsystem Revision Id : 0000 +[0A2h 0162 1] Valid Fields : 00 +[0A3h 0163 1] Manufacturing Location : 00 +[0A4h 0164 2] Manufacturing Date : 0000 +[0A6h 0166 2] Reserved : 0000 +[0A8h 0168 4] Serial Number : 00123457 +[0ACh 0172 2] Code : 0301 +[0AEh 0174 2] Window Count : 0000 +[0B0h 0176 8] Window Size : 0000000000000000 +[0B8h 0184 8] Command Offset : 0000000000000000 +[0C0h 0192 8] Command Size : 0000000000000000 +[0C8h 0200 8] Status Offset : 0000000000000000 +[0D0h 0208 8] Status Size : 0000000000000000 +[0D8h 0216 2] Flags : 0000 + Windows buffered : 0 +[0DAh 0218 6] Reserved1 : 000000000000 + +[0E0h 0224 2] Subtable Type : 0007 [Platform Capabilities] +[0E2h 0226 2] Length : 0010 + +[0E4h 0228 1] Highest Capability : 01 +[0E5h 0229 3] Reserved : 000000 +[0E8h 0232 4] Capabilities (decoded below) : 00000003 + Cache Flush to NVDIMM : 1 + Memory Flush to NVDIMM : 1 + Memory Mirroring : 0 +[0ECh 0236 4] Reserved : 00000000 + +Raw Table Data: Length 240 (0xF0) + + 0000: 4E 46 49 54 F0 00 00 00 01 24 42 4F 43 48 53 20 // NFIT.....$BOCHS + 0010: 42 58 50 43 4E 46 49 54 01 00 00 00 42 58 50 43 // BXPCNFIT....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 38 00 04 00 03 00 // ..........8..... + 0030: 00 00 00 00 02 00 00 00 79 D3 F0 66 F3 B4 74 40 // ........y..f..t@ + 0040: AC 43 0D 33 18 B7 8C DB 00 00 00 08 01 00 00 00 // .C.3............ + 0050: 00 00 00 08 00 00 00 00 08 80 00 00 00 00 00 00 // ................ + 0060: 01 00 30 00 02 00 00 00 00 00 00 00 04 00 05 00 // ..0............. + 0070: 00 00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0080: 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 // ................ + 0090: 04 00 50 00 05 00 86 80 01 00 01 00 00 00 00 00 // ..P............. + 00A0: 00 00 00 00 00 00 00 00 57 34 12 00 01 03 00 00 // ........W4...... + 00B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00E0: 07 00 10 00 01 00 00 00 03 00 00 00 00 00 00 00 // ................ diff --git a/tests/data/acpi/q35/NFIT.dsl b/tests/data/acpi/q35/NFIT.dsl new file mode 100644 index 0000000000..8da7718431 --- /dev/null +++ b/tests/data/acpi/q35/NFIT.dsl @@ -0,0 +1,115 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/NFIT.dimmpxm, Mon Sep 28 17:24:38 2020 + * + * ACPI Data Table [NFIT] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "NFIT" [NVDIMM Firmware Interface Table] +[004h 0004 4] Table Length : 000000F0 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 24 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCNFIT" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Reserved : 00000000 + +[028h 0040 2] Subtable Type : 0000 [System Physical Address Range] +[02Ah 0042 2] Length : 0038 + +[02Ch 0044 2] Range Index : 0004 +[02Eh 0046 2] Flags (decoded below) : 0003 + Add/Online Operation Only : 1 + Proximity Domain Valid : 1 +[030h 0048 4] Reserved : 00000000 +[034h 0052 4] Proximity Domain : 00000002 +[038h 0056 16] Region Type GUID : 66F0D379-B4F3-4074-AC43-0D3318B78CDB +[048h 0072 8] Address Range Base : 0000000108000000 +[050h 0080 8] Address Range Length : 0000000008000000 +[058h 0088 8] Memory Map Attribute : 0000000000008008 + +[060h 0096 2] Subtable Type : 0001 [Memory Range Map] +[062h 0098 2] Length : 0030 + +[064h 0100 4] Device Handle : 00000002 +[068h 0104 2] Physical Id : 0000 +[06Ah 0106 2] Region Id : 0000 +[06Ch 0108 2] Range Index : 0004 +[06Eh 0110 2] Control Region Index : 0005 +[070h 0112 8] Region Size : 0000000008000000 +[078h 0120 8] Region Offset : 0000000000000000 +[080h 0128 8] Address Region Base : 0000000000000000 +[088h 0136 2] Interleave Index : 0000 +[08Ah 0138 2] Interleave Ways : 0001 +[08Ch 0140 2] Flags : 0000 + Save to device failed : 0 + Restore from device failed : 0 + Platform flush failed : 0 + Device not armed : 0 + Health events observed : 0 + Health events enabled : 0 + Mapping failed : 0 +[08Eh 0142 2] Reserved : 0000 + +[090h 0144 2] Subtable Type : 0004 [NVDIMM Control Region] +[092h 0146 2] Length : 0050 + +[094h 0148 2] Region Index : 0005 +[096h 0150 2] Vendor Id : 8086 +[098h 0152 2] Device Id : 0001 +[09Ah 0154 2] Revision Id : 0001 +[09Ch 0156 2] Subsystem Vendor Id : 0000 +[09Eh 0158 2] Subsystem Device Id : 0000 +[0A0h 0160 2] Subsystem Revision Id : 0000 +[0A2h 0162 1] Valid Fields : 00 +[0A3h 0163 1] Manufacturing Location : 00 +[0A4h 0164 2] Manufacturing Date : 0000 +[0A6h 0166 2] Reserved : 0000 +[0A8h 0168 4] Serial Number : 00123457 +[0ACh 0172 2] Code : 0301 +[0AEh 0174 2] Window Count : 0000 +[0B0h 0176 8] Window Size : 0000000000000000 +[0B8h 0184 8] Command Offset : 0000000000000000 +[0C0h 0192 8] Command Size : 0000000000000000 +[0C8h 0200 8] Status Offset : 0000000000000000 +[0D0h 0208 8] Status Size : 0000000000000000 +[0D8h 0216 2] Flags : 0000 + Windows buffered : 0 +[0DAh 0218 6] Reserved1 : 000000000000 + +[0E0h 0224 2] Subtable Type : 0007 [Platform Capabilities] +[0E2h 0226 2] Length : 0010 + +[0E4h 0228 1] Highest Capability : 01 +[0E5h 0229 3] Reserved : 000000 +[0E8h 0232 4] Capabilities (decoded below) : 00000003 + Cache Flush to NVDIMM : 1 + Memory Flush to NVDIMM : 1 + Memory Mirroring : 0 +[0ECh 0236 4] Reserved : 00000000 + +Raw Table Data: Length 240 (0xF0) + + 0000: 4E 46 49 54 F0 00 00 00 01 24 42 4F 43 48 53 20 // NFIT.....$BOCHS + 0010: 42 58 50 43 4E 46 49 54 01 00 00 00 42 58 50 43 // BXPCNFIT....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 38 00 04 00 03 00 // ..........8..... + 0030: 00 00 00 00 02 00 00 00 79 D3 F0 66 F3 B4 74 40 // ........y..f..t@ + 0040: AC 43 0D 33 18 B7 8C DB 00 00 00 08 01 00 00 00 // .C.3............ + 0050: 00 00 00 08 00 00 00 00 08 80 00 00 00 00 00 00 // ................ + 0060: 01 00 30 00 02 00 00 00 00 00 00 00 04 00 05 00 // ..0............. + 0070: 00 00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0080: 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 // ................ + 0090: 04 00 50 00 05 00 86 80 01 00 01 00 00 00 00 00 // ..P............. + 00A0: 00 00 00 00 00 00 00 00 57 34 12 00 01 03 00 00 // ........W4...... + 00B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00E0: 07 00 10 00 01 00 00 00 03 00 00 00 00 00 00 00 // ................ diff --git a/tests/data/acpi/q35/SLIT.cphp.dsl b/tests/data/acpi/q35/SLIT.cphp.dsl new file mode 100644 index 0000000000..cb7347fbd4 --- /dev/null +++ b/tests/data/acpi/q35/SLIT.cphp.dsl @@ -0,0 +1,31 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/SLIT.cphp, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [SLIT] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "SLIT" [System Locality Information Table] +[004h 0004 4] Table Length : 00000030 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 2C +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCSLIT" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 8] Localities : 0000000000000002 +[02Ch 0044 2] Locality 0 : 0A 15 +[02Eh 0046 2] Locality 1 : 15 0A + +Raw Table Data: Length 48 (0x30) + + 0000: 53 4C 49 54 30 00 00 00 01 2C 42 4F 43 48 53 20 // SLIT0....,BOCHS + 0010: 42 58 50 43 53 4C 49 54 01 00 00 00 42 58 50 43 // BXPCSLIT....BXPC + 0020: 01 00 00 00 02 00 00 00 00 00 00 00 0A 15 15 0A // ................ diff --git a/tests/data/acpi/q35/SLIT.dsl b/tests/data/acpi/q35/SLIT.dsl new file mode 100644 index 0000000000..89c381bdd0 --- /dev/null +++ b/tests/data/acpi/q35/SLIT.dsl @@ -0,0 +1,31 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/SLIT.memhp, Mon Sep 28 17:24:38 2020 + * + * ACPI Data Table [SLIT] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "SLIT" [System Locality Information Table] +[004h 0004 4] Table Length : 00000030 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 2C +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCSLIT" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 8] Localities : 0000000000000002 +[02Ch 0044 2] Locality 0 : 0A 15 +[02Eh 0046 2] Locality 1 : 15 0A + +Raw Table Data: Length 48 (0x30) + + 0000: 53 4C 49 54 30 00 00 00 01 2C 42 4F 43 48 53 20 // SLIT0....,BOCHS + 0010: 42 58 50 43 53 4C 49 54 01 00 00 00 42 58 50 43 // BXPCSLIT....BXPC + 0020: 01 00 00 00 02 00 00 00 00 00 00 00 0A 15 15 0A // ................ diff --git a/tests/data/acpi/q35/SLIT.memhp.dsl b/tests/data/acpi/q35/SLIT.memhp.dsl new file mode 100644 index 0000000000..70b233c0e6 --- /dev/null +++ b/tests/data/acpi/q35/SLIT.memhp.dsl @@ -0,0 +1,31 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/SLIT.memhp, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [SLIT] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "SLIT" [System Locality Information Table] +[004h 0004 4] Table Length : 00000030 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 2C +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCSLIT" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 8] Localities : 0000000000000002 +[02Ch 0044 2] Locality 0 : 0A 15 +[02Eh 0046 2] Locality 1 : 15 0A + +Raw Table Data: Length 48 (0x30) + + 0000: 53 4C 49 54 30 00 00 00 01 2C 42 4F 43 48 53 20 // SLIT0....,BOCHS + 0010: 42 58 50 43 53 4C 49 54 01 00 00 00 42 58 50 43 // BXPCSLIT....BXPC + 0020: 01 00 00 00 02 00 00 00 00 00 00 00 0A 15 15 0A // ................ diff --git a/tests/data/acpi/q35/SRAT.acpihmat.dsl b/tests/data/acpi/q35/SRAT.acpihmat.dsl new file mode 100644 index 0000000000..8a1b47e6b0 --- /dev/null +++ b/tests/data/acpi/q35/SRAT.acpihmat.dsl @@ -0,0 +1,137 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/SRAT.acpihmat, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [SRAT] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "SRAT" [System Resource Affinity Table] +[004h 0004 4] Table Length : 00000118 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : C0 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCSRAT" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Table Revision : 00000001 +[028h 0040 8] Reserved : 0000000000000000 + +[030h 0048 1] Subtable Type : 00 [Processor Local APIC/SAPIC Affinity] +[031h 0049 1] Length : 10 + +[032h 0050 1] Proximity Domain Low(8) : 00 +[033h 0051 1] Apic ID : 00 +[034h 0052 4] Flags (decoded below) : 00000001 + Enabled : 1 +[038h 0056 1] Local Sapic EID : 00 +[039h 0057 3] Proximity Domain High(24) : 000000 +[03Ch 0060 4] Clock Domain : 00000000 + +[040h 0064 1] Subtable Type : 00 [Processor Local APIC/SAPIC Affinity] +[041h 0065 1] Length : 10 + +[042h 0066 1] Proximity Domain Low(8) : 00 +[043h 0067 1] Apic ID : 01 +[044h 0068 4] Flags (decoded below) : 00000001 + Enabled : 1 +[048h 0072 1] Local Sapic EID : 00 +[049h 0073 3] Proximity Domain High(24) : 000000 +[04Ch 0076 4] Clock Domain : 00000000 + +[050h 0080 1] Subtable Type : 01 [Memory Affinity] +[051h 0081 1] Length : 28 + +[052h 0082 4] Proximity Domain : 00000000 +[056h 0086 2] Reserved1 : 0000 +[058h 0088 8] Base Address : 0000000000000000 +[060h 0096 8] Address Length : 00000000000A0000 +[068h 0104 4] Reserved2 : 00000000 +[06Ch 0108 4] Flags (decoded below) : 00000001 + Enabled : 1 + Hot Pluggable : 0 + Non-Volatile : 0 +[070h 0112 8] Reserved3 : 0000000000000000 + +[078h 0120 1] Subtable Type : 01 [Memory Affinity] +[079h 0121 1] Length : 28 + +[07Ah 0122 4] Proximity Domain : 00000000 +[07Eh 0126 2] Reserved1 : 0000 +[080h 0128 8] Base Address : 0000000000100000 +[088h 0136 8] Address Length : 0000000003F00000 +[090h 0144 4] Reserved2 : 00000000 +[094h 0148 4] Flags (decoded below) : 00000001 + Enabled : 1 + Hot Pluggable : 0 + Non-Volatile : 0 +[098h 0152 8] Reserved3 : 0000000000000000 + +[0A0h 0160 1] Subtable Type : 01 [Memory Affinity] +[0A1h 0161 1] Length : 28 + +[0A2h 0162 4] Proximity Domain : 00000001 +[0A6h 0166 2] Reserved1 : 0000 +[0A8h 0168 8] Base Address : 0000000004000000 +[0B0h 0176 8] Address Length : 0000000004000000 +[0B8h 0184 4] Reserved2 : 00000000 +[0BCh 0188 4] Flags (decoded below) : 00000001 + Enabled : 1 + Hot Pluggable : 0 + Non-Volatile : 0 +[0C0h 0192 8] Reserved3 : 0000000000000000 + +[0C8h 0200 1] Subtable Type : 01 [Memory Affinity] +[0C9h 0201 1] Length : 28 + +[0CAh 0202 4] Proximity Domain : 00000000 +[0CEh 0206 2] Reserved1 : 0000 +[0D0h 0208 8] Base Address : 0000000000000000 +[0D8h 0216 8] Address Length : 0000000000000000 +[0E0h 0224 4] Reserved2 : 00000000 +[0E4h 0228 4] Flags (decoded below) : 00000000 + Enabled : 0 + Hot Pluggable : 0 + Non-Volatile : 0 +[0E8h 0232 8] Reserved3 : 0000000000000000 + +[0F0h 0240 1] Subtable Type : 01 [Memory Affinity] +[0F1h 0241 1] Length : 28 + +[0F2h 0242 4] Proximity Domain : 00000001 +[0F6h 0246 2] Reserved1 : 0000 +[0F8h 0248 8] Base Address : 0000000100000000 +[100h 0256 8] Address Length : 00000000B8000000 +[108h 0264 4] Reserved2 : 00000000 +[10Ch 0268 4] Flags (decoded below) : 00000003 + Enabled : 1 + Hot Pluggable : 1 + Non-Volatile : 0 +[110h 0272 8] Reserved3 : 0000000000000000 + +Raw Table Data: Length 280 (0x118) + + 0000: 53 52 41 54 18 01 00 00 01 C0 42 4F 43 48 53 20 // SRAT......BOCHS + 0010: 42 58 50 43 53 52 41 54 01 00 00 00 42 58 50 43 // BXPCSRAT....BXPC + 0020: 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0030: 00 10 00 00 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0040: 00 10 00 01 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0050: 01 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // .(.............. + 0060: 00 00 0A 00 00 00 00 00 00 00 00 00 01 00 00 00 // ................ + 0070: 00 00 00 00 00 00 00 00 01 28 00 00 00 00 00 00 // .........(...... + 0080: 00 00 10 00 00 00 00 00 00 00 F0 03 00 00 00 00 // ................ + 0090: 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00A0: 01 28 01 00 00 00 00 00 00 00 00 04 00 00 00 00 // .(.............. + 00B0: 00 00 00 04 00 00 00 00 00 00 00 00 01 00 00 00 // ................ + 00C0: 00 00 00 00 00 00 00 00 01 28 00 00 00 00 00 00 // .........(...... + 00D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00F0: 01 28 01 00 00 00 00 00 00 00 00 00 01 00 00 00 // .(.............. + 0100: 00 00 00 B8 00 00 00 00 00 00 00 00 03 00 00 00 // ................ + 0110: 00 00 00 00 00 00 00 00 // ........ diff --git a/tests/data/acpi/q35/SRAT.cphp.dsl b/tests/data/acpi/q35/SRAT.cphp.dsl new file mode 100644 index 0000000000..f0023db38d --- /dev/null +++ b/tests/data/acpi/q35/SRAT.cphp.dsl @@ -0,0 +1,168 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/SRAT.cphp, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [SRAT] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "SRAT" [System Resource Affinity Table] +[004h 0004 4] Table Length : 00000130 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 36 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCSRAT" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Table Revision : 00000001 +[028h 0040 8] Reserved : 0000000000000000 + +[030h 0048 1] Subtable Type : 00 [Processor Local APIC/SAPIC Affinity] +[031h 0049 1] Length : 10 + +[032h 0050 1] Proximity Domain Low(8) : 00 +[033h 0051 1] Apic ID : 00 +[034h 0052 4] Flags (decoded below) : 00000001 + Enabled : 1 +[038h 0056 1] Local Sapic EID : 00 +[039h 0057 3] Proximity Domain High(24) : 000000 +[03Ch 0060 4] Clock Domain : 00000000 + +[040h 0064 1] Subtable Type : 00 [Processor Local APIC/SAPIC Affinity] +[041h 0065 1] Length : 10 + +[042h 0066 1] Proximity Domain Low(8) : 00 +[043h 0067 1] Apic ID : 01 +[044h 0068 4] Flags (decoded below) : 00000001 + Enabled : 1 +[048h 0072 1] Local Sapic EID : 00 +[049h 0073 3] Proximity Domain High(24) : 000000 +[04Ch 0076 4] Clock Domain : 00000000 + +[050h 0080 1] Subtable Type : 00 [Processor Local APIC/SAPIC Affinity] +[051h 0081 1] Length : 10 + +[052h 0082 1] Proximity Domain Low(8) : 00 +[053h 0083 1] Apic ID : 02 +[054h 0084 4] Flags (decoded below) : 00000001 + Enabled : 1 +[058h 0088 1] Local Sapic EID : 00 +[059h 0089 3] Proximity Domain High(24) : 000000 +[05Ch 0092 4] Clock Domain : 00000000 + +[060h 0096 1] Subtable Type : 00 [Processor Local APIC/SAPIC Affinity] +[061h 0097 1] Length : 10 + +[062h 0098 1] Proximity Domain Low(8) : 01 +[063h 0099 1] Apic ID : 04 +[064h 0100 4] Flags (decoded below) : 00000001 + Enabled : 1 +[068h 0104 1] Local Sapic EID : 00 +[069h 0105 3] Proximity Domain High(24) : 000000 +[06Ch 0108 4] Clock Domain : 00000000 + +[070h 0112 1] Subtable Type : 00 [Processor Local APIC/SAPIC Affinity] +[071h 0113 1] Length : 10 + +[072h 0114 1] Proximity Domain Low(8) : 01 +[073h 0115 1] Apic ID : 05 +[074h 0116 4] Flags (decoded below) : 00000001 + Enabled : 1 +[078h 0120 1] Local Sapic EID : 00 +[079h 0121 3] Proximity Domain High(24) : 000000 +[07Ch 0124 4] Clock Domain : 00000000 + +[080h 0128 1] Subtable Type : 00 [Processor Local APIC/SAPIC Affinity] +[081h 0129 1] Length : 10 + +[082h 0130 1] Proximity Domain Low(8) : 01 +[083h 0131 1] Apic ID : 06 +[084h 0132 4] Flags (decoded below) : 00000001 + Enabled : 1 +[088h 0136 1] Local Sapic EID : 00 +[089h 0137 3] Proximity Domain High(24) : 000000 +[08Ch 0140 4] Clock Domain : 00000000 + +[090h 0144 1] Subtable Type : 01 [Memory Affinity] +[091h 0145 1] Length : 28 + +[092h 0146 4] Proximity Domain : 00000000 +[096h 0150 2] Reserved1 : 0000 +[098h 0152 8] Base Address : 0000000000000000 +[0A0h 0160 8] Address Length : 00000000000A0000 +[0A8h 0168 4] Reserved2 : 00000000 +[0ACh 0172 4] Flags (decoded below) : 00000001 + Enabled : 1 + Hot Pluggable : 0 + Non-Volatile : 0 +[0B0h 0176 8] Reserved3 : 0000000000000000 + +[0B8h 0184 1] Subtable Type : 01 [Memory Affinity] +[0B9h 0185 1] Length : 28 + +[0BAh 0186 4] Proximity Domain : 00000000 +[0BEh 0190 2] Reserved1 : 0000 +[0C0h 0192 8] Base Address : 0000000000100000 +[0C8h 0200 8] Address Length : 0000000003F00000 +[0D0h 0208 4] Reserved2 : 00000000 +[0D4h 0212 4] Flags (decoded below) : 00000001 + Enabled : 1 + Hot Pluggable : 0 + Non-Volatile : 0 +[0D8h 0216 8] Reserved3 : 0000000000000000 + +[0E0h 0224 1] Subtable Type : 01 [Memory Affinity] +[0E1h 0225 1] Length : 28 + +[0E2h 0226 4] Proximity Domain : 00000001 +[0E6h 0230 2] Reserved1 : 0000 +[0E8h 0232 8] Base Address : 0000000004000000 +[0F0h 0240 8] Address Length : 0000000004000000 +[0F8h 0248 4] Reserved2 : 00000000 +[0FCh 0252 4] Flags (decoded below) : 00000001 + Enabled : 1 + Hot Pluggable : 0 + Non-Volatile : 0 +[100h 0256 8] Reserved3 : 0000000000000000 + +[108h 0264 1] Subtable Type : 01 [Memory Affinity] +[109h 0265 1] Length : 28 + +[10Ah 0266 4] Proximity Domain : 00000000 +[10Eh 0270 2] Reserved1 : 0000 +[110h 0272 8] Base Address : 0000000000000000 +[118h 0280 8] Address Length : 0000000000000000 +[120h 0288 4] Reserved2 : 00000000 +[124h 0292 4] Flags (decoded below) : 00000000 + Enabled : 0 + Hot Pluggable : 0 + Non-Volatile : 0 +[128h 0296 8] Reserved3 : 0000000000000000 + +Raw Table Data: Length 304 (0x130) + + 0000: 53 52 41 54 30 01 00 00 01 36 42 4F 43 48 53 20 // SRAT0....6BOCHS + 0010: 42 58 50 43 53 52 41 54 01 00 00 00 42 58 50 43 // BXPCSRAT....BXPC + 0020: 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0030: 00 10 00 00 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0040: 00 10 00 01 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0050: 00 10 00 02 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0060: 00 10 01 04 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0070: 00 10 01 05 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0080: 00 10 01 06 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0090: 01 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // .(.............. + 00A0: 00 00 0A 00 00 00 00 00 00 00 00 00 01 00 00 00 // ................ + 00B0: 00 00 00 00 00 00 00 00 01 28 00 00 00 00 00 00 // .........(...... + 00C0: 00 00 10 00 00 00 00 00 00 00 F0 03 00 00 00 00 // ................ + 00D0: 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00E0: 01 28 01 00 00 00 00 00 00 00 00 04 00 00 00 00 // .(.............. + 00F0: 00 00 00 04 00 00 00 00 00 00 00 00 01 00 00 00 // ................ + 0100: 00 00 00 00 00 00 00 00 01 28 00 00 00 00 00 00 // .........(...... + 0110: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0120: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ diff --git a/tests/data/acpi/q35/SRAT.dimmpxm.dsl b/tests/data/acpi/q35/SRAT.dimmpxm.dsl new file mode 100644 index 0000000000..2cfe6994f5 --- /dev/null +++ b/tests/data/acpi/q35/SRAT.dimmpxm.dsl @@ -0,0 +1,194 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/SRAT.dimmpxm, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [SRAT] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "SRAT" [System Resource Affinity Table] +[004h 0004 4] Table Length : 00000188 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 68 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCSRAT" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Table Revision : 00000001 +[028h 0040 8] Reserved : 0000000000000000 + +[030h 0048 1] Subtable Type : 00 [Processor Local APIC/SAPIC Affinity] +[031h 0049 1] Length : 10 + +[032h 0050 1] Proximity Domain Low(8) : 00 +[033h 0051 1] Apic ID : 00 +[034h 0052 4] Flags (decoded below) : 00000001 + Enabled : 1 +[038h 0056 1] Local Sapic EID : 00 +[039h 0057 3] Proximity Domain High(24) : 000000 +[03Ch 0060 4] Clock Domain : 00000000 + +[040h 0064 1] Subtable Type : 00 [Processor Local APIC/SAPIC Affinity] +[041h 0065 1] Length : 10 + +[042h 0066 1] Proximity Domain Low(8) : 01 +[043h 0067 1] Apic ID : 01 +[044h 0068 4] Flags (decoded below) : 00000001 + Enabled : 1 +[048h 0072 1] Local Sapic EID : 00 +[049h 0073 3] Proximity Domain High(24) : 000000 +[04Ch 0076 4] Clock Domain : 00000000 + +[050h 0080 1] Subtable Type : 00 [Processor Local APIC/SAPIC Affinity] +[051h 0081 1] Length : 10 + +[052h 0082 1] Proximity Domain Low(8) : 02 +[053h 0083 1] Apic ID : 02 +[054h 0084 4] Flags (decoded below) : 00000001 + Enabled : 1 +[058h 0088 1] Local Sapic EID : 00 +[059h 0089 3] Proximity Domain High(24) : 000000 +[05Ch 0092 4] Clock Domain : 00000000 + +[060h 0096 1] Subtable Type : 00 [Processor Local APIC/SAPIC Affinity] +[061h 0097 1] Length : 10 + +[062h 0098 1] Proximity Domain Low(8) : 03 +[063h 0099 1] Apic ID : 03 +[064h 0100 4] Flags (decoded below) : 00000001 + Enabled : 1 +[068h 0104 1] Local Sapic EID : 00 +[069h 0105 3] Proximity Domain High(24) : 000000 +[06Ch 0108 4] Clock Domain : 00000000 + +[070h 0112 1] Subtable Type : 01 [Memory Affinity] +[071h 0113 1] Length : 28 + +[072h 0114 4] Proximity Domain : 00000000 +[076h 0118 2] Reserved1 : 0000 +[078h 0120 8] Base Address : 0000000000000000 +[080h 0128 8] Address Length : 00000000000A0000 +[088h 0136 4] Reserved2 : 00000000 +[08Ch 0140 4] Flags (decoded below) : 00000001 + Enabled : 1 + Hot Pluggable : 0 + Non-Volatile : 0 +[090h 0144 8] Reserved3 : 0000000000000000 + +[098h 0152 1] Subtable Type : 01 [Memory Affinity] +[099h 0153 1] Length : 28 + +[09Ah 0154 4] Proximity Domain : 00000000 +[09Eh 0158 2] Reserved1 : 0000 +[0A0h 0160 8] Base Address : 0000000000100000 +[0A8h 0168 8] Address Length : 0000000001F00000 +[0B0h 0176 4] Reserved2 : 00000000 +[0B4h 0180 4] Flags (decoded below) : 00000001 + Enabled : 1 + Hot Pluggable : 0 + Non-Volatile : 0 +[0B8h 0184 8] Reserved3 : 0000000000000000 + +[0C0h 0192 1] Subtable Type : 01 [Memory Affinity] +[0C1h 0193 1] Length : 28 + +[0C2h 0194 4] Proximity Domain : 00000001 +[0C6h 0198 2] Reserved1 : 0000 +[0C8h 0200 8] Base Address : 0000000002000000 +[0D0h 0208 8] Address Length : 0000000002000000 +[0D8h 0216 4] Reserved2 : 00000000 +[0DCh 0220 4] Flags (decoded below) : 00000001 + Enabled : 1 + Hot Pluggable : 0 + Non-Volatile : 0 +[0E0h 0224 8] Reserved3 : 0000000000000000 + +[0E8h 0232 1] Subtable Type : 01 [Memory Affinity] +[0E9h 0233 1] Length : 28 + +[0EAh 0234 4] Proximity Domain : 00000002 +[0EEh 0238 2] Reserved1 : 0000 +[0F0h 0240 8] Base Address : 0000000004000000 +[0F8h 0248 8] Address Length : 0000000002000000 +[100h 0256 4] Reserved2 : 00000000 +[104h 0260 4] Flags (decoded below) : 00000001 + Enabled : 1 + Hot Pluggable : 0 + Non-Volatile : 0 +[108h 0264 8] Reserved3 : 0000000000000000 + +[110h 0272 1] Subtable Type : 01 [Memory Affinity] +[111h 0273 1] Length : 28 + +[112h 0274 4] Proximity Domain : 00000003 +[116h 0278 2] Reserved1 : 0000 +[118h 0280 8] Base Address : 0000000006000000 +[120h 0288 8] Address Length : 0000000002000000 +[128h 0296 4] Reserved2 : 00000000 +[12Ch 0300 4] Flags (decoded below) : 00000001 + Enabled : 1 + Hot Pluggable : 0 + Non-Volatile : 0 +[130h 0304 8] Reserved3 : 0000000000000000 + +[138h 0312 1] Subtable Type : 01 [Memory Affinity] +[139h 0313 1] Length : 28 + +[13Ah 0314 4] Proximity Domain : 00000002 +[13Eh 0318 2] Reserved1 : 0000 +[140h 0320 8] Base Address : 0000000108000000 +[148h 0328 8] Address Length : 0000000008000000 +[150h 0336 4] Reserved2 : 00000000 +[154h 0340 4] Flags (decoded below) : 00000005 + Enabled : 1 + Hot Pluggable : 0 + Non-Volatile : 1 +[158h 0344 8] Reserved3 : 0000000000000000 + +[160h 0352 1] Subtable Type : 01 [Memory Affinity] +[161h 0353 1] Length : 28 + +[162h 0354 4] Proximity Domain : 00000003 +[166h 0358 2] Reserved1 : 0000 +[168h 0360 8] Base Address : 0000000100000000 +[170h 0368 8] Address Length : 00000000F8000000 +[178h 0376 4] Reserved2 : 00000000 +[17Ch 0380 4] Flags (decoded below) : 00000003 + Enabled : 1 + Hot Pluggable : 1 + Non-Volatile : 0 +[180h 0384 8] Reserved3 : 0000000000000000 + +Raw Table Data: Length 392 (0x188) + + 0000: 53 52 41 54 88 01 00 00 01 68 42 4F 43 48 53 20 // SRAT.....hBOCHS + 0010: 42 58 50 43 53 52 41 54 01 00 00 00 42 58 50 43 // BXPCSRAT....BXPC + 0020: 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0030: 00 10 00 00 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0040: 00 10 01 01 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0050: 00 10 02 02 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0060: 00 10 03 03 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0070: 01 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // .(.............. + 0080: 00 00 0A 00 00 00 00 00 00 00 00 00 01 00 00 00 // ................ + 0090: 00 00 00 00 00 00 00 00 01 28 00 00 00 00 00 00 // .........(...... + 00A0: 00 00 10 00 00 00 00 00 00 00 F0 01 00 00 00 00 // ................ + 00B0: 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00C0: 01 28 01 00 00 00 00 00 00 00 00 02 00 00 00 00 // .(.............. + 00D0: 00 00 00 02 00 00 00 00 00 00 00 00 01 00 00 00 // ................ + 00E0: 00 00 00 00 00 00 00 00 01 28 02 00 00 00 00 00 // .........(...... + 00F0: 00 00 00 04 00 00 00 00 00 00 00 02 00 00 00 00 // ................ + 0100: 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0110: 01 28 03 00 00 00 00 00 00 00 00 06 00 00 00 00 // .(.............. + 0120: 00 00 00 02 00 00 00 00 00 00 00 00 01 00 00 00 // ................ + 0130: 00 00 00 00 00 00 00 00 01 28 02 00 00 00 00 00 // .........(...... + 0140: 00 00 00 08 01 00 00 00 00 00 00 08 00 00 00 00 // ................ + 0150: 00 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0160: 01 28 03 00 00 00 00 00 00 00 00 00 01 00 00 00 // .(.............. + 0170: 00 00 00 F8 00 00 00 00 00 00 00 00 03 00 00 00 // ................ + 0180: 00 00 00 00 00 00 00 00 // ........ diff --git a/tests/data/acpi/q35/SRAT.dsl b/tests/data/acpi/q35/SRAT.dsl new file mode 100644 index 0000000000..5f4278994e --- /dev/null +++ b/tests/data/acpi/q35/SRAT.dsl @@ -0,0 +1,108 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/SRAT.numamem, Mon Sep 28 17:24:38 2020 + * + * ACPI Data Table [SRAT] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "SRAT" [System Resource Affinity Table] +[004h 0004 4] Table Length : 000000E0 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : F5 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCSRAT" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Table Revision : 00000001 +[028h 0040 8] Reserved : 0000000000000000 + +[030h 0048 1] Subtable Type : 00 [Processor Local APIC/SAPIC Affinity] +[031h 0049 1] Length : 10 + +[032h 0050 1] Proximity Domain Low(8) : 00 +[033h 0051 1] Apic ID : 00 +[034h 0052 4] Flags (decoded below) : 00000001 + Enabled : 1 +[038h 0056 1] Local Sapic EID : 00 +[039h 0057 3] Proximity Domain High(24) : 000000 +[03Ch 0060 4] Clock Domain : 00000000 + +[040h 0064 1] Subtable Type : 01 [Memory Affinity] +[041h 0065 1] Length : 28 + +[042h 0066 4] Proximity Domain : 00000001 +[046h 0070 2] Reserved1 : 0000 +[048h 0072 8] Base Address : 0000000000000000 +[050h 0080 8] Address Length : 00000000000A0000 +[058h 0088 4] Reserved2 : 00000000 +[05Ch 0092 4] Flags (decoded below) : 00000001 + Enabled : 1 + Hot Pluggable : 0 + Non-Volatile : 0 +[060h 0096 8] Reserved3 : 0000000000000000 + +[068h 0104 1] Subtable Type : 01 [Memory Affinity] +[069h 0105 1] Length : 28 + +[06Ah 0106 4] Proximity Domain : 00000001 +[06Eh 0110 2] Reserved1 : 0000 +[070h 0112 8] Base Address : 0000000000100000 +[078h 0120 8] Address Length : 0000000007F00000 +[080h 0128 4] Reserved2 : 00000000 +[084h 0132 4] Flags (decoded below) : 00000001 + Enabled : 1 + Hot Pluggable : 0 + Non-Volatile : 0 +[088h 0136 8] Reserved3 : 0000000000000000 + +[090h 0144 1] Subtable Type : 01 [Memory Affinity] +[091h 0145 1] Length : 28 + +[092h 0146 4] Proximity Domain : 00000000 +[096h 0150 2] Reserved1 : 0000 +[098h 0152 8] Base Address : 0000000000000000 +[0A0h 0160 8] Address Length : 0000000000000000 +[0A8h 0168 4] Reserved2 : 00000000 +[0ACh 0172 4] Flags (decoded below) : 00000000 + Enabled : 0 + Hot Pluggable : 0 + Non-Volatile : 0 +[0B0h 0176 8] Reserved3 : 0000000000000000 + +[0B8h 0184 1] Subtable Type : 01 [Memory Affinity] +[0B9h 0185 1] Length : 28 + +[0BAh 0186 4] Proximity Domain : 00000000 +[0BEh 0190 2] Reserved1 : 0000 +[0C0h 0192 8] Base Address : 0000000000000000 +[0C8h 0200 8] Address Length : 0000000000000000 +[0D0h 0208 4] Reserved2 : 00000000 +[0D4h 0212 4] Flags (decoded below) : 00000000 + Enabled : 0 + Hot Pluggable : 0 + Non-Volatile : 0 +[0D8h 0216 8] Reserved3 : 0000000000000000 + +Raw Table Data: Length 224 (0xE0) + + 0000: 53 52 41 54 E0 00 00 00 01 F5 42 4F 43 48 53 20 // SRAT......BOCHS + 0010: 42 58 50 43 53 52 41 54 01 00 00 00 42 58 50 43 // BXPCSRAT....BXPC + 0020: 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0030: 00 10 00 00 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0040: 01 28 01 00 00 00 00 00 00 00 00 00 00 00 00 00 // .(.............. + 0050: 00 00 0A 00 00 00 00 00 00 00 00 00 01 00 00 00 // ................ + 0060: 00 00 00 00 00 00 00 00 01 28 01 00 00 00 00 00 // .........(...... + 0070: 00 00 10 00 00 00 00 00 00 00 F0 07 00 00 00 00 // ................ + 0080: 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0090: 01 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // .(.............. + 00A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00B0: 00 00 00 00 00 00 00 00 01 28 00 00 00 00 00 00 // .........(...... + 00C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ diff --git a/tests/data/acpi/q35/SRAT.memhp.dsl b/tests/data/acpi/q35/SRAT.memhp.dsl new file mode 100644 index 0000000000..a5f27214eb --- /dev/null +++ b/tests/data/acpi/q35/SRAT.memhp.dsl @@ -0,0 +1,125 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/SRAT.memhp, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [SRAT] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "SRAT" [System Resource Affinity Table] +[004h 0004 4] Table Length : 00000108 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : A2 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCSRAT" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Table Revision : 00000001 +[028h 0040 8] Reserved : 0000000000000000 + +[030h 0048 1] Subtable Type : 00 [Processor Local APIC/SAPIC Affinity] +[031h 0049 1] Length : 10 + +[032h 0050 1] Proximity Domain Low(8) : 00 +[033h 0051 1] Apic ID : 00 +[034h 0052 4] Flags (decoded below) : 00000001 + Enabled : 1 +[038h 0056 1] Local Sapic EID : 00 +[039h 0057 3] Proximity Domain High(24) : 000000 +[03Ch 0060 4] Clock Domain : 00000000 + +[040h 0064 1] Subtable Type : 01 [Memory Affinity] +[041h 0065 1] Length : 28 + +[042h 0066 4] Proximity Domain : 00000000 +[046h 0070 2] Reserved1 : 0000 +[048h 0072 8] Base Address : 0000000000000000 +[050h 0080 8] Address Length : 00000000000A0000 +[058h 0088 4] Reserved2 : 00000000 +[05Ch 0092 4] Flags (decoded below) : 00000001 + Enabled : 1 + Hot Pluggable : 0 + Non-Volatile : 0 +[060h 0096 8] Reserved3 : 0000000000000000 + +[068h 0104 1] Subtable Type : 01 [Memory Affinity] +[069h 0105 1] Length : 28 + +[06Ah 0106 4] Proximity Domain : 00000000 +[06Eh 0110 2] Reserved1 : 0000 +[070h 0112 8] Base Address : 0000000000100000 +[078h 0120 8] Address Length : 0000000003F00000 +[080h 0128 4] Reserved2 : 00000000 +[084h 0132 4] Flags (decoded below) : 00000001 + Enabled : 1 + Hot Pluggable : 0 + Non-Volatile : 0 +[088h 0136 8] Reserved3 : 0000000000000000 + +[090h 0144 1] Subtable Type : 01 [Memory Affinity] +[091h 0145 1] Length : 28 + +[092h 0146 4] Proximity Domain : 00000001 +[096h 0150 2] Reserved1 : 0000 +[098h 0152 8] Base Address : 0000000004000000 +[0A0h 0160 8] Address Length : 0000000004000000 +[0A8h 0168 4] Reserved2 : 00000000 +[0ACh 0172 4] Flags (decoded below) : 00000001 + Enabled : 1 + Hot Pluggable : 0 + Non-Volatile : 0 +[0B0h 0176 8] Reserved3 : 0000000000000000 + +[0B8h 0184 1] Subtable Type : 01 [Memory Affinity] +[0B9h 0185 1] Length : 28 + +[0BAh 0186 4] Proximity Domain : 00000000 +[0BEh 0190 2] Reserved1 : 0000 +[0C0h 0192 8] Base Address : 0000000000000000 +[0C8h 0200 8] Address Length : 0000000000000000 +[0D0h 0208 4] Reserved2 : 00000000 +[0D4h 0212 4] Flags (decoded below) : 00000000 + Enabled : 0 + Hot Pluggable : 0 + Non-Volatile : 0 +[0D8h 0216 8] Reserved3 : 0000000000000000 + +[0E0h 0224 1] Subtable Type : 01 [Memory Affinity] +[0E1h 0225 1] Length : 28 + +[0E2h 0226 4] Proximity Domain : 00000001 +[0E6h 0230 2] Reserved1 : 0000 +[0E8h 0232 8] Base Address : 0000000100000000 +[0F0h 0240 8] Address Length : 00000000F8000000 +[0F8h 0248 4] Reserved2 : 00000000 +[0FCh 0252 4] Flags (decoded below) : 00000003 + Enabled : 1 + Hot Pluggable : 1 + Non-Volatile : 0 +[100h 0256 8] Reserved3 : 0000000000000000 + +Raw Table Data: Length 264 (0x108) + + 0000: 53 52 41 54 08 01 00 00 01 A2 42 4F 43 48 53 20 // SRAT......BOCHS + 0010: 42 58 50 43 53 52 41 54 01 00 00 00 42 58 50 43 // BXPCSRAT....BXPC + 0020: 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0030: 00 10 00 00 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0040: 01 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // .(.............. + 0050: 00 00 0A 00 00 00 00 00 00 00 00 00 01 00 00 00 // ................ + 0060: 00 00 00 00 00 00 00 00 01 28 00 00 00 00 00 00 // .........(...... + 0070: 00 00 10 00 00 00 00 00 00 00 F0 03 00 00 00 00 // ................ + 0080: 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0090: 01 28 01 00 00 00 00 00 00 00 00 04 00 00 00 00 // .(.............. + 00A0: 00 00 00 04 00 00 00 00 00 00 00 00 01 00 00 00 // ................ + 00B0: 00 00 00 00 00 00 00 00 01 28 00 00 00 00 00 00 // .........(...... + 00C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00E0: 01 28 01 00 00 00 00 00 00 00 00 00 01 00 00 00 // .(.............. + 00F0: 00 00 00 F8 00 00 00 00 00 00 00 00 03 00 00 00 // ................ + 0100: 00 00 00 00 00 00 00 00 // ........ diff --git a/tests/data/acpi/q35/SRAT.mmio64.dsl b/tests/data/acpi/q35/SRAT.mmio64.dsl new file mode 100644 index 0000000000..0065c21de4 --- /dev/null +++ b/tests/data/acpi/q35/SRAT.mmio64.dsl @@ -0,0 +1,108 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/SRAT.mmio64, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [SRAT] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "SRAT" [System Resource Affinity Table] +[004h 0004 4] Table Length : 000000E0 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 3B +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCSRAT" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Table Revision : 00000001 +[028h 0040 8] Reserved : 0000000000000000 + +[030h 0048 1] Subtable Type : 00 [Processor Local APIC/SAPIC Affinity] +[031h 0049 1] Length : 10 + +[032h 0050 1] Proximity Domain Low(8) : 00 +[033h 0051 1] Apic ID : 00 +[034h 0052 4] Flags (decoded below) : 00000001 + Enabled : 1 +[038h 0056 1] Local Sapic EID : 00 +[039h 0057 3] Proximity Domain High(24) : 000000 +[03Ch 0060 4] Clock Domain : 00000000 + +[040h 0064 1] Subtable Type : 01 [Memory Affinity] +[041h 0065 1] Length : 28 + +[042h 0066 4] Proximity Domain : 00000000 +[046h 0070 2] Reserved1 : 0000 +[048h 0072 8] Base Address : 0000000000000000 +[050h 0080 8] Address Length : 00000000000A0000 +[058h 0088 4] Reserved2 : 00000000 +[05Ch 0092 4] Flags (decoded below) : 00000001 + Enabled : 1 + Hot Pluggable : 0 + Non-Volatile : 0 +[060h 0096 8] Reserved3 : 0000000000000000 + +[068h 0104 1] Subtable Type : 01 [Memory Affinity] +[069h 0105 1] Length : 28 + +[06Ah 0106 4] Proximity Domain : 00000000 +[06Eh 0110 2] Reserved1 : 0000 +[070h 0112 8] Base Address : 0000000000100000 +[078h 0120 8] Address Length : 0000000007F00000 +[080h 0128 4] Reserved2 : 00000000 +[084h 0132 4] Flags (decoded below) : 00000001 + Enabled : 1 + Hot Pluggable : 0 + Non-Volatile : 0 +[088h 0136 8] Reserved3 : 0000000000000000 + +[090h 0144 1] Subtable Type : 01 [Memory Affinity] +[091h 0145 1] Length : 28 + +[092h 0146 4] Proximity Domain : 00000000 +[096h 0150 2] Reserved1 : 0000 +[098h 0152 8] Base Address : 0000000000000000 +[0A0h 0160 8] Address Length : 0000000000000000 +[0A8h 0168 4] Reserved2 : 00000000 +[0ACh 0172 4] Flags (decoded below) : 00000000 + Enabled : 0 + Hot Pluggable : 0 + Non-Volatile : 0 +[0B0h 0176 8] Reserved3 : 0000000000000000 + +[0B8h 0184 1] Subtable Type : 01 [Memory Affinity] +[0B9h 0185 1] Length : 28 + +[0BAh 0186 4] Proximity Domain : 00000000 +[0BEh 0190 2] Reserved1 : 0000 +[0C0h 0192 8] Base Address : 0000000100000000 +[0C8h 0200 8] Address Length : 00000000B8000000 +[0D0h 0208 4] Reserved2 : 00000000 +[0D4h 0212 4] Flags (decoded below) : 00000003 + Enabled : 1 + Hot Pluggable : 1 + Non-Volatile : 0 +[0D8h 0216 8] Reserved3 : 0000000000000000 + +Raw Table Data: Length 224 (0xE0) + + 0000: 53 52 41 54 E0 00 00 00 01 3B 42 4F 43 48 53 20 // SRAT.....;BOCHS + 0010: 42 58 50 43 53 52 41 54 01 00 00 00 42 58 50 43 // BXPCSRAT....BXPC + 0020: 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0030: 00 10 00 00 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0040: 01 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // .(.............. + 0050: 00 00 0A 00 00 00 00 00 00 00 00 00 01 00 00 00 // ................ + 0060: 00 00 00 00 00 00 00 00 01 28 00 00 00 00 00 00 // .........(...... + 0070: 00 00 10 00 00 00 00 00 00 00 F0 07 00 00 00 00 // ................ + 0080: 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0090: 01 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // .(.............. + 00A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00B0: 00 00 00 00 00 00 00 00 01 28 00 00 00 00 00 00 // .........(...... + 00C0: 00 00 00 00 01 00 00 00 00 00 00 B8 00 00 00 00 // ................ + 00D0: 00 00 00 00 03 00 00 00 00 00 00 00 00 00 00 00 // ................ diff --git a/tests/data/acpi/q35/SRAT.numamem.dsl b/tests/data/acpi/q35/SRAT.numamem.dsl new file mode 100644 index 0000000000..e8de953ae2 --- /dev/null +++ b/tests/data/acpi/q35/SRAT.numamem.dsl @@ -0,0 +1,108 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/SRAT.numamem, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [SRAT] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "SRAT" [System Resource Affinity Table] +[004h 0004 4] Table Length : 000000E0 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : F5 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCSRAT" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Table Revision : 00000001 +[028h 0040 8] Reserved : 0000000000000000 + +[030h 0048 1] Subtable Type : 00 [Processor Local APIC/SAPIC Affinity] +[031h 0049 1] Length : 10 + +[032h 0050 1] Proximity Domain Low(8) : 00 +[033h 0051 1] Apic ID : 00 +[034h 0052 4] Flags (decoded below) : 00000001 + Enabled : 1 +[038h 0056 1] Local Sapic EID : 00 +[039h 0057 3] Proximity Domain High(24) : 000000 +[03Ch 0060 4] Clock Domain : 00000000 + +[040h 0064 1] Subtable Type : 01 [Memory Affinity] +[041h 0065 1] Length : 28 + +[042h 0066 4] Proximity Domain : 00000001 +[046h 0070 2] Reserved1 : 0000 +[048h 0072 8] Base Address : 0000000000000000 +[050h 0080 8] Address Length : 00000000000A0000 +[058h 0088 4] Reserved2 : 00000000 +[05Ch 0092 4] Flags (decoded below) : 00000001 + Enabled : 1 + Hot Pluggable : 0 + Non-Volatile : 0 +[060h 0096 8] Reserved3 : 0000000000000000 + +[068h 0104 1] Subtable Type : 01 [Memory Affinity] +[069h 0105 1] Length : 28 + +[06Ah 0106 4] Proximity Domain : 00000001 +[06Eh 0110 2] Reserved1 : 0000 +[070h 0112 8] Base Address : 0000000000100000 +[078h 0120 8] Address Length : 0000000007F00000 +[080h 0128 4] Reserved2 : 00000000 +[084h 0132 4] Flags (decoded below) : 00000001 + Enabled : 1 + Hot Pluggable : 0 + Non-Volatile : 0 +[088h 0136 8] Reserved3 : 0000000000000000 + +[090h 0144 1] Subtable Type : 01 [Memory Affinity] +[091h 0145 1] Length : 28 + +[092h 0146 4] Proximity Domain : 00000000 +[096h 0150 2] Reserved1 : 0000 +[098h 0152 8] Base Address : 0000000000000000 +[0A0h 0160 8] Address Length : 0000000000000000 +[0A8h 0168 4] Reserved2 : 00000000 +[0ACh 0172 4] Flags (decoded below) : 00000000 + Enabled : 0 + Hot Pluggable : 0 + Non-Volatile : 0 +[0B0h 0176 8] Reserved3 : 0000000000000000 + +[0B8h 0184 1] Subtable Type : 01 [Memory Affinity] +[0B9h 0185 1] Length : 28 + +[0BAh 0186 4] Proximity Domain : 00000000 +[0BEh 0190 2] Reserved1 : 0000 +[0C0h 0192 8] Base Address : 0000000000000000 +[0C8h 0200 8] Address Length : 0000000000000000 +[0D0h 0208 4] Reserved2 : 00000000 +[0D4h 0212 4] Flags (decoded below) : 00000000 + Enabled : 0 + Hot Pluggable : 0 + Non-Volatile : 0 +[0D8h 0216 8] Reserved3 : 0000000000000000 + +Raw Table Data: Length 224 (0xE0) + + 0000: 53 52 41 54 E0 00 00 00 01 F5 42 4F 43 48 53 20 // SRAT......BOCHS + 0010: 42 58 50 43 53 52 41 54 01 00 00 00 42 58 50 43 // BXPCSRAT....BXPC + 0020: 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0030: 00 10 00 00 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0040: 01 28 01 00 00 00 00 00 00 00 00 00 00 00 00 00 // .(.............. + 0050: 00 00 0A 00 00 00 00 00 00 00 00 00 01 00 00 00 // ................ + 0060: 00 00 00 00 00 00 00 00 01 28 01 00 00 00 00 00 // .........(...... + 0070: 00 00 10 00 00 00 00 00 00 00 F0 07 00 00 00 00 // ................ + 0080: 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0090: 01 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // .(.............. + 00A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00B0: 00 00 00 00 00 00 00 00 01 28 00 00 00 00 00 00 // .........(...... + 00C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ diff --git a/tests/data/acpi/q35/SSDT.dsl b/tests/data/acpi/q35/SSDT.dsl new file mode 100644 index 0000000000..49df22f93d --- /dev/null +++ b/tests/data/acpi/q35/SSDT.dsl @@ -0,0 +1,205 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembling to symbolic ASL+ operators + * + * Disassembly of tests/data/acpi/q35/SSDT.dimmpxm, Mon Sep 28 17:24:38 2020 + * + * Original Table Header: + * Signature "SSDT" + * Length 0x000002DE (734) + * Revision 0x01 + * Checksum 0x46 + * OEM ID "BOCHS " + * OEM Table ID "NVDIMM" + * OEM Revision 0x00000001 (1) + * Compiler ID "BXPC" + * Compiler Version 0x00000001 (1) + */ +DefinitionBlock ("", "SSDT", 1, "BOCHS ", "NVDIMM", 0x00000001) +{ + Scope (\_SB) + { + Device (NVDR) + { + Name (_HID, "ACPI0012" /* NVDIMM Root Device */) // _HID: Hardware ID + Method (NCAL, 5, Serialized) + { + Local6 = MEMA /* \MEMA */ + OperationRegion (NPIO, SystemIO, 0x0A18, 0x04) + OperationRegion (NRAM, SystemMemory, Local6, 0x1000) + Field (NPIO, DWordAcc, NoLock, Preserve) + { + NTFI, 32 + } + + Field (NRAM, DWordAcc, NoLock, Preserve) + { + HDLE, 32, + REVS, 32, + FUNC, 32, + FARG, 32672 + } + + Field (NRAM, DWordAcc, NoLock, Preserve) + { + RLEN, 32, + ODAT, 32736 + } + + If ((Arg4 == Zero)) + { + Local0 = ToUUID ("2f10e7a4-9e91-11e4-89d3-123b93f75cba") + } + ElseIf ((Arg4 == 0x00010000)) + { + Local0 = ToUUID ("648b9cf2-cda1-4312-8ad9-49c4af32bd62") + } + Else + { + Local0 = ToUUID ("4309ac30-0d11-11e4-9191-0800200c9a66") + } + + If (((Local6 == Zero) | (Arg0 != Local0))) + { + If ((Arg2 == Zero)) + { + Return (Buffer (One) + { + 0x00 // . + }) + } + + Return (Buffer (One) + { + 0x01 // . + }) + } + + HDLE = Arg4 + REVS = Arg1 + FUNC = Arg2 + If (((ObjectType (Arg3) == 0x04) & (SizeOf (Arg3) == One))) + { + Local2 = Arg3 [Zero] + Local3 = DerefOf (Local2) + FARG = Local3 + } + + NTFI = Local6 + Local1 = (RLEN - 0x04) + If ((Local1 < 0x08)) + { + Local2 = Zero + Name (TBUF, Buffer (One) + { + 0x00 // . + }) + Local7 = Buffer (Zero){} + While ((Local2 < Local1)) + { + TBUF [Zero] = DerefOf (ODAT [Local2]) + Concatenate (Local7, TBUF, Local7) + Local2++ + } + + Return (Local7) + } + + Local1 = (Local1 << 0x03) + CreateField (ODAT, Zero, Local1, OBUF) + Return (OBUF) /* \_SB_.NVDR.NCAL.OBUF */ + } + + Method (_DSM, 4, NotSerialized) // _DSM: Device-Specific Method + { + Return (NCAL (Arg0, Arg1, Arg2, Arg3, Zero)) + } + + Name (RSTA, Zero) + Method (RFIT, 1, Serialized) + { + Name (OFST, Zero) + OFST = Arg0 + Local0 = NCAL (ToUUID ("648b9cf2-cda1-4312-8ad9-49c4af32bd62"), One, One, Package (0x01) + { + OFST + }, 0x00010000) + CreateDWordField (Local0, Zero, STAU) + RSTA = STAU /* \_SB_.NVDR.RFIT.STAU */ + If ((Zero != STAU)) + { + Return (Buffer (Zero){}) + } + + Local1 = SizeOf (Local0) + Local1 -= 0x04 + If ((Local1 == Zero)) + { + Return (Buffer (Zero){}) + } + + CreateField (Local0, 0x20, (Local1 << 0x03), BUFF) + Return (BUFF) /* \_SB_.NVDR.RFIT.BUFF */ + } + + Method (_FIT, 0, Serialized) // _FIT: Firmware Interface Table + { + Local2 = Buffer (Zero){} + Local3 = Zero + While (One) + { + Local0 = RFIT (Local3) + Local1 = SizeOf (Local0) + If ((RSTA == 0x0100)) + { + Local2 = Buffer (Zero){} + Local3 = Zero + } + Else + { + If ((Local1 == Zero)) + { + Return (Local2) + } + + Local3 += Local1 + Concatenate (Local2, Local0, Local2) + } + } + } + + Device (NV00) + { + Name (_ADR, One) // _ADR: Address + Method (_DSM, 4, NotSerialized) // _DSM: Device-Specific Method + { + Return (NCAL (Arg0, Arg1, Arg2, Arg3, One)) + } + } + + Device (NV01) + { + Name (_ADR, 0x02) // _ADR: Address + Method (_DSM, 4, NotSerialized) // _DSM: Device-Specific Method + { + Return (NCAL (Arg0, Arg1, Arg2, Arg3, 0x02)) + } + } + + Device (NV02) + { + Name (_ADR, 0x03) // _ADR: Address + Method (_DSM, 4, NotSerialized) // _DSM: Device-Specific Method + { + Return (NCAL (Arg0, Arg1, Arg2, Arg3, 0x03)) + } + } + } + } + + Name (MEMA, 0x07FFF000) +} + diff --git a/tests/data/acpi/q35/TPM2.dsl b/tests/data/acpi/q35/TPM2.dsl new file mode 100644 index 0000000000..8568152ccf --- /dev/null +++ b/tests/data/acpi/q35/TPM2.dsl @@ -0,0 +1,38 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/TPM2.tis, Mon Sep 28 17:24:38 2020 + * + * ACPI Data Table [TPM2] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "TPM2" [Trusted Platform Module hardware interface table] +[004h 0004 4] Table Length : 0000004C +[008h 0008 1] Revision : 04 +[009h 0009 1] Checksum : 72 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCTPM2" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 2] Platform Class : 0000 +[026h 0038 2] Reserved : 0000 +[028h 0040 8] Control Address : 0000000000000000 +[030h 0048 4] Start Method : 06 [Memory Mapped I/O] + +[034h 0052 12] Method Parameters : 00 00 00 00 00 00 00 00 00 00 00 00 +[040h 0064 4] Minimum Log Length : 00010000 +[044h 0068 8] Log Address : 0000000007FF0000 + +Raw Table Data: Length 76 (0x4C) + + 0000: 54 50 4D 32 4C 00 00 00 04 72 42 4F 43 48 53 20 // TPM2L....rBOCHS + 0010: 42 58 50 43 54 50 4D 32 01 00 00 00 42 58 50 43 // BXPCTPM2....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0030: 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0040: 00 00 01 00 00 00 FF 07 00 00 00 00 // ............ diff --git a/tests/data/acpi/q35/TPM2.tis.dsl b/tests/data/acpi/q35/TPM2.tis.dsl new file mode 100644 index 0000000000..420643ab2b --- /dev/null +++ b/tests/data/acpi/q35/TPM2.tis.dsl @@ -0,0 +1,38 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/TPM2.tis, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [TPM2] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "TPM2" [Trusted Platform Module hardware interface table] +[004h 0004 4] Table Length : 0000004C +[008h 0008 1] Revision : 04 +[009h 0009 1] Checksum : 72 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCTPM2" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 2] Platform Class : 0000 +[026h 0038 2] Reserved : 0000 +[028h 0040 8] Control Address : 0000000000000000 +[030h 0048 4] Start Method : 06 [Memory Mapped I/O] + +[034h 0052 12] Method Parameters : 00 00 00 00 00 00 00 00 00 00 00 00 +[040h 0064 4] Minimum Log Length : 00010000 +[044h 0068 8] Log Address : 0000000007FF0000 + +Raw Table Data: Length 76 (0x4C) + + 0000: 54 50 4D 32 4C 00 00 00 04 72 42 4F 43 48 53 20 // TPM2L....rBOCHS + 0010: 42 58 50 43 54 50 4D 32 01 00 00 00 42 58 50 43 // BXPCTPM2....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0030: 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0040: 00 00 01 00 00 00 FF 07 00 00 00 00 // ............ diff --git a/tests/data/acpi/q35/WAET.acpihmat b/tests/data/acpi/q35/WAET.acpihmat new file mode 100644 index 0000000000000000000000000000000000000000..c2240f58dff6b2f765386b5a2e506fda4800be3e GIT binary patch literal 40 qcmWG{bPds9U|?YEaPoKd2v%^42yhN}bPZu-U|;~TK{OKs0|Nl8X$JuS literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/WAET.acpihmat.dsl b/tests/data/acpi/q35/WAET.acpihmat.dsl new file mode 100644 index 0000000000..12a4fced5c --- /dev/null +++ b/tests/data/acpi/q35/WAET.acpihmat.dsl @@ -0,0 +1,31 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/WAET.acpihmat, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [WAET] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "WAET" [Windows ACPI Emulated Devices Table] +[004h 0004 4] Table Length : 00000028 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 88 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCWAET" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Flags (decoded below) : 00000002 + RTC needs no INT ack : 0 + PM timer, one read only : 1 + +Raw Table Data: Length 40 (0x28) + + 0000: 57 41 45 54 28 00 00 00 01 88 42 4F 43 48 53 20 // WAET(.....BOCHS + 0010: 42 58 50 43 57 41 45 54 01 00 00 00 42 58 50 43 // BXPCWAET....BXPC + 0020: 01 00 00 00 02 00 00 00 // ........ diff --git a/tests/data/acpi/q35/WAET.bridge b/tests/data/acpi/q35/WAET.bridge new file mode 100644 index 0000000000000000000000000000000000000000..c2240f58dff6b2f765386b5a2e506fda4800be3e GIT binary patch literal 40 qcmWG{bPds9U|?YEaPoKd2v%^42yhN}bPZu-U|;~TK{OKs0|Nl8X$JuS literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/WAET.bridge.dsl b/tests/data/acpi/q35/WAET.bridge.dsl new file mode 100644 index 0000000000..48effe4c6e --- /dev/null +++ b/tests/data/acpi/q35/WAET.bridge.dsl @@ -0,0 +1,31 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/WAET.bridge, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [WAET] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "WAET" [Windows ACPI Emulated Devices Table] +[004h 0004 4] Table Length : 00000028 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 88 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCWAET" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Flags (decoded below) : 00000002 + RTC needs no INT ack : 0 + PM timer, one read only : 1 + +Raw Table Data: Length 40 (0x28) + + 0000: 57 41 45 54 28 00 00 00 01 88 42 4F 43 48 53 20 // WAET(.....BOCHS + 0010: 42 58 50 43 57 41 45 54 01 00 00 00 42 58 50 43 // BXPCWAET....BXPC + 0020: 01 00 00 00 02 00 00 00 // ........ diff --git a/tests/data/acpi/q35/WAET.cphp b/tests/data/acpi/q35/WAET.cphp new file mode 100644 index 0000000000000000000000000000000000000000..c2240f58dff6b2f765386b5a2e506fda4800be3e GIT binary patch literal 40 qcmWG{bPds9U|?YEaPoKd2v%^42yhN}bPZu-U|;~TK{OKs0|Nl8X$JuS literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/WAET.cphp.dsl b/tests/data/acpi/q35/WAET.cphp.dsl new file mode 100644 index 0000000000..aadebd53e8 --- /dev/null +++ b/tests/data/acpi/q35/WAET.cphp.dsl @@ -0,0 +1,31 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/WAET.cphp, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [WAET] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "WAET" [Windows ACPI Emulated Devices Table] +[004h 0004 4] Table Length : 00000028 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 88 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCWAET" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Flags (decoded below) : 00000002 + RTC needs no INT ack : 0 + PM timer, one read only : 1 + +Raw Table Data: Length 40 (0x28) + + 0000: 57 41 45 54 28 00 00 00 01 88 42 4F 43 48 53 20 // WAET(.....BOCHS + 0010: 42 58 50 43 57 41 45 54 01 00 00 00 42 58 50 43 // BXPCWAET....BXPC + 0020: 01 00 00 00 02 00 00 00 // ........ diff --git a/tests/data/acpi/q35/WAET.dimmpxm b/tests/data/acpi/q35/WAET.dimmpxm new file mode 100644 index 0000000000000000000000000000000000000000..c2240f58dff6b2f765386b5a2e506fda4800be3e GIT binary patch literal 40 qcmWG{bPds9U|?YEaPoKd2v%^42yhN}bPZu-U|;~TK{OKs0|Nl8X$JuS literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/WAET.dimmpxm.dsl b/tests/data/acpi/q35/WAET.dimmpxm.dsl new file mode 100644 index 0000000000..7ad316b118 --- /dev/null +++ b/tests/data/acpi/q35/WAET.dimmpxm.dsl @@ -0,0 +1,31 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/WAET.dimmpxm, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [WAET] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "WAET" [Windows ACPI Emulated Devices Table] +[004h 0004 4] Table Length : 00000028 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 88 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCWAET" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Flags (decoded below) : 00000002 + RTC needs no INT ack : 0 + PM timer, one read only : 1 + +Raw Table Data: Length 40 (0x28) + + 0000: 57 41 45 54 28 00 00 00 01 88 42 4F 43 48 53 20 // WAET(.....BOCHS + 0010: 42 58 50 43 57 41 45 54 01 00 00 00 42 58 50 43 // BXPCWAET....BXPC + 0020: 01 00 00 00 02 00 00 00 // ........ diff --git a/tests/data/acpi/q35/WAET.dsl b/tests/data/acpi/q35/WAET.dsl new file mode 100644 index 0000000000..b48db4efca --- /dev/null +++ b/tests/data/acpi/q35/WAET.dsl @@ -0,0 +1,31 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/WAET.tis, Mon Sep 28 17:24:38 2020 + * + * ACPI Data Table [WAET] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "WAET" [Windows ACPI Emulated Devices Table] +[004h 0004 4] Table Length : 00000028 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 88 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCWAET" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Flags (decoded below) : 00000002 + RTC needs no INT ack : 0 + PM timer, one read only : 1 + +Raw Table Data: Length 40 (0x28) + + 0000: 57 41 45 54 28 00 00 00 01 88 42 4F 43 48 53 20 // WAET(.....BOCHS + 0010: 42 58 50 43 57 41 45 54 01 00 00 00 42 58 50 43 // BXPCWAET....BXPC + 0020: 01 00 00 00 02 00 00 00 // ........ diff --git a/tests/data/acpi/q35/WAET.ipmibt b/tests/data/acpi/q35/WAET.ipmibt new file mode 100644 index 0000000000000000000000000000000000000000..c2240f58dff6b2f765386b5a2e506fda4800be3e GIT binary patch literal 40 qcmWG{bPds9U|?YEaPoKd2v%^42yhN}bPZu-U|;~TK{OKs0|Nl8X$JuS literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/WAET.ipmibt.dsl b/tests/data/acpi/q35/WAET.ipmibt.dsl new file mode 100644 index 0000000000..40cb1d5649 --- /dev/null +++ b/tests/data/acpi/q35/WAET.ipmibt.dsl @@ -0,0 +1,31 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/WAET.ipmibt, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [WAET] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "WAET" [Windows ACPI Emulated Devices Table] +[004h 0004 4] Table Length : 00000028 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 88 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCWAET" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Flags (decoded below) : 00000002 + RTC needs no INT ack : 0 + PM timer, one read only : 1 + +Raw Table Data: Length 40 (0x28) + + 0000: 57 41 45 54 28 00 00 00 01 88 42 4F 43 48 53 20 // WAET(.....BOCHS + 0010: 42 58 50 43 57 41 45 54 01 00 00 00 42 58 50 43 // BXPCWAET....BXPC + 0020: 01 00 00 00 02 00 00 00 // ........ diff --git a/tests/data/acpi/q35/WAET.memhp b/tests/data/acpi/q35/WAET.memhp new file mode 100644 index 0000000000000000000000000000000000000000..c2240f58dff6b2f765386b5a2e506fda4800be3e GIT binary patch literal 40 qcmWG{bPds9U|?YEaPoKd2v%^42yhN}bPZu-U|;~TK{OKs0|Nl8X$JuS literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/WAET.memhp.dsl b/tests/data/acpi/q35/WAET.memhp.dsl new file mode 100644 index 0000000000..e27f54d4dd --- /dev/null +++ b/tests/data/acpi/q35/WAET.memhp.dsl @@ -0,0 +1,31 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/WAET.memhp, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [WAET] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "WAET" [Windows ACPI Emulated Devices Table] +[004h 0004 4] Table Length : 00000028 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 88 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCWAET" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Flags (decoded below) : 00000002 + RTC needs no INT ack : 0 + PM timer, one read only : 1 + +Raw Table Data: Length 40 (0x28) + + 0000: 57 41 45 54 28 00 00 00 01 88 42 4F 43 48 53 20 // WAET(.....BOCHS + 0010: 42 58 50 43 57 41 45 54 01 00 00 00 42 58 50 43 // BXPCWAET....BXPC + 0020: 01 00 00 00 02 00 00 00 // ........ diff --git a/tests/data/acpi/q35/WAET.mmio64 b/tests/data/acpi/q35/WAET.mmio64 new file mode 100644 index 0000000000000000000000000000000000000000..c2240f58dff6b2f765386b5a2e506fda4800be3e GIT binary patch literal 40 qcmWG{bPds9U|?YEaPoKd2v%^42yhN}bPZu-U|;~TK{OKs0|Nl8X$JuS literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/WAET.mmio64.dsl b/tests/data/acpi/q35/WAET.mmio64.dsl new file mode 100644 index 0000000000..98f3aaf569 --- /dev/null +++ b/tests/data/acpi/q35/WAET.mmio64.dsl @@ -0,0 +1,31 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/WAET.mmio64, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [WAET] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "WAET" [Windows ACPI Emulated Devices Table] +[004h 0004 4] Table Length : 00000028 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 88 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCWAET" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Flags (decoded below) : 00000002 + RTC needs no INT ack : 0 + PM timer, one read only : 1 + +Raw Table Data: Length 40 (0x28) + + 0000: 57 41 45 54 28 00 00 00 01 88 42 4F 43 48 53 20 // WAET(.....BOCHS + 0010: 42 58 50 43 57 41 45 54 01 00 00 00 42 58 50 43 // BXPCWAET....BXPC + 0020: 01 00 00 00 02 00 00 00 // ........ diff --git a/tests/data/acpi/q35/WAET.numamem b/tests/data/acpi/q35/WAET.numamem new file mode 100644 index 0000000000000000000000000000000000000000..c2240f58dff6b2f765386b5a2e506fda4800be3e GIT binary patch literal 40 qcmWG{bPds9U|?YEaPoKd2v%^42yhN}bPZu-U|;~TK{OKs0|Nl8X$JuS literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/WAET.numamem.dsl b/tests/data/acpi/q35/WAET.numamem.dsl new file mode 100644 index 0000000000..738c75ca6c --- /dev/null +++ b/tests/data/acpi/q35/WAET.numamem.dsl @@ -0,0 +1,31 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/WAET.numamem, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [WAET] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "WAET" [Windows ACPI Emulated Devices Table] +[004h 0004 4] Table Length : 00000028 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 88 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCWAET" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Flags (decoded below) : 00000002 + RTC needs no INT ack : 0 + PM timer, one read only : 1 + +Raw Table Data: Length 40 (0x28) + + 0000: 57 41 45 54 28 00 00 00 01 88 42 4F 43 48 53 20 // WAET(.....BOCHS + 0010: 42 58 50 43 57 41 45 54 01 00 00 00 42 58 50 43 // BXPCWAET....BXPC + 0020: 01 00 00 00 02 00 00 00 // ........ diff --git a/tests/data/acpi/q35/WAET.tis b/tests/data/acpi/q35/WAET.tis new file mode 100644 index 0000000000000000000000000000000000000000..c2240f58dff6b2f765386b5a2e506fda4800be3e GIT binary patch literal 40 qcmWG{bPds9U|?YEaPoKd2v%^42yhN}bPZu-U|;~TK{OKs0|Nl8X$JuS literal 0 HcmV?d00001 diff --git a/tests/data/acpi/q35/WAET.tis.dsl b/tests/data/acpi/q35/WAET.tis.dsl new file mode 100644 index 0000000000..869ebe2b4a --- /dev/null +++ b/tests/data/acpi/q35/WAET.tis.dsl @@ -0,0 +1,31 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/q35/WAET.tis, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [WAET] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "WAET" [Windows ACPI Emulated Devices Table] +[004h 0004 4] Table Length : 00000028 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 88 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCWAET" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Flags (decoded below) : 00000002 + RTC needs no INT ack : 0 + PM timer, one read only : 1 + +Raw Table Data: Length 40 (0x28) + + 0000: 57 41 45 54 28 00 00 00 01 88 42 4F 43 48 53 20 // WAET(.....BOCHS + 0010: 42 58 50 43 57 41 45 54 01 00 00 00 42 58 50 43 // BXPCWAET....BXPC + 0020: 01 00 00 00 02 00 00 00 // ........ diff --git a/tests/data/acpi/virt/APIC.dsl b/tests/data/acpi/virt/APIC.dsl new file mode 100644 index 0000000000..d334cef533 --- /dev/null +++ b/tests/data/acpi/virt/APIC.dsl @@ -0,0 +1,78 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/virt/APIC.numamem, Mon Sep 28 17:24:38 2020 + * + * ACPI Data Table [APIC] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "APIC" [Multiple APIC Description Table (MADT)] +[004h 0004 4] Table Length : 000000A8 +[008h 0008 1] Revision : 03 +[009h 0009 1] Checksum : B3 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCAPIC" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Local Apic Address : 00000000 +[028h 0040 4] Flags (decoded below) : 00000000 + PC-AT Compatibility : 0 + +[02Ch 0044 1] Subtable Type : 0C [Generic Interrupt Distributor] +[02Dh 0045 1] Length : 18 +[02Eh 0046 2] Reserved : 0000 +[030h 0048 4] Local GIC Hardware ID : 00000000 +[034h 0052 8] Base Address : 0000000008000000 +[03Ch 0060 4] Interrupt Base : 00000000 +[040h 0064 1] Version : 02 +[041h 0065 3] Reserved : 000000 + +[044h 0068 1] Subtable Type : 0B [Generic Interrupt Controller] +[045h 0069 1] Length : 4C +[046h 0070 2] Reserved : 0000 +[048h 0072 4] CPU Interface Number : 00000000 +[04Ch 0076 4] Processor UID : 00000000 +[050h 0080 4] Flags (decoded below) : 00000001 + Processor Enabled : 1 + Performance Interrupt Trigger Mode : 0 + Virtual GIC Interrupt Trigger Mode : 0 +[054h 0084 4] Parking Protocol Version : 00000000 +[058h 0088 4] Performance Interrupt : 00000017 +[05Ch 0092 8] Parked Address : 0000000000000000 +[064h 0100 8] Base Address : 0000000008010000 +[06Ch 0108 8] Virtual GIC Base Address : 0000000008040000 +[074h 0116 8] Hypervisor GIC Base Address : 0000000008030000 +[07Ch 0124 4] Virtual GIC Interrupt : 00000000 +[080h 0128 8] Redistributor Base Address : 0000000000000000 +[088h 0136 8] ARM MPIDR : 0000000000000000 +/**** ACPI subtable terminates early - may be older version (dump table) */ + +[090h 0144 1] Subtable Type : 0D [Generic MSI Frame] +[091h 0145 1] Length : 18 +[092h 0146 2] Reserved : 0000 +[094h 0148 4] MSI Frame ID : 00000000 +[098h 0152 8] Base Address : 0000000008020000 +[0A0h 0160 4] Flags (decoded below) : 00000001 + Select SPI : 1 +[0A4h 0164 2] SPI Count : 0040 +[0A6h 0166 2] SPI Base : 0050 + +Raw Table Data: Length 168 (0xA8) + + 0000: 41 50 49 43 A8 00 00 00 03 B3 42 4F 43 48 53 20 // APIC......BOCHS + 0010: 42 58 50 43 41 50 49 43 01 00 00 00 42 58 50 43 // BXPCAPIC....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 0C 18 00 00 // ................ + 0030: 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 00 // ................ + 0040: 02 00 00 00 0B 4C 00 00 00 00 00 00 00 00 00 00 // .....L.......... + 0050: 01 00 00 00 00 00 00 00 17 00 00 00 00 00 00 00 // ................ + 0060: 00 00 00 00 00 00 01 08 00 00 00 00 00 00 04 08 // ................ + 0070: 00 00 00 00 00 00 03 08 00 00 00 00 00 00 00 00 // ................ + 0080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0090: 0D 18 00 00 00 00 00 00 00 00 02 08 00 00 00 00 // ................ + 00A0: 01 00 00 00 40 00 50 00 // ....@.P. diff --git a/tests/data/acpi/virt/APIC.memhp.dsl b/tests/data/acpi/virt/APIC.memhp.dsl new file mode 100644 index 0000000000..9b86f7b984 --- /dev/null +++ b/tests/data/acpi/virt/APIC.memhp.dsl @@ -0,0 +1,78 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/virt/APIC.memhp, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [APIC] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "APIC" [Multiple APIC Description Table (MADT)] +[004h 0004 4] Table Length : 000000A8 +[008h 0008 1] Revision : 03 +[009h 0009 1] Checksum : B3 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCAPIC" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Local Apic Address : 00000000 +[028h 0040 4] Flags (decoded below) : 00000000 + PC-AT Compatibility : 0 + +[02Ch 0044 1] Subtable Type : 0C [Generic Interrupt Distributor] +[02Dh 0045 1] Length : 18 +[02Eh 0046 2] Reserved : 0000 +[030h 0048 4] Local GIC Hardware ID : 00000000 +[034h 0052 8] Base Address : 0000000008000000 +[03Ch 0060 4] Interrupt Base : 00000000 +[040h 0064 1] Version : 02 +[041h 0065 3] Reserved : 000000 + +[044h 0068 1] Subtable Type : 0B [Generic Interrupt Controller] +[045h 0069 1] Length : 4C +[046h 0070 2] Reserved : 0000 +[048h 0072 4] CPU Interface Number : 00000000 +[04Ch 0076 4] Processor UID : 00000000 +[050h 0080 4] Flags (decoded below) : 00000001 + Processor Enabled : 1 + Performance Interrupt Trigger Mode : 0 + Virtual GIC Interrupt Trigger Mode : 0 +[054h 0084 4] Parking Protocol Version : 00000000 +[058h 0088 4] Performance Interrupt : 00000017 +[05Ch 0092 8] Parked Address : 0000000000000000 +[064h 0100 8] Base Address : 0000000008010000 +[06Ch 0108 8] Virtual GIC Base Address : 0000000008040000 +[074h 0116 8] Hypervisor GIC Base Address : 0000000008030000 +[07Ch 0124 4] Virtual GIC Interrupt : 00000000 +[080h 0128 8] Redistributor Base Address : 0000000000000000 +[088h 0136 8] ARM MPIDR : 0000000000000000 +/**** ACPI subtable terminates early - may be older version (dump table) */ + +[090h 0144 1] Subtable Type : 0D [Generic MSI Frame] +[091h 0145 1] Length : 18 +[092h 0146 2] Reserved : 0000 +[094h 0148 4] MSI Frame ID : 00000000 +[098h 0152 8] Base Address : 0000000008020000 +[0A0h 0160 4] Flags (decoded below) : 00000001 + Select SPI : 1 +[0A4h 0164 2] SPI Count : 0040 +[0A6h 0166 2] SPI Base : 0050 + +Raw Table Data: Length 168 (0xA8) + + 0000: 41 50 49 43 A8 00 00 00 03 B3 42 4F 43 48 53 20 // APIC......BOCHS + 0010: 42 58 50 43 41 50 49 43 01 00 00 00 42 58 50 43 // BXPCAPIC....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 0C 18 00 00 // ................ + 0030: 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 00 // ................ + 0040: 02 00 00 00 0B 4C 00 00 00 00 00 00 00 00 00 00 // .....L.......... + 0050: 01 00 00 00 00 00 00 00 17 00 00 00 00 00 00 00 // ................ + 0060: 00 00 00 00 00 00 01 08 00 00 00 00 00 00 04 08 // ................ + 0070: 00 00 00 00 00 00 03 08 00 00 00 00 00 00 00 00 // ................ + 0080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0090: 0D 18 00 00 00 00 00 00 00 00 02 08 00 00 00 00 // ................ + 00A0: 01 00 00 00 40 00 50 00 // ....@.P. diff --git a/tests/data/acpi/virt/APIC.numamem.dsl b/tests/data/acpi/virt/APIC.numamem.dsl new file mode 100644 index 0000000000..2d43338766 --- /dev/null +++ b/tests/data/acpi/virt/APIC.numamem.dsl @@ -0,0 +1,78 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/virt/APIC.numamem, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [APIC] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "APIC" [Multiple APIC Description Table (MADT)] +[004h 0004 4] Table Length : 000000A8 +[008h 0008 1] Revision : 03 +[009h 0009 1] Checksum : B3 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCAPIC" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Local Apic Address : 00000000 +[028h 0040 4] Flags (decoded below) : 00000000 + PC-AT Compatibility : 0 + +[02Ch 0044 1] Subtable Type : 0C [Generic Interrupt Distributor] +[02Dh 0045 1] Length : 18 +[02Eh 0046 2] Reserved : 0000 +[030h 0048 4] Local GIC Hardware ID : 00000000 +[034h 0052 8] Base Address : 0000000008000000 +[03Ch 0060 4] Interrupt Base : 00000000 +[040h 0064 1] Version : 02 +[041h 0065 3] Reserved : 000000 + +[044h 0068 1] Subtable Type : 0B [Generic Interrupt Controller] +[045h 0069 1] Length : 4C +[046h 0070 2] Reserved : 0000 +[048h 0072 4] CPU Interface Number : 00000000 +[04Ch 0076 4] Processor UID : 00000000 +[050h 0080 4] Flags (decoded below) : 00000001 + Processor Enabled : 1 + Performance Interrupt Trigger Mode : 0 + Virtual GIC Interrupt Trigger Mode : 0 +[054h 0084 4] Parking Protocol Version : 00000000 +[058h 0088 4] Performance Interrupt : 00000017 +[05Ch 0092 8] Parked Address : 0000000000000000 +[064h 0100 8] Base Address : 0000000008010000 +[06Ch 0108 8] Virtual GIC Base Address : 0000000008040000 +[074h 0116 8] Hypervisor GIC Base Address : 0000000008030000 +[07Ch 0124 4] Virtual GIC Interrupt : 00000000 +[080h 0128 8] Redistributor Base Address : 0000000000000000 +[088h 0136 8] ARM MPIDR : 0000000000000000 +/**** ACPI subtable terminates early - may be older version (dump table) */ + +[090h 0144 1] Subtable Type : 0D [Generic MSI Frame] +[091h 0145 1] Length : 18 +[092h 0146 2] Reserved : 0000 +[094h 0148 4] MSI Frame ID : 00000000 +[098h 0152 8] Base Address : 0000000008020000 +[0A0h 0160 4] Flags (decoded below) : 00000001 + Select SPI : 1 +[0A4h 0164 2] SPI Count : 0040 +[0A6h 0166 2] SPI Base : 0050 + +Raw Table Data: Length 168 (0xA8) + + 0000: 41 50 49 43 A8 00 00 00 03 B3 42 4F 43 48 53 20 // APIC......BOCHS + 0010: 42 58 50 43 41 50 49 43 01 00 00 00 42 58 50 43 // BXPCAPIC....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 0C 18 00 00 // ................ + 0030: 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 00 // ................ + 0040: 02 00 00 00 0B 4C 00 00 00 00 00 00 00 00 00 00 // .....L.......... + 0050: 01 00 00 00 00 00 00 00 17 00 00 00 00 00 00 00 // ................ + 0060: 00 00 00 00 00 00 01 08 00 00 00 00 00 00 04 08 // ................ + 0070: 00 00 00 00 00 00 03 08 00 00 00 00 00 00 00 00 // ................ + 0080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0090: 0D 18 00 00 00 00 00 00 00 00 02 08 00 00 00 00 // ................ + 00A0: 01 00 00 00 40 00 50 00 // ....@.P. diff --git a/tests/data/acpi/virt/DSDT.dsl b/tests/data/acpi/virt/DSDT.dsl new file mode 100644 index 0000000000..58368ff44c --- /dev/null +++ b/tests/data/acpi/virt/DSDT.dsl @@ -0,0 +1,1906 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembling to symbolic ASL+ operators + * + * Disassembly of tests/data/acpi/virt/DSDT.numamem, Mon Sep 28 17:24:38 2020 + * + * Original Table Header: + * Signature "DSDT" + * Length 0x00001450 (5200) + * Revision 0x02 + * Checksum 0xFA + * OEM ID "BOCHS " + * OEM Table ID "BXPCDSDT" + * OEM Revision 0x00000001 (1) + * Compiler ID "BXPC" + * Compiler Version 0x00000001 (1) + */ +DefinitionBlock ("", "DSDT", 2, "BOCHS ", "BXPCDSDT", 0x00000001) +{ + Scope (\_SB) + { + Device (C000) + { + Name (_HID, "ACPI0007" /* Processor Device */) // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + } + + Device (COM0) + { + Name (_HID, "ARMH0011") // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x09000000, // Address Base + 0x00001000, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000021, + } + }) + } + + Device (FWCF) + { + Name (_HID, "QEMU0002") // _HID: Hardware ID + Name (_STA, 0x0B) // _STA: Status + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x09020000, // Address Base + 0x00000018, // Address Length + ) + }) + } + + Device (VR00) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A000000, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000030, + } + }) + } + + Device (VR01) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A000200, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000031, + } + }) + } + + Device (VR02) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x02) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A000400, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000032, + } + }) + } + + Device (VR03) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x03) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A000600, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000033, + } + }) + } + + Device (VR04) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x04) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A000800, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000034, + } + }) + } + + Device (VR05) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x05) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A000A00, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000035, + } + }) + } + + Device (VR06) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x06) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A000C00, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000036, + } + }) + } + + Device (VR07) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x07) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A000E00, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000037, + } + }) + } + + Device (VR08) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x08) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A001000, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000038, + } + }) + } + + Device (VR09) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x09) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A001200, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000039, + } + }) + } + + Device (VR10) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x0A) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A001400, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x0000003A, + } + }) + } + + Device (VR11) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x0B) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A001600, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x0000003B, + } + }) + } + + Device (VR12) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x0C) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A001800, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x0000003C, + } + }) + } + + Device (VR13) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x0D) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A001A00, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x0000003D, + } + }) + } + + Device (VR14) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x0E) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A001C00, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x0000003E, + } + }) + } + + Device (VR15) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x0F) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A001E00, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x0000003F, + } + }) + } + + Device (VR16) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x10) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A002000, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000040, + } + }) + } + + Device (VR17) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x11) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A002200, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000041, + } + }) + } + + Device (VR18) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x12) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A002400, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000042, + } + }) + } + + Device (VR19) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x13) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A002600, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000043, + } + }) + } + + Device (VR20) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x14) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A002800, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000044, + } + }) + } + + Device (VR21) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x15) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A002A00, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000045, + } + }) + } + + Device (VR22) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x16) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A002C00, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000046, + } + }) + } + + Device (VR23) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x17) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A002E00, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000047, + } + }) + } + + Device (VR24) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x18) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A003000, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000048, + } + }) + } + + Device (VR25) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x19) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A003200, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000049, + } + }) + } + + Device (VR26) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x1A) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A003400, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x0000004A, + } + }) + } + + Device (VR27) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x1B) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A003600, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x0000004B, + } + }) + } + + Device (VR28) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x1C) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A003800, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x0000004C, + } + }) + } + + Device (VR29) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x1D) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A003A00, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x0000004D, + } + }) + } + + Device (VR30) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x1E) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A003C00, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x0000004E, + } + }) + } + + Device (VR31) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x1F) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A003E00, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x0000004F, + } + }) + } + + Device (PCI0) + { + Name (_HID, "PNP0A08" /* PCI Express Bus */) // _HID: Hardware ID + Name (_CID, "PNP0A03" /* PCI Bus */) // _CID: Compatible ID + Name (_SEG, Zero) // _SEG: PCI Segment + Name (_BBN, Zero) // _BBN: BIOS Bus Number + Name (_UID, Zero) // _UID: Unique ID + Name (_STR, Unicode ("PCIe 0 Device")) // _STR: Description String + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_PRT, Package (0x80) // _PRT: PCI Routing Table + { + Package (0x04) + { + 0xFFFF, + Zero, + GSI0, + Zero + }, + + Package (0x04) + { + 0xFFFF, + One, + GSI1, + Zero + }, + + Package (0x04) + { + 0xFFFF, + 0x02, + GSI2, + Zero + }, + + Package (0x04) + { + 0xFFFF, + 0x03, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + Zero, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + One, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + 0x02, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + 0x03, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + Zero, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + One, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + 0x02, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + 0x03, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + Zero, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + One, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + 0x02, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + 0x03, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + Zero, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + One, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + 0x02, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + 0x03, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + Zero, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + One, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + 0x02, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + 0x03, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + Zero, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + One, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + 0x02, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + 0x03, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + Zero, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + One, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + 0x02, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + 0x03, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + Zero, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + One, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + 0x02, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + 0x03, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + Zero, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + One, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + 0x02, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + 0x03, + GSI0, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + Zero, + GSI2, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + One, + GSI3, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + 0x02, + GSI0, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + 0x03, + GSI1, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + Zero, + GSI3, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + One, + GSI0, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + 0x02, + GSI1, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + 0x03, + GSI2, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + Zero, + GSI0, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + One, + GSI1, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + 0x02, + GSI2, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + 0x03, + GSI3, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + Zero, + GSI1, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + One, + GSI2, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + 0x02, + GSI3, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + 0x03, + GSI0, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + Zero, + GSI2, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + One, + GSI3, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + 0x02, + GSI0, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + 0x03, + GSI1, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + Zero, + GSI3, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + One, + GSI0, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + 0x02, + GSI1, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + 0x03, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + Zero, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + One, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + 0x02, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + 0x03, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + Zero, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + One, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + 0x02, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + 0x03, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + Zero, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + One, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + 0x02, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + 0x03, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + Zero, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + One, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + 0x02, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + 0x03, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + Zero, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + One, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + 0x02, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + 0x03, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + Zero, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + One, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + 0x02, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + 0x03, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + Zero, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + One, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + 0x02, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + 0x03, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + Zero, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + One, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + 0x02, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + 0x03, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + Zero, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + One, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + 0x02, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + 0x03, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + Zero, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + One, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + 0x02, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + 0x03, + GSI0, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + Zero, + GSI2, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + One, + GSI3, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + 0x02, + GSI0, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + 0x03, + GSI1, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + Zero, + GSI3, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + One, + GSI0, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + 0x02, + GSI1, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + 0x03, + GSI2, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + Zero, + GSI0, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + One, + GSI1, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + 0x02, + GSI2, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + 0x03, + GSI3, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + Zero, + GSI1, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + One, + GSI2, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + 0x02, + GSI3, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + 0x03, + GSI0, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + Zero, + GSI2, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + One, + GSI3, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + 0x02, + GSI0, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + 0x03, + GSI1, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + Zero, + GSI3, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + One, + GSI0, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + 0x02, + GSI1, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + 0x03, + GSI2, + Zero + } + }) + Device (GSI0) + { + Name (_HID, "PNP0C0F" /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000023, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000023, + } + }) + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSI1) + { + Name (_HID, "PNP0C0F" /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000024, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000024, + } + }) + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSI2) + { + Name (_HID, "PNP0C0F" /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x02) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000025, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000025, + } + }) + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSI3) + { + Name (_HID, "PNP0C0F" /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x03) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000026, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000026, + } + }) + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Method (_CBA, 0, NotSerialized) // _CBA: Configuration Base Address + { + Return (0x0000004010000000) + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (ResourceTemplate () + { + WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode, + 0x0000, // Granularity + 0x0000, // Range Minimum + 0x00FF, // Range Maximum + 0x0000, // Translation Offset + 0x0100, // Length + ,, ) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite, + 0x00000000, // Granularity + 0x10000000, // Range Minimum + 0x3EFEFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0x2EFF0000, // Length + ,, , AddressRangeMemory, TypeStatic) + DWordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, + 0x00000000, // Granularity + 0x00000000, // Range Minimum + 0x0000FFFF, // Range Maximum + 0x3EFF0000, // Translation Offset + 0x00010000, // Length + ,, , TypeStatic, DenseTranslation) + QWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite, + 0x0000000000000000, // Granularity + 0x0000008000000000, // Range Minimum + 0x000000FFFFFFFFFF, // Range Maximum + 0x0000000000000000, // Translation Offset + 0x0000008000000000, // Length + ,, , AddressRangeMemory, TypeStatic) + }) + } + + Name (SUPP, Zero) + Name (CTRL, Zero) + Method (_OSC, 4, NotSerialized) // _OSC: Operating System Capabilities + { + CreateDWordField (Arg3, Zero, CDW1) + If ((Arg0 == ToUUID ("33db4d5b-1ff7-401c-9657-7441c03dd766") /* PCI Host Bridge Device */)) + { + CreateDWordField (Arg3, 0x04, CDW2) + CreateDWordField (Arg3, 0x08, CDW3) + SUPP = CDW2 /* \_SB_.PCI0._OSC.CDW2 */ + CTRL = CDW3 /* \_SB_.PCI0._OSC.CDW3 */ + CTRL &= 0x1F + If ((Arg1 != One)) + { + CDW1 |= 0x08 + } + + If ((CDW3 != CTRL)) + { + CDW1 |= 0x10 + } + + CDW3 = CTRL /* \_SB_.PCI0.CTRL */ + Return (Arg3) + } + Else + { + CDW1 |= 0x04 + Return (Arg3) + } + } + + Method (_DSM, 4, NotSerialized) // _DSM: Device-Specific Method + { + If ((Arg0 == ToUUID ("e5c937d0-3553-4d7a-9117-ea4d19c3434d") /* Device Labeling Interface */)) + { + If ((Arg2 == Zero)) + { + Return (Buffer (One) + { + 0x01 // . + }) + } + } + + Return (Buffer (One) + { + 0x00 // . + }) + } + + Device (RES0) + { + Name (_HID, "PNP0C02" /* PNP Motherboard Resources */) // _HID: Hardware ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + QWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite, + 0x0000000000000000, // Granularity + 0x0000004010000000, // Range Minimum + 0x000000401FFFFFFF, // Range Maximum + 0x0000000000000000, // Translation Offset + 0x0000000010000000, // Length + ,, , AddressRangeMemory, TypeStatic) + }) + } + } + + Device (\_SB.GED) + { + Name (_HID, "ACPI0013" /* Generic Event Device */) // _HID: Hardware ID + Name (_UID, "GED") // _UID: Unique ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Edge, ActiveHigh, Exclusive, ,, ) + { + 0x00000029, + } + }) + OperationRegion (EREG, SystemMemory, 0x09080000, 0x04) + Field (EREG, DWordAcc, NoLock, WriteAsZeros) + { + ESEL, 32 + } + + Method (_EVT, 1, Serialized) // _EVT: Event + { + Local0 = ESEL /* \_SB_.GED_.ESEL */ + If (((Local0 & 0x02) == 0x02)) + { + Notify (PWRB, 0x80) // Status Change + } + } + } + + Device (PWRB) + { + Name (_HID, "PNP0C0C" /* Power Button Device */) // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + } + } +} + diff --git a/tests/data/acpi/virt/DSDT.memhp.dsl b/tests/data/acpi/virt/DSDT.memhp.dsl new file mode 100644 index 0000000000..84f3c51867 --- /dev/null +++ b/tests/data/acpi/virt/DSDT.memhp.dsl @@ -0,0 +1,2215 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembling to symbolic ASL+ operators + * + * Disassembly of tests/data/acpi/virt/DSDT.memhp, Tue Aug 4 11:14:15 2020 + * + * Original Table Header: + * Signature "DSDT" + * Length 0x000019A6 (6566) + * Revision 0x02 + * Checksum 0x02 + * OEM ID "BOCHS " + * OEM Table ID "BXPCDSDT" + * OEM Revision 0x00000001 (1) + * Compiler ID "BXPC" + * Compiler Version 0x00000001 (1) + */ +DefinitionBlock ("", "DSDT", 2, "BOCHS ", "BXPCDSDT", 0x00000001) +{ + External (_SB_.NVDR, UnknownObj) + + Scope (\_SB) + { + Device (C000) + { + Name (_HID, "ACPI0007" /* Processor Device */) // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + } + + Device (COM0) + { + Name (_HID, "ARMH0011") // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x09000000, // Address Base + 0x00001000, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000021, + } + }) + } + + Device (FWCF) + { + Name (_HID, "QEMU0002") // _HID: Hardware ID + Name (_STA, 0x0B) // _STA: Status + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x09020000, // Address Base + 0x00000018, // Address Length + ) + }) + } + + Device (VR00) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A000000, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000030, + } + }) + } + + Device (VR01) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A000200, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000031, + } + }) + } + + Device (VR02) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x02) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A000400, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000032, + } + }) + } + + Device (VR03) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x03) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A000600, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000033, + } + }) + } + + Device (VR04) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x04) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A000800, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000034, + } + }) + } + + Device (VR05) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x05) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A000A00, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000035, + } + }) + } + + Device (VR06) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x06) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A000C00, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000036, + } + }) + } + + Device (VR07) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x07) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A000E00, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000037, + } + }) + } + + Device (VR08) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x08) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A001000, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000038, + } + }) + } + + Device (VR09) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x09) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A001200, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000039, + } + }) + } + + Device (VR10) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x0A) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A001400, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x0000003A, + } + }) + } + + Device (VR11) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x0B) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A001600, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x0000003B, + } + }) + } + + Device (VR12) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x0C) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A001800, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x0000003C, + } + }) + } + + Device (VR13) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x0D) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A001A00, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x0000003D, + } + }) + } + + Device (VR14) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x0E) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A001C00, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x0000003E, + } + }) + } + + Device (VR15) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x0F) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A001E00, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x0000003F, + } + }) + } + + Device (VR16) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x10) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A002000, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000040, + } + }) + } + + Device (VR17) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x11) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A002200, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000041, + } + }) + } + + Device (VR18) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x12) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A002400, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000042, + } + }) + } + + Device (VR19) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x13) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A002600, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000043, + } + }) + } + + Device (VR20) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x14) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A002800, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000044, + } + }) + } + + Device (VR21) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x15) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A002A00, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000045, + } + }) + } + + Device (VR22) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x16) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A002C00, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000046, + } + }) + } + + Device (VR23) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x17) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A002E00, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000047, + } + }) + } + + Device (VR24) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x18) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A003000, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000048, + } + }) + } + + Device (VR25) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x19) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A003200, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000049, + } + }) + } + + Device (VR26) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x1A) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A003400, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x0000004A, + } + }) + } + + Device (VR27) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x1B) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A003600, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x0000004B, + } + }) + } + + Device (VR28) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x1C) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A003800, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x0000004C, + } + }) + } + + Device (VR29) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x1D) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A003A00, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x0000004D, + } + }) + } + + Device (VR30) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x1E) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A003C00, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x0000004E, + } + }) + } + + Device (VR31) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x1F) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A003E00, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x0000004F, + } + }) + } + + Device (PCI0) + { + Name (_HID, "PNP0A08" /* PCI Express Bus */) // _HID: Hardware ID + Name (_CID, "PNP0A03" /* PCI Bus */) // _CID: Compatible ID + Name (_SEG, Zero) // _SEG: PCI Segment + Name (_BBN, Zero) // _BBN: BIOS Bus Number + Name (_UID, "PCI0") // _UID: Unique ID + Name (_STR, Unicode ("PCIe 0 Device")) // _STR: Description String + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_PRT, Package (0x80) // _PRT: PCI Routing Table + { + Package (0x04) + { + 0xFFFF, + Zero, + GSI0, + Zero + }, + + Package (0x04) + { + 0xFFFF, + One, + GSI1, + Zero + }, + + Package (0x04) + { + 0xFFFF, + 0x02, + GSI2, + Zero + }, + + Package (0x04) + { + 0xFFFF, + 0x03, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + Zero, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + One, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + 0x02, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + 0x03, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + Zero, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + One, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + 0x02, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + 0x03, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + Zero, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + One, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + 0x02, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + 0x03, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + Zero, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + One, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + 0x02, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + 0x03, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + Zero, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + One, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + 0x02, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + 0x03, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + Zero, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + One, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + 0x02, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + 0x03, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + Zero, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + One, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + 0x02, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + 0x03, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + Zero, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + One, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + 0x02, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + 0x03, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + Zero, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + One, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + 0x02, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + 0x03, + GSI0, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + Zero, + GSI2, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + One, + GSI3, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + 0x02, + GSI0, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + 0x03, + GSI1, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + Zero, + GSI3, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + One, + GSI0, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + 0x02, + GSI1, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + 0x03, + GSI2, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + Zero, + GSI0, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + One, + GSI1, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + 0x02, + GSI2, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + 0x03, + GSI3, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + Zero, + GSI1, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + One, + GSI2, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + 0x02, + GSI3, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + 0x03, + GSI0, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + Zero, + GSI2, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + One, + GSI3, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + 0x02, + GSI0, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + 0x03, + GSI1, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + Zero, + GSI3, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + One, + GSI0, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + 0x02, + GSI1, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + 0x03, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + Zero, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + One, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + 0x02, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + 0x03, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + Zero, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + One, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + 0x02, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + 0x03, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + Zero, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + One, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + 0x02, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + 0x03, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + Zero, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + One, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + 0x02, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + 0x03, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + Zero, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + One, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + 0x02, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + 0x03, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + Zero, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + One, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + 0x02, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + 0x03, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + Zero, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + One, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + 0x02, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + 0x03, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + Zero, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + One, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + 0x02, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + 0x03, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + Zero, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + One, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + 0x02, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + 0x03, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + Zero, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + One, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + 0x02, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + 0x03, + GSI0, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + Zero, + GSI2, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + One, + GSI3, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + 0x02, + GSI0, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + 0x03, + GSI1, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + Zero, + GSI3, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + One, + GSI0, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + 0x02, + GSI1, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + 0x03, + GSI2, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + Zero, + GSI0, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + One, + GSI1, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + 0x02, + GSI2, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + 0x03, + GSI3, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + Zero, + GSI1, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + One, + GSI2, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + 0x02, + GSI3, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + 0x03, + GSI0, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + Zero, + GSI2, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + One, + GSI3, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + 0x02, + GSI0, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + 0x03, + GSI1, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + Zero, + GSI3, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + One, + GSI0, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + 0x02, + GSI1, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + 0x03, + GSI2, + Zero + } + }) + Device (GSI0) + { + Name (_HID, "PNP0C0F" /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000023, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000023, + } + }) + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSI1) + { + Name (_HID, "PNP0C0F" /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000024, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000024, + } + }) + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSI2) + { + Name (_HID, "PNP0C0F" /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x02) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000025, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000025, + } + }) + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSI3) + { + Name (_HID, "PNP0C0F" /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x03) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000026, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000026, + } + }) + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Method (_CBA, 0, NotSerialized) // _CBA: Configuration Base Address + { + Return (0x0000004010000000) + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (ResourceTemplate () + { + WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode, + 0x0000, // Granularity + 0x0000, // Range Minimum + 0x00FF, // Range Maximum + 0x0000, // Translation Offset + 0x0100, // Length + ,, ) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite, + 0x00000000, // Granularity + 0x10000000, // Range Minimum + 0x3EFEFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0x2EFF0000, // Length + ,, , AddressRangeMemory, TypeStatic) + DWordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, + 0x00000000, // Granularity + 0x00000000, // Range Minimum + 0x0000FFFF, // Range Maximum + 0x3EFF0000, // Translation Offset + 0x00010000, // Length + ,, , TypeStatic, DenseTranslation) + QWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite, + 0x0000000000000000, // Granularity + 0x0000008000000000, // Range Minimum + 0x000000FFFFFFFFFF, // Range Maximum + 0x0000000000000000, // Translation Offset + 0x0000008000000000, // Length + ,, , AddressRangeMemory, TypeStatic) + }) + } + + Name (SUPP, Zero) + Name (CTRL, Zero) + Method (_OSC, 4, NotSerialized) // _OSC: Operating System Capabilities + { + CreateDWordField (Arg3, Zero, CDW1) + If ((Arg0 == ToUUID ("33db4d5b-1ff7-401c-9657-7441c03dd766") /* PCI Host Bridge Device */)) + { + CreateDWordField (Arg3, 0x04, CDW2) + CreateDWordField (Arg3, 0x08, CDW3) + SUPP = CDW2 /* \_SB_.PCI0._OSC.CDW2 */ + CTRL = CDW3 /* \_SB_.PCI0._OSC.CDW3 */ + CTRL &= 0x1F + If ((Arg1 != One)) + { + CDW1 |= 0x08 + } + + If ((CDW3 != CTRL)) + { + CDW1 |= 0x10 + } + + CDW3 = CTRL /* \_SB_.PCI0.CTRL */ + Return (Arg3) + } + Else + { + CDW1 |= 0x04 + Return (Arg3) + } + } + + Method (_DSM, 4, NotSerialized) // _DSM: Device-Specific Method + { + If ((Arg0 == ToUUID ("e5c937d0-3553-4d7a-9117-ea4d19c3434d") /* Device Labeling Interface */)) + { + If ((Arg2 == Zero)) + { + Return (Buffer (One) + { + 0x01 // . + }) + } + } + + Return (Buffer (One) + { + 0x00 // . + }) + } + + Device (RES0) + { + Name (_HID, "PNP0C02" /* PNP Motherboard Resources */) // _HID: Hardware ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + QWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite, + 0x0000000000000000, // Granularity + 0x0000004010000000, // Range Minimum + 0x000000401FFFFFFF, // Range Maximum + 0x0000000000000000, // Translation Offset + 0x0000000010000000, // Length + ,, , AddressRangeMemory, TypeStatic) + }) + } + } + + Device (\_SB.GED) + { + Name (_HID, "ACPI0013" /* Generic Event Device */) // _HID: Hardware ID + Name (_UID, "GED") // _UID: Unique ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Edge, ActiveHigh, Exclusive, ,, ) + { + 0x00000029, + } + }) + OperationRegion (EREG, SystemMemory, 0x09080000, 0x04) + Field (EREG, DWordAcc, NoLock, WriteAsZeros) + { + ESEL, 32 + } + + Method (_EVT, 1, Serialized) // _EVT: Event + { + Local0 = ESEL /* \_SB_.GED_.ESEL */ + If (((Local0 & One) == One)) + { + \_SB.MHPC.MSCN () + } + + If (((Local0 & 0x02) == 0x02)) + { + Notify (PWRB, 0x80) // Status Change + } + + If (((Local0 & 0x04) == 0x04)) + { + Notify (\_SB.NVDR, 0x80) // Status Change + } + } + } + + Device (\_SB.MHPD) + { + Name (_HID, "PNP0A06" /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "Memory hotplug resources") // _UID: Unique ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x09070000, // Address Base + 0x00000018, // Address Length + ) + }) + OperationRegion (HPMR, SystemMemory, 0x09070000, 0x18) + } + + Device (\_SB.MHPC) + { + Name (_HID, "PNP0A06" /* Generic Container Device */) // _HID: Hardware ID + Name (_UID, "DIMM devices") // _UID: Unique ID + Name (MDNR, 0x03) + Field (\_SB.MHPD.HPMR, DWordAcc, NoLock, Preserve) + { + MRBL, 32, + MRBH, 32, + MRLL, 32, + MRLH, 32, + MPX, 32 + } + + Field (\_SB.MHPD.HPMR, ByteAcc, NoLock, WriteAsZeros) + { + Offset (0x14), + MES, 1, + MINS, 1, + MRMV, 1, + MEJ, 1 + } + + Field (\_SB.MHPD.HPMR, DWordAcc, NoLock, Preserve) + { + MSEL, 32, + MOEV, 32, + MOSC, 32 + } + + Method (_STA, 0, NotSerialized) // _STA: Status + { + If ((MDNR == Zero)) + { + Return (Zero) + } + + Return (0x0B) + } + + Mutex (MLCK, 0x00) + Method (MSCN, 0, NotSerialized) + { + If ((MDNR == Zero)) + { + Return (Zero) + } + + Local0 = Zero + Acquire (MLCK, 0xFFFF) + While ((Local0 < MDNR)) + { + MSEL = Local0 + If ((MINS == One)) + { + MTFY (Local0, One) + MINS = One + } + ElseIf ((MRMV == One)) + { + MTFY (Local0, 0x03) + MRMV = One + } + + Local0 += One + } + + Release (MLCK) + Return (One) + } + + Method (MRST, 1, NotSerialized) + { + Local0 = Zero + Acquire (MLCK, 0xFFFF) + MSEL = ToInteger (Arg0) + If ((MES == One)) + { + Local0 = 0x0F + } + + Release (MLCK) + Return (Local0) + } + + Method (MCRS, 1, Serialized) + { + Acquire (MLCK, 0xFFFF) + MSEL = ToInteger (Arg0) + Name (MR64, ResourceTemplate () + { + QWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x0000000000000000, // Granularity + 0x0000000000000000, // Range Minimum + 0xFFFFFFFFFFFFFFFE, // Range Maximum + 0x0000000000000000, // Translation Offset + 0xFFFFFFFFFFFFFFFF, // Length + ,, _Y00, AddressRangeMemory, TypeStatic) + }) + CreateDWordField (MR64, \_SB.MHPC.MCRS._Y00._MIN, MINL) // _MIN: Minimum Base Address + CreateDWordField (MR64, 0x12, MINH) + CreateDWordField (MR64, \_SB.MHPC.MCRS._Y00._LEN, LENL) // _LEN: Length + CreateDWordField (MR64, 0x2A, LENH) + CreateDWordField (MR64, \_SB.MHPC.MCRS._Y00._MAX, MAXL) // _MAX: Maximum Base Address + CreateDWordField (MR64, 0x1A, MAXH) + MINH = MRBH /* \_SB_.MHPC.MRBH */ + MINL = MRBL /* \_SB_.MHPC.MRBL */ + LENH = MRLH /* \_SB_.MHPC.MRLH */ + LENL = MRLL /* \_SB_.MHPC.MRLL */ + MAXL = (MINL + LENL) /* \_SB_.MHPC.MCRS.LENL */ + MAXH = (MINH + LENH) /* \_SB_.MHPC.MCRS.LENH */ + If ((MAXL < MINL)) + { + MAXH += One + } + + If ((MAXL < One)) + { + MAXH -= One + } + + MAXL -= One + If ((MAXH == Zero)) + { + Name (MR32, ResourceTemplate () + { + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, + 0x00000000, // Granularity + 0x00000000, // Range Minimum + 0xFFFFFFFE, // Range Maximum + 0x00000000, // Translation Offset + 0xFFFFFFFF, // Length + ,, _Y01, AddressRangeMemory, TypeStatic) + }) + CreateDWordField (MR32, \_SB.MHPC.MCRS._Y01._MIN, MIN) // _MIN: Minimum Base Address + CreateDWordField (MR32, \_SB.MHPC.MCRS._Y01._MAX, MAX) // _MAX: Maximum Base Address + CreateDWordField (MR32, \_SB.MHPC.MCRS._Y01._LEN, LEN) // _LEN: Length + MIN = MINL /* \_SB_.MHPC.MCRS.MINL */ + MAX = MAXL /* \_SB_.MHPC.MCRS.MAXL */ + LEN = LENL /* \_SB_.MHPC.MCRS.LENL */ + Release (MLCK) + Return (MR32) /* \_SB_.MHPC.MCRS.MR32 */ + } + + Release (MLCK) + Return (MR64) /* \_SB_.MHPC.MCRS.MR64 */ + } + + Method (MPXM, 1, NotSerialized) + { + Acquire (MLCK, 0xFFFF) + MSEL = ToInteger (Arg0) + Local0 = MPX /* \_SB_.MHPC.MPX_ */ + Release (MLCK) + Return (Local0) + } + + Method (MOST, 4, NotSerialized) + { + Acquire (MLCK, 0xFFFF) + MSEL = ToInteger (Arg0) + MOEV = Arg1 + MOSC = Arg2 + Release (MLCK) + } + + Method (MEJ0, 2, NotSerialized) + { + Acquire (MLCK, 0xFFFF) + MSEL = ToInteger (Arg0) + MEJ = One + Release (MLCK) + } + + Device (MP00) + { + Name (_UID, "0x00") // _UID: Unique ID + Name (_HID, EisaId ("PNP0C80") /* Memory Device */) // _HID: Hardware ID + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (MCRS (_UID)) + } + + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (MRST (_UID)) + } + + Method (_PXM, 0, NotSerialized) // _PXM: Device Proximity + { + Return (MPXM (_UID)) + } + + Method (_OST, 3, NotSerialized) // _OST: OSPM Status Indication + { + MOST (_UID, Arg0, Arg1, Arg2) + } + + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + MEJ0 (_UID, Arg0) + } + } + + Device (MP01) + { + Name (_UID, "0x01") // _UID: Unique ID + Name (_HID, EisaId ("PNP0C80") /* Memory Device */) // _HID: Hardware ID + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (MCRS (_UID)) + } + + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (MRST (_UID)) + } + + Method (_PXM, 0, NotSerialized) // _PXM: Device Proximity + { + Return (MPXM (_UID)) + } + + Method (_OST, 3, NotSerialized) // _OST: OSPM Status Indication + { + MOST (_UID, Arg0, Arg1, Arg2) + } + + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + MEJ0 (_UID, Arg0) + } + } + + Device (MP02) + { + Name (_UID, "0x02") // _UID: Unique ID + Name (_HID, EisaId ("PNP0C80") /* Memory Device */) // _HID: Hardware ID + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (MCRS (_UID)) + } + + Method (_STA, 0, NotSerialized) // _STA: Status + { + Return (MRST (_UID)) + } + + Method (_PXM, 0, NotSerialized) // _PXM: Device Proximity + { + Return (MPXM (_UID)) + } + + Method (_OST, 3, NotSerialized) // _OST: OSPM Status Indication + { + MOST (_UID, Arg0, Arg1, Arg2) + } + + Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device, x=0-9 + { + MEJ0 (_UID, Arg0) + } + } + + Method (MTFY, 2, NotSerialized) + { + If ((Arg0 == Zero)) + { + Notify (MP00, Arg1) + } + + If ((Arg0 == One)) + { + Notify (MP01, Arg1) + } + + If ((Arg0 == 0x02)) + { + Notify (MP02, Arg1) + } + } + } + + Device (PWRB) + { + Name (_HID, "PNP0C0C" /* Power Button Device */) // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + } + } +} + diff --git a/tests/data/acpi/virt/DSDT.numamem.dsl b/tests/data/acpi/virt/DSDT.numamem.dsl new file mode 100644 index 0000000000..6603d31a01 --- /dev/null +++ b/tests/data/acpi/virt/DSDT.numamem.dsl @@ -0,0 +1,1906 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembling to symbolic ASL+ operators + * + * Disassembly of tests/data/acpi/virt/DSDT.numamem, Tue Aug 4 11:14:15 2020 + * + * Original Table Header: + * Signature "DSDT" + * Length 0x00001455 (5205) + * Revision 0x02 + * Checksum 0xE1 + * OEM ID "BOCHS " + * OEM Table ID "BXPCDSDT" + * OEM Revision 0x00000001 (1) + * Compiler ID "BXPC" + * Compiler Version 0x00000001 (1) + */ +DefinitionBlock ("", "DSDT", 2, "BOCHS ", "BXPCDSDT", 0x00000001) +{ + Scope (\_SB) + { + Device (C000) + { + Name (_HID, "ACPI0007" /* Processor Device */) // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + } + + Device (COM0) + { + Name (_HID, "ARMH0011") // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x09000000, // Address Base + 0x00001000, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000021, + } + }) + } + + Device (FWCF) + { + Name (_HID, "QEMU0002") // _HID: Hardware ID + Name (_STA, 0x0B) // _STA: Status + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x09020000, // Address Base + 0x00000018, // Address Length + ) + }) + } + + Device (VR00) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A000000, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000030, + } + }) + } + + Device (VR01) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A000200, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000031, + } + }) + } + + Device (VR02) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x02) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A000400, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000032, + } + }) + } + + Device (VR03) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x03) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A000600, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000033, + } + }) + } + + Device (VR04) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x04) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A000800, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000034, + } + }) + } + + Device (VR05) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x05) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A000A00, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000035, + } + }) + } + + Device (VR06) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x06) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A000C00, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000036, + } + }) + } + + Device (VR07) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x07) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A000E00, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000037, + } + }) + } + + Device (VR08) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x08) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A001000, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000038, + } + }) + } + + Device (VR09) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x09) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A001200, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000039, + } + }) + } + + Device (VR10) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x0A) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A001400, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x0000003A, + } + }) + } + + Device (VR11) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x0B) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A001600, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x0000003B, + } + }) + } + + Device (VR12) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x0C) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A001800, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x0000003C, + } + }) + } + + Device (VR13) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x0D) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A001A00, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x0000003D, + } + }) + } + + Device (VR14) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x0E) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A001C00, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x0000003E, + } + }) + } + + Device (VR15) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x0F) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A001E00, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x0000003F, + } + }) + } + + Device (VR16) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x10) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A002000, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000040, + } + }) + } + + Device (VR17) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x11) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A002200, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000041, + } + }) + } + + Device (VR18) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x12) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A002400, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000042, + } + }) + } + + Device (VR19) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x13) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A002600, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000043, + } + }) + } + + Device (VR20) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x14) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A002800, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000044, + } + }) + } + + Device (VR21) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x15) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A002A00, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000045, + } + }) + } + + Device (VR22) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x16) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A002C00, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000046, + } + }) + } + + Device (VR23) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x17) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A002E00, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000047, + } + }) + } + + Device (VR24) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x18) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A003000, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000048, + } + }) + } + + Device (VR25) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x19) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A003200, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000049, + } + }) + } + + Device (VR26) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x1A) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A003400, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x0000004A, + } + }) + } + + Device (VR27) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x1B) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A003600, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x0000004B, + } + }) + } + + Device (VR28) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x1C) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A003800, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x0000004C, + } + }) + } + + Device (VR29) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x1D) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A003A00, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x0000004D, + } + }) + } + + Device (VR30) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x1E) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A003C00, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x0000004E, + } + }) + } + + Device (VR31) + { + Name (_HID, "LNRO0005") // _HID: Hardware ID + Name (_UID, 0x1F) // _UID: Unique ID + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Memory32Fixed (ReadWrite, + 0x0A003E00, // Address Base + 0x00000200, // Address Length + ) + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x0000004F, + } + }) + } + + Device (PCI0) + { + Name (_HID, "PNP0A08" /* PCI Express Bus */) // _HID: Hardware ID + Name (_CID, "PNP0A03" /* PCI Bus */) // _CID: Compatible ID + Name (_SEG, Zero) // _SEG: PCI Segment + Name (_BBN, Zero) // _BBN: BIOS Bus Number + Name (_UID, "PCI0") // _UID: Unique ID + Name (_STR, Unicode ("PCIe 0 Device")) // _STR: Description String + Name (_CCA, One) // _CCA: Cache Coherency Attribute + Name (_PRT, Package (0x80) // _PRT: PCI Routing Table + { + Package (0x04) + { + 0xFFFF, + Zero, + GSI0, + Zero + }, + + Package (0x04) + { + 0xFFFF, + One, + GSI1, + Zero + }, + + Package (0x04) + { + 0xFFFF, + 0x02, + GSI2, + Zero + }, + + Package (0x04) + { + 0xFFFF, + 0x03, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + Zero, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + One, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + 0x02, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0001FFFF, + 0x03, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + Zero, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + One, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + 0x02, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0002FFFF, + 0x03, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + Zero, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + One, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + 0x02, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0003FFFF, + 0x03, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + Zero, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + One, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + 0x02, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0004FFFF, + 0x03, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + Zero, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + One, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + 0x02, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0005FFFF, + 0x03, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + Zero, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + One, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + 0x02, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0006FFFF, + 0x03, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + Zero, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + One, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + 0x02, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0007FFFF, + 0x03, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + Zero, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + One, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + 0x02, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0008FFFF, + 0x03, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + Zero, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + One, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + 0x02, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0009FFFF, + 0x03, + GSI0, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + Zero, + GSI2, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + One, + GSI3, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + 0x02, + GSI0, + Zero + }, + + Package (0x04) + { + 0x000AFFFF, + 0x03, + GSI1, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + Zero, + GSI3, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + One, + GSI0, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + 0x02, + GSI1, + Zero + }, + + Package (0x04) + { + 0x000BFFFF, + 0x03, + GSI2, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + Zero, + GSI0, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + One, + GSI1, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + 0x02, + GSI2, + Zero + }, + + Package (0x04) + { + 0x000CFFFF, + 0x03, + GSI3, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + Zero, + GSI1, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + One, + GSI2, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + 0x02, + GSI3, + Zero + }, + + Package (0x04) + { + 0x000DFFFF, + 0x03, + GSI0, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + Zero, + GSI2, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + One, + GSI3, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + 0x02, + GSI0, + Zero + }, + + Package (0x04) + { + 0x000EFFFF, + 0x03, + GSI1, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + Zero, + GSI3, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + One, + GSI0, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + 0x02, + GSI1, + Zero + }, + + Package (0x04) + { + 0x000FFFFF, + 0x03, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + Zero, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + One, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + 0x02, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0010FFFF, + 0x03, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + Zero, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + One, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + 0x02, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0011FFFF, + 0x03, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + Zero, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + One, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + 0x02, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0012FFFF, + 0x03, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + Zero, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + One, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + 0x02, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0013FFFF, + 0x03, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + Zero, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + One, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + 0x02, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0014FFFF, + 0x03, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + Zero, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + One, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + 0x02, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0015FFFF, + 0x03, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + Zero, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + One, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + 0x02, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0016FFFF, + 0x03, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + Zero, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + One, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + 0x02, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0017FFFF, + 0x03, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + Zero, + GSI0, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + One, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + 0x02, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0018FFFF, + 0x03, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + Zero, + GSI1, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + One, + GSI2, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + 0x02, + GSI3, + Zero + }, + + Package (0x04) + { + 0x0019FFFF, + 0x03, + GSI0, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + Zero, + GSI2, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + One, + GSI3, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + 0x02, + GSI0, + Zero + }, + + Package (0x04) + { + 0x001AFFFF, + 0x03, + GSI1, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + Zero, + GSI3, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + One, + GSI0, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + 0x02, + GSI1, + Zero + }, + + Package (0x04) + { + 0x001BFFFF, + 0x03, + GSI2, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + Zero, + GSI0, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + One, + GSI1, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + 0x02, + GSI2, + Zero + }, + + Package (0x04) + { + 0x001CFFFF, + 0x03, + GSI3, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + Zero, + GSI1, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + One, + GSI2, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + 0x02, + GSI3, + Zero + }, + + Package (0x04) + { + 0x001DFFFF, + 0x03, + GSI0, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + Zero, + GSI2, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + One, + GSI3, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + 0x02, + GSI0, + Zero + }, + + Package (0x04) + { + 0x001EFFFF, + 0x03, + GSI1, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + Zero, + GSI3, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + One, + GSI0, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + 0x02, + GSI1, + Zero + }, + + Package (0x04) + { + 0x001FFFFF, + 0x03, + GSI2, + Zero + } + }) + Device (GSI0) + { + Name (_HID, "PNP0C0F" /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000023, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000023, + } + }) + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSI1) + { + Name (_HID, "PNP0C0F" /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, One) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000024, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000024, + } + }) + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSI2) + { + Name (_HID, "PNP0C0F" /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x02) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000025, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000025, + } + }) + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Device (GSI3) + { + Name (_HID, "PNP0C0F" /* PCI Interrupt Link Device */) // _HID: Hardware ID + Name (_UID, 0x03) // _UID: Unique ID + Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000026, + } + }) + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) + { + 0x00000026, + } + }) + Method (_SRS, 1, NotSerialized) // _SRS: Set Resource Settings + { + } + } + + Method (_CBA, 0, NotSerialized) // _CBA: Configuration Base Address + { + Return (0x0000004010000000) + } + + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Return (ResourceTemplate () + { + WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode, + 0x0000, // Granularity + 0x0000, // Range Minimum + 0x00FF, // Range Maximum + 0x0000, // Translation Offset + 0x0100, // Length + ,, ) + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite, + 0x00000000, // Granularity + 0x10000000, // Range Minimum + 0x3EFEFFFF, // Range Maximum + 0x00000000, // Translation Offset + 0x2EFF0000, // Length + ,, , AddressRangeMemory, TypeStatic) + DWordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, + 0x00000000, // Granularity + 0x00000000, // Range Minimum + 0x0000FFFF, // Range Maximum + 0x3EFF0000, // Translation Offset + 0x00010000, // Length + ,, , TypeStatic, DenseTranslation) + QWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite, + 0x0000000000000000, // Granularity + 0x0000008000000000, // Range Minimum + 0x000000FFFFFFFFFF, // Range Maximum + 0x0000000000000000, // Translation Offset + 0x0000008000000000, // Length + ,, , AddressRangeMemory, TypeStatic) + }) + } + + Name (SUPP, Zero) + Name (CTRL, Zero) + Method (_OSC, 4, NotSerialized) // _OSC: Operating System Capabilities + { + CreateDWordField (Arg3, Zero, CDW1) + If ((Arg0 == ToUUID ("33db4d5b-1ff7-401c-9657-7441c03dd766") /* PCI Host Bridge Device */)) + { + CreateDWordField (Arg3, 0x04, CDW2) + CreateDWordField (Arg3, 0x08, CDW3) + SUPP = CDW2 /* \_SB_.PCI0._OSC.CDW2 */ + CTRL = CDW3 /* \_SB_.PCI0._OSC.CDW3 */ + CTRL &= 0x1F + If ((Arg1 != One)) + { + CDW1 |= 0x08 + } + + If ((CDW3 != CTRL)) + { + CDW1 |= 0x10 + } + + CDW3 = CTRL /* \_SB_.PCI0.CTRL */ + Return (Arg3) + } + Else + { + CDW1 |= 0x04 + Return (Arg3) + } + } + + Method (_DSM, 4, NotSerialized) // _DSM: Device-Specific Method + { + If ((Arg0 == ToUUID ("e5c937d0-3553-4d7a-9117-ea4d19c3434d") /* Device Labeling Interface */)) + { + If ((Arg2 == Zero)) + { + Return (Buffer (One) + { + 0x01 // . + }) + } + } + + Return (Buffer (One) + { + 0x00 // . + }) + } + + Device (RES0) + { + Name (_HID, "PNP0C02" /* PNP Motherboard Resources */) // _HID: Hardware ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + QWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite, + 0x0000000000000000, // Granularity + 0x0000004010000000, // Range Minimum + 0x000000401FFFFFFF, // Range Maximum + 0x0000000000000000, // Translation Offset + 0x0000000010000000, // Length + ,, , AddressRangeMemory, TypeStatic) + }) + } + } + + Device (\_SB.GED) + { + Name (_HID, "ACPI0013" /* Generic Event Device */) // _HID: Hardware ID + Name (_UID, "GED") // _UID: Unique ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Edge, ActiveHigh, Exclusive, ,, ) + { + 0x00000029, + } + }) + OperationRegion (EREG, SystemMemory, 0x09080000, 0x04) + Field (EREG, DWordAcc, NoLock, WriteAsZeros) + { + ESEL, 32 + } + + Method (_EVT, 1, Serialized) // _EVT: Event + { + Local0 = ESEL /* \_SB_.GED_.ESEL */ + If (((Local0 & 0x02) == 0x02)) + { + Notify (PWRB, 0x80) // Status Change + } + } + } + + Device (PWRB) + { + Name (_HID, "PNP0C0C" /* Power Button Device */) // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + } + } +} + diff --git a/tests/data/acpi/virt/FACP.dsl b/tests/data/acpi/virt/FACP.dsl new file mode 100644 index 0000000000..2c73796f89 --- /dev/null +++ b/tests/data/acpi/virt/FACP.dsl @@ -0,0 +1,196 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/virt/FACP.numamem, Mon Sep 28 17:24:38 2020 + * + * ACPI Data Table [FACP] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "FACP" [Fixed ACPI Description Table (FADT)] +[004h 0004 4] Table Length : 0000010C +[008h 0008 1] Revision : 05 +[009h 0009 1] Checksum : BB +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCFACP" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] FACS Address : 00000000 +[028h 0040 4] DSDT Address : 00000000 +[02Ch 0044 1] Model : 00 +[02Dh 0045 1] PM Profile : 00 [Unspecified] +[02Eh 0046 2] SCI Interrupt : 0000 +[030h 0048 4] SMI Command Port : 00000000 +[034h 0052 1] ACPI Enable Value : 00 +[035h 0053 1] ACPI Disable Value : 00 +[036h 0054 1] S4BIOS Command : 00 +[037h 0055 1] P-State Control : 00 +[038h 0056 4] PM1A Event Block Address : 00000000 +[03Ch 0060 4] PM1B Event Block Address : 00000000 +[040h 0064 4] PM1A Control Block Address : 00000000 +[044h 0068 4] PM1B Control Block Address : 00000000 +[048h 0072 4] PM2 Control Block Address : 00000000 +[04Ch 0076 4] PM Timer Block Address : 00000000 +[050h 0080 4] GPE0 Block Address : 00000000 +[054h 0084 4] GPE1 Block Address : 00000000 +[058h 0088 1] PM1 Event Block Length : 00 +[059h 0089 1] PM1 Control Block Length : 00 +[05Ah 0090 1] PM2 Control Block Length : 00 +[05Bh 0091 1] PM Timer Block Length : 00 +[05Ch 0092 1] GPE0 Block Length : 00 +[05Dh 0093 1] GPE1 Block Length : 00 +[05Eh 0094 1] GPE1 Base Offset : 00 +[05Fh 0095 1] _CST Support : 00 +[060h 0096 2] C2 Latency : 0000 +[062h 0098 2] C3 Latency : 0000 +[064h 0100 2] CPU Cache Size : 0000 +[066h 0102 2] Cache Flush Stride : 0000 +[068h 0104 1] Duty Cycle Offset : 00 +[069h 0105 1] Duty Cycle Width : 00 +[06Ah 0106 1] RTC Day Alarm Index : 00 +[06Bh 0107 1] RTC Month Alarm Index : 00 +[06Ch 0108 1] RTC Century Index : 00 +[06Dh 0109 2] Boot Flags (decoded below) : 0000 + Legacy Devices Supported (V2) : 0 + 8042 Present on ports 60/64 (V2) : 0 + VGA Not Present (V4) : 0 + MSI Not Supported (V4) : 0 + PCIe ASPM Not Supported (V4) : 0 + CMOS RTC Not Present (V5) : 0 +[06Fh 0111 1] Reserved : 00 +[070h 0112 4] Flags (decoded below) : 00100000 + WBINVD instruction is operational (V1) : 0 + WBINVD flushes all caches (V1) : 0 + All CPUs support C1 (V1) : 0 + C2 works on MP system (V1) : 0 + Control Method Power Button (V1) : 0 + Control Method Sleep Button (V1) : 0 + RTC wake not in fixed reg space (V1) : 0 + RTC can wake system from S4 (V1) : 0 + 32-bit PM Timer (V1) : 0 + Docking Supported (V1) : 0 + Reset Register Supported (V2) : 0 + Sealed Case (V3) : 0 + Headless - No Video (V3) : 0 + Use native instr after SLP_TYPx (V3) : 0 + PCIEXP_WAK Bits Supported (V4) : 0 + Use Platform Timer (V4) : 0 + RTC_STS valid on S4 wake (V4) : 0 + Remote Power-on capable (V4) : 0 + Use APIC Cluster Model (V4) : 0 + Use APIC Physical Destination Mode (V4) : 0 + Hardware Reduced (V5) : 1 + Low Power S0 Idle (V5) : 0 + +[074h 0116 12] Reset Register : [Generic Address Structure] +[074h 0116 1] Space ID : 00 [SystemMemory] +[075h 0117 1] Bit Width : 00 +[076h 0118 1] Bit Offset : 00 +[077h 0119 1] Encoded Access Width : 00 [Undefined/Legacy] +[078h 0120 8] Address : 0000000000000000 + +[080h 0128 1] Value to cause reset : 00 +[081h 0129 2] ARM Flags (decoded below) : 0003 + PSCI Compliant : 1 + Must use HVC for PSCI : 1 + +[083h 0131 1] FADT Minor Revision : 01 +[084h 0132 8] FACS Address : 0000000000000000 +[08Ch 0140 8] DSDT Address : 0000000000000000 +[094h 0148 12] PM1A Event Block : [Generic Address Structure] +[094h 0148 1] Space ID : 00 [SystemMemory] +[095h 0149 1] Bit Width : 00 +[096h 0150 1] Bit Offset : 00 +[097h 0151 1] Encoded Access Width : 00 [Undefined/Legacy] +[098h 0152 8] Address : 0000000000000000 + +[0A0h 0160 12] PM1B Event Block : [Generic Address Structure] +[0A0h 0160 1] Space ID : 00 [SystemMemory] +[0A1h 0161 1] Bit Width : 00 +[0A2h 0162 1] Bit Offset : 00 +[0A3h 0163 1] Encoded Access Width : 00 [Undefined/Legacy] +[0A4h 0164 8] Address : 0000000000000000 + +[0ACh 0172 12] PM1A Control Block : [Generic Address Structure] +[0ACh 0172 1] Space ID : 00 [SystemMemory] +[0ADh 0173 1] Bit Width : 00 +[0AEh 0174 1] Bit Offset : 00 +[0AFh 0175 1] Encoded Access Width : 00 [Undefined/Legacy] +[0B0h 0176 8] Address : 0000000000000000 + +[0B8h 0184 12] PM1B Control Block : [Generic Address Structure] +[0B8h 0184 1] Space ID : 00 [SystemMemory] +[0B9h 0185 1] Bit Width : 00 +[0BAh 0186 1] Bit Offset : 00 +[0BBh 0187 1] Encoded Access Width : 00 [Undefined/Legacy] +[0BCh 0188 8] Address : 0000000000000000 + +[0C4h 0196 12] PM2 Control Block : [Generic Address Structure] +[0C4h 0196 1] Space ID : 00 [SystemMemory] +[0C5h 0197 1] Bit Width : 00 +[0C6h 0198 1] Bit Offset : 00 +[0C7h 0199 1] Encoded Access Width : 00 [Undefined/Legacy] +[0C8h 0200 8] Address : 0000000000000000 + +[0D0h 0208 12] PM Timer Block : [Generic Address Structure] +[0D0h 0208 1] Space ID : 00 [SystemMemory] +[0D1h 0209 1] Bit Width : 00 +[0D2h 0210 1] Bit Offset : 00 +[0D3h 0211 1] Encoded Access Width : 00 [Undefined/Legacy] +[0D4h 0212 8] Address : 0000000000000000 + +[0DCh 0220 12] GPE0 Block : [Generic Address Structure] +[0DCh 0220 1] Space ID : 00 [SystemMemory] +[0DDh 0221 1] Bit Width : 00 +[0DEh 0222 1] Bit Offset : 00 +[0DFh 0223 1] Encoded Access Width : 00 [Undefined/Legacy] +[0E0h 0224 8] Address : 0000000000000000 + +[0E8h 0232 12] GPE1 Block : [Generic Address Structure] +[0E8h 0232 1] Space ID : 00 [SystemMemory] +[0E9h 0233 1] Bit Width : 00 +[0EAh 0234 1] Bit Offset : 00 +[0EBh 0235 1] Encoded Access Width : 00 [Undefined/Legacy] +[0ECh 0236 8] Address : 0000000000000000 + + +[0F4h 0244 12] Sleep Control Register : [Generic Address Structure] +[0F4h 0244 1] Space ID : 00 [SystemMemory] +[0F5h 0245 1] Bit Width : 00 +[0F6h 0246 1] Bit Offset : 00 +[0F7h 0247 1] Encoded Access Width : 00 [Undefined/Legacy] +[0F8h 0248 8] Address : 0000000000000000 + +[100h 0256 12] Sleep Status Register : [Generic Address Structure] +[100h 0256 1] Space ID : 00 [SystemMemory] +[101h 0257 1] Bit Width : 00 +[102h 0258 1] Bit Offset : 00 +[103h 0259 1] Encoded Access Width : 00 [Undefined/Legacy] +[104h 0260 8] Address : 0000000000000000 + +/**** ACPI table terminates in the middle of a data structure! (dump table) */ + +Raw Table Data: Length 268 (0x10C) + + 0000: 46 41 43 50 0C 01 00 00 05 BB 42 4F 43 48 53 20 // FACP......BOCHS + 0010: 42 58 50 43 46 41 43 50 01 00 00 00 42 58 50 43 // BXPCFACP....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0070: 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0080: 00 03 00 01 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0100: 00 00 00 00 00 00 00 00 00 00 00 00 // ............ diff --git a/tests/data/acpi/virt/FACP.memhp.dsl b/tests/data/acpi/virt/FACP.memhp.dsl new file mode 100644 index 0000000000..0083b95ef7 --- /dev/null +++ b/tests/data/acpi/virt/FACP.memhp.dsl @@ -0,0 +1,196 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/virt/FACP.memhp, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [FACP] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "FACP" [Fixed ACPI Description Table (FADT)] +[004h 0004 4] Table Length : 0000010C +[008h 0008 1] Revision : 05 +[009h 0009 1] Checksum : BB +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCFACP" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] FACS Address : 00000000 +[028h 0040 4] DSDT Address : 00000000 +[02Ch 0044 1] Model : 00 +[02Dh 0045 1] PM Profile : 00 [Unspecified] +[02Eh 0046 2] SCI Interrupt : 0000 +[030h 0048 4] SMI Command Port : 00000000 +[034h 0052 1] ACPI Enable Value : 00 +[035h 0053 1] ACPI Disable Value : 00 +[036h 0054 1] S4BIOS Command : 00 +[037h 0055 1] P-State Control : 00 +[038h 0056 4] PM1A Event Block Address : 00000000 +[03Ch 0060 4] PM1B Event Block Address : 00000000 +[040h 0064 4] PM1A Control Block Address : 00000000 +[044h 0068 4] PM1B Control Block Address : 00000000 +[048h 0072 4] PM2 Control Block Address : 00000000 +[04Ch 0076 4] PM Timer Block Address : 00000000 +[050h 0080 4] GPE0 Block Address : 00000000 +[054h 0084 4] GPE1 Block Address : 00000000 +[058h 0088 1] PM1 Event Block Length : 00 +[059h 0089 1] PM1 Control Block Length : 00 +[05Ah 0090 1] PM2 Control Block Length : 00 +[05Bh 0091 1] PM Timer Block Length : 00 +[05Ch 0092 1] GPE0 Block Length : 00 +[05Dh 0093 1] GPE1 Block Length : 00 +[05Eh 0094 1] GPE1 Base Offset : 00 +[05Fh 0095 1] _CST Support : 00 +[060h 0096 2] C2 Latency : 0000 +[062h 0098 2] C3 Latency : 0000 +[064h 0100 2] CPU Cache Size : 0000 +[066h 0102 2] Cache Flush Stride : 0000 +[068h 0104 1] Duty Cycle Offset : 00 +[069h 0105 1] Duty Cycle Width : 00 +[06Ah 0106 1] RTC Day Alarm Index : 00 +[06Bh 0107 1] RTC Month Alarm Index : 00 +[06Ch 0108 1] RTC Century Index : 00 +[06Dh 0109 2] Boot Flags (decoded below) : 0000 + Legacy Devices Supported (V2) : 0 + 8042 Present on ports 60/64 (V2) : 0 + VGA Not Present (V4) : 0 + MSI Not Supported (V4) : 0 + PCIe ASPM Not Supported (V4) : 0 + CMOS RTC Not Present (V5) : 0 +[06Fh 0111 1] Reserved : 00 +[070h 0112 4] Flags (decoded below) : 00100000 + WBINVD instruction is operational (V1) : 0 + WBINVD flushes all caches (V1) : 0 + All CPUs support C1 (V1) : 0 + C2 works on MP system (V1) : 0 + Control Method Power Button (V1) : 0 + Control Method Sleep Button (V1) : 0 + RTC wake not in fixed reg space (V1) : 0 + RTC can wake system from S4 (V1) : 0 + 32-bit PM Timer (V1) : 0 + Docking Supported (V1) : 0 + Reset Register Supported (V2) : 0 + Sealed Case (V3) : 0 + Headless - No Video (V3) : 0 + Use native instr after SLP_TYPx (V3) : 0 + PCIEXP_WAK Bits Supported (V4) : 0 + Use Platform Timer (V4) : 0 + RTC_STS valid on S4 wake (V4) : 0 + Remote Power-on capable (V4) : 0 + Use APIC Cluster Model (V4) : 0 + Use APIC Physical Destination Mode (V4) : 0 + Hardware Reduced (V5) : 1 + Low Power S0 Idle (V5) : 0 + +[074h 0116 12] Reset Register : [Generic Address Structure] +[074h 0116 1] Space ID : 00 [SystemMemory] +[075h 0117 1] Bit Width : 00 +[076h 0118 1] Bit Offset : 00 +[077h 0119 1] Encoded Access Width : 00 [Undefined/Legacy] +[078h 0120 8] Address : 0000000000000000 + +[080h 0128 1] Value to cause reset : 00 +[081h 0129 2] ARM Flags (decoded below) : 0003 + PSCI Compliant : 1 + Must use HVC for PSCI : 1 + +[083h 0131 1] FADT Minor Revision : 01 +[084h 0132 8] FACS Address : 0000000000000000 +[08Ch 0140 8] DSDT Address : 0000000000000000 +[094h 0148 12] PM1A Event Block : [Generic Address Structure] +[094h 0148 1] Space ID : 00 [SystemMemory] +[095h 0149 1] Bit Width : 00 +[096h 0150 1] Bit Offset : 00 +[097h 0151 1] Encoded Access Width : 00 [Undefined/Legacy] +[098h 0152 8] Address : 0000000000000000 + +[0A0h 0160 12] PM1B Event Block : [Generic Address Structure] +[0A0h 0160 1] Space ID : 00 [SystemMemory] +[0A1h 0161 1] Bit Width : 00 +[0A2h 0162 1] Bit Offset : 00 +[0A3h 0163 1] Encoded Access Width : 00 [Undefined/Legacy] +[0A4h 0164 8] Address : 0000000000000000 + +[0ACh 0172 12] PM1A Control Block : [Generic Address Structure] +[0ACh 0172 1] Space ID : 00 [SystemMemory] +[0ADh 0173 1] Bit Width : 00 +[0AEh 0174 1] Bit Offset : 00 +[0AFh 0175 1] Encoded Access Width : 00 [Undefined/Legacy] +[0B0h 0176 8] Address : 0000000000000000 + +[0B8h 0184 12] PM1B Control Block : [Generic Address Structure] +[0B8h 0184 1] Space ID : 00 [SystemMemory] +[0B9h 0185 1] Bit Width : 00 +[0BAh 0186 1] Bit Offset : 00 +[0BBh 0187 1] Encoded Access Width : 00 [Undefined/Legacy] +[0BCh 0188 8] Address : 0000000000000000 + +[0C4h 0196 12] PM2 Control Block : [Generic Address Structure] +[0C4h 0196 1] Space ID : 00 [SystemMemory] +[0C5h 0197 1] Bit Width : 00 +[0C6h 0198 1] Bit Offset : 00 +[0C7h 0199 1] Encoded Access Width : 00 [Undefined/Legacy] +[0C8h 0200 8] Address : 0000000000000000 + +[0D0h 0208 12] PM Timer Block : [Generic Address Structure] +[0D0h 0208 1] Space ID : 00 [SystemMemory] +[0D1h 0209 1] Bit Width : 00 +[0D2h 0210 1] Bit Offset : 00 +[0D3h 0211 1] Encoded Access Width : 00 [Undefined/Legacy] +[0D4h 0212 8] Address : 0000000000000000 + +[0DCh 0220 12] GPE0 Block : [Generic Address Structure] +[0DCh 0220 1] Space ID : 00 [SystemMemory] +[0DDh 0221 1] Bit Width : 00 +[0DEh 0222 1] Bit Offset : 00 +[0DFh 0223 1] Encoded Access Width : 00 [Undefined/Legacy] +[0E0h 0224 8] Address : 0000000000000000 + +[0E8h 0232 12] GPE1 Block : [Generic Address Structure] +[0E8h 0232 1] Space ID : 00 [SystemMemory] +[0E9h 0233 1] Bit Width : 00 +[0EAh 0234 1] Bit Offset : 00 +[0EBh 0235 1] Encoded Access Width : 00 [Undefined/Legacy] +[0ECh 0236 8] Address : 0000000000000000 + + +[0F4h 0244 12] Sleep Control Register : [Generic Address Structure] +[0F4h 0244 1] Space ID : 00 [SystemMemory] +[0F5h 0245 1] Bit Width : 00 +[0F6h 0246 1] Bit Offset : 00 +[0F7h 0247 1] Encoded Access Width : 00 [Undefined/Legacy] +[0F8h 0248 8] Address : 0000000000000000 + +[100h 0256 12] Sleep Status Register : [Generic Address Structure] +[100h 0256 1] Space ID : 00 [SystemMemory] +[101h 0257 1] Bit Width : 00 +[102h 0258 1] Bit Offset : 00 +[103h 0259 1] Encoded Access Width : 00 [Undefined/Legacy] +[104h 0260 8] Address : 0000000000000000 + +/**** ACPI table terminates in the middle of a data structure! (dump table) */ + +Raw Table Data: Length 268 (0x10C) + + 0000: 46 41 43 50 0C 01 00 00 05 BB 42 4F 43 48 53 20 // FACP......BOCHS + 0010: 42 58 50 43 46 41 43 50 01 00 00 00 42 58 50 43 // BXPCFACP....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0070: 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0080: 00 03 00 01 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0100: 00 00 00 00 00 00 00 00 00 00 00 00 // ............ diff --git a/tests/data/acpi/virt/FACP.numamem.dsl b/tests/data/acpi/virt/FACP.numamem.dsl new file mode 100644 index 0000000000..aee15bd4c2 --- /dev/null +++ b/tests/data/acpi/virt/FACP.numamem.dsl @@ -0,0 +1,196 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/virt/FACP.numamem, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [FACP] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "FACP" [Fixed ACPI Description Table (FADT)] +[004h 0004 4] Table Length : 0000010C +[008h 0008 1] Revision : 05 +[009h 0009 1] Checksum : BB +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCFACP" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] FACS Address : 00000000 +[028h 0040 4] DSDT Address : 00000000 +[02Ch 0044 1] Model : 00 +[02Dh 0045 1] PM Profile : 00 [Unspecified] +[02Eh 0046 2] SCI Interrupt : 0000 +[030h 0048 4] SMI Command Port : 00000000 +[034h 0052 1] ACPI Enable Value : 00 +[035h 0053 1] ACPI Disable Value : 00 +[036h 0054 1] S4BIOS Command : 00 +[037h 0055 1] P-State Control : 00 +[038h 0056 4] PM1A Event Block Address : 00000000 +[03Ch 0060 4] PM1B Event Block Address : 00000000 +[040h 0064 4] PM1A Control Block Address : 00000000 +[044h 0068 4] PM1B Control Block Address : 00000000 +[048h 0072 4] PM2 Control Block Address : 00000000 +[04Ch 0076 4] PM Timer Block Address : 00000000 +[050h 0080 4] GPE0 Block Address : 00000000 +[054h 0084 4] GPE1 Block Address : 00000000 +[058h 0088 1] PM1 Event Block Length : 00 +[059h 0089 1] PM1 Control Block Length : 00 +[05Ah 0090 1] PM2 Control Block Length : 00 +[05Bh 0091 1] PM Timer Block Length : 00 +[05Ch 0092 1] GPE0 Block Length : 00 +[05Dh 0093 1] GPE1 Block Length : 00 +[05Eh 0094 1] GPE1 Base Offset : 00 +[05Fh 0095 1] _CST Support : 00 +[060h 0096 2] C2 Latency : 0000 +[062h 0098 2] C3 Latency : 0000 +[064h 0100 2] CPU Cache Size : 0000 +[066h 0102 2] Cache Flush Stride : 0000 +[068h 0104 1] Duty Cycle Offset : 00 +[069h 0105 1] Duty Cycle Width : 00 +[06Ah 0106 1] RTC Day Alarm Index : 00 +[06Bh 0107 1] RTC Month Alarm Index : 00 +[06Ch 0108 1] RTC Century Index : 00 +[06Dh 0109 2] Boot Flags (decoded below) : 0000 + Legacy Devices Supported (V2) : 0 + 8042 Present on ports 60/64 (V2) : 0 + VGA Not Present (V4) : 0 + MSI Not Supported (V4) : 0 + PCIe ASPM Not Supported (V4) : 0 + CMOS RTC Not Present (V5) : 0 +[06Fh 0111 1] Reserved : 00 +[070h 0112 4] Flags (decoded below) : 00100000 + WBINVD instruction is operational (V1) : 0 + WBINVD flushes all caches (V1) : 0 + All CPUs support C1 (V1) : 0 + C2 works on MP system (V1) : 0 + Control Method Power Button (V1) : 0 + Control Method Sleep Button (V1) : 0 + RTC wake not in fixed reg space (V1) : 0 + RTC can wake system from S4 (V1) : 0 + 32-bit PM Timer (V1) : 0 + Docking Supported (V1) : 0 + Reset Register Supported (V2) : 0 + Sealed Case (V3) : 0 + Headless - No Video (V3) : 0 + Use native instr after SLP_TYPx (V3) : 0 + PCIEXP_WAK Bits Supported (V4) : 0 + Use Platform Timer (V4) : 0 + RTC_STS valid on S4 wake (V4) : 0 + Remote Power-on capable (V4) : 0 + Use APIC Cluster Model (V4) : 0 + Use APIC Physical Destination Mode (V4) : 0 + Hardware Reduced (V5) : 1 + Low Power S0 Idle (V5) : 0 + +[074h 0116 12] Reset Register : [Generic Address Structure] +[074h 0116 1] Space ID : 00 [SystemMemory] +[075h 0117 1] Bit Width : 00 +[076h 0118 1] Bit Offset : 00 +[077h 0119 1] Encoded Access Width : 00 [Undefined/Legacy] +[078h 0120 8] Address : 0000000000000000 + +[080h 0128 1] Value to cause reset : 00 +[081h 0129 2] ARM Flags (decoded below) : 0003 + PSCI Compliant : 1 + Must use HVC for PSCI : 1 + +[083h 0131 1] FADT Minor Revision : 01 +[084h 0132 8] FACS Address : 0000000000000000 +[08Ch 0140 8] DSDT Address : 0000000000000000 +[094h 0148 12] PM1A Event Block : [Generic Address Structure] +[094h 0148 1] Space ID : 00 [SystemMemory] +[095h 0149 1] Bit Width : 00 +[096h 0150 1] Bit Offset : 00 +[097h 0151 1] Encoded Access Width : 00 [Undefined/Legacy] +[098h 0152 8] Address : 0000000000000000 + +[0A0h 0160 12] PM1B Event Block : [Generic Address Structure] +[0A0h 0160 1] Space ID : 00 [SystemMemory] +[0A1h 0161 1] Bit Width : 00 +[0A2h 0162 1] Bit Offset : 00 +[0A3h 0163 1] Encoded Access Width : 00 [Undefined/Legacy] +[0A4h 0164 8] Address : 0000000000000000 + +[0ACh 0172 12] PM1A Control Block : [Generic Address Structure] +[0ACh 0172 1] Space ID : 00 [SystemMemory] +[0ADh 0173 1] Bit Width : 00 +[0AEh 0174 1] Bit Offset : 00 +[0AFh 0175 1] Encoded Access Width : 00 [Undefined/Legacy] +[0B0h 0176 8] Address : 0000000000000000 + +[0B8h 0184 12] PM1B Control Block : [Generic Address Structure] +[0B8h 0184 1] Space ID : 00 [SystemMemory] +[0B9h 0185 1] Bit Width : 00 +[0BAh 0186 1] Bit Offset : 00 +[0BBh 0187 1] Encoded Access Width : 00 [Undefined/Legacy] +[0BCh 0188 8] Address : 0000000000000000 + +[0C4h 0196 12] PM2 Control Block : [Generic Address Structure] +[0C4h 0196 1] Space ID : 00 [SystemMemory] +[0C5h 0197 1] Bit Width : 00 +[0C6h 0198 1] Bit Offset : 00 +[0C7h 0199 1] Encoded Access Width : 00 [Undefined/Legacy] +[0C8h 0200 8] Address : 0000000000000000 + +[0D0h 0208 12] PM Timer Block : [Generic Address Structure] +[0D0h 0208 1] Space ID : 00 [SystemMemory] +[0D1h 0209 1] Bit Width : 00 +[0D2h 0210 1] Bit Offset : 00 +[0D3h 0211 1] Encoded Access Width : 00 [Undefined/Legacy] +[0D4h 0212 8] Address : 0000000000000000 + +[0DCh 0220 12] GPE0 Block : [Generic Address Structure] +[0DCh 0220 1] Space ID : 00 [SystemMemory] +[0DDh 0221 1] Bit Width : 00 +[0DEh 0222 1] Bit Offset : 00 +[0DFh 0223 1] Encoded Access Width : 00 [Undefined/Legacy] +[0E0h 0224 8] Address : 0000000000000000 + +[0E8h 0232 12] GPE1 Block : [Generic Address Structure] +[0E8h 0232 1] Space ID : 00 [SystemMemory] +[0E9h 0233 1] Bit Width : 00 +[0EAh 0234 1] Bit Offset : 00 +[0EBh 0235 1] Encoded Access Width : 00 [Undefined/Legacy] +[0ECh 0236 8] Address : 0000000000000000 + + +[0F4h 0244 12] Sleep Control Register : [Generic Address Structure] +[0F4h 0244 1] Space ID : 00 [SystemMemory] +[0F5h 0245 1] Bit Width : 00 +[0F6h 0246 1] Bit Offset : 00 +[0F7h 0247 1] Encoded Access Width : 00 [Undefined/Legacy] +[0F8h 0248 8] Address : 0000000000000000 + +[100h 0256 12] Sleep Status Register : [Generic Address Structure] +[100h 0256 1] Space ID : 00 [SystemMemory] +[101h 0257 1] Bit Width : 00 +[102h 0258 1] Bit Offset : 00 +[103h 0259 1] Encoded Access Width : 00 [Undefined/Legacy] +[104h 0260 8] Address : 0000000000000000 + +/**** ACPI table terminates in the middle of a data structure! (dump table) */ + +Raw Table Data: Length 268 (0x10C) + + 0000: 46 41 43 50 0C 01 00 00 05 BB 42 4F 43 48 53 20 // FACP......BOCHS + 0010: 42 58 50 43 46 41 43 50 01 00 00 00 42 58 50 43 // BXPCFACP....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0070: 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0080: 00 03 00 01 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0100: 00 00 00 00 00 00 00 00 00 00 00 00 // ............ diff --git a/tests/data/acpi/virt/GTDT.dsl b/tests/data/acpi/virt/GTDT.dsl new file mode 100644 index 0000000000..1ab06dd3c2 --- /dev/null +++ b/tests/data/acpi/virt/GTDT.dsl @@ -0,0 +1,61 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/virt/GTDT.numamem, Mon Sep 28 17:24:38 2020 + * + * ACPI Data Table [GTDT] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "GTDT" [Generic Timer Description Table] +[004h 0004 4] Table Length : 00000060 +[008h 0008 1] Revision : 02 +[009h 0009 1] Checksum : D9 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCGTDT" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 8] Counter Block Address : 0000000000000000 +[02Ch 0044 4] Reserved : 00000000 + +[030h 0048 4] Secure EL1 Interrupt : 0000001D +[034h 0052 4] EL1 Flags (decoded below) : 00000000 + Trigger Mode : 0 + Polarity : 0 + Always On : 0 + +[038h 0056 4] Non-Secure EL1 Interrupt : 0000001E +[03Ch 0060 4] NEL1 Flags (decoded below) : 00000004 + Trigger Mode : 0 + Polarity : 0 + Always On : 1 + +[040h 0064 4] Virtual Timer Interrupt : 0000001B +[044h 0068 4] VT Flags (decoded below) : 00000000 + Trigger Mode : 0 + Polarity : 0 + Always On : 0 + +[048h 0072 4] Non-Secure EL2 Interrupt : 0000001A +[04Ch 0076 4] NEL2 Flags (decoded below) : 00000000 + Trigger Mode : 0 + Polarity : 0 + Always On : 0 +[050h 0080 8] Counter Read Block Address : 0000000000000000 + +[058h 0088 4] Platform Timer Count : 00000000 +[05Ch 0092 4] Platform Timer Offset : 00000000 + +Raw Table Data: Length 96 (0x60) + + 0000: 47 54 44 54 60 00 00 00 02 D9 42 4F 43 48 53 20 // GTDT`.....BOCHS + 0010: 42 58 50 43 47 54 44 54 01 00 00 00 42 58 50 43 // BXPCGTDT....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0030: 1D 00 00 00 00 00 00 00 1E 00 00 00 04 00 00 00 // ................ + 0040: 1B 00 00 00 00 00 00 00 1A 00 00 00 00 00 00 00 // ................ + 0050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ diff --git a/tests/data/acpi/virt/GTDT.memhp.dsl b/tests/data/acpi/virt/GTDT.memhp.dsl new file mode 100644 index 0000000000..d78bb092c5 --- /dev/null +++ b/tests/data/acpi/virt/GTDT.memhp.dsl @@ -0,0 +1,61 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/virt/GTDT.memhp, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [GTDT] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "GTDT" [Generic Timer Description Table] +[004h 0004 4] Table Length : 00000060 +[008h 0008 1] Revision : 02 +[009h 0009 1] Checksum : D9 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCGTDT" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 8] Counter Block Address : 0000000000000000 +[02Ch 0044 4] Reserved : 00000000 + +[030h 0048 4] Secure EL1 Interrupt : 0000001D +[034h 0052 4] EL1 Flags (decoded below) : 00000000 + Trigger Mode : 0 + Polarity : 0 + Always On : 0 + +[038h 0056 4] Non-Secure EL1 Interrupt : 0000001E +[03Ch 0060 4] NEL1 Flags (decoded below) : 00000004 + Trigger Mode : 0 + Polarity : 0 + Always On : 1 + +[040h 0064 4] Virtual Timer Interrupt : 0000001B +[044h 0068 4] VT Flags (decoded below) : 00000000 + Trigger Mode : 0 + Polarity : 0 + Always On : 0 + +[048h 0072 4] Non-Secure EL2 Interrupt : 0000001A +[04Ch 0076 4] NEL2 Flags (decoded below) : 00000000 + Trigger Mode : 0 + Polarity : 0 + Always On : 0 +[050h 0080 8] Counter Read Block Address : 0000000000000000 + +[058h 0088 4] Platform Timer Count : 00000000 +[05Ch 0092 4] Platform Timer Offset : 00000000 + +Raw Table Data: Length 96 (0x60) + + 0000: 47 54 44 54 60 00 00 00 02 D9 42 4F 43 48 53 20 // GTDT`.....BOCHS + 0010: 42 58 50 43 47 54 44 54 01 00 00 00 42 58 50 43 // BXPCGTDT....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0030: 1D 00 00 00 00 00 00 00 1E 00 00 00 04 00 00 00 // ................ + 0040: 1B 00 00 00 00 00 00 00 1A 00 00 00 00 00 00 00 // ................ + 0050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ diff --git a/tests/data/acpi/virt/GTDT.numamem.dsl b/tests/data/acpi/virt/GTDT.numamem.dsl new file mode 100644 index 0000000000..5c3c2a83db --- /dev/null +++ b/tests/data/acpi/virt/GTDT.numamem.dsl @@ -0,0 +1,61 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/virt/GTDT.numamem, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [GTDT] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "GTDT" [Generic Timer Description Table] +[004h 0004 4] Table Length : 00000060 +[008h 0008 1] Revision : 02 +[009h 0009 1] Checksum : D9 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCGTDT" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 8] Counter Block Address : 0000000000000000 +[02Ch 0044 4] Reserved : 00000000 + +[030h 0048 4] Secure EL1 Interrupt : 0000001D +[034h 0052 4] EL1 Flags (decoded below) : 00000000 + Trigger Mode : 0 + Polarity : 0 + Always On : 0 + +[038h 0056 4] Non-Secure EL1 Interrupt : 0000001E +[03Ch 0060 4] NEL1 Flags (decoded below) : 00000004 + Trigger Mode : 0 + Polarity : 0 + Always On : 1 + +[040h 0064 4] Virtual Timer Interrupt : 0000001B +[044h 0068 4] VT Flags (decoded below) : 00000000 + Trigger Mode : 0 + Polarity : 0 + Always On : 0 + +[048h 0072 4] Non-Secure EL2 Interrupt : 0000001A +[04Ch 0076 4] NEL2 Flags (decoded below) : 00000000 + Trigger Mode : 0 + Polarity : 0 + Always On : 0 +[050h 0080 8] Counter Read Block Address : 0000000000000000 + +[058h 0088 4] Platform Timer Count : 00000000 +[05Ch 0092 4] Platform Timer Offset : 00000000 + +Raw Table Data: Length 96 (0x60) + + 0000: 47 54 44 54 60 00 00 00 02 D9 42 4F 43 48 53 20 // GTDT`.....BOCHS + 0010: 42 58 50 43 47 54 44 54 01 00 00 00 42 58 50 43 // BXPCGTDT....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0030: 1D 00 00 00 00 00 00 00 1E 00 00 00 04 00 00 00 // ................ + 0040: 1B 00 00 00 00 00 00 00 1A 00 00 00 00 00 00 00 // ................ + 0050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ diff --git a/tests/data/acpi/virt/MCFG.dsl b/tests/data/acpi/virt/MCFG.dsl new file mode 100644 index 0000000000..f09c86f487 --- /dev/null +++ b/tests/data/acpi/virt/MCFG.dsl @@ -0,0 +1,36 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/virt/MCFG.numamem, Mon Sep 28 17:24:38 2020 + * + * ACPI Data Table [MCFG] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "MCFG" [Memory Mapped Configuration table] +[004h 0004 4] Table Length : 0000003C +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 4F +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCMCFG" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 8] Reserved : 0000000000000000 + +[02Ch 0044 8] Base Address : 0000004010000000 +[034h 0052 2] Segment Group Number : 0000 +[036h 0054 1] Start Bus Number : 00 +[037h 0055 1] End Bus Number : FF +[038h 0056 4] Reserved : 00000000 + +Raw Table Data: Length 60 (0x3C) + + 0000: 4D 43 46 47 3C 00 00 00 01 4F 42 4F 43 48 53 20 // MCFG<....OBOCHS + 0010: 42 58 50 43 4D 43 46 47 01 00 00 00 42 58 50 43 // BXPCMCFG....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 // ................ + 0030: 40 00 00 00 00 00 00 FF 00 00 00 00 // @........... diff --git a/tests/data/acpi/virt/MCFG.memhp.dsl b/tests/data/acpi/virt/MCFG.memhp.dsl new file mode 100644 index 0000000000..b03a6384e8 --- /dev/null +++ b/tests/data/acpi/virt/MCFG.memhp.dsl @@ -0,0 +1,36 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/virt/MCFG.memhp, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [MCFG] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "MCFG" [Memory Mapped Configuration table] +[004h 0004 4] Table Length : 0000003C +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 4F +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCMCFG" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 8] Reserved : 0000000000000000 + +[02Ch 0044 8] Base Address : 0000004010000000 +[034h 0052 2] Segment Group Number : 0000 +[036h 0054 1] Start Bus Number : 00 +[037h 0055 1] End Bus Number : FF +[038h 0056 4] Reserved : 00000000 + +Raw Table Data: Length 60 (0x3C) + + 0000: 4D 43 46 47 3C 00 00 00 01 4F 42 4F 43 48 53 20 // MCFG<....OBOCHS + 0010: 42 58 50 43 4D 43 46 47 01 00 00 00 42 58 50 43 // BXPCMCFG....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 // ................ + 0030: 40 00 00 00 00 00 00 FF 00 00 00 00 // @........... diff --git a/tests/data/acpi/virt/MCFG.numamem.dsl b/tests/data/acpi/virt/MCFG.numamem.dsl new file mode 100644 index 0000000000..303df803f5 --- /dev/null +++ b/tests/data/acpi/virt/MCFG.numamem.dsl @@ -0,0 +1,36 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/virt/MCFG.numamem, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [MCFG] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "MCFG" [Memory Mapped Configuration table] +[004h 0004 4] Table Length : 0000003C +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 4F +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCMCFG" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 8] Reserved : 0000000000000000 + +[02Ch 0044 8] Base Address : 0000004010000000 +[034h 0052 2] Segment Group Number : 0000 +[036h 0054 1] Start Bus Number : 00 +[037h 0055 1] End Bus Number : FF +[038h 0056 4] Reserved : 00000000 + +Raw Table Data: Length 60 (0x3C) + + 0000: 4D 43 46 47 3C 00 00 00 01 4F 42 4F 43 48 53 20 // MCFG<....OBOCHS + 0010: 42 58 50 43 4D 43 46 47 01 00 00 00 42 58 50 43 // BXPCMCFG....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 // ................ + 0030: 40 00 00 00 00 00 00 FF 00 00 00 00 // @........... diff --git a/tests/data/acpi/virt/NFIT.dsl b/tests/data/acpi/virt/NFIT.dsl new file mode 100644 index 0000000000..947ba0f6a4 --- /dev/null +++ b/tests/data/acpi/virt/NFIT.dsl @@ -0,0 +1,103 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/virt/NFIT.memhp, Mon Sep 28 17:24:38 2020 + * + * ACPI Data Table [NFIT] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "NFIT" [NVDIMM Firmware Interface Table] +[004h 0004 4] Table Length : 000000E0 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : D1 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCNFIT" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Reserved : 00000000 + +[028h 0040 2] Subtable Type : 0000 [System Physical Address Range] +[02Ah 0042 2] Length : 0038 + +[02Ch 0044 2] Range Index : 0004 +[02Eh 0046 2] Flags (decoded below) : 0003 + Add/Online Operation Only : 1 + Proximity Domain Valid : 1 +[030h 0048 4] Reserved : 00000000 +[034h 0052 4] Proximity Domain : 00000001 +[038h 0056 16] Region Type GUID : 66F0D379-B4F3-4074-AC43-0D3318B78CDB +[048h 0072 8] Address Range Base : 0000000088000000 +[050h 0080 8] Address Range Length : 0000000008000000 +[058h 0088 8] Memory Map Attribute : 0000000000008008 + +[060h 0096 2] Subtable Type : 0001 [Memory Range Map] +[062h 0098 2] Length : 0030 + +[064h 0100 4] Device Handle : 00000002 +[068h 0104 2] Physical Id : 0000 +[06Ah 0106 2] Region Id : 0000 +[06Ch 0108 2] Range Index : 0004 +[06Eh 0110 2] Control Region Index : 0005 +[070h 0112 8] Region Size : 0000000008000000 +[078h 0120 8] Region Offset : 0000000000000000 +[080h 0128 8] Address Region Base : 0000000000000000 +[088h 0136 2] Interleave Index : 0000 +[08Ah 0138 2] Interleave Ways : 0001 +[08Ch 0140 2] Flags : 0000 + Save to device failed : 0 + Restore from device failed : 0 + Platform flush failed : 0 + Device not armed : 0 + Health events observed : 0 + Health events enabled : 0 + Mapping failed : 0 +[08Eh 0142 2] Reserved : 0000 + +[090h 0144 2] Subtable Type : 0004 [NVDIMM Control Region] +[092h 0146 2] Length : 0050 + +[094h 0148 2] Region Index : 0005 +[096h 0150 2] Vendor Id : 8086 +[098h 0152 2] Device Id : 0001 +[09Ah 0154 2] Revision Id : 0001 +[09Ch 0156 2] Subsystem Vendor Id : 0000 +[09Eh 0158 2] Subsystem Device Id : 0000 +[0A0h 0160 2] Subsystem Revision Id : 0000 +[0A2h 0162 1] Valid Fields : 00 +[0A3h 0163 1] Manufacturing Location : 00 +[0A4h 0164 2] Manufacturing Date : 0000 +[0A6h 0166 2] Reserved : 0000 +[0A8h 0168 4] Serial Number : 00123457 +[0ACh 0172 2] Code : 0301 +[0AEh 0174 2] Window Count : 0000 +[0B0h 0176 8] Window Size : 0000000000000000 +[0B8h 0184 8] Command Offset : 0000000000000000 +[0C0h 0192 8] Command Size : 0000000000000000 +[0C8h 0200 8] Status Offset : 0000000000000000 +[0D0h 0208 8] Status Size : 0000000000000000 +[0D8h 0216 2] Flags : 0000 + Windows buffered : 0 +[0DAh 0218 6] Reserved1 : 000000000000 + +Raw Table Data: Length 224 (0xE0) + + 0000: 4E 46 49 54 E0 00 00 00 01 D1 42 4F 43 48 53 20 // NFIT......BOCHS + 0010: 42 58 50 43 4E 46 49 54 01 00 00 00 42 58 50 43 // BXPCNFIT....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 38 00 04 00 03 00 // ..........8..... + 0030: 00 00 00 00 01 00 00 00 79 D3 F0 66 F3 B4 74 40 // ........y..f..t@ + 0040: AC 43 0D 33 18 B7 8C DB 00 00 00 88 00 00 00 00 // .C.3............ + 0050: 00 00 00 08 00 00 00 00 08 80 00 00 00 00 00 00 // ................ + 0060: 01 00 30 00 02 00 00 00 00 00 00 00 04 00 05 00 // ..0............. + 0070: 00 00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0080: 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 // ................ + 0090: 04 00 50 00 05 00 86 80 01 00 01 00 00 00 00 00 // ..P............. + 00A0: 00 00 00 00 00 00 00 00 57 34 12 00 01 03 00 00 // ........W4...... + 00B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ diff --git a/tests/data/acpi/virt/NFIT.memhp.dsl b/tests/data/acpi/virt/NFIT.memhp.dsl new file mode 100644 index 0000000000..84511bff96 --- /dev/null +++ b/tests/data/acpi/virt/NFIT.memhp.dsl @@ -0,0 +1,103 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/virt/NFIT.memhp, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [NFIT] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "NFIT" [NVDIMM Firmware Interface Table] +[004h 0004 4] Table Length : 000000E0 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : D1 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCNFIT" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Reserved : 00000000 + +[028h 0040 2] Subtable Type : 0000 [System Physical Address Range] +[02Ah 0042 2] Length : 0038 + +[02Ch 0044 2] Range Index : 0004 +[02Eh 0046 2] Flags (decoded below) : 0003 + Add/Online Operation Only : 1 + Proximity Domain Valid : 1 +[030h 0048 4] Reserved : 00000000 +[034h 0052 4] Proximity Domain : 00000001 +[038h 0056 16] Region Type GUID : 66F0D379-B4F3-4074-AC43-0D3318B78CDB +[048h 0072 8] Address Range Base : 0000000088000000 +[050h 0080 8] Address Range Length : 0000000008000000 +[058h 0088 8] Memory Map Attribute : 0000000000008008 + +[060h 0096 2] Subtable Type : 0001 [Memory Range Map] +[062h 0098 2] Length : 0030 + +[064h 0100 4] Device Handle : 00000002 +[068h 0104 2] Physical Id : 0000 +[06Ah 0106 2] Region Id : 0000 +[06Ch 0108 2] Range Index : 0004 +[06Eh 0110 2] Control Region Index : 0005 +[070h 0112 8] Region Size : 0000000008000000 +[078h 0120 8] Region Offset : 0000000000000000 +[080h 0128 8] Address Region Base : 0000000000000000 +[088h 0136 2] Interleave Index : 0000 +[08Ah 0138 2] Interleave Ways : 0001 +[08Ch 0140 2] Flags : 0000 + Save to device failed : 0 + Restore from device failed : 0 + Platform flush failed : 0 + Device not armed : 0 + Health events observed : 0 + Health events enabled : 0 + Mapping failed : 0 +[08Eh 0142 2] Reserved : 0000 + +[090h 0144 2] Subtable Type : 0004 [NVDIMM Control Region] +[092h 0146 2] Length : 0050 + +[094h 0148 2] Region Index : 0005 +[096h 0150 2] Vendor Id : 8086 +[098h 0152 2] Device Id : 0001 +[09Ah 0154 2] Revision Id : 0001 +[09Ch 0156 2] Subsystem Vendor Id : 0000 +[09Eh 0158 2] Subsystem Device Id : 0000 +[0A0h 0160 2] Subsystem Revision Id : 0000 +[0A2h 0162 1] Valid Fields : 00 +[0A3h 0163 1] Manufacturing Location : 00 +[0A4h 0164 2] Manufacturing Date : 0000 +[0A6h 0166 2] Reserved : 0000 +[0A8h 0168 4] Serial Number : 00123457 +[0ACh 0172 2] Code : 0301 +[0AEh 0174 2] Window Count : 0000 +[0B0h 0176 8] Window Size : 0000000000000000 +[0B8h 0184 8] Command Offset : 0000000000000000 +[0C0h 0192 8] Command Size : 0000000000000000 +[0C8h 0200 8] Status Offset : 0000000000000000 +[0D0h 0208 8] Status Size : 0000000000000000 +[0D8h 0216 2] Flags : 0000 + Windows buffered : 0 +[0DAh 0218 6] Reserved1 : 000000000000 + +Raw Table Data: Length 224 (0xE0) + + 0000: 4E 46 49 54 E0 00 00 00 01 D1 42 4F 43 48 53 20 // NFIT......BOCHS + 0010: 42 58 50 43 4E 46 49 54 01 00 00 00 42 58 50 43 // BXPCNFIT....BXPC + 0020: 01 00 00 00 00 00 00 00 00 00 38 00 04 00 03 00 // ..........8..... + 0030: 00 00 00 00 01 00 00 00 79 D3 F0 66 F3 B4 74 40 // ........y..f..t@ + 0040: AC 43 0D 33 18 B7 8C DB 00 00 00 88 00 00 00 00 // .C.3............ + 0050: 00 00 00 08 00 00 00 00 08 80 00 00 00 00 00 00 // ................ + 0060: 01 00 30 00 02 00 00 00 00 00 00 00 04 00 05 00 // ..0............. + 0070: 00 00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0080: 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 // ................ + 0090: 04 00 50 00 05 00 86 80 01 00 01 00 00 00 00 00 // ..P............. + 00A0: 00 00 00 00 00 00 00 00 57 34 12 00 01 03 00 00 // ........W4...... + 00B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ + 00D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................ diff --git a/tests/data/acpi/virt/SLIT.dsl b/tests/data/acpi/virt/SLIT.dsl new file mode 100644 index 0000000000..34276fca96 --- /dev/null +++ b/tests/data/acpi/virt/SLIT.dsl @@ -0,0 +1,31 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/virt/SLIT.memhp, Mon Sep 28 17:24:38 2020 + * + * ACPI Data Table [SLIT] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "SLIT" [System Locality Information Table] +[004h 0004 4] Table Length : 00000030 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 2C +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCSLIT" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 8] Localities : 0000000000000002 +[02Ch 0044 2] Locality 0 : 0A 15 +[02Eh 0046 2] Locality 1 : 15 0A + +Raw Table Data: Length 48 (0x30) + + 0000: 53 4C 49 54 30 00 00 00 01 2C 42 4F 43 48 53 20 // SLIT0....,BOCHS + 0010: 42 58 50 43 53 4C 49 54 01 00 00 00 42 58 50 43 // BXPCSLIT....BXPC + 0020: 01 00 00 00 02 00 00 00 00 00 00 00 0A 15 15 0A // ................ diff --git a/tests/data/acpi/virt/SLIT.memhp.dsl b/tests/data/acpi/virt/SLIT.memhp.dsl new file mode 100644 index 0000000000..a17f948af2 --- /dev/null +++ b/tests/data/acpi/virt/SLIT.memhp.dsl @@ -0,0 +1,31 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/virt/SLIT.memhp, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [SLIT] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "SLIT" [System Locality Information Table] +[004h 0004 4] Table Length : 00000030 +[008h 0008 1] Revision : 01 +[009h 0009 1] Checksum : 2C +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCSLIT" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 8] Localities : 0000000000000002 +[02Ch 0044 2] Locality 0 : 0A 15 +[02Eh 0046 2] Locality 1 : 15 0A + +Raw Table Data: Length 48 (0x30) + + 0000: 53 4C 49 54 30 00 00 00 01 2C 42 4F 43 48 53 20 // SLIT0....,BOCHS + 0010: 42 58 50 43 53 4C 49 54 01 00 00 00 42 58 50 43 // BXPCSLIT....BXPC + 0020: 01 00 00 00 02 00 00 00 00 00 00 00 0A 15 15 0A // ................ diff --git a/tests/data/acpi/virt/SPCR.dsl b/tests/data/acpi/virt/SPCR.dsl new file mode 100644 index 0000000000..3c271412cf --- /dev/null +++ b/tests/data/acpi/virt/SPCR.dsl @@ -0,0 +1,57 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/virt/SPCR.numamem, Mon Sep 28 17:24:38 2020 + * + * ACPI Data Table [SPCR] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "SPCR" [Serial Port Console Redirection table] +[004h 0004 4] Table Length : 00000050 +[008h 0008 1] Revision : 02 +[009h 0009 1] Checksum : 13 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCSPCR" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 1] Interface Type : 03 +[025h 0037 3] Reserved : 000000 + +[028h 0040 12] Serial Port Register : [Generic Address Structure] +[028h 0040 1] Space ID : 00 [SystemMemory] +[029h 0041 1] Bit Width : 08 +[02Ah 0042 1] Bit Offset : 00 +[02Bh 0043 1] Encoded Access Width : 01 [Byte Access:8] +[02Ch 0044 8] Address : 0000000009000000 + +[034h 0052 1] Interrupt Type : 08 +[035h 0053 1] PCAT-compatible IRQ : 00 +[036h 0054 4] Interrupt : 00000021 +[03Ah 0058 1] Baud Rate : 03 +[03Bh 0059 1] Parity : 00 +[03Ch 0060 1] Stop Bits : 01 +[03Dh 0061 1] Flow Control : 02 +[03Eh 0062 1] Terminal Type : 00 +[04Ch 0076 1] Reserved : 00 +[040h 0064 2] PCI Device ID : FFFF +[042h 0066 2] PCI Vendor ID : FFFF +[044h 0068 1] PCI Bus : 00 +[045h 0069 1] PCI Device : 00 +[046h 0070 1] PCI Function : 00 +[047h 0071 4] PCI Flags : 00000000 +[04Bh 0075 1] PCI Segment : 00 +[04Ch 0076 4] Reserved : 00000000 + +Raw Table Data: Length 80 (0x50) + + 0000: 53 50 43 52 50 00 00 00 02 13 42 4F 43 48 53 20 // SPCRP.....BOCHS + 0010: 42 58 50 43 53 50 43 52 01 00 00 00 42 58 50 43 // BXPCSPCR....BXPC + 0020: 01 00 00 00 03 00 00 00 00 08 00 01 00 00 00 09 // ................ + 0030: 00 00 00 00 08 00 21 00 00 00 03 00 01 02 00 00 // ......!......... + 0040: FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 // ................ diff --git a/tests/data/acpi/virt/SPCR.memhp.dsl b/tests/data/acpi/virt/SPCR.memhp.dsl new file mode 100644 index 0000000000..81e00457cc --- /dev/null +++ b/tests/data/acpi/virt/SPCR.memhp.dsl @@ -0,0 +1,57 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/virt/SPCR.memhp, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [SPCR] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "SPCR" [Serial Port Console Redirection table] +[004h 0004 4] Table Length : 00000050 +[008h 0008 1] Revision : 02 +[009h 0009 1] Checksum : 13 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCSPCR" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 1] Interface Type : 03 +[025h 0037 3] Reserved : 000000 + +[028h 0040 12] Serial Port Register : [Generic Address Structure] +[028h 0040 1] Space ID : 00 [SystemMemory] +[029h 0041 1] Bit Width : 08 +[02Ah 0042 1] Bit Offset : 00 +[02Bh 0043 1] Encoded Access Width : 01 [Byte Access:8] +[02Ch 0044 8] Address : 0000000009000000 + +[034h 0052 1] Interrupt Type : 08 +[035h 0053 1] PCAT-compatible IRQ : 00 +[036h 0054 4] Interrupt : 00000021 +[03Ah 0058 1] Baud Rate : 03 +[03Bh 0059 1] Parity : 00 +[03Ch 0060 1] Stop Bits : 01 +[03Dh 0061 1] Flow Control : 02 +[03Eh 0062 1] Terminal Type : 00 +[04Ch 0076 1] Reserved : 00 +[040h 0064 2] PCI Device ID : FFFF +[042h 0066 2] PCI Vendor ID : FFFF +[044h 0068 1] PCI Bus : 00 +[045h 0069 1] PCI Device : 00 +[046h 0070 1] PCI Function : 00 +[047h 0071 4] PCI Flags : 00000000 +[04Bh 0075 1] PCI Segment : 00 +[04Ch 0076 4] Reserved : 00000000 + +Raw Table Data: Length 80 (0x50) + + 0000: 53 50 43 52 50 00 00 00 02 13 42 4F 43 48 53 20 // SPCRP.....BOCHS + 0010: 42 58 50 43 53 50 43 52 01 00 00 00 42 58 50 43 // BXPCSPCR....BXPC + 0020: 01 00 00 00 03 00 00 00 00 08 00 01 00 00 00 09 // ................ + 0030: 00 00 00 00 08 00 21 00 00 00 03 00 01 02 00 00 // ......!......... + 0040: FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 // ................ diff --git a/tests/data/acpi/virt/SPCR.numamem.dsl b/tests/data/acpi/virt/SPCR.numamem.dsl new file mode 100644 index 0000000000..faf6729797 --- /dev/null +++ b/tests/data/acpi/virt/SPCR.numamem.dsl @@ -0,0 +1,57 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/virt/SPCR.numamem, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [SPCR] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "SPCR" [Serial Port Console Redirection table] +[004h 0004 4] Table Length : 00000050 +[008h 0008 1] Revision : 02 +[009h 0009 1] Checksum : 13 +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCSPCR" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 1] Interface Type : 03 +[025h 0037 3] Reserved : 000000 + +[028h 0040 12] Serial Port Register : [Generic Address Structure] +[028h 0040 1] Space ID : 00 [SystemMemory] +[029h 0041 1] Bit Width : 08 +[02Ah 0042 1] Bit Offset : 00 +[02Bh 0043 1] Encoded Access Width : 01 [Byte Access:8] +[02Ch 0044 8] Address : 0000000009000000 + +[034h 0052 1] Interrupt Type : 08 +[035h 0053 1] PCAT-compatible IRQ : 00 +[036h 0054 4] Interrupt : 00000021 +[03Ah 0058 1] Baud Rate : 03 +[03Bh 0059 1] Parity : 00 +[03Ch 0060 1] Stop Bits : 01 +[03Dh 0061 1] Flow Control : 02 +[03Eh 0062 1] Terminal Type : 00 +[04Ch 0076 1] Reserved : 00 +[040h 0064 2] PCI Device ID : FFFF +[042h 0066 2] PCI Vendor ID : FFFF +[044h 0068 1] PCI Bus : 00 +[045h 0069 1] PCI Device : 00 +[046h 0070 1] PCI Function : 00 +[047h 0071 4] PCI Flags : 00000000 +[04Bh 0075 1] PCI Segment : 00 +[04Ch 0076 4] Reserved : 00000000 + +Raw Table Data: Length 80 (0x50) + + 0000: 53 50 43 52 50 00 00 00 02 13 42 4F 43 48 53 20 // SPCRP.....BOCHS + 0010: 42 58 50 43 53 50 43 52 01 00 00 00 42 58 50 43 // BXPCSPCR....BXPC + 0020: 01 00 00 00 03 00 00 00 00 08 00 01 00 00 00 09 // ................ + 0030: 00 00 00 00 08 00 21 00 00 00 03 00 01 02 00 00 // ......!......... + 0040: FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 // ................ diff --git a/tests/data/acpi/virt/SRAT.dsl b/tests/data/acpi/virt/SRAT.dsl new file mode 100644 index 0000000000..f267aabc67 --- /dev/null +++ b/tests/data/acpi/virt/SRAT.dsl @@ -0,0 +1,57 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/virt/SRAT.numamem, Mon Sep 28 17:24:38 2020 + * + * ACPI Data Table [SRAT] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "SRAT" [System Resource Affinity Table] +[004h 0004 4] Table Length : 0000006A +[008h 0008 1] Revision : 03 +[009h 0009 1] Checksum : AB +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCSRAT" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Table Revision : 00000001 +[028h 0040 8] Reserved : 0000000000000000 + +[030h 0048 1] Subtable Type : 03 [GICC Affinity] +[031h 0049 1] Length : 12 + +[032h 0050 4] Proximity Domain : 00000000 +[036h 0054 4] Acpi Processor UID : 00000000 +[03Ah 0058 4] Flags (decoded below) : 00000001 + Enabled : 1 +[03Eh 0062 4] Clock Domain : 00000000 + +[042h 0066 1] Subtable Type : 01 [Memory Affinity] +[043h 0067 1] Length : 28 + +[044h 0068 4] Proximity Domain : 00000000 +[048h 0072 2] Reserved1 : 0000 +[04Ah 0074 8] Base Address : 0000000040000000 +[052h 0082 8] Address Length : 0000000008000000 +[05Ah 0090 4] Reserved2 : 00000000 +[05Eh 0094 4] Flags (decoded below) : 00000001 + Enabled : 1 + Hot Pluggable : 0 + Non-Volatile : 0 +[062h 0098 8] Reserved3 : 0000000000000000 + +Raw Table Data: Length 106 (0x6A) + + 0000: 53 52 41 54 6A 00 00 00 03 AB 42 4F 43 48 53 20 // SRATj.....BOCHS + 0010: 42 58 50 43 53 52 41 54 01 00 00 00 42 58 50 43 // BXPCSRAT....BXPC + 0020: 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0030: 03 12 00 00 00 00 00 00 00 00 01 00 00 00 00 00 // ................ + 0040: 00 00 01 28 00 00 00 00 00 00 00 00 00 40 00 00 // ...(.........@.. + 0050: 00 00 00 00 00 08 00 00 00 00 00 00 00 00 01 00 // ................ + 0060: 00 00 00 00 00 00 00 00 00 00 // .......... diff --git a/tests/data/acpi/virt/SRAT.memhp.dsl b/tests/data/acpi/virt/SRAT.memhp.dsl new file mode 100644 index 0000000000..3f311e6be0 --- /dev/null +++ b/tests/data/acpi/virt/SRAT.memhp.dsl @@ -0,0 +1,107 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/virt/SRAT.memhp, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [SRAT] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "SRAT" [System Resource Affinity Table] +[004h 0004 4] Table Length : 000000E2 +[008h 0008 1] Revision : 03 +[009h 0009 1] Checksum : 5C +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCSRAT" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Table Revision : 00000001 +[028h 0040 8] Reserved : 0000000000000000 + +[030h 0048 1] Subtable Type : 03 [GICC Affinity] +[031h 0049 1] Length : 12 + +[032h 0050 4] Proximity Domain : 00000000 +[036h 0054 4] Acpi Processor UID : 00000000 +[03Ah 0058 4] Flags (decoded below) : 00000001 + Enabled : 1 +[03Eh 0062 4] Clock Domain : 00000000 + +[042h 0066 1] Subtable Type : 01 [Memory Affinity] +[043h 0067 1] Length : 28 + +[044h 0068 4] Proximity Domain : 00000000 +[048h 0072 2] Reserved1 : 0000 +[04Ah 0074 8] Base Address : 0000000040000000 +[052h 0082 8] Address Length : 0000000008000000 +[05Ah 0090 4] Reserved2 : 00000000 +[05Eh 0094 4] Flags (decoded below) : 00000001 + Enabled : 1 + Hot Pluggable : 0 + Non-Volatile : 0 +[062h 0098 8] Reserved3 : 0000000000000000 + +[06Ah 0106 1] Subtable Type : 01 [Memory Affinity] +[06Bh 0107 1] Length : 28 + +[06Ch 0108 4] Proximity Domain : 00000001 +[070h 0112 2] Reserved1 : 0000 +[072h 0114 8] Base Address : 0000000048000000 +[07Ah 0122 8] Address Length : 0000000008000000 +[082h 0130 4] Reserved2 : 00000000 +[086h 0134 4] Flags (decoded below) : 00000001 + Enabled : 1 + Hot Pluggable : 0 + Non-Volatile : 0 +[08Ah 0138 8] Reserved3 : 0000000000000000 + +[092h 0146 1] Subtable Type : 01 [Memory Affinity] +[093h 0147 1] Length : 28 + +[094h 0148 4] Proximity Domain : 00000001 +[098h 0152 2] Reserved1 : 0000 +[09Ah 0154 8] Base Address : 0000000088000000 +[0A2h 0162 8] Address Length : 0000000008000000 +[0AAh 0170 4] Reserved2 : 00000000 +[0AEh 0174 4] Flags (decoded below) : 00000005 + Enabled : 1 + Hot Pluggable : 0 + Non-Volatile : 1 +[0B2h 0178 8] Reserved3 : 0000000000000000 + +[0BAh 0186 1] Subtable Type : 01 [Memory Affinity] +[0BBh 0187 1] Length : 28 + +[0BCh 0188 4] Proximity Domain : 00000001 +[0C0h 0192 2] Reserved1 : 0000 +[0C2h 0194 8] Base Address : 0000000080000000 +[0CAh 0202 8] Address Length : 00000000F0000000 +[0D2h 0210 4] Reserved2 : 00000000 +[0D6h 0214 4] Flags (decoded below) : 00000003 + Enabled : 1 + Hot Pluggable : 1 + Non-Volatile : 0 +[0DAh 0218 8] Reserved3 : 0000000000000000 + +Raw Table Data: Length 226 (0xE2) + + 0000: 53 52 41 54 E2 00 00 00 03 5C 42 4F 43 48 53 20 // SRAT.....\BOCHS + 0010: 42 58 50 43 53 52 41 54 01 00 00 00 42 58 50 43 // BXPCSRAT....BXPC + 0020: 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0030: 03 12 00 00 00 00 00 00 00 00 01 00 00 00 00 00 // ................ + 0040: 00 00 01 28 00 00 00 00 00 00 00 00 00 40 00 00 // ...(.........@.. + 0050: 00 00 00 00 00 08 00 00 00 00 00 00 00 00 01 00 // ................ + 0060: 00 00 00 00 00 00 00 00 00 00 01 28 01 00 00 00 // ...........(.... + 0070: 00 00 00 00 00 48 00 00 00 00 00 00 00 08 00 00 // .....H.......... + 0080: 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 // ................ + 0090: 00 00 01 28 01 00 00 00 00 00 00 00 00 88 00 00 // ...(............ + 00A0: 00 00 00 00 00 08 00 00 00 00 00 00 00 00 05 00 // ................ + 00B0: 00 00 00 00 00 00 00 00 00 00 01 28 01 00 00 00 // ...........(.... + 00C0: 00 00 00 00 00 80 00 00 00 00 00 00 00 F0 00 00 // ................ + 00D0: 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 00 // ................ + 00E0: 00 00 // .. diff --git a/tests/data/acpi/virt/SRAT.numamem.dsl b/tests/data/acpi/virt/SRAT.numamem.dsl new file mode 100644 index 0000000000..b6e59b1af0 --- /dev/null +++ b/tests/data/acpi/virt/SRAT.numamem.dsl @@ -0,0 +1,57 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembly of tests/data/acpi/virt/SRAT.numamem, Tue Aug 4 11:14:15 2020 + * + * ACPI Data Table [SRAT] + * + * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue + */ + +[000h 0000 4] Signature : "SRAT" [System Resource Affinity Table] +[004h 0004 4] Table Length : 0000006A +[008h 0008 1] Revision : 03 +[009h 0009 1] Checksum : AB +[00Ah 0010 6] Oem ID : "BOCHS " +[010h 0016 8] Oem Table ID : "BXPCSRAT" +[018h 0024 4] Oem Revision : 00000001 +[01Ch 0028 4] Asl Compiler ID : "BXPC" +[020h 0032 4] Asl Compiler Revision : 00000001 + +[024h 0036 4] Table Revision : 00000001 +[028h 0040 8] Reserved : 0000000000000000 + +[030h 0048 1] Subtable Type : 03 [GICC Affinity] +[031h 0049 1] Length : 12 + +[032h 0050 4] Proximity Domain : 00000000 +[036h 0054 4] Acpi Processor UID : 00000000 +[03Ah 0058 4] Flags (decoded below) : 00000001 + Enabled : 1 +[03Eh 0062 4] Clock Domain : 00000000 + +[042h 0066 1] Subtable Type : 01 [Memory Affinity] +[043h 0067 1] Length : 28 + +[044h 0068 4] Proximity Domain : 00000000 +[048h 0072 2] Reserved1 : 0000 +[04Ah 0074 8] Base Address : 0000000040000000 +[052h 0082 8] Address Length : 0000000008000000 +[05Ah 0090 4] Reserved2 : 00000000 +[05Eh 0094 4] Flags (decoded below) : 00000001 + Enabled : 1 + Hot Pluggable : 0 + Non-Volatile : 0 +[062h 0098 8] Reserved3 : 0000000000000000 + +Raw Table Data: Length 106 (0x6A) + + 0000: 53 52 41 54 6A 00 00 00 03 AB 42 4F 43 48 53 20 // SRATj.....BOCHS + 0010: 42 58 50 43 53 52 41 54 01 00 00 00 42 58 50 43 // BXPCSRAT....BXPC + 0020: 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 // ................ + 0030: 03 12 00 00 00 00 00 00 00 00 01 00 00 00 00 00 // ................ + 0040: 00 00 01 28 00 00 00 00 00 00 00 00 00 40 00 00 // ...(.........@.. + 0050: 00 00 00 00 00 08 00 00 00 00 00 00 00 00 01 00 // ................ + 0060: 00 00 00 00 00 00 00 00 00 00 // .......... diff --git a/tests/data/acpi/virt/SSDT.dsl b/tests/data/acpi/virt/SSDT.dsl new file mode 100644 index 0000000000..cb220787b4 --- /dev/null +++ b/tests/data/acpi/virt/SSDT.dsl @@ -0,0 +1,205 @@ +/* + * Intel ACPI Component Architecture + * AML/ASL+ Disassembler version 20190509 (64-bit version) + * Copyright (c) 2000 - 2019 Intel Corporation + * + * Disassembling to symbolic ASL+ operators + * + * Disassembly of tests/data/acpi/virt/SSDT.memhp, Mon Sep 28 17:24:38 2020 + * + * Original Table Header: + * Signature "SSDT" + * Length 0x000002E0 (736) + * Revision 0x01 + * Checksum 0x3F + * OEM ID "BOCHS " + * OEM Table ID "NVDIMM" + * OEM Revision 0x00000001 (1) + * Compiler ID "BXPC" + * Compiler Version 0x00000001 (1) + */ +DefinitionBlock ("", "SSDT", 1, "BOCHS ", "NVDIMM", 0x00000001) +{ + Scope (\_SB) + { + Device (NVDR) + { + Name (_HID, "ACPI0012" /* NVDIMM Root Device */) // _HID: Hardware ID + Method (NCAL, 5, Serialized) + { + Local6 = MEMA /* \MEMA */ + OperationRegion (NPIO, SystemMemory, 0x09090000, 0x04) + OperationRegion (NRAM, SystemMemory, Local6, 0x1000) + Field (NPIO, DWordAcc, NoLock, Preserve) + { + NTFI, 32 + } + + Field (NRAM, DWordAcc, NoLock, Preserve) + { + HDLE, 32, + REVS, 32, + FUNC, 32, + FARG, 32672 + } + + Field (NRAM, DWordAcc, NoLock, Preserve) + { + RLEN, 32, + ODAT, 32736 + } + + If ((Arg4 == Zero)) + { + Local0 = ToUUID ("2f10e7a4-9e91-11e4-89d3-123b93f75cba") + } + ElseIf ((Arg4 == 0x00010000)) + { + Local0 = ToUUID ("648b9cf2-cda1-4312-8ad9-49c4af32bd62") + } + Else + { + Local0 = ToUUID ("4309ac30-0d11-11e4-9191-0800200c9a66") + } + + If (((Local6 == Zero) | (Arg0 != Local0))) + { + If ((Arg2 == Zero)) + { + Return (Buffer (One) + { + 0x00 // . + }) + } + + Return (Buffer (One) + { + 0x01 // . + }) + } + + HDLE = Arg4 + REVS = Arg1 + FUNC = Arg2 + If (((ObjectType (Arg3) == 0x04) & (SizeOf (Arg3) == One))) + { + Local2 = Arg3 [Zero] + Local3 = DerefOf (Local2) + FARG = Local3 + } + + NTFI = Local6 + Local1 = (RLEN - 0x04) + If ((Local1 < 0x08)) + { + Local2 = Zero + Name (TBUF, Buffer (One) + { + 0x00 // . + }) + Local7 = Buffer (Zero){} + While ((Local2 < Local1)) + { + TBUF [Zero] = DerefOf (ODAT [Local2]) + Concatenate (Local7, TBUF, Local7) + Local2++ + } + + Return (Local7) + } + + Local1 = (Local1 << 0x03) + CreateField (ODAT, Zero, Local1, OBUF) + Return (OBUF) /* \_SB_.NVDR.NCAL.OBUF */ + } + + Method (_DSM, 4, NotSerialized) // _DSM: Device-Specific Method + { + Return (NCAL (Arg0, Arg1, Arg2, Arg3, Zero)) + } + + Name (RSTA, Zero) + Method (RFIT, 1, Serialized) + { + Name (OFST, Zero) + OFST = Arg0 + Local0 = NCAL (ToUUID ("648b9cf2-cda1-4312-8ad9-49c4af32bd62"), One, One, Package (0x01) + { + OFST + }, 0x00010000) + CreateDWordField (Local0, Zero, STAU) + RSTA = STAU /* \_SB_.NVDR.RFIT.STAU */ + If ((Zero != STAU)) + { + Return (Buffer (Zero){}) + } + + Local1 = SizeOf (Local0) + Local1 -= 0x04 + If ((Local1 == Zero)) + { + Return (Buffer (Zero){}) + } + + CreateField (Local0, 0x20, (Local1 << 0x03), BUFF) + Return (BUFF) /* \_SB_.NVDR.RFIT.BUFF */ + } + + Method (_FIT, 0, Serialized) // _FIT: Firmware Interface Table + { + Local2 = Buffer (Zero){} + Local3 = Zero + While (One) + { + Local0 = RFIT (Local3) + Local1 = SizeOf (Local0) + If ((RSTA == 0x0100)) + { + Local2 = Buffer (Zero){} + Local3 = Zero + } + Else + { + If ((Local1 == Zero)) + { + Return (Local2) + } + + Local3 += Local1 + Concatenate (Local2, Local0, Local2) + } + } + } + + Device (NV00) + { + Name (_ADR, One) // _ADR: Address + Method (_DSM, 4, NotSerialized) // _DSM: Device-Specific Method + { + Return (NCAL (Arg0, Arg1, Arg2, Arg3, One)) + } + } + + Device (NV01) + { + Name (_ADR, 0x02) // _ADR: Address + Method (_DSM, 4, NotSerialized) // _DSM: Device-Specific Method + { + Return (NCAL (Arg0, Arg1, Arg2, Arg3, 0x02)) + } + } + + Device (NV02) + { + Name (_ADR, 0x03) // _ADR: Address + Method (_DSM, 4, NotSerialized) // _DSM: Device-Specific Method + { + Return (NCAL (Arg0, Arg1, Arg2, Arg3, 0x03)) + } + } + } + } + + Name (MEMA, 0x43D10000) +} + diff --git a/tests/data/uefi-boot-images/bios-tables-test.x86_64.iso.raw b/tests/data/uefi-boot-images/bios-tables-test.x86_64.iso.raw new file mode 100644 index 0000000000000000000000000000000000000000..bd43ba50a3b25bdf4108cf920a26acc93cc45555 GIT binary patch literal 425984 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 + * Paolo Bonzini + * Andreas Färber + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. + */ + +#include "qemu/osdep.h" + +#include +#include +#include + +#include "libqtest.h" +#include "qemu/cutils.h" +#include "qapi/error.h" +#include "qapi/qmp/json-parser.h" +#include "qapi/qmp/json-streamer.h" +#include "qapi/qmp/qdict.h" +#include "qapi/qmp/qjson.h" +#include "qapi/qmp/qlist.h" +#include "qapi/qmp/qstring.h" + +#define MAX_IRQ 256 +#define SOCKET_TIMEOUT 50 + +QTestState *global_qtest; + +struct QTestState +{ + int fd; + int qmp_fd; + bool irq_level[MAX_IRQ]; + GString *rx; + pid_t qemu_pid; /* our child QEMU process */ + bool big_endian; +}; + +static GHookList abrt_hooks; +static struct sigaction sigact_old; + +#define g_assert_no_errno(ret) do { \ + g_assert_cmpint(ret, !=, -1); \ +} while (0) + +static int qtest_query_target_endianness(QTestState *s); + +static int init_socket(const char *socket_path) +{ + struct sockaddr_un addr; + int sock; + int ret; + + sock = socket(PF_UNIX, SOCK_STREAM, 0); + g_assert_no_errno(sock); + + addr.sun_family = AF_UNIX; + snprintf(addr.sun_path, sizeof(addr.sun_path), "%s", socket_path); + qemu_set_cloexec(sock); + + do { + ret = bind(sock, (struct sockaddr *)&addr, sizeof(addr)); + } while (ret == -1 && errno == EINTR); + g_assert_no_errno(ret); + ret = listen(sock, 1); + g_assert_no_errno(ret); + + return sock; +} + +static int socket_accept(int sock) +{ + struct sockaddr_un addr; + socklen_t addrlen; + int ret; + struct timeval timeout = { .tv_sec = SOCKET_TIMEOUT, + .tv_usec = 0 }; + + setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (void *)&timeout, + sizeof(timeout)); + + do { + addrlen = sizeof(addr); + ret = accept(sock, (struct sockaddr *)&addr, &addrlen); + } while (ret == -1 && errno == EINTR); + if (ret == -1) { + fprintf(stderr, "%s failed: %s\n", __func__, strerror(errno)); + } + close(sock); + + return ret; +} + +static void kill_qemu(QTestState *s) +{ + int wstatus = 0; + + if (s->qemu_pid != -1) { + kill(s->qemu_pid, SIGTERM); + waitpid(s->qemu_pid, &wstatus, 0); + + if (WIFSIGNALED(wstatus)) { + assert(!WCOREDUMP(wstatus)); + } + } +} + +static void kill_qemu_hook_func(void *s) +{ + kill_qemu(s); +} + +static void sigabrt_handler(int signo) +{ + g_hook_list_invoke(&abrt_hooks, FALSE); +} + +static void setup_sigabrt_handler(void) +{ + struct sigaction sigact; + + /* Catch SIGABRT to clean up on g_assert() failure */ + sigact = (struct sigaction){ + .sa_handler = sigabrt_handler, + .sa_flags = SA_RESETHAND, + }; + sigemptyset(&sigact.sa_mask); + sigaction(SIGABRT, &sigact, &sigact_old); +} + +static void cleanup_sigabrt_handler(void) +{ + sigaction(SIGABRT, &sigact_old, NULL); +} + +void qtest_add_abrt_handler(GHookFunc fn, const void *data) +{ + GHook *hook; + + /* Only install SIGABRT handler once */ + if (!abrt_hooks.is_setup) { + g_hook_list_init(&abrt_hooks, sizeof(GHook)); + } + setup_sigabrt_handler(); + + hook = g_hook_alloc(&abrt_hooks); + hook->func = fn; + hook->data = (void *)data; + + g_hook_prepend(&abrt_hooks, hook); +} + +static const char *qtest_qemu_binary(void) +{ + const char *qemu_bin; + + qemu_bin = getenv("QTEST_QEMU_BINARY"); + if (!qemu_bin) { + fprintf(stderr, "Environment variable QTEST_QEMU_BINARY required\n"); + exit(1); + } + + return qemu_bin; +} + +QTestState *qtest_init_without_qmp_handshake(bool use_oob, + const char *extra_args) +{ + QTestState *s; + int sock, qmpsock, i; + gchar *socket_path; + gchar *qmp_socket_path; + gchar *command; + const char *qemu_binary = qtest_qemu_binary(); + + s = g_new(QTestState, 1); + + socket_path = g_strdup_printf("/tmp/qtest-%d.sock", getpid()); + qmp_socket_path = g_strdup_printf("/tmp/qtest-%d.qmp", getpid()); + + /* It's possible that if an earlier test run crashed it might + * have left a stale unix socket lying around. Delete any + * stale old socket to avoid spurious test failures with + * tests/libqtest.c:70:init_socket: assertion failed (ret != -1): (-1 != -1) + */ + unlink(socket_path); + unlink(qmp_socket_path); + + sock = init_socket(socket_path); + qmpsock = init_socket(qmp_socket_path); + + qtest_add_abrt_handler(kill_qemu_hook_func, s); + + s->qemu_pid = fork(); + if (s->qemu_pid == 0) { + setenv("QEMU_AUDIO_DRV", "none", true); + command = g_strdup_printf("exec %s " + "-qtest unix:%s,nowait " + "-qtest-log %s " + "-chardev socket,path=%s,nowait,id=char0 " + "-mon chardev=char0,mode=control%s " + "-machine accel=qtest " + "-display none " + "%s", qemu_binary, socket_path, + getenv("QTEST_LOG") ? "/dev/fd/2" : "/dev/null", + qmp_socket_path, use_oob ? ",x-oob=on" : "", + extra_args ?: ""); + execlp("/bin/sh", "sh", "-c", command, NULL); + exit(1); + } + + s->fd = socket_accept(sock); + if (s->fd >= 0) { + s->qmp_fd = socket_accept(qmpsock); + } + unlink(socket_path); + unlink(qmp_socket_path); + g_free(socket_path); + g_free(qmp_socket_path); + + g_assert(s->fd >= 0 && s->qmp_fd >= 0); + + s->rx = g_string_new(""); + for (i = 0; i < MAX_IRQ; i++) { + s->irq_level[i] = false; + } + + if (getenv("QTEST_STOP")) { + kill(s->qemu_pid, SIGSTOP); + } + + /* ask endianness of the target */ + + s->big_endian = qtest_query_target_endianness(s); + + return s; +} + +QTestState *qtest_init(const char *extra_args) +{ + QTestState *s = qtest_init_without_qmp_handshake(false, extra_args); + + /* Read the QMP greeting and then do the handshake */ + qtest_qmp_discard_response(s, ""); + qtest_qmp_discard_response(s, "{ 'execute': 'qmp_capabilities' }"); + + return s; +} + +QTestState *qtest_vstartf(const char *fmt, va_list ap) +{ + char *args = g_strdup_vprintf(fmt, ap); + QTestState *s; + + s = qtest_start(args); + g_free(args); + global_qtest = NULL; + return s; +} + +QTestState *qtest_startf(const char *fmt, ...) +{ + va_list ap; + QTestState *s; + + va_start(ap, fmt); + s = qtest_vstartf(fmt, ap); + va_end(ap); + return s; +} + +void qtest_quit(QTestState *s) +{ + g_hook_destroy_link(&abrt_hooks, g_hook_find_data(&abrt_hooks, TRUE, s)); + + /* Uninstall SIGABRT handler on last instance */ + cleanup_sigabrt_handler(); + + kill_qemu(s); + close(s->fd); + close(s->qmp_fd); + g_string_free(s->rx, true); + g_free(s); +} + +static void socket_send(int fd, const char *buf, size_t size) +{ + size_t offset; + + offset = 0; + while (offset < size) { + ssize_t len; + + len = write(fd, buf + offset, size - offset); + if (len == -1 && errno == EINTR) { + continue; + } + + g_assert_no_errno(len); + g_assert_cmpint(len, >, 0); + + offset += len; + } +} + +static void socket_sendf(int fd, const char *fmt, va_list ap) +{ + gchar *str = g_strdup_vprintf(fmt, ap); + size_t size = strlen(str); + + socket_send(fd, str, size); + g_free(str); +} + +static void GCC_FMT_ATTR(2, 3) qtest_sendf(QTestState *s, const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + socket_sendf(s->fd, fmt, ap); + va_end(ap); +} + +static GString *qtest_recv_line(QTestState *s) +{ + GString *line; + size_t offset; + char *eol; + + while ((eol = strchr(s->rx->str, '\n')) == NULL) { + ssize_t len; + char buffer[1024]; + + len = read(s->fd, buffer, sizeof(buffer)); + if (len == -1 && errno == EINTR) { + continue; + } + + if (len == -1 || len == 0) { + fprintf(stderr, "Broken pipe\n"); + exit(1); + } + + g_string_append_len(s->rx, buffer, len); + } + + offset = eol - s->rx->str; + line = g_string_new_len(s->rx->str, offset); + g_string_erase(s->rx, 0, offset + 1); + + return line; +} + +static gchar **qtest_rsp(QTestState *s, int expected_args) +{ + GString *line; + gchar **words; + int i; + +redo: + line = qtest_recv_line(s); + words = g_strsplit(line->str, " ", 0); + g_string_free(line, TRUE); + + if (strcmp(words[0], "IRQ") == 0) { + long irq; + int ret; + + g_assert(words[1] != NULL); + g_assert(words[2] != NULL); + + ret = qemu_strtol(words[2], NULL, 0, &irq); + g_assert(!ret); + g_assert_cmpint(irq, >=, 0); + g_assert_cmpint(irq, <, MAX_IRQ); + + if (strcmp(words[1], "raise") == 0) { + s->irq_level[irq] = true; + } else { + s->irq_level[irq] = false; + } + + g_strfreev(words); + goto redo; + } + + g_assert(words[0] != NULL); + g_assert_cmpstr(words[0], ==, "OK"); + + if (expected_args) { + for (i = 0; i < expected_args; i++) { + g_assert(words[i] != NULL); + } + } else { + g_strfreev(words); + } + + return words; +} + +static int qtest_query_target_endianness(QTestState *s) +{ + gchar **args; + int big_endian; + + qtest_sendf(s, "endianness\n"); + args = qtest_rsp(s, 1); + g_assert(strcmp(args[1], "big") == 0 || strcmp(args[1], "little") == 0); + big_endian = strcmp(args[1], "big") == 0; + g_strfreev(args); + + return big_endian; +} + +typedef struct { + JSONMessageParser parser; + QDict *response; +} QMPResponseParser; + +static void qmp_response(JSONMessageParser *parser, GQueue *tokens) +{ + QMPResponseParser *qmp = container_of(parser, QMPResponseParser, parser); + QObject *obj; + + obj = json_parser_parse(tokens, NULL); + if (!obj) { + fprintf(stderr, "QMP JSON response parsing failed\n"); + exit(1); + } + + g_assert(!qmp->response); + qmp->response = qobject_to(QDict, obj); + g_assert(qmp->response); +} + +QDict *qmp_fd_receive(int fd) +{ + QMPResponseParser qmp; + bool log = getenv("QTEST_LOG") != NULL; + + qmp.response = NULL; + json_message_parser_init(&qmp.parser, qmp_response); + while (!qmp.response) { + ssize_t len; + char c; + + len = read(fd, &c, 1); + if (len == -1 && errno == EINTR) { + continue; + } + + if (len == -1 || len == 0) { + fprintf(stderr, "Broken pipe\n"); + exit(1); + } + + if (log) { + len = write(2, &c, 1); + } + json_message_parser_feed(&qmp.parser, &c, 1); + } + json_message_parser_destroy(&qmp.parser); + + return qmp.response; +} + +QDict *qtest_qmp_receive(QTestState *s) +{ + return qmp_fd_receive(s->qmp_fd); +} + +/** + * Allow users to send a message without waiting for the reply, + * in the case that they choose to discard all replies up until + * a particular EVENT is received. + */ +void qmp_fd_sendv(int fd, const char *fmt, va_list ap) +{ + va_list ap_copy; + QObject *qobj; + + /* qobject_from_jsonv() silently eats leading 0xff as invalid + * JSON, but we want to test sending them over the wire to force + * resyncs */ + if (*fmt == '\377') { + socket_send(fd, fmt, 1); + fmt++; + } + + /* Going through qobject ensures we escape strings properly. + * This seemingly unnecessary copy is required in case va_list + * is an array type. + */ + va_copy(ap_copy, ap); + qobj = qobject_from_jsonv(fmt, &ap_copy, &error_abort); + va_end(ap_copy); + + /* No need to send anything for an empty QObject. */ + if (qobj) { + int log = getenv("QTEST_LOG") != NULL; + QString *qstr = qobject_to_json(qobj); + const char *str; + + /* + * BUG: QMP doesn't react to input until it sees a newline, an + * object, or an array. Work-around: give it a newline. + */ + qstring_append_chr(qstr, '\n'); + str = qstring_get_str(qstr); + + if (log) { + fprintf(stderr, "%s", str); + } + /* Send QMP request */ + socket_send(fd, str, qstring_get_length(qstr)); + + qobject_unref(qstr); + qobject_unref(qobj); + } +} + +void qtest_async_qmpv(QTestState *s, const char *fmt, va_list ap) +{ + qmp_fd_sendv(s->qmp_fd, fmt, ap); +} + +QDict *qmp_fdv(int fd, const char *fmt, va_list ap) +{ + qmp_fd_sendv(fd, fmt, ap); + + return qmp_fd_receive(fd); +} + +QDict *qtest_qmpv(QTestState *s, const char *fmt, va_list ap) +{ + qtest_async_qmpv(s, fmt, ap); + + /* Receive reply */ + return qtest_qmp_receive(s); +} + +QDict *qmp_fd(int fd, const char *fmt, ...) +{ + va_list ap; + QDict *response; + + va_start(ap, fmt); + response = qmp_fdv(fd, fmt, ap); + va_end(ap); + return response; +} + +void qmp_fd_send(int fd, const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + qmp_fd_sendv(fd, fmt, ap); + va_end(ap); +} + +QDict *qtest_qmp(QTestState *s, const char *fmt, ...) +{ + va_list ap; + QDict *response; + + va_start(ap, fmt); + response = qtest_qmpv(s, fmt, ap); + va_end(ap); + return response; +} + +void qtest_async_qmp(QTestState *s, const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + qtest_async_qmpv(s, fmt, ap); + va_end(ap); +} + +void qtest_qmpv_discard_response(QTestState *s, const char *fmt, va_list ap) +{ + QDict *response = qtest_qmpv(s, fmt, ap); + qobject_unref(response); +} + +void qtest_qmp_discard_response(QTestState *s, const char *fmt, ...) +{ + va_list ap; + QDict *response; + + va_start(ap, fmt); + response = qtest_qmpv(s, fmt, ap); + va_end(ap); + qobject_unref(response); +} + +QDict *qtest_qmp_eventwait_ref(QTestState *s, const char *event) +{ + QDict *response; + + for (;;) { + response = qtest_qmp_receive(s); + if ((qdict_haskey(response, "event")) && + (strcmp(qdict_get_str(response, "event"), event) == 0)) { + return response; + } + qobject_unref(response); + } +} + +void qtest_qmp_eventwait(QTestState *s, const char *event) +{ + QDict *response; + + response = qtest_qmp_eventwait_ref(s, event); + qobject_unref(response); +} + +char *qtest_hmpv(QTestState *s, const char *fmt, va_list ap) +{ + char *cmd; + QDict *resp; + char *ret; + + cmd = g_strdup_vprintf(fmt, ap); + resp = qtest_qmp(s, "{'execute': 'human-monitor-command'," + " 'arguments': {'command-line': %s}}", + cmd); + ret = g_strdup(qdict_get_try_str(resp, "return")); + while (ret == NULL && qdict_get_try_str(resp, "event")) { + /* Ignore asynchronous QMP events */ + qobject_unref(resp); + resp = qtest_qmp_receive(s); + ret = g_strdup(qdict_get_try_str(resp, "return")); + } + g_assert(ret); + qobject_unref(resp); + g_free(cmd); + return ret; +} + +char *qtest_hmp(QTestState *s, const char *fmt, ...) +{ + va_list ap; + char *ret; + + va_start(ap, fmt); + ret = qtest_hmpv(s, fmt, ap); + va_end(ap); + return ret; +} + +const char *qtest_get_arch(void) +{ + const char *qemu = qtest_qemu_binary(); + const char *end = strrchr(qemu, '/'); + + return end + strlen("/qemu-system-"); +} + +bool qtest_get_irq(QTestState *s, int num) +{ + /* dummy operation in order to make sure irq is up to date */ + qtest_inb(s, 0); + + return s->irq_level[num]; +} + +static int64_t qtest_clock_rsp(QTestState *s) +{ + gchar **words; + int64_t clock; + words = qtest_rsp(s, 2); + clock = g_ascii_strtoll(words[1], NULL, 0); + g_strfreev(words); + return clock; +} + +int64_t qtest_clock_step_next(QTestState *s) +{ + qtest_sendf(s, "clock_step\n"); + return qtest_clock_rsp(s); +} + +int64_t qtest_clock_step(QTestState *s, int64_t step) +{ + qtest_sendf(s, "clock_step %"PRIi64"\n", step); + return qtest_clock_rsp(s); +} + +int64_t qtest_clock_set(QTestState *s, int64_t val) +{ + qtest_sendf(s, "clock_set %"PRIi64"\n", val); + return qtest_clock_rsp(s); +} + +void qtest_irq_intercept_out(QTestState *s, const char *qom_path) +{ + qtest_sendf(s, "irq_intercept_out %s\n", qom_path); + qtest_rsp(s, 0); +} + +void qtest_irq_intercept_in(QTestState *s, const char *qom_path) +{ + qtest_sendf(s, "irq_intercept_in %s\n", qom_path); + qtest_rsp(s, 0); +} + +static void qtest_out(QTestState *s, const char *cmd, uint16_t addr, uint32_t value) +{ + qtest_sendf(s, "%s 0x%x 0x%x\n", cmd, addr, value); + qtest_rsp(s, 0); +} + +void qtest_outb(QTestState *s, uint16_t addr, uint8_t value) +{ + qtest_out(s, "outb", addr, value); +} + +void qtest_outw(QTestState *s, uint16_t addr, uint16_t value) +{ + qtest_out(s, "outw", addr, value); +} + +void qtest_outl(QTestState *s, uint16_t addr, uint32_t value) +{ + qtest_out(s, "outl", addr, value); +} + +static uint32_t qtest_in(QTestState *s, const char *cmd, uint16_t addr) +{ + gchar **args; + int ret; + unsigned long value; + + qtest_sendf(s, "%s 0x%x\n", cmd, addr); + args = qtest_rsp(s, 2); + ret = qemu_strtoul(args[1], NULL, 0, &value); + g_assert(!ret && value <= UINT32_MAX); + g_strfreev(args); + + return value; +} + +uint8_t qtest_inb(QTestState *s, uint16_t addr) +{ + return qtest_in(s, "inb", addr); +} + +uint16_t qtest_inw(QTestState *s, uint16_t addr) +{ + return qtest_in(s, "inw", addr); +} + +uint32_t qtest_inl(QTestState *s, uint16_t addr) +{ + return qtest_in(s, "inl", addr); +} + +static void qtest_write(QTestState *s, const char *cmd, uint64_t addr, + uint64_t value) +{ + qtest_sendf(s, "%s 0x%" PRIx64 " 0x%" PRIx64 "\n", cmd, addr, value); + qtest_rsp(s, 0); +} + +void qtest_writeb(QTestState *s, uint64_t addr, uint8_t value) +{ + qtest_write(s, "writeb", addr, value); +} + +void qtest_writew(QTestState *s, uint64_t addr, uint16_t value) +{ + qtest_write(s, "writew", addr, value); +} + +void qtest_writel(QTestState *s, uint64_t addr, uint32_t value) +{ + qtest_write(s, "writel", addr, value); +} + +void qtest_writeq(QTestState *s, uint64_t addr, uint64_t value) +{ + qtest_write(s, "writeq", addr, value); +} + +static uint64_t qtest_read(QTestState *s, const char *cmd, uint64_t addr) +{ + gchar **args; + int ret; + uint64_t value; + + qtest_sendf(s, "%s 0x%" PRIx64 "\n", cmd, addr); + args = qtest_rsp(s, 2); + ret = qemu_strtou64(args[1], NULL, 0, &value); + g_assert(!ret); + g_strfreev(args); + + return value; +} + +uint8_t qtest_readb(QTestState *s, uint64_t addr) +{ + return qtest_read(s, "readb", addr); +} + +uint16_t qtest_readw(QTestState *s, uint64_t addr) +{ + return qtest_read(s, "readw", addr); +} + +uint32_t qtest_readl(QTestState *s, uint64_t addr) +{ + return qtest_read(s, "readl", addr); +} + +uint64_t qtest_readq(QTestState *s, uint64_t addr) +{ + return qtest_read(s, "readq", addr); +} + +static int hex2nib(char ch) +{ + if (ch >= '0' && ch <= '9') { + return ch - '0'; + } else if (ch >= 'a' && ch <= 'f') { + return 10 + (ch - 'a'); + } else if (ch >= 'A' && ch <= 'F') { + return 10 + (ch - 'a'); + } else { + return -1; + } +} + +void qtest_memread(QTestState *s, uint64_t addr, void *data, size_t size) +{ + uint8_t *ptr = data; + gchar **args; + size_t i; + + if (!size) { + return; + } + + qtest_sendf(s, "read 0x%" PRIx64 " 0x%zx\n", addr, size); + args = qtest_rsp(s, 2); + + for (i = 0; i < size; i++) { + ptr[i] = hex2nib(args[1][2 + (i * 2)]) << 4; + ptr[i] |= hex2nib(args[1][2 + (i * 2) + 1]); + } + + g_strfreev(args); +} + +uint64_t qtest_rtas_call(QTestState *s, const char *name, + uint32_t nargs, uint64_t args, + uint32_t nret, uint64_t ret) +{ + qtest_sendf(s, "rtas %s %u 0x%"PRIx64" %u 0x%"PRIx64"\n", + name, nargs, args, nret, ret); + qtest_rsp(s, 0); + return 0; +} + +void qtest_add_func(const char *str, void (*fn)(void)) +{ + gchar *path = g_strdup_printf("/%s/%s", qtest_get_arch(), str); + g_test_add_func(path, fn); + g_free(path); +} + +void qtest_add_data_func_full(const char *str, void *data, + void (*fn)(const void *), + GDestroyNotify data_free_func) +{ + gchar *path = g_strdup_printf("/%s/%s", qtest_get_arch(), str); + g_test_add_data_func_full(path, data, fn, data_free_func); + g_free(path); +} + +void qtest_add_data_func(const char *str, const void *data, + void (*fn)(const void *)) +{ + gchar *path = g_strdup_printf("/%s/%s", qtest_get_arch(), str); + g_test_add_data_func(path, data, fn); + g_free(path); +} + +void qtest_bufwrite(QTestState *s, uint64_t addr, const void *data, size_t size) +{ + gchar *bdata; + + bdata = g_base64_encode(data, size); + qtest_sendf(s, "b64write 0x%" PRIx64 " 0x%zx ", addr, size); + socket_send(s->fd, bdata, strlen(bdata)); + socket_send(s->fd, "\n", 1); + qtest_rsp(s, 0); + g_free(bdata); +} + +void qtest_bufread(QTestState *s, uint64_t addr, void *data, size_t size) +{ + gchar **args; + size_t len; + + qtest_sendf(s, "b64read 0x%" PRIx64 " 0x%zx\n", addr, size); + args = qtest_rsp(s, 2); + + g_base64_decode_inplace(args[1], &len); + if (size != len) { + fprintf(stderr, "bufread: asked for %zu bytes but decoded %zu\n", + size, len); + len = MIN(len, size); + } + + memcpy(data, args[1], len); + g_strfreev(args); +} + +void qtest_memwrite(QTestState *s, uint64_t addr, const void *data, size_t size) +{ + const uint8_t *ptr = data; + size_t i; + char *enc; + + if (!size) { + return; + } + + enc = g_malloc(2 * size + 1); + + for (i = 0; i < size; i++) { + sprintf(&enc[i * 2], "%02x", ptr[i]); + } + + qtest_sendf(s, "write 0x%" PRIx64 " 0x%zx 0x%s\n", addr, size, enc); + qtest_rsp(s, 0); + g_free(enc); +} + +void qtest_memset(QTestState *s, uint64_t addr, uint8_t pattern, size_t size) +{ + qtest_sendf(s, "memset 0x%" PRIx64 " 0x%zx 0x%02x\n", addr, size, pattern); + qtest_rsp(s, 0); +} + +QDict *qmp(const char *fmt, ...) +{ + va_list ap; + QDict *response; + + va_start(ap, fmt); + response = qtest_qmpv(global_qtest, fmt, ap); + va_end(ap); + return response; +} + +void qmp_async(const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + qtest_async_qmpv(global_qtest, fmt, ap); + va_end(ap); +} + +void qmp_discard_response(const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + qtest_qmpv_discard_response(global_qtest, fmt, ap); + va_end(ap); +} +char *hmp(const char *fmt, ...) +{ + va_list ap; + char *ret; + + va_start(ap, fmt); + ret = qtest_hmpv(global_qtest, fmt, ap); + va_end(ap); + return ret; +} + +bool qtest_big_endian(QTestState *s) +{ + return s->big_endian; +} + +void qtest_cb_for_every_machine(void (*cb)(const char *machine)) +{ + QDict *response, *minfo; + QList *list; + const QListEntry *p; + QObject *qobj; + QString *qstr; + const char *mname; + + qtest_start("-machine none"); + response = qmp("{ 'execute': 'query-machines' }"); + g_assert(response); + list = qdict_get_qlist(response, "return"); + g_assert(list); + + for (p = qlist_first(list); p; p = qlist_next(p)) { + minfo = qobject_to(QDict, qlist_entry_obj(p)); + g_assert(minfo); + qobj = qdict_get(minfo, "name"); + g_assert(qobj); + qstr = qobject_to(QString, qobj); + g_assert(qstr); + mname = qstring_get_str(qstr); + cb(mname); + } + + qtest_end(); + qobject_unref(response); +} + +/* + * Generic hot-plugging test via the device_add QMP command. + */ +void qtest_qmp_device_add(const char *driver, const char *id, const char *fmt, + ...) +{ + QDict *response; + char *cmd, *opts = NULL; + va_list va; + + if (fmt) { + va_start(va, fmt); + opts = g_strdup_vprintf(fmt, va); + va_end(va); + } + + cmd = g_strdup_printf("{'execute': 'device_add'," + " 'arguments': { 'driver': '%s', 'id': '%s'%s%s }}", + driver, id, opts ? ", " : "", opts ? opts : ""); + g_free(opts); + + response = qmp(cmd); + g_free(cmd); + g_assert(response); + g_assert(!qdict_haskey(response, "event")); /* We don't expect any events */ + g_assert(!qdict_haskey(response, "error")); + qobject_unref(response); +} + +/* + * Generic hot-unplugging test via the device_del QMP command. + * Device deletion will get one response and one event. For example: + * + * {'execute': 'device_del','arguments': { 'id': 'scsi-hd'}} + * + * will get this one: + * + * {"timestamp": {"seconds": 1505289667, "microseconds": 569862}, + * "event": "DEVICE_DELETED", "data": {"device": "scsi-hd", + * "path": "/machine/peripheral/scsi-hd"}} + * + * and this one: + * + * {"return": {}} + * + * But the order of arrival may vary - so we've got to detect both. + */ +void qtest_qmp_device_del(const char *id) +{ + QDict *response1, *response2, *event = NULL; + char *cmd; + + cmd = g_strdup_printf("{'execute': 'device_del'," + " 'arguments': { 'id': '%s' }}", id); + response1 = qmp(cmd); + g_free(cmd); + g_assert(response1); + g_assert(!qdict_haskey(response1, "error")); + + response2 = qmp(""); + g_assert(response2); + g_assert(!qdict_haskey(response2, "error")); + + if (qdict_haskey(response1, "event")) { + event = response1; + } else if (qdict_haskey(response2, "event")) { + event = response2; + } + g_assert(event); + g_assert_cmpstr(qdict_get_str(event, "event"), ==, "DEVICE_DELETED"); + + qobject_unref(response1); + qobject_unref(response2); +} diff --git a/tests/qemu-iotests/core.12067 b/tests/qemu-iotests/core.12067 new file mode 100644 index 0000000000000000000000000000000000000000..0ddb68f76aacbf14f48ba13b2ce9d4d52fab0ebf GIT binary patch literal 22716416 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 z&5>9`^z%o{W~qP+SRg{EEPW`5* zw|hr3JH5N({Bd}mDvGvtrsv)F`?{y6r)L%b000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000_%ZXKAG6;# zoHIH(UO#7iX7-$!;qh~BtdGzA7?uD40094=dvK56FFz-8)^|VuicU9O^X0pe(|`M} zB!0H3b(_KOe*P8ffBUZFp4Pv&`=9q8`>*zY%k|3h>+P!5YK@U~Q#UlS z@7G$c%dh>nkDgMi%{LZVR-K+E>(``7mEI!PvG?DVY<^-X*UaQ{-4X6w@v_1PYGUDS^TU$QRxy5PwR`xtbjz7(a^lQv-&*{nvpiSr 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 zc=-LosZCqI>`LWr=rh+7zcoJ~n7bRz}_OTkjh_XVH$!KYPiu&hz_8 z9}MkPxw`c7!yg&((Vm@YQ(sw|7P0EUcK2nxdf1NBhL8L>^^CDYA1&KEe&ClsUDR)L z*I%bid;YAx$3#95{lw?5q^IwibN(Ie*L1tdx8C^v>H0&&s)?!{=vwwD;6+ z*3KHc`<9&t-1JPu;%QaKx8J?-m*=k=aQVjmdsm+DMdCek7d?6LANBo;`re!P^LOqxtV9D-Ehg>PfR=V$ItKI`TR?_e4o7NlZ#?68FB95Pd?gt^bzgmev&^a?((}| zJo4j19vgqk$ik{F{f|nyVaUu~y(fB++srD9k2dikH2vq+Wy`+5ut000000JL4%VTuwV2l(~x6BYgEe=`QbbgFFe zunzzL000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000RJyK#r(g#Ycur*q0;m-X_a2#lIYTR{Se1$Ker*5ZbiG z?NHHA@0001he-90ZC`v?o#nrh2@t;c$ zKD0ZYet_V%9ZUZJ0002~oi!ZC=YMq7KmQ-f=R34aE-A9@peC1n0RR91@NcYr=gwRQ z5C8xG000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000002M|FUC0A$FB#1Hd0A!8;<9fzn#(G=7W0 zxGBagG#w~r;mT4HT$~#j`hk!|PRLw}I%yW2PX)ON14^h6+C`)_cj6z?5J(s9bRhwY zl28}TqR`MTGNctOI5`0qDbIWFJDColerx&t;BwA+-{*PW=e+M(T>t<80000000000 z000000000000000004mhx0kQacF(-s>y8~5^>0MPo`|?x^4`gKT$}Bt|4ZCfwf>ct zR!jZ4E%me3h3m83BN4GHBJMlW>#~Q;%io2$QGee@z3#-3!)5&3<+a-^nc61+}SZb!99rg3QuAW{j_t{(4&mNAy);5<;FE$zX*~-B(pJn#H&^BNG z;OKho^TCyaB_{jNwX>gdPqfYZ2S)wqAETBpY3`Z-n(WpX}u>uIw*|6HP+`9qt| z|DmJnTkGeZ)$^}=l>481w)XM(8>#2NF`uT!-%8$QZ2t26^9<*Y-#P!9Q~S&LjLqkp z!$CQh`{%cJ_3RIRvi2YESJnam006$Rrez;Adv-V|wclJGG}AAw_G6Os>hhq;+@s6m z`IFDLP0imvDVWbCCp~uY^E&_i=i4TSYA;g}@vGIg)XUy-uJ)bJdmkOHKlj$1`YGR~ zu9LC9J-^gsopkTyTA%AX*7fgZ{>8TW`J=;){r=1Hpo#pDBI5VIYnwkV56b>cO2-FF ze`7vPjlY$=&Di|q`R5tVAHQ?{HK+EM^BJ4ZH;03A4)@P*@9No) zK3V&Z_bY1w0002rSW`1I8~+;s0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000004ZQm#@!u z&%E91uKsM)zY!68B4Tq+K3}*#+wF~rV-XS8X1nPval8NUKsUPhKpDR$B7T%{5wS42 z4kp)MOs>D&vPODjGIrmYUYBcTU-`Q*H|p>EsMno1a=47|dh*oz$)^{}{pLQ?D-mV= z#n{n(cw(uUesNrPGT|#(lPOu*_$B`(J3AFMoV$J!3Nd z!Igt0=H!7cx@=Q8HnrCyhHQk~EBHqY1h|IMZG z*>BGO*H0G8bLQuK#^!y^f9LhZChOI)50=_y=bsmwQ?HNDd)IqynIA5V_wL*8wN2g6 zxHq$6hU-u-(Hu5&RHrwU4l{0^G)A?uamiqs^ymq^u|75Ep9=rH? zzSG*r<8P#%|Hk~Jzs$|sjLl!3f1cs|@jK^Vb84SCpRxITb2w;n{{H#xUHM)jV)V({ z?HZfPS^xk5z&F;^%*@9B1^@s60000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000U+3lPv)waq z_qzDsQU69n?1_lYIWrM);reX1HzM{&L|mKgrnkiH{=);^=;8xq{GN#TQN~5Y!sI%b zTz@gS{&LeASu^WD5)sED;=VJzE_=wn@^@iw)Zh0}uRC$%a2emV@9g@?rx(io*7~nR zl=T;5NB7~0rDposQ9s}7>gmODpYN6R=OW_xYi)Ds^kS27pRF7m$L2e}&^BNG^z3@Z zWc-6G2TRP=pN;ytcJ_1biMDzFz^K1}cU#75PTjZMquhtNTZeBR`svyAr*>}Z>it)b zx20ZudZwSXGWYz$)k!$dKr6mI4HH>Tpl!QFRu1u zlJn~Fpvl~$%Y){Ba*y8Vb;k~j`rnC&?@bEkeCA9~Mg0AZUKiI^%Y00Y18Oh#PR^!` z{%y4%-x}|E{AsoHx_95%_2=Gdn_GV!*ZRjw)|xHr!doL>usK|@Bf=i z-@idvQVBgKj$+x@9X?KuP-)Pua14N)HXZ+yx5$2eSF@#-fPSJaA~}E-+r%c z>V9TUF?sJC&sw)9o1gucxhvzbLp6T0YqMRZmowkD>HIUdn$$mXdF^&R|H)9qV;4Wq zcUt>+{EgJ}-nD2cFC*emL~M`A=gT+8>cbInDk5TKtRC61?%?0{)xD*C&G=A6 z{4Cc+#PLDf9kjn5w7=Q5$Ag3Xk48l9aqqcSoqJ|o`MEsaYajWfRiAl&x*0!zZFO_; z>Elg*XZ}|sn*C?u;rinz(S#*_kTWeZDZ&%x8H= zU+h%hoLFAVHM#zwg{fxEsmWeD_s)9GKiR21ob0ua9_%#ZC8nHPo>88|_{Q}5b0?P9 zo;t9nF8yzx=rsA_>bZ92%GisK^yf1s_sBNuYWBLey7~2dx61e&FUnqjJ=D*aYu}yk zHo5;a*RA%y^iDelF~6PbRvG*9Tz`J?g-%uCOU`_5V$$PFUzPcvzR;<1sMPYKhOWnJ0-b|zlxRKGg8ymj7R z%yp|6?kBqNmrnKfxo&fQgVgcSY=3?8oa+W_=Vv=r)_dgrTlJQ?(&qlzZ!Trv+wTA5@>8shUlsrW0DwDfw?b0PG6GqoZ->e@OrU000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0CtO4ZjRN@yw|Ev9qYBfjEF-Kal3arJQ$Cav3lfxtlO#NU!3gcAOA1;A03R}d#+Vy z4H=i8%j3QFkxyFnndhgQ@y9ORSX+Ghc+=mx*Q*gR6cID=aQ*R_*=poiubuC8{p?KB z&-Ixrpk4nFHAM_5fMjU>{Q=exUp91d}v{+S(EkW-dWH2Cp*=LlfCxQ zgPmr)#FTpSjIxgLjp_C0F5Fmq>cF15^uK+g)8vb*=h~SoV=q3^pU;@wBipPi=kxjN z`EHf*IbLk-6%mUOaXHWG=2-LI=LcsO8`JCmSlU#Cw?|SW#;fQ}PwCc=}`{i7&S-H}xGfyh>vH1P@^8SCk(!cxd@&Ebx@#Z<>b3WH* zzvO@ajhQO*m9dXzJJo@I&QyPRqkrFzeb8y<=V$wO@#7CV)z*35lTi^d+;4I`b8QX| zKkF}ZIkpwI-O5;<;mw_2+IIgLyCeS>*H$;n{SUT`czo%re5ch<``?jr|6B8EIGWh( z=Gy$cJKwGH4ku3c+r0l0Q|iq5T$|79^W7@v@1NLP=XmD&{b#G2Wo>Hq0ssI200000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000_>Mg|5C8xG008oTZ3I`-ECWhWH6ZQ7@-0qY-FS=th?2n}NA?v6hA zun*bAT||k^#EQ|Dx`ws{0v1aC6n1RIhOlh{%|oHHCA6gJqOGN<4-yqg3`%{d_XIR< zId^8#)R(j6(Zbh=}PwcVp|n zFpyq4IG)xW8c%n3n&q}mvmB0y&QHeElRs^xExkEUY|qrOoxKefMpTq*_FL`B*JgFSa(~se$g=U%zQ%m3yMoEQhAr#myJG@1NZw|g~zjL{p8_Ugd>ce`q{ygU7+E!XW)h=qQ^_26!cKiGL zbASG3zj^TaIC7z$Itx1*IhN<>Oty<72j?!fha%$ep1DRIbN1w7k?+e}?`_;S_p5ck z-g<9iWMWOkjYr?f{W&&fOYy0n-Wo>3xx^-c?k>9Tx zH9Q`<|E}-VQ=VtyRI}_~y=l7g_>bhg@!FfWz4pubWB)ep3VGnWz5N;wtvb-_nYjktO=Ql?zoobeE_xESHS-!B`Ec5SyT>Jms zpZ>?rmV4fN`01bB5Y^wvrF%2BFx|-K_)Gi#W1Uyti`wpp{G%yf@G)IgtHn7000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000Dzv|XGYRpKOao@O|^@25wSiZ`mwAZ-`R`b5)o_q z<02x*m(Gl&iHN9eiip!AX(*x^cTaR}Id*+&AHBZnABc!sd;R_Re6RiO-u*khdGp+7 zPc9bUJTaIS?w?J0ZPzXiro4t6t7?z7FUE8K*z>dH-f!GfJ+IwA*XS(lXgs)ky0P%b z#p3v6yLjjC^|UTFrrbX?)h_aTy>wu%dY+hS7gfCd~JZ29#~ zYf}ID{jbba^To|>}N50sN=bT(K-}Cx&Jh$Kd{(K|n=l;HnwIX6~MC3inSI#@! z`*v}DwmfyTyEi%a;Ya5ipNWWpeS>M|WV^U7?`dzs9A7Hh#mhSe)A4g7Y1;$sV(GDg zYQI>|abDdI? zYR}YE6Git(A#&%qRR;&hAqq(d$(`JCiFA-_D6zInn&0c$vuC&4pAMhb_y7I=zW?9% z+tX`$=DnY_p7lJ>T6^ua_g-rjkID;n!pHVn2=>bf_WG2t-CLWF(CZ~yB*X*C0~w^L zD%B!E50FZZ5}V6a{%L2o|h}Qq$ z+6#rM{^>&q4a|E3K0zCVxU1@)kpuA&l^4E3TKMct4fTRL9I;r*q5f5QRCaiH-d$EApz$N!=?-yzzwR0bFfP&X{6OrTUL9>$30&*PL1FA$3t_nC|W7!)*rXNx%POipU>;zZ$-KdR_5o*f7G71#BHx!xn=cC zMW%z0+}vAP9`}6awlD7a%RQgC?X%<658`UbH27d4bZO zADzEk(l=STCw8_K>9$*$pL>3B`wMP-x$*x|`{ok2eRAb1o=o15Y9}N&)7KZS{72+@ z;g71$xt8RpsY?I2{T;Xe?e*^CGw*0i(rv0TzTEzS+a9~l)TqwcZ%MlSNynelzPas* z+aFFf(b=$Iza`mEq|DDff3|kn@Y8mGD{|R5rJU<8w>@*^T;lfMTsgP@=E^IpCNFuH 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 literal 0 HcmV?d00001 diff --git a/tests/qtest/bios-tables-test-allowed-diff.h b/tests/qtest/bios-tables-test-allowed-diff.h index 631703142c..dfb8523c8b 100644 --- a/tests/qtest/bios-tables-test-allowed-diff.h +++ b/tests/qtest/bios-tables-test-allowed-diff.h @@ -1,11 +1 @@ /* List of comma-separated changed AML files to ignore */ -"tests/data/acpi/q35/DSDT", -"tests/data/acpi/q35/DSDT.acpihmat", -"tests/data/acpi/q35/DSDT.bridge", -"tests/data/acpi/q35/DSDT.cphp", -"tests/data/acpi/q35/DSDT.dimmpxm", -"tests/data/acpi/q35/DSDT.ipmibt", -"tests/data/acpi/q35/DSDT.memhp", -"tests/data/acpi/q35/DSDT.mmio64", -"tests/data/acpi/q35/DSDT.numamem", -"tests/data/acpi/q35/DSDT.tis", diff --git a/tests/qtest/bios-tables-test-allowed-diff.h.orig b/tests/qtest/bios-tables-test-allowed-diff.h.orig new file mode 100644 index 0000000000..6a052c5044 --- /dev/null +++ b/tests/qtest/bios-tables-test-allowed-diff.h.orig @@ -0,0 +1,18 @@ +/* List of comma-separated changed AML files to ignore */ +"tests/data/acpi/pc/DSDT", +"tests/data/acpi/pc/DSDT.acpihmat", +"tests/data/acpi/pc/DSDT.bridge", +"tests/data/acpi/pc/DSDT.cphp", +"tests/data/acpi/pc/DSDT.dimmpxm", +"tests/data/acpi/pc/DSDT.ipmikcs", +"tests/data/acpi/pc/DSDT.memhp", +"tests/data/acpi/pc/DSDT.numamem", +"tests/data/acpi/q35/DSDT", +"tests/data/acpi/q35/DSDT.acpihmat", +"tests/data/acpi/q35/DSDT.bridge", +"tests/data/acpi/q35/DSDT.cphp", +"tests/data/acpi/q35/DSDT.dimmpxm", +"tests/data/acpi/q35/DSDT.ipmibt", +"tests/data/acpi/q35/DSDT.memhp", +"tests/data/acpi/q35/DSDT.mmio64", +"tests/data/acpi/q35/DSDT.numamem", diff --git a/tests/qtest/bios-tables-test-allowed-diff.h.rej b/tests/qtest/bios-tables-test-allowed-diff.h.rej new file mode 100644 index 0000000000..31b3352111 --- /dev/null +++ b/tests/qtest/bios-tables-test-allowed-diff.h.rej @@ -0,0 +1,9 @@ +--- tests/qtest/bios-tables-test-allowed-diff.h ++++ tests/qtest/bios-tables-test-allowed-diff.h +@@ -1,6 +1 @@ + /* List of comma-separated changed AML files to ignore */ +-"tests/data/acpi/pc/SSDT.dimmpxm", +-"tests/data/acpi/q35/SSDT.dimmpxm", +-"tests/data/acpi/virt/DSDT.memhp", +-"tests/data/acpi/virt/SSDT.memhp", +-"tests/data/acpi/virt/NFIT.memhp", diff --git a/tests/qtest/bios-tables-test.c.orig b/tests/qtest/bios-tables-test.c.orig new file mode 100644 index 0000000000..a0b8d81659 --- /dev/null +++ b/tests/qtest/bios-tables-test.c.orig @@ -0,0 +1,1200 @@ +/* + * Boot order test cases. + * + * Copyright (c) 2013 Red Hat Inc. + * + * Authors: + * Michael S. Tsirkin , + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. + */ + +/* + * How to add or update the tests: + * Contributor: + * 1. add empty files for new tables, if any, under tests/data/acpi + * 2. list any changed files in tests/qtest/bios-tables-test-allowed-diff.h + * 3. commit the above *before* making changes that affect the tables + * + * Contributor or ACPI Maintainer (steps 4-7 need to be redone to resolve conflicts + * in binary commit created in step 6): + * + * After 1-3 above tests will pass but ignore differences with the expected files. + * You will also notice that tests/qtest/bios-tables-test-allowed-diff.h lists + * a bunch of files. This is your hint that you need to do the below: + * 4. Run + * make check V=1 + * this will produce a bunch of warnings about differences + * beween actual and expected ACPI tables. If you have IASL installed, + * they will also be disassembled so you can look at the disassembled + * output. If not - disassemble them yourself in any way you like. + * Look at the differences - make sure they make sense and match what the + * changes you are merging are supposed to do. + * Save the changes, preferably in form of ASL diff for the commit log in + * step 6. + * + * 5. From build directory, run: + * $(SRC_PATH)/tests/data/acpi/rebuild-expected-aml.sh + * 6. Now commit any changes to the expected binary, include diff from step 4 + * in commit log. + * 7. Before sending patches to the list (Contributor) + * or before doing a pull request (Maintainer), make sure + * tests/qtest/bios-tables-test-allowed-diff.h is empty - this will ensure + * following changes to ACPI tables will be noticed. + * + * The resulting patchset/pull request then looks like this: + * - patch 1: list changed files in tests/qtest/bios-tables-test-allowed-diff.h. + * - patches 2 - n: real changes, may contain multiple patches. + * - patch n + 1: update golden master binaries and empty + * tests/qtest/bios-tables-test-allowed-diff.h + */ + +#include "qemu/osdep.h" +#include +#include "qemu-common.h" +#include "hw/firmware/smbios.h" +#include "qemu/bitmap.h" +#include "acpi-utils.h" +#include "boot-sector.h" +#include "tpm-emu.h" +#include "hw/acpi/tpm.h" + + +#define MACHINE_PC "pc" +#define MACHINE_Q35 "q35" + +#define ACPI_REBUILD_EXPECTED_AML "TEST_ACPI_REBUILD_AML" + +typedef struct { + bool tcg_only; + const char *machine; + const char *variant; + const char *uefi_fl1; + const char *uefi_fl2; + const char *cd; + const uint64_t ram_start; + const uint64_t scan_len; + uint64_t rsdp_addr; + uint8_t rsdp_table[36 /* ACPI 2.0+ RSDP size */]; + GArray *tables; + uint32_t smbios_ep_addr; + struct smbios_21_entry_point smbios_ep_table; + uint16_t smbios_cpu_max_speed; + uint16_t smbios_cpu_curr_speed; + uint8_t *required_struct_types; + int required_struct_types_len; + QTestState *qts; +} test_data; + +static char disk[] = "tests/acpi-test-disk-XXXXXX"; +static const char *data_dir = "tests/data/acpi"; +#ifdef CONFIG_IASL +static const char *iasl = CONFIG_IASL; +#else +static const char *iasl; +#endif + +static bool compare_signature(const AcpiSdtTable *sdt, const char *signature) +{ + return !memcmp(sdt->aml, signature, 4); +} + +static void cleanup_table_descriptor(AcpiSdtTable *table) +{ + g_free(table->aml); + if (table->aml_file && + !table->tmp_files_retain && + g_strstr_len(table->aml_file, -1, "aml-")) { + unlink(table->aml_file); + } + g_free(table->aml_file); + g_free(table->asl); + if (table->asl_file && + !table->tmp_files_retain) { + unlink(table->asl_file); + } + g_free(table->asl_file); +} + +static void free_test_data(test_data *data) +{ + int i; + + for (i = 0; i < data->tables->len; ++i) { + cleanup_table_descriptor(&g_array_index(data->tables, AcpiSdtTable, i)); + } + + g_array_free(data->tables, true); +} + +static void test_acpi_rsdp_table(test_data *data) +{ + uint8_t *rsdp_table = data->rsdp_table; + + acpi_fetch_rsdp_table(data->qts, data->rsdp_addr, rsdp_table); + + switch (rsdp_table[15 /* Revision offset */]) { + case 0: /* ACPI 1.0 RSDP */ + /* With rev 1, checksum is only for the first 20 bytes */ + g_assert(!acpi_calc_checksum(rsdp_table, 20)); + break; + case 2: /* ACPI 2.0+ RSDP */ + /* With revision 2, we have 2 checksums */ + g_assert(!acpi_calc_checksum(rsdp_table, 20)); + g_assert(!acpi_calc_checksum(rsdp_table, 36)); + break; + default: + g_assert_not_reached(); + } +} + +static void test_acpi_rxsdt_table(test_data *data) +{ + const char *sig = "RSDT"; + AcpiSdtTable rsdt = {}; + int entry_size = 4; + int addr_off = 16 /* RsdtAddress */; + uint8_t *ent; + + if (data->rsdp_table[15 /* Revision offset */] != 0) { + addr_off = 24 /* XsdtAddress */; + entry_size = 8; + sig = "XSDT"; + } + /* read [RX]SDT table */ + acpi_fetch_table(data->qts, &rsdt.aml, &rsdt.aml_len, + &data->rsdp_table[addr_off], entry_size, sig, true); + + /* Load all tables and add to test list directly RSDT referenced tables */ + ACPI_FOREACH_RSDT_ENTRY(rsdt.aml, rsdt.aml_len, ent, entry_size) { + AcpiSdtTable ssdt_table = {}; + + acpi_fetch_table(data->qts, &ssdt_table.aml, &ssdt_table.aml_len, ent, + entry_size, NULL, true); + /* Add table to ASL test tables list */ + g_array_append_val(data->tables, ssdt_table); + } + cleanup_table_descriptor(&rsdt); +} + +static void test_acpi_fadt_table(test_data *data) +{ + /* FADT table is 1st */ + AcpiSdtTable table = g_array_index(data->tables, typeof(table), 0); + uint8_t *fadt_aml = table.aml; + uint32_t fadt_len = table.aml_len; + uint32_t val; + int dsdt_offset = 40 /* DSDT */; + int dsdt_entry_size = 4; + + g_assert(compare_signature(&table, "FACP")); + + /* Since DSDT/FACS isn't in RSDT, add them to ASL test list manually */ + memcpy(&val, fadt_aml + 112 /* Flags */, 4); + val = le32_to_cpu(val); + if (!(val & 1UL << 20 /* HW_REDUCED_ACPI */)) { + acpi_fetch_table(data->qts, &table.aml, &table.aml_len, + fadt_aml + 36 /* FIRMWARE_CTRL */, 4, "FACS", false); + g_array_append_val(data->tables, table); + } + + memcpy(&val, fadt_aml + dsdt_offset, 4); + val = le32_to_cpu(val); + if (!val) { + dsdt_offset = 140 /* X_DSDT */; + dsdt_entry_size = 8; + } + acpi_fetch_table(data->qts, &table.aml, &table.aml_len, + fadt_aml + dsdt_offset, dsdt_entry_size, "DSDT", true); + g_array_append_val(data->tables, table); + + memset(fadt_aml + 36, 0, 4); /* sanitize FIRMWARE_CTRL ptr */ + memset(fadt_aml + 40, 0, 4); /* sanitize DSDT ptr */ + if (fadt_aml[8 /* FADT Major Version */] >= 3) { + memset(fadt_aml + 132, 0, 8); /* sanitize X_FIRMWARE_CTRL ptr */ + memset(fadt_aml + 140, 0, 8); /* sanitize X_DSDT ptr */ + } + + /* update checksum */ + fadt_aml[9 /* Checksum */] = 0; + fadt_aml[9 /* Checksum */] -= acpi_calc_checksum(fadt_aml, fadt_len); +} + +static void dump_aml_files(test_data *data, bool rebuild) +{ + AcpiSdtTable *sdt; + GError *error = NULL; + gchar *aml_file = NULL; + gint fd; + ssize_t ret; + int i; + + for (i = 0; i < data->tables->len; ++i) { + const char *ext = data->variant ? data->variant : ""; + sdt = &g_array_index(data->tables, AcpiSdtTable, i); + g_assert(sdt->aml); + + if (rebuild) { + aml_file = g_strdup_printf("%s/%s/%.4s%s", data_dir, data->machine, + sdt->aml, ext); + fd = g_open(aml_file, O_WRONLY|O_TRUNC|O_CREAT, + S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH); + if (fd < 0) { + perror(aml_file); + } + g_assert(fd >= 0); + } else { + fd = g_file_open_tmp("aml-XXXXXX", &sdt->aml_file, &error); + g_assert_no_error(error); + } + + ret = qemu_write_full(fd, sdt->aml, sdt->aml_len); + g_assert(ret == sdt->aml_len); + + close(fd); + + g_free(aml_file); + } +} + +static bool load_asl(GArray *sdts, AcpiSdtTable *sdt) +{ + AcpiSdtTable *temp; + GError *error = NULL; + GString *command_line = g_string_new(iasl); + gint fd; + gchar *out, *out_err; + gboolean ret; + int i; + + fd = g_file_open_tmp("asl-XXXXXX.dsl", &sdt->asl_file, &error); + g_assert_no_error(error); + close(fd); + + /* build command line */ + g_string_append_printf(command_line, " -p %s ", sdt->asl_file); + if (compare_signature(sdt, "DSDT") || + compare_signature(sdt, "SSDT")) { + for (i = 0; i < sdts->len; ++i) { + temp = &g_array_index(sdts, AcpiSdtTable, i); + if (compare_signature(temp, "DSDT") || + compare_signature(temp, "SSDT")) { + g_string_append_printf(command_line, "-e %s ", temp->aml_file); + } + } + } + g_string_append_printf(command_line, "-d %s", sdt->aml_file); + + /* pass 'out' and 'out_err' in order to be redirected */ + ret = g_spawn_command_line_sync(command_line->str, &out, &out_err, NULL, &error); + g_assert_no_error(error); + if (ret) { + ret = g_file_get_contents(sdt->asl_file, &sdt->asl, + &sdt->asl_len, &error); + g_assert(ret); + g_assert_no_error(error); + ret = (sdt->asl_len > 0); + } + + g_free(out); + g_free(out_err); + g_string_free(command_line, true); + + return !ret; +} + +#define COMMENT_END "*/" +#define DEF_BLOCK "DefinitionBlock (" +#define BLOCK_NAME_END "," + +static GString *normalize_asl(gchar *asl_code) +{ + GString *asl = g_string_new(asl_code); + gchar *comment, *block_name; + + /* strip comments (different generation days) */ + comment = g_strstr_len(asl->str, asl->len, COMMENT_END); + if (comment) { + comment += strlen(COMMENT_END); + while (*comment == '\n') { + comment++; + } + asl = g_string_erase(asl, 0, comment - asl->str); + } + + /* strip def block name (it has file path in it) */ + if (g_str_has_prefix(asl->str, DEF_BLOCK)) { + block_name = g_strstr_len(asl->str, asl->len, BLOCK_NAME_END); + g_assert(block_name); + asl = g_string_erase(asl, 0, + block_name + sizeof(BLOCK_NAME_END) - asl->str); + } + + return asl; +} + +static GArray *load_expected_aml(test_data *data) +{ + int i; + AcpiSdtTable *sdt; + GError *error = NULL; + gboolean ret; + gsize aml_len; + + GArray *exp_tables = g_array_new(false, true, sizeof(AcpiSdtTable)); + if (getenv("V")) { + fputc('\n', stderr); + } + for (i = 0; i < data->tables->len; ++i) { + AcpiSdtTable exp_sdt; + gchar *aml_file = NULL; + const char *ext = data->variant ? data->variant : ""; + + sdt = &g_array_index(data->tables, AcpiSdtTable, i); + + memset(&exp_sdt, 0, sizeof(exp_sdt)); + +try_again: + aml_file = g_strdup_printf("%s/%s/%.4s%s", data_dir, data->machine, + sdt->aml, ext); + if (getenv("V")) { + fprintf(stderr, "Looking for expected file '%s'\n", aml_file); + } + if (g_file_test(aml_file, G_FILE_TEST_EXISTS)) { + exp_sdt.aml_file = aml_file; + } else if (*ext != '\0') { + /* try fallback to generic (extension less) expected file */ + ext = ""; + g_free(aml_file); + goto try_again; + } + g_assert(exp_sdt.aml_file); + if (getenv("V")) { + fprintf(stderr, "Using expected file '%s'\n", aml_file); + } + ret = g_file_get_contents(aml_file, (gchar **)&exp_sdt.aml, + &aml_len, &error); + exp_sdt.aml_len = aml_len; + g_assert(ret); + g_assert_no_error(error); + g_assert(exp_sdt.aml); + if (!exp_sdt.aml_len) { + fprintf(stderr, "Warning! zero length expected file '%s'\n", + aml_file); + } + + g_array_append_val(exp_tables, exp_sdt); + } + + return exp_tables; +} + +static bool test_acpi_find_diff_allowed(AcpiSdtTable *sdt) +{ + const gchar *allowed_diff_file[] = { +#include "bios-tables-test-allowed-diff.h" + NULL + }; + const gchar **f; + + for (f = allowed_diff_file; *f; ++f) { + if (!g_strcmp0(sdt->aml_file, *f)) { + return true; + } + } + return false; +} + +/* test the list of tables in @data->tables against reference tables */ +static void test_acpi_asl(test_data *data) +{ + int i; + AcpiSdtTable *sdt, *exp_sdt; + test_data exp_data; + gboolean exp_err, err, all_tables_match = true; + + memset(&exp_data, 0, sizeof(exp_data)); + exp_data.tables = load_expected_aml(data); + dump_aml_files(data, false); + for (i = 0; i < data->tables->len; ++i) { + GString *asl, *exp_asl; + + sdt = &g_array_index(data->tables, AcpiSdtTable, i); + exp_sdt = &g_array_index(exp_data.tables, AcpiSdtTable, i); + + if (sdt->aml_len == exp_sdt->aml_len && + !memcmp(sdt->aml, exp_sdt->aml, sdt->aml_len)) { + /* Identical table binaries: no need to disassemble. */ + continue; + } + + fprintf(stderr, + "acpi-test: Warning! %.4s binary file mismatch. " + "Actual [aml:%s], Expected [aml:%s].\n" + "See source file tests/qtest/bios-tables-test.c " + "for instructions on how to update expected files.\n", + exp_sdt->aml, sdt->aml_file, exp_sdt->aml_file); + + all_tables_match = all_tables_match && + test_acpi_find_diff_allowed(exp_sdt); + + /* + * don't try to decompile if IASL isn't present, in this case user + * will just 'get binary file mismatch' warnings and test failure + */ + if (!iasl) { + continue; + } + + err = load_asl(data->tables, sdt); + asl = normalize_asl(sdt->asl); + + exp_err = load_asl(exp_data.tables, exp_sdt); + exp_asl = normalize_asl(exp_sdt->asl); + + /* TODO: check for warnings */ + g_assert(!err || exp_err); + + if (g_strcmp0(asl->str, exp_asl->str)) { + sdt->tmp_files_retain = true; + if (exp_err) { + fprintf(stderr, + "Warning! iasl couldn't parse the expected aml\n"); + } else { + exp_sdt->tmp_files_retain = true; + fprintf(stderr, + "acpi-test: Warning! %.4s mismatch. " + "Actual [asl:%s, aml:%s], Expected [asl:%s, aml:%s].\n", + exp_sdt->aml, sdt->asl_file, sdt->aml_file, + exp_sdt->asl_file, exp_sdt->aml_file); + fflush(stderr); + if (getenv("V")) { + const char *diff_env = getenv("DIFF"); + const char *diff_cmd = diff_env ? diff_env : "diff -U 16"; + char *diff = g_strdup_printf("%s %s %s", diff_cmd, + exp_sdt->asl_file, sdt->asl_file); + int out = dup(STDOUT_FILENO); + int ret G_GNUC_UNUSED; + + dup2(STDERR_FILENO, STDOUT_FILENO); + ret = system(diff) ; + dup2(out, STDOUT_FILENO); + close(out); + g_free(diff); + } + } + } + g_string_free(asl, true); + g_string_free(exp_asl, true); + } + if (!iasl && !all_tables_match) { + fprintf(stderr, "to see ASL diff between mismatched files install IASL," + " rebuild QEMU from scratch and re-run tests with V=1" + " environment variable set"); + } + g_assert(all_tables_match); + + free_test_data(&exp_data); +} + +static bool smbios_ep_table_ok(test_data *data) +{ + struct smbios_21_entry_point *ep_table = &data->smbios_ep_table; + uint32_t addr = data->smbios_ep_addr; + + qtest_memread(data->qts, addr, ep_table, sizeof(*ep_table)); + if (memcmp(ep_table->anchor_string, "_SM_", 4)) { + return false; + } + if (memcmp(ep_table->intermediate_anchor_string, "_DMI_", 5)) { + return false; + } + if (ep_table->structure_table_length == 0) { + return false; + } + if (ep_table->number_of_structures == 0) { + return false; + } + if (acpi_calc_checksum((uint8_t *)ep_table, sizeof *ep_table) || + acpi_calc_checksum((uint8_t *)ep_table + 0x10, + sizeof *ep_table - 0x10)) { + return false; + } + return true; +} + +static void test_smbios_entry_point(test_data *data) +{ + uint32_t off; + + /* find smbios entry point structure */ + for (off = 0xf0000; off < 0x100000; off += 0x10) { + uint8_t sig[] = "_SM_"; + int i; + + for (i = 0; i < sizeof sig - 1; ++i) { + sig[i] = qtest_readb(data->qts, off + i); + } + + if (!memcmp(sig, "_SM_", sizeof sig)) { + /* signature match, but is this a valid entry point? */ + data->smbios_ep_addr = off; + if (smbios_ep_table_ok(data)) { + break; + } + } + } + + g_assert_cmphex(off, <, 0x100000); +} + +static inline bool smbios_single_instance(uint8_t type) +{ + switch (type) { + case 0: + case 1: + case 2: + case 3: + case 16: + case 32: + case 127: + return true; + default: + return false; + } +} + +static bool smbios_cpu_test(test_data *data, uint32_t addr) +{ + uint16_t expect_speed[2]; + uint16_t real; + int offset[2]; + int i; + + /* Check CPU speed for backward compatibility */ + offset[0] = offsetof(struct smbios_type_4, max_speed); + offset[1] = offsetof(struct smbios_type_4, current_speed); + expect_speed[0] = data->smbios_cpu_max_speed ? : 2000; + expect_speed[1] = data->smbios_cpu_curr_speed ? : 2000; + + for (i = 0; i < 2; i++) { + real = qtest_readw(data->qts, addr + offset[i]); + if (real != expect_speed[i]) { + fprintf(stderr, "Unexpected SMBIOS CPU speed: real %u expect %u\n", + real, expect_speed[i]); + return false; + } + } + + return true; +} + +static void test_smbios_structs(test_data *data) +{ + DECLARE_BITMAP(struct_bitmap, SMBIOS_MAX_TYPE+1) = { 0 }; + struct smbios_21_entry_point *ep_table = &data->smbios_ep_table; + uint32_t addr = le32_to_cpu(ep_table->structure_table_address); + int i, len, max_len = 0; + uint8_t type, prv, crt; + + /* walk the smbios tables */ + for (i = 0; i < le16_to_cpu(ep_table->number_of_structures); i++) { + + /* grab type and formatted area length from struct header */ + type = qtest_readb(data->qts, addr); + g_assert_cmpuint(type, <=, SMBIOS_MAX_TYPE); + len = qtest_readb(data->qts, addr + 1); + + /* single-instance structs must not have been encountered before */ + if (smbios_single_instance(type)) { + g_assert(!test_bit(type, struct_bitmap)); + } + set_bit(type, struct_bitmap); + + if (type == 4) { + g_assert(smbios_cpu_test(data, addr)); + } + + /* seek to end of unformatted string area of this struct ("\0\0") */ + prv = crt = 1; + while (prv || crt) { + prv = crt; + crt = qtest_readb(data->qts, addr + len); + len++; + } + + /* keep track of max. struct size */ + if (max_len < len) { + max_len = len; + g_assert_cmpuint(max_len, <=, ep_table->max_structure_size); + } + + /* start of next structure */ + addr += len; + } + + /* total table length and max struct size must match entry point values */ + g_assert_cmpuint(le16_to_cpu(ep_table->structure_table_length), ==, + addr - le32_to_cpu(ep_table->structure_table_address)); + g_assert_cmpuint(le16_to_cpu(ep_table->max_structure_size), ==, max_len); + + /* required struct types must all be present */ + for (i = 0; i < data->required_struct_types_len; i++) { + g_assert(test_bit(data->required_struct_types[i], struct_bitmap)); + } +} + +static void test_acpi_one(const char *params, test_data *data) +{ + char *args; + bool use_uefi = data->uefi_fl1 && data->uefi_fl2; + + if (use_uefi) { + /* + * TODO: convert '-drive if=pflash' to new syntax (see e33763be7cd3) + * when arm/virt boad starts to support it. + */ + args = g_strdup_printf("-machine %s %s -accel tcg -nodefaults -nographic " + "-drive if=pflash,format=raw,file=%s,readonly " + "-drive if=pflash,format=raw,file=%s,snapshot=on -cdrom %s %s", + data->machine, data->tcg_only ? "" : "-accel kvm", + data->uefi_fl1, data->uefi_fl2, data->cd, params ? params : ""); + + } else { + /* Disable kernel irqchip to be able to override apic irq0. */ + args = g_strdup_printf("-machine %s,kernel-irqchip=off %s -accel tcg " + "-net none -display none %s " + "-drive id=hd0,if=none,file=%s,format=raw " + "-device ide-hd,drive=hd0 ", + data->machine, data->tcg_only ? "" : "-accel kvm", + params ? params : "", disk); + } + + data->qts = qtest_init(args); + + if (use_uefi) { + g_assert(data->scan_len); + data->rsdp_addr = acpi_find_rsdp_address_uefi(data->qts, + data->ram_start, data->scan_len); + } else { + boot_sector_test(data->qts); + data->rsdp_addr = acpi_find_rsdp_address(data->qts); + g_assert_cmphex(data->rsdp_addr, <, 0x100000); + } + + data->tables = g_array_new(false, true, sizeof(AcpiSdtTable)); + test_acpi_rsdp_table(data); + test_acpi_rxsdt_table(data); + test_acpi_fadt_table(data); + + if (getenv(ACPI_REBUILD_EXPECTED_AML)) { + dump_aml_files(data, true); + } else { + test_acpi_asl(data); + } + + /* + * TODO: make SMBIOS tests work with UEFI firmware, + * Bug on uefi-test-tools to provide entry point: + * https://bugs.launchpad.net/qemu/+bug/1821884 + */ + if (!use_uefi) { + test_smbios_entry_point(data); + test_smbios_structs(data); + } + + qtest_quit(data->qts); + g_free(args); +} + +static uint8_t base_required_struct_types[] = { + 0, 1, 3, 4, 16, 17, 19, 32, 127 +}; + +static void test_acpi_piix4_tcg(void) +{ + test_data data; + + /* Supplying -machine accel argument overrides the default (qtest). + * This is to make guest actually run. + */ + memset(&data, 0, sizeof(data)); + data.machine = MACHINE_PC; + data.required_struct_types = base_required_struct_types; + data.required_struct_types_len = ARRAY_SIZE(base_required_struct_types); + test_acpi_one(NULL, &data); + free_test_data(&data); +} + +static void test_acpi_piix4_tcg_bridge(void) +{ + test_data data; + + memset(&data, 0, sizeof(data)); + data.machine = MACHINE_PC; + data.variant = ".bridge"; + data.required_struct_types = base_required_struct_types; + data.required_struct_types_len = ARRAY_SIZE(base_required_struct_types); + test_acpi_one("-device pci-bridge,chassis_nr=1", &data); + free_test_data(&data); +} + +<<<<<<< HEAD +static void test_acpi_piix4_bridge_hotplug(void) +======= +static void test_acpi_piix4_root_hotplug(void) +>>>>>>> tests/acpi: add a new unit test to test hotplug off/on feature on the root pci bus +{ + test_data data; + + memset(&data, 0, sizeof(data)); + data.machine = MACHINE_PC; +<<<<<<< HEAD + data.variant = ".hpbridge"; + data.required_struct_types = base_required_struct_types; + data.required_struct_types_len = ARRAY_SIZE(base_required_struct_types); + test_acpi_one("-global PIIX4_PM.acpi-pci-hotplug-with-bridge-support=off " + "-device pci-bridge,chassis_nr=1", &data); +======= + data.variant = ".roothp"; + data.required_struct_types = base_required_struct_types; + data.required_struct_types_len = ARRAY_SIZE(base_required_struct_types); + test_acpi_one("-global PIIX4_PM.acpi-root-pci-hotplug=off", &data); +>>>>>>> tests/acpi: add a new unit test to test hotplug off/on feature on the root pci bus + free_test_data(&data); +} + +static void test_acpi_q35_tcg(void) +{ + test_data data; + + memset(&data, 0, sizeof(data)); + data.machine = MACHINE_Q35; + data.required_struct_types = base_required_struct_types; + data.required_struct_types_len = ARRAY_SIZE(base_required_struct_types); + test_acpi_one(NULL, &data); + free_test_data(&data); + + data.smbios_cpu_max_speed = 3000; + data.smbios_cpu_curr_speed = 2600; + test_acpi_one("-smbios type=4,max-speed=3000,current-speed=2600", &data); + free_test_data(&data); +} + +static void test_acpi_q35_tcg_bridge(void) +{ + test_data data; + + memset(&data, 0, sizeof(data)); + data.machine = MACHINE_Q35; + data.variant = ".bridge"; + data.required_struct_types = base_required_struct_types; + data.required_struct_types_len = ARRAY_SIZE(base_required_struct_types); + test_acpi_one("-device pci-bridge,chassis_nr=1", + &data); + free_test_data(&data); +} + +static void test_acpi_q35_tcg_mmio64(void) +{ + test_data data = { + .machine = MACHINE_Q35, + .variant = ".mmio64", + .required_struct_types = base_required_struct_types, + .required_struct_types_len = ARRAY_SIZE(base_required_struct_types) + }; + + test_acpi_one("-m 128M,slots=1,maxmem=2G " + "-object memory-backend-ram,id=ram0,size=128M " + "-numa node,memdev=ram0 " + "-device pci-testdev,membar=2G", + &data); + free_test_data(&data); +} + +static void test_acpi_piix4_tcg_cphp(void) +{ + test_data data; + + memset(&data, 0, sizeof(data)); + data.machine = MACHINE_PC; + data.variant = ".cphp"; + test_acpi_one("-smp 2,cores=3,sockets=2,maxcpus=6" + " -object memory-backend-ram,id=ram0,size=64M" + " -object memory-backend-ram,id=ram1,size=64M" + " -numa node,memdev=ram0 -numa node,memdev=ram1" + " -numa dist,src=0,dst=1,val=21", + &data); + free_test_data(&data); +} + +static void test_acpi_q35_tcg_cphp(void) +{ + test_data data; + + memset(&data, 0, sizeof(data)); + data.machine = MACHINE_Q35; + data.variant = ".cphp"; + test_acpi_one(" -smp 2,cores=3,sockets=2,maxcpus=6" + " -object memory-backend-ram,id=ram0,size=64M" + " -object memory-backend-ram,id=ram1,size=64M" + " -numa node,memdev=ram0 -numa node,memdev=ram1" + " -numa dist,src=0,dst=1,val=21", + &data); + free_test_data(&data); +} + +static uint8_t ipmi_required_struct_types[] = { + 0, 1, 3, 4, 16, 17, 19, 32, 38, 127 +}; + +static void test_acpi_q35_tcg_ipmi(void) +{ + test_data data; + + memset(&data, 0, sizeof(data)); + data.machine = MACHINE_Q35; + data.variant = ".ipmibt"; + data.required_struct_types = ipmi_required_struct_types; + data.required_struct_types_len = ARRAY_SIZE(ipmi_required_struct_types); + test_acpi_one("-device ipmi-bmc-sim,id=bmc0" + " -device isa-ipmi-bt,bmc=bmc0", + &data); + free_test_data(&data); +} + +static void test_acpi_piix4_tcg_ipmi(void) +{ + test_data data; + + /* Supplying -machine accel argument overrides the default (qtest). + * This is to make guest actually run. + */ + memset(&data, 0, sizeof(data)); + data.machine = MACHINE_PC; + data.variant = ".ipmikcs"; + data.required_struct_types = ipmi_required_struct_types; + data.required_struct_types_len = ARRAY_SIZE(ipmi_required_struct_types); + test_acpi_one("-device ipmi-bmc-sim,id=bmc0" + " -device isa-ipmi-kcs,irq=0,bmc=bmc0", + &data); + free_test_data(&data); +} + +static void test_acpi_q35_tcg_memhp(void) +{ + test_data data; + + memset(&data, 0, sizeof(data)); + data.machine = MACHINE_Q35; + data.variant = ".memhp"; + test_acpi_one(" -m 128,slots=3,maxmem=1G" + " -object memory-backend-ram,id=ram0,size=64M" + " -object memory-backend-ram,id=ram1,size=64M" + " -numa node,memdev=ram0 -numa node,memdev=ram1" + " -numa dist,src=0,dst=1,val=21", + &data); + free_test_data(&data); +} + +static void test_acpi_piix4_tcg_memhp(void) +{ + test_data data; + + memset(&data, 0, sizeof(data)); + data.machine = MACHINE_PC; + data.variant = ".memhp"; + test_acpi_one(" -m 128,slots=3,maxmem=1G" + " -object memory-backend-ram,id=ram0,size=64M" + " -object memory-backend-ram,id=ram1,size=64M" + " -numa node,memdev=ram0 -numa node,memdev=ram1" + " -numa dist,src=0,dst=1,val=21", + &data); + free_test_data(&data); +} + +static void test_acpi_q35_tcg_numamem(void) +{ + test_data data; + + memset(&data, 0, sizeof(data)); + data.machine = MACHINE_Q35; + data.variant = ".numamem"; + test_acpi_one(" -object memory-backend-ram,id=ram0,size=128M" + " -numa node -numa node,memdev=ram0", &data); + free_test_data(&data); +} + +static void test_acpi_piix4_tcg_numamem(void) +{ + test_data data; + + memset(&data, 0, sizeof(data)); + data.machine = MACHINE_PC; + data.variant = ".numamem"; + test_acpi_one(" -object memory-backend-ram,id=ram0,size=128M" + " -numa node -numa node,memdev=ram0", &data); + free_test_data(&data); +} + +uint64_t tpm_tis_base_addr; + +static void test_acpi_tcg_tpm(const char *machine, const char *tpm_if, + uint64_t base) +{ +#ifdef CONFIG_TPM + gchar *tmp_dir_name = g_strdup_printf("qemu-test_acpi_%s_tcg_%s.XXXXXX", + machine, tpm_if); + char *tmp_path = g_dir_make_tmp(tmp_dir_name, NULL); + TestState test; + test_data data; + GThread *thread; + char *args, *variant = g_strdup_printf(".%s", tpm_if); + + tpm_tis_base_addr = base; + + module_call_init(MODULE_INIT_QOM); + + test.addr = g_new0(SocketAddress, 1); + test.addr->type = SOCKET_ADDRESS_TYPE_UNIX; + test.addr->u.q_unix.path = g_build_filename(tmp_path, "sock", NULL); + g_mutex_init(&test.data_mutex); + g_cond_init(&test.data_cond); + test.data_cond_signal = false; + + thread = g_thread_new(NULL, tpm_emu_ctrl_thread, &test); + tpm_emu_test_wait_cond(&test); + + memset(&data, 0, sizeof(data)); + data.machine = machine; + data.variant = variant; + + args = g_strdup_printf( + " -chardev socket,id=chr,path=%s" + " -tpmdev emulator,id=dev,chardev=chr" + " -device tpm-%s,tpmdev=dev", + test.addr->u.q_unix.path, tpm_if); + + test_acpi_one(args, &data); + + g_thread_join(thread); + g_unlink(test.addr->u.q_unix.path); + qapi_free_SocketAddress(test.addr); + g_rmdir(tmp_path); + g_free(variant); + g_free(tmp_path); + g_free(tmp_dir_name); + g_free(args); + free_test_data(&data); +#else + g_test_skip("TPM disabled"); +#endif +} + +static void test_acpi_q35_tcg_tpm_tis(void) +{ + test_acpi_tcg_tpm("q35", "tis", 0xFED40000); +} + +static void test_acpi_tcg_dimm_pxm(const char *machine) +{ + test_data data; + + memset(&data, 0, sizeof(data)); + data.machine = machine; + data.variant = ".dimmpxm"; + test_acpi_one(" -machine nvdimm=on,nvdimm-persistence=cpu" + " -smp 4,sockets=4" + " -m 128M,slots=3,maxmem=1G" + " -object memory-backend-ram,id=ram0,size=32M" + " -object memory-backend-ram,id=ram1,size=32M" + " -object memory-backend-ram,id=ram2,size=32M" + " -object memory-backend-ram,id=ram3,size=32M" + " -numa node,memdev=ram0,nodeid=0" + " -numa node,memdev=ram1,nodeid=1" + " -numa node,memdev=ram2,nodeid=2" + " -numa node,memdev=ram3,nodeid=3" + " -numa cpu,node-id=0,socket-id=0" + " -numa cpu,node-id=1,socket-id=1" + " -numa cpu,node-id=2,socket-id=2" + " -numa cpu,node-id=3,socket-id=3" + " -object memory-backend-ram,id=ram4,size=128M" + " -object memory-backend-ram,id=nvm0,size=128M" + " -device pc-dimm,id=dimm0,memdev=ram4,node=1" + " -device nvdimm,id=dimm1,memdev=nvm0,node=2", + &data); + free_test_data(&data); +} + +static void test_acpi_q35_tcg_dimm_pxm(void) +{ + test_acpi_tcg_dimm_pxm(MACHINE_Q35); +} + +static void test_acpi_piix4_tcg_dimm_pxm(void) +{ + test_acpi_tcg_dimm_pxm(MACHINE_PC); +} + +static void test_acpi_virt_tcg_memhp(void) +{ + test_data data = { + .machine = "virt", + .tcg_only = true, + .uefi_fl1 = "pc-bios/edk2-aarch64-code.fd", + .uefi_fl2 = "pc-bios/edk2-arm-vars.fd", + .cd = "tests/data/uefi-boot-images/bios-tables-test.aarch64.iso.qcow2", + .ram_start = 0x40000000ULL, + .scan_len = 256ULL * 1024 * 1024, + }; + + data.variant = ".memhp"; + test_acpi_one(" -machine nvdimm=on" + " -cpu cortex-a57" + " -m 256M,slots=3,maxmem=1G" + " -object memory-backend-ram,id=ram0,size=128M" + " -object memory-backend-ram,id=ram1,size=128M" + " -numa node,memdev=ram0 -numa node,memdev=ram1" + " -numa dist,src=0,dst=1,val=21" + " -object memory-backend-ram,id=ram2,size=128M" + " -object memory-backend-ram,id=nvm0,size=128M" + " -device pc-dimm,id=dimm0,memdev=ram2,node=0" + " -device nvdimm,id=dimm1,memdev=nvm0,node=1", + &data); + + free_test_data(&data); + +} + +static void test_acpi_virt_tcg_numamem(void) +{ + test_data data = { + .machine = "virt", + .tcg_only = true, + .uefi_fl1 = "pc-bios/edk2-aarch64-code.fd", + .uefi_fl2 = "pc-bios/edk2-arm-vars.fd", + .cd = "tests/data/uefi-boot-images/bios-tables-test.aarch64.iso.qcow2", + .ram_start = 0x40000000ULL, + .scan_len = 128ULL * 1024 * 1024, + }; + + data.variant = ".numamem"; + test_acpi_one(" -cpu cortex-a57" + " -object memory-backend-ram,id=ram0,size=128M" + " -numa node,memdev=ram0", + &data); + + free_test_data(&data); + +} + +static void test_acpi_tcg_acpi_hmat(const char *machine) +{ + test_data data; + + memset(&data, 0, sizeof(data)); + data.machine = machine; + data.variant = ".acpihmat"; + test_acpi_one(" -machine hmat=on" + " -smp 2,sockets=2" + " -m 128M,slots=2,maxmem=1G" + " -object memory-backend-ram,size=64M,id=m0" + " -object memory-backend-ram,size=64M,id=m1" + " -numa node,nodeid=0,memdev=m0" + " -numa node,nodeid=1,memdev=m1,initiator=0" + " -numa cpu,node-id=0,socket-id=0" + " -numa cpu,node-id=0,socket-id=1" + " -numa hmat-lb,initiator=0,target=0,hierarchy=memory," + "data-type=access-latency,latency=1" + " -numa hmat-lb,initiator=0,target=0,hierarchy=memory," + "data-type=access-bandwidth,bandwidth=65534M" + " -numa hmat-lb,initiator=0,target=1,hierarchy=memory," + "data-type=access-latency,latency=65534" + " -numa hmat-lb,initiator=0,target=1,hierarchy=memory," + "data-type=access-bandwidth,bandwidth=32767M" + " -numa hmat-cache,node-id=0,size=10K,level=1," + "associativity=direct,policy=write-back,line=8" + " -numa hmat-cache,node-id=1,size=10K,level=1," + "associativity=direct,policy=write-back,line=8", + &data); + free_test_data(&data); +} + +static void test_acpi_q35_tcg_acpi_hmat(void) +{ + test_acpi_tcg_acpi_hmat(MACHINE_Q35); +} + +static void test_acpi_piix4_tcg_acpi_hmat(void) +{ + test_acpi_tcg_acpi_hmat(MACHINE_PC); +} + +static void test_acpi_virt_tcg(void) +{ + test_data data = { + .machine = "virt", + .tcg_only = true, + .uefi_fl1 = "pc-bios/edk2-aarch64-code.fd", + .uefi_fl2 = "pc-bios/edk2-arm-vars.fd", + .cd = "tests/data/uefi-boot-images/bios-tables-test.aarch64.iso.qcow2", + .ram_start = 0x40000000ULL, + .scan_len = 128ULL * 1024 * 1024, + }; + + test_acpi_one("-cpu cortex-a57", &data); + free_test_data(&data); + + data.smbios_cpu_max_speed = 2900; + data.smbios_cpu_curr_speed = 2700; + test_acpi_one("-cpu cortex-a57 " + "-smbios type=4,max-speed=2900,current-speed=2700", &data); + free_test_data(&data); +} + +int main(int argc, char *argv[]) +{ + const char *arch = qtest_get_arch(); + int ret; + + g_test_init(&argc, &argv, NULL); + + if (strcmp(arch, "i386") == 0 || strcmp(arch, "x86_64") == 0) { + ret = boot_sector_init(disk); + if (ret) { + return ret; + } + + qtest_add_func("acpi/q35/tpm-tis", test_acpi_q35_tcg_tpm_tis); + qtest_add_func("acpi/piix4", test_acpi_piix4_tcg); + qtest_add_func("acpi/piix4/bridge", test_acpi_piix4_tcg_bridge); +<<<<<<< HEAD + qtest_add_func("acpi/piix4/brhotplug", test_acpi_piix4_bridge_hotplug); +======= + qtest_add_func("acpi/piix4/hotplug", test_acpi_piix4_root_hotplug); +>>>>>>> tests/acpi: add a new unit test to test hotplug off/on feature on the root pci bus + qtest_add_func("acpi/q35", test_acpi_q35_tcg); + qtest_add_func("acpi/q35/bridge", test_acpi_q35_tcg_bridge); + qtest_add_func("acpi/q35/mmio64", test_acpi_q35_tcg_mmio64); + qtest_add_func("acpi/piix4/ipmi", test_acpi_piix4_tcg_ipmi); + qtest_add_func("acpi/q35/ipmi", test_acpi_q35_tcg_ipmi); + qtest_add_func("acpi/piix4/cpuhp", test_acpi_piix4_tcg_cphp); + qtest_add_func("acpi/q35/cpuhp", test_acpi_q35_tcg_cphp); + qtest_add_func("acpi/piix4/memhp", test_acpi_piix4_tcg_memhp); + qtest_add_func("acpi/q35/memhp", test_acpi_q35_tcg_memhp); + qtest_add_func("acpi/piix4/numamem", test_acpi_piix4_tcg_numamem); + qtest_add_func("acpi/q35/numamem", test_acpi_q35_tcg_numamem); + qtest_add_func("acpi/piix4/dimmpxm", test_acpi_piix4_tcg_dimm_pxm); + qtest_add_func("acpi/q35/dimmpxm", test_acpi_q35_tcg_dimm_pxm); + qtest_add_func("acpi/piix4/acpihmat", test_acpi_piix4_tcg_acpi_hmat); + qtest_add_func("acpi/q35/acpihmat", test_acpi_q35_tcg_acpi_hmat); + } else if (strcmp(arch, "aarch64") == 0) { + qtest_add_func("acpi/virt", test_acpi_virt_tcg); + qtest_add_func("acpi/virt/numamem", test_acpi_virt_tcg_numamem); + qtest_add_func("acpi/virt/memhp", test_acpi_virt_tcg_memhp); + } + ret = g_test_run(); + boot_sector_cleanup(disk); + return ret; +} diff --git a/tests/qtest/bios-tables-test.c.rej b/tests/qtest/bios-tables-test.c.rej new file mode 100644 index 0000000000..aacd6ae220 --- /dev/null +++ b/tests/qtest/bios-tables-test.c.rej @@ -0,0 +1,22 @@ +--- tests/qtest/bios-tables-test.c ++++ tests/qtest/bios-tables-test.c +@@ -927,12 +927,17 @@ static void test_acpi_virt_tcg_memhp(void) + }; + 20 + data.variant =3D ".memhp"; +- test_acpi_one(" -cpu cortex-a57" ++ test_acpi_one(" -machine nvdimm=3Don" ++ " -cpu cortex-a57" + " -m 256M,slots=3D3,maxmem=3D1G" + " -object memory-backend-ram,id=3Dram0,size=3D128M" + " -object memory-backend-ram,id=3Dram1,size=3D128M" + " -numa node,memdev=3Dram0 -numa node,memdev=3Dram1" +- " -numa dist,src=3D0,dst=3D1,val=3D21", ++ " -numa dist,src=3D0,dst=3D1,val=3D21" ++ " -object memory-backend-ram,id=3Dram2,size=3D128M" ++ " -object memory-backend-ram,id=3Dnvm0,size=3D128M" ++ " -device pc-dimm,id=3Ddimm0,memdev=3Dram2,node=3D0" ++ " -device nvdimm,id=3Ddimm1,memdev=3Dnvm0,node=3D1", + &data); + 20 + free_test_data(&data); diff --git a/tests/test-qapi-event.c b/tests/test-qapi-event.c new file mode 100644 index 0000000000..bdeb9095d4 --- /dev/null +++ b/tests/test-qapi-event.c @@ -0,0 +1,198 @@ +/* AUTOMATICALLY GENERATED, DO NOT MODIFY */ + +/* + * schema-defined QAPI event functions + * + * Copyright (c) 2014 Wenchao Xia + * + * Authors: + * Wenchao Xia + * + * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. + * See the COPYING.LIB file in the top-level directory. + * + */ + +#include "qemu/osdep.h" +#include "qemu-common.h" +#include "test-qapi-event.h" +#include "test-qapi-visit.h" +#include "qapi/qmp-output-visitor.h" +#include "qapi/qmp-event.h" + + +void qapi_event_send_event_a(Error **errp) +{ + QDict *qmp; + Error *err = NULL; + QMPEventFuncEmit emit; + + emit = qmp_event_get_func_emit(); + if (!emit) { + return; + } + + qmp = qmp_event_build_dict("EVENT_A"); + + emit(TEST_QAPI_EVENT_EVENT_A, qmp, &err); + + error_propagate(errp, err); + QDECREF(qmp); +} + +void qapi_event_send_event_b(Error **errp) +{ + QDict *qmp; + Error *err = NULL; + QMPEventFuncEmit emit; + + emit = qmp_event_get_func_emit(); + if (!emit) { + return; + } + + qmp = qmp_event_build_dict("EVENT_B"); + + emit(TEST_QAPI_EVENT_EVENT_B, qmp, &err); + + error_propagate(errp, err); + QDECREF(qmp); +} + +void qapi_event_send_event_c(bool has_a, int64_t a, bool has_b, UserDefOne *b, const char *c, Error **errp) +{ + QDict *qmp; + Error *err = NULL; + QMPEventFuncEmit emit; + QmpOutputVisitor *qov; + Visitor *v; + q_obj_EVENT_C_arg param = { + has_a, a, has_b, b, (char *)c + }; + + emit = qmp_event_get_func_emit(); + if (!emit) { + return; + } + + qmp = qmp_event_build_dict("EVENT_C"); + + qov = qmp_output_visitor_new(); + v = qmp_output_get_visitor(qov); + + visit_start_struct(v, "EVENT_C", NULL, 0, &err); + if (err) { + goto out; + } + visit_type_q_obj_EVENT_C_arg_members(v, ¶m, &err); + if (!err) { + visit_check_struct(v, &err); + } + visit_end_struct(v); + if (err) { + goto out; + } + + qdict_put_obj(qmp, "data", qmp_output_get_qobject(qov)); + emit(TEST_QAPI_EVENT_EVENT_C, qmp, &err); + +out: + qmp_output_visitor_cleanup(qov); + error_propagate(errp, err); + QDECREF(qmp); +} + +void qapi_event_send_event_d(EventStructOne *a, const char *b, bool has_c, const char *c, bool has_enum3, EnumOne enum3, Error **errp) +{ + QDict *qmp; + Error *err = NULL; + QMPEventFuncEmit emit; + QmpOutputVisitor *qov; + Visitor *v; + q_obj_EVENT_D_arg param = { + a, (char *)b, has_c, (char *)c, has_enum3, enum3 + }; + + emit = qmp_event_get_func_emit(); + if (!emit) { + return; + } + + qmp = qmp_event_build_dict("EVENT_D"); + + qov = qmp_output_visitor_new(); + v = qmp_output_get_visitor(qov); + + visit_start_struct(v, "EVENT_D", NULL, 0, &err); + if (err) { + goto out; + } + visit_type_q_obj_EVENT_D_arg_members(v, ¶m, &err); + if (!err) { + visit_check_struct(v, &err); + } + visit_end_struct(v); + if (err) { + goto out; + } + + qdict_put_obj(qmp, "data", qmp_output_get_qobject(qov)); + emit(TEST_QAPI_EVENT_EVENT_D, qmp, &err); + +out: + qmp_output_visitor_cleanup(qov); + error_propagate(errp, err); + QDECREF(qmp); +} + +void qapi_event_send___org_qemu_x_event(__org_qemu_x_Enum __org_qemu_x_member1, const char *__org_qemu_x_member2, bool has_q_wchar_t, int64_t q_wchar_t, Error **errp) +{ + QDict *qmp; + Error *err = NULL; + QMPEventFuncEmit emit; + QmpOutputVisitor *qov; + Visitor *v; + __org_qemu_x_Struct param = { + __org_qemu_x_member1, (char *)__org_qemu_x_member2, has_q_wchar_t, q_wchar_t + }; + + emit = qmp_event_get_func_emit(); + if (!emit) { + return; + } + + qmp = qmp_event_build_dict("__ORG.QEMU_X-EVENT"); + + qov = qmp_output_visitor_new(); + v = qmp_output_get_visitor(qov); + + visit_start_struct(v, "__ORG.QEMU_X-EVENT", NULL, 0, &err); + if (err) { + goto out; + } + visit_type___org_qemu_x_Struct_members(v, ¶m, &err); + if (!err) { + visit_check_struct(v, &err); + } + visit_end_struct(v); + if (err) { + goto out; + } + + qdict_put_obj(qmp, "data", qmp_output_get_qobject(qov)); + emit(TEST_QAPI_EVENT___ORG_QEMU_X_EVENT, qmp, &err); + +out: + qmp_output_visitor_cleanup(qov); + error_propagate(errp, err); + QDECREF(qmp); +} + +const char *const test_QAPIEvent_lookup[] = { + [TEST_QAPI_EVENT_EVENT_A] = "EVENT_A", + [TEST_QAPI_EVENT_EVENT_B] = "EVENT_B", + [TEST_QAPI_EVENT_EVENT_C] = "EVENT_C", + [TEST_QAPI_EVENT_EVENT_D] = "EVENT_D", + [TEST_QAPI_EVENT___ORG_QEMU_X_EVENT] = "__ORG.QEMU_X-EVENT", + [TEST_QAPI_EVENT__MAX] = NULL, +}; diff --git a/tests/test-qmp-introspect.c b/tests/test-qmp-introspect.c new file mode 100644 index 0000000000..edae06c64e --- /dev/null +++ b/tests/test-qmp-introspect.c @@ -0,0 +1,58 @@ +/* AUTOMATICALLY GENERATED, DO NOT MODIFY */ + +/* + * QAPI/QMP schema introspection + * + * Copyright (C) 2015 Red Hat, Inc. + * + * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. + * See the COPYING.LIB file in the top-level directory. + * + */ + +#include "qemu/osdep.h" +#include "test-qmp-introspect.h" + +const char test_qmp_schema_json[] = "[" + "{\"arg-type\": \"0\", \"meta-type\": \"event\", \"name\": \"EVENT_A\"}, " + "{\"arg-type\": \"0\", \"meta-type\": \"event\", \"name\": \"EVENT_B\"}, " + "{\"arg-type\": \"1\", \"meta-type\": \"event\", \"name\": \"EVENT_C\"}, " + "{\"arg-type\": \"2\", \"meta-type\": \"event\", \"name\": \"EVENT_D\"}, " + "{\"arg-type\": \"3\", \"meta-type\": \"event\", \"name\": \"__ORG.QEMU_X-EVENT\"}, " + "{\"arg-type\": \"4\", \"meta-type\": \"command\", \"name\": \"__org.qemu_x-command\", \"ret-type\": \"5\"}, " + "{\"arg-type\": \"6\", \"meta-type\": \"command\", \"name\": \"guest-get-time\", \"ret-type\": \"int\"}, " + "{\"arg-type\": \"7\", \"meta-type\": \"command\", \"name\": \"guest-sync\", \"ret-type\": \"any\"}, " + "{\"arg-type\": \"0\", \"meta-type\": \"command\", \"name\": \"user_def_cmd\", \"ret-type\": \"0\"}, " + "{\"arg-type\": \"8\", \"meta-type\": \"command\", \"name\": \"user_def_cmd0\", \"ret-type\": \"8\"}, " + "{\"arg-type\": \"9\", \"meta-type\": \"command\", \"name\": \"user_def_cmd1\", \"ret-type\": \"0\"}, " + "{\"arg-type\": \"10\", \"meta-type\": \"command\", \"name\": \"user_def_cmd2\", \"ret-type\": \"11\"}, " + "{\"members\": [], \"meta-type\": \"object\", \"name\": \"0\"}, " + "{\"members\": [{\"default\": null, \"name\": \"a\", \"type\": \"int\"}, {\"default\": null, \"name\": \"b\", \"type\": \"12\"}, {\"name\": \"c\", \"type\": \"str\"}], \"meta-type\": \"object\", \"name\": \"1\"}, " + "{\"members\": [{\"name\": \"a\", \"type\": \"13\"}, {\"name\": \"b\", \"type\": \"str\"}, {\"default\": null, \"name\": \"c\", \"type\": \"str\"}, {\"default\": null, \"name\": \"enum3\", \"type\": \"14\"}], \"meta-type\": \"object\", \"name\": \"2\"}, " + "{\"members\": [{\"name\": \"__org.qemu_x-member1\", \"type\": \"15\"}, {\"name\": \"__org.qemu_x-member2\", \"type\": \"str\"}, {\"default\": null, \"name\": \"wchar-t\", \"type\": \"int\"}], \"meta-type\": \"object\", \"name\": \"3\"}, " + "{\"members\": [{\"name\": \"a\", \"type\": \"[15]\"}, {\"name\": \"b\", \"type\": \"[3]\"}, {\"name\": \"c\", \"type\": \"16\"}, {\"name\": \"d\", \"type\": \"17\"}], \"meta-type\": \"object\", \"name\": \"4\"}, " + "{\"members\": [{\"name\": \"type\", \"type\": \"18\"}], \"meta-type\": \"object\", \"name\": \"5\", \"tag\": \"type\", \"variants\": [{\"case\": \"__org.qemu_x-branch\", \"type\": \"19\"}]}, " + "{\"members\": [{\"name\": \"a\", \"type\": \"int\"}, {\"default\": null, \"name\": \"b\", \"type\": \"int\"}], \"meta-type\": \"object\", \"name\": \"6\"}, " + "{\"json-type\": \"int\", \"meta-type\": \"builtin\", \"name\": \"int\"}, " + "{\"members\": [{\"name\": \"arg\", \"type\": \"any\"}], \"meta-type\": \"object\", \"name\": \"7\"}, " + "{\"json-type\": \"value\", \"meta-type\": \"builtin\", \"name\": \"any\"}, " + "{\"members\": [], \"meta-type\": \"object\", \"name\": \"8\"}, " + "{\"members\": [{\"name\": \"ud1a\", \"type\": \"12\"}], \"meta-type\": \"object\", \"name\": \"9\"}, " + "{\"members\": [{\"name\": \"ud1a\", \"type\": \"12\"}, {\"default\": null, \"name\": \"ud1b\", \"type\": \"12\"}], \"meta-type\": \"object\", \"name\": \"10\"}, " + "{\"members\": [{\"name\": \"string0\", \"type\": \"str\"}, {\"name\": \"dict1\", \"type\": \"20\"}], \"meta-type\": \"object\", \"name\": \"11\"}, " + "{\"members\": [{\"name\": \"integer\", \"type\": \"int\"}, {\"name\": \"string\", \"type\": \"str\"}, {\"default\": null, \"name\": \"enum1\", \"type\": \"14\"}], \"meta-type\": \"object\", \"name\": \"12\"}, " + "{\"json-type\": \"string\", \"meta-type\": \"builtin\", \"name\": \"str\"}, " + "{\"members\": [{\"name\": \"struct1\", \"type\": \"12\"}, {\"name\": \"string\", \"type\": \"str\"}, {\"default\": null, \"name\": \"enum2\", \"type\": \"14\"}], \"meta-type\": \"object\", \"name\": \"13\"}, " + "{\"meta-type\": \"enum\", \"name\": \"14\", \"values\": [\"value1\", \"value2\", \"value3\"]}, " + "{\"meta-type\": \"enum\", \"name\": \"15\", \"values\": [\"__org.qemu_x-value\"]}, " + "{\"element-type\": \"15\", \"meta-type\": \"array\", \"name\": \"[15]\"}, " + "{\"element-type\": \"3\", \"meta-type\": \"array\", \"name\": \"[3]\"}, " + "{\"members\": [{\"name\": \"__org.qemu_x-member1\", \"type\": \"15\"}], \"meta-type\": \"object\", \"name\": \"16\", \"tag\": \"__org.qemu_x-member1\", \"variants\": [{\"case\": \"__org.qemu_x-value\", \"type\": \"21\"}]}, " + "{\"members\": [{\"type\": \"str\"}, {\"type\": \"22\"}], \"meta-type\": \"alternate\", \"name\": \"17\"}, " + "{\"meta-type\": \"enum\", \"name\": \"18\", \"values\": [\"__org.qemu_x-branch\"]}, " + "{\"members\": [{\"name\": \"data\", \"type\": \"str\"}], \"meta-type\": \"object\", \"name\": \"19\"}, " + "{\"members\": [{\"name\": \"string1\", \"type\": \"str\"}, {\"name\": \"dict2\", \"type\": \"23\"}, {\"default\": null, \"name\": \"dict3\", \"type\": \"23\"}], \"meta-type\": \"object\", \"name\": \"20\"}, " + "{\"members\": [{\"name\": \"array\", \"type\": \"[5]\"}], \"meta-type\": \"object\", \"name\": \"21\"}, " + "{\"members\": [{\"name\": \"__org.qemu_x-member1\", \"type\": \"15\"}], \"meta-type\": \"object\", \"name\": \"22\"}, " + "{\"members\": [{\"name\": \"userdef\", \"type\": \"12\"}, {\"name\": \"string\", \"type\": \"str\"}], \"meta-type\": \"object\", \"name\": \"23\"}, " + "{\"element-type\": \"5\", \"meta-type\": \"array\", \"name\": \"[5]\"}]"; diff --git a/tests/test-qmp-marshal.c b/tests/test-qmp-marshal.c new file mode 100644 index 0000000000..54e3952d35 --- /dev/null +++ b/tests/test-qmp-marshal.c @@ -0,0 +1,383 @@ +/* AUTOMATICALLY GENERATED, DO NOT MODIFY */ + +/* + * schema-defined QMP->QAPI command dispatch + * + * Copyright IBM, Corp. 2011 + * + * Authors: + * Anthony Liguori + * + * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. + * See the COPYING.LIB file in the top-level directory. + * + */ + +#include "qemu/osdep.h" +#include "qemu-common.h" +#include "qemu/module.h" +#include "qapi/qmp/types.h" +#include "qapi/qmp/dispatch.h" +#include "qapi/visitor.h" +#include "qapi/qmp-output-visitor.h" +#include "qapi/qmp-input-visitor.h" +#include "qapi/dealloc-visitor.h" +#include "test-qapi-types.h" +#include "test-qapi-visit.h" +#include "test-qmp-commands.h" + + +static void qmp_marshal_output___org_qemu_x_Union1(__org_qemu_x_Union1 *ret_in, QObject **ret_out, Error **errp) +{ + Error *err = NULL; + QmpOutputVisitor *qov = qmp_output_visitor_new(); + QapiDeallocVisitor *qdv; + Visitor *v; + + v = qmp_output_get_visitor(qov); + visit_type___org_qemu_x_Union1(v, "unused", &ret_in, &err); + if (err) { + goto out; + } + *ret_out = qmp_output_get_qobject(qov); + +out: + error_propagate(errp, err); + qmp_output_visitor_cleanup(qov); + qdv = qapi_dealloc_visitor_new(); + v = qapi_dealloc_get_visitor(qdv); + visit_type___org_qemu_x_Union1(v, "unused", &ret_in, NULL); + qapi_dealloc_visitor_cleanup(qdv); +} + +static void qmp_marshal___org_qemu_x_command(QDict *args, QObject **ret, Error **errp) +{ + Error *err = NULL; + __org_qemu_x_Union1 *retval; + QmpInputVisitor *qiv = qmp_input_visitor_new(QOBJECT(args), true); + QapiDeallocVisitor *qdv; + Visitor *v; + q_obj___org_qemu_x_command_arg arg = {0}; + + v = qmp_input_get_visitor(qiv); + visit_start_struct(v, NULL, NULL, 0, &err); + if (err) { + goto out; + } + visit_type_q_obj___org_qemu_x_command_arg_members(v, &arg, &err); + if (!err) { + visit_check_struct(v, &err); + } + visit_end_struct(v); + if (err) { + goto out; + } + + retval = qmp___org_qemu_x_command(arg.a, arg.b, arg.c, arg.d, &err); + if (err) { + goto out; + } + + qmp_marshal_output___org_qemu_x_Union1(retval, ret, &err); + +out: + error_propagate(errp, err); + qmp_input_visitor_cleanup(qiv); + qdv = qapi_dealloc_visitor_new(); + v = qapi_dealloc_get_visitor(qdv); + visit_start_struct(v, NULL, NULL, 0, NULL); + visit_type_q_obj___org_qemu_x_command_arg_members(v, &arg, NULL); + visit_end_struct(v); + qapi_dealloc_visitor_cleanup(qdv); +} + +static void qmp_marshal_output_int(int64_t ret_in, QObject **ret_out, Error **errp) +{ + Error *err = NULL; + QmpOutputVisitor *qov = qmp_output_visitor_new(); + QapiDeallocVisitor *qdv; + Visitor *v; + + v = qmp_output_get_visitor(qov); + visit_type_int(v, "unused", &ret_in, &err); + if (err) { + goto out; + } + *ret_out = qmp_output_get_qobject(qov); + +out: + error_propagate(errp, err); + qmp_output_visitor_cleanup(qov); + qdv = qapi_dealloc_visitor_new(); + v = qapi_dealloc_get_visitor(qdv); + visit_type_int(v, "unused", &ret_in, NULL); + qapi_dealloc_visitor_cleanup(qdv); +} + +static void qmp_marshal_guest_get_time(QDict *args, QObject **ret, Error **errp) +{ + Error *err = NULL; + int64_t retval; + QmpInputVisitor *qiv = qmp_input_visitor_new(QOBJECT(args), true); + QapiDeallocVisitor *qdv; + Visitor *v; + q_obj_guest_get_time_arg arg = {0}; + + v = qmp_input_get_visitor(qiv); + visit_start_struct(v, NULL, NULL, 0, &err); + if (err) { + goto out; + } + visit_type_q_obj_guest_get_time_arg_members(v, &arg, &err); + if (!err) { + visit_check_struct(v, &err); + } + visit_end_struct(v); + if (err) { + goto out; + } + + retval = qmp_guest_get_time(arg.a, arg.has_b, arg.b, &err); + if (err) { + goto out; + } + + qmp_marshal_output_int(retval, ret, &err); + +out: + error_propagate(errp, err); + qmp_input_visitor_cleanup(qiv); + qdv = qapi_dealloc_visitor_new(); + v = qapi_dealloc_get_visitor(qdv); + visit_start_struct(v, NULL, NULL, 0, NULL); + visit_type_q_obj_guest_get_time_arg_members(v, &arg, NULL); + visit_end_struct(v); + qapi_dealloc_visitor_cleanup(qdv); +} + +static void qmp_marshal_output_any(QObject *ret_in, QObject **ret_out, Error **errp) +{ + Error *err = NULL; + QmpOutputVisitor *qov = qmp_output_visitor_new(); + QapiDeallocVisitor *qdv; + Visitor *v; + + v = qmp_output_get_visitor(qov); + visit_type_any(v, "unused", &ret_in, &err); + if (err) { + goto out; + } + *ret_out = qmp_output_get_qobject(qov); + +out: + error_propagate(errp, err); + qmp_output_visitor_cleanup(qov); + qdv = qapi_dealloc_visitor_new(); + v = qapi_dealloc_get_visitor(qdv); + visit_type_any(v, "unused", &ret_in, NULL); + qapi_dealloc_visitor_cleanup(qdv); +} + +static void qmp_marshal_guest_sync(QDict *args, QObject **ret, Error **errp) +{ + Error *err = NULL; + QObject *retval; + QmpInputVisitor *qiv = qmp_input_visitor_new(QOBJECT(args), true); + QapiDeallocVisitor *qdv; + Visitor *v; + q_obj_guest_sync_arg arg = {0}; + + v = qmp_input_get_visitor(qiv); + visit_start_struct(v, NULL, NULL, 0, &err); + if (err) { + goto out; + } + visit_type_q_obj_guest_sync_arg_members(v, &arg, &err); + if (!err) { + visit_check_struct(v, &err); + } + visit_end_struct(v); + if (err) { + goto out; + } + + retval = qmp_guest_sync(arg.arg, &err); + if (err) { + goto out; + } + + qmp_marshal_output_any(retval, ret, &err); + +out: + error_propagate(errp, err); + qmp_input_visitor_cleanup(qiv); + qdv = qapi_dealloc_visitor_new(); + v = qapi_dealloc_get_visitor(qdv); + visit_start_struct(v, NULL, NULL, 0, NULL); + visit_type_q_obj_guest_sync_arg_members(v, &arg, NULL); + visit_end_struct(v); + qapi_dealloc_visitor_cleanup(qdv); +} + +static void qmp_marshal_user_def_cmd(QDict *args, QObject **ret, Error **errp) +{ + Error *err = NULL; + + (void)args; + + qmp_user_def_cmd(&err); + error_propagate(errp, err); +} + +static void qmp_marshal_output_Empty2(Empty2 *ret_in, QObject **ret_out, Error **errp) +{ + Error *err = NULL; + QmpOutputVisitor *qov = qmp_output_visitor_new(); + QapiDeallocVisitor *qdv; + Visitor *v; + + v = qmp_output_get_visitor(qov); + visit_type_Empty2(v, "unused", &ret_in, &err); + if (err) { + goto out; + } + *ret_out = qmp_output_get_qobject(qov); + +out: + error_propagate(errp, err); + qmp_output_visitor_cleanup(qov); + qdv = qapi_dealloc_visitor_new(); + v = qapi_dealloc_get_visitor(qdv); + visit_type_Empty2(v, "unused", &ret_in, NULL); + qapi_dealloc_visitor_cleanup(qdv); +} + +static void qmp_marshal_user_def_cmd0(QDict *args, QObject **ret, Error **errp) +{ + Error *err = NULL; + Empty2 *retval; + + (void)args; + + retval = qmp_user_def_cmd0(&err); + if (err) { + goto out; + } + + qmp_marshal_output_Empty2(retval, ret, &err); + +out: + error_propagate(errp, err); +} + +static void qmp_marshal_user_def_cmd1(QDict *args, QObject **ret, Error **errp) +{ + Error *err = NULL; + QmpInputVisitor *qiv = qmp_input_visitor_new(QOBJECT(args), true); + QapiDeallocVisitor *qdv; + Visitor *v; + q_obj_user_def_cmd1_arg arg = {0}; + + v = qmp_input_get_visitor(qiv); + visit_start_struct(v, NULL, NULL, 0, &err); + if (err) { + goto out; + } + visit_type_q_obj_user_def_cmd1_arg_members(v, &arg, &err); + if (!err) { + visit_check_struct(v, &err); + } + visit_end_struct(v); + if (err) { + goto out; + } + + qmp_user_def_cmd1(arg.ud1a, &err); + +out: + error_propagate(errp, err); + qmp_input_visitor_cleanup(qiv); + qdv = qapi_dealloc_visitor_new(); + v = qapi_dealloc_get_visitor(qdv); + visit_start_struct(v, NULL, NULL, 0, NULL); + visit_type_q_obj_user_def_cmd1_arg_members(v, &arg, NULL); + visit_end_struct(v); + qapi_dealloc_visitor_cleanup(qdv); +} + +static void qmp_marshal_output_UserDefTwo(UserDefTwo *ret_in, QObject **ret_out, Error **errp) +{ + Error *err = NULL; + QmpOutputVisitor *qov = qmp_output_visitor_new(); + QapiDeallocVisitor *qdv; + Visitor *v; + + v = qmp_output_get_visitor(qov); + visit_type_UserDefTwo(v, "unused", &ret_in, &err); + if (err) { + goto out; + } + *ret_out = qmp_output_get_qobject(qov); + +out: + error_propagate(errp, err); + qmp_output_visitor_cleanup(qov); + qdv = qapi_dealloc_visitor_new(); + v = qapi_dealloc_get_visitor(qdv); + visit_type_UserDefTwo(v, "unused", &ret_in, NULL); + qapi_dealloc_visitor_cleanup(qdv); +} + +static void qmp_marshal_user_def_cmd2(QDict *args, QObject **ret, Error **errp) +{ + Error *err = NULL; + UserDefTwo *retval; + QmpInputVisitor *qiv = qmp_input_visitor_new(QOBJECT(args), true); + QapiDeallocVisitor *qdv; + Visitor *v; + q_obj_user_def_cmd2_arg arg = {0}; + + v = qmp_input_get_visitor(qiv); + visit_start_struct(v, NULL, NULL, 0, &err); + if (err) { + goto out; + } + visit_type_q_obj_user_def_cmd2_arg_members(v, &arg, &err); + if (!err) { + visit_check_struct(v, &err); + } + visit_end_struct(v); + if (err) { + goto out; + } + + retval = qmp_user_def_cmd2(arg.ud1a, arg.has_ud1b, arg.ud1b, &err); + if (err) { + goto out; + } + + qmp_marshal_output_UserDefTwo(retval, ret, &err); + +out: + error_propagate(errp, err); + qmp_input_visitor_cleanup(qiv); + qdv = qapi_dealloc_visitor_new(); + v = qapi_dealloc_get_visitor(qdv); + visit_start_struct(v, NULL, NULL, 0, NULL); + visit_type_q_obj_user_def_cmd2_arg_members(v, &arg, NULL); + visit_end_struct(v); + qapi_dealloc_visitor_cleanup(qdv); +} + +static void qmp_init_marshal(void) +{ + qmp_register_command("__org.qemu_x-command", qmp_marshal___org_qemu_x_command, QCO_NO_OPTIONS); + qmp_register_command("guest-get-time", qmp_marshal_guest_get_time, QCO_NO_OPTIONS); + qmp_register_command("guest-sync", qmp_marshal_guest_sync, QCO_NO_OPTIONS); + qmp_register_command("user_def_cmd", qmp_marshal_user_def_cmd, QCO_NO_OPTIONS); + qmp_register_command("user_def_cmd0", qmp_marshal_user_def_cmd0, QCO_NO_OPTIONS); + qmp_register_command("user_def_cmd1", qmp_marshal_user_def_cmd1, QCO_NO_OPTIONS); + qmp_register_command("user_def_cmd2", qmp_marshal_user_def_cmd2, QCO_NO_OPTIONS); +} + +qapi_init(qmp_init_marshal); diff --git a/tests/vhost-user-bridge b/tests/vhost-user-bridge new file mode 100755 index 0000000000000000000000000000000000000000..36d1ece0dc8a198846c3a8bf277c1f7d093736f5 GIT binary patch literal 83120 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 z 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 K#j_^WQU5 + * + * This work is licensed under the terms of the GNU GPL, version 2 or + * later. See the COPYING file in the top-level directory. + */ + +/* + * TODO: + * - main should get parameters from the command line. + * - implement all request handlers. Still not implemented: + * vubr_get_queue_num_exec() + * vubr_send_rarp_exec() + * - test for broken requests and virtqueue. + * - implement features defined by Virtio 1.0 spec. + * - support mergeable buffers and indirect descriptors. + * - implement clean shutdown. + * - implement non-blocking writes to UDP backend. + * - implement polling strategy. + * - implement clean starting/stopping of vq processing + * - implement clean starting/stopping of used and buffers + * dirty page logging. + */ + +#define _FILE_OFFSET_BITS 64 + +#include "qemu/osdep.h" +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "qemu/atomic.h" +#include "standard-headers/linux/virtio_net.h" +#include "standard-headers/linux/virtio_ring.h" + +#define VHOST_USER_BRIDGE_DEBUG 1 + +#define DPRINT(...) \ + do { \ + if (VHOST_USER_BRIDGE_DEBUG) { \ + printf(__VA_ARGS__); \ + } \ + } while (0) + +typedef void (*CallbackFunc)(int sock, void *ctx); + +typedef struct Event { + void *ctx; + CallbackFunc callback; +} Event; + +typedef struct Dispatcher { + int max_sock; + fd_set fdset; + Event events[FD_SETSIZE]; +} Dispatcher; + +static void +vubr_die(const char *s) +{ + perror(s); + exit(1); +} + +static int +dispatcher_init(Dispatcher *dispr) +{ + FD_ZERO(&dispr->fdset); + dispr->max_sock = -1; + return 0; +} + +static int +dispatcher_add(Dispatcher *dispr, int sock, void *ctx, CallbackFunc cb) +{ + if (sock >= FD_SETSIZE) { + fprintf(stderr, + "Error: Failed to add new event. sock %d should be less than %d\n", + sock, FD_SETSIZE); + return -1; + } + + dispr->events[sock].ctx = ctx; + dispr->events[sock].callback = cb; + + FD_SET(sock, &dispr->fdset); + if (sock > dispr->max_sock) { + dispr->max_sock = sock; + } + DPRINT("Added sock %d for watching. max_sock: %d\n", + sock, dispr->max_sock); + return 0; +} + +/* dispatcher_remove() is not currently in use but may be useful + * in the future. */ +static int +dispatcher_remove(Dispatcher *dispr, int sock) +{ + if (sock >= FD_SETSIZE) { + fprintf(stderr, + "Error: Failed to remove event. sock %d should be less than %d\n", + sock, FD_SETSIZE); + return -1; + } + + FD_CLR(sock, &dispr->fdset); + DPRINT("Sock %d removed from dispatcher watch.\n", sock); + return 0; +} + +/* timeout in us */ +static int +dispatcher_wait(Dispatcher *dispr, uint32_t timeout) +{ + struct timeval tv; + tv.tv_sec = timeout / 1000000; + tv.tv_usec = timeout % 1000000; + + fd_set fdset = dispr->fdset; + + /* wait until some of sockets become readable. */ + int rc = select(dispr->max_sock + 1, &fdset, 0, 0, &tv); + + if (rc == -1) { + vubr_die("select"); + } + + /* Timeout */ + if (rc == 0) { + return 0; + } + + /* Now call callback for every ready socket. */ + + int sock; + for (sock = 0; sock < dispr->max_sock + 1; sock++) { + /* The callback on a socket can remove other sockets from the + * dispatcher, thus we have to check that the socket is + * still not removed from dispatcher's list + */ + if (FD_ISSET(sock, &fdset) && FD_ISSET(sock, &dispr->fdset)) { + Event *e = &dispr->events[sock]; + e->callback(sock, e->ctx); + } + } + + return 0; +} + +typedef struct VubrVirtq { + int call_fd; + int kick_fd; + uint32_t size; + uint16_t last_avail_index; + uint16_t last_used_index; + struct vring_desc *desc; + struct vring_avail *avail; + struct vring_used *used; + uint64_t log_guest_addr; + int enable; +} VubrVirtq; + +/* Based on qemu/hw/virtio/vhost-user.c */ + +#define VHOST_MEMORY_MAX_NREGIONS 8 +#define VHOST_USER_F_PROTOCOL_FEATURES 30 +/* v1.0 compliant. */ +#define VIRTIO_F_VERSION_1 32 + +#define VHOST_LOG_PAGE 4096 + +enum VhostUserProtocolFeature { + VHOST_USER_PROTOCOL_F_MQ = 0, + VHOST_USER_PROTOCOL_F_LOG_SHMFD = 1, + VHOST_USER_PROTOCOL_F_RARP = 2, + + VHOST_USER_PROTOCOL_F_MAX +}; + +#define VHOST_USER_PROTOCOL_FEATURE_MASK ((1 << VHOST_USER_PROTOCOL_F_MAX) - 1) + +typedef enum VhostUserRequest { + VHOST_USER_NONE = 0, + VHOST_USER_GET_FEATURES = 1, + VHOST_USER_SET_FEATURES = 2, + VHOST_USER_SET_OWNER = 3, + VHOST_USER_RESET_OWNER = 4, + VHOST_USER_SET_MEM_TABLE = 5, + VHOST_USER_SET_LOG_BASE = 6, + VHOST_USER_SET_LOG_FD = 7, + VHOST_USER_SET_VRING_NUM = 8, + VHOST_USER_SET_VRING_ADDR = 9, + VHOST_USER_SET_VRING_BASE = 10, + VHOST_USER_GET_VRING_BASE = 11, + VHOST_USER_SET_VRING_KICK = 12, + VHOST_USER_SET_VRING_CALL = 13, + VHOST_USER_SET_VRING_ERR = 14, + VHOST_USER_GET_PROTOCOL_FEATURES = 15, + VHOST_USER_SET_PROTOCOL_FEATURES = 16, + VHOST_USER_GET_QUEUE_NUM = 17, + VHOST_USER_SET_VRING_ENABLE = 18, + VHOST_USER_SEND_RARP = 19, + VHOST_USER_MAX +} VhostUserRequest; + +typedef struct VhostUserMemoryRegion { + uint64_t guest_phys_addr; + uint64_t memory_size; + uint64_t userspace_addr; + uint64_t mmap_offset; +} VhostUserMemoryRegion; + +typedef struct VhostUserMemory { + uint32_t nregions; + uint32_t padding; + VhostUserMemoryRegion regions[VHOST_MEMORY_MAX_NREGIONS]; +} VhostUserMemory; + +typedef struct VhostUserLog { + uint64_t mmap_size; + uint64_t mmap_offset; +} VhostUserLog; + +typedef struct VhostUserMsg { + VhostUserRequest request; + +#define VHOST_USER_VERSION_MASK (0x3) +#define VHOST_USER_REPLY_MASK (0x1<<2) + uint32_t flags; + uint32_t size; /* the following payload size */ + union { +#define VHOST_USER_VRING_IDX_MASK (0xff) +#define VHOST_USER_VRING_NOFD_MASK (0x1<<8) + uint64_t u64; + struct vhost_vring_state state; + struct vhost_vring_addr addr; + VhostUserMemory memory; + VhostUserLog log; + } payload; + int fds[VHOST_MEMORY_MAX_NREGIONS]; + int fd_num; +} QEMU_PACKED VhostUserMsg; + +#define VHOST_USER_HDR_SIZE offsetof(VhostUserMsg, payload.u64) + +/* The version of the protocol we support */ +#define VHOST_USER_VERSION (0x1) + +#define MAX_NR_VIRTQUEUE (8) + +typedef struct VubrDevRegion { + /* Guest Physical address. */ + uint64_t gpa; + /* Memory region size. */ + uint64_t size; + /* QEMU virtual address (userspace). */ + uint64_t qva; + /* Starting offset in our mmaped space. */ + uint64_t mmap_offset; + /* Start address of mmaped space. */ + uint64_t mmap_addr; +} VubrDevRegion; + +typedef struct VubrDev { + int sock; + Dispatcher dispatcher; + uint32_t nregions; + VubrDevRegion regions[VHOST_MEMORY_MAX_NREGIONS]; + VubrVirtq vq[MAX_NR_VIRTQUEUE]; + int log_call_fd; + uint64_t log_size; + uint8_t *log_table; + int backend_udp_sock; + struct sockaddr_in backend_udp_dest; + int ready; + uint64_t features; + int hdrlen; +} VubrDev; + +static const char *vubr_request_str[] = { + [VHOST_USER_NONE] = "VHOST_USER_NONE", + [VHOST_USER_GET_FEATURES] = "VHOST_USER_GET_FEATURES", + [VHOST_USER_SET_FEATURES] = "VHOST_USER_SET_FEATURES", + [VHOST_USER_SET_OWNER] = "VHOST_USER_SET_OWNER", + [VHOST_USER_RESET_OWNER] = "VHOST_USER_RESET_OWNER", + [VHOST_USER_SET_MEM_TABLE] = "VHOST_USER_SET_MEM_TABLE", + [VHOST_USER_SET_LOG_BASE] = "VHOST_USER_SET_LOG_BASE", + [VHOST_USER_SET_LOG_FD] = "VHOST_USER_SET_LOG_FD", + [VHOST_USER_SET_VRING_NUM] = "VHOST_USER_SET_VRING_NUM", + [VHOST_USER_SET_VRING_ADDR] = "VHOST_USER_SET_VRING_ADDR", + [VHOST_USER_SET_VRING_BASE] = "VHOST_USER_SET_VRING_BASE", + [VHOST_USER_GET_VRING_BASE] = "VHOST_USER_GET_VRING_BASE", + [VHOST_USER_SET_VRING_KICK] = "VHOST_USER_SET_VRING_KICK", + [VHOST_USER_SET_VRING_CALL] = "VHOST_USER_SET_VRING_CALL", + [VHOST_USER_SET_VRING_ERR] = "VHOST_USER_SET_VRING_ERR", + [VHOST_USER_GET_PROTOCOL_FEATURES] = "VHOST_USER_GET_PROTOCOL_FEATURES", + [VHOST_USER_SET_PROTOCOL_FEATURES] = "VHOST_USER_SET_PROTOCOL_FEATURES", + [VHOST_USER_GET_QUEUE_NUM] = "VHOST_USER_GET_QUEUE_NUM", + [VHOST_USER_SET_VRING_ENABLE] = "VHOST_USER_SET_VRING_ENABLE", + [VHOST_USER_SEND_RARP] = "VHOST_USER_SEND_RARP", + [VHOST_USER_MAX] = "VHOST_USER_MAX", +}; + +static void +print_buffer(uint8_t *buf, size_t len) +{ + int i; + printf("Raw buffer:\n"); + for (i = 0; i < len; i++) { + if (i % 16 == 0) { + printf("\n"); + } + if (i % 4 == 0) { + printf(" "); + } + printf("%02x ", buf[i]); + } + printf("\n............................................................\n"); +} + +/* Translate guest physical address to our virtual address. */ +static uint64_t +gpa_to_va(VubrDev *dev, uint64_t guest_addr) +{ + int i; + + /* Find matching memory region. */ + for (i = 0; i < dev->nregions; i++) { + VubrDevRegion *r = &dev->regions[i]; + + if ((guest_addr >= r->gpa) && (guest_addr < (r->gpa + r->size))) { + return guest_addr - r->gpa + r->mmap_addr + r->mmap_offset; + } + } + + assert(!"address not found in regions"); + return 0; +} + +/* Translate qemu virtual address to our virtual address. */ +static uint64_t +qva_to_va(VubrDev *dev, uint64_t qemu_addr) +{ + int i; + + /* Find matching memory region. */ + for (i = 0; i < dev->nregions; i++) { + VubrDevRegion *r = &dev->regions[i]; + + if ((qemu_addr >= r->qva) && (qemu_addr < (r->qva + r->size))) { + return qemu_addr - r->qva + r->mmap_addr + r->mmap_offset; + } + } + + assert(!"address not found in regions"); + return 0; +} + +static void +vubr_message_read(int conn_fd, VhostUserMsg *vmsg) +{ + char control[CMSG_SPACE(VHOST_MEMORY_MAX_NREGIONS * sizeof(int))] = { }; + struct iovec iov = { + .iov_base = (char *)vmsg, + .iov_len = VHOST_USER_HDR_SIZE, + }; + struct msghdr msg = { + .msg_iov = &iov, + .msg_iovlen = 1, + .msg_control = control, + .msg_controllen = sizeof(control), + }; + size_t fd_size; + struct cmsghdr *cmsg; + int rc; + + rc = recvmsg(conn_fd, &msg, 0); + + if (rc == 0) { + vubr_die("recvmsg"); + fprintf(stderr, "Peer disconnected.\n"); + exit(1); + } + if (rc < 0) { + vubr_die("recvmsg"); + } + + vmsg->fd_num = 0; + for (cmsg = CMSG_FIRSTHDR(&msg); + cmsg != NULL; + cmsg = CMSG_NXTHDR(&msg, cmsg)) + { + if (cmsg->cmsg_level == SOL_SOCKET && cmsg->cmsg_type == SCM_RIGHTS) { + fd_size = cmsg->cmsg_len - CMSG_LEN(0); + vmsg->fd_num = fd_size / sizeof(int); + memcpy(vmsg->fds, CMSG_DATA(cmsg), fd_size); + break; + } + } + + if (vmsg->size > sizeof(vmsg->payload)) { + fprintf(stderr, + "Error: too big message request: %d, size: vmsg->size: %u, " + "while sizeof(vmsg->payload) = %zu\n", + vmsg->request, vmsg->size, sizeof(vmsg->payload)); + exit(1); + } + + if (vmsg->size) { + rc = read(conn_fd, &vmsg->payload, vmsg->size); + if (rc == 0) { + vubr_die("recvmsg"); + fprintf(stderr, "Peer disconnected.\n"); + exit(1); + } + if (rc < 0) { + vubr_die("recvmsg"); + } + + assert(rc == vmsg->size); + } +} + +static void +vubr_message_write(int conn_fd, VhostUserMsg *vmsg) +{ + int rc; + + do { + rc = write(conn_fd, vmsg, VHOST_USER_HDR_SIZE + vmsg->size); + } while (rc < 0 && errno == EINTR); + + if (rc < 0) { + vubr_die("write"); + } +} + +static void +vubr_backend_udp_sendbuf(VubrDev *dev, uint8_t *buf, size_t len) +{ + int slen = sizeof(struct sockaddr_in); + + if (sendto(dev->backend_udp_sock, buf, len, 0, + (struct sockaddr *) &dev->backend_udp_dest, slen) == -1) { + vubr_die("sendto()"); + } +} + +static int +vubr_backend_udp_recvbuf(VubrDev *dev, uint8_t *buf, size_t buflen) +{ + int slen = sizeof(struct sockaddr_in); + int rc; + + rc = recvfrom(dev->backend_udp_sock, buf, buflen, 0, + (struct sockaddr *) &dev->backend_udp_dest, + (socklen_t *)&slen); + if (rc == -1) { + vubr_die("recvfrom()"); + } + + return rc; +} + +static void +vubr_consume_raw_packet(VubrDev *dev, uint8_t *buf, uint32_t len) +{ + int hdrlen = dev->hdrlen; + DPRINT(" hdrlen = %d\n", dev->hdrlen); + + if (VHOST_USER_BRIDGE_DEBUG) { + print_buffer(buf, len); + } + vubr_backend_udp_sendbuf(dev, buf + hdrlen, len - hdrlen); +} + +/* Kick the log_call_fd if required. */ +static void +vubr_log_kick(VubrDev *dev) +{ + if (dev->log_call_fd != -1) { + DPRINT("Kicking the QEMU's log...\n"); + eventfd_write(dev->log_call_fd, 1); + } +} + +/* Kick the guest if necessary. */ +static void +vubr_virtqueue_kick(VubrVirtq *vq) +{ + if (!(vq->avail->flags & VRING_AVAIL_F_NO_INTERRUPT)) { + DPRINT("Kicking the guest...\n"); + eventfd_write(vq->call_fd, 1); + } +} + +static void +vubr_log_page(uint8_t *log_table, uint64_t page) +{ + DPRINT("Logged dirty guest page: %"PRId64"\n", page); + atomic_or(&log_table[page / 8], 1 << (page % 8)); +} + +static void +vubr_log_write(VubrDev *dev, uint64_t address, uint64_t length) +{ + uint64_t page; + + if (!(dev->features & (1ULL << VHOST_F_LOG_ALL)) || + !dev->log_table || !length) { + return; + } + + assert(dev->log_size > ((address + length - 1) / VHOST_LOG_PAGE / 8)); + + page = address / VHOST_LOG_PAGE; + while (page * VHOST_LOG_PAGE < address + length) { + vubr_log_page(dev->log_table, page); + page += VHOST_LOG_PAGE; + } + vubr_log_kick(dev); +} + +static void +vubr_post_buffer(VubrDev *dev, VubrVirtq *vq, uint8_t *buf, int32_t len) +{ + struct vring_desc *desc = vq->desc; + struct vring_avail *avail = vq->avail; + struct vring_used *used = vq->used; + uint64_t log_guest_addr = vq->log_guest_addr; + int32_t remaining_len = len; + + unsigned int size = vq->size; + + uint16_t avail_index = atomic_mb_read(&avail->idx); + + /* We check the available descriptors before posting the + * buffer, so here we assume that enough available + * descriptors. */ + assert(vq->last_avail_index != avail_index); + uint16_t a_index = vq->last_avail_index % size; + uint16_t u_index = vq->last_used_index % size; + uint16_t d_index = avail->ring[a_index]; + + int i = d_index; + uint32_t written_len = 0; + + do { + DPRINT("Post packet to guest on vq:\n"); + DPRINT(" size = %d\n", vq->size); + DPRINT(" last_avail_index = %d\n", vq->last_avail_index); + DPRINT(" last_used_index = %d\n", vq->last_used_index); + DPRINT(" a_index = %d\n", a_index); + DPRINT(" u_index = %d\n", u_index); + DPRINT(" d_index = %d\n", d_index); + DPRINT(" desc[%d].addr = 0x%016"PRIx64"\n", i, desc[i].addr); + DPRINT(" desc[%d].len = %d\n", i, desc[i].len); + DPRINT(" desc[%d].flags = %d\n", i, desc[i].flags); + DPRINT(" avail->idx = %d\n", avail_index); + DPRINT(" used->idx = %d\n", used->idx); + + if (!(desc[i].flags & VRING_DESC_F_WRITE)) { + /* FIXME: we should find writable descriptor. */ + fprintf(stderr, "Error: descriptor is not writable. Exiting.\n"); + exit(1); + } + + void *chunk_start = (void *)(uintptr_t)gpa_to_va(dev, desc[i].addr); + uint32_t chunk_len = desc[i].len; + uint32_t chunk_write_len = MIN(remaining_len, chunk_len); + + memcpy(chunk_start, buf + written_len, chunk_write_len); + vubr_log_write(dev, desc[i].addr, chunk_write_len); + remaining_len -= chunk_write_len; + written_len += chunk_write_len; + + if ((remaining_len == 0) || !(desc[i].flags & VRING_DESC_F_NEXT)) { + break; + } + + i = desc[i].next; + } while (1); + + if (remaining_len > 0) { + fprintf(stderr, + "Too long packet for RX, remaining_len = %d, Dropping...\n", + remaining_len); + return; + } + + /* Add descriptor to the used ring. */ + used->ring[u_index].id = d_index; + used->ring[u_index].len = len; + vubr_log_write(dev, + log_guest_addr + offsetof(struct vring_used, ring[u_index]), + sizeof(used->ring[u_index])); + + vq->last_avail_index++; + vq->last_used_index++; + + atomic_mb_set(&used->idx, vq->last_used_index); + vubr_log_write(dev, + log_guest_addr + offsetof(struct vring_used, idx), + sizeof(used->idx)); + + /* Kick the guest if necessary. */ + vubr_virtqueue_kick(vq); +} + +static int +vubr_process_desc(VubrDev *dev, VubrVirtq *vq) +{ + struct vring_desc *desc = vq->desc; + struct vring_avail *avail = vq->avail; + struct vring_used *used = vq->used; + uint64_t log_guest_addr = vq->log_guest_addr; + + unsigned int size = vq->size; + + uint16_t a_index = vq->last_avail_index % size; + uint16_t u_index = vq->last_used_index % size; + uint16_t d_index = avail->ring[a_index]; + + uint32_t i, len = 0; + size_t buf_size = 4096; + uint8_t buf[4096]; + + DPRINT("Chunks: "); + i = d_index; + do { + void *chunk_start = (void *)(uintptr_t)gpa_to_va(dev, desc[i].addr); + uint32_t chunk_len = desc[i].len; + + assert(!(desc[i].flags & VRING_DESC_F_WRITE)); + + if (len + chunk_len < buf_size) { + memcpy(buf + len, chunk_start, chunk_len); + DPRINT("%d ", chunk_len); + } else { + fprintf(stderr, "Error: too long packet. Dropping...\n"); + break; + } + + len += chunk_len; + + if (!(desc[i].flags & VRING_DESC_F_NEXT)) { + break; + } + + i = desc[i].next; + } while (1); + DPRINT("\n"); + + if (!len) { + return -1; + } + + /* Add descriptor to the used ring. */ + used->ring[u_index].id = d_index; + used->ring[u_index].len = len; + vubr_log_write(dev, + log_guest_addr + offsetof(struct vring_used, ring[u_index]), + sizeof(used->ring[u_index])); + + vubr_consume_raw_packet(dev, buf, len); + + return 0; +} + +static void +vubr_process_avail(VubrDev *dev, VubrVirtq *vq) +{ + struct vring_avail *avail = vq->avail; + struct vring_used *used = vq->used; + uint64_t log_guest_addr = vq->log_guest_addr; + + while (vq->last_avail_index != atomic_mb_read(&avail->idx)) { + vubr_process_desc(dev, vq); + vq->last_avail_index++; + vq->last_used_index++; + } + + atomic_mb_set(&used->idx, vq->last_used_index); + vubr_log_write(dev, + log_guest_addr + offsetof(struct vring_used, idx), + sizeof(used->idx)); +} + +static void +vubr_backend_recv_cb(int sock, void *ctx) +{ + VubrDev *dev = (VubrDev *) ctx; + VubrVirtq *rx_vq = &dev->vq[0]; + uint8_t buf[4096]; + struct virtio_net_hdr_v1 *hdr = (struct virtio_net_hdr_v1 *)buf; + int hdrlen = dev->hdrlen; + int buflen = sizeof(buf); + int len; + + if (!dev->ready) { + return; + } + + DPRINT("\n\n *** IN UDP RECEIVE CALLBACK ***\n\n"); + DPRINT(" hdrlen = %d\n", hdrlen); + + uint16_t avail_index = atomic_mb_read(&rx_vq->avail->idx); + + /* If there is no available descriptors, just do nothing. + * The buffer will be handled by next arrived UDP packet, + * or next kick on receive virtq. */ + if (rx_vq->last_avail_index == avail_index) { + DPRINT("Got UDP packet, but no available descriptors on RX virtq.\n"); + return; + } + + memset(buf, 0, hdrlen); + /* TODO: support mergeable buffers. */ + if (hdrlen == 12) + hdr->num_buffers = 1; + len = vubr_backend_udp_recvbuf(dev, buf + hdrlen, buflen - hdrlen); + + vubr_post_buffer(dev, rx_vq, buf, len + hdrlen); +} + +static void +vubr_kick_cb(int sock, void *ctx) +{ + VubrDev *dev = (VubrDev *) ctx; + eventfd_t kick_data; + ssize_t rc; + + rc = eventfd_read(sock, &kick_data); + if (rc == -1) { + vubr_die("eventfd_read()"); + } else { + DPRINT("Got kick_data: %016"PRIx64"\n", kick_data); + vubr_process_avail(dev, &dev->vq[1]); + } +} + +static int +vubr_none_exec(VubrDev *dev, VhostUserMsg *vmsg) +{ + DPRINT("Function %s() not implemented yet.\n", __func__); + return 0; +} + +static int +vubr_get_features_exec(VubrDev *dev, VhostUserMsg *vmsg) +{ + vmsg->payload.u64 = + ((1ULL << VIRTIO_NET_F_MRG_RXBUF) | + (1ULL << VHOST_F_LOG_ALL) | + (1ULL << VIRTIO_NET_F_GUEST_ANNOUNCE) | + (1ULL << VHOST_USER_F_PROTOCOL_FEATURES)); + + vmsg->size = sizeof(vmsg->payload.u64); + + DPRINT("Sending back to guest u64: 0x%016"PRIx64"\n", vmsg->payload.u64); + + /* Reply */ + return 1; +} + +static int +vubr_set_features_exec(VubrDev *dev, VhostUserMsg *vmsg) +{ + DPRINT("u64: 0x%016"PRIx64"\n", vmsg->payload.u64); + + dev->features = vmsg->payload.u64; + if ((dev->features & (1ULL << VIRTIO_F_VERSION_1)) || + (dev->features & (1ULL << VIRTIO_NET_F_MRG_RXBUF))) { + dev->hdrlen = 12; + } else { + dev->hdrlen = 10; + } + + return 0; +} + +static int +vubr_set_owner_exec(VubrDev *dev, VhostUserMsg *vmsg) +{ + return 0; +} + +static void +vubr_close_log(VubrDev *dev) +{ + if (dev->log_table) { + if (munmap(dev->log_table, dev->log_size) != 0) { + vubr_die("munmap()"); + } + + dev->log_table = 0; + } + if (dev->log_call_fd != -1) { + close(dev->log_call_fd); + dev->log_call_fd = -1; + } +} + +static int +vubr_reset_device_exec(VubrDev *dev, VhostUserMsg *vmsg) +{ + vubr_close_log(dev); + dev->ready = 0; + dev->features = 0; + return 0; +} + +static int +vubr_set_mem_table_exec(VubrDev *dev, VhostUserMsg *vmsg) +{ + int i; + VhostUserMemory *memory = &vmsg->payload.memory; + dev->nregions = memory->nregions; + + DPRINT("Nregions: %d\n", memory->nregions); + for (i = 0; i < dev->nregions; i++) { + void *mmap_addr; + VhostUserMemoryRegion *msg_region = &memory->regions[i]; + VubrDevRegion *dev_region = &dev->regions[i]; + + DPRINT("Region %d\n", i); + DPRINT(" guest_phys_addr: 0x%016"PRIx64"\n", + msg_region->guest_phys_addr); + DPRINT(" memory_size: 0x%016"PRIx64"\n", + msg_region->memory_size); + DPRINT(" userspace_addr 0x%016"PRIx64"\n", + msg_region->userspace_addr); + DPRINT(" mmap_offset 0x%016"PRIx64"\n", + msg_region->mmap_offset); + + dev_region->gpa = msg_region->guest_phys_addr; + dev_region->size = msg_region->memory_size; + dev_region->qva = msg_region->userspace_addr; + dev_region->mmap_offset = msg_region->mmap_offset; + + /* We don't use offset argument of mmap() since the + * mapped address has to be page aligned, and we use huge + * pages. */ + mmap_addr = mmap(0, dev_region->size + dev_region->mmap_offset, + PROT_READ | PROT_WRITE, MAP_SHARED, + vmsg->fds[i], 0); + + if (mmap_addr == MAP_FAILED) { + vubr_die("mmap"); + } + dev_region->mmap_addr = (uint64_t)(uintptr_t)mmap_addr; + DPRINT(" mmap_addr: 0x%016"PRIx64"\n", dev_region->mmap_addr); + + close(vmsg->fds[i]); + } + + return 0; +} + +static int +vubr_set_log_base_exec(VubrDev *dev, VhostUserMsg *vmsg) +{ + int fd; + uint64_t log_mmap_size, log_mmap_offset; + void *rc; + + assert(vmsg->fd_num == 1); + fd = vmsg->fds[0]; + + assert(vmsg->size == sizeof(vmsg->payload.log)); + log_mmap_offset = vmsg->payload.log.mmap_offset; + log_mmap_size = vmsg->payload.log.mmap_size; + DPRINT("Log mmap_offset: %"PRId64"\n", log_mmap_offset); + DPRINT("Log mmap_size: %"PRId64"\n", log_mmap_size); + + rc = mmap(0, log_mmap_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, + log_mmap_offset); + if (rc == MAP_FAILED) { + vubr_die("mmap"); + } + dev->log_table = rc; + dev->log_size = log_mmap_size; + + vmsg->size = sizeof(vmsg->payload.u64); + /* Reply */ + return 1; +} + +static int +vubr_set_log_fd_exec(VubrDev *dev, VhostUserMsg *vmsg) +{ + assert(vmsg->fd_num == 1); + dev->log_call_fd = vmsg->fds[0]; + DPRINT("Got log_call_fd: %d\n", vmsg->fds[0]); + return 0; +} + +static int +vubr_set_vring_num_exec(VubrDev *dev, VhostUserMsg *vmsg) +{ + unsigned int index = vmsg->payload.state.index; + unsigned int num = vmsg->payload.state.num; + + DPRINT("State.index: %d\n", index); + DPRINT("State.num: %d\n", num); + dev->vq[index].size = num; + return 0; +} + +static int +vubr_set_vring_addr_exec(VubrDev *dev, VhostUserMsg *vmsg) +{ + struct vhost_vring_addr *vra = &vmsg->payload.addr; + unsigned int index = vra->index; + VubrVirtq *vq = &dev->vq[index]; + + DPRINT("vhost_vring_addr:\n"); + DPRINT(" index: %d\n", vra->index); + DPRINT(" flags: %d\n", vra->flags); + DPRINT(" desc_user_addr: 0x%016llx\n", vra->desc_user_addr); + DPRINT(" used_user_addr: 0x%016llx\n", vra->used_user_addr); + DPRINT(" avail_user_addr: 0x%016llx\n", vra->avail_user_addr); + DPRINT(" log_guest_addr: 0x%016llx\n", vra->log_guest_addr); + + vq->desc = (struct vring_desc *)(uintptr_t)qva_to_va(dev, vra->desc_user_addr); + vq->used = (struct vring_used *)(uintptr_t)qva_to_va(dev, vra->used_user_addr); + vq->avail = (struct vring_avail *)(uintptr_t)qva_to_va(dev, vra->avail_user_addr); + vq->log_guest_addr = vra->log_guest_addr; + + DPRINT("Setting virtq addresses:\n"); + DPRINT(" vring_desc at %p\n", vq->desc); + DPRINT(" vring_used at %p\n", vq->used); + DPRINT(" vring_avail at %p\n", vq->avail); + + vq->last_used_index = vq->used->idx; + return 0; +} + +static int +vubr_set_vring_base_exec(VubrDev *dev, VhostUserMsg *vmsg) +{ + unsigned int index = vmsg->payload.state.index; + unsigned int num = vmsg->payload.state.num; + + DPRINT("State.index: %d\n", index); + DPRINT("State.num: %d\n", num); + dev->vq[index].last_avail_index = num; + + return 0; +} + +static int +vubr_get_vring_base_exec(VubrDev *dev, VhostUserMsg *vmsg) +{ + unsigned int index = vmsg->payload.state.index; + + DPRINT("State.index: %d\n", index); + vmsg->payload.state.num = dev->vq[index].last_avail_index; + vmsg->size = sizeof(vmsg->payload.state); + /* FIXME: this is a work-around for a bug in QEMU enabling + * too early vrings. When protocol features are enabled, + * we have to respect * VHOST_USER_SET_VRING_ENABLE request. */ + dev->ready = 0; + + if (dev->vq[index].call_fd != -1) { + close(dev->vq[index].call_fd); + dispatcher_remove(&dev->dispatcher, dev->vq[index].call_fd); + dev->vq[index].call_fd = -1; + } + if (dev->vq[index].kick_fd != -1) { + close(dev->vq[index].kick_fd); + dispatcher_remove(&dev->dispatcher, dev->vq[index].kick_fd); + dev->vq[index].kick_fd = -1; + } + + /* Reply */ + return 1; +} + +static int +vubr_set_vring_kick_exec(VubrDev *dev, VhostUserMsg *vmsg) +{ + uint64_t u64_arg = vmsg->payload.u64; + int index = u64_arg & VHOST_USER_VRING_IDX_MASK; + + DPRINT("u64: 0x%016"PRIx64"\n", vmsg->payload.u64); + + assert((u64_arg & VHOST_USER_VRING_NOFD_MASK) == 0); + assert(vmsg->fd_num == 1); + + if (dev->vq[index].kick_fd != -1) { + close(dev->vq[index].kick_fd); + dispatcher_remove(&dev->dispatcher, dev->vq[index].kick_fd); + } + dev->vq[index].kick_fd = vmsg->fds[0]; + DPRINT("Got kick_fd: %d for vq: %d\n", vmsg->fds[0], index); + + if (index % 2 == 1) { + /* TX queue. */ + dispatcher_add(&dev->dispatcher, dev->vq[index].kick_fd, + dev, vubr_kick_cb); + + DPRINT("Waiting for kicks on fd: %d for vq: %d\n", + dev->vq[index].kick_fd, index); + } + /* We temporarily use this hack to determine that both TX and RX + * queues are set up and ready for processing. + * FIXME: we need to rely in VHOST_USER_SET_VRING_ENABLE and + * actual kicks. */ + if (dev->vq[0].kick_fd != -1 && + dev->vq[1].kick_fd != -1) { + dev->ready = 1; + DPRINT("vhost-user-bridge is ready for processing queues.\n"); + } + return 0; + +} + +static int +vubr_set_vring_call_exec(VubrDev *dev, VhostUserMsg *vmsg) +{ + uint64_t u64_arg = vmsg->payload.u64; + int index = u64_arg & VHOST_USER_VRING_IDX_MASK; + + DPRINT("u64: 0x%016"PRIx64"\n", vmsg->payload.u64); + assert((u64_arg & VHOST_USER_VRING_NOFD_MASK) == 0); + assert(vmsg->fd_num == 1); + + if (dev->vq[index].call_fd != -1) { + close(dev->vq[index].call_fd); + dispatcher_remove(&dev->dispatcher, dev->vq[index].call_fd); + } + dev->vq[index].call_fd = vmsg->fds[0]; + DPRINT("Got call_fd: %d for vq: %d\n", vmsg->fds[0], index); + + return 0; +} + +static int +vubr_set_vring_err_exec(VubrDev *dev, VhostUserMsg *vmsg) +{ + DPRINT("u64: 0x%016"PRIx64"\n", vmsg->payload.u64); + return 0; +} + +static int +vubr_get_protocol_features_exec(VubrDev *dev, VhostUserMsg *vmsg) +{ + vmsg->payload.u64 = 1ULL << VHOST_USER_PROTOCOL_F_LOG_SHMFD; + DPRINT("u64: 0x%016"PRIx64"\n", vmsg->payload.u64); + vmsg->size = sizeof(vmsg->payload.u64); + + /* Reply */ + return 1; +} + +static int +vubr_set_protocol_features_exec(VubrDev *dev, VhostUserMsg *vmsg) +{ + /* FIXME: unimplented */ + DPRINT("u64: 0x%016"PRIx64"\n", vmsg->payload.u64); + return 0; +} + +static int +vubr_get_queue_num_exec(VubrDev *dev, VhostUserMsg *vmsg) +{ + DPRINT("Function %s() not implemented yet.\n", __func__); + return 0; +} + +static int +vubr_set_vring_enable_exec(VubrDev *dev, VhostUserMsg *vmsg) +{ + unsigned int index = vmsg->payload.state.index; + unsigned int enable = vmsg->payload.state.num; + + DPRINT("State.index: %d\n", index); + DPRINT("State.enable: %d\n", enable); + dev->vq[index].enable = enable; + return 0; +} + +static int +vubr_send_rarp_exec(VubrDev *dev, VhostUserMsg *vmsg) +{ + DPRINT("Function %s() not implemented yet.\n", __func__); + return 0; +} + +static int +vubr_execute_request(VubrDev *dev, VhostUserMsg *vmsg) +{ + /* Print out generic part of the request. */ + DPRINT( + "================== Vhost user message from QEMU ==================\n"); + DPRINT("Request: %s (%d)\n", vubr_request_str[vmsg->request], + vmsg->request); + DPRINT("Flags: 0x%x\n", vmsg->flags); + DPRINT("Size: %d\n", vmsg->size); + + if (vmsg->fd_num) { + int i; + DPRINT("Fds:"); + for (i = 0; i < vmsg->fd_num; i++) { + DPRINT(" %d", vmsg->fds[i]); + } + DPRINT("\n"); + } + + switch (vmsg->request) { + case VHOST_USER_NONE: + return vubr_none_exec(dev, vmsg); + case VHOST_USER_GET_FEATURES: + return vubr_get_features_exec(dev, vmsg); + case VHOST_USER_SET_FEATURES: + return vubr_set_features_exec(dev, vmsg); + case VHOST_USER_SET_OWNER: + return vubr_set_owner_exec(dev, vmsg); + case VHOST_USER_RESET_OWNER: + return vubr_reset_device_exec(dev, vmsg); + case VHOST_USER_SET_MEM_TABLE: + return vubr_set_mem_table_exec(dev, vmsg); + case VHOST_USER_SET_LOG_BASE: + return vubr_set_log_base_exec(dev, vmsg); + case VHOST_USER_SET_LOG_FD: + return vubr_set_log_fd_exec(dev, vmsg); + case VHOST_USER_SET_VRING_NUM: + return vubr_set_vring_num_exec(dev, vmsg); + case VHOST_USER_SET_VRING_ADDR: + return vubr_set_vring_addr_exec(dev, vmsg); + case VHOST_USER_SET_VRING_BASE: + return vubr_set_vring_base_exec(dev, vmsg); + case VHOST_USER_GET_VRING_BASE: + return vubr_get_vring_base_exec(dev, vmsg); + case VHOST_USER_SET_VRING_KICK: + return vubr_set_vring_kick_exec(dev, vmsg); + case VHOST_USER_SET_VRING_CALL: + return vubr_set_vring_call_exec(dev, vmsg); + case VHOST_USER_SET_VRING_ERR: + return vubr_set_vring_err_exec(dev, vmsg); + case VHOST_USER_GET_PROTOCOL_FEATURES: + return vubr_get_protocol_features_exec(dev, vmsg); + case VHOST_USER_SET_PROTOCOL_FEATURES: + return vubr_set_protocol_features_exec(dev, vmsg); + case VHOST_USER_GET_QUEUE_NUM: + return vubr_get_queue_num_exec(dev, vmsg); + case VHOST_USER_SET_VRING_ENABLE: + return vubr_set_vring_enable_exec(dev, vmsg); + case VHOST_USER_SEND_RARP: + return vubr_send_rarp_exec(dev, vmsg); + + case VHOST_USER_MAX: + assert(vmsg->request != VHOST_USER_MAX); + } + return 0; +} + +static void +vubr_receive_cb(int sock, void *ctx) +{ + VubrDev *dev = (VubrDev *) ctx; + VhostUserMsg vmsg; + int reply_requested; + + vubr_message_read(sock, &vmsg); + reply_requested = vubr_execute_request(dev, &vmsg); + if (reply_requested) { + /* Set the version in the flags when sending the reply */ + vmsg.flags &= ~VHOST_USER_VERSION_MASK; + vmsg.flags |= VHOST_USER_VERSION; + vmsg.flags |= VHOST_USER_REPLY_MASK; + vubr_message_write(sock, &vmsg); + } +} + +static void +vubr_accept_cb(int sock, void *ctx) +{ + VubrDev *dev = (VubrDev *)ctx; + int conn_fd; + struct sockaddr_un un; + socklen_t len = sizeof(un); + + conn_fd = accept(sock, (struct sockaddr *) &un, &len); + if (conn_fd == -1) { + vubr_die("accept()"); + } + DPRINT("Got connection from remote peer on sock %d\n", conn_fd); + dispatcher_add(&dev->dispatcher, conn_fd, ctx, vubr_receive_cb); +} + +static VubrDev * +vubr_new(const char *path, bool client) +{ + VubrDev *dev = (VubrDev *) calloc(1, sizeof(VubrDev)); + dev->nregions = 0; + int i; + struct sockaddr_un un; + CallbackFunc cb; + size_t len; + + for (i = 0; i < MAX_NR_VIRTQUEUE; i++) { + dev->vq[i] = (VubrVirtq) { + .call_fd = -1, .kick_fd = -1, + .size = 0, + .last_avail_index = 0, .last_used_index = 0, + .desc = 0, .avail = 0, .used = 0, + .enable = 0, + }; + } + + /* Init log */ + dev->log_call_fd = -1; + dev->log_size = 0; + dev->log_table = 0; + dev->ready = 0; + dev->features = 0; + + /* Get a UNIX socket. */ + dev->sock = socket(AF_UNIX, SOCK_STREAM, 0); + if (dev->sock == -1) { + vubr_die("socket"); + } + + un.sun_family = AF_UNIX; + strcpy(un.sun_path, path); + len = sizeof(un.sun_family) + strlen(path); + + if (!client) { + unlink(path); + + if (bind(dev->sock, (struct sockaddr *) &un, len) == -1) { + vubr_die("bind"); + } + + if (listen(dev->sock, 1) == -1) { + vubr_die("listen"); + } + cb = vubr_accept_cb; + } else { + if (connect(dev->sock, (struct sockaddr *)&un, len) == -1) { + vubr_die("connect"); + } + cb = vubr_receive_cb; + } + + dispatcher_init(&dev->dispatcher); + dispatcher_add(&dev->dispatcher, dev->sock, (void *)dev, cb); + + DPRINT("Waiting for connections on UNIX socket %s ...\n", path); + return dev; +} + +static void +vubr_set_host(struct sockaddr_in *saddr, const char *host) +{ + if (isdigit(host[0])) { + if (!inet_aton(host, &saddr->sin_addr)) { + fprintf(stderr, "inet_aton() failed.\n"); + exit(1); + } + } else { + struct hostent *he = gethostbyname(host); + + if (!he) { + fprintf(stderr, "gethostbyname() failed.\n"); + exit(1); + } + saddr->sin_addr = *(struct in_addr *)he->h_addr; + } +} + +static void +vubr_backend_udp_setup(VubrDev *dev, + const char *local_host, + const char *local_port, + const char *remote_host, + const char *remote_port) +{ + int sock; + const char *r; + + int lport, rport; + + lport = strtol(local_port, (char **)&r, 0); + if (r == local_port) { + fprintf(stderr, "lport parsing failed.\n"); + exit(1); + } + + rport = strtol(remote_port, (char **)&r, 0); + if (r == remote_port) { + fprintf(stderr, "rport parsing failed.\n"); + exit(1); + } + + struct sockaddr_in si_local = { + .sin_family = AF_INET, + .sin_port = htons(lport), + }; + + vubr_set_host(&si_local, local_host); + + /* setup destination for sends */ + dev->backend_udp_dest = (struct sockaddr_in) { + .sin_family = AF_INET, + .sin_port = htons(rport), + }; + vubr_set_host(&dev->backend_udp_dest, remote_host); + + sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); + if (sock == -1) { + vubr_die("socket"); + } + + if (bind(sock, (struct sockaddr *)&si_local, sizeof(si_local)) == -1) { + vubr_die("bind"); + } + + dev->backend_udp_sock = sock; + dispatcher_add(&dev->dispatcher, sock, dev, vubr_backend_recv_cb); + DPRINT("Waiting for data from udp backend on %s:%d...\n", + local_host, lport); +} + +static void +vubr_run(VubrDev *dev) +{ + while (1) { + /* timeout 200ms */ + dispatcher_wait(&dev->dispatcher, 200000); + /* Here one can try polling strategy. */ + } +} + +static int +vubr_parse_host_port(const char **host, const char **port, const char *buf) +{ + char *p = strchr(buf, ':'); + + if (!p) { + return -1; + } + *p = '\0'; + *host = strdup(buf); + *port = strdup(p + 1); + return 0; +} + +#define DEFAULT_UD_SOCKET "/tmp/vubr.sock" +#define DEFAULT_LHOST "127.0.0.1" +#define DEFAULT_LPORT "4444" +#define DEFAULT_RHOST "127.0.0.1" +#define DEFAULT_RPORT "5555" + +static const char *ud_socket_path = DEFAULT_UD_SOCKET; +static const char *lhost = DEFAULT_LHOST; +static const char *lport = DEFAULT_LPORT; +static const char *rhost = DEFAULT_RHOST; +static const char *rport = DEFAULT_RPORT; + +int +main(int argc, char *argv[]) +{ + VubrDev *dev; + int opt; + bool client = false; + + while ((opt = getopt(argc, argv, "l:r:u:c")) != -1) { + + switch (opt) { + case 'l': + if (vubr_parse_host_port(&lhost, &lport, optarg) < 0) { + goto out; + } + break; + case 'r': + if (vubr_parse_host_port(&rhost, &rport, optarg) < 0) { + goto out; + } + break; + case 'u': + ud_socket_path = strdup(optarg); + break; + case 'c': + client = true; + break; + default: + goto out; + } + } + + DPRINT("ud socket: %s (%s)\n", ud_socket_path, + client ? "client" : "server"); + DPRINT("local: %s:%s\n", lhost, lport); + DPRINT("remote: %s:%s\n", rhost, rport); + + dev = vubr_new(ud_socket_path, client); + if (!dev) { + return 1; + } + + vubr_backend_udp_setup(dev, lhost, lport, rhost, rport); + vubr_run(dev); + return 0; + +out: + fprintf(stderr, "Usage: %s ", argv[0]); + fprintf(stderr, "[-u ud_socket_path] [-l lhost:lport] [-r rhost:rport]\n"); + fprintf(stderr, "\t-u path to unix doman socket. default: %s\n", + DEFAULT_UD_SOCKET); + fprintf(stderr, "\t-l local host and port. default: %s:%s\n", + DEFAULT_LHOST, DEFAULT_LPORT); + fprintf(stderr, "\t-r remote host and port. default: %s:%s\n", + DEFAULT_RHOST, DEFAULT_RPORT); + + return 1; +} diff --git a/tests/vhost-user-test.c.orig b/tests/vhost-user-test.c.orig new file mode 100644 index 0000000000..b491e6fcb6 --- /dev/null +++ b/tests/vhost-user-test.c.orig @@ -0,0 +1,364 @@ +/* + * QTest testcase for the vhost-user + * + * Copyright (c) 2014 Virtual Open Systems Sarl. + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. + * + */ + +#include + +#include "libqtest.h" +#include "qemu/option.h" +#include "sysemu/char.h" +#include "sysemu/sysemu.h" + +#include +#include +#include +#include + +/* GLIB version compatibility flags */ +#if !GLIB_CHECK_VERSION(2, 26, 0) +#define G_TIME_SPAN_SECOND (G_GINT64_CONSTANT(1000000)) +#endif + +#if GLIB_CHECK_VERSION(2, 28, 0) +#define HAVE_MONOTONIC_TIME +#endif + +#define QEMU_CMD_ACCEL " -machine accel=tcg" +#define QEMU_CMD_MEM " -m 512 -object memory-backend-file,id=mem,size=512M,"\ + "mem-path=%s,share=on -numa node,memdev=mem" +#define QEMU_CMD_CHR " -chardev socket,id=chr0,path=%s" +#define QEMU_CMD_NETDEV " -netdev vhost-user,id=net0,chardev=chr0,vhostforce" +#define QEMU_CMD_NET " -device virtio-net-pci,netdev=net0 " +#define QEMU_CMD_ROM " -option-rom ../pc-bios/pxe-virtio.rom" + +#define QEMU_CMD QEMU_CMD_ACCEL QEMU_CMD_MEM QEMU_CMD_CHR \ + QEMU_CMD_NETDEV QEMU_CMD_NET QEMU_CMD_ROM + +#define HUGETLBFS_MAGIC 0x958458f6 + +/*********** FROM hw/virtio/vhost-user.c *************************************/ + +#define VHOST_MEMORY_MAX_NREGIONS 8 + +#define VHOST_USER_F_PROTOCOL_FEATURES 30 + +typedef enum VhostUserRequest { + VHOST_USER_NONE = 0, + VHOST_USER_GET_FEATURES = 1, + VHOST_USER_SET_FEATURES = 2, + VHOST_USER_SET_OWNER = 3, + VHOST_USER_RESET_DEVICE = 4, + VHOST_USER_SET_MEM_TABLE = 5, + VHOST_USER_SET_LOG_BASE = 6, + VHOST_USER_SET_LOG_FD = 7, + VHOST_USER_SET_VRING_NUM = 8, + VHOST_USER_SET_VRING_ADDR = 9, + VHOST_USER_SET_VRING_BASE = 10, + VHOST_USER_GET_VRING_BASE = 11, + VHOST_USER_SET_VRING_KICK = 12, + VHOST_USER_SET_VRING_CALL = 13, + VHOST_USER_SET_VRING_ERR = 14, + VHOST_USER_GET_PROTOCOL_FEATURES = 15, + VHOST_USER_SET_PROTOCOL_FEATURES = 16, + VHOST_USER_MAX +} VhostUserRequest; + +typedef struct VhostUserMemoryRegion { + uint64_t guest_phys_addr; + uint64_t memory_size; + uint64_t userspace_addr; + uint64_t mmap_offset; +} VhostUserMemoryRegion; + +typedef struct VhostUserMemory { + uint32_t nregions; + uint32_t padding; + VhostUserMemoryRegion regions[VHOST_MEMORY_MAX_NREGIONS]; +} VhostUserMemory; + +typedef struct VhostUserMsg { + VhostUserRequest request; + +#define VHOST_USER_VERSION_MASK (0x3) +#define VHOST_USER_REPLY_MASK (0x1<<2) + uint32_t flags; + uint32_t size; /* the following payload size */ + union { + uint64_t u64; + struct vhost_vring_state state; + struct vhost_vring_addr addr; + VhostUserMemory memory; + }; +} QEMU_PACKED VhostUserMsg; + +static VhostUserMsg m __attribute__ ((unused)); +#define VHOST_USER_HDR_SIZE (sizeof(m.request) \ + + sizeof(m.flags) \ + + sizeof(m.size)) + +#define VHOST_USER_PAYLOAD_SIZE (sizeof(m) - VHOST_USER_HDR_SIZE) + +/* The version of the protocol we support */ +#define VHOST_USER_VERSION (0x1) +/*****************************************************************************/ + +int fds_num = 0, fds[VHOST_MEMORY_MAX_NREGIONS]; +static VhostUserMemory memory; +static CompatGMutex data_mutex; +static CompatGCond data_cond; + +#if !GLIB_CHECK_VERSION(2, 32, 0) +static gboolean g_cond_wait_until(CompatGCond cond, CompatGMutex mutex, + gint64 end_time) +{ + gboolean ret = FALSE; + end_time -= g_get_monotonic_time(); + GTimeVal time = { end_time / G_TIME_SPAN_SECOND, + end_time % G_TIME_SPAN_SECOND }; + ret = g_cond_timed_wait(cond, mutex, &time); + return ret; +} +#endif + +static void wait_for_fds(void) +{ + gint64 end_time; + + g_mutex_lock(&data_mutex); + end_time = g_get_monotonic_time() + 5 * G_TIME_SPAN_SECOND; + while (!fds_num) { + if (!g_cond_wait_until(&data_cond, &data_mutex, end_time)) { + /* timeout has passed */ + g_assert(fds_num); + break; + } + } + + /* check for sanity */ + g_assert_cmpint(fds_num, >, 0); + g_assert_cmpint(fds_num, ==, memory.nregions); + + g_mutex_unlock(&data_mutex); +} + +static void read_guest_mem(void) +{ + uint32_t *guest_mem; + int i, j; + size_t size; + + wait_for_fds(); + + /* iterate all regions */ + for (i = 0; i < fds_num; i++) { + + /* We'll check only the region statring at 0x0*/ + if (memory.regions[i].guest_phys_addr != 0x0) { + continue; + } + + g_assert_cmpint(memory.regions[i].memory_size, >, 1024); + + size = memory.regions[i].memory_size + memory.regions[i].mmap_offset; + + guest_mem = mmap(0, size, PROT_READ | PROT_WRITE, + MAP_SHARED, fds[i], 0); + + g_assert(guest_mem != MAP_FAILED); + guest_mem += (memory.regions[i].mmap_offset / sizeof(*guest_mem)); + + for (j = 0; j < 256; j++) { + uint32_t a = readl(memory.regions[i].guest_phys_addr + j*4); + uint32_t b = guest_mem[j]; + + g_assert_cmpint(a, ==, b); + } + + munmap(guest_mem, memory.regions[i].memory_size); + } + + g_mutex_unlock(&data_mutex); +} + +static void *thread_function(void *data) +{ + GMainLoop *loop; + loop = g_main_loop_new(NULL, FALSE); + g_main_loop_run(loop); + return NULL; +} + +static int chr_can_read(void *opaque) +{ + return VHOST_USER_HDR_SIZE; +} + +static void chr_read(void *opaque, const uint8_t *buf, int size) +{ + CharDriverState *chr = opaque; + VhostUserMsg msg; + uint8_t *p = (uint8_t *) &msg; + int fd; + + if (size != VHOST_USER_HDR_SIZE) { + g_test_message("Wrong message size received %d\n", size); + return; + } + + g_mutex_lock(&data_mutex); + memcpy(p, buf, VHOST_USER_HDR_SIZE); + + if (msg.size) { + p += VHOST_USER_HDR_SIZE; + qemu_chr_fe_read_all(chr, p, msg.size); + } + + switch (msg.request) { + case VHOST_USER_GET_FEATURES: + /* send back features to qemu */ + msg.flags |= VHOST_USER_REPLY_MASK; + msg.size = sizeof(m.u64); + msg.u64 = 0x1ULL << VHOST_USER_F_PROTOCOL_FEATURES; + p = (uint8_t *) &msg; + qemu_chr_fe_write_all(chr, p, VHOST_USER_HDR_SIZE + msg.size); + break; + + case VHOST_USER_SET_FEATURES: + g_assert_cmpint(msg.u64 & (0x1ULL << VHOST_USER_F_PROTOCOL_FEATURES), + !=, 0ULL); + break; + + case VHOST_USER_GET_PROTOCOL_FEATURES: + /* send back features to qemu */ + msg.flags |= VHOST_USER_REPLY_MASK; + msg.size = sizeof(m.u64); + msg.u64 = 0; + p = (uint8_t *) &msg; + qemu_chr_fe_write_all(chr, p, VHOST_USER_HDR_SIZE + msg.size); + break; + + case VHOST_USER_GET_VRING_BASE: + /* send back vring base to qemu */ + msg.flags |= VHOST_USER_REPLY_MASK; + msg.size = sizeof(m.state); + msg.state.num = 0; + p = (uint8_t *) &msg; + qemu_chr_fe_write_all(chr, p, VHOST_USER_HDR_SIZE + msg.size); + break; + + case VHOST_USER_SET_MEM_TABLE: + /* received the mem table */ + memcpy(&memory, &msg.memory, sizeof(msg.memory)); + fds_num = qemu_chr_fe_get_msgfds(chr, fds, sizeof(fds) / sizeof(int)); + + /* signal the test that it can continue */ + g_cond_signal(&data_cond); + break; + + case VHOST_USER_SET_VRING_KICK: + case VHOST_USER_SET_VRING_CALL: + /* consume the fd */ + qemu_chr_fe_get_msgfds(chr, &fd, 1); + /* + * This is a non-blocking eventfd. + * The receive function forces it to be blocking, + * so revert it back to non-blocking. + */ + qemu_set_nonblock(fd); + break; + default: + break; + } + g_mutex_unlock(&data_mutex); +} + +static const char *init_hugepagefs(void) +{ + const char *path; + struct statfs fs; + int ret; + + path = getenv("QTEST_HUGETLBFS_PATH"); + if (!path) { + path = "/hugetlbfs"; + } + + if (access(path, R_OK | W_OK | X_OK)) { + g_test_message("access on path (%s): %s\n", path, strerror(errno)); + return NULL; + } + + do { + ret = statfs(path, &fs); + } while (ret != 0 && errno == EINTR); + + if (ret != 0) { + g_test_message("statfs on path (%s): %s\n", path, strerror(errno)); + return NULL; + } + + if (fs.f_type != HUGETLBFS_MAGIC) { + g_test_message("Warning: path not on HugeTLBFS: %s\n", path); + return NULL; + } + + return path; +} + +int main(int argc, char **argv) +{ + QTestState *s = NULL; + CharDriverState *chr = NULL; + const char *hugefs = 0; + char *socket_path = 0; + char *qemu_cmd = 0; + char *chr_path = 0; + int ret; + + g_test_init(&argc, &argv, NULL); + + module_call_init(MODULE_INIT_QOM); + + hugefs = init_hugepagefs(); + if (!hugefs) { + return 0; + } + + socket_path = g_strdup_printf("/tmp/vhost-%d.sock", getpid()); + + /* create char dev and add read handlers */ + qemu_add_opts(&qemu_chardev_opts); + chr_path = g_strdup_printf("unix:%s,server,nowait", socket_path); + chr = qemu_chr_new("chr0", chr_path, NULL); + g_free(chr_path); + qemu_chr_add_handlers(chr, chr_can_read, chr_read, NULL, chr); + + /* run the main loop thread so the chardev may operate */ + g_mutex_init(&data_mutex); + g_cond_init(&data_cond); + g_thread_new(NULL, thread_function, NULL); + + qemu_cmd = g_strdup_printf(QEMU_CMD, hugefs, socket_path); + s = qtest_start(qemu_cmd); + g_free(qemu_cmd); + + qtest_add_func("/vhost-user/read-guest-mem", read_guest_mem); + + ret = g_test_run(); + + if (s) { + qtest_quit(s); + } + + /* cleanup */ + unlink(socket_path); + g_free(socket_path); + + return ret; +} -- 2.49.0

G2ajDCB7 z5cF*U2BU8WFdTh*fYInX0Ep3d1PDjJ3V;NC9zYcOEdZqGI|0O_&j(0Ezbe2i^s52L z(60_KAN?8ti_xzMupIqb0BPvg23U)}Gr&glT>!SC?+PGC-wj|7`tAVf=z9QUqF)C< zfxa(54*GQgPNLruK!tui01Ew90O!ze0B{NYh5*;lZv>EselvhUDX(lxoGbw5p1s-{ zU|9-IG!{_tRwbRx08-A`jyg;CA44|wal>wWb_m06d^w{ACzR^&(7N5&i%_B(O7mzM zXWkMFETw1~zjjOTU#WtoaWWvmt(Q_cP2;5mw>eAGXc|`&671@wGMdIH32s}KN@*H3 zV2TrZK4m)mTe~G>sB|65Prx70@(hCBYji<!Xg#atU8xJ92*+)E}va74OXaV^BpDmSe-KyTLKK>GQez_ zURv_>^e6K{OU|BtS$9Qv!&hbnH$TN!U$*)hW_T;!Zb@K6%O#EtP31@X^MnIUB#>!& zdHhvf!?~>9U_hHwn2wgy9mI(1RIRw2JF#HzQH`lg%-g)eu`z(S)OCS1)god zMV=-8cu@y1SZ^?}Q*l~19QO!9^acaHef|$};O4`BDdQaYcL8Naep_Y^FiUSRB;rH( zb)GUa^T)r)w5tP-G?Y1j>XX5MPaXR41e1A|^g0f8ii$rO478#?*B0@t9C;emb_|FCd{`!BBkNG$rKfvgb)8CmKQSaxo!GJaejOyE;Cm3HzCL9NIA4`BcpMT35 z|Hg0p#&7(_Z~Vq@{Kjwm?}C`3h)_!rK1C7GGV^I8LytNQ(lZoEYdu3xmGSBGHSvr;JeL#Y@bL^w*+q&zV-|G~ zWMv+Dk*h6Zn^J0_7hdG+rC&Yt0E}*d_?3em&l5%60!4_OUR-3Y&wK2ohqDxY=A`a2 z#hizGo;mLn&xl360L2-mT{)mGfNhzPE&yJ$a4bWehzi;i_?+2o;=e&>ztTcfNd~{Q zM{U=g`i3)<{0#?R-(PpOBq4Zmvk_5}CD!j^`E4ZD2M0FQTW%`NUO(7xZ7uo6tVtrj z8-ks4CIsIopLl%02Yx2pboc5u|N8T3N7nUz*YtvG#;7&>0;j!ipo-XLQG7JmW$x*t z${tCxJG?qQa&AX^GeyS>wYzx7eD8WQy{G-V>=C16&)2Q5z5PmTui<{G1_?)|%)NN9 z?i0`RD@Uf7@7o~DAG2)lqdg8*_MRP9dk*Wk@@2T{kmveuJ~Om}+>#lAsW~&(R}BmQ z_@<3R=arquMP+R7+dJrK#=HL89+VtSaxQA}Hf-_1_vM*a#%xJ?THS8a?V^IOLz=do z+WmUqr`WH(wBnoJEsG8;-4IlLTCE-{7aX-1yzF!R0Q2hA);;eQXSd@1Vty5;KdsZI ziJZp!6s2@r+{4dt(5b!#QOAfA(F=y(OsMj4hvTLdg}ve)*+kAM^j+t2%kkA=@$ISU zXNFriua~rbp4|4?<9pQdhugO24ZGa)=#Qe?xw3N6yz1ANs^w3snz#aS9##s*wN~!+uDq9XYU7}w?r+yu;u)YWmolsV%P0iEtCyj z&}PC|r%5i}J2s_0{p;@W;u)`d9>_a;q59EXPhC_U=iiKM+hAPe#JbO_4V7ff=K0%= z8EKX@a#leLDBSMpFzgiHH*?V*^*rB6s>!LTnJy!K%*^}V{QbP~H5*m4TD`aJ(#TGv z_2wt{-=t-%`k_@GyR}u8;{ltzEz7ImgYYa)0B{0-k&I$&Y_*+PiJC`g>BWq178rG_@eiNgDg0 z(YyWSO;(Ivc-&68Bz@l5vXV9*rq5XOO+~$IbKUcS1b90)q+a!zay0$f?f!dhZY6za zm>TG-oocR>^Ixmp&aboY&qnnw?Mf-zWZPawYTw&Ea<#Abs#Q+m$1F$14P8>cJ%4Fg z!iy>?z9mI=hZ@*E*x>E5?m^zOkq2w zY68@n9hmxmg-mojE!IqbOZ@f8BL8P4qmAXFIoYBAN-lc18PE>*OWDs&?6R4nRA6mm=Rk$wlM49Nm8<7cFxH#u>dNaIX@} zHkON~57cl1n2!?#7RZM%mW#%@13G-qbKvgRST0)b4zxpiPaHT|TWkaFy=5%_#evJu zST0&z2WU5#i!^Fy{JMbcXkp39vw1V~8xC9&lq=%or)jx2ZzdfFjt^~h;`t)j{x~P9 z@eh2*+512~cbq$US3G+Jm!Hyz55I*9{(%oa;NV;b^P}bNu-sqBPv11k&&wact0iNX zj02X74&|P(oiRWB_KH6Qu1*N<8fEY3_QNogV-YfPg&a7(LN-4R$j9x8BRD?%9>e{n z5CS29jIIO&F79XDSjgJ|{5-hDB#+?SoJcm7t%Oy^$i$a&8(|nU!Wk)evsv9a~bgMtIP#6nP48!Qp{*)TC~El zq1jwMfJ|iG2ppY5MD@)*73Mw*p`N*U2!F}K1#oLzt@_n$%|y`EOk5MvWdQ;(6Ioiy zL}un7u(cP_lP~-JSQoVC&*=;x(4If)4bb1)SsVVw=*$u*v4mS&Xwx6hzvFEB8{6^k z!^+B|&C34R#=yu78v`Yi5NIcmv+d7;v+AuC`w_;n?nwYJ0~on#lt@CG&bT%}TmE=<0|%5wLZEGF+FqQI4guN- zMCl`AtYYo`qZASXZT%x?8N?!nm(#p`>hSNU zdSu@m;Ww^q@Oq1lZ3jmSTG&q8>%WBvJ~z%f$1kdPY>>!e)rrV$8&c~wYu%&4{c~r0 za=%`ke{|aG#8Z!y9?iOHya(9#&tE;j``kSD6EDQy_ttM^7B~1(>6mv@->3vXhD`mG z^q~dsOUjR`ZFB2ooVl{hcc_o`nV<`C7B9beSmhLTI@o1hXutRF8DXybcf9I2YA0W& zJvveNy1|Tt%l~+BV&0~18%8`xEF72bR(*8S>^4iU1Uz;4I&=8A_dS!AFSJ~~T-o8? znPvQJQR(t!Jqy>%t`D?MEzQ>SU$AZ7L)$a62Rk$yb1z7IRS3XnM=Ud*XNFK2Kiuc}dxKyXeVF23`-l7j$7Qe~=Hq)xick z@AR}C>M(hz;G0U=^yyJSjrE^r*VwW%tDuK@b=M|~#lpG;bGLS171w^-%Fl1(b`{Q2 zp-5FFJj4YG3$!Oc&PcBrbru4R*0)H{GvY`3q7jYhznk!LYh4767if=}1Ex1{ixyf2 zA7~u{4j8XCiMKMT-)fWmX5fIt0@J@Uso!Ly^%BN&=XM~l{*)0v#-lx24oGw7VIYuB zGU4|%sh?5x>HCj1;WyO*nP{XBi}}~W0htB1pU@;e&LltMqu((7R+IK=YtlYwznlZ| zqdjX5NH;Ozr|qD!!1|!XC-f zY7ThN1ky*)UU7yQy@!DG8I%h?03P5z* z45V!Nk5IqcA0WzsDG%)-i;~Ugu^Q9=KkU5?bW_FFKRhR`SfrMyMbV4iTq#hoNWdZ= zRtZqBAZqRv6}4iJqD2Y>sES(fPzs_}4N#>hYSb!tFM6Y*qE=1Q=A-FgbF?aI^@)m# zSM)}yzo4Lf*FG~L0~h_@_gU+|-u14#H=metR~f$+d|K8Jl2!GnCEl>&ck)3=5<6mPwxyTCe>~i+PQv^Nl2LC1dNQ zeY1Kn=J-f6_syaFCi=#xLzC-oXS0om_;dbIjCnuQ?hif;DfY%vyWlSceaJS zDeHf=Cu82h7B)q;w|^#M-gO$=V6K0i&7P(9e66tuW&XKGG3NfK#@>?UXJs+wOKNPY z%)gDksoJ5*Z=$lz`Tf>!H8xh}(|#qk9hzLvJexVm-t#rqU$*xss_#in?q8A3KBD)y z1r`>S_S;D7-+!l>`~8qT?#-e-K`g9P%8${v5cg{b;^*}Y#%%X#>?^77Xd2Ic*35U9 zRDLquKcAFgzVAMc<(lh~C+4Q@M{(diF`fU}QH=TCPsi_jnT)yrp_$*Fk-Xruz@g=(Z{KZKCzindN}KCsTiZPCGCj zY^3sWjWx;k(YWIoX*p0|Z;F3qJef=H?fYcN|ATW`E{$KiHS>FA(yvNmtU}2jp2?V_ zKCNFBtvCN(n!keljdcIHf#Ro^h4q&H7(wgj?@qU$ZXn{D8FL;h+E3pMdV5&d&obVA zWQ@6#_79_P{FHOLkB#?9`-Ap(@OEl)|AK6GGJUs#v^~Bed*83Io1{LIdos53Ec&L1 z{txfV?j`@PWC!{$&47=MWbCJ-g?@gzK75~UZ#B&uR@yt0_BZ%MV+k3bkI{PfJ2dvZ z^at(7;@YB__t9kE(`Y^Vk2KTHbbd4W=d1Mi+MoK-{>L|j|F^y#oV)0{5p(8O zUORjKEc(3fY&J`LDkr~~Q?q9-nsxnxn-(3wX3kzr#TMP_t~?aGcJAz3{{y?OVlJC` z-GW62bC=CNSOO_BbN1rlBhEP>KtjWYk2(O&nmKQFMa7(%*Uq|b*0u9y&N`4mys6AX zWu$NtG;dDjwX+t@I(ztmlI1fOmtQ-ttng4^1e-hJ+QsE0O?(M?Bppdd(vfr|{bz~| zX@X8iLDPXbQ->x;pB7B`+k~@e-GkKoL)+C&xTshxoI=n3^!I4o#As(t@r{p(l{Vqh zl5zCP&b*f~v1^)O*_5-M9%iADPmuhS z7h5Rwp_rkA62)FkD6Rj8QlE<7(TB=SSLC~-eBwWxKJ;qiHidtgq;*9;y^E)V+Dmgy z?`&+wgOYD^V>9A?T0s21TZR59eo8lYcXz+u*o;VHGu~@##@DhO=@Yw6@TcraiRNbf zqUe+JMl-x8{-^xZcX(8`{~KxhjC`XRu0P%Gm3XTPiuj@Uq_#QU3Lx=T0P#QouD;Fi z9NP@vF9CC0qOugP4=Cjym*pw`{-`{~Z7P0W4>n`Cw0T&TC;$9Wd5SYCPx1VjQoj}w z`jaoIyekxdFBE_^aw6Cc=)p2~N8MaU}hK8C^ z7EZ?_<;7kOfNcxF(HJ;T-n}n?RQymo97_MXSn5ylOnHZvC;O9bl&F513q3Q`jQOEv z+!AWWYSKl<6ZHc-4pn)z3A^VQF>cuhiaGKPV=ZEjfIb-q?-4-%naZ)(+#^71GUv#buyI!24bR-tE<}KNCRW%x36q)#iQyiS7W{&jDDU4!~XCC+Y8bYtnmf0KSd@ z^fxR?@4A4wKY;#Z0IsJ`P5N_Iz}ur4u{#3hI{2=FX2hQfz%#NLiEn!)J)Z;+|0)1| zRRE5onh)#^U|W-ujE&7T=jF#YH^FwoX~{&i8m{*O=GyCSA*v4+jaz?b8FJus~O&vP0;PlaMTBos1G2%BY?!*0OAGB zaBT@dj|UJ(0KQ}Z`i=k`cQwKNj{rP(Hz9U@M$*ZvL2LdyKMTO|K>&`A0a5eCmAjR7%NvMB&SR z&te{%<=Xj_Qhb|~?*vnG&{KITAFVr{`c9DE3(-OE15+tghUPGle)N_lzfXpFr1B`G zXqpq4;&b%LFb@*=d-MPGv0}bR!>!_@%|Dv|U;2Kwd8qUM{U2vD|F_~On#b7Q`3KMc zw-+AE?8Wk+bp!uj&i^mGz86a!TZS|9ptjQS-^~A4^>dUl^PsY1Bl@Lxr({!_|Nq79 zZNJ^-vt{plx~FUKyt^OT`ataBo)*S_m2=AJU9M}~an|al*u)Y`mgC7w9rkg#`@UR$ zly8#etgY`FJHzVLkLi({VRP`lclXSUjPqKuv*J1%XBn>_)pPk7nYBGF6UZHp7wgL{ z?Czd_ePhat#jKBwJ+n1))$tD2(et=>V$8Mj#iK&o%Kz@Ff6;3Bi`Uw#|FoIMY^pgu z>xAW+l^w;beH_*=Y*U!da&5D(v$*WGSytK7S>LI)R%G{h!d`q7TRW+V#oZ@7Q{#MkfS2VzmHoGDHyc%w%QTkLk)fY| zytj~D$=0rQvaC!?`2=gGZ^gEnJ}ueq9!Jewbqurkr)TtIqv{;BEONS4-4?W)$F8<`tcT9pBMU$o)~$;lEo}j+2arP z)s~;WChM-}`rD4FWVIHX#;P-|YZ_J+Mi((=dBRn*b8U%kWsYN6UQbKI{T{Y?O2LUU z3-dgKEt!^a?D+3|?^-jh4vK}}Ql0aVq<(j51{jSy6lfG{8Z+nTnahXLUR< z=cZAjeGAUk7#pE6Hd5{vHd|ByOqPUJX^nd|n`d}2x^8Z+l4 zUMSCLUgaekV}I2cyHpc}pNy5k~16jjQ?F;=fJb6)GCG?!9i>yX zNMkIbF&33Lt=CE^rZIC)e22!&Iocm;jD4&z_CFe9pKFYLsWG;T7R1%qL38oHljXms z`M(-tKg#nx8e>UGQ=&aUe%2WKMPuw&O@7Z{VJw68d{JH|r}l!#k{FGly(De5Fm{}U zu|D$rMEOf|A^&V)>@V{Cboo2b!q^!W#s*u`-%|{+Fg8@?53?{f+``xhd7et=$aC5k z!JJ1+-$hBR$imoINjofzjkhp1Nhv>B(o-x4f1@$g!q~+Y#{Ozy>~9vvrb)glER0Q; z^wsjW)WX=cmh?Ux*I5`VvoLnOg|TuAV>e2^RGMpHZ2lqGLJMPyBvxr*>}CsNw&7W(E)NM2!Ktj5CFY6~;xDO0MoFm|tnvHL8Hc`S^rk-X~nC3P0Y z)>{~>mw6lH??V>G9=3>YEgq5BqZY;^P8Z3-$lK5u%`wt6a&si9I-on@m7RFw( zF!qXtv28N{RSRRUTf|yZl-{z4^>``K9P(6ZwlEe{&MDDc^Qli$Y5+x1~b>*r$qC;hh#8w z{`F9rBb>q5uncx!Eq+>;cti$cBQqEqlfhU~24m;bw-r*Saq@S9qT{3t#xBSZ>laVS zVC+JfH#LK?i!vCyID;`~24jECVCHuwmu4_FP4Zlx!PpgwtmzqyU9Fs7tI#e^FVuWprMc_t%v}S6zAi))#AM{O}?lzwNs> zH=OirS%??j^VT;PB(gi+8ouGiABwKiF8li99xuIJ@lpLfGYDHB=~-fAUc1z|^oo(U zjQ#DM^$q2Z%sBST8y`Rw_{lOdOy!qR`yVv%({p3q;-s4_1_~fkF zS35Rcy5gSG8$SE=?eFFnty;F`uBFqr{$*^eGyZG#ZS%hj7f!tIh0H#CJ{>p2F{>Am|nZM05c2BwN^pSe~KPL@5Y4^9wUB$1t^{R8; z4VNze_?5pFkA3~;L2chppA#>bdi%WI6DL1>eaBm$zI5K=T@Uy8tfph#sQ%jV`4nufZ~@bF0#+i|NdLJefjGzH}a4FNhpsN!`qmF` zZJGb`Z$EV3b!~sw_qFHWwf~wuH@^{jaq#xh-9OuII-#KT_V%yF{`;2eGh95s`-*+V z*S+0-^v*2D^Ea(obi??E?HSImJM`qHZ+c#H=}FP6Kh|!zuE$@eUgh5Z-cx_{;!1F&sb^G`nv+w;KUcdS0hHHLx z?YXtkeb<-?KW3Nr-T&si;kUgTkL=UR?+^VN^k&~bV?mGGqW$LTPcM9~{h?`_7rq-> zUGo0d&iYN38Ka;7>HOE$&Hu~(i~n76%jT;t+4X+*2^sdrO+V(p_)O8}wY@%>64`O= z#5Y!WioE>mD;?WgU+z6@=y4~`{%76gO_s~TKfOL^^hMY9%Kb7ocl~qU_kE)D>His; zcxT<3n^%7L_Uu>g4eq#l&?;B!O08wf!jrz%BA5Tt*Ka@P!R%9}&U$ikug0rxXv@F< z==j=4-@RbWZv)39-ny;SI^%;?`SZ%&7-XE-nY+L!pgVc>6D_rAwxOnm>>t6J{= zZNuH4tyq0*-+4a|U3bF2d*1hQ=N?z+$_G2F53O8xUDjFry35#8OD1@xJ==83NoRg^ zQjf9Y=iU>(zN^=?#g@i5etgjR?y+Y)9hw(D_PZ}$=&`D_j74vsFs#=vyIY@qyQ<}l z?N9XHzGVOLl|Ns%_>{aaOJ+wa{-gtgn3F#)r{IDdTGNWw z&MF$Iu^~5gb(`Ob{|+Cm`(HLvW22n=x-X{z&s>LoLQeLIj7xIt*B_H!*nMIz`p(=l zQezd)eck3g!r|BBcU!JL%yRsbdYRv;$3|+5|7~CQ8oK{He0i7Uio=v2FUng-X{=z{ zzHa)K?RUz%EtejqysY0jN@GQr@9U=P|L>G{{a$(cPSi6>W4ovC>o&g|Pp{d3Nsire zqhc&`y?%NJudXU1ghFpV15%iLRWw8r$sf9z-Cn>t!!>;4aXq;utHjV-xqUpLKX7CIN_*yc-} zFX&}{r&T{%V|7>U>wZY`9J~*K-7@o#Z3o8F+GX@CGg@Q&uiDpb?(1jTqd3QIDV4$} z^&+0G(HbkidS5qvtAD^|mWh&QyvfsdjK+5U2hSCfr^Mtb8ly2+>Ar4Sv*3W7Ws+r_ z*yF)9Mq?XG5An~OG!MN3tQn)RNa?!!6HL^~(tWZ!vE{f@(q1+w4tE7F*L{l4zj->=_gS$G)zON9QVMH;h~@9U;#-b3v? zNwnW>x#TeAC(8C0X)HEpUpIY6eQ0^peiYib9KJlQWzk75W#;bdruRL+TmGWMl)s>t zW&UB{Nxh~X1}*93JPcagOUxa0ou{!abN6-A`%=>YO?h+z|Q$-KCNAPxYW6bBWp3o#7d6B#T>ILIi@e> zs9MaiWiiK&#T>U*a@X&dd zF5x)uCXUV}9J#l0jJlQM>YF%Rw{k4JiQ~?jIG((TWA&{ZZ{5Vvcq_+_n>cpf%F%Tb zNA_(T_S-n7-NvEa%yH_?9ECS?Ou3n(>Nbv9H*-|poNk}%RBB)N!PNgcho()paco)1 z(Xo$9S$3mTBrOvTI=Xh4cD; zIeyhSj$6(#U^&O=>mt$Eq$A)SS&%GRt_j2sK zmm}*w4##~Q758y??&I*^$Fb`^j+d%AvhU{@b-(bR>wb>a_j9~m&GBtDN9GES#``(q z_jC01a5y|1E)Pe&hr{pT=(~brr-!588jj*M9PTw78`p5e)^HTA;Bc)bNhy6j0=?`+$ zKFHyFkR$dWN7i}{$9j&c^&DH)bL?EtkzLQ>sOKoF=kU~XTwlXcQ^T>fo?}A|$ICSw ziF%HX8jf#kIM_;#+zlKh8#qo|$+2Vu$C#BIm#yURZs3S*;JA_c@&=B=hd9a};_yDi z!5`w#S8{Yc#4+k&4%fpR53Ed&6Tg?de=)$YX?^N@utQVr!yFqna=fsSW81?Voey)g zZ{%PbIr27gOx?&)v6183jU1Ve9Hze04X{l)>(4t>uuOd);TZJ@NBJWhb&qhgJi^iS z2uJ>-9Md1=@I1=V@+imNM>+BznV=DPm81EX%6?(92=kJh&|1* z|7nhXn>ZYsI4U-Acs6lt-E^>xZ2b+epPyZ?EU|S^`kzf4<(oNvq4JwKPTb6qznSCQ z%^c3n9NRVvdGwtueY-WSzX6+WnBOlA#Wf;TAm76sp` z;Eh*`*rIr9QRq&oBdy)JV}Jp#Zh&H%bR=w-ltFYt$|icRg0riH-3iaSO8A3ltAh7c zaGQeXE4W?3M=7{N!Alg}so>KU+@;{<3hurtZG)Ptgm37bLu{ad7Tqwvg`{>9=8-ap z-XdiXz4a>L!^}YjxKf7tR7{p3dWYmI7-XR15WX(SM}2v})PvrGOdn*RQ{g2n^J-yF zqO-3Sb|yMk!TVh;+CuN&HV!hdQ;|Vfp5!IEK*}JxP{E6&43ZrmWMH>477tE3E~YZSaz!Rr)!qm)hGq1NXc$XqVQIU4&2 z+mde}YkAtYgf+6m1tX}WKz@F~4Ncb{RPpHjd1?!8pR1 zBrnmWQU=jw3SJ>)(0FAXY{0(!kg-kjnq!-kVUBGIUaR1B3cgXn8x(wtf^Svu#?rJs zTNE3{6dP_GY@k@Slk85m>Xb5w-dQSQgk6&!7j_LcFjZ+6_5bW^gx!hGy++ub=za>G zr{Dz&UZ~(j3SO+>Qx$xg)Wz&0XBu!V7j@GZMOdliCAv(?Ai6@qD;2y-!D|$}R>A9( zI(MCEz^%j`$@VF{+Y}jo1&=6rOu=_Z+4O%_ae;vl8I>kQ!+@^jxA={{wfA$&{iXelsItHeEF1+pB`g)`DIRiw}*io9tGT_I)D*l!zR zpiYiML!d!UZOh` z-pCLG4T=pYzfGRRKZXBpU{_>r*vl9%YrYlSaN-fM-wh|X2;ehQwa z-~|d^c&+dqjYIlb1{#%qNm!BOCAwJ3AbP5TPgC$x1us+Z3I(rJ@G1qbxi%dewb!QO zt6rgfQeSGTeW-z$VrRk{rEH>GBro~0bf|$HiaiPAvTmX~WI3Wc6?~_H?^f_G1>djW znJ(cMl9TNcwl!rAHLy#GAHs5FKG}2sPy@Ra{Rr#l5`HB*Ps$~_K*0+Yyhy=|6@03K zPjjVhTA8Oe4~OlDEJly->Tq^QWxsq zxx)-ttA(DaKHnmFDW6LjM0Y57r-JWP@ZCzAyA+zu6t<={^Rs6PAJV*w+?m3MM0L*k;K~v`^MY^fm?eOBoc`k>Li4 zszuw#XC@|jiH=DbMDI}WxPtFe@PvZzRd9A)y02wjC;Ue;t=FaP+V?u)Ke{h>oo&Eb zE%-<;^B!K7Gwj;Driaq~OI0K2^b| zDR`-Zmr0!ZNQFXI&Jyo*C}ls#54=CBnk8b5#zj8Dz}9NRTqlTZX^xdrHqo_G9?^9Q zzHyd_UBVj_9-qRqO~L&N9#Qa^g6~l9xPtGJINhfwr0ztoKF0u8`UzosWjUf*neY?Q zS!KdcL|Y|J_Ufz9wz9On`bv8de}0*;7t#CAG0>^li!i$)dz4bAL%~ZF+^OKx%Y+?C zj!WUGPm*LT*(h}Lb-mZh&JyCqIz_Fe^NvxOfC&z>!OLGLIK_${>1+Qf{k)H!66Gf^!A$Q1DKPQ@rhz^%Fg9i~-k*^!*cIyJb0|yJR`C;eLhA zygu!}Y0{q5m$I)<_gUW<0~IUM*Llj%y*@o2^t(PiPUImj;ADOaiBRSI6C;I#@~r{EhEyg|XYDEL+d zZyed7wk7VF!95CIFLAnW z^WGr*PPFqp1MwB<_wIykmgR`{Ddn~)xL?5|3LaDN9SR;-@LdX?Q1HD9&dP=DNr$X* z;S-{*3f@=2Z4#%r$uAe}qj!Gx^9^Lyr2C(V$#O)GlI4hYD0qp2I~9Dog1Z#FT*2K6 zzC`Lm<5=VQ2Kv^dpHm3aB`?vdr3|7y3SKW|m~(o^8nD#}+fa-X=9RoeZM8RVUzC*#|3cgFh6AHdp!Py+)FVZ1vj?k58tAh7caGQeXE4W?3N6isFrDuRl zhk+8sj)XZRFVQ7Z2GLFhpFSsjy{}N{8Y!E`dY8k1v*zGyfk(=q{Q5Z}mWcMsdWhbl z$Y^jFD3$ur`T~?6QFuEPI-$tktLVgTOzYbBM$vYM6nvwCHz@cP1>dURjSAkP;9Rjy zzwrjP)TEy$$Oat>Z>J(-r-JWR@Gb@4f1~g<$;q6XwySk++TMK?+@|393T{{MQFDba zsgLvV23nLjCd?sui7t^ch;}OY^toaTq5CfD1Ou)}5bo9>;%^4w4+qWv-f54*f(ZuV zHHNuvFO3z1xuhJT%cXpx-3q=$!F2^+t>7Mo-lFhqRq#dyZ&7fr;2jFyso*;me7Ayk zDfoT`&#Vysp|)gK2>%eBtKj_=D2?%z^Mvn- z_Q?8)u9rC7b9qKhXPC|xP^q<%rzW?7DCpHgm{g8LObqTn%!Q#*GkddC%dudJWm z!M02?P@%Meu*~^FAELA8i}nzmtKj|Si*{2zSr-^^goCiQ1mSr@%%P=g4dvy{PutqA z&?WQJb}YHTK&7Gs*=w4tmuR=Fm*^$)(|*(yd9{kX`U?zH9U`w@k+)Tm*Qm&dOBtkh z=LH68Rv!EgcDGV@mr{-`NVl=?f^@rVB?eX>qDS6>bbL4#2s=}|N*1Ks&ACrrYL}yl(khrSPp*%5PTatqSc|WOXb|zf)*@ zj+@tViq*YS3~X5`bfH)yEWR)u*ZUWy<2rLu8qZ#o#&ac3zUimXd5h9@MxNv5JV4?p zTqJx(_a93xG~ic!X5Onv8RospBB7gkucDOmU1%V3NV!s_+!CoDmD81SyDl^kJEYud zrJP48SFhCVT_pVHU-ZY{5QJ8=L%%cxeO3sunIZTt4Z(3`2>$6ISf_>Ho)$uUS_qEI zLhxP|g7xwc+?R(CzdQuT6(M+U2*G-N2>z=>=63_$E5t9G9)fFn2%b6e{CCpjE87uU z6oUKi5ZHzg5|4!7c{l{y-6423gy6e51n;^K*xC@B_l4lNDFn7S1lPSG#1@C(s|>+& zQwYvVQBUj^@oQfkg1-2V>!$Sob^RB<#9{M>z+MT#`f>>V=R>eRAA)sr2p(Su-c2ER z{ux62A0b$u3nBJI2+n6iaC$?~y&>4Qg^<`9g8NC?)+fZT>+ukLkB8v;#~<6^j+Z!m zuZG}n4#5=&!5<328w|nI7=qm&g8!`$oNtBTeLV!%n<2Pg4I%z&2-ep^aJ&|R=Zz5J zjUm_?MLo9H#c%Aj5cJpnxNb^gUgq$GL$G}lg1$Qh&*vfNpM_w5I|O$}2&^N7*gGNE zVj<{82&^>(e>j8$m5GF4`!)pU$04{PqAuTd@$1?if^~Zc&RroCY|2@0WnuVO81COf z7`!QGy)7dQPevFlGi;tGP7cF!N*MOM@PY4NC>{SAhj&^SY+4xhOT$Q98HV-pFxZu0 zcrHDdccZ5ro%gk4z-t_5zQ%FeGaN%-6LXB8+rx48YaAnA<9N)|j?3QV;31J$v?*u3 z=k_psw}xTY!_YS6tfzgXPN3(V5J%S~qA%0?Ji=*iXmN;}drc8NO42EQQ*nCkY2~1U zHcGjomE)P`IkZg1N?SST(2i!Ttd)Zftp{UsTRG?;dQmF}9kjm9&8-}C5Pe%K2OUH& zYvrJW=;~GuI!OKptsHa^erGEO9fa4ma?nBY*R^ucp&iB8hE@(bh<>b@=XMJK!6t?rCaGV>(>6>!a>*q(|b3_q4KZ+cR z`H4}uCPiT#A4TS-ob}GhQMfOR!aF&N0VHo~6rPKtuwE2J-lm-OuFInETpoqzk|;7Z z<*avK9fjwbDEwDP%^0=Kj6$CoMPf$uK+LJBVGqZSJsdmtaQtfzM`8~L_Hbl%ajf6N zaZ=a8^Z5@=#B+KVM`0JoxGs)MyEq=%!*OaC$7g#u_Uz%9(Zx~L#o_)PS)M)IoO55* z#m%|JcXWyC`kh_eoY%jmi<|SoH~dcdkx33mYZUI*sQK%PM$N+)6_~d*idbtD)@T%G zk`LaF!qXl_f=4liX*Av6Ofy+ex?M5TES5!G)l6mVXu2&n(+#Z0sVTaG9Yx!@o5{^G z2c_u6EW_M$j?zuca!v|g!ZdTK4@wnGqoKk~^O;2~0!sJcOrzT+Gu^}}LPeU#wA7Y9 zYz)(^iGM|L^!bdHGmW;RG1E+@rMAr>o)d^C<9x>EGmUOp%v8xV+OEz_iZ13~?u?0-)pTcip8a?WoX*Saar07LV8QuG|A4NlSXnRaH1u4EcbjWp93rVSxEe?Gq-@f`T9au(Burg$ou zMt?h*X$;ebnf3ZJs9m&8p_yhf?d%jii)r-A-b}NZCN?Rg>nhXEaUlw~@cT%~LUQPp zgqdbDZFGuW#I!LfdJNOfHS4AI?U+V?@0e*0(++%!bOY1QSMaeZx{_(;(jk<_Fm0Uw zr^Am8l$uwxo8!j!E85|i+6JvgoG0Zuljm7ABL8@KPRV|88%|Qry%)E^rkwjOYQq5K z+;LGGPB`SeKsk?3ZNr$CI8In4bok$n%WCppVSu@!e?JgNhorAO?Z{f&j$b_O$X(Np z{I%^UTicGhwe4tJ+m4-U+mXGl9rktYaIR}d)w*_g*R>SrX5@B+Hw1ucI>EYhi6SY{;{SV0XkpPj{SA*$a|n2Qy*wY)dQlA zh6maad!QZPuMzFHFx^((-!S(dj7*_-5xPz9FW#X}n?lbNx~-nRzoK^m3(a#E{T|D7 z*UtWi*}n^?5Wnu)-`_wbJx5KU_w~9fH_t#h{Z~GPp3ihwL7ss!`d?@Y{r{%Bit`Li zm-$&tca`QDpm)5^$@CniyDIYxl*s%ZOn24h8K58~`A0F`)sSa^IuXgwWV)*{&j58o zlApnJS4W-!dY3(Q2;EoduHAWtxhI)kVz$$jIY2xsQhCO7SHA(GozqK%ypjQ;Jmr%- z*8l@FNReGg-jV^rZd(Tkd7c5nZloW{+brdoc54p8-W){iO7Y(#jcxt`2I8Lt;b;qj z4=_v{>>gl%Iu^BoY>+unws{D>=ht2R28uSPY*0AR01a#@8%!N&fCk2t4ax=zo#~u( zt{Nz8K>QlhU3CM64N^L98JM;K%^x8>w+%Gl{v-(RCqc9f6fshNmH6L*E;J2S8OXNU z*hU#I2`RJTId0B%BA$r(T~8j{FUp%SL^dMZ(Efg;^KQwLH%RCv1P=5bOzz?45I7|QGd-DLf@2cH%j>_eYZ;aGT#=L`gjHld+n9^orBHzx8>2d zCN!s@z>I%e(cpBfkv*pk7O_ULN%pK5EMhGsuf~+iSoxU-V*exBvysYl2I1@sV)J03 zFWH;MmohWP#T@><)YdE;>mV7A2jP4%DBsiQw*7CGE%!`em(t0m9c%?>ikK$9 zl3vAU3iK%o>@~2IHle97Z|WgI%|jl$HzgqKMuk*BRw7w9{VT=_HhuoLquEa+y?AT z!gr1#23#Kn;rS?t`WZ?r4l&@7vWZT77=-PkAjqHe?y$ie7Z@X1WDB1uo03$_fVn#{tHBVR#O@J&qj_*UU{C7e%v-xv?tZRn0c<-=sHI7taed86-)Vc(Y`Xf zu#dwo^sAKP;&i*PSLZ|nu}_6>-F5@s9YMr)1W{$?>$Z(j4%JKbY?X4T-;m$9Jg0s| ze%&eMk{;CF{dS>us$b?06MB>llX}T>_b_3f>BEFxbp5sO2*R}^h|CEF{2v67_#lWX z$xnKd{JLR6kFCQ*e8}s%jZ40iy>?2uiD3pjvc3C<8E}3Og#JMgS;K`s`NI$HqmJQ1 z|5QJxvDahHHMcP??uBd>lE){>~hJb7MnwrF#a`O8e55`N*k)Hqgowve4Iu1B_7S(bDm|1`+5sd2DTo~Qh|OUWmG zRw&v}`DE|Dg=zaxez82K`$ozymHg!I)0o3nSx9lH+v*C%eHpc}7t?K93dLAQ_ff|% z-PTel#yYB}C)r4zlb%_0-7b`4pSUlyWseZ&)IWMK-Ig~(v|E3Up7C{C(Fi&2JV(#| zx^3DBITp+QS204^ob)D}*NhPDO5GQ19wFKjpJL!t=CJuknD?8uxU7dwCVt(vSIVVx zpY(L@%%)S0Sd>N%p$lE*ChNjV!89py!tvUdL*uDg|G8;7$1;bl=v?ZL;+OhS>AA8Wm53OsJXf@b(ONzv}LiS6%6@=X%gr`W12^)*Vvm52nn6R}-#1oxUTX>OZ zn}58p-Oi$P+o&!3<#}ox&OJ}GO_$fug7ZY%$hH>duoav6x~=Ry(a)$2q+`{2>3&8w zt~*cIm|}wT+H#)IBc)f%c|s405!0u#-oEl)p-a|FJ|G)s(|k{wr!D&?*_hf_e7>+% zN=_-w#iainFmb|@Zu(6hX)bgX!;C3$3r%CSOUIyYl&Z2DP)?9eb)=ui1(tc^Wb|BkT->%V)f zuuDq+z7D~kC;ex4P&*i-F(vg(RYchPLD=69Vwxk3mpBY~-V4J2UJ&&TQGcaF_>J^& zzZHbeL1VVsCvIwzkrjuSSZdl~Xc$2g&1>OOY2JWt)nW{wwaqCQ0O?c)!=MwN^| z_!{LJpYA*Mx5T~9lJTOhn(;!Hlz%sl7rKyc6rWpVU8(1(_;{gP>iKK0%&&cpoA)G+ z2?m_>JT+0+a{2@@_Ebt+x+jSEOpQhLbA^v-&RxS?0|icTPe^vHn;`r^x{+PCOi0_A z+TAiiv@_M`J13;=Om^*>AlgQDB)eu8i@rqnb=2qcibY!~pW0efEc{G;m+rU9i-qoV z-J<&~y*RBq-EY+wi*Yk`zvYwXG=_NJ6n2gjiP*}?U05T18~D4i$d(fGM*qJhLaLD=36qDx*s ztL6zG)3e#?dFkhS@_}tqx_@fSVH-6`wrP^oQT7S9mUhD4!;d>{D-HQHO zCK<546NKZPAht~se%~QwlYPnWiIl8K2AuM_hVGZVMi4P0h@$!F_7QG3f^ZQo??+1K zr`uOPKixi(U4B8jeO4*kw0kUwL@bEZJ2$T)W6L2jwka~`JqeAovH1pAmW}O@^W$1B zFyM>@p~r%V$+4OI?~wkYXXJQ$5Y|`_*$dMC%_=eAZV$rS9z?FZzbROdZqKL%2e-#z zzS9-YO-?y)i{j8P=X$05oY~$E z!ufU(^uB@GQ0x|Vq3e;;ZNQpuW4qlVhIURCeUfbMj0^oJHhtTJh;I*q-d#}tps~lX zJqY*qAm}{~`IFx5c-`VXoo$K%+hajkpAVXOF&+fl9t3wAh`%o65}hiyLzZ(W}AFlnz8&WqVdnNz0(|KhYM1jR!$=N?y5? zSEtA$T~hLhPU%7S45@NnS#HU595GoR-S4_y55oI;5M)=6#EB+39a9YGZ9(|jL_S?x zcS)Hv)^w4~zE)PSNQ^0cFC(s0FEn61DFo+9A#}>TvPGgj^arnd5%n7@vrQH85j&)=T#08*6=g_=*ok5;&K5<^ zwnYZ4xk8R=Lw&Jiw$%xGT>iqVCNzOu1gGLuM+J%T%!3~jz5RtJuM7&S{U)7 zFcM?JaE%YcF*H3tr{t2u%b4~m|HJYQdljoFe^-|DU+2%Mxef6i`x)+QZ)?&`9$XwQ9_KCWQE#|lH%O^8)9uvhg zZMWpQiSA_>i=QC&?W73@G+DrVb`V6D#9BZT52nvzj3!OcwPJsF_ky}d8T+-ndjZKv zO`zD<-ED3w_*-}Pf?ba?*4^E`faZcHy1N&w3b){w?(PL6NWuRy(H^I%q_;=l-Q7Fs z3Wt$+#ga_i&<5XcL9m}f&|f_@=?X?+pBqJ@F$#Ai0{=5%xE&!R&aQ^z`yNR)ISTKu z)$qL^fV0h-Wc~>B!CA?~-fB3vM3Bf1gYB(`qr465kuY38gpg>8z>f&*OQZ0v?UQtR zqwsb_!A7+rzP%c3M;OjT2#(e;{GT6}bSw+NwWk{F%2v3$BJhNwh`$$x?VD;O0%6!f ze%RKw!E?-MN&WFtla4QfaJ>_SJ}d-xQxvwM2;$!a;at}S$J!`-&-F?A?hC{24#W9U z7_lsl_|ORay~D7U_eeSeQRqKc!~J;>)^Drf{wWCWln@eK)o^dhN$SrAptpyif7S}` z_G&W*t=|M;HzM#)i{~m?^jWAq1jCeAH*llfa9vgy~FUL4gQ2R8Mn8>e`6T>t{zD}9)SKy z1diRklJ;i;(BF(8R&iW1c4q*NqncrTI1K&dUP<fM! z!uw+o?1?b+uX`lp8^UmOSHu5kcG9)0chWn!8Qzm3@aL?6`@L$!z7E26dhevQC4%_p zLAc7JU?+wUzdZ~`!kT2)WF%c%0`PcplKQVfIP;s4SP_Be<{nAM=Mlt=2(05dyt{(% z92J81l?Ys;tKoX7751&iCjAS0Bpn|G;Ppmf?GC~sKePHaVdP87~rQ8-S?O2)?KCKK*3JmCo3(Fhz};$F&= z2*Q3;2)1kveMuXfI>kjB;yWUsYlr{ZFnp0}#6AkZb!rIutwH!oI1<|-dnKKn0mLtDgMWJ%Y*LS;+nte2M5~c#i@^EU z2x76GNpDvWj{Vi}j^nWTvy$Hj5&*zn#-{~Hm+dYzVJ;V@hjFTp5cH4((R z+K@Oe0^eH^u-Q@Q??&OuUIA-!1pd_#IQmB5eLf6(WsjuY7l30|5b=U$cwcRU|8W{y zB8cDHBk47w@XqUzbo^2c-;ms->z?D1@%o&kbAM)1KlQkzCnJP7#p=!=JSS%*<0nTD ze>e(fq#E(_PfNz$?U{_dnv;xIgpqhjhwI^LxF)s2=j@sEzjSOe7Ky<1MUNzVs}1gN z+u&UnfVZp-_8)`r^a>+R_HOpWfgrp+n&Emj3imq^BtDG5^Gz7G_AuhJ+u-~#3lD5J?E^`dT8e4X=hPGXzI00{fB({NZX?pANv$gClV55jvdv^r!A40H>sfPY@5U!pppihm$zPB2QuX`tL z6n|YI=)Z)({wIR?Pa&{9G`0odo74)|zk_f;8v!ei!neN~`oAJ@of!fPMPPSv*uRay z_FWL}FT!v~qVV~v;q5_VUhkx}EduZS0NCs>+}{M@9g>@5+rx;h4Z~U02FKhm^zV8n z^_>AYe+j~E^h$cSTa$_RBe2~Pg?&W?wuu~UP8iM~L-4K1Nm{Sta4ZeOV>>PBi&&E} ziiMM!eJ8d;pA!Y^h=2`=z!mg^1=?Vr7=hkI*SHXTv!d|r4Z<3X!2Up=r0dZr zyszdYtta(PCiaHlGpgbLcM$q>0oeP5;Cv+l-};;rTHH z>jwcic{O~`R>S{F8@w~3u-*_wd~6%6?u?}ExmK{(tKo9@Ncu*!!BrN9_1M#rzPVx8 zKe8k}$DWq7y%~Y)@i1(2qVV1jg|*jdNk@IJq&;Vac`xg3j=;Sl0{_t*j%jUhJ>Mtk z>Wsj;zE@JOio$s`hyBwC;$MUjKe-jwZI-0{1xwO*N-JWoSduQ%f!Z~schb@Ow4{^n z*=}q@eEZSKcr=Q5PY$*{g80rL9AiUBtj|f({T|)>IZidqdk)smFt7Kqt(N4j)h8w6 ze=$&dw*mdzp!tkK*Qdk_mZali@tmQ*Xi3tz;`>+7?91`o6=3}h?EkJ`(nb4fP+Dx5 zapk?jfa4-rZcY^b+!e@9_>sBF06iC_?m-WihlcfG(RuTfHTj)s5}FZ|8{qQTnr|SV<}ID^|FHM& z@iAT9|M)tSkpwXYK@bd$3L*wU5KJy22nIn~Y9?}#5J@CM6W1Xwi3oA6TQpQ#N-OGG zv>Bw5kdl+hjB7QNic+FwxjWz2I_FF>na1p-fQ3Y+I#k8?e}5v zxjT!yNe`+Mi^-i>e9(!-GJ5aKqP8=OL8QM#I!2vYEbPqU$<8dQyRhipg+&GF_;g{h zvNMbMU0B@Lg~jzZ4;CFgSga&B!cO&IF~WnzU=J2Ad$3sS!J>Ot7MFBoF_~~Z zyRuk8x-(r_oaD)3fG3L{q@&`=VudG*C7vuE^JFo{lf^XRcVp4J8;kq8vADh)i}Sj% z7}1Tz+uc|URW$Dp|a&WYM5xakrAiEG3J<-C6V^+`;ZFUhdAKp*xGa z$*l*Au02@P_F!>W4;EJv#$QhsUFclDCyNz5SS;zmVs1|sH}zyu-;>4Yo-8_fvG}AX zi`NMY&x=KG@f_bm+j_B>)r-aCUMy;Ru^7~gMJ1iV(>ZxB7Aw41Eb(ITm=}vVUM!}0 zu^8H$MOAMW-RZo#H;WH?u~^oN#p2#98hW$1yEltjy;)4_!(u`o7K8h+=tXDLbcWoA z#oK*YyxfOH13lg>9`a_<%bP`4?`r#QZx*w>S+icNxec3}mrl0E;C9 zSUfg>#hd{wrVU^*VE~Jv16bTNkVXAK7NZBUs2<3o_dph}4`eZaAdBULSS%dGV(uUo zHw|J@KZwQXK`g2VvFJ_sDReeQ=V^2XreZN)#iCxtVzl_aPdp2I7d`i7vD}x%LSGhh zeOcT@m>j+=M*Fg;_GQtV&XMS>$Ct(3ek^ABu^8*eVu&A$K7K5^`LX!GkHs>-+RLvD zV9_OjMF?QA!k@(we-@AVvzX)0VwyjT^ZZ$i@MkfY&Sd=m9>@B@EY2IuV#Ht;g9o$d zMduEKS$rPAVtD|ICj(gA6~N-k02XxtEKUkw(V6zr16f=j$l|;}79#>#3=U-Rb|8zz zbYGtKrH8P%kM`4tuy}h2i(Wx2x(BhCAH?FmAQsmLvFJUNMUSB@ULML~@lY0nhO_81 zoJF_cEIQGi+i(_F(tg}<7W0R*cx*U}uZOc(Ih@7oOIb9GVDa`+7FEG4J|O!@7N3wA z%;IZu7k_8SUYy9H;vIWrp5GOtymF8ok&`sf< z5ZP(JbHz>Jz7W}|%%9#AbUMjS^>F;Aa3|TqFS{vVJCdC)!92Q2=ZC_5J@Q}YRx!Vi zO?eKPBH#Dq6lGB5mu^;aD^C&rOh%$dmBsS7KRl${8@~_X)KmM zDMIbjB2+vrLc`M{RJ|%ft>hf4;T-DUiuKABVb+@>%zaga>gPq6MgFh|%drSco)@9~ zO%Z=zkuJ=5|5=QNG!{X}VqqGK+Ob04?fr`&e?iN|I|ymj<+skB!L_EG{+Is$MHSr+ z%{g$iVs~z@YcGGVlX)@ZYwv+0FP$viH6q$g?-mo3cf-7*g8O63Dwm_zqB|!v@Z#pb zkfz=4I@-9x|76mguxHX;H=ZvZ<9cmhE8Wbfs9Qt7tT$b)j(&7fvFqsvC$t2G)O5^ zE~_8Ak64lQ?XDQ)FGIUiWTHJ~3ui{fdJd zcl?#>T{mNw(~#FWCksD+5nJ~`raRZ|j4VR>=IOL$TZcCMG1Mi0<;1y%j=i|nxR(U) zE1Evo+T`xndmBV|zk0K>XzYk4V#g zg%O)$`m}E^$<`R&U%o8nzU*y-k~ZP;oqNwBv+s|fAEtfy!;R~q5jTHydmTJ+;=01R zlP-k6=dp&nGU`~}hw6>>!hhQD_UD?Mz|+q>rnge2EP8ucdAnZVPXJ`Oi*;a|2sDKU^8rWYX}Ub{}prgxp>D#(u=s@NQlk znyy~uo^w5CPhsmLM>}tvb7sxjsML`we#q(i%jk38kD7gXO~>o=-z@ZdnD*0&_a!Ta z?`563E^hj>a^kYqXNx|}E{Ymd&y-^PbJEV=J~j;g+P8e`g(czN_Y516fvp-MwxfE=n1o{cHE7QQvit^=z_pXzSBjRppj|VWwHVj~(gs z>*8U4!=JQo9=5(T#V0%Z_D_zif_Zus&Q&%WCFxvTDUAIIKC?Tor&?W(fz zSFbneH)2oL)1SxA&-ir5uRX?Oy)T_w)bG284oCBxC)N*)vbWpTx#{hA$H5;AJ+be@ zMGWVoes?H#X!E3pYhUT&GozYbR!nPK@5h5>KkJ?Mb#1X} z`z4KAz3^qnK5sR-`KFy+U)*UbdlWX|#`tBCdoJ%CpIma#XIr` z92^|TR9`U$JFw&DX4-kex2<+vrPDcjSAYY!gDbT9+ovvrzmf6}os-c-kLGrj`=wBs zCp^K<06tBDuEO(te$H`J3MB=?qhf%6h)=1}Fjng4qCX7C-i;Av5Z3G!)! zC#_0LrMMX3ZW+z}b~|ny>MUmzQDp`vdr(NEptn<~a}?ip&l#Q5CqS`ySqmno4imH~ zMlpC7sFq2ZvVQR#J7@x2`b&_R5EUo<;f`EwWFJ23!VtlWt_7=W$}KsN?J$pCa`0D3Y2 zeHehg3;=zq+?ob50KN=>9|I7;01RdT0{fMHf{!x?}P48TayP0av|VF1Q5 z03i&(cm^Pp0r-Fc_>ckkhyj=^`qfy)6V3q8H`k*WfT;|?G%H>#12BUDNMHbT48Uv# zAX((kVF2bb0P{rq0tR3q1CYu9EMWkaiSB6(z)JCbH3N{v0IXpE)-nJaMfXh%z-9(u z8w2nu1F(Yu*vSBV#sKVM06u2`z7+lL5zVhelV~pkuursq%>e8d-w#l`yVl)!=W_7c z4k;f!yFBU1grVO=c0Ar!`YPw5K6^+-1)gsh_}y1WTQ$oVbiBp3vFT5T#AMIioHtf^ zW!r;i7w(QJT3wp8CI9L-T|<_QTf6L9CO-Q>=MgE{tNOLQ!!mB`t`A=IpR?cDcixTt z3;RBuezvT8O4;9)k488c(+3w>VM;F{_q5JN$fdeW- z?`29-hvYn4T)xw3f5^h;e<**>9^CF?y9A^CmkxDie>Sk+y2^GV!;jT(bEWR^)&e5@Fw$60y zId}B*orQ6m7M8r;WAggly3Z5+M1!kH1WwVj3atY8y@Hoj=nsN@qYZzZ4L`x6xFPzt z#zvvNhq=}27rZ^H3b8`4zqa8AS0P9U{I|657K!3ZsY0p{`0H%=?X9p`$bTRyn^=XP zW0U_5Hu=|8p=b#4_pL&}5bWhus2qa*fK7e&uUd=?{NLyY&nkT@D}OJ#M-{4u;J?_W zJUy%ePE_|BDSj*2W%Z)BeY8`0h6H|Hx+i z8ETW?e4G0C(q=qcY13YTR`pNiZ*Nn-zuCy+R2zA?WfT8xoAEN*CcOxo_GoWYp58X{ z_t+-ABR2V~uxXFeHvQM%rv8d;!uPSUe`AxMB&+(NtgW?@7qWM;v43HcpFuYDal=Ob zq&Dr>$)-R5Vl)0{*!cIbsh_qs<=<_S{sJ5MXlv7c2W`@~n$q&WN32c#Xl?56kWKlg z*u?+DhCje2y*)PV)z_we3vKGJ%%=Qu8~b9L_IquU-&C9a_rj+Bd~L?Boi_YzoA&t2 zs{d0~=G&Cl!KOa;+Kg`{HvNCwN3@RMI9F;2Uzy`lNs!EGxt+gEzD(*Xb55-@N~V@1 z){{B=o{`CY&&r&93uKPIKgy(m_4#jhT>l7QrG(>lP(ASBeJQ*zh4&Z2t0aqS3GXX} zcbyFITEcPRbQr{k_pb^srk`MEVrq%NuRh)1oHQB0!=B>^3y8umr}URm`l-@UGNoih zJ(=A1jLgaRtjy83Kt{>(`CdO6Ai|#G5^KqKRk_F2lB}5TvdI9u{)6z&8i3pO9JjV+ z`quTXk|fohK9xH}0}$ZAaUWNeJFrH%C)84Il9!blfRzp$N7zSHU#XH&GUd#AGDqJt zeC3dzTn)f62aY5Bq$)oW-zrb!r%VIzM_-hy2s#pGAG|NGDqLDLf7DBD>n=v&57eyiT-W+)O;J!3Zx;4%2^Qx zQ0~NWig(wgo{@~HC8I<5dUBrvU}(T`y{p0xuQ?V3$P(;Y);1RS^5LT?yzJkrXX;bC zrvS(savVQrtYs_-vMIQ~D5vF90D>BF+>Lj)k4iGSmSP9h=hIb$15`BRIKtVhE!}Z8 z=~~7xy3e4HbKGa|PFE{gR!h2~Tx|*m$ddniaz*WZIUJz!KM3y<0ibU5@3j}D9~uFW z)9ByJKlO`Ev`gIhpY;pEO)HE5P&Vec<5lwcxA92N)GnYyEPcc&5@25wj-!3LcZ>yk zMuN38nm<4821f#TG=2AYLt}G7BtUdij*ArKg2s52WN6jEM}F2v0vu|}amh9Ogw^nK zED}K8>|e)oJrZD2vv-fNlomt*Z2BMkxJ3b!{SRpcMFA+9zq{-t6R}YMlbZkgGPN%X zU|(~NoBHlPrIHM*rFndX--8EH0N0z_)W_VaYUSltJ{7>lh2y??cN%IMZ2mUq68o)s zDnOdczdv`$nhH?(AA~QN3gFn{-%FpyS$Q--Pz#RZ=g!sRY@j%2n^DVf$Jbj>G(b)Z zj`MtX-%&~YYN@v&LcOO&17x+V{#{%8_x`JzRZH*yahxxV1}JaIadfsK^xePBRn?M- zwMRg*=@IyvK0^>7ei(`M1lf z?f2bJC_jaF=eRdj>Hod{?RL}_KCnKG-)YkT^qo1btd{!Y*D7OVxr|*{Z4uBQyFO zxypnmSDEnkDpRd~<*QA&J=28Vt4$cO+JsrFO?YUv2~T92@bYRCUd}Y(gG>`XUv0uV zt4!E>l?fGDCY+RI!u44~oQ5nDR%V&7r%f6aW6k`%^X_X*ycr~#jvGx_De}gPZqr3G zc%uoQi@c9Tx7DJVu+fANBE-2}bUPrLIU7yrDDnzKx2vLAxY2}ik#}2kL(zP`(S$A{ zj}zURtQGS6-dYnXM4pf6HdZuUKQW=Z$cqr&Qbbezi3yb=FGF7}`$lv- zC7Om$OsEohtmt-6G+%#W!XS~ytP}FrLNtRmnNThAdWvqtMRWZo6NZXBt>~64nkAb| zs1P6mD zk=I+~-QH}%G?8bwUhv;sG^JZim?iSsi*CI|Gh~YiH;KFrMQ9_*bG`vO%yn5KU*%Y_-9}>kqfzVB)`h-3!Hj7W z%&4F6_p#Oz7fp#~9X27^=N=Z~UUEpVFFh=zv05~@9Ij4_<`gl9g?8>Lnsr6<&LP45 zjc7g=&2}QcuV^+E&B0djT1YkCjId*}#A;i-2EG2lgx+~3d|@zQ(^Dpl$TQ)}JQH?5 zWx{=VCcKA#i>l%rJfCEA0ELmaX!%`XLSjN9ox%CHycd8R@@3LCMQ~67F3E`=3v_A`Bs6KPI z3hq=_+U>?#!&AK_~bL$rHb(Yj#&|}k!<{Hu5 zA)1Fp(;%9xXqLAZ@H$?#7w|d)rUH-G;r7Okzqdj9d~|$5d81>MCwWpHuY->8c)X4^ zguMokbwI#x(QYKXGk~w&tBKbk|G>=SbtKfQiPur~faUQzZeL+}ypGDoHSs!fg8nsL z$CDrduY>YOcpd#rERWamh${IX66qvbsAQ;-$K@dW47to$g}ou)zL>{wAPf$=D zVwQg?e}|dw@)8CI-IFFv1;Uvi+zrCop!?8Ze-bsZbJPk&f^aMd!-DP* z6MhBVaV89loav=JCI{V-uiSK+$DvT)Jk4W@;5=sS3hwmlN2ya5Ys+7ksA*=}=d*M_OR!%>S^86yqT3(6?AD1FwN@PVB@Yp2@ z8w#s%BM6H`o^uY>Z%X-l`-BfccbiM%3NYb7A&(o9(9?)nt&FIgU_`^Gi&4F{l*b>j z#)BwXUVwCmnC@E>1`A;VB*YY8NoON}uRC|F5eZL(@Dm90pro%64Fips(80*xi_cnA zfaQ}*QLjA1-(7~Jf+|c0!f+rw3~h8NkJ~_ZpXuH+%q&H%yOGCepu5(D(V$pbz++dy z^+NuhbIIVd0(JubE!6`4ZZqML5dMjNO(}oZo-h>%JAv+2m*Z)yOf9IwOCTH>x{pp6 z2?W=0;1w}5aea)XUXcm*)t$lpsRtOEY7xw`JNN=YFqR-NWCN(fIOcUb|dsZLuP zdCUUBg&~{*!YC-|V8pD*GR*NP#FF7gG(0Ip9y{RKSV-qlYo2{2g_|1t5$Pm{N*_tD*k35S6=2(a_6?2?+(5`*tyw*q`NbG;$j{J<9?k z>JOBn;^|_P&n-o|3$CwMz~i&1GfH_Z0m8>9-*cM3TTb{Xm2J=RcpQ*efP`&Bcm{+g zLAU@VGs@7=$H-#?sM8C0oDcnkQXYqg@JPz%mhxBv35^O+ZGR5+os2wo4&feXb){Hd zSb&vF3sAoLH0FF@#GD@IG56VN9$NzH8~OYFgndEx_zBB_?&lLWhdQAYwf1LuY#q9b zp0MUTmai}5aaIWbgzyCD{(WT=BaatBm_wF(_v&c{NcZXqFN5ye(_QMVjj(HsNaH4rm+Q4=eq8j{3iBQs z&vGZ2`LT<}EX!C$;}rdt(b%NYn)&f)-vl#y(7V+*vWwyzGuXwn z)B2p&@03>gSTkN8YsM1sDI9A?gZLbyyo@ztuK4U8Yv!Mvv1Z{Bm9DMt_Gu4`dm8{% z^J{vSXB$z@mZ84Fh>Dv=ls_|~q1=cG&y1*gWkka(BPO5`%byxiwcm(2ZOSm=Gb2{+ zF(NcBLq%B`=8E&Sl4nNLJ~yJ?uMCy`WvG5(M7gmHb6*U_|9l)pJS38zUOt7*YMU+RZ{)-<6@^WEqy{m7(EO87d0OFy~Ae zs(viPO3}Z*(1_|{BdUKiV&$hsEO}OjmDxtjI%q^-YR-A}9Hmi)dJx<#>kmpVXPZzz z(5DO)dLyb!%22!8i1J-V)Q>L1gmq;Iqsy>zZQ1`=Ke?x=Pn1>FPf4FLzJAKxOtsdJ z^1M(#<@tZFALW!XEdRU=bEgP-&b?AyrhipG@?ybXZS|vnNBtlnIq;6B^VeR7^IZVXO&DI+`%2 zix5^Z+=R-}Cd?XLGe4>^CNzvOp=xYR_x~5D^{ih@8?1}?;fH2T9O?|4m$-b|y~%ge zR=N&(l>W_-fstZ;xJGW&fKwp@03DBUh&9x9xIi{@#^8xBs>9 zMc?!Ln*TEI_M(S}8Yhn(vgFQq`R`FPJAB{b{)6lXUyWV3!o6Rc-bo=#2mR(Io9w;L z?#Az*WZXPD^^tB+uR%{dk52D7(B-I$bHon;$2+7C_5bxZkGV}Btv)yHV$b<6W_j;E zT{y`nvja}vG4yKNnDEtZJwvbEihBrq9gELC40)k!kP)T#dGXaULwM6+3w|DXw8w32 zvq#r@kij%t)}LUA%R`@30(CO-J8$6>Aig78D%XhSkOJy^KB$A$Ng!rjO< zA>nFs*TeLyLokI`=3s+RW*lGXdv2NW+7s8EO*+0Ec7Y4d z(2rs|OT`5RUB@bG~|!RS+^HAF77&OaJoXfzTU)nkC|T--Z7Q2dcQfUBP*tPxZW9)x>9EE zzc}t;<3~=vJHoAGuxU1r$CI$B2Wvh?xs_eUC>iYHG>0h27_O_`1-EnhH zhb{hjS?J6SpM5zjySKxXzF(gh@coqr0Wq>z)J1_Up8bo!h5MGGW(+FjhC zTO*eG1uiqH`^>y>>8D}s-1>buQ2$HQW!_I*2HUOcHu1-&lkyi$iEN|l(5+$11GA?; zoq7Dy>&3DW6-oZ3{$pYShyGqU=i;abrs;i5ZwC4PHgmKKwiz)*Ib3D8`QnUy-xoa=-<|c{kR6QaTDQu9 zr<1?_f>U-1c-r)Z*U;DRpP6+vZR@q*+wTW8$;{iBCi`0Ct_&ZFL6 zxogV2$7OfwG&=QrW|yYpPX9b=_=oaeOdA)?GU(RO zkKY~1jL-%N*ABie4!qKR#m9LA-~Z<1@Cfnti3?=5>H}=Gg8gy;{?Kz8%_EODXbo15lzd{dIeH;}(%wTg>0y8r6P7 zM5BOKCx<#I^WJZE^X8f@AB?@xm&S@+gnyM1fZ&~}F#r+x6z zM{eI^?%8jT`W#!I{>RCw!`HcfJmhBoON~}v+x}+NpKr6KWIb|Tdw7O-dGemXKE{Kq z%i`Mx8^=jQHoYBD=yEb(bU(+ufq&(`n*6iv^cl6u-BoEgK$h^m%dk_iwt4ZRhcou^abdK$k8BPN$#OO_L9P`}V|%KSy2j zKcGs!c>KVD&g(XBZ<+H`l=840^u6$~Ti%)m1B$a&XM|}E-yE0VJz94e2Q0Oh#vcFh zt+da&`Cn|hyQo|1i`}DNO}uqbQJm*9w_tmm$KAH$x29@de=+)Y^h8(H!RaCMU)OyS ze{}6f3y(I?-PHPDsI&I>ln(EW8m9H@<3DGi_VW1kA5Z-2!N&?2lLDU8k0P(K!3|4Ao2H=rnTw%MK6Rd>h`s5%g{Q{(&B;_kCbV ziye`LBg?KFKL5jwl*YH~e*5#{;2@Wx_44aYkGLEf`rdo#!=GL$J6;hwW90X1zkRqn z}R3g4vVIzIFx4nJbm`ClVMA^J@20$H}zS^vlr{#_&6~* zFwraSM8^%k&s*!=WzU1{$2y!Dc1ULnqEYyy48Z z!ycTNboA_B{Z81y7mhcVw7;rd^7(d`(`Wx!wk_wxrB8$V{PO&~M;raMdU&%{o3O&X z;Haos3&*v7STSI`!}DFge*d|Bn?|?(e6c+rhj-AuKYFquYt4mak}EO(eXhq zj`jA|{$4p1zEt#Q3d6Rp+BnnkO2o)Tb{PG6!NY^c?C+$!dc0wG-$Hj&k0S3g#oz49 zIq%nw{iXEe;@>Csztv>#eSrp)7d4y%}aMCBxv{Ve|uq0N!%}g4STy|#-JBx zeP50m=d3!g_g34_ToXg%MoOK#ZF%vtTO;?|M;7f&`2KL~$;X^Se>$cb^YCb7`lc-q z-{_7henVuVfm6PF057e}^4?2PFD zakKNk%?Vx>wfMq9eUihF9?nM&4;){~eDr8i=dZTkUz?4M>cx959`u?S-%VQnYr=#w9VQ@>Guscj(?c*&6(TTzh92I^hIW!*tZ`08_N?XZ*B8) z=#}+X{*sJlZ>^9%IDUEBFQ2-5t^6VDqT`-*J{LFcZFk~#E}*X4rO%svS@`*!&#tyD zE^$7g+%)0zvKA)}_zvjx@y6m42WKA}dCUDt{@C|q=Y9zEUvMnV{=(W;s;l(}t^K({ z-Y4M&@BQf5t;>h&%R(-qj(D~x{rs-TA0%# zIbGIj9AvS0tnFhgnPA3aiDp!`evFVH?$;y=remlXlS9pz5GvT!p=Jyf-z}sKHDh$B z8C^ons0cNq+=`zSYQ{~WX3PmSqu$CrE!2#LP&2xRn$bJdjLJ|ms;v0dR1#{&!ca5j zhMIA=7_R&ser@UUKlJyXQc$QFy|P%;I+Y?}C0J;ZSdT7OlAmc?Oh>xnLb~8|RgKO^ zg4VEDxQ4~`s|5_B)++uSgR_LEa|}Jjk;S4%q!~eF#*lt)wxs@=@cl`l)Qt3Q%eN&uAENt>R##9VRxCTk6B{#S zYEn{ILX3uxygZZQJ$pd6*qAA`GDIRiJ(dtvA1znrV-Cryj>YI%W?p7Vekqs>+3CEH zu%UD;8gxS5b95~37T+zDt7GvP#i3&{LC2!jieIi{u|mgUrH;iCEBDJf7Ui>8OxCfO zrejgBV=>E$Z%v9>EV|5M5oWRYTnwiq`#&J}f9UT&rA<1*h0I5N{Ez4W)n6KS7VDAZ zR^4(s($%865`cx`_c?;P=VMUMd`#|>&zFbf)|v<}-<#r4=HsyyEP|Y^Rc;e>W^~ro zl-oEPsoed)klT=P`MlglXAgKL{RC?CliG;BL!gQf`lE&1#IlQW`#15k$gM4-N?v<~ zC#EFm;z`N{nLUN-S!PtV&PSJIVXWolmh{R$7Ui{dJ{GplM?-6&K66^<<8JZYLb!Uc=*OXd)96g+ZAp*MN|0 zMz@CsESzKJWtHTXSjlq))9axDcRe)Vwuc7ZecnR@E)m}?wDO?=*FQ91z(WHDKQy3^ z760Tz1Li+8VDUo(?z3_~^w5CU9~v;^p#dWv8gSA>1IAkMt?9u-1KzgcQMlJu_J2iB z{-MABlynab=tcFJXFx}&z96a->yhMDE~Tct<`L+U6)FE0@>+7pz{@Mi1HC(m^+;D;E!q<~ z3?UT>yjHqS=XDBe%wrGaVc~&13_h60*SoE}CY;N|Ac`Y54-e%S5VC5Q zSN%LQy3MO8ua7&|ELG_LLSCJZ0zVtF3AEEnqY`La9&@!dj> z%kxmaJP!@a^007O9v&k|fd8oAtOW~5O?Ei`q{-MABlq#3yp_lqNR=zxr4$!44x-zjINnW+Brz5RP90;?^ zGJhR?9D~Ll$I3CstK^mNd@T{go;;3_lZVt+ZtL<867p&tUzH2ZShk?1yzV<9jIWmX z+{6F*e4s4;I4`dx6A{O&+w)zd@~8ubCIIhQdAKc>-6F5H;%A|E;s0gT6Yc^V#5uhM z|4#vJ`8chqqyz8|Ki-S@fBQTE_6-ys`YkA7YU2OpdjjMS6dp$g_~%{te*pmeL%%Kb z5dPnTmH?LLI(DI4^i11 zV20>_H1Qh&jFt%b(J}yPmC%nGQIFDSrp}0u(m zL_{J)B}P(07B5MWx}=22@R+EWa4XmNxNvJvQ>{ED=@KIo6XO#>qX|n&NQ{ZoML|TY z;1nJf8yg=^d5sE>(?rL|Plt$DK2^c!&KHBPl!zEjQeU*h_10QakG+zX?kqTl!#d2bx80~KYvXRPi56x_o}y^o;|JJy~KC*n4#l+ zLk3rIx>xN5()j8Cj!+jI`1g9?0QE)J`uq(E+GQm_#F0Q99_3b|mx4V=Kmv9k0V&i0 zDMVO1vR(`18kRMBbB0rS-r5D5bc!;R)k{?SSqjC@~D2>@P){tM? zaklhv2BbXBsAWtS`1N@{xh1uYsY@Dk5{VE8m5WlKd=j7PfNIrJHu}A%^m9e?kZ2wg zO@n9_4+5Yf`(0LsX;1Gr446yQ3U4glq3)&sarW_^GPGGzb{$ZQBuNoEs(CuBAS zcurJ&M>D!d-nq}HrlW~{uY|Xg)I^ixJp*s2Te;En?_Mr% zCuxnQ=DwH1+vzo$4kPYm@ph89XeHV8yq#Fl^y!Ry3A~+tv7%|#cTdaP$t!)?74E5d zJKf-qrq9{mQ}K2R8ck3^_msSyZn{U)slz=5Z>OlDsX+JSyq#uq(FApJkDnaV$6+Cw zU?}cYzU8=z&UOHGruPC!ec+Nwc*mfw=varU%k@lDR#t|q+nK1W>c5KSRKKVD_X5aV z5exvCi|MDQQ(@|J``OJi7E_%qHRu|QOTUvD;Z~9E?$7MJ!Et*yLUI52&nY#BOV{N67p+77ol)7=HMfcn|j>{4$ z!@0W7#!VPMw&Lhp%AbQ5RkCY_&P|zd;x@-|8G+J0l@GbRSyM9Bm63h*AqF6$U&cCW zp7dZhX-0;Q-a_1*GMc3ayE!f`)x~9ubRvu~{r7Jn2Z27 zH?AZ#Uy&Z@n40f8akA#4Gg*}H%+#Q(y!VX#1a~~Gj+#4I!Es#0+&3K8y(nGk*1fd5 zfiqlTl?oFrS@Z}X#>;6aPy7;RccRy3Cc(K05kFB`!hDz6|CzZ}Q;~z%1o_1&v6xF>;aY<(kmMV1h_e-<~vWEOk$GyK+5Ud z6zVZtv($XK;9MYK!fa3 zL&E@_n`^p<8~4d;2dWD>2|#)!i9mJ#6Y5u~9>a}y6upoKOBGXj>hih!fX|&gL+9oy zl!u$`lwn^n=@k`8o|-Qg+KVsGrB_q~9r+L*VtInyR2d;|0T}^qK}&H~s8FW#5I1@1 z1E-7-x1jU@H${4|n~PYk5I48#a=B)v=3L;oif&R%xjbr?%R?+zR2HXm^HGl(&5d{B zOXE?aG*Ma9{(R@c ziRr16EWaQ&@+Fl2C0~9%36G3eH&w(k}0Ru z0@)E*-(TkADsZ9>?+PgfOe)}X$m;+EJh8^P8!3~Ileq@S6oX~1{xZ40h{+RB-(Tk9 zD|7XgDFS73e*p*&U0bUzwM` z%-ffj)!@G)CIwZ?S&YnMuuM5z<`E=Qgj(MHWeQ<$N#y{bd&+S<9;>gcx{hmN=8~`>w|y#m^J zvOvdLK}Pf6jI$8!$63fSUnZg%EX{i9{K;~MhPp`YO?GF{u83RJpZNt(tqi{^k4cf{g?hr|2I)i zh8bbA8PyqP%vvFww;O&Cuyg2pSv23H{cf5^(tbV7BPZ1rFl@Y93iCtSqoz44%^zvb zN_*5acO*N_PhEGJk+5t+7nyl1o7^P=_KBy;m;g!^HU2legN&p zJd$q4v*~6ur%cf3_Eew{)0G?w-aadROdo? z;f3m4unVh+V8H-8aVCAe$}Y^xNtOivw7LM$SJ{OX3+YS{+3_=Z;AKv*3oDx-agk)l zuXY6e1%WTD1PVnZ06Sia09$c|sF z3Az@7UHIq+ox=!rTA_&mr@VjRqZPrT?uVVt>dwyQ8<0|X%ux+k(r2J4AA>=x4+%5? zPl{NmHr`HaOSP4K0sx;LH8BG%2{O8>d<;1A-Gy* z2Poyw>l(mMHhkLlS2YmUiD!BHIlxZQPTx`t70`-WO8JAIQO!OBkG zJJeg*>6?dHR`&G_Sbe*y0ssBOLMuLf2T^5Zr|%(Jh}x6BcbL;0fH3wcf3&@BA>vbg zlhDy#1@R4xa1KdB0?EgD8~-F9iWUI0|3dz)*nE7K=)0L>|6`yL++k|Uw>44vkLi1n zR_*cDO0RY=Su+QiQ@=#PW+=*b{f44Z0tW<*(v_}cGc}gdN_Ys@oAr`q1EOY#n(<+Q*Wn} z4S#@@o#G#AWvBdEe|J25Ql_Ycy8nnrdjJ*atB{we&%I@R(> z>3?a%|K7?@<+(y<1ERcFx~kAEOB# zIyOY3fofeQjc$e}oV1yez@o%t<)qO>#9P#pB6RVINt&=($q*htBOx|Y7a8H%yO&p= z+C7opQ;a4oF)=Jf6B(yVOo6Dxuo;n>h*>jcq<}_aWz)pO#pr5y6;zu%!^Ia(M0^bC zJMoH6yet1^aZXB^!8<0U%&<6-niKCvFBV5$1<5lUC^=rsiC2G`5jg{r|?)Y;T7LiRwTN%rpTIW zkr83Ku&PkNw;*p7mBvK_dQbpsltx22}2fUD4DZp82&Q)uf{YyPTi)x=r zWfh=G&CXhbj-;)oFN-2wwW~#u&7!bY-6qybhgSYQdy0B=)ovtzy!=+_>{;_Hx$Nob z^*4RUnre%dP}O{7nMr5VGNjhf7#00msz+%hRW+0? ztt#0Pu~iwWx|gUxX^D>X8U-~=OCYK#{$6xMY}X#1J$jICWJKhYSyRFN&%1BHGclg; z_?}5AGjw57z%xmgD45Zfw}_Ouuo*Go;5jvJmgnrq#H5(`I86k2#>ML*dABLEVqzn@ z#zcT;WVA4}i%eg?p;=0+5-^plDIop z0F02~K^69AAW+E3Gd3;>)J?FFR!Aifiwr~L;2 zU`a0+0L*kRjJ^e6<>wjz{0zdHnC@xZ1b|-w;Ew3$HvqT`0Q3=d+Ru1Mdm;ev7y$kx z{TTqDi%+z-@d5x|(cYwZXM?{4MU6rCcErUo-P56cjs~>HO8W&2KobU_DFZ-im@OE9 zmJ9%WOSH8ZrY+r9V1RGf4h-=79z>lPfG(mR+WY7#z7us5-@7vaJsE&r3;9d_eqG{9Xysc-n(uggX`=(teBR=OfySVF0Eu z01*s8Bm)q|0K_l=v~Q9i`lGuOvlxJn8GvM~wCB?uGg3=s02VU<1W~$Nu!jMlJ&~^&Vb7cYo}3jOWB?8` z07n_%_e$uSbth;Kg8|56fZrcECB~W00Q|^Q>!=eIF#zWnfMN#Vg6NO#a1oLIw~+xT zV*pH|8|{}|W&o}-06#MTHyD8b!`_>K^_0H<pDH}=e(ZnJm+-Iv%K#6zD{dMI)Ga|4XvRNH~qd2;2#~pBYvLNPDq~V6b}1y z9RMl7mFNIo=>W<&PRqbLJ%9;c_chf6ROP>EeTBqA4`8JSsICWjt-h8Xpbp3C^02-h zpaK8gNDt6d571l>;KSze(EZ0XpgdI_UvA>jAoQteYO7ryjsf5Aym9Ngq9c zhaSL_r=fKkYpW6A-Ski0)_9KGwe=oM4;`|{HC;`QPd*;iBqw=;S$MCUY&U&|)5o7DUG{&rbDvA2 z=dbJ6NnN$?b>h!gj%*vX`}1jCTKLcC(Ta^9zb$g_O!w#CFHMdf5^(I#6@UG(aAAwZ z;&&zCJC>){KECG4_CIcaId4I@&%^qYi}nd_kH`G-P5ot2BQ|eZx-<0pnH$@0HF`A0 zFFAGU`dj@Sa^{;HzqrCI>QKPap=9tzSca6l=cWa!DGpX8c$)~LwKR#g-+EzFD*!8-H+0(Kw_76zW zH9mI#)sr@De~eD>&I`-xXZCr}kI#RfKl13-iz|1f+zIU8{%g-ASLz(qH~HjXT&KJR zKjwcPI`C)|8~CEAQI5r_WwzhnI(OjbXH9Z4+jvVehPK$3@U3a>&%O>>Tr+r17yr=b zeSHcXY6lJ3W*a(Y=)TUYypKx(hgx4c)F$`!ZOCi0L4U~O+PBX`^WV7k^}hBn=fN-1 zr{*Q!N3F@8|M|$fv929QSC2X-yqdjx@7M-Mm;B(<__XO?2i+p8<>fv&H+*pSAqyrM zp42@3*-QQWGZzXqVa-nQ%apIpqneM-NunH$!-T-+q* zGw-P*3bzgz`!sfcV6W|;zx149-&oiAN$3LBxmA;{EcaRe?{?)(INN1zL}vW$7bbOE zem46_y$MZn42LhS8E)}es%O=v*S@%a|L}{ZS8vow8GP5`@((9Y5Q>6!N;%y<)Y@rTx6M`|^e___p@14Zrzp$dd-62Mp^}KX+b>*PfYg zzB$sTnOOVs50Z|N5b_k$yO%SW{e@p`vsF>?SreHSQmFV z_-C(*Isf$jsoRzYW5z9x4g94~^XIvLeAggn+@3AdqK~Z2YJ2z3?UTpu`seVHV*_?p z^G}{FdT(!AKf2-e8D*U?jlSb zW^e7Ub8mfZT2#Kr#?d!-jOnvyO;WGzjW?85v#6ibru&&gk*%+}^*Oz?gI)LE5_Yve zcjx5g>4je3?yfs@PMz$t^?&mCXUXh(*E>WN#yqgxw0~_#j}GUCm8K1|n$yMYVD7lh z*Os~OG9PrkCk!~*%0}FKwV-vM>|XEz))u@lygFB-eC|DD}ew9Vi&1~*sNZs}R! zpV$VT`sGw`>-472Psa>i^yF04vsVsWH@pcMbNS<(HYZmes&;aM(;t7HMf(k-zZUjC zbB&*y8f_WeVbP^AjfGBj1)Vb272nB>+rG=kMYtK1?Vok0?ZhwlwyHaA&9&rC`+}1X z-+BCX)o~%sRtEj>bXH!d?|1sBoS-(ZXXRWUxAxibHAO*({wzIh8+fnNF0bZG18vR@ zGU@D)qZ{*L`hf8@^0!Utzqxku*vbC=>~kI`Yz}+)N*dbZw?2Kkmn>SJWnJBO-J(7w zbz8QWKX`nN{GgMePUD^ru>HRM*gnnvxHQb7YQ*W6r+3x3Y_Tcm_T6=fZr}W~;6|%X zqde}0oO#x2;g2)=^hqm=-Cw(Fr!7~D-MssEth%hvw;#vdecbTMSMK*dF6=#U)+eoY zTB&NkZzbA@gh^|R>i!!E#V5-PkBZRGM3pSb@nOZNYlR4n)(kKt+7)6CbY22h4OdS z~ zFVftP`^-FH3z= z1&L)}qcka9yAZ(H$zYIm{<*JB(iHHLbqst}RRuY1#zFv>f033RsfP;zx;a()@T`yuuK6{4hxu&Dc}Jf&pIq%N~VA}4-1%)DPY-Q0qY(S zu)`4ndmIsP&=CQ{j|e#Dh=2u|0AI6K;ejh zkBM!AOF zJ1d|eL%`W*1w3$8K=G`A^^OVH>6n0~=LB>*Ct$=m0hgQ;u+K38&zuu54?&k$OdrZKa#{?`pCSb&Q0c#x>Fy*{}ZI3JIy7MsTxPWKQ z3pnApfHRH@xcs<)n~w{)|G0n`j|(Us7Z5H8`0TiVE*Au>c|yQZ7X<8ZLcrx01RQWe zzzY`y9DhPU(~ANooDk6MqJZ%i1zdYkz^_gSm~~OWy(a{`ctXHiCj>0JDBz0|0$QIG zu;obsyPp)$>!g4qP6{~bq=1Ph1>AB{K!-mCJa|&Th(86qdQ!l`lLG2a3Ap=D0qsr+ z*x{6by-x`^^pt=TP6?QBO29Rz1l)50T=jPhbQ(~DuE7sGX447YhPO!s1#>BTVH zi{U*lhUmr6%$uRDH^Y|R3|+k$`gk)8^=265&2XkS!$fa}>%19m^JbXt%`nrOVYWBJ zd)^Guo1vKxLt7t)Eqxfe`Y`nIVHoPeFv^GFOdp1cJ`C6SFx=+DFx`h?rVqnxABOjQ z7@`kDvwjS1`!Q_UkD+TnhCclmhW29^)sNxKehd@)FZ?8h*>AH#e7 z7-Bz$X1)wuc-W$LW z2QV}n$k28m!nn8Aci=I zp_xBJTYrWv{TaIYGxYIi80yb3%Aes(e};+v4A=QH+~&_P-JfBmKf`Q)hWGp#qCZ2k z0EV^!3|j^;bPZtW6TmPufMHYs!D#c&^3smPY}bQ7@7@cXgio; z%fSp?2Q%~;%rJB?!>GXwXAWkVIGEwO!3?(zW|%&hVdh|l*@GG08_W;~Gc*fkXdBG1 zWiUh6V1_=y3`2t%Mg=pR8O$&-nBlr$hTDP}rUx_33}%=e%c7)A|YICBWY#32mV4Pm%#2*dOt3^Ru?%pSt<-Vla3grQj|L)%b>EkhZ) zhBEXCWf&UDFe;Sc%ut4jp$ylBGTau*Fg=uEW+=n#P=@zH8Dc0yv!M)ahcawAl%eZT zhCV|Xh7M&IHI(7Zp-g@s!vLwyX2&WJwo^b;3!_C`0EpiyV8TuTzt}0@hMfZ5*(uSYWwmNC4sj3F#%=&+n&;BtnmmorRT&M<2^Lr7wn^(DiwB!&q|3{#RAW+X9$6%5^1 zFicp%FoTXS7#6Ky=$yn2n|7QEbx(XGxPrc97 zf6!1so6Z7$sD02uKpVSv?N;-u?NUYFQmQXtR$BqH+WqJLQ}54z_5A*yyub1g(Wre{ zRRp|YDqxD8fUBzrm|`kmn5lpcrtj{_|782rA*;J*4RENfj6o}ElL7Zed2&eHP z9V+*q!ixC+8EpX6W1bG=L(Thd`2WW3Q|qGq^!<|SH{$=NrdzlS`1QfxQNLF0?y|7| z59uQ={6@CTXsw7$1kmB0qO%c_`fqiMcoO8)V1S)NZ7(nnU(x#0FKl(NbR|*0<@81r z5m{H6C>p9AGP+LHocLDQg=P&P$CXj-Bh2O%0M(c1bVE z8!)xz3!|t*tJuKebV>G$j;H*Bl|krH}gN#?ntvqOB)VtW8W-u!uCjq^b?DTYiD$M zvRqOJ9h|o`MiV#gbD{*r8gYAxcSHPoRVYrn(yCB=uo~g_iumWM5dN(i;q{-=#Ep{6 z^^9?EdZ{_ zJ^(CbeS+0*eH2*Ays;(p4XyYk64fO}Jb+r0ng=mBmtS8O{{da_*+R|{Yl zFMlc3UmsvJkJI}$tD)*6!V*eJpP{j$UqboU)Acz5l=AeXPY~7sAd<)D((_OsWG)w_ z|D4_*Ht*`MZ31wB>=x5~1v_YB0&vnOev7WZHpspwD8K9)uO7fhy!;bXe+%VZMYvVD z^6JU90pePK{9Ysc0@Ytjc~4S&3+cw#01V{i(aUvp&3E;Y?n*)()hC9f{B6mq4e%3B zPx>1fcJHo_^gH70-t`yhw~z^yWS(BO;mNs-wa7M%)(3^Gw#=1s|EK&>#7rC)s;Kt` zPMH`R4}pGTr^io=iHzmHV&DBFj|>VNTmI)x;b9{KbdM(D4zO8?Jv|5?b&)9coV~tM7 zjhi-!w=8bjyWg=!=VOh5cTF|=8T;;RtkLQCDU-&^E%6MW9_i}h9XozXL?i?b9y{o5 zk1B{)q>A{E-;O}Pu|9$1bHiJ9!4WukY`@5IzXO8bBJz)rDgNYGByjN9DDJBx&~NN} zB?OZPknk8EFGBmu4nzE=#7+o^iw}+`=OKZE$M)q78$34nZH;Q$cj^4bdeJSLGROE- zzsPw1$l37$aq;v3#!io$MjrQ!9DKZ0O*hg4C$;dHiR0p8#>m$6CsWL^q@CUZ1$2U{x3|RBR{A3yU;^VZkvO~w>0)E;$bNd zR|YEQQ+T+Ahp9Z=&BHVv?&IOZ0L2eR5rtI&iYc@ND5bDAKpBN~0IUK5s=5Q%P)K^R z6zT!&C^QAIr;zMXP}mp1k-|0rP86B}w4<;pfHQ^W04@|(1L#Jf1%MlcmH_S)b_MXF z&gqIiuUe;F|puL}@Ip)Ei> zh4lbtQ)mY;k3!Xd1}T7jdSYZ>@}D95ULgM&qzzf=Kcgc58HOLpjYKq2m|!q$<;?RskRmd%5k#t9ZjmOh3;~kd`m==YHOjh9G^$= z8x(gScNZ1=`xxj!{ywPIRg38J|JL8fL&co_f93DP(nI$5p%g%WKj`m+Tp#>9e;>cO ztNuQyK-u4i?3*Kl{C$*ie;?xOxBfmT)rb6jOro+D6<6f%qx8S!@1uYQFI5^+aS8NL zkQ0g%sz-`sQ%6}JxgvghfVH#!GYjiFeKnT*JuCy?KdHPkN#%X>J%eluj)dl2j-~*c z?ima;_ER|Q0oD#-3U!@60$!#7hwd2+^i&bPOz&rHl}J4M#im}?4thUpo4zNktvoWV z%{@+Ao67pvvrPd??->mABq@13-sTCgc8IqqpU2yBgyxKgr97r1y?@8Q-?f*f6j$l} z`M1F!n~vhT5e{M8S3o~YFKhF@C&soFGFuTBDp!r?J`KV`XJTk4VJWgAidz`YSCqTJ}C(QsZ z6lm_@$NavKuL6F*=`C7h22fOBFwi`)!g>O%-SzV;_@D8#^s4B8hT85`6~M31U?AH8 zA1rg@`+6$$7Eh?E_`i^S99GoN)Sj&sx2J-$a-WdhgPf`WzV{6V*&abfqoZe)()fx$rQ0~MA}?cP#>W{iiWKDffu6=~vlSW+KtF$Wm+ z&|sjsv{Ki=^3S4|wYy1cU4`ADA5dXs^0QE84p97$!9Z&SAH0T&lzu!c$Gv|ym35)O zY5;+c3PaQ9XtKpDpI%Juw$i%tbRP7j30nY$@fUtCWjAQZ9x{xfmto;!G(Q z6Qx{SC*|TcDHqeFT+EbmF&)-(tzSE3zm%bZ##b@F7 zd$KlpeQasDrPk#p_m(wEv>W>5%VSfnJZ|;dw;TT%((cxhH;U#<3Nx#9BgQ+ZeH zYF_^Hp2w4k@xHp{fY^S*DLdDnOU^i$-~9xFXN zuFt3v=70RTPl`w0Jhz~JG0o#VO0GNa3A+>+e`;d9XZN3OAG+e#@zkPQH-5@6(f^at zc>jf`x4+-ktz&SpbxynR^LLNE2*19$cAK)J=eu4j6^FF{YxLpvtI|gH%$!us=g-(J zug#;k>^V7aS@@0957#u(H9odKpyY*fX!iKuXY5#V8xPnW?=Y;)V{pxl&#D~$=ASIL zYw$(C22L+WEWhaU(X(gur!QI`8xwD5GUM+Sd0PT4#?|TEyKmf;=B95t-?5(j(cC+y z9Np75KX`Gc=>=V%fO;EyJgilcRcrE}J=bTBUQx>;f275nhvJL8*dayIsnU9DYu683 z(YVh7LnjN}gdK)URr1Po;FzN-KiVOweZPkbw?97F_Cjvs&m506@6ksYQ-1^QCnjBhc z_~Y|FN7El09AAAl=}4{imv23rGyJcmn~wi9V91ebt(wohT6FT_@Sp0{x;HKN;;*)I zZVoK7{FBw&_1CbEc8=TK%lqcW-7|JoZ83UFvx~JJw4dNUy{YvvY2?-i`@1%7TidtE z1k?1td}jzBWqu{OeKF_Go2^%`>b8BoYYjwwGH=7O&DKBb9<}PxYOX{3)+hI^H)*wh z$GKa(oj>U?qKdt9M1!*?_vT-jJpEw!z&+r#Bir7){a*XY_jlTNiYnP^^YV*@>{7QT z@y*)xo74AFYV1G3Ss%}NG_ec(e&+D>8hiE^{xImp-%AX(^KaYOT-`OH$^Al`t%rA- z{+`&w`Q>l3%&K>t^f@FQ?7sD@v2%ujZlzg4Z2*T)FF5^ja>6Tlr^R&m2UWbolgWAVZ^M^H&bzrXj*X6(W^AL>$iT9kL$N{)9X=jE4LXojRJoREQ{)zL6R1<-p~HkJ@k*77<r*ejfv!e=q3rNUp4H^uxFBkITKnHP@RFm$M zjt-hvQ<+rWKD}}zkV#G>9ulpg&^jsQrF1S;m4m)3s?axqgw~S`yxzGMARn~QuO_AZ zbP)fCzA5yZzAJQ49me&N(0T)z^r3WamdZijCABFE2U zrX!yo)K=no(f5@O*|rH6N=HI#MQXYXE07PeBd7}X38kgA1~nb=)#$ioWFv>tkxVm6 zN8fWgj7;~ut(UHi%A@N|aZ(Nkig2NIToPJGSJN4D&{R>c<1?dlZtXxmmK%Mr)pWG^ zLSql=FPSsf`(2wz)O5sqAU~Ouj>aEFA4o@=Gt@pxSL_c^{DE})jndKHW$6dfk*!j? zXH=fd+3T(F_0)DzNY4S;ELH2Jz08Mw-tT8hOPfDxI(ae8UFlO*C=DHgQM!acfCTsV zxl1Hu`;_XZ_7N}TfV(n=Q-#VRAs;VPuPT(z$i&jybk8*DvfKfjscya6)yn2 z3Tn!zluD_TN~x4e`Tvr9kpFL~?8$m{QCj<-`2RL7K|ady|2u%91JGNsAzh^9|99Xz z0DLU*-{t>1GzL%)N750{Dc^7U*8eO1zft?tu{`Ca&o_m}{Qto@Z9m=-oKffU!^7vF z&EM$JZQQI0WM7gF8h6kEGP@!W+SR;eYWD@yg7JHH4g22Q(p?`_Wr?Y|oR+-ukqJgx zM^a5&lF3Gu|4-b1niCM`zb)tdlaTK`;{LBLeeh@Y{uKqD*X(!npEbTO*|Z(v+9_&W z_pHL`j+-M^p50Q9`0<%f@65=VI?O)E#AO)q>^~dc_`-L+?k~E%Z2t+eMQr=?)q3k* zoBy=&%F*A}PG9-kpl>esSzcJvlX(1-Bj!I&?cVnHt&d&A?R&!>Au(FK)lH7FfYr@~Ti>@fkq*Ymh&^ngHW@da~soX9Lim$H~TcMgst1dr^9t>$vc_ z1#y&#!yjjazt$_`ViMwPe?=U7qxMxZ0T8*rG{PqnhrE`eS3>2J4fhON#dbc$$)TnA^VNsFMyug1w^KLpa%dcd!F_PD1hFdH|b- zir)Z=6Q?`F<{f^N@J8=A^!tc&ZVj^Seo9ZAbLU#hyp-Zqh(m7&vabP()7&DVhBA+# zcta|$0myzRDgG_pueu=X3Q+w270!3y;IaOZv;3xvpQO@w17gR^lwReW-`M`K6XQLm zMaG5)PMH!TCyJaHGck68-;@a-5g}N{JYr&|jOSe7A+a&MxOa4AIZ?l9Q)bB&;+V+r zY43`h965P_}q8O-3|3@eQ9I9TGk+MsCg92rq{k^!D7~ z@L7ISrc6?Z?eCxMJ0*6ye2K=8M?^%qGPLo*;j;!uPM$KeeC-vSs-R}&)ce(X$Ih4> zIW0Us(mOVO+Qi7|$IOVF{+{;0 z2guyy$7}qgvE!pBjg1PQ81tXm-4WA2NbhzjPxO{oRA>UN%*2g81+x6_vAOBnU;=sc z|EmdN; z0QM9TcZk9&0FD%z0XR`u6`&o3<^awVIsmv(NIY)}9Rb`Zv;c6YuoZw8h3x=*DYR1j zYsx%tiq}y5%@VIWc=1E?g7Gph`$U&=ylnEOs_?Q^G3=##ZupV8d*fsC%Z63j?>R*8a5TKmgBS{8%@iZ zg$Z(;plJHs7sknP(x#+4358*DoRUTp?X56SjuV41n&^Io?sA;6MiWW8&{>WXgEN{) z(S;6joQjI33o5jc)z{}cS@ z;DX=Z7!04DXrMH%wBVE12E)>fq{UZhF?DUmst8B(8tEA&IU`T3UKQUGf(us2>F<9e zUrf%b#WyY(3`t&&rmGecA2P|*u^{!e!LYd05O15jhDu5DawZV|=+d7h(Fe22xQ4l^fGv6o*P3`xhx zQ4joeE9vs$`?{p8q)@w(ti{J_JgCphJ4h3V1H=LUowg#9LhV+KvbAZN)BVzES-m>R z$2`f$D#^z*X{ODrHc1QWtcq~7898RG+MXKeYfZu=gCQxaBx}_Gn+HdDxr-m$v}Q)h zSM&2j=mKWFrY>Zi$K+Z| zuf#V?_OwbKVBY#z_e--L=}sqw+9b`jS{31FKXT02(Mo?8B)?HQb42nQQUX|dCBAL4 zr+HgX)9$6y8W#RZ(;m7n$=>E|y-mBHu93KiNdH41xy{mlW)vpN_mO&UZ<)c+eLlA1C|RCEZ_~VN-IY`|;_PRAZ+MxlY}wq;`%4>&xgFSY;l6S67f6YM10;o^)n$ zhK(+(7@Bq$ree2AgN8VbyBR&(z7*|np4gWg*t=5kgQL-mb92I^+Cp} znM(iGE2I9M<@~mPyCu(abW18q_H%SD$?9HOW6>)5%#|d2*d@Kx9WTjhdc0FccQ&hU z@*JDwepbm-%v+!8et*_T-SMQMR!cMD$0a>YI=%R%X>z=y%k=i0&f;->yk(8wtfP`@ z9Hfu$;#<1-sx{Kv8!`|ns^8E-sK(``;f#zx-DAQR#@crEMWg_2EF-7n60^adz zqs#GX<*y{onTiYs)y)RwpGSVSiwp*uS5n>Y^6MuX7eM`$N^_thgMn-X81+|Qu4@rp zUTs2IixBky4~sPV8v{8f*~>CebwWU2Wpf(hJuw()J%h@Z`O7>7;pCIs=0D)RCIAi} zz~!&534rqxgMoateW0J+_1P8NyuOz5d_UC$An>WdK>FWGexLWa;QHn7-zTd3jtRiN zrv?Mf_baTMd|HgF;A!Lxvy;-~NQHr~^TAfFok?`sKA-C?ExcFzok;J4SU;jjl- zyPGtxh)?ZdNduV_dQOY~^E0m}w-wrdU{A{k?Q?@+X!&PR*82&tc37x=7UfYH`RIObFwmL@)v5V^pJY+~AKsVV6O=Ed z3P8?(GavPPP8EQn=f-|WB{k;mFH*ZV%|AF*iZlLCWhwDDk zfVLZbu}cgFnL{A|zl@W0i|BtP#0;QLi6-x8Yjdv?)~56>h&KapDKQvmKbVBhkseIP zl6U${bZ!&rdzKgswDw3s^`@BtbStU!|4}KGQYn>EDV0(w|NocOZh7eLmM7bIEsa(9 z|Cc!bpVp6wgJ;e8|FoAz{D0b`lllL>HT?hH8vcK$JemLR)Fn^m|2ut@C-eV%X!-wf z3jd!tf3(s`d&sn;v#EQY%>Os-o+tDF2{-2dpENJe{~y;aPv-x>XAJGX5-tC~H$Y%r zh5tXZM;<2j$isC#@^D*^JWTJAhnYR{FuO+{-s_Qv*dq_kdgh^R&pd3|GY?&R=Alo| zJPhrbhfzKAaAwauOzfG5>v}4EOp?|&4+Hz=VM57cy#`2SxG z%ERvm<>9Y`^6=`QJWL;yhnEMvUrt3*j{k2l!NmDJ{=d`5SA2Y5)!%$*bim(fL6g5c zdGpRHyPTREeM~og`sMszV`K6Uj_;m5*4uOHNc;A^gAcCG{qn~qU+xZSdp*J;+q!-5 z()93br*0Nu7MX@6PLV4=NgH`*oX_zg=7WwjIP~+e z2HxLa87m$ib0GK0^q#L^Nx-z9z7?9(TvBA;===8WQyyPUcrYwz^SK<|xdx4vHB0-} zZ1v*kPdhg5zqQ0I}9!6Bp#oUE)_BBbIpbiKhe6X$*X_H&#hPUbp5<0cdYy# z3z?o>j8=C^Rz8~n&;va{o71NLrj7|?i?fSaQ>_?Gnh;-9UPzH54H!L?UkkL^2t zO-$3-Ma_b4m|a`f^HQCKQufuEFAp~96r34k)9K+!_`3$ob`NXQJ@nDfVJ)1tw!MFC z(1Tv<*9qf6ee4%e-HC_~sny+UdSkqhI4rdj#x{D!AdgctrJ24*$9F z%$7gacs%p%cD(29p~*{|UWjyj)_Ty~$E!MY&Zz%jw>W6p=s812|8jFdU48BA1GfBr zV%sm1&3}9K*92V$^XBzS%nHYD_joW+_;hYWv}Nz%EhZ$-SDU}5eDe2;eN(?0)&CyEc8GlBajfH|G>^prkD&70$+%dl4ZC3g1h{j)6FJE*k`|jegy-bgr zrY3Iq>*(2~d(StFICgSpz?okMeAMisUwpp{^IGq|fAy=YJI{Zg89QL=KU*H0=`^)Y z_3M94Z_>!2U3OTqDMSvK%-L6&vb4t{MPBu|dlRe4;@_BvUuZC}&h*Wu~5 z^uL$SExGWf-Rjy;Ub*CNJLCQ{bZeM&yLD05gP^-$R!|4v?6-N%D)k4rI>G-%{Q+7# zRVm1{qecg<|Ec-|PI{0JN<@gLc7;>m@PPA26*3@RH;aRz?j3P z3bl>ISbxB)3CPCkrUgewZemdOynP z54e*ap~6d2MeV=$^aq^(rT&03K%Dx}8*$m_ku*9D?k<)31C>%Kl~O5{@_$D@#Q!IX z7VVvtj*@5SZ~6a?!2a!cQI#|Yy?hw+|BIXJp}4bh#CHG?JD0crALy@#z%j}}`~W&= zXrq3+RZc#Iv_D3NiUr<{kEnA?2kH@F4)USm|Azl>+&-&zARm-p9XA{E{~hl2vOoWc zY3IonZ76zUC`T^BEmt+yKuG(?X*D#&i zG;AUzGKK1h5j=I)C#Gdao)L>)jfd>P;ZQ%0sUQoiFIX9Zca%a5tw5F-=(G zFweZ%B6ABH2ddfzbl>#xObPS?JJX$ZDW>am9_EYm2`z2FJjJGgnJ&WJos7onA;BzR z(^^xF3jegUZU6sjX%O3!y0Kil} zPA4I|kTXHy<{Jy?_s%gs0RW!>zgxa+8sYZ*cViwlbHTB1(oxG>yt-Lt4<%`s*7k+aM_BlMETHV_z-ambJ zcT-MA=zt5t%);d%j|)#Q!%&|?yXJi_%=SFWzIoi@+zQdhvQx^g=Mf|B_1oWZP;q|9 zn7$`=?%#YPWzx@X>t5}M_-kTZQt;M;BMLWF+56qOAC3$^+PZjB?wBb(+csH}p4w2q zZr}9CIbR&}ZGHa07wi8>I%{)K?9uMxP4n9(`-7{7giV>ezAUX)uI1g;IotC?0;lCI zdOEeQ?bw4Ym(82GsuTok}9{qXEWj${FnRl~A`nm2=t;_c0Y`gnKS4;6` zi}YbvN~Ogu)^|7cSlHr^I|uRl%@*lXi>i9AUp>X)lHJrdKMX8M^*NBe?TlD3F!KId z|HD5XNExo1y4G~>q`8~lbo%Ja9laZ6Uz*<}cm0W|#V5x2ENzqI6n1vsfoXdaFMo36 z+KmPDX+J*_E>h?XhqFal$wh%YpR?P?My8x!Y#RJ|%4zGkky``W3Jo5btsS~-O_RIc zmfy7axyoVPcfKbwr)-Kk(X8rEgSUPG5y2Yqb13+yjA*|1tZz*-iVKYeF4nf4A{sQFD`5-#>3?HSmx1 z9^bF9p77*i)!GHir*1S8e%Afn_x|1=GE!<}#uK@+#B)pS1nD4bx1T@v(f8R)1sackABT7{ige=jb{dpnDk6Th%^xHFk5v<(Mfu z{HyzS9dr8AB`<=fjvDt{GrPk(Tuv^&7j&S*z_g1svEZ}d+@1y9yuZq+7HV@Nb>44f zjZ0djk1P!`L|i#_?UvogqxV~nTM*Of`HDTCl-@0Q+<3ct)fs0mtvYSdH)zti2Qc#J zH+!GY@(lcD&d9CX_k8q)Z}#V_Ke<1t_xI`U4Vq1E^+)p`)c1laPvyahBBZ|+PV8AO z6hETD+Zk=F5PnjVUR@g^p>+h(O;Ux@*VClmWVB#J_YDO@(e&SI&Hc;Q z^w$eb{}*VU&&!(rd#;K1*0ld;4c$i+NNp#~LW``mkTy^!`%EKzadpxc)yZRGir=dX z5Ei17eQ!~`YjuDkOP#EXO>r9U20H5GaX!WOnggU1C_ddN-j>><)5%-`itB0s#MRfy zb7+d6uL_WG800w%#pjcLZX&?%{Ccj`0a)$-?)pSqfVA;C*`^YuKV1_bqwTx6n+bsX zYLMpvgrB493)ac=35svB0N6cR&+kVa$gT~L(LpEcpcB4=Y|U>6(3(Xj-s`3=067DU z?Q?5*(qx}|UCCdLyFu6A??_h&bknh;dIu{OpN{P6iRTJ`pj*AmWiHBCa%uc=d^hyA2{fcp~Bj zgNTMFB9<9MZ17Y>FOabFQxTVdgnmy&+y@eV{8Yp;kTBt?h>ki5zj`WSh)%+7PeuIW zsfgK6Mcky5@bOa-EuM*ZNGIVPorI3hMC_)Qu*WkIH|Zq|eI}x)m#|DPp@WHpG0#Nw zHIZ<|GZAA%T^j){cFpNV+&nTY>96Vb|4LU&UMqfI3=DHd^)sf2Zl zMLc6Fp;Z+LovTRLzF5TBRV2JxMZ)4L680+=(cMhK$YK#w%_Ph+ld#B4!bQa*x>S{L zW3h;Pi$y$NEMj4?h$hcP+)!1*GgT#Q^jyTw&qaJ#Rl>mMB1S(KG5)!Tb<8FF;<k-SxUGSMU1hO@C1r@6GdEUDd7Q2 z33DtZEVGo*!Ae3uD+%MQBs8Fio2(>kR3c)Qm4tTHCG@H;VSIH7Q>sf?P+dYBYYE-0 zC5*9_aErBs7px^LvzE}QhJ?dvNI1KOggr_`3@#DzKn)3VYDidCL&BI65$$axbhD9g zwvB`vY$RMzBH|ev3G399(5|83MU#W-_OGQj96>(#!hzCkV%qkUeR9y*gm5R8$u7nrrN?24^!WX3?4zrc8 z?h6q&*h<*xg@`w7CG>qEqD?&s-RnshQBT6udJ<;UlhDpiLN_}J)6e<|YbMiSP4 zDPpIWB0g*+p-p26{a%W=q_Kn}Uy693v4jsBOE~qVh;^Ds*sY0#t6qv2)O(o2HDdM4~65e?!qS#bI{VNge znn_sqm53j`64B?Ch+(fpoc&5f-)0i7Y$oBpW)iM@C1OD{32mB7=-gbwu;vmjX)a-E za|tgrm$0b0gmoMx-1|yIcSi{?y%I6PQNrbp5~eyznB^#8v7>|!UWw?`Lc*{X5+<~e z@JwTDQU z7sqI7(x#(?>Uu0;ZXBa&OoxsVs`hvYbKw|WN6(HDe#GZSgtZ&3w1s~Abd-?RY1M0Y z?{5wk6%m}mR813DJYOcKw$H-E_7!78{F`E8Gb(FBVQJKZOUudcqtI1c!F`Bl{ z)L>boB&7D!6y}SLl5Ce;y@rzr?)|@8%eBi2eE~eWaF| z!ZDgs#`KY7zOstBaEzv}tNTcpV$|1893$IBXZlF^y%A>5F?m|+E|EDP*@P3dvuLF9 z4AR&>RdelkMk?1%9P2aj{GB`$hbZ+kD`(+=;$n;WyCSNMY z$Trs-4YrA6WUs5PbNMn?bBxvn+G?;R93wy9-WqH+$4Fmxga(V@81dVtYOpYl(Vl3c z1`FXB`6o}&V7?q9!vue5FgK31lI@<9zdlEf5#KOJlW)fe3F$E)U**LbEQMoa&#X$P z@@0O@F|u=3PlJ8KFyK{{8*V8olTsTH%_x5WrCytR1rsbM@ zWY00u?LMc;XTve#ciz!prW_;R@$gakc9srTuAO{B)zM%NIYz$boix~?;S$n&oYoS2 zI7Y8YdKc{D82P1-&|tec)|>R&HCPI-k9^sG#WDIMQJHHwMr%X6dB3RGa*lZbz&1_3 zc^o6V)fY7R;yBiqo@Mtau48mx4f@=Oe( zeR~adm1F(@us~Da&SA=XB7p4JY5HtC$4FOwlcvlq91EiTZw>Z6$H;czCQX^&aV!`B zE^6{^3zdERGRh zB36S<<=6*F_qgSvJOk=jL*(z>akSUZ^Ql-C$A}|h)}{P=$&FtF`3!BO z!JPRsNWLdqYA{ER5!a-f2D9TB`JNo8!K^q&{FG4|3^+!dm1!ERc&PGSA^u8&1`|0p ziN<^ytbk+0bxGA=SsWwoONItJ$uZ)@Fb#HqW5kttpuu)?jEq*9yO!_k6pj(Urilhy z%Q51|_t0R=he}9e>*+LZ^_0H{Z^wi4I7U1j7f*To`4)@g7}*yc>F+YwG|L2Bh`RjA%81aIv`j*FBI5wBssll8$M*JZy79Xm7 z|HzYZkgFu?^{LNw49AFbG^(#8>-wqK9X>}O9@26R<{PT?=RyGZSku?;q00X>U2uX1 z>&7v%53^B&IdhD-PWv?1=NPKI=NAJ&x+b3;$A}wsPJ>x-Y$@60*I>Xg;!~Aru;L*~ zeamPr+Euv^>U+0p$XAD#28-tyam`{hSj-URzJEz$eGL}D zG2*9P&|srDMmA>yHT@aFG2*jL)L?!bBc9tb4d%r$;=iS6uy*_!NKfSt4d%eHuL0mv zR|)le-8eum$MqIuE9|?CEVOKduPSf)>*LQ|v-&cSg;{Ve`Rw>ow zOXC>%8n)|K{(0HLG2#v_bkSf593y_Bp9X`GN}myL@na2E zJVL>U&$w8F6>w}Pjn6cg9iLO~A`YYmv*H->BTs0sd7;X9f_RfT8q98p^4=vbWkELy zY0j~u93zMGqq|GE$OtP4 zQQo`6E1jsxCvuGTsAp*Mo#fab#F^FPJHRpGsIJoFGv(`N#9jTmd-?C*Zaxzm?R{+T!D82RkEqrre<#0|FU zUp`-Huu|ql8uw_hB974okJ4ZT93wmGOElOGju8iWw+71zR@N?wn|w?2|B%HonXlZV zd^^u@j5y4VHCP76h}-O@!47cj8m-A`ur!WklkGtbmdY_kJa7$`!ZG4d@6%u#I7Ync zD;jJy$B1uTr0JLC93x&zktSaP$B3WpFra+D%;p&JwgWX-9KR35=T6XI(HtXP$y5y% z#xdf6XKAou93yUcsRj$=*ez=3!1C?%@daEyFLWNGqk;27x`Y|-Rf z%`wtFIIh8#bL}&E^>CG2GCU8OJfwZ3xrki{=oMRCg<1=8qgR zBb^Hkww_~EbpUNO*k>Fwub|B393y>?KAL<>IcA{)2-aYWI7T`m5gKeB$EUW~(;Dn5pI6adX|@J)=HujAI)Gvg=FZ0j zr00^Lxqsa_M!I!r0TOx`jTxNzx4*6qK-A=O;uz`7Kw$ZM>%g&kq$i`n>^MexHoh9{ zbG~*+`Zw0Slrq(I(P; zA$-lTi4I_`21^N1#`>hgnA%Ii!JI2C?@e%w_N5PMu;m=1ed%)=%!ZFKX@5B;P{K5$ z`KBqy$mh`}O@Eg1XQG7;;G_nN=lkfS!<5%c!lp)J;TVpQZqvP95{4RK5gc>U0X*v^ zVUQ6vies`qRBs8xjj#}ok&aaL-V#nV!u)uDlFn3v-sPVqFOHFI*>)OCa1g?3~tM-G(UhX*V6f zEe*Di*Vju2U@*cyBpbq&Jp+0tY%=IOW(x1bX=YlHO7tXm5?f`$NzY`Sxi~R3LK9@T1Jq%NT3f z+X3LuaHU?VfT?wX9>j3vUeb`V28t>NBcUK%nd{MGLTbAtR%1Bdhrg%&G;tf^^-w`P z{Yn+*oDx-N|DM`P{glGf&~M^Nd`N0)%d}A#C}pF|w@Iy&?o;1-3g5_|ha-3x#lx9A z{Is58w`Nm4#b0am7{%t^z9|Zip7h6w-$6AJ2c)#KUT!PJpT99o>Gr8&bI*K}VskHN zxngsVyoJ!-19g{t-)<<+L7HiKn|lWY#pYhZ0mbHCx2ErG?v)t~Q*vD4|6%XV!=os= zxY5%+!!RTmCjkQ@$bb+~5raa+*DZlCM2Hd=Be+072&;fB0ZD+#!VnfEDn@W4A_ja# zMZ}1*MV1H(f&wF?O?ARDVM&JR0EaCw_c^^JO*2uv@BQw*fAD*ro~i1t<?Qjisnw6<^ZO@ET&L*Zt5*Bwn*s5CcS#9;SfcQc_~wfjaN?Fj7|lv> zV@U}XK2U-{b^5aDf}NG1bHQKOVQ>jXG9^y)!6jJwKneO5{Dq|@CFpyg1jh|7L6VD? z2A7~L55FFgWrAeqakZ|g&e8^#;OdeR{7bDrI)k4Vrs)66X95;50gIS`ZYH3I35ZNU zizr~YC}4yrV3a7JLliJk6fjv7Fhvy5B?_1;3YaenSRe{mBns#j1@wplq9~xHRKW03 z0V7HUj4Bn-Q7T|!ses9)0;ZG-=qeR3w^YFVQUMD}1uQBR&|NB^r&K^J70^;9V0f8; z5oH2Kl?mu56ELw%z~nLkQ_2K%l?j+zCSZP1 z5l01#Ix3*!sDOz_1x!9FV9HSeT}K7XJt|=SQ2`5%3RrYhK=)ArJx2w^qXJrv2^fA% zz=&f4MjaE-aZJF(V*(~06ENkNfUaW#<{lF;|CoRU#{?`oCZPM6fSzLl;xPd&#{~>O zE?~rQ0i%u!=r}H5;&B0!j|-S`TtL@x0dtQFn15Wrg5v@f9T(7jTtLrp0r9wi7LS18 z9swgf0!DcRba(_z^az;j5irFgpvxm*u1COpkAMXp0gF5Wx;+AVJOZLeKufuR;pGBG zlnWSDE})}az{GL^lgkB6DHqUHE?{oCfcfPD7L*HER4$;qTtH8`fLJczvqRLr;udb< z7H;7d{*U3%h0n|0xpbmp8Wyg~fBncs=a_kVq= z)x59oF~89HiGf|W9G*CN*)#VK`|910<}c5`ZQ~uIKAn~Q&375G_f=mj|7xXm#mF54 z-nhKvE$JI;_ff}weCFNAUBA3K=Wyn(E;|P8d^u@ulYyVTJ+RN>UmPjDKIy-5S%<#o z@5yfz+-BV${Z375{DXIR_6Fxq7gq0TxjfC5|NZXhCDWhe+pL&bbVvB3zqkMC^dG~= z9DiiQ(RI0_K76X`zVx4di!2y*+bbWgEk7`?i^ETS5EdH-n-nix?t1h;<=Aby?bi<^K;frFpqLS733T8ZFt1YZ$hiGcm8MX z?7eqCxnH_>-wU5jdpU8)fwOe8Y+-%f?Us`m2ZD=x_;4c;;{3<-ygr?K-qUEckHbW0}j3yx1rxwL@fa*4-x$KQ(CA{Ymre_2Y(qwW-N9 zYsKY9n~wh7J?6ImT4kND`^SvB@0G8nbx2zD7W~v=$?vWD2j3C>$@lL* z{%!GZ6BCawdvMX!{7YRz$A3LAY5$tptXcm}DU-f<|4)BR7ysJ4GhIEi26p&(#l*7T zQ|}vj;lnmRw_Uk!@QD3CA9O6J3%=tUADRJ zD=&PG|4TaCVCCvD<&LGr9Y+j))DryE!%LSuF?e>9pqU+?dG#ktQ3)>is>_a+VP%)? zZ}eZ^Y4Z|$&ysvxv z!|m?x`eL^ygjZtQwy}Np*4v-9eDaYaPkx%0IDMbo*#4@Pp&&?OL4N{P>RLA0CS7 z-}2{KPrf~V_qsiA#NF0+z|ZirFUHlNAJ6I(Y_=K zNB8KTK>IRjy^8KRyDAsGKWneT6pq$rXb&TWqi^Kv2Pqf5hf_FuN7us9em^P`E!ojJ z09}D}`_djoEnLoEkgti9fePXsrAhnpv~cpq%~1gB=;MMe9D(-5Y2j$yfi9h@g_`ox zzBCF)~}CnA2y z`tyI)LHSa+>WBF{_5V4WDY^^xCDI9^zt{h_b61#r z$;;k0CH?q4VGv)UTmv3fY}v}ou{M>5m0?hNRk>(gnJ#)x<)KS!Yjx@W8#vzv+O^_o zkS{In&FKHr)3>fQ$QQ*Y-pKi@JnH%EbKslz-1+TaZu;T{Z})n?COkWA#f57hH{fM; z6LJJv+wE!(f}~GuCL4g=38Wh@cwt*-0+>xU2(_9AMVhx}TU!G!cL4T>0OG6-vtUhh zJsaN*TJcWju(7heP~hr?0M9j8vM|2s-5LFwhBbBZ0Bu@<$!xU&L~n(NIlD~{IV1DT zkqxb_?u=d^c5!T30-64ePDpoJk7qYu5fpjae!@P*$~U%!xR+rcI<86gjt7YayhN7R&ZLK z(e+GO(PndDdLBgQ*zEPT(;hV12b$mvZPhh+apO$BOPdGok*yIzQW8XL&7+;)^69}K zr_5Yhb+t!Bv<;lL=wRBT#n+29%e{oz45YClG#)ZJCs$^T=6i9R?W^TBS2Mop_E;{b zC+|GccrD-fy@p`zOj`xzJ-%ReI%!$c7PGI(Usl_i=nR`V2zulJ*lgBr5dBj2YD;vS zFRX1eSa`5E1gFi+QzbiZYoFB=w&o0M-IQ}$&DoY{r=6SH#nz^c*#aH849Mn`zA?Ie zs5P5%v&yY6Gjd`B-W2^wSf_4DHrNhU5}Eo|^V5Z`TiL7*a5j&z7luLxM7G)Y0u+vl z`J-!$y)fEpvVZDy0$9xegSJM;4VnWDAg8sxfjKBC%>~`T%!7FtZ?}^o#~1*6C~tFq zk~QZOQlrB2h3U?p?0ubFhB?m)&h~s#L`)kSxNKlw;9S8nW1w4n6CQHN6tp$EX+(ND z9T+ipo3ijH$cc=#nPT$H4@c!(dpE!_sK5AjyJZD;go>_GqNx64ZHm%w*(tJos}bZ zh4tHKFVD`fG~5l1do0-*(V(zhW0MuSMT5OzP-~|hGU~}@`AChV-Db9f*%A|Xn>nU6 z7iWVEGjN|YkL~2Ng53z;bvm7~Fl>DsPjwX5Jo49c z$jEd?^8HAr8Z3yM2gK}nr#-{YH8j((+Nl@GOA^FIo1-ZO4uH2p;{kJ4d^5^2Y$DiW z$xb65dndF`;`xS2=?$(nFRVY%23BzNqZG^lj%X;pvv6ssvq8f-=Junat@4l~gT5PT z=TG%|0_ppgrW=sH711{#`u0QLaR~IyhCp)$`qo0hDd zIDp<9$a-`V)bM>dfPSQRkOLT`-g}V)c!>iTqWXu@H!fZJgk%n2BnL2-zBO_H<2iuW z=-ZSU?sX0zl>?Y*h?mX*WO4v=Ie_^bz#{rK$^pDf-@oa5k}muQ^sSNu_=p4enC3S2T;KQRH|Wo9Dt;{tLQsC2S5jSFK_^tIDpF>K(+e(s`@X3=4d=XJszl2fnc&f zL^kYsfKVRb4jv$!2WUzY4i(LKfV+5r7Bu$o0Ihj|cItDo|3J8x2e@B#ci;g!@&FI= z0FgXEC-wd#ykd8j@FWkUb{1lJfFA1eo;*Mt4-n4-(6`=x>izya0DX@f!~?v@1H8-w z4B-KWsn197AkRHV@&KcGfU#uTR((czl?NEF`e}km--9Rd08@B?X*|Gm9w1eHPIhfc zM-suw1ElNH$>ag%@Bs6802<3QEaU+e@c=nIz}q~)VjkdK9w3(oSi%D=Rl|Ou{(r2C z`w0)QoCnC)-TRye_<{#mt={{R2l$F7y;A^dd4K{Q;Cmim6OE@lz)w8DHZ|;a9$*I# z@G}pvlLz=!m+o#}(VusK2XONs+t_71fJpXvd4Mt=;5ZL(k_R}=15~PUy*xk_4{%oX zpW^|}^8gokfXh6<6&|3P2aq=*)3{2uKuiGjO#ru<0B$z{G%^8%n*f^71P}o3G66I< z0kkjyv{dieO#rP`cN-JHy(WMMOaKp>03KHFN0~sjA@ZaNAV$5{L;WW^zP(HUy-fhm zkj-5aKwlF;KNG+J6F{N~;CU0kAQQmLCV-)8ykY7;;T03Wa1%hX31FlNV6+Kfj0xaX zHOvI{f3gW+stMqAUEEaFon``Aln2mUl%vW1n{;A;9V0y zt_fg?31F!S;C(gB2PS|IO#mO60G62mwDa+V*gO#qus0EH%iZ6<*2CV(9#fS*kOzo_Z{Y69480@!N;*lz+j zXaYE-J`+p;%mg5+{!$abQPoYhi#;ZQaudKw6F{X2z-t0HV*>E0VKjYnRVIM5CV+D$ zfQu#o`nGw^1mHIT(45I^2B=4KCwf;iD|4A3GeEEzNVheFm;r8ApNE+N8qqgbGeEc* zpotlvnHivk`dmXxGe9dd$TpJOn*r`K19Z@Zc|dh{QvV+^19Ub6JfaKJ)eP_-Gr(hJ zfEY7CH!}duDtnj#;>-Z?W`JkR0MD8M`kDcrGXo@=0iIXW7^F+h;`uue>zzj1$su^IWdT+KFAl(c!r-6mr^SU0Z?9i~& zfP;~iCD}XQfAa7vo)_Gn|7>V_W^{)qrX6?oTp6@yO1-iw*jsP&n-{ko`03D^urHrp z`{x_x!znYT-@W}n)`>@kG&es!?XI4~>zPB_p056NTim);uXTPjGx^mGJB}niSFiJ~ zes2!l)cB2eA1wdTb@z_ajYGRlo3>}8<-qbj$@j!8?b7A#-%6i8IP1OmAkPTvj*N)T z6MsHFsB-zLi*et+H+|l355Cw-Z0u;i;L$0s_PyWRIic6!iWa+i{d)M#v{7j}j>+%r z*-<+6(V@1LSDN2FH2j5&Q`?WKta^WT(cwoc3Qo{}>~F5e_oN(o$+>sIi{}qLbEHqx z0gIl!zrWj7{QbL|R{b>NK-2yWKbc*0c=_z2!?{0)cNZ7UbLF&LvQnCU_Vv@Jhoz1= zb>+VCd-sY#DUUR3^5vKlZL{BhJNx(4XBQN|kbhsVt*c(zy?xoE=g$=<&;Ep{rQgV4W^h` zSc?(cV8paBKR;RV>S@RJ7rI{_5PR^0b`PB{>+_cL)e)l>&EB8!;M%A6q!#>`oAK$% zDdE3z*G`X2?shzV%u~6ozOK5Oc=umjUOcbwZcYfGCrS#02 z$>l4qHRv~K?1MvQe}3woE5EIsUa!?d3AZ(Vt8Wco8NcXY(A8+b1A*-b;XTU!a4MTbi=iw=wGwfvp^m8F?QhaaxzO{M>< zUwvPCFg&N#k<6mQ%R2vX_4|yDWA`5I^UJ&U3+p|05c2 zVnS}TS>7ka$(fc1GVsIZjeSwON>pmd~Cg4;H@-Y;S^aL!d;9z+7 zYCp{#>&R;&F9o1BE?A~@cLfLAW2^lQNs)+wR@qi}zYwR%R6mf?!5$h7wn`3iUat1j zoXwa<4B7kc^Y=6)RC16oq}p$zg$x4?a{PWFKF+kIPJWR-h{cs0G#^pzr@1VpalMW6 zB);5W+z^T2n8$=zU3^SP!%S13kOcncppb?!+d`}{MImMfm6h_T zuH<0x$Z9|B@4Ydf1pZ4yJ`|Dkadh@_Fm6hh6ouagW7_i_+Fy4uf^0-L}* z$>B{dQ{b9aCcrMcGnQ3x_*!jM-BBHEOH}`QcWl6PP zKHF3qwoizCv_7cZcH?{;ELl?R?^AcXN#g$uP{Z96eWBSt4puF#_AjkF{zSRUXdJW6 zsIQdxvD3$a^@D0Zy%XQaj|BeL8@Qpg0eW$>e^~9G6fj;A|GOa`b&S*ox=I|3`l#AZ z@5~Bsx)UG!g%t9pFizJB97_2{NgS;DxY|$eSrmQ_wavMvm=K#w>sOo{e=Pumx(Aco zt&%ucpI7at_meu}=WwQoKyoL`Kk=wS;-Jl^)&4Pcl=WvrSxI0iUYjZoURqJ@&!~yl zJ*1(_)IG$OY3>t}#Q$iBN1Z9r{8AMM>prXY(>s)o=I&HxwLjj+n;xl?W*QUnsyMK( z(#u76;#+MR)F1B+z_!?6`8!5w6$j4GtNrr(TVTFNKN}!=Ot9&PK!j08KxONCmV-lI zRQu^WOC9MtIa6d^NyurWo#nv%RkdGU84XOE^Y7}E=qNnP!M?An{qnn7;52eLQ(T>N zkSv?eajRYNr=vt?Zr8aj^T_YX2WJzYUaUzmS|DQ>Q@vmpslA-P6x; zFlv3ZKj&}L@C2e;9#=>%H=g5Q-NtG~(cKN>WZ?0O;+;FkLE5H&7mxIobvVyK?B;5} z{B0;E#G1)J8$w+;EhxsF=OAu#wO`gR7l4uQPHZaH=;kCO?eU@Zg&huwD|u3efcOJ-JoG3T8mF>P`WfIf4Vdfz4RWMr-rBesr+^3uV!dh z!)s?MqE-GGp{I}Z(`dwK{3crU^pIb_e}twG#Me5ZW{{)huln;0{(S~|*J#hR2r6mH z2U8lj6nUU^Z=xx3pHJ31s@XlG=S15LQ1g%8r^t)GYy{#r$=^iv`3+Fx+tmCik5QLy zls&pXFu;8yC|q`caCCoqfcr*JxK)>wvL6Gfrj614B{vy=ryBo+A^!RR@ilqM`%5V^ zO{=5lSJvo!HR9yg$}9=vDfG8B~8}ptGC1zOF?2=t|!`xiyutj#xU=d+F;+ zS@$oU9UZf#5{dORN6B7OiL_yb^ne`xh0@`G&MYqcFS&W3b92(yl}NHex^|CH7&;@& z14JyTM4H5r{*BJ>RU!!#>C|ZZVWq5FnC7$7$W21U1Dv3^R>l5t1-Wg?di`HtSIYV} z=p(*QrU7iEx7hltESJt}A&RIj+g*wD{fG36lJ3?0pI=x9ZBzWD50v~8g(n@t zs{h>XO7zbLS??$9Wcg*O!b8$YD(`IBqtHQTlF4sbt;8q2q?F!m>T~*5O#ViypUyXv zKV0?GSz+?qRX?2%CjY&vpUwo6|A{?H`qbu0k8aB^6yDN)D)L9~QT(J6kHW{Q;pu!c z`TOmuMC!ljOf&gkR{eC2nfznb{OFu9`CCs{_(N_=KUGbSwnEXp3^hERJtqG`^*Mc; zCjWBPPv5A?|J@#ifAp;nl%@pc3W2lJtEXs6^5!SQjX2 z!hR*sMD_or{gv{0yjS)svOZG%AGg0!)=NEA{hz(RQa)Fgq5iw}SIT-x7wuQt#XIVM z?*2+y|MExsE0J_Kk?1C!@FCTacK$8Nt>iWCkn%tAkkT$+Q~&FN+TGQF`jzWoRr<@k zgE#hp3Tji3ZC|SA_iTTv;Z;BUsq|r*Kc~{C^xxWfKetag!>IZb+&)E@wCay``()l} z{z$h^?k|j>{da`8(O#r}p7s?I3P*cUUhh@?NoxFB>J<=g^`QQc(s7;+Tz<_)XyIue zYW6|((5FxCy3&uX44l5a7N(=0bXXGXW0dmf)0gK>8o$!yeoD?yKi@Gzlb_~lc&mFk@0_P<<$=azyQug{p6Q(%4h1g1MxVWo=lcA~E$`ve zf#OsBY3DzUFvizz)X-bcP#yz}@#~sz(78!NR0ZmMQKOH>JmMdnp`-wxsQx^){7%Dj zeg69SCuno|o1A~rnM*l8b^aNBEO33$e2k#cOKW~auXf&6o3Cm7)6=J)pVN6!IiZ`J zpW6>B^l0<*y67`PpTGS6VK($|>ibBcn!YBl+WF(U-bd(+tT8VcYKEn=l=h>~pJc=M z{zUUpTC-VG9GKtw`1<*~Mj!EBFLUJoH}iLW`qWP72Bo3N579^OFLm)-AD{Mm%YkX0 zt=2E`PfwrrzEdav4A7@fb4ZF$(By~Yf#{~Q$#kFkYvN~;D*v?Sf%3l@`mZa$I{($m zKb+o^13*t7^?wwe^3&P}?Li~H(D`SIzMSmJQGZ?@IK3NDn}eLb`hASz)7*pfHd1}r z531v-0s80kNFQGdn&2qKBu6RcIZAP&qZFNvQp|Cb);uQ=75jRYqVwT0OlVhzg;8Z_ zd#ntdPnOB^WNivX;qv|_oYwlNjwb$1IJKJPI*p$9fWP}uUh+% zbx07dD-1!uTK3P-(-$y(YSeld{r?Zgdcw8-g5-hDH`KtYoQKlVCy9~gJsPYa>&eyTXXGcnvQRVMb7@3OQuq50+hj;nh-HbP&1xgDwf1N@=BpQ!R*<2OKC z&x%&VYw}*GmRFxX>4T;65r1o-=2v*Uw*H9U8h@$&NRM+}xY_iRJpX(8WKV%tj<(do zDDOspwz5Z}hJW)wkr$O;wpPlSJE)njXaaq6(3fAPPd(FD14I8s{MYwi^ql&y8u_yt z=xt!2mnJ+qP5$ z1+R>!nxFKK>z~v20eyUG4tl>4`tlRsXnd33161Ux?9k{pLLZ;pG~QARDLtXIXF5Yd z>1lo=jQlY|pFXu8Dh%;K1D#o;y(rpvK>aWE_nO}b%8&S=>Fm;{Pvw`-!0F;sdPM&} zrDs1_i4>r-?)B2?O#h@)3K)2kLEWb z@68H~%&9=zybAO!uE2e{6&UHPz=@w%VDuLi811aM?mf>4efh|(uRDS^|I^BAgg!pO z7@yWd^zDuOa{r}*nxFoCgZz5=rzsc7e+{gP{5va@_DA(gYrX?VdjpnJn-6H=Z$xbg zi2pU~?`rzm`!)HAmgVaD38hE0YW$?v0-G`v9Pu8Zc&TG{d zcdftF)@L-o5tQfH!OFSj8S4KW_5UsP|0DJPOZ9*KVCBsD{=tguOhi>LU-s>?oklv> zt=G$!P!cBB9hF*UOi+N6}?K-{?qJLDxU7*ULA39mC6h{{%YMc(b7O_l9YeSW54qWj@sE zFDeNbEPv5xIN~H08H^rszG^#E? zq9x&&4?j$;M4BHLW>q46N1(A-9xsmiWW9cWrB-5fW%CP3fBJCZpFUZiAAK)a6EDbm z{_?UaG4F^^*8fLo+W+*S{C@C9B_@eJtfu@+eOQrNS)*r==D!4@2}Yw3IUpFJ~B0&M>N+p`)B(VmZU)a)v483|-|6bITd# zmoqFVXINCu&|S{ZQ_c{}8Cp&-3_rmz;snE}6AT?E7$%-zn0$g^$_a+96AW`tFw8%} zu;2v4q7w|=Cm4E8FvJrKEhia%1rx+%mVwiG@q3aaG+*1tmPcbYw z#jxlUL-#3$o>L6*6hq5thT*3fMx16Cb(*2$G{eNx43keYOgYWab(&%BX@>cy85W#o zSah19`!qw(X@+>3p{0Uhcm>0V3WiY?3>_5=6Dt@dS1?SeVCbq~m|MXxzk*>w1;e5W zhVBZ6o(hIo!O&94FuamsL?y$hN`{U~hKZF7lPejfR5El`GR&=Hm|w}Tpps!xB|~>5 zLr*0`tYm2MG7R@JjPNpy@-lRI876ueCVLsCcp19940F8<^SulUybO!H4BcLa9xp@m zGPImw7=DIf#2JQBXBaxpFibqdF!>C_lrs!nXBg(5VVHl0VZj-OMQ0eg&oK0yVTflK zT6_${eGDUf45NGu9X^JMK8DFYhABRVE+4~OAH#ef!vY_}A|FGykDmSOH$hWTe17Mx{Rbe5s}EJM#(hIp2th&85W&q=swTTbDkldXJ|o&;m9xo8Ac&P2Qo}VhRMh< z1sS@KVJJUZVZ;T7Q5P6GE-*~Iz%cm&!;}jQT^AVU zUSODifnmV~hD8?`x-T&FTwsV77+Nke48O=Q;v&PSiwqqX875w2n0%38%0-5*iwtuw zGR(iou;3!YqKgdO7a4jkGQ^7vEteREUt$<>iDA?whK@@N6E87LzQi!)5<}M|hPjs* z=3io1aEW2jC5G-x3_X_^;w6Tb%M8OWGmN;*FzPZx$7P0zml-BsW|(rBq3bfk+{+B} zFEcE-%&_P(L-%Edp34mJGDFK1hT&HjMqFVSb%mkh3d6)J43n=gOu53)b%kN>6^8j& z7#3V%SagM<`wBzP6^3|)p{1H(cs0X_YKBqO3?0=B6RQ~}S2IkhX6UMBm|M*-znWn| zHN&E6hVE*Ho@$0z&Cqg{Vfa;s5my;TU1jLF$}sUN!{n}U1gYim0|u>h6Ps{ z7F}iNzRJ*Zl_6ebXt~BP{2IfEYYd~VF?3vGn0Sq0@->Dj*BH94G0eTjF#j6Ef@=(m zt}%39W9YfY5U(+`_!)-#8AkXSM)?^!{0tNQ43qr~Q~V5FeulYzhWUPm1%8G_eui#8 zLyw;!`f2fL7cqht zF^U(_!Hby4i(7BRvsVw71#hgrl# zvxv!N5mU?}y38Wxnnlbvi&$V5vB)f<+bp8TEFzjkwA2$Zyq<^=^+b%SC!(XCh>7(? zOs*$lN<9%>^+e3ACt`j*5ew>xSX56$cRdk3^+d#aB3djWhFe68u!tCC5z%20G0`Go zvPHxci-<0Zh`AOK^DQD4SVSzci0HP6=&^{177;D=MGUVmVnlrrqw0(3s4rq-eG!xE zixBLts;7?BBE79O9K(Z8;BUuK*Xp9B03s~nAkwX?q6_;&6613Gu)JGJ*;)Vb4i?gy9GhIv%y&eFN3t*Q;PL>Kqf zPiyc0q;sFuxf55^hMA~ye?ogeRczC_U)P11r*mJ?g}MEk+PL@V+#7Y_@Bgee%#%8I zyw3fW&i#qby<6ul*150g+#&h3=?~Sp$LrkFbZ(c<{kG1Xr*nUybFbC8x9Hrz>f9wd z_i3H`qR!2&tfkYYbKk9VKcsVa)42!g+~alb44u1+j{n_t?j^b~y}qrbp_NXCD|KO- z>13>*&Yi4tfALNwl8!k&NS{$F(yw6y=vxnw_&E?f1lx$7AE!jGY?`7wkh$B@EPT7`>_W74AI zn6v0O+7}(KX>%Hm-tNUyw|lX^&5I#6FE+M$(QfnN!UkTv&*sIaY+g*Td2weWFAleP zG1cb9`8F>uv3YT&&5Il8nazuT*u2PWUc6-UVo<0TC7Ty_eN~CgLcM4Y_2RvuUhER; z#S39xj1KkUcyj> zUd;Qd5-UT!crMh77el>h4)bDAm={CCyx2U!YyjU9M#j{~vtPb;Ha3e1^YvjeYjl6a4iNA$g zxP@D|g-#bI(D9w_ zqsuq#J^0}Lle~%dKlkUi&BmGjtUU5u{)Q$ymu{Gx`bMeU*1Fl76^rhO$S>HsXzh}7 z1=EXr#|+Oa_-e)D`>Ss6HDOopy`O#12hKF^8z=of zbw?bL7UtL6Zw~#v&(gaen15jVhOf+i{=27yPj>E##yi8qUNo(L*%2?t3KQI?t+inj=wVa*lF)b>w>3Wc>lL+NnH<@u6^pq=?`aBEe<}p_RCH0uNiXR zozH)>u~EWh_viiI-*b=6y`cDFyTQX(eRj{nv5mvO>K8Su!`@4mPJF|!YV0g}cV!2A zY0~Wb5*8($UbwsYYnC5Uvhz2ThC8P{W4WoI|O zxP`kE-fT+o(4WqSc|JQ-R=Do2N1l(~{NcDII~V5#W#`|%rf_njO=+hNS6DC2`D{*~ z#rOPpSEtXapMUbJpbdxLY6fR#Od7UsZo;WKKhOLtwM9m&H&?b_(`)KV%hq+zKJo40 zxuGMso@{t=Zr^_UEx$e6k3TxTeeKfJ{S!7!8xsFSSX%FC2k!0qOLEp8 zenaIi1O7PrYjC4Q!JF!TUH|*llOD2-y`yr%=4m5*>lQ`4*Qi5!_xewOuLPaXz=hIE zACeuw6TRSqydQw}jFDYH+H>ahq0{Tb>0V`xc%avZNvd1JD6bDEdVOg3`mnv%hfQ_Q zmw0`c=k?(#uMe|z_j6Qtq}PYhULSV#`Y=xST#ubz9~OFjxZdl-HENhcb%Zry-%W=5 zUy0Ctu(9|k=_e;Wy>z~u&eBRH7mbP64ySBuro>NOX{F%JwP=pj+^M=X>|-T( zh?QVAE5RJHsi}W1mY`KEL7P~DKHdF`s(T45!BwmT^H>S4(LL8AQY^vtVhP&C5^O3e z^%$-G{}a02WVrto>sbkQb_xh51gx)H1+8wZ@R8(m-yLJ+Jy$yb;3?HcOI*5uaTx+O z%u-~)D4%2p)lPNc6mVa83BsC^fbu!8v4qu)u9weiq%dBGQU5|dt+|3MpCk|D)+G}V zWIv^02e|HATtiicYUT5K@zcrabq_Rooj7jzm3qSj~CF_M3GflZfTEv z6Q%6t2?9=;AmF$O3eE8o1RS8cHM}%Iz~K`FY&=20<`V>LsC&L}f`E%B2>9Uy0n>E% zvs8DR2?BPWAYg|H0zR&LuE**L0^R>?teurl_OHXyvImh@2*L1waQ15 zS6}#8d0!`e7o{_U)a}J}5^$7yQ6!_h4(lr5PD&$Ez`rI62uVUfd9^l?aCP|g@;b;M zudDuryk2}rk=L6=#gmF19I}0^VWV1hRbFevPm|M{8!Bq$^c6)+_Z4Gl6A7#D7BHuo zB+DkrDFshxrpjka0jIPSa9m4OK3fVnKy_<)silC!TMF2?rGU*_3fNHhd|^ug7q=Af z!F#H#?lvt2?A%ho4lM-x`qZk*ms z!kr%%V`K|SmQ9jVO5fL9`7iyr7!#HiW85-@f9;nQW2EZV&~;fcMlUNy-^ayx@#A7V z@v#z?Flt#bPFz-u)0Y+FKwZ2f&AqG`ZOe+$x~v$RYWEDtURI1w!?Ps@e_hDA$#DNG z?8}O=^FB8^pZ^oO`y+&FHF8{>8H z2B_|e&2FsT?8bAO-DuW5*JI%pH)d^dW7-xsPEo^rSVveR7T;vJ{}qji2TnKU%y(mb zS$mm+g(@FOKJ%K6mGumf?kf85PJQU8bT>{>lwBjy7eeFo8+V8^$WmUKFh?}b!OlmJ1ElbqXsGQZQ# zk~G)WDhBczG`=GYVxz&?x|_ApVs4db4s7B(M+R}W&1*Vz%~@<)9NOu-%x)RaIs2uz zZW@%wXLoXL-TiVy`)Jc>hs91b|Zj z;8p!q0C1Mh>!^NeNF=b@ew#}GaD{A!(*7LU%R;=Nv&9_9y6*_2Gmpj%I)6?e9d!iK zO-K6Z2&DIp^bdxSzBu*X9UMTo>b{c$Ae#j(NMD?Kk6_oi3ACT64F}Mc18Aq(izK^h z9XNmoIDn37c-oKDg#%e19obTQOuhd&2k;~Z@RaJOJxBzys}`%e^|saG)q7-HO|z@^ zoO+M!t39vUSR?yt8eZlAhH(HRxLTWPgi&gk(K`ETvd(z`n5;e{TWcvCz%&kEhH7t( zkfz#Qo5d+-6X|>-*<8!w0OqK+*XF7A*A}R0?X@g2XEgn}=}$$|9^RC2`IAd`)O+k| z{OTV|+cx{T<@9Om8)fZUx_sF4$48wXz5CqC7k(1JKF7<6#x37r*og~aqw{Ho$qA?KYwZc+L5grNI#BWpZ1k!@uGeWi|Vyb zIQr4{%Yzwo)B-p z^zmz-d{p)Q=#1wRevJ?B^`E^@4V>G$WtZ52j+A@J?n&y#?ze5b`skMtgIL1-(+6iX zN^Up3z}lv;%CzLrTiX+Q9IE=k`B~!fQKybR`cn5#pJ@<&`=sIr2fR1r^j{Yryrr13Hr=D%m zW9seCZCcm(;>xnQ)oZV|sOrBX{kus6`}g|v%+lqb*L(WK#t$ZMy~qt8{!*LAovH2#JTS_ zq&PP1-10vEasS(2eQ3ghyF&lFbk_5nZL#z7j=fvPwZ8hy1LcFh+1D}ku5WI8M2zU% z>)W)kU}z7UGS@Bi&FKSow0MF?r4dj1E zx51o(lI>{?^n9sKu?+dQ>B5u$F5Mwv^2-WkRmgraV50M1tzC|hpHI;BgOqGwC(htrULdu3Ov49ZXcQcwQ-4dqQR@T-~Oc>_aw5r+B~4f5~R+3=?P78>e* ziB4eX`B_8#?KRZTX#+n#(zREL-`0>`V(aVqe^gUwrq;&*-C=FYy4p}5f`R^54C$jG z{Z86OXEpr^27j@keQ9=036#HP%TkNK!oaUj4e@sv`2DV-zMeCLKWd;qm6)c2oFfhV zwHfN$p#>%##MC|w=_MKXx69B!y>4g^s}1=b)6q}-IG|ISLiBAhq}RpJ9v2w=-373R;>3w71-H=(MyC1ioeT{-ff2VP|whwiVgi~yrDcR4bLCdZOo_q zyoU62!R7vTv4Nih4E?*$P~I7a`f9A}e<;5g13!N>@MnZUzWj##BMkXv7{ZU%n5pvn z4_*CJ{?iTe_p_lsCmQG*XGq^qiKrmwOhf;v-;7T3Hr2qd2wnZs^E(XkE8E6WLC=E> z`K>YJcg!$ee635LqHZ_H*E?F`Dt|17_I8_r-*Z)dZwqPIy(q*Q^K*!~cW`Wo&9N<{ zVT^hsfpp{d09c*u_kTeN%eHMCM%z`9{AATIP4}XZhA}^fSYvjCn0p4thcxbPu-B#N zW~uH0U>)iAYa&Xd+8h9lNBV2TVgQ}fZ~)jw`u+6IS4ZB_d{KbBV`T$6#>{2gccjZC z%>i&?q~E`icq*4kwks81V~@)bGSL(s$ox>xV2Z!d0Wffk-%sz80qy=W3md4nSguVf?AOlH6 zV^U9m#;^MQvOVHjn?!osSxKgofyx*gOy_9wdIGGN;P($!X}sPJp`CYx*t+XPMXs*{ zJpuMj@cYSLt}ai#owG>(xd24R2J?9VZ>zeO;sBaX_WS7_zK(RG`7;3$=oT#NG#W?o zr}+K5)w0ysEVT0jb=KNs`&6V0?ZY^L^;7(Q`K9Cr+fsJEXVCS9C%bSI??4=YZ;Ib9 z>kGUgUL-%tU@MJ`vr#wN@M(a!seZq#e@V72)hERMLWq^bfpk)Kcp6~fRKI`n4fM~} zk?#n0=zJsxbnbD~(*Pe%_4}vZ5O0}a(V{2*L_cXw{seZq#KV5G}%sy6^PftTW3f~&`0%)4z_ov)I<9HoaJ%UFn zBz7+fG0QR@+Y2Bm#qS?NbEn#NTq|$=Lh?BNNI=1$J}0XefOD4Luf3Yl5V52ez=yN^ ze$p+Y)Wrz7QPT8cT`zz&v;6)TdKMcJnHFM}bsz2S1#n`P-|trAsP_HzZ7q`TACL^{ zIgR~P&)}gqS~?_pJNE`inqAvR(!IFe059q85uGpf1{gTo@0X_-u_5*(m0weO15BLl z_rF1%Odx)dJ-v4W(kb(MU2lNGOuv6YP5ZvV9$%8_t3Z89k6@DHbG-p{Ae*co1w0e+T#2CdcqMh$$NK0$$7vljM zz8Sc!Q@`Ex8Gz<*`u((qYAmN}gEo>M8=#I@6Wwn7HiuCjZLoyh#wOy zpWj~c3_$!Mzd!kgI^z534S!PKvi%u=oJD?rMGX&PuH(TVLx0yTxUb<(Y%q=U4W9+* zn&bDA?k*~`+_y|pEd=+VF2mY$TZp+waIXOOYM<7+)G>7Uvj90ce*fyad6{5p5lCKR z<#B$+vjFh6-~V{cJmChroe8E_0>yX8_EwKk{KbAh$^P~7K3vaAW&YC#pz&hAUwiE& zxogu0z_wVG6;(fQ*FFFp7W@6(>4sX)_&xxm7W@78)wIjr*U!;tJ~JQ?ok}?u_5m39 zp5Om+P5c|mInne~p!nT_X^yzN55V;I{eFQ6GPF%qW~2FU1IU~sIQGWwPvM6>0l@r$ z-~X^uOnIE_oB$B{f!|N{HGv`Xp8RDut8JUS}_WaM=>%lbE+69T7ads8V#U8tpA={Jn&hbAfdQA+Db9~MbSIywn? z)m1m}N1r~q>q@_HVjcAB2&aC{7(cI@Lf_8+oADt*iNCv!`1>BJ!st#_nDkH;0$nOW z_Ed#lJ$*DcCi-+sCy>`&9dBL>Tt44>wP{8N2&1omn#<^xX%wjXb@I{zr>_y1r_!tW zK?|=IpfEt*1bzObhufIHrau;Ds`+dBz_s*^Q1eSt!|T&0{XWD$-BOw?-=t3?X;R?w z6`rWV8Xd3!!szQKko;)!T^JxPVPAP|{cNYcfS@HhIWSFn=*t&~e_H(&PFK<*eZw^8 zNebB4)aIR}=B-bk)&-39qouFuCm}!aQ|rq}Rs-2R)1VcVKy&iC(vQBZwtcIr&snv{ zLFvo$(>kC}KahNr{%%^Tw5$Ck>7%9hBTauQEjch>#Bcyipp=RvbRY~pXy&;cd8S$IS^@@eKbvDfk}TEQx>_E6`=oYUXZtjuwscB9q+gz3SI_xS zdnX=|-d;mg6}2h+FZ{_<%V&h1KT`tmN9*6U`XnNVBCY?R@=&|gmxuVHm51V!-g~>+ zzZp?mI>j!Ev3@8&YX8w1{Ra7>{7JrQ>cgt&7uV<|-sGPv`wKkum^2+^*uDsN*>-!sePb$^sqyGRsebi4F=kFT7HF}(!S?2G} zx9?g696we2mD+s4n4eKTjnLCi?WZpOYV>RAYxPI`B)atcr1dX7KV_SHb?{R!zp{Ox z8wr&A@4CuI`IEd3*XG|=MP4;}sr=OMYS8A#HQ^1Q;q|cyWuLV}{eMpVPg4KKssGc} z|7`XDoe0G)!B-Iq%?n>p&QF_*Ir&T{?KjukC0PF~FV7i?M%gYwD@i^pIO-`$wo8y5 zA<1?LzHMi)OW;)IZgzDnqwn?fxqRFtNw!On_NpYGk@cCcw@c8qmtvQIww{q)g7|pF zE&(k^`uzS0%|}YIU4s4wp8Oq1kH03%WSf9&L#7Qb!K6pZWZMIz^Iv}NdD(Pf`=qn7 z9Rf;EvnfFJL~}>2e<3@b(O)QQ4m4)b9(?)C|L7SPie^aYo*|)UhJ-jnLQATI;i(cv zq)Hf-Dxo7)!o*YwlT#&3NtMu*Dq(J_g!!ow7Nkm8lq#V+RYFgygqSL!B~8NcGzlZp zB#cUv(2*u#Vw!}>X%eQSN$5(GFgH!Y{4@y*(j+WOlhB5=P9F zFlwfRj+qiB&Xh2Dri3XoC3MY{Fn6Ye`7e=ObOjHCG^ac5NAqgnI&QPED0lK zNfPk|CihL&Dq)3G*`~EXa_sC__SbhJ>CB2{A)LOQwY3nG!~1N*I+X zp(9hm#7qg3GbK#Pl+cwaVQ!{``I!uFv2BaluJT~ zOTt8#gvl-mQ(O|dToUHGB+Pe7Sm2Vd$R(lMC85V9A-W{A%#|>Fu7nYDC5)OYp<}Lu ziE|}Po-1L>TnSxsCCr^GVg6hR3+75#G*?3RTnRmMCB(TBTCyb!&z3METf(Sp2_4xI zCT2^RoGoEWwuG*133Ib0%+HpvAX~zsYzf`j5_+;F#B2#I^CS$PCt<`q38Uso=$I#A z;yekH=Si3{PeRu`33KO3m_JX#f_V}a&6ChQPeRW;32~l;miZEf&zCS_zJyWpC3MV} zFmb+w$@3*lnJ=MhzJ$5+CCr~MVZnR}i{?w{o-d(izJxem=_5Gcc1NR zC!cvCke@DI4Yytwj!qKM_pH^rdqKd}*ml+81_KA{)lN{m*AO_>USMq=gne0OYtE=1 z$U0kN|MXAQ&GX>oxoDnKCyg{;AZG*J$V>OgPEU~T9??nRIQ1UULH8&euM0=p;Ap%J z)!n15TZQtzs~bkw|5wpFK6&ky|9l-f&|a9+tX;#+o{8*Uf6 zm){)nVAs+moqE}yo3*IRsMEjQbE4DN>HYpM_PzrsiY7|9XUT{p5fRgh2pB*>M2w&W zF{2`8$q0&oBopc?Q2|{Hm=zN$prQf>3=0BcMxtQC0HTry-Y!e}t2f9x;^%jDS66rU z`?k7fI=s-Y!_M@)*L|hec%x|6&JQbk#Xq;JdcCUOX-}2Pb6PW+=!3@B_|LOjwQ*4T znF{5bx6((51(mdClxly#B9%Hv}9zS<(lto0v(wrMwe&_XXn&p_F6{pt4 znXTKCymVFX83%Oh%P&=bG1PNkJCHpu{o-u>^C_ILeU+S}7o%p+Wfy(TEuWdMzjhN` z@H_1jr!nth>cQg=3O!bTyt-w{1!Rz^z0syac_FL#v8>`V$w9Uw5}uA5*#v0k-!5I-IIn2Qv$*5KWJ|7QbUtm$ z9qohK7!0`-;9_hTJk3 zt@fxaUt4w4vOUjACI{qIkNj|^)LZ(hdDUS5gKo9l_a&DeUE4DEjm!AgBd)Kr->9-E ztHJ!9x#XRxGak{krWw)`q|f`xy;YMQd$eKN$o|R(rkm#%Jqwz0&|AX)>%DZ%1s_K? zTUCVQc)@ESH<^q z=NfKRdVaH^W~)TB{HWHqZe<&pk!Lhjtzm}lh!dv{MZd^T>G0Tg(NC!tLu*8{_@RBH zEDl^MR}38&R$F~zbe^uCN5@dxB|SFMRkL$Ge>1=Hs<+a0ug?K_X46cn63WIS`naK&Zx7Jx_x^##_6s{rBn;S62WEbMQ@!%k_dOGPhAt3W())?bo;u@@ z#Qq^`-(^Y7;eI%s(5sh@)fg{YooiIbCH1#;L$;iaeS7-Jd2XoNgVFH@DhcWBvy6_% zpO+n+bnE`san)l!EU{u#*j&?E>=~`?nz+eO_wm+*0fn5z4YUCdWG%1ue_tB#_<8Au z$d|{j`FL<{%GxyT+OdAm81KDH2K%?#g);|l_kK>BF&Kz^ZGA+{>EzKl1$=F@YUuagLX;0yT0vw>aN?8-!F_^zjb=b)iu^C zMWF|DmULXbU3gb>qP}0zo)s-El^NBq*!cbBS0*DyY&O(A^VVI~ zWKb`6Zd~2M8?HsF>k?A3xUE$$PTzBv)W4HA&%;&!mPEm^$pr(P+a?_k51XJ8)YEn4 z_#1Hpwg${@^}n;KQp_`T*l?$lK{_cCZw;+4J^ZlwHjQqUn{08^`gps#vGvrBvf&3l z>%L5R?0Tsm>&E0gsLTnMZ9)$c=YFNGW6-UwiDpO29gc{JWyEJsBh^dNTDVJX7T?iGJD3x1 zuDGk>`uKJ2?$c=XEY|A2Mi7P-(#KUXyQyTD!8DnI}8n&Ck4?xo$z3<^%EM zqQoE@IYn>JI%$uT9;Z}#8!O%_vaT$gn3+3t*OuhPRp~0#zSka=gzhlQ3LE6(d2d+% z#N&!b`)9eIy{dmrv$)ls9;7ky`zE8|OFzfgf3KUXroybhnQ?JFxRpN8%{r8 z`lPvfS7g7Gy4mfr8qI!1y1V<`8@^cV*o2RICzq$nNyWc?er3#S_pz5;3lyv~RKKmO zEt(cO``qN~GY(E2$7%sTtfZBef&CN>SX zuD%dI+)msQFSq>k@!A4s_EeMT^dZU%B7=_vURvtX`w67?5op>xX+ySDEpfF1*=mo#g-@L-@3IjT5sX1lDKBgzD`kA z!P55fghWpBYcad2Q|207p8cqd&9wM7WY6;se{q9Zm8rcF=G4|W?OdNwv1`QE8%bjhyx6hS zIEYdVDX%zZ^_(=bueVQB9+pv8 zc+)Uiyl!Qvl)pon>-;cjtC;kD3r;?b9veK>cINrMhLco+c8;}+xH%<>olzn-+%n$z z!q)FI2g@yg?rO7e@3u?QrH)<=`%DMvTW#-Sclgp5xoh_;t{k=sPMo;ubAkIEt+dAb z???QOvS?niJ+V?X1-qa`TqJ+RiO)9%IjQ#+me*wB%*WiokU&tE|Y-#07e3 zx1XM0d^-J_<58~OjZk%6Z3X$b<7!F|wSy}judtl$C{K^Q^Ks!MH~Z$2mZw~oR!+p_ zf`Oa+_3iNZG9t%yzC`1s3&q>Cdg>U=346AhSiUr>uf;smq($tNU*GD4G=DEn(Cqub zx-2W?a+QWho4Z8wGcBL>M*pMvCy7nq1Y02aI@Jo=?fclt!LV4uK2Vh+U3N$ z@WocQXZqM0#2w0f?i0OXpV_08`Vw{#y91M6Rh@WWKzf?)7EC_te{R0G-o_FsAa3t!ku!LoKW&Yd!-&_@a_t(oJwTR~!zO)69ISMu zW@!D*(%rG>jePFiV<)HdD9EZm)l5vC+Hc7nX}wXk13p&w$9i?s3MJ*TajY_GuHFf^*wV z{YS5i}Js4LU!COlA6*IyO4 z_w8JjY@Z}u{}pN(LpG<{OBA$9MUT92c+UE$IXa913Nh=n#vdYb+j7cm@BhyKUvVve zoz-R(UOmD0zxV%NUN6QA_<0#GIN@h!GqxBqlM?3z{ecL{4Hc{%3;h3?^5Td&kRMF& z8rOf&|KFA&hJ?XL9`OQ}6o-G~|1T;ZOAYY?#>KMZD_+yY>o(Z`|7@XwuG0r~gNmrT zw(SRQ1n+vZC)yFOMH2jPsXW&h0x3$(AMik$h8X<`v`$}Ayie(a{Si{^880qIr!$loNOpTJlC%*=G;t+ygyMEYVAnEP z@u9Qirs&NIc^oHBh#$jhJVirO7_v&$;!HEf6fBD)u^)z(i2pr?VFdc&hmU>mM-d1a5D1MH;1~-XZtd$)noi^>g-tQlkcCZ}V@6TFKWa>I^aEn$q4@?{1 zYIRbVHcXanYZ@{7%t8MkMfc$z(#sEhq?N57Us7AVcyF**h5hH1eTq#kruQe;hB_Zv z`RKi-#m4Q1;{rzLiPsL3Pz@P=At-u3&1!m^*t6@Wy$_q)hff`{2g!|_^&oF<`u$nv z28D4$`p)q4whY(S%k7=eC*i>iq9w_wY_zsXk;75d*Y6gLNjdz*Q(0lZ%iyi=rVKv5 za>d3b^>fcV=D+;1{H%^i(13L>tg=&r&4^uJn>{C0POpk#7wp zK9hnUikS!i-_EAgXCXzOBI5DN zqR#?KoS?{GMe#jPr?k&IN_)JZK{X? zU!IV;Kp$n4`dCo-U8R)w7U`f^)E$)mFqoq6A(Z}^L6JwD62C$5y=|w^`%I~yJf*!3 zQTpRLN_{#g^s6ZKdrj$Ix)gmoQ1lf+(SH%8K5WW(x=+zpA*KC|DfCuS>N}ZIzoQiS zK2h*TQ}BCI>Mudb7o*^p;t!4j!0nwxDSwip-!T;Z@D8#U!KeD-Z=#e}qw0gAzkQVY zs!`-!PH8_mN<5ZA|DaGf!FYH>nQuHP|6h@m`kPVm{VDmul<}`Y9Y2)*J%*Bhlp=o& zWquLvktLMhilQG+%6y_jnSahu^xr|DpG=8Aqx6R~ivGV*=8`qOqwK8q4Bpv?DpzcL|U*8M5tqf(?k z*j3-WhmE|7)i194JllywjtEU0)!8`#6BPR9dGLL%u$pcBD_K{f_&5+A=IYJxpJX1%UH$pdVs`R|Wve>+Fma z3WxVO$^a2mC5>z#$JHE)Rf}2f)b#puYrA$O5o^2@v!WAnql=)0Y5EF9CG&0c`RCqVfS! z@&W4e0n`crYzqK36ab_Y0K6#xpcevI7Xm~T0wfm#)E5G%6ag$Q0$>yYWEBBa6#>wT z0j!GwMrHvpiUE>}0rH9gPzk`u5&(x1fRGY^nyLS1MJ8GSpFIy?lnN}YXHSJ z048q$7;gYBya9;I0;qoja5oD;|1E&eTL9);fU+zAb{0UdYykaifV{T=bFu-N-U6t- z1F(1p;QkIE=^a4fI{>$A0L}LRi{AqTy$48o50LjBK)M`2ryRhg93Y|`Ag>&tz8qlW z2LPK70LMN6us#5wj{uq<0k&rYEdL0Q{1Kq=Bf#-&0JTp5i$4JbeF8}N1W@=1;8r$( z%4dK=T>djaV>ZB{&j1QJ0J)z5q$>bMRsi@^0PL>-$g2S0Q~*q@1Xx}Ppqm3QGY255 z5+Jz}puQ47?F+#2F90E509aoDs=ol}R{_{o0Yp^++^hmv0jT;0pz|HT_B%kxcYvht0MgX}`qco-s{taa0q#@-R8<2g z)&NYb0dT1S2&n-$TLbX42B3c}fORcER4u@rS^!iBFtQH7p$;IV4j{J4?u4KuxJ1{)BwP005ECueh`R2O(J*|;%uHj&@3@F@Lp%J;U@kTCdN<4evW(yNBt$) z@Lf>;-{Y-87Lr|Z3h|bTvH8nQ0)ENjY@UrhZ?kY7j6?4K0q2f$XR5x-``TdHw z8YTY=ykF%EL4_i63ftk&`kaI~-QZE>{FUDrv{I}~pF)0AykF~QiPWUJ@PzFklvCJW zy6}Wxfy|_S-|oN1b3>cOe#OJjEV!k9kGBfBcO$2;enPxo^>PA5b%Xck@h}=CcY{ae z*QFO>KRb;IyV1*^`57WkH+X;MXNLMq|Ef#A{3+}&z0iej+V9VJogGg__zBzL_jtlZU|G~d{MYvTJ)Tg` z-e{Nzp0IvW;%uJHycsg#`IU9mPYBA$O8nRU`DeV24rdX5!utIlPq?TogSP*N@Py!k z>bucrSO28ePq@hJgj8gH)#vZ!6yk{?lWy?3`04Qc2fF&T5Kj^w4 z|9d=wRVUtsCnv!luT;Hs)lUdC)>9FFLcFf_!!xMpco%{gtGXM!KaW3gmWu4Ja{hT< zl3Rtn*kmcwPT1{Q2xxJgH7I5jlnY zsQUaBPqOo7H~gsoo4?}GI$gTq*HypY{cnnQMs$PMRlnci{R(+|n?bnFfIpS$Cjsv` z6J{a+J_duavl;wHBc!;u8StlShx5(AGg&y;%zKxuXEp==q#Kvm475&!=*(uoCLOHZ z{B;Y(!_7Q8_2GOzc)fu~?<$`j;}V}9J(^E1Ih>F0bN}aciQfUH&-=uCnJ+i}5?^lp z;}m{7`TXKC`TQJMe13?qeFD_f`TGQ1SkB)kAZ3skZ=V2cmoB#tQ(5fN9xP}C)8WQYkNN}qmA+Uyouo@C#Yeqw}qBLV72kgO*`wVnj6dJ>H5NwBIX!LFVJw|Wu+>q!W!Cn2_;g!p>5aLYak)8frPLI5@H)jh;JYv zt$~D`1`>)JNT_Te0UAh%T>&}t^ZxS0g2W)ke0NpNc>A+VW*ux1isn@NaoCLyhvgq&s) ziknHOY$gGkNst5*RDlF7Ai)?&umTe7fCM)nArMFi0}^6^gm@q!4M@lV5{iL@N+1D% z1W7gts%#Rp*d!RUNw8v*V8z4heP~65Kc>1ae3S{>{0Yat=9g@mvc5@K6Oh;Jbwt%Zb~77~hENT_Tf0a{3q`GVkZdDCwT%R= zHWG~6NU&-n!LE%2w>A<2+eip&BO$hpg!ncR(%MMKX(OSyjfBcJ5}=I)$@Z@AnIl*P zF^WYHvMhp-VG%?x7C{VQ5rj62AXHccA9J1tQQmL=Yy3Al4v)Sd9o2fd~|i2&9S#q8B0vH$)(D7J=kh1d?D8NP$Hl zF&2S(vIs3|?^o)`}F#Tey+l=a0++*7xyii)W?(9vI zxAEo}Y1^bB+C^qNeg>e8xcaqfrt}{8-py!M+avi4Dl0J8a1T3$)+pf|4uD|5H?Bh$n+@%vrw7ZkXn1zK8 z8rmA7w_L5+a(bS)2K!v*`v)J#t8MDN@P@yVS;VJ;Vw+np&!n5qDCKCX9Opb4S7Z>? zlCA%F%b7Hb{KH3UE$>{>aq?$Oj_x;n6lbsX`5wWoYch3KJQ{49II>-DcwSV}3)E}$ zpfVX%#h`8H8gIz!y}NN@S>b`PqfVc1jWC?fTzKt>>(TkGX4Vg9ynTFWW1nXsD?bDV z)|IQ-qS=FNzgd0Onft8q%+PT8+|G@|Oy6Ghn&xB;;Ave~))c!r>_mL~Se>ZB%iTvG z|8`Vj?%a2bX9rt{KDFLC=w^AY26^`Bo&Am_ej^UANX;1>cbDxTGiQDBSO0??shn5V z4I6@oCC0tXRJs#UY4F-}-Kc`P6Dj+|iFW#wSx%G9dxxg2dwnAHQ&Zx)egoV6-M<@D z_n&aec0x$h&itB{eF9!au6rK1V*Bvs0^eg4+D9y-~S#~StDy=4T z;jOcG=6y<=G>3S%bwaTBr43?68!|ImSEBg2b>&opp!!djHKzxZI29Niy5U4i8UK8Q=>~e)myKs8 zs2^mOdDMNmHKHYa{mm-^hOr;Q9YY$uQ6f zlu7g1uW}?JWVf7{I)SE4r;D5U9|+M1(Lov-d@sCMWR^Td`gY%7q^wC0NKsO7ZtD(d z8e;Ca5P@8fq9)x|*1=6r+}*+)N$ikkXc8)(k~9lT@p9=11DewIe(KochY$~8DvBeT zlK50Q3d6Es*o@Dv6x{DX2nFMF&JaRjg0u*Pc>Y1y#xoirv>PFW&#&2wk17(BIe^el zK3W*?Iah}T`A6{?c?hB7cuiE0c3N;fBe-HXhu82BLJ0^V-uaQ(mrW!e!)1~9b%anV zLMRO(bPFML8=tj^&xS?_-NR?P3iescz~@&ZgdQSG0r){U7EZ3f3@_$yMZbzJ9GGzI1ft*&g!Rb~m)IoKy|)f2Q`j zSC4BR8;GV-rBK@?hLb0|j=o3e_ZeCCX|G-RE9ctI(2J;lz@ya5*?DhHwlTlQ+FDKw z(92unE7>Egf52DSbDF5tEGC*YYV;a~0Lc{tR%+~*aNOPM6}tIKPV~hIW7i!p{+xJ# z5fC;1oV?WZ8EJ2NzR#=HxRS{VFnU+xweG?Z@z8I9i7AIv0vtx?tGmoUG0b4Gy5+hR z=T=VdJiEK>Cg;n=hE0;5Ziz#sd$&wd*S274m|m@2pFhz;GU9G<^bEJEh5EN0-K^bL zB$Un0xMFf**r4-=)+D%F-zWEfv9WjAB>8fV>k6^BCFXtKdaT&EENXtfnsVIiBUxPVDcGzCO;b95W2f9Dh?3Wp;TI^f0QPR|_ zRnf(no#B6YU|^pynIo5ePCU?j;jCs8cj+t3dQz=`*1_!Kk$-mH`88`7YoBTJ)9G1g zq0>t@=J>_X?TkfFP7QuCX?_3K57*55s1&qTVay!gL*FOQH6k`w&$#j;zN+8uVz=hk zDW3{`Rg2TVteQOVN%D0yNvob7bsTy%lD~#h-vSDMT}u7hDdk0?y#Dlx zBA*w<5A!O8zZix7Qwsm>l>9H0_S{0DCwk5W?%!8M1jOyjq3ENM(w;gLdXAL#T1tsa zQuKd_B3}?Cj{oa~faUR{$oG*Fe@dx;7KL9CrTiRUWvK51;)Y1T23sCI1eE{tSxz;gtIKqww>l$kRlr&u&WjJPLhl z3jREby!jOTBb4?!N15NK`xIQK)ORt3|0jyPX%zYcdLopUOQ7!r-WR6_dM}AkeIep~ z`^E7UJrJtjMxas}Ki@R8xC!yj zdBOCGq!Dt^B@q5-faCZKS=MF(>522>c&{q6MF`Cn(DPD2h^|6I8iMi`JrQC(CV0=` z7$4V*F&pvr@xpO8S%iF+5~!a*zEeFAVnh;Xw}Ad~C4`cP(s=I$xcmtkLglN_4|(F{ z5n_qa&_RJd(xnhG>q{U#Ilg=c2!!J75$}Bh<4=`Eh+#n>e0C|0`}aU7ZwG;}K`M?% z;&>Q=;syK<^h8Mi3xV(}63#c5LdZdkK)!c1KHm(c{m-2j)*mp~{_ zn}#L};u~lPIjrKpAK`qw4;g(SLj45o-z<)h&(N;&+wtJj?V{HtgHZBB0$msI3z9{M zxq?8hl6-z?_`F~yfxHCrvE>lb&mwrwO_<+)IfPgV1j5rKj@$P{$ma=xbbIjQZ*YH_ z*wx-EB@il)Lfg`A z5ON4Y2;011e74BG0e|5y{Dr^p7yiOu`0oQ|8yn2pe!oXRTsRl95ch{KYMdzt6iqqc zFo^?b5(kO|dH7MEnpcLnKkWT5Feh>#ZX)NWG#wh3XY(3o$pK`^0S5~XpqU)dHy4x> zUVj7n0({nV4$!A_fMLx6eQOTTr}6RYtvGN;f(vG@9G-uwrWhB@R`c)8#JHgE!M|ro zaRINn<3QiZ0iT^5Fx$z2*S|^sCdCE(`hj0LaQVDQetD4M*GHHhw~L?NDJU zvjxSkE~WBZz*|4zWsFDiT)@w%_?7mU0QYww*MrNmL&f~B31q?ir4+b4-@ku?0|b}n z4~+Q;x3#jF!T~ge1IcC_s4rsvR97mT5WyF|-ihMdXvF*@enL0+XlfUK=DUC9pV|$+ zDE~j<-~AK*gMa4#m=Nht0_BMEw~_hh`d9uZ@f$?&yK6rr{m=Z{MDV+7zhudO#+MR| zZ{B$7rv5&%|BSCJg5RC|^grltfCzqf^5;p#@a9HSW&XFjS%NFxa}AFdH)Xyp_;zK! zEx6}sfi1W(jb{svzXOWef`>e$oEewF_h)}o$oIdWmCg6df3EzqEqGxxmwz6oIDZbq zOCQ)rz_X6c8~-D}v3a)OW)fYt;6i=0c6NGWS+Onnv0;2$a6G=TEqKBgHqRD3mO3#1 z0r0m~A+W4=L;2)^Y%}*5Fk2T1X8Ih+`_cl6JqNOV4)ta$M*FiB$8*48eGKT=M)1aR zTmlo2&2DhWm16r;v;ckfexMh&fJ2QW+sr)@^73TZ%$@_;`t!xu44D{6wvl1S>H4!- z)e%s?J_gDy{Mq%VnUEYC4QP!d8`W??Um*sPbye6l`y|*d=pWOov+8kgoIeS|y6UHT>Iv^MoW^fTo?@52K|iAR%CRFy&zKx&D?3p`Vw%Pr{SkK#E;n1TX;_gF`fIYBJcW#3db)2GB)jMezTlkUC)g^>|(riseP&9 zc>2nFT2AyWH`k>NO7n?}owRg`XaAdpO3l@CCsvf_lc(<9Y4HsUlBpw@_rGqPe4{b> zOZYv;smm%-FSM7xy5*uac8<-pcbKGJ_hJ9HYm1$7176xa zxgK1z0jg zk=S~2!>VT*V%l|!@851)m0`P~#3?c++MbpYa6~(5UaGp;f!l2%F)^K+kIiT99=L0G zk=_`l>|y0wA9ps(_xY&cbfnT@K*$_1$7>3ijK0pClAe9CCcj*#(cH%)MSQS%L*jtF zv6baLUuwrIELW9wun&+<@EKKO9`x09x5|(;@`~@nsdB>&{Oq+VNa8cU@wY48)o1@-qEq;+?68&)6t9d&{D2F;- zYuBmttkcVAT^+P5E4fCiR|T`MSe)~IG<{*(n|U{f*Hk_tmu87yZ#a|{YMd)KC+b^= z?q>>WJ*p+S^FqSR%P3f7|ki58QWv+vckG8pRck${usVTt; zyZhTYF3HVUr{1!8#mdS@H}6iFIH}loM}VElbKPxctz(R~?IA`+<|X76H~YwnosP|T z!3feWw*BU__niCg-j@$n?Yc&okGT_5nVwcZA=AEj`-i1Vdz4;X{>e?=HQ319ZTd8) z?4TrVE0>s{p3%<|y=6OelI?;AYh)W9le+zUOo@8+og)jaVuExpvGQpu$DHqZUyc!D z9$r1_cs}!>U0?Rpb}`xY$tB~YdyVxvus)(NIdR>KSnVoPwdE&VdU>AD?XPKmwt)5O z+4Ge8wWUmoc_?WZ#QR*nyBsMKw5q;Y|flzb4#;e_WtMZ zm`n;4Pu{v}jn}=ruOa4ERs}8kb_!dH8b9e(_laAUJSVB*tg9S8-D96+%aix`Ukk+fT#$y>%tM%#lm!G-I z->sbgFn90;`k}8!^b|)8(i*#_Lu<3k)OTlm)d=TDN-O3(ZXOgM8+kQF!&;}nm+_I+ zWDt9LBYX}KU;14G-iO63h@Z1aYf>N6vQvj2TCUMut!yM_G?dmtCcW_rwLdU4DEpkj z*JCw{N}h1%d3=)}^l|IB8OH`rxO`!R(xk1gTIS5N)0`@oFlNw$#5c=kX3vQBxHm;2 z`XW<+digXcM2a@cxSr`#ToCdRfw8?*BPbVd5RPff|#cq-f>F z^us5@xBK}gm3qW9Zq(T{Ls4bR$_yHFsJ4vs^qwjgl++gJRP{JaH+MIboATj9*qKP> zM(ycqZ(9tVw;}2I>1u^ArpxZ@P24_JpL(U=MD_-po2$$w9<^z>r(3o)W^A z3#Wei5G&VtnZ4RJE!(3he}iI0Uv6V!{;-9YoGb#*nfL6YsXw-4)V?pB@3dPa-!JPy z`dst$Aj79V9;SNiLB#@<^-G5jlC!&1~E6V7hZmTy5r>R0W?GrU%59ewcCZmSaumvHjCscRnxidT~5^g;Yr@<4E|W zTdDV##}#XB-|g=ApyVrD%-B0UT+g*UeEaw;vSiRJZi-pRd3JTTYMwx3O|qO)4ZnA>^L#n&tUiVMKyWyWPkQH z+oK(W4siA<*wK&4oT?wcd{F(#J}DX#h7p&SPBV~6zqE7Qm$5r`M5A#b0mowHpL`tm zscpst_0rc+pH^NqZX+`$XkB{rs-3%S?I&Nd%GA`Hnb&f95uxLnUJ!HH_VL)O{!04i zr?ou{+xwnzayq?#N9i!_T-`Nm5AGVBGOMF6wT@Wif;F(FefMYR%Tf~ zd3e(DTbZk;JXS6B+Mg=3FY|G(<)u&0VzuAUJLYfR^MYfUy(QAbbHs8-<;-y_e5Sq~ z(81Yq?vdft!S|Yu-U+tO-(?)5m)0yj?7`)DFpS)&@u6~&O34f6z8+o%hR^B?9Pi&Y z{JxjaR!%O>SZF0R!rEtd%=shzU2pdtpA?uoBW0@WA;%-h=7&yO7~D@=H)NuBe%vZO z1J^^FX5LsqcY450PgOcn^^jBl^6QNy^!u5H(i_JQgU=rQ`ZOnA$sQMMWBS=_Rb8~g zYOMen+R16bnwr`9yKkM*5F01G_|7hyFJ~_pNTg;Sj_g+`zqo4h{+_h4sXFU#&$_2m zKg+q^s8{X!Eg-eICo{wQ!?u+{_BQ!Rjvv>xP7xy=IcM(}XoH#V0vl|GiFQwGU-#fd z+HyqP?UOeHp*4Dks;_3PYURDTiZ5A;^!(iY{C)i$osgcFx4*02Dz5-NrvML67hMk* z#EZE*`ne-LmyKS28`tu${=WR2Kv!Qs4{xuZBKE#W&)3xxm*?O3c={tf4=)dYr04It z!5`_ld3bpsJzsAZM}J48=jv|n=IglD)!yC3w=2fSuy^$Jb==6u5Z98wWcD@Ki>=kE{6j?{}|K6^kzx$15<&Yhu0@?8N3FgFR+cq<=&|9 z16~gi0xpZe1a+-tBxoaEXe7G$VtgDd1#2Jp9%K-!=Jo`<=h1J-gs>muM6RTzl{q)$QRps<2vDT%+dUy zC}N9*b%M)!ij>3l^Ejxq3bn!49R^>Ka(EpI2fQvV1R>uIf^t{~<;FB#ki*6d0uZjp z;eCrR7hF!%CSC|adf3)mSgvXdjTe4r|8FyZZ~yOU%-62a{=Yx!_oID<5Fszd3p{fi zf&D*H75fq7)Dcot|JnXuaiG|bfX}MK0qYmbii5B}<7;>J|K(g75{9!h#0x^)e`EhI zDj&kjV7V*T*=i`f4&#>)>KS*_>ozlMD|MM=No;yKM&Y{P=laNA?ElenH}`!RXN z?fdlkz6_cfgyJdIc*2I>VZHwhikmGy#4O~jqWWl=Q@mwAno1l)QBQ^@D`AIC*-UGKaw(HSGeESu!;}AmQ@%ej# zyeSCr#)yTmuwX1=JFIDfG;4&=bdh`vGw_*O2q7DM_8vlLfxuSSPNdvoY=4XpT87Un z6Qr-id#fPC8&5)TLI^n{#PhGl;EL_{13K?r{9v`f(rlH+yplnQ&%jD=HtTC6>p|=0 zMQkfQ4eQ*Q*FMJY(5QcLZ}{#bNu3tkZ1cfN4_R)rO`JY7`()jVdls)|ewEA{l&CUk zG%@9nl;tc|YE|h3Ps7w1`BjfEikIZxPpy*J&!Jc54Q1C@Yn=!kIIH)btgnqYm`&ei z%gp-PI3oM2<7NE;l{mh?G*NTH0s4yLd4m!e2k0vb5Q#ib&lhlL~ZpkWAaT8 zmyYTE_0r%e7PKN4-@M$fjit_Q3B$LppO&BdwXtIU7Gr$9!XWI6a=$j-BuAgd*OJ_? zjm5cN8+&wE=~?W)UR8H{=GKCQhVc)p(=ALC&b7EQJ1fz{)T)9Y<>gAxzBb}8>ek$0 z4=UzOUZGU&V>^@FGp1kZXrVrZpo}L20pO`wxOR>K_oa-kX^EGgLb0VQro>4+I0b;| zQEm15QuvLb(Emh!PT93Lcs5Nj6S z1|P>)Ng~8r$v<-x#}A1i#JWX8CPNWYLh`&bgM1e7=LnpCR1zT@M}+Wq0~~L|?XHJ- zV-&~n`I>mr!1D!;UywjZaX}Y96-jIxh>#)A_Dl|q7ek2gh2Z`7V}84_Eu{m0JY)R9 zSe^<3CF8S3kvuvoj!=1jF`f?&u5TQ+#hZ`NL;*j%w`Sf5{@jW2Ux*{bn1byI`SQ$^ zL?~|s;>{yCUk=k#6XW?EVR}okZQNYG&l1kh#(N>^BHlM091p?mH?ONcZ!tez#GB7> zzNG|0Hgoy@Q8=z7Vq30+8an+kfBUZbHRAe}(~z1ZzkY`$5OSD@5dLt3@v-eD{RR!i z(fIkRvA&FHD2~C8OJm!+3WCQU>t_L`_k}Ys85l2XI0zzs6{10LX zmG=?j^*h{N*ao+L96~(>{9a*O%ufXG{{ZU){|VNQK)kaHF}(l+A%=)PGH3`fJ`gBZ zQ2#LeCoR&y5@-mSedy|+wYY!S@z21;^!CvZiYq60&y|>8xi~^*mIy@&$=k1mnjAkB3T{V0_7=u{4C}uL)!= z#+R3l^>K?puLkqu*9nA@^$|MFvsINtw5_q=NR~`DzsZ ze;&(Ij>nT7Liqyz$liX{T5m6VKYvGGe|vjmKizh=y^E`_>naaFe^+1I+2)?!Uaq!| zPM)s(yzX=Coi{kzyLosydU|YfMfNiS?dJ<9n0q?<`MLU`wT_;i-ph)8$v!Bs#(Y)N&INN)9 z`>y4SDJly_`+c^jx3i_MVPjt315iyhUj_dwT`C`ud9| z3Gi`ce^VWP2~iwpcUR{%_QF?SKYw3*>%7)Sw2YAlTI;%Yt#{y0m`0mCL<%8a*I!ic zpuCXRu$4Vw;$Vm zY2)sb$8?{}>lwm+)g zcpQn=NtkBu=i}(?YQNU;r(6#|XFt)N!B4;~@9yE`@l%KO_jPpsxqEmzdi*rdHmvpW zvG;ZL^A7NJcBRU}%k=Vg`R9yoIj?c`b#nFf_WP-2y&Tu_N%;hLZFKf_akY2#!k4bN ziz_eg;o{|phnb_Fvxf&B9>N4XqhLHEku*V}O~~Hf&)?T2z~@J4evZi|N`hxs!Vh|z zjDAft={`|}o)Fz+Q#Uj{aiWi};W&FE!9@_|6R>ylb#>)S=I8J0>g((6%X|I$3xDA+ z{Dr^p{~?&&<3j!2pY6m&fu7d>tNoY=EN8ZZ4YM7rneAZ0YzKX2J7_Z7p+B=7RG94` z$7~02W;?X)X@}}P?NGj_9bWBehrB)Qkh`ZHSbN$bWluXK?P-Uzd)ndHo_1jFX$Lc0 zc6U3(MYIDwqDzLV!|m|>a68Wi8y#tfIzb%Uf-{bEl@o&S+W^|u&O7%41AS5Z4|{qH z!lfQoXdD0RBD_v1a?c7DNf)_iZ0|}p6S;hgv%ts92!>i4_${oh!>o8j$Hey1HW!rKAeX@^Jnn%)li;q5@b z-45@=+ktVb9V&3So9*x&U(?#5314rtLxJK{xq6 zQ-#;KJf8{tZ36pE;ZN>uot@s;$D>_f&(NI@MTj!r?f`${z&;dPuX1@l6ner+{tLk0 zr-fiv!R6W5E57Cey^Ra34lXe2xxjeA1%1>C*q)#MoD0||!J&Z*anHFxui*mYE{%_fo#z<&mY=~B1+@!JdCX2C|6$G2n#s#w%Tqu7g z#n!Lp)5ZNnX#3B)`|qD2{=#4Q3xDA+{Dr^p7yiOu_zQpGFZ_kS@V^^aY3-0K@{PyE zOV7_+&%i*>SkGXL9?we!xppQFY#+O6@lu4uD~nUCXlO8@iV*T2RdJ?VzCfJ20-45G zhPY37_b$Fye}jOl2Ahj35>0FB6FmDW7f?czK;( zoRYlBBkeu^zRzGC4rD;;8?AIsxx}7kYn5?V z4=P)?#<$P(PWQK;6@Kcu|KuV1)y&P06YZDWx*2S`Nb`9KN6|a1YX}7`Lv?-)d_U18#rk?tHqV~-={;1`WjM6ogQK||oUS!l8mmy4L{5dH;{SH-T&7>i)*hOd>=;3;{D>2Mvf@U5ZMrD+UC`J?_|A8~0st ztF~@IQPHZ!wYJqZT3m2rkyhI(#vQjdweH$Bs8tphEILO~X8xZuNi-18u>cQbtLl322+x#Hy z@ahMfTUE#&lq~HEH$>)T+`K4tn3Om;I5Aynoi*uLpeFXGpPQ^W(LW-!(N9nH#V5Zw zytM5n#ZP`u>o!A~x}?E%pILv6oVcSyj^*6iwnIM8@ADwNQ*bvQYw~47QE~f~XFe=y zI;WSV+3u^R6vH0>zD3`xJ_Oqq4Lp4M=IXOg-Hs3FTm_PS#65n zYS<=eZA8uU(?7f2((l}^WqQRIXU4W3er^A>`8`Zmju&|j=szg?v$hw-C}zE(TU_d) zkB(-9h1KhnQ5?|3ZD`>iH#?{PI^ZYRFg9&X!r_O_mg}?jeN#Q*`;047bd5d_kNq@e z!)eWrtNCT!mTa%}k#$^b%ILAP9yOZz$aipEeeYWvljHi%?AIxw!Tu>V3R1fr^w{kC zQ>UDi?7tpov`gF7S-&8;wW^1$U{&Jc3g_Fz4~|diT%pNqTWBqf_2%`PabL|;)(dQ~ z-s@9#Zl5)pSw4GOd|&N+(7idqmf_>SLsQol4_BYqv@0uO+?SQs*4(>rXZY+MDO$$Jibkzg#Tc&B}pmbR5+m#+EVgv^VjX1`QxA}5gq!a+zM#@PKD-tf!NGkt#PX= z>z2OJLN&P==hgGqlj#FW-uhPgDC_o^n^(J5-jy^U0Vltoa?0!4ish|?@5Xy9`u1$a zE2paru})||>EzqD2JM{Rb>G9^JMLCDs=*7A2c%aBH;oA*gO)nbUHvYF}gPYyS z`uvBWSwS_vn|=4pF!#58Q){2BW&Sx*v$gu-VTv02GTt1swehvl1!3B@ia`m7hjjVy zv#r-|gl`}BG_gxN41asq%ppP*_qKi~H>_M$t9GBB2ggj;t3U43sNl5i)WjQK`|cgD zU31qh`CZZrz~%`L7lrPA2+V4avw;9V*Vah?v$~894M@i(&;Qp{8~+o%#w7OnnvYW- z%vG;3TLChWt#b;eH3B-8)@y9$0W#5=g%eJd5m&v&Sw0}sPcCasqzXesdX3I?3R<%u zqPUbFh0~EhdW~fJiLTMw1rh01xt5PWdQzloMto;AcA~Wr=Sl_f(;5lsArc?yKhE&C z6RoijAJwgsZ;IpoY3~88@eq}z|46zTbnnC$TGdWEXQqz2qcq9)jFXS_2Z>g8my0gL zse?pzm7RRFrbJYh{^J4%AKfpEx0CG?`AmjW|B?LHPuzhx0%At)YC0Po-7JM|EqHuaFUl7$mERsI{N>vC=?^f@&yXlNgs6u;|40dPK%ECM9{N1K2VGj`;M7U1O@R(w~^8Qi3Wz zB0;H)^ziIn2O^b&LX>_czY#sWLH*|2Y*k-ljA0O~_tUG#RZzp>rs_xWO&ck^YAF;| zmRp9hjJATmim?H(N(f=17X=xjy&^*V6}2*eF{zYul#x{u^--GTpgI(zk5@D8zVL;B z0dFMfeS%dpKsiX6F_yYfRA)3VSS?Y#WeGgVN~duya5*4xIK4sGmLp07e18Xh(m1oTCd%ed!4f8z7Tt4h=x=hkpnF zQvqa~ALPrCd^pacJFD(5Nd6nYa54it^W#YP z%HhkA{5X;i$7F}^Mklto_;GalaCG`^Om#42IF8gW&UE;3B#<9RSKp1~D3AO%lFl~y zaLjhZBVUfE0pzii6F&pU{aw;Kb;9ZA@q8&?kJR5KTygk%B%N>a_eg#ooxUBZ4@)5b zj=2D`e@E)Cl8?vIaQb{KbohNFkk3bIt4N=oAW@q^eQ&Z~;;>^m2XyXzV!2m=uc0V&tv}3?-BY^CGFaRB0_z9g$op)gXx-tOW7yttU z(8DEsr@s63rK62Mtgq2M*8gqO@3r?dubp+V`&Y*@lCota%B>B-I?b1qf0ZZGOP z;o8|BJ8ljB>QalU5=3v^@#N2mt_T+Tx-d}V4yG@yo z7Zr^+KeX&v)aL8C2E)OhPNZ*cX&cbz`u9Hh@Apfs?fH#(?89EaUYlQ|^ZB_SBwR|o zIsDB>6SjWi*>h_8^{W9fPXdP@o&D#;sPn|TovLmuu05ff)b{F`)VZHu**V>m`PQYO#VLm>JZ|u#U(I!q(dTaa>GD=3 zrMa2Ys|c%ycezmS>A|ym#x8qDb9mop6+UZm$-P_kq@O?9&mH>d+Yul!AAa-G@Fh2= zoVc~l>)VwlD!jXOWK#QIQjcB}jGl!pzrVWuqWetsJ!8iA?;ofVSlqGCC(4GmzP$cZ z^U9yhQVi%jd`$1oMW=69(@y^DjBaqdk?(!p*s|kGL;Y6qZw4(JRPsmcr>p;%$p8Au z%`ZP&edqU<_a^kc{k>n_gNsJ@snw^N`+U@;gW<-ng~|CB*Z29TOG50C<@Y@AHRuxC zYWJ#kABGHZg zdk25N?b4#9{k}NVVt3G?1-$~>Y&)6%>pky~pPOHN7`g7uPib!EDWmFJuOv0xHtEwV zd5cz_@T>ePiAHPP3Xk=sWA_(huJMe#w3B-ksORe$x8)-6eI8dEQ=Dx8Il6KKja^ z^_@MbMYD@fE}g3Us#PV(5R#)r4V6#uV z{Vg>umtSrbZr?1vr~PLBRGd{6K61I?N|JwNWYt=)n6 zd75}*e!XK0zaBZvW7}UFeR__}h*??x!*32+;x3N)*sfWIiGr9 zV2eGLfi3pT{XLvqF~0!U{u0ga{6rIX4v^iOC)62rIiLT0`b!Si)O3d0&pSUqmHSnt zeM$zp%qLO$F3q%@{~P4Q!T|~|?Q@XqIXOY){kT+lUF}a%IDIdjp!5d0WJu>9`T&Hc z+2<W>hIqnO6@WS(fcA1zcmbWy0r=Q)-hw6>sp~B7 zC)dJ-5CG%U=RVii$^eC5+xN9o{MzL6ZIaUtjVJuT0~qQsvYi;ssz{WA8iDId$;k`Y_PQQJ%GGfY7b>`E@zG3P9*70JY7yGfon7C!eW zNj@UsYp0zdPe`QupT^K_%jvhH`b&6zf0cp(l3e7cX-xoYKl@9r1`d9!0$}?E;FKeN z1%Ciz0wen!r}Ew-J3|wn%cH3(KpHU6#=*Z$2Vj`O$add|{|&P9G{rv7qVq872b0|% zog|H=7d66LwSbNA_L{F~>#d%v?B=bT;Nh)~IOOdWanxHCam-s8Lu&|R$4S=;z@U>P zxeprQt(r&i7APXT)$^4R-hOi{bo17;*FC)bA`W@0BaV7|MI7^1MI7-~w)2$7SH@NV z`XEW_O%uwc;;jAWxc<@M>n_%zSmtTjMvElHBw!U%8GT(+CH z&giX*IOMIQab;|4fN8ZPN$$tX_bsO{*IPShz1=M%{Rq#l9^QU!OVwrsJr8R3(pm!; zYDbFqUKI|ornV%}7@Mw-@bIRplGn0A!U6WymZU_7>^x6@yoWu5h@q$}wElib?A6fo-c$*nT zb+(KY+B;?VMmWIjP)SO6l)nraHnN?|NFmx&p5F**12CqMB+2s&^0S_Oh$@t9D(c$+ zm>WqFjmIg>@m@vP->XnIveb(e;Tc=%O0*}*Q(_x{+(u=~6U~KeX#=2YEJ^Zw$lvnO zeemMzYp?sOZ2YoUiN+-b}5gL z%dOV~BsG&Hn)9*qM0u-Y?Hp7;Mn^cU^ZmWtp&ys3jIydne&4p}0WLO^B=VE%EQ`*O z57ke$9w4{b>(>w6-%~xngJzOc*O8_}t_K|QRz=YpL+_i89(r?0axNj#wXg^PujZ2E zbZt!UPfP@Ws<|Y!d{(|GvWyV_kO+X<&7Z%sWb1TV1VEkUl03-(3o#~yO>f!SK zP&;Cd05CL{q~K@oPbYeR+CFQiqPz`?DP=vwww`RCGFp--Pq|EwDF0THP=VOcn(1lBqb3TyjV{#-wt8htjt{2j^ z#7Kaca7l9ZmFe2rNPu49j(5UgH#IF1z!WY?WaIRi91QkWwL9dkr1Y$j0OoK>lII(p z?XtlxkCbL%BtTlYBstwk(=}yVfbFHO`L_kwQtDd$wgAbcuIby_^K+(0W$4uwVC^f) zIJqsr-dB`yWm|w#;m_rZ%DAO1Kz8`^=SA1{wgos`>YBAJfTh&68;<;(&zj;sY74NZ z6rWcVKxV0Hx+r^nxyB8Pve%dEwU{V-eYsxiA7!sE*K2W6_WE+YmJnsHFV|~pq5#&E zD$DjLfR!%SsIDzh07>Cxw+j?*bL3Z6yFuZ!frI3sEP0`DU9`PE%L=D@B>RHaa7l6w zsc3$@S2V!Ya7mKq!=tE~Qp(rIL<8I?<9b3g!0m8Jl81Rw)Qzz7uZ;#!wt4Y7wF#Ng z0DK!sl6_&9^-ZK^dT<%vGkf2n^n2QlzLT`a$*UbeRE+ejt)9z{^*H3MjPx95Kg7}@ z#*&S_OKV9;OBIFC7*SA<76tPrQHbj$ z3Wcjg!Q4v})ZHY(_^~M1#*2c!ha{-AlAs$W3O2PQm_HYVw4I_rzVbrTMM1BT1Vax= zFnuoy`hlWQxLg#VwQ7G&s3cBH<5PDn`3I~aT z`YlPY_L2m37fH~)FAAYPl3MjbVcq+Rjz*JE%eV6Y^FE)oU9a8a;+Aqs^*ibB#hQAisp3g(%j>?<(NQxeP{i-KviC>XOu!9?}Z zNfhFK5C!u{QGgbbV3{Eb)+kYkYbpu){-R(oih^;7B&gd-0#JTSMFBLDkoJxw#7z2 z3Zq5AJVq33lSLt}xg@}NQHUEQ3YJcy03V2gt)nQYXNiJkswn$WgoC22`wyXj^zK>q zN_M*gi|xfobql`CBNzE~g$8(xy{s7o7G z(cT40kN7q__*}N4$#CV{u|N{OeaZb^NE&~ardcUH;`{zJ`S!gg-+|ZUJMx-*$6u50 z^lR|_;*b|-f6Wym`VYBG*Qs7?3nZa%fh7Atc8-;t`25`o$EnXue4-;gXCK-X+Nr`6 z`sNa!ccNWROQ%H`_H)f)G)5yn-oZ!1-qNT$D@5g-6R+Xmqi=C(+@8K-J=r6n^yWGE zO3OT9ZHI{Z)IT7;HV(ehGDT>-C4DFL5s7cu!k6DiR^O(}XbePr(T?=Wy5G~u*#`1G zOME>Yd{o}j=pSyqMc;hl8}8sM-G?D0-npg-aPUog1)s0aOosM*Po-rOISb-D>`1S4TSe%1b>dl?DpZOK_vMJ@EC+$%pKD{HovgGf4g-c^- z-HQ0SIQXc&DUExVXRRlHF2rYa@RfDHKl)cU)BG0k`8xQ@YG2NHT`eZxFvK_6!B>`C z4SW2>ZJM(tz8SCJ3mf*=S#mf+d9M@RZ;S6ios9_U_3MW)ktyjEMhqL;ViW^Jm zaBkW>D%y-YTe^?2T-bl#+`wBx=r=+%T+{;rl;p z8z+3a>f`Usqs*4PZMHo=?UkFf9aBEYn_IHO8d}h+=Ax#vQ(6&;v&4Mqy5m@MXwp*LU%d7tK zq}BdTz5g&ixpUeW(5!Zf=vU(dw%-hW!({GjH07k@dsVH$KAYH8s$F#mMFsH;sMPA;4^KX+S$n8AI* z3p-qg2Ne}#L;czZjWmqux?+uITI+tln+J~R)%wV~tm2-_S3Ih^X!Q@KBcF5#s&_2d zx6}RT@$E);nD2i4=*l^JHl4e6G~DxJWs$Y(u2F)|NH-_}s2YAYZ%)+mKYLf+JGX-Go7;-&+;8?-(Uv>2HjJ)vZuX9Z zzw!>%5>gZ2IaYnt)X+~$3S*Zi-h6Y6UYo9XZcI41weuhE)U39rX}>3< zE{K6$$FSced^YY{&tAXx`1RnJp+Q@_j-7kr%iQ5Hi612%FeRL=F@Hy^))_TF`=QgU zY3J7cj2``dzyWlb>0y%>3YLCZk1=HtaSe*>d6J7gtg~zN2rx(7UCjNp#L1AKYAgxX*|C zPUW4>T~bo>@xetq)T6$t^4o^ycWP$e9M-`9Z1pE2D{gx;YYV?_9`o=k(~*4tl3Ra- zRqBwoBVYKGseAeOz1E-fKjUqDT5JA@)4Q+U{`Aw9mL_8R8wpF#{Tj0{^3>$cVMA9R zsQb>2ikb11JOW};=EQETw9T?6Xzj$+Q8iMGgRZppTmP`-=BD!k`KkEhobCI*+&%q= zw583plPd75aM0AAeH0(R^_JfkB_~@~-|_yq+&OuRmaaRJv-kps`JsA#i-Or#&cAhZSN|cux>eg`H6`v?WPCf;RITf}$1RrU zJUz1Yr_g#MR@7P3u69DD6~p%e;fMe`ZvZce!tm!Hyh0hK6y^J z-bZ|EaBA^y`r{4OG@bM0;M7Z=`vW6~U)>NMoA##L@yt;HM^8*{QDs|=qd~piz2sic zsQdoLn&WGaH~HbtbZgbR^}XIdoZ+sMlJD&K@T+?jAJ@75aQ}w|i>Jco6SKy=t2p0s z*L$rCcxlIb?QT}TXJC&UFFrW(;OswYHtA&jbsCOX*IJ$5ewuvEd3H!u;f}ECKZ=Z88N7|1RcC{Yh*?RW#%zA)(9siv;To3S6J-`|D z02Ar~PId`@P!I5FJwRoBz#A^tZ`T9#s}H!i9^l$~fGg_(CcA{YBBVYbU*DcTf#QX^ zoWBb7Uz6`Y#rArDVYU(>G*T4Y<(=|&taa3*|D|bYd2_Vf$0Pj%+T%g}u9%z>A?8|% zpu1_e=@>{G-d#X*wiZgmRw7uN1A-2)SBvTL^L2vyGmjzw*GAau$j#9aKiQso9?uc8 zWB&`bLJ2Q&JV)GZyPa*4FTaD&>;7e+xo^_NaP8}EcicPWQI`0TOqLbkl-H3?gBH$A z&BemSNI-Q~iC~TfSyoAIDcBHgKT?<}t3;TVWv|cJtP;WK`0vDstP&wEt3=Rcl?ZjR zN(6tG@HLcnR*A4Bt3*h2xt^3&B4lTk2%%Xef+iUXur!Zud2w~=8!LYAbaCgz_=)T(ehY>^e$))hqepGtS=T4 z*B1-*H`wixmX=qt*BVD@n2QCqwM2ll5}_=4-4X@ZIqF4uEzW!Ku8jYJyk6W~EZapV zd7%F%ju^+E4E*3g3DHfuZ*vlNUq*$o$`0qs6l47CNl49ZZ;$q>!;$q>(;^+4_WJ$3w zW=XLyc}cO*%Ozg_CB;I*l49ZM;$p#TNwJ_@QY`qngu7zpl44=8OBlsVb~%3)*1jg+ ze+qs{u@GiK!TbaT_h(v108iW7>yhNuRByCEGD<#wX%2|Sp)m(g$UcC=hyy6g1j(x; zNu>HAW9uyxbo4AND9l(^EP$!FOnHrM5BRj*i}Ko#946ZRB+Kc=%u9JDcg}Xzc`S`n zr%;yHv^gn)PMrHJ-pgP*#)3%&@?JzIyc{y*kk`M7pHp5-2RxV8F-;my8V`_EBs7Zw zOxlS;Zby)1l;oB2+0xN|wC+SfpNc}WRC_)8r=p;9{CA>GDhi>gDA*{SohV$~Y3C)x zrlMd>MPWoL3NbG6437VW#G8u3qn#+IT*6(En2Lfa6@_W3D8xB<*1UwbG?HGE?>~h) z6@{>*B0*hJB)H2Sf9*(i)T7+4)*mg<+|&zlx~xdZURET8eOmNPPF-O;S|nH~jie%> z^IjAn3ComI=m?nH;YB%pQsYG_oK}XMz6>`u7RmD^BoFleWqeNP-IZYRe^Hk(({b<5 zS zjD@p`gh#~hirGbiYIc#ZXI7D5nN=jDxrB$#E)tr}E)w*!iv*n`4MH8q|Lj>s!o^ud zf^}ArU~`G*3ghe|A$E3=V3=Jb#5m%`xuo?fjCf7H{}j2iii9xTeE~kXFSyGZn|4Gw z>XGCV)T0HOd!~H?&)U(T`$BfmeZfF+Nhh>)KXv$hVFab2yDyxYS0sS3s7(1ZcLt2= z{Gxmomy%EGzaXE9P41UDpZ79kc4eWnkKI`$p;Ogf;t8c1rv#|U6BpNNW70Xv5@v_fM|aNNKeSUqX@5`6rlO!~wmRgfhz z{-pWR4gWbRKR>G9$RxcEbX7I1k20#EirKKi->>CLFhC+40Y#*bcb$QA)L>*l7qwVv zVu0~-Q+_$b!vrxfcDpKG1z~Cx82uuewMzrb5XB0^9JOvCYf|diU=^#@2YW|17+Cis zy^c|-ETL*&U6&Xgqi4ZQS2?OJdEE|*fFdv{Jk`3xy7f_}IQ`-S`ZKJ7n6ZV*y`;yl z)Im}eH(j0EOr#G3y2d7z_vGN9B$XTJ4^&jE;x#LNEe-*bF~&CEyX|3JS6P2!BV+7e zCGPw+&pJt!R)oaq*oqNeNj)H8$U(4$s!b+8rn1$`R6(Uv4GKOOA{WtP1Oz2AG0Qfn zZC*XXqBkn_>I8_5(X&c*yLjl82r;2|K*^|;O0|lGh+h7txM)A63c&A3{TcwQS~(!_ zP+jm~dooOLSdjSubZ@-I$6v>=Uf-k}ry?4S>*E}F{rIHC= zsaMWX8w?s4p^h=lp)IGK^L3yD-zb34H8G>tSA~%#ot_QZ8>pYVI58nUOz8zmbrXnD z>FQ`Spbl{dFoaap>phH$inL|j3o04F!Wt?lBUoljjKQRz4Rx4iL6hs)=BWN;^uI7V zy4rgH{h8 zk0wJ*@m6zBV}&|Fu^}T9;(av+b-a#k2MK0Sjks#6=%KD#i8ZoG7DZShK*vNA8)=3J zh0zC6nx`pMCVh~}WIVW9x81nf8tUI}ah2~)@k@Et)I|S9Y?q{^{(4YCV&Iw>#*ow_ zGtCb|?#2wL1g1!`(V;h~RVl}O;FlKbqX!O)PK!{Rzz@{G#CMMd(3^DNrj2mdgU+BU zB;y1@`idP@CbJ150)km(e59Ase|{BRuu%=5KCs45rB9kXaotw`pk<&o=oV?B1}a(o znb0}0Fp|pw{Q-4`&XnE*l5gmh&Ge_E+s*|utJZ^V9$P;FrX6OKI?z{~cX7Ea12NQa zF$w;vFjI_Dv(ijr;h{OH-?VV~r3wt_eVG1`)GVhGbR`e$05u|h)mVUK2Pi>3|4n5j zm087ltORw4Dscr9QwM%Asu&fRfK_@xO?q4^6|kTV24Goe>tkU-7wK~#b8FiKKa)D5 z?y$v1_Yo#AhHH+1TDRfgavM+Kl<4|=Hhr5eB#!CJR;>|lut3)0*e z%q~~?C?>BM#q?l}pwfeJgmsRas?YrP^g-(|4I(Q*#jhIoYT>VU|FhxXin=XHEF?3_ z8VCE_@=Et+I?(q=d9+fuL%<{`O{@Y~PdF{qJvufpTC8%m7np76mJg}NrU1xSx zB;*Y7ua@+YYOo%BLl~%7x0Sh0gqzW*3I$c}{E-^>WX;<)UE_fI8x$-XYFwy?<4Q<~ z4)xLL)j9yP&!^vnm`DK=EQwLWfE{W%JGbJfWq$Eln`oL2G;RsJGPD8In4@4nRI&!u z;zp}LR};M8W(cc~XdnMg=m9sqf@K&T%vqPvMXl56-8!?%h9P==Ot5~TI@kl|Y^cM; zKtw2OQg$@;i;ep>!)CAAS^)<9ANIa}(61*aGuq-~#G}82mse*qT zo2b%;D?b?c+n|N-1S|AWjnXO{sHsYT<-n-OUY-X0J$po|z`!ylm0!LR)O?cOQW4bZ z`VsDGiz!E9d!<$K_Jz0vfP-qa4=io*2E@nY`m6Q2!~Pvuz0S|CPz@?bWV{*xtk=#7 zf?$=cS2L5%JO0EQXhl%mC>Ft+7Cv1C1~Fj?SZ0wMl?R7 zFCy)kp}B<8c6MkElJ>j0*ta1#ZQFb) zpV@6ZQlmpQY&HVOwj2pt0c5*1I{;+6HDs&iTZe5L+QhmK0I~q!0PXp5*rYi@{a8o3 zWS53)(U2XQa{zD=04_Of&A8f_xd8xn3r%(#Gc+Ad_GRwSo+;|LIns0L#gqO44Th-? zTjF9*M&Yn2Lv|g>o(#dmarAN=$-WHPmhmC~X^v}TTgIOO*{%%luq8vf^R*dxW;cdF zI=f^qhICvTGa%cCY0dz&WB^(_?8A^BLk4a0BmCbb}|4om72}~WHJEXF#z8)06#JS`xt=z z48TDK;3xxdoB=rP$nPfx;4A}hjsZB&09;}KE;9hXGXOaZzzqiAPX^#718|E0$Y%g< zGXQrOfcp$U5d-j$0icQ4M~*a~FaRP0z>qCk7Jzz=ZgSTQz>@{=VgV|#0F_yX9y|-+ z%K~UwfB+Vt8VgXJ1qgP;sl@`+VFBJ`0qU^;Z?OQOEVXa|jU7B;EWkS~KuZ>&4GR#- z0z|O@(JVlF79fTN=*R+eW&yf7;uu(f9xOm_$9Z2C;9bXmLVp(E0~TNi3ox7o7{vmN zW&y^s0OMEyGFUs21(?JFOlAS5vH;UqfR9;#8IE*jvjB5gfCVhTA{Kzmw|>fkY^Qex z3$Tg>_?!j!f(7`J1z67lY-RzrvH;syfK(P>7YmTd0_@91C!P1-Qfl{O-u##sXY({J-Hi=CJ?;EWkY$ppXS9VgVkqAS=u~cJMgygw7QJ zG(vV$0H|o(r2z0$08~~0_$UB03IIO^0H*-p6##*b(X`WrAn9k;Pyp0c0MttI z&T}ILK$rsH9R)x$1weBJKx;?ba0Ni50-&7&ptAy?ivpm#0-%oq;9Uj42MU0}3V`7X zfYAzo@d|)R3V;t408fJF*`C64oQl;hup?lzCc z%7K{nGlM!SgN904v{u!k`VB3ny`e>@rbV?*iw2z*%{ncrgS4m%)uK9Bi*dnPObXVb zx`r0@vnpd~4K2pi(4sm-i^dQwnnSc`2-RX}O)ctbY0*+ki=mCQSV+g(T8yi$#kAU5 zEUc|Xb$u-w`?#a=EqnTMyhd8I9pvq6r7wZ8l@@2T)S{)i7EP_SXl|*+nC4nJPFiy< zu57MFV{`j8JzaN%Iq~p2uFUjleULr}WH->(ON+LS_B3r#j-$bTbcHTli=)D|XbRWL zx`IQ_b7c(wox}O*9Nyf>;q^TnMkjL^wt>U;$sBh4p2H5w zoSep~yBw+>aCr7Ehga`%c;haIx9@WJ;4X(x?{cWT$D!9f4qrD-+HXw#LfR)xeM6c9 zq`o0_!kso4sgKy90)Xk77Ik~HXxpGgTVMMezAwp!G+)uJU* zi^fPTLZlYW5n9woXwjzEqDiksa~mz%!tM3;0eN z(|&Ddyt0mclet$?N%qUbo$38k8ZQf`vO)i!cidn1RT8#!#Uk;A4NIqbBN!(JOXeBU7h&boI! zl1$LK-#rdP?r|7)kHe^Y9QL}$;gEYAPQJ%s!aWYn_c+{pkHf3?I8+vLSf`M~s6q}$ z6mmGNki*164%ZZNxTTQ8J%t=*7jk&9ki*N{Y{{{DB|Sz;Gg7!x(KAaN8=u+Ot|8o;?rFF!k5%JrT0(q zX*_%Q+;jOX>v_3eqyMhu{HOG(eOObfeE&*(>K;=4y2f$EKjlwz{2MlMSa^;@-FXhP zHgb4sBZrqaa+vEVmr$yF#Tz*kH*&ZgwJ*)riGRx9b+6sO3)53A8XwuqLiItdJ~5;PVh4CxlJ4eIVS_Ck zMsMNpgDo76-@@U7EgXKag~QA(9G=|5;cr_wyuXD*|4SSyQ#gDhg~J9Z95zqkuv-d; z!&5k%l)~YX6b{#>aJW5%!yi*PJe9&>ehP=JE^#QPa9C+8hx}F!!?to5v6aKVTR9xI zmBap*IGnhZ!=$YoZr#e^zO5Wuw{n=bl|$1ddpS$Ca_GN}!+P5|Y`={|<2DY*Z{u+0 zHV#*B<8aqD4u9Il;cweGyt|FVirYElwsWZ4&f(kJ?P)}A=dkZ~4o7e2aOQRnKiSS< z@^%gnZs+jgb`JBlb0}@+u<{NL19x!Pd#cJ2^C6;V}6Mhv#;3cy}j<*;hC$yuzX1RSu)B za;Qq>Fff(F&{Pgvr*haemBTTq9L`VWa7`+Q>8Tu^PUWy5l|xA5&?k+wbz#u7t%QVJ&nWMG!E~iamb`|$fa{w zJ)Oh4=^RF;bJ!uB!w=FqoS1HZritksu1x3f>vRscrE|C^ox_9a9R8Zl;gxg_@1=97 z%-}E}gTqD{9Cpm$(3rvDv_*{3V0K^BEjo$>7kI!Qr179ER-TFh7ICdl?)G85};Ld)>uhg6V_GdTo7>6{5 zabn0Z4qf*?mWIj7V_ee9(<_bZM>(XqWG6m$q`&kShb1n1ELS?plX{FpQIe#+$2j@> zalmo?{4oxnN|JQt7$<*YjJIAbdmoLrd&*dO>6| zCTP&ORD*F#HE2!Jp!!n{nwM(OWY(bdD-D{y(xCY(4cflap#EzO+EO%FxLJed%^I|9 z)}SdxgRn(|wyPRcU)7-1h2pMi5dP4h^>+>Gu4*vpcMa;VYUJy2H#BIzuEDhH8Z_O~ zp!K>2;l|(V$x_J|lPdY5-rE-oEBT_u%NMO)z6h0kG0n>tjg@>cw36@NRVu5jwr=jI8=^!@J9o6UbH}v)?x=3> zj)gJqnAXD`ORciTz>rkcQm}@KK|YG4ddMYYTIMdhv@~@{~sD1tP3lF|LeR{tCZu!-=*Qc3{;S%bSEX;g z;)|hIeGz{3eb&C|&icyjo8c#4xqX12d@=1eU%7pt_bcg)ul#-$9`t=J`Jwj59P(oO zqxN@4lefKoNIsqIkL&yUy7Ecsht_&AeREZJ)ajn5pTybQH`nxES3b*XKk5DYr}pP{ z%1_Vtb>!#2@qC@-f7RzplBC%Q-*EWRchCC=PSE^}yltzDy}3?Me2PnHIQtvUFlRhx zI%R?CFX@E(fBE|{aLmYolZKKfC4i`aKpZ-G#L$WMQ)m_th{Gq2pW@tK5=!TjMhqM> zo;)o9!~_K5i1CvqJJ_L4Kp>7BH*&HZXA-~~E)d5JwVx8dK0rR7I)374IZFM2K#UtW zY0}goa&izx=M%?I9zS^e7-G=T`IJFpMh+f5l=ic94hY1FakTrz4nsg7P8vG#!;ypS zHxNSS&x;4G0s_(4ScA648Z^*2;(hyg!>_-6k56!ayA4VGT)XYan2Ef+zlZiS)3Z1m z&*MW;8o#GIAkB07)nt(7`yVU?B)zsZ@4sj>5^VN4Ir4KwdxvNb5$ziqahO5+Z~THm zvR9*e^SRB)r;;>2E}D`3+|r&R+FL|6rJhIxizrDC8cxSYcX&+Z0x|OukIkA*$Fl`I&JZPuuNsKi z*Lln>;L%pXqvbk}5IP-i6!56L#$%EwNd_(u5BmqAx@sUkYB(Kj{(*RS#kf9chum=` z7l>C2c+@@NagQiT&|o?yQ2tyX8Uq4RcbCU(E)Y*$=h1YR$L){o`4pD$c$f>skS9DE zZ}GTTl%x^2cuaf5MW#`{yW3-)i z$E3y|%Xv8C&@-N`u=}%+?ckOI&G)7^uk!izy&JWslP3?a)}0C8y2#MA!eZq>&duMs zm_yyFXHB?ri0_)&{BhUhN9m?dI@dXLC*ZeE`xpGF&p7@@r@MK#cFt)VG5Wopmycu> zm1R%L70z{9x{tEAL(q)2o#>ZfcX`4%j%0X0!A=D0`o5Hw{mrDejVwXA*&Vr&z7sig z(*sx?2AGJKUISXJq_R?ZC?Dq>OW9?5HJovspgbr|Dh(Z-w$i9%v{#RcWiRvdBZ1P1 zW$nk(X*xmQgFiOd*P7`YLE~X(7=glwhtj8T8XvocQ&?q}a2hYWhEtepd>TKyhErH; zm-sZEb`7U6*Z4HPb`2j}DxAjKuHh7yc%0>@@waREx>E6JJnkA!@rlP7pT_5|;nq^| zX}so2O8(nj(xBR~X z-Nje$_xL{@rOThF+wtT-DYNsvo$-j5=O~@$`kViLJy|aQ`*Hu<_@Am@^CKQjSN_-4 zOZM!Iw0#=lVw2_LGaTI5HtBmr0+?%M_E# z%VfyqWs1$^WisaSGL6XPWs1w?Wtx`D%Vf&sWlGHDWlGBBWm=QV%Vf^wW!jR<%aoSO z%d{t#m&uaL%aonV%Vf>vWxANl%Vf*tWy;OvWh%_&WqOp$%LIA6OsYIyCUqV!lYbsB zlP-^!sZJg*Q)nJ9Q?oo?CVd_+Q%oK&lOd0nDK?Ln$(YB>G$N0eDK3wfX<8mHlPQmv zDKU?iDJhSaX-yt4lR1x0%x)lP!;zDL0Ro zsW6Y1=}{gp6Xf$Usq%T5NXCf#^LZrFIjBxPFH>kfFH^I8UM77$FH=lDFOwmkmnk-% zm&usV%QPaNmnklvmuXr)FOw;smnkuymnkWqmuXEtFOxZ+muX8rFH>4RFOwlIxi66= zpGTr>2U+uZnJ(t@GTHKZnR4@anF{lHnI7fyGC=_^ld6E1NnOCp)k8WZnm33LoYT}TtXyUu=_jx-XLV0_??ah@u~?>L#fZ|6$a3UcNBaMX{W zKHzO8P>x661J$oQ*17v)zrue)K5&*b$@M&_jdiW-c|^E%jqCY=$)uuJj&hWv9OWp73}@f(zkwTyK#Uvaj&Y;i zF>biKtpDZgE4~b*BVWoCSvks4j&l5ugVteO+b8FL=aItyg=O-;fj?)T_j!gw`@C{F z%2AGTl;i(jNc+$}@9+G+SRXx~|1BK0N3axrFWVHCp|tbLc(*N@{xtk!U%DLSC`UQU zQI2wyqa5WZM>)z-j&hWv9REG!#E+P%JeMoUepVcyc_6aabx1aDt9Fx~6wj8P6zr$q zZMB_Te+TU;B0JzkWjVV44^gM;28RySe;;(8|2HFNeUHqXh~Akw>w9PBF!aAiX3qNV znK?P#Gjo`pnK?m3hRmD@qVAbF@dGk*A}(d-1YOF^iTFJ;C*n|M4s$RwC&HSU6aQ0Y z&cN)EnJ&CHzmDw#P<$IP6dl+2v zJC%Walo&_2|3C8Y_froJj3X%qw1eW&@mKu&naihIKszWdjZ5fk_V0J^gX28z%<&)l zPWYc`sDAE)`(~cnN;3b>zaMYW{pXNgVoUPflV(}S#R}<4vG}PK2Ii`yvM8$R!Xci3 zlK7-WDgqEVhy|_{RKzxNBmAv=s!hzO5DHg!zu$J<%HaYm7ArD}VMHdkD5a{<=S{T5 ziI(J&f|u{+mDr9}fbKDwyNfC+cPH9b0S`6^3;{Kd?-y9?QiKiyYz7fj4+tW(EJ#f2 z32xgHiPzZx)QqJ{GzfuVVDVU@Emh)ONvZ&r3_c0KuD;hu?uaN>K*(&tM^*MH7C{ib zDtYNi0KuZ#1mBe}l9wMVS0;d$7lnn3`K+$C4oaE`;yfr^<%^}}()^i3o;;7G~Dv4;UL3G9Cc#Vg8H=_mNF#0L?b~gC<$> zZ$u#5Fq7G}fhooXfad?m46;@;l?9L;nSY1y4H+|;@T2Vf81tzV4l+w&Y%L_8y%kJ= z{4UKg3D0HMmCPTL8RVPEjQNasiur7MntT@kz%wSH#inZl`ExR`gk3ym1pGxTWpc|* z^2<%vH}wVpylD#av+Iq_ z{}f>h0KCJ(w*tVs%rBJz@=x`?K`>ucW{}@1g7&A~gaGqr6^`xnf1mle`ZLs+7`3Kr z19bqJe=IY0nTarvA1(5sWyW3;LB6%j2m-)?=l-Z?Mw2!Yv$V{>T1X@Ekx34lepEBY$Nr zFOx?r=C@2>zRL)SVRCIuH2F4b$7uS_ci;dzaR7D>AeDuuv2!{H5atS8^M6L@YD$yP zjnSE=@GDK%1P7=4N(+ZGOzv_p{Hqbj$C`m&96+v#?#%)8HPJ2(G+%6lt4!hKn~gyJ z+03|x`D-JPA7=8~W=0_g&@U{EK)&4w{h5z91I5hWn;C1}E)Fa<<1o9tuIoxInAH{sk-C+vzQ2V5vZ2jWs?9D?quN7RIznAhhe=oiFiMoBv ztk6~8brJhLvb#QN+xYnE`6mx=fBu)NgEI_p{bec}(ES-(GWWW~%X&*H~tIXh?GRB-*4)(=L1Xy5!+^_jZ&_SAQ_zWhCR;gjQ|+P*u5j-Cg8QNJyC|M!01h(gN;Z+YpNX>D#y*tQ{W-}Mh4 zOdYR&HsoA);k(`6wEF1$k2^j-|KpCLHCxt=zOBp6*LqGS$E{hJ3g8o zb#6u8OQR;TS39%6iAlcj!mXv7zCZrs z8#5Yf_x)j7Vu3B96WJ>Lr=Wc1^I#VQk_x8l~ z*$;fudw<8B?Vn2X3eWBAvtmlZq{2rMCKaCkvLxxO^R-joIbS>Vw-t9E92JPUMxAiW zHFju!f8Tre|M=egV}aKvy?5~HZn>LYy7hbSi5J&ZAK!P~fE&kka#enGv~Kk3MbYEN zY#q2@nTvaRnTy-k`0M899?Q7%p2yX0liw?P|EcRvcK>^xrTWy+MfaW_y69eO`nppE z*FQh=nb-NdYCimRo2}p1Dc`+Ov1iAuw{5+_k$cr^KkvJ*s^^Ax+fFKcukED5Uk*Ps z?OX2WJx`2kb>vX~gmXvVs($&{Th%Wg$)9kJj_$WjfAQ1&3FrRhSTn85qF~1bA67i_ z^oJFXYYDzda@E?Kdnf%l+1t<^Ewgzwdo;)QZEqx>TLqenI_q z#|8D<^BpD?wz}%@1JLD{HNSM2R5-Nk>R*2CFsbnV<=c+*nv?m&oo$A%Za-#eMpWAI zBa5$pe&#*@%x_wB`p$RgXgYky6;C$&BW3!T;R|M*8NT4Q*j z>-5#zN1{?6C_Vehn3#>{qzySJZOFO3aYE}Ow|AKS=-^S4zyIO*bk~T!OA-Qyqh9@W zVciw!ZEyTx>B!gTW+$BMd)@NxJN~t@ab2&sT5SIM)*qH!Q?dK>k#m(bYj3`DZsW+h zDFatJcl)Q@Khu9rPkTHCGSKDstqn@|%S!$k z4G_Nt{dr~}+W1dHAbOc81ET5sWPs>qG0g@+>4^R50nlac!P#^#A zVE%p*$XC#R0)6ucG)5(mZ`c0>`p*3)kPlk|)s=7~i$miA^3(cPVfbmKu~Y;RL=Zs) z5kwF{1QA3K!T$!7d+b;$cgDu?`d-UGL1$x%SA*|^OX+Y3%k3CiW=HQbJ1WcV=vi(@ z?+QEmSJ*MI+>XKJc66_>qi2O3Lo4hEEA1FMZpYwpJ9>`VF?7I=$^koiKDQ$rvSaBH zJ9>`WF?7t1{$qA*{KAgH7j{&?u%mm49X*Te7+hk<#^>y)uCk-zv!mw~JF4&6QCVWg z;AuMwU)#|W)fq$I+EJ{wW8h;uDnUDnU)nMFr5)W3b}Y4Y#*n2m=2msa5Z@VnWp-4i z+tFLl8NK(|wSA`UHv0eRTifXV4#v09t*OuKr|T?cr0aeUXq~tdv!C7(04ks7fUMfn zq9Gk63p;Cm5SFIdH9rWAMRv^(LMY3w`9W|dh511Ubk^(_x-FObL2!(=Ykm+m-C@`K zAWXGf>Ib3WYS8>3(7G=9L7+4FLC9o&5R$IZ>>*C1zx?C}K^$q<{2=_dwr9u(0om?X zl6ZvMt*Cy{63I6K`9e@mv_$VyZFGMH2BaBS+Rb{&b7g?m&;!f!5$>6eTkf`F?cH`% zd)V;Q-F6IhY>mN*t+8E+9lMp-u}_H|2b9=R>Son^06bh`$2lc-TvB4kS4!--rNoZ4 zC3ZYqVn+G@c$W9_(P ztQ}t&YsW2P?N~e3j)%wE@zhv5o*Qe&=y7(fJ-Usvqk5n<3iT~<_&7U`9cRaf$Juet zI6L}#PDg)_>9}Q_9c#zg@$fi1o*HMzbK~q7J>HJ(#@n&mcsuqPZ^r@S?b@^9+jZ+X zI+Uu;NQaQw`J#Ponqo1gS&Z}l6f}K7J{{=n`Dm1O4lcjn?2<8p2qK6ef(RmrAc6=Y zh#-OpB8VV@2qK6ef(RmrAc6=Yh#-OpBKUs*;xG4}qvL<8sMnI;STgz*wqNBxf)rXb z&~EVvB8VV@2qK6ef(RmrAc6?~UjnoLcd^J;uK~huMB#{f8XX@70e+4q$@yQu}>pKjh%-Ui~0jMs%3%_mRyX@T36`T=(?A@1j?J^EBB= zBfr5S0K@{oESEJ|hyyNaH4L*rrJxxdN=~;aHqE#2mVRnbQ~@k@y{M*u+Py=iaCl>nOE zge(AXGMOB9?gaq70iZ7c%prm!IZFcbi8B0G;P{AK{4O%b=4obw&h25{2pfZ`ld5kvdKsG_a0|7 z&7PFgGs9@Z#va+$Gwfi@1JLZ|kj?@eGiSJF`8z7pNV+P1^d>4MVmS zG$u^{eOprEbK{oUPEH&B`-!)2-uO^yvE zpL#rg{Qld%{BiAlFO6=0W2t-K*Y}lGEp6JH_f5a;+vYBOHD%NlKL&oCyM0^#PnS)* z_SWi!H@r~2(3@L4@XE&zzIxlUw)4I|#RI>3arVZHzQqG$-g`I2+hys(E3V!%^0zZT zxVS|%H$Fe*hhLu^-J$%g=o4k5pT6sj>)v=bWytDxR<3wp-$>5UxGtfzaowy{@21Rs zEotkqcjq)t-8}P$+u;2@ZD083!jEUg|MT~y+qcEs_hVpV!JAuddb4`rmBO7@|MJu9 zjUPQQ?dsps7A?$s=blzS{JPa^omH~-wF&!1j@oqZ!tE!zH_XfY{@87=*Z$aILYq(9 zmNl;1_)@#_gLmc6&U=3T>YA6|O;Nktb=+UHeOv44a~f}3vwrd>|L&2$J<)aStUK#p z$bd`vibPzjdxaV-?r%a`#xLS zBfgEbOa5%KBlP)mi^n8L?aT8Q-8)O#ch?(7f0(lU@jk@^`StIny#3|qN2vlxbMEkbsK-(>RrC8?DiAGJDSZRYUtL&c(MS}$sUc# z06z6~7pDMO-zS;)WKZTjQ+$%Y+C)=&=01SvIVL{E?;e(3jESc7n!i+f-`g%M{zQ{= z14=I?EdJeL@~@g`N}u`>14KIvg5_6jqAC5yP4S5)JAA(Gp!KDR5C;WT0M9&t*EzDs z69+4;0Kt6#X%?Nn-2xCO*Y`6L|8*;X6w7J$1&RK_lzsyI&~$GL0O2tXR~%Q=8hPyPErH1%b{ZUAI>iRgV+fKWUK*Rk?$iULq?<=}0`|2Yak8pUZJ zJd)o}_2~`pvsI7ZCagTv=azN@=)mGfSpbxLfUcc&`QJDIVK=}lEWf23Kxvk4GnUf- zkOPpMpve(^&H~_{tAF>1zLo>~><&P~MvDJ;vZr~4KE@z=OEiFgGN+9%i2jn=y8+TgGJ+W3N_?7hhjNo7@%P)?euVfAuGn(ww zx=r`vVGh9Gv$=hHSONT|^cGtI0($^jv+`J507wsWAhGu0!rH@S1!$}UC}H`L?Y5vp z|CUqv>gfH+2KWc-U&loQcqeh%xSsgSqX9}MH`5EKeNFGrBR(!pbz{3fNK+VdPfw1avP`FiKF-nS^xwd z=d}M9M3a47seAMLb2{vMcApg>_W-AjTN0ond`;iu1P)$h?KvbGz-_9320d>MeP2JN ze+S)<1pq&=_WXw4x4HUQp7>XX)u$tU53g+g-h4~rkB2#JtV8mB>G?5z|7)o|=QOv^ z4J`nI(>R#R%D0`K-&P#F$?|`Z-j6&^voB8RrBMHJ8$gK3ms5Y`;x68w5!8OB{{6)$ zfY3-zvtvl{YvTDLvM*2n6Gx;0G}bgV(YOo>;%&1mH^z(Zcw51ac%JxE=}%;BQxiRV z7x{PSeDVdgGz~zgZEB*vllZeO1@Uontp)MI9KIkvX;##Y@gB?e*!ZM^9q~dzZG2q8 zNAb3Tns~mTrS^TRPXq9O)YL@(vo5ATHdfD|pk+~Pysh63k{-pv`n4RaGxh#0IUOMM zQImEL{v?0Na!YJ{QopeLi(6{{FGr*U1nQcasO|Omf4j8&Me(J>E>rvgE&mo9pEMvW z(SnvVe%z1_aA9Xt6a9a_SSQcLI%)lAFdZOyS5p)H2M#ZHKfT?g2mjb=+JE1;E&z^Q zO--8pc&-I)(X z&34+p7P>9LPh047bSv%p+y$@dwghR-+H6ZOw71!o;LpD|O?3UxS+gMskgC}bgmaxW z8-g=z;Wh+C%}yNoDxtOH1hzga$E9jE1RGkWYBmJPml^rTqiKW-O-&Qu@1WZdr1{3* zo0=xB>7?5Xq`zTgGjOIYRkIoR-`JHSyNg=8-fqR*?cybN0BH?gSgPCqJKQQ2Pqj+L zbFES_IzAQK#iwGo_*Co@pNa$GQ*n5FDvpg$#fRflaZY?HE{RXYSK?D~OMEKU#;4-p z_*6Uvr_14Iu%c~PQ`PrQ!!dd#dbm}b`w&ukC2K3gj5_Zq~cg16(1H-agLzh*CvMl zt>-3!{|tH->G`8Iil*zVFkv!ejhi?bvL=t2IvKLY-t)jccaDDOq0!SI>z)Vhnar;L zI>QpdI9Q$#^FzJ{>fV_8XI<_nM9~OwWYgZ=)XM zOOD=kibL-^9i&G=e9F_1BRv3`7bm%fPWnOphmkMIQ9nXHOh}IOFXR;cpnizts2vPB z@>NFZQ*%&1NQa>#LNM|rpJawyzz*6Gq(U%IQ)#kXvmEIU(edD&MyoZi9h3h=BR%SO z>7YK+fRQgf10+XTi7KZZqo`sGG`~h5eGx-$<`bNDH0P@G2(%Vu$eDGA3>f*6zKS8Y zX#uAlb*6?f-~?jyCUrt9<}r?tNULyp$O$n6Ws(f1_uA$O5SFyuC~d`YfhF9!{O zB1dZ$R6deBvzLQ2e-zud3|*np(EslO>3xwi4zVb=fOw3okltR)>6P9KZXp9LDvSMTL79;92l{{ML!55_UMHE4&y|10|c=JE~ZKszWtjs56s*8ksj{o|=ML&o1W zrJ{ZErm+XxJnKkskPQ9rA^GcW(6vUXUQ`Dfx8_*&{Q;!wP5+a-f+B*Cw6*x|s(4Fz zp-mOV(ZxHpKWY~-&n=Lu3m;RS#5JhhpyD;bH_x&c=23QT;6(tQk80JTMSER$o>L$O zlK7%zUh#;DfvA|+{?7uZ+HwpveBh~23aD1tu0nEBm8U-km0c)U1s*KG!${r&mJ02! zn;^EZ36CS_oB61W>KlTjK6k#e#+D3ZLFTj&?RE7GABi#E2FU zVj(TjmAq0+7F2+(qOUO5wq49n_s0lTX`pz;3{DZsL8$-`*V~FmlPWy4S~xKzlX_v~Pp{ubDx6IA|`?0O{ad4z$06VEkV)Kj+khn>x!eICJAsBm9 zCWS{d!Mt~cK>Jq+w1?#pcKx3)^-lz*0bH^N#*CR};!i+(W(f2Gm$7St)?qNvTwH}g z0BHK>2Id$S{|2<@=KlnhEVAA!G~-DCn9ug`Tn-B^7s&Sdm_hq~2#eVM9|O-C7XaFx zpywD(b3=sijUBW{$c&W$m-sTKeM5v7sgncH_7M8;YX}b2Ct~UW_^IZnE7#9HW4!hpU=Ip}p9sqn07PyW160QP(?P0tfjHbOCHSD@J zOos3gn*%0%to`aBooB)>0NBm033~uw9{}uUK93JF9_jdogXXXfv%n)JX1(e9Gt>3w z0B{rlj+w&DpnVy~X+9A^+bcq#`CKy^7;)MZNc!Lg3}4sZuz<4w+Fb8H3;~AkY3+$! z|G>^P7ifTdCI7^TpJ`5>U0<@$WWq0|YXZ$bUJkUEhVVN(UtHv&!3xc1n1{sMjN305`wOFPVCoaDvFf)Bc1XjxJ1&bey}gJ+Iw4fGauOk2viWab6}Z$rP4ty8fRa z#}vPp>6(yhqRBsaU$&-`#{pbr;$6)F$R;|U1I;%$?cFgz>oEl!Kp_k3$IkstG6dR} zL>R~c3<~2J_}gW|=|98urtllswc&5v&1llUAIbsT#OPrhz|E$328MG0w}gd{VDv~1 zw0$tQh4Du*n*6sD?g-HwXb#}6Fj>OgrZCz+a5;?O0LF3v<2ZnOn9RNGd>;q! z0PVM8^n)D0Lt*Jm3Zn^AI88-f!y}AO`zNMz05eSTGdX}qIe^Dl*y9|4$^n#_WDL;0 zv_Hcv#-l$yX3S>voUm{Mb6NNk>^zSHn9r`C;y~Lg@igs+-~bkJ0M9TU?frO`16aZV zJja2yC(XbzCS%454qzn*@H_|b0tfISlku^$rjyOECM^ETVKnW7BfQFi_CMT=bz!m* zL=Zs)5kwF{1QA3KK?D&*@P89R?b6WOE=`+W47|`))9YUtr?17Xh|_g4*Tw1Uu9Zc) ze*c*XR&9Na)_rMBjTTgCeQoPrURzfqnvSFyU6J(sN9-3hJ^yMhP1EyVb4t|o{9CpP z)ARRr)%5(AvNdBv&%d!vnx^Nkwn@|U{K;;ZSlTx~ ze=t5x)Ay&c{Wqxiy{YN^cPU6Z|607BGtlGfiX(hoFHXyfA7mh{!;Km#rQzYE zG%P*J;kl$VjBcBT?b@bcx3+2M?wWxE+NR;~wrM!FZ5lq@HVsQ18Mvfv8ool;T{5t? zZ5lRaX5gu|XB(bRE+0xRbv4pT~XV z%wLa7_VdhTe)w5*my0KGQ^tEL?eK<|rA>srO?MOs%BZ@fs8l}6C|16`gp;Q{i)0eXLRdEN5kp?wC;vK z3=mE0HwK8Nbrb_co7YZ=rgaGeM3ZeO14PrDzX77nbM8c&=gx_yxo!hQlWiV)9%QrmS4a`4<*}9Ci+$@z*-Z1w-vx=qRE!jQWHIyY_pllGt&xCY-*p` zRsgq&eu`|zndoP&04@{#d{}-jQ~gYQvJEMk=q=QKCVCsSkBP3M@|o!URsfrc{)|3l zCi+V&zs&XO%L6HPW5&zR^YD?q)8j^P37Omrd-u+>C&B3pSTx(g3rGqvB9WZTem zKYQ^2=S}oA)b*R>2a+vC6MrZVaK=R6M&&WlC1e}RMBmQ?)SKvs$@Zd&ew+tbYN9L2 zcA$w~7{*`50~DM1tNBZx&kbZ-&cxrs1FSXC+jxNSCYts#jxf>t!_xnZ2bgN&H-x4C z53*Hh;v==ciEiQnTqe3j6u?#!-8$-0`Q#{oN)taV>eBcT)!sr$z+l18q@nN*tmND@=hw;0H(T*^>cNl$b z7(FnI9@+x_RR2G?BU;nz4VCKuGf4m62ALp2>LvdJ2tKa8c4&{MK;L?RHA4G~2Pw&> zlwYdZ6BQ{kdfQq3VEho zDS8(MG8(V&r4?3|bDRxqwAJ7%P<=^*gzG2$Lk2!>ei3x-N80HH8`41$8c0oD@t5ro zA&?2tw!!;BM4Fu6?PjD{Xt|pPM;fj4cV+AhvCqpbk=OnbG&94|ZE}Vb7SgMbT}$c!K;E=@l?lje&c*=nMGP%G_*|V z4jqJK9tKxfk`smUHPByyhIu*Ax!XhCTJb!`TQWv3x_Q>Wl$6v50aOKqatnB$O!`SF z=JrPnl1 zY~f-KgvNz!v&-AAqIb^gdAYxDSVKm9wEFT+fnU8OEp7I$)8m8ct2?=4gE9K0Au4ZE z$G>DP5DS!|MX!JYoHDCmcbTWh*rGwnkMrq0GNXkGF)n$07t4_QlUBiXRk0Hir+VCF z(cNLlWO3=oK5K5W`b2rFmA(xzSH|p$+v6AlaVtWST2!>2rc9wK_C?#3?t(N+s}T^I zt;CE-OA^~ASxPKc@}nVkl|~#GBc=&aaZn(>HS4t(GA$63z*9lecZ;MBS``D&CFZ&Y z0AJX#-&@&AazAxpSzN=Ny_1Ia&$K{?7BNwGfd#Bw(%MQ#W=0S0I_p}_Z?RcA+X{yi z*zPXrr?$w1_FFkuqD3uC?4tTCmdu!ui3MQ0B3W278Z1NAp`o~nNeP)PxU%%LwEo@N zME88+7;ni{qVEO~vJ^jnYFjd}aG-KCwCHK6gHAVO{_t~Pcm@<#DxSSkw7NqqOdFEm ziAhY$?bs141GcL+@L1+^(MmEvdS$j~d-*N5kUw~8A`DdE-ibSY0|6{b27srX;Duz% z3v=V;q^Fju=>R3!XCZTz1==qz1e;pBcxemHA_#FE!Dizu+^jju>m6R793ybWgQ60k zuth-e&MHoJ56V>QJ{)j&56H+B`^Rpn64u<#Em3)^4M5~A3iKXO9w#UZGhis^nWumy zP2|!>ywx#~4sWcOU8&mo4YTgEhvx=_-cg2`IQ4{ zt4bV(Y*nmve1>e0PB@NXBTt3P$CsyuXO(bYrqD+XHY%d7>~gy`9R5UM(_6=QRY zKf1Nmvm@cHvII-w_7aOA+Eh?SbZleg61Q^+9L$3|x}|`p`gReDT9$9x$nh`znC-TJ zdkF`e8ZWwST(W=8$mn|uW+&7Bk6C4pSq4B!+yFS4c|h(x(6ZhW8&d%5eo7-NzlDBY zRC4C@@CzKb$QrOo3sPXPIAr`FU&|i-K^ze8PUHLWXPV|Tfkhp<#v99T`sE*23{Sg@ z?EV&wP;Q+(XWitf->ehbJQ-tw%Hp;P3@eC_h2p^j3LrgO$Xo*u{lx3Vhsb=g&8qt7 zV^v%P8#V~{_bx5Ufc{_caOLWc%j6c0WRbty=T^EDMft$-gy#;?B3P1Uge*U{x5e_J z2Z{=5I>aJI3&3}XUcdI|D8JRqAGnLJvt(IRC#)R zcCZ!iN#JeeifZw!Rd&Jx2(+5)UfPd~t{3*FEd@B4Hl|G3Tcng*L~z?UtM~3lV`C=| zB~?y~Ei*w<(tRoIB#ZlIcZ^uQy8Vx~1b({^6*K%;kAfN?Oug36Q|0&$rMX z3{OJg8JoIj;IM0k*#e$>+%MP~Hf>2rQC!dtY;9jI?3a1REYV`&xwqSYTp`_gh2Lu_ zUmJ46SLMY$m0KYrdlmqfM(+UWbB~STAL>KfcFIBE(qVwDLgibCvpn6)$1AZrk}EUf zx%ew*C0yqnwxq)c@A6T_!`cprYp_+eg^htikt+aClmj5Ge`eHDG4RG6UQV^qe~lzH zLxCu(&5}9EQ@=GXS{(#7@9A8zEO=glG+sS166CY>u08EJ;5olxU+9even}np6f}_n(bf@9%0iT|Z6DwK`9TMFSTGm1I zv}&bSn+{woch?heQWZH4-0pI*EG}TV3pll1^g@p+4)q9in}s*7k4o&4VT)Z82dX7W z0AX~>BH+{2{yPs0(p>x~>3pHg6-H;4e4va?O1Y!(<$2lTxwn>DzzIq^M5U*A;$kL4 z`tE)fN$d#aAVxhSa)m0CDcqX1j!M_4bnc)vcUDw_NX_gQ%F?*HRn-=SQ|3I=Cgg@B zNE9l4HcN}bxhcJ3uPhEM^`@^@YrCbFXVMJVbrMu}1TJ~N?4ilPsZ$ljW)p4k(XFCw ziAr9MEvXpNE&K#&xbWGho;ZtoKp6#mwBl~H(AMjTF0c6Ja9m7L!oa$&v{9~u#Ty+f z+UE7UOQ_#3RSIQ=r>&gT2C*Xd;YZI_j9n;rX|Pw+Zsq7Jj*3=Z8PPhaS`cp^lg!6= zQr8sMb+Y>sy#kl~%#(_(zi*h=mH>(pZBv5@93;=qe%mFsD6;(s78nBkZ5FRompKR8 zN~@x6Jw+k5>sm{}@>pI;5Rw;lttQ`CH>G}rJL+JEj?@j61H{C96|%RDXw_i@$3dVO?)zwx;L+UkY{fiaF zJ!I90ie#}s0q&)%Mv4jVz-`{bG7uLhL~rlEea-$v4iwsb$`9dJ#q?JkYN0#HmJsAJ z6DEwVfd01Cm9JZ(Y$0oEn8^D;DDTW`&bP63GJRc^8@92EHJFb_PCTm;Jn z+M6a;F5vje8SdpHK!Jso138E)iHiZ?7e6;_UK@!I2*t&aP%t4!O)A>jg7)xQEw&Xx zFUTx#_(9}^g0_QWAFRA^RhR1c)#tZ;{DRmqr*I2jr>a6*MNCdl5n_|QO~-#17g}Z) zKV8`#Vv>@^Ck2{bogu_q1Ge&t7P+8u6$4Ku$HdI>CEF}kNb8sOwNLGqe1DwNwt7tR zii7D&uym>7R*U=z0I{9p=0i?Vx**tuWd%co{wiOdW&^Of=d{>WDB9qa70NULxaj)c zt2aUcO)6DD#e4;V3mc<0-@UqrP+jd^8J+h*;&N*UI2R26d-o@j6+WdX3M`Oh6QAq{ zLgty6VTr3&fGwT}_jtF$m5AarZ~w%&ox%`X@!AoVK+p7w0?(SLq$p5?__Q`1lQJQe zkB^G#eb_bnHNM-x{!x|I!ThWr<6+&*!TkR8K8q~1vlWOF{;mKhnZ?kF<0__eUHI2F z$9I$DWJW_;9S2d6R5>E*R&XajK3jx1-r`>Vr~>H_Qz|_TaS4LT zCsz4dEFTmDrSr>FUfBvtq8e{WNXUsF+_1*>5bzm}^COC$+CbwQr9G5H^MMlI12gOc z6-5AXAPkH9w5~xCW?6m`qeLhuobXnMm#uSrLoMB2_KQmN+Nqv23zr-Zu;7&r8IwyE zdb$Lny!?Rb%yKtmPJ!ZEpA@340`2owUFph!*@AzVbzzjy&2~ib3Aq)#g>TtfX_*o= zuvb;JE!nrUB%4;=*yg9C0dZ;t*ybpQ%XU}Jz1()y|Lfp=%z@Gr2L`7&5FU1*O2;D( z3`}>RIKzRy84eU@IxsZTfy!f!i~0?OP(Z$f4hQXjt*vq)O@$k012h2WQtd+OOpSA9 zwF_wgdKc}1u6AiU9>%$EwF_xYl=j;eRlAT@m>X+dNK2RokJioIOwRR@3u(Fg_G%Z> zYBTNMy^rxGFy2(gqrJj&*tPE?7t;Rg#jI@q4lh-^@Re$prjJ3(JL{@l_;8I&)0rW9 zL$wQk+tJK_v)YBf@6h=)*D-2;GfncA{Vsf~+J&^*PW<<(FQq@Mc41YuOVgDh`Q6nn z+-J)FK(z}$scz2yNVN+;V>G3AwAzKoP4XwJUHBDibK-wr?ZSVuHlp;K=pL~85Z_Yc z!l)V-(i{=dt!i8-)HK(xO^pkuu=-K_b~P^SU}}#}H7@LIl25B~VTOs{t;U7jO?*d< z3*R%*&Keh0}7fvyycYSqpdL%#KTNh4c=@UJ@#)Xfv`q4X9R^!47Q~bF#E}UngPyFt} zCr#yhs>X$06aSeS7p^k#m(;j$nW_DruW_M|$y5F>ndFInrN)KpOzCZ?ap9XRJu2VE z8W(Od@!zR&;onW^e^}$fDte}vUBUx3F8st)o{8VM@Q5k?XEiQ7#_k`r?}cg?eraP+R#pAF+o;A>s9)B`cK`g=g{g3Q7a*qP9& zR!`SB(>vXcrDvQeEWK90|HhfZGHdmB+&EKMuUfqyGtPuTwfeJdoT&~4wR%5!L#^JA zP`g|X9#&T4O!wy&mWOesdOpC?G0ucBwR+!doc~XuvNkZzghy)iZ-a6EGt6Q2FwXS- zc#_>4svis`PPL4zjbNf^P(?g z41}C0opz#fz=@&noLYFv7c%-zIMM%=6FrBV==($uulPd7(&J848l0%^bfWaB6UALR zFXOn3>PaU`XPoFh=tSYH9$s`@MuEb=aw2@;m-A?rFcA~P!iJ?7CRQKv>Y&b5XMCCl?#NaL`iu;@x*ylt~(220$ ziN5{1T;mBDeK$zxyGcUt)e`y(B(0vpNf{*yA10x6t%TkIdbo5_#?W91l_3%adr27T zCt+!>&I_KDF>t+v;!p{FvV{J8J-qRxjOvXN`fipmc&&u$bu5oBWprOJp?`>kVy=X~ z{u26gCEUGV#=x5{^z4@L!Y&zuZ@RQF@VijiDQnjXyQb$Mcc+ZO1rCI#9SC%$iT<6< z&xrD|1L<%ta-e5{1A~innc|%?dKWq{u+V|x0tYHj|50YxP8r384sTN>xE8Zoedzk~(We${<>HHBJT}a`?A5ZPJ%z?1nfqurXH1R8U z$>>||z~FKRs>}8GepC8ucgZNOaG-mI17U^E-)-X8QT!DS46bmX%J?BuUC!*1(ZAAx zp_R>bQC@H$taPC8yaUze9q3)Dr|Wr3uNU2SAG@YHh`VJhUFE>wDhEod^fq+tmeIG$ zfx>DBx>q^0_CNcU-u@R@T)HRX+b->_ysf{_^enm8J21H3f!_6cTH|-i=%MS^9Oz%K zm&NyX^ZnScTSo7P4h($QTnF?02$^K-cgqOd94KwmWg9?@1JTKQWW0T|OA8;t9CZ{mDIwmJGIig7}kICgSxke@@F*%}1&cWm|nOyQ-y&maIj%bn-nOq8!Q6p2>Nc-0z$8_9L3)E^N}<@BAjcowqW%e=<3uNv@H} zon>+%CU=U-5lwOpOfJOaZ2R>3e#Yd8Cb@bhcZkVJOl~ieBbwxPGr2k@H-gD+XL3Z7 zT!6{F&*W4lw}r_OO>&!!3x#CTFKcsGM?x!1rGD_PW=-ICK zJJdI=Vb86wU&hiM4)pKP`<}q&<~|~mzJWCkY^-VSd&FA(TcFnH^038)Bu9Pai2X7u zA33n}qd&^~KGNkClYAw~*Ez7X&Vf>$9>+-ESI7FoEiR;foYLP)<@wlwjr1L5-zK9! z5AAZGxYL2|U3!09w?%*7=)0!uc3>%!H}`YY*N05$Cm)be`ow{rPyU#`@Pz}thaKqs zL@(E&k6c)EULOZEe&oV6mVB*@?gKKy!k$>VuqUeCo*44#=b*PI`n)~S@9n8wQ+-Aq zkkPlWCkl&tqOdhflNH{}LeB?T*y!zvjUQy8|AQ>8oJG5v?`PnEjA~U+l(zT8(yE@? z{cPB+*Ed9UIMfrBLp`-T2q}g6=qSiXD9lH(ARldo`IuRdj~Rvem|KvKVqrc?1^MVG z%tyH(A2SQ{(N&O-d|^Ij6y)QE!hD=xkdNNNd{hhaacN;bRu<&rrowz&T#%3c!hG}= z+$GWS-ZD+jIedD3yTiv_kXwPy1{gP-gF(euQ{%`&xI}==u2siJD<`^$wII{;kBg{`6V>{%FKVbne&_PH>Z%h#?a>~rBy z=k)fOxzB|q7xe4-bp5k_&r3d$v9wzj!WCHv^?fiTW?`e4g-Vw!RO|box4sW5$NHe3 z!jJYrx0r>#&-$R)BMS|CjFbnp7h!i(QxhHLu;jxshCY$;r%z;b9F{M}EB!=9>5422 zUXg`HJPPwuSu(Rw^ZyC}RBkYNEp&X2=^--xsduNdRC5_t}mFbQ-Zn-m9^rCjOx5BgeUdq-+M$x>B%hgGkWC_8ADHI zp=Z9%UwcGG@BAzjp3?Ih&(fm&R8zV?9g(rrpM@d69uMke6gFm|x-m=ZOOxwe=r|yw zQm^-^GXMwj&uZkAOBI?>H!=TjMaI#KHBMEBJ! z-G0roQc-id{(2eJEGPQ2oT%jMveNaBQi*th~LN%izmxu3M;H#>Q+XiaAbHSUX5J zG|PrevTN#P4D@tjBbB3{o~~+YU*T`fWvHu{QE@u4)agXYrOO5eG^gt}$)2s3(VgQ& zHOGmbJXYTR&9Yu5OJhXoGxi>Q_Q&@i_w(lWVDM)yJj(k05%lbRu0Kce=Q6r)aiTcF ziE5>U-bx9Bl@f+3B~;owQ5oq(VM#AH=732)=6`V`Utb(LK+J>O3b( z^PC#L;yeADPi^D-P9JB7zH?#RF}=Pcj>=d%--*8YPL$?5v2>jim8YB-T=2XU-WuVd=I;(^u=Q`1~)hn zUU#B*tzIY3Yk#bh-2h2e;oK% z^K-Zo_2;kRxQv!K0OG^1&HReX@D&rk;WB*H#OKfdG5vsvUuovsSpFB9^Iv=!zGC8M znE8SpUp4VBaQWKz#$3OEiC=vgKK$04f05;n@f8!l`X}dN zU~(>oh)4SS6z5AP`aXA}a8+Lvuj-49*Y-tkVP9-4?5oLCe<7p4!HL4>PLy^!(Npil z(yMe{!xu6tUprAe>O>{4FS_&kqW9XqSX$5*g9Uw2D(s7%yuMgU;dy!-{MCjPs=J%?hj%sQgp7f%5;k^~Q0yjY?%&xZGejN&i}mA^?S^^#ENCt+y2&hwv;(LY>5VW5Qm zs%#8YWuv+)8-u&DQQV!4rMt5+Se1>Ts%!)nCwM|egcV{++ zc4nirD;qsk*;rbYjb4gJdMYPn47w!@{!K!dk%PjF9Q0J=prK`clTm8zmHPmas8bLU(To z8+%LW?IWSoSHfUl38j1W^xa>|D9~EhPzlA}5|+9o6!IkW=Sk?kO2WpgBrJ{ZrM>Si zJ`ZV}Ms1P&m5kyO61ty|{^NK}8z=C27ys}3_`Hk%_d|T%#sB+aRG#*KUz3l@Lz#^e zeNlNBhwQ&gR36S`^8;dZ9#*jbtHZvMv2nA6(mF|-A1M7$La|!HK&_7ypNw|05g!!_8r?Q!>IS8Iw-QIQUfa|98(et*!a41@&7x8 z37aGgy&<9DJHk8{aHy%Ni4Jqv(o-^ePRTg=l#Clr$rs~Ip!DC85Z;u~h(}=p<@x4c zPyesZgBWt=|NT^l@c98_F2pQ1`Lv9}X&KL)lJUYR83U(eJakG%*J&9uPRqFRw2YOf zo99-hekG%Si-dw-uLtEpVZL`HgpJb0`4&y?9SMbv`uM$q+GMkYjq4-~*7rfrZxV{u zYz#(aqx;i7Sh`k1{}+AGNB8+?9}KRQFz|UFZ2Z0Xe$z8W&oaTd-{!E)Gcq=wmXSXr zqkN|MetRizy0;se?>B`BnlzvFz&ZG%!q3aEBRVR_*%yLGcuk%L*oe< ztIx=o`L&EmU&}cEYZ<40-F&~-ekEh@9SH-h9(2DcEU;BV|AyxKt;ubbFt9<={)e2m z_4jS6A$?P|wBz!S z#us#dsGi=MYz)?9V`E)5`uAjC{2p%oT1K%p8$GpuUm`uc0LQTQkuOLt^pV{I0Cck6R;@;5Sy zRL&jQe>uJ4Z)9|D&qkp-`!AQ9#)QI-Y;;#=qdP7K)mHkqlg5I|j%@T+XQMAQ2i0^v zobFfYj%*a@{!m`ya?m$E2R(8Q3fJbKH!J7j_jmp`GWsa(zaYDm@}qVLYYTcdR<>$> zz5=cCkj9Y|9x{bPd>+#Hlb$;z{*TX{`91Lb2flh4zWF`y#pfZ7MYS@-=OK+-=~`^v zTuzl;Ywu<2KbFV*9wEp^`~RG`m-{MGjdRQH0Mucs9vETvi?8z-Ud9X>e?G$GjlRT#9bLsuK>DlWTVoOa z_E-c(U%osQkpZa)zBm^2r?F_;Ggi|rr5_*sP=!;jxFJ7Rjz{7NU4C|dtfDbB6&a7@r^4?|h2MDoz{e^gx2M9TrlM^{DmwhBNGVIj@#U#-O-Mx~BNZJJQ&BY|RnuDw zC#0f&N-B<*==pbitRkqUqFGIab89Ms8L24ToQjk!sp!Z|MKCiJZCR-Z&q>wvAex?v z$kbH0YIU97HK@0}3J3M-<&A@S_3{q6|J3;X4mP#v;9kAFad59*-Z8jWFPAoNYe+?8 z*Z;hJa=yEOSqHC*Mx%0>X>BJ|JbXgMlP6RhIia3=uIIQ4dL|W(Evbk-C$#!!Qjzj> zD&#yW0kaMsibkVynQ1AXsOUMNV!$UVvOZDIJ*S*d5qvrouK!F$>^Y%zJe`W>|GfD0 zA2iBgu2V%c8kNgTi}9KDZK*?Fy*&1;nQy>J6+1ss5&lHQgP*9#|3pQ_Co0-LQL+0I z6=^3`xK65w<>5S`qWO2JXfx^|c?iw_`&3l5q#~Aw(1O2DMYu(mNBLbvcBg{g{-4WZ zEN`=J8q3E_i=0%k<)n&7PO3OyD)ZPWxR<)|rz%|UrXu{VE*IWURRrHn zMdaO7?R~%T>hb4%a74ys?N5Glu{EPcQ@pf^#7iGZyyn>3=XZNL8jZ?j{@sf2k%0L( zbV`0xeSTMo-6{@#s^ZwEDw;o4vG-FIS=}m9x>e18NkD!}L8PJ)shTfA>^B!iDmsvg zSh~Vjk5n8t_yo+d6)UHi7AvQ@?_=qiX?wd>gu7Kd*sUVJTSY~;ieplCQ#mym=t)Je zr?;F!OX*2PeNS&Wh34-`MPrZNAN#J>^)K;9kiN5>ibgfP%tV(y6uK8Grb5+xo&=R7R=%H)IL-uwwozO(@Fx@8(=}pIL+)KTt4*9aaY1V&>|3&<|3&h9tUrE350`X>h zfQ}*KA@*NVcIDdfkUb>1cV9amvfm{4h1d3$z0q{vVY+u+Hy({Wx=tUy?#p#D>(G(w z#zXc{v^=jL57}3evL;^t<>z91wgS@juJvgsT%U&KjcEvPN;|hdQV-F^(s29&and&_ zyOPnkEBPz;UUovoaoJb7EA16?yl z8vGm5;QUrHn(t0VaFago6GUjlZK8R<51N!4)ue^q3XeLh*aqL9F#V>GYye{!FNR3 zV?!DmFVF|aFR~9VWIrRnIiK;H>pR~1P4w7!yYsY)-KSOUy(1v+xRjQ02)B$w?0q7% zs+MtRYZ-@wr&Sy?@yolWqh%aYp6=xrn(OIt2tPee8xO+Q_s#<%*Z0l?D6w}Q;Fo)2 z9uQ9Kod-k`d*=Z(w09ohAKE()ICWY@_&;ue>&aWRc~;7e9yo9Cpn14QTc3AcrQ7fM zukvW~obXj1eSLnE2gWC<&wG#Wjz*($ncwXP&!}iTqhi+?701q~=boc8DuUN}(0Gjp zvFC)=cAW<)Lp+Eb4sO;RBGG76E;G%0Rt23^G5D;Csb|%5&kZ=E!g;L+;j2A}JtwsK zYdvr#TzvYmvz*O!dL|l;%4Md-_{{pf)FGym#Kwl$vu3`*Q5DT+Rctw{;*ql|3eTzt zomFx0tcty7Rj5%FqoXQfc?>zD!k_3thfxp7Luipi52~*5AeM*F+7dkoU*pm8cb`!a ze)1Ni?72mo7yD~HaDK~!$hSS(`h43}9&LS|26?o3Y04mvwm$FL(A(c;-6z&>X4<}} ziu$OE9Z?mBqP_i{az@4R>pW;1+}qzmtGeEU!mE4x!>ohF`prxmO+Flt%J0qxm3-&= zTRo$q`C1QB5_Y`tLn*P?sOs`|Eha zgTgmG=hjt@AN0WWhAuy{t|I$8Rd49>6MjRNpZYgE+IUucL$B@>x?w!T21dr+`)>GZ zT}SkyCr!`ozF|DXwnpe3Cc4YjoAyG}{aWK*%g6QQe9Zdgj(-uq`vUQ1{j%c%@n-$f zHGKRzd(W)l;~_RYQjg-{<01Awa^E<-w;mm)d)J6wdf|xiAe-KH5xF<~ykmPOX8n>z zj)&ObNZMH=$3yITgkRb|I3XSN6VlNUNJk_m{hZxOoAmR9bhxs<94B^yv9atz@6mro zljo%Gf=?$S@^tc7+SJ5beMq@29e!W>SMm(D`f&WVbcB8BDC|fFy`PTbAE%@3^K>-F zdEpx5Mb!;nge$!0Sm}ko(hI*`w{LP;eQ@2Lj)h`n02L+T2+q{|O6=4kVo&8uNBwWoQNK%XbCLh>?deGQdO8Zf zuhRzDd}zKs9aScp$bQG|>1Y<(ZRrRWc~P~*i^zd=w9WE@Zr1bh+I(=T={Wu`__Az1 zG-juxtxq3_&iKJT*%Dw#9(j8?|pN92=XYeY<4J7dGvL5c$r7e0PAHx~*N?wfeVT zW9R(1l34o&Oz>AXYkvA|cb6O-pB?{Dk&@}t?1(CCKF#K5-7BhQqjX=ViieM>i2OrES*B03Nxbg^Rr7^v zQ+x=C5AfrR(XXqxPw{DbQv7KZZ5ckzCV0n5Roh=K{KD|@8k(&6_aqMO9XG|7r|?Ff z=4UOoghBDY%Jga9_mOocu?ZY9)Q93ft9bA=6|Oj+Hm+%Nu|JIgcdA$@>phAOUh&a_ zs*UmD|0VNqRo0EyrD^l=#*bATk-eyIr{R^)Rm~nLNBk##bSvVcDqazPGqK4!=t2Bj zs%D=hHdG{SEq0Rkj)nNE*{X#|l2P*iiieoaK<=?998_Ro1{QSg@Mr=`^5x+fYAMyWtWegsCS=IJ)#pYUk zNySI5EW@Y0*K%K0@yLF!W}_y4gkmcye)~s0QW5`=ijE8)^2K)H`eY1fSJC{Dio#4E zs#U@oBbivd$y6xov(Q zTuDBJzvhE-O2xiYs^+&S-xi2u=yES+hX+4V;r>9yGudn?d}w}KMNftgN8VC#=pU-)m*{>?)$~01=7IYY6{o}x;h+bH-c%7UKCkr62w@27BdqB4v9z9ig{W>^iBULw=v5eHcJK z%?A3x*Hy?KwX8dd50u!HioK`Ujh+55QCmmU)+)b|4$<|R4Zl{|%XJO)p(DT0BGJZUAE1Kn7AKyyT zd_~0$H7I>>cN%tlp=v&{VuvfXw7D{FtxMC^sm1qJzU8sw@2aN%ioJQGJhvuI(}QJA zHu#1L`DTasoYF}ZUGj`4RrAFa`(F8ugFN0BWYX+k| zgVCA6=+0o+GZ_h)jHFD4CzBD#WaMQsN;4TXnT)zjMnfi}DU;E-(1zAbMtdfsGn3Js z$*@mgBuro=O<;H?Fai@8c@r3=6BsoU7!jKCyD-XuopBu337M%^Sv!z4!2Bu2|5 zM(ZR-`y@u^Bu4inhJ7+4VKO6WGQ%^O5tz)#o6IPk%&3{nsGH1an9OLJ%xIa+Xr0Vx zpUmi-%;=uXuuowmOkpHVVR)u60#g`yQy8UF7&TKEbyFA(Qy5KC7%fv6ty387Qy867 z7~NAC_Nk17sf?tl49`?XU@D{WIY#MJM$J@4-Bd=yR7TTOM$1%2>r_VjR7U4iM)y>P zeHtTS8Y5{M!!wN$n8wJP#weY}sF}v7o5pCE#%P+xXqm=noyKUN#^{{J=$^)~PiG`d zXCzH$c&0M~)8$)7x1w}9qh>mzZaSl3I-_Yiqh&gybvmPcI-_$sqkB5TK7)}kgON0Y z;hDh*%wXirV3f{a)XZSi&0sXlU^LBOw9H_%&S139V06x4bkAVegN%eABPq!61Q~%K zBQMA(4KiwijJhDBA;@S7GFpO+)*z!j$mk3*x`Pb+Oh&>?M$$}%XC@;slaV)*Q96@R zGm}v_lhH7f(KM6MGLz9dlhHnt(K(aRJ(FRd#YmXNNSej)%why)G4f_HN@p=@W-;n! zF&btunr1OtW-(f4G1_M_I%hGuXEE%v840r)NwXQA*^Iz!M&4{j>1;;LY)0K|M#F4I z(`-h|Y)0#BM*D0==WIszY=%9Tk&w$s%4K+R8G&3zUM{0Fmr;|;sLN$EYGLkuaZ;G@s#_&j`$C znjJgGkh6RkK1&o#jjMfE=_63a21&rw~$e~kWsUc zQMZuMu#nNTkkPV`(Ylb)zL3$mkkP%6VPC{ZSj0$L#PBR)1Qs#!7BNZ}F=`eu>J~8? z7BQL@FtaUxVn*j;M)zWdy?~KWz(^`!cnTPS0!Cf|qqKlgQ^2SzU^EmknhF>#1&r1L zMtcDxvWL-Kz_1rG5(*hfg$z$2BT&f5D`b=wGHMDLb%l(ELPk>|qot71TF7WGWONoX zx(gZhB1S?HBdLhtDPjbQ7h%(NM%_Dq^%0FU^h3)MM(Ywr`w~Xy5=QqDhJ7g`VJRbN zDZ{gr5m?H|TgoV1%BWe&s9VZtSjuQx%4k{2XkE%^U&`oQ%IIFouop8DiWy183{Np5 zP|V0HW|S5)YKj?k#f*kxMpH4PrI^uL%xEuWbQUwZiy8J3MnVZAsf6JvVFXGTc_oa} z5=Ko4qppO}P{L>`VYHMmT1y!1C5+AzMt2FrUdl))Wh9j{Jf)04DI>3xQCiBVDP`1^ zG8#%5O{I*MQbubjqrH^TS<2`xW!RT75|%NNmN7ib7=dMsyk(5iWsI6-jJjovhGmSV zWsH_(jMin0_GOIDWsL4+40{Fd9TFMx$ zWsLSRMrRqLyNqEkXC#y}lFAvLaz>z>kyp+rEoan}GwRA24dslcaz;xzqqUsTUe4$& zXLOe{?8_Mm%Na?_8J^{gz;Z_3az^QLM$K|Y-Ev05az@i~M$2+W>vBf>az^KJM)z`t zeFY<71tVz%!?S`BSi#6!!6;q9s9C|NTft~p!Dw2+Xj#E%UBPHy!RTDU=w89FS1=MP z7)ccjPX!}T!N{v%lvXfmDj0PYjD`wEQw5`?g3(&RXs=*&Rxr9N81|Kngq4h>l?=~H zMqni)ZzZF2C8K5~qi!XmVI`w!C8K2}qje>teI=uFC8K*K!@i1buVQqrVsx)!*ee+cm5iiHhNqGdsAS|-GD<5M zHIzk`u*2P5eYhUX4O;0{LK9gNaD7&Uh=>h54P+`(wN zgVAyaqxB9(`yGtVI~d(}FznTggla}oHN#WQ2vjrjsu`u#jGAgjT{WYjn$c9vXsKqj zRx{eG8J*RP?rMg8H6vj)BWX3mvzifD&B$BLC|%8{STZBXQd*R#fMZT=<{1a&0??v-|FCzQBII!P~Bm2ELwciWn zRWAm=>V^ANFVf^&N3VL3`>GyS{AzES#rwS|+wVoielPCW@5P$^Ufi|ci*N7uV#9tf zHt+Xh>wYh`@Au+hR)7hZpX5y(oOwiznap;?%odr2Wl{@ZY?6 z@^4-o{F@ibdtRix=f#und7&KfV&M@l9y#L0fg@fFe&36n_q}L*-;3k#d%>Mv6nA>D zv(pRuyBF%;y$Jo?i-UjnBG~0cW0w~*Kk(v6mlrEP@M7BsUgRA0qT-OMt@oF`t-}Ad z3iaJy+n=w3y?;{CX!@S$#X$YA-ZkS3fvfFDbLFDR=f}!kguumyUjSGjYhwU z&kVc&7tdUROK=G;!6mo^m*5gyf=h4-F2NBbYsu`D~R#^zY71S@c*hDv2-uNCAb8a;1XPdOK=G;!6mo^m*5iozk&7HQv()D z@9fJ)`gfLs{Yg6~XPN^ z_nc$J`Fz5_4|_(w^z(23Rd^&V z;TIkOsh8v-%d}Szk$m$hMx(|fkxgOexn)g>i-DVnl88u_MMuYo2HZqM-~DvoJ&SLC z=kiZa{Nneo`zpF0S0n2_{qcKMdwSj(7~_kKIxC|gX@x_gS7w8`aEy^+%%B*-}H%>-%1Rm{5SW( zPsAdP{*>QQ41|BAg{Z?x6w%_ZAo=Mx4kSvohQeCpFe08X# zI(OQHipo_bxkXDVO7yr3#}q7GTU1b5zN)CA{F^0IFuA5+mXX4QilWu4OIA}w<+Acs zw5%jlRbEWhB}Ek#l}jlUx@%R@%94U=T3NDkX<0R`)afPF)vGG0w7R5(R)?xrEv>qX z)`V782`{awD!wzcvWixhgw}*gR)wf)O=wN1qI^{em8>e(NlS`WmuSqZOG2y5i>bVF zX{dsV*Hn$Ar4^N{OZ3tdghF@8UFDjP6iiQ~pjw)wBor!NSyEYAT%>Vm8A{nhw5+;l zm4s_nRa7orQ5B-9&}yR&l~pCHD718SNvJ3ks+N*V!G&5Cx{FFHt5?KADkxc79-@l! zB}^(W#ne}#%SZ9jCMAP)7}p9 zhET{x_H&qQVF|VOPv_UE!fPYzd4Do)>VHoSdoy0f+C(C{$B;D%tYjf)dHEF*ClHfE z3n}z%i$3-WtiGZAG8uIrGiaOtd+B9FarAQozp}ji3K`Mm{Uc+aq$%Z!r6=zw`99VG zBRph;UAGe1ZA8azC33_O9T$86(J2Y9BI=RwdZN=34ka3pLex+4kkCprSVDzph=g{c zL<##5xg?Aya!Ys_(P#<#6S0Js6QxKvfGADED~P-jI*3#W2NL-ubP{DrcqLJegjW$w zm2ePIP{P4Pxe{JYlrLcd(LxEYAu5z`2vMm(db6qaxV(d^n|@m&M0L>pe%b0g8VS~&k zivC!>!dE6;ceFzsAAc;pQYO(yVP<2^)l)4tjsd(Ac5Hg@S^bH$vk?{6=5cWoWu zj<&t@!uA^4zFXTR?)odq^9x21&50!-$=tMW>-*33SZ8m2;kgfP*k0^DW;yuhp3tCe z56B1NH@_CTY-^TVkUhE#cV9^WPcZrHcbGE)eyK8PV8r|?hKPgkO`&jtDBtcr^ z-d1~DFO6e+?V+>L=vKwub?8hq+La!SMq6uz%VMOqwL4b6bgg{<<(8Tqlm>|3{L-4s zj%G!p(e0rm+V+5aQF`-hp$}s zrKF48L>rFnzLIGBI=6G%E_d6NL|fOn<4^vibZeH|`K-%H)HU-=G`cm*J$U;jcfEy3 zYk)s~;NIRMwY$B-tvoAT70RwX7N0k#Yr>gmw05s^b0jo%>mN6FhYr^sQ}X64r><|t zBGzOJX*td5y5}5ek)>NwTJvAE#|Gqe4LnERU2nASw%TLSXtd--?PHtrf$pgAhX!xW zau29IHegQIl+#+i+p^pPHb=Hesig1&xBNh4YM4BYgDQOl5?&wF2J`E0MPIuec69*d8L+|FRv z6*~Whz0#Nq78jh8i{AE`q_@vVy_}mPp>Lbp$I>-F7O|!#);`N(q=B2qN25`rjh@!p z=mWhRAGGNG&~>x$9vcu1xd(U6_#ztZ>aR0sqfKeO)<*pdk`j$Z|7C-I{&}AU9k_MZ z*=SU2)(?jD)@zzxuPJ)knZ~qUYaadJ*CIqmpF0zc%BV9pZ}zs3+u0TRLVh^z;Y3|Oki3s6%c;zfOO)63 z*=JgV)%HZUzBq7`j7Ho3ON91=%eL20N$oeBYX;RGi(gK8T{F&chW>8wTw%z0FP|l^ z>&A=Wv*vZlNkO%HCFjuJ$3$z-TJIKF&FlK9-a1=*7A!6}Z}ima)3x(+sY|{~27yEy zkuLtht`z;TF|XD3LSJGq9?aGGH^?iG)k^p**-aCdnUh_sdqxA_F?|ocTeB6 zuQuYU?Ku6SBI+U4wkqRWt3TQP&EWRQQ)`dKkBPjPDQ`J?abu35($)U`^i7{_curKi z=Z;!W{$jb5XK=9V51&P&+p^q)x8=HrY^~3=XxS!itdKK z`;mbyk*%$<@uur#M59|j*|67XBih>5w*l+t%pDVn4W@;kNjo}kkam2;LbSa?8%$++ zV(Z5zf6?XaiAKX;x5yZJZKU>?g0|X7ybQ2{{FtjpomfRkp21tL%`io7^F(X_h;2>n8VF;nqf}d5h-+yH@l>qZ{@< zX)%VUIdk)7cl}goFU%dL34jdsrIKNf{JfNbn?%*EJvLzLi@~m6b!!5)IWlmwXaKdx z2F&gHTpB3LJwzMq2W}QkLf#^O5OsL#*$+nOnGcn3LBv3PwVq>04Vje;Deh zJ*LdblQFdG=dnE2_=PCHlVvgPHA^iYjz6ot9p-eMILElV_kDieC^7!5HdyC%d308N zTy%Clq^I{{mOEbFAltIs@f-F^#kCQ;_E>zG)gr&-UmK70M7KU4`pvc{-Kvvl^M|3K zwa1j`F1O!FwA?ytYpy%7D@$kHmg^p{?LIAL^GhL@&X?sRDjS?jq_e*9saAK5b(1^A zNwjUMTiF`FZIe4q+RV9aliMp9MM5%Aq)%C-ZlzmmimGp|UbE^}nPKZ#Mdh+v zwJ9%=<$BxgqCv};)p0T!746oEXjFtT_<1ziVV5semFi3(3gqit3q*O_Q^p-eiX z(darw{~o)5<(sp}vM%0o{QyPTBF`D~%5^8B(c>}@IpPD30h0$_9#YoQH?F(=Yh&Fb z*a8k`os!`gTpO3?Xd7vr=r}ks!*OV2hNEL-j-zel zG{=FF83rxWpiMMrnI^s&ru!A9`zptQk(tKx*^Z8plF3X{{3OT0ky$1@(BCmQ;{}H^ zqt!7W<3&e&#vdI@&gIkpm!+C*N;&8_G&0N4F>;!tZRBJVz1VbLauNAVxj^mB`4pMb zlUa%ksKK6SRMwKD-S3fhud`)1oVCha$KXuIkZea{hQpQPa27a*WXA3neZ~EZ7{i1Y z90M|19q}12Iux1hxU59a^hBew#??2UnT{vz6CKU=97m%)-?76!(XrD$(eb2xl1AHM z&vxvz=Qy6UXE>VelO2tAYo=qTy~OdPJ=@W2uW~fn3moU=Clk4PE76wEqEVS-ndE7L zNuHW*g^pdesg7rC6CJy4*^Y=U$Fa+n>3GJLVZyUb@d3wfTZZEqTc#1e#K46=!x6Df z`Lc8*T8Knn*!@{FD(iEmvSgeq%S=bJYmQ^LYl0)<%5gNirZ{%HG8_@tR7bOGnd2E( zhJj1mG{-JihC$0R_$L~)%=7s4G~}5jruzww-RGX0bpdhCxO{@+8CSOHi8+p4u8EFk z&ZRD;nq|;pd_pTTN;UCZsd`H=`GPsgnIA-?Dn#o(k49y^Q`)CaWU$sY-N9Lolq^SD zmcyIvP_rHW9EU4kBL=kpIS$vv{*D0|FF4{eS{=%i%cnRv;1F`QiJWu!g!7-tF-1yk zIn$vjwltH7z9#cpBDz7!LPW!4AH=wqwcCFM*BA`4SP}!NXAERdLiQ&_6b2c46JG_Q zdub}U0kMsS*uF>KeG0MlzBa~8M5Bnbb2nlzJa%IOZ9;AWP4zeSO|B-Q%ZRi+0Re4q z$pAUWL-r;Fh8knMfJ6KL??LQr(hGr{`SDd?nDKuJ3{&?nfxPc7!6mo^|98Q^z=z}W z^>6DPy4$CHOHlR;WNeWA1^In@oADMFy9Yg9B!p=1Ib453 zZ82WNHbZL=`4+Hg(x%I|j_VH|JQpu-UDEcz^mzR(D>9)hV8oCNYHbVp0 zbPktaQ!m))dQJC;fkG#u@_UTsZ=tKT6beO|(DailNV0A;;TiH9FyV7Wk4w>Y8Vg-V zrKb8>XfSOTUot}pveFeK%gnL%u+Siqjgc5gc{H8f0Ks30A=+4QBKmqC+-yG}{73u5 z8=|Ix#GjP%8vSFTE4BT1bN$UA{8z{vslPrBN%>{}KGwc6dVS5(D=$`ZXm%{?O!W;| zdi&Et2{hZZUoYtuT6*{M1(!i)i_w2F8p`~*H^1vBEcOG2JXq)&+G>io(6#h^sj%_9 z;J>i+%DFYZ8^|2cY;O?zZ3>9a+h%G&u|IgzgiHK~CS3H@%dF?yBV4Hu0q4>i zWx_?eZ!_VN-t<0rK_6TjoDC5EO?~2jU_Iad;qgB4%_dyzU0$*Fw!he4w4353{jNUv z=Y8;jrk8;5kLZJ^nQ&>J2_{_lXZOKN`rzN}gMX(F-q;8KZ6ExFKKNg4=i8sWV~UsZ zoiyQ6KG{Q$fy56t;S!(L2cOahU)Tp<*$1bk)uGj)HKnD=OR1n>@`PChQzy;NEhwN~ z88Q1tqIO)pt>8wHT`uuUWbBE-EN6VFl%@%0uU|YUVD{*OHgUj6;%_#>_*sY6fOyOv^6Fo}MKJIa;M-_iMeL0|CQd4dS*2)*R#?p%rl4e1F%=XnS-o1f z2%>_ldDAndO`1Rj1-a8E#L6*o>Ws{csRc6vf!W!)1-TiSQ?m<5YlN6RP0ZRwY;OGi zFI%*v#0+VABggzxUj$&!y<*LNP+jLMCPd6r+nhjb?UZCWwiV89!%BbRIEg z;nPbTqj#)sSky~Sq4O=FdSk?br?;7P)1cni6vHseOgU#rWF{JhQ)ZHGGG(UpG3k<) zGe_$-QD(|HGb}SPW?yBd=~h~1iea8*CP~+u@tCDlFHLJbZGrhhmSQnWuU`I?e`0!O zn1h*_O}1Qp$W`YRLNf(3bDVGZWsZp%Xx%b4dF)uR(kd=lvSt|(z5bom^^{y)sr>|# zSKqZVRJ4SWSBI+guq<|0EQW67ODTETsx`?qCDp6TD_0d1Q}U|HP>DucvZlPE_?Gfw zN-inWhZZ9;BXiO%p`vB_lVwG#%P3g}CJispicwL%Y6VFStM6KQUIvt0T~Z+tlq}`b zu42R`g6wpMZ@iex-PHLn2m94-AN$!dJwA{QR9VA<`Z(s`zHo5KG8S3qft#Q zka>n&VsR6Tmr$TB5=Tk7)C+X?nVzugpv2lKEu}Vz;8#$~m%< zp3GO|63d}jzCxEvc5dbTS-F>aj9g;TB55(*(?qBhCAM(o;6 z$(_5u+(O#yQTSwilK7`l%P-uFt zEOx)%2j_Yp;@A5y#GpMKi!)&7dLJ6s`%u5$hb>0jGktiz3YssH@85;d>wQQI`VgG& zLqF3>c*tnS9`Cmh9KNDk#v54yh{ds-eyB(qtXPj4)n035%gh8*axce zA@{a#owvRtve0(F525?@H0;LO!%v?wB_w-RPwwfCQ6&Eu#C|VksGseFS;qbqh+K+~ zg}%C>!zQEdlGlaAPh|2!5ixmP9V%XW^Ub<(vj)wh(ENZ8JM2DGecz|as&=lW_*8sf zulsJh58TfOcRw9h`uQ-xxR1f$em*4j^Whb{4+rc%?6vE>0$KfhnA*>W+x!rcCUeA)s3HF;qa#j9)n8{Qaaf zqwa>heo6dd^4d2dCa)`FqT1#{;rD&m``9QrAJ)fKkypvL?IAsU<*`x7dVCbr$46nn zsd_|8C~|t-y`o$6jj=YO^@i?I_GcH${^G)+cU%{g(>BL&bV(X*E)+M80@aVYpq!3= z$cI-N&X?1XF~uw=B93O_BhkQ8ptP7DJ>SL+MsYF)&P!A<;;T{)q_vr1Hw#Nn4xQ{{B9v7zW zapCl{E+~6kIQ6W~D-hb_!n!>!Y}(^OvFW)A<9@&%7ZUflFnEs(Zd1G&cI*8-fy`*t`7_y#sftpafSbde*H55C4=)=R$4nx_a zK226dZY4k0qk7o*>@W=3GYrl>!_e{UFdTn&7Typ5Et18~2fChoSA+Vc7TVFdQ_V%Qx`}RP7mtvOU8P+%pV0dxoKK z&oG4h@O%}ly-2=)7rLGuhBVhu)K?D0Wu{qJqS1~buWd;yx@G%9u@Zg5nA7eYJ`_7g z48_8mhF(x!UGs**FKM`j;>o`a12qr3puDbq#D~O3&X?EeW(P@`BmeTtdaBr>TxdL{ zw4s{3id?u8En3A_n~#Q~c<|iAXt|2=C!U z3_0BUoa=BR@((9spTXN^dM0S%6DT{Jh{D5($T^${zwzAKK0IFqRTs(k??T7hiAW0) zn%gbtZyHzk8to`@S~z+|x7ZiSeu8Ym$sBp#Ov1i-go<*ypqxIr(Si<1BS=_y-B3^@ z@q%*ddR+9k^X2ri)#ukL#knn8o$+Dol1-Ko-L}iZL|1JcVAA@5%}G~Mc!Onu|6N5kFs&oP6!C9z_-SRz%Qp`%@t2V+vC5x9bt&J>8DJ1Lc5kpR0Wt&*E zDW$Nhzw769_mZFH`L`&;olbJz|5~ASSH8;{*?c)|wCu=GoTFda5ih3QL{|TRE8{Yh zhvTog>f!jD4Mzw3<|=Fa@J&PNf|JNHz@@ZAi1MxU$P2?2OaClVtc99MxH4e`xhO*M zE*kE#QaGa_Z%a=9#>+>KdTxMo@+P97-)U*IL};XyB4G;C#_;oGby3xoLpEGBnlft} z{ZyZ|>D~=tOUi`)6gOgT!1c3v^>Kcu)$bXQI(u;Za2j6pyrq~nz4`O|ty7lQ1;0au zbYs2!-XW9{8Q`+?AALVr;zq~6^ta3XTb7P$4n^wYM%b^l`+q=BG%N9R??(45WkCE( zZ5v!pOOfmO#9qD#aD=Y$PSVaORbRC--loU?VLowEF)u z@Pl~ky;m>U$fKQsl){Z+<+6U{Ob9<07xDXTapbqS{3GNC;dW1Uk<;pT`Qs^`Hs+IU zxIbf>^=EG9W#Nq$#TLwbfv78vHdtNv2FOJLmmqdo~DTBh~EZ(BHXDU~a^&We3 z%7!cYZ=vDVE%EVjDfC3x`m;6Parue1*sO^}{Vnl@@#14jku3R!McB2(8} zz)dfN`}^aDC&rVDoPM&_yT~%+{v29dXPM=^tdZic9$O#Tk!pRxOV0Z`63KOWo6EnE zM%!FjJ2K+?A8AWpBW5`9&Mm==C%hdNt708Z&CbiM+r!p5S@B&tW3KAgp*-H7tQJcn z`Q2B=S(R|6W`$$5D6XT!Q_`;cT*N!x|GeeJ`~6vdQZ7sBPs_s!#gUuBR%PiO{>z@Y zZNqKxSCPe?m@_ME^^b5p5H7A)?j>hmrt5|M0K8_B0D!>!OX$c(Q0?fqd)OLbS|6RBj=vun?`X5LH=- z*2q|4d_UtZ3(-0YX?AIMi+ijQx6ud%#D8I%g-AR(#il~Mw0>YA62GNKE!yx*jTWLG zS%`KR&;7(gn%}!P4~d<{Z!C1~+bh4f5dFbI^sK=v`wuTzi2i8ctrntv7NVCeM6Xzg z_FIVlV#FP=5WQ|8YPS&m)k1X8po>lUVGGf_7NR2-qN5g~e^`i)S%^Ni5S_FTbsM|_ z;>+=c2|pw5Qi5BFELI|`Ro5%++6#iHzm;f!l}Oyo#g5}DE78?fqHC-~*IJ3LGx)Bz z5)C)*-B!|UJZ`cQu|X5K#Y&WHB^qNT8fzs=wGyRSi9A*!ua#)LmFRXWk!mIKTZuBP zM448iY%5WYm1we+Xo{66XeF9uC7NR;%Ci#9wGz#@5-m3J5_=KxRVlI(EwvIATZzi7 zMCDeZRaT-ZE76@+qO}J9T~?xXR-(JDMC+|GLJ-wjiS7{}0xQv0E73MnJ-%Zl`mWfR zSc$%8CHlUVsKH8_-HGfc{m4qR!%FlMD^Zh`=%-eqoyPOOuoC^sxPQt@^cySDZ>>a6 zTZw*WCE9Hz`h%6|Su0V*O0?HXw9iWPCo9p*rZR{R&R?uVuUm=UuoAs#C3?$BbjV8d zH-qnpmFRsd(NQbWKdeL_T8Tb3rE%O!bizt>(x9EP5_MaNdaOjBSxK{VIc>z9k2@(AZA7CCS`2Qq5s7=` zO*W!r8&Rr_DBVWnwGrKJ@P6G!^bH$PhK(r8Mij6S<=BWO+lZ#yh=MkvSq87z)8yHR z=Gutn*@))bh{RWEk&URpMpR@YT52OIwh@)th?d)kDr`h6ZA7bVMAb$*YivY!+KBG5 z5q-->w9cU4ZG>SP(MB6lt&M1tjp!b6f3y+ZYs7E25q;N2bia-0L4)>?jp$(;(GLw= z;6H3ckJyMFvk^7fh<4hDer6;3rH$xUHln9&M8B~S?XnR)Z6o@(I*ok)VI%s;Ms(c3PuPfhjQca9 zuN(Ikg-B6|>+H*MIlO7h*A`yF$$4KA@V9j;}zWxMBwWRkzXO2pb%v#MA-^aKp~o}5Y14CW-CN< z6r#Bb(L9A{fkL!cAu3XcmMBCe3Q?&-v`isdt`Joyq}d!*DnwNZ(Q1V#WR$x`A-YQ; z`j$fUZG~vPLEmVEn~kteA-Y!~x=$h6t`OBLL=PxL-&2SlREWN>5Itn@KB5pkst`S{ z5dBCY`msXv6NRWrA^NF8^h<@PSs{8#A(BsX{HH?nJB4VsLi7iP=vjqmk3#fO zhk+kch(1(^K30fMC`6wqL?;!ZQwmYHLL`&;&lRFG!f!Z&SmTK7#=XF0aYUEL5nT~S zagRs2B^o=+oe;m<-IHK%0qDgT?Q{srG#}NhNh;rkI<`~bq_kHc%#32g?rC<4K{V4B=z?4Ue8t#7ZCqo{XYOnv* zTQ~mXo?TC+y;n5g>-)l={^;msdA~3I+wUejmVE!WY0rPWAhNg7z5C|!fq~3>Z#%p6 zaHpsH=0$_zoE2B^ymro_-+bOM|K{Sd@}XNkefiP1tDWwtP3vp6HT*8_L<$c41VeT=gK~L?>oPI=jQh}E`Myp!HM4+{?dT^54?QfduQ)Cw(aJxZ5cF< zItHq~{Gsvtb8npd*KvFP^#18d-`@1sNw2ouwf4g|{?pko>8~S-XRLpx^^@C}6gD+M-H2&@%es=ehkN)L$#q!7#mRr5ke=+|%*X)>((%q5t{(Jtv+%kT|=QAF3 zKlk)ymDP#6cK%|-;I1w2mj8UkO_m4Vc%$Uygdv`^9>0?GT1N4v*Y^c)46MBS2j6}9 zL&sl!_KfBfy-z4d`PU1t~PJ>@P>|Jp5U3l6+^b8w*D ze|=<#XA+HkdfrQKUOlMly;qmD<(>T9qIuClN7lbSa>>kwA!)zrc;(q+X`lY`Owr80 zyngVf_jW#e*UgS!B|Kq$=ZVakmnL3Qp?tS9<&_WHe>u8nwEcruCp>yb(=L0tx+>@9 zBd^y@d?)j735mD=_p3ubf9v#=rqXXNcpuRZ*ELRQ9dzf~mtK4Eo`=3T_38^#Ivc+C z&MyALO}@YMd(v5#KJ(YN@7Ws(KUDnc|6%V$2*|F6MMc(tE1PE65s)CevIN=pum}kFB`D;BEYt7Y zu5QwVj9>rn_dD;r^B(t{O1i5)b*t*ut?KIPs#_-3che<>QzMG+f9qJy`euB0o3_Ww zztO}3n=UD|SAwtuQaV<%6jU>3t*BOktl|W^g4*D#0n(RQrnN|}>nH(vY7 zjN(T(npiM=NvTF-!g&1nzR8Z&e5RD)Ng2?maoZ*n^KHJQJWb;THGUrLB zZ=WQY$f_)CE}q|HVmr5AQr^^b;l(|UB{x< zk6bP3yy$hhPS@%G5waGvLm!cjIi&A7$WB$~?>R<%&#|XWQG(xd9NNxtL{XH;_Z(-obNr3T2YFz@6zqbSORWgK_ycLeF;h_#`*IHNa*of*hSzeAmCHGPR}|&ca*j84 za{Na1^CQPcJ300#iZX2{M`$Mp**e>^ljDz_96J?7Y5OBb)mlB29A7Jnvh_!fe!Do1DvDxW!7*_c$FIa^1;?UY9LE$z>AZp? zu!5uhMMVj%;5fB{gY4{WqVQcD2dVy7a+K}jSfeP4Z6(LeyEzUkijujTqwQ{v1B#*) z?&c_7$+4egxRPVcN{(iVqIBKOv1BC&nMB*WlH<}!jxVXcR&lgn#j#dVlzzK8#_#6% zNl}#Vc60npj_Pq0$AR4(yA(yayqn|ZJsjH@KmLqd5$2!uhwH#0G z|k7I$NC?nQ!Y#^pE!I!aePPm^ApGVpE&MU6y@ws9Cd%@XhnJWnIpW9qm*>! zXO1yHb2L;G<@bFYOMd2PN%i|Phj~B8k7bHtS+k{C`!f#j_>w!d`0ryz_DRJ$7rgT4IF_D z98(oVS-*kf{05Fs2)~iTwUJ{A8R**2al-+Q7KGo(F=itN*?^q8k>kilj>*(6HgUAv z#4$-xl;TYscOBrENNs8p$HNCWCQx6riQ};Y9OD&5IkJhP*8z^^ilS5qa|}JeF_!v) zFvsTyI6kF*FU;}70gijA{T|>L80Kg~vJG>r4RbVA6yjKg9HnK7(l)|T9O0NNDnd9dO$CffhIU3MWh-2;{jx}Y9vgr`VZ-+Qmmnlm6 zVUAP3aI7j*l)DadJam|2WtpNpdYI$o!yGHh6lKt1j!B0(mXqAJa0Cx?klo9+TR1#h zIF?ageVAk57LFgv6y=L899y?=EG<)%3R^jfw{k2gQ8gOfOTEQ(HN#+c>@{Q^sUKjgj!%QI68wygmH8~T0-!cNM}9aM#b~H`xplsBjGHiH(EmV z;~XwScw)KkIL^T+U&lFYW8!=gacz!sL`F++9p|u&E+41Idye=SaJ`RnL`O;2jHRj^ z6=Nr&A+ACUbQNN*s}KQKA$Gb7L9coGy8i)`SB(hU*HwrmNwD-?F*u0r@+g;?k+!~|C% z!mdKl9uyth&48V0z>aklV!f*n^wFxRR-QMh-V9|+lmi9n>j-CRe2GSAG7BY! zGv#H`59o0}(EM8){3-4f;cv}t5y!7`$e{S?TG_|FER$YJNBf)y)MR4iJ4XY8)6){C-L7G&BqfTL;x zp7f;di?YhUwa(wn*hPno_DS%hCxuD)la9R%j`Rfnq)V@Zql)!vJyB}Npz`QCcH@gO z>9bmo&KG4=wMuclGBb(vjWE==5cMaSFs90L<;!t>^Mj*;FD{dcVl@pL4USaFtnwsY zw2qYOXGizHuZu6iK~B$Sy;o#apBETpMf{ZR!heJAueF7$0&g|yIn@Ql*XwteR=-9J z@jN8_trrq_QX0C>Ki>TB^Iz*c2RU7~cbw;ct9uWf=OCw-x7920da+YkH2vfTOpj(l zw;w&v(YKk5>V~a=gzs{mgTnMY(0x@VscnUG+?9G;{PI-g;J4{c9l{_~>WBY6h2 zYtl~&Bc7zgpR0I_m(n-(lR-n=fvKWDTymZxr1`Ho&#_UvrZ%PVlr~Pha;>(t51PmO zoF1Z$GipcVDrVMM@kUWmoi|h6lE$*T79A~uaniXW+a#+;| zl_*TFyS$1rQUk`eAleZDsg0A49eF|29rd@whuReJytSk7r}91Cm35asQ$ zj^epP@}z5WdOIq)M@EJg*M5%-vav=)dD7bp~MG=ciwh zK~Cp$V~cnj`T9XQY5&uzh5GywWOzPy&}8`7U**>+h3RRjbt;K|vb_3wtEng#$z~*7 zOG0j)|Kg}D#r5F^t(^umJjs5pA#NYao5WOkNcUY^U!*@IJ3VhCPrZ%%ie*%lL?2H6 zdK({ZD9eFH@w)EhRj*b0%z$Y>H;#FP$FHaV#joheOuE)&@~xKVAO7MXr{`^>K?k;o zxGF`P#Pe@V%gA3#SEU1ganv+E<7$a<*U7&)>S}G7s1mcVr&476^_M!{xbiF`|7sUF z8efQyL)u=5k53-E5a-jw;6LO-yx$H8|113xwS|QjILPT^o4zUZj1yy?O{%}pnYlb( z-rt-;Pj+A6xads&%q5IocfVhV%Tu`!?<>YS6iz03yMTS+o zUYR1J8C`pr=aGx?K7@3vSo1%UqV*Npv-NQimvy3mbO}4^Vq8|nzEtaP8MU=<3>c$)PHXx6{vwA_ z&R>$hhk1TZkWb>XKp!XX6>_s0@zf{N{og%z=-Ezb>;38pA!muo6r(&?nU%)ir04or zlYJ<4wUt?yT)J8Z=suA@<@1(HaXH_w@u4&mWuloR zV;wIge{cHV7!S}`_vK4*xruiT(eA{1grI?!_?0@UT#{TqpJ-(v9iDE$tMc(&E1!Ag z$ft=x{%Z_8_lRru+a(Tiy3TAap|&jEn~12tqOp3Jin-SRmdh0PYJW77(YzdgXF2|x zi{f(Vd^z5?ydkdDwp_0`jv0J8F6Re|xG-+NJTK{Y-noieIR@jMVuYInC8o+DMu;(dOtGJ40n_T7yz`g5e2A#Qy`+>CPK5=M`kXNcR> z5VuV^aS5Zx_1zQKlkw%WySy@?dry{e{F|;l%sQkj-WQSlDNL8A@frH17PmvHj8GZB z`uU>GnNXNM#wNc1tsmZFc(>hL7S~&PF6#RHt4NofDdQlg=k46f@w&Ejmyxb&6=U`O z%RBGoG7fS&pOM|;e7>Q$(pB>tSB*oeD;(tXxOXXW-Dv+1JvW7JkiT9ptrVIw5jyYf z9&dMT6}3G|c?w4-am}7rIOtyIpRc_akpHWS+Agk)wX|iDY8?Gprp?c&I{%ImA9uZ{ zaNMQ!V@7}DJde>|n-@~kGWu`x#`FIX<(V;QoI>9Kg)YrfG+olh8x*FOMeS$)%lleZ zPca6d`5~>%syf-I=e2ErmsiFU0)N$e7QKH_KJ;{xJS$aASwQl7io>jVF$meHTJ}0oGW0HR?XNs?<`%m;_nwIW7CL`KYeHT{KTF$Q3lb@N4-I@%I z^+ocb_3PmI#pPD4 z<)Mp?*YZa3YiaqXFkRnXHO2MqZS9)U9jaYZTAygwq;J!-Ynro~t6h`st<$b)es!02 zP2;g++BMBbT@cr7R;CQ6;dzmsBKnG34DU^({|$w|)#y)oqx-*`_h^$MgPcBZ@R2qT zPkm8A%HPa2X?0OZ7-N5;y~l}Glbrgb%COMBDUI}Z%hrbX_I|1Hd4a*=TBX+w7~{J~ z61>_rJ~8n5%5Xi)a6Q*>{e$6pt>JnrJ>w+E6AXGeOyBK`j|DNNjwi8gFOGqTuGDD@xH#ixt?JL zp2j-*FZ|W|DtR!Tx28f?D&6vHJYAzaNniCjh-{Lx%7wA!hVpi367N$MG*SC^l_raP zs(RSQP%p-JGn(_F_jBSwk@P+yyMl}~qu!gvGh1-}@6;_#Mpl{_@5yO0?oCts95yUX z#?&Xx(%f52VYWb2RMfGM-JB(U>td zvyzP7=`zR`-pF(r-=@o;@1m>IWgJeILFSAvq|3P3EQ3s2H#W=2Gs_?Y6OWl?bT`v8 zn6bCaGDezZkS(~+%`z65WsnV|)n*y{%ra>0?@6Hm+qHttf-e$+=un#?6&v&{^1) z$}(D3meGUwRF*NYvJCoI(4vxzZz{{6ZRm0(8R5z@=;TgTMMg#yQC~Wp>QqR5x=Ls7 zkyV@YZSE1ekd`U1bu)$ky_xZOV=^7mO7qXp6m>*I{!eNCJ;XQ4EB^0gig80lUwod8 z@Iy8Kks5zJ-LaXny7zrbrrKv*@&8)$@Aa)1SL^to=D#RYZQob?57!jwE=llTrlnis z=+%7IX#NAWZyY-RO&b55nd-RWivJM}PvbYTFGNJ;I;G*yWvcUaSNv~iDDqQP``7u` zZYauIU;Een@6qmU4Q0>{eBHmj=Fc0-p!a3n|544~li=S?^M9?O$iJS?ewzOfZQelV zGg|YX&`?%wXXyS@H2>)hWzd>(-G6aI8D!;sdqW|AB07_07d>yOP2Q^ZNmuZHHWY2R zQX`>XI-k0YWY8M+Dvf2(nJKz|E6u-UW6@4^e_8YI+*pQwjtt5F#YRFe`!*8#qvxl; z=C9L;#zN0OZ6x{^Bhk8vSxNlKKHrK2K1Af7skNh>jYNGC8SO-tNAwQ&bcv8DUDG>b z_YxUTJuc)KERjJkBV;3p!hR@`@pFl&n`0%ix*mk~XHeMr5*fb7MY*eYl0n@+=?H~c zJIM$*P2Xm8Ivp|u;WUm=|&8y{_a zA|LvFH=l^F-@oS*GSKh;8x89p?>k-H9SFYSxaPSQ?B+nU=e7PsBMkBVT^tC%dM(cK zk^`3KuJtF<%TG&Ws2<6H2IXCskA>B_%3qfsp^W&<0pj^e{#3UWn3+{!7S?ir=og5; z(O()M`kh34hXJB}CE_0&AllK@cr$xpfN1YmLg8Q2v)r#n$E!hh`mp^qkgW1~h}28jOA%x<^}KX0OVjtUHUxqQ*)pUGM=nsC@%3bVj2?WhIkq}A6hV}r)egng`7vTV zgsCL#F;aRuA7fhY5avE%tED{5XM|}L@8^>7**jDQ`(E_n#3xy~*f1F^B=oR6Oa@`H z;(U^&WhczQIG<#gd6eh2@p2{0&lbWw94}Wg%o)N=pzj;;`ljc^Plmdv{=N)0QP`!X za*=#>4E5ce_mY++6=@u_nGK_VE3^rBhD&^UzhlD3;Pngf+Hq?z6UB|kPkP-3;T`iA~ zpD^zUT}{O3d=^q#H;Fo>awjYMUc$5xWiJnNi7*d}vX_Uc`+*GhgQyF_B$H2j!mJc^ zQ68o{VRGYq2&e0{F2gZ|84~A{46}qVFUHH2EI$##yc{oAGE9XJWw1%2PAMH@ed+nh zB+O({r->N7E;@WDBh**aX(C4F)0;5wh&oNg=zJ!8C}aKSqW?+65Fe7&bm|i(iT)=U zhG-RGCX4>3JWPZzQ$_z%9_BJ(J{SE@d6-)V$p~ro)aV_PaEWyqqO#W%VdY_t5avcv zr{!VHAIS*S5_MW0rU_v(;~0{y-iCBJy9iT5_#62c`^?^ic|+(bVUp=jfH40Sx=NU2 zX|*ExqzReOdX;4ISxRfj#OP`D9wlS_6w$XNVu%m5*|CI~Dlmy<*D)bVYo_Rbl3|DumlR=p8ME_GB#!i@)qV3Q-S+e%koiMG0j+KY;6Xt$V7v*8*66S$8 zACigQx9D}TlQ7yCiTEU|(@TVDA>ta-GPXfC^&1b0dNE>1*YvbrAxxV%CRu)l5k`9_ zDlb3QF)~8qL|zG#j86x`j2G>_JU(9!lEH?Fa?xCjUKhr4tsu;B5oW{~%M~Ha2qEY4 zFqa7PfvB(YFm(pYVBg01BrDhbgqbGVDe*D3Wxeh6p|XD{+F&9^uZszU`AD?EM2ya- zn9}-2^c#s7olh^qG!b=57+r=&`3xpZFpf!9t`OyCjHpxMlMHi&FdvILB}_71okVGU z7ngG~%o4(s#`BX5WBynM8zppu_Ha?TsO=baBa<+rMVJv|EPDsSj1hHO9;Q2CJ{EZ{ z4>RIp8KF_4P6=bIcfBs=5@xih(?pD3r+X=_nW9b;F*+aii3~PBp66tBv4v!KuaIGR zc|Jv$g>g(WJ{gqOETPYd`O))iC(MGle3I2y`VbjxQ9P|=nC_p*2#pnbLun<;<jd zCUlH2$@nax{Cp_%f#w2qoj2;nUc!7N!i*TBZm>^fFu#yG}DdFkcHk zUGOO{tqj7<5PZtRc*n|E|AiQ{CBx9TZVX|*5*T`RC+aF;782%bfl2H)NIrzg8Y*M` zmjaWlT!h&>Rt6b*qQ0Hx>FA&Qjcxf7VQv#`nJ{{LH@0Q#XEMmRH-(pnkqFa9=zMt? z4`G%G9VJXMeI7!XRYIT3!vqPF7w3~K&pQb-G|nd(hK-ZKy2s0vEI%29c_m)1WEeYP zz7qWpQ4jwqjTkSZ&v@~Tj=po# zH{c%QWqdMTeCMFGA9ZQH#dsOB#*1%8^qqzlsw^Kb7C&pClt?V*I-zeSb3&VGadk)Sf85ZIk$t(@DoH56F08qWC^avLUCFj_IlG<6Nhm zc|>{Ej($@yL~m*s`X)f($uRvj47C9xQ99&^-VewaJW=A2WYUtXD zGDueB2(3CTUU;GmstCK}JL??>YLPB-&8r zNiuHKt}`deXlA(1)2?ruAfuS{oH6#oBpH1s3BH3T$@o;ezVkbduO^8){HN4na`}4E zWU}}sP3yH(K{IiNDN)h(l zg?L!U$zshIEsl>;2W)2aSx>eQvT? zOGbS3hVP>@?dcrY$zrXTilxP2x+^kbxScZ)nBhWqyON^GDb}neFOQ^ zSb}u>o5?cfOxC|Oi)VEO6JzTp%h)G!tW$12S$3 zh&m;IdS;PDoIpTEgMiQ ztrAgwsD1Gy{z^c`lT*YR04l4>KZP;t6dApyh&40hukxphBt-mOzc>)s?0{#p18lPc zfpC1CiN|nV9!0l0AZ>MkZFL~9#Q|wcJU%mCmqV@{4%oIE;!xY$;edC$1A%Q<`zIs+ zZU;j99kA|kz_#0g@Gb}Z`y2@EalpUJ0oN`Ef;-FSBOP?W`>O-tgAPO@4)`JtNJkv- z9&$j6IKUzfcn*{wKYYvqcFF5-4LxE;aNOwEc zaPQqtc$+v8xZ4R!Q{h)0>EWK%PI#INtiQPvp$D7@HFv^)zsB=1Cz#6#OOX>cmlM86 zh5zwsGH4y|_~|k((f*w2Lid6TWYkzFFz=-T_zSKr ztF5d6zKaD(WpMF58B%=**liBjiX3YEaD4|tH68GzXwL0`x6lD*aUk6IYW{!p|DVOL zs>i42!@nJ{J{spw>65>u#DUJKM_5X_43nwc(~)5 z@{_-JaPso+H>A(}4%j}uHXZ3B2mBvi>rWKb%YT~#;RzysqWpuOIp7_4RqJG+=`O$S{ZCoDE;*y_ff_TPwG(YP4DozmndBhO+ z#tEV?x3&>!P+v@SN&ULjknZghL?0e$EpU`Z!wKTK>(ubf9Hlj=mz^vIM;V>Rp00x*G3Ck4;R9>U&N<(x5W72Ic|jK zx*^RG&Ob-Qr+3yMC6JK*6&lLnA7aSIu|kleaMCq;zx|)YCs{{{SwjA=P(u2a-wHua zPoMTv{7>T3d=@PTcGY!*ocoEeW# z(c#kKXNu*ASnY&Jfb!lZEj7Ua0QfAeodG-+!hM7aiQ2RS_* zokAxHK~BG?Z|Bt4d0G{L9K|R3l^5SfePV0TcM;K?F~#@YUj%ahr}1enY$oYXS2vi#qp4=ReX}5mcYFN2F`+jp}oQ?$4DeueP4@FzpLuOKyBbwO`VA z>BH)tfBQ#bUX|*B>Q~AUb~+!sSv*@v=cwFYoPR{!yENjvM`)ict5YDpK@k5-it_6E zswQ?>QRwI$RVRopD$1)=W-?*hwwj44it;MuAxgNNm7MNKBzQzRzdGioR%R+Q$4y?as!*$V(&}Z9Ykyj)H?zF>IoP)rq+6Xi%fYoV7 z@QEB)cjP0q-3i;cYVb_YM(B$?u+~Kgyq5!MMQO}msXl_M^5L6O54O!Yu&i+)G%Xwc zi&?O~mkpP>0Nzy&cz<-jHYOYN3=j0ngQaU4q`&eI`7;}lZoLt0P=LtEe0cUc5qw^P z#g~Qf1M_39!P)TV7a-uB5wq@dBDyUL!NpEQUe1Qip9^bVEqvc~Ml8@LAGQq(V&3QM zh@8to=*2wvSEs{TvegMoel9{)N@M<8%+OM_JTP5AzFBKS#ZEV$5t@YGyLx8)$TBMYI+Iq+8OfXE~X(UEpo zGwkq=tqs@7EJ&3~V^QQIFg+X5?;Y^^vS4dm9kw;4G2aX~f)C_^ZOei$XKu_jBnQzo z3u4~hc34}_i20VLAoO%Td`PuqkOlv#Jh0#G2sG^tPycLq57`mS%7O1#8rUQAW0oofu=Pnpbe9v}54Oib znc470>$U`ak)qtj5(XhzJo)roMxfxyq%u=SR}o=$~jRC@$hFNpcyNQ32A zKBScn_(xTPYeycU=kpNV=7iKB7s1Q|cz(%-H{A}~8+N!_=OXY)Y0Q?I3)lQ?SZ6uG zZYf4!fdl^E?eO1`4d1kEgnFidOw5MG#jDnc6jDl;8pSwJy{u+lw1T0?TEk* zYwp~b_tk7j)w2=F>W%P1C;Y{3SZ--farR~bLd)|I z_-jr~`gb0pYx5yZ$%d^;Y0R}f50P)?#KMb9W8vX;*xae`4$FpTZ8})XT=;Wy5L}TC zb}k3DJLkuwU!3rr&qIXT>ed|C((H(SkPYA4*|1ErBl@KsQZNVXscd);EQkf)v?KJL z9g&Cf5HXj=e0B0*X;B(u-E+Y%v_~-Lfa|0a;TE~Dv0Ow4{1Os-2+tq@v zaxU15Zn!$y5!{snf5$9D22GFoj^-o!vV_p%Iq>J^s?SmBbQb(l0VJM}(42fkW;zkA zRDkGtJG|d!A?VCSG?)*|#WZ*t*x?`99?|`Fg#FoIYqDXzln;6j3B8vM?~ojLI~Kv# zH4mZGT(CoF@cvL5vvkiwq@Xe^JMv)ppf{rH7Q`$IoUjHe!|P2&uwy>L;fjbH$%1v7 z8=(O?u#U3B`dvOEPiDg!GQ+mhj=(Q@2yDxT)g!@j!US8D4)C8e!FntY^nPW1aDL3U zX+g|;RDx8;3`?c@h(z+>n(Y8vmkl<_0rqV^d>N%N+qMO<=pO~}Ew)2S&jnlV0Q;gg zY^Npo@1r&_Hzpm(LG<4_uv&8Anw^jE2`9pp>%+D&2W)K)to7%|B3trdc|9A-oar&! zO}PkFpthC|DV75dwg=_?G1(GPW9AmntBbnT^Pu)xoGwn3e_qxB0Mi%!R9F zF03`|@Qk#>mX!zJU8S+eBlQv9QW4QV@)7Nr3)?O`q*lcUx++3?$PTM}MogOShNQHI z?aZ8*h2%8a4$t8<_%5}F<)jmy2@)*kEZjD2ddzd$4QXpWTwAjco#RC4tR0@u?C>2= zgT-Zs^+h{;D;$VOy1t6hUNYakZki~)-Ubw{&^u5rFv>v8uJAlh)#FI`pEoP;Li&&>-cO~EZOj{v?I_n z3zlW2F=?R_q2&&^#%9Ap?Pj(UuFnhL8<-7t*pASV=`q&}d0-!Ik4ag%U}Nm?7PJEk zmBwz%m=W{F^5E~C4S#kHJd+&=x5&{XupN<~ z=fo_1>?oTzJr@2f8YXLm(XCbs|LCo4F4Zd4)5xPGYo`KV2k?M8?&80ExOT7`A?}YcX9o8Op zu%!-!g8A^x%m%xu0HJ&5#=>(P@a%I!T3Z^E9xMWLv_oK5CHNPY#(cTikOJB8u5rLy zw*aA?cK9AnL+Gy3n9J@)ct(wVD;!`C7r?VB55bvs zL?dqaUdo3*ln;NkZ1}&hBb=TE&-8pmessXI+5t<2xiRY&C&KT}k6ABdBQPWzfu^+( znpFdqFY*xa=fd_&0W9uR_?yg+1!~rZ@AvAUc^2=sIWg}acK8GN@NTY*zy=GVd2U2z z&58N?<-k)t8?4FPm}lYim~Z-=m~G91SYTNmqQBeWTbKgo$wf5eMD&3IgnuZFZ77=_ zYu;@}%ocTmH7iDNwFBX`3u3m9Ya>{x2&`UpgsRVtS!cQtek2v4wswS;mB##!njwv< z2LG=ngnMTrnpOZ`e>(z`vJv<=8?Ma-@O)`UJs}RRs;+>J^yXaX(%YxBARrx7yYDEQ#{dwFtJ|ZbWvuVJ(;w^WRo1 zo{~NA@oAn){mj>`0MYJ$AIC`NwfIEp+`{Vxi1sQ#s7C>UJqr-+@%OxD_Z9i4 zc@9cn8dLz=fC8|71qk~JVC(ny@teP+m0uD1!0IsP8@O}38e2%^=(x-V|%D=0$0KVCOAIC^3{X~4KcZwgHTLABze;(hZ z#iur;%J2IEcovKJp+yC-Ec$z1W3>1*N1^6_T>%0c3c%JCz_PXg;nja1pU#n?^3Xgp z)jyGE*Wbr6(jhHfl^BS$ir+GGtZ#!Lp@Tmesj}^djvH;fOBL1xDGL}x4v3Y8$IV^8;`1^B6Z^z?U z2XaVnad_Y22)@PP8^Gato5TAqhvhAf@CO{8ksQ{KIKqAo$%He zC({4xbe*o#b-GU1={jAf>-7I_vW^q;BlF29U=r%m$NOyBCkLKBSN#6rW@}z6sagCP z>(SZT;KV#Q`+i%$rc~Xy4+xo!no2(;uANBk` zVAD7I+@prKx^UssbN1J_wLf~#;ty8oYv+@b7(xHjwEkz5O3Q836j#>z_R+oJcRnvD ze&_bINw*#A_t9@RRGc?&!X(o>FMKtm;wn>Z^K1K7y&fJj(!6O@^&2y7e~oGOV23+q zea)Zx*|e&p+Lyn5UcFC~?FUXR-EVn!_J-CgHa5KfLVxr4r#BV5o~mSeX7$GxbAMRW zbey}wpTnBWe`NM--*}TfW%Rh(8`k_(ux9lb^Bue1oj>;Mks}k*d#r8r;NB;?3>{qa z#arv8Pv5sge&x2Dj1N~7j=JfAd2bA}?fD^4G5zfOL$Z$^8uhP(_KrioYf$|2L*MSr zoVM`f!~@OueOS#8&&9^!p!dqJ?ZNE{878Fe4V*Y zNyuzTQ!ZZUr(8U_EJ^5fx=z>WI$fvhbe*o#b-GUfzo34(9rBF3%u`va`fet@#K=Sl zW5>i-iTEZH4PEIbVb_D+t7#8L z4QA3_v1UDn}4^Gb`wWPZ*k)vQ#@%se%Rj%BI0n5MJ3cQ9ri*3F!0e*aU6HXJa? zmtvBADHR&j9F*O#zb|!2s^z98Yo9e`-e9V+(nWi>%~k1?A6A3aVLn!YSuDfuXisMv zu|cK^j9GomJ|;^oe6t}b?~P=ETL-A3W7%ewQcDVb@f@>w$UJZ`+v1Rz-DEOXFfU{l zslB!09mL)wnN!S`{wXQdXh*fBLajk5t;ryKEuY0)Da*pFDP~K?pw=nbW>ZB|>fKoq zd(TwFh7L7LH8bC1!vx)v}C%VhqcHEyhz z9k2|u)?jR4g*z*-=S-%WjOEp_`fA;qVLf+hq1~K8tgK98HB78E>vXAB#(RwUGVZWg zOn3Nd4Po{=W=o3MKaeqYS4uZCV;27nb!P|#b4V78C^vnhB=OK*1S0z8PT#%h+c^>0 zBcc5eM09oy5uI5<`!#5KiO!24Jtxx7_NH@f$UXv{V?#ve))3K|HMDn+&Z5zY&Y~e| zt^Jd^frlAmk7#>LbXzDnjFG8eGP%PF$nG{{tOK2UsjY1(*5VVg*m%u<0%K%em`x%3F^sV<86%TDDt)8v zn<4s^F*3ua(roR2F4^qYt`{*zCgQK6CEDFmI+KGj_9LAG#28zn+4mqj9vc~Bn;2u8 z8Dq2$bGsI22c3^X_M8}F`?URML`Ue%L7ER_jQvJik~I7&?f-Yi*njl>dURGQW9(1H z*jYLUl`-}gonu6MUub^|0Zd|V6WMtnBKr;0*Ai7WF;>OIST*X$OkxihQ4JGgH)@z$ zO^nsmuIrf?tFK+(VPfn~6Jr@B#u{jT_m~)Ks9h5^HZgXuiLv`kj5RYc*4o6_gIahS z?f+pDV~=RpS=xV&iLpErWBDe=>?XzvOpH0TFe2H+nA^lyv5Bz~6JwoBj6Gpu>=_O7 zFB4;zi48tn~AX=+I>$GW4%m_y=G#pw~4VgOpNu>!rs*W-!d`wws!rl ziLv)gj14qV_orrs4L33Nk%_UYBoSkssefOl((j&iqc-Ps=D^D)UytsAt9kch2NPVVDi|-z8 z^XK;dcXe)8zeW45LtB1Y_e{k%tgn80+&=w8V9hNj_kMogO{O_@7PZ`+_Uza*Z@t_6 z>vb9Z?w;O!{=WYdKXbBX?dKie-1~gS^IM;2{Iq9owZq$n|CDk^5pQ*QYL}UP+hrUX z`K)u>W20yFSvIKtGpQ@5wR#If2H#ibk4HD%Rdr;fckZ06y>_+crpAxv$IOls_I0eO}ys&+u5*mxYr~ zo1&W*_C47>{nznpZix*Xmb$aH{eAC^KbG#j+^bdl$A?58YV~l{UA>zu_e^c+SWvrZ z?*{41>QuPge){u6H{U<#uCqV<{^`@3YFF->`t+BJ+MOLZ)n#dHD*bKExF2h-eD1)m zH&ef;KYZ5YFE%#*t;@F~PfoZoqs5M=tur3$`ND;H`-h~BQ`S|z<&B|RR<-%-z6+HW z?{j{9p!)15dNllF=(#_3_D!!l=bf~61^s8foH?&}=)7aURL-dxS@K4j$OB-fMiLRpOuDl=|hJW6wr> zp#yct)UEmI>Dot6oqhY;jjwjObZqp9N{a@~I8f`Eeb2VKdCuO&PaK$R8{l}nSKk-T zRCvEx?3tPMo^@EH{#e>{)r~JM?7QxZE!|AHvpOGm^?QuTnmA+5PXoWp>3VeZi3`W= z)BE*$aiDAR*~7cL-Zb=$n(~az5Bdt9Z?rzkJm8Hxjy*E-#@B{c9X;@yHMew2UsmVd z@8&+dW#pz^ub1_DJMH|cmD@&c+O>V;rd=004yrSH;xG5MEc)Qk=8};wd~oB$L75Xi zdVb5t!#&^6>Nc|tg3VU+Z_#$sh9T(}9{C(IpPhej=m=#{n`6Jd^u4q1qWQ;KJp1d| z=eyLof5UwpXZDM=e*3_uTP{EO=*gxpoz5iPJ^(n|ITYi`+bdP?^*H{90z$JvklP=Cmss|Q!>^TvtK&XtUxvZ&qUF4dPk z^U={$wWpV+Zro56zvcXK+}D3>m-i1Hc)M4#20ON$oH-@)=(9EFbsoRy-Vg5@{;@TI>P1F; zco^{u~(GGKe9#^Ygqumex`k~M9S>;_9rP{tl2k!svmPreTw!HDF zlKU538ufOIT5U2~3~tqG`{j1`ujriDY0~L>=ch}LI)9iEe)-`MwKwe9nc3{-(7A_$ zL!O$v?eSN7O#QUKwSTL7$64=taN`YszFw=a!S{hh?H*|P;kk@kcXeo#zUkCcE&o&8 ztLLIfsO6Av57qe3&4tgkPr2NqLAxz;>KuCRwxWwQ_pjRC&-PcnCtq0d+Y==heych3 z#RIFNQzst%xXVlHs&%W}#y&eBe{tlGWnJ$c`|GA|rWx}mOe%`L|3;@)RqlMKV%v*l zW9Jq&ip{IbA8@69VQW}t2&X3-_?&nn>Y?@U0t7)$~hi@Ied0zLAMq29iJ=3D^ zpcVhVYwx#}M=kZOe9heIlfJVHr*$&lKTm2_vU$eOD^uHHK_j6f^l74sl6QiI-mZ}SKh(n&YqibrpK1-$hjFeR1UX2lYXduN{@{z zD_rckWx-2J)?0^9t1Y!&Ipc$+Q+C$NtF>M(82OOWqQ)|eIW~69suSIIzT0N?{&({p zD(SDRuC#gL@Am1QB^i%rbQ&DpacJC?Z;CpJw+BHqmK#-L*p@S|yyx<(ZLHN&@1y4N0uDpC4h&|+bYD7-|!(Z;%T4x>(lZ==3A3L^YF zdZ3oSm3J`~o|8i6Ras3|g*{!LF+WUXR#LrRmd2Q8d#XAfuEAU^}hdIj0LBquwP8#o(|x1Wt-G-FyUWFXDl*~ zspDIi0mqVjf1a!iMl_bJd$=7Lv?$K zp*p&!>qLJ&+!&Swo0v|<(qfSP9eRe6yJ8ERO$;lv|+rV!-x@GlMF z^cdCctLWjrH^iPWnsX%zDuwVXg$OH!2+{xLLImi#tPnos+Io`SEWTosh2}%06gPtD zZdg*?2v=|;aDyA+bT=YtZUoY=-Cq`X>+1NCbT=e(Jif*3hR0lf{M@C*Ap1TfJ94`H z8{J+`)8WPH`Gypx){kc2Mz<$avNRq}^`qOb(ZeG%ib3;Tdi@0R+#natbR*K#jX|@D zLH1Q>B9!8*_I9WqG&?G^$DM4e==N90#)>9tmEQWk7-U~Z&%gffpX`R}rnq4XxZw-9 z5ec{iG9BEe6@gqI?_6uiL@0&U1roV_D|9;higNWEqlYStNfgKJn1g z*X=+_3)~>vP`3GQ_~#27QO5X%ON&AFp%T;A?Lc`Jxk0v}TnpU@YBr(*8;U{mkd$Aw z&NsT@+2n?_nf^t6>-9kUd1+rI?UNk0sTfabdPeo_IpId+gd48k-I$*kcG|7(Ax*ZY z(nx{)5=8P#V6~UPV=qB~{^>qn^n2F45_s}T5Xmj4AIvR*HMay(ZV3W;B?u8VuLLZ= z1R-Y$0?rcnoF%Y!C;{tGf{3#OA;RXCz?WMBPkDSbirPz1rJw|vtD`RuW#IX(PiLpbTQZF3RG>EY7eVg$7QgYq9dRs?cU`ae+w zry*SBf2;`P^zcrGaFzeDB9PO=>D}+X2Eq=Mqk(AO;eRo8zi7tKDZ&oa)>QSo2Ypu~ zJ5Zgsigy#bSM5OcEL8149r?6SwF5QxokGMtUb-Ks5#@O{My)+mCtmm9SI-de-0>VB|U zv1%iX_AL947lOtd)HcZeQ=rfd>0+U}hn)1D>=2Uu46oUZP(?RLZ^_n$ElBCPVKWu0 z?KCvr4c4p(WD|&NEYY5J8mo9^H-fAPp?ab%cuU>zo-IO{Y}AoWyr)w^HgrgLy=RKx z>*$8nT%`7W-V`^YpSThIPZ6vW-KyOQ+H0-aNT4?GTOp{e&{&At8rd-*+iheY#-iCk zBs+eg=5DpW@EtCMWlj--M+(6T-3YzxR_)}FjRsFGH+-{;K(@waLAI5s9}n(#gY3_d ztt7HbNPPy`#fV%kge}vJz*#q>XWXE%gRONDES21d+mm9VT zZnggm9`Z`^w>vWy2({;K|*XcT4r|Wc`uG4k8PXFJc^49-{s*Cmi zHd-jm=-SH6ER)q^b+20Qp#`d7NX_3s)tDvAQW&um3kc!kAeWPW?V&($3b> z*5A{ds_qik|I>05BY%o>f5QHN?oAof9j%8Yr}O?N`vZ*pDgWdsKFxR1zj1%S+KSUh z?O*o#@DC!npFI8hi%-m(T=6klcSCEm2}}7cmN#WoFq>1dSS{<#RSMJe_1i{jrmg3u zeHXM=gNW90KS*n27*p4$&|2!S2^%S4plwh8eK;!)+%!r(#pEeZVB zCxp{_Zk-6fAR+vrg!}sw(x)}$I#GOD`>qq+Kaqg%mT*t&y>%jd;<_z&0-n}l>qPib z`i&+ZI!90^3Qt`3MQf&YqHsDhQ75{;JKoc}ZyQe)hQij<7MB#@he;JI`)52?~Fy_h-=h0C3Ir`>g2%koCw)Oun_TC0As%rZi zU+2t#1B1r_(eMQwl@v1-&CE(`1`x4Gz#KF)2ZX_47-59b)N3^;nPwK56_w?fT6%xp z;+mC~8NQ@eR#aAIR+MkhwW9L6?Pi|;=ey52aG0>${ongMzvuTnEIz|JYp=cc*?XUT z_SrA%Me$7t{@#%CK(`^#nP@|}a{tXZd+I~9LX~5K&IPn!pzDD2Qv{+~U4A&*s*6^1 zQNX_k=hjxDN7eY`bk3YrTH-AC=au=LPI8W)bd$5dRpy#mRPJ|`O}Z(?TUz3plsCic zQh051ocZ(eoP|XtdETN0E^^*5*EvzmA;p_lUhXQVIdh5%ocUf?UYUAXI?I<==Av1y zS^2YkT9|J>m6zrhyZlsCn(y~gxxcI=-#4F}PM&_ItHf27=XW{%MYCMwbUOXsa_3B! z-(i>Z&horMl(}_9%JNDIN@pq6*P@ftIj`KG z=f{oFYDMMFk~v*ctAbDjm(MTH z&+~f8gYXffC@(+XRbEa7`Dl9AJU@AhX5e1_uZA~YT`^=t z^Yt)YjF!-(7C!ed3jM-x3a1Vf#xbtL$)w^4j^T+^32*%$b0;MPmS)Y(+$f49sI|5H z8CzW|loA8Ji}AO%*HjbcCpgPquZ|HIYD5yKX26jMji-%g;30?FK~HxC5A!XIl{i1u z$1##X4`2RMC&U40;}7oni0%x#b5T)8%z8d(zIO-ulgbAu{3y=H93qCtH`7ryj=x(` z1P*aes&sj8&=K^bO2_i}Cc2=~7EXtg30j00f;k;VG3t@*xtr9pU=}odfPebRM`rQ9>pW^gk1UMWV}rjYLVnVMHTA+^94B#lDEZ~krlYk|nDZtkdO#|*klnZPjDgcfqas$T@d4W3< z`G7|g`GI4J<^gvhS_s^gC;)s3Q6+F3(Nf@UME3!AC#nMOL9_~ZC{Z2;7e;#!G~^>Eg>4n4#Tc4Hl<(VN`}Y^>!pBm~^}*I2`8yhUz&(i?-E#-$r-nT=JP z#@phCm`Y=S(_pzVZEy5(8nYfZL_ivIIgO}ph=Vj{aT>FIH%y8*+Bl7*Zm3%}CUF{C zoNlOFHd;B2tlX$jqlMF{py9T<5kd^|I%MsJN@Ziy1<=s!bVJ;wv7Xbol^dV>#yUQaYMwi(Z*>M-F+Bz5~mk}hRv`>E2mKvH&>Cga2iUvZirwu z!l{?M4pnnwsnFQ;E9m<`V~lI8=QOJ7h8kpJ9jBo+>c;Z3v6j=Qx;qYZ4X2?+>b8Oo zavDwHP6S=W>GhzKKnFODrg1~vvC+qANDsPgpmRBmrgB5Iu`!F&&@^>tfwplPP3Okc ztTBnxST(tGL0dVErgXbOTYi=0f%1 zQ44^#f3!i#j~mWw`+4Pxd)lreMyrJeqV%6+nd^0{&&zg4%kx5(u^Qi`(gkxce|l5ret{bQ8y8;OEvWf{84ZI(AxN)m5sv$$eO8^LMj zj5b2k%~@@Prka&9oHG(-Fj>z2oig0sM*6YlS#5-lGrQXeO*MRX@Ncm_SLXU0vh@pQ)WB3KF8&A9bBIys?5RlIeHpe z>vP1tuIO{%oCI@I&9C=}KRLKQ$MFRYuFruT3%x$a!3ag41NX!H7NFPXNR3qVIk5c* zeU9|`4zAD9qM`B60cX=1z?U}sW+xRGxF77Q;R~4N?-@RvYa`~fV6lO5U(8Jwmiuiu ztGVC7eJfkxCsoy#h#x{$=4S7QS6;9&j-DO@)utI&UXd zzeZxV8#}SO`yDLlw3%uCBH+}C@B}Ciq zRDRfO!S7=B|FFY_AD%aUu>V(^MWp>wMdCk=|3}XE_2q-!7k)^O{tt})h(>|^zfP0C z9PstLhV56r{9}CY%rSo&^H87@;$RJh_=p2QJEIO*PiJDusp=qMvoYFk9JVnkQ8Z=u zTu!mW>o?vYuB6;7YmvDBEJdd_Ti8GvJ-}8Q0QFZzF_S!up>89 zz19Hds@ze64zN#AqS}+&QBwBkoEr`w{!(Ua`Hq62KsNBaOCi(?+<$NiW`2q zDd)2FU)-O%?0eEDIff8wQ&BBJ?6O~3AY@Ic;_z1=d)Me zGxVh=?-}~il`nKL{?e^nGs)KsE1IuxMoYA_`OQ@5ZRl_+fRC|L1JGl1FFR=cIv@QK zXUrOa|FlM^whCP#{I7I;#Lo>W5A4-x0RFC!^sr%~0rGMO%A1ZUP2``!oNDq5= z8i3ZR-EsQokobo}%5ys8{s%(h>uuN}|G$KkZ&*lvpN84de?)Pa(ewrOd0OCi6#D60s|K7R^A%0XyemNoWPlxbd4WY45 ztO4>n5OV*F5PqmkiXkMwr$XY73Mo&h3`&oX^h-kGFAB+TUkDu$LO&FeA8Z_Ifcjk) zQoqF^@o&PO^JU8UWDIqrG6Rt>nFyyKoQAERL5i#u=(}<5c!M%`>P{W$K9MLeSg|V# z{sNq5CM(}^(Bq6mb?HQRb9I6jw1vZ#KC-INE0+5-}+iC*c2l-#G z$-s1^LhSL5Zz<1ZpwoyR;W8*4DJvvD?6D_ZrF`2^KF|RjEgE2(N%@w7KQ$!%i;!9A zL3E|sKBJ99HR+0dRmA^0WO%M4!l?;poX%Lg6Rm{}OX^4u8;Fup6d614am*OJp17@4 z&<|tJS=YXh<+1c6!l@I|Z!{3qrzmz_5g*?wEq~A>j6_ws@>~tuR0EayGWbv7`KBn} zM9@P~Uz=iU6ZA~*?TY*&XgDv?>Wllofc~1Q$P0p>ED|*hYiP@fe}?`wn)qBF z@!!_f2Q=pXL0$iuWF*QR-_l>^7>O*p_Sl5{hqpXG&^{ggUq&LIE`Dmr^ZVZ>Qden8$#;2Gi4>pT4LKa=tT}$yJjlcphXlJ=u2sRZK&E0rtIRwGVi)I!UdA;SX zkRlbh%Kc@f^9ce%rTLJZ;uz19%TZ|;>Jun)`RA0CsG+!QDQsb$KhMiK<#Wn?u95=% zwVGV15AxJ%I!n2qx2V+VEh_gHmFg}>j%b!>Dw^q<<@3)+@l{zTJb^N;>9ocuEy;JO zoC25E<=2RrE`RA?=q-xe|ry>A1Yql=c zOqU!&2{0DcldHOoD&+;iQ42BqXK2Fay^M?&9v6Wy6E}7IXr1m zL33z}*q&BC*F64`Y2=&|E?KC)bp>8LF6XS$0^Eqdhy~vA`LlS_DRPs}Jbz(nSusS{ z)I1=)mZXz;^A^o0^D824n#9_$=Bu_P)>@?0u4;~Xg)Xip(H3^Iv{@J{)d=a*dciJj z6ztMw!7kMZH~#kcALq}PcO;5BA#E}a+Cg!YTk&i z<((}Z7wl@DTG%-0w2-Rao1gnzB%-A!WEu9*QAfS(!bGWOhGZ?2EGatK1$8Z(E)fM! z$TH?SZMMw>sY)o1lwwmtnlG&ulBJ-K0a1xv(rO`93JU2` zl>lj@8j0xeNm=GLDvOrKEJpsL1dgmWb;9Njyjg!EpV7ld_CC zA>G)zzSE?rJ$A{o&n_AFPmoL@f+Eu-%O1NFwa+e@_K(MHd45@)h)k#cGx=ft8tg=r zeoB_HKL|kB)=or|Lc$I}MlK}mXeT0XNLW)RqIn@(kUF9PzMLH;^ zB9&B&r2+PNsw_lH8)TX9leFA7tyw-NM}24Wq|L%OsYb~9ZI^=l!(j_iO@l0B&e~=^ z+0tootkfhRb+a>IEVxI{z?DJlbWxkgZ^8VVT*bFIdtkiRyWKEYWH$_T4?UHq@dAt;B zm*VW4N|!9-I5|!uXSRCTv5zt$hNz%Xmf>Fk_gD;>3gk9HvZk4p=Qt&XD9|X&e19yY z9Jx|ls?;-8vf8BtyY}X0N)~&h?pEW?eE&8WLsZ=;%aFloxtA21s^yWch+d78EQ__} zr7R1UwL%!tXJXj9271C6Msx)GMaUxrP@hnM?1%>19yK5v_b_2s39?bzp5Jda!BpQF0Qij1nG@!IGq8q-lr#W)lNvw@I~1T7rU$GO^}yRy z1^DLxz-I?^tTfQ}FtOLF0nSG>(C?iB;1@%aKLzkUq5}Fk0R0pIpB;G5`>V7D7?&Xl zigT8sTHr;X*$J!;peF{vUMlu^{~184RC7WLe!caDqf{aqpze!nfNux( zr!huwJsowwD->{!rO6&*FH*CS41GO(djSL0eShvBDFk$;wf`ju-QNxc_?FQ?lMVb& z!^QUa|5d^nf!H0GCe-0i06+p#P`=&M*3DgbJFE9q3Bx_q=}(aOk3q zmm1()0p}#YQHE@Xc4&wH7N~1;G2$fXuZ6`#yeZ&74Qu?ePs^gatrS(atnbYirhlrLq%?3Rak4e10DmL1AW32?r}Y;b3!5IM|XC4)(|i2Ycp(gS~XZ!S0onDI@pqv4)(}N2YcqEgS~Xp!SdCI}kPB~c4DF-V&)8yqaHLFqgH40J~|&4A~Nxlt%+ zaqD~KFsR*x^8crUL7l;RacIS5A(SuTnPys5 z%%Jg(Dzq}gfi9jxD_?QQcqp{8`ZuZz4Ff+-BRZ@uA`I%R<8(8v6a??Sk{;gph`;*^ zjafd?=4QS!gQ#hym4a_=rj^wJ-WPyDot4(XVI8Mc&wf~Va~d;Ag4;(92EO7U%5A1K z4}coKcXOWt80iPD1EQ5rpi6iOn$-3bsiWcpP+hcu#=JP7qcNYy{m@qh>c!{V82bPM zb>*@Kb-MVlf1tIOKwSu$NE)C#@VBA?X!y0$05p8rX#g7PM|j?Nq#{Y&zQKVCP0pql z;iWmKqv5A6*po;MNBoY|1^Vw5%DK5f@zg^g+M$cz5Blpm8ult`bToX+ZPn56DYs2W zL+NU-j)q#lX?Il;A$Epw-XNVf0zR!iwJ5c`16rX&k&pRP}z3c$ep99htOAuM7g7s^(M+QE`*;GLhEHgaKE`B{3RhY z&JHy|{IwzUb0PG$5PDAt{ay$S{a_7{KV&IvsfwRX)aNIWs6qEU&!N7lieE_Zq1$_? zLiuLnedvO--ZaJUCHR93M5)c`C25oht%;?pcuNw*fKt1{Lur_r$Lq=fw+zn$~O%SQK86W;(eWMB&v^7 z?hpPwMxqkcfhp)GjV)*Wpr40VS@rA~G-Pw?u2Ot`g8sxvWYX2=IQXL!Kb_#8#aVqE z@o^1wcoKN8?mJNPF7?EeZvYrQheHf8V_xx`SQ*@F6B6Xs?Frrx9{ma9M z>iZJkA42*?NS~?b?16qLtmP~m^tzDyzli)*Sq$*^WB#gcc7Xmog#SYr(dp*)?L{%+ zM82C8**L@>9Ns#=(cwf@R}(D|mGNVIIMIu$!&t<3hEwzRO`vY%4R4Xf0RNtFqBzYF zEA^uL!dutxiEyGL=`HQ|0`8Zg*gHY`H^cSq--|v9CyLUw-w!CiD%*nizl0Ncbp0b5 zey=7d@`d2{2YnL}_J=_ycObI$Q}(AoPwGGvoS^KtfzI!s$d>{H>P}uP_*Gd6@E3L< z3REb2LKqL8=+L@<)O2VmKl<|yq*uT10`;U1IuO*>OfT0Pw@{6 zzR9GlO_cs*Cdowfpt{ireuAk*_6GD&EDUtA9oOhK6)_E)8bbTvm{=#B*Et_;KqP48c_Yp1qALWOQ1`SZ2Zjr5JtNKN@ zmbDoY5ntB{ieCKtkuUM{PQ8Sq}#|u|LY#rGJc_d4bbt?zeeh4)MtW@M*1l_8hm#M zy(EO*06%;>*`^mm`1?cXPebT$V6!7Z@mGlQ{uIJD>JBbYKB;4iY#-wH(D6~;F(LGX zj;&?Ka&+m@Kl4K3-yT9g8A5OA*jl!&wj*is|5`V1mj9>8%31iqtCV$=CjZ}y;#;j# z03-h1ng94Xj|F2b(ea-<)A5K{{)>wsf`@g!k72>sO|3{$vVlJfbUNGycjaWM=xysu(FSA^PEim&j3T2@8A)U?bk41u z(G*i16J|3;L_aiqvB`R1lEsv43tFqF4znktl~R=xv4uo?!$qqYEriGRixKk378x+u zEF=m`tdC-m6ic1RCWaXcJ5pBoZlaq8Q&mLL4lD$1Hhu=xm-dM!G8(PWy%(?OE=FeO z+H4X0b&3=$ME6n9dLIc@Hu9N-fY{9zL#E9cu|{LWWmf7#R&h89_gPJLF)7?g78_sA zF0vU#5-c%7Kk<~(!5FQm~vj&9S#!6Z$ zL<yNv>wlB2kj`o0uprA2~KlMN^#?siq}jM@t}8Fvi^9y<69nNfWHKiPqZWK<(2+x#5^Y z^b&l7t)@us(k76QUYQjcFs`cXMoF}>I!Ulu1Jw83rIZjIj578OSYyd&GaD+&X2~UM zeBUIivRQJU&2-I@Rf!F@hxl#r%@R?9jJ^rA9iA{!r3DlW(2(unxW1DNODn=7FsY&R z7}J1ZWHPR!K3P`dA_|02uCk#M5Rz6J!`()TG!X^TAzmsR%Bl>5g%+bwVIZ4e3^&>m z2UrKkRrFb8vZZFN6cg+sMGhmIF*eY}kY_O&0~8>msV_yCuyWtAZFnHs5J(`KFfmYI zuNXcNZr}qo!Ssko3P?Tavc9z2T45w3^$jM)idM24t%9Z2W+eenIaRR6iI$210!2`- z014JnSV);7tz&j2Rd+96A=|9P&)9AxV|U3~DJI2C z40q99niRl#IcsAyhPk8}i3C$NkQC_~5XdBu(P#_UVyu<`#n_&_ue!=aCW^Ls?{!C$ zQKCr+_hl84C=A?^bhV$VvMp6OxIbhu#!^IFBw3=YrUdHPl>*8Pxeq3L0@=g+#szyu z*i6-_abp8}B4ezkn6dU~E8ZPbz-UPfMA&>`0ZUZe62r3eR7;0za?^}PlWAD;fuR*- z^JQ3Lo=GAh!fwUeB)}8gKpWA*m?*lJx{(l|VK-FP#-`gSQ1ODaj*8ZZ^WJEpC8M|8&rN#Y)tO|-sP^21c#sEbdjr||2vjzeIi-}Sfi9%nSK!QDJ z4N$Db@*u@oqAg_2BJ%*Ey!#f31DAEh*8i>>w&49pn&FdAbU z63Nw!j z5U6jOCBi5e2S&u%Vxv9Qia2!y&Z1F)00k_Srkexfx{|R!zG);R4&RexvXXUaAX4mT zn<3D!drfhHj{bC`#nvY#$%b!ETx}H9MjI_=tA%W)+{B0^8g3zq_-g|1tDOyG-5V1# zo{T~abqkQqLX;>PlLGq^I*K-{xH#Gno?xo9nM{_o$wp%`QLKrKWW?|gk(dyXXceqb z8NfbZ2a#+rv_w|2SsbRPV@+a>CBcG^U0PaY7)9Hx*L1Y+9lXIrrbVgY>Da8Or4%vN zYU1tIhm4lBma!PtDt42RtQIku*52HuJ6WoPu*3anqZNYilLDe>p;$^6jC~Z@m8|AP zGM^K`UeG&`Ln0z=k5se$3Rx@|w}LDV%$Q-%^b7d4#GHwUP7u*4Zp@14G#_P&z9pjX zq06f3Kb;|>vqXf092mO#nTURc)ieH3ltiLH-2N);)B(_5fJlMJED%KrL>&d9PHK3J zpxEn$zd8W+UI8#C1>H;yFrdLsEcRjnJq6-AL48yjd$N}bL<0n(%LJl90?}ZBXsF7E zp{!x*HS9aXP}bD~aof711>*WL{24;jNgzrVFdP$&6^PQ*bg)BwgFsw2NNcd9h(*H#Ebl>%|wscixFl$Q&NO;$ZTAP~VW(nA7~w$BXvxLlT$h#nP) zs&)5$Odxt(AX=@4LGKCs(N7CR8w8?f1fpjJqD=zPe+k5G!D4^I*CLvB2lbJ)Kw(vCMx!*dx%8w>b^7V{q_}! zFmhcg5@CNG`doul{^cqjA`%T1iLl>(rATy@NOX-zbgjy_i^TPG#;SChNHks~x=|#` zP{SsOM47M$ED~jl#BDE65{a-!KUs})i>TOizEvcej=gR*9CoquMWO9kqCNa*x#QoD!M^{0H&%UQKd+9k4UskB*F}1xkz+B^s3an9u$cl zQm-FYG0p-W7m1z_iJnx$)`-OQBiD(FZGjCU(K8~^v#^&Y64xC9{8=R0tfqNhRBVuL zQRx>%qL)OXmqnuOBGIcN(GF43JKZM|y#;%2BGJ1d(fcCNhibZyMWQ1j#3A`DxUJF8 zMWQcM`b&|hUL-mu61O`F!1+R>Nc1<6=sS_P{ZRnU8P14AXGJ0i0^pqCA0p8&BGIoR z5e&LPquyvB3WMIefhfX26lEZi48-k{LeH$Lf#?zgQ8#tpKHfmoOTD(LxSxUOQUej} z!d+${8mxv7GY}0o5REVpja0*~G7vwrxYnT9jJr+^w;70%akgO~8mETgEaL{0Nwvu* z-m4cpwVPe7$vizd);t?zifXwp#k^3@P3E@Vf?o=>>Hw3u{&0&7b4IfabE*_4KG}va zZ>pKgQ`UbeQ0kjZUW!eHmh>sj=`*EVacdjtQ_Ny+q!gPLB4Q7taFF#JRWH!OcNw?c zt>l~1Z2K?+whzZkSz>9M`SSGh>IIrs_nUh0a*aj$bSX=GqmA@-GnXyfRxeQ0`%E5$ zy<}dmjOP2NAbqNoC9Z6v0_kRPUmMw`nGHL{HloA$8zygwUkP;Z6DFhI>DsYHrh1}O zFBnF*WppnY+jZCn@qQ&x^${jRrjk-6>kP@r*B6yv2~=~0$&jf;-Yxd{rnOk(BO+MT ztocfytw)$#h5%mg8=LFRZBC|2iH5;#6=ST~a99gZ(;1_*H{0E7J9KQTxHqe9*E+7E zx0>;_K-FI``Q_Gqt)-1Jr7W?rjmA$m&s9TH_eoKys+G)iv>W=`dKh>=&g24or&{`O zOTMr_*tYRMp8ojP0wtYbGS@-p>0A1$+Ge&k)2EpEF-5{Lfr2O5f2;k&jmHGaIK}?k z>>r|UUVdDl#0DmFd0kCbKa)%NCvzEmRenBMm7j-*MecEdMl`T?n~Ckv4(;$i8j@-! zv%1$Nv-;O3x3c}j!Q)|pv?;7EX$lKoHl>;W^!GDZ)Auu2V$%%v?DsR+Q{UmkjV--= zW-IfsrRIFL+?>y<%=zqLb3V(J3s~0q=`87&>8v)|$!h;Gomo}d+SSPd|Cr9`m+7pA zP3QLrl9N%GlO;tvIh}iMI;#i$%XDTL>SVTmOlM8MsQFo(EbH8K=0h5b65o1mI;)CR z;@5X{vZkM>vsyKNZk&_Vv+2wyE9q;ZoUG>O>CB?WuQfZF?`NePr_FA5-0WsY&2Dzc z?B->uQ*msRLThlq>}F?FUai^9wwc|m#_VPr)v)y{?irG9wb{+i>v+gFD$31_QA#-S z#1vulGUfa!W0`WM^x!f@p84Pn0+*gF_}t880CBDcX+vx%LtNx^L~JYjYoqdVxcxO> z*ko>ht$t+=x4(APy{+Y#mwG*1ju{7UnCD?b9#TFB*H7m5*DhZ(ncH6rhPB8stKx@T zZW+hzkXt@KMu6%0W_xQJADGPTtzq8xM*(Mn8Z^BuvfyL`3v7>PJ{Hbuo|RbE+ZGnM z%*3i5i)T%>@hrHq3#)(6!tJsJ*2c5ix6RD=U?j6V9?xyG`JR>7{a=}xZH<}P>f)I- zEtXa7>%c7UnYk=C1! z5~CxLtnO!#)t)f3s=g*x|BA$Xr_C(up>Sq>FP__ptGy0`jda>Yx zk&G4@Skj4jRy#YK)!q=ng3-OWJ-MWhIyizQ7qFv~XrtNNS3YQ8cn_UfJ!S+H|2M(ew<+ON$l>&FhR# zv-%a`EcdjT)eMehH4lWd`f7>Wx2yXwqQ%A?%J^j`*0j{X0&iQGwX_qff78NfQx}%B zQQ|i6n)X{*?#g&pyE>i)4q8}MX(tx=!pvxdfmv(1FzeoU))do;WgU-a^+A!@=83HS z{RkHL-puMBkXZ0oIIDd#o&`URWb{xx3yuxv_Vj!kB^DeU%d*f{mKwNyJ?qDvnD2cv zx3OorC!SSVd$GVakyWjXXGsrtVZrSZt9evnb=MhK6548|#HvmR%;Gb!Twge=I~LFC zS4u4Dh{$MHJh#hdt2VRXTNal4*DlQRsF_)i->!IWudn`{4%}v6))Qv_j1J89uyfz` zWUG80wzSN{a_4zi^=uETE%WexV*O?&OY(TwQoo1Cr|){Q^WXMlwoRZ z(mftluZHPC+d|9wto65{{?it^Mt2Cg@XpWn@bLlT1ja@5Ka3ZkEt7BM-y=O#U!#1R4s?Hda_;_V z&2<21&r1WX{ebab~4LaC(BynWVx%IENQiq)jj28w7Mm2-Ho?0YsRfi!@66v!~Z})KT6!cPE%2C zhj#dnLEORrz5NP(IjefzWU6YpZ`SnnlObdS-hUGK_mQ7&w}3X5|Eit^0GbxBo7_~f zZt^dxF5924^*5_;H{HE%GUO9gm8^EqfqH!OKOTBEW$%08!zDG>TMjSY|J_~Dkzd|f zJ?&`WLj$G`oqyvE*_^GRi0CiP8!ZAabqO^&T24!*r*^4-gWuN}H|%-?oicW}dx_x}_&{QAnS z^~T+&@1}WSl4*Lk%95>%KX~F` zZ@RMghXd_@KKg0DQ*+Kfb>W)Dk9<7i+=};~Uoc^=ck~0}=B>K@X4BWxp6jx?_i4(2t`G9ZZyQlUzP%z=^ zwabDZPwaF5G+B-rmbC8qhj(9)54@T`#bA6TuzLF7nSXklzV3eGJ8#~+_R^EjcaMFp zJj2N5UmbYH*>P*1TW|aF%5JA3%^Ozj@7VRytE23%jZXVMBj9+qGJo>5uRi;8%)!gP zdADcUE3e-p(D@OM+%oj>_!lPJ8FtCEU*bMH9o&DzfF}3$@zWo$Jh?P(!+=kEUph$` za>;cst%@C*bi4nJeh>Y+>!$~P_+iF{@XJg44Xt^lgV?Ze%dNBg^E&X`-su0iwc*pdJ6uQ^cJ##I`MFO>9XlNgvo2!CzIx#PXEyk|hkxt;$0D)n3H#&^ zcR#qX;q0$9;XD5F#!Rz2@Q*JRzCL4&u(3zp(N9zEeQjvWTi0#q>0dYavh5%3PWbWm z4rzUkO!6M<-T7Si4@cej$h%9&UH14pv6n9UL3Z!l-u3O}iQoJ7?A_Y`jX!rTUp#2z zN2x30j5`xQ8C~<-rmTAxK6B=t_}j8A<1B8Ldc4}&kR17Z^^`t&T^~!Cx!UuH_tWf6 zN8OW_kLiBbBI&(fdoMlfx$M_ozy4^vd2K_X;l;hvADH`g?33()C6^Rd;$=D2$!I`ni$Mmc8qIj-@s|x#fGyinUF2*qZGcTJlZ&?Vs(rJ>c7%l6&;2 zzkD*fuy^=93lfHPoxk(G1uyTreuC|mzN4<)f7f$s0_$yeolV&g%l1xvV_-~PQtzL? zV_gpY^^Jb1-yN+9OS-1$x_d5cTKmulhvg^h*yo!bd-mxagL>S&=j8*h-?+^GkCP`m z6+YQ1%&GiymbFxsw)rP^T_*CGg2<44P|A| zC2y);koEE7UA`If;e^FUuKdB$x50S*fme21{-J&KQ)#cimUj7<-~8C`{gNR&8Zv)Q zKVly8*cXHP_ZvL%Wc1S6M|V87w^PET!DFuIv#sXyzAyd!xogB^3c+ve{!cO7?n>-`VC^Y^1a4?A>6<@}?Q7M>gH>1Q-HecxeWUc$o_&#hc}t;cz9 zX4);+e(>sd>3{3jZ`QKO1J2j|y=UOa_kXQq6D%6!o3>|;cxmo8M?c&uygTQWJKp~Ixx;f8?Ajd14(F%^zOL*T3>SMlI=amhIOCrig3R^sQR(l-}Rn%r0?D#cWfWCbJF(pgMPaGxm8DA z?|G{8*{KW|jl zl6J+cYZu0egT71OV0&!d`wi3I?KS(B{6p`2wcx7>J?Xs*`P=7TlDK8}jGeB^Yd`3* zL-3D#?#+U}?tts$NY(y-^Y=@${~t6eHiM1owwxya-yK4i&9N28f{3q4wezIP|8J9s zw)IkeaCQhg&U*R(0}|1JUdj)$Y50MUU1t0sho=47lKfk^v>^8bkZe`xtoM%)*5 zTDx4y#*i%N?A*Le`1=~S)zatos~o!-)!t;3wR7x~?a z5#M~bE5BGV1MDiNnNIj1FM}I!=PXxwdEQKy(>2dm)|PqBnckuqgNF}E3bohibip1j zIh`}g%N1|wFC0#jfdTIQ7StlawVm~I-b_(c}EOeO&D8~Wc4 z74KE?>E1-)keLHE5S;-w5}gAMCpr(@f#_&&MK-P;*g$j~*htg>9H#o=g`uj7Jx}z2 zA6~q8+z&6TtSNqY|I_|=FXG>{M-TWn#o_*nMQFEX|E93Ip!aVYl_1x>xo5>(TCszR zuQYtZrF%c?PUO%sKsEypEIYC5oOtuHJ-hzadqqLQY2onu=lq?QuY|F=yFc(pEK5x= zBDW7#6ePsndfT2ATe-f-HDJg@G2LGnUk=5F(86vby>%Zu}*MgWRUiX<5oj7UnduX zRs+>V2PGn*hv8cECVY1`o>y!^j=CVrup@})g>}Amf+j4ONWwys&?CxdTnYsg)farh zd0FP>R3uZH6m>%i1Q%2iTSz&1QpQ{||M6-@^M1ME{WGf5~ql*3=rn7tdTH(GnxkBNzEVx3B++ zul?KC|E<^ec%jA zJgng<4{LhL!|I<>;sSElc$j;QhxyicSe7o`lr@vspA4+~a$SO=X4~raVaA|`QI&^Hy5>)<_HiKIvF)!OHtnxU9^nuKhwO`H zs8@yh;Oj6Q%t6y3(78=%1qUjWeKqup`Ub^sMr|AG|Q0a!D0{FSnOfdI)0qj!>nEpOZ0k}$*bf6uy{Rel-I**iao5h*u%CJd)NV8Iz6O& zJ3KOUy(ou`o~!hY(0&U$K%%g@3kM~>O8pS`X z`^hnEQVlng{ks5rO7H=qzA_vV)Vgc^ww0y_e6nl(HiV(|*D^npLWU95Iat<<9=2^l z4x?>KALacOc9maN>RdY^hmFe2VM&=ej52eWB{PS`;aUgQ%p8`OnZxQPZAbLex})>XLM{(JCovA;nY!P1u%+)i zSnd0YAK1`-3O~Dtkw=|_#ZAm%WXoxDe2shA!*;yXx}T2FjCHG!*hW7^85D1(ts(G< zgJIl8KdtO7G(XRa0eo{#gWY>wgoA3`)qdLC?X>=>1!(P1)&Sx$3nB?wttIylXtRHA+wNi0wzuw|v;W+>R_Sf@&(nP)%4ZQ+(Z-wo9ZoDkXNm{+CP8O{j`1>%Fz02iOcWzy3k{BR~ReLX4S8F zm@UJ>a$ocCF%|t5EDLDJ*=9IcO@@PQ%uw2MX@-MUsn;4*XE<0e!@;sL9BfL4gQe^E z2QnP2F2lhNXE@k4U3hJVgPp^DGaSs9;b86z2b-tk>%nxBgV9Y6){x;~^=i5}g#7`q z{K0ttE(9{rU$dF*)9hCB)hM+c`FH<|d1ui_;YR|ljv+^#K0BMGmuIuY+p~FnLdVmx z*Roj>^6+J|xLgM#TigBBy~D$zcC_xV*MHEuH@g3Y{_0#s9Q=J>tk=&x6BEkFv6Vd=;-Ih(~*jZwx}^&YjaD|H{0 zoXs{SXR~0kQszK%He0G*YfzP(&8m~LS$c9d%Sz5>HXXk@WDaqN)ot({ble3vm$8QBG+3Z|$Hmgt0W{1^umXv?qh5*wajQ8)tyyR>)A~=T8 z_1Ciw+yc1*JJfbWeFo} zTtPOY`m8p`*SOa`Y{$;l{dI7yqJ*I3XWRVSd1~t(-2&bZ$25#x6IsBkg)|1685|6i{i0S?hw2?}hCGkxdf#4?b-0`&ab;v%V+Ne(<+~AHGTW{Sp2DR^^K!!VhWD zj=*~T|HM~&&-ke1!trOrmb|~~l~)rppEwqIDg1$|^GnR{?6v?LRK>WL+#BW#7mUkx zE*)OIK4AXHGC;_Rih}4Qj}L&&R_I&mR5hq~i}*ca?8}EyB1y5uiJ`oD?Z%SfAS|+pFF+gfrq;0 z)p}>W^-Mz4xiPcT739e(E$9hIzb!Iju8GtEiw_G-7VD7h<|rT zeE5^s0DK+E%YQs1KK#OHfcWV;8uP_Fbu{?%LTLDy(E#x^KT80_&(oM{U*payRRDjK zMyPzvpA7(f_|pbf1!lP8${4Y#_26BXX;J_!6pm54JHBeja=;ZC8BU zAUz)NUO2tt{3z}VC2&kx-+=#Tfynkc(Tx@*{j<2=5XH|A_zz+Y{T0y?HGlYe34W#c zg9m@8fyj59XsF7E|C!n^6hBYk!~c9zz2fr;G<>~eeXYEopnpX9KUDnWfPNeIyRxNz zw~0hGM~J)810Q;3lmKHUnBRBheuHv9CVEX!%D))(d5s9Z`Vb#}rD|R!x=-a}K~VKI z(QK7}8~P(A*nItX3HN_g^SP7a8cBR`=_w_}hA&=o+;=nA_9G#NPwN?=27ouO|8`TgjhqEON)5O8w#6 zENLY1=Z^UB4P~t(s#5C11jZ45){9 zxF*4>fWpWx%fDhcr+Lb<33FyCj2Y$QON#uHdD&2!{L)#zGFN$dGVV`>zB&GU9$w(m zIGijhDR9jjU*a!Kqrx(mi)Q6{y`@Ub84FU>JdiVw-4YZ+jx8xrLr`Mn&bm}Bfxn5> zl9HD_)8{IoLT+V2joMPB8On8vx3t_fas(9?dgqk8^|3fd4VdW4E8v+qo%#OxK9_Tb z6BR4>7nIKNQ(-|VZdC3sC@P`CeB?-l2pTy;mp(K2u6#un$RI_ej{H9&JMKf|-W#vVsCFGjd+~~ZlN*7bgtz7Hwuk=YJ zSl=v4&6IGZQN2Yo@|8uj6R%HxG5W94U4O?|&5Q-ZmAxX(NX->3S3^cLU&C~b7DE@> z9HuOUMD@==Mlw*CN?|r=Xy##n!7Q*th}E0cHgNv`QQ_P#mbMSqxu~ck?y~^jEcp2A zRuqAISE{sPTPKXFR63T&H_~dAj^?z1o>6HFr$wq!=Mb3tVqUmc#q}yCNeMTq*rehp z6wt|!S-|~>CIN>LO#u!kng-l~ zC>Pj9Q~=zQ$PIiMkr&uRC1VMLpOuOX@djwad)d?nE~;25GEz*eGK;66lq zffI=i0FNR%2t1Ie4mg(R5b)(hhk?5i9RRf{0shnWmE?7pRl6~rZVX}(yAGFbEIAshI1M9DZoI;c0ZxPE##FJ<$7v`? zx^ZIJn9FHIb;B!dV-}~e8gawyOrwp{Na}`d*~TPJ!&8!U_1r;(K#Q^-aOr&B@u zK=VcRI%Msh2O8#)*s>o`3LbQS1YPUF^YxTa{V;q)}n@PynL zYwKnFODqPe$$_Ho(^8vbw_b2*Kox(|TP;VF#I#kV#<#Hoz@yP2iyLMx3(OA!ERMic0 zdX2E^qwpq2q&`D%W_r+ zqPlunUW#}2Ygs&_rZ8CChtFM0E|a+%tkG_iwVCi$jXjvb;Ki zsO~#iHboNozL({mkwo=PvOF!4DCg94-?kRth2x~!OAKox+VBWBR`dOar*@{7EOWoHEqS!~ezQw)hFO9X zYY%Z$sNNs1f59MG-iL);OL~17sxCEDMYd6fG_4Hi1Wlu58Gcc9d9;)vQ_3}@YrggD zt^DQTn~1ag_1DQV_Iv?o7o0z>zD}00=2P+v@#8m6svT%}&Dch{>?jxB{-8jVo+8V5 zliDm7d_&&)+or)taa15$m?FzqOI|FkVN%=eiaPa#Kho5eI-xvCB2jg!EW=-|E>G^$ z@h13WG;9$fLmm?!ORaQC*l}^+nqVdF+Lc(MM$& zYqyK!Q7afejk{PoqiszFqQL9241dQ;9xc8mRsVr;;sC!`_vJTrO)|XPc3&6M+Hjz0SNxD>7>VxNC(Br)BVX0WWvXNm zOCqJHv^|n3WuIhBF;9q;qEhxqCi^}KMbh!o&8aF6G1JU^e{Q{zXzzYm#yHU`U#sYe zRJ>;*cB(m5xe2nxm++{OsOJG$h7KCi-Gh3nK3r2JtN31|WU=p&qU@@3)>PcwlGZ8& zU-*PDBIBE~jJ3UT|8yy8v7uD00Uy88!-%YJ$};v}5a;gDcRfw262!@EHl87)Lz~aa z5DafKzBnyXicR_LONQA)T^LcrVOhqPE~Kr>b#0ZRZ!63KO!$UWZY$eV^Tak{C-Y}-?LcJuLYDb{rur@>iMD1tet4f!I}oLQApKvg`%0EE zX+s_@erNAgy93^qar`B;s~sB7Y%wPGG!aevT9&cr)aLy&C7bANqc5hIr>M0}*(XJ% zH2Zo*zeQ#Bp{eR#mWinLxGZD86o7GVwTUR>ge=3?{6+2`5X4W~XjsLs@=+7f!jrNL zKlK++|3Vw-)A%@>lPt-9bQ%d6Bxk(X32@SH0 zvkL%*1a|~cQiCkRXB+@|EsP)<-5|@@!$e+-#Y`zloEoWgF1s14gph8GFJ2 zge651J=)kZCxC6P)JURLjdHvH*LL_n8friAFy9BtnRHuF|4#Am%0axgv6$6vEN1U* zEM}i=EM_M*7PF>}#Z1^#%px}xvu>M;S^rJN?23#0Fbu)pJmf)3;7^{2@8M(X2xmJu zBgI~r-p(HO#4snsRFB))+okB)Z{DZq*{|NM=-IzwXl-Y2)O*F;UnSNhdOLfzgNmO0 zl(!WFOZck<4Lf^=J8_g=Mnn%)~aIe-!XT7G56;PziYNTidoWGVyd$|9^z|S7V&*WXjtnNDxt9q!I(Ot!?_U|6<<1qJ;V(zyv>xp7k zySAA77era%Pmt=16`KIZ)qbJ*4Qz*YXoq%ahjwU(c4&uoXoq%ahjwU(|EuBU_+7@5 zYZpa)+CQb^(YeOX#l>%2vgM{F-NUlR_1gBWseh-YH~W74@x4Ry-o9~A!4pweez@eF zVUfZ6N5A%3<|yB1(HZ;q)us2Ue`xHcUnkl(|D}twN6n#IcR%uI&Ya~r6Az5+=DBOo z;gV-MK9L`7nL0Dp7C(R8ZAb4|@TWDtcM7Nb>tE_uJ^8=BUVZZ76dP6~VAmspV#N{_8;T+pu*Y7oVA}(V<~}PsQBIEUdCzyg`^SBr%a3Q+nLRUW z>YhC_dzEHg&wtaUXIcvLuB`4IQ`k14$H$EHZ%qIE!{0t^i&K7P`aE(iS3X-`bnK;F z@ys_9)-H)8JIUpXaAJ~Hya^9KIhZ^c0; z`)5qjn=onowV4)Uf_(3d3J`4=cEfJ`pn8U8ZbuuHIjuRj^$+3Qz#UcJ+iV@Kc%C^V zC-Y?W9^d>{Nmd6}q&?o(!Di2rwOzxOItw}^GWFgq{N%lJotslgdU}veYWwN0SG};v zQ+Pnk)5Wd3zUtGHzU?_B=TmZQ6dmp1@b&SqPd|Jrj-7k?cIN4hm-<{?a7%e9alzr6 zoj1f?dwaacz45YdW$zS5q2s<6g(uuy>f7y{d!R#_Ui|!|i?b%~SrT2IGi0h)JstN) zg0n*$yDsRz%w~YglIbw9chIS^Po3tD9_8&iVpC6xR_$8fYf%9iwgW6CwRIV0*7b`= znS*WYhQ1r7jPKd{Rzu$MOE>Bce7nX#S>eV1Dr+DZcD&eh)rOU3RtrX2@Vz>GI5Onj z7vJzbm8Fuf>Jp*NV{z}-&yO|RS#GEs^8R3cn^MlU=hw>;wmyhV54Jo4Jlp*8jZaq(@gBLyeJzqNf<2U!gHusGN zY?K$dwwO70dYZ56Z1?^^Dkq$Z{cgA*WN@PaVJk&Ce%5wp#jl2JXfVlZe8YtjvnHbO zGV?CIGq`hwlXNHOS{S}*cCY@3Z7aJy&mY;TZ+e41ixP@^q!h2Q?os3=d{W-f&Xc*( zF0S>?vsZeCoN8=gb6EzjFKqSLbIW*GSjnX+9UjhzeRucNrOYR>w|rmht+0CCV> z2mqFH0q$@C$}k@eKpqF65%Q>T00MZRvfHwZ1F(Y&py05wEO@4TjRRoAV{KxJc>tTa z00CTpBY5QjbmRg|;sNaC0(|2DpvsHK9Dq3}KZ9lAvgL~80;B=JJ3O-nfax57Kezzl zJb)-JOFxkd5DEY&HtWL$(BlGZ;Q^F#S>BTa7>@&x4FC((^@>M%bL45~0vzQ4jOGCx z;sR6w%lpsc0;KQ&T5thQask%x04DQTK7NAs7&!nVxd4G&fH_=%7CeA^0FZ_9JUoCh z9>6dz0EY|ko&(UF2at)pI9z}eJb;E+Ka}C;0L)dlNBo06l0C=n0 z2yOdyMp`@oKQ4d{4`4mYN?_f&Y~4@~0pS9~asi&>IN$=HYKyO2R;~ocI$_9 z0=(q_tmFV>Z~&HI8*%}TaRK)605)*}Qn>*BT!6=10JNEiY4AD2v4?$D!UJ$d`5l}e zxNKiB*tR@??OcFQIF{9O7beGM)pXl&*tu#9^3L(t@w zT4qH#Cl0_M4m*BO4lJ7k@SY3sfdkNk15nBXh*dwEG91&`&%n;xDEobb2cSUOJb(u{ z|8ZFPGMp#5>OAwf0KIvve9#ykz!4t67A~mdf}%K}de-pyf5&C#W&Cc4^Kl~{sKkag z@Idvf#$$P~{dfQ#IJa;Bx^Mw(xB%yHyyE!h0rbV^lB>4w#Ra&6V~xYUFR*X0y;pNV z_3RY$03PxHR&YV}4q41&=NFXuI)$ry9zbg@fUkPq!!lT^%W<6t(1ZtYipR=M=3tq4 z0La5~hsTbq$@u+~11h?BA7#6`;ke-d?BlTW2-+o^k8_~<9k3AP>3INkcmUJ6Y#5FU z5}l*avDE#0ToR~lYo z2QZ$;j*lJqZa^Lw08mSL*o*AD+6RjLV}b#|>dNe9-@C<+9S@-M{8nCnF0|mFyq>hf zv&{;A8=VE-(06&ic_BR?JlJMp-Z3V(gNJDJA59AOw~Y{7H3$`0dVXv)Ca_((nQ_}& zU(bE`*81eEJuCUGCOLmqgxj2-UGlKK^1QA2db3`0qAV_5u}yq*w+r`J#QUY!*Sw!` zYTOC)*EUZUzg>J%Z=4a&M)c*9mJvb~SCYb6A+|`@65IogH3XdHU*>g zmJixJF!yps-Q9IX3oUFospnFQPHZ^yxgcp*|09!kmhN##Jj$#)71Vt5ne#dE*Kz`9 zEJ$*{vM)K6_fo*ySQ6gOmpG$YQlMdwwUJ+FC2xRmizmqZT_ zH0-;{M)2IldCQ}7r@wVF_1}1$zj&Er+gXL3o)!A%k2sk3D(Yb7RmXsR-BSBMX)>+X zArJkLJ8wpHXjx{-+jiwx*T^*$Tl@|O@eJ(TmwcONUnT5lH2r!frx4>iyFxBR&q;rI z?aZxFRntnw?=G2pBmUBB*U8N#Z>+ve=>2RFSMQ+g^4g(Ys$K@Jd|WUqp;_d_rUQ29 z&+flz>3Ng;I(f4EZjD)cf zveAn<3me0bLGMpJXq@w@ai1C8`VP9_yf@CFRnr%~^^M%dv@o^Ht8VW%hID)wFnaiw z&Kr*1u6O44uI(L5`i@^Tr|z?)MwXGST0fOF?p#p)hBtkz$iH4*=dp%;I<<=WV~q7h zCa0|ELpsmj9y_4t`SdmSH}k*yHG#P!t3D?#Ix^InvtB1Q=$h@OQ#}n7XP<5C@91{$ zME#WEGhz-UURiOu{KxEb<&D07Yqft-!F;O)&$wy)*0)91JT`ohE$No<`B{T`|4IH| zK9zm1n^&;f-2P7fU!GQ19&{y925Ro{@?9z-JcHEt?2$I^8cn6bwT5d znu5w9KMA^jBL82re2QkEa+nsmI`CRk{{Kzknv=rqgO28Yb+7wJv*siFO;0gF*?e3} zA^#Zir6mYlKyQ&iUtc&+z|#|eo(nIa4hIBa0Nh0~AxBSS>Qq-JVQ5iHj;TNnMuKE8 z9#}XxNioeS(dk@!6)oiH3&r&rhn=JGeS*MuC*c4@bJ+I^zNc~Rh4v_M4})ubTsxzD zF}`0GaM(2ru5*&qG*WQgrEX`$3J$2`YuDmhA9?z5EyV%IW*&oeErzQXRr2uBzRMhSa0hC{bPcr zT?*a%1)Z#WyYu+#Lnmicuiw}+?Zh{a2}KoCLdI{LSTFcOX|o+V)Aeuf?)v4j`|>QE zZ)H(q&3V0xCZm3VmYhcQJ`J0zVbcNxp0dnD#k@-mt48NselvIbS9N5tzOdWlhvT|5>g2bk;D9s^jB+S_6!4 zgiK&+pnrr`efnv|$9=yB7{56ROsawYv0CM8TVE5(mUp98{d_b=Rn_6Aw8E3vsZ0f= zZ=e2;lRq^Id&}63O)xD%Oo=Y{%z3TQGtW`hMAD{u2ANQgfpueeBd91bQ6>Ie$ zo;7HI=?k^$8>gj@BVDUKdusKEiB|vJ(W+lNt@L=lqXFj6)hho=E&Bbn`~h0+vqS57 zOxJo|cWb4O(;9!cFV+CdQ&V*t`kQIxhkG0iFnpaB{cMfkmgafT8gGNNp3l!({e}Bo z4UoQy`BDw^E42Dcrd7TQt^R1PH6M1;iho)w|GQf4(^0E`o@tGzXsz~+#07;KSX4Zl z&;ZL{sWqP+)T)n*7Jb}vYM`pWR{PA*YHu&C`NvLcd?ac4cWC9W668|@^NZ1XzE5hU zx2;iMjPHa0YNWrcRsUSA_e+W>npXQw)`~w&tGyLkHDBRbvIbbx?ppO-qtzZRTIqwe`U}4aXn^(e(t6%fwdnWK zdS0!y=&z{pd}8?~X!X}#t@g{W5g+q!srCE~)vAxLR{!8xmj;-Aw^n~1)oOqIHlYE= z7i*1=_FDb(Mr-|4u2rA4TH_t}RT?0DL#_JZnVbd~p071t-fPu2QEPmh)oSnOTJ2e> zRleO?{pG6FpFgz9r&4sR2A1!%R{QMKioZ@PziBn%*P<4+sD(C!k}z5v8TKD#$edP1 z|Hm*ybR9w^k}xVGVN@8!(n(NXe+RjwMqa2#=y#E7AXT5xkNSjG>l4Z`Ak@f!y&4-3 z+Sq{5mIj2jH6YZ%fY5FRB?Z4saxNh$ErH9SI%bNT{bHp=sR+ zUEYn*rQHZ!+>OvN>ay0vwyuOua3s{%k<* zXoe%9+Z+kq<499d$?oMc2cS09+C3J3gLYHq^LOwm%Q5du#Iahh5v+=-h^)RCUloK zq1oPq?(-(}pf{mMy$Lmb5y$LPxCiIRsp-;UDed|r=XKzBk zdlS0In^2uegz8Nq)Myf+f=Ps$P9n6)q+jDj8z;qtI^{-Er<0LXkrSzU284SfspL>3 zRh*2ZuvP8UkZob(^h3Yie;+@S389kPk<_V;g!;CZsOZaENvKCF3C(FGp`zQ7Du?8J zZ%5J`bsSu};~p8ccl{kAYtVPnqA#)eD}8|tTLz?$ee&Pv<1=cbwikkskCjkg4++f~ z#?t9Hmr%i23H1n-P?-mNFCkb$g~KE?VVs02hO$mmhl(L=oJTm2gus3i`y0$^^Y7>{ zLz<|U?{8=$>=(23!#ZLiePbk4NF-D!Wy|TXn9v-lgbJris4R-TS3FHZ6QU(lAeB(3 zXx3@6@g;1WCs@A(V8_Yd!0}(wk3gDEEDzb=0q0HRBPv((Nff6_sARE(%97b~rY<2= zm@1)884{{UVejRnOQ;}OLUWc&XmJwjGoP*Qsf3!O5^9%9s7orLV^e=W$B#Gsefal zqIHDg`U`vL^g2Ruxq<%j{)FN&0M1>z)p2m1yjqWaC*iv$Zylj{RQFHn*I^@}O(leS zZ6Y*e6QQx22wk*^&{dlV-LZ+#{hJ6qyNS@7n+PpSC-lW8LPOIDt=>dvgA77jXAs&m zgHVqQLd6+`PR}58c?O{yGYH+6L1De?%Lr{PBea){P)`}5!7@Up$O!G2 zP3SBcp;4IkW0DI@e_Q$o+n2)!yJ z^uCPHevX7bml66N!(@bhlM%|vB-9|2&_YhpH z*i1tGG6{{zBy?6Lp(`^9-Iz(}j!Z&xGYQSlB(yk_(EFK$KF=g{#%4mxGYS2gNvKX1 zp~hK+nr9Jemqn;s7NJA32=&h*G&GCQge*cAW)Zq6>#xtqj-7;7Y>iUQFCrOxP1q7e zB?qFYe0LNTZDE~e^rWiesL!TRh2P&|&;O48f1M!w_Ylfa0@!7<*Dl$Fa+LsmvkB!X z0bH{Q)lmWr%O+G;2{0m?(7H;1ad;njB6HaBenQTIlZ?4W>Lh&5l zVlSb{|JP+Np~w$9Y%if`2jNi;p{VC3GWx`_CnG6962^B^3G2pB^IAMh>8Jm{2=8z|CAjJIDb( zY}>S!uVi>C6`(Nwl3nkv$w zsccg;b=nk7eOEijC1! zmL5$Z%V_PAJ>2XguZkq`%bBOK2;Mr2~iXs-t$O^qKet--|X?lf6e26Ltj&V zyz&%9ihHXR9~m4uT$06x$5gu^>vf_x>J2UuD%wkuXokga`m-Z zeXVD~mZz}=tD9=D1*@CturH`|Q{|cJs`>!=0P(X8zN_%_jP;hff7VU)VTx+~Hltpc z>OE!tX^LvCw#@R+x~XpLj8>f?gsAlo6@>W8CYpS6|Rxgsi_|I^{QejtBBM)=?dy2DVR9)WNRd*RPZ=ZdsA3deN=9y1#Rz&-GQI{% z#_4lDBRD3Y2^}9XFh<0hEUCwh zDyE`u72_MvFrp5Xj4X^{6ff&jSp!Qdw5wuZiY^7~DhA$GGC6jp)M<1XBYE(J@mQ%# z;lo!(;H6|F+$u)Ww2G00GfZlJ72}j#%E)&qnAB5MjK@<$D!BWEDeh}Zb2yKf;zvK2 z9DY7i9Mga*uIW?X@=8YLsbq>pl}z#EDn_)AOXVFZ8A(hjBP*$55-tg74z|&ouS}|e zB`ucls4!GY>sLl%^^}q8$5F*(DHTX~wBit#7Q4t9QQzB) zZ+-(RU%)WF-SQcM=nJFB;8W4|Dn`&Vl2){kGoq(u4C*P%sjg&19rdV3r-zKF>FqE>(_~7K2V8C?-8e*S3VuXG38Hqs2NT!xD6-8By(}%~5?A#N^cbf&3 zEX96a~IMqVMH75yTp$VACF^?Ag|+SR8X;rWd342JQ2TgeEVpE3!#C5-%|f{{Dj zW^%BcaSS6mn9oSQ^QlZ;#t0T#(A1;`R6g@D1BTa`oFi3?Xfi&d#~As5e8yvZB!!&~ zsgvz>M%dq!N|LIW1dlRC-Zz2@4s)q*zw1nbPZ^WY=Mm#n-;$>GjikP}6-@DQJ?eD3 zl2P2%r>Tz=3`FEJ9z81=r(5|<#g{5Zw4;Pc@KQ1f4-Bc~(^p1zrzYlc*G;|t@&d%~nzR52daI@H64M-y&5VN&n>U~*g@G6^s0 zQ{j~=#%W>%l@EK!2>F&&{<)Hot!PN)UP`9IOUa;KKi{`s7}VQWOiCGHY9v+UMNo;M zlJT7sL4`xhn4GdNjIcsLJ=#2Cgz-<9go-jo7WRa3>RibbkIiRfqA!fc8^fP_LEj5? zsiLSZ-ROHuH7BN?tE&o=oGfEdm!Cq;FsZS+D*b`7C%P1M`IX2Sruwb9O0Qt5nI5a_ z?{9#6FdO{dU{e{~NdJ-QWMM@@U|gPB*6JfB*VUukV}-QBSSj%#LVgvY_!) zt24cs$Kr;zhDycI*3-^hOh0ww`#vS{-ClKh*_pOy&)Q`yN*>wU_|2C~QoBQ5Z@z@l zQ;QSZxQ%GsIPH43)HAZgIUfgm4YJB_`0>R3Ege^v&z>D``uOC974FHGk1n5?ocBCa zJo)U4meyfy>QpFATTbvX_mOuvYTTj2iZ1)I24(sLcRv{QW>0$Espb0$!_!wU+t77? z;48cG?XmBZ*NAlbzT4ZxYqi}_;n6lx{@srcKmK7++^xLII`>)+DZAa*{zSu#d9kIf zEQU>;H9oA^DsRS>lD&&g+-c~1MscvRV#wI3r+W>3v1>!fr;_;{M2*Im_w~6ISlDF2 z{7*aL90b#w28!xu%xG3>YCQ5rc3j)g>~4{QhmT`~H`|2Ru5;bc{oRx-2scaG>3{lp z!{?(nt??@fFTGP8k+g7h2)D9lw~r@U$F2BQkztwtX5g-*BsXIGb*%Nlw%5{E-p$Up zUH2oT`<7L+%-(N`jXf|a;PMvX(`(N^&NzEw{=o7r<>M+>SM0Fzztrd6EpGcOuI3RP zED8c0ggx5MxnecF&&r@M&dbEvoz`%;nZ{X(YcDVPXmw`b+Na&t-Lrn#=~Yf-={a$x zaZbwY>?K_)>r@{d5Ga!!l?fiDGzrdsII3>bYuEP1Je{)bMU$)dt8%-VxR=ka6F$m+ zL&F_sZ&?%t4w}OqV7t84{EgEs?%vzAb?g#D@kvF8u3`t1_VqWv>RIvdU2a9gzNFW; zdE!e^!$*b1>)W)Nb8FqUhsGs!4aS{3Tr_D>w+8)9b>Hk%4im4ektfe$_hQ6Glb+~6*Ia`;NfSnH3akIm#EMe{26 zc3E)q8#m5os?YU#r<&^=FLw!xJF#HCXJNomL6qNvkJ(3K4iryw9p0^_>(12sb4&;9 zxYo0vzEV(`mboOPhqdjY#?6cRiQ+m}#ok`->@@dw_FbpGn*~ArWDl2{2xreN@A)dNi;?HV3?-}bI)gwM^)?ecb`NQ1Ygo$rc*+IPI~VfXy9&+3jFJADp!uh<^e+G5bG z@fD+mi#~a+s($8EHL|d0K>D%nO9hV-jUqk|Sk2$j&~WvP`8QWiyS8*471!0}e5i>7T}!23>xwf&hdyKnJye7x(H=N_6+IAurU#2@uO_gQ)IRMFOL4VKS$Ntiy{V85(O^YVvl z`;$`VC0DaVZ9_a_au%I9*SBwW=lpO>kIf%Kx|VLed*GPt;H1ksYwus!v|`86r9<|4 zzIlDOj-=Z8(7QXGj>3LpyV4h))g@WFe&*$GPFpIa7c54vuAE%&NTln0)1eX9vP|w} zE=aDL;~=@PY3aGaIgbZZNDXXNw9$+nX}$aa_o8|Ot@=?Q6oc# zZfTQmjWsDY9e(1*2In<0FXe@9d5VsaPDjip1iv|dV@bcKx4YBno4pH;G%dWIHDFKZ z;aPWE7>~6d|N2Ao?aa0m+XX|`d}}dk{E-Jwnhgq#Fp!*|b2nvq! zX=j+dc71YmyHAr=tq$sT;Y+f9$*?Rce7N|j!-}}R4U>$bjlx@=wu$r|+9qu1uqLC6 zKU>?0n#{al#P3!8_@$zi*~q6ORx0~vy{02idbIU_H<_1s^F*;*gk#yL)VG|<*&RQ| zj5z#kc8X|Y^d5yy)zGpp4}Fq9UyNQoEP72rhIzU{k=fwyhu3}mLwbEdnqTk`>w5hn z*Z3PVg@)6fr8jDM|B2h?{YgPxhV-bO?XE9>N4aH$7alrrz3X0=l4Fg`Fi_I{U+<(oWyZkt6uxI zU)}hIzV)=@?JWX1^Hj zA3EoyTMbL>JH4lARKL=9lP-OlUjOaXr3qEV&5}eS2feyY>~4h@8F6DOMg(`U0Qc#q z8&w%C%e6duuJM}Es>bInWGl{DP|Hxpd{n-T%j4Yi&j$_NLL^gk4-ANHJKt_ZsBiiA zkc`=Lxtm8?Z)uHL)`+XLE%um^5`Ec%_!FS?~jgKt2wW;$xU5lAB+CDQVk|{FB zx*H{wAGI3$Au~Ut{<1~Gv)5E!-qG&-D6Ru%U3i