|
|
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.