1*f8bc6aafSDavid du Colombier /* 2*f8bc6aafSDavid du Colombier * mips64 definition 3*f8bc6aafSDavid du Colombier */ 4*f8bc6aafSDavid du Colombier #include <u.h> 5*f8bc6aafSDavid du Colombier #include <libc.h> 6*f8bc6aafSDavid du Colombier #include <bio.h> 7*f8bc6aafSDavid du Colombier #include "/mips64/include/ureg.h" 8*f8bc6aafSDavid du Colombier #include <mach.h> 9*f8bc6aafSDavid du Colombier 10*f8bc6aafSDavid du Colombier #define REGOFF(x) (ulong)(&((struct Ureg *) 0)->x) 11*f8bc6aafSDavid du Colombier 12*f8bc6aafSDavid du Colombier #define SP REGOFF(sp) 13*f8bc6aafSDavid du Colombier #define PC REGOFF(pc) 14*f8bc6aafSDavid du Colombier #define R1 REGOFF(r1) 15*f8bc6aafSDavid du Colombier #define R31 REGOFF(r31) 16*f8bc6aafSDavid du Colombier #define FP_REG(x) (R1+8+4*(x)) 17*f8bc6aafSDavid du Colombier 18*f8bc6aafSDavid du Colombier #define REGSIZE sizeof(struct Ureg) 19*f8bc6aafSDavid du Colombier #define FPREGSIZE (4*33) 20*f8bc6aafSDavid du Colombier 21*f8bc6aafSDavid du Colombier Reglist mips64reglist[] = { 22*f8bc6aafSDavid du Colombier {"STATUS", REGOFF(status), RINT|RRDONLY, 'X'}, 23*f8bc6aafSDavid du Colombier {"CAUSE", REGOFF(cause), RINT|RRDONLY, 'X'}, 24*f8bc6aafSDavid du Colombier {"BADVADDR", REGOFF(badvaddr), RINT|RRDONLY, 'Y'}, 25*f8bc6aafSDavid du Colombier {"TLBVIRT", REGOFF(tlbvirt), RINT|RRDONLY, 'Y'}, 26*f8bc6aafSDavid du Colombier {"HI", REGOFF(hi), RINT|RRDONLY, 'Y'}, 27*f8bc6aafSDavid du Colombier {"LO", REGOFF(lo), RINT|RRDONLY, 'Y'}, 28*f8bc6aafSDavid du Colombier {"PC", PC, RINT, 'Y'}, 29*f8bc6aafSDavid du Colombier {"SP", SP, RINT, 'Y'}, 30*f8bc6aafSDavid du Colombier {"R31", R31, RINT, 'Y'}, 31*f8bc6aafSDavid du Colombier {"R30", REGOFF(r30), RINT, 'Y'}, 32*f8bc6aafSDavid du Colombier {"R28", REGOFF(r28), RINT, 'Y'}, 33*f8bc6aafSDavid du Colombier {"R27", REGOFF(r27), RINT, 'Y'}, 34*f8bc6aafSDavid du Colombier {"R26", REGOFF(r26), RINT, 'Y'}, 35*f8bc6aafSDavid du Colombier {"R25", REGOFF(r25), RINT, 'Y'}, 36*f8bc6aafSDavid du Colombier {"R24", REGOFF(r24), RINT, 'Y'}, 37*f8bc6aafSDavid du Colombier {"R23", REGOFF(r23), RINT, 'Y'}, 38*f8bc6aafSDavid du Colombier {"R22", REGOFF(r22), RINT, 'Y'}, 39*f8bc6aafSDavid du Colombier {"R21", REGOFF(r21), RINT, 'Y'}, 40*f8bc6aafSDavid du Colombier {"R20", REGOFF(r20), RINT, 'Y'}, 41*f8bc6aafSDavid du Colombier {"R19", REGOFF(r19), RINT, 'Y'}, 42*f8bc6aafSDavid du Colombier {"R18", REGOFF(r18), RINT, 'Y'}, 43*f8bc6aafSDavid du Colombier {"R17", REGOFF(r17), RINT, 'Y'}, 44*f8bc6aafSDavid du Colombier {"R16", REGOFF(r16), RINT, 'Y'}, 45*f8bc6aafSDavid du Colombier {"R15", REGOFF(r15), RINT, 'Y'}, 46*f8bc6aafSDavid du Colombier {"R14", REGOFF(r14), RINT, 'Y'}, 47*f8bc6aafSDavid du Colombier {"R13", REGOFF(r13), RINT, 'Y'}, 48*f8bc6aafSDavid du Colombier {"R12", REGOFF(r12), RINT, 'Y'}, 49*f8bc6aafSDavid du Colombier {"R11", REGOFF(r11), RINT, 'Y'}, 50*f8bc6aafSDavid du Colombier {"R10", REGOFF(r10), RINT, 'Y'}, 51*f8bc6aafSDavid du Colombier {"R9", REGOFF(r9), RINT, 'Y'}, 52*f8bc6aafSDavid du Colombier {"R8", REGOFF(r8), RINT, 'Y'}, 53*f8bc6aafSDavid du Colombier {"R7", REGOFF(r7), RINT, 'Y'}, 54*f8bc6aafSDavid du Colombier {"R6", REGOFF(r6), RINT, 'Y'}, 55*f8bc6aafSDavid du Colombier {"R5", REGOFF(r5), RINT, 'Y'}, 56*f8bc6aafSDavid du Colombier {"R4", REGOFF(r4), RINT, 'Y'}, 57*f8bc6aafSDavid du Colombier {"R3", REGOFF(r3), RINT, 'Y'}, 58*f8bc6aafSDavid du Colombier {"R2", REGOFF(r2), RINT, 'Y'}, 59*f8bc6aafSDavid du Colombier {"R1", REGOFF(r1), RINT, 'Y'}, 60*f8bc6aafSDavid du Colombier {"F0", FP_REG(0), RFLT, 'F'}, 61*f8bc6aafSDavid du Colombier {"F1", FP_REG(1), RFLT, 'f'}, 62*f8bc6aafSDavid du Colombier {"F2", FP_REG(2), RFLT, 'F'}, 63*f8bc6aafSDavid du Colombier {"F3", FP_REG(3), RFLT, 'f'}, 64*f8bc6aafSDavid du Colombier {"F4", FP_REG(4), RFLT, 'F'}, 65*f8bc6aafSDavid du Colombier {"F5", FP_REG(5), RFLT, 'f'}, 66*f8bc6aafSDavid du Colombier {"F6", FP_REG(6), RFLT, 'F'}, 67*f8bc6aafSDavid du Colombier {"F7", FP_REG(7), RFLT, 'f'}, 68*f8bc6aafSDavid du Colombier {"F8", FP_REG(8), RFLT, 'F'}, 69*f8bc6aafSDavid du Colombier {"F9", FP_REG(9), RFLT, 'f'}, 70*f8bc6aafSDavid du Colombier {"F10", FP_REG(10), RFLT, 'F'}, 71*f8bc6aafSDavid du Colombier {"F11", FP_REG(11), RFLT, 'f'}, 72*f8bc6aafSDavid du Colombier {"F12", FP_REG(12), RFLT, 'F'}, 73*f8bc6aafSDavid du Colombier {"F13", FP_REG(13), RFLT, 'f'}, 74*f8bc6aafSDavid du Colombier {"F14", FP_REG(14), RFLT, 'F'}, 75*f8bc6aafSDavid du Colombier {"F15", FP_REG(15), RFLT, 'f'}, 76*f8bc6aafSDavid du Colombier {"F16", FP_REG(16), RFLT, 'F'}, 77*f8bc6aafSDavid du Colombier {"F17", FP_REG(17), RFLT, 'f'}, 78*f8bc6aafSDavid du Colombier {"F18", FP_REG(18), RFLT, 'F'}, 79*f8bc6aafSDavid du Colombier {"F19", FP_REG(19), RFLT, 'f'}, 80*f8bc6aafSDavid du Colombier {"F20", FP_REG(20), RFLT, 'F'}, 81*f8bc6aafSDavid du Colombier {"F21", FP_REG(21), RFLT, 'f'}, 82*f8bc6aafSDavid du Colombier {"F22", FP_REG(22), RFLT, 'F'}, 83*f8bc6aafSDavid du Colombier {"F23", FP_REG(23), RFLT, 'f'}, 84*f8bc6aafSDavid du Colombier {"F24", FP_REG(24), RFLT, 'F'}, 85*f8bc6aafSDavid du Colombier {"F25", FP_REG(25), RFLT, 'f'}, 86*f8bc6aafSDavid du Colombier {"F26", FP_REG(26), RFLT, 'F'}, 87*f8bc6aafSDavid du Colombier {"F27", FP_REG(27), RFLT, 'f'}, 88*f8bc6aafSDavid du Colombier {"F28", FP_REG(28), RFLT, 'F'}, 89*f8bc6aafSDavid du Colombier {"F29", FP_REG(29), RFLT, 'f'}, 90*f8bc6aafSDavid du Colombier {"F30", FP_REG(30), RFLT, 'F'}, 91*f8bc6aafSDavid du Colombier {"F31", FP_REG(31), RFLT, 'f'}, 92*f8bc6aafSDavid du Colombier {"FPCR", FP_REG(32), RFLT, 'X'}, 93*f8bc6aafSDavid du Colombier { 0 } 94*f8bc6aafSDavid du Colombier }; 95*f8bc6aafSDavid du Colombier 96*f8bc6aafSDavid du Colombier /* the machine description */ 97*f8bc6aafSDavid du Colombier Mach mmips64 = 98*f8bc6aafSDavid du Colombier { 99*f8bc6aafSDavid du Colombier "mips64", 100*f8bc6aafSDavid du Colombier MMIPS2, /* machine type */ 101*f8bc6aafSDavid du Colombier mips64reglist, /* register set */ 102*f8bc6aafSDavid du Colombier REGSIZE, /* number of bytes in reg set */ 103*f8bc6aafSDavid du Colombier FPREGSIZE, /* number of bytes in fp reg set */ 104*f8bc6aafSDavid du Colombier "PC", /* name of PC */ 105*f8bc6aafSDavid du Colombier "SP", /* name of SP */ 106*f8bc6aafSDavid du Colombier "R31", /* name of link register */ 107*f8bc6aafSDavid du Colombier "setR30", /* static base register name */ 108*f8bc6aafSDavid du Colombier 0, /* value */ 109*f8bc6aafSDavid du Colombier 16*1024, /* page size */ 110*f8bc6aafSDavid du Colombier 0xFFFFFFFF80000000ULL, /* kernel base */ 111*f8bc6aafSDavid du Colombier 0xFFFFFFFF80000000ULL, /* kernel text mask */ 112*f8bc6aafSDavid du Colombier 0x7FFFFFFFULL, /* user stack top */ 113*f8bc6aafSDavid du Colombier 4, /* quantization of pc */ 114*f8bc6aafSDavid du Colombier 8, /* szaddr */ 115*f8bc6aafSDavid du Colombier 8, /* szreg */ 116*f8bc6aafSDavid du Colombier 4, /* szfloat */ 117*f8bc6aafSDavid du Colombier 8, /* szdouble */ 118*f8bc6aafSDavid du Colombier }; 119