pmap.h revision 108700
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 * 3. All advertising materials mentioning features or use of this software 1882899Sjake * must display the following acknowledgement: 1982899Sjake * This product includes software developed by the University of 2082899Sjake * California, Berkeley and its contributors. 2182899Sjake * 4. Neither the name of the University nor the names of its contributors 2282899Sjake * may be used to endorse or promote products derived from this software 2382899Sjake * without specific prior written permission. 2480708Sjake * 2582899Sjake * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 2680708Sjake * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2780708Sjake * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2882899Sjake * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 2980708Sjake * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 3080708Sjake * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 3180708Sjake * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 3280708Sjake * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 3380708Sjake * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 3480708Sjake * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 3580708Sjake * SUCH DAMAGE. 3680708Sjake * 3782899Sjake * from: hp300: @(#)pmap.h 7.2 (Berkeley) 12/16/90 3882899Sjake * from: @(#)pmap.h 7.4 (Berkeley) 5/12/91 3982899Sjake * from: FreeBSD: src/sys/i386/include/pmap.h,v 1.70 2000/11/30 4080708Sjake * $FreeBSD: head/sys/sparc64/include/pmap.h 108700 2003-01-05 05:30:40Z jake $ 4180708Sjake */ 4280708Sjake 4380708Sjake#ifndef _MACHINE_PMAP_H_ 4480708Sjake#define _MACHINE_PMAP_H_ 4580708Sjake 46104265Sjake#include <sys/queue.h> 4780709Sjake#include <machine/tte.h> 4880709Sjake 4988651Sjake#define DCACHE_COLOR_BITS (1) 5088651Sjake#define DCACHE_COLORS (1 << DCACHE_COLOR_BITS) 5188651Sjake#define DCACHE_COLOR_MASK (DCACHE_COLORS - 1) 5288651Sjake#define DCACHE_COLOR(va) (((va) >> PAGE_SHIFT) & DCACHE_COLOR_MASK) 53101186Sjake#define DCACHE_OTHER_COLOR(color) \ 54101186Sjake ((color) ^ DCACHE_COLOR_BITS) 5588651Sjake 5680709Sjake#define PMAP_CONTEXT_MAX 8192 5780709Sjake 58108166Sjake#define pmap_page_is_mapped(m) (!TAILQ_EMPTY(&(m)->md.tte_list)) 5980709Sjake#define pmap_resident_count(pm) (pm->pm_stats.resident_count) 6080709Sjake 6180709Sjaketypedef struct pmap *pmap_t; 6280709Sjake 6383053Sobrienstruct md_page { 64108166Sjake TAILQ_HEAD(, tte) tte_list; 65108166Sjake struct pmap *pmap; 66108166Sjake uint32_t colors[DCACHE_COLORS]; 67108166Sjake int32_t color; 68108166Sjake uint32_t flags; 6980708Sjake}; 7080708Sjake 7183053Sobrienstruct pmap { 7288651Sjake struct tte *pm_tsb; 7388651Sjake vm_object_t pm_tsb_obj; 7480709Sjake u_int pm_active; 7591288Sjake u_int pm_context[MAXCPU]; 7680709Sjake struct pmap_statistics pm_stats; 7780708Sjake}; 7880708Sjake 7985241Sjakevoid pmap_bootstrap(vm_offset_t ekva); 8091613Sjakevoid pmap_context_rollover(void); 8180708Sjakevm_offset_t pmap_kextract(vm_offset_t va); 8284844Stmmvoid pmap_kenter_flags(vm_offset_t va, vm_offset_t pa, u_long flags); 8398813Sjakevoid pmap_kremove_flags(vm_offset_t va); 8480708Sjake 8588651Sjakeint pmap_cache_enter(vm_page_t m, vm_offset_t va); 8688651Sjakevoid pmap_cache_remove(vm_page_t m, vm_offset_t va); 8788651Sjake 8897447Sjakeint pmap_remove_tte(struct pmap *pm1, struct pmap *pm2, struct tte *tp, 8997447Sjake vm_offset_t va); 9097447Sjakeint pmap_protect_tte(struct pmap *pm1, struct pmap *pm2, struct tte *tp, 9197447Sjake vm_offset_t va); 9297447Sjake 9389041Sjakevoid pmap_map_tsb(void); 9489041Sjake 9597447Sjakevoid pmap_clear_write(vm_page_t m); 9697447Sjake 97101957Sjake#define vtophys(va) pmap_kextract(((vm_offset_t)(va))) 9884844Stmm 9980708Sjakeextern vm_offset_t avail_start; 10080708Sjakeextern vm_offset_t avail_end; 10188651Sjakeextern struct pmap kernel_pmap_store; 10288651Sjake#define kernel_pmap (&kernel_pmap_store) 10380708Sjakeextern vm_offset_t phys_avail[]; 10480708Sjakeextern vm_offset_t virtual_avail; 10580708Sjakeextern vm_offset_t virtual_end; 10680708Sjake 10785241Sjakeextern vm_offset_t msgbuf_phys; 10885241Sjake 10981087Sjakestatic __inline int 11088651Sjakepmap_track_modified(pmap_t pm, vm_offset_t va) 11181087Sjake{ 11288651Sjake if (pm == kernel_pmap) 11388651Sjake return ((va < kmi.clean_sva) || (va >= kmi.clean_eva)); 11488651Sjake else 11588651Sjake return (1); 11681087Sjake} 11781087Sjake 118108700Sjake#ifdef PMAP_STATS 119108700Sjake 120108700SjakeSYSCTL_DECL(_debug_pmap_stats); 121108700Sjake 122108700Sjake#define PMAP_STATS_VAR(name) \ 123108700Sjake static long name; \ 124108700Sjake SYSCTL_LONG(_debug_pmap_stats, OID_AUTO, name, CTLFLAG_RD, \ 125108700Sjake &name, 0, "") 126108700Sjake 127108700Sjake#define PMAP_STATS_INC(var) \ 128108700Sjake atomic_add_long(&var, 1) 129108700Sjake 130108700Sjake#else 131108700Sjake 132108700Sjake#define PMAP_STATS_VAR(name) 133108700Sjake#define PMAP_STATS_INC(var) 134108700Sjake 135108700Sjake#endif 136108700Sjake 13780708Sjake#endif /* !_MACHINE_PMAP_H_ */ 138