|
|
1.1 ! root 1: /* ! 2: * Memory and machine-specific definitions. Used in C and assembler. ! 3: */ ! 4: ! 5: /* ! 6: * Sizes ! 7: */ ! 8: #define BI2BY 8 /* bits per byte */ ! 9: #define BI2WD 32 /* bits per word */ ! 10: #define BY2WD 4 /* bytes per word */ ! 11: #define BY2PG 4096 /* bytes per page */ ! 12: #define WD2PG (BY2PG/BY2WD) /* words per page */ ! 13: #define PGSHIFT 12 /* log(BY2PG) */ ! 14: #define ROUND(s, sz) (((s)+(sz-1))&~(sz-1)) ! 15: #define PGROUND(s) ROUND(s, BY2PG) ! 16: ! 17: #define MAXMACH 1 /* max # cpus system can run */ ! 18: ! 19: /* ! 20: * Time ! 21: */ ! 22: #define HZ (100) /* clock frequency */ ! 23: #define MS2HZ (1000/HZ) /* millisec per clock tick */ ! 24: #define TK2SEC(t) ((t)/HZ) /* ticks to seconds */ ! 25: #define SEC2TK(t) (((ulong)(t))*HZ) /* seconds to ticks */ ! 26: #define TK2MS(t) ((((ulong)(t))*1000)/HZ) /* ticks to milliseconds */ ! 27: #define MS2TK(t) ((((ulong)(t))*HZ)/1000) /* milliseconds to ticks */ ! 28: ! 29: /* ! 30: * Fundamental addresses ! 31: */ ! 32: ! 33: /* ! 34: * Address spaces ! 35: * ! 36: * User is at 0-2GB ! 37: * Kernel is at 2GB-4GB ! 38: * ! 39: * To avoid an extra page map, both the user stack (USTKTOP) and ! 40: * the temporary user stack (TSTKTOP) should be in the the same ! 41: * 4 meg. ! 42: */ ! 43: #define UZERO 0 /* base of user address space */ ! 44: #define UTZERO (UZERO+BY2PG) /* first address in user text */ ! 45: #define KZERO 0x80000000 /* base of kernel address space */ ! 46: #define KTZERO KZERO /* first address in kernel text */ ! 47: #define USERADDR 0xC0000000 /* struct User */ ! 48: #define UREGADDR (USERADDR+BY2PG-4*19) ! 49: #define TSTKTOP USERADDR /* end of new stack in sysexec */ ! 50: #define TSTKSIZ 10 ! 51: #define USTKTOP (TSTKTOP-TSTKSIZ*BY2PG) /* byte just beyond user stack */ ! 52: #define USTKSIZE (16*1024*1024 - TSTKSIZ*BY2PG) /* size of user stack */ ! 53: #define ROMBIOS (KZERO|0xF0000) ! 54: #define ISAMEMSIZE (4*MB) /* mem space reserved for ISA */ ! 55: ! 56: #define MACHSIZE 4096 ! 57: ! 58: ! 59: /* ! 60: * known 80386 segments (in GDT) and their selectors ! 61: */ ! 62: #define NULLSEG 0 /* null segment */ ! 63: #define KDSEG 1 /* kernel data/stack */ ! 64: #define KESEG 2 /* kernel executable */ ! 65: #define UDSEG 3 /* user data/stack */ ! 66: #define UESEG 4 /* user executable */ ! 67: #define TSSSEG 5 /* task segment */ ! 68: #define N386SEG 6 /* number of segments */ ! 69: ! 70: #define SELGDT (0<<3) /* selector is in gdt */ ! 71: #define SELLDT (1<<3) /* selector is in ldt */ ! 72: ! 73: #define SELECTOR(i, t, p) (((i)<<3) | (t) | (p)) ! 74: ! 75: #define NULLSEL SELECTOR(NULLSEG, SELGDT, 0) ! 76: #define KESEL SELECTOR(KESEG, SELGDT, 0) ! 77: #define KDSEL SELECTOR(KDSEG, SELGDT, 0) ! 78: #define UESEL SELECTOR(UESEG, SELGDT, 3) ! 79: #define UDSEL SELECTOR(UDSEG, SELGDT, 3) ! 80: #define TSSSEL SELECTOR(TSSSEG, SELGDT, 0) ! 81: ! 82: /* ! 83: * fields in segment descriptors ! 84: */ ! 85: #define SEGDATA (0x10<<8) /* data/stack segment */ ! 86: #define SEGEXEC (0x18<<8) /* executable segment */ ! 87: #define SEGTSS (0x9<<8) /* TSS segment */ ! 88: #define SEGCG (0x0C<<8) /* call gate */ ! 89: #define SEGIG (0x0E<<8) /* interrupt gate */ ! 90: #define SEGTG (0x0F<<8) /* task gate */ ! 91: #define SEGTYPE (0x1F<<8) ! 92: ! 93: #define SEGP (1<<15) /* segment present */ ! 94: #define SEGPL(x) ((x)<<13) /* priority level */ ! 95: #define SEGB (1<<22) /* granularity 1==4k (for expand-down) */ ! 96: #define SEGG (1<<23) /* granularity 1==4k (for other) */ ! 97: #define SEGE (1<<10) /* expand down */ ! 98: #define SEGW (1<<9) /* writable (for data/stack) */ ! 99: #define SEGR (1<<9) /* readable (for code) */ ! 100: #define SEGD (1<<22) /* default 1==32bit (for code) */ ! 101: ! 102: /* ! 103: * virtual MMU ! 104: */ ! 105: #define PTEMAPMEM (1024*1024) ! 106: #define SEGMAPSIZE 16 ! 107: #define PTEPERTAB (PTEMAPMEM/BY2PG) ! 108: #define PPN(x) ((x)&~(BY2PG-1)) ! 109: ! 110: /* ! 111: * physical MMU ! 112: */ ! 113: #define PTEVALID (1<<0) ! 114: #define PTEUNCACHED (1<<4) ! 115: #define PTEWRITE (1<<1) ! 116: #define PTERONLY (0<<1) ! 117: #define PTEKERNEL (0<<2) ! 118: #define PTEUSER (1<<2) ! 119: ! 120: /* ! 121: * flag register bits that we care about ! 122: */ ! 123: #define IFLAG 0x200
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.