xref: /minix3/sys/arch/x86/include/pmap_pv.h (revision 1cd76c751364e6270e8d5a0daebc6d3d169baf4d)
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