Sun Aug 9 04:02:41 2009 UTC ()
Beginning of large-page support.


(matt)
diff -r1.23 -r1.24 src/sys/arch/mips/include/mips_param.h
diff -r1.42 -r1.43 src/sys/arch/mips/include/vmparam.h

cvs diff -r1.23 -r1.24 src/sys/arch/mips/include/mips_param.h (switch to unified diff)

--- src/sys/arch/mips/include/mips_param.h 2006/08/28 13:43:35 1.23
+++ src/sys/arch/mips/include/mips_param.h 2009/08/09 04:02:40 1.24
@@ -1,59 +1,71 @@ @@ -1,59 +1,71 @@
1/* $NetBSD: mips_param.h,v 1.23 2006/08/28 13:43:35 yamt Exp $ */ 1/* $NetBSD: mips_param.h,v 1.24 2009/08/09 04:02:40 matt Exp $ */
2 2
3#ifdef _KERNEL 3#ifdef _KERNEL
4#include <machine/cpu.h> 4#include <machine/cpu.h>
5#endif 5#endif
6 6
7/* 7/*
8 * On mips, UPAGES is fixed by sys/arch/mips/mips/locore code 8 * On mips, UPAGES is fixed by sys/arch/mips/mips/locore code
9 * to be the number of per-process-wired kernel-stack pages/PTES. 9 * to be the number of per-process-wired kernel-stack pages/PTES.
10 */ 10 */
11 11
12#define SSIZE 1 /* initial stack size/NBPG */ 12#define SSIZE 1 /* initial stack size/NBPG */
13#define SINCR 1 /* increment of stack/NBPG */ 13#define SINCR 1 /* increment of stack/NBPG */
14 14
 15#ifdef ENABLE_MIPS_16KB_PAGE
 16#define UPAGES 1 /* pages of u-area */
 17#define USPACE (UPAGES*NBPG) /* size of u-area in bytes */
 18#elif defined(ENABLE_MIPS_4KB_PAGE) || 1
15#define UPAGES 2 /* pages of u-area */ 19#define UPAGES 2 /* pages of u-area */
16#define USPACE (UPAGES*NBPG) /* size of u-area in bytes */ 20#define USPACE (UPAGES*NBPG) /* size of u-area in bytes */
 21#else
 22#error ENABLE_MIPS_xKB_PAGE not defined
 23#endif
17 24
18#ifndef MSGBUFSIZE 25#ifndef MSGBUFSIZE
19#define MSGBUFSIZE NBPG /* default message buffer size */ 26#define MSGBUFSIZE NBPG /* default message buffer size */
20#endif 27#endif
21 28
22/* 29/*
23 * Round p (pointer or byte index) up to a correctly-aligned value for all 30 * Round p (pointer or byte index) up to a correctly-aligned value for all
24 * data types (int, long, ...). The result is u_int and must be cast to 31 * data types (int, long, ...). The result is u_int and must be cast to
25 * any desired pointer type. 32 * any desired pointer type.
26 * 33 *
27 * ALIGNED_POINTER is a boolean macro that checks whether an address 34 * ALIGNED_POINTER is a boolean macro that checks whether an address
28 * is valid to fetch data elements of type t from on this architecture. 35 * is valid to fetch data elements of type t from on this architecture.
29 * This does not reflect the optimal alignment, just the possibility 36 * This does not reflect the optimal alignment, just the possibility
30 * (within reasonable limits). 37 * (within reasonable limits).
31 * 38 *
32 */ 39 */
33#define ALIGNBYTES 7 40#define ALIGNBYTES 7
34#define ALIGN(p) (((uintptr_t)(p) + ALIGNBYTES) & ~ALIGNBYTES) 41#define ALIGN(p) (((uintptr_t)(p) + ALIGNBYTES) & ~ALIGNBYTES)
35#define ALIGNED_POINTER(p,t) ((((uintptr_t)(p)) & (sizeof(t)-1)) == 0) 42#define ALIGNED_POINTER(p,t) ((((uintptr_t)(p)) & (sizeof(t)-1)) == 0)
36 43
 44#ifdef ENABLE_MIPS_16KB_PAGE
 45#define NBPG 16384 /* bytes/page */
 46#define PGSHIFT 14 /* LOG2(NBPG) */
 47#else
37#define NBPG 4096 /* bytes/page */ 48#define NBPG 4096 /* bytes/page */
38#define PGOFSET (NBPG-1) /* byte offset into page */ 
39#define PGSHIFT 12 /* LOG2(NBPG) */ 49#define PGSHIFT 12 /* LOG2(NBPG) */
 50#endif
 51#define PGOFSET (NBPG-1) /* byte offset into page */
40#define NPTEPG (NBPG/4) 52#define NPTEPG (NBPG/4)
41 53
42#define NBSEG 0x400000 /* bytes/segment */ 54#define NBSEG (NBPG*NPTEPG) /* bytes/segment */
43#define SEGOFSET (NBSEG-1) /* byte offset into segment */ 55#define SEGOFSET (NBSEG-1) /* byte offset into segment */
44#define SEGSHIFT 22 /* LOG2(NBSEG) */ 56#define SEGSHIFT (2*PGSHIFT-2) /* LOG2(NBSEG) */
45 57
46/* 58/*
47 * Minimum and maximum sizes of the kernel malloc arena in PAGE_SIZE-sized 59 * Minimum and maximum sizes of the kernel malloc arena in PAGE_SIZE-sized
48 * logical pages. 60 * logical pages.
49 */ 61 */
50#define NKMEMPAGES_MIN_DEFAULT ((8 * 1024 * 1024) >> PAGE_SHIFT) 62#define NKMEMPAGES_MIN_DEFAULT ((8 * 1024 * 1024) >> PAGE_SHIFT)
51#define NKMEMPAGES_MAX_DEFAULT ((128 * 1024 * 1024) >> PAGE_SHIFT) 63#define NKMEMPAGES_MAX_DEFAULT ((128 * 1024 * 1024) >> PAGE_SHIFT)
52 64
53/* 65/*
54 * Mach derived conversion macros 66 * Mach derived conversion macros
55 */ 67 */
56#define mips_round_page(x) ((((uintptr_t)(x)) + NBPG - 1) & ~(NBPG-1)) 68#define mips_round_page(x) ((((uintptr_t)(x)) + NBPG - 1) & ~(NBPG-1))
57#define mips_trunc_page(x) ((uintptr_t)(x) & ~(NBPG-1)) 69#define mips_trunc_page(x) ((uintptr_t)(x) & ~(NBPG-1))
58#define mips_btop(x) ((paddr_t)(x) >> PGSHIFT) 70#define mips_btop(x) ((paddr_t)(x) >> PGSHIFT)
59#define mips_ptob(x) ((paddr_t)(x) << PGSHIFT) 71#define mips_ptob(x) ((paddr_t)(x) << PGSHIFT)

cvs diff -r1.42 -r1.43 src/sys/arch/mips/include/vmparam.h (switch to unified diff)

--- src/sys/arch/mips/include/vmparam.h 2009/03/06 20:31:50 1.42
+++ src/sys/arch/mips/include/vmparam.h 2009/08/09 04:02:40 1.43
@@ -1,177 +1,183 @@ @@ -1,177 +1,183 @@
1/* $NetBSD: vmparam.h,v 1.42 2009/03/06 20:31:50 joerg Exp $ */ 1/* $NetBSD: vmparam.h,v 1.43 2009/08/09 04:02:40 matt Exp $ */
2 2
3/* 3/*
4 * Copyright (c) 1992, 1993 4 * Copyright (c) 1992, 1993
5 * The Regents of the University of California. All rights reserved. 5 * The Regents of the University of California. All rights reserved.
6 * 6 *
7 * This code is derived from software contributed to Berkeley by 7 * This code is derived from software contributed to Berkeley by
8 * the Systems Programming Group of the University of Utah Computer 8 * the Systems Programming Group of the University of Utah Computer
9 * Science Department and Ralph Campbell. 9 * Science Department and Ralph Campbell.
10 * 10 *
11 * Redistribution and use in source and binary forms, with or without 11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions 12 * modification, are permitted provided that the following conditions
13 * are met: 13 * are met:
14 * 1. Redistributions of source code must retain the above copyright 14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions and the following disclaimer. 15 * notice, this list of conditions and the following disclaimer.
16 * 2. Redistributions in binary form must reproduce the above copyright 16 * 2. Redistributions in binary form must reproduce the above copyright
17 * notice, this list of conditions and the following disclaimer in the 17 * notice, this list of conditions and the following disclaimer in the
18 * documentation and/or other materials provided with the distribution. 18 * documentation and/or other materials provided with the distribution.
19 * 3. Neither the name of the University nor the names of its contributors 19 * 3. Neither the name of the University nor the names of its contributors
20 * may be used to endorse or promote products derived from this software 20 * may be used to endorse or promote products derived from this software
21 * without specific prior written permission. 21 * without specific prior written permission.
22 * 22 *
23 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 23 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 26 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33 * SUCH DAMAGE. 33 * SUCH DAMAGE.
34 * 34 *
35 * from: Utah Hdr: vmparam.h 1.16 91/01/18 35 * from: Utah Hdr: vmparam.h 1.16 91/01/18
36 * 36 *
37 * @(#)vmparam.h 8.2 (Berkeley) 4/22/94 37 * @(#)vmparam.h 8.2 (Berkeley) 4/22/94
38 */ 38 */
39/* 39/*
40 * Copyright (c) 1988 University of Utah. 40 * Copyright (c) 1988 University of Utah.
41 * 41 *
42 * This code is derived from software contributed to Berkeley by 42 * This code is derived from software contributed to Berkeley by
43 * the Systems Programming Group of the University of Utah Computer 43 * the Systems Programming Group of the University of Utah Computer
44 * Science Department and Ralph Campbell. 44 * Science Department and Ralph Campbell.
45 * 45 *
46 * Redistribution and use in source and binary forms, with or without 46 * Redistribution and use in source and binary forms, with or without
47 * modification, are permitted provided that the following conditions 47 * modification, are permitted provided that the following conditions
48 * are met: 48 * are met:
49 * 1. Redistributions of source code must retain the above copyright 49 * 1. Redistributions of source code must retain the above copyright
50 * notice, this list of conditions and the following disclaimer. 50 * notice, this list of conditions and the following disclaimer.
51 * 2. Redistributions in binary form must reproduce the above copyright 51 * 2. Redistributions in binary form must reproduce the above copyright
52 * notice, this list of conditions and the following disclaimer in the 52 * notice, this list of conditions and the following disclaimer in the
53 * documentation and/or other materials provided with the distribution. 53 * documentation and/or other materials provided with the distribution.
54 * 3. All advertising materials mentioning features or use of this software 54 * 3. All advertising materials mentioning features or use of this software
55 * must display the following acknowledgement: 55 * must display the following acknowledgement:
56 * This product includes software developed by the University of 56 * This product includes software developed by the University of
57 * California, Berkeley and its contributors. 57 * California, Berkeley and its contributors.
58 * 4. Neither the name of the University nor the names of its contributors 58 * 4. Neither the name of the University nor the names of its contributors
59 * may be used to endorse or promote products derived from this software 59 * may be used to endorse or promote products derived from this software
60 * without specific prior written permission. 60 * without specific prior written permission.
61 * 61 *
62 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 62 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
63 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 63 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
64 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 64 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
65 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 65 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
66 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 66 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
67 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 67 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
68 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 68 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
69 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 69 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
70 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 70 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
71 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 71 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
72 * SUCH DAMAGE. 72 * SUCH DAMAGE.
73 * 73 *
74 * from: Utah Hdr: vmparam.h 1.16 91/01/18 74 * from: Utah Hdr: vmparam.h 1.16 91/01/18
75 * 75 *
76 * @(#)vmparam.h 8.2 (Berkeley) 4/22/94 76 * @(#)vmparam.h 8.2 (Berkeley) 4/22/94
77 */ 77 */
78 78
79#ifndef _MIPS_VMPARAM_H_ 79#ifndef _MIPS_VMPARAM_H_
80#define _MIPS_VMPARAM_H_ 80#define _MIPS_VMPARAM_H_
81 81
82/* 82/*
83 * Machine dependent VM constants for MIPS. 83 * Machine dependent VM constants for MIPS.
84 */ 84 */
85 85
86/* 86/*
87 * We use a 4K page on MIPS systems. Override PAGE_* definitions 87 * We normally use a 4K page but may use 16K on MIPS systems.
88 * to compile-time constants. 88 * Override PAGE_* definitions to compile-time constants.
89 */ 89 */
 90#ifdef ENABLE_MIPS_16KB_PAGE
 91#define PAGE_SHIFT 14
 92#elif defined(ENABLE_MIPS_4KB_PAGE) || 1
90#define PAGE_SHIFT 12 93#define PAGE_SHIFT 12
 94#else
 95#error ENABLE_MIPS_xKB_PAGE not defined
 96#endif
91#define PAGE_SIZE (1 << PAGE_SHIFT) 97#define PAGE_SIZE (1 << PAGE_SHIFT)
92#define PAGE_MASK (PAGE_SIZE - 1) 98#define PAGE_MASK (PAGE_SIZE - 1)
93 99
94/* 100/*
95 * USRSTACK is the top (end) of the user stack. 101 * USRSTACK is the top (end) of the user stack.
96 * 102 *
97 * USRSTACK needs to start a little below 0x8000000 because the R8000 103 * USRSTACK needs to start a little below 0x8000000 because the R8000
98 * and some QED CPUs perform some virtual address checks before the 104 * and some QED CPUs perform some virtual address checks before the
99 * offset is calculated. 105 * offset is calculated.
100 */ 106 */
101#define USRSTACK 0x7ffff000 /* Start of user stack */ 107#define USRSTACK (0x7fffffff & ~PAGE_MASK) /* Start of user stack */
102 108
103/* alignment requirement for u-area space in bytes */ 109/* alignment requirement for u-area space in bytes */
104#define USPACE_ALIGN USPACE 110#define USPACE_ALIGN USPACE
105 111
106/* 112/*
107 * Virtual memory related constants, all in bytes 113 * Virtual memory related constants, all in bytes
108 */ 114 */
109#ifndef MAXTSIZ 115#ifndef MAXTSIZ
110#define MAXTSIZ (64*1024*1024) /* max text size */ 116#define MAXTSIZ (64*1024*1024) /* max text size */
111#endif 117#endif
112#ifndef DFLDSIZ 118#ifndef DFLDSIZ
113#define DFLDSIZ (128*1024*1024) /* initial data size limit */ 119#define DFLDSIZ (128*1024*1024) /* initial data size limit */
114#endif 120#endif
115#ifndef MAXDSIZ 121#ifndef MAXDSIZ
116#define MAXDSIZ (512*1024*1024) /* max data size */ 122#define MAXDSIZ (512*1024*1024) /* max data size */
117#endif 123#endif
118#ifndef DFLSSIZ 124#ifndef DFLSSIZ
119#define DFLSSIZ (2*1024*1024) /* initial stack size limit */ 125#define DFLSSIZ (2*1024*1024) /* initial stack size limit */
120#endif 126#endif
121#ifndef MAXSSIZ 127#ifndef MAXSSIZ
122#define MAXSSIZ (32*1024*1024) /* max stack size */ 128#define MAXSSIZ (32*1024*1024) /* max stack size */
123#endif 129#endif
124 130
125/* 131/*
126 * PTEs for mapping user space into the kernel for phyio operations. 132 * PTEs for mapping user space into the kernel for phyio operations.
127 * The default PTE number is enough to cover 8 disks * MAXBSIZE. 133 * The default PTE number is enough to cover 8 disks * MAXBSIZE.
128 */ 134 */
129#ifndef USRIOSIZE 135#ifndef USRIOSIZE
130#define USRIOSIZE (MAXBSIZE/PAGE_SIZE * 8) 136#define USRIOSIZE (MAXBSIZE/PAGE_SIZE * 8)
131#endif 137#endif
132 138
133/* 139/*
134 * Mach derived constants 140 * Mach derived constants
135 */ 141 */
136 142
137/* user/kernel map constants */ 143/* user/kernel map constants */
138#define VM_MIN_ADDRESS ((vaddr_t)0x00000000) 144#define VM_MIN_ADDRESS ((vaddr_t)0x00000000)
139#define VM_MAXUSER_ADDRESS ((vaddr_t)0x80000000) 145#define VM_MAXUSER_ADDRESS ((vaddr_t)0x80000000)
140#define VM_MAX_ADDRESS ((vaddr_t)0x80000000) 146#define VM_MAX_ADDRESS ((vaddr_t)0x80000000)
141#define VM_MIN_KERNEL_ADDRESS ((vaddr_t)0xC0000000) 147#define VM_MIN_KERNEL_ADDRESS ((vaddr_t)0xC0000000)
142#ifdef ENABLE_MIPS_TX3900 148#ifdef ENABLE_MIPS_TX3900
143#define VM_MAX_KERNEL_ADDRESS ((vaddr_t)0xFF000000) 149#define VM_MAX_KERNEL_ADDRESS ((vaddr_t)0xFF000000)
144#else 150#else
145#define VM_MAX_KERNEL_ADDRESS ((vaddr_t)0xFFFFC000) 151#define VM_MAX_KERNEL_ADDRESS ((vaddr_t)0xFFFFC000)
146#endif 152#endif
147 153
148/* 154/*
149 * The address to which unspecified mapping requests default 155 * The address to which unspecified mapping requests default
150 */ 156 */
151#define __USE_TOPDOWN_VM 157#define __USE_TOPDOWN_VM
152#define VM_DEFAULT_ADDRESS(da, sz) \ 158#define VM_DEFAULT_ADDRESS(da, sz) \
153 trunc_page(USRSTACK - MAXSSIZ - (sz)) 159 trunc_page(USRSTACK - MAXSSIZ - (sz))
154 160
155/* virtual sizes (bytes) for various kernel submaps */ 161/* virtual sizes (bytes) for various kernel submaps */
156#define VM_PHYS_SIZE (USRIOSIZE*PAGE_SIZE) 162#define VM_PHYS_SIZE (USRIOSIZE*PAGE_SIZE)
157 163
158/* VM_PHYSSEG_MAX defined by platform-dependent code. */ 164/* VM_PHYSSEG_MAX defined by platform-dependent code. */
159#define VM_PHYSSEG_STRAT VM_PSTRAT_BSEARCH 165#define VM_PHYSSEG_STRAT VM_PSTRAT_BSEARCH
160#define VM_PHYSSEG_NOADD /* can add RAM after vm_mem_init */ 166#define VM_PHYSSEG_NOADD /* can add RAM after vm_mem_init */
161 167
162#define __HAVE_VM_PAGE_MD 168#define __HAVE_VM_PAGE_MD
163 169
164/* 170/*
165 * pmap-specific data stored in the vm_page structure. 171 * pmap-specific data stored in the vm_page structure.
166 */ 172 */
167struct vm_page_md { 173struct vm_page_md {
168 struct pv_entry *pvh_list; /* pv_entry list */ 174 struct pv_entry *pvh_list; /* pv_entry list */
169 u_int pvh_attrs; /* page attributes */ 175 u_int pvh_attrs; /* page attributes */
170}; 176};
171 177
172#define VM_MDPAGE_INIT(pg) \ 178#define VM_MDPAGE_INIT(pg) \
173do { \ 179do { \
174 (pg)->mdpage.pvh_list = NULL; \ 180 (pg)->mdpage.pvh_list = NULL; \
175} while (/* CONSTCOND */ 0) 181} while (/* CONSTCOND */ 0)
176 182
177#endif /* ! _MIPS_VMPARAM_H_ */ 183#endif /* ! _MIPS_VMPARAM_H_ */