xref: /plan9-contrib/sys/src/nboot/pc/mem.h (revision 529c1f209803c78c4f2cda11b13818a57f01c872)
1*529c1f20SDavid du Colombier /*
2*529c1f20SDavid du Colombier  * Memory and machine-specific definitions.  Used in C and assembler.
3*529c1f20SDavid du Colombier  */
4*529c1f20SDavid du Colombier 
5*529c1f20SDavid du Colombier /*
6*529c1f20SDavid du Colombier  * Sizes
7*529c1f20SDavid du Colombier  */
8*529c1f20SDavid du Colombier #define	BI2BY		8			/* bits per byte */
9*529c1f20SDavid du Colombier #define	BI2WD		32			/* bits per word */
10*529c1f20SDavid du Colombier #define	BY2WD		4			/* bytes per word */
11*529c1f20SDavid du Colombier #define	BY2PG		4096			/* bytes per page */
12*529c1f20SDavid du Colombier #define	WD2PG		(BY2PG/BY2WD)		/* words per page */
13*529c1f20SDavid du Colombier #define	PGSHIFT		12			/* log(BY2PG) */
14*529c1f20SDavid du Colombier #define	PGROUND(s)	(((s)+(BY2PG-1))&~(BY2PG-1))
15*529c1f20SDavid du Colombier 
16*529c1f20SDavid du Colombier /*
17*529c1f20SDavid du Colombier  * Fundamental addresses
18*529c1f20SDavid du Colombier  */
19*529c1f20SDavid du Colombier #define CONFADDR	0x1200		/* info passed from boot loader */
20*529c1f20SDavid du Colombier #define BIOSXCHG	0x6000		/* To exchange data with the BIOS */
21*529c1f20SDavid du Colombier 
22*529c1f20SDavid du Colombier #define SELGDT	(0<<3)	/* selector is in gdt */
23*529c1f20SDavid du Colombier #define	SELLDT	(1<<3)	/* selector is in ldt */
24*529c1f20SDavid du Colombier 
25*529c1f20SDavid du Colombier #define SELECTOR(i, t, p)	(((i)<<3) | (t) | (p))
26*529c1f20SDavid du Colombier 
27*529c1f20SDavid du Colombier /*
28*529c1f20SDavid du Colombier  *  fields in segment descriptors
29*529c1f20SDavid du Colombier  */
30*529c1f20SDavid du Colombier #define SEGDATA	(0x10<<8)	/* data/stack segment */
31*529c1f20SDavid du Colombier #define SEGEXEC	(0x18<<8)	/* executable segment */
32*529c1f20SDavid du Colombier #define	SEGTSS	(0x9<<8)	/* TSS segment */
33*529c1f20SDavid du Colombier #define SEGCG	(0x0C<<8)	/* call gate */
34*529c1f20SDavid du Colombier #define	SEGIG	(0x0E<<8)	/* interrupt gate */
35*529c1f20SDavid du Colombier #define SEGTG	(0x0F<<8)	/* task gate */
36*529c1f20SDavid du Colombier #define SEGTYPE	(0x1F<<8)
37*529c1f20SDavid du Colombier 
38*529c1f20SDavid du Colombier #define SEGP	(1<<15)		/* segment present */
39*529c1f20SDavid du Colombier #define SEGPL(x) ((x)<<13)	/* priority level */
40*529c1f20SDavid du Colombier #define SEGB	(1<<22)		/* granularity 1==4k (for expand-down) */
41*529c1f20SDavid du Colombier #define SEGG	(1<<23)		/* granularity 1==4k (for other) */
42*529c1f20SDavid du Colombier #define SEGE	(1<<10)		/* expand down */
43*529c1f20SDavid du Colombier #define SEGW	(1<<9)		/* writable (for data/stack) */
44*529c1f20SDavid du Colombier #define	SEGR	(1<<9)		/* readable (for code) */
45*529c1f20SDavid du Colombier #define SEGD	(1<<22)		/* default 1==32bit (for code) */
46*529c1f20SDavid du Colombier 
47