1*74a4d8c2SCharles.Forsyth /* 2*74a4d8c2SCharles.Forsyth * Memory and machine-specific definitions. Used in C and assembler. 3*74a4d8c2SCharles.Forsyth */ 4*74a4d8c2SCharles.Forsyth 5*74a4d8c2SCharles.Forsyth /* 6*74a4d8c2SCharles.Forsyth * Sizes 7*74a4d8c2SCharles.Forsyth */ 8*74a4d8c2SCharles.Forsyth #define BI2BY 8 /* bits per byte */ 9*74a4d8c2SCharles.Forsyth #define BI2WD 32 /* bits per word */ 10*74a4d8c2SCharles.Forsyth #define BY2WD 4 /* bytes per word */ 11*74a4d8c2SCharles.Forsyth #define BY2PG 4096 /* bytes per page */ 12*74a4d8c2SCharles.Forsyth #define WD2PG (BY2PG/BY2WD) /* words per page */ 13*74a4d8c2SCharles.Forsyth #define PGSHIFT 12 /* log(BY2PG) */ 14*74a4d8c2SCharles.Forsyth #define PGROUND(s) (((s)+(BY2PG-1))&~(BY2PG-1)) 15*74a4d8c2SCharles.Forsyth 16*74a4d8c2SCharles.Forsyth #define MAXMACH 1 /* max # cpus system can run */ 17*74a4d8c2SCharles.Forsyth #define CACHELINELOG 4 18*74a4d8c2SCharles.Forsyth #define CACHELINESZ (1<<CACHELINELOG) 19*74a4d8c2SCharles.Forsyth 20*74a4d8c2SCharles.Forsyth /* 21*74a4d8c2SCharles.Forsyth * Time 22*74a4d8c2SCharles.Forsyth */ 23*74a4d8c2SCharles.Forsyth #define HZ (50) /* clock frequency */ 24*74a4d8c2SCharles.Forsyth #define MS2HZ (1000/HZ) /* millisec per clock tick */ 25*74a4d8c2SCharles.Forsyth #define TK2SEC(t) ((t)/HZ) /* ticks to seconds */ 26*74a4d8c2SCharles.Forsyth #define TK2MS(t) ((((ulong)(t))*1000)/HZ) /* ticks to milliseconds */ 27*74a4d8c2SCharles.Forsyth #define MS2TK(t) ((((ulong)(t))*HZ)/1000) /* milliseconds to ticks */ 28*74a4d8c2SCharles.Forsyth #define MHz 1000000 29*74a4d8c2SCharles.Forsyth 30*74a4d8c2SCharles.Forsyth /* 31*74a4d8c2SCharles.Forsyth * Fundamental values 32*74a4d8c2SCharles.Forsyth */ 33*74a4d8c2SCharles.Forsyth 34*74a4d8c2SCharles.Forsyth #define KZERO 0 /* bootstrap runs in real mode */ 35*74a4d8c2SCharles.Forsyth #define MACHSIZE 4096 36*74a4d8c2SCharles.Forsyth 37*74a4d8c2SCharles.Forsyth /* 38*74a4d8c2SCharles.Forsyth * physical MMU 39*74a4d8c2SCharles.Forsyth */ 40*74a4d8c2SCharles.Forsyth #define KSEG0 0x20000000 41*74a4d8c2SCharles.Forsyth #define KSEGM 0xE0000000 /* mask to check which seg */ 42*74a4d8c2SCharles.Forsyth 43*74a4d8c2SCharles.Forsyth /* 44*74a4d8c2SCharles.Forsyth * MSR bits 45*74a4d8c2SCharles.Forsyth */ 46*74a4d8c2SCharles.Forsyth 47*74a4d8c2SCharles.Forsyth #define POW 0x40000 /* enable power mgmt */ 48*74a4d8c2SCharles.Forsyth #define TGPR 0x20000 /* GPR0-3 remapped; 603/603e specific */ 49*74a4d8c2SCharles.Forsyth #define ILE 0x10000 /* interrupts little endian */ 50*74a4d8c2SCharles.Forsyth #define EE 0x08000 /* enable external/decrementer interrupts */ 51*74a4d8c2SCharles.Forsyth #define PR 0x04000 /* =1, user mode */ 52*74a4d8c2SCharles.Forsyth #define FPE 0x02000 /* enable floating point */ 53*74a4d8c2SCharles.Forsyth #define ME 0x01000 /* enable machine check exceptions */ 54*74a4d8c2SCharles.Forsyth #define FE0 0x00800 55*74a4d8c2SCharles.Forsyth #define SE 0x00400 /* single-step trace */ 56*74a4d8c2SCharles.Forsyth #define BE 0x00200 /* branch trace */ 57*74a4d8c2SCharles.Forsyth #define FE1 0x00100 58*74a4d8c2SCharles.Forsyth #define IP 0x00040 /* =0, vector to nnnnn; =1, vector to FFFnnnnn */ 59*74a4d8c2SCharles.Forsyth #define IR 0x00020 /* enable instruction address translation */ 60*74a4d8c2SCharles.Forsyth #define DR 0x00010 /* enable data address translation */ 61*74a4d8c2SCharles.Forsyth #define RI 0x00002 /* exception is recoverable */ 62*74a4d8c2SCharles.Forsyth #define LE 0x00001 /* little endian mode */ 63*74a4d8c2SCharles.Forsyth 64*74a4d8c2SCharles.Forsyth #define KMSR (ME|FE0|FE1|FPE) 65*74a4d8c2SCharles.Forsyth #define UMSR (KMSR|PR|EE|IR|DR) 66*74a4d8c2SCharles.Forsyth 67*74a4d8c2SCharles.Forsyth /* 68*74a4d8c2SCharles.Forsyth * MPC82x addresses 69*74a4d8c2SCharles.Forsyth */ 70*74a4d8c2SCharles.Forsyth #define BCSRMEM 0xFA400000 71*74a4d8c2SCharles.Forsyth #define FLASHMEM 0xFFC00000 72*74a4d8c2SCharles.Forsyth #define INTMEM 0xFA200000 73*74a4d8c2SCharles.Forsyth 74*74a4d8c2SCharles.Forsyth #define DPRAM (INTMEM+0x2000) 75*74a4d8c2SCharles.Forsyth #define DPLEN1 0x400 76*74a4d8c2SCharles.Forsyth #define DPLEN2 0x200 77*74a4d8c2SCharles.Forsyth #define DPLEN3 0x100 78*74a4d8c2SCharles.Forsyth #define DPBASE (DPRAM+DPLEN1) 79*74a4d8c2SCharles.Forsyth 80*74a4d8c2SCharles.Forsyth #define SCC1P (INTMEM+0x3C00) 81*74a4d8c2SCharles.Forsyth #define I2CP (INTMEM+0x3C80) 82*74a4d8c2SCharles.Forsyth #define MISCP (INTMEM+0x3CB0) 83*74a4d8c2SCharles.Forsyth #define IDMA1P (INTMEM+0x3CC0) 84*74a4d8c2SCharles.Forsyth #define SCC2P (INTMEM+0x3D00) 85*74a4d8c2SCharles.Forsyth #define SCC3P (INTMEM+0x3E00) 86*74a4d8c2SCharles.Forsyth #define SCC4P (INTMEM+0x3F00) 87*74a4d8c2SCharles.Forsyth #define SPIP (INTMEM+0x3D80) 88*74a4d8c2SCharles.Forsyth #define TIMERP (INTMEM+0x3DB0) 89*74a4d8c2SCharles.Forsyth #define SMC1P (INTMEM+0x3E80) 90*74a4d8c2SCharles.Forsyth #define DSP1P (INTMEM+0x3EC0) 91*74a4d8c2SCharles.Forsyth #define SMC2P (INTMEM+0x3F80) 92*74a4d8c2SCharles.Forsyth #define DSP2P (INTMEM+0x3FC0) 93*74a4d8c2SCharles.Forsyth 94*74a4d8c2SCharles.Forsyth #define KEEP_ALIVE_KEY 0x55ccaa33 /* clock and rtc register key */ 95