128 lines
3.1 KiB
C
128 lines
3.1 KiB
C
/*
|
|
* Memory and machine-specific definitions. Used in C and assembler.
|
|
*/
|
|
|
|
#define MIN(a, b) ((a) < (b)? (a): (b))
|
|
#define MAX(a, b) ((a) > (b)? (a): (b))
|
|
|
|
/*
|
|
* Sizes
|
|
*/
|
|
#define BI2BY 8 /* bits per byte */
|
|
#define BI2WD 32 /* bits per word */
|
|
#define BY2WD 4 /* bytes per word */
|
|
#define BY2V 8 /* bytes per double word */
|
|
#define BY2PG 4096 /* bytes per page */
|
|
#define WD2PG (BY2PG/BY2WD) /* words per page */
|
|
#define PGSHIFT 12 /* log(BY2PG) */
|
|
#define ROUND(s, sz) (((s)+((sz)-1))&~((sz)-1))
|
|
#define PGROUND(s) ROUND(s, BY2PG)
|
|
#define LINSIZ 32
|
|
#define BLOCKALIGN LINSIZ
|
|
#define FPalign 16
|
|
|
|
#define MAXMACH 2
|
|
#define KSTACK 4096
|
|
|
|
#define HZ (1000)
|
|
#define MS2HZ (1000/HZ)
|
|
#define TK2SEC(t) ((t)/HZ)
|
|
|
|
#define KZERO 0xF0000000
|
|
#define KTZERO (KZERO+0x100000)
|
|
#define TMAPSZ SECSZ
|
|
#define TMAP (KZERO - TMAPSZ)
|
|
#define KMAPSZ SECSZ
|
|
#define KMAP (TMAP - KMAPSZ)
|
|
#define NKMAP (KMAPSZ / BY2PG - 1)
|
|
#define MACHSIZE 8192
|
|
#define MACH(n) (KZERO+(n)*MACHSIZE)
|
|
#define MACHP(n) ((Mach *)MACH(n))
|
|
#define MACHL1(n) (ROUND(MACH(MAXMACH), L1SZ) + (n)*L1SZ)
|
|
#define TMAPL2(n) (MACHL1(MAXMACH) + (n) * L2SZ)
|
|
#define TMAPL2SZ (MAXMACH * L2SZ)
|
|
#define CONFSIZE 65536
|
|
#define CONFADDR (KTZERO-CONFSIZE)
|
|
|
|
#define PERIPH 0xFF000000
|
|
|
|
#define UZERO 0
|
|
#define UTZERO BY2PG
|
|
#define UTROUND(t) ROUNDUP(t, BY2PG)
|
|
#define USTKTOP 0xE0000000
|
|
#define USTKSIZE (16*1024*1024)
|
|
|
|
#define PTEMAPMEM (1024*1024)
|
|
#define PTEPERTAB (PTEMAPMEM/BY2PG)
|
|
#define SEGMAPSIZE 1984
|
|
#define SSEGMAPSIZE 16
|
|
|
|
#define PTEVALID L2VALID
|
|
#define PTERONLY L2RONLY
|
|
#define PTEWRITE L2WRITE
|
|
#define PTENOEXEC L2NOEXEC
|
|
#define PTECACHED L2CACHED
|
|
#define PTEUNCACHED L2DEVICE
|
|
#define PPN(x) ((x)&~(BY2PG-1))
|
|
|
|
#define PsrDirq (1<<7)
|
|
#define PsrDfiq (1<<6)
|
|
#define PsrMask 0x1f
|
|
#define PsrMusr 0x10
|
|
#define PsrMfiq 0x11
|
|
#define PsrMirq 0x12
|
|
#define PsrMsvc 0x13
|
|
#define PsrMabt 0x17
|
|
#define PsrMiabt 0x16 /* not an actual mode; for ureg->type */
|
|
#define PsrMund 0x1b
|
|
|
|
#define DMB WORD $0xf57ff05f
|
|
#define DSB WORD $0xf57ff04f
|
|
#define ISB WORD $0xf57ff06f
|
|
#define WFE WORD $0xe320f002
|
|
#define SEV WORD $0xe320f004
|
|
#define CPS(m) WORD $(0xf1000000|(m))
|
|
#define CPSMODE (1<<17)
|
|
#define CPSIE (3<<6|2<<18)
|
|
#define CPSID (3<<6|3<<18)
|
|
#define Rmach 10
|
|
#define Rup 9
|
|
|
|
#define VMSR(c, r1, r2) WORD $(0x0ee00a10|(c)<<28|(r2)<<16|(r1)<<12)
|
|
#define VMRS(c, r1, r2) WORD $(0x0ef00a10|(c)<<28|(r2)<<12|(r1)<<16)
|
|
#define FPSID 0x0
|
|
#define FPSCR 0x1
|
|
#define MVFR1 0x6
|
|
#define MVFR0 0x7
|
|
#define FPEXC 0x8
|
|
|
|
#define L1PT 1
|
|
#define L1SEC (2|1<<10)
|
|
#define L1DEVICE 0
|
|
#define L1CACHED (1<<16|1<<14|1<<12|1<<2)
|
|
#define L1NOEXEC (1<<4)
|
|
#define L1KERRW 0
|
|
#define L1SZ (4096*4)
|
|
#define L2SZ (256*4)
|
|
#define SECSZ 1048576
|
|
#define SECSH 20
|
|
#define NL2 256
|
|
|
|
#define L1X(va) (((ulong)(va)) >> 20)
|
|
#define L1RX(va) (((ulong)(va)) >> 20 & ~3)
|
|
#define L2X(va) (((ulong)(va)) >> 12 & 0xff)
|
|
#define L2RX(va) (((ulong)(va)) >> 12 & 0x3ff)
|
|
|
|
#define L2VALID (2|1<<4)
|
|
#define L2CACHED (1<<10|1<<8|1<<6|1<<2)
|
|
#define L2DEVICE 0
|
|
#define L2NOEXEC (1<<0)
|
|
#define L2KERRW L2KERNEL
|
|
#define L2KERNEL 0
|
|
#define L2USER (1<<5)
|
|
#define L2RONLY (1<<9)
|
|
#define L2WRITE 0
|
|
#define L2LOCAL (1<<11)
|
|
|
|
#define TTBATTR (1<<6|1<<3|1<<1)
|