On Wed, 29 Apr 2020 15:59:59 +0200 Gerd Hoffmann <kra...@redhat.com> wrote:
> Also adds support for multiple LPT devices. > > Signed-off-by: Gerd Hoffmann <kra...@redhat.com> Reviewed-by: Igor Mammedov <imamm...@redhat.com> > --- > hw/char/parallel.c | 32 ++++++++++++++++++++++++++++++++ > hw/i386/acpi-build.c | 23 ----------------------- > 2 files changed, 32 insertions(+), 23 deletions(-) > > diff --git a/hw/char/parallel.c b/hw/char/parallel.c > index 8dd67d13759b..bc6b55b3b910 100644 > --- a/hw/char/parallel.c > +++ b/hw/char/parallel.c > @@ -28,6 +28,7 @@ > #include "qemu/module.h" > #include "chardev/char-parallel.h" > #include "chardev/char-fe.h" > +#include "hw/acpi/aml-build.h" > #include "hw/irq.h" > #include "hw/isa/isa.h" > #include "hw/qdev-properties.h" > @@ -568,6 +569,35 @@ static void parallel_isa_realizefn(DeviceState *dev, > Error **errp) > s, "parallel"); > } > > +static void parallel_isa_build_aml(ISADevice *isadev, Aml *scope) > +{ > + ISAParallelState *isa = ISA_PARALLEL(isadev); > + int i, uid = 0; > + Aml *dev; > + Aml *crs; > + > + for (i = 0; i < ARRAY_SIZE(isa_parallel_io); i++) { > + if (isa->iobase == isa_parallel_io[i]) { > + uid = i + 1; > + } > + } > + if (!uid) { > + return; > + } > + > + crs = aml_resource_template(); > + aml_append(crs, aml_io(AML_DECODE16, isa->iobase, isa->iobase, 0x08, > 0x08)); > + aml_append(crs, aml_irq_no_flags(isa->isairq)); > + > + dev = aml_device("LPT%d", uid); > + aml_append(dev, aml_name_decl("_HID", aml_eisaid("PNP0400"))); > + aml_append(dev, aml_name_decl("_UID", aml_int(uid))); > + aml_append(dev, aml_name_decl("_STA", aml_int(0xf))); > + aml_append(dev, aml_name_decl("_CRS", crs)); > + > + aml_append(scope, dev); > +} > + > /* Memory mapped interface */ > static uint64_t parallel_mm_readfn(void *opaque, hwaddr addr, unsigned size) > { > @@ -624,9 +654,11 @@ static Property parallel_isa_properties[] = { > static void parallel_isa_class_initfn(ObjectClass *klass, void *data) > { > DeviceClass *dc = DEVICE_CLASS(klass); > + ISADeviceClass *isa = ISA_DEVICE_CLASS(klass); > > dc->realize = parallel_isa_realizefn; > dc->vmsd = &vmstate_parallel_isa; > + isa->build_aml = parallel_isa_build_aml; > device_class_set_props(dc, parallel_isa_properties); > set_bit(DEVICE_CATEGORY_INPUT, dc->categories); > } > diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c > index e01afbd011d9..12a017e1f45b 100644 > --- a/hw/i386/acpi-build.c > +++ b/hw/i386/acpi-build.c > @@ -1167,28 +1167,6 @@ static Aml *build_mouse_device_aml(void) > return dev; > } > > -static void build_lpt_device_aml(Aml *scope) > -{ > - Aml *dev; > - Aml *crs; > - > - if (!memory_region_present(get_system_io(), 0x0378)) { > - return; > - } > - > - dev = aml_device("LPT"); > - aml_append(dev, aml_name_decl("_HID", aml_eisaid("PNP0400"))); > - > - aml_append(dev, aml_name_decl("_STA", aml_int(0xf))); > - > - crs = aml_resource_template(); > - aml_append(crs, aml_io(AML_DECODE16, 0x0378, 0x0378, 0x08, 0x08)); > - aml_append(crs, aml_irq_no_flags(7)); > - aml_append(dev, aml_name_decl("_CRS", crs)); > - > - aml_append(scope, dev); > -} > - > static void build_isa_devices_aml(Aml *table) > { > ISADevice *fdc = pc_find_fdc0(); > @@ -1202,7 +1180,6 @@ static void build_isa_devices_aml(Aml *table) > if (fdc) { > aml_append(scope, build_fdc_device_aml(fdc)); > } > - build_lpt_device_aml(scope); > > if (ambiguous) { > error_report("Multiple ISA busses, unable to define IPMI ACPI data");