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