- Removed the initialisation of the kernel map area.

- Allocate the region for the paged and non paged pool at a 4MB boundary.  
- Protect the local and i/o apic by a memory area.

svn path=/trunk/; revision=18754
This commit is contained in:
Hartmut Birr 2005-10-24 17:55:50 +00:00
parent 293a3fe31b
commit 152111652c

View file

@ -31,22 +31,10 @@ extern unsigned int _bss_end__;
static BOOLEAN IsThisAnNtAsSystem = FALSE; static BOOLEAN IsThisAnNtAsSystem = FALSE;
static MM_SYSTEM_SIZE MmSystemSize = MmSmallSystem; static MM_SYSTEM_SIZE MmSystemSize = MmSmallSystem;
static MEMORY_AREA* kernel_text_desc = NULL;
static MEMORY_AREA* kernel_init_desc = NULL;
static MEMORY_AREA* kernel_kpcr_desc = NULL;
static MEMORY_AREA* kernel_data_desc = NULL;
static MEMORY_AREA* kernel_param_desc = NULL;
static MEMORY_AREA* kernel_pool_desc = NULL;
static MEMORY_AREA* kernel_shared_data_desc = NULL;
static MEMORY_AREA* kernel_mapped_vga_framebuffer_desc = NULL;
static MEMORY_AREA* MiKernelMapDescriptor = NULL;
static MEMORY_AREA* MiPagedPoolDescriptor = NULL;
PHYSICAL_ADDRESS MmSharedDataPagePhysicalAddress; PHYSICAL_ADDRESS MmSharedDataPagePhysicalAddress;
PVOID MiNonPagedPoolStart; PVOID MiNonPagedPoolStart;
ULONG MiNonPagedPoolLength; ULONG MiNonPagedPoolLength;
//PVOID MiKernelMapStart;
extern ULONG init_stack; extern ULONG init_stack;
extern ULONG init_stack_top; extern ULONG init_stack_top;
@ -92,6 +80,7 @@ MmInitVirtualMemory(ULONG_PTR LastKernelAddress,
NTSTATUS Status; NTSTATUS Status;
PHYSICAL_ADDRESS BoundaryAddressMultiple; PHYSICAL_ADDRESS BoundaryAddressMultiple;
PFN_TYPE Pfn; PFN_TYPE Pfn;
PMEMORY_AREA MArea;
DPRINT("MmInitVirtualMemory(%x, %x)\n",LastKernelAddress, KernelLength); DPRINT("MmInitVirtualMemory(%x, %x)\n",LastKernelAddress, KernelLength);
@ -100,12 +89,16 @@ MmInitVirtualMemory(ULONG_PTR LastKernelAddress,
MmInitMemoryAreas(); MmInitMemoryAreas();
MiNonPagedPoolStart = (char*)LastKernelAddress + PAGE_SIZE; /* Start the paged and nonpaged pool at a 4MB boundary. */
MiNonPagedPoolStart = (PVOID)ROUND_UP((ULONG_PTR)LastKernelAddress + PAGE_SIZE, 0x400000);
MiNonPagedPoolLength = MM_NONPAGED_POOL_SIZE; MiNonPagedPoolLength = MM_NONPAGED_POOL_SIZE;
MmPagedPoolBase = (char*)MiNonPagedPoolStart + MiNonPagedPoolLength + PAGE_SIZE; MmPagedPoolBase = (PVOID)ROUND_UP((ULONG_PTR)MiNonPagedPoolStart + MiNonPagedPoolLength + PAGE_SIZE, 0x400000);
MmPagedPoolSize = MM_PAGED_POOL_SIZE; MmPagedPoolSize = MM_PAGED_POOL_SIZE;
DPRINT("NonPagedPool %x - %x, PagedPool %x - %x\n", MiNonPagedPoolStart, (ULONG_PTR)MiNonPagedPoolStart + MiNonPagedPoolLength - 1,
MmPagedPoolBase, (ULONG_PTR)MmPagedPoolBase + MmPagedPoolSize - 1);
MiInitializeNonPagedPool(); MiInitializeNonPagedPool();
/* /*
@ -120,7 +113,33 @@ MmInitVirtualMemory(ULONG_PTR LastKernelAddress,
&BaseAddress, &BaseAddress,
PAGE_SIZE * MAXIMUM_PROCESSORS, PAGE_SIZE * MAXIMUM_PROCESSORS,
0, 0,
&kernel_kpcr_desc, &MArea,
TRUE,
FALSE,
BoundaryAddressMultiple);
/* Local APIC base */
BaseAddress = (PVOID)0xFEE00000;
MmCreateMemoryArea(NULL,
MmGetKernelAddressSpace(),
MEMORY_AREA_SYSTEM,
&BaseAddress,
PAGE_SIZE,
0,
&MArea,
TRUE,
FALSE,
BoundaryAddressMultiple);
/* i/o APIC base */
BaseAddress = (PVOID)0xFEC00000;
MmCreateMemoryArea(NULL,
MmGetKernelAddressSpace(),
MEMORY_AREA_SYSTEM,
&BaseAddress,
PAGE_SIZE,
0,
&MArea,
TRUE, TRUE,
FALSE, FALSE,
BoundaryAddressMultiple); BoundaryAddressMultiple);
@ -132,7 +151,7 @@ MmInitVirtualMemory(ULONG_PTR LastKernelAddress,
&BaseAddress, &BaseAddress,
0x20000, 0x20000,
0, 0,
&kernel_mapped_vga_framebuffer_desc, &MArea,
TRUE, TRUE,
FALSE, FALSE,
BoundaryAddressMultiple); BoundaryAddressMultiple);
@ -151,7 +170,7 @@ MmInitVirtualMemory(ULONG_PTR LastKernelAddress,
&BaseAddress, &BaseAddress,
Length, Length,
0, 0,
&kernel_text_desc, &MArea,
TRUE, TRUE,
FALSE, FALSE,
BoundaryAddressMultiple); BoundaryAddressMultiple);
@ -168,7 +187,7 @@ MmInitVirtualMemory(ULONG_PTR LastKernelAddress,
&BaseAddress, &BaseAddress,
Length, Length,
0, 0,
&kernel_init_desc, &MArea,
TRUE, TRUE,
FALSE, FALSE,
BoundaryAddressMultiple); BoundaryAddressMultiple);
@ -190,7 +209,7 @@ MmInitVirtualMemory(ULONG_PTR LastKernelAddress,
&BaseAddress, &BaseAddress,
Length, Length,
0, 0,
&kernel_data_desc, &MArea,
TRUE, TRUE,
FALSE, FALSE,
BoundaryAddressMultiple); BoundaryAddressMultiple);
@ -203,7 +222,7 @@ MmInitVirtualMemory(ULONG_PTR LastKernelAddress,
&BaseAddress, &BaseAddress,
Length, Length,
0, 0,
&kernel_param_desc, &MArea,
TRUE, TRUE,
FALSE, FALSE,
BoundaryAddressMultiple); BoundaryAddressMultiple);
@ -215,19 +234,7 @@ MmInitVirtualMemory(ULONG_PTR LastKernelAddress,
&BaseAddress, &BaseAddress,
MiNonPagedPoolLength, MiNonPagedPoolLength,
0, 0,
&kernel_pool_desc, &MArea,
TRUE,
FALSE,
BoundaryAddressMultiple);
BaseAddress = (PVOID)MM_KERNEL_MAP_BASE;
Status = MmCreateMemoryArea(NULL,
MmGetKernelAddressSpace(),
MEMORY_AREA_SYSTEM,
&BaseAddress,
MM_KERNEL_MAP_SIZE,
0,
&MiKernelMapDescriptor,
TRUE, TRUE,
FALSE, FALSE,
BoundaryAddressMultiple); BoundaryAddressMultiple);
@ -239,7 +246,7 @@ MmInitVirtualMemory(ULONG_PTR LastKernelAddress,
&BaseAddress, &BaseAddress,
MmPagedPoolSize, MmPagedPoolSize,
0, 0,
&MiPagedPoolDescriptor, &MArea,
TRUE, TRUE,
FALSE, FALSE,
BoundaryAddressMultiple); BoundaryAddressMultiple);
@ -257,7 +264,7 @@ MmInitVirtualMemory(ULONG_PTR LastKernelAddress,
&BaseAddress, &BaseAddress,
Length, Length,
0, 0,
&kernel_shared_data_desc, &MArea,
TRUE, TRUE,
FALSE, FALSE,
BoundaryAddressMultiple); BoundaryAddressMultiple);