pmap.h revision 129068
182899Sjake/* 282899Sjake * Copyright (c) 1991 Regents of the University of California. 380708Sjake * All rights reserved. 480708Sjake * 582899Sjake * This code is derived from software contributed to Berkeley by 682899Sjake * the Systems Programming Group of the University of Utah Computer 782899Sjake * Science Department and William Jolitz of UUNET Technologies Inc. 882899Sjake * 980708Sjake * Redistribution and use in source and binary forms, with or without 1080708Sjake * modification, are permitted provided that the following conditions 1180708Sjake * are met: 1280708Sjake * 1. Redistributions of source code must retain the above copyright 1380708Sjake * notice, this list of conditions and the following disclaimer. 1480708Sjake * 2. Redistributions in binary form must reproduce the above copyright 1580708Sjake * notice, this list of conditions and the following disclaimer in the 1680708Sjake * documentation and/or other materials provided with the distribution. 1782899Sjake * 4. Neither the name of the University nor the names of its contributors 1882899Sjake * may be used to endorse or promote products derived from this software 1982899Sjake * without specific prior written permission. 2080708Sjake * 2182899Sjake * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 2280708Sjake * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2380708Sjake * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2482899Sjake * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 2580708Sjake * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2680708Sjake * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2780708Sjake * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2880708Sjake * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2980708Sjake * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 3080708Sjake * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 3180708Sjake * SUCH DAMAGE. 3280708Sjake * 3382899Sjake * from: hp300: @(#)pmap.h 7.2 (Berkeley) 12/16/90 3482899Sjake * from: @(#)pmap.h 7.4 (Berkeley) 5/12/91 3582899Sjake * from: FreeBSD: src/sys/i386/include/pmap.h,v 1.70 2000/11/30 3680708Sjake * $FreeBSD: head/sys/sparc64/include/pmap.h 129068 2004-05-09 19:09:14Z alc $ 3780708Sjake */ 3880708Sjake 3980708Sjake#ifndef _MACHINE_PMAP_H_ 4080708Sjake#define _MACHINE_PMAP_H_ 4180708Sjake 42104265Sjake#include <sys/queue.h> 43112399Sjake#include <machine/cache.h> 4480709Sjake#include <machine/tte.h> 4580709Sjake 4680709Sjake#define PMAP_CONTEXT_MAX 8192 4780709Sjake 4880709Sjaketypedef struct pmap *pmap_t; 4980709Sjake 5083053Sobrienstruct md_page { 51108166Sjake TAILQ_HEAD(, tte) tte_list; 52108166Sjake struct pmap *pmap; 53108166Sjake uint32_t colors[DCACHE_COLORS]; 54108166Sjake int32_t color; 55108166Sjake uint32_t flags; 5680708Sjake}; 5780708Sjake 5883053Sobrienstruct pmap { 5988651Sjake struct tte *pm_tsb; 6088651Sjake vm_object_t pm_tsb_obj; 6180709Sjake u_int pm_active; 6291288Sjake u_int pm_context[MAXCPU]; 6380709Sjake struct pmap_statistics pm_stats; 6480708Sjake}; 6580708Sjake 6685241Sjakevoid pmap_bootstrap(vm_offset_t ekva); 67113238Sjakevm_paddr_t pmap_kextract(vm_offset_t va); 68113238Sjakevoid pmap_kenter(vm_offset_t va, vm_page_t m); 69112312Sjakevoid pmap_kremove(vm_offset_t); 70113238Sjakevoid pmap_kenter_flags(vm_offset_t va, vm_paddr_t pa, u_long flags); 7198813Sjakevoid pmap_kremove_flags(vm_offset_t va); 72129068Salcboolean_t pmap_page_is_mapped(vm_page_t m); 7380708Sjake 7488651Sjakeint pmap_cache_enter(vm_page_t m, vm_offset_t va); 7588651Sjakevoid pmap_cache_remove(vm_page_t m, vm_offset_t va); 7688651Sjake 7797447Sjakeint pmap_remove_tte(struct pmap *pm1, struct pmap *pm2, struct tte *tp, 7897447Sjake vm_offset_t va); 7997447Sjakeint pmap_protect_tte(struct pmap *pm1, struct pmap *pm2, struct tte *tp, 8097447Sjake vm_offset_t va); 8197447Sjake 8289041Sjakevoid pmap_map_tsb(void); 8389041Sjake 8497447Sjakevoid pmap_clear_write(vm_page_t m); 8597447Sjake 86101957Sjake#define vtophys(va) pmap_kextract(((vm_offset_t)(va))) 8784844Stmm 8888651Sjakeextern struct pmap kernel_pmap_store; 8988651Sjake#define kernel_pmap (&kernel_pmap_store) 90113238Sjakeextern vm_paddr_t phys_avail[]; 9180708Sjakeextern vm_offset_t virtual_avail; 9280708Sjakeextern vm_offset_t virtual_end; 9380708Sjake 94113238Sjakeextern vm_paddr_t msgbuf_phys; 9585241Sjake 9681087Sjakestatic __inline int 9788651Sjakepmap_track_modified(pmap_t pm, vm_offset_t va) 9881087Sjake{ 9988651Sjake if (pm == kernel_pmap) 10088651Sjake return ((va < kmi.clean_sva) || (va >= kmi.clean_eva)); 10188651Sjake else 10288651Sjake return (1); 10381087Sjake} 10481087Sjake 105108700Sjake#ifdef PMAP_STATS 106108700Sjake 107108700SjakeSYSCTL_DECL(_debug_pmap_stats); 108108700Sjake 109108700Sjake#define PMAP_STATS_VAR(name) \ 110108700Sjake static long name; \ 111113171Sjake SYSCTL_LONG(_debug_pmap_stats, OID_AUTO, name, CTLFLAG_RW, \ 112108700Sjake &name, 0, "") 113108700Sjake 114108700Sjake#define PMAP_STATS_INC(var) \ 115108700Sjake atomic_add_long(&var, 1) 116108700Sjake 117108700Sjake#else 118108700Sjake 119108700Sjake#define PMAP_STATS_VAR(name) 120108700Sjake#define PMAP_STATS_INC(var) 121108700Sjake 122108700Sjake#endif 123108700Sjake 12480708Sjake#endif /* !_MACHINE_PMAP_H_ */ 125