hw/acpi/ich9: Enable ACPI PCI hot-plug
Add acpi_pcihp to ich9_pm as part of 'acpi-pci-hotplug-with-bridge-support' option. Set default to false. Signed-off-by: Julia Suvorova <jusual@redhat.com> Signed-off-by: Marcel Apfelbaum <marcel.apfelbaum@gmail.com> Reviewed-by: Igor Mammedov <imammedo@redhat.com> Message-Id: <20210713004205.775386-3-jusual@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
		
				
					committed by
					
						
						Michael S. Tsirkin
					
				
			
			
				
	
			
			
			
						parent
						
							caf108bc58
						
					
				
				
					commit
					c0e427d6eb
				
			@@ -1,7 +1,13 @@
 | 
				
			|||||||
#include "qemu/osdep.h"
 | 
					#include "qemu/osdep.h"
 | 
				
			||||||
#include "hw/i386/pc.h"
 | 
					#include "hw/i386/pc.h"
 | 
				
			||||||
 | 
					#include "hw/i386/acpi-build.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void pc_madt_cpu_entry(AcpiDeviceIf *adev, int uid,
 | 
					void pc_madt_cpu_entry(AcpiDeviceIf *adev, int uid,
 | 
				
			||||||
                       const CPUArchIdList *apic_ids, GArray *entry)
 | 
					                       const CPUArchIdList *apic_ids, GArray *entry)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Object *acpi_get_i386_pci_host(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					       return NULL;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -217,6 +217,26 @@ static const VMStateDescription vmstate_cpuhp_state = {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static bool vmstate_test_use_pcihp(void *opaque)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    ICH9LPCPMRegs *s = opaque;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return s->use_acpi_hotplug_bridge;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static const VMStateDescription vmstate_pcihp_state = {
 | 
				
			||||||
 | 
					    .name = "ich9_pm/pcihp",
 | 
				
			||||||
 | 
					    .version_id = 1,
 | 
				
			||||||
 | 
					    .minimum_version_id = 1,
 | 
				
			||||||
 | 
					    .needed = vmstate_test_use_pcihp,
 | 
				
			||||||
 | 
					    .fields      = (VMStateField[]) {
 | 
				
			||||||
 | 
					        VMSTATE_PCI_HOTPLUG(acpi_pci_hotplug,
 | 
				
			||||||
 | 
					                            ICH9LPCPMRegs,
 | 
				
			||||||
 | 
					                            NULL, NULL),
 | 
				
			||||||
 | 
					        VMSTATE_END_OF_LIST()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const VMStateDescription vmstate_ich9_pm = {
 | 
					const VMStateDescription vmstate_ich9_pm = {
 | 
				
			||||||
    .name = "ich9_pm",
 | 
					    .name = "ich9_pm",
 | 
				
			||||||
    .version_id = 1,
 | 
					    .version_id = 1,
 | 
				
			||||||
@@ -238,6 +258,7 @@ const VMStateDescription vmstate_ich9_pm = {
 | 
				
			|||||||
        &vmstate_memhp_state,
 | 
					        &vmstate_memhp_state,
 | 
				
			||||||
        &vmstate_tco_io_state,
 | 
					        &vmstate_tco_io_state,
 | 
				
			||||||
        &vmstate_cpuhp_state,
 | 
					        &vmstate_cpuhp_state,
 | 
				
			||||||
 | 
					        &vmstate_pcihp_state,
 | 
				
			||||||
        NULL
 | 
					        NULL
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
@@ -259,6 +280,10 @@ static void pm_reset(void *opaque)
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    pm->smi_en_wmask = ~0;
 | 
					    pm->smi_en_wmask = ~0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (pm->use_acpi_hotplug_bridge) {
 | 
				
			||||||
 | 
					        acpi_pcihp_reset(&pm->acpi_pci_hotplug, true);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    acpi_update_sci(&pm->acpi_regs, pm->irq);
 | 
					    acpi_update_sci(&pm->acpi_regs, pm->irq);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -297,6 +322,18 @@ void ich9_pm_init(PCIDevice *lpc_pci, ICH9LPCPMRegs *pm,
 | 
				
			|||||||
    pm->enable_tco = true;
 | 
					    pm->enable_tco = true;
 | 
				
			||||||
    acpi_pm_tco_init(&pm->tco_regs, &pm->io);
 | 
					    acpi_pm_tco_init(&pm->tco_regs, &pm->io);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (pm->use_acpi_hotplug_bridge) {
 | 
				
			||||||
 | 
					        acpi_pcihp_init(OBJECT(lpc_pci),
 | 
				
			||||||
 | 
					                        &pm->acpi_pci_hotplug,
 | 
				
			||||||
 | 
					                        pci_get_bus(lpc_pci),
 | 
				
			||||||
 | 
					                        pci_address_space_io(lpc_pci),
 | 
				
			||||||
 | 
					                        true,
 | 
				
			||||||
 | 
					                        ACPI_PCIHP_ADDR_ICH9);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        qbus_set_hotplug_handler(BUS(pci_get_bus(lpc_pci)),
 | 
				
			||||||
 | 
					                                 OBJECT(lpc_pci));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pm->irq = sci_irq;
 | 
					    pm->irq = sci_irq;
 | 
				
			||||||
    qemu_register_reset(pm_reset, pm);
 | 
					    qemu_register_reset(pm_reset, pm);
 | 
				
			||||||
    pm->powerdown_notifier.notify = pm_powerdown_req;
 | 
					    pm->powerdown_notifier.notify = pm_powerdown_req;
 | 
				
			||||||
@@ -368,6 +405,20 @@ static void ich9_pm_set_enable_tco(Object *obj, bool value, Error **errp)
 | 
				
			|||||||
    s->pm.enable_tco = value;
 | 
					    s->pm.enable_tco = value;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static bool ich9_pm_get_acpi_pci_hotplug(Object *obj, Error **errp)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    ICH9LPCState *s = ICH9_LPC_DEVICE(obj);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return s->pm.use_acpi_hotplug_bridge;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void ich9_pm_set_acpi_pci_hotplug(Object *obj, bool value, Error **errp)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    ICH9LPCState *s = ICH9_LPC_DEVICE(obj);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    s->pm.use_acpi_hotplug_bridge = value;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ich9_pm_add_properties(Object *obj, ICH9LPCPMRegs *pm)
 | 
					void ich9_pm_add_properties(Object *obj, ICH9LPCPMRegs *pm)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    static const uint32_t gpe0_len = ICH9_PMIO_GPE0_LEN;
 | 
					    static const uint32_t gpe0_len = ICH9_PMIO_GPE0_LEN;
 | 
				
			||||||
@@ -376,6 +427,7 @@ void ich9_pm_add_properties(Object *obj, ICH9LPCPMRegs *pm)
 | 
				
			|||||||
    pm->disable_s3 = 0;
 | 
					    pm->disable_s3 = 0;
 | 
				
			||||||
    pm->disable_s4 = 0;
 | 
					    pm->disable_s4 = 0;
 | 
				
			||||||
    pm->s4_val = 2;
 | 
					    pm->s4_val = 2;
 | 
				
			||||||
 | 
					    pm->use_acpi_hotplug_bridge = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    object_property_add_uint32_ptr(obj, ACPI_PM_PROP_PM_IO_BASE,
 | 
					    object_property_add_uint32_ptr(obj, ACPI_PM_PROP_PM_IO_BASE,
 | 
				
			||||||
                                   &pm->pm_io_base, OBJ_PROP_FLAG_READ);
 | 
					                                   &pm->pm_io_base, OBJ_PROP_FLAG_READ);
 | 
				
			||||||
@@ -399,6 +451,9 @@ void ich9_pm_add_properties(Object *obj, ICH9LPCPMRegs *pm)
 | 
				
			|||||||
    object_property_add_bool(obj, ACPI_PM_PROP_TCO_ENABLED,
 | 
					    object_property_add_bool(obj, ACPI_PM_PROP_TCO_ENABLED,
 | 
				
			||||||
                             ich9_pm_get_enable_tco,
 | 
					                             ich9_pm_get_enable_tco,
 | 
				
			||||||
                             ich9_pm_set_enable_tco);
 | 
					                             ich9_pm_set_enable_tco);
 | 
				
			||||||
 | 
					    object_property_add_bool(obj, "acpi-pci-hotplug-with-bridge-support",
 | 
				
			||||||
 | 
					                             ich9_pm_get_acpi_pci_hotplug,
 | 
				
			||||||
 | 
					                             ich9_pm_set_acpi_pci_hotplug);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ich9_pm_device_pre_plug_cb(HotplugHandler *hotplug_dev, DeviceState *dev,
 | 
					void ich9_pm_device_pre_plug_cb(HotplugHandler *hotplug_dev, DeviceState *dev,
 | 
				
			||||||
@@ -406,6 +461,11 @@ void ich9_pm_device_pre_plug_cb(HotplugHandler *hotplug_dev, DeviceState *dev,
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    ICH9LPCState *lpc = ICH9_LPC_DEVICE(hotplug_dev);
 | 
					    ICH9LPCState *lpc = ICH9_LPC_DEVICE(hotplug_dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (object_dynamic_cast(OBJECT(dev), TYPE_PCI_DEVICE)) {
 | 
				
			||||||
 | 
					        acpi_pcihp_device_pre_plug_cb(hotplug_dev, dev, errp);
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM) &&
 | 
					    if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM) &&
 | 
				
			||||||
        !lpc->pm.acpi_memory_hotplug.is_enabled) {
 | 
					        !lpc->pm.acpi_memory_hotplug.is_enabled) {
 | 
				
			||||||
        error_setg(errp,
 | 
					        error_setg(errp,
 | 
				
			||||||
@@ -441,6 +501,9 @@ void ich9_pm_device_plug_cb(HotplugHandler *hotplug_dev, DeviceState *dev,
 | 
				
			|||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            acpi_cpu_plug_cb(hotplug_dev, &lpc->pm.cpuhp_state, dev, errp);
 | 
					            acpi_cpu_plug_cb(hotplug_dev, &lpc->pm.cpuhp_state, dev, errp);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					    } else if (object_dynamic_cast(OBJECT(dev), TYPE_PCI_DEVICE)) {
 | 
				
			||||||
 | 
					        acpi_pcihp_device_plug_cb(hotplug_dev, &lpc->pm.acpi_pci_hotplug,
 | 
				
			||||||
 | 
					                                  dev, errp);
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        error_setg(errp, "acpi: device plug request for not supported device"
 | 
					        error_setg(errp, "acpi: device plug request for not supported device"
 | 
				
			||||||
                   " type: %s", object_get_typename(OBJECT(dev)));
 | 
					                   " type: %s", object_get_typename(OBJECT(dev)));
 | 
				
			||||||
@@ -473,6 +536,10 @@ void ich9_pm_device_unplug_request_cb(HotplugHandler *hotplug_dev,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        acpi_cpu_unplug_request_cb(hotplug_dev, &lpc->pm.cpuhp_state,
 | 
					        acpi_cpu_unplug_request_cb(hotplug_dev, &lpc->pm.cpuhp_state,
 | 
				
			||||||
                                   dev, errp);
 | 
					                                   dev, errp);
 | 
				
			||||||
 | 
					    } else if (object_dynamic_cast(OBJECT(dev), TYPE_PCI_DEVICE)) {
 | 
				
			||||||
 | 
					        acpi_pcihp_device_unplug_request_cb(hotplug_dev,
 | 
				
			||||||
 | 
					                                            &lpc->pm.acpi_pci_hotplug,
 | 
				
			||||||
 | 
					                                            dev, errp);
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        error_setg(errp, "acpi: device unplug request for not supported device"
 | 
					        error_setg(errp, "acpi: device unplug request for not supported device"
 | 
				
			||||||
                   " type: %s", object_get_typename(OBJECT(dev)));
 | 
					                   " type: %s", object_get_typename(OBJECT(dev)));
 | 
				
			||||||
@@ -490,6 +557,9 @@ void ich9_pm_device_unplug_cb(HotplugHandler *hotplug_dev, DeviceState *dev,
 | 
				
			|||||||
    } else if (object_dynamic_cast(OBJECT(dev), TYPE_CPU) &&
 | 
					    } else if (object_dynamic_cast(OBJECT(dev), TYPE_CPU) &&
 | 
				
			||||||
               !lpc->pm.cpu_hotplug_legacy) {
 | 
					               !lpc->pm.cpu_hotplug_legacy) {
 | 
				
			||||||
        acpi_cpu_unplug_cb(&lpc->pm.cpuhp_state, dev, errp);
 | 
					        acpi_cpu_unplug_cb(&lpc->pm.cpuhp_state, dev, errp);
 | 
				
			||||||
 | 
					    } else if (object_dynamic_cast(OBJECT(dev), TYPE_PCI_DEVICE)) {
 | 
				
			||||||
 | 
					        acpi_pcihp_device_unplug_cb(hotplug_dev, &lpc->pm.acpi_pci_hotplug,
 | 
				
			||||||
 | 
					                                    dev, errp);
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        error_setg(errp, "acpi: device unplug for not supported device"
 | 
					        error_setg(errp, "acpi: device unplug for not supported device"
 | 
				
			||||||
                   " type: %s", object_get_typename(OBJECT(dev)));
 | 
					                   " type: %s", object_get_typename(OBJECT(dev)));
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,6 +30,8 @@
 | 
				
			|||||||
#include "hw/pci-host/i440fx.h"
 | 
					#include "hw/pci-host/i440fx.h"
 | 
				
			||||||
#include "hw/pci/pci.h"
 | 
					#include "hw/pci/pci.h"
 | 
				
			||||||
#include "hw/pci/pci_bridge.h"
 | 
					#include "hw/pci/pci_bridge.h"
 | 
				
			||||||
 | 
					#include "hw/pci/pci_host.h"
 | 
				
			||||||
 | 
					#include "hw/i386/acpi-build.h"
 | 
				
			||||||
#include "hw/acpi/acpi.h"
 | 
					#include "hw/acpi/acpi.h"
 | 
				
			||||||
#include "hw/pci/pci_bus.h"
 | 
					#include "hw/pci/pci_bus.h"
 | 
				
			||||||
#include "migration/vmstate.h"
 | 
					#include "migration/vmstate.h"
 | 
				
			||||||
@@ -103,6 +105,7 @@ static void *acpi_set_bsel(PCIBus *bus, void *opaque)
 | 
				
			|||||||
static void acpi_set_pci_info(void)
 | 
					static void acpi_set_pci_info(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    static bool bsel_is_set;
 | 
					    static bool bsel_is_set;
 | 
				
			||||||
 | 
					    Object *host = acpi_get_i386_pci_host();
 | 
				
			||||||
    PCIBus *bus;
 | 
					    PCIBus *bus;
 | 
				
			||||||
    unsigned bsel_alloc = ACPI_PCIHP_BSEL_DEFAULT;
 | 
					    unsigned bsel_alloc = ACPI_PCIHP_BSEL_DEFAULT;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -111,7 +114,11 @@ static void acpi_set_pci_info(void)
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    bsel_is_set = true;
 | 
					    bsel_is_set = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    bus = find_i440fx(); /* TODO: Q35 support */
 | 
					    if (!host) {
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    bus = PCI_HOST_BRIDGE(host)->bus;
 | 
				
			||||||
    if (bus) {
 | 
					    if (bus) {
 | 
				
			||||||
        /* Scan all PCI buses. Set property to enable acpi based hotplug. */
 | 
					        /* Scan all PCI buses. Set property to enable acpi based hotplug. */
 | 
				
			||||||
        pci_for_each_bus_depth_first(bus, acpi_set_bsel, NULL, &bsel_alloc);
 | 
					        pci_for_each_bus_depth_first(bus, acpi_set_bsel, NULL, &bsel_alloc);
 | 
				
			||||||
@@ -121,13 +128,14 @@ static void acpi_set_pci_info(void)
 | 
				
			|||||||
static void acpi_pcihp_disable_root_bus(void)
 | 
					static void acpi_pcihp_disable_root_bus(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    static bool root_hp_disabled;
 | 
					    static bool root_hp_disabled;
 | 
				
			||||||
 | 
					    Object *host = acpi_get_i386_pci_host();
 | 
				
			||||||
    PCIBus *bus;
 | 
					    PCIBus *bus;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (root_hp_disabled) {
 | 
					    if (root_hp_disabled) {
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    bus = find_i440fx();
 | 
					    bus = PCI_HOST_BRIDGE(host)->bus;
 | 
				
			||||||
    if (bus) {
 | 
					    if (bus) {
 | 
				
			||||||
        /* setting the hotplug handler to NULL makes the bus non-hotpluggable */
 | 
					        /* setting the hotplug handler to NULL makes the bus non-hotpluggable */
 | 
				
			||||||
        qbus_set_hotplug_handler(BUS(bus), NULL);
 | 
					        qbus_set_hotplug_handler(BUS(bus), NULL);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -299,7 +299,7 @@ static void acpi_get_misc_info(AcpiMiscInfo *info)
 | 
				
			|||||||
 * Because of the PXB hosts we cannot simply query TYPE_PCI_HOST_BRIDGE.
 | 
					 * Because of the PXB hosts we cannot simply query TYPE_PCI_HOST_BRIDGE.
 | 
				
			||||||
 * On i386 arch we only have two pci hosts, so we can look only for them.
 | 
					 * On i386 arch we only have two pci hosts, so we can look only for them.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
static Object *acpi_get_i386_pci_host(void)
 | 
					Object *acpi_get_i386_pci_host(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    PCIHostState *host;
 | 
					    PCIHostState *host;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -320,7 +320,10 @@ static void acpi_get_pci_holes(Range *hole, Range *hole64)
 | 
				
			|||||||
    Object *pci_host;
 | 
					    Object *pci_host;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pci_host = acpi_get_i386_pci_host();
 | 
					    pci_host = acpi_get_i386_pci_host();
 | 
				
			||||||
    g_assert(pci_host);
 | 
					
 | 
				
			||||||
 | 
					    if (!pci_host) {
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    range_set_bounds1(hole,
 | 
					    range_set_bounds1(hole,
 | 
				
			||||||
                      object_property_get_uint(pci_host,
 | 
					                      object_property_get_uint(pci_host,
 | 
				
			||||||
@@ -1765,6 +1768,7 @@ build_dsdt(GArray *table_data, BIOSLinker *linker,
 | 
				
			|||||||
        PCIBus *bus = NULL;
 | 
					        PCIBus *bus = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        pci_host = acpi_get_i386_pci_host();
 | 
					        pci_host = acpi_get_i386_pci_host();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (pci_host) {
 | 
					        if (pci_host) {
 | 
				
			||||||
            bus = PCI_HOST_BRIDGE(pci_host)->bus;
 | 
					            bus = PCI_HOST_BRIDGE(pci_host)->bus;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -2321,7 +2325,9 @@ static bool acpi_get_mcfg(AcpiMcfgInfo *mcfg)
 | 
				
			|||||||
    QObject *o;
 | 
					    QObject *o;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pci_host = acpi_get_i386_pci_host();
 | 
					    pci_host = acpi_get_i386_pci_host();
 | 
				
			||||||
    g_assert(pci_host);
 | 
					    if (!pci_host) {
 | 
				
			||||||
 | 
					        return false;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    o = object_property_get_qobject(pci_host, PCIE_HOST_MCFG_BASE, NULL);
 | 
					    o = object_property_get_qobject(pci_host, PCIE_HOST_MCFG_BASE, NULL);
 | 
				
			||||||
    if (!o) {
 | 
					    if (!o) {
 | 
				
			||||||
@@ -2351,7 +2357,7 @@ void acpi_build(AcpiBuildTables *tables, MachineState *machine)
 | 
				
			|||||||
    AcpiPmInfo pm;
 | 
					    AcpiPmInfo pm;
 | 
				
			||||||
    AcpiMiscInfo misc;
 | 
					    AcpiMiscInfo misc;
 | 
				
			||||||
    AcpiMcfgInfo mcfg;
 | 
					    AcpiMcfgInfo mcfg;
 | 
				
			||||||
    Range pci_hole, pci_hole64;
 | 
					    Range pci_hole = {}, pci_hole64 = {};
 | 
				
			||||||
    uint8_t *u;
 | 
					    uint8_t *u;
 | 
				
			||||||
    size_t aml_len = 0;
 | 
					    size_t aml_len = 0;
 | 
				
			||||||
    GArray *tables_blob = tables->table_data;
 | 
					    GArray *tables_blob = tables->table_data;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,5 +10,6 @@ extern const struct AcpiGenericAddress x86_nvdimm_acpi_dsmio;
 | 
				
			|||||||
#define ACPI_PCIHP_BNMR_BASE 0x10
 | 
					#define ACPI_PCIHP_BNMR_BASE 0x10
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void acpi_setup(void);
 | 
					void acpi_setup(void);
 | 
				
			||||||
 | 
					Object *acpi_get_i386_pci_host(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,6 +24,7 @@
 | 
				
			|||||||
#include "hw/acpi/acpi.h"
 | 
					#include "hw/acpi/acpi.h"
 | 
				
			||||||
#include "hw/acpi/cpu_hotplug.h"
 | 
					#include "hw/acpi/cpu_hotplug.h"
 | 
				
			||||||
#include "hw/acpi/cpu.h"
 | 
					#include "hw/acpi/cpu.h"
 | 
				
			||||||
 | 
					#include "hw/acpi/pcihp.h"
 | 
				
			||||||
#include "hw/acpi/memory_hotplug.h"
 | 
					#include "hw/acpi/memory_hotplug.h"
 | 
				
			||||||
#include "hw/acpi/acpi_dev_interface.h"
 | 
					#include "hw/acpi/acpi_dev_interface.h"
 | 
				
			||||||
#include "hw/acpi/tco.h"
 | 
					#include "hw/acpi/tco.h"
 | 
				
			||||||
@@ -55,6 +56,8 @@ typedef struct ICH9LPCPMRegs {
 | 
				
			|||||||
    AcpiCpuHotplug gpe_cpu;
 | 
					    AcpiCpuHotplug gpe_cpu;
 | 
				
			||||||
    CPUHotplugState cpuhp_state;
 | 
					    CPUHotplugState cpuhp_state;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    bool use_acpi_hotplug_bridge;
 | 
				
			||||||
 | 
					    AcpiPciHpState acpi_pci_hotplug;
 | 
				
			||||||
    MemHotplugState acpi_memory_hotplug;
 | 
					    MemHotplugState acpi_memory_hotplug;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    uint8_t disable_s3;
 | 
					    uint8_t disable_s3;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user