Home | Info | Community | Development | myReactOS | Contact Us
Definition at line 44 of file mminit.c.
Referenced by MmInitSystem().
{ PVOID BaseAddress; PHYSICAL_ADDRESS BoundaryAddressMultiple; PMEMORY_AREA MArea; NTSTATUS Status; BoundaryAddressMultiple.QuadPart = 0; // // Create the memory area to define the loader mappings // BaseAddress = (PVOID)KSEG0_BASE; Status = MmCreateMemoryArea(MmGetKernelAddressSpace(), MEMORY_AREA_OWNED_BY_ARM3 | MEMORY_AREA_STATIC, &BaseAddress, MmBootImageSize, PAGE_EXECUTE_READWRITE, &MArea, TRUE, 0, BoundaryAddressMultiple); ASSERT(Status == STATUS_SUCCESS); // // Create the memory area to define the PTE base // BaseAddress = (PVOID)PTE_BASE; Status = MmCreateMemoryArea(MmGetKernelAddressSpace(), MEMORY_AREA_OWNED_BY_ARM3 | MEMORY_AREA_STATIC, &BaseAddress, PTE_TOP - PTE_BASE + 1, PAGE_READWRITE, &MArea, TRUE, 0, BoundaryAddressMultiple); ASSERT(Status == STATUS_SUCCESS); // // Create the memory area to define Hyperspace // BaseAddress = (PVOID)HYPER_SPACE; Status = MmCreateMemoryArea(MmGetKernelAddressSpace(), MEMORY_AREA_OWNED_BY_ARM3 | MEMORY_AREA_STATIC, &BaseAddress, HYPER_SPACE_END - HYPER_SPACE + 1, PAGE_READWRITE, &MArea, TRUE, 0, BoundaryAddressMultiple); ASSERT(Status == STATUS_SUCCESS); // // Protect the PFN database // BaseAddress = MmPfnDatabase; Status = MmCreateMemoryArea(MmGetKernelAddressSpace(), MEMORY_AREA_OWNED_BY_ARM3 | MEMORY_AREA_STATIC, &BaseAddress, (MxPfnAllocation << PAGE_SHIFT), PAGE_READWRITE, &MArea, TRUE, 0, BoundaryAddressMultiple); ASSERT(Status == STATUS_SUCCESS); // // ReactOS requires a memory area to keep the initial NP area off-bounds // BaseAddress = MmNonPagedPoolStart; Status = MmCreateMemoryArea(MmGetKernelAddressSpace(), MEMORY_AREA_OWNED_BY_ARM3 | MEMORY_AREA_STATIC, &BaseAddress, MmSizeOfNonPagedPoolInBytes, PAGE_READWRITE, &MArea, TRUE, 0, BoundaryAddressMultiple); ASSERT(Status == STATUS_SUCCESS); // // And we need one more for the system NP // BaseAddress = MmNonPagedSystemStart; Status = MmCreateMemoryArea(MmGetKernelAddressSpace(), MEMORY_AREA_OWNED_BY_ARM3 | MEMORY_AREA_STATIC, &BaseAddress, MiNonPagedSystemSize, PAGE_READWRITE, &MArea, TRUE, 0, BoundaryAddressMultiple); ASSERT(Status == STATUS_SUCCESS); // // We also need one for system view space // BaseAddress = MiSystemViewStart; Status = MmCreateMemoryArea(MmGetKernelAddressSpace(), MEMORY_AREA_OWNED_BY_ARM3 | MEMORY_AREA_STATIC, &BaseAddress, MmSystemViewSize, PAGE_READWRITE, &MArea, TRUE, 0, BoundaryAddressMultiple); ASSERT(Status == STATUS_SUCCESS); // // And another for session space // BaseAddress = MmSessionBase; Status = MmCreateMemoryArea(MmGetKernelAddressSpace(), MEMORY_AREA_OWNED_BY_ARM3 | MEMORY_AREA_STATIC, &BaseAddress, (ULONG_PTR)MiSessionSpaceEnd - (ULONG_PTR)MmSessionBase, PAGE_READWRITE, &MArea, TRUE, 0, BoundaryAddressMultiple); ASSERT(Status == STATUS_SUCCESS); // // One more for ARM paged pool // BaseAddress = MmPagedPoolStart; Status = MmCreateMemoryArea(MmGetKernelAddressSpace(), MEMORY_AREA_OWNED_BY_ARM3 | MEMORY_AREA_STATIC, &BaseAddress, MmSizeOfPagedPoolInBytes, PAGE_READWRITE, &MArea, TRUE, 0, BoundaryAddressMultiple); ASSERT(Status == STATUS_SUCCESS); #ifndef _M_AMD64 // // Next, the KPCR // BaseAddress = (PVOID)PCR; Status = MmCreateMemoryArea(MmGetKernelAddressSpace(), MEMORY_AREA_OWNED_BY_ARM3 | MEMORY_AREA_STATIC, &BaseAddress, PAGE_SIZE * KeNumberProcessors, PAGE_READWRITE, &MArea, TRUE, 0, BoundaryAddressMultiple); ASSERT(Status == STATUS_SUCCESS); #endif // // Now the KUSER_SHARED_DATA // BaseAddress = (PVOID)KI_USER_SHARED_DATA; Status = MmCreateMemoryArea(MmGetKernelAddressSpace(), MEMORY_AREA_OWNED_BY_ARM3 | MEMORY_AREA_STATIC, &BaseAddress, PAGE_SIZE, PAGE_READWRITE, &MArea, TRUE, 0, BoundaryAddressMultiple); ASSERT(Status == STATUS_SUCCESS); // // And the debugger mapping // BaseAddress = MI_DEBUG_MAPPING; Status = MmCreateMemoryArea(MmGetKernelAddressSpace(), MEMORY_AREA_OWNED_BY_ARM3 | MEMORY_AREA_STATIC, &BaseAddress, PAGE_SIZE, PAGE_READWRITE, &MArea, TRUE, 0, BoundaryAddressMultiple); ASSERT(Status == STATUS_SUCCESS); #if defined(_X86_) // // Finally, reserve the 2 pages we currently make use of for HAL mappings // BaseAddress = (PVOID)0xFFC00000; Status = MmCreateMemoryArea(MmGetKernelAddressSpace(), MEMORY_AREA_OWNED_BY_ARM3 | MEMORY_AREA_STATIC, &BaseAddress, PAGE_SIZE * 2, PAGE_READWRITE, &MArea, TRUE, 0, BoundaryAddressMultiple); ASSERT(Status == STATUS_SUCCESS); #endif }