Author: tkreuzer Date: Sat Sep 24 11:46:20 2011 New Revision: 53827
URL: http://svn.reactos.org/svn/reactos?rev=53827&view=rev Log: [NTOSKRNL/AMD64] Cleanup amd64 specific code
Modified: trunk/reactos/ntoskrnl/mm/amd64/init.c
Modified: trunk/reactos/ntoskrnl/mm/amd64/init.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/amd64/init.c?re... ============================================================================== --- trunk/reactos/ntoskrnl/mm/amd64/init.c [iso-8859-1] (original) +++ trunk/reactos/ntoskrnl/mm/amd64/init.c [iso-8859-1] Sat Sep 24 11:46:20 2011 @@ -20,10 +20,6 @@ extern PMMPTE MmDebugPte; #endif
-VOID -NTAPI -HalInitializeBios(ULONG Unknown, PLOADER_PARAMETER_BLOCK LoaderBlock); - /* GLOBALS *****************************************************************/
/* Template PTE and PDE for a kernel page */ @@ -39,50 +35,16 @@ PTE_PROTOTYPE | (MI_PTE_LOOKUP_NEEDED << PAGE_SHIFT)}};
/* Sizes */ -///SIZE_T MmSessionSize = MI_SESSION_SIZE; -extern SIZE_T MmSessionViewSize; -extern SIZE_T MmSessionPoolSize; -extern SIZE_T MmSessionImageSize; -extern SIZE_T MmSystemViewSize; SIZE_T MiNonPagedSystemSize;
/* Address ranges */ -//ULONG64 MmUserProbeAddress = 0x7FFFFFF0000ULL; -//PVOID MmHighestUserAddress = (PVOID)0x7FFFFFEFFFFULL; -//PVOID MmSystemRangeStart = (PVOID)0xFFFF080000000000ULL; -PVOID MmSessionBase; // FFFFF90000000000 = MiSessionPoolStart -PVOID MiSessionPoolStart; // FFFFF90000000000 = MiSessionPoolEnd - MmSessionPoolSize -PVOID MiSessionPoolEnd; // = MiSessionViewStart -PVOID MiSessionViewStart; // = MiSessionViewEnd - MmSessionViewSize -PVOID MiSessionViewEnd; // FFFFF97FFF000000 -PVOID MiSessionImageStart; // ?FFFFF97FFF000000 = MiSessionImageEnd - MmSessionImageSize -PVOID MiSessionImageEnd; // FFFFF98000000000 = MiSessionSpaceEnd -PVOID MiSessionSpaceEnd = MI_SESSION_SPACE_END; // FFFFF98000000000 -PVOID MmSystemCacheStart; // FFFFF98000000000 -PVOID MmSystemCacheEnd; // FFFFFA8000000000 -/// PVOID MmPagedPoolStart = MI_PAGED_POOL_START; // FFFFFA8000000000 -PVOID MmPagedPoolEnd; // FFFFFAA000000000 -PVOID MiSystemViewStart; -PVOID MmNonPagedSystemStart; // FFFFFAA000000000 -PVOID MmNonPagedPoolStart; -PVOID MmNonPagedPoolExpansionStart; -///PVOID MmNonPagedPoolEnd = MI_NONPAGED_POOL_END; // 0xFFFFFAE000000000 -PVOID MmHyperSpaceEnd = (PVOID)HYPER_SPACE_END; - -MMSUPPORT MmSystemCacheWs; +PVOID MiSessionViewEnd;
ULONG64 MxPfnSizeInBytes; - -PMEMORY_ALLOCATION_DESCRIPTOR MxFreeDescriptor; -MEMORY_ALLOCATION_DESCRIPTOR MxOldFreeDescriptor; -PFN_NUMBER MiSystemPages = 0; BOOLEAN MiIncludeType[LoaderMaximum]; - PFN_NUMBER MxFreePageBase; ULONG64 MxFreePageCount = 0;
-extern PFN_NUMBER MmSystemPageDirectory[PD_COUNT]; - BOOLEAN MiPfnsInitialized = FALSE;
/* FUNCTIONS *****************************************************************/ @@ -92,6 +54,7 @@ INIT_FUNCTION MiInitializeSessionSpaceLayout() { + MmSessionSize = MI_SESSION_SIZE; MmSessionViewSize = MI_SESSION_VIEW_SIZE; MmSessionPoolSize = MI_SESSION_POOL_SIZE; MmSessionImageSize = MI_SESSION_IMAGE_SIZE; @@ -128,188 +91,92 @@ ASSERT(MmSessionBase <= MiSessionPoolStart); }
-ULONG -NoDbgPrint(const char *Format, ...) -{ - return 0; -} - -PFN_NUMBER -NTAPI -MiEarlyAllocPage() -{ - PFN_NUMBER Pfn; - - if (MiPfnsInitialized) - { - return MmAllocPage(MC_SYSTEM); - } - - /* Make sure we have enough pages */ - if (!MxFreePageCount) - { - /* Crash the system */ - KeBugCheckEx(INSTALL_MORE_MEMORY, - MmNumberOfPhysicalPages, - MxFreeDescriptor->PageCount, - MxOldFreeDescriptor.PageCount, - 1); - } - - /* Use our lowest usable free pages */ - Pfn = MxFreePageBase; - MxFreePageBase++; - MxFreePageCount--; - return Pfn; -} - -PMMPTE -NTAPI -MxGetPte(PVOID Address) -{ - PMMPTE Pte; - MMPTE TmplPte; - - /* Setup template pte */ - TmplPte.u.Long = 0; - TmplPte.u.Flush.Valid = 1; - TmplPte.u.Flush.Write = 1; - - /* Get a pointer to the PXE */ - Pte = MiAddressToPxe(Address); - if (!Pte->u.Hard.Valid) - { - /* It's not valid, map it! */ - TmplPte.u.Hard.PageFrameNumber = MiEarlyAllocPage(); - *Pte = TmplPte; - - /* Zero the page */ - RtlZeroMemory(MiPteToAddress(Pte), PAGE_SIZE); - } - - /* Get a pointer to the PPE */ - Pte = MiAddressToPpe(Address); - if (!Pte->u.Hard.Valid) - { - /* It's not valid, map it! */ - TmplPte.u.Hard.PageFrameNumber = MiEarlyAllocPage(); - *Pte = TmplPte; - - /* Zero the page */ - RtlZeroMemory(MiPteToAddress(Pte), PAGE_SIZE); - } - - /* Get a pointer to the PDE */ - Pte = MiAddressToPde(Address); - if (!Pte->u.Hard.Valid) - { - /* It's not valid, map it! */ - TmplPte.u.Hard.PageFrameNumber = MiEarlyAllocPage(); - *Pte = TmplPte; - - /* Zero the page */ - RtlZeroMemory(MiPteToAddress(Pte), PAGE_SIZE); - } - - /* Get a pointer to the PTE */ - Pte = MiAddressToPte(Address); - return Pte; -} - -VOID -NTAPI -MxMapPage(PVOID Address) -{ - MMPTE TmplPte, *Pte; - - /* Setup template pte */ - TmplPte.u.Long = 0; - TmplPte.u.Flush.Valid = 1; - TmplPte.u.Flush.Write = 1; - TmplPte.u.Hard.PageFrameNumber = MiEarlyAllocPage(); - - /* Get the PTE for that page */ - Pte = MxGetPte(Address); - ASSERT(Pte->u.Hard.Valid == 0); - - /* Map a physical page */ - *Pte = TmplPte; -} - -VOID -MxMapPageRange(PVOID Address, ULONG64 PageCount) -{ - while (PageCount--) - { - /* Map the page */ - MxMapPage(Address); - - /* Goto next page */ - Address = (PVOID)((ULONG64)Address + PAGE_SIZE); - } -} - -VOID -NTAPI -MiPreparePfnDatabse(IN PLOADER_PARAMETER_BLOCK LoaderBlock) -{ - PMEMORY_ALLOCATION_DESCRIPTOR Descriptor; - PLIST_ENTRY ListEntry; - PUCHAR Page, FirstPage; - SIZE_T Size; - - /* Calculate the size of the PFN database and convert to pages */ - MxPfnSizeInBytes = ROUND_TO_PAGES((MmHighestPhysicalPage + 1) * sizeof(MMPFN)); - MxPfnAllocation = MxPfnSizeInBytes >> PAGE_SHIFT; - - /* Simply start at hardcoded address */ - MmPfnDatabase = MI_PFN_DATABASE; - - /* Loop the memory descriptors */ - for (ListEntry = LoaderBlock->MemoryDescriptorListHead.Flink; - ListEntry != &LoaderBlock->MemoryDescriptorListHead; - ListEntry = ListEntry->Flink) - { - /* Get the memory descriptor */ - Descriptor = CONTAINING_RECORD(ListEntry, - MEMORY_ALLOCATION_DESCRIPTOR, - ListEntry); - - /* Skip pages that are not part of the PFN database */ - if (MiIncludeType[Descriptor->MemoryType]) +VOID +NTAPI +MiMapPPEs( + PVOID StartAddress, + PVOID EndAddress) +{ + PMMPDE PointerPpe; + MMPDE TmplPde = ValidKernelPde; + + /* Loop the PPEs */ + for (PointerPpe = MiAddressToPpe(StartAddress); + PointerPpe <= MiAddressToPpe(EndAddress); + PointerPpe++) + { + /* Check if its already mapped */ + if (!PointerPpe->u.Hard.Valid) { - /* Get the base and size of this pfn database entry */ - FirstPage = PAGE_ALIGN(&MmPfnDatabase[Descriptor->BasePage]); - Size = ROUND_TO_PAGES(Descriptor->PageCount * sizeof(MMPFN)); - - /* Loop the pages of this Pfn database entry */ - for (Page = FirstPage; Page < FirstPage + Size; Page += PAGE_SIZE) - { - /* Is the page already mapped? */ - if (!MmIsAddressValid(Page)) - { - /* It's not, map it now */ - MxMapPage(Page); - RtlZeroMemory(Page, PAGE_SIZE); - } - } - - /* Zero out the pages */ - RtlZeroMemory(FirstPage, Size); + /* No, map it! */ + TmplPde.u.Hard.PageFrameNumber = MxGetNextPage(1); + *PointerPpe = TmplPde; + + /* Zero out the page table */ + RtlZeroMemory(MiPteToAddress(PointerPpe), PAGE_SIZE); } } }
- -VOID +VOID +NTAPI +MiMapPDEs( + PVOID StartAddress, + PVOID EndAddress) +{ + PMMPDE PointerPde; + MMPDE TmplPde = ValidKernelPde; + + /* Loop the PDEs */ + for (PointerPde = MiAddressToPde(StartAddress); + PointerPde <= MiAddressToPde(EndAddress); + PointerPde++) + { + /* Check if its already mapped */ + if (!PointerPde->u.Hard.Valid) + { + /* No, map it! */ + TmplPde.u.Hard.PageFrameNumber = MxGetNextPage(1); + *PointerPde = TmplPde; + + /* Zero out the page table */ + RtlZeroMemory(MiPteToAddress(PointerPde), PAGE_SIZE); + } + } +} + +VOID +NTAPI +MiMapPTEs( + PVOID StartAddress, + PVOID EndAddress) +{ + PMMPTE PointerPte; + MMPTE TmplPte = ValidKernelPte; + + /* Loop the PTEs */ + for (PointerPte = MiAddressToPte(StartAddress); + PointerPte <= MiAddressToPte(EndAddress); + PointerPte++) + { + /* Check if its already mapped */ + if (!PointerPte->u.Hard.Valid) + { + /* No, map it! */ + TmplPte.u.Hard.PageFrameNumber = MxGetNextPage(1); + *PointerPte = TmplPte; + } + } +} + +VOID +NTAPI +INIT_FUNCTION MiInitializePageTable() { ULONG64 PxePhysicalAddress; - MMPTE TmplPte, *Pte; + MMPTE TmplPte, *PointerPxe; PFN_NUMBER PxePfn; - - /* HACK: don't use freeldr debug print anymore */ - //FrLdrDbgPrint = NoDbgPrint;
/* Get current directory base */ PxePfn = ((PMMPTE)PXE_SELFMAP)->u.Hard.PageFrameNumber; @@ -327,12 +194,12 @@ __writemsr(X86_MSR_EFER, __readmsr(X86_MSR_EFER) | EFER_NXE);
/* Loop the user mode PXEs */ - for (Pte = MiAddressToPxe(0); - Pte <= MiAddressToPxe(MmHighestUserAddress); - Pte++) + for (PointerPxe = MiAddressToPxe(0); + PointerPxe <= MiAddressToPxe(MmHighestUserAddress); + PointerPxe++) { /* Zero the PXE, clear all mappings */ - Pte->u.Long = 0; + PointerPxe->u.Long = 0; }
/* Flush the TLB */ @@ -348,40 +215,44 @@ * skip page tables and hyperspace */
/* Loop the PXEs */ - for (Pte = MiAddressToPxe((PVOID)(HYPER_SPACE_END + 1)); - Pte <= MiAddressToPxe(MI_HIGHEST_SYSTEM_ADDRESS); - Pte++) + for (PointerPxe = MiAddressToPxe((PVOID)(HYPER_SPACE_END + 1)); + PointerPxe <= MiAddressToPxe(MI_HIGHEST_SYSTEM_ADDRESS); + PointerPxe++) { /* Is the PXE already valid? */ - if (!Pte->u.Hard.Valid) + if (!PointerPxe->u.Hard.Valid) { /* It's not Initialize it */ - TmplPte.u.Flush.PageFrameNumber = MiEarlyAllocPage(0); - *Pte = TmplPte; + TmplPte.u.Flush.PageFrameNumber = MxGetNextPage(1); + *PointerPxe = TmplPte;
/* Zero the page. The PXE is the PTE for the PDPT. */ - RtlZeroMemory(MiPteToAddress(Pte), PAGE_SIZE); + RtlZeroMemory(MiPteToAddress(PointerPxe), PAGE_SIZE); } }
+ /* Setup the mapping PPEs and PDEs */ + MiMapPPEs((PVOID)MI_MAPPING_RANGE_START, (PVOID)MI_MAPPING_RANGE_END); + MiMapPDEs((PVOID)MI_MAPPING_RANGE_START, (PVOID)MI_MAPPING_RANGE_END); + /* Setup the mapping PTEs */ - MmFirstReservedMappingPte = MxGetPte((PVOID)MI_MAPPING_RANGE_START); + MmFirstReservedMappingPte = MiAddressToPte((PVOID)MI_MAPPING_RANGE_START); + MmLastReservedMappingPte = MiAddressToPte((PVOID)MI_MAPPING_RANGE_END); MmFirstReservedMappingPte->u.Hard.PageFrameNumber = MI_HYPERSPACE_PTES; - MmLastReservedMappingPte = MiAddressToPte((PVOID)MI_MAPPING_RANGE_END);
#ifdef _WINKD_ /* Setup debug mapping PTE */ - MmDebugPte = MxGetPte(MI_DEBUG_MAPPING); + MiMapPPEs((PVOID)MI_DEBUG_MAPPING, (PVOID)MI_DEBUG_MAPPING); + MiMapPDEs((PVOID)MI_DEBUG_MAPPING, (PVOID)MI_DEBUG_MAPPING); + MmDebugPte = MiAddressToPte((PVOID)MI_DEBUG_MAPPING); #endif }
VOID NTAPI +INIT_FUNCTION MiBuildNonPagedPool(VOID) { - PMMPTE Pte; - PFN_COUNT PageCount; - /* Check if this is a machine with less than 256MB of RAM, and no overide */ if ((MmNumberOfPhysicalPages <= MI_MIN_PAGES_FOR_NONPAGED_POOL_TUNING) && !(MmSizeOfNonPagedPoolInBytes)) @@ -459,18 +330,12 @@ MmSizeOfNonPagedPoolInBytes; ASSERT(IS_PAGE_ALIGNED(MmNonPagedPoolExpansionStart));
- /* Map the nonpaged pool */ - PageCount = (PFN_COUNT)((MmSizeOfNonPagedPoolInBytes + PAGE_SIZE - 1) / PAGE_SIZE); - MxMapPageRange(MmNonPagedPoolStart, PageCount); - - /* Loop the non paged pool extension PTEs */ - for (Pte = MiAddressToPte(MmNonPagedPoolExpansionStart); - Pte <= MiAddressToPte(MmNonPagedPoolEnd); - Pte++) - { - /* Create PXE, PPE, PDE and zero the PTE */ - MxGetPte(MiPteToAddress(Pte))->u.Long = 0; - } + /* Map PPEs and PDEs for non paged pool (including expansion) */ + MiMapPPEs(MmNonPagedPoolStart, MmNonPagedPoolEnd); + MiMapPDEs(MmNonPagedPoolStart, MmNonPagedPoolEnd); + + /* Map the nonpaged pool PTEs (without expansion) */ + MiMapPTEs(MmNonPagedPoolStart, (PUCHAR)MmNonPagedPoolExpansionStart - 1);
/* Initialize the ARM3 nonpaged pool */ MiInitializeNonPagedPool(); @@ -481,9 +346,10 @@
VOID NTAPI +INIT_FUNCTION MiBuildSystemPteSpace() { - PMMPTE Pte, StartPte, EndPte; + PMMPTE PointerPte;
/* Use the default numer of system PTEs */ MmNumberOfSystemPtes = MI_NUMBER_SYSTEM_PTES; @@ -507,20 +373,13 @@ ASSERT(MmNumberOfSystemPtes > 1000); }
- /* Set the range of system PTEs */ - StartPte = MiAddressToPte(MI_SYSTEM_PTE_START); - EndPte = StartPte + MmNumberOfSystemPtes - 1; - - /* Loop the system PTEs */ - for (Pte = StartPte; Pte <= EndPte; Pte++) - { - /* Create PXE, PPE, PDE and zero the PTE */ - MxGetPte(MiPteToAddress(Pte))->u.Long = 0; - } + /* Map the PDEs and PPEs for the system PTEs */ + MiMapPPEs(MI_SYSTEM_PTE_START, MI_SYSTEM_PTE_END); + MiMapPDEs(MI_SYSTEM_PTE_START, MI_SYSTEM_PTE_END);
/* Create the system PTE space */ - Pte = MiAddressToPte(MI_SYSTEM_PTE_START); - MiInitializeSystemPtes(Pte, MmNumberOfSystemPtes, SystemPteSpace); + PointerPte = MiAddressToPte(MI_SYSTEM_PTE_START); + MiInitializeSystemPtes(PointerPte, MmNumberOfSystemPtes, SystemPteSpace);
/* Reserve system PTEs for zeroing PTEs and clear them */ MiFirstReservedZeroingPte = MiReserveSystemPtes(MI_ZERO_PTES, SystemPteSpace); @@ -530,200 +389,19 @@ MiFirstReservedZeroingPte->u.Hard.PageFrameNumber = MI_ZERO_PTES - 1; }
-VOID -NTAPI -MiBuildPagedPool_x(VOID) -{ - PMMPTE Pte; - MMPTE TmplPte; - ULONG Size, BitMapSize; - - /* Default size for paged pool is 4 times non paged pool */ - MmSizeOfPagedPoolInBytes = 4 * MmMaximumNonPagedPoolInBytes; - - /* Make sure it doesn't overflow */ - if (MmSizeOfPagedPoolInBytes > ((ULONG64)MmNonPagedSystemStart - - (ULONG64)MmPagedPoolStart)) - { - MmSizeOfPagedPoolInBytes = (ULONG64)MmNonPagedSystemStart - - (ULONG64)MmPagedPoolStart; - } - - /* Make sure paged pool is big enough */ - if (MmSizeOfPagedPoolInBytes < MI_MIN_INIT_PAGED_POOLSIZE) - { - MmSizeOfPagedPoolInBytes = MI_MIN_INIT_PAGED_POOLSIZE; - } - - /* Align down to a PDE boundary */ - MmSizeOfPagedPoolInBytes = ROUND_DOWN(MmSizeOfPagedPoolInBytes, - 512 * PAGE_SIZE); - MmSizeOfPagedPoolInPages = MmSizeOfPagedPoolInBytes >> PAGE_SHIFT; - - /* This is where paged pool ends */ - MmPagedPoolEnd = (PCHAR)MmPagedPoolStart + MmSizeOfPagedPoolInBytes - 1; - - /* Sanity check */ - ASSERT(MmPagedPoolEnd < MmNonPagedSystemStart); - - /* setup a template PTE */ - TmplPte.u.Long = 0; - TmplPte.u.Flush.Valid = 1; - TmplPte.u.Flush.Write = 1; - - /* Make sure the PXE is valid */ - Pte = MiAddressToPxe(MmPagedPoolStart); - if (!Pte->u.Flush.Valid) - { - /* Map it! */ - TmplPte.u.Flush.PageFrameNumber = MmAllocPage(MC_SYSTEM); - *Pte = TmplPte; - } - - /* Map all page directories (max 128) */ - for (Pte = MiAddressToPpe(MmPagedPoolStart); - Pte <= MiAddressToPpe(MmPagedPoolEnd); - Pte++) - { - if (!Pte->u.Flush.Valid) - { - /* Map it! */ - TmplPte.u.Flush.PageFrameNumber = MiEarlyAllocPage(); - *Pte = TmplPte; - } - } - - /* Create and map the first PTE for paged pool */ - Pte = MxGetPte(MmPagedPoolStart); - TmplPte.u.Flush.PageFrameNumber = MiEarlyAllocPage(); - *Pte = TmplPte; - - /* Save the first and last paged pool PTE */ - MmPagedPoolInfo.FirstPteForPagedPool = MiAddressToPte(MmPagedPoolStart); - MmPagedPoolInfo.LastPteForPagedPool = MiAddressToPte(MmPagedPoolEnd); - MmPagedPoolInfo.NextPdeForPagedPoolExpansion = MiAddressToPde(MmPagedPoolStart) + 1; - - // We keep track of each page via a bit, so check how big the bitmap will - // have to be (make sure to align our page count such that it fits nicely - // into a 4-byte aligned bitmap. - - /* The size of the bitmap in bits is the size in pages */ - BitMapSize = (ULONG)MmSizeOfPagedPoolInPages; - - /* Calculate buffer size in bytes, aligned to 32 bits */ - Size = sizeof(RTL_BITMAP) + ROUND_UP(BitMapSize, 32) / 8; - - // Allocate the allocation bitmap, which tells us which regions have not yet - // been mapped into memory - - MmPagedPoolInfo.PagedPoolAllocationMap = - ExAllocatePoolWithTag(NonPagedPool, Size, ' mM'); - ASSERT(MmPagedPoolInfo.PagedPoolAllocationMap); - - // Initialize it such that at first, only the first page's worth of PTEs is - // marked as allocated (incidentially, the first PDE we allocated earlier). - RtlInitializeBitMap(MmPagedPoolInfo.PagedPoolAllocationMap, - (PULONG)(MmPagedPoolInfo.PagedPoolAllocationMap + 1), - BitMapSize); - RtlSetAllBits(MmPagedPoolInfo.PagedPoolAllocationMap); - RtlClearBits(MmPagedPoolInfo.PagedPoolAllocationMap, 0, 512); - - // We have a second bitmap, which keeps track of where allocations end. - // Given the allocation bitmap and a base address, we can therefore figure - // out which page is the last page of that allocation, and thus how big the - // entire allocation is. - MmPagedPoolInfo.EndOfPagedPoolBitmap = - ExAllocatePoolWithTag(NonPagedPool, Size, ' mM'); - ASSERT(MmPagedPoolInfo.EndOfPagedPoolBitmap); - - /* Initialize the bitmap */ - RtlInitializeBitMap(MmPagedPoolInfo.EndOfPagedPoolBitmap, - (PULONG)(MmPagedPoolInfo.EndOfPagedPoolBitmap + 1), - BitMapSize); - - /* No allocations, no allocation ends; clear all bits. */ - RtlClearAllBits(MmPagedPoolInfo.EndOfPagedPoolBitmap); - - /* Initialize the paged pool mutex */ - KeInitializeGuardedMutex(&MmPagedPoolMutex); - - /* Initialize the paged pool */ - InitializePool(PagedPool, 0); -} - - NTSTATUS NTAPI -MmArmInitSystem_x(IN ULONG Phase, - IN PLOADER_PARAMETER_BLOCK LoaderBlock) -{ - if (Phase == 0) - { - MmBootImageSize = KeLoaderBlock->Extension->LoaderPagesSpanned * PAGE_SIZE; - MmBootImageSize = ROUND_UP(MmBootImageSize, PAGE_SIZE); - - /* Parse memory descriptors, find free pages */ - //MiEvaluateMemoryDescriptors(LoaderBlock); - - /* Start PFN database at hardcoded address */ - MmPfnDatabase = MI_PFN_DATABASE; - - /* Prepare PFN database mappings */ - MiPreparePfnDatabse(LoaderBlock); - - /* Initialize some mappings */ - MiInitializePageTable(); - - /* Update the memory descriptor, to make sure the pages we used - won't get inserted into the PFN database */ - MxOldFreeDescriptor = *MxFreeDescriptor; - MxFreeDescriptor->BasePage = MxFreePageBase; - MxFreeDescriptor->PageCount = MxFreePageCount; - } - else if (Phase == 1) - { - /* The PFN database was created, restore the free descriptor */ - *MxFreeDescriptor = MxOldFreeDescriptor; - - /* The pfn database is ready now */ - MiPfnsInitialized = TRUE; - - /* Initialize the nonpaged pool */ - MiBuildNonPagedPool(); - - /* Initialize system PTE handling */ - MiBuildSystemPteSpace(); - - /* Build the physical memory block */ - //MiBuildPhysicalMemoryBlock(LoaderBlock); - - /* Size up paged pool and build the shadow system page directory */ - //MiBuildPagedPool(); - - // This is the old stuff: - //MmPagedPoolBase = (PVOID)((PCHAR)MmPagedPoolEnd + 1); - //MmPagedPoolSize = MM_PAGED_POOL_SIZE; - //ASSERT((PCHAR)MmPagedPoolBase + MmPagedPoolSize < (PCHAR)MmNonPagedSystemStart); - - - HalInitializeBios(0, LoaderBlock); - } +INIT_FUNCTION +MiInitMachineDependent(IN PLOADER_PARAMETER_BLOCK LoaderBlock) +{ + + MmHyperSpaceEnd = (PVOID)HYPER_SPACE_END; + + MiInitializePageTable(); + + MiBuildNonPagedPool(); + + MiBuildSystemPteSpace();
return STATUS_SUCCESS; } - -VOID -FASTCALL -MiSyncARM3WithROS(IN PVOID AddressStart, - IN PVOID AddressEnd) -{ - -} - -NTSTATUS -NTAPI -MiInitMachineDependent(IN PLOADER_PARAMETER_BLOCK LoaderBlock) -{ - UNIMPLEMENTED; - return STATUS_NOT_IMPLEMENTED; -}