hw/i386/acpi-build: Move aml_pci_edsm to a generic place
Move aml_pci_edsm to pci-bridge.c since we want to reuse that for ARM and acpi-index support. Also rename it into build_pci_bridge_edsm. Signed-off-by: Eric Auger <eric.auger@redhat.com> Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com> Reviewed-by: Igor Mammedov <imammedo@redhat.com> Message-Id: <20250714080639.2525563-17-eric.auger@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
b9dc4e04c8
commit
bc8f29df27
3 changed files with 57 additions and 55 deletions
|
|
@ -35,3 +35,57 @@ void build_pci_bridge_aml(AcpiDevAmlIf *adev, Aml *scope)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
Aml *build_pci_bridge_edsm(void)
|
||||
{
|
||||
Aml *method, *ifctx;
|
||||
Aml *zero = aml_int(0);
|
||||
Aml *func = aml_arg(2);
|
||||
Aml *ret = aml_local(0);
|
||||
Aml *aidx = aml_local(1);
|
||||
Aml *params = aml_arg(4);
|
||||
|
||||
method = aml_method("EDSM", 5, AML_SERIALIZED);
|
||||
|
||||
/* get supported functions */
|
||||
ifctx = aml_if(aml_equal(func, zero));
|
||||
{
|
||||
/* 1: have supported functions */
|
||||
/* 7: support for function 7 */
|
||||
const uint8_t caps = 1 | BIT(7);
|
||||
build_append_pci_dsm_func0_common(ifctx, ret);
|
||||
aml_append(ifctx, aml_store(aml_int(caps), aml_index(ret, zero)));
|
||||
aml_append(ifctx, aml_return(ret));
|
||||
}
|
||||
aml_append(method, ifctx);
|
||||
|
||||
/* handle specific functions requests */
|
||||
/*
|
||||
* PCI Firmware Specification 3.1
|
||||
* 4.6.7. _DSM for Naming a PCI or PCI Express Device Under
|
||||
* Operating Systems
|
||||
*/
|
||||
ifctx = aml_if(aml_equal(func, aml_int(7)));
|
||||
{
|
||||
Aml *pkg = aml_package(2);
|
||||
aml_append(pkg, zero);
|
||||
/* optional, if not impl. should return null string */
|
||||
aml_append(pkg, aml_string("%s", ""));
|
||||
aml_append(ifctx, aml_store(pkg, ret));
|
||||
|
||||
/*
|
||||
* IASL is fine when initializing Package with computational data,
|
||||
* however it makes guest unhappy /it fails to process such AML/.
|
||||
* So use runtime assignment to set acpi-index after initializer
|
||||
* to make OSPM happy.
|
||||
*/
|
||||
aml_append(ifctx,
|
||||
aml_store(aml_derefof(aml_index(params, aml_int(0))), aidx));
|
||||
aml_append(ifctx, aml_store(aidx, aml_index(ret, zero)));
|
||||
aml_append(ifctx, aml_return(ret));
|
||||
}
|
||||
aml_append(method, ifctx);
|
||||
|
||||
return method;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -338,59 +338,6 @@ build_facs(GArray *table_data)
|
|||
g_array_append_vals(table_data, reserved, 40); /* Reserved */
|
||||
}
|
||||
|
||||
static Aml *aml_pci_edsm(void)
|
||||
{
|
||||
Aml *method, *ifctx;
|
||||
Aml *zero = aml_int(0);
|
||||
Aml *func = aml_arg(2);
|
||||
Aml *ret = aml_local(0);
|
||||
Aml *aidx = aml_local(1);
|
||||
Aml *params = aml_arg(4);
|
||||
|
||||
method = aml_method("EDSM", 5, AML_SERIALIZED);
|
||||
|
||||
/* get supported functions */
|
||||
ifctx = aml_if(aml_equal(func, zero));
|
||||
{
|
||||
/* 1: have supported functions */
|
||||
/* 7: support for function 7 */
|
||||
const uint8_t caps = 1 | BIT(7);
|
||||
build_append_pci_dsm_func0_common(ifctx, ret);
|
||||
aml_append(ifctx, aml_store(aml_int(caps), aml_index(ret, zero)));
|
||||
aml_append(ifctx, aml_return(ret));
|
||||
}
|
||||
aml_append(method, ifctx);
|
||||
|
||||
/* handle specific functions requests */
|
||||
/*
|
||||
* PCI Firmware Specification 3.1
|
||||
* 4.6.7. _DSM for Naming a PCI or PCI Express Device Under
|
||||
* Operating Systems
|
||||
*/
|
||||
ifctx = aml_if(aml_equal(func, aml_int(7)));
|
||||
{
|
||||
Aml *pkg = aml_package(2);
|
||||
aml_append(pkg, zero);
|
||||
/* optional, if not impl. should return null string */
|
||||
aml_append(pkg, aml_string("%s", ""));
|
||||
aml_append(ifctx, aml_store(pkg, ret));
|
||||
|
||||
/*
|
||||
* IASL is fine when initializing Package with computational data,
|
||||
* however it makes guest unhappy /it fails to process such AML/.
|
||||
* So use runtime assignment to set acpi-index after initializer
|
||||
* to make OSPM happy.
|
||||
*/
|
||||
aml_append(ifctx,
|
||||
aml_store(aml_derefof(aml_index(params, aml_int(0))), aidx));
|
||||
aml_append(ifctx, aml_store(aidx, aml_index(ret, zero)));
|
||||
aml_append(ifctx, aml_return(ret));
|
||||
}
|
||||
aml_append(method, ifctx);
|
||||
|
||||
return method;
|
||||
}
|
||||
|
||||
/*
|
||||
* build_prt - Define interrupt routing rules
|
||||
*
|
||||
|
|
@ -937,7 +884,7 @@ build_dsdt(GArray *table_data, BIOSLinker *linker,
|
|||
dev = aml_device("PCI0");
|
||||
aml_append(dev, aml_name_decl("_HID", aml_eisaid("PNP0A03")));
|
||||
aml_append(dev, aml_name_decl("_UID", aml_int(pcmc->pci_root_uid)));
|
||||
aml_append(dev, aml_pci_edsm());
|
||||
aml_append(dev, build_pci_bridge_edsm());
|
||||
aml_append(sb_scope, dev);
|
||||
aml_append(dsdt, sb_scope);
|
||||
|
||||
|
|
@ -952,7 +899,7 @@ build_dsdt(GArray *table_data, BIOSLinker *linker,
|
|||
aml_append(dev, aml_name_decl("_CID", aml_eisaid("PNP0A03")));
|
||||
aml_append(dev, aml_name_decl("_UID", aml_int(pcmc->pci_root_uid)));
|
||||
aml_append(dev, build_pci_host_bridge_osc_method(!pm->pcihp_bridge_en));
|
||||
aml_append(dev, aml_pci_edsm());
|
||||
aml_append(dev, build_pci_bridge_edsm());
|
||||
aml_append(sb_scope, dev);
|
||||
if (mcfg_valid) {
|
||||
aml_append(sb_scope, build_q35_dram_controller(&mcfg));
|
||||
|
|
|
|||
|
|
@ -42,5 +42,6 @@ void build_pci_bridge_aml(AcpiDevAmlIf *adev, Aml *scope);
|
|||
void build_srat_generic_affinity_structures(GArray *table_data);
|
||||
|
||||
Aml *build_pci_host_bridge_osc_method(bool enable_native_pcie_hotplug);
|
||||
Aml *build_pci_bridge_edsm(void);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue