Lines Matching refs:va

473 #define	getsegmap(va)		(CPU_ISSUN4C \  argument
474 ? lduba(va, ASI_SEGMAP) \
475 : (lduha(va, ASI_SEGMAP) & segfixmask))
476 #define setsegmap(va, pmeg) (CPU_ISSUN4C \ argument
477 ? stba(va, ASI_SEGMAP, pmeg) \
478 : stha(va, ASI_SEGMAP, pmeg))
481 #define getregmap(va) ((unsigned)lduha((va)+2, ASI_REGMAP) >> 8) argument
482 #define setregmap(va, smeg) stha((va)+2, ASI_REGMAP, (smeg << 8)) argument
524 void setpte4m(vaddr_t va, int pte);
637 sp_tlb_flush(int va, int ctx, int lvl) in sp_tlb_flush() argument
654 va &= ~0xfff; in sp_tlb_flush()
656 va |= lvl; in sp_tlb_flush()
659 __asm("sta %%g0, [%1]%0" :: "n"(ASI_SRMMUFP), "r"(va)); in sp_tlb_flush()
685 static inline void smp_tlb_flush_page (int va, int ctx, u_int cpuset);
686 static inline void smp_tlb_flush_segment (int va, int ctx, u_int cpuset);
687 static inline void smp_tlb_flush_region (int va, int ctx, u_int cpuset);
692 extern void ft_tlb_flush(int va, int ctx, int lvl);
695 smp_tlb_flush_page(int va, int ctx, u_int cpuset) in smp_tlb_flush_page() argument
699 sp_tlb_flush(va, ctx, ASI_SRMMUFP_L3); in smp_tlb_flush_page()
701 FXCALL3(sp_tlb_flush, ft_tlb_flush, va, ctx, ASI_SRMMUFP_L3, cpuset); in smp_tlb_flush_page()
705 smp_tlb_flush_segment(int va, int ctx, u_int cpuset) in smp_tlb_flush_segment() argument
709 sp_tlb_flush(va, ctx, ASI_SRMMUFP_L2); in smp_tlb_flush_segment()
711 FXCALL3(sp_tlb_flush, ft_tlb_flush, va, ctx, ASI_SRMMUFP_L2, cpuset); in smp_tlb_flush_segment()
715 smp_tlb_flush_region(int va, int ctx, u_int cpuset) in smp_tlb_flush_region() argument
719 sp_tlb_flush(va, ctx, ASI_SRMMUFP_L1); in smp_tlb_flush_region()
721 FXCALL3(sp_tlb_flush, ft_tlb_flush, va, ctx, ASI_SRMMUFP_L1, cpuset); in smp_tlb_flush_region()
746 #define tlb_flush_page(va,ctx,s) smp_tlb_flush_page(va,ctx,s) argument
747 #define tlb_flush_segment(va,ctx,s) smp_tlb_flush_segment(va,ctx,s) argument
748 #define tlb_flush_region(va,ctx,s) smp_tlb_flush_region(va,ctx,s) argument
752 #define tlb_flush_page(va,ctx,s) sp_tlb_flush(va,ctx,ASI_SRMMUFP_L3) argument
753 #define tlb_flush_segment(va,ctx,s) sp_tlb_flush(va,ctx,ASI_SRMMUFP_L2) argument
754 #define tlb_flush_region(va,ctx,s) sp_tlb_flush(va,ctx,ASI_SRMMUFP_L1) argument
817 updatepte4m(vaddr_t va, int *pte, int bic, int bis, int ctx, u_int cpuset) in updatepte4m() argument
840 tlb_flush_page(va, ctx, cpuset); in updatepte4m()
863 setpgt4m_va(vaddr_t va, int *ptep, int pte, int pageflush, int ctx, in setpgt4m_va() argument
868 updatepte4m(va, ptep, 0xffffffff, pte, pageflush ? ctx : 0, cpuset); in setpgt4m_va()
872 tlb_flush_page(va, ctx, 0); in setpgt4m_va()
880 setpte4m(vaddr_t va, int pte) in setpte4m() argument
892 rp = &pm->pm_regmap[VA_VREG(va)]; in setpte4m()
893 sp = &rp->rg_segmap[VA_VSEG(va)]; in setpte4m()
895 tlb_flush_page(va, 0, CPUSET_ALL); in setpte4m()
896 setpgt4m(sp->sg_pte + VA_SUN4M_VPG(va), pte); in setpte4m()
907 vaddr_t va; in pgt_page_alloc() local
915 va = uvm_km_alloc(kernel_map, PAGE_SIZE, 0, UVM_KMF_VAONLY | in pgt_page_alloc()
917 if (va == 0) { in pgt_page_alloc()
933 pmap_kenter_pa(va, pa | (cacheit ? 0 : PMAP_NC), in pgt_page_alloc()
937 return ((void *)va); in pgt_page_alloc()
943 vaddr_t va; in pgt_page_free() local
947 va = (vaddr_t)v; in pgt_page_free()
948 rv = pmap_extract(pmap_kernel(), va, &pa); in pgt_page_free()
951 pmap_kremove(va, PAGE_SIZE); in pgt_page_free()
952 uvm_km_free(kernel_map, va, PAGE_SIZE, UVM_KMF_VAONLY); in pgt_page_free()
1065 vaddr_t va; in pmap_growkernel() local
1097 va = (vaddr_t)sp->sg_pte; in pmap_growkernel()
1101 pmap_kenter_pa(va, VM_PAGE_TO_PHYS(pg), in pmap_growkernel()
1257 u_int va = 0, eva = 0; in mmu_reservemon4_4c() local
1267 prom_vstart = va = OLDMON_STARTVADDR; in mmu_reservemon4_4c()
1273 prom_vstart = va = OPENPROM_STARTVADDR; in mmu_reservemon4_4c()
1279 while (va < eva) { in mmu_reservemon4_4c()
1280 vr = VA_VREG(va); in mmu_reservemon4_4c()
1286 mmureg = getregmap(va); in mmu_reservemon4_4c()
1294 prom_setcontext(i, (void *)va, mmureg); in mmu_reservemon4_4c()
1297 mmuseg = getsegmap(va); in mmu_reservemon4_4c()
1303 prom_setcontext(i, (void *)va, mmuseg); in mmu_reservemon4_4c()
1306 va += NBPSG; in mmu_reservemon4_4c()
1314 rp->rg_segmap[VA_VSEG(va)].sg_pmeg = mmuseg; in mmu_reservemon4_4c()
1315 rp->rg_segmap[VA_VSEG(va)].sg_npte = NPTESG; in mmu_reservemon4_4c()
1316 pte = rp->rg_segmap[VA_VSEG(va)].sg_pte; in mmu_reservemon4_4c()
1319 for (i = NPTESG; --i >= 0; va += NBPG, pte++) { in mmu_reservemon4_4c()
1320 *pte = getpte4(va) | PG_S; in mmu_reservemon4_4c()
1321 setpte4(va, *pte); in mmu_reservemon4_4c()
1604 int i, va, *ptep, pte; in me_alloc() local
1714 va = VSTOVA(me->me_vreg, me->me_vseg); in me_alloc()
1716 if (getsegmap(va) != me->me_cookie) in me_alloc()
1718 getsegmap(va), me->me_cookie); in me_alloc()
1722 va = 0; in me_alloc()
1725 setregmap(va, tregion); in me_alloc()
1726 setsegmap(va, me->me_cookie); in me_alloc()
1741 pte = getpte4(va); in me_alloc()
1748 va += NBPG; in me_alloc()
1753 va = VSTOVA(me->me_vreg,me->me_vseg); in me_alloc()
1755 setsegmap(va, seginval); in me_alloc()
1760 setsegmap(va, seginval); in me_alloc()
1793 int i, va, tpte, ctx; in me_free() local
1816 va = 0; in me_free()
1819 tpte = getpte4(va); in me_free()
1822 va += NBPG; in me_free()
1965 mmu_pagein_reg(struct pmap *pm, struct regmap *rp, vaddr_t va, in mmu_pagein_reg() argument
1970 va = VA_ROUNDDOWNTOREG(va); in mmu_pagein_reg()
1980 setregmap(va, smeg); in mmu_pagein_reg()
1984 setregmap(va, smeg); in mmu_pagein_reg()
1988 setsegmap(va, rp->rg_segmap[i].sg_pmeg); in mmu_pagein_reg()
1989 va += NBPSG; in mmu_pagein_reg()
2024 mmu_pagein_seg(struct pmap *pm, struct segmap *sp, vaddr_t va, in mmu_pagein_seg() argument
2031 va = VA_ROUNDDOWNTOSEG(va); in mmu_pagein_seg()
2035 setsegmap(va, pmeg); in mmu_pagein_seg()
2042 setsegmap(va, pmeg); in mmu_pagein_seg()
2051 setpte4(va, *pte++ & ~PG_MBZ); in mmu_pagein_seg()
2052 va += NBPG; in mmu_pagein_seg()
2065 mmu_pagein(struct pmap *pm, vaddr_t va, int prot) in mmu_pagein() argument
2078 vr = VA_VREG(va); in mmu_pagein()
2079 vs = VA_VSEG(va); in mmu_pagein()
2095 mmu_pagein_reg(pm, rp, va, vr, &region_lru); in mmu_pagein()
2108 return (bits && (getpte4(va) & bits) == bits ? -1 : 0); in mmu_pagein()
2111 mmu_pagein_seg(pm, sp, va, vr, vs, &segm_lru); in mmu_pagein()
2131 vaddr_t va; in ctx_alloc() local
2211 for (va = 0, i = NUREG; --i >= 0; ) { in ctx_alloc()
2212 if (VA_VREG(va) >= gap_start) { in ctx_alloc()
2213 va = VRTOVA(gap_end); in ctx_alloc()
2222 setregmap(va, rp++->rg_smeg); in ctx_alloc()
2223 va += NBPRG; in ctx_alloc()
2227 for (j = NSEGRG; --j >= 0; va += NBPSG) in ctx_alloc()
2228 setsegmap(va, in ctx_alloc()
2365 int va, vr, vs; in pv_changepte4_4c() local
2381 va = pv->pv_va; in pv_changepte4_4c()
2382 vr = VA_VREG(va); in pv_changepte4_4c()
2383 vs = VA_VSEG(va); in pv_changepte4_4c()
2386 ptep = &sp->sg_pte[VA_VPG(va)]; in pv_changepte4_4c()
2396 pte = getpte4(va); in pv_changepte4_4c()
2402 cache_flush_page(va, pm->pm_ctxnum); in pv_changepte4_4c()
2409 va = VA_VPG(va) << PGSHIFT; in pv_changepte4_4c()
2410 pte = getpte4(va); in pv_changepte4_4c()
2415 setpte4(va, pte); in pv_changepte4_4c()
2435 int pte, va, vr, vs, pmeg, flags; in pv_syncflags4_4c() local
2452 va = pv->pv_va; in pv_syncflags4_4c()
2453 vr = VA_VREG(va); in pv_syncflags4_4c()
2454 vs = VA_VSEG(va); in pv_syncflags4_4c()
2462 pte = getpte4(va); in pv_syncflags4_4c()
2464 cache_flush_page(va, pm->pm_ctxnum); in pv_syncflags4_4c()
2471 va = VA_VPG(va) << PGSHIFT; in pv_syncflags4_4c()
2472 pte = getpte4(va); in pv_syncflags4_4c()
2477 setpte4(va, pte); in pv_syncflags4_4c()
2499 pv_unlink4_4c(struct vm_page *pg, struct pmap *pm, vaddr_t va) in pv_unlink4_4c() argument
2509 if (pv0->pv_pmap == pm && pv0->pv_va == va) { in pv_unlink4_4c()
2541 if (npv->pv_pmap == pm && npv->pv_va == va) in pv_unlink4_4c()
2551 va = pv0->pv_va; in pv_unlink4_4c()
2553 if (BADALIAS(va, npv->pv_va) || in pv_unlink4_4c()
2567 pv_link4_4c(struct vm_page *pg, struct pmap *pm, vaddr_t va, in pv_link4_4c() argument
2580 pv0->pv_va = va; in pv_link4_4c()
2615 va, pv->pv_va); in pv_link4_4c()
2618 if (BADALIAS(va, pv->pv_va)) { in pv_link4_4c()
2624 va, pv->pv_va, pg); in pv_link4_4c()
2637 npv->pv_va = va; in pv_link4_4c()
2662 vaddr_t va; in pv_changepte4m() local
2673 va = pv->pv_va; in pv_changepte4m()
2674 rp = &pm->pm_regmap[VA_VREG(va)]; in pv_changepte4m()
2675 sp = &rp->rg_segmap[VA_VSEG(va)]; in pv_changepte4m()
2683 cache_flush_page(va, pm->pm_ctxnum); in pv_changepte4m()
2686 KASSERT((sp->sg_pte[VA_SUN4M_VPG(va)] & SRMMU_TETYPE) == in pv_changepte4m()
2688 VM_MDPAGE_PVHEAD(pg)->pv_flags |= MR4M(updatepte4m(va, in pv_changepte4m()
2689 &sp->sg_pte[VA_SUN4M_VPG(va)], bic, bis, pm->pm_ctxnum, in pv_changepte4m()
2705 int va, flags; in pv_syncflags4m() local
2723 va = pv->pv_va; in pv_syncflags4m()
2724 rp = &pm->pm_regmap[VA_VREG(va)]; in pv_syncflags4m()
2725 sp = &rp->rg_segmap[VA_VSEG(va)]; in pv_syncflags4m()
2727 tpte = sp->sg_pte[VA_SUN4M_VPG(va)]; in pv_syncflags4m()
2735 cache_flush_page(va, pm->pm_ctxnum); in pv_syncflags4m()
2737 flags |= MR4M(updatepte4m(va, in pv_syncflags4m()
2738 &sp->sg_pte[VA_SUN4M_VPG(va)], in pv_syncflags4m()
2755 pv_unlink4m(struct vm_page *pg, struct pmap *pm, vaddr_t va) in pv_unlink4m() argument
2765 if (pv0->pv_pmap == pm && pv0->pv_va == va) { in pv_unlink4m()
2799 if (npv->pv_pmap == pm && npv->pv_va == va) in pv_unlink4m()
2811 va = pv0->pv_va; in pv_unlink4m()
2813 if (BADALIAS(va, npv->pv_va) || in pv_unlink4m()
2821 va, pg); in pv_unlink4m()
2834 pv_link4m(struct vm_page *pg, struct pmap *pm, vaddr_t va, in pv_link4m() argument
2848 pv0->pv_va = va; in pv_link4m()
2884 va, pv->pv_va); in pv_link4m()
2887 if (BADALIAS(va, pv->pv_va)) { in pv_link4m()
2893 va, pv->pv_va, pg); in pv_link4m()
2907 npv->pv_va = va; in pv_link4m()
3097 vaddr_t va; in pmap_bootstrap4_4c() local
3414 for (va = p; in pmap_bootstrap4_4c()
3415 va < (OPENPROM_STARTVADDR & ~(NBPRG - 1)); in pmap_bootstrap4_4c()
3416 va += NBPRG) in pmap_bootstrap4_4c()
3417 setregmap(va, reginval); in pmap_bootstrap4_4c()
3428 for (va = p; in pmap_bootstrap4_4c()
3429 va < (OPENPROM_STARTVADDR & ~(NBPSG - 1)); in pmap_bootstrap4_4c()
3430 va += NBPSG) in pmap_bootstrap4_4c()
3431 setsegmap(va, seginval); in pmap_bootstrap4_4c()
3540 vaddr_t va; in pmap_bootstrap4m() local
3869 va = (vaddr_t)pagetables_start; in pmap_bootstrap4m()
3871 cache_flush_page(va, 0); in pmap_bootstrap4m()
3872 va += NBPG; in pmap_bootstrap4m()
3909 for (off = 0, va = cpuinfo_va; in pmap_bootstrap4m()
3911 va += NBPG, off += NBPG) { in pmap_bootstrap4m()
3915 pmap_kremove(va, NBPG); in pmap_bootstrap4m()
3916 pmap_kenter_pa(va, pa, in pmap_bootstrap4m()
3930 for (va = cpus[i]->ci_free_sva1; in pmap_bootstrap4m()
3931 va < cpus[i]->ci_free_eva1; in pmap_bootstrap4m()
3932 va += NBPG) in pmap_bootstrap4m()
3933 setpte4m(va, 0); in pmap_bootstrap4m()
3938 for (va = cpus[i]->ci_free_sva2; in pmap_bootstrap4m()
3939 va < cpus[i]->ci_free_eva2; in pmap_bootstrap4m()
3940 va += NBPG) in pmap_bootstrap4m()
3941 setpte4m(va, 0); in pmap_bootstrap4m()
4015 vaddr_t va; in pmap_alloc_cpu() local
4048 va = uvm_km_alloc(kernel_map, size, 0, UVM_KMF_VAONLY); in pmap_alloc_cpu()
4049 if (va == 0) in pmap_alloc_cpu()
4055 ctxtable = (u_int *)va; in pmap_alloc_cpu()
4056 regtable = (u_int *)(va + ctxsize); in pmap_alloc_cpu()
4067 pmap_kenter_pa(va, pa | (cachebit ? 0 : PMAP_NC), in pmap_alloc_cpu()
4069 va += pagesz; in pmap_alloc_cpu()
4182 pmap_map(vaddr_t va, paddr_t pa, paddr_t endpa, int prot) in pmap_map() argument
4187 pmap_kenter_pa(va, pa, prot, 0); in pmap_map()
4188 va += pgsize; in pmap_map()
4192 return (va); in pmap_map()
4273 vaddr_t va = VSTOVA(vr,vs); in pmap_quiet_check() local
4274 int pmeg = getsegmap(va); in pmap_quiet_check()
4278 pm, vr, vs, (u_int)va, pmeg); in pmap_quiet_check()
4490 vaddr_t va, tva; in pgt_lvl23_remove4_4c() local
4493 va = VSTOVA(vr,vs); in pgt_lvl23_remove4_4c()
4497 setsegmap(va, seginval); in pgt_lvl23_remove4_4c()
4512 setsegmap(va, seginval); in pgt_lvl23_remove4_4c()
4536 setregmap(va, reginval); in pgt_lvl23_remove4_4c()
4540 setregmap(va, reginval); in pgt_lvl23_remove4_4c()
4631 pmap_remove(struct pmap *pm, vaddr_t va, vaddr_t endva) in pmap_remove() argument
4640 cpu_number(), pm, va, endva); in pmap_remove()
4661 for (; va < endva; va = nva) { in pmap_remove()
4663 vr = VA_VREG(va); in pmap_remove()
4664 vs = VA_VSEG(va); in pmap_remove()
4669 (*rm)(pm, va, nva, vr, vs); in pmap_remove()
4692 pmap_rmk4_4c(struct pmap *pm, vaddr_t va, vaddr_t endva, int vr, int vs) in pmap_rmk4_4c() argument
4709 ptep = &sp->sg_pte[VA_VPG(va)]; in pmap_rmk4_4c()
4712 npg = (endva - va) >> PGSHIFT; in pmap_rmk4_4c()
4724 for (; va < endva; va += NBPG, ptep++) { in pmap_rmk4_4c()
4726 mmupte = inmmu ? getpte4(va) : 0; in pmap_rmk4_4c()
4730 printf("rmk: inconsistent ptes va=%lx\n", va); in pmap_rmk4_4c()
4737 cache_flush_page(va, 0); in pmap_rmk4_4c()
4741 pv_unlink4_4c(pg, pm, va); in pmap_rmk4_4c()
4748 "va 0x%lx; endva 0x%lx", va, endva); in pmap_rmk4_4c()
4756 setpte4(va, 0); in pmap_rmk4_4c()
4764 pm, va, nleft, sp->sg_nwired); in pmap_rmk4_4c()
4781 pmap_rmk4m(struct pmap *pm, vaddr_t va, vaddr_t endva, int vr, int vs) in pmap_rmk4m() argument
4794 npg = (endva - va) >> PGSHIFT; in pmap_rmk4m()
4804 while (va < endva) { in pmap_rmk4m()
4805 tpte = sp->sg_pte[VA_SUN4M_VPG(va)]; in pmap_rmk4m()
4809 (getpte4m(va) & SRMMU_TETYPE) == SRMMU_TEPTE) in pmap_rmk4m()
4811 va); in pmap_rmk4m()
4813 va += NBPG; in pmap_rmk4m()
4819 cache_flush_page(va, 0); in pmap_rmk4m()
4822 pv_unlink4m(pg, pm, va); in pmap_rmk4m()
4825 setpgt4m_va(va, &sp->sg_pte[VA_SUN4M_VPG(va)], in pmap_rmk4m()
4828 va += NBPG; in pmap_rmk4m()
4837 pmap_rmu4_4c(struct pmap *pm, vaddr_t va, vaddr_t endva, int vr, int vs) in pmap_rmu4_4c() argument
4863 npg = (endva - va) >> PGSHIFT; in pmap_rmu4_4c()
4872 pteva = va; in pmap_rmu4_4c()
4880 pteva = VA_VPG(va) << PGSHIFT; in pmap_rmu4_4c()
4884 ptep = sp->sg_pte + VA_VPG(va); in pmap_rmu4_4c()
4885 for (; va < endva; ptep++, pteva += NBPG, va += NBPG) { in pmap_rmu4_4c()
4901 cache_flush_page(va, pm->pm_ctxnum); in pmap_rmu4_4c()
4905 pv_unlink4_4c(pg, pm, va); in pmap_rmu4_4c()
4912 "va 0x%lx; endva 0x%lx", va, endva); in pmap_rmu4_4c()
4928 pm, va, nleft, sp->sg_nwired); in pmap_rmu4_4c()
4944 pmap_rmu4m(struct pmap *pm, vaddr_t va, vaddr_t endva, int vr, int vs) in pmap_rmu4m() argument
4966 npg = (endva - va) >> PGSHIFT; in pmap_rmu4m()
4978 for (; va < endva; va += NBPG) { in pmap_rmu4m()
4981 tpte = pte0[VA_SUN4M_VPG(va)]; in pmap_rmu4m()
4987 (getpte4m(va) & SRMMU_TEPTE) == SRMMU_TEPTE) in pmap_rmu4m()
4989 va); in pmap_rmu4m()
4997 cache_flush_page(va, pm->pm_ctxnum); in pmap_rmu4m()
5000 pv_unlink4m(pg, pm, va); in pmap_rmu4m()
5007 "va 0x%lx; endva 0x%lx", va, endva); in pmap_rmu4m()
5009 setpgt4m_va(va, &pte0[VA_SUN4M_VPG(va)], SRMMU_TEINVALID, in pmap_rmu4m()
5012 if (sp->sg_wiremap & (1 << VA_SUN4M_VPG(va))) { in pmap_rmu4m()
5013 sp->sg_wiremap &= ~(1 << VA_SUN4M_VPG(va)); in pmap_rmu4m()
5042 vaddr_t va; in pmap_page_protect4_4c() local
5086 va = pv->pv_va; in pmap_page_protect4_4c()
5087 vr = VA_VREG(va); in pmap_page_protect4_4c()
5088 vs = VA_VSEG(va); in pmap_page_protect4_4c()
5094 ptep = &sp->sg_pte[VA_VPG(va)]; in pmap_page_protect4_4c()
5105 pteva = va; in pmap_page_protect4_4c()
5106 cache_flush_page(va, pm->pm_ctxnum); in pmap_page_protect4_4c()
5113 pteva = VA_VPG(va) << PGSHIFT; in pmap_page_protect4_4c()
5121 pg, pm->pm_ctxnum, va, pte); in pmap_page_protect4_4c()
5129 pm, va, nleft, sp->sg_nwired); in pmap_page_protect4_4c()
5165 int va, nva, vr, vs; in pmap_protect4_4c() local
5179 for (va = sva; va < eva;) { in pmap_protect4_4c()
5180 vr = VA_VREG(va); in pmap_protect4_4c()
5181 vs = VA_VSEG(va); in pmap_protect4_4c()
5187 va = nva; in pmap_protect4_4c()
5196 va = nva; in pmap_protect4_4c()
5204 int *ptep = &sp->sg_pte[VA_VPG(va)]; in pmap_protect4_4c()
5207 for (; va < nva; va += NBPG) in pmap_protect4_4c()
5220 (nva - va) >> PGSHIFT; in pmap_protect4_4c()
5222 for (; va < nva; va += NBPG) { in pmap_protect4_4c()
5223 pte = getpte4(va); in pmap_protect4_4c()
5227 cache_flush_page(va, pm->pm_ctxnum); in pmap_protect4_4c()
5228 setpte4(va, pte & ~PG_W); in pmap_protect4_4c()
5243 pteva = VA_VPG(va) << PGSHIFT; in pmap_protect4_4c()
5244 for (; va < nva; pteva += NBPG, va += NBPG) in pmap_protect4_4c()
5260 pmap_changeprot4_4c(struct pmap *pm, vaddr_t va, vm_prot_t prot, int flags) in pmap_changeprot4_4c() argument
5270 pm, va, prot, flags); in pmap_changeprot4_4c()
5277 vr = VA_VREG(va); in pmap_changeprot4_4c()
5278 vs = VA_VSEG(va); in pmap_changeprot4_4c()
5281 ptep = &sp->sg_pte[VA_VPG(va)]; in pmap_changeprot4_4c()
5310 pte = getpte4(va); in pmap_changeprot4_4c()
5312 cache_flush_page(va, pm->pm_ctxnum); in pmap_changeprot4_4c()
5319 va = VA_VPG(va) << PGSHIFT; in pmap_changeprot4_4c()
5320 pte = getpte4(va); in pmap_changeprot4_4c()
5323 setpte4(va, pte); in pmap_changeprot4_4c()
5328 pm, va, sp->sg_npte, sp->sg_nwired); in pmap_changeprot4_4c()
5353 vaddr_t va; in pmap_page_protect4m() local
5387 va = pv->pv_va; in pmap_page_protect4m()
5388 vr = VA_VREG(va); in pmap_page_protect4m()
5389 vs = VA_VSEG(va); in pmap_page_protect4m()
5406 cache_flush_page(va, pm->pm_ctxnum); in pmap_page_protect4m()
5409 tpte = sp->sg_pte[VA_SUN4M_VPG(va)]; in pmap_page_protect4m()
5410 setpgt4m_va(va, &sp->sg_pte[VA_SUN4M_VPG(va)], SRMMU_TEINVALID, in pmap_page_protect4m()
5414 if (sp->sg_wiremap & (1 << VA_SUN4M_VPG(va))) { in pmap_page_protect4m()
5415 sp->sg_wiremap &= ~(1 << VA_SUN4M_VPG(va)); in pmap_page_protect4m()
5420 panic("pmap_page_protect !PG_V: pg %p va %lx", pg, va); in pmap_page_protect4m()
5453 vaddr_t va, nva; in pmap_protect4m() local
5478 for (va = sva; va < eva;) { in pmap_protect4m()
5479 vr = VA_VREG(va); in pmap_protect4m()
5480 vs = VA_VSEG(va); in pmap_protect4m()
5486 va = nva; in pmap_protect4m()
5491 va = nva; in pmap_protect4m()
5498 pmap_stats.ps_npg_prot_all += (nva - va) >> PGSHIFT; in pmap_protect4m()
5499 for (; va < nva; va += NBPG) { in pmap_protect4m()
5502 tpte = sp->sg_pte[VA_SUN4M_VPG(va)]; in pmap_protect4m()
5518 cache_flush_page(va, pm->pm_ctxnum); in pmap_protect4m()
5520 updatepte4m(va, &sp->sg_pte[VA_SUN4M_VPG(va)], in pmap_protect4m()
5535 pmap_changeprot4m(struct pmap *pm, vaddr_t va, vm_prot_t prot, int flags) in pmap_changeprot4m() argument
5545 cpu_number(), pm, va, prot, flags); in pmap_changeprot4m()
5552 rp = &pm->pm_regmap[VA_VREG(va)]; in pmap_changeprot4m()
5553 sp = &rp->rg_segmap[VA_VSEG(va)]; in pmap_changeprot4m()
5555 pte = sp->sg_pte[VA_SUN4M_VPG(va)]; in pmap_changeprot4m()
5556 owired = sp->sg_wiremap & (1 << VA_SUN4M_VPG(va)); in pmap_changeprot4m()
5560 sp->sg_wiremap &= ~(1 << VA_SUN4M_VPG(va)); in pmap_changeprot4m()
5564 sp->sg_wiremap |= (1 << VA_SUN4M_VPG(va)); in pmap_changeprot4m()
5576 cache_flush_page(va, pm->pm_ctxnum); in pmap_changeprot4m()
5579 setpgt4m_va(va, &sp->sg_pte[VA_SUN4M_VPG(va)], in pmap_changeprot4m()
5602 pmap_enter4_4c(struct pmap *pm, vaddr_t va, paddr_t pa, in pmap_enter4_4c() argument
5609 if (VA_INHOLE(va)) { in pmap_enter4_4c()
5612 pm, va, pa); in pmap_enter4_4c()
5620 pm, va, pa, prot, flags); in pmap_enter4_4c()
5647 error = pmap_enk4_4c(pm, va, prot, flags, pg, pteproto | PG_S); in pmap_enter4_4c()
5649 error = pmap_enu4_4c(pm, va, prot, flags, pg, pteproto); in pmap_enter4_4c()
5656 pmap_enk4_4c(struct pmap *pm, vaddr_t va, vm_prot_t prot, int flags, in pmap_enk4_4c() argument
5665 vr = VA_VREG(va); in pmap_enk4_4c()
5666 vs = VA_VSEG(va); in pmap_enk4_4c()
5669 ptep = &sp->sg_pte[VA_VPG(va)]; in pmap_enk4_4c()
5674 mmu_pagein_reg(pm, rp, va, vr, &region_locked); in pmap_enk4_4c()
5684 pmap_changeprot4_4c(pm, va, prot, flags); in pmap_enk4_4c()
5698 pv_unlink4_4c(opg, pm, va); in pmap_enk4_4c()
5701 cache_flush_page(va, 0); in pmap_enk4_4c()
5706 setpte4(va, 0); in pmap_enk4_4c()
5720 pm, va, i); in pmap_enk4_4c()
5730 if (pg != NULL && (error = pv_link4_4c(pg, pm, va, &pteproto)) != 0) { in pmap_enk4_4c()
5749 pm, va, sp->sg_npte, sp->sg_nwired); in pmap_enk4_4c()
5752 mmu_pagein_seg(pm, sp, va, vr, vs, in pmap_enk4_4c()
5758 setpte4(va, pteproto & ~PG_MBZ); in pmap_enk4_4c()
5766 pmap_enu4_4c(struct pmap *pm, vaddr_t va, vm_prot_t prot, int flags, in pmap_enu4_4c() argument
5776 vr = VA_VREG(va); in pmap_enu4_4c()
5777 vs = VA_VSEG(va); in pmap_enu4_4c()
5855 pte = ptep[VA_VPG(va)]; in pmap_enu4_4c()
5861 pmap_changeprot4_4c(pm, va, prot, flags); in pmap_enu4_4c()
5873 curproc->p_comm, curproc->p_pid, va); in pmap_enu4_4c()
5878 pv_unlink4_4c(opg, pm, va); in pmap_enu4_4c()
5891 cache_flush_page(va, pm->pm_ctxnum); in pmap_enu4_4c()
5899 ptep[VA_VPG(va)] = 0; in pmap_enu4_4c()
5901 setpte4(va, 0); in pmap_enu4_4c()
5908 if (pg != NULL && (error = pv_link4_4c(pg, pm, va, &pteproto)) != 0) { in pmap_enu4_4c()
5919 ptep += VA_VPG(va); in pmap_enu4_4c()
5930 pm, va, sp->sg_npte, sp->sg_nwired); in pmap_enu4_4c()
5942 va = VA_VPG(va) << PGSHIFT; in pmap_enu4_4c()
5944 setpte4(va, pteproto & ~PG_MBZ); in pmap_enu4_4c()
5953 pmap_kenter_pa4_4c(vaddr_t va, paddr_t pa, vm_prot_t prot, u_int flags) in pmap_kenter_pa4_4c() argument
5968 vr = VA_VREG(va); in pmap_kenter_pa4_4c()
5969 vs = VA_VSEG(va); in pmap_kenter_pa4_4c()
5972 ptep = &sp->sg_pte[VA_VPG(va)]; in pmap_kenter_pa4_4c()
5984 mmu_pagein_reg(pm, rp, va, vr, &region_locked); in pmap_kenter_pa4_4c()
5993 pm, va, i); in pmap_kenter_pa4_4c()
6005 pm, va, sp->sg_npte, sp->sg_nwired); in pmap_kenter_pa4_4c()
6009 mmu_pagein_seg(pm, sp, va, vr, vs, in pmap_kenter_pa4_4c()
6015 setpte4(va, pteproto & ~PG_MBZ); in pmap_kenter_pa4_4c()
6026 vaddr_t va, eva; in pmap_lockmmu() local
6035 va = VA_ROUNDDOWNTOSEG(sva); in pmap_lockmmu()
6037 for (; va < eva; va += NBPSG) { in pmap_lockmmu()
6038 vr = VA_VREG(va); in pmap_lockmmu()
6039 vs = VA_VSEG(va); in pmap_lockmmu()
6046 mmu_pagein_seg(pm, sp, va, vr, vs, &segm_locked); in pmap_lockmmu()
6054 pmap_kremove4_4c(vaddr_t va, vsize_t len) in pmap_kremove4_4c() argument
6064 endva = va + len; in pmap_kremove4_4c()
6067 printf("pmap_kremove(0x%lx, 0x%lx)\n", va, endva); in pmap_kremove4_4c()
6076 for (; va < endva; va = nva) { in pmap_kremove4_4c()
6078 vr = VA_VREG(va); in pmap_kremove4_4c()
6079 vs = VA_VSEG(va); in pmap_kremove4_4c()
6094 ptep = &sp->sg_pte[VA_VPG(va)]; in pmap_kremove4_4c()
6097 npg = (nva - va) >> PGSHIFT; in pmap_kremove4_4c()
6112 for (; va < nva; va += NBPG, ptep++) { in pmap_kremove4_4c()
6114 mmupte = inmmu ? getpte4(va) : 0; in pmap_kremove4_4c()
6118 printf("rmk: inconsistent ptes va=%lx\n", va); in pmap_kremove4_4c()
6125 cache_flush_page(va, 0); in pmap_kremove4_4c()
6131 "va 0x%lx; endva 0x%lx", va, endva); in pmap_kremove4_4c()
6137 setpte4(va, 0); in pmap_kremove4_4c()
6144 pm, va, nleft, sp->sg_nwired); in pmap_kremove4_4c()
6163 pmap_kprotect4_4c(vaddr_t va, vsize_t size, vm_prot_t prot) in pmap_kprotect4_4c() argument
6173 pte = getpte4(va); in pmap_kprotect4_4c()
6180 cache_flush_page(va, 0); in pmap_kprotect4_4c()
6183 setpte4(va, pte); in pmap_kprotect4_4c()
6185 va += NBPG; in pmap_kprotect4_4c()
6207 pmap_enter4m(struct pmap *pm, vaddr_t va, paddr_t pa, in pmap_enter4m() argument
6220 pm, va, pa, prot, flags); in pmap_enter4m()
6256 error = pmap_enk4m(pm, va, prot, flags, pg, pteproto | PPROT_S); in pmap_enter4m()
6258 error = pmap_enu4m(pm, va, prot, flags, pg, pteproto); in pmap_enter4m()
6265 pmap_enk4m(struct pmap *pm, vaddr_t va, vm_prot_t prot, int flags, in pmap_enk4m() argument
6274 if (va < KERNBASE) in pmap_enk4m()
6275 panic("pmap_enk4m: can't enter va 0x%lx below KERNBASE", va); in pmap_enk4m()
6277 vr = VA_VREG(va); in pmap_enk4m()
6278 vs = VA_VSEG(va); in pmap_enk4m()
6287 panic("pmap_enk4m: missing kernel region table for va 0x%lx",va); in pmap_enk4m()
6289 tpte = sp->sg_pte[VA_SUN4M_VPG(va)]; in pmap_enk4m()
6296 pmap_changeprot4m(pm, va, prot, flags); in pmap_enk4m()
6305 "oldpte 0x%x\n", va, pteproto, tpte); in pmap_enk4m()
6313 pv_unlink4m(opg, pm, va); in pmap_enk4m()
6315 cache_flush_page(va, 0); in pmap_enk4m()
6324 setpgt4m_va(va, &sp->sg_pte[VA_SUN4M_VPG(va)], in pmap_enk4m()
6333 if (pg != NULL && (error = pv_link4m(pg, pm, va, &pteproto)) != 0) { in pmap_enk4m()
6339 setpgt4m(&sp->sg_pte[VA_SUN4M_VPG(va)], pteproto); in pmap_enk4m()
6350 pmap_enu4m(struct pmap *pm, vaddr_t va, vm_prot_t prot, int flags, in pmap_enu4m() argument
6360 if (KERNBASE < va) in pmap_enu4m()
6361 panic("pmap_enu4m: can't enter va 0x%lx above KERNBASE", va); in pmap_enu4m()
6366 vr = VA_VREG(va); in pmap_enu4m()
6367 vs = VA_VSEG(va); in pmap_enu4m()
6464 tpte = pte[VA_SUN4M_VPG(va)]; in pmap_enu4m()
6473 pmap_changeprot4m(pm, va, prot, flags); in pmap_enu4m()
6487 (int)va, tpte, pteproto); in pmap_enu4m()
6494 pv_unlink4m(opg, pm, va); in pmap_enu4m()
6497 cache_flush_page(va, pm->pm_ctxnum); in pmap_enu4m()
6506 setpgt4m_va(va, &sp->sg_pte[VA_SUN4M_VPG(va)], in pmap_enu4m()
6510 owired = sp->sg_wiremap & (1 << VA_SUN4M_VPG(va)); in pmap_enu4m()
6517 if (pg != NULL && (error = pv_link4m(pg, pm, va, &pteproto)) != 0) { in pmap_enu4m()
6530 setpgt4m(&sp->sg_pte[VA_SUN4M_VPG(va)], pteproto); in pmap_enu4m()
6534 sp->sg_wiremap &= ~(1 << VA_SUN4M_VPG(va)); in pmap_enu4m()
6538 sp->sg_wiremap |= (1 << VA_SUN4M_VPG(va)); in pmap_enu4m()
6548 pmap_kenter_pa4m(vaddr_t va, paddr_t pa, vm_prot_t prot, u_int flags) in pmap_kenter_pa4m() argument
6562 vr = VA_VREG(va); in pmap_kenter_pa4m()
6563 vs = VA_VSEG(va); in pmap_kenter_pa4m()
6567 KASSERT((sp->sg_pte[VA_SUN4M_VPG(va)] & SRMMU_TETYPE) != SRMMU_TEPTE); in pmap_kenter_pa4m()
6569 setpgt4m(&sp->sg_pte[VA_SUN4M_VPG(va)], pteproto); in pmap_kenter_pa4m()
6573 pmap_kremove4m(vaddr_t va, vsize_t len) in pmap_kremove4m() argument
6589 endva = va + len; in pmap_kremove4m()
6590 for (; va < endva; va = nva) { in pmap_kremove4m()
6592 vr = VA_VREG(va); in pmap_kremove4m()
6593 vs = VA_VSEG(va); in pmap_kremove4m()
6603 npg = (nva - va) >> PGSHIFT; in pmap_kremove4m()
6617 for (; va < nva; va += NBPG) { in pmap_kremove4m()
6618 tpte = sp->sg_pte[VA_SUN4M_VPG(va)]; in pmap_kremove4m()
6625 cache_flush_page(va, 0); in pmap_kremove4m()
6627 setpgt4m_va(va, &sp->sg_pte[VA_SUN4M_VPG(va)], in pmap_kremove4m()
6639 pmap_kprotect4m(vaddr_t va, vsize_t size, vm_prot_t prot) in pmap_kprotect4m() argument
6657 rp = &pm->pm_regmap[VA_VREG(va)]; in pmap_kprotect4m()
6658 sp = &rp->rg_segmap[VA_VSEG(va)]; in pmap_kprotect4m()
6659 pte = sp->sg_pte[VA_SUN4M_VPG(va)]; in pmap_kprotect4m()
6667 cache_flush_page(va, 0); in pmap_kprotect4m()
6669 setpgt4m_va(va, &sp->sg_pte[VA_SUN4M_VPG(va)], in pmap_kprotect4m()
6673 va += NBPG; in pmap_kprotect4m()
6686 pmap_unwire(struct pmap *pm, vaddr_t va) in pmap_unwire() argument
6694 vr = VA_VREG(va); in pmap_unwire()
6695 vs = VA_VSEG(va); in pmap_unwire()
6701 ptep = &sp->sg_pte[VA_VPG(va)]; in pmap_unwire()
6706 owired = sp->sg_wiremap & (1 << VA_SUN4M_VPG(va)); in pmap_unwire()
6707 sp->sg_wiremap &= ~(1 << VA_SUN4M_VPG(va)); in pmap_unwire()
6721 pm, va, sp->sg_npte, sp->sg_nwired); in pmap_unwire()
6738 pmap_extract4_4c(struct pmap *pm, vaddr_t va, paddr_t *pap) in pmap_extract4_4c() argument
6745 vr = VA_VREG(va); in pmap_extract4_4c()
6746 vs = VA_VSEG(va); in pmap_extract4_4c()
6764 pte = ptep[VA_VPG(va)]; in pmap_extract4_4c()
6775 *pap = (pte << PGSHIFT) | (va & PGOFSET); in pmap_extract4_4c()
6787 pmap_extract4m(struct pmap *pm, vaddr_t va, paddr_t *pap) in pmap_extract4m() argument
6795 vr = VA_VREG(va); in pmap_extract4m()
6796 vs = VA_VSEG(va); in pmap_extract4m()
6825 pte = sp->sg_pte[VA_SUN4M_VPG(va)]; in pmap_extract4m()
6839 pte = sp->sg_pte[VA_SUN4M_VPG(va)]; in pmap_extract4m()
6852 VA_OFF(va); in pmap_extract4m()
7057 void *va; in pmap_zero_page4_4c() local
7070 va = cpuinfo.vpage[0]; in pmap_zero_page4_4c()
7071 setpte4(va, pte); in pmap_zero_page4_4c()
7072 qzero(va, NBPG); in pmap_zero_page4_4c()
7073 setpte4(va, 0); in pmap_zero_page4_4c()
7127 void *va; in pmap_zero_page4m() local
7149 va = cpuinfo.vpage[0]; in pmap_zero_page4m()
7151 qzero(va, NBPG); in pmap_zero_page4m()
7156 sp_tlb_flush((int)va, 0, ASI_SRMMUFP_L3); in pmap_zero_page4m()
7193 void *va; in pmap_zero_page_hypersparc() local
7216 va = cpuinfo.vpage[0]; in pmap_zero_page_hypersparc()
7219 sta((char *)va + offset, ASI_BLOCKFILL, 0); in pmap_zero_page_hypersparc()
7222 sp_tlb_flush((int)va, 0, ASI_SRMMUFP_L3); in pmap_zero_page_hypersparc()
7361 kvm_uncache(char *va, int npages) in kvm_uncache() argument
7368 for (; --npages >= 0; va = (char *)va + NBPG) { in kvm_uncache()
7369 pte = getpte4m((vaddr_t) va); in kvm_uncache()
7378 cache_flush_page((vaddr_t)va, 0); in kvm_uncache()
7382 setpte4m((vaddr_t)va, pte); in kvm_uncache()
7387 for (; --npages >= 0; va += NBPG) { in kvm_uncache()
7388 pte = getpte4(va); in kvm_uncache()
7397 cache_flush_page((vaddr_t)va, 0); in kvm_uncache()
7400 setpte4(va, pte); in kvm_uncache()
7414 kvm_iocache(char *va, int npages)
7426 for (; --npages >= 0; va += NBPG) {
7427 int pte = getpte4(va);
7431 setpte4(va, pte);
7445 vaddr_t va = *vap; in pmap_prefer() local
7452 if (VA_INHOLE(va)) { in pmap_prefer()
7454 va = MMU_HOLE_START - size; in pmap_prefer()
7456 va = MMU_HOLE_END; in pmap_prefer()
7459 va = (va & ~(m - 1)) | (foff & (m - 1)); in pmap_prefer()
7462 if (va > *vap) in pmap_prefer()
7463 va -= m; in pmap_prefer()
7465 if (va < *vap) in pmap_prefer()
7466 va += m; in pmap_prefer()
7468 *vap = va; in pmap_prefer()
7816 int va = 0; in pmap_dumpmmu() local
7818 setsegmap(va, pmeg); in pmap_dumpmmu()
7821 int pte = getpte4(va); in pmap_dumpmmu()
7823 va += NBPG; in pmap_dumpmmu()
7843 vaddr_t va; in pmap_writetext() local
7846 va = (unsigned long)dst & (~PGOFSET); in pmap_writetext()
7854 pte0 = getpte4m(va); in pmap_writetext()
7860 setpte4m(va, pte); in pmap_writetext()
7862 setpte4m(va, pte0); in pmap_writetext()
7868 pte0 = getpte4(va); in pmap_writetext()
7874 setpte4(va, pte); in pmap_writetext()
7876 setpte4(va, pte0); in pmap_writetext()