1*1cd76c75SBen Gras /* $NetBSD: pmap_pv.h,v 1.3 2011/06/12 03:35:50 rmind Exp $ */ 2*1cd76c75SBen Gras 3*1cd76c75SBen Gras /*- 4*1cd76c75SBen Gras * Copyright (c)2008 YAMAMOTO Takashi, 5*1cd76c75SBen Gras * All rights reserved. 6*1cd76c75SBen Gras * 7*1cd76c75SBen Gras * Redistribution and use in source and binary forms, with or without 8*1cd76c75SBen Gras * modification, are permitted provided that the following conditions 9*1cd76c75SBen Gras * are met: 10*1cd76c75SBen Gras * 1. Redistributions of source code must retain the above copyright 11*1cd76c75SBen Gras * notice, this list of conditions and the following disclaimer. 12*1cd76c75SBen Gras * 2. Redistributions in binary form must reproduce the above copyright 13*1cd76c75SBen Gras * notice, this list of conditions and the following disclaimer in the 14*1cd76c75SBen Gras * documentation and/or other materials provided with the distribution. 15*1cd76c75SBen Gras * 16*1cd76c75SBen Gras * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 17*1cd76c75SBen Gras * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18*1cd76c75SBen Gras * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19*1cd76c75SBen Gras * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 20*1cd76c75SBen Gras * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21*1cd76c75SBen Gras * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22*1cd76c75SBen Gras * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23*1cd76c75SBen Gras * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24*1cd76c75SBen Gras * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25*1cd76c75SBen Gras * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26*1cd76c75SBen Gras * SUCH DAMAGE. 27*1cd76c75SBen Gras */ 28*1cd76c75SBen Gras 29*1cd76c75SBen Gras #ifndef _X86_PMAP_PV_H_ 30*1cd76c75SBen Gras #define _X86_PMAP_PV_H_ 31*1cd76c75SBen Gras 32*1cd76c75SBen Gras #include <sys/mutex.h> 33*1cd76c75SBen Gras #include <sys/queue.h> 34*1cd76c75SBen Gras 35*1cd76c75SBen Gras struct vm_page; 36*1cd76c75SBen Gras 37*1cd76c75SBen Gras /* 38*1cd76c75SBen Gras * structures to track P->V mapping 39*1cd76c75SBen Gras * 40*1cd76c75SBen Gras * this file is intended to be minimum as it's included by <machine/vmparam.h>. 41*1cd76c75SBen Gras */ 42*1cd76c75SBen Gras 43*1cd76c75SBen Gras /* 44*1cd76c75SBen Gras * pv_pte: describe a pte 45*1cd76c75SBen Gras */ 46*1cd76c75SBen Gras 47*1cd76c75SBen Gras struct pv_pte { 48*1cd76c75SBen Gras struct vm_page *pte_ptp; /* PTP; NULL for pmap_kernel() */ 49*1cd76c75SBen Gras vaddr_t pte_va; /* VA */ 50*1cd76c75SBen Gras }; 51*1cd76c75SBen Gras 52*1cd76c75SBen Gras /* 53*1cd76c75SBen Gras * pv_entry: plug pv_pte into lists. 54*1cd76c75SBen Gras */ 55*1cd76c75SBen Gras 56*1cd76c75SBen Gras struct pv_entry { 57*1cd76c75SBen Gras struct pv_pte pve_pte; /* should be the first member */ 58*1cd76c75SBen Gras LIST_ENTRY(pv_entry) pve_list; /* on pv_head::pvh_list */ 59*1cd76c75SBen Gras SLIST_ENTRY(pv_entry) pve_hash; 60*1cd76c75SBen Gras }; 61*1cd76c75SBen Gras #define pve_next pve_list.le_next 62*1cd76c75SBen Gras 63*1cd76c75SBen Gras /* 64*1cd76c75SBen Gras * pmap_page: a structure which is embedded in each vm_page. 65*1cd76c75SBen Gras */ 66*1cd76c75SBen Gras 67*1cd76c75SBen Gras struct pmap_page { 68*1cd76c75SBen Gras union { 69*1cd76c75SBen Gras /* PP_EMBEDDED */ 70*1cd76c75SBen Gras struct pv_pte u_pte; 71*1cd76c75SBen Gras 72*1cd76c75SBen Gras /* !PP_EMBEDDED */ 73*1cd76c75SBen Gras struct pv_head { 74*1cd76c75SBen Gras LIST_HEAD(, pv_entry) pvh_list; 75*1cd76c75SBen Gras } u_head; 76*1cd76c75SBen Gras 77*1cd76c75SBen Gras /* PTPs */ 78*1cd76c75SBen Gras struct vm_page *u_link; 79*1cd76c75SBen Gras } pp_u; 80*1cd76c75SBen Gras #define pp_pte pp_u.u_pte 81*1cd76c75SBen Gras #define pp_head pp_u.u_head 82*1cd76c75SBen Gras #define pp_link pp_u.u_link 83*1cd76c75SBen Gras uint8_t pp_flags; 84*1cd76c75SBen Gras uint8_t pp_attrs; /* saved PG_M and PG_U */ 85*1cd76c75SBen Gras }; 86*1cd76c75SBen Gras 87*1cd76c75SBen Gras /* pp_flags */ 88*1cd76c75SBen Gras #define PP_EMBEDDED 1 89*1cd76c75SBen Gras 90*1cd76c75SBen Gras #define PMAP_PAGE_INIT(pp) /* none */ 91*1cd76c75SBen Gras 92*1cd76c75SBen Gras #endif /* !_X86_PMAP_PV_H_ */ 93