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