mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-11-05 20:35:44 +00:00
acpi: pci: support acpi-index for non-hotpluggable devices
Inject static _DSM (EDSM) if non-hotpluggable device has acpi-index configured on it. It lets use acpi-index non-hotpluggable devices / devices attached to non-hotpluggable bus. Signed-off-by: Igor Mammedov <imammedo@redhat.com> Message-Id: <20230302161543.286002-22-imammedo@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
22c8dd000f
commit
7fb1d7388b
1 changed files with 25 additions and 0 deletions
|
@ -452,6 +452,25 @@ static Aml *aml_pci_edsm(void)
|
|||
return method;
|
||||
}
|
||||
|
||||
static Aml *aml_pci_static_endpoint_dsm(PCIDevice *pdev)
|
||||
{
|
||||
Aml *method;
|
||||
|
||||
g_assert(pdev->acpi_index != 0);
|
||||
method = aml_method("_DSM", 4, AML_SERIALIZED);
|
||||
{
|
||||
Aml *params = aml_local(0);
|
||||
Aml *pkg = aml_package(1);
|
||||
aml_append(pkg, aml_int(pdev->acpi_index));
|
||||
aml_append(method, aml_store(pkg, params));
|
||||
aml_append(method,
|
||||
aml_return(aml_call5("EDSM", aml_arg(0), aml_arg(1),
|
||||
aml_arg(2), aml_arg(3), params))
|
||||
);
|
||||
}
|
||||
return method;
|
||||
}
|
||||
|
||||
static void build_append_pcihp_notify_entry(Aml *method, int slot)
|
||||
{
|
||||
Aml *if_ctx;
|
||||
|
@ -577,6 +596,12 @@ void build_append_pci_bus_devices(Aml *parent_scope, PCIBus *bus)
|
|||
aml_append(dev, aml_name_decl("_ADR", aml_int(adr)));
|
||||
|
||||
call_dev_aml_func(DEVICE(bus->devices[devfn]), dev);
|
||||
/* add _DSM if device has acpi-index set */
|
||||
if (pdev->acpi_index && !bsel &&
|
||||
!object_property_get_bool(OBJECT(pdev), "hotpluggable",
|
||||
&error_abort)) {
|
||||
aml_append(dev, aml_pci_static_endpoint_dsm(pdev));
|
||||
}
|
||||
|
||||
/* device descriptor has been composed, add it into parent context */
|
||||
aml_append(parent_scope, dev);
|
||||
|
|
Loading…
Reference in a new issue