Changeset View
Changeset View
Standalone View
Standalone View
head/sys/amd64/amd64/pmap.c
Show First 20 Lines • Show All 1,416 Lines • ▼ Show 20 Lines | pmap_init(void) | ||||
TAILQ_INIT(&pv_dummy.pv_list); | TAILQ_INIT(&pv_dummy.pv_list); | ||||
pmap_initialized = 1; | pmap_initialized = 1; | ||||
for (i = 0; i < PMAP_PREINIT_MAPPING_COUNT; i++) { | for (i = 0; i < PMAP_PREINIT_MAPPING_COUNT; i++) { | ||||
ppim = pmap_preinit_mapping + i; | ppim = pmap_preinit_mapping + i; | ||||
if (ppim->va == 0) | if (ppim->va == 0) | ||||
continue; | continue; | ||||
/* Make the direct map consistent */ | /* Make the direct map consistent */ | ||||
if (ppim->pa < dmaplimit && ppim->pa + ppim->sz < dmaplimit) { | if (ppim->pa < dmaplimit && ppim->pa + ppim->sz <= dmaplimit) { | ||||
(void)pmap_change_attr(PHYS_TO_DMAP(ppim->pa), | (void)pmap_change_attr(PHYS_TO_DMAP(ppim->pa), | ||||
ppim->sz, ppim->mode); | ppim->sz, ppim->mode); | ||||
} | } | ||||
if (!bootverbose) | if (!bootverbose) | ||||
continue; | continue; | ||||
printf("PPIM %u: PA=%#lx, VA=%#lx, size=%#lx, mode=%#x\n", i, | printf("PPIM %u: PA=%#lx, VA=%#lx, size=%#lx, mode=%#x\n", i, | ||||
ppim->pa, ppim->va, ppim->sz, ppim->mode); | ppim->pa, ppim->va, ppim->sz, ppim->mode); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 5,616 Lines • ▼ Show 20 Lines | for (i = 0; i < PMAP_PREINIT_MAPPING_COUNT; i++) { | ||||
if (ppim->pa == pa && ppim->sz == size && | if (ppim->pa == pa && ppim->sz == size && | ||||
ppim->mode == mode) | ppim->mode == mode) | ||||
return ((void *)(ppim->va + offset)); | return ((void *)(ppim->va + offset)); | ||||
} | } | ||||
/* | /* | ||||
* If the specified range of physical addresses fits within | * If the specified range of physical addresses fits within | ||||
* the direct map window, use the direct map. | * the direct map window, use the direct map. | ||||
*/ | */ | ||||
if (pa < dmaplimit && pa + size < dmaplimit) { | if (pa < dmaplimit && pa + size <= dmaplimit) { | ||||
va = PHYS_TO_DMAP(pa); | va = PHYS_TO_DMAP(pa); | ||||
if (!pmap_change_attr(va, size, mode)) | if (!pmap_change_attr(va, size, mode)) | ||||
return ((void *)(va + offset)); | return ((void *)(va + offset)); | ||||
} | } | ||||
va = kva_alloc(size); | va = kva_alloc(size); | ||||
if (va == 0) | if (va == 0) | ||||
panic("%s: Couldn't allocate KVA", __func__); | panic("%s: Couldn't allocate KVA", __func__); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 1,380 Lines • Show Last 20 Lines |