[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 06/17] x86: acpi: _DSM: use Package to pass parameters
From: |
Igor Mammedov |
Subject: |
[PATCH 06/17] x86: acpi: _DSM: use Package to pass parameters |
Date: |
Fri, 1 Jul 2022 09:35:04 -0400 |
Numer of possible arguments to pass to a method is limited
in ACPI. The following patches will need to pass over more
parameters to PDSM method, will hit that limit.
Prepare for this by passing structure (Package) to method,
which let us workaround arguments limitation.
Pass to PDSM all standard arguments of _DSM as is, and
pack custom parameters into Package that is passed as
the last argument to PDSM.
Signed-off-by: Igor Mammedov <imammedo@redhat.com>
---
hw/i386/acpi-build.c | 40 +++++++++++++++++++++++++++-------------
1 file changed, 27 insertions(+), 13 deletions(-)
diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c
index fe676b4831..8700446f50 100644
--- a/hw/i386/acpi-build.c
+++ b/hw/i386/acpi-build.c
@@ -431,11 +431,17 @@ static void build_append_pci_bus_devices(Aml
*parent_scope, PCIBus *bus,
);
aml_append(dev, method);
method = aml_method("_DSM", 4, AML_SERIALIZED);
- aml_append(method,
- aml_return(aml_call6("PDSM", aml_arg(0), aml_arg(1),
- aml_arg(2), aml_arg(3),
- aml_name("BSEL"), aml_name("_SUN")))
- );
+ {
+ Aml *params = aml_local(0);
+ Aml *pkg = aml_package(2);
+ aml_append(pkg, aml_name("BSEL"));
+ aml_append(pkg, aml_name("_SUN"));
+ aml_append(method, aml_store(pkg, params));
+ aml_append(method,
+ aml_return(aml_call5("PDSM", aml_arg(0), aml_arg(1),
+ aml_arg(2), aml_arg(3), params))
+ );
+ }
aml_append(dev, method);
aml_append(parent_scope, dev);
@@ -480,10 +486,17 @@ static void build_append_pci_bus_devices(Aml
*parent_scope, PCIBus *bus,
*/
aml_append(dev, aml_name_decl("ASUN", aml_int(slot)));
method = aml_method("_DSM", 4, AML_SERIALIZED);
- aml_append(method, aml_return(
- aml_call6("PDSM", aml_arg(0), aml_arg(1), aml_arg(2),
- aml_arg(3), aml_name("BSEL"), aml_name("ASUN"))
- ));
+ {
+ Aml *params = aml_local(0);
+ Aml *pkg = aml_package(2);
+ aml_append(pkg, aml_name("BSEL"));
+ aml_append(pkg, aml_name("ASUN"));
+ aml_append(method, aml_store(pkg, params));
+ aml_append(method, aml_return(
+ aml_call5("PDSM", aml_arg(0), aml_arg(1), aml_arg(2),
+ aml_arg(3), params)
+ ));
+ }
aml_append(dev, method);
}
@@ -580,12 +593,13 @@ Aml *aml_pci_device_dsm(void)
Aml *acpi_index = aml_local(2);
Aml *zero = aml_int(0);
Aml *one = aml_int(1);
- Aml *bnum = aml_arg(4);
Aml *func = aml_arg(2);
Aml *rev = aml_arg(1);
- Aml *sunum = aml_arg(5);
+ Aml *params = aml_arg(4);
+ Aml *bnum = aml_derefof(aml_index(params, aml_int(0)));
+ Aml *sunum = aml_derefof(aml_index(params, aml_int(1)));
- method = aml_method("PDSM", 6, AML_SERIALIZED);
+ method = aml_method("PDSM", 5, AML_SERIALIZED);
/* get supported functions */
ifctx = aml_if(aml_equal(func, zero));
@@ -662,10 +676,10 @@ Aml *aml_pci_device_dsm(void)
* update acpi-index to actual value
*/
aml_append(ifctx, aml_store(acpi_index, aml_index(ret, zero)));
+ aml_append(ifctx, aml_return(ret));
}
aml_append(method, ifctx);
- aml_append(method, aml_return(ret));
return method;
}
--
2.31.1
- [PATCH 07/17] tests: acpi: update expected blobs, (continued)
[PATCH 01/17] tests: acpi: whitelist pc/q35 DSDT due to HPET AML move, Igor Mammedov, 2022/07/01
[PATCH 11/17] tests: acpi: whitelist pc/q35 DSDT before moving _ADR field, Igor Mammedov, 2022/07/01
[PATCH 17/17] x86: pci: acpi: deduplate PCI slots creation, Igor Mammedov, 2022/07/01
[PATCH 06/17] x86: acpi: _DSM: use Package to pass parameters,
Igor Mammedov <=
[PATCH 15/17] x86: pci: acpi: reorder Device's _DSM method, Igor Mammedov, 2022/07/01
[PATCH 16/17] tests: acpi: update expected blobs, Igor Mammedov, 2022/07/01
[PATCH 05/17] acpi: x86: refactor PDSM method to reduce nesting, Igor Mammedov, 2022/07/01
[PATCH 14/17] tests: acpi: whitelist pc/q35 DSDT before moving _ADR field, Igor Mammedov, 2022/07/01
[PATCH 12/17] x86: pci: acpi: reorder Device's _ADR and _SUN fields, Igor Mammedov, 2022/07/01
[PATCH 13/17] tests: acpi: update expected blobs, Igor Mammedov, 2022/07/01
[PATCH 09/17] x86: acpi: cleanup PCI device _DSM duplication, Igor Mammedov, 2022/07/01