| 1 | /* pte.h 4.9 81/05/14 */ |
| 2 | |
| 3 | /* |
| 4 | * VAX page table entry |
| 5 | * |
| 6 | * There are two major kinds of pte's: those which have ever existed (and are |
| 7 | * thus either now in core or on the swap device), and those which have |
| 8 | * never existed, but which will be filled on demand at first reference. |
| 9 | * There is a structure describing each. There is also an ancillary |
| 10 | * structure used in page clustering. |
| 11 | */ |
| 12 | |
| 13 | #ifndef LOCORE |
| 14 | struct pte |
| 15 | { |
| 16 | unsigned int pg_pfnum:21, /* core page frame number or 0 */ |
| 17 | :2, |
| 18 | pg_vreadm:1, /* modified since vread (or with _m) */ |
| 19 | pg_swapm:1, /* have to write back to swap */ |
| 20 | pg_fod:1, /* is fill on demand (=0) */ |
| 21 | pg_m:1, /* hardware maintained modified bit */ |
| 22 | pg_prot:4, /* access control */ |
| 23 | pg_v:1; /* valid bit */ |
| 24 | }; |
| 25 | struct hpte |
| 26 | { |
| 27 | unsigned int pg_pfnum:21, |
| 28 | :2, |
| 29 | pg_high:9; /* special for clustering */ |
| 30 | }; |
| 31 | struct fpte |
| 32 | { |
| 33 | unsigned int pg_blkno:20, /* file system block number */ |
| 34 | pg_fileno:5, /* file mapped from or TEXT or ZERO */ |
| 35 | pg_fod:1, /* is fill on demand (=1) */ |
| 36 | :1, |
| 37 | pg_prot:4, |
| 38 | pg_v:1; |
| 39 | }; |
| 40 | #endif |
| 41 | |
| 42 | #define PG_V 0x80000000 |
| 43 | #define PG_PROT 0x78000000 |
| 44 | #define PG_M 0x04000000 |
| 45 | #define PG_FOD 0x02000000 |
| 46 | #define PG_VREADM 0x00800000 |
| 47 | #define PG_PFNUM 0x001fffff |
| 48 | |
| 49 | #define PG_FZERO (NOFILE) |
| 50 | #define PG_FTEXT (NOFILE+1) |
| 51 | #define PG_FMAX (PG_FTEXT) |
| 52 | |
| 53 | #define PG_NOACC 0 |
| 54 | #define PG_KW 0x10000000 |
| 55 | #define PG_KR 0x18000000 |
| 56 | #define PG_UW 0x20000000 |
| 57 | #define PG_URKW 0x70000000 |
| 58 | #define PG_URKR 0x78000000 |
| 59 | |
| 60 | /* |
| 61 | * Pte related macros |
| 62 | */ |
| 63 | #define dirty(pte) ((pte)->pg_fod == 0 && (pte)->pg_pfnum && \ |
| 64 | ((pte)->pg_m || (pte)->pg_swapm)) |
| 65 | |
| 66 | #ifndef LOCORE |
| 67 | #ifdef KERNEL |
| 68 | struct pte *vtopte(); |
| 69 | |
| 70 | /* utilities defined in locore.s */ |
| 71 | extern struct pte Sysmap[]; |
| 72 | extern struct pte Usrptmap[]; |
| 73 | extern struct pte usrpt[]; |
| 74 | extern struct pte Swapmap[]; |
| 75 | extern struct pte Forkmap[]; |
| 76 | extern struct pte Xswapmap[]; |
| 77 | extern struct pte Xswap2map[]; |
| 78 | extern struct pte Pushmap[]; |
| 79 | extern struct pte Vfmap[]; |
| 80 | extern struct pte mmap[]; |
| 81 | extern struct pte msgbufmap[]; |
| 82 | extern struct pte camap[]; |
| 83 | extern struct pte Nexmap[][16]; |
| 84 | #endif |
| 85 | #endif |