Annotation of src/sys/arch/powerpc/include/oea/pmap.h, Revision 1.3
1.3 ! matt 1: /* $NetBSD: pmap.h,v 1.2 2003/02/05 07:05:19 matt Exp $ */
1.1 matt 2:
3: /*-
4: * Copyright (C) 1995, 1996 Wolfgang Solfrank.
5: * Copyright (C) 1995, 1996 TooLs GmbH.
6: * All rights reserved.
7: *
8: * Redistribution and use in source and binary forms, with or without
9: * modification, are permitted provided that the following conditions
10: * are met:
11: * 1. Redistributions of source code must retain the above copyright
12: * notice, this list of conditions and the following disclaimer.
13: * 2. Redistributions in binary form must reproduce the above copyright
14: * notice, this list of conditions and the following disclaimer in the
15: * documentation and/or other materials provided with the distribution.
16: * 3. All advertising materials mentioning features or use of this software
17: * must display the following acknowledgement:
18: * This product includes software developed by TooLs GmbH.
19: * 4. The name of TooLs GmbH may not be used to endorse or promote products
20: * derived from this software without specific prior written permission.
21: *
22: * THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``AS IS'' AND ANY EXPRESS OR
23: * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
24: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
25: * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
27: * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
28: * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
29: * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
30: * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
31: * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32: */
33:
34: #ifndef _POWERPC_OEA_PMAP_H_
35: #define _POWERPC_OEA_PMAP_H_
36:
37: #include <powerpc/oea/pte.h>
38:
39: #ifndef _LOCORE
40: /*
41: * Pmap stuff
42: */
43: struct pmap {
1.2 matt 44: register_t pm_sr[16]; /* segments used in this pmap */
45: int pm_refs; /* ref count */
1.1 matt 46: struct pmap_statistics pm_stats; /* pmap statistics */
1.2 matt 47: unsigned int pm_evictions; /* pvo's not in page table */
1.1 matt 48: };
49:
50: typedef struct pmap *pmap_t;
51:
52: #ifdef _KERNEL
1.2 matt 53: extern register_t iosrtable[];
1.1 matt 54: extern int pmap_use_altivec;
55: extern struct pmap kernel_pmap_;
56: #define pmap_kernel() (&kernel_pmap_)
57:
58: #define pmap_clear_modify(pg) (pmap_clear_bit((pg), PTE_CHG))
59: #define pmap_clear_reference(pg) (pmap_clear_bit((pg), PTE_REF))
60: #define pmap_is_modified(pg) (pmap_query_bit((pg), PTE_CHG))
61: #define pmap_is_referenced(pg) (pmap_query_bit((pg), PTE_REF))
62:
63: #define pmap_phys_address(x) (x)
64:
65: #define pmap_resident_count(pmap) ((pmap)->pm_stats.resident_count)
66: #define pmap_wired_count(pmap) ((pmap)->pm_stats.wired_count)
67:
1.3 ! matt 68: /* ARGSUSED */
1.1 matt 69: static __inline void
70: pmap_remove_all(struct pmap *pmap)
71: {
72: /* Nothing. */
73: }
74:
75: void pmap_bootstrap (vaddr_t kernelstart, vaddr_t kernelend);
76: boolean_t pmap_extract (struct pmap *, vaddr_t, paddr_t *);
77: boolean_t pmap_query_bit (struct vm_page *, int);
78: boolean_t pmap_clear_bit (struct vm_page *, int);
79: void pmap_real_memory (paddr_t *, psize_t *);
80: void pmap_pinit (struct pmap *);
81: boolean_t pmap_pageidlezero (paddr_t);
82: void pmap_syncicache (paddr_t, psize_t);
83:
84: #define PMAP_NEED_PROCWR
85: void pmap_procwr (struct proc *, vaddr_t, size_t);
86:
87: int pmap_pte_spill(struct pmap *, vaddr_t);
88:
89: #define PMAP_NC 0x1000
90:
91: #define PMAP_STEAL_MEMORY
92: #if 1
93: /*
94: * Alternate mapping hooks for pool pages. Avoids thrashing the TLB.
95: *
96: * Note: This won't work if we have more memory than can be direct-mapped
97: * VA==PA all at once. But pmap_copy_page() and pmap_zero_page() will have
98: * this problem, too.
99: */
100: #define PMAP_MAP_POOLPAGE(pa) (pa)
101: #define PMAP_UNMAP_POOLPAGE(pa) (pa)
102: #endif
103:
104: static __inline paddr_t vtophys (vaddr_t);
105:
106: static __inline paddr_t
107: vtophys(vaddr_t va)
108: {
109: paddr_t pa;
110:
111: /* XXX should check battable */
112:
113: if (pmap_extract(pmap_kernel(), va, &pa))
114: return pa;
115: return va;
116: }
117:
118: #endif /* _KERNEL */
119: #endif /* _LOCORE */
120:
121: #endif /* _POWERPC_OEA_PMAP_H_ */
CVSweb <webmaster@jp.NetBSD.org>