On Fri, May 8, 2026 at 3:49 PM Mark Cave-Ayland <[email protected]> wrote: > > From Windows 8.1 onwards ISA serial IRQs cannot be shared when ACPI Revision > 3.0 is used in the FACP table. The reason for this is that if a 2-byte IRQ > Descriptor is used then the interrupt is considered to be high true, edge > sensitive, non-shareable. Since legacy serial ports COM1/3 and COM2/4 share > an IRQ then if more than 2 serial ports are added, Windows indicates a > conflict in Device Manager and these combinations cannot be used together. > > Change the 2-byte IRQ Descriptor in the _CRS resource to a 3-byte IRQ > Descriptor indicating that the ISA serial IRQ is high true, edge sensitive and > shareable. This enables all 4 legacy serial ports to be used in Windows > without > conflict. > > Note that it was agreed during the list discussion that this change does not > require a compatibility property since it is not part of the default machine > configuration and was already broken. > > Signed-off-by: Mark Cave-Ayland <[email protected]>
Reviewed-by: Ani Sinha <[email protected]> > --- > hw/char/serial-isa.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/hw/char/serial-isa.c b/hw/char/serial-isa.c > index a4be0492c5..59df726871 100644 > --- a/hw/char/serial-isa.c > +++ b/hw/char/serial-isa.c > @@ -92,7 +92,8 @@ static void serial_isa_build_aml(AcpiDevAmlIf *adev, Aml > *scope) > > crs = aml_resource_template(); > aml_append(crs, aml_io(AML_DECODE16, isa->iobase, isa->iobase, 0x00, > 0x08)); > - aml_append(crs, aml_irq_no_flags(isa->isairq)); > + aml_append(crs, aml_irq(isa->isairq, AML_EDGE, AML_ACTIVE_HIGH, > + AML_SHARED)); > > dev = aml_device("COM%d", isa->index + 1); > aml_append(dev, aml_name_decl("_HID", aml_eisaid("PNP0501"))); > -- > 2.43.0 >
