xref: /freebsd/sys/powerpc/include/pmap.h (revision f9bac91b18fc344fe5967f4367a1994588a26b10)
1f9bac91bSBenno Rice /*-
2f9bac91bSBenno Rice  * Copyright (C) 1995, 1996 Wolfgang Solfrank.
3f9bac91bSBenno Rice  * Copyright (C) 1995, 1996 TooLs GmbH.
4f9bac91bSBenno Rice  * All rights reserved.
5f9bac91bSBenno Rice  *
6f9bac91bSBenno Rice  * Redistribution and use in source and binary forms, with or without
7f9bac91bSBenno Rice  * modification, are permitted provided that the following conditions
8f9bac91bSBenno Rice  * are met:
9f9bac91bSBenno Rice  * 1. Redistributions of source code must retain the above copyright
10f9bac91bSBenno Rice  *    notice, this list of conditions and the following disclaimer.
11f9bac91bSBenno Rice  * 2. Redistributions in binary form must reproduce the above copyright
12f9bac91bSBenno Rice  *    notice, this list of conditions and the following disclaimer in the
13f9bac91bSBenno Rice  *    documentation and/or other materials provided with the distribution.
14f9bac91bSBenno Rice  * 3. All advertising materials mentioning features or use of this software
15f9bac91bSBenno Rice  *    must display the following acknowledgement:
16f9bac91bSBenno Rice  *	This product includes software developed by TooLs GmbH.
17f9bac91bSBenno Rice  * 4. The name of TooLs GmbH may not be used to endorse or promote products
18f9bac91bSBenno Rice  *    derived from this software without specific prior written permission.
19f9bac91bSBenno Rice  *
20f9bac91bSBenno Rice  * THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``AS IS'' AND ANY EXPRESS OR
21f9bac91bSBenno Rice  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
22f9bac91bSBenno Rice  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
23f9bac91bSBenno Rice  * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24f9bac91bSBenno Rice  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25f9bac91bSBenno Rice  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
26f9bac91bSBenno Rice  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
27f9bac91bSBenno Rice  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
28f9bac91bSBenno Rice  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
29f9bac91bSBenno Rice  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30f9bac91bSBenno Rice  *
31f9bac91bSBenno Rice  *	$NetBSD: pmap.h,v 1.17 2000/03/30 16:18:24 jdolecek Exp $
32f9bac91bSBenno Rice  * $FreeBSD$
33f9bac91bSBenno Rice  */
34f9bac91bSBenno Rice 
35f9bac91bSBenno Rice #ifndef	_MACHINE_PMAP_H_
36f9bac91bSBenno Rice #define	_MACHINE_PMAP_H_
37f9bac91bSBenno Rice 
38f9bac91bSBenno Rice #include <machine/pte.h>
39f9bac91bSBenno Rice 
40f9bac91bSBenno Rice /*
41f9bac91bSBenno Rice  * Segment registers
42f9bac91bSBenno Rice  */
43f9bac91bSBenno Rice #ifndef	LOCORE
44f9bac91bSBenno Rice typedef u_int sr_t;
45f9bac91bSBenno Rice #endif	/* LOCORE */
46f9bac91bSBenno Rice #define	SR_TYPE		0x80000000
47f9bac91bSBenno Rice #define	SR_SUKEY	0x40000000
48f9bac91bSBenno Rice #define	SR_PRKEY	0x20000000
49f9bac91bSBenno Rice #define	SR_VSID		0x00ffffff
50f9bac91bSBenno Rice 
51f9bac91bSBenno Rice #ifndef LOCORE
52f9bac91bSBenno Rice 
53f9bac91bSBenno Rice struct pv_entry {
54f9bac91bSBenno Rice         struct pv_entry	*pv_next;	/* Linked list of mappings */
55f9bac91bSBenno Rice         int		pv_idx;		/* Index into ptable */
56f9bac91bSBenno Rice         vm_offset_t	pv_va;		/* virtual address of mapping */
57f9bac91bSBenno Rice };
58f9bac91bSBenno Rice 
59f9bac91bSBenno Rice struct md_page {
60f9bac91bSBenno Rice 	int	pv_list_count;
61f9bac91bSBenno Rice 	int	pv_flags;
62f9bac91bSBenno Rice 	TAILQ_HEAD(,pv_entry)	pv_list;
63f9bac91bSBenno Rice };
64f9bac91bSBenno Rice 
65f9bac91bSBenno Rice /*
66f9bac91bSBenno Rice  * Pmap stuff
67f9bac91bSBenno Rice  */
68f9bac91bSBenno Rice struct pmap {
69f9bac91bSBenno Rice 	sr_t pm_sr[16];		/* segments used in this pmap */
70f9bac91bSBenno Rice 	int pm_refs;		/* ref count */
71f9bac91bSBenno Rice 	struct pmap_statistics pm_stats;	/* pmap statistics */
72f9bac91bSBenno Rice };
73f9bac91bSBenno Rice 
74f9bac91bSBenno Rice typedef	struct pmap *pmap_t;
75f9bac91bSBenno Rice 
76f9bac91bSBenno Rice typedef struct pv_entry *pv_entry_t;
77f9bac91bSBenno Rice 
78f9bac91bSBenno Rice #ifdef	_KERNEL
79f9bac91bSBenno Rice 
80f9bac91bSBenno Rice #define pmap_clear_modify(pg)		(ptemodify((pg), PTE_CHG, 0))
81f9bac91bSBenno Rice #define	pmap_clear_reference(pg)	(ptemodify((pg), PTE_REF, 0))
82f9bac91bSBenno Rice #define	pmap_is_modified(pg)		(ptebits((pg), PTE_CHG))
83f9bac91bSBenno Rice #define	pmap_is_referenced(pg)		(ptebits((pg), PTE_REF))
84f9bac91bSBenno Rice #define	pmap_unwire(pm, va)
85f9bac91bSBenno Rice 
86f9bac91bSBenno Rice #define	pmap_phys_address(x)		(x)
87f9bac91bSBenno Rice 
88f9bac91bSBenno Rice #define	pmap_resident_count(pmap)	((pmap)->pm_stats.resident_count)
89f9bac91bSBenno Rice 
90f9bac91bSBenno Rice extern pmap_t		kernel_pmap;
91f9bac91bSBenno Rice 
92f9bac91bSBenno Rice extern vm_offset_t	avail_end;
93f9bac91bSBenno Rice extern vm_offset_t	avail_start;
94f9bac91bSBenno Rice extern vm_offset_t	phys_avail[];
95f9bac91bSBenno Rice extern vm_offset_t	virtual_avail;
96f9bac91bSBenno Rice extern vm_offset_t	virtual_end;
97f9bac91bSBenno Rice 
98f9bac91bSBenno Rice void pmap_bootstrap __P((u_int kernelstart, u_int kernelend));
99f9bac91bSBenno Rice vm_offset_t pmap_steal_memory __P((vm_size_t));
100f9bac91bSBenno Rice boolean_t ptemodify __P((struct vm_page *, u_int, u_int));
101f9bac91bSBenno Rice int ptebits __P((struct vm_page *, int));
102f9bac91bSBenno Rice 
103f9bac91bSBenno Rice #if 0
104f9bac91bSBenno Rice #define PMAP_NEED_PROCWR
105f9bac91bSBenno Rice void pmap_procwr __P((struct proc *, vaddr_t, size_t));
106f9bac91bSBenno Rice #endif
107f9bac91bSBenno Rice 
108f9bac91bSBenno Rice /*
109f9bac91bSBenno Rice  * Alternate mapping hooks for pool pages.  Avoids thrashing the TLB.
110f9bac91bSBenno Rice  *
111f9bac91bSBenno Rice  * Note: This won't work if we have more memory than can be direct-mapped
112f9bac91bSBenno Rice  * VA==PA all at once.  But pmap_copy_page() and pmap_zero_page() will have
113f9bac91bSBenno Rice  * this problem, too.
114f9bac91bSBenno Rice  */
115f9bac91bSBenno Rice #define	PMAP_MAP_POOLPAGE(pa)	(pa)
116f9bac91bSBenno Rice #define	PMAP_UNMAP_POOLPAGE(pa)	(pa)
117f9bac91bSBenno Rice 
118f9bac91bSBenno Rice #define	vtophys(va)	pmap_kextract(((vm_offset_t) (va)))
119f9bac91bSBenno Rice 
120f9bac91bSBenno Rice extern	pte_t	PTmap[];
121f9bac91bSBenno Rice 
122f9bac91bSBenno Rice #define	vtopte(x)	(PTmap + powerpc_btop(x))
123f9bac91bSBenno Rice 
124f9bac91bSBenno Rice static __inline vm_offset_t
125f9bac91bSBenno Rice pmap_kextract(vm_offset_t va)
126f9bac91bSBenno Rice {
127f9bac91bSBenno Rice 	/* XXX: coming soon... */
128f9bac91bSBenno Rice 	return (0);
129f9bac91bSBenno Rice }
130f9bac91bSBenno Rice 
131f9bac91bSBenno Rice #endif	/* _KERNEL */
132f9bac91bSBenno Rice #endif	/* LOCORE */
133f9bac91bSBenno Rice 
134f9bac91bSBenno Rice #endif	/* _MACHINE_PMAP_H_ */
135