*/
/*
- * Map 0-512MB using 128 page tables.
- * Multiboot2 info is a physical pointer (EBX) and GRUB may place it high.
- * Keeping a wide identity + higher-half window avoids early page faults
- * while PMM/VMM/heap are coming up.
+ * Map 0-64MB using 16 page tables.
+ * This keeps enough low physical memory identity-mapped for bring-up.
*/
- /* Fill PTs (boot_pt0..boot_pt127) */
+ /* Fill PTs (boot_pt0..boot_pt15) */
mov $boot_pt0, %edi
sub $KERNEL_VIRT_BASE, %edi /* Physical address of PT0 */
xor %ebx, %ebx /* pt_index = 0 */
loop 2b
inc %ebx
- cmp $128, %ebx
+ cmp $16, %ebx
jne 1b
/* 3. Get Physical Address of Page Directory */
mov $boot_pd, %edi
sub $KERNEL_VIRT_BASE, %edi
- /* Link PT0..PT127 into PD for both identity and higher-half mapping */
+ /* Link PT0..PT15 into PD for both identity and higher-half mapping */
mov $boot_pt0, %edx
sub $KERNEL_VIRT_BASE, %edx /* pt_phys = physical address of PT0 */
mov $0, %ebx /* i = 0 */
mov %eax, 3072(%edi,%ebx,4) /* PD[768+i] */
add $4096, %edx
inc %ebx
- cmp $128, %ebx
+ cmp $16, %ebx
jne 3b
/* 6. Recursive Mapping (Optional, good for VMM later) at index 1023 */
.skip 4096
.global boot_pt0
boot_pt0:
- .skip 4096*128
+ .skip 4096*16
.align 16
.global arch_boot_args
void* p = pmm_alloc_page();
if (!p) return 0;
// boot.S currently identity-maps a large low window; keep allocations within it.
- if ((uint32_t)p < 0x20000000) {
+ if ((uint32_t)p < 0x04000000) {
return p;
}
// Not safe to touch yet; put it back.