|
|
1.1 root 1: /*
2: * Copyright (c) 1988 University of Utah.
3: * Copyright (c) 1982, 1986, 1990 The Regents of the University of California.
4: * All rights reserved.
5: *
6: * This code is derived from software contributed to Berkeley by
7: * the Systems Programming Group of the University of Utah Computer
8: * Science Department.
9: *
10: * Redistribution is only permitted until one year after the first shipment
11: * of 4.4BSD by the Regents. Otherwise, redistribution and use in source and
12: * binary forms are permitted provided that: (1) source distributions retain
13: * this entire copyright notice and comment, and (2) distributions including
14: * binaries display the following acknowledgement: This product includes
15: * software developed by the University of California, Berkeley and its
16: * contributors'' in the documentation or other materials provided with the
17: * distribution and in all advertising materials mentioning features or use
18: * of this software. Neither the name of the University nor the names of
19: * its contributors may be used to endorse or promote products derived from
20: * this software without specific prior written permission.
21: * THIS SOFTWARE IS PROVIDED AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
22: * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
23: * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
24: *
25: * from: Utah $Hdr: pte.h 1.11 89/09/03$
26: *
27: * @(#)pte.h 7.1 (Berkeley) 5/8/90
28: */
29:
30: /*
31: * HP300 page table entry
32: *
33: * There are two major kinds of pte's: those which have ever existed (and are
34: * thus either now in core or on the swap device), and those which have
35: * never existed, but which will be filled on demand at first reference.
36: * There is a structure describing each. There is also an ancillary
37: * structure used in page clustering.
38: */
39:
40: #ifndef LOCORE
41: struct ste
42: {
43: unsigned int sg_pfnum:20, /* page table frame number */
44: :8, /* reserved at 0 */
45: :1, /* reserved at 1 */
46: sg_prot:1, /* write protect bit */
47: sg_v:2; /* valid bits */
48: };
49:
50: struct pte
51: {
52: unsigned int pg_pfnum:20, /* page frame number or 0 */
53: :3,
54: pg_fod:1, /* is fill on demand (=0) */
55: :1, /* reserved at zero */
56: pg_ci:1, /* cache inhibit bit */
57: :1, /* reserved at zero */
58: pg_m:1, /* hardware modified (dirty) bit */
59: pg_u:1, /* hardware used (reference) bit */
60: pg_prot:1, /* write protect bit */
61: pg_v:2; /* valid bit */
62: };
63:
64: /* not used */
65: struct hpte
66: {
67: unsigned int pg_pfnum:20,
68: pg_high:12; /* special for clustering */
69: };
70:
71: struct fpte
72: {
73: unsigned int pg_blkno:22, /* file system block number */
74: pg_fileno:1, /* file mapped from or TEXT or ZERO */
75: pg_fod:1, /* is fill on demand (=1) */
76: :6,
77: pg_v:2;
78: };
79: #endif
80:
81: #define SG_V 0x00000002
82: #define SG_NV 0x00000000
83: #define SG_PROT 0x00000004
84: #define SG_RO 0x00000004
85: #define SG_RW 0x00000000
86: #define SG_FRAME 0xfffff000
87: #define SG_IMASK 0xffc00000
88: #define SG_PMASK 0x003ff000
89: #define SG_ISHIFT 22
90: #define SG_PSHIFT 12
91:
92: #define PG_V 0x00000001
93: #define PG_NV 0x00000000
94: #define PG_PROT 0x00000004
95: #define PG_U 0x00000008
96: #define PG_M 0x00000010
97: #define PG_FOD 0x00000100
98: #define PG_RO 0x00000004
99: #define PG_RW 0x00000000
100: #define PG_FRAME 0xfffff000
101: #define PG_CI 0x00000040
102: #define PG_PFNUM(x) (((x) & PG_FRAME) >> PGSHIFT)
103:
104: /*
105: * Pseudo protections.
106: * Note that PG_URKW is not defined intuitively, but it is currently only
107: * used in vgetu() to initialize the u-area PTEs in the process address
108: * space. Since the kernel never accesses the u-area thru these we are ok.
109: */
110: #define PG_KW PG_RW
111: #define PG_URKR PG_RO
112: #define PG_URKW PG_RO
113: #define PG_UW PG_RW
114:
115: #define PG_FZERO 0
116: #define PG_FTEXT 1
117: #define PG_FMAX (PG_FTEXT)
118:
119: /*
120: * Pte related macros
121: */
122: #define dirty(pte) ((pte)->pg_m)
123:
124: /*
125: * Kernel virtual address to page table entry and to physical address.
126: */
127: #define kvtopte(va) (&Sysmap[((unsigned)(va) &~ KERNBASE) >> PGSHIFT])
128: #define ptetokv(pt) ((((struct pte *)(pt) - Sysmap) << PGSHIFT) | KERNBASE)
129: #define kvtophys(x) ((kvtopte(x)->pg_pfnum << PGSHIFT) | ((int)(x) & PGOFSET))
130:
131: #if defined(KERNEL) && !defined(LOCORE)
132: /* utilities defined in locore.s */
133: extern struct pte Sysmap[];
134: extern struct pte Usrptmap[];
135: extern struct pte usrpt[];
136: extern struct pte Swapmap[];
137: extern struct pte Forkmap[];
138: extern struct pte Xswapmap[];
139: extern struct pte Xswap2map[];
140: extern struct pte Pushmap[];
141: extern struct pte Vfmap[];
142: extern struct pte mmap[];
143: extern struct pte msgbufmap[];
144: extern struct pte kmempt[], ekmempt[];
145: extern struct ste Sysseg[];
146: #endif /* defined(KERNEL) && !defined(LOCORE) */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.