1*a81c3ea0SDavid du Colombier /* 2*a81c3ea0SDavid du Colombier * Memory and machine-specific definitions. Used in C and assembler. 3*a81c3ea0SDavid du Colombier */ 4*a81c3ea0SDavid du Colombier 5*a81c3ea0SDavid du Colombier /* 6*a81c3ea0SDavid du Colombier * Sizes 7*a81c3ea0SDavid du Colombier */ 8*a81c3ea0SDavid du Colombier 9*a81c3ea0SDavid du Colombier #define BI2BY 8 /* bits per byte */ 10*a81c3ea0SDavid du Colombier #define BI2WD 32 /* bits per word */ 11*a81c3ea0SDavid du Colombier #define BY2WD 4 /* bytes per word */ 12*a81c3ea0SDavid du Colombier #define BY2V 8 /* bytes per vlong */ 13*a81c3ea0SDavid du Colombier 14*a81c3ea0SDavid du Colombier #define MAXBY2PG (16*1024) /* rounding for UTZERO in executables; see mkfile */ 15*a81c3ea0SDavid du Colombier #define UTROUND(t) ROUNDUP((t), MAXBY2PG) 16*a81c3ea0SDavid du Colombier 17*a81c3ea0SDavid du Colombier #define BIGPAGES /* use 16K page */ 18*a81c3ea0SDavid du Colombier #ifndef BIGPAGES 19*a81c3ea0SDavid du Colombier #define BY2PG 4096 /* bytes per page */ 20*a81c3ea0SDavid du Colombier #define PGSHIFT 12 /* log2(BY2PG) */ 21*a81c3ea0SDavid du Colombier #define PGSZ PGSZ4K 22*a81c3ea0SDavid du Colombier #define MACHSIZE (2*BY2PG) 23*a81c3ea0SDavid du Colombier #else 24*a81c3ea0SDavid du Colombier #define BY2PG (16*1024) /* bytes per page */ 25*a81c3ea0SDavid du Colombier #define PGSHIFT 14 /* log2(BY2PG) */ 26*a81c3ea0SDavid du Colombier #define PGSZ PGSZ16K 27*a81c3ea0SDavid du Colombier #define MACHSIZE BY2PG 28*a81c3ea0SDavid du Colombier #endif 29*a81c3ea0SDavid du Colombier 30*a81c3ea0SDavid du Colombier #define KSTACK 8192 /* Size of kernel stack */ 31*a81c3ea0SDavid du Colombier #define WD2PG (BY2PG/BY2WD) /* words per page */ 32*a81c3ea0SDavid du Colombier 33*a81c3ea0SDavid du Colombier #define MAXMACH 1 /* max # cpus system can run; see active.machs */ 34*a81c3ea0SDavid du Colombier #define STACKALIGN(sp) ((sp) & ~7) /* bug: assure with alloc */ 35*a81c3ea0SDavid du Colombier #define BLOCKALIGN 16 36*a81c3ea0SDavid du Colombier #define CACHELINESZ 32 /* loongson 2e */ 37*a81c3ea0SDavid du Colombier #define ICACHESIZE (64*1024) /* loongson 2e */ 38*a81c3ea0SDavid du Colombier #define DCACHESIZE (64*1024) /* loongson 2e */ 39*a81c3ea0SDavid du Colombier #define SCACHESIZE (512*1024) /* L2 cache, loongson 2e */ 40*a81c3ea0SDavid du Colombier 41*a81c3ea0SDavid du Colombier #define MASK(w) FMASK(0, w) 42*a81c3ea0SDavid du Colombier 43*a81c3ea0SDavid du Colombier /* 44*a81c3ea0SDavid du Colombier * Time 45*a81c3ea0SDavid du Colombier */ 46*a81c3ea0SDavid du Colombier #define HZ 100 /* clock frequency */ 47*a81c3ea0SDavid du Colombier #define MS2HZ (1000/HZ) /* millisec per clock tick */ 48*a81c3ea0SDavid du Colombier #define TK2SEC(t) ((t)/HZ) /* ticks to seconds */ 49*a81c3ea0SDavid du Colombier 50*a81c3ea0SDavid du Colombier /* 51*a81c3ea0SDavid du Colombier * CP0 registers 52*a81c3ea0SDavid du Colombier */ 53*a81c3ea0SDavid du Colombier 54*a81c3ea0SDavid du Colombier #define INDEX 0 55*a81c3ea0SDavid du Colombier #define RANDOM 1 56*a81c3ea0SDavid du Colombier #define TLBPHYS0 2 /* aka ENTRYLO0 */ 57*a81c3ea0SDavid du Colombier #define TLBPHYS1 3 /* aka ENTRYLO1 */ 58*a81c3ea0SDavid du Colombier #define CONTEXT 4 59*a81c3ea0SDavid du Colombier #define PAGEMASK 5 60*a81c3ea0SDavid du Colombier #define WIRED 6 61*a81c3ea0SDavid du Colombier #define BADVADDR 8 62*a81c3ea0SDavid du Colombier #define COUNT 9 63*a81c3ea0SDavid du Colombier #define TLBVIRT 10 /* aka ENTRYHI */ 64*a81c3ea0SDavid du Colombier #define COMPARE 11 65*a81c3ea0SDavid du Colombier #define STATUS 12 66*a81c3ea0SDavid du Colombier #define CAUSE 13 67*a81c3ea0SDavid du Colombier #define EPC 14 68*a81c3ea0SDavid du Colombier #define PRID 15 69*a81c3ea0SDavid du Colombier #define CONFIG 16 70*a81c3ea0SDavid du Colombier #define LLADDR 17 71*a81c3ea0SDavid du Colombier #define WATCHLO 18 72*a81c3ea0SDavid du Colombier #define WATCHHI 19 73*a81c3ea0SDavid du Colombier #define XCONTEXT 20 74*a81c3ea0SDavid du Colombier #define DIAGNOSE 22 /* loongson 2e */ 75*a81c3ea0SDavid du Colombier #define PERFCTL 24 76*a81c3ea0SDavid du Colombier #define PERFCOUNT 25 77*a81c3ea0SDavid du Colombier #define CACHEECC 26 78*a81c3ea0SDavid du Colombier #define CACHEERR 27 79*a81c3ea0SDavid du Colombier #define TAGLO 28 80*a81c3ea0SDavid du Colombier #define TAGHI 29 81*a81c3ea0SDavid du Colombier #define ERROREPC 30 82*a81c3ea0SDavid du Colombier 83*a81c3ea0SDavid du Colombier /* 84*a81c3ea0SDavid du Colombier * M(STATUS) bits 85*a81c3ea0SDavid du Colombier */ 86*a81c3ea0SDavid du Colombier #define KMODEMASK 0x0000001f 87*a81c3ea0SDavid du Colombier #define IE 0x00000001 /* master interrupt enable */ 88*a81c3ea0SDavid du Colombier #define EXL 0x00000002 /* exception level */ 89*a81c3ea0SDavid du Colombier #define ERL 0x00000004 /* error level */ 90*a81c3ea0SDavid du Colombier #define KSUPER 0x00000008 91*a81c3ea0SDavid du Colombier #define KUSER 0x00000010 92*a81c3ea0SDavid du Colombier #define KSU 0x00000018 93*a81c3ea0SDavid du Colombier #define UX 0x00000020 /* no [USK]X 64-bit extension bits on 24k */ 94*a81c3ea0SDavid du Colombier #define SX 0x00000040 95*a81c3ea0SDavid du Colombier #define KX 0x00000080 96*a81c3ea0SDavid du Colombier #define INTMASK 0x0000ff00 97*a81c3ea0SDavid du Colombier #define INTR0 0x00000100 /* interrupt enable bits */ 98*a81c3ea0SDavid du Colombier #define INTR1 0x00000200 99*a81c3ea0SDavid du Colombier #define INTR2 0x00000400 100*a81c3ea0SDavid du Colombier #define INTR3 0x00000800 101*a81c3ea0SDavid du Colombier #define INTR4 0x00001000 102*a81c3ea0SDavid du Colombier #define INTR5 0x00002000 103*a81c3ea0SDavid du Colombier #define INTR6 0x00004000 104*a81c3ea0SDavid du Colombier #define INTR7 0x00008000 105*a81c3ea0SDavid du Colombier //#define DE 0x00010000 /* not on 24k */ 106*a81c3ea0SDavid du Colombier #define TS 0x00200000 /* tlb shutdown; on 24k at least */ 107*a81c3ea0SDavid du Colombier #define BEV 0x00400000 /* bootstrap exception vectors */ 108*a81c3ea0SDavid du Colombier #define RE 0x02000000 /* reverse-endian in user mode */ 109*a81c3ea0SDavid du Colombier #define FR 0x04000000 /* enable 32 FP regs */ 110*a81c3ea0SDavid du Colombier #define CU0 0x10000000 111*a81c3ea0SDavid du Colombier #define CU1 0x20000000 /* FPU enable */ 112*a81c3ea0SDavid du Colombier 113*a81c3ea0SDavid du Colombier /* 114*a81c3ea0SDavid du Colombier * M(CONFIG) bits 115*a81c3ea0SDavid du Colombier */ 116*a81c3ea0SDavid du Colombier 117*a81c3ea0SDavid du Colombier #define CFG_K0 7 /* kseg0 cachability */ 118*a81c3ea0SDavid du Colombier 119*a81c3ea0SDavid du Colombier /* 120*a81c3ea0SDavid du Colombier * M(CAUSE) bits 121*a81c3ea0SDavid du Colombier */ 122*a81c3ea0SDavid du Colombier 123*a81c3ea0SDavid du Colombier #define BD (1<<31) /* last excep'n occurred in branch delay slot */ 124*a81c3ea0SDavid du Colombier 125*a81c3ea0SDavid du Colombier /* 126*a81c3ea0SDavid du Colombier * Exception codes 127*a81c3ea0SDavid du Colombier */ 128*a81c3ea0SDavid du Colombier #define EXCMASK 0x1f /* mask of all causes */ 129*a81c3ea0SDavid du Colombier #define CINT 0 /* external interrupt */ 130*a81c3ea0SDavid du Colombier #define CTLBM 1 /* TLB modification: store to unwritable page */ 131*a81c3ea0SDavid du Colombier #define CTLBL 2 /* TLB miss (load or fetch) */ 132*a81c3ea0SDavid du Colombier #define CTLBS 3 /* TLB miss (store) */ 133*a81c3ea0SDavid du Colombier #define CADREL 4 /* address error (load or fetch) */ 134*a81c3ea0SDavid du Colombier #define CADRES 5 /* address error (store) */ 135*a81c3ea0SDavid du Colombier #define CBUSI 6 /* bus error (fetch) */ 136*a81c3ea0SDavid du Colombier #define CBUSD 7 /* bus error (data load or store) */ 137*a81c3ea0SDavid du Colombier #define CSYS 8 /* system call */ 138*a81c3ea0SDavid du Colombier #define CBRK 9 /* breakpoint */ 139*a81c3ea0SDavid du Colombier #define CRES 10 /* reserved instruction */ 140*a81c3ea0SDavid du Colombier #define CCPU 11 /* coprocessor unusable */ 141*a81c3ea0SDavid du Colombier #define COVF 12 /* arithmetic overflow */ 142*a81c3ea0SDavid du Colombier #define CTRAP 13 /* trap */ 143*a81c3ea0SDavid du Colombier #define CVCEI 14 /* virtual coherence exception (instruction) */ 144*a81c3ea0SDavid du Colombier #define CFPE 15 /* floating point exception */ 145*a81c3ea0SDavid du Colombier #define CTLBRI 19 /* tlb read-inhibit */ 146*a81c3ea0SDavid du Colombier #define CTLBXI 20 /* tlb execute-inhibit */ 147*a81c3ea0SDavid du Colombier #define CWATCH 23 /* watch exception */ 148*a81c3ea0SDavid du Colombier #define CMCHK 24 /* machine checkcore */ 149*a81c3ea0SDavid du Colombier #define CCACHERR 30 /* cache error */ 150*a81c3ea0SDavid du Colombier #define CVCED 31 /* virtual coherence exception (data) */ 151*a81c3ea0SDavid du Colombier 152*a81c3ea0SDavid du Colombier /* 153*a81c3ea0SDavid du Colombier * M(CACHEECC) a.k.a. ErrCtl bits 154*a81c3ea0SDavid du Colombier */ 155*a81c3ea0SDavid du Colombier #define PE (1<<31) 156*a81c3ea0SDavid du Colombier #define LBE (1<<25) 157*a81c3ea0SDavid du Colombier #define WABE (1<<24) 158*a81c3ea0SDavid du Colombier 159*a81c3ea0SDavid du Colombier /* 160*a81c3ea0SDavid du Colombier * FCR31 bits, complement to u.h 161*a81c3ea0SDavid du Colombier */ 162*a81c3ea0SDavid du Colombier #define FPCINEX (1<<12) /* causes */ 163*a81c3ea0SDavid du Colombier #define FPCOVFL (1<<13) 164*a81c3ea0SDavid du Colombier #define FPCUNFL (1<<14) 165*a81c3ea0SDavid du Colombier #define FPCZDIV (1<<15) 166*a81c3ea0SDavid du Colombier #define FPCINVAL (1<<16) 167*a81c3ea0SDavid du Colombier #define FPUNIMP (1<<17) 168*a81c3ea0SDavid du Colombier #define FPEXCMASK (0x3f<<12) 169*a81c3ea0SDavid du Colombier 170*a81c3ea0SDavid du Colombier #define FPFLUSH (1<<24) 171*a81c3ea0SDavid du Colombier 172*a81c3ea0SDavid du Colombier /* 173*a81c3ea0SDavid du Colombier * Trap vectors 174*a81c3ea0SDavid du Colombier */ 175*a81c3ea0SDavid du Colombier 176*a81c3ea0SDavid du Colombier #define UTLBMISS (KSEG0+0x000) 177*a81c3ea0SDavid du Colombier #define XEXCEPTION (KSEG0+0x080) 178*a81c3ea0SDavid du Colombier #define CACHETRAP (KSEG0+0x100) 179*a81c3ea0SDavid du Colombier #define EXCEPTION (KSEG0+0x180) 180*a81c3ea0SDavid du Colombier 181*a81c3ea0SDavid du Colombier /* 182*a81c3ea0SDavid du Colombier * Magic registers 183*a81c3ea0SDavid du Colombier */ 184*a81c3ea0SDavid du Colombier 185*a81c3ea0SDavid du Colombier #define USER 24 /* R24 is up-> */ 186*a81c3ea0SDavid du Colombier #define MACH 25 /* R25 is m-> */ 187*a81c3ea0SDavid du Colombier 188*a81c3ea0SDavid du Colombier /* 189*a81c3ea0SDavid du Colombier * offsets in ureg.h for l.s 190*a81c3ea0SDavid du Colombier */ 191*a81c3ea0SDavid du Colombier #define Ureg_status (Uoffset+0) 192*a81c3ea0SDavid du Colombier #define Ureg_pc (Uoffset+4) 193*a81c3ea0SDavid du Colombier #define Ureg_sp (Uoffset+8) 194*a81c3ea0SDavid du Colombier #define Ureg_cause (Uoffset+12) 195*a81c3ea0SDavid du Colombier #define Ureg_badvaddr (Uoffset+16) 196*a81c3ea0SDavid du Colombier #define Ureg_tlbvirt (Uoffset+20) 197*a81c3ea0SDavid du Colombier 198*a81c3ea0SDavid du Colombier #define Ureg_hi (Uoffset+24) 199*a81c3ea0SDavid du Colombier #define Ureg_lo (Uoffset+28) 200*a81c3ea0SDavid du Colombier #define Ureg_r31 (Uoffset+32) 201*a81c3ea0SDavid du Colombier #define Ureg_r30 (Uoffset+36) 202*a81c3ea0SDavid du Colombier #define Ureg_r28 (Uoffset+40) 203*a81c3ea0SDavid du Colombier #define Ureg_r27 (Uoffset+44) 204*a81c3ea0SDavid du Colombier #define Ureg_r26 (Uoffset+48) 205*a81c3ea0SDavid du Colombier #define Ureg_r25 (Uoffset+52) 206*a81c3ea0SDavid du Colombier #define Ureg_r24 (Uoffset+56) 207*a81c3ea0SDavid du Colombier #define Ureg_r23 (Uoffset+60) 208*a81c3ea0SDavid du Colombier #define Ureg_r22 (Uoffset+64) 209*a81c3ea0SDavid du Colombier #define Ureg_r21 (Uoffset+68) 210*a81c3ea0SDavid du Colombier #define Ureg_r20 (Uoffset+72) 211*a81c3ea0SDavid du Colombier #define Ureg_r19 (Uoffset+76) 212*a81c3ea0SDavid du Colombier #define Ureg_r18 (Uoffset+80) 213*a81c3ea0SDavid du Colombier #define Ureg_r17 (Uoffset+84) 214*a81c3ea0SDavid du Colombier #define Ureg_r16 (Uoffset+88) 215*a81c3ea0SDavid du Colombier #define Ureg_r15 (Uoffset+92) 216*a81c3ea0SDavid du Colombier #define Ureg_r14 (Uoffset+96) 217*a81c3ea0SDavid du Colombier #define Ureg_r13 (Uoffset+100) 218*a81c3ea0SDavid du Colombier #define Ureg_r12 (Uoffset+104) 219*a81c3ea0SDavid du Colombier #define Ureg_r11 (Uoffset+108) 220*a81c3ea0SDavid du Colombier #define Ureg_r10 (Uoffset+112) 221*a81c3ea0SDavid du Colombier #define Ureg_r9 (Uoffset+116) 222*a81c3ea0SDavid du Colombier #define Ureg_r8 (Uoffset+120) 223*a81c3ea0SDavid du Colombier #define Ureg_r7 (Uoffset+124) 224*a81c3ea0SDavid du Colombier #define Ureg_r6 (Uoffset+128) 225*a81c3ea0SDavid du Colombier #define Ureg_r5 (Uoffset+132) 226*a81c3ea0SDavid du Colombier #define Ureg_r4 (Uoffset+136) 227*a81c3ea0SDavid du Colombier #define Ureg_r3 (Uoffset+140) 228*a81c3ea0SDavid du Colombier #define Ureg_r2 (Uoffset+144) 229*a81c3ea0SDavid du Colombier #define Ureg_r1 (Uoffset+148) 230*a81c3ea0SDavid du Colombier 231*a81c3ea0SDavid du Colombier /* ch and carrera used these defs */ 232*a81c3ea0SDavid du Colombier /* Sizeof(Ureg) + (R5,R6) + 16 bytes slop + retpc + ur */ 233*a81c3ea0SDavid du Colombier // #define UREGSIZE ((Ureg_r1+4-Uoffset) + 2*BY2V + 16 + BY2WD + BY2WD) 234*a81c3ea0SDavid du Colombier // #define Uoffset 8 235*a81c3ea0SDavid du Colombier 236*a81c3ea0SDavid du Colombier // #define UREGSIZE (Ureg_r1 + 4 - Uoffset) /* this ought to work */ 237*a81c3ea0SDavid du Colombier #define UREGSIZE ((Ureg_r1+4-Uoffset) + 2*BY2V + 16 + BY2WD + BY2WD) 238*a81c3ea0SDavid du Colombier #define Uoffset 0 239*a81c3ea0SDavid du Colombier #define Notuoffset 8 240*a81c3ea0SDavid du Colombier 241*a81c3ea0SDavid du Colombier /* 242*a81c3ea0SDavid du Colombier * MMU 243*a81c3ea0SDavid du Colombier */ 244*a81c3ea0SDavid du Colombier #define PGSZ4K (0x00<<13) 245*a81c3ea0SDavid du Colombier #define PGSZ16K (0x03<<13) 246*a81c3ea0SDavid du Colombier #define PGSZ64K (0x0F<<13) 247*a81c3ea0SDavid du Colombier #define PGSZ256K (0x3F<<13) 248*a81c3ea0SDavid du Colombier #define PGSZ1M (0xFF<<13) 249*a81c3ea0SDavid du Colombier #define PGSZ4M (0x3FF<<13) 250*a81c3ea0SDavid du Colombier #define PGSZ8M (0x7FF<<13) /* not on loongson 2e */ 251*a81c3ea0SDavid du Colombier #define PGSZ16M (0xFFF<<13) 252*a81c3ea0SDavid du Colombier #define PGSZ64M (0x3FFF<<13) /* not on loongson 2e */ 253*a81c3ea0SDavid du Colombier #define PGSZ256M (0xFFFF<<13) /* not on loongson 2e */ 254*a81c3ea0SDavid du Colombier 255*a81c3ea0SDavid du Colombier /* mips address spaces, tlb-mapped unless marked otherwise */ 256*a81c3ea0SDavid du Colombier #define KUSEG 0x00000000 /* user process */ 257*a81c3ea0SDavid du Colombier #define KSEG0 0x80000000 /* kernel (direct mapped, cached) */ 258*a81c3ea0SDavid du Colombier #define KSEG1 0xA0000000 /* kernel (direct mapped, uncached: i/o) */ 259*a81c3ea0SDavid du Colombier #define KSEG2 0xC0000000 /* kernel, used for TSTKTOP */ 260*a81c3ea0SDavid du Colombier #define KSEG3 0xE0000000 /* kernel, used by kmap */ 261*a81c3ea0SDavid du Colombier #define KSEGM 0xE0000000 /* mask to check which seg */ 262*a81c3ea0SDavid du Colombier 263*a81c3ea0SDavid du Colombier /* 264*a81c3ea0SDavid du Colombier * Fundamental addresses 265*a81c3ea0SDavid du Colombier */ 266*a81c3ea0SDavid du Colombier 267*a81c3ea0SDavid du Colombier #define CONFADDR (KZERO+0x1000) /* just above vectors, only for reboot */ 268*a81c3ea0SDavid du Colombier #define CONFARGV (KZERO+0x2000) /* used by assembler */ 269*a81c3ea0SDavid du Colombier #define REBOOTADDR (KZERO+0x3000) 270*a81c3ea0SDavid du Colombier #define MACHADDR (KTZERO-MAXMACH*MACHSIZE) /* Mach structures */ 271*a81c3ea0SDavid du Colombier #define MACHP(n) ((Mach *)(MACHADDR+(n)*MACHSIZE)) 272*a81c3ea0SDavid du Colombier #define ROM 0xbfc00000 273*a81c3ea0SDavid du Colombier #define KMAPADDR 0xE0000000 /* kmap'd addresses */ 274*a81c3ea0SDavid du Colombier #define WIREDADDR 0xE2000000 /* address wired kernel space */ 275*a81c3ea0SDavid du Colombier 276*a81c3ea0SDavid du Colombier #define PHYSCONS (KSEG1|0x1fd003f8) /* i8250 uart */ 277*a81c3ea0SDavid du Colombier 278*a81c3ea0SDavid du Colombier #define PIDXSHFT 12 279*a81c3ea0SDavid du Colombier #ifndef BIGPAGES 280*a81c3ea0SDavid du Colombier #define NCOLOR 8 281*a81c3ea0SDavid du Colombier #define PIDX ((NCOLOR-1)<<PIDXSHFT) 282*a81c3ea0SDavid du Colombier #define getpgcolor(a) (((ulong)(a)>>PIDXSHFT) % NCOLOR) 283*a81c3ea0SDavid du Colombier #else 284*a81c3ea0SDavid du Colombier /* no cache aliases are possible with pages of 16K or larger */ 285*a81c3ea0SDavid du Colombier #define NCOLOR 1 286*a81c3ea0SDavid du Colombier #define PIDX 0 287*a81c3ea0SDavid du Colombier #define getpgcolor(a) 0 288*a81c3ea0SDavid du Colombier #endif 289*a81c3ea0SDavid du Colombier #define KMAPSHIFT 15 290*a81c3ea0SDavid du Colombier 291*a81c3ea0SDavid du Colombier #define PTEGLOBL (1<<0) 292*a81c3ea0SDavid du Colombier #define PTEVALID (1<<1) 293*a81c3ea0SDavid du Colombier #define PTEWRITE (1<<2) 294*a81c3ea0SDavid du Colombier #define PTERONLY 0 295*a81c3ea0SDavid du Colombier #define PTEALGMASK (7<<3) 296*a81c3ea0SDavid du Colombier #define PTENONCOHERWT (0<<3) /* cached, write-through (slower) */ 297*a81c3ea0SDavid du Colombier #define PTEUNCACHED (2<<3) 298*a81c3ea0SDavid du Colombier #define PTENONCOHERWB (3<<3) /* cached, write-back */ 299*a81c3ea0SDavid du Colombier #define PTEUNCACHEDACC (7<<3) 300*a81c3ea0SDavid du Colombier /* rest are reserved on 24k */ 301*a81c3ea0SDavid du Colombier #define PTECOHERXCL (4<<3) 302*a81c3ea0SDavid du Colombier #define PTECOHERXCLW (5<<3) 303*a81c3ea0SDavid du Colombier #define PTECOHERUPDW (6<<3) 304*a81c3ea0SDavid du Colombier 305*a81c3ea0SDavid du Colombier #define PTECACHABILITY PTENONCOHERWB /* loongson 2E only allows this */ 306*a81c3ea0SDavid du Colombier 307*a81c3ea0SDavid du Colombier #define PTEPID(n) (n) 308*a81c3ea0SDavid du Colombier #define PTEMAPMEM (1024*1024) 309*a81c3ea0SDavid du Colombier #define PTEPERTAB (PTEMAPMEM/BY2PG) 310*a81c3ea0SDavid du Colombier #define SEGMAPSIZE 512 311*a81c3ea0SDavid du Colombier #define SSEGMAPSIZE 16 312*a81c3ea0SDavid du Colombier 313*a81c3ea0SDavid du Colombier #define STLBLOG 15 314*a81c3ea0SDavid du Colombier #define STLBSIZE (1<<STLBLOG) /* entries in the soft TLB */ 315*a81c3ea0SDavid du Colombier /* page # bits that don't fit in STLBLOG bits */ 316*a81c3ea0SDavid du Colombier #define HIPFNBITS (BI2WD - (PGSHIFT+1) - STLBLOG) 317*a81c3ea0SDavid du Colombier #define KPTELOG 8 318*a81c3ea0SDavid du Colombier #define KPTESIZE (1<<KPTELOG) /* entries in the kfault soft TLB */ 319*a81c3ea0SDavid du Colombier 320*a81c3ea0SDavid du Colombier #define TLBPID(n) ((n)&0xFF) 321*a81c3ea0SDavid du Colombier #define NTLBPID 256 /* # of pids (affects size of Mach) */ 322*a81c3ea0SDavid du Colombier #define NTLB 64 /* # of entries */ 323*a81c3ea0SDavid du Colombier #define TLBOFF 1 /* first tlb entry (0 used within mmuswitch) */ 324*a81c3ea0SDavid du Colombier #define WTLBOFF TLBOFF /* first large IO window tlb entry */ 325*a81c3ea0SDavid du Colombier #define NWTLB 0 /* # of large IO window tlb entries */ 326*a81c3ea0SDavid du Colombier #define KTLBOFF (WTLBOFF+NWTLB) /* first kfault tlb entry */ 327*a81c3ea0SDavid du Colombier #define NKTLB 4 /* # of initial kfault tlb entries */ 328*a81c3ea0SDavid du Colombier #define TLBROFF (KTLBOFF+NKTLB) /* offset of first randomly-indexed entry */ 329*a81c3ea0SDavid du Colombier 330*a81c3ea0SDavid du Colombier /* 331*a81c3ea0SDavid du Colombier * Address spaces 332*a81c3ea0SDavid du Colombier */ 333*a81c3ea0SDavid du Colombier #define UZERO KUSEG /* base of user address space */ 334*a81c3ea0SDavid du Colombier #define UTZERO (UZERO+MAXBY2PG) /* 1st user text address; see mkfile */ 335*a81c3ea0SDavid du Colombier #define USTKTOP (KZERO-BY2PG) /* byte just beyond user stack */ 336*a81c3ea0SDavid du Colombier #define USTKSIZE (8*1024*1024) /* size of user stack */ 337*a81c3ea0SDavid du Colombier #define TSTKTOP (KSEG2+USTKSIZE-BY2PG) /* top of temporary stack */ 338*a81c3ea0SDavid du Colombier #define TSTKSIZ (1024*1024/BY2PG) /* can be at most UTSKSIZE/BY2PG */ 339*a81c3ea0SDavid du Colombier #define KZERO KSEG0 /* base of kernel address space */ 340*a81c3ea0SDavid du Colombier #define KTZERO (KZERO+0x100000) /* first address in kernel text */ 341*a81c3ea0SDavid du Colombier #define MEMSIZE (256*MB) /* default memory for loongson 2e */ 342*a81c3ea0SDavid du Colombier #define PCIMEM 0x10000000 /* pci phys address start */ 343*a81c3ea0SDavid du Colombier #define IOBASE (KSEG1|0x1fd00000) /* i/o port base address */ 344*a81c3ea0SDavid du Colombier #define PCICFG (KSEG1|0x1fe00000) /* pci config base address */ 345*a81c3ea0SDavid du Colombier #define PCIDEVCFG (KSEG1|0x1fe80000) /* pci device config */ 346*a81c3ea0SDavid du Colombier #define HIGHMEM 0x20000000 /* mem above 256 MB phys address, loongson 2e */ 347