mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 01:55:19 +00:00
Fixed interpretation of BIOS memory map.
Patch by Hartmut Birr. svn path=/trunk/; revision=2167
This commit is contained in:
parent
9dd23174c8
commit
25f3f80f1e
2 changed files with 27 additions and 9 deletions
|
@ -130,7 +130,7 @@ VOID MiParseRangeToFreeList(
|
|||
Range->Type);
|
||||
|
||||
first = (Range->BaseAddrLow + PAGESIZE - 1) / PAGESIZE;
|
||||
last = first + ((Range->LengthLow + PAGESIZE - 1) / PAGESIZE) + 1;
|
||||
last = first + ((Range->LengthLow + PAGESIZE - 1) / PAGESIZE);
|
||||
for (i = first; i < last; i++)
|
||||
{
|
||||
if (MmPageArray[i].Flags == 0)
|
||||
|
@ -156,7 +156,7 @@ VOID MiParseRangeToBiosList(
|
|||
Range->Type);
|
||||
|
||||
first = (Range->BaseAddrLow + PAGESIZE - 1) / PAGESIZE;
|
||||
last = first + ((Range->LengthLow + PAGESIZE - 1) / PAGESIZE) + 1;
|
||||
last = first + ((Range->LengthLow + PAGESIZE - 1) / PAGESIZE);
|
||||
for (i = first; i < last; i++)
|
||||
{
|
||||
/* Remove the page from the free list if it is there */
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $Id: mminit.c,v 1.23 2001/08/03 09:36:18 ei Exp $
|
||||
/* $Id: mminit.c,v 1.24 2001/08/13 16:39:01 ekohl Exp $
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top directory
|
||||
* PROJECT: ReactOS kernel
|
||||
|
@ -187,26 +187,44 @@ VOID MmInitVirtualMemory(ULONG LastKernelAddress,
|
|||
DPRINT("MmInitVirtualMemory() done\n");
|
||||
}
|
||||
|
||||
VOID MmInit1(ULONG FirstKrnlPhysAddr,
|
||||
VOID MmInit1(ULONG FirstKrnlPhysAddr,
|
||||
ULONG LastKrnlPhysAddr,
|
||||
ULONG LastKernelAddress,
|
||||
PADDRESS_RANGE BIOSMemoryMap,
|
||||
ULONG AddressRangeCount)
|
||||
PADDRESS_RANGE BIOSMemoryMap,
|
||||
ULONG AddressRangeCount)
|
||||
/*
|
||||
* FUNCTION: Initalize memory managment
|
||||
*/
|
||||
{
|
||||
ULONG i;
|
||||
ULONG kernel_len;
|
||||
#ifndef MP
|
||||
#ifndef MP
|
||||
extern unsigned int unmap_me, unmap_me2, unmap_me3;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
DPRINT("MmInit1(FirstKrnlPhysAddr, %x, LastKrnlPhysAddr %x, LastKernelAddress %x)\n",
|
||||
FirstKrnlPhysAddr,
|
||||
LastKrnlPhysAddr,
|
||||
LastKernelAddress);
|
||||
|
||||
|
||||
if ((BIOSMemoryMap != NULL) && (AddressRangeCount > 0))
|
||||
{
|
||||
// If we have a bios memory map, recalulate the the memory size
|
||||
ULONG last = 0;
|
||||
for (i = 0; i < AddressRangeCount; i++)
|
||||
{
|
||||
if (BIOSMemoryMap[i].Type == 1
|
||||
&& (BIOSMemoryMap[i].BaseAddrLow + BIOSMemoryMap[i].LengthLow + PAGESIZE -1) / PAGESIZE > last)
|
||||
{
|
||||
last = (BIOSMemoryMap[i].BaseAddrLow + BIOSMemoryMap[i].LengthLow + PAGESIZE -1) / PAGESIZE;
|
||||
}
|
||||
}
|
||||
if ((last - 256) * 4 > KeLoaderBlock.MemHigher)
|
||||
{
|
||||
KeLoaderBlock.MemHigher = (last - 256) * 4;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* FIXME: Set this based on the system command line
|
||||
*/
|
||||
|
|
Loading…
Reference in a new issue