// Align IO resource at 4K boundary\r
//\r
Mask = 0xFFFULL;\r
- Io->Limit = (Io->Limit + Mask) & ~Mask;\r
+ Io->Limit = ((Io->Limit + Mask) & ~Mask) - 1;\r
if (Io->Base != MAX_UINT64) {\r
Io->Base &= ~Mask;\r
}\r
// Align MEM resource at 1MB boundary\r
//\r
Mask = 0xFFFFFULL;\r
- Mem->Limit = (Mem->Limit + Mask) & ~Mask;\r
+ Mem->Limit = ((Mem->Limit + Mask) & ~Mask) - 1;\r
if (Mem->Base != MAX_UINT64) {\r
Mem->Base &= ~Mask;\r
}\r
UINT32 UpperValue;\r
UINT64 Mask;\r
UINTN Offset;\r
+ UINTN LowBit;\r
UINT64 Base;\r
UINT64 Length;\r
UINT64 Limit;\r
\r
Base = Base | LShiftU64 ((UINT64) OriginalUpperValue, 32);\r
Length = Length | LShiftU64 ((UINT64) UpperValue, 32);\r
- Length = (~Length) + 1;\r
+ if (Length != 0) {\r
+ LowBit = LowBitSet64 (Length);\r
+ Length = LShiftU64 (1ULL, LowBit);\r
+ }\r
\r
if ((Value & BIT3) == BIT3) {\r
MemAperture = PMemAbove4G;\r