~kris/9p

9hist

ref: a98497b10909acac0d87f67dc031f2cbe3d62dbf 9hist/pc/mem.h -rw-r--r-- 2.2 KiB
a98497b1 — David du Colombier Plan 9 from Bell Labs 1991-06-26 35 years ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
/*
 * Memory and machine-specific definitions.  Used in C and assembler.
 */

/*
 * Sizes
 */

#define	BI2BY		8			/* bits per byte */
#define BI2WD		32			/* bits per word */
#define	BY2WD		4			/* bytes per word */
#define	BY2PG		4096			/* bytes per page */
#define	WD2PG		(BY2PG/BY2WD)		/* words per page */
#define	PGSHIFT		13			/* log(BY2PG) */
#define PGROUND(s)	(((s)+(BY2PG-1))&~(BY2PG-1))

#define	MAXMACH		1			/* max # cpus system can run */

/*
 * Time (???)
 * Clock frequency is 68.3900 HZ
 */

#define	HZ		(68)			/* clock frequency */
#define	MS2HZ		(1000/HZ)		/* millisec per clock tick */
#define	TK2SEC(t)	((t)*100/6839)		/* ticks to seconds */
#define	TK2MS(t)	((((ulong)(t))*100000)/6839)	/* ticks to milliseconds */
#define	MS2TK(t)	((((ulong)(t))*6839)/100000)	/* milliseconds to ticks */

/*
 * Fundamental addresses
 */

#define	USERADDR	0xC0000000
#define	UREGADDR	(USERADDR+BY2PG-4*16)

/*
 * Address spaces
 *
 * User is at 0-2GB
 * Kernel is at 2GB-4GB
 */

#define	UZERO	0			/* base of user address space */
#define	UTZERO	(UZERO+BY2PG)		/* first address in user text */
#define	TSTKTOP	USERADDR		/* end of new stack in sysexec */
#define TSTKSIZ 10
#define	USTKTOP	(TSTKTOP-TSTKSIZ*BY2PG)	/* byte just beyond user stack */
#define	KZERO	0x80000000		/* base of kernel address space */
#define	KTZERO	KZERO			/* first address in kernel text */
#define	USTKSIZE	(4*1024*1024)	/* size of user stack */

#define	MACHSIZE	4096

#define isphys(x) ((x)&KZERO)

/*
 *  known segments (in GDT) and their selectors
 */

#define	NULLSEG	0	/* null segment */
#define	KESEG	1	/* kernel executable */	
#define	KDSEG	2	/* kernel data/stack */
#define	UESEG	3	/* user executable */
#define	UDSEG	4	/* user data/stack */
#define	SYSGATE	5	/* system call gate */

#define SELGDT	(0<<3)	/* selector is in gdt */
#define	SELLDT	(1<<3)	/* selector is in ldt */

#define SELECTOR(i, t, p)	(((i)<<4) | (t) | (p))

#define NULLSEL	SELECTOR(NULLSEG, SELGDT, 0)
#define KESEL	SELECTOR(KESEG, SELGDT, 0)
#define KDSEL	SELECTOR(KDSEG, SELGDT, 0)
#define KSSEL	SELECTOR(KDSEG, SELGDT, 0)
#define UESEL	SELECTOR(UESEG, SELGDT, 3)
#define UDSEL	SELECTOR(UDSEG, SELGDT, 3)
#define USSEL	SELECTOR(UDSEG, SELGDT, 3)