[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2] hvmloader: don't use AML operations on 64-bit fields
On Tue, 2014-05-27 at 14:21 +0100, Jan Beulich wrote: > WinXP and Win2K3, while having no problem with the QWordMemory resource > (there was another one there before), don't like operations on 64-bit > fields. Split the fields d0688669 ("hvmloader: also cover PCI MMIO > ranges above 4G with UC MTRR ranges") added to 32-bit ones, handling > carry over explicitly. > > Sadly the constructs needed to create the sub-fields - nominally > > CreateDWordField(PRT0, \_SB.PCI0._CRS._Y02._MIN, MINL) > CreateDWordField(PRT0, Add(\_SB.PCI0._CRS._Y02._MIN, 4), MINH) > > - can't be used: The former gets warned upon by newer iasl, i.e. would > need to be replaced by the latter just with the addend changed to 0, > and the latter doesn't translate properly with recent iasl). Hence, > short of having an ASL/iasl expert at hand, we need to work around the > shortcomings of various iasl versions. See the code comment. > > Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> > --- > v2: Avoid mis-compilation and warnings issued by newer iasl. All rather unfortunate isn't it. Oh well. Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx> > > --- a/tools/firmware/hvmloader/acpi/dsdt.asl > +++ b/tools/firmware/hvmloader/acpi/dsdt.asl > @@ -57,8 +57,10 @@ DefinitionBlock ("DSDT.aml", "DSDT", 2, > MSUA, 32, /* MADT checksum address */ > MAPA, 32, /* MADT LAPIC0 address */ > VGIA, 32, /* VM generation id address */ > - HMIN, 64, > - HLEN, 64 > + LMIN, 32, > + HMIN, 32, > + LLEN, 32, > + HLEN, 32 > } > > /* Fix HCT test for 0x400 pci memory: > @@ -176,15 +178,41 @@ DefinitionBlock ("DSDT.aml", "DSDT", 2, > Add(MMIN, MLEN, MMAX) > Subtract(MMAX, One, MMAX) > > - CreateQWordField(PRT0, \_SB.PCI0._CRS._Y02._MIN, HMIN) > - CreateQWordField(PRT0, \_SB.PCI0._CRS._Y02._MAX, HMAX) > - CreateQWordField(PRT0, \_SB.PCI0._CRS._Y02._LEN, HLEN) > - > - Store(\_SB.HMIN, HMIN) > - Store(\_SB.HLEN, HLEN) > - Add(HMIN, HLEN, HMAX) > - If(LOr(HMIN, HLEN)) { > - Subtract(HMAX, One, HMAX) > + /* > + * WinXP / Win2K3 blue-screen for operations on 64-bit > values. > + * Therefore we need to split the 64-bit calculations needed > + * here, but different iasl versions evaluate name references > + * to integers differently: > + * Year (approximate) 2006 2008 2012 > + * \_SB.PCI0._CRS._Y02 zero valid valid > + * \_SB.PCI0._CRS._Y02._MIN valid valid huge > + */ > + If(LEqual(Zero, \_SB.PCI0._CRS._Y02)) { > + Subtract(\_SB.PCI0._CRS._Y02._MIN, 14, Local0) > + } Else { > + Store(\_SB.PCI0._CRS._Y02, Local0) > + } > + CreateDWordField(PRT0, Add(Local0, 14), MINL) > + CreateDWordField(PRT0, Add(Local0, 18), MINH) > + CreateDWordField(PRT0, Add(Local0, 22), MAXL) > + CreateDWordField(PRT0, Add(Local0, 26), MAXH) > + CreateDWordField(PRT0, Add(Local0, 38), LENL) > + CreateDWordField(PRT0, Add(Local0, 42), LENH) > + > + Store(\_SB.LMIN, MINL) > + Store(\_SB.HMIN, MINH) > + Store(\_SB.LLEN, LENL) > + Store(\_SB.HLEN, LENH) > + Add(MINL, LENL, MAXL) > + Add(MINH, LENH, MAXH) > + If(LLess(MAXL, MINL)) { > + Add(MAXH, One, MAXH) > + } > + If(LOr(MINH, LENL)) { > + If(LEqual(MAXL, 0)) { > + Subtract(MAXH, One, MAXH) > + } > + Subtract(MAXL, One, MAXL) > } > > Return (PRT0) > > > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |