1*06d0e372SGuo Ren /* SPDX-License-Identifier: GPL-2.0-only */ 2*06d0e372SGuo Ren #ifndef __ASM_COMPAT_H 3*06d0e372SGuo Ren #define __ASM_COMPAT_H 4*06d0e372SGuo Ren 5*06d0e372SGuo Ren #define COMPAT_UTS_MACHINE "riscv\0\0" 6*06d0e372SGuo Ren 7*06d0e372SGuo Ren /* 8*06d0e372SGuo Ren * Architecture specific compatibility types 9*06d0e372SGuo Ren */ 10*06d0e372SGuo Ren #include <linux/types.h> 11*06d0e372SGuo Ren #include <linux/sched.h> 12*06d0e372SGuo Ren #include <linux/sched/task_stack.h> 13*06d0e372SGuo Ren #include <asm-generic/compat.h> 14*06d0e372SGuo Ren is_compat_task(void)15*06d0e372SGuo Renstatic inline int is_compat_task(void) 16*06d0e372SGuo Ren { 17*06d0e372SGuo Ren return test_thread_flag(TIF_32BIT); 18*06d0e372SGuo Ren } 19*06d0e372SGuo Ren 20*06d0e372SGuo Ren struct compat_user_regs_struct { 21*06d0e372SGuo Ren compat_ulong_t pc; 22*06d0e372SGuo Ren compat_ulong_t ra; 23*06d0e372SGuo Ren compat_ulong_t sp; 24*06d0e372SGuo Ren compat_ulong_t gp; 25*06d0e372SGuo Ren compat_ulong_t tp; 26*06d0e372SGuo Ren compat_ulong_t t0; 27*06d0e372SGuo Ren compat_ulong_t t1; 28*06d0e372SGuo Ren compat_ulong_t t2; 29*06d0e372SGuo Ren compat_ulong_t s0; 30*06d0e372SGuo Ren compat_ulong_t s1; 31*06d0e372SGuo Ren compat_ulong_t a0; 32*06d0e372SGuo Ren compat_ulong_t a1; 33*06d0e372SGuo Ren compat_ulong_t a2; 34*06d0e372SGuo Ren compat_ulong_t a3; 35*06d0e372SGuo Ren compat_ulong_t a4; 36*06d0e372SGuo Ren compat_ulong_t a5; 37*06d0e372SGuo Ren compat_ulong_t a6; 38*06d0e372SGuo Ren compat_ulong_t a7; 39*06d0e372SGuo Ren compat_ulong_t s2; 40*06d0e372SGuo Ren compat_ulong_t s3; 41*06d0e372SGuo Ren compat_ulong_t s4; 42*06d0e372SGuo Ren compat_ulong_t s5; 43*06d0e372SGuo Ren compat_ulong_t s6; 44*06d0e372SGuo Ren compat_ulong_t s7; 45*06d0e372SGuo Ren compat_ulong_t s8; 46*06d0e372SGuo Ren compat_ulong_t s9; 47*06d0e372SGuo Ren compat_ulong_t s10; 48*06d0e372SGuo Ren compat_ulong_t s11; 49*06d0e372SGuo Ren compat_ulong_t t3; 50*06d0e372SGuo Ren compat_ulong_t t4; 51*06d0e372SGuo Ren compat_ulong_t t5; 52*06d0e372SGuo Ren compat_ulong_t t6; 53*06d0e372SGuo Ren }; 54*06d0e372SGuo Ren regs_to_cregs(struct compat_user_regs_struct * cregs,struct pt_regs * regs)55*06d0e372SGuo Renstatic inline void regs_to_cregs(struct compat_user_regs_struct *cregs, 56*06d0e372SGuo Ren struct pt_regs *regs) 57*06d0e372SGuo Ren { 58*06d0e372SGuo Ren cregs->pc = (compat_ulong_t) regs->epc; 59*06d0e372SGuo Ren cregs->ra = (compat_ulong_t) regs->ra; 60*06d0e372SGuo Ren cregs->sp = (compat_ulong_t) regs->sp; 61*06d0e372SGuo Ren cregs->gp = (compat_ulong_t) regs->gp; 62*06d0e372SGuo Ren cregs->tp = (compat_ulong_t) regs->tp; 63*06d0e372SGuo Ren cregs->t0 = (compat_ulong_t) regs->t0; 64*06d0e372SGuo Ren cregs->t1 = (compat_ulong_t) regs->t1; 65*06d0e372SGuo Ren cregs->t2 = (compat_ulong_t) regs->t2; 66*06d0e372SGuo Ren cregs->s0 = (compat_ulong_t) regs->s0; 67*06d0e372SGuo Ren cregs->s1 = (compat_ulong_t) regs->s1; 68*06d0e372SGuo Ren cregs->a0 = (compat_ulong_t) regs->a0; 69*06d0e372SGuo Ren cregs->a1 = (compat_ulong_t) regs->a1; 70*06d0e372SGuo Ren cregs->a2 = (compat_ulong_t) regs->a2; 71*06d0e372SGuo Ren cregs->a3 = (compat_ulong_t) regs->a3; 72*06d0e372SGuo Ren cregs->a4 = (compat_ulong_t) regs->a4; 73*06d0e372SGuo Ren cregs->a5 = (compat_ulong_t) regs->a5; 74*06d0e372SGuo Ren cregs->a6 = (compat_ulong_t) regs->a6; 75*06d0e372SGuo Ren cregs->a7 = (compat_ulong_t) regs->a7; 76*06d0e372SGuo Ren cregs->s2 = (compat_ulong_t) regs->s2; 77*06d0e372SGuo Ren cregs->s3 = (compat_ulong_t) regs->s3; 78*06d0e372SGuo Ren cregs->s4 = (compat_ulong_t) regs->s4; 79*06d0e372SGuo Ren cregs->s5 = (compat_ulong_t) regs->s5; 80*06d0e372SGuo Ren cregs->s6 = (compat_ulong_t) regs->s6; 81*06d0e372SGuo Ren cregs->s7 = (compat_ulong_t) regs->s7; 82*06d0e372SGuo Ren cregs->s8 = (compat_ulong_t) regs->s8; 83*06d0e372SGuo Ren cregs->s9 = (compat_ulong_t) regs->s9; 84*06d0e372SGuo Ren cregs->s10 = (compat_ulong_t) regs->s10; 85*06d0e372SGuo Ren cregs->s11 = (compat_ulong_t) regs->s11; 86*06d0e372SGuo Ren cregs->t3 = (compat_ulong_t) regs->t3; 87*06d0e372SGuo Ren cregs->t4 = (compat_ulong_t) regs->t4; 88*06d0e372SGuo Ren cregs->t5 = (compat_ulong_t) regs->t5; 89*06d0e372SGuo Ren cregs->t6 = (compat_ulong_t) regs->t6; 90*06d0e372SGuo Ren }; 91*06d0e372SGuo Ren cregs_to_regs(struct compat_user_regs_struct * cregs,struct pt_regs * regs)92*06d0e372SGuo Renstatic inline void cregs_to_regs(struct compat_user_regs_struct *cregs, 93*06d0e372SGuo Ren struct pt_regs *regs) 94*06d0e372SGuo Ren { 95*06d0e372SGuo Ren regs->epc = (unsigned long) cregs->pc; 96*06d0e372SGuo Ren regs->ra = (unsigned long) cregs->ra; 97*06d0e372SGuo Ren regs->sp = (unsigned long) cregs->sp; 98*06d0e372SGuo Ren regs->gp = (unsigned long) cregs->gp; 99*06d0e372SGuo Ren regs->tp = (unsigned long) cregs->tp; 100*06d0e372SGuo Ren regs->t0 = (unsigned long) cregs->t0; 101*06d0e372SGuo Ren regs->t1 = (unsigned long) cregs->t1; 102*06d0e372SGuo Ren regs->t2 = (unsigned long) cregs->t2; 103*06d0e372SGuo Ren regs->s0 = (unsigned long) cregs->s0; 104*06d0e372SGuo Ren regs->s1 = (unsigned long) cregs->s1; 105*06d0e372SGuo Ren regs->a0 = (unsigned long) cregs->a0; 106*06d0e372SGuo Ren regs->a1 = (unsigned long) cregs->a1; 107*06d0e372SGuo Ren regs->a2 = (unsigned long) cregs->a2; 108*06d0e372SGuo Ren regs->a3 = (unsigned long) cregs->a3; 109*06d0e372SGuo Ren regs->a4 = (unsigned long) cregs->a4; 110*06d0e372SGuo Ren regs->a5 = (unsigned long) cregs->a5; 111*06d0e372SGuo Ren regs->a6 = (unsigned long) cregs->a6; 112*06d0e372SGuo Ren regs->a7 = (unsigned long) cregs->a7; 113*06d0e372SGuo Ren regs->s2 = (unsigned long) cregs->s2; 114*06d0e372SGuo Ren regs->s3 = (unsigned long) cregs->s3; 115*06d0e372SGuo Ren regs->s4 = (unsigned long) cregs->s4; 116*06d0e372SGuo Ren regs->s5 = (unsigned long) cregs->s5; 117*06d0e372SGuo Ren regs->s6 = (unsigned long) cregs->s6; 118*06d0e372SGuo Ren regs->s7 = (unsigned long) cregs->s7; 119*06d0e372SGuo Ren regs->s8 = (unsigned long) cregs->s8; 120*06d0e372SGuo Ren regs->s9 = (unsigned long) cregs->s9; 121*06d0e372SGuo Ren regs->s10 = (unsigned long) cregs->s10; 122*06d0e372SGuo Ren regs->s11 = (unsigned long) cregs->s11; 123*06d0e372SGuo Ren regs->t3 = (unsigned long) cregs->t3; 124*06d0e372SGuo Ren regs->t4 = (unsigned long) cregs->t4; 125*06d0e372SGuo Ren regs->t5 = (unsigned long) cregs->t5; 126*06d0e372SGuo Ren regs->t6 = (unsigned long) cregs->t6; 127*06d0e372SGuo Ren }; 128*06d0e372SGuo Ren 129*06d0e372SGuo Ren #endif /* __ASM_COMPAT_H */ 130