Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/sparc/include/asm/compat.h
17355 views
1
#ifndef _ASM_SPARC64_COMPAT_H
2
#define _ASM_SPARC64_COMPAT_H
3
/*
4
* Architecture specific compatibility types
5
*/
6
#include <linux/types.h>
7
8
#define COMPAT_USER_HZ 100
9
#define COMPAT_UTS_MACHINE "sparc\0\0"
10
11
typedef u32 compat_size_t;
12
typedef s32 compat_ssize_t;
13
typedef s32 compat_time_t;
14
typedef s32 compat_clock_t;
15
typedef s32 compat_pid_t;
16
typedef u16 __compat_uid_t;
17
typedef u16 __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_ino_t;
22
typedef u16 compat_dev_t;
23
typedef s32 compat_off_t;
24
typedef s64 compat_loff_t;
25
typedef s16 compat_nlink_t;
26
typedef u16 compat_ipc_pid_t;
27
typedef s32 compat_daddr_t;
28
typedef u32 compat_caddr_t;
29
typedef __kernel_fsid_t compat_fsid_t;
30
typedef s32 compat_key_t;
31
typedef s32 compat_timer_t;
32
33
typedef s32 compat_int_t;
34
typedef s32 compat_long_t;
35
typedef s64 compat_s64;
36
typedef u32 compat_uint_t;
37
typedef u32 compat_ulong_t;
38
typedef u64 compat_u64;
39
40
struct compat_timespec {
41
compat_time_t tv_sec;
42
s32 tv_nsec;
43
};
44
45
struct compat_timeval {
46
compat_time_t tv_sec;
47
s32 tv_usec;
48
};
49
50
struct compat_stat {
51
compat_dev_t st_dev;
52
compat_ino_t st_ino;
53
compat_mode_t st_mode;
54
compat_nlink_t st_nlink;
55
__compat_uid_t st_uid;
56
__compat_gid_t st_gid;
57
compat_dev_t st_rdev;
58
compat_off_t st_size;
59
compat_time_t st_atime;
60
compat_ulong_t st_atime_nsec;
61
compat_time_t st_mtime;
62
compat_ulong_t st_mtime_nsec;
63
compat_time_t st_ctime;
64
compat_ulong_t st_ctime_nsec;
65
compat_off_t st_blksize;
66
compat_off_t st_blocks;
67
u32 __unused4[2];
68
};
69
70
struct compat_stat64 {
71
unsigned long long st_dev;
72
73
unsigned long long st_ino;
74
75
unsigned int st_mode;
76
unsigned int st_nlink;
77
78
unsigned int st_uid;
79
unsigned int st_gid;
80
81
unsigned long long st_rdev;
82
83
unsigned char __pad3[8];
84
85
long long st_size;
86
unsigned int st_blksize;
87
88
unsigned char __pad4[8];
89
unsigned int st_blocks;
90
91
unsigned int st_atime;
92
unsigned int st_atime_nsec;
93
94
unsigned int st_mtime;
95
unsigned int st_mtime_nsec;
96
97
unsigned int st_ctime;
98
unsigned int st_ctime_nsec;
99
100
unsigned int __unused4;
101
unsigned int __unused5;
102
};
103
104
struct compat_flock {
105
short l_type;
106
short l_whence;
107
compat_off_t l_start;
108
compat_off_t l_len;
109
compat_pid_t l_pid;
110
short __unused;
111
};
112
113
#define F_GETLK64 12
114
#define F_SETLK64 13
115
#define F_SETLKW64 14
116
117
struct compat_flock64 {
118
short l_type;
119
short l_whence;
120
compat_loff_t l_start;
121
compat_loff_t l_len;
122
compat_pid_t l_pid;
123
short __unused;
124
};
125
126
struct compat_statfs {
127
int f_type;
128
int f_bsize;
129
int f_blocks;
130
int f_bfree;
131
int f_bavail;
132
int f_files;
133
int f_ffree;
134
compat_fsid_t f_fsid;
135
int f_namelen; /* SunOS ignores this field. */
136
int f_frsize;
137
int f_spare[5];
138
};
139
140
#define COMPAT_RLIM_INFINITY 0x7fffffff
141
142
typedef u32 compat_old_sigset_t;
143
144
#define _COMPAT_NSIG 64
145
#define _COMPAT_NSIG_BPW 32
146
147
typedef u32 compat_sigset_word;
148
149
#define COMPAT_OFF_T_MAX 0x7fffffff
150
#define COMPAT_LOFF_T_MAX 0x7fffffffffffffffL
151
152
/*
153
* A pointer passed in from user mode. This should not
154
* be used for syscall parameters, just declare them
155
* as pointers because the syscall entry code will have
156
* appropriately converted them already.
157
*/
158
typedef u32 compat_uptr_t;
159
160
static inline void __user *compat_ptr(compat_uptr_t uptr)
161
{
162
return (void __user *)(unsigned long)uptr;
163
}
164
165
static inline compat_uptr_t ptr_to_compat(void __user *uptr)
166
{
167
return (u32)(unsigned long)uptr;
168
}
169
170
static inline void __user *arch_compat_alloc_user_space(long len)
171
{
172
struct pt_regs *regs = current_thread_info()->kregs;
173
unsigned long usp = regs->u_regs[UREG_I6];
174
175
if (!(test_thread_flag(TIF_32BIT)))
176
usp += STACK_BIAS;
177
else
178
usp &= 0xffffffffUL;
179
180
usp -= len;
181
usp &= ~0x7UL;
182
183
return (void __user *) usp;
184
}
185
186
struct compat_ipc64_perm {
187
compat_key_t key;
188
__compat_uid32_t uid;
189
__compat_gid32_t gid;
190
__compat_uid32_t cuid;
191
__compat_gid32_t cgid;
192
unsigned short __pad1;
193
compat_mode_t mode;
194
unsigned short __pad2;
195
unsigned short seq;
196
unsigned long __unused1; /* yes they really are 64bit pads */
197
unsigned long __unused2;
198
};
199
200
struct compat_semid64_ds {
201
struct compat_ipc64_perm sem_perm;
202
unsigned int __pad1;
203
compat_time_t sem_otime;
204
unsigned int __pad2;
205
compat_time_t sem_ctime;
206
u32 sem_nsems;
207
u32 __unused1;
208
u32 __unused2;
209
};
210
211
struct compat_msqid64_ds {
212
struct compat_ipc64_perm msg_perm;
213
unsigned int __pad1;
214
compat_time_t msg_stime;
215
unsigned int __pad2;
216
compat_time_t msg_rtime;
217
unsigned int __pad3;
218
compat_time_t msg_ctime;
219
unsigned int msg_cbytes;
220
unsigned int msg_qnum;
221
unsigned int msg_qbytes;
222
compat_pid_t msg_lspid;
223
compat_pid_t msg_lrpid;
224
unsigned int __unused1;
225
unsigned int __unused2;
226
};
227
228
struct compat_shmid64_ds {
229
struct compat_ipc64_perm shm_perm;
230
unsigned int __pad1;
231
compat_time_t shm_atime;
232
unsigned int __pad2;
233
compat_time_t shm_dtime;
234
unsigned int __pad3;
235
compat_time_t shm_ctime;
236
compat_size_t shm_segsz;
237
compat_pid_t shm_cpid;
238
compat_pid_t shm_lpid;
239
unsigned int shm_nattch;
240
unsigned int __unused1;
241
unsigned int __unused2;
242
};
243
244
static inline int is_compat_task(void)
245
{
246
return test_thread_flag(TIF_32BIT);
247
}
248
249
#endif /* _ASM_SPARC64_COMPAT_H */
250
251