hvmloader: don't use AML operations on 64-bit fields 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. Signed-off-by: Jan Beulich --- 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,27 @@ 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) + CreateDWordField(PRT0, \_SB.PCI0._CRS._Y02._MIN, MINL) + CreateDWordField(PRT0, \_SB.PCI0._CRS._Y02._MAX, MAXL) + CreateDWordField(PRT0, \_SB.PCI0._CRS._Y02._LEN, LENL) + CreateDWordField(PRT0, Add(\_SB.PCI0._CRS._Y02._MIN, 4), MINH) + CreateDWordField(PRT0, Add(\_SB.PCI0._CRS._Y02._MAX, 4), MAXH) + CreateDWordField(PRT0, Add(\_SB.PCI0._CRS._Y02._LEN, 4), 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)