xref: /netbsd/sys/arch/usermode/usermode/pmap.c (revision 6550d01e)
1 /* $NetBSD: pmap.c,v 1.5 2009/11/07 07:27:48 cegger Exp $ */
2 
3 /*-
4  * Copyright (c) 2007 Jared D. McNeill <jmcneill@invisible.ca>
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
17  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
18  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
20  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26  * POSSIBILITY OF SUCH DAMAGE.
27  */
28 
29 #include <sys/cdefs.h>
30 __KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.5 2009/11/07 07:27:48 cegger Exp $");
31 
32 #include <sys/types.h>
33 #include <sys/param.h>
34 #include <sys/mutex.h>
35 #include <sys/buf.h>
36 
37 #include <uvm/uvm_page.h>
38 #include <uvm/uvm_pmap.h>
39 
40 #include "opt_memsize.h"
41 
42 struct pmap	pmap_kernel_store;
43 static uint8_t	pmap_memory[1024*MEMSIZE] __attribute__((__aligned__));
44 static vaddr_t	virtual_avail, virtual_end;
45 static vaddr_t	pmap_maxkvaddr;
46 
47 void		pmap_bootstrap(void);
48 
49 void
50 pmap_bootstrap(void)
51 {
52 #if 0
53 	vsize_t bufsz;
54 #endif
55 
56 	virtual_avail = (vaddr_t)pmap_memory;
57 	virtual_end = virtual_avail + sizeof(pmap_memory);
58 
59 	uvm_page_physload(atop(virtual_avail),
60 	    atop(virtual_end),
61 	    atop(virtual_avail + PAGE_SIZE),
62 	    atop(virtual_end),
63 	    VM_FREELIST_DEFAULT);
64 
65 	virtual_avail += PAGE_SIZE;
66 
67 	pmap_maxkvaddr = VM_MIN_KERNEL_ADDRESS;
68 #if 0
69 	kmeminit_nkmempages();
70 	bufsz = buf_memcalc();
71 	if (buf_setvalimit(bufsz))
72 		panic("pmap_bootstrap: buf_setvalimit failed\n");
73 #endif
74 }
75 
76 void
77 pmap_init(void)
78 {
79 }
80 
81 pmap_t
82 pmap_kernel(void)
83 {
84 	return &pmap_kernel_store;
85 }
86 
87 void
88 pmap_virtual_space(vaddr_t *vstartp, vaddr_t *vendp)
89 {
90 	*vstartp = virtual_avail;
91 	*vendp = virtual_end;
92 }
93 
94 /* XXXJDM */
95 static struct pmap_list {
96 	bool used;
97 	struct pmap pmap;
98 } pmap_list[128];
99 
100 pmap_t
101 pmap_create(void)
102 {
103 	int i;
104 
105 	for (i = 0; i < __arraycount(pmap_list); i++)
106 		if (pmap_list[i].used == false) {
107 			pmap_list[i].used = true;
108 			return &pmap_list[i].pmap;
109 		}
110 
111 	printf("pmap_create: out of space\n");
112 	return NULL;
113 }
114 
115 void
116 pmap_destroy(pmap_t pmap)
117 {
118 	int i;
119 
120 	for (i = 0; i < __arraycount(pmap_list); i++)
121 		if (pmap == &pmap_list[i].pmap) {
122 			pmap_list[i].used = false;
123 			break;
124 		}
125 }
126 
127 void
128 pmap_reference(pmap_t pmap)
129 {
130 }
131 
132 long
133 pmap_resident_count(pmap_t pmap)
134 {
135 	printf("pmap_resident_count\n");
136 	return 1;
137 }
138 
139 long
140 pmap_wired_count(pmap_t pmap)
141 {
142 	printf("pmap_wired_count\n");
143 	return 1;
144 }
145 
146 int
147 pmap_enter(pmap_t pmap, vaddr_t va, paddr_t pa, vm_prot_t prot, u_int flags)
148 {
149 	return 0;
150 }
151 
152 void
153 pmap_remove(pmap_t pmap, vaddr_t sva, vaddr_t eva)
154 {
155 }
156 
157 void
158 pmap_remove_all(pmap_t pmap)
159 {
160 }
161 
162 void
163 pmap_protect(pmap_t pmap, vaddr_t sva, vaddr_t eva, vm_prot_t prot)
164 {
165 }
166 
167 void
168 pmap_unwire(pmap_t pmap, vaddr_t va)
169 {
170 }
171 
172 bool
173 pmap_extract(pmap_t pmap, vaddr_t va, paddr_t *pap)
174 {
175 	/* XXXJDM */
176 	*pap = va;
177 	return true;
178 }
179 
180 void
181 pmap_kenter_pa(vaddr_t va, paddr_t pa, vm_prot_t prot, u_int flags)
182 {
183 }
184 
185 void
186 pmap_kremove(vaddr_t va, vsize_t size)
187 {
188 }
189 
190 void
191 pmap_copy(pmap_t dst_map, pmap_t src_map, vaddr_t dst_addr, vsize_t len,
192     vaddr_t src_addr)
193 {
194 }
195 
196 void
197 pmap_update(pmap_t pmap)
198 {
199 }
200 
201 void
202 pmap_activate(struct lwp *l)
203 {
204 }
205 
206 void
207 pmap_deactivate(struct lwp *l)
208 {
209 }
210 
211 void
212 pmap_zero_page(paddr_t pa)
213 {
214 }
215 
216 void
217 pmap_copy_page(paddr_t src, paddr_t dst)
218 {
219 }
220 
221 void
222 pmap_page_protect(struct vm_page *pg, vm_prot_t prot)
223 {
224 }
225 
226 bool
227 pmap_clear_modify(struct vm_page *pg)
228 {
229 	return true;
230 }
231 
232 bool
233 pmap_clear_reference(struct vm_page *pg)
234 {
235 	return true;
236 }
237 
238 bool
239 pmap_is_modified(struct vm_page *pg)
240 {
241 	return false;
242 }
243 
244 bool
245 pmap_is_referenced(struct vm_page *pg)
246 {
247 	return false;
248 }
249 
250 paddr_t
251 pmap_phys_address(paddr_t cookie)
252 {
253 	return ptoa(cookie);
254 }
255 
256 vaddr_t
257 pmap_growkernel(vaddr_t maxkvaddr)
258 {
259 	pmap_maxkvaddr = maxkvaddr;
260 	return maxkvaddr;
261 }
262