mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-10 11:04:58 -06: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;
|
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)
|
static void build_append_pcihp_notify_entry(Aml *method, int slot)
|
||||||
{
|
{
|
||||||
Aml *if_ctx;
|
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)));
|
aml_append(dev, aml_name_decl("_ADR", aml_int(adr)));
|
||||||
|
|
||||||
call_dev_aml_func(DEVICE(bus->devices[devfn]), dev);
|
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 */
|
/* device descriptor has been composed, add it into parent context */
|
||||||
aml_append(parent_scope, dev);
|
aml_append(parent_scope, dev);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue