|
|
1.1 root 1: /*
2: * Copyright (c) 1982, 1986 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.4 (Berkeley) 5/2/88
7: */
8:
9: /*
10: * VAX 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 pg_pfnum:21, /* core page frame number or 0 */
23: :2,
24: pg_vreadm:1, /* modified since vread (or with _m) */
25: :1,
26: pg_fod:1, /* is fill on demand (=0) */
27: pg_m:1, /* hardware maintained modified bit */
28: pg_prot:4, /* access control */
29: pg_v:1; /* valid bit */
30: };
31: struct hpte
32: {
33: unsigned int pg_pfnum:21,
34: :2,
35: pg_high:9; /* special for clustering */
36: };
37: struct fpte
38: {
39: unsigned int pg_blkno:24, /* file system block number */
40: pg_fileno:1, /* file mapped from or TEXT or ZERO */
41: pg_fod:1, /* is fill on demand (=1) */
42: :1,
43: pg_prot:4,
44: pg_v:1;
45: };
46: #endif
47:
48: #define PG_V 0x80000000
49: #define PG_PROT 0x78000000
50: #define PG_M 0x04000000
51: #define PG_FOD 0x02000000
52: #define PG_VREADM 0x00800000
53: #define PG_PFNUM 0x001fffff
54:
55: #define PG_FZERO 0
56: #define PG_FTEXT 1
57: #define PG_FMAX (PG_FTEXT)
58:
59: #define PG_NOACC 0
60: #define PG_KW 0x10000000
61: #define PG_KR 0x18000000
62: #define PG_UW 0x20000000
63: #define PG_URKW 0x70000000
64: #define PG_URKR 0x78000000
65:
66: /*
67: * Pte related macros
68: */
69: #define dirty(pte) ((pte)->pg_m)
70:
71: /*
72: * Kernel virtual address to page table entry and to physical address.
73: */
74: #define kvtopte(va) (&Sysmap[((unsigned)(va) &~ KERNBASE) >> PGSHIFT])
75: #define kvtophys(x) ((kvtopte(x)->pg_pfnum << PGSHIFT) | ((int)(x) & PGOFSET))
76:
77: #if defined(KERNEL) && !defined(LOCORE)
78: /* utilities defined in locore.s */
79: extern struct pte Sysmap[];
80: extern struct pte Usrptmap[];
81: extern struct pte usrpt[];
82: extern struct pte Swapmap[];
83: extern struct pte Forkmap[];
84: extern struct pte Xswapmap[];
85: extern struct pte Xswap2map[];
86: extern struct pte Pushmap[];
87: extern struct pte Vfmap[];
88: extern struct pte mmap[];
89: extern struct pte msgbufmap[];
90: extern struct pte kmempt[], ekmempt[];
91: extern struct pte Nexmap[][16];
92: #if VAX8600
93: extern struct pte Ioamap[][1];
94: #endif
95: #endif /* defined(KERNEL) && !defined(LOCORE) */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.