[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v3 24/52] pc: acpi-build: generate _S[345] packages
From: |
Igor Mammedov |
Subject: |
[Qemu-devel] [PATCH v3 24/52] pc: acpi-build: generate _S[345] packages dynamically |
Date: |
Mon, 9 Feb 2015 10:53:46 +0000 |
Replaces template patching with packages composed
using AML API.
Note on behavior change:
If S3 or S4 is disabled, respective packages won't
be created and put into SSDT. Which saves us some
space in SSDT and doesn't confuse guest OS with
mangled package names as it was done originally.
Signed-off-by: Igor Mammedov <address@hidden>
---
hw/i386/acpi-build.c | 38 +++++++++++++++++++++++++++++---------
hw/i386/ssdt-misc.dsl | 33 ---------------------------------
2 files changed, 29 insertions(+), 42 deletions(-)
diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c
index 7cc564a..1e912d1 100644
--- a/hw/i386/acpi-build.c
+++ b/hw/i386/acpi-build.c
@@ -756,7 +756,7 @@ build_ssdt(Aml *table_data,
uint32_t nr_mem = machine->ram_slots;
unsigned acpi_cpus = guest_info->apic_id_limit;
uint8_t *ssdt_ptr;
- Aml *ssdt, *sb_scope;
+ Aml *ssdt, *sb_scope, *scope, *pkg;
int i;
/* The current AML generator can cover the APIC ID range [0..255],
@@ -775,14 +775,6 @@ build_ssdt(Aml *table_data,
memcpy(ssdt_ptr + sizeof(AcpiTableHeader),
ssdp_misc_aml + sizeof(AcpiTableHeader),
sizeof(ssdp_misc_aml) - sizeof(AcpiTableHeader));
- if (pm->s3_disabled) {
- ssdt_ptr[acpi_s3_name[0]] = 'X';
- }
- if (pm->s4_disabled) {
- ssdt_ptr[acpi_s4_name[0]] = 'X';
- } else {
- ssdt_ptr[acpi_s4_pkg[0] + 1] = pm->s4_val;
- }
patch_pci_windows(pci, ssdt_ptr, sizeof(ssdp_misc_aml));
@@ -792,6 +784,34 @@ build_ssdt(Aml *table_data,
ACPI_BUILD_SET_LE(ssdt_ptr, sizeof(ssdp_misc_aml),
ssdt_mctrl_nr_slots[0], 32, nr_mem);
+ /* create S3_ / S4_ / S5_ packages if necessary */
+ scope = aml_scope("\\");
+ if (!pm->s3_disabled) {
+ pkg = aml_package(4);
+ aml_append(pkg, aml_int(1)); /* PM1a_CNT.SLP_TYP */
+ aml_append(pkg, aml_int(0)); /* PM1b_CNT.SLP_TYP not impl. */
+ aml_append(pkg, aml_int(0)); /* reserved */
+ aml_append(pkg, aml_int(0)); /* reserved */
+ aml_append(scope, aml_name_decl("_S3", pkg));
+ }
+
+ if (!pm->s4_disabled) {
+ pkg = aml_package(4);
+ aml_append(pkg, aml_int(pm->s4_val)); /* PM1a_CNT.SLP_TYP */
+ aml_append(pkg, aml_int(0)); /* PM1b_CNT.SLP_TYP not impl. */
+ aml_append(pkg, aml_int(0)); /* reserved */
+ aml_append(pkg, aml_int(0)); /* reserved */
+ aml_append(scope, aml_name_decl("_S4", pkg));
+ }
+
+ pkg = aml_package(4);
+ aml_append(pkg, aml_int(0)); /* PM1a_CNT.SLP_TYP */
+ aml_append(pkg, aml_int(0)); /* PM1b_CNT.SLP_TYP not impl. */
+ aml_append(pkg, aml_int(0)); /* reserved */
+ aml_append(pkg, aml_int(0)); /* reserved */
+ aml_append(scope, aml_name_decl("_S5", pkg));
+ aml_append(ssdt, scope);
+
sb_scope = aml_scope("_SB");
{
/* build Processor object for each processor */
diff --git a/hw/i386/ssdt-misc.dsl b/hw/i386/ssdt-misc.dsl
index 96382a6..26b9241 100644
--- a/hw/i386/ssdt-misc.dsl
+++ b/hw/i386/ssdt-misc.dsl
@@ -41,39 +41,6 @@ DefinitionBlock ("ssdt-misc.aml", "SSDT", 0x01, "BXPC",
"BXSSDTSUSP", 0x1)
}
-/****************************************************************
- * Suspend
- ****************************************************************/
-
- Scope(\) {
- /*
- * S3 (suspend-to-ram), S4 (suspend-to-disk) and S5 (power-off) type codes:
- * must match piix4 emulation.
- */
-
- ACPI_EXTRACT_NAME_STRING acpi_s3_name
- Name(_S3, Package(0x04) {
- One, /* PM1a_CNT.SLP_TYP */
- Zero, /* PM1b_CNT.SLP_TYP, QEMU doesn't provide it */
- Zero, /* reserved */
- Zero /* reserved */
- })
- ACPI_EXTRACT_NAME_STRING acpi_s4_name
- ACPI_EXTRACT_PKG_START acpi_s4_pkg
- Name(_S4, Package(0x04) {
- 0x2, /* PM1a_CNT.SLP_TYP */
- Zero, /* PM1b_CNT.SLP_TYP, QEMU doesn't provide it */
- Zero, /* reserved */
- Zero /* reserved */
- })
- Name(_S5, Package(0x04) {
- Zero, /* PM1a_CNT.SLP_TYP */
- Zero, /* PM1b_CNT.SLP_TYP */
- Zero, /* reserved */
- Zero /* reserved */
- })
- }
-
External(\_SB.PCI0, DeviceObj)
External(\_SB.PCI0.ISA, DeviceObj)
--
1.8.3.1
- Re: [Qemu-devel] [PATCH v3 21/52] pc: acpi-build: drop template patching and create PCI bus tree dynamically, (continued)
[Qemu-devel] [PATCH v3 23/52] pc: acpi-build: drop unsupported PM1b_CNT.SLP_TYP, Igor Mammedov, 2015/02/09
[Qemu-devel] [PATCH v3 25/52] acpi: add aml_buffer() term, Igor Mammedov, 2015/02/09
[Qemu-devel] [PATCH v3 28/52] acpi: include PkgLength size only when requested, Igor Mammedov, 2015/02/09
[Qemu-devel] [PATCH v3 24/52] pc: acpi-build: generate _S[345] packages dynamically,
Igor Mammedov <=
[Qemu-devel] [PATCH v3 30/52] acpi: add aml_field() & aml_named_field() terms, Igor Mammedov, 2015/02/09
[Qemu-devel] [PATCH v3 27/52] acpi: add aml_io() helper, Igor Mammedov, 2015/02/09
[Qemu-devel] [PATCH v3 31/52] acpi: add aml_local() term, Igor Mammedov, 2015/02/09
[Qemu-devel] [PATCH v3 29/52] acpi: add aml_operation_region() term, Igor Mammedov, 2015/02/09
[Qemu-devel] [PATCH v3 34/52] acpi: add aml_varpackage() term, Igor Mammedov, 2015/02/09
[Qemu-devel] [PATCH v3 36/52] acpi: add aml_processor() term, Igor Mammedov, 2015/02/09
[Qemu-devel] [PATCH v3 26/52] acpi: add aml_resource_template() helper, Igor Mammedov, 2015/02/09