1 1.37 ad /* $NetBSD: pmap.h,v 1.37 2020/03/14 14:05:43 ad Exp $ */ 2 1.1 itojun 3 1.23 uch /*- 4 1.23 uch * Copyright (c) 2002 The NetBSD Foundation, Inc. 5 1.1 itojun * All rights reserved. 6 1.1 itojun * 7 1.23 uch * This code is derived from software contributed to The NetBSD Foundation 8 1.23 uch * by UCHIYAMA Yasushi. 9 1.23 uch * 10 1.1 itojun * Redistribution and use in source and binary forms, with or without 11 1.1 itojun * modification, are permitted provided that the following conditions 12 1.1 itojun * are met: 13 1.1 itojun * 1. Redistributions of source code must retain the above copyright 14 1.1 itojun * notice, this list of conditions and the following disclaimer. 15 1.1 itojun * 2. Redistributions in binary form must reproduce the above copyright 16 1.1 itojun * notice, this list of conditions and the following disclaimer in the 17 1.1 itojun * documentation and/or other materials provided with the distribution. 18 1.23 uch * 19 1.23 uch * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 20 1.23 uch * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 21 1.23 uch * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22 1.23 uch * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 23 1.23 uch * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24 1.23 uch * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25 1.23 uch * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26 1.23 uch * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27 1.23 uch * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28 1.23 uch * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29 1.23 uch * POSSIBILITY OF SUCH DAMAGE. 30 1.1 itojun */ 31 1.1 itojun 32 1.1 itojun /* 33 1.23 uch * NetBSD/sh3 pmap: 34 1.23 uch * pmap.pm_ptp[512] ... 512 slot of page table page 35 1.23 uch * page table page contains 1024 PTEs. (PAGE_SIZE / sizeof(pt_entry_t)) 36 1.31 uwe * va -> [ PTP 10bit | PTOFSET 10bit | PGOFSET 12bit ] 37 1.2 tsubai */ 38 1.2 tsubai 39 1.2 tsubai #ifndef _SH3_PMAP_H_ 40 1.22 uch #define _SH3_PMAP_H_ 41 1.23 uch #include <sys/queue.h> 42 1.19 uch #include <sh3/pte.h> 43 1.2 tsubai 44 1.23 uch #define PMAP_NEED_PROCWR 45 1.23 uch #define PMAP_STEAL_MEMORY 46 1.23 uch #define PMAP_GROWKERNEL 47 1.23 uch 48 1.23 uch #define __PMAP_PTP_N 512 /* # of page table page maps 2GB. */ 49 1.33 pooka struct pmap { 50 1.23 uch pt_entry_t **pm_ptp; 51 1.23 uch int pm_asid; 52 1.23 uch int pm_refcnt; 53 1.23 uch struct pmap_statistics pm_stats; /* pmap statistics */ 54 1.33 pooka }; 55 1.23 uch 56 1.23 uch void pmap_bootstrap(void); 57 1.23 uch void pmap_procwr(struct proc *, vaddr_t, size_t); 58 1.23 uch #define pmap_update(pmap) ((void)0) 59 1.23 uch #define pmap_copy(dp,sp,d,l,s) ((void)0) 60 1.23 uch #define pmap_wired_count(pmap) ((pmap)->pm_stats.wired_count) 61 1.1 itojun #define pmap_resident_count(pmap) ((pmap)->pm_stats.resident_count) 62 1.24 chs 63 1.28 uwe /* ARGSUSED */ 64 1.37 ad static __inline bool 65 1.25 chs pmap_remove_all(struct pmap *pmap) 66 1.24 chs { 67 1.24 chs /* Nothing. */ 68 1.37 ad return false; 69 1.24 chs } 70 1.2 tsubai 71 1.29 tsutsui /* 72 1.29 tsutsui * pmap_prefer() helps to avoid virtual cache aliases on SH4 CPUs 73 1.29 tsutsui * which have the virtually-indexed cache. 74 1.29 tsutsui */ 75 1.29 tsutsui #ifdef SH4 76 1.36 christos #define PMAP_PREFER(pa, va, sz, td) pmap_prefer((pa), (va), (td)) 77 1.36 christos void pmap_prefer(vaddr_t, vaddr_t *, int); 78 1.29 tsutsui #endif /* SH4 */ 79 1.29 tsutsui 80 1.23 uch #define PMAP_MAP_POOLPAGE(pa) SH3_PHYS_TO_P1SEG((pa)) 81 1.23 uch #define PMAP_UNMAP_POOLPAGE(va) SH3_P1SEG_TO_PHYS((va)) 82 1.2 tsubai 83 1.23 uch /* MD pmap utils. */ 84 1.23 uch pt_entry_t *__pmap_pte_lookup(pmap_t, vaddr_t); 85 1.23 uch pt_entry_t *__pmap_kpte_lookup(vaddr_t); 86 1.30 thorpej bool __pmap_pte_load(pmap_t, vaddr_t, int); 87 1.35 uebayasi 88 1.35 uebayasi /* pmap-specific data store in the vm_page structure. */ 89 1.35 uebayasi #define __HAVE_VM_PAGE_MD 90 1.35 uebayasi #define PVH_REFERENCED 1 91 1.35 uebayasi #define PVH_MODIFIED 2 92 1.35 uebayasi 93 1.35 uebayasi struct pv_entry; 94 1.35 uebayasi struct vm_page_md { 95 1.35 uebayasi SLIST_HEAD(, pv_entry) pvh_head; 96 1.35 uebayasi int pvh_flags; 97 1.35 uebayasi }; 98 1.35 uebayasi 99 1.35 uebayasi #define VM_MDPAGE_INIT(pg) \ 100 1.35 uebayasi do { \ 101 1.35 uebayasi struct vm_page_md *pvh = &(pg)->mdpage; \ 102 1.35 uebayasi SLIST_INIT(&pvh->pvh_head); \ 103 1.35 uebayasi pvh->pvh_flags = 0; \ 104 1.35 uebayasi } while (/*CONSTCOND*/0) 105 1.23 uch #endif /* !_SH3_PMAP_H_ */ 106