|
|
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 PGROUND(s) (((s)+(BY2PG-1))&~(BY2PG-1))
15:
16: #define MAXMACH 1 /* max # cpus system can run */
17:
18: /*
19: * Time
20: */
21: #define HZ (20) /* clock frequency */
22: #define MS2HZ (1000/HZ) /* millisec per clock tick */
23: #define TK2SEC(t) ((t)/HZ) /* ticks to seconds */
24: #define TK2MS(t) ((((ulong)(t))*1000)/HZ) /* ticks to milliseconds */
25: #define MS2TK(t) ((((ulong)(t))*HZ)/1000) /* milliseconds to ticks */
26:
27: /*
28: * Fundamental addresses
29: */
30:
31: /*
32: * Address spaces
33: *
34: * Kernel is at 2GB-4GB
35: */
36: #define KZERO 0x80000000 /* base of kernel address space */
37: #define KTZERO KZERO /* first address in kernel text */
38: #define ROMBIOS (KZERO|0xF0000)
39:
40: #define MACHSIZE 4096
41:
42: /*
43: * known 80386 segments (in GDT) and their selectors
44: */
45: #define NULLSEG 0 /* null segment */
46: #define KDSEG 1 /* kernel data/stack */
47: #define KESEG 2 /* kernel executable */
48: #define UDSEG 3 /* user data/stack */
49: #define UESEG 4 /* user executable */
50: #define SYSGATE 5 /* system call gate */
51: #define TSSSEG 6 /* task segment */
52:
53: #define SELGDT (0<<3) /* selector is in gdt */
54: #define SELLDT (1<<3) /* selector is in ldt */
55:
56: #define SELECTOR(i, t, p) (((i)<<3) | (t) | (p))
57:
58: #define NULLSEL SELECTOR(NULLSEG, SELGDT, 0)
59: #define KESEL SELECTOR(KESEG, SELGDT, 0)
60: #define KDSEL SELECTOR(KDSEG, SELGDT, 0)
61: #define UESEL SELECTOR(UESEG, SELGDT, 3)
62: #define UDSEL SELECTOR(UDSEG, SELGDT, 3)
63: #define TSSSEL SELECTOR(TSSSEG, SELGDT, 0)
64:
65: /*
66: * fields in segment descriptors
67: */
68: #define SEGDATA (0x10<<8) /* data/stack segment */
69: #define SEGEXEC (0x18<<8) /* executable segment */
70: #define SEGTSS (0x9<<8) /* TSS segment */
71: #define SEGCG (0x0C<<8) /* call gate */
72: #define SEGIG (0x0E<<8) /* interrupt gate */
73: #define SEGTG (0x0F<<8) /* task gate */
74: #define SEGTYPE (0x1F<<8)
75:
76: #define SEGP (1<<15) /* segment present */
77: #define SEGPL(x) ((x)<<13) /* priority level */
78: #define SEGB (1<<22) /* granularity 1==4k (for expand-down) */
79: #define SEGG (1<<23) /* granularity 1==4k (for other) */
80: #define SEGE (1<<10) /* expand down */
81: #define SEGW (1<<9) /* writable (for data/stack) */
82: #define SEGR (1<<9) /* readable (for code) */
83: #define SEGD (1<<22) /* default 1==32bit (for code) */
84:
85: /*
86: * virtual MMU
87: */
88: #define PTEMAPMEM (1024*1024) /* ??? */
89: #define SEGMAPSIZE 16 /* ??? */
90: #define PTEPERTAB (PTEMAPMEM/BY2PG) /* ??? */
91: #define PPN(x) ((x)&~(BY2PG-1))
92:
93: /*
94: * physical MMU
95: */
96: #define PTEVALID (1<<0)
97: #define PTEUNCACHED 0 /* everything is uncached */
98: #define PTEWRITE (1<<1)
99: #define PTERONLY (0<<1)
100: #define PTEKERNEL (0<<2)
101: #define PTEUSER (1<<2)
102:
103: /*
104: * flag register bits that we care about
105: */
106: #define IFLAG 0x200
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.