| 1 | /*************************************************************** |
|---|
| 2 | ** |
|---|
| 3 | ** Broadcom Corp. Confidential |
|---|
| 4 | ** Copyright 1998-2000 Broadcom Corp. All Rights Reserved. |
|---|
| 5 | ** |
|---|
| 6 | ** THIS SOFTWARE MAY ONLY BE USED SUBJECT TO AN EXECUTED |
|---|
| 7 | ** SOFTWARE LICENSE AGREEMENT BETWEEN THE USER AND BROADCOM. |
|---|
| 8 | ** YOU HAVE NO RIGHT TO USE OR EXPLOIT THIS MATERIAL EXCEPT |
|---|
| 9 | ** SUBJECT TO THE TERMS OF SUCH AN AGREEMENT. |
|---|
| 10 | ** |
|---|
| 11 | ** File: bcm_mips.h |
|---|
| 12 | ** Description: MIPS definitions. |
|---|
| 13 | ** |
|---|
| 14 | ****************************************************************/ |
|---|
| 15 | #ifndef __BCM_MIPS__ |
|---|
| 16 | #define __BCM_MIPS__ |
|---|
| 17 | |
|---|
| 18 | #define zero $0 /* wired zero */ |
|---|
| 19 | #define AT $1 /* assembler temp - uppercase because of ".set at" */ |
|---|
| 20 | #define v0 $2 /* return value */ |
|---|
| 21 | #define v1 $3 |
|---|
| 22 | #define a0 $4 /* argument registers */ |
|---|
| 23 | #define a1 $5 |
|---|
| 24 | #define a2 $6 |
|---|
| 25 | #define a3 $7 |
|---|
| 26 | #define t0 $8 /* caller saved */ |
|---|
| 27 | #define t1 $9 |
|---|
| 28 | #define t2 $10 |
|---|
| 29 | #define t3 $11 |
|---|
| 30 | #define t4 $12 |
|---|
| 31 | #define t5 $13 |
|---|
| 32 | #define t6 $14 |
|---|
| 33 | #define t7 $15 |
|---|
| 34 | #define s0 $16 /* callee saved */ |
|---|
| 35 | #define s1 $17 |
|---|
| 36 | #define s2 $18 |
|---|
| 37 | #define s3 $19 |
|---|
| 38 | #define s4 $20 |
|---|
| 39 | #define s5 $21 |
|---|
| 40 | #define s6 $22 |
|---|
| 41 | #define s7 $23 |
|---|
| 42 | #define t8 $24 /* caller saved */ |
|---|
| 43 | #define t9 $25 |
|---|
| 44 | #define jp $25 /* PIC jump register */ |
|---|
| 45 | #define k0 $26 /* kernel scratch */ |
|---|
| 46 | #define k1 $27 |
|---|
| 47 | #define gp $28 /* global pointer */ |
|---|
| 48 | #define sp $29 /* stack pointer */ |
|---|
| 49 | #define fp $30 /* frame pointer */ |
|---|
| 50 | #define s8 $30 /* same like fp! */ |
|---|
| 51 | #define ra $31 /* return address */ |
|---|
| 52 | |
|---|
| 53 | /* |
|---|
| 54 | * Coprocessor 0 register names |
|---|
| 55 | */ |
|---|
| 56 | #define CP0_INDEX $0 |
|---|
| 57 | #define CP0_RANDOM $1 |
|---|
| 58 | #define CP0_ENTRYLO0 $2 |
|---|
| 59 | #define CP0_ENTRYLO1 $3 |
|---|
| 60 | #define CP0_CONF $3 |
|---|
| 61 | #define CP0_CONTEXT $4 |
|---|
| 62 | #define CP0_PAGEMASK $5 |
|---|
| 63 | #define CP0_WIRED $6 |
|---|
| 64 | #define CP0_INFO $7 |
|---|
| 65 | #define CP0_BADVADDR $8 |
|---|
| 66 | #define CP0_COUNT $9 |
|---|
| 67 | #define CP0_ENTRYHI $10 |
|---|
| 68 | #define CP0_COMPARE $11 |
|---|
| 69 | #define CP0_STATUS $12 |
|---|
| 70 | #define CP0_CAUSE $13 |
|---|
| 71 | #define CP0_EPC $14 |
|---|
| 72 | #define CP0_PRID $15 |
|---|
| 73 | #define CP0_CONFIG $16 |
|---|
| 74 | #define CP0_LLADDR $17 |
|---|
| 75 | #define CP0_WATCHLO $18 |
|---|
| 76 | #define CP0_WATCHHI $19 |
|---|
| 77 | #define CP0_XCONTEXT $20 |
|---|
| 78 | #define CP0_FRAMEMASK $21 |
|---|
| 79 | #define CP0_DIAGNOSTIC $22 |
|---|
| 80 | #define CP0_DEBUG $23 |
|---|
| 81 | #define CP0_DEPC $24 |
|---|
| 82 | #define CP0_PERFORMANCE $25 |
|---|
| 83 | #define CP0_ECC $26 |
|---|
| 84 | #define CP0_CACHEERR $27 |
|---|
| 85 | #define CP0_TAGLO $28 |
|---|
| 86 | #define CP0_DATALO $28,1 |
|---|
| 87 | #define CP0_TAGHI $29 |
|---|
| 88 | #define CP0_ERROREPC $30 |
|---|
| 89 | #define CP0_DESAVE $31 |
|---|
| 90 | |
|---|
| 91 | |
|---|
| 92 | #define ST0_CU0 0x10000000 |
|---|
| 93 | #define ST0_BEV 0x00400000 |
|---|
| 94 | #define ST0_IE 0x00000001 |
|---|
| 95 | #define ST0_EXL 0x00000002 |
|---|
| 96 | #define ST0_ERL 0x00000004 |
|---|
| 97 | #define ST0_KSU 0x00000018 |
|---|
| 98 | # define KSU_USER 0x00000010 |
|---|
| 99 | # define KSU_SUPERVISOR 0x00000008 |
|---|
| 100 | # define KSU_KERNEL 0x00000000 |
|---|
| 101 | #define ST0_UX 0x00000020 |
|---|
| 102 | #define ST0_SX 0x00000040 |
|---|
| 103 | #define ST0_KX 0x00000080 |
|---|
| 104 | #define ST0_DE 0x00010000 |
|---|
| 105 | #define ST0_CE 0x00020000 |
|---|
| 106 | #define ST0_IM 0x0000ff00 |
|---|
| 107 | #define STATUSB_IP0 8 |
|---|
| 108 | #define STATUSF_IP0 (1UL << 8) |
|---|
| 109 | #define STATUSB_IP1 9 |
|---|
| 110 | #define STATUSF_IP1 (1UL << 9) |
|---|
| 111 | #define STATUSB_IP2 10 |
|---|
| 112 | #define STATUSF_IP2 (1UL << 10) |
|---|
| 113 | #define STATUSB_IP3 11 |
|---|
| 114 | #define STATUSF_IP3 (1UL << 11) |
|---|
| 115 | #define STATUSB_IP4 12 |
|---|
| 116 | #define STATUSF_IP4 (1UL << 12) |
|---|
| 117 | #define STATUSB_IP5 13 |
|---|
| 118 | #define STATUSF_IP5 (1UL << 13) |
|---|
| 119 | #define STATUSB_IP6 14 |
|---|
| 120 | #define STATUSF_IP6 (1UL << 14) |
|---|
| 121 | #define STATUSB_IP7 15 |
|---|
| 122 | #define STATUSF_IP7 (1UL << 15) |
|---|
| 123 | |
|---|
| 124 | |
|---|
| 125 | #define CAUSEB_EXCCODE 2 |
|---|
| 126 | #define CAUSEF_EXCCODE (31UL << 2) |
|---|
| 127 | #define CAUSEB_IP 8 |
|---|
| 128 | #define CAUSEF_IP (255UL << 8) |
|---|
| 129 | #define CAUSEB_IP0 8 |
|---|
| 130 | #define CAUSEF_IP0 (1UL << 8) |
|---|
| 131 | #define CAUSEB_IP1 9 |
|---|
| 132 | #define CAUSEF_IP1 (1UL << 9) |
|---|
| 133 | #define CAUSEB_IP2 10 |
|---|
| 134 | #define CAUSEF_IP2 (1UL << 10) |
|---|
| 135 | #define CAUSEB_IP3 11 |
|---|
| 136 | #define CAUSEF_IP3 (1UL << 11) |
|---|
| 137 | #define CAUSEB_IP4 12 |
|---|
| 138 | #define CAUSEF_IP4 (1UL << 12) |
|---|
| 139 | #define CAUSEB_IP5 13 |
|---|
| 140 | #define CAUSEF_IP5 (1UL << 13) |
|---|
| 141 | #define CAUSEB_IP6 14 |
|---|
| 142 | #define CAUSEF_IP6 (1UL << 14) |
|---|
| 143 | #define CAUSEB_IP7 15 |
|---|
| 144 | #define CAUSEF_IP7 (1UL << 15) |
|---|
| 145 | #define CAUSEB_IV 23 |
|---|
| 146 | #define CAUSEF_IV (1UL << 23) |
|---|
| 147 | |
|---|
| 148 | /* Location of pointer to the current exception handler */ |
|---|
| 149 | |
|---|
| 150 | #define VECTOR_START 0x8000017C |
|---|
| 151 | |
|---|
| 152 | /* |
|---|
| 153 | * Some debug CP0 Register locations within saved register space |
|---|
| 154 | */ |
|---|
| 155 | #define ROFF_NUM_REG (48) /* Size of register space in bytes */ |
|---|
| 156 | #define ROFF_REG_SPACE (ROFF_NUM_REG * 4) /* Size of register space in bytes */ |
|---|
| 157 | #define ROFF_SP 29 /* word offset to sp */ |
|---|
| 158 | #define ROFF_RA 31 /* word offset to ra */ |
|---|
| 159 | #define ROFF_SR 32 /* word offset to CP0_STATUS */ |
|---|
| 160 | #define ROFF_LO 33 /* word offset to LO */ |
|---|
| 161 | #define ROFF_HI 34 /* word offset to HI */ |
|---|
| 162 | #define ROFF_BADVA 35 /* word offset to CP0_BADVADDR */ |
|---|
| 163 | #define ROFF_CAUSE 36 /* word offset to CP0_CAUSE */ |
|---|
| 164 | #define ROFF_PC 37 /* word offset to CP0_EPC */ |
|---|
| 165 | #define ROFF_START_PC 38 /* word offset to new task PC */ |
|---|
| 166 | #define ROFF_ERROR_PC 39 /* word offset to ErrorPC */ |
|---|
| 167 | #define ROFF_START_A0 40 /* word offset to startup a0 */ |
|---|
| 168 | |
|---|
| 169 | /* Macros */ |
|---|
| 170 | #define BCM_SAVE(reg) \ |
|---|
| 171 | sw AT, 1*4(reg) ; \ |
|---|
| 172 | .set at ; \ |
|---|
| 173 | sw $0, 0(reg) ; \ |
|---|
| 174 | sw v0, 2*4(reg) ; \ |
|---|
| 175 | sw v1, 3*4(reg) ; \ |
|---|
| 176 | sw a0, 4*4(reg) ; \ |
|---|
| 177 | sw a1, 5*4(reg) ; \ |
|---|
| 178 | sw a2, 6*4(reg) ; \ |
|---|
| 179 | sw a3, 7*4(reg) ; \ |
|---|
| 180 | sw t0, 8*4(reg) ; \ |
|---|
| 181 | sw t1, 9*4(reg) ; \ |
|---|
| 182 | sw t2,10*4(reg) ; \ |
|---|
| 183 | sw t3,11*4(reg) ; \ |
|---|
| 184 | sw t4,12*4(reg) ; \ |
|---|
| 185 | sw t5,13*4(reg) ; \ |
|---|
| 186 | sw t6,14*4(reg) ; \ |
|---|
| 187 | sw t7,15*4(reg) ; \ |
|---|
| 188 | sw s0,16*4(reg) ; \ |
|---|
| 189 | sw s1,17*4(reg) ; \ |
|---|
| 190 | sw s2,18*4(reg) ; \ |
|---|
| 191 | sw s3,19*4(reg) ; \ |
|---|
| 192 | sw s4,20*4(reg) ; \ |
|---|
| 193 | sw s5,21*4(reg) ; \ |
|---|
| 194 | sw s6,22*4(reg) ; \ |
|---|
| 195 | sw s7,23*4(reg) ; \ |
|---|
| 196 | sw t8,24*4(reg) ; \ |
|---|
| 197 | sw t9,25*4(reg) ; \ |
|---|
| 198 | sw gp,28*4(reg) ; \ |
|---|
| 199 | sw sp,29*4(reg) ; \ |
|---|
| 200 | sw s8,30*4(reg) ; \ |
|---|
| 201 | sw ra,31*4(reg) ; \ |
|---|
| 202 | mfc0 t0,CP0_BADVADDR ; \ |
|---|
| 203 | mfc0 t1,CP0_STATUS ; \ |
|---|
| 204 | mfc0 a1,CP0_CAUSE ; \ |
|---|
| 205 | mfc0 t2,CP0_EPC ; \ |
|---|
| 206 | mflo t3 ; \ |
|---|
| 207 | mfhi t4 ; \ |
|---|
| 208 | mfc0 t5, CP0_ERROREPC; \ |
|---|
| 209 | sw t0, ROFF_BADVA * 4(reg) ; \ |
|---|
| 210 | sw t1, ROFF_SR * 4(reg) ; \ |
|---|
| 211 | sw a1, ROFF_CAUSE * 4(reg) ; \ |
|---|
| 212 | sw t2, ROFF_PC * 4(reg) ; \ |
|---|
| 213 | sw t3, ROFF_LO * 4(reg) ; \ |
|---|
| 214 | sw t4, ROFF_HI * 4(reg) ; \ |
|---|
| 215 | sw t5, ROFF_ERROR_PC * 4(reg) ; |
|---|
| 216 | |
|---|
| 217 | |
|---|
| 218 | #define BCM_RESTORE(reg) \ |
|---|
| 219 | lw t0,ROFF_SR * 4(reg) ; \ |
|---|
| 220 | mtc0 t0,CP0_STATUS ; \ |
|---|
| 221 | lw t1,ROFF_PC * 4(reg) ; \ |
|---|
| 222 | mtc0 t1,CP0_EPC ; \ |
|---|
| 223 | lw t0,ROFF_LO * 4(reg) ; \ |
|---|
| 224 | lw t1,ROFF_HI * 4(reg) ; \ |
|---|
| 225 | mtlo t0 ; \ |
|---|
| 226 | mthi t1 ; \ |
|---|
| 227 | .set noat ; \ |
|---|
| 228 | lw AT, 1*4(reg) ; \ |
|---|
| 229 | .set at ; \ |
|---|
| 230 | lw v0, 2*4(reg) ; \ |
|---|
| 231 | lw v1, 3*4(reg) ; \ |
|---|
| 232 | lw a0, 4*4(reg) ; \ |
|---|
| 233 | lw a1, 5*4(reg) ; \ |
|---|
| 234 | lw a2, 6*4(reg) ; \ |
|---|
| 235 | lw a3, 7*4(reg) ; \ |
|---|
| 236 | lw t0, 8*4(reg) ; \ |
|---|
| 237 | lw t1, 9*4(reg) ; \ |
|---|
| 238 | lw t2,10*4(reg) ; \ |
|---|
| 239 | lw t3,11*4(reg) ; \ |
|---|
| 240 | lw t4,12*4(reg) ; \ |
|---|
| 241 | lw t5,13*4(reg) ; \ |
|---|
| 242 | lw t6,14*4(reg) ; \ |
|---|
| 243 | lw t7,15*4(reg) ; \ |
|---|
| 244 | lw s0,16*4(reg) ; \ |
|---|
| 245 | lw s1,17*4(reg) ; \ |
|---|
| 246 | lw s2,18*4(reg) ; \ |
|---|
| 247 | lw s3,19*4(reg) ; \ |
|---|
| 248 | lw s4,20*4(reg) ; \ |
|---|
| 249 | lw s5,21*4(reg) ; \ |
|---|
| 250 | lw s6,22*4(reg) ; \ |
|---|
| 251 | lw s7,23*4(reg) ; \ |
|---|
| 252 | lw t8,24*4(reg) ; \ |
|---|
| 253 | lw t9,25*4(reg) ; \ |
|---|
| 254 | lw gp,28*4(reg) ; \ |
|---|
| 255 | lw sp,29*4(reg) ; \ |
|---|
| 256 | lw s8,30*4(reg) ; \ |
|---|
| 257 | lw ra,31*4(reg) ; |
|---|
| 258 | |
|---|
| 259 | |
|---|
| 260 | |
|---|
| 261 | #define K0BASE 0x80000000 |
|---|
| 262 | #define K1BASE 0xa0000000 |
|---|
| 263 | |
|---|
| 264 | #endif /* __BCM_MIPS__ */ |
|---|
| 265 | |
|---|