Annotation of sys/arch/hppa64/include/pmap.h, Revision 1.1.1.1
1.1 nbrk 1: /* $OpenBSD: pmap.h,v 1.1 2005/04/01 10:40:48 mickey Exp $ */
2:
3: /*
4: * Copyright (c) 2005 Michael Shalayeff
5: * All rights reserved.
6: *
7: * Permission to use, copy, modify, and distribute this software for any
8: * purpose with or without fee is hereby granted, provided that the above
9: * copyright notice and this permission notice appear in all copies.
10: *
11: * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12: * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13: * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14: * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15: * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER IN
16: * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
17: * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18: */
19:
20: #ifndef _MACHINE_PMAP_H_
21: #define _MACHINE_PMAP_H_
22:
23: #include <machine/pte.h>
24: #include <uvm/uvm_pglist.h>
25: #include <uvm/uvm_object.h>
26:
27: struct pmap {
28: simple_lock_data_t pm_lock;
29: int pm_refcount;
30: struct vm_page *pm_ptphint;
31: struct pglist pm_pglist;
32: volatile u_int32_t *pm_pdir; /* page dir (read-only after create) */
33: pa_space_t pm_space; /* space id (read-only after create) */
34:
35: struct pmap_statistics pm_stats;
36: };
37: typedef struct pmap *pmap_t;
38:
39: struct pv_entry { /* locked by its list's pvh_lock */
40: struct pv_entry *pv_next;
41: struct pmap *pv_pmap; /* the pmap */
42: vaddr_t pv_va; /* the virtual address */
43: struct vm_page *pv_ptp; /* the vm_page of the PTP */
44: };
45:
46: #ifdef _KERNEL
47:
48: extern struct pmap kernel_pmap_store;
49:
50: /*
51: * pool quickmaps
52: */
53: #define pmap_map_direct(pg) ((vaddr_t)VM_PAGE_TO_PHYS(pg))
54: #define pmap_unmap_direct(va) PHYS_TO_VM_PAGE((paddr_t)(va))
55: #define __HAVE_PMAP_DIRECT
56:
57: /*
58: * according to the parisc manual aliased va's should be
59: * different by high 12 bits only.
60: */
61: #define PMAP_PREFER(o,h) do { \
62: vaddr_t pmap_prefer_hint; \
63: pmap_prefer_hint = (*(h) & HPPA_PGAMASK) | ((o) & HPPA_PGAOFF); \
64: if (pmap_prefer_hint < *(h)) \
65: pmap_prefer_hint += HPPA_PGALIAS; \
66: *(h) = pmap_prefer_hint; \
67: } while(0)
68:
69: #define PMAP_GROWKERNEL
70: #define PMAP_STEAL_MEMORY
71:
72: #define pmap_sid2pid(s) (((s) + 1) << 1)
73: #define pmap_kernel() (&kernel_pmap_store)
74: #define pmap_resident_count(pmap) ((pmap)->pm_stats.resident_count)
75: #define pmap_update(pm) (void)(pm)
76: #define pmap_copy(dpmap,spmap,da,len,sa)
77:
78: #define pmap_clear_modify(pg) pmap_changebit(pg, 0, PTE_DIRTY)
79: #define pmap_clear_reference(pg) pmap_changebit(pg, PTE_REFTRAP, 0)
80: #define pmap_is_modified(pg) pmap_testbit(pg, PTE_DIRTY)
81: #define pmap_is_referenced(pg) pmap_testbit(pg, PTE_REFTRAP)
82: #define pmap_phys_address(ppn) ((ppn) << PAGE_SHIFT)
83:
84: #define pmap_proc_iflush(p,va,len) /* nothing */
85: #define pmap_unuse_final(p) /* nothing */
86:
87: void pmap_bootstrap(vaddr_t);
88: boolean_t pmap_changebit(struct vm_page *, pt_entry_t, pt_entry_t);
89: boolean_t pmap_testbit(struct vm_page *, pt_entry_t);
90: void pmap_write_protect(struct pmap *, vaddr_t, vaddr_t, vm_prot_t);
91: void pmap_remove(struct pmap *pmap, vaddr_t sva, vaddr_t eva);
92: void pmap_page_remove(struct vm_page *pg);
93:
94: static __inline void
95: pmap_page_protect(struct vm_page *pg, vm_prot_t prot)
96: {
97: if ((prot & UVM_PROT_WRITE) == 0) {
98: if (prot & (UVM_PROT_RX))
99: pmap_changebit(pg, 0, PTE_WRITE);
100: else
101: pmap_page_remove(pg);
102: }
103: }
104:
105: static __inline void
106: pmap_protect(struct pmap *pmap, vaddr_t sva, vaddr_t eva, vm_prot_t prot)
107: {
108: if ((prot & UVM_PROT_WRITE) == 0) {
109: if (prot & (UVM_PROT_RX))
110: pmap_write_protect(pmap, sva, eva, prot);
111: else
112: pmap_remove(pmap, sva, eva);
113: }
114: }
115:
116: #endif /* _KERNEL */
117: #endif /* _MACHINE_PMAP_H_ */
CVSweb