|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1988 Regents of the University of California. ! 3: * All rights reserved. The Berkeley software License Agreement ! 4: * specifies the terms and conditions for redistribution. ! 5: * ! 6: * @(#)pte.h 7.3 (Berkeley) 8/31/89 ! 7: */ ! 8: ! 9: /* ! 10: * Tahoe page table entry ! 11: * ! 12: * There are two major kinds of pte's: those which have ever existed (and are ! 13: * thus either now in core or on the swap device), and those which have ! 14: * never existed, but which will be filled on demand at first reference. ! 15: * There is a structure describing each. There is also an ancillary ! 16: * structure used in page clustering. ! 17: */ ! 18: ! 19: #ifndef LOCORE ! 20: struct pte ! 21: { ! 22: unsigned int ! 23: pg_v:1, /* valid bit */ ! 24: pg_prot:4, /* access control */ ! 25: pg_fod:1, /* is fill on demand (=0) */ ! 26: :1, /* must write back to swap (unused) */ ! 27: pg_nc:1, /* 'uncacheable page' bit */ ! 28: pg_m:1, /* hardware maintained modified bit */ ! 29: pg_u:1, /* hardware maintained 'used' bit */ ! 30: pg_pfnum:22; /* core page frame number or 0 */ ! 31: }; ! 32: struct hpte ! 33: { ! 34: unsigned int ! 35: pg_high:10, /* special for clustering */ ! 36: pg_pfnum:22; ! 37: }; ! 38: struct fpte ! 39: { ! 40: unsigned int ! 41: pg_v:1, ! 42: pg_prot:4, ! 43: pg_fod:1, /* is fill on demand (=1) */ ! 44: :1, ! 45: pg_fileno:1, /* file mapped from or TEXT or ZERO */ ! 46: pg_blkno:24; /* file system block number */ ! 47: }; ! 48: #endif ! 49: ! 50: #define PG_V 0x80000000 ! 51: #define PG_PROT 0x78000000 /* all protection bits (dorit). */ ! 52: #define PG_FOD 0x04000000 ! 53: #define PG_SWAPM 0x02000000 ! 54: #define PG_N 0x01000000 /* Non-cacheable */ ! 55: #define PG_M 0x00800000 ! 56: #define PG_U 0x00400000 ! 57: #define PG_PFNUM 0x003fffff ! 58: ! 59: #define PG_FZERO 0 ! 60: #define PG_FTEXT 1 ! 61: #define PG_FMAX (PG_FTEXT) ! 62: ! 63: #define PG_NOACC 0 ! 64: #define PG_KR 0x40000000 ! 65: #define PG_KW 0x60000000 ! 66: #define PG_URKR 0x50000000 ! 67: #define PG_URKW 0x70000000 ! 68: #define PG_UW 0x78000000 ! 69: ! 70: /* ! 71: * Pte related macros ! 72: */ ! 73: #define dirty(pte) ((pte)->pg_m) ! 74: ! 75: /* ! 76: * Kernel virtual address to page table entry and to physical address. ! 77: */ ! 78: #define kvtopte(va) (&Sysmap[((int)(va) &~ KERNBASE) >> PGSHIFT]) ! 79: #define kvtophys(x) ((kvtopte(x)->pg_pfnum << PGSHIFT) | ((int)(x) & PGOFSET)) ! 80: ! 81: #ifndef LOCORE ! 82: #ifdef KERNEL ! 83: /* utilities defined in locore.s */ ! 84: extern struct pte Sysmap[]; ! 85: extern struct pte Usrptmap[]; ! 86: extern struct pte usrpt[]; ! 87: extern struct pte Swapmap[]; ! 88: extern struct pte Forkmap[]; ! 89: extern struct pte Xswapmap[]; ! 90: extern struct pte Xswap2map[]; ! 91: extern struct pte Pushmap[]; ! 92: extern struct pte Vfmap[]; ! 93: extern struct pte mmap[]; ! 94: extern struct pte msgbufmap[]; ! 95: extern struct pte kmempt[], ekmempt[]; ! 96: #ifdef NFS ! 97: extern struct pte Nfsiomap[]; ! 98: #endif ! 99: #ifdef MFS ! 100: extern struct pte Mfsiomap[]; ! 101: #endif ! 102: #endif ! 103: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.