Home | History | Annotate | Download | only in kern

Lines Matching refs:pc

236 	physmap_cookie_t * const pc = kmem_zalloc(sizeof(*pc), KM_SLEEP);
240 pc->pc_physmap = map;
241 pc->pc_segs = map->pm_segs;
242 pc->pc_nsegs = map->pm_nsegs;
243 pc->pc_prot = prot;
244 pc->pc_klen = 0;
245 pc->pc_kva = 0;
246 pc->pc_direct_mapped = false;
251 while (offset >= pc->pc_segs->ps_len) {
252 offset -= pc->pc_segs->ps_len;
253 pc->pc_segs++;
254 pc->pc_nsegs--;
257 pc->pc_offset = offset;
259 return pc;
265 physmap_cookie_t * const pc = cookie;
271 if (pc->pc_kva != 0 && !pc->pc_direct_mapped) {
272 pmap_kremove(pc->pc_kva, pc->pc_klen);
274 uvm_km_free(kernel_map, pc->pc_kva, pc->pc_klen,
282 if (pc->pc_nsegs == 0) {
289 paddr_t pa = pc->pc_segs->ps_addr + pc->pc_offset;
291 const size_t len = pc->pc_segs->ps_len - pc->pc_offset;
302 pc->pc_segs++;
303 pc->pc_nsegs--;
304 pc->pc_offset = 0;
309 pc->pc_klen = round_page(len);
314 pc->pc_direct_mapped = mm_md_direct_mapped_phys(pa, &pc->pc_kva);
316 if (!pc->pc_direct_mapped) {
321 pc->pc_kva = uvm_km_alloc(kernel_map, pc->pc_klen,
324 KASSERT(pc->pc_kva != 0);
329 for (size_t poff = 0; poff < pc->pc_klen; poff += PAGE_SIZE) {
330 pmap_kenter_pa(pc->pc_kva + poff, pa + poff,
331 pc->pc_prot, 0);
342 *kvap = pc->pc_kva + koff;
349 physmap_cookie_t * const pc = cookie;
355 if (pc->pc_kva != 0 && !pc->pc_direct_mapped) {
356 pmap_kremove(pc->pc_kva, pc->pc_klen);
358 uvm_km_free(kernel_map, pc->pc_kva, pc->pc_klen,
365 kmem_free(pc, sizeof(*pc));