Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
powerpc
include
asm
compat.h
Go to the documentation of this file.
1
#ifndef _ASM_POWERPC_COMPAT_H
2
#define _ASM_POWERPC_COMPAT_H
3
#ifdef __KERNEL__
4
/*
5
* Architecture specific compatibility types
6
*/
7
#include <linux/types.h>
8
#include <linux/sched.h>
9
10
#define COMPAT_USER_HZ 100
11
#define COMPAT_UTS_MACHINE "ppc\0\0"
12
13
typedef
u32
compat_size_t
;
14
typedef
s32
compat_ssize_t
;
15
typedef
s32
compat_time_t
;
16
typedef
s32
compat_clock_t
;
17
typedef
s32
compat_pid_t
;
18
typedef
u32
__compat_uid_t
;
19
typedef
u32
__compat_gid_t
;
20
typedef
u32
__compat_uid32_t
;
21
typedef
u32
__compat_gid32_t
;
22
typedef
u32
compat_mode_t
;
23
typedef
u32
compat_ino_t
;
24
typedef
u32
compat_dev_t
;
25
typedef
s32
compat_off_t
;
26
typedef
s64
compat_loff_t
;
27
typedef
s16
compat_nlink_t
;
28
typedef
u16
compat_ipc_pid_t
;
29
typedef
s32
compat_daddr_t
;
30
typedef
u32
compat_caddr_t
;
31
typedef
__kernel_fsid_t
compat_fsid_t
;
32
typedef
s32
compat_key_t
;
33
typedef
s32
compat_timer_t
;
34
35
typedef
s32
compat_int_t
;
36
typedef
s32
compat_long_t
;
37
typedef
s64
compat_s64
;
38
typedef
u32
compat_uint_t
;
39
typedef
u32
compat_ulong_t
;
40
typedef
u64
compat_u64
;
41
typedef
u32
compat_uptr_t
;
42
43
struct
compat_timespec
{
44
compat_time_t
tv_sec
;
45
s32
tv_nsec
;
46
};
47
48
struct
compat_timeval
{
49
compat_time_t
tv_sec
;
50
s32
tv_usec
;
51
};
52
53
struct
compat_stat
{
54
compat_dev_t
st_dev
;
55
compat_ino_t
st_ino
;
56
compat_mode_t
st_mode
;
57
compat_nlink_t
st_nlink
;
58
__compat_uid32_t
st_uid
;
59
__compat_gid32_t
st_gid
;
60
compat_dev_t
st_rdev
;
61
compat_off_t
st_size
;
62
compat_off_t
st_blksize
;
63
compat_off_t
st_blocks
;
64
compat_time_t
st_atime
;
65
u32
st_atime_nsec
;
66
compat_time_t
st_mtime
;
67
u32
st_mtime_nsec
;
68
compat_time_t
st_ctime
;
69
u32
st_ctime_nsec
;
70
u32
__unused4
[2];
71
};
72
73
struct
compat_flock
{
74
short
l_type
;
75
short
l_whence
;
76
compat_off_t
l_start
;
77
compat_off_t
l_len
;
78
compat_pid_t
l_pid
;
79
};
80
81
#define F_GETLK64 12
/* using 'struct flock64' */
82
#define F_SETLK64 13
83
#define F_SETLKW64 14
84
85
struct
compat_flock64
{
86
short
l_type
;
87
short
l_whence
;
88
compat_loff_t
l_start
;
89
compat_loff_t
l_len
;
90
compat_pid_t
l_pid
;
91
};
92
93
struct
compat_statfs
{
94
int
f_type
;
95
int
f_bsize
;
96
int
f_blocks
;
97
int
f_bfree
;
98
int
f_bavail
;
99
int
f_files
;
100
int
f_ffree
;
101
compat_fsid_t
f_fsid
;
102
int
f_namelen
;
/* SunOS ignores this field. */
103
int
f_frsize
;
104
int
f_flags
;
105
int
f_spare
[4];
106
};
107
108
#define COMPAT_RLIM_OLD_INFINITY 0x7fffffff
109
#define COMPAT_RLIM_INFINITY 0xffffffff
110
111
typedef
u32
compat_old_sigset_t
;
112
113
#define _COMPAT_NSIG 64
114
#define _COMPAT_NSIG_BPW 32
115
116
typedef
u32
compat_sigset_word
;
117
118
typedef
union
compat_sigval
{
119
compat_int_t
sival_int
;
120
compat_uptr_t
sival_ptr
;
121
}
compat_sigval_t
;
122
123
#define SI_PAD_SIZE32 (128/sizeof(int) - 3)
124
125
typedef
struct
compat_siginfo
{
126
int
si_signo
;
127
int
si_errno
;
128
int
si_code
;
129
130
union
{
131
int
_pad
[
SI_PAD_SIZE32
];
132
133
/* kill() */
134
struct
{
135
compat_pid_t
_pid
;
/* sender's pid */
136
__compat_uid_t
_uid
;
/* sender's uid */
137
}
_kill
;
138
139
/* POSIX.1b timers */
140
struct
{
141
compat_timer_t
_tid
;
/* timer id */
142
int
_overrun
;
/* overrun count */
143
compat_sigval_t
_sigval
;
/* same as below */
144
int
_sys_private
;
/* not to be passed to user */
145
}
_timer
;
146
147
/* POSIX.1b signals */
148
struct
{
149
compat_pid_t
_pid
;
/* sender's pid */
150
__compat_uid_t
_uid
;
/* sender's uid */
151
compat_sigval_t
_sigval
;
152
}
_rt
;
153
154
/* SIGCHLD */
155
struct
{
156
compat_pid_t
_pid
;
/* which child */
157
__compat_uid_t
_uid
;
/* sender's uid */
158
int
_status
;
/* exit code */
159
compat_clock_t
_utime
;
160
compat_clock_t
_stime
;
161
}
_sigchld
;
162
163
/* SIGILL, SIGFPE, SIGSEGV, SIGBUS, SIGEMT */
164
struct
{
165
unsigned
int
_addr
;
/* faulting insn/memory ref. */
166
}
_sigfault
;
167
168
/* SIGPOLL */
169
struct
{
170
int
_band
;
/* POLL_IN, POLL_OUT, POLL_MSG */
171
int
_fd
;
172
}
_sigpoll
;
173
}
_sifields
;
174
}
compat_siginfo_t
;
175
176
#define COMPAT_OFF_T_MAX 0x7fffffff
177
#define COMPAT_LOFF_T_MAX 0x7fffffffffffffffL
178
179
/*
180
* A pointer passed in from user mode. This should not
181
* be used for syscall parameters, just declare them
182
* as pointers because the syscall entry code will have
183
* appropriately converted them already.
184
*/
185
186
static
inline
void
__user
*compat_ptr(
compat_uptr_t
uptr)
187
{
188
return
(
void
__user *)(
unsigned
long
)uptr;
189
}
190
191
static
inline
compat_uptr_t
ptr_to_compat(
void
__user *uptr)
192
{
193
return
(
u32
)(
unsigned
long
)uptr;
194
}
195
196
static
inline
void
__user
*arch_compat_alloc_user_space(
long
len)
197
{
198
struct
pt_regs
*
regs
=
current
->thread.regs;
199
unsigned
long
usp
= regs->
gpr
[1];
200
201
/*
202
* We can't access below the stack pointer in the 32bit ABI and
203
* can access 288 bytes in the 64bit ABI
204
*/
205
if
(!
is_32bit_task
())
206
usp -= 288;
207
208
return
(
void
__user *) (usp - len);
209
}
210
211
/*
212
* ipc64_perm is actually 32/64bit clean but since the compat layer refers to
213
* it we may as well define it.
214
*/
215
struct
compat_ipc64_perm
{
216
compat_key_t
key
;
217
__compat_uid_t
uid
;
218
__compat_gid_t
gid
;
219
__compat_uid_t
cuid
;
220
__compat_gid_t
cgid
;
221
compat_mode_t
mode
;
222
unsigned
int
seq
;
223
unsigned
int
__pad2
;
224
unsigned
long
__unused1
;
/* yes they really are 64bit pads */
225
unsigned
long
__unused2
;
226
};
227
228
struct
compat_semid64_ds
{
229
struct
compat_ipc64_perm
sem_perm
;
230
unsigned
int
__unused1
;
231
compat_time_t
sem_otime
;
232
unsigned
int
__unused2
;
233
compat_time_t
sem_ctime
;
234
compat_ulong_t
sem_nsems
;
235
compat_ulong_t
__unused3
;
236
compat_ulong_t
__unused4
;
237
};
238
239
struct
compat_msqid64_ds
{
240
struct
compat_ipc64_perm
msg_perm
;
241
unsigned
int
__unused1
;
242
compat_time_t
msg_stime
;
243
unsigned
int
__unused2
;
244
compat_time_t
msg_rtime
;
245
unsigned
int
__unused3
;
246
compat_time_t
msg_ctime
;
247
compat_ulong_t
msg_cbytes
;
248
compat_ulong_t
msg_qnum
;
249
compat_ulong_t
msg_qbytes
;
250
compat_pid_t
msg_lspid
;
251
compat_pid_t
msg_lrpid
;
252
compat_ulong_t
__unused4
;
253
compat_ulong_t
__unused5
;
254
};
255
256
struct
compat_shmid64_ds
{
257
struct
compat_ipc64_perm
shm_perm
;
258
unsigned
int
__unused1
;
259
compat_time_t
shm_atime
;
260
unsigned
int
__unused2
;
261
compat_time_t
shm_dtime
;
262
unsigned
int
__unused3
;
263
compat_time_t
shm_ctime
;
264
unsigned
int
__unused4
;
265
compat_size_t
shm_segsz
;
266
compat_pid_t
shm_cpid
;
267
compat_pid_t
shm_lpid
;
268
compat_ulong_t
shm_nattch
;
269
compat_ulong_t
__unused5
;
270
compat_ulong_t
__unused6;
271
};
272
273
static
inline
int
is_compat_task
(
void
)
274
{
275
return
is_32bit_task
();
276
}
277
278
#endif
/* __KERNEL__ */
279
#endif
/* _ASM_POWERPC_COMPAT_H */
Generated on Thu Jan 10 2013 13:03:33 for Linux Kernel by
1.8.2