Fix to ACPI DSDT and qemu to properly detect COM ports. Signed-off-by: Ben Guthro <bguthro@virtualiron.com> Signed-off-by: Gary Grebus <ggrebus@virtualiron.com> _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Keir Fraser
2007-Aug-28 10:35 UTC
Re: [Xen-devel] [PATCH][QEMU] Fix ACPI COM port detection
Could we just always-on a UAR2 device? We don''t use IRQ 3 for anything else. Also we already always-on LTP1 and UAR1, and switching those off on already-installed guests is likely to cause Windows to get upset. Also, PIIX4 is not hardcoded to 00:01.2, and if it moves then we have set ourselves up here for a subtle bug. -- Keir On 27/8/07 19:46, "Ben Guthro" <bguthro@virtualiron.com> wrote:> Fix to ACPI DSDT and qemu to properly detect COM ports. > > Signed-off-by: Ben Guthro <bguthro@virtualiron.com> > Signed-off-by: Gary Grebus <ggrebus@virtualiron.com> > > diff -r b3ff399f3be9 tools/firmware/hvmloader/acpi/dsdt.asl > --- a/tools/firmware/hvmloader/acpi/dsdt.asl Mon Jul 30 15:02:51 2007 -0400 > +++ b/tools/firmware/hvmloader/acpi/dsdt.asl Mon Jul 30 15:02:51 2007 -0400 > @@ -635,7 +635,16 @@ DefinitionBlock ("DSDT.aml", "DSDT", 2, > Name (_UID, 0x01) > Method (_STA, 0, NotSerialized) > { > - Return (0x0F) > + Store (\_SB.PCI0.PX13.DRSC, Local0) > + And (Local0, 0x08000000, Local0) > + If (LEqual (Local0, 0)) > + { > + Return (0x00) > + } > + Else > + { > + Return (0x0F) > + } > } > > Name (_CRS, ResourceTemplate() > @@ -644,7 +653,29 @@ DefinitionBlock ("DSDT.aml", "DSDT", 2, > IRQNoFlags () {4} > }) > } > - > + Device (UAR2) > + { > + Name (_HID, EisaId ("PNP0501")) > + Name (_UID, 0x02) > + Method (_STA, 0, NotSerialized) > + { > + Store (\_SB.PCI0.PX13.DRSC, Local0) > + And (Local0, 0x80000000, Local0) > + If (LEqual (Local0, 0)) > + { > + Return (0x00) > + } > + Else > + { > + Return (0x0F) > + } > + } > + Name (_CRS, ResourceTemplate() > + { > + IO (Decode16, 0x02F8, 0x02F8, 0x00, 0x08) > + IRQNoFlags () {3} > + }) > + } > Device (LTP1) > { > Name (_HID, EisaId ("PNP0400")) > @@ -661,6 +692,25 @@ DefinitionBlock ("DSDT.aml", "DSDT", 2, > }) > } > } > + /* PIIX4 PM */ > + Device (PX13) { > + Name (_ADR, 0x00010002) > + > + OperationRegion (P13C, PCI_Config, 0x5c, 0x24) > + Field (P13C, DWordAcc, NoLock, Preserve) > + { > + DRSA, 32, > + DRSB, 32, > + DRSC, 32, > + DRSE, 32, > + DRSF, 32, > + DRSG, 32, > + DRSH, 32, > + DRSI, 32, > + DRSJ, 32 > + } > + } > + > } > } > } > diff -r b3ff399f3be9 tools/firmware/hvmloader/acpi/dsdt.c > --- a/tools/firmware/hvmloader/acpi/dsdt.c Mon Jul 30 15:02:51 2007 -0400 > +++ b/tools/firmware/hvmloader/acpi/dsdt.c Tue Jul 31 13:17:34 2007 -0400 > @@ -1,22 +1,22 @@ > /* > * > * Intel ACPI Component Architecture > - * ASL Optimizing Compiler version 20060707 [Feb 16 2007] > + * ASL Optimizing Compiler version 20060127 [Jun 16 2006] > * Copyright (C) 2000 - 2006 Intel Corporation > * Supports ACPI Specification Revision 3.0a > * > - * Compilation of "dsdt.asl" - Wed Jul 11 13:34:30 2007 > + * Compilation of "dsdt.asl" - Tue Jul 31 11:23:43 2007 > * > * C source code output > * > */ > unsigned char AmlCode[] > { > - 0x44,0x53,0x44,0x54,0x9F,0x0D,0x00,0x00, /* 00000000 "DSDT...." */ > - 0x02,0x2E,0x58,0x65,0x6E,0x00,0x00,0x00, /* 00000008 "..Xen..." */ > + 0x44,0x53,0x44,0x54,0x69,0x0E,0x00,0x00, /* 00000000 "DSDTi..." */ > + 0x02,0x1B,0x58,0x65,0x6E,0x00,0x00,0x00, /* 00000008 "..Xen..." */ > 0x48,0x56,0x4D,0x00,0x00,0x00,0x00,0x00, /* 00000010 "HVM....." */ > 0x00,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ > - 0x07,0x07,0x06,0x20,0x08,0x50,0x4D,0x42, /* 00000020 "... .PMB" */ > + 0x27,0x01,0x06,0x20,0x08,0x50,0x4D,0x42, /* 00000020 "''.. .PMB" */ > 0x53,0x0B,0x00,0x0C,0x08,0x50,0x4D,0x4C, /* 00000028 "S....PML" */ > 0x4E,0x0A,0x08,0x08,0x49,0x4F,0x42,0x31, /* 00000030 "N...IOB1" */ > 0x00,0x08,0x49,0x4F,0x4C,0x31,0x00,0x08, /* 00000038 "..IOL1.." */ > @@ -27,7 +27,7 @@ unsigned char AmlCode[] > 0x04,0x0A,0x07,0x0A,0x07,0x00,0x00,0x08, /* 00000060 "........" */ > 0x50,0x49,0x43,0x44,0x00,0x14,0x0C,0x5F, /* 00000068 "PICD..._" */ > 0x50,0x49,0x43,0x01,0x70,0x68,0x50,0x49, /* 00000070 "PIC.phPI" */ > - 0x43,0x44,0x10,0x44,0xD2,0x5F,0x53,0x42, /* 00000078 "CD.D._SB" */ > + 0x43,0x44,0x10,0x4E,0xDE,0x5F,0x53,0x42, /* 00000078 "CD.N._SB" */ > 0x5F,0x5B,0x82,0x49,0x04,0x4D,0x45,0x4D, /* 00000080 "_[.I.MEM" */ > 0x30,0x08,0x5F,0x48,0x49,0x44,0x0C,0x41, /* 00000088 "0._HID.A" */ > 0xD0,0x0C,0x02,0x08,0x5F,0x43,0x52,0x53, /* 00000090 "...._CRS" */ > @@ -37,7 +37,7 @@ unsigned char AmlCode[] > 0x00,0x00,0xFF,0xFF,0x09,0x00,0x00,0x00, /* 000000B0 "........" */ > 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000B8 "........" */ > 0x00,0x00,0x00,0x00,0x0A,0x00,0x00,0x00, /* 000000C0 "........" */ > - 0x00,0x00,0x79,0x00,0x5B,0x82,0x41,0xCD, /* 000000C8 "..y.[.A." */ > + 0x00,0x00,0x79,0x00,0x5B,0x82,0x4B,0xD9, /* 000000C8 "..y.[.K." */ > 0x50,0x43,0x49,0x30,0x08,0x5F,0x48,0x49, /* 000000D0 "PCI0._HI" */ > 0x44,0x0C,0x41,0xD0,0x0A,0x03,0x08,0x5F, /* 000000D8 "D.A...._" */ > 0x55,0x49,0x44,0x00,0x08,0x5F,0x41,0x44, /* 000000E0 "UID.._AD" */ > @@ -348,7 +348,7 @@ unsigned char AmlCode[] > 0x0C,0x04,0x0C,0xFF,0xFF,0x0F,0x00,0x0A, /* 00000A68 "........" */ > 0x02,0x00,0x0A,0x2F,0x12,0x0C,0x04,0x0C, /* 00000A70 ".../...." */ > 0xFF,0xFF,0x0F,0x00,0x0A,0x03,0x00,0x0A, /* 00000A78 "........" */ > - 0x10,0x5B,0x82,0x4C,0x31,0x49,0x53,0x41, /* 00000A80 ".[.L1ISA" */ > + 0x10,0x5B,0x82,0x44,0x39,0x49,0x53,0x41, /* 00000A80 ".[.D9ISA" */ > 0x5F,0x08,0x5F,0x41,0x44,0x52,0x0C,0x00, /* 00000A88 "_._ADR.." */ > 0x00,0x01,0x00,0x5B,0x80,0x50,0x49,0x52, /* 00000A90 "...[.PIR" */ > 0x51,0x02,0x0A,0x60,0x0A,0x04,0x10,0x2E, /* 00000A98 "Q..`...." */ > @@ -434,19 +434,45 @@ unsigned char AmlCode[] > 0x47,0x01,0xF0,0x03,0xF0,0x03,0x01,0x06, /* 00000D18 "G......." */ > 0x47,0x01,0xF7,0x03,0xF7,0x03,0x01,0x01, /* 00000D20 "G......." */ > 0x22,0x40,0x00,0x2A,0x04,0x00,0x79,0x00, /* 00000D28 ""@.*..y." */ > - 0x5B,0x82,0x35,0x55,0x41,0x52,0x31,0x08, /* 00000D30 "[.5UAR1." */ > - 0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,0x05, /* 00000D38 "_HID.A.." */ > - 0x01,0x08,0x5F,0x55,0x49,0x44,0x01,0x14, /* 00000D40 ".._UID.." */ > - 0x09,0x5F,0x53,0x54,0x41,0x00,0xA4,0x0A, /* 00000D48 "._STA..." */ > - 0x0F,0x08,0x5F,0x43,0x52,0x53,0x11,0x10, /* 00000D50 ".._CRS.." */ > - 0x0A,0x0D,0x47,0x01,0xF8,0x03,0xF8,0x03, /* 00000D58 "..G....." */ > - 0x01,0x08,0x22,0x10,0x00,0x79,0x00,0x5B, /* 00000D60 ".."..y.[" */ > - 0x82,0x36,0x4C,0x54,0x50,0x31,0x08,0x5F, /* 00000D68 ".6LTP1._" */ > - 0x48,0x49,0x44,0x0C,0x41,0xD0,0x04,0x00, /* 00000D70 "HID.A..." */ > - 0x08,0x5F,0x55,0x49,0x44,0x0A,0x02,0x14, /* 00000D78 "._UID..." */ > - 0x09,0x5F,0x53,0x54,0x41,0x00,0xA4,0x0A, /* 00000D80 "._STA..." */ > - 0x0F,0x08,0x5F,0x43,0x52,0x53,0x11,0x10, /* 00000D88 ".._CRS.." */ > - 0x0A,0x0D,0x47,0x01,0x78,0x03,0x78,0x03, /* 00000D90 "..G.x.x." */ > - 0x08,0x08,0x22,0x80,0x00,0x79,0x00, > + 0x5B,0x82,0x45,0x05,0x55,0x41,0x52,0x31, /* 00000D30 "[.E.UAR1" */ > + 0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0, /* 00000D38 "._HID.A." */ > + 0x05,0x01,0x08,0x5F,0x55,0x49,0x44,0x01, /* 00000D40 "..._UID." */ > + 0x14,0x28,0x5F,0x53,0x54,0x41,0x00,0x70, /* 00000D48 ".(_STA.p" */ > + 0x5E,0x5E,0x5E,0x2E,0x50,0x58,0x31,0x33, /* 00000D50 "^^^.PX13" */ > + 0x44,0x52,0x53,0x43,0x60,0x7B,0x60,0x0C, /* 00000D58 "DRSC`{`." */ > + 0x00,0x00,0x00,0x08,0x60,0xA0,0x06,0x93, /* 00000D60 "....`..." */ > + 0x60,0x00,0xA4,0x00,0xA1,0x04,0xA4,0x0A, /* 00000D68 "`......." */ > + 0x0F,0x08,0x5F,0x43,0x52,0x53,0x11,0x10, /* 00000D70 ".._CRS.." */ > + 0x0A,0x0D,0x47,0x01,0xF8,0x03,0xF8,0x03, /* 00000D78 "..G....." */ > + 0x01,0x08,0x22,0x10,0x00,0x79,0x00,0x5B, /* 00000D80 ".."..y.[" */ > + 0x82,0x46,0x05,0x55,0x41,0x52,0x32,0x08, /* 00000D88 ".F.UAR2." */ > + 0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,0x05, /* 00000D90 "_HID.A.." */ > + 0x01,0x08,0x5F,0x55,0x49,0x44,0x0A,0x02, /* 00000D98 ".._UID.." */ > + 0x14,0x28,0x5F,0x53,0x54,0x41,0x00,0x70, /* 00000DA0 ".(_STA.p" */ > + 0x5E,0x5E,0x5E,0x2E,0x50,0x58,0x31,0x33, /* 00000DA8 "^^^.PX13" */ > + 0x44,0x52,0x53,0x43,0x60,0x7B,0x60,0x0C, /* 00000DB0 "DRSC`{`." */ > + 0x00,0x00,0x00,0x80,0x60,0xA0,0x06,0x93, /* 00000DB8 "....`..." */ > + 0x60,0x00,0xA4,0x00,0xA1,0x04,0xA4,0x0A, /* 00000DC0 "`......." */ > + 0x0F,0x08,0x5F,0x43,0x52,0x53,0x11,0x10, /* 00000DC8 ".._CRS.." */ > + 0x0A,0x0D,0x47,0x01,0xF8,0x02,0xF8,0x02, /* 00000DD0 "..G....." */ > + 0x00,0x08,0x22,0x08,0x00,0x79,0x00,0x5B, /* 00000DD8 ".."..y.[" */ > + 0x82,0x36,0x4C,0x54,0x50,0x31,0x08,0x5F, /* 00000DE0 ".6LTP1._" */ > + 0x48,0x49,0x44,0x0C,0x41,0xD0,0x04,0x00, /* 00000DE8 "HID.A..." */ > + 0x08,0x5F,0x55,0x49,0x44,0x0A,0x02,0x14, /* 00000DF0 "._UID..." */ > + 0x09,0x5F,0x53,0x54,0x41,0x00,0xA4,0x0A, /* 00000DF8 "._STA..." */ > + 0x0F,0x08,0x5F,0x43,0x52,0x53,0x11,0x10, /* 00000E00 ".._CRS.." */ > + 0x0A,0x0D,0x47,0x01,0x78,0x03,0x78,0x03, /* 00000E08 "..G.x.x." */ > + 0x08,0x08,0x22,0x80,0x00,0x79,0x00,0x5B, /* 00000E10 ".."..y.[" */ > + 0x82,0x40,0x05,0x50,0x58,0x31,0x33,0x08, /* 00000E18 ".@.PX13." */ > + 0x5F,0x41,0x44,0x52,0x0C,0x02,0x00,0x01, /* 00000E20 "_ADR...." */ > + 0x00,0x5B,0x80,0x50,0x31,0x33,0x43,0x02, /* 00000E28 ".[.P13C." */ > + 0x0A,0x5C,0x0A,0x24,0x5B,0x81,0x33,0x50, /* 00000E30 ".\.$[.3P" */ > + 0x31,0x33,0x43,0x03,0x44,0x52,0x53,0x41, /* 00000E38 "13C.DRSA" */ > + 0x20,0x44,0x52,0x53,0x42,0x20,0x44,0x52, /* 00000E40 " DRSB DR" */ > + 0x53,0x43,0x20,0x44,0x52,0x53,0x45,0x20, /* 00000E48 "SC DRSE " */ > + 0x44,0x52,0x53,0x46,0x20,0x44,0x52,0x53, /* 00000E50 "DRSF DRS" */ > + 0x47,0x20,0x44,0x52,0x53,0x48,0x20,0x44, /* 00000E58 "G DRSH D" */ > + 0x52,0x53,0x49,0x20,0x44,0x52,0x53,0x4A, /* 00000E60 "RSI DRSJ" */ > + 0x20, > }; > int DsdtLen=sizeof(AmlCode); > diff -r b3ff399f3be9 tools/ioemu/hw/piix4acpi.c > --- a/tools/ioemu/hw/piix4acpi.c Mon Jul 30 15:02:51 2007 -0400 > +++ b/tools/ioemu/hw/piix4acpi.c Mon Jul 30 15:02:51 2007 -0400 > @@ -166,6 +166,11 @@ void pci_piix4_acpi_init(PCIBus *bus, in > pci_conf[0x43] = 0x00; > d->pm1_control = SCI_EN; > > + /* ACPI BIOS determines presence of COM ports based on these decodes */ > + pci_conf[0x63] = 0x60; > + pci_conf[0x67] = (serial_hds[0] != NULL ? 0x08 : 0) | > + (serial_hds[1] != NULL ? 0x90 : 0); > + > acpi_map((PCIDevice *)d, 0, 0x1f40, 0x10, PCI_ADDRESS_SPACE_IO); > > register_savevm("piix4acpi", 0, 1, piix4acpi_save, piix4acpi_load, d); > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xensource.com > http://lists.xensource.com/xen-devel_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Keir Fraser
2007-Aug-28 11:57 UTC
Re: [Xen-devel] [PATCH][QEMU] Fix ACPI COM port detection
A bit of fiddling seems to indicate that dynamically presenting the UAR devices does actually make sense. Windows doesn''t complain about all COM ports going missing in the same way that it does about all LPT ports going missing. And it does complain (albeit hidden in device manager and event viewer) if it sees a ACPI UAR device that it can''t physically probe. -- Keir On 28/8/07 11:35, "Keir Fraser" <keir@xensource.com> wrote:> Could we just always-on a UAR2 device? We don''t use IRQ 3 for anything else. > Also we already always-on LTP1 and UAR1, and switching those off on > already-installed guests is likely to cause Windows to get upset. > > Also, PIIX4 is not hardcoded to 00:01.2, and if it moves then we have set > ourselves up here for a subtle bug. > > -- Keir > > On 27/8/07 19:46, "Ben Guthro" <bguthro@virtualiron.com> wrote: > >> Fix to ACPI DSDT and qemu to properly detect COM ports. >> >> Signed-off-by: Ben Guthro <bguthro@virtualiron.com> >> Signed-off-by: Gary Grebus <ggrebus@virtualiron.com> >> >> diff -r b3ff399f3be9 tools/firmware/hvmloader/acpi/dsdt.asl >> --- a/tools/firmware/hvmloader/acpi/dsdt.asl Mon Jul 30 15:02:51 2007 -0400 >> +++ b/tools/firmware/hvmloader/acpi/dsdt.asl Mon Jul 30 15:02:51 2007 -0400 >> @@ -635,7 +635,16 @@ DefinitionBlock ("DSDT.aml", "DSDT", 2, >> Name (_UID, 0x01) >> Method (_STA, 0, NotSerialized) >> { >> - Return (0x0F) >> + Store (\_SB.PCI0.PX13.DRSC, Local0) >> + And (Local0, 0x08000000, Local0) >> + If (LEqual (Local0, 0)) >> + { >> + Return (0x00) >> + } >> + Else >> + { >> + Return (0x0F) >> + } >> } >> >> Name (_CRS, ResourceTemplate() >> @@ -644,7 +653,29 @@ DefinitionBlock ("DSDT.aml", "DSDT", 2, >> IRQNoFlags () {4} >> }) >> } >> - >> + Device (UAR2) >> + { >> + Name (_HID, EisaId ("PNP0501")) >> + Name (_UID, 0x02) >> + Method (_STA, 0, NotSerialized) >> + { >> + Store (\_SB.PCI0.PX13.DRSC, Local0) >> + And (Local0, 0x80000000, Local0) >> + If (LEqual (Local0, 0)) >> + { >> + Return (0x00) >> + } >> + Else >> + { >> + Return (0x0F) >> + } >> + } >> + Name (_CRS, ResourceTemplate() >> + { >> + IO (Decode16, 0x02F8, 0x02F8, 0x00, 0x08) >> + IRQNoFlags () {3} >> + }) >> + } >> Device (LTP1) >> { >> Name (_HID, EisaId ("PNP0400")) >> @@ -661,6 +692,25 @@ DefinitionBlock ("DSDT.aml", "DSDT", 2, >> }) >> } >> } >> + /* PIIX4 PM */ >> + Device (PX13) { >> + Name (_ADR, 0x00010002) >> + >> + OperationRegion (P13C, PCI_Config, 0x5c, 0x24) >> + Field (P13C, DWordAcc, NoLock, Preserve) >> + { >> + DRSA, 32, >> + DRSB, 32, >> + DRSC, 32, >> + DRSE, 32, >> + DRSF, 32, >> + DRSG, 32, >> + DRSH, 32, >> + DRSI, 32, >> + DRSJ, 32 >> + } >> + } >> + >> } >> } >> } >> diff -r b3ff399f3be9 tools/firmware/hvmloader/acpi/dsdt.c >> --- a/tools/firmware/hvmloader/acpi/dsdt.c Mon Jul 30 15:02:51 2007 -0400 >> +++ b/tools/firmware/hvmloader/acpi/dsdt.c Tue Jul 31 13:17:34 2007 -0400 >> @@ -1,22 +1,22 @@ >> /* >> * >> * Intel ACPI Component Architecture >> - * ASL Optimizing Compiler version 20060707 [Feb 16 2007] >> + * ASL Optimizing Compiler version 20060127 [Jun 16 2006] >> * Copyright (C) 2000 - 2006 Intel Corporation >> * Supports ACPI Specification Revision 3.0a >> * >> - * Compilation of "dsdt.asl" - Wed Jul 11 13:34:30 2007 >> + * Compilation of "dsdt.asl" - Tue Jul 31 11:23:43 2007 >> * >> * C source code output >> * >> */ >> unsigned char AmlCode[] >> { >> - 0x44,0x53,0x44,0x54,0x9F,0x0D,0x00,0x00, /* 00000000 "DSDT...." */ >> - 0x02,0x2E,0x58,0x65,0x6E,0x00,0x00,0x00, /* 00000008 "..Xen..." */ >> + 0x44,0x53,0x44,0x54,0x69,0x0E,0x00,0x00, /* 00000000 "DSDTi..." */ >> + 0x02,0x1B,0x58,0x65,0x6E,0x00,0x00,0x00, /* 00000008 "..Xen..." */ >> 0x48,0x56,0x4D,0x00,0x00,0x00,0x00,0x00, /* 00000010 "HVM....." */ >> 0x00,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ >> - 0x07,0x07,0x06,0x20,0x08,0x50,0x4D,0x42, /* 00000020 "... .PMB" */ >> + 0x27,0x01,0x06,0x20,0x08,0x50,0x4D,0x42, /* 00000020 "''.. .PMB" */ >> 0x53,0x0B,0x00,0x0C,0x08,0x50,0x4D,0x4C, /* 00000028 "S....PML" */ >> 0x4E,0x0A,0x08,0x08,0x49,0x4F,0x42,0x31, /* 00000030 "N...IOB1" */ >> 0x00,0x08,0x49,0x4F,0x4C,0x31,0x00,0x08, /* 00000038 "..IOL1.." */ >> @@ -27,7 +27,7 @@ unsigned char AmlCode[] >> 0x04,0x0A,0x07,0x0A,0x07,0x00,0x00,0x08, /* 00000060 "........" */ >> 0x50,0x49,0x43,0x44,0x00,0x14,0x0C,0x5F, /* 00000068 "PICD..._" */ >> 0x50,0x49,0x43,0x01,0x70,0x68,0x50,0x49, /* 00000070 "PIC.phPI" */ >> - 0x43,0x44,0x10,0x44,0xD2,0x5F,0x53,0x42, /* 00000078 "CD.D._SB" */ >> + 0x43,0x44,0x10,0x4E,0xDE,0x5F,0x53,0x42, /* 00000078 "CD.N._SB" */ >> 0x5F,0x5B,0x82,0x49,0x04,0x4D,0x45,0x4D, /* 00000080 "_[.I.MEM" */ >> 0x30,0x08,0x5F,0x48,0x49,0x44,0x0C,0x41, /* 00000088 "0._HID.A" */ >> 0xD0,0x0C,0x02,0x08,0x5F,0x43,0x52,0x53, /* 00000090 "...._CRS" */ >> @@ -37,7 +37,7 @@ unsigned char AmlCode[] >> 0x00,0x00,0xFF,0xFF,0x09,0x00,0x00,0x00, /* 000000B0 "........" */ >> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000B8 "........" */ >> 0x00,0x00,0x00,0x00,0x0A,0x00,0x00,0x00, /* 000000C0 "........" */ >> - 0x00,0x00,0x79,0x00,0x5B,0x82,0x41,0xCD, /* 000000C8 "..y.[.A." */ >> + 0x00,0x00,0x79,0x00,0x5B,0x82,0x4B,0xD9, /* 000000C8 "..y.[.K." */ >> 0x50,0x43,0x49,0x30,0x08,0x5F,0x48,0x49, /* 000000D0 "PCI0._HI" */ >> 0x44,0x0C,0x41,0xD0,0x0A,0x03,0x08,0x5F, /* 000000D8 "D.A...._" */ >> 0x55,0x49,0x44,0x00,0x08,0x5F,0x41,0x44, /* 000000E0 "UID.._AD" */ >> @@ -348,7 +348,7 @@ unsigned char AmlCode[] >> 0x0C,0x04,0x0C,0xFF,0xFF,0x0F,0x00,0x0A, /* 00000A68 "........" */ >> 0x02,0x00,0x0A,0x2F,0x12,0x0C,0x04,0x0C, /* 00000A70 ".../...." */ >> 0xFF,0xFF,0x0F,0x00,0x0A,0x03,0x00,0x0A, /* 00000A78 "........" */ >> - 0x10,0x5B,0x82,0x4C,0x31,0x49,0x53,0x41, /* 00000A80 ".[.L1ISA" */ >> + 0x10,0x5B,0x82,0x44,0x39,0x49,0x53,0x41, /* 00000A80 ".[.D9ISA" */ >> 0x5F,0x08,0x5F,0x41,0x44,0x52,0x0C,0x00, /* 00000A88 "_._ADR.." */ >> 0x00,0x01,0x00,0x5B,0x80,0x50,0x49,0x52, /* 00000A90 "...[.PIR" */ >> 0x51,0x02,0x0A,0x60,0x0A,0x04,0x10,0x2E, /* 00000A98 "Q..`...." */ >> @@ -434,19 +434,45 @@ unsigned char AmlCode[] >> 0x47,0x01,0xF0,0x03,0xF0,0x03,0x01,0x06, /* 00000D18 "G......." */ >> 0x47,0x01,0xF7,0x03,0xF7,0x03,0x01,0x01, /* 00000D20 "G......." */ >> 0x22,0x40,0x00,0x2A,0x04,0x00,0x79,0x00, /* 00000D28 ""@.*..y." */ >> - 0x5B,0x82,0x35,0x55,0x41,0x52,0x31,0x08, /* 00000D30 "[.5UAR1." */ >> - 0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,0x05, /* 00000D38 "_HID.A.." */ >> - 0x01,0x08,0x5F,0x55,0x49,0x44,0x01,0x14, /* 00000D40 ".._UID.." */ >> - 0x09,0x5F,0x53,0x54,0x41,0x00,0xA4,0x0A, /* 00000D48 "._STA..." */ >> - 0x0F,0x08,0x5F,0x43,0x52,0x53,0x11,0x10, /* 00000D50 ".._CRS.." */ >> - 0x0A,0x0D,0x47,0x01,0xF8,0x03,0xF8,0x03, /* 00000D58 "..G....." */ >> - 0x01,0x08,0x22,0x10,0x00,0x79,0x00,0x5B, /* 00000D60 ".."..y.[" */ >> - 0x82,0x36,0x4C,0x54,0x50,0x31,0x08,0x5F, /* 00000D68 ".6LTP1._" */ >> - 0x48,0x49,0x44,0x0C,0x41,0xD0,0x04,0x00, /* 00000D70 "HID.A..." */ >> - 0x08,0x5F,0x55,0x49,0x44,0x0A,0x02,0x14, /* 00000D78 "._UID..." */ >> - 0x09,0x5F,0x53,0x54,0x41,0x00,0xA4,0x0A, /* 00000D80 "._STA..." */ >> - 0x0F,0x08,0x5F,0x43,0x52,0x53,0x11,0x10, /* 00000D88 ".._CRS.." */ >> - 0x0A,0x0D,0x47,0x01,0x78,0x03,0x78,0x03, /* 00000D90 "..G.x.x." */ >> - 0x08,0x08,0x22,0x80,0x00,0x79,0x00, >> + 0x5B,0x82,0x45,0x05,0x55,0x41,0x52,0x31, /* 00000D30 "[.E.UAR1" */ >> + 0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0, /* 00000D38 "._HID.A." */ >> + 0x05,0x01,0x08,0x5F,0x55,0x49,0x44,0x01, /* 00000D40 "..._UID." */ >> + 0x14,0x28,0x5F,0x53,0x54,0x41,0x00,0x70, /* 00000D48 ".(_STA.p" */ >> + 0x5E,0x5E,0x5E,0x2E,0x50,0x58,0x31,0x33, /* 00000D50 "^^^.PX13" */ >> + 0x44,0x52,0x53,0x43,0x60,0x7B,0x60,0x0C, /* 00000D58 "DRSC`{`." */ >> + 0x00,0x00,0x00,0x08,0x60,0xA0,0x06,0x93, /* 00000D60 "....`..." */ >> + 0x60,0x00,0xA4,0x00,0xA1,0x04,0xA4,0x0A, /* 00000D68 "`......." */ >> + 0x0F,0x08,0x5F,0x43,0x52,0x53,0x11,0x10, /* 00000D70 ".._CRS.." */ >> + 0x0A,0x0D,0x47,0x01,0xF8,0x03,0xF8,0x03, /* 00000D78 "..G....." */ >> + 0x01,0x08,0x22,0x10,0x00,0x79,0x00,0x5B, /* 00000D80 ".."..y.[" */ >> + 0x82,0x46,0x05,0x55,0x41,0x52,0x32,0x08, /* 00000D88 ".F.UAR2." */ >> + 0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,0x05, /* 00000D90 "_HID.A.." */ >> + 0x01,0x08,0x5F,0x55,0x49,0x44,0x0A,0x02, /* 00000D98 ".._UID.." */ >> + 0x14,0x28,0x5F,0x53,0x54,0x41,0x00,0x70, /* 00000DA0 ".(_STA.p" */ >> + 0x5E,0x5E,0x5E,0x2E,0x50,0x58,0x31,0x33, /* 00000DA8 "^^^.PX13" */ >> + 0x44,0x52,0x53,0x43,0x60,0x7B,0x60,0x0C, /* 00000DB0 "DRSC`{`." */ >> + 0x00,0x00,0x00,0x80,0x60,0xA0,0x06,0x93, /* 00000DB8 "....`..." */ >> + 0x60,0x00,0xA4,0x00,0xA1,0x04,0xA4,0x0A, /* 00000DC0 "`......." */ >> + 0x0F,0x08,0x5F,0x43,0x52,0x53,0x11,0x10, /* 00000DC8 ".._CRS.." */ >> + 0x0A,0x0D,0x47,0x01,0xF8,0x02,0xF8,0x02, /* 00000DD0 "..G....." */ >> + 0x00,0x08,0x22,0x08,0x00,0x79,0x00,0x5B, /* 00000DD8 ".."..y.[" */ >> + 0x82,0x36,0x4C,0x54,0x50,0x31,0x08,0x5F, /* 00000DE0 ".6LTP1._" */ >> + 0x48,0x49,0x44,0x0C,0x41,0xD0,0x04,0x00, /* 00000DE8 "HID.A..." */ >> + 0x08,0x5F,0x55,0x49,0x44,0x0A,0x02,0x14, /* 00000DF0 "._UID..." */ >> + 0x09,0x5F,0x53,0x54,0x41,0x00,0xA4,0x0A, /* 00000DF8 "._STA..." */ >> + 0x0F,0x08,0x5F,0x43,0x52,0x53,0x11,0x10, /* 00000E00 ".._CRS.." */ >> + 0x0A,0x0D,0x47,0x01,0x78,0x03,0x78,0x03, /* 00000E08 "..G.x.x." */ >> + 0x08,0x08,0x22,0x80,0x00,0x79,0x00,0x5B, /* 00000E10 ".."..y.[" */ >> + 0x82,0x40,0x05,0x50,0x58,0x31,0x33,0x08, /* 00000E18 ".@.PX13." */ >> + 0x5F,0x41,0x44,0x52,0x0C,0x02,0x00,0x01, /* 00000E20 "_ADR...." */ >> + 0x00,0x5B,0x80,0x50,0x31,0x33,0x43,0x02, /* 00000E28 ".[.P13C." */ >> + 0x0A,0x5C,0x0A,0x24,0x5B,0x81,0x33,0x50, /* 00000E30 ".\.$[.3P" */ >> + 0x31,0x33,0x43,0x03,0x44,0x52,0x53,0x41, /* 00000E38 "13C.DRSA" */ >> + 0x20,0x44,0x52,0x53,0x42,0x20,0x44,0x52, /* 00000E40 " DRSB DR" */ >> + 0x53,0x43,0x20,0x44,0x52,0x53,0x45,0x20, /* 00000E48 "SC DRSE " */ >> + 0x44,0x52,0x53,0x46,0x20,0x44,0x52,0x53, /* 00000E50 "DRSF DRS" */ >> + 0x47,0x20,0x44,0x52,0x53,0x48,0x20,0x44, /* 00000E58 "G DRSH D" */ >> + 0x52,0x53,0x49,0x20,0x44,0x52,0x53,0x4A, /* 00000E60 "RSI DRSJ" */ >> + 0x20, >> }; >> int DsdtLen=sizeof(AmlCode); >> diff -r b3ff399f3be9 tools/ioemu/hw/piix4acpi.c >> --- a/tools/ioemu/hw/piix4acpi.c Mon Jul 30 15:02:51 2007 -0400 >> +++ b/tools/ioemu/hw/piix4acpi.c Mon Jul 30 15:02:51 2007 -0400 >> @@ -166,6 +166,11 @@ void pci_piix4_acpi_init(PCIBus *bus, in >> pci_conf[0x43] = 0x00; >> d->pm1_control = SCI_EN; >> >> + /* ACPI BIOS determines presence of COM ports based on these decodes */ >> + pci_conf[0x63] = 0x60; >> + pci_conf[0x67] = (serial_hds[0] != NULL ? 0x08 : 0) | >> + (serial_hds[1] != NULL ? 0x90 : 0); >> + >> acpi_map((PCIDevice *)d, 0, 0x1f40, 0x10, PCI_ADDRESS_SPACE_IO); >> >> register_savevm("piix4acpi", 0, 1, piix4acpi_save, piix4acpi_load, d); >> >> _______________________________________________ >> Xen-devel mailing list >> Xen-devel@lists.xensource.com >> http://lists.xensource.com/xen-devel > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xensource.com > http://lists.xensource.com/xen-devel_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Gary Grebus
2007-Aug-28 13:46 UTC
Re: [Xen-devel] [PATCH][QEMU] Fix ACPI COM port detection
On Tue, 2007-08-28 at 12:57 +0100, Keir Fraser wrote:> A bit of fiddling seems to indicate that dynamically presenting the UAR > devices does actually make sense. Windows doesn''t complain about all COM > ports going missing in the same way that it does about all LPT ports going > missing. And it does complain (albeit hidden in device manager and event > viewer) if it sees a ACPI UAR device that it can''t physically probe.Those two complaints were what the patch was intended to address.> > > > Also, PIIX4 is not hardcoded to 00:01.2, and if it moves then we have set > > ourselves up here for a subtle bug. > >True, but I don''t know of any way around having the DSDT know at least a little about the device model. /gary _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Keir Fraser
2007-Aug-28 13:56 UTC
Re: [Xen-devel] [PATCH][QEMU] Fix ACPI COM port detection
On 28/8/07 14:46, "Gary Grebus" <ggrebus@virtualiron.com> wrote:> On Tue, 2007-08-28 at 12:57 +0100, Keir Fraser wrote: >> A bit of fiddling seems to indicate that dynamically presenting the UAR >> devices does actually make sense. Windows doesn''t complain about all COM >> ports going missing in the same way that it does about all LPT ports going >> missing. And it does complain (albeit hidden in device manager and event >> viewer) if it sees a ACPI UAR device that it can''t physically probe. > > Those two complaints were what the patch was intended to address.It would save me time if that was explained in the patch comment. Working out the motivating reason for a patch is one of the more tedious parts of maintainership.>>> Also, PIIX4 is not hardcoded to 00:01.2, and if it moves then we have set >>> ourselves up here for a subtle bug. >>> > True, but I don''t know of any way around having the DSDT know at least a > little about the device model.Hvmloader already probes the PCI space. I think we should have a small in-memory info structure immediately preceding the loaded ACPI tables, in a format agreed between hvmloader and the DSDT. Hvmloader can populate it and DSDT can maintain it. Since the ACPI tables are part of hvmloader, in source and in binary, this dependency is quite acceptable. -- Keir _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel