| @@ -1,57 +1,69 @@ | | | @@ -1,57 +1,69 @@ |
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)) |