|
|
1.1 root 1: /* @(#)pte.h 1.1 86/02/03 SMI */
2:
3: /*
4: * Copyright (c) 1985 by Sun Microsystems, Inc.
5: */
6:
7: /*
8: * Sun 3 hardware page table entry
9: *
10: * There are two major kinds of pte's: those which have ever existed (and are
11: * thus either now in core or on the swap device), and those which have
12: * never existed, but which will be filled on demand at first reference.
13: * There is a structure describing each.
14: * Note that (pg_v && pg_fod) indicates a special (eg, mmapped) page:
15: * it is not paged out (not dirty), nor filled in (still valid).
16: */
17:
18: #ifndef LOCORE
19: struct pte {
20: unsigned int pg_v:1; /* valid bit */
21: unsigned int pg_prot:2; /* access protection */
22: unsigned int pg_nc:1; /* no cache bit */
23: unsigned int pg_type:2; /* page type */
24: unsigned int pg_r:1; /* referenced */
25: unsigned int pg_m:1; /* modified */
26: unsigned int :3;
27: unsigned int pg_fod:1; /* is fill on demand (=0) */
28: unsigned int :1;
29: unsigned int pg_pfnum:19; /* page frame number */
30: };
31:
32: struct fpte {
33: unsigned int pg_v:1; /* valid bit */
34: unsigned int pg_prot:2; /* access protection */
35: unsigned int pg_nc:1; /* no cache bit */
36: unsigned int pg_type:2; /* page type */
37: unsigned int pg_source:5; /* file mapped from or TEXT or ZERO */
38: unsigned int pg_fod:1; /* is fill on demand (=1) */
39: unsigned int pg_blkno:20; /* file system block number */
40: };
41: #endif
42:
43: #define PG_V 0x80000000 /* page is valid */
44: #define PG_PROT 0x60000000 /* access protection mask */
45: #define PG_W 0x40000000 /* write enable bit */
46: #define PG_S 0x20000000 /* system page */
47: #define PG_NC 0x10000000 /* no cache bit */
48: #define PG_TYPE 0x0C000000 /* page type mask */
49: #define PG_R 0x02000000 /* page referenced bit */
50: #define PG_M 0x01000000 /* page modified bit */
51: #define PG_FOD 0x00100000 /* page fill-on-demand bit */
52: #define PG_PFNUM 0x0C07FFFF /* page # mask - XXX includes type */
53:
54: #define PG_FMIN (NOFILE)
55: #define PG_FZERO (NOFILE)
56: #define PG_FTEXT (NOFILE+1)
57: #define PG_FMAX (PG_FTEXT)
58:
59: #define PG_KW (PG_S|PG_W)
60: #define PG_KR PG_S
61: #define PG_UW PG_W /* kernel can still access */
62: #define PG_UWKW PG_UW
63: #define PG_UR 0 /* kernel can still access */
64: #define PG_URKR PG_UR
65: #define PG_UPAGE PG_KW /* sun3 u pages not user accessable */
66:
67: #define PGT_MASK (3<<26)
68:
69: #define PGT_OBMEM (0<<26) /* onboard memory */
70: #define PGT_OBIO (1<<26) /* onboard I/O */
71: #define PGT_VME_D16 (2<<26) /* VMEbus 16-bit data */
72: #define PGT_VME_D32 (3<<26) /* VMEbus 32-bit data */
73:
74: /*
75: * Pte related macros
76: */
77: #define dirty(pte) ((pte)->pg_fod == 0 && (pte)->pg_pfnum && (pte)->pg_m)
78:
79: #if defined(KERNEL) && !defined(LOCORE)
80: struct pte *vtopte();
81:
82: /* utilities defined in locore.s */
83: extern struct pte Sysmap[];
84: extern struct pte Usrptmap[];
85: extern struct pte usrpt[];
86: extern struct pte Swapmap[];
87: extern struct pte Forkmap[];
88: extern struct pte Xswapmap[];
89: extern struct pte Xswap2map[];
90: extern struct pte Pushmap[];
91: extern struct pte Vfmap[];
92: extern struct pte mmap[];
93: extern struct pte msgbufmap[];
94: extern struct pte CMAP1[];
95: extern struct pte CMAP2[];
96: extern struct pte Prusrmap[];
97: #endif defined(KERNEL) && !defined(LOCORE)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.