diff --git a/drivers/bus/pci/pdo.c b/drivers/bus/pci/pdo.c index 139aed69439..88576bbaa26 100644 --- a/drivers/bus/pci/pdo.c +++ b/drivers/bus/pci/pdo.c @@ -283,6 +283,7 @@ PdoGetRangeLength(PPDO_DEVICE_EXTENSION DeviceExtension, ULONGLONG Bar; } NewValue; ULONG Offset; + ULONGLONG Size; /* Compute the offset of this BAR in PCI config space */ Offset = 0x10 + Bar * 4; @@ -359,9 +360,10 @@ PdoGetRangeLength(PPDO_DEVICE_EXTENSION DeviceExtension, ? (OriginalValue.Bar & PCI_ADDRESS_IO_ADDRESS_MASK_64) : (OriginalValue.Bar & PCI_ADDRESS_MEMORY_ADDRESS_MASK_64)); - *Length = ~((NewValue.Bar & PCI_ADDRESS_IO_SPACE) - ? (NewValue.Bar & PCI_ADDRESS_IO_ADDRESS_MASK_64) - : (NewValue.Bar & PCI_ADDRESS_MEMORY_ADDRESS_MASK_64)) + 1; + Size = (NewValue.Bar & PCI_ADDRESS_IO_SPACE) + ? (NewValue.Bar & PCI_ADDRESS_IO_ADDRESS_MASK_64) + : (NewValue.Bar & PCI_ADDRESS_MEMORY_ADDRESS_MASK_64); + *Length = Size & ~(Size - 1); *Flags = (NewValue.Bar & PCI_ADDRESS_IO_SPACE) ? (NewValue.Bar & ~PCI_ADDRESS_IO_ADDRESS_MASK_64)