plan 9 kernel history: overview | file list | diff list

1991/0717/pc/mem.h (diff list | history)

1991/0613/sys/src/9/pc/mem.h:37,431991/0614/sys/src/9/pc/mem.h:37,43 (short | long)
1991/0613    
/* 
 *  segment descriptor initializers 
 */ 
#define	DATASEG(p) 	{ SEGG|(0xF<<16)|SEGP|SEGPL(p)|SEGDATA|SEGW, 0xFFFF } 
1991/0614    
#define	DATASEG(p) 	{ SEGG|SEGB|(0xF<<16)|SEGP|SEGPL(p)|SEGDATA|SEGW, 0xFFFF } 
1991/0613    
#define	EXECSEG(p) 	{ SEGG|SEGD|(0xF<<16)|SEGP|SEGPL(p)|SEGEXEC|SEGR, 0xFFFF } 
 
/* 
1991/0614/sys/src/9/pc/mem.h:1,571991/0625/sys/src/9/pc/mem.h:1,75 (short | long)
1991/0613    
#define SELGDT	(0<<3)	/* selector is in gdt */ 
#define	SELLDT	(1<<3)	/* selector is in ldt */ 
1991/0625    
/* 
 * Memory and machine-specific definitions.  Used in C and assembler. 
 */ 
1991/0613    
 
#define SELECTOR(i, t, p)	(((i)<<4) | (t) | (p)) 
1991/0625    
/* 
 * Sizes 
 */ 
1991/0613    
 
1991/0625    
#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 */ 
 
1991/0613    
/* 
 *  segment descriptor/gate 
1991/0625    
 * Time (???) 
 * Clock frequency is 68.3900 HZ 
1991/0613    
 */ 
typedef struct Segdesc	Segdesc; 
struct Segdesc 
{ 
	ulong	d0; 
	ulong	d1; 
}; 
#define SEGDATA	(0x10<<8)	/* data/stack segment */ 
#define SEGEXEC	(0x18<<8)	/* executable segment */ 
#define SEGCG	(0x0C<<8)	/* call gate */ 
#define	SEGIG	(0x0E<<8)	/* interrupt gate */ 
#define SEGTG	(0x0F<<8)	/* task gate */ 
 
#define SEGP	(1<<15)		/* segment present */ 
#define SEGPL(x) ((x)<<13)	/* priority level */ 
#define SEGB	(1<<22)		/* granularity 1==4k (for expand-down) */ 
#define SEGG	(1<<23)		/* granularity 1==4k (for other) */ 
#define SEGE	(1<<10)		/* expand down */ 
#define SEGW	(1<<9)		/* writable (for data/stack) */ 
#define	SEGR	(1<<9)		/* readable (for code) */ 
#define SEGD	(1<<22)		/* default 1==32bit (for code) */ 
1991/0625    
#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 */ 
1991/0613    
 
/* 
 *  gate initializers 
1991/0625    
 * Fundamental addresses 
1991/0613    
 */ 
#define TRAPGATE(s,o,p)	{ (o)&0xFFFF0000|SEGP|SEGPL(p)|SEGTG, (o)&0xFFFF|((s)<<16) } 
#define INTRGATE(s,o,p)	{ (o)&0xFFFF0000|SEGP|SEGPL(p)|SEGIG, (o)&0xFFFF|((s)<<16) } 
#define CALLGATE(s,o,p)	{ (o)&0xFFFF0000|SEGP|SEGPL(p)|SEGCG, (o)&0xFFFF|((s)<<16) } 
 
1991/0625    
#define	USERADDR	0xC0000000 
#define	UREGADDR	(USERADDR+BY2PG-4*16) 
 
1991/0613    
/* 
 *  segment descriptor initializers 
1991/0625    
 * Address spaces 
 * 
 * User is at 0-2GB 
 * Kernel is at 2GB-4GB 
1991/0613    
 */ 
1991/0614    
#define	DATASEG(p) 	{ SEGG|SEGB|(0xF<<16)|SEGP|SEGPL(p)|SEGDATA|SEGW, 0xFFFF } 
1991/0613    
#define	EXECSEG(p) 	{ SEGG|SEGD|(0xF<<16)|SEGP|SEGPL(p)|SEGEXEC|SEGR, 0xFFFF } 
 
1991/0625    
#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) 
 
1991/0613    
/* 
 *  known segments (in GDT) and their selectors 
 */ 
enum 
{ 
	NULLSEG=0,	/* null segment */ 
	KESEG=	1,	/* kernel executable */	 
	KDSEG=	2,	/* kernel data/stack */ 
	UESEG=	3,	/* user executable */ 
	UDSEG=	4,	/* user data/stack */ 
	SYSGATE=5,	/* system call gate */ 
}; 
1991/0625    
 
#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)) 
 
1991/0613    
#define NULLSEL	SELECTOR(NULLSEG, SELGDT, 0) 
#define KESEL	SELECTOR(KESEG, SELGDT, 0) 
#define KDSEL	SELECTOR(KDSEG, SELGDT, 0) 
1991/0614/sys/src/9/pc/mem.h:60,991991/0625/sys/src/9/pc/mem.h:78,80
1991/0613    
#define UDSEL	SELECTOR(UDSEG, SELGDT, 3) 
#define USSEL	SELECTOR(UDSEG, SELGDT, 3) 
 
/* 
 *  task state segment.  Plan 9 ignores all the task switching goo and just 
 *  uses the tss for esp0 and ss0 on gate's into the kernel, interrupts, 
 *  and exceptions.  The rest is completely ignored. 
 * 
 *  This means that we only need one tss in the whole system. 
 */ 
typedef struct Tss	Tss; 
struct Tss 
{ 
	ulong	backlink;	/* unused */ 
	ulong	esp0;		/* pl0 stack pointer */ 
	ulong	ss0;		/* pl0 stack selector */ 
	ulong	esp1;		/* pl1 stack pointer */ 
	ulong	ss1;		/* pl1 stack selector */ 
	ulong	esp2;		/* pl2 stack pointer */ 
	ulong	ss2;		/* pl2 stack selector */ 
	ulong	cr3;		/* page table descriptor */ 
	ulong	eip;		/* instruction pointer */ 
	ulong	eflags;		/* processor flags */ 
	ulong	eax;		/* general (hah?) registers */ 
	ulong 	ecx; 
	ulong	edx; 
	ulong	ebx; 
	ulong	esp; 
	ulong	ebp; 
	ulong	esi; 
	ulong	edi; 
	ulong	es;		/* segment selectors */ 
	ulong	cs; 
	ulong	ss; 
	ulong	ds; 
	ulong	fs; 
	ulong	gs; 
	ulong	ldt;		/* local descriptor table */ 
	ulong	iomap;		/* io map base */ 
}; 
1991/0625/sys/src/9/pc/mem.h:78,801991/0627/sys/src/9/pc/mem.h:78,97 (short | long)
1991/0613    
#define UDSEL	SELECTOR(UDSEG, SELGDT, 3) 
#define USSEL	SELECTOR(UDSEG, SELGDT, 3) 
 
1991/0627    
/* 
 *  fields in segment descriptors 
 */ 
#define SEGDATA	(0x10<<8)	/* data/stack segment */ 
#define SEGEXEC	(0x18<<8)	/* executable segment */ 
#define SEGCG	(0x0C<<8)	/* call gate */ 
#define	SEGIG	(0x0E<<8)	/* interrupt gate */ 
#define SEGTG	(0x0F<<8)	/* task gate */ 
 
#define SEGP	(1<<15)		/* segment present */ 
#define SEGPL(x) ((x)<<13)	/* priority level */ 
#define SEGB	(1<<22)		/* granularity 1==4k (for expand-down) */ 
#define SEGG	(1<<23)		/* granularity 1==4k (for other) */ 
#define SEGE	(1<<10)		/* expand down */ 
#define SEGW	(1<<9)		/* writable (for data/stack) */ 
#define	SEGR	(1<<9)		/* readable (for code) */ 
#define SEGD	(1<<22)		/* default 1==32bit (for code) */ 
1991/0627/sys/src/9/pc/mem.h:68,741991/0629/sys/src/9/pc/mem.h:68,74 (short | long)
1991/0625    
#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)) 
1991/0629    
#define SELECTOR(i, t, p)	(((i)<<3) | (t) | (p)) 
1991/0625    
 
1991/0613    
#define NULLSEL	SELECTOR(NULLSEG, SELGDT, 0) 
#define KESEL	SELECTOR(KESEG, SELGDT, 0) 
1991/0629/sys/src/9/pc/mem.h:59,681991/0703/sys/src/9/pc/mem.h:59,68 (short | long)
1991/0613    
 */ 
1991/0625    
 
#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 */ 
1991/0703    
#define	KDSEG	1	/* kernel data/stack */ 
#define	KESEG	2	/* kernel executable */	 
#define	UDSEG	3	/* user data/stack */ 
#define	UESEG	4	/* user executable */ 
1991/0625    
#define	SYSGATE	5	/* system call gate */ 
 
#define SELGDT	(0<<3)	/* selector is in gdt */ 
1991/0629/sys/src/9/pc/mem.h:86,911991/0703/sys/src/9/pc/mem.h:86,92
1991/0627    
#define SEGCG	(0x0C<<8)	/* call gate */ 
#define	SEGIG	(0x0E<<8)	/* interrupt gate */ 
#define SEGTG	(0x0F<<8)	/* task gate */ 
1991/0703    
#define SEGTYPE	(0x1F<<8) 
1991/0627    
 
#define SEGP	(1<<15)		/* segment present */ 
#define SEGPL(x) ((x)<<13)	/* priority level */ 
1991/0703/sys/src/9/pc/mem.h:17,311991/0705/sys/src/9/pc/mem.h:17,31 (short | long)
1991/0625    
#define	MAXMACH		1			/* max # cpus system can run */ 
 
1991/0613    
/* 
1991/0625    
 * Time (???) 
 * Clock frequency is 68.3900 HZ 
1991/0705    
 * Time 
 * Clock frequency is ??? HZ 
1991/0613    
 */ 
 
1991/0625    
#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 */ 
1991/0705    
#define	HZ		(18)			/* clock frequency */ 
#define	MS2HZ		(54)			/* millisec per clock tick */ 
#define	TK2SEC(t)	((t)*10/185)		/* ticks to seconds */ 
#define	TK2MS(t)	((((ulong)(t))*10000)/185)	/* ticks to milliseconds */ 
#define	MS2TK(t)	((((ulong)(t))*185)/10000)	/* milliseconds to ticks */ 
1991/0613    
 
/* 
1991/0625    
 * Fundamental addresses 
1991/0705/sys/src/9/pc/mem.h:5,111991/0706/sys/src/9/pc/mem.h:5,10 (short | long)
1991/0625    
/* 
 * Sizes 
 */ 
1991/0613    
                 
1991/0625    
#define	BI2BY		8			/* bits per byte */ 
#define BI2WD		32			/* bits per word */ 
#define	BY2WD		4			/* bytes per word */ 
1991/0705/sys/src/9/pc/mem.h:20,261991/0706/sys/src/9/pc/mem.h:19,24
1991/0705    
 * Time 
 * Clock frequency is ??? HZ 
1991/0613    
 */ 
                 
1991/0705    
#define	HZ		(18)			/* clock frequency */ 
#define	MS2HZ		(54)			/* millisec per clock tick */ 
#define	TK2SEC(t)	((t)*10/185)		/* ticks to seconds */ 
1991/0705/sys/src/9/pc/mem.h:30,361991/0706/sys/src/9/pc/mem.h:28,33
1991/0613    
/* 
1991/0625    
 * Fundamental addresses 
1991/0613    
 */ 
                 
1991/0625    
#define	USERADDR	0xC0000000 
#define	UREGADDR	(USERADDR+BY2PG-4*16) 
 
1991/0705/sys/src/9/pc/mem.h:40,461991/0706/sys/src/9/pc/mem.h:37,42
1991/0625    
 * User is at 0-2GB 
 * Kernel is at 2GB-4GB 
1991/0613    
 */ 
                 
1991/0625    
#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 */ 
1991/0705/sys/src/9/pc/mem.h:55,631991/0706/sys/src/9/pc/mem.h:51,58
1991/0625    
#define isphys(x) ((x)&KZERO) 
 
1991/0613    
/* 
 *  known segments (in GDT) and their selectors 
1991/0706    
 *  known 80386 segments (in GDT) and their selectors 
1991/0613    
 */ 
1991/0625    
                 
#define	NULLSEG	0	/* null segment */ 
1991/0703    
#define	KDSEG	1	/* kernel data/stack */ 
#define	KESEG	2	/* kernel executable */	 
1991/0705/sys/src/9/pc/mem.h:64,691991/0706/sys/src/9/pc/mem.h:59,66
1991/0703    
#define	UDSEG	3	/* user data/stack */ 
#define	UESEG	4	/* user executable */ 
1991/0625    
#define	SYSGATE	5	/* system call gate */ 
1991/0706    
#define	RDSEG	6	/* reboot data/stack */ 
#define	RESEG	7	/* reboot executable */	 
1991/0625    
 
#define SELGDT	(0<<3)	/* selector is in gdt */ 
#define	SELLDT	(1<<3)	/* selector is in ldt */ 
1991/0705/sys/src/9/pc/mem.h:77,821991/0706/sys/src/9/pc/mem.h:74,81
1991/0613    
#define UESEL	SELECTOR(UESEG, SELGDT, 3) 
#define UDSEL	SELECTOR(UDSEG, SELGDT, 3) 
#define USSEL	SELECTOR(UDSEG, SELGDT, 3) 
1991/0706    
#define RDSEL	SELECTOR(RDSEG, SELGDT, 0) 
#define RESEL	SELECTOR(RESEG, SELGDT, 0) 
1991/0613    
 
1991/0627    
/* 
 *  fields in segment descriptors 
1991/0705/sys/src/9/pc/mem.h:96,981991/0706/sys/src/9/pc/mem.h:95,104
1991/0627    
#define SEGW	(1<<9)		/* writable (for data/stack) */ 
#define	SEGR	(1<<9)		/* readable (for code) */ 
#define SEGD	(1<<22)		/* default 1==32bit (for code) */ 
1991/0706    
 
/* 
 *  virtual MMU entries 
 */ 
#define PTEMAPMEM	(1024*1024)	/* ??? */	 
#define SEGMAPSIZE	16		/* ??? */ 
#define	PTEPERTAB	(PTEMAPMEM/BY2PG)	/* ??? */ 
1991/0706/sys/src/9/pc/mem.h:17,291991/0709/sys/src/9/pc/mem.h:17,28 (short | long)
1991/0625    
 
1991/0613    
/* 
1991/0705    
 * Time 
 * Clock frequency is ??? HZ 
1991/0613    
 */ 
1991/0705    
#define	HZ		(18)			/* clock frequency */ 
#define	MS2HZ		(54)			/* millisec per clock tick */ 
#define	TK2SEC(t)	((t)*10/185)		/* ticks to seconds */ 
#define	TK2MS(t)	((((ulong)(t))*10000)/185)	/* ticks to milliseconds */ 
#define	MS2TK(t)	((((ulong)(t))*185)/10000)	/* milliseconds to ticks */ 
1991/0709    
#define	HZ		(20)			/* clock frequency */ 
#define	MS2HZ		(1000/HZ)		/* millisec per clock tick */ 
#define	TK2SEC(t)	((t)/HZ)		/* ticks to seconds */ 
#define	TK2MS(t)	((((ulong)(t))*1000)/HZ)	/* ticks to milliseconds */ 
#define	MS2TK(t)	((((ulong)(t))*HZ)/1000)	/* milliseconds to ticks */ 
1991/0613    
 
/* 
1991/0625    
 * Fundamental addresses 
1991/0709/sys/src/9/pc/mem.h:96,1031991/0710/sys/src/9/pc/mem.h:96,114 (short | long)
1991/0627    
#define SEGD	(1<<22)		/* default 1==32bit (for code) */ 
1991/0706    
 
/* 
 *  virtual MMU entries 
1991/0710    
 *  virtual MMU 
1991/0706    
 */ 
#define PTEMAPMEM	(1024*1024)	/* ??? */	 
#define SEGMAPSIZE	16		/* ??? */ 
#define	PTEPERTAB	(PTEMAPMEM/BY2PG)	/* ??? */ 
1991/0710    
 
/* 
 *  physical MMU 
 */ 
#define PPN(x)		((x)&~(BY2PG-1)) 
#define	PTEVALID	(1<<0) 
#define	PTEUNCACHED	0		/* everything is uncached */ 
#define PTEWRITE	(1<<1) 
#define	PTERONLY	(0<<1) 
#define	PTEKERNEL	(0<<2) 
#define	PTEUSER		(1<<2) 
1991/0710/sys/src/9/pc/mem.h:10,161991/0711/sys/src/9/pc/mem.h:10,16 (short | long)
1991/0625    
#define	BY2WD		4			/* bytes per word */ 
#define	BY2PG		4096			/* bytes per page */ 
#define	WD2PG		(BY2PG/BY2WD)		/* words per page */ 
#define	PGSHIFT		13			/* log(BY2PG) */ 
1991/0711    
#define	PGSHIFT		12			/* log(BY2PG) */ 
1991/0625    
#define PGROUND(s)	(((s)+(BY2PG-1))&~(BY2PG-1)) 
 
#define	MAXMACH		1			/* max # cpus system can run */ 
1991/0710/sys/src/9/pc/mem.h:47,531991/0711/sys/src/9/pc/mem.h:47,53
1991/0625    
 
#define	MACHSIZE	4096 
 
#define isphys(x) ((x)&KZERO) 
1991/0711    
#define isphys(x) (((ulong)x)&KZERO) 
1991/0625    
 
1991/0613    
/* 
1991/0706    
 *  known 80386 segments (in GDT) and their selectors 
1991/0710/sys/src/9/pc/mem.h:101,1111991/0711/sys/src/9/pc/mem.h:101,111
1991/0706    
#define PTEMAPMEM	(1024*1024)	/* ??? */	 
#define SEGMAPSIZE	16		/* ??? */ 
#define	PTEPERTAB	(PTEMAPMEM/BY2PG)	/* ??? */ 
1991/0711    
#define PPN(x)		((x)&~(BY2PG-1)) 
1991/0710    
 
/* 
 *  physical MMU 
 */ 
#define PPN(x)		((x)&~(BY2PG-1)) 
#define	PTEVALID	(1<<0) 
#define	PTEUNCACHED	0		/* everything is uncached */ 
#define PTEWRITE	(1<<1) 
1991/0711/sys/src/9/pc/mem.h:69,781991/0716/sys/src/9/pc/mem.h:69,76 (short | long)
1991/0613    
#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) 
1991/0706    
#define RDSEL	SELECTOR(RDSEG, SELGDT, 0) 
#define RESEL	SELECTOR(RESEG, SELGDT, 0) 
1991/0613    
 
1991/0711/sys/src/9/pc/mem.h:112,1141991/0716/sys/src/9/pc/mem.h:110,117
1991/0710    
#define	PTERONLY	(0<<1) 
#define	PTEKERNEL	(0<<2) 
#define	PTEUSER		(1<<2) 
1991/0716    
 
/* 
 *  flag register bits that we care about 
 */ 
#define IFLAG	0x200 
1991/0716/sys/src/9/pc/mem.h:59,651991/0717/sys/src/9/pc/mem.h:59,66 (short | long)
1991/0703    
#define	UESEG	4	/* user executable */ 
1991/0625    
#define	SYSGATE	5	/* system call gate */ 
1991/0706    
#define	RDSEG	6	/* reboot data/stack */ 
#define	RESEG	7	/* reboot executable */	 
1991/0717    
#define	RESEG	7	/* reboot executable */ 
#define TSSSEG	8	/* task segment */ 
1991/0625    
 
#define SELGDT	(0<<3)	/* selector is in gdt */ 
#define	SELLDT	(1<<3)	/* selector is in ldt */ 
1991/0716/sys/src/9/pc/mem.h:73,781991/0717/sys/src/9/pc/mem.h:74,80
1991/0613    
#define UDSEL	SELECTOR(UDSEG, SELGDT, 3) 
1991/0706    
#define RDSEL	SELECTOR(RDSEG, SELGDT, 0) 
#define RESEL	SELECTOR(RESEG, SELGDT, 0) 
1991/0717    
#define TSSSEL	SELECTOR(TSSSEG, SELGDT, 0) 
1991/0613    
 
1991/0627    
/* 
 *  fields in segment descriptors 
1991/0716/sys/src/9/pc/mem.h:79,841991/0717/sys/src/9/pc/mem.h:81,87
1991/0627    
 */ 
#define SEGDATA	(0x10<<8)	/* data/stack segment */ 
#define SEGEXEC	(0x18<<8)	/* executable segment */ 
1991/0717    
#define	SEGTSS	(0x9<<8)	/* TSS segment */ 
1991/0627    
#define SEGCG	(0x0C<<8)	/* call gate */ 
#define	SEGIG	(0x0E<<8)	/* interrupt gate */ 
#define SEGTG	(0x0F<<8)	/* task gate */ 
1991/0717/sys/src/9/pc/mem.h:27,491991/0718/sys/src/9/pc/mem.h:27,54 (short | long)
1991/0613    
/* 
1991/0625    
 * Fundamental addresses 
1991/0613    
 */ 
1991/0625    
#define	USERADDR	0xC0000000 
#define	UREGADDR	(USERADDR+BY2PG-4*16) 
 
1991/0613    
/* 
1991/0625    
 * Address spaces 
1991/0718    
 *  Address spaces 
1991/0625    
 * 
 * User is at 0-2GB 
 * Kernel is at 2GB-4GB 
1991/0718    
 *  User is at 0-2GB 
 *  Kernel is at 2GB-4GB 
 * 
 *  To avoid an extra page map, both the user stack (USTKTOP) and 
 *  the temporary user stack (TSTKTOP) should be in the the same 
 *  4 meg. 
1991/0613    
 */ 
1991/0625    
#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 */ 
1991/0718    
#define	UZERO		0			/* base of user address space */ 
#define	UTZERO		(UZERO+BY2PG)		/* first address in user text */ 
#define	KZERO		0x80000000		/* base of kernel address space */ 
#define	KTZERO		KZERO			/* first address in kernel text */ 
#define	USERADDR	0xC0000000		/* struct User */ 
#define	UREGADDR	(USERADDR+BY2PG-4*16)	 
#define	TSTKTOP		USERADDR		/* end of new stack in sysexec */ 
1991/0625    
#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 */ 
1991/0718    
#define	USTKTOP		(TSTKTOP-TSTKSIZ*BY2PG)	/* byte just beyond user stack */ 
#define	USTKSIZE	(4*1024*1024 - TSTKSIZ*BY2PG)	/* size of user stack */ 
#define USTKBTM		USTKTOP - USTKSIZE 
1991/0625    
 
#define	MACHSIZE	4096 
 
1991/0718/sys/src/9/pc/mem.h:48,541991/0719/sys/src/9/pc/mem.h:48,54 (short | long)
1991/0625    
#define TSTKSIZ 10 
1991/0718    
#define	USTKTOP		(TSTKTOP-TSTKSIZ*BY2PG)	/* byte just beyond user stack */ 
#define	USTKSIZE	(4*1024*1024 - TSTKSIZ*BY2PG)	/* size of user stack */ 
#define USTKBTM		USTKTOP - USTKSIZE 
1991/0719    
#define USTKBTM		(USTKTOP - USTKSIZE) 
1991/0625    
 
#define	MACHSIZE	4096 
 
1991/0718/sys/src/9/pc/mem.h:63,711991/0719/sys/src/9/pc/mem.h:63,69
1991/0703    
#define	UDSEG	3	/* user data/stack */ 
#define	UESEG	4	/* user executable */ 
1991/0625    
#define	SYSGATE	5	/* system call gate */ 
1991/0706    
#define	RDSEG	6	/* reboot data/stack */ 
1991/0717    
#define	RESEG	7	/* reboot executable */ 
#define TSSSEG	8	/* task segment */ 
1991/0719    
#define TSSSEG	6	/* task segment */ 
1991/0625    
 
#define SELGDT	(0<<3)	/* selector is in gdt */ 
#define	SELLDT	(1<<3)	/* selector is in ldt */ 
1991/0718/sys/src/9/pc/mem.h:77,841991/0719/sys/src/9/pc/mem.h:75,80
1991/0613    
#define KDSEL	SELECTOR(KDSEG, SELGDT, 0) 
#define UESEL	SELECTOR(UESEG, SELGDT, 3) 
#define UDSEL	SELECTOR(UDSEG, SELGDT, 3) 
1991/0706    
#define RDSEL	SELECTOR(RDSEG, SELGDT, 0) 
#define RESEL	SELECTOR(RESEG, SELGDT, 0) 
1991/0717    
#define TSSSEL	SELECTOR(TSSSEG, SELGDT, 0) 
1991/0613    
 
1991/0627    
/* 
1991/0719/sys/src/9/pc/mem.h:18,241991/0807/sys/src/9/pc/mem.h:18,24 (short | long)
1991/0613    
/* 
1991/0705    
 * Time 
1991/0613    
 */ 
1991/0709    
#define	HZ		(20)			/* clock frequency */ 
1991/0807    
#define	HZ		(1000)			/* clock frequency */ 
1991/0709    
#define	MS2HZ		(1000/HZ)		/* millisec per clock tick */ 
#define	TK2SEC(t)	((t)/HZ)		/* ticks to seconds */ 
#define	TK2MS(t)	((((ulong)(t))*1000)/HZ)	/* ticks to milliseconds */ 
1991/0719/sys/src/9/pc/mem.h:43,491991/0807/sys/src/9/pc/mem.h:43,49
1991/0718    
#define	KZERO		0x80000000		/* base of kernel address space */ 
#define	KTZERO		KZERO			/* first address in kernel text */ 
#define	USERADDR	0xC0000000		/* struct User */ 
#define	UREGADDR	(USERADDR+BY2PG-4*16)	 
1991/0807    
#define	UREGADDR	(USERADDR+BY2PG-4*17)	 
1991/0718    
#define	TSTKTOP		USERADDR		/* end of new stack in sysexec */ 
1991/0625    
#define TSTKSIZ 10 
1991/0718    
#define	USTKTOP		(TSTKTOP-TSTKSIZ*BY2PG)	/* byte just beyond user stack */ 
1991/0807/sys/src/9/pc/mem.h:18,241991/0808/sys/src/9/pc/mem.h:18,24 (short | long)
1991/0613    
/* 
1991/0705    
 * Time 
1991/0613    
 */ 
1991/0807    
#define	HZ		(1000)			/* clock frequency */ 
1991/0808    
#define	HZ		(20)			/* clock frequency */ 
1991/0709    
#define	MS2HZ		(1000/HZ)		/* millisec per clock tick */ 
#define	TK2SEC(t)	((t)/HZ)		/* ticks to seconds */ 
#define	TK2MS(t)	((((ulong)(t))*1000)/HZ)	/* ticks to milliseconds */ 
1991/0808/sys/src/9/pc/mem.h:47,541991/1004/sys/src/9/pc/mem.h:47,53 (short | long)
1991/0718    
#define	TSTKTOP		USERADDR		/* end of new stack in sysexec */ 
1991/0625    
#define TSTKSIZ 10 
1991/0718    
#define	USTKTOP		(TSTKTOP-TSTKSIZ*BY2PG)	/* byte just beyond user stack */ 
#define	USTKSIZE	(4*1024*1024 - TSTKSIZ*BY2PG)	/* size of user stack */ 
1991/0719    
#define USTKBTM		(USTKTOP - USTKSIZE) 
1991/1004    
#define	USTKSIZE	(16*1024*1024 - TSTKSIZ*BY2PG)	/* size of user stack */ 
1991/0625    
 
#define	MACHSIZE	4096 
 
1991/1004/sys/src/9/pc/mem.h:48,531991/1210/sys/src/9/pc/mem.h:48,54 (short | long)
1991/0625    
#define TSTKSIZ 10 
1991/0718    
#define	USTKTOP		(TSTKTOP-TSTKSIZ*BY2PG)	/* byte just beyond user stack */ 
1991/1004    
#define	USTKSIZE	(16*1024*1024 - TSTKSIZ*BY2PG)	/* size of user stack */ 
1991/1210    
#define ROMBIOS		(KZERO|0xF0000) 
1991/0625    
 
#define	MACHSIZE	4096 
 
1991/1210/sys/src/9/pc/mem.h:43,491991/1214/sys/src/9/pc/mem.h:43,49 (short | long)
1991/0718    
#define	KZERO		0x80000000		/* base of kernel address space */ 
#define	KTZERO		KZERO			/* first address in kernel text */ 
#define	USERADDR	0xC0000000		/* struct User */ 
1991/0807    
#define	UREGADDR	(USERADDR+BY2PG-4*17)	 
1991/1214    
#define	UREGADDR	(USERADDR+BY2PG-4*19)	 
1991/0718    
#define	TSTKTOP		USERADDR		/* end of new stack in sysexec */ 
1991/0625    
#define TSTKSIZ 10 
1991/0718    
#define	USTKTOP		(TSTKTOP-TSTKSIZ*BY2PG)	/* byte just beyond user stack */ 
1991/1210/sys/src/9/pc/mem.h:62,691991/1214/sys/src/9/pc/mem.h:62,68
1991/0703    
#define	KESEG	2	/* kernel executable */	 
#define	UDSEG	3	/* user data/stack */ 
#define	UESEG	4	/* user executable */ 
1991/0625    
#define	SYSGATE	5	/* system call gate */ 
1991/0719    
#define TSSSEG	6	/* task segment */ 
1991/1214    
#define TSSSEG	5	/* task segment */ 
1991/0625    
 
#define SELGDT	(0<<3)	/* selector is in gdt */ 
#define	SELLDT	(1<<3)	/* selector is in ldt */ 
1991/1214/sys/src/9/pc/mem.h:12,171992/0625/sys/src/9/pc/mem.h:12,18 (short | long)
1991/0625    
#define	WD2PG		(BY2PG/BY2WD)		/* words per page */ 
1991/0711    
#define	PGSHIFT		12			/* log(BY2PG) */ 
1991/0625    
#define PGROUND(s)	(((s)+(BY2PG-1))&~(BY2PG-1)) 
1992/0625    
#define MB		(1024*1024) 
1991/0625    
 
#define	MAXMACH		1			/* max # cpus system can run */ 
 
1992/0625/sys/src/9/pc/mem.h:12,181992/0726/sys/src/9/pc/mem.h:12,17 (short | long)
1991/0625    
#define	WD2PG		(BY2PG/BY2WD)		/* words per page */ 
1991/0711    
#define	PGSHIFT		12			/* log(BY2PG) */ 
1991/0625    
#define PGROUND(s)	(((s)+(BY2PG-1))&~(BY2PG-1)) 
1992/0625    
#define MB		(1024*1024) 
1991/0625    
 
#define	MAXMACH		1			/* max # cpus system can run */ 
 
1992/0726/sys/src/9/pc/mem.h:108,1141992/0804/sys/src/9/pc/mem.h:108,114 (short | long)
1991/0710    
 *  physical MMU 
 */ 
#define	PTEVALID	(1<<0) 
#define	PTEUNCACHED	0		/* everything is uncached */ 
1992/0804    
#define	PTEUNCACHED	(1<<4)	 
1991/0710    
#define PTEWRITE	(1<<1) 
#define	PTERONLY	(0<<1) 
#define	PTEKERNEL	(0<<2) 
1992/0804/sys/src/9/pc/mem.h:99,1071992/0805/sys/src/9/pc/mem.h:99,107 (short | long)
1991/0706    
/* 
1991/0710    
 *  virtual MMU 
1991/0706    
 */ 
#define PTEMAPMEM	(1024*1024)	/* ??? */	 
#define SEGMAPSIZE	16		/* ??? */ 
#define	PTEPERTAB	(PTEMAPMEM/BY2PG)	/* ??? */ 
1992/0805    
#define PTEMAPMEM	(1024*1024)	 
#define SEGMAPSIZE	64 
#define	PTEPERTAB	(PTEMAPMEM/BY2PG) 
1991/0711    
#define PPN(x)		((x)&~(BY2PG-1)) 
1991/0710    
 
/* 
1992/0805/sys/src/9/pc/mem.h:49,541992/0930/sys/src/9/pc/mem.h:49,55 (short | long)
Add ISAMEMSIZE.
rsc Fri Mar 4 12:44:25 2005
1991/0718    
#define	USTKTOP		(TSTKTOP-TSTKSIZ*BY2PG)	/* byte just beyond user stack */ 
1991/1004    
#define	USTKSIZE	(16*1024*1024 - TSTKSIZ*BY2PG)	/* size of user stack */ 
1991/1210    
#define ROMBIOS		(KZERO|0xF0000) 
1992/0930    
#define	ISAMEMSIZE	(4*MB)			/* mem space reserved for ISA */ 
1991/0625    
 
#define	MACHSIZE	4096 
 
1992/0930/sys/src/9/pc/mem.h:53,591992/1013/sys/src/9/pc/mem.h:53,58 (short | long)
Remove isphys.
rsc Fri Mar 4 12:44:25 2005
1991/0625    
 
#define	MACHSIZE	4096 
 
1991/0711    
#define isphys(x) (((ulong)x)&KZERO) 
1991/0625    
 
1991/0613    
/* 
1991/0706    
 *  known 80386 segments (in GDT) and their selectors 
Too many diffs (26 > 25). Stopping.


source code copyright © 1990-2005 Lucent Technologies; see license
Plan 9 distribution
comments to russ cox (rsc@swtch.com)