mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-09 02:24:58 -06:00
pc: acpi-build: generate pvpanic device description dynamically
Drops AML template patching and allows to save some space in SSDT if pvpanic device doesn't exist by not including disabled device description into SSDT. It also makes device description smaller by replacing _STA method with named value and dropping _INI method. Signed-off-by: Igor Mammedov <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
d5e5830f56
commit
cd61cb2e2c
2 changed files with 32 additions and 51 deletions
|
@ -924,7 +924,7 @@ build_ssdt(GArray *table_data, GArray *linker,
|
|||
uint32_t nr_mem = machine->ram_slots;
|
||||
unsigned acpi_cpus = guest_info->apic_id_limit;
|
||||
uint8_t *ssdt_ptr;
|
||||
Aml *ssdt, *sb_scope, *scope, *pkg;
|
||||
Aml *ssdt, *sb_scope, *scope, *pkg, *dev, *method, *crs, *field;
|
||||
int i;
|
||||
|
||||
ssdt = init_aml_allocator();
|
||||
|
@ -939,9 +939,6 @@ build_ssdt(GArray *table_data, GArray *linker,
|
|||
|
||||
patch_pci_windows(pci, ssdt_ptr, sizeof(ssdp_misc_aml));
|
||||
|
||||
ACPI_BUILD_SET_LE(ssdt_ptr, sizeof(ssdp_misc_aml),
|
||||
ssdt_isa_pest[0], 16, misc->pvpanic_port);
|
||||
|
||||
ACPI_BUILD_SET_LE(ssdt_ptr, sizeof(ssdp_misc_aml),
|
||||
ssdt_mctrl_nr_slots[0], 32, nr_mem);
|
||||
|
||||
|
@ -974,6 +971,37 @@ build_ssdt(GArray *table_data, GArray *linker,
|
|||
aml_append(scope, aml_name_decl("_S5", pkg));
|
||||
aml_append(ssdt, scope);
|
||||
|
||||
if (misc->pvpanic_port) {
|
||||
scope = aml_scope("\\_SB.PCI0.ISA");
|
||||
|
||||
dev = aml_device("PEVR");
|
||||
aml_append(dev, aml_name_decl("_HID", aml_string("QEMU0002")));
|
||||
|
||||
crs = aml_resource_template();
|
||||
aml_append(crs,
|
||||
aml_io(aml_decode16, misc->pvpanic_port, misc->pvpanic_port, 1, 1)
|
||||
);
|
||||
aml_append(dev, aml_name_decl("_CRS", crs));
|
||||
|
||||
aml_append(dev, aml_operation_region("PEOR", aml_system_io,
|
||||
misc->pvpanic_port, 1));
|
||||
field = aml_field("PEOR", aml_byte_acc);
|
||||
aml_append(field, aml_named_field("PEPT", 8));
|
||||
aml_append(dev, field);
|
||||
|
||||
method = aml_method("RDPT", 0);
|
||||
aml_append(method, aml_store(aml_name("PEPT"), aml_local(0)));
|
||||
aml_append(method, aml_return(aml_local(0)));
|
||||
aml_append(dev, method);
|
||||
|
||||
method = aml_method("WRPT", 1);
|
||||
aml_append(method, aml_store(aml_arg(0), aml_name("PEPT")));
|
||||
aml_append(dev, method);
|
||||
|
||||
aml_append(scope, dev);
|
||||
aml_append(ssdt, scope);
|
||||
}
|
||||
|
||||
sb_scope = aml_scope("_SB");
|
||||
{
|
||||
/* build Processor object for each processor */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue