|
|
1.1 root 1: /*
2: * Copyright (c) 1988 Regents of the University of California.
3: * All rights reserved. The Berkeley software License Agreement
4: * specifies the terms and conditions for redistribution.
5: *
6: * @(#)pte.h 7.3 (Berkeley) 8/31/89
7: */
8:
9: /*
10: * Tahoe page table entry
11: *
12: * There are two major kinds of pte's: those which have ever existed (and are
13: * thus either now in core or on the swap device), and those which have
14: * never existed, but which will be filled on demand at first reference.
15: * There is a structure describing each. There is also an ancillary
16: * structure used in page clustering.
17: */
18:
19: #ifndef LOCORE
20: struct pte
21: {
22: unsigned int
23: pg_v:1, /* valid bit */
24: pg_prot:4, /* access control */
25: pg_fod:1, /* is fill on demand (=0) */
26: :1, /* must write back to swap (unused) */
27: pg_nc:1, /* 'uncacheable page' bit */
28: pg_m:1, /* hardware maintained modified bit */
29: pg_u:1, /* hardware maintained 'used' bit */
30: pg_pfnum:22; /* core page frame number or 0 */
31: };
32: struct hpte
33: {
34: unsigned int
35: pg_high:10, /* special for clustering */
36: pg_pfnum:22;
37: };
38: struct fpte
39: {
40: unsigned int
41: pg_v:1,
42: pg_prot:4,
43: pg_fod:1, /* is fill on demand (=1) */
44: :1,
45: pg_fileno:1, /* file mapped from or TEXT or ZERO */
46: pg_blkno:24; /* file system block number */
47: };
48: #endif
49:
50: #define PG_V 0x80000000
51: #define PG_PROT 0x78000000 /* all protection bits (dorit). */
52: #define PG_FOD 0x04000000
53: #define PG_SWAPM 0x02000000
54: #define PG_N 0x01000000 /* Non-cacheable */
55: #define PG_M 0x00800000
56: #define PG_U 0x00400000
57: #define PG_PFNUM 0x003fffff
58:
59: #define PG_FZERO 0
60: #define PG_FTEXT 1
61: #define PG_FMAX (PG_FTEXT)
62:
63: #define PG_NOACC 0
64: #define PG_KR 0x40000000
65: #define PG_KW 0x60000000
66: #define PG_URKR 0x50000000
67: #define PG_URKW 0x70000000
68: #define PG_UW 0x78000000
69:
70: /*
71: * Pte related macros
72: */
73: #define dirty(pte) ((pte)->pg_m)
74:
75: /*
76: * Kernel virtual address to page table entry and to physical address.
77: */
78: #define kvtopte(va) (&Sysmap[((int)(va) &~ KERNBASE) >> PGSHIFT])
79: #define kvtophys(x) ((kvtopte(x)->pg_pfnum << PGSHIFT) | ((int)(x) & PGOFSET))
80:
81: #ifndef LOCORE
82: #ifdef KERNEL
83: /* utilities defined in locore.s */
84: extern struct pte Sysmap[];
85: extern struct pte Usrptmap[];
86: extern struct pte usrpt[];
87: extern struct pte Swapmap[];
88: extern struct pte Forkmap[];
89: extern struct pte Xswapmap[];
90: extern struct pte Xswap2map[];
91: extern struct pte Pushmap[];
92: extern struct pte Vfmap[];
93: extern struct pte mmap[];
94: extern struct pte msgbufmap[];
95: extern struct pte kmempt[], ekmempt[];
96: #ifdef NFS
97: extern struct pte Nfsiomap[];
98: #endif
99: #ifdef MFS
100: extern struct pte Mfsiomap[];
101: #endif
102: #endif
103: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.