xref: /plan9-contrib/sys/src/nboot/efi/mem.h (revision 529c1f209803c78c4f2cda11b13818a57f01c872)
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 /*
17  * Fundamental addresses
18  */
19 #define CONFADDR	0x1200		/* info passed from boot loader */
20 #define BIOSXCHG	0x6000		/* To exchange data with the BIOS */
21 
22 #define SELGDT	(0<<3)	/* selector is in gdt */
23 #define	SELLDT	(1<<3)	/* selector is in ldt */
24 
25 #define SELECTOR(i, t, p)	(((i)<<3) | (t) | (p))
26 
27 /*
28  *  fields in segment descriptors
29  */
30 #define	SEGDATA	(0x10<<8)	/* data/stack segment */
31 #define	SEGEXEC	(0x18<<8)	/* executable segment */
32 #define	SEGTSS	(0x9<<8)	/* TSS segment */
33 #define	SEGCG	(0x0C<<8)	/* call gate */
34 #define	SEGIG	(0x0E<<8)	/* interrupt gate */
35 #define	SEGTG	(0x0F<<8)	/* trap gate */
36 #define	SEGLDT	(0x02<<8)	/* local descriptor table */
37 #define	SEGTYPE	(0x1F<<8)
38 
39 #define	SEGP	(1<<15)		/* segment present */
40 #define	SEGPL(x) ((x)<<13)	/* priority level */
41 #define	SEGB	(1<<22)		/* granularity 1==4k (for expand-down) */
42 #define	SEGD	(1<<22)		/* default 1==32bit (for code) */
43 #define	SEGE	(1<<10)		/* expand down */
44 #define	SEGW	(1<<9)		/* writable (for data/stack) */
45 #define	SEGR	(1<<9)		/* readable (for code) */
46 #define SEGL	(1<<21)		/* 64 bit */
47 #define	SEGG	(1<<23)		/* granularity 1==4k (for other) */
48