MCPcopy Create free account
hub / github.com/F-Stack/f-stack / pmap_preboot_map_attr

Function pmap_preboot_map_attr

freebsd/arm/arm/pmap-v6.c:1050–1082  ·  view source on GitHub ↗

* Pre-bootstrap epoch page mapping(s) with attributes. */

Source from the content-addressed store, hash-verified

1048 * Pre-bootstrap epoch page mapping(s) with attributes.
1049 */
1050void
1051pmap_preboot_map_attr(vm_paddr_t pa, vm_offset_t va, vm_size_t size,
1052 vm_prot_t prot, vm_memattr_t attr)
1053{
1054 u_int num;
1055 u_int l1_attr, l1_prot, l2_prot, l2_attr;
1056 pt1_entry_t *pte1p;
1057 pt2_entry_t *pte2p;
1058
1059 l2_prot = prot & VM_PROT_WRITE ? PTE2_AP_KRW : PTE2_AP_KR;
1060 l2_prot |= (prot & VM_PROT_EXECUTE) ? PTE2_X : PTE2_NX;
1061 l2_attr = vm_memattr_to_pte2(attr);
1062 l1_prot = ATTR_TO_L1(l2_prot);
1063 l1_attr = ATTR_TO_L1(l2_attr);
1064
1065 /* Map all the pages. */
1066 num = round_page(size);
1067 while (num > 0) {
1068 if ((((va | pa) & PTE1_OFFSET) == 0) && (num >= PTE1_SIZE)) {
1069 pte1p = kern_pte1(va);
1070 pte1_store(pte1p, PTE1_KERN(pa, l1_prot, l1_attr));
1071 va += PTE1_SIZE;
1072 pa += PTE1_SIZE;
1073 num -= PTE1_SIZE;
1074 } else {
1075 pte2p = pmap_preboot_vtopte2(va);
1076 pte2_store(pte2p, PTE2_KERN(pa, l2_prot, l2_attr));
1077 va += PAGE_SIZE;
1078 pa += PAGE_SIZE;
1079 num -= PAGE_SIZE;
1080 }
1081 }
1082}
1083
1084/*
1085 * Extract from the kernel page table the physical address

Callers 2

initarmFunction · 0.85
devmap_bootstrapFunction · 0.85

Calls 5

vm_memattr_to_pte2Function · 0.85
kern_pte1Function · 0.85
pte1_storeFunction · 0.85
pmap_preboot_vtopte2Function · 0.85
pte2_storeFunction · 0.85

Tested by

no test coverage detected