1 /* pte.h 3.3 08/27/80 */ 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 struct pte 14 { 15 unsigned int pg_pfnum:21, /* core page frame number or 0 */ 16 :2, 17 pg_vreadm:1, /* modified since vread (or with _m) */ 18 pg_swapm:1, /* have to write back to swap */ 19 pg_fod:1, /* is fill on demand (=0) */ 20 pg_m:1, /* hardware maintained modified bit */ 21 pg_prot:4, /* access control */ 22 pg_v:1; /* valid bit */ 23 }; 24 struct hpte 25 { 26 unsigned int pg_pfnum:21, 27 :2, 28 pg_high:9; /* special for clustering */ 29 }; 30 struct fpte 31 { 32 unsigned int pg_blkno:20, /* file system block number */ 33 pg_fileno:5, /* file mapped from or TEXT or ZERO */ 34 pg_fod:1, /* is fill on demand (=1) */ 35 :1, 36 pg_prot:4, 37 pg_v:1; 38 }; 39 40 #define PG_V 0x80000000 41 #define PG_PROT 0x78000000 42 #define PG_M 0x04000000 43 #define PG_VREADM 0x00800000 44 #define PG_PFNUM 0x001fffff 45 46 #define PG_FZERO (NOFILE) 47 #define PG_FTEXT (NOFILE+1) 48 #define PG_FMAX (PG_FTEXT) 49 50 #define PG_NOACC 0 51 #define PG_KW 0x10000000 52 #define PG_KR 0x18000000 53 #define PG_UW 0x20000000 54 #define PG_URKW 0x70000000 55 #define PG_URKR 0x78000000 56 57 /* 58 * Pte related macros 59 */ 60 #define dirty(pte) ((pte)->pg_fod == 0 && (pte)->pg_pfnum && \ 61 ((pte)->pg_m || (pte)->pg_swapm)) 62 63 #ifdef KERNEL 64 struct pte *vtopte(); 65 66 /* utilities defined in locore.s */ 67 extern struct pte Sysmap[]; 68 extern struct pte Usrptmap[]; 69 extern struct pte usrpt[]; 70 extern struct pte Swapmap[]; 71 extern struct pte Forkmap[]; 72 extern struct pte Xswapmap[]; 73 extern struct pte Xswap2map[]; 74 extern struct pte Pushmap[]; 75 extern struct pte Vfmap[]; 76 extern struct pte mmap[]; 77 extern struct pte mcrmap[]; 78 extern struct pte bufmap[]; 79 #endif 80