Merge tag 'for-5.12-rc1-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave...
[linux-2.6-microblaze.git] / arch / parisc / include / asm / compat.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _ASM_PARISC_COMPAT_H
3 #define _ASM_PARISC_COMPAT_H
4 /*
5  * Architecture specific compatibility types
6  */
7 #include <linux/types.h>
8 #include <linux/sched.h>
9 #include <linux/thread_info.h>
10
11 #include <asm-generic/compat.h>
12
13 #define COMPAT_USER_HZ          100
14 #define COMPAT_UTS_MACHINE      "parisc\0\0"
15
16 typedef u32     __compat_uid_t;
17 typedef u32     __compat_gid_t;
18 typedef u32     __compat_uid32_t;
19 typedef u32     __compat_gid32_t;
20 typedef u16     compat_mode_t;
21 typedef u32     compat_dev_t;
22 typedef u16     compat_nlink_t;
23 typedef u16     compat_ipc_pid_t;
24 typedef u32     compat_caddr_t;
25
26 struct compat_stat {
27         compat_dev_t            st_dev; /* dev_t is 32 bits on parisc */
28         compat_ino_t            st_ino; /* 32 bits */
29         compat_mode_t           st_mode;        /* 16 bits */
30         compat_nlink_t          st_nlink;       /* 16 bits */
31         u16                     st_reserved1;   /* old st_uid */
32         u16                     st_reserved2;   /* old st_gid */
33         compat_dev_t            st_rdev;
34         compat_off_t            st_size;
35         old_time32_t            st_atime;
36         u32                     st_atime_nsec;
37         old_time32_t            st_mtime;
38         u32                     st_mtime_nsec;
39         old_time32_t            st_ctime;
40         u32                     st_ctime_nsec;
41         s32                     st_blksize;
42         s32                     st_blocks;
43         u32                     __unused1;      /* ACL stuff */
44         compat_dev_t            __unused2;      /* network */
45         compat_ino_t            __unused3;      /* network */
46         u32                     __unused4;      /* cnodes */
47         u16                     __unused5;      /* netsite */
48         short                   st_fstype;
49         compat_dev_t            st_realdev;
50         u16                     st_basemode;
51         u16                     st_spareshort;
52         __compat_uid32_t        st_uid;
53         __compat_gid32_t        st_gid;
54         u32                     st_spare4[3];
55 };
56
57 struct compat_flock {
58         short                   l_type;
59         short                   l_whence;
60         compat_off_t            l_start;
61         compat_off_t            l_len;
62         compat_pid_t            l_pid;
63 };
64
65 struct compat_flock64 {
66         short                   l_type;
67         short                   l_whence;
68         compat_loff_t           l_start;
69         compat_loff_t           l_len;
70         compat_pid_t            l_pid;
71 };
72
73 struct compat_statfs {
74         s32             f_type;
75         s32             f_bsize;
76         s32             f_blocks;
77         s32             f_bfree;
78         s32             f_bavail;
79         s32             f_files;
80         s32             f_ffree;
81         __kernel_fsid_t f_fsid;
82         s32             f_namelen;
83         s32             f_frsize;
84         s32             f_flags;
85         s32             f_spare[4];
86 };
87
88 struct compat_sigcontext {
89         compat_int_t sc_flags;
90         compat_int_t sc_gr[32]; /* PSW in sc_gr[0] */
91         u64 sc_fr[32];
92         compat_int_t sc_iasq[2];
93         compat_int_t sc_iaoq[2];
94         compat_int_t sc_sar; /* cr11 */
95 };
96
97 #define COMPAT_RLIM_INFINITY 0xffffffff
98
99 typedef u32             compat_old_sigset_t;    /* at least 32 bits */
100
101 #define _COMPAT_NSIG            64
102 #define _COMPAT_NSIG_BPW        32
103
104 typedef u32             compat_sigset_word;
105
106 #define COMPAT_OFF_T_MAX        0x7fffffff
107
108 struct compat_ipc64_perm {
109         compat_key_t key;
110         __compat_uid_t uid;
111         __compat_gid_t gid;
112         __compat_uid_t cuid;
113         __compat_gid_t cgid;
114         unsigned short int __pad1;
115         compat_mode_t mode;
116         unsigned short int __pad2;
117         unsigned short int seq;
118         unsigned int __pad3;
119         unsigned long __unused1;        /* yes they really are 64bit pads */
120         unsigned long __unused2;
121 };
122
123 struct compat_semid64_ds {
124         struct compat_ipc64_perm sem_perm;
125         unsigned int sem_otime_high;
126         unsigned int sem_otime;
127         unsigned int sem_ctime_high;
128         unsigned int sem_ctime;
129         compat_ulong_t sem_nsems;
130         compat_ulong_t __unused3;
131         compat_ulong_t __unused4;
132 };
133
134 struct compat_msqid64_ds {
135         struct compat_ipc64_perm msg_perm;
136         unsigned int msg_stime_high;
137         unsigned int msg_stime;
138         unsigned int msg_rtime_high;
139         unsigned int msg_rtime;
140         unsigned int msg_ctime_high;
141         unsigned int msg_ctime;
142         compat_ulong_t msg_cbytes;
143         compat_ulong_t msg_qnum;
144         compat_ulong_t msg_qbytes;
145         compat_pid_t msg_lspid;
146         compat_pid_t msg_lrpid;
147         compat_ulong_t __unused4;
148         compat_ulong_t __unused5;
149 };
150
151 struct compat_shmid64_ds {
152         struct compat_ipc64_perm shm_perm;
153         unsigned int shm_atime_high;
154         unsigned int shm_atime;
155         unsigned int shm_dtime_high;
156         unsigned int shm_dtime;
157         unsigned int shm_ctime_high;
158         unsigned int shm_ctime;
159         unsigned int __unused4;
160         compat_size_t shm_segsz;
161         compat_pid_t shm_cpid;
162         compat_pid_t shm_lpid;
163         compat_ulong_t shm_nattch;
164         compat_ulong_t __unused5;
165         compat_ulong_t __unused6;
166 };
167
168 /*
169  * The type of struct elf_prstatus.pr_reg in compatible core dumps.
170  */
171 #define COMPAT_ELF_NGREG 80
172 typedef compat_ulong_t compat_elf_gregset_t[COMPAT_ELF_NGREG];
173
174 static __inline__ void __user *arch_compat_alloc_user_space(long len)
175 {
176         struct pt_regs *regs = &current->thread.regs;
177         return (void __user *)regs->gr[30];
178 }
179
180 static inline int __is_compat_task(struct task_struct *t)
181 {
182         return test_tsk_thread_flag(t, TIF_32BIT);
183 }
184
185 static inline int is_compat_task(void)
186 {
187         return __is_compat_task(current);
188 }
189
190 #endif /* _ASM_PARISC_COMPAT_H */