1*ce95e1b3SDavid du Colombier /* 2*ce95e1b3SDavid du Colombier * RISC-V definition 3*ce95e1b3SDavid du Colombier */ 4*ce95e1b3SDavid du Colombier #include <u.h> 5*ce95e1b3SDavid du Colombier #include <libc.h> 6*ce95e1b3SDavid du Colombier #include <bio.h> 7*ce95e1b3SDavid du Colombier #include "/riscv/include/ureg.h" 8*ce95e1b3SDavid du Colombier #include <mach.h> 9*ce95e1b3SDavid du Colombier 10*ce95e1b3SDavid du Colombier #define REGOFF(x) (ulong)(&((struct Ureg *) 0)->x) 11*ce95e1b3SDavid du Colombier #define REGSIZE sizeof(struct Ureg) 12*ce95e1b3SDavid du Colombier 13*ce95e1b3SDavid du Colombier Reglist riscvreglist[] = { 14*ce95e1b3SDavid du Colombier {"PC", REGOFF(pc), RINT, 'X'}, 15*ce95e1b3SDavid du Colombier {"SP", REGOFF(r27), RINT, 'X'}, 16*ce95e1b3SDavid du Colombier {"R31", REGOFF(r31), RINT, 'X'}, 17*ce95e1b3SDavid du Colombier {"R30", REGOFF(r30), RINT, 'X'}, 18*ce95e1b3SDavid du Colombier {"R28", REGOFF(r28), RINT, 'X'}, 19*ce95e1b3SDavid du Colombier {"R27", REGOFF(r27), RINT, 'X'}, 20*ce95e1b3SDavid du Colombier {"R26", REGOFF(r26), RINT, 'X'}, 21*ce95e1b3SDavid du Colombier {"R25", REGOFF(r25), RINT, 'X'}, 22*ce95e1b3SDavid du Colombier {"R24", REGOFF(r24), RINT, 'X'}, 23*ce95e1b3SDavid du Colombier {"R23", REGOFF(r23), RINT, 'X'}, 24*ce95e1b3SDavid du Colombier {"R22", REGOFF(r22), RINT, 'X'}, 25*ce95e1b3SDavid du Colombier {"R21", REGOFF(r21), RINT, 'X'}, 26*ce95e1b3SDavid du Colombier {"R20", REGOFF(r20), RINT, 'X'}, 27*ce95e1b3SDavid du Colombier {"R19", REGOFF(r19), RINT, 'X'}, 28*ce95e1b3SDavid du Colombier {"R18", REGOFF(r18), RINT, 'X'}, 29*ce95e1b3SDavid du Colombier {"R17", REGOFF(r17), RINT, 'X'}, 30*ce95e1b3SDavid du Colombier {"R16", REGOFF(r16), RINT, 'X'}, 31*ce95e1b3SDavid du Colombier {"R15", REGOFF(r15), RINT, 'X'}, 32*ce95e1b3SDavid du Colombier {"R14", REGOFF(r14), RINT, 'X'}, 33*ce95e1b3SDavid du Colombier {"R13", REGOFF(r13), RINT, 'X'}, 34*ce95e1b3SDavid du Colombier {"R12", REGOFF(r12), RINT, 'X'}, 35*ce95e1b3SDavid du Colombier {"R11", REGOFF(r11), RINT, 'X'}, 36*ce95e1b3SDavid du Colombier {"R10", REGOFF(r10), RINT, 'X'}, 37*ce95e1b3SDavid du Colombier {"R9", REGOFF(r9), RINT, 'X'}, 38*ce95e1b3SDavid du Colombier {"R8", REGOFF(r8), RINT, 'X'}, 39*ce95e1b3SDavid du Colombier {"R7", REGOFF(r7), RINT, 'X'}, 40*ce95e1b3SDavid du Colombier {"R6", REGOFF(r6), RINT, 'X'}, 41*ce95e1b3SDavid du Colombier {"R5", REGOFF(r5), RINT, 'X'}, 42*ce95e1b3SDavid du Colombier {"R4", REGOFF(r4), RINT, 'X'}, 43*ce95e1b3SDavid du Colombier {"R3", REGOFF(r3), RINT, 'X'}, 44*ce95e1b3SDavid du Colombier {"R2", REGOFF(r2), RINT, 'X'}, 45*ce95e1b3SDavid du Colombier {"R1", REGOFF(r1), RINT, 'X'}, 46*ce95e1b3SDavid du Colombier { 0 } 47*ce95e1b3SDavid du Colombier }; 48*ce95e1b3SDavid du Colombier 49*ce95e1b3SDavid du Colombier /* the machine description */ 50*ce95e1b3SDavid du Colombier Mach mriscv = 51*ce95e1b3SDavid du Colombier { 52*ce95e1b3SDavid du Colombier "riscv", 53*ce95e1b3SDavid du Colombier MRISCV, /* machine type */ 54*ce95e1b3SDavid du Colombier riscvreglist, /* register set */ 55*ce95e1b3SDavid du Colombier REGSIZE, /* register set size */ 56*ce95e1b3SDavid du Colombier 0, /* fp register set size */ 57*ce95e1b3SDavid du Colombier "PC", /* name of PC */ 58*ce95e1b3SDavid du Colombier "SP", /* name of SP */ 59*ce95e1b3SDavid du Colombier "R1", /* name of link register */ 60*ce95e1b3SDavid du Colombier "setSB", /* static base register name */ 61*ce95e1b3SDavid du Colombier 0, /* static base register value */ 62*ce95e1b3SDavid du Colombier 0x1000, /* page size */ 63*ce95e1b3SDavid du Colombier 0x80000000ULL, /* kernel base */ 64*ce95e1b3SDavid du Colombier 0xC0000000ULL, /* kernel text mask */ 65*ce95e1b3SDavid du Colombier 0x3FFFFFFFULL, /* user stack top */ 66*ce95e1b3SDavid du Colombier 2, /* quantization of pc */ 67*ce95e1b3SDavid du Colombier 4, /* szaddr */ 68*ce95e1b3SDavid du Colombier 4, /* szreg */ 69*ce95e1b3SDavid du Colombier 4, /* szfloat */ 70*ce95e1b3SDavid du Colombier 8, /* szdouble */ 71*ce95e1b3SDavid du Colombier }; 72