| 883 | } |
| 884 | |
| 885 | static vm_offset_t |
| 886 | pmap_bootstrap_l2(vm_offset_t l1pt, vm_offset_t va, vm_offset_t l2_start) |
| 887 | { |
| 888 | vm_offset_t l2pt; |
| 889 | vm_paddr_t pa; |
| 890 | pd_entry_t *l1; |
| 891 | u_int l1_slot; |
| 892 | |
| 893 | KASSERT((va & L1_OFFSET) == 0, ("Invalid virtual address")); |
| 894 | |
| 895 | l1 = (pd_entry_t *)l1pt; |
| 896 | l1_slot = pmap_l1_index(va); |
| 897 | l2pt = l2_start; |
| 898 | |
| 899 | for (; va < VM_MAX_KERNEL_ADDRESS; l1_slot++, va += L1_SIZE) { |
| 900 | KASSERT(l1_slot < Ln_ENTRIES, ("Invalid L1 index")); |
| 901 | |
| 902 | pa = pmap_early_vtophys(l1pt, l2pt); |
| 903 | pmap_store(&l1[l1_slot], |
| 904 | (pa & ~Ln_TABLE_MASK) | L1_TABLE); |
| 905 | l2pt += PAGE_SIZE; |
| 906 | } |
| 907 | |
| 908 | /* Clean the L2 page table */ |
| 909 | memset((void *)l2_start, 0, l2pt - l2_start); |
| 910 | |
| 911 | return l2pt; |
| 912 | } |
| 913 | |
| 914 | static vm_offset_t |
| 915 | pmap_bootstrap_l3(vm_offset_t l1pt, vm_offset_t va, vm_offset_t l3_start) |
no test coverage detected