|
@@ -338,9 +338,10 @@ const VMStateDescription vmstate_cpu_hotplug = {
|
|
|
#define CPU_FW_EJECT_EVENT "CEJF"
|
|
|
|
|
|
void build_cpus_aml(Aml *table, MachineState *machine, CPUHotplugFeatures opts,
|
|
|
- build_madt_cpu_fn build_madt_cpu, hwaddr io_base,
|
|
|
+ build_madt_cpu_fn build_madt_cpu, hwaddr base_addr,
|
|
|
const char *res_root,
|
|
|
- const char *event_handler_method)
|
|
|
+ const char *event_handler_method,
|
|
|
+ AmlRegionSpace rs)
|
|
|
{
|
|
|
Aml *ifctx;
|
|
|
Aml *field;
|
|
@@ -364,14 +365,22 @@ void build_cpus_aml(Aml *table, MachineState *machine, CPUHotplugFeatures opts,
|
|
|
aml_name_decl("_UID", aml_string("CPU Hotplug resources")));
|
|
|
aml_append(cpu_ctrl_dev, aml_mutex(CPU_LOCK, 0));
|
|
|
|
|
|
+ assert((rs == AML_SYSTEM_IO) || (rs == AML_SYSTEM_MEMORY));
|
|
|
+
|
|
|
crs = aml_resource_template();
|
|
|
- aml_append(crs, aml_io(AML_DECODE16, io_base, io_base, 1,
|
|
|
+ if (rs == AML_SYSTEM_IO) {
|
|
|
+ aml_append(crs, aml_io(AML_DECODE16, base_addr, base_addr, 1,
|
|
|
ACPI_CPU_HOTPLUG_REG_LEN));
|
|
|
+ } else if (rs == AML_SYSTEM_MEMORY) {
|
|
|
+ aml_append(crs, aml_memory32_fixed(base_addr,
|
|
|
+ ACPI_CPU_HOTPLUG_REG_LEN, AML_READ_WRITE));
|
|
|
+ }
|
|
|
+
|
|
|
aml_append(cpu_ctrl_dev, aml_name_decl("_CRS", crs));
|
|
|
|
|
|
/* declare CPU hotplug MMIO region with related access fields */
|
|
|
aml_append(cpu_ctrl_dev,
|
|
|
- aml_operation_region("PRST", AML_SYSTEM_IO, aml_int(io_base),
|
|
|
+ aml_operation_region("PRST", rs, aml_int(base_addr),
|
|
|
ACPI_CPU_HOTPLUG_REG_LEN));
|
|
|
|
|
|
field = aml_field("PRST", AML_BYTE_ACC, AML_NOLOCK,
|