blob: 1eb61d690e47ed46819ef19439ac62e904765760 [file] [log] [blame]
nethercote73b526f2004-10-31 18:48:21 +00001
2/*--------------------------------------------------------------------*/
njn4de47b12005-05-16 03:25:12 +00003/*--- Linux-specific kernel interface. vki-linux.h ---*/
nethercote73b526f2004-10-31 18:48:21 +00004/*--------------------------------------------------------------------*/
5
6/*
njnb9c427c2004-12-01 14:14:42 +00007 This file is part of Valgrind, a dynamic binary instrumentation
8 framework.
nethercote73b526f2004-10-31 18:48:21 +00009
njn53612422005-03-12 16:22:54 +000010 Copyright (C) 2000-2005 Julian Seward
nethercote73b526f2004-10-31 18:48:21 +000011 jseward@acm.org
12
13 This program is free software; you can redistribute it and/or
14 modify it under the terms of the GNU General Public License as
15 published by the Free Software Foundation; either version 2 of the
16 License, or (at your option) any later version.
17
18 This program is distributed in the hope that it will be useful, but
19 WITHOUT ANY WARRANTY; without even the implied warranty of
20 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21 General Public License for more details.
22
23 You should have received a copy of the GNU General Public License
24 along with this program; if not, write to the Free Software
25 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
26 02111-1307, USA.
27
28 The GNU General Public License is contained in the file COPYING.
29*/
30
31/* This file defines types and constants for the kernel interface, and to
32 make that clear everything is prefixed VKI_/vki_.
33
34 All code is copied verbatim from kernel source files, except that:
35 - VKI_/vki_ prefixes are added
nethercote73b526f2004-10-31 18:48:21 +000036 - some extra explanatory comments are included; they are all within
37 "[[ ]]"
38 - for some types, we only care about the size; for a few of them (big
39 ones that are painful to fully drag in here), a VKI_SIZEOF_* constant
40 is used.
41
42 The files the code is taken from is indicated.
43
44 Note especially that the types are not the glibc versions, many of which
45 are different to those in here.
46
njnac7924c2005-05-02 13:24:14 +000047 Also note that this file contains all the generic header info, ie. that
sewardjedef1462005-05-02 17:11:58 +000048 from linux/include/linux/ *.h. The arch-specific header info, eg. that
njn4de47b12005-05-16 03:25:12 +000049 from linux/include/asm-i386/ *.h, is in vki-$PLATFORM.h and
50 vki_posixtypes-$PLATFORM.h. (Two files are required to avoid
njnac7924c2005-05-02 13:24:14 +000051 circular dependencies between the generic VKI header and the
52 arch-specific VKI header. It's possible in the future, as more stuff
53 gets pulled in, that we might have to split files up some more to avoid
54 further circular dependencies.)
55
nethercote73b526f2004-10-31 18:48:21 +000056 Finally, note that it is assumed that __KERNEL__ is set for all these
57 definitions, which affects some of them.
58*/
59
njn4de47b12005-05-16 03:25:12 +000060#ifndef __VKI_LINUX_H
61#define __VKI_LINUX_H
nethercote73b526f2004-10-31 18:48:21 +000062
63//----------------------------------------------------------------------
64// Arch-specific POSIX types
65//----------------------------------------------------------------------
66
njn4de47b12005-05-16 03:25:12 +000067#if defined(VGA_x86)
68# include "vki_posixtypes-x86-linux.h"
69#elif defined(VGA_amd64)
70# include "vki_posixtypes-amd64-linux.h"
cerion85665ca2005-06-20 15:51:07 +000071#elif defined(VGA_ppc32)
72# include "vki_posixtypes-ppc32-linux.h"
njn4de47b12005-05-16 03:25:12 +000073#else
74# error Unknown platform
75#endif
nethercote73b526f2004-10-31 18:48:21 +000076
77//----------------------------------------------------------------------
78// From linux-2.6.8.1/include/linux/compiler.h
79//----------------------------------------------------------------------
80
81# define __user
82
83# define __attribute_const__ /* unimplemented */
84
85//----------------------------------------------------------------------
86// From linux-2.6.8.1/include/linux/posix_types.h
87//----------------------------------------------------------------------
88
nethercotef1049bf2004-11-14 17:03:47 +000089#undef __VKI_NFDBITS
90#define __VKI_NFDBITS (8 * sizeof(unsigned long))
91
92#undef __VKI_FD_SETSIZE
93#define __VKI_FD_SETSIZE 1024
94
95#undef __VKI_FDSET_LONGS
96#define __VKI_FDSET_LONGS (__VKI_FD_SETSIZE/__VKI_NFDBITS)
97
98#undef __VKI_FDELT
99#define __VKI_FDELT(d) ((d) / __VKI_NFDBITS)
100
101#undef __VKI_FDMASK
102#define __VKI_FDMASK(d) (1UL << ((d) % __VKI_NFDBITS))
103
104typedef struct {
105 unsigned long fds_bits [__VKI_FDSET_LONGS];
106} __vki_kernel_fd_set;
107
nethercote73b526f2004-10-31 18:48:21 +0000108typedef int __vki_kernel_key_t;
nethercote330abb52004-11-16 12:58:04 +0000109typedef int __vki_kernel_mqd_t;
nethercote73b526f2004-10-31 18:48:21 +0000110
111//----------------------------------------------------------------------
112// From linux-2.6.8.1/include/linux/types.h
113//----------------------------------------------------------------------
114
nethercotef1049bf2004-11-14 17:03:47 +0000115typedef __vki_kernel_fd_set vki_fd_set;
nethercote73b526f2004-10-31 18:48:21 +0000116typedef __vki_kernel_mode_t vki_mode_t;
117typedef __vki_kernel_off_t vki_off_t;
118typedef __vki_kernel_pid_t vki_pid_t;
119typedef __vki_kernel_key_t vki_key_t;
120typedef __vki_kernel_suseconds_t vki_suseconds_t;
121typedef __vki_kernel_timer_t vki_timer_t;
nethercote92b2fd52004-11-16 16:15:41 +0000122typedef __vki_kernel_clockid_t vki_clockid_t;
nethercote330abb52004-11-16 12:58:04 +0000123typedef __vki_kernel_mqd_t vki_mqd_t;
nethercote73b526f2004-10-31 18:48:21 +0000124
125// [[Nb: it's a bit unclear due to a #ifdef, but I think this is right. --njn]]
126typedef __vki_kernel_uid32_t vki_uid_t;
127typedef __vki_kernel_gid32_t vki_gid_t;
128
nethercotec6851dd2004-11-11 18:00:47 +0000129typedef __vki_kernel_old_uid_t vki_old_uid_t;
130typedef __vki_kernel_old_gid_t vki_old_gid_t;
131
nethercote73b526f2004-10-31 18:48:21 +0000132typedef __vki_kernel_loff_t vki_loff_t;
133
134typedef __vki_kernel_size_t vki_size_t;
135typedef __vki_kernel_time_t vki_time_t;
136typedef __vki_kernel_clock_t vki_clock_t;
137typedef __vki_kernel_caddr_t vki_caddr_t;
138
nethercote5b653bc2004-11-15 14:32:12 +0000139typedef unsigned long vki_u_long;
140
nethercote7f7e4d12004-11-15 12:28:58 +0000141typedef unsigned int vki_uint;
142
nethercote73b526f2004-10-31 18:48:21 +0000143//----------------------------------------------------------------------
144// Now the rest of the arch-specific stuff
145//----------------------------------------------------------------------
146
njn4de47b12005-05-16 03:25:12 +0000147#if defined(VGA_x86)
148# include "vki-x86-linux.h"
149#elif defined(VGA_amd64)
150# include "vki-amd64-linux.h"
cerion85665ca2005-06-20 15:51:07 +0000151#elif defined(VGA_ppc32)
152# include "vki-ppc32-linux.h"
njn4de47b12005-05-16 03:25:12 +0000153#else
154# error Unknown platform
155#endif
nethercote73b526f2004-10-31 18:48:21 +0000156
157//----------------------------------------------------------------------
158// From linux-2.6.8.1/include/linux/limits.h
159//----------------------------------------------------------------------
160
161#define VKI_PATH_MAX 4096 /* # chars in a path name including nul */
162
163//----------------------------------------------------------------------
164// From linux-2.6.8.1/include/linux/kernel.h
165//----------------------------------------------------------------------
166
167struct vki_sysinfo {
168 long uptime; /* Seconds since boot */
169 unsigned long loads[3]; /* 1, 5, and 15 minute load averages */
170 unsigned long totalram; /* Total usable main memory size */
171 unsigned long freeram; /* Available memory size */
172 unsigned long sharedram; /* Amount of shared memory */
173 unsigned long bufferram; /* Memory used by buffers */
174 unsigned long totalswap; /* Total swap space size */
175 unsigned long freeswap; /* swap space still available */
176 unsigned short procs; /* Number of current processes */
177 unsigned short pad; /* explicit padding for m68k */
178 unsigned long totalhigh; /* Total high memory size */
179 unsigned long freehigh; /* Available high memory size */
180 unsigned int mem_unit; /* Memory unit size in bytes */
181 char _f[20-2*sizeof(long)-sizeof(int)]; /* Padding: libc5 uses this.. */
182};
183
184//----------------------------------------------------------------------
nethercote73b526f2004-10-31 18:48:21 +0000185// From linux-2.6.8.1/include/linux/time.h
186//----------------------------------------------------------------------
187
188struct vki_timespec {
189 vki_time_t tv_sec; /* seconds */
190 long tv_nsec; /* nanoseconds */
191};
192
193struct vki_timeval {
194 vki_time_t tv_sec; /* seconds */
195 vki_suseconds_t tv_usec; /* microseconds */
196};
197
198struct vki_timezone {
199 int tz_minuteswest; /* minutes west of Greenwich */
200 int tz_dsttime; /* type of dst correction */
201};
202
203struct vki_itimerspec {
204 struct vki_timespec it_interval; /* timer period */
205 struct vki_timespec it_value; /* timer expiration */
206};
207
208struct vki_itimerval {
209 struct vki_timeval it_interval; /* timer interval */
210 struct vki_timeval it_value; /* current value */
211};
212
213//----------------------------------------------------------------------
214// From linux-2.6.8.1/include/linux/timex.h
215//----------------------------------------------------------------------
216
217struct vki_timex {
218 unsigned int modes; /* mode selector */
219 long offset; /* time offset (usec) */
220 long freq; /* frequency offset (scaled ppm) */
221 long maxerror; /* maximum error (usec) */
222 long esterror; /* estimated error (usec) */
223 int status; /* clock command/status */
224 long constant; /* pll time constant */
225 long precision; /* clock precision (usec) (read only) */
226 long tolerance; /* clock frequency tolerance (ppm)
227 * (read only)
228 */
229 struct vki_timeval time; /* (read only) */
230 long tick; /* (modified) usecs between clock ticks */
231
232 long ppsfreq; /* pps frequency (scaled ppm) (ro) */
233 long jitter; /* pps jitter (us) (ro) */
234 int shift; /* interval duration (s) (shift) (ro) */
235 long stabil; /* pps stability (scaled ppm) (ro) */
236 long jitcnt; /* jitter limit exceeded (ro) */
237 long calcnt; /* calibration intervals (ro) */
238 long errcnt; /* calibration errors (ro) */
239 long stbcnt; /* stability limit exceeded (ro) */
240
241 int :32; int :32; int :32; int :32;
242 int :32; int :32; int :32; int :32;
243 int :32; int :32; int :32; int :32;
244};
245
246//#define ADJ_OFFSET 0x0001 /* time offset */
247#define ADJ_FREQUENCY 0x0002 /* frequency offset */
248#define ADJ_MAXERROR 0x0004 /* maximum time error */
249#define ADJ_ESTERROR 0x0008 /* estimated time error */
250#define ADJ_STATUS 0x0010 /* clock status */
251#define ADJ_TIMECONST 0x0020 /* pll time constant */
252#define ADJ_TICK 0x4000 /* tick value */
253//#define ADJ_OFFSET_SINGLESHOT 0x8001 /* old-fashioned adjtime */
254
255//----------------------------------------------------------------------
256// From linux-2.6.8.1/include/linux/times.h
257//----------------------------------------------------------------------
258
259struct vki_tms {
260 vki_clock_t tms_utime;
261 vki_clock_t tms_stime;
262 vki_clock_t tms_cutime;
263 vki_clock_t tms_cstime;
264};
265
266//----------------------------------------------------------------------
267// From linux-2.6.8.1/include/linux/utime.h
268//----------------------------------------------------------------------
269
270struct vki_utimbuf {
271 vki_time_t actime;
272 vki_time_t modtime;
273};
274
275//----------------------------------------------------------------------
276// From linux-2.6.8.1/include/linux/sched.h
277//----------------------------------------------------------------------
278
sewardjb5f6f512005-03-10 23:59:00 +0000279#define VKI_CSIGNAL 0x000000ff /* signal mask to be sent at exit */
nethercote73b526f2004-10-31 18:48:21 +0000280#define VKI_CLONE_VM 0x00000100 /* set if VM shared between processes */
281#define VKI_CLONE_FS 0x00000200 /* set if fs info shared between processes */
282#define VKI_CLONE_FILES 0x00000400 /* set if open files shared between processes */
283#define VKI_CLONE_SIGHAND 0x00000800 /* set if signal handlers and blocked signals shared */
sewardjb5f6f512005-03-10 23:59:00 +0000284#define VKI_CLONE_VFORK 0x00004000 /* set if the parent wants the child to wake it up on mm_release */
285#define VKI_CLONE_PARENT 0x00008000 /* set if we want to have the same parent as the cloner */
nethercote73b526f2004-10-31 18:48:21 +0000286#define VKI_CLONE_THREAD 0x00010000 /* Same thread group? */
sewardjb5f6f512005-03-10 23:59:00 +0000287#define VKI_CLONE_SYSVSEM 0x00040000 /* share system V SEM_UNDO semantics */
288#define VKI_CLONE_SETTLS 0x00080000 /* create a new TLS for the child */
nethercote73b526f2004-10-31 18:48:21 +0000289#define VKI_CLONE_PARENT_SETTID 0x00100000 /* set the TID in the parent */
290#define VKI_CLONE_CHILD_CLEARTID 0x00200000 /* clear the TID in the child */
291#define VKI_CLONE_DETACHED 0x00400000 /* Unused, ignored */
292#define VKI_CLONE_CHILD_SETTID 0x01000000 /* set the TID in the child */
293
294struct vki_sched_param {
295 int sched_priority;
296};
297
298//----------------------------------------------------------------------
299// From linux-2.6.8.1/include/asm-generic/siginfo.h
300//----------------------------------------------------------------------
301
302typedef union vki_sigval {
303 int sival_int;
304 void __user *sival_ptr;
305} vki_sigval_t;
306
307#ifndef __VKI_ARCH_SI_PREAMBLE_SIZE
308#define __VKI_ARCH_SI_PREAMBLE_SIZE (3 * sizeof(int))
309#endif
310
311#define VKI_SI_MAX_SIZE 128
312
313#ifndef VKI_SI_PAD_SIZE
314#define VKI_SI_PAD_SIZE ((VKI_SI_MAX_SIZE - __VKI_ARCH_SI_PREAMBLE_SIZE) / sizeof(int))
315#endif
316
317#ifndef __VKI_ARCH_SI_UID_T
318#define __VKI_ARCH_SI_UID_T vki_uid_t
319#endif
320
321#ifndef __VKI_ARCH_SI_BAND_T
322#define __VKI_ARCH_SI_BAND_T long
323#endif
324
325// [[Nb: this type changed between 2.4 and 2.6, but not in a way that
326// affects Valgrind.]]
327typedef struct vki_siginfo {
328 int si_signo;
329 int si_errno;
330 int si_code;
331
332 union {
333 int _pad[VKI_SI_PAD_SIZE];
334
335 /* kill() */
336 struct {
337 vki_pid_t _pid; /* sender's pid */
338 __VKI_ARCH_SI_UID_T _uid; /* sender's uid */
339 } _kill;
340
341 /* POSIX.1b timers */
342 struct {
343 vki_timer_t _tid; /* timer id */
344 int _overrun; /* overrun count */
345 char _pad[sizeof( __VKI_ARCH_SI_UID_T) - sizeof(int)];
346 vki_sigval_t _sigval; /* same as below */
347 int _sys_private; /* not to be passed to user */
348 } _timer;
349
350 /* POSIX.1b signals */
351 struct {
352 vki_pid_t _pid; /* sender's pid */
353 __VKI_ARCH_SI_UID_T _uid; /* sender's uid */
354 vki_sigval_t _sigval;
355 } _rt;
356
357 /* SIGCHLD */
358 struct {
359 vki_pid_t _pid; /* which child */
360 __VKI_ARCH_SI_UID_T _uid; /* sender's uid */
361 int _status; /* exit code */
362 vki_clock_t _utime;
363 vki_clock_t _stime;
364 } _sigchld;
365
366 /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
367 struct {
368 void __user *_addr; /* faulting insn/memory ref. */
369#ifdef __ARCH_SI_TRAPNO
370 int _trapno; /* TRAP # which caused the signal */
371#endif
372 } _sigfault;
373
374 /* SIGPOLL */
375 struct {
376 __VKI_ARCH_SI_BAND_T _band; /* POLL_IN, POLL_OUT, POLL_MSG */
377 int _fd;
378 } _sigpoll;
379 } _sifields;
380} vki_siginfo_t;
381
tom148250b2005-11-12 00:13:20 +0000382#define __VKI_SI_FAULT 0
383
nethercote73b526f2004-10-31 18:48:21 +0000384/*
385 * si_code values
386 * Digital reserves positive values for kernel-generated signals.
387 */
388#define VKI_SI_USER 0 /* sent by kill, sigsend, raise */
389#define VKI_SI_TKILL -6 /* sent by tkill system call */
390
tome7203a82005-07-20 13:45:43 +0000391/*
tom148250b2005-11-12 00:13:20 +0000392 * SIGILL si_codes
393 */
394#define VKI_ILL_ILLOPC (__VKI_SI_FAULT|1) /* illegal opcode */
395#define VKI_ILL_ILLOPN (__VKI_SI_FAULT|2) /* illegal operand */
396#define VKI_ILL_ILLADR (__VKI_SI_FAULT|3) /* illegal addressing mode */
397#define VKI_ILL_ILLTRP (__VKI_SI_FAULT|4) /* illegal trap */
398#define VKI_ILL_PRVOPC (__VKI_SI_FAULT|5) /* privileged opcode */
399#define VKI_ILL_PRVREG (__VKI_SI_FAULT|6) /* privileged register */
400#define VKI_ILL_COPROC (__VKI_SI_FAULT|7) /* coprocessor error */
401#define VKI_ILL_BADSTK (__VKI_SI_FAULT|8) /* internal stack error */
402
403/*
404 * SIGFPE si_codes
405 */
406#define VKI_FPE_INTDIV (__VKI_SI_FAULT|1) /* integer divide by zero */
407#define VKI_FPE_INTOVF (__VKI_SI_FAULT|2) /* integer overflow */
408#define VKI_FPE_FLTDIV (__VKI_SI_FAULT|3) /* floating point divide by zero */
409#define VKI_FPE_FLTOVF (__VKI_SI_FAULT|4) /* floating point overflow */
410#define VKI_FPE_FLTUND (__VKI_SI_FAULT|5) /* floating point underflow */
411#define VKI_FPE_FLTRES (__VKI_SI_FAULT|6) /* floating point inexact result */
412#define VKI_FPE_FLTINV (__VKI_SI_FAULT|7) /* floating point invalid operation */
413#define VKI_FPE_FLTSUB (__VKI_SI_FAULT|8) /* subscript out of range */
414
415/*
416 * SIGSEGV si_codes
417 */
418#define VKI_SEGV_MAPERR (__VKI_SI_FAULT|1) /* address not mapped to object */
419#define VKI_SEGV_ACCERR (__VKI_SI_FAULT|2) /* invalid permissions for mapped object */
420
421/*
422 * SIGBUS si_codes
423 */
424#define VKI_BUS_ADRALN (__VKI_SI_FAULT|1) /* invalid address alignment */
425#define VKI_BUS_ADRERR (__VKI_SI_FAULT|2) /* non-existant physical address */
426#define VKI_BUS_OBJERR (__VKI_SI_FAULT|3) /* object specific hardware error */
427
428/*
tome7203a82005-07-20 13:45:43 +0000429 * This works because the alignment is ok on all current architectures
430 * but we leave open this being overridden in the future
431 */
432#ifndef VKI___ARCH_SIGEV_PREAMBLE_SIZE
433#define VKI___ARCH_SIGEV_PREAMBLE_SIZE (sizeof(int) * 2 + sizeof(vki_sigval_t))
nethercote73b526f2004-10-31 18:48:21 +0000434#endif
435
tome7203a82005-07-20 13:45:43 +0000436#define VKI_SIGEV_MAX_SIZE 64
437#define VKI_SIGEV_PAD_SIZE ((VKI_SIGEV_MAX_SIZE - VKI___ARCH_SIGEV_PREAMBLE_SIZE) \
438 / sizeof(int))
nethercote73b526f2004-10-31 18:48:21 +0000439
440typedef struct vki_sigevent {
441 vki_sigval_t sigev_value;
442 int sigev_signo;
443 int sigev_notify;
444 union {
445 int _pad[VKI_SIGEV_PAD_SIZE];
446 int _tid;
447
448 struct {
449 void (*_function)(vki_sigval_t);
450 void *_attribute; /* really pthread_attr_t */
451 } _sigev_thread;
452 } _sigev_un;
453} vki_sigevent_t;
454
nethercote73b526f2004-10-31 18:48:21 +0000455//----------------------------------------------------------------------
456// From elsewhere...
457//----------------------------------------------------------------------
458
459// [[The kernel actually uses the numbers 0,1,2 directly here, believe it or
460// not. So we introduce our own constants, based on the glibc ones.]]
461#define VKI_SEEK_SET 0
462#define VKI_SEEK_CUR 1
463#define VKI_SEEK_END 2
464
nethercote73b526f2004-10-31 18:48:21 +0000465//----------------------------------------------------------------------
466// From linux-2.6.8.1/include/linux/net.h
467//----------------------------------------------------------------------
468
469#define VKI_SYS_SOCKET 1 /* sys_socket(2) */
470#define VKI_SYS_BIND 2 /* sys_bind(2) */
471#define VKI_SYS_CONNECT 3 /* sys_connect(2) */
472#define VKI_SYS_LISTEN 4 /* sys_listen(2) */
473#define VKI_SYS_ACCEPT 5 /* sys_accept(2) */
474#define VKI_SYS_GETSOCKNAME 6 /* sys_getsockname(2) */
475#define VKI_SYS_GETPEERNAME 7 /* sys_getpeername(2) */
476#define VKI_SYS_SOCKETPAIR 8 /* sys_socketpair(2) */
477#define VKI_SYS_SEND 9 /* sys_send(2) */
478#define VKI_SYS_RECV 10 /* sys_recv(2) */
479#define VKI_SYS_SENDTO 11 /* sys_sendto(2) */
480#define VKI_SYS_RECVFROM 12 /* sys_recvfrom(2) */
481#define VKI_SYS_SHUTDOWN 13 /* sys_shutdown(2) */
482#define VKI_SYS_SETSOCKOPT 14 /* sys_setsockopt(2) */
483#define VKI_SYS_GETSOCKOPT 15 /* sys_getsockopt(2) */
484#define VKI_SYS_SENDMSG 16 /* sys_sendmsg(2) */
485#define VKI_SYS_RECVMSG 17 /* sys_recvmsg(2) */
486
njnca0518d2004-11-26 19:34:36 +0000487enum vki_sock_type {
488 VKI_SOCK_STREAM = 1,
489 // [[others omitted]]
490};
491
nethercote73b526f2004-10-31 18:48:21 +0000492//----------------------------------------------------------------------
493// From linux-2.6.8.1/include/linux/uio.h
494//----------------------------------------------------------------------
495
496struct vki_iovec
497{
498 void __user *iov_base; /* BSD uses caddr_t (1003.1g requires void *) */
499 __vki_kernel_size_t iov_len; /* Must be size_t (1003.1g) */
500};
501
502//----------------------------------------------------------------------
503// From linux-2.6.8.1/include/linux/socket.h
504//----------------------------------------------------------------------
505
506// [[Resolved arbitrarily; doesn't really matter whether it's '__inline__'
507// or 'inline']]
508#define __KINLINE static __inline__
509
510typedef unsigned short vki_sa_family_t;
511
512struct vki_sockaddr {
513 vki_sa_family_t sa_family; /* address family, AF_xxx */
514 char sa_data[14]; /* 14 bytes of protocol address */
515};
516
517struct vki_msghdr {
518 void * msg_name; /* Socket name */
519 int msg_namelen; /* Length of name */
520 struct vki_iovec * msg_iov; /* Data blocks */
521 __vki_kernel_size_t msg_iovlen; /* Number of blocks */
522 void * msg_control; /* Per protocol magic (eg BSD file descriptor passing) */
523 __vki_kernel_size_t msg_controllen; /* Length of cmsg list */
524 unsigned msg_flags;
525};
526
527struct vki_cmsghdr {
528 __vki_kernel_size_t cmsg_len; /* data byte count, including hdr */
529 int cmsg_level; /* originating protocol */
530 int cmsg_type; /* protocol-specific type */
531};
532
533#define __VKI_CMSG_NXTHDR(ctl, len, cmsg) __vki_cmsg_nxthdr((ctl),(len),(cmsg))
534#define VKI_CMSG_NXTHDR(mhdr, cmsg) vki_cmsg_nxthdr((mhdr), (cmsg))
535
536#define VKI_CMSG_ALIGN(len) ( ((len)+sizeof(long)-1) & ~(sizeof(long)-1) )
537
538#define VKI_CMSG_DATA(cmsg) ((void *)((char *)(cmsg) + VKI_CMSG_ALIGN(sizeof(struct vki_cmsghdr))))
539
540#define __VKI_CMSG_FIRSTHDR(ctl,len) ((len) >= sizeof(struct vki_cmsghdr) ? \
541 (struct vki_cmsghdr *)(ctl) : \
542 (struct vki_cmsghdr *)NULL)
543#define VKI_CMSG_FIRSTHDR(msg) __VKI_CMSG_FIRSTHDR((msg)->msg_control, (msg)->msg_controllen)
544
545// [[Urgh, this is revolting...]
546__KINLINE struct vki_cmsghdr * __vki_cmsg_nxthdr(void *__ctl, __vki_kernel_size_t __size,
547 struct vki_cmsghdr *__cmsg)
548{
549 struct vki_cmsghdr * __ptr;
550
551 __ptr = (struct vki_cmsghdr*)(((unsigned char *) __cmsg) + VKI_CMSG_ALIGN(__cmsg->cmsg_len));
552 if ((unsigned long)((char*)(__ptr+1) - (char *) __ctl) > __size)
553 return (struct vki_cmsghdr *)0;
554
555 return __ptr;
556}
557
558__KINLINE struct vki_cmsghdr * vki_cmsg_nxthdr (struct vki_msghdr *__msg, struct vki_cmsghdr *__cmsg)
559{
560 return __vki_cmsg_nxthdr(__msg->msg_control, __msg->msg_controllen, __cmsg);
561}
562
563#define VKI_SCM_RIGHTS 0x01 /* rw: access rights (array of int) */
564
565#define VKI_AF_UNIX 1 /* Unix domain sockets */
566#define VKI_AF_INET 2 /* Internet IP Protocol */
567#define VKI_AF_INET6 10 /* IP version 6 */
568
569#define VKI_MSG_NOSIGNAL 0x4000 /* Do not generate SIGPIPE */
570
tom1aa57372005-08-28 10:16:29 +0000571#define VKI_SOL_SCTP 132
572
nethercote73b526f2004-10-31 18:48:21 +0000573//----------------------------------------------------------------------
574// From linux-2.6.8.1/include/linux/in.h
575//----------------------------------------------------------------------
576
577struct vki_in_addr {
578 __vki_u32 s_addr;
579};
580
581/* Structure describing an Internet (IP) socket address. */
582#define __VKI_SOCK_SIZE__ 16 /* sizeof(struct sockaddr) */
583struct vki_sockaddr_in {
584 vki_sa_family_t sin_family; /* Address family */
585 unsigned short int sin_port; /* Port number */
586 struct vki_in_addr sin_addr; /* Internet address */
587
588 /* Pad to size of `struct sockaddr'. */
589 unsigned char __pad[__VKI_SOCK_SIZE__ - sizeof(short int) -
590 sizeof(unsigned short int) - sizeof(struct vki_in_addr)];
591};
592
593//----------------------------------------------------------------------
594// From linux-2.6.8.1/include/linux/in6.h
595//----------------------------------------------------------------------
596
597struct vki_in6_addr
598{
599 union
600 {
601 __vki_u8 u6_addr8[16];
602 __vki_u16 u6_addr16[8];
603 __vki_u32 u6_addr32[4];
604 } vki_in6_u;
605#define vki_s6_addr vki_in6_u.u6_addr8
606#define vki_s6_addr16 vki_in6_u.u6_addr16
607#define vki_s6_addr32 vki_in6_u.u6_addr32
608};
609
610struct vki_sockaddr_in6 {
611 unsigned short int sin6_family; /* AF_INET6 */
612 __vki_u16 sin6_port; /* Transport layer port # */
613 __vki_u32 sin6_flowinfo; /* IPv6 flow information */
614 struct vki_in6_addr sin6_addr; /* IPv6 address */
615 __vki_u32 sin6_scope_id; /* scope id (new in RFC2553) */
616};
617
618//----------------------------------------------------------------------
619// From linux-2.6.8.1/include/linux/un.h
620//----------------------------------------------------------------------
621
622#define VKI_UNIX_PATH_MAX 108
623
624struct vki_sockaddr_un {
625 vki_sa_family_t sun_family; /* AF_UNIX */
626 char sun_path[VKI_UNIX_PATH_MAX]; /* pathname */
627};
628
629//----------------------------------------------------------------------
630// From linux-2.6.8.1/include/linux/if.h
631//----------------------------------------------------------------------
632
633#define VKI_IFNAMSIZ 16
634
635struct vki_ifmap
636{
637 unsigned long mem_start;
638 unsigned long mem_end;
639 unsigned short base_addr;
640 unsigned char irq;
641 unsigned char dma;
642 unsigned char port;
643 /* 3 bytes spare */
644};
645
646struct vki_if_settings
647{
648 unsigned int type; /* Type of physical device or protocol */
649 unsigned int size; /* Size of the data allocated by the caller */
650 union {
651 // [[Nb: converted these all to void* to avoid pulling in
652 // unnecessary headers]]]
653 /* {atm/eth/dsl}_settings anyone ? */
654 void /*raw_hdlc_proto */__user *raw_hdlc;
655 void /*cisco_proto */__user *cisco;
656 void /*fr_proto */__user *fr;
657 void /*fr_proto_pvc */__user *fr_pvc;
658 void /*fr_proto_pvc_info */__user *fr_pvc_info;
659
660 /* interface settings */
661 void /*sync_serial_settings */__user *sync;
662 void /*te1_settings */__user *te1;
663 } ifs_ifsu;
664};
665
666struct vki_ifreq
667{
668#define VKI_IFHWADDRLEN 6
669 union
670 {
671 char ifrn_name[VKI_IFNAMSIZ]; /* if name, e.g. "en0" */
672 } ifr_ifrn;
673
674 union {
675 struct vki_sockaddr ifru_addr;
676 struct vki_sockaddr ifru_dstaddr;
677 struct vki_sockaddr ifru_broadaddr;
678 struct vki_sockaddr ifru_netmask;
679 struct vki_sockaddr ifru_hwaddr;
680 short ifru_flags;
681 int ifru_ivalue;
682 int ifru_mtu;
683 struct vki_ifmap ifru_map;
684 char ifru_slave[VKI_IFNAMSIZ]; /* Just fits the size */
685 char ifru_newname[VKI_IFNAMSIZ];
686 void __user * ifru_data;
687 struct vki_if_settings ifru_settings;
688 } ifr_ifru;
689};
690
691#define vki_ifr_name ifr_ifrn.ifrn_name /* interface name */
692#define ifr_hwaddr ifr_ifru.ifru_hwaddr /* MAC address */
693#define ifr_addr ifr_ifru.ifru_addr /* address */
694#define ifr_dstaddr ifr_ifru.ifru_dstaddr /* other end of p-p lnk */
695#define ifr_broadaddr ifr_ifru.ifru_broadaddr /* broadcast address */
696#define ifr_netmask ifr_ifru.ifru_netmask /* interface net mask */
697#define vki_ifr_flags ifr_ifru.ifru_flags /* flags */
698#define vki_ifr_metric ifr_ifru.ifru_ivalue /* metric */
699#define vki_ifr_mtu ifr_ifru.ifru_mtu /* mtu */
700#define ifr_map ifr_ifru.ifru_map /* device map */
701#define ifr_slave ifr_ifru.ifru_slave /* slave device */
702#define vki_ifr_data ifr_ifru.ifru_data /* for use by interface */
703#define vki_ifr_ifindex ifr_ifru.ifru_ivalue /* interface index */
704#define ifr_bandwidth ifr_ifru.ifru_ivalue /* link bandwidth */
705#define ifr_qlen ifr_ifru.ifru_ivalue /* Queue length */
706#define ifr_newname ifr_ifru.ifru_newname /* New name */
707#define ifr_settings ifr_ifru.ifru_settings /* Device/proto settings*/
708
709struct vki_ifconf
710{
711 int ifc_len; /* size of buffer */
712 union
713 {
714 char __user *ifcu_buf;
715 struct vki_ifreq __user *ifcu_req;
716 } ifc_ifcu;
717};
718#define vki_ifc_buf ifc_ifcu.ifcu_buf /* buffer address */
719
720//----------------------------------------------------------------------
721// From linux-2.6.8.1/include/linux/if_arp.h
722//----------------------------------------------------------------------
723
724struct vki_arpreq {
725 struct vki_sockaddr arp_pa; /* protocol address */
726 struct vki_sockaddr arp_ha; /* hardware address */
727 int arp_flags; /* flags */
728 struct vki_sockaddr arp_netmask; /* netmask (only for proxy arps) */
729 char arp_dev[16];
730};
731
732//----------------------------------------------------------------------
733// From linux-2.6.8.1/include/linux/route.h
734//----------------------------------------------------------------------
735
736struct vki_rtentry
737{
738 unsigned long rt_pad1;
739 struct vki_sockaddr rt_dst; /* target address */
740 struct vki_sockaddr rt_gateway; /* gateway addr (RTF_GATEWAY) */
741 struct vki_sockaddr rt_genmask; /* target network mask (IP) */
742 unsigned short rt_flags;
743 short rt_pad2;
744 unsigned long rt_pad3;
745 void *rt_pad4;
746 short rt_metric; /* +1 for binary compatibility! */
747 char __user *rt_dev; /* forcing the device at add */
748 unsigned long rt_mtu; /* per route MTU/Window */
749// [[Not important for Valgrind]]
750//#ifndef __KERNEL__
751//#define rt_mss rt_mtu /* Compatibility :-( */
752//#endif
753 unsigned long rt_window; /* Window clamping */
754 unsigned short rt_irtt; /* Initial RTT */
755};
756
757//----------------------------------------------------------------------
tom1aa57372005-08-28 10:16:29 +0000758// From linux-2.6.13-rc5/include/net/sctp/user.h
759//----------------------------------------------------------------------
760
761typedef __vki_s32 vki_sctp_assoc_t;
762
763enum vki_sctp_optname {
764 VKI_SCTP_RTOINFO,
765#define VKI_SCTP_RTOINFO VKI_SCTP_RTOINFO
766 VKI_SCTP_ASSOCINFO,
767#define VKI_SCTP_ASSOCINFO VKI_SCTP_ASSOCINFO
768 VKI_SCTP_INITMSG,
769#define VKI_SCTP_INITMSG VKI_SCTP_INITMSG
770 VKI_SCTP_NODELAY, /* Get/set nodelay option. */
771#define VKI_SCTP_NODELAY VKI_SCTP_NODELAY
772 VKI_SCTP_AUTOCLOSE,
773#define VKI_SCTP_AUTOCLOSE VKI_SCTP_AUTOCLOSE
774 VKI_SCTP_SET_PEER_PRIMARY_ADDR,
775#define VKI_SCTP_SET_PEER_PRIMARY_ADDR VKI_SCTP_SET_PEER_PRIMARY_ADDR
776 VKI_SCTP_PRIMARY_ADDR,
777#define VKI_SCTP_PRIMARY_ADDR VKI_SCTP_PRIMARY_ADDR
778 VKI_SCTP_ADAPTION_LAYER,
779#define VKI_SCTP_ADAPTION_LAYER VKI_SCTP_ADAPTION_LAYER
780 VKI_SCTP_DISABLE_FRAGMENTS,
781#define VKI_SCTP_DISABLE_FRAGMENTS VKI_SCTP_DISABLE_FRAGMENTS
782 VKI_SCTP_PEER_ADDR_PARAMS,
783#define VKI_SCTP_PEER_ADDR_PARAMS VKI_SCTP_PEER_ADDR_PARAMS
784 VKI_SCTP_DEFAULT_SEND_PARAM,
785#define VKI_SCTP_DEFAULT_SEND_PARAM VKI_SCTP_DEFAULT_SEND_PARAM
786 VKI_SCTP_EVENTS,
787#define VKI_SCTP_EVENTS VKI_SCTP_EVENTS
788 VKI_SCTP_I_WANT_MAPPED_V4_ADDR, /* Turn on/off mapped v4 addresses */
789#define VKI_SCTP_I_WANT_MAPPED_V4_ADDR VKI_SCTP_I_WANT_MAPPED_V4_ADDR
790 VKI_SCTP_MAXSEG, /* Get/set maximum fragment. */
791#define VKI_SCTP_MAXSEG VKI_SCTP_MAXSEG
792 VKI_SCTP_STATUS,
793#define VKI_SCTP_STATUS VKI_SCTP_STATUS
794 VKI_SCTP_GET_PEER_ADDR_INFO,
795#define VKI_SCTP_GET_PEER_ADDR_INFO VKI_SCTP_GET_PEER_ADDR_INFO
796
797 /* Internal Socket Options. Some of the sctp library functions are
798 * implemented using these socket options.
799 */
800 VKI_SCTP_SOCKOPT_BINDX_ADD = 100,/* BINDX requests for adding addresses. */
801#define VKI_SCTP_SOCKOPT_BINDX_ADD VKI_SCTP_SOCKOPT_BINDX_ADD
802 VKI_SCTP_SOCKOPT_BINDX_REM, /* BINDX requests for removing addresses. */
803#define VKI_SCTP_SOCKOPT_BINDX_REM VKI_SCTP_SOCKOPT_BINDX_REM
804 VKI_SCTP_SOCKOPT_PEELOFF, /* peel off association. */
805#define VKI_SCTP_SOCKOPT_PEELOFF VKI_SCTP_SOCKOPT_PEELOFF
806 VKI_SCTP_GET_PEER_ADDRS_NUM, /* Get number of peer addresss. */
807#define VKI_SCTP_GET_PEER_ADDRS_NUM VKI_SCTP_GET_PEER_ADDRS_NUM
808 VKI_SCTP_GET_PEER_ADDRS, /* Get all peer addresss. */
809#define VKI_SCTP_GET_PEER_ADDRS VKI_SCTP_GET_PEER_ADDRS
810 VKI_SCTP_GET_LOCAL_ADDRS_NUM, /* Get number of local addresss. */
811#define VKI_SCTP_GET_LOCAL_ADDRS_NUM VKI_SCTP_GET_LOCAL_ADDRS_NUM
812 VKI_SCTP_GET_LOCAL_ADDRS, /* Get all local addresss. */
813#define VKI_SCTP_GET_LOCAL_ADDRS VKI_SCTP_GET_LOCAL_ADDRS
814 VKI_SCTP_SOCKOPT_CONNECTX, /* CONNECTX requests. */
815#define VKI_SCTP_SOCKOPT_CONNECTX VKI_SCTP_SOCKOPT_CONNECTX
816};
817
818struct vki_sctp_getaddrs {
819 vki_sctp_assoc_t assoc_id;
820 int addr_num;
821 struct vki_sockaddr *addrs;
822};
823
824//----------------------------------------------------------------------
nethercote73b526f2004-10-31 18:48:21 +0000825// From linux-2.6.8.1/include/linux/resource.h
826//----------------------------------------------------------------------
827
828struct vki_rusage {
829 struct vki_timeval ru_utime; /* user time used */
830 struct vki_timeval ru_stime; /* system time used */
831 long ru_maxrss; /* maximum resident set size */
832 long ru_ixrss; /* integral shared memory size */
833 long ru_idrss; /* integral unshared data size */
834 long ru_isrss; /* integral unshared stack size */
835 long ru_minflt; /* page reclaims */
836 long ru_majflt; /* page faults */
837 long ru_nswap; /* swaps */
838 long ru_inblock; /* block input operations */
839 long ru_oublock; /* block output operations */
840 long ru_msgsnd; /* messages sent */
841 long ru_msgrcv; /* messages received */
842 long ru_nsignals; /* signals received */
843 long ru_nvcsw; /* voluntary context switches */
844 long ru_nivcsw; /* involuntary " */
845};
846
847struct vki_rlimit {
848 unsigned long rlim_cur;
849 unsigned long rlim_max;
850};
851
852//----------------------------------------------------------------------
853// From linux-2.6.8.1/include/linux/elfcore.h
854//----------------------------------------------------------------------
855
856struct vki_elf_siginfo
857{
858 int si_signo; /* signal number */
859 int si_code; /* extra code */
860 int si_errno; /* errno */
861};
862
863// [[Removed some commented out lines here]]
864struct vki_elf_prstatus
865{
866 struct vki_elf_siginfo pr_info; /* Info associated with signal */
867 short pr_cursig; /* Current signal */
868 unsigned long pr_sigpend; /* Set of pending signals */
869 unsigned long pr_sighold; /* Set of held signals */
870 vki_pid_t pr_pid;
871 vki_pid_t pr_ppid;
872 vki_pid_t pr_pgrp;
873 vki_pid_t pr_sid;
874 struct vki_timeval pr_utime; /* User time */
875 struct vki_timeval pr_stime; /* System time */
876 struct vki_timeval pr_cutime; /* Cumulative user time */
877 struct vki_timeval pr_cstime; /* Cumulative system time */
878 vki_elf_gregset_t pr_reg; /* GP registers */
879 int pr_fpvalid; /* True if math co-processor being used. */
880};
881
882#define VKI_ELF_PRARGSZ (80) /* Number of chars for args */
883
884struct vki_elf_prpsinfo
885{
886 char pr_state; /* numeric process state */
887 char pr_sname; /* char for pr_state */
888 char pr_zomb; /* zombie */
889 char pr_nice; /* nice val */
890 unsigned long pr_flag; /* flags */
891 __vki_kernel_uid_t pr_uid;
892 __vki_kernel_gid_t pr_gid;
893 vki_pid_t pr_pid, pr_ppid, pr_pgrp, pr_sid;
894 /* Lots missing */
895 char pr_fname[16]; /* filename of executable */
896 char pr_psargs[VKI_ELF_PRARGSZ]; /* initial part of arg list */
897};
898
899//----------------------------------------------------------------------
njn40e73582005-06-24 21:41:28 +0000900// From linux-2.6.12.1/include/linux/eventpoll.h
nethercote73b526f2004-10-31 18:48:21 +0000901//----------------------------------------------------------------------
902
njn40e73582005-06-24 21:41:28 +0000903/* Valid opcodes to issue to sys_epoll_ctl() */
904#define VKI_EPOLL_CTL_ADD 1
905#define VKI_EPOLL_CTL_DEL 2
906#define VKI_EPOLL_CTL_MOD 3
907
nethercote73b526f2004-10-31 18:48:21 +0000908#ifdef __x86_64__
909#define VKI_EPOLL_PACKED __attribute__((packed))
910#else
911#define VKI_EPOLL_PACKED
912#endif
913
njn40e73582005-06-24 21:41:28 +0000914struct vki_epoll_event {
nethercote73b526f2004-10-31 18:48:21 +0000915 __vki_u32 events;
916 __vki_u64 data;
917} VKI_EPOLL_PACKED;
918
919
920//----------------------------------------------------------------------
921// From linux-2.6.8.1/include/linux/mqueue.h
922//----------------------------------------------------------------------
923
924struct vki_mq_attr {
925 long mq_flags; /* message queue flags */
926 long mq_maxmsg; /* maximum number of messages */
927 long mq_msgsize; /* maximum message size */
928 long mq_curmsgs; /* number of messages currently queued */
929 long __reserved[4]; /* ignored for input, zeroed for output */
930};
931
932//----------------------------------------------------------------------
933// From linux-2.6.8.1/include/linux/utsname.h
934//----------------------------------------------------------------------
935
nethercote73b526f2004-10-31 18:48:21 +0000936struct vki_new_utsname {
937 char sysname[65];
938 char nodename[65];
939 char release[65];
940 char version[65];
941 char machine[65];
942 char domainname[65];
943};
944
945//----------------------------------------------------------------------
946// From linux-2.6.8.1/include/linux/mii.h
947//----------------------------------------------------------------------
948
949/* This structure is used in all SIOCxMIIxxx ioctl calls */
950struct vki_mii_ioctl_data {
951 vki_u16 phy_id;
952 vki_u16 reg_num;
953 vki_u16 val_in;
954 vki_u16 val_out;
955};
956
957//----------------------------------------------------------------------
958// From linux-2.6.8.1/include/linux/capability.h
959//----------------------------------------------------------------------
960
961// [[capget()/capset() man page says this, ominously:
962//
963// The kernel API is likely to change and use of these functions (in
964// particular the format of the cap_user_*_t types) is subject to
965// change with each kernel revision.
966//
967// However, the format hasn't changed since at least Linux 2.4.6.]]
968
969typedef struct __vki_user_cap_header_struct {
970 __vki_u32 version;
971 int pid;
972} __user *vki_cap_user_header_t;
973
974typedef struct __vki_user_cap_data_struct {
975 __vki_u32 effective;
976 __vki_u32 permitted;
977 __vki_u32 inheritable;
978} __user *vki_cap_user_data_t;
979
980
981//----------------------------------------------------------------------
982// From linux-2.6.8.1/include/linux/module.h
983//----------------------------------------------------------------------
984
985// [[We do a VKI_SIZEOF_* here because this type is so big, and its size
986// depends on the word size, so see vki_arch.h]]
987
988//----------------------------------------------------------------------
989// From linux-2.6.8.1/include/linux/ipc.h
990//----------------------------------------------------------------------
991
992/* Obsolete, used only for backwards compatibility and libc5 compiles */
993struct vki_ipc_perm
994{
995 __vki_kernel_key_t key;
996 __vki_kernel_uid_t uid;
997 __vki_kernel_gid_t gid;
998 __vki_kernel_uid_t cuid;
999 __vki_kernel_gid_t cgid;
1000 __vki_kernel_mode_t mode;
1001 unsigned short seq;
1002};
1003
1004#define VKI_IPC_CREAT 00001000 /* create if key is nonexistent */
1005#define VKI_IPC_EXCL 00002000 /* fail if key exists */
1006#define VKI_IPC_NOWAIT 00004000 /* return error on wait */
1007
1008//#define VKI_IPC_RMID 0 /* remove resource */
1009#define VKI_IPC_SET 1 /* set ipc_perm options */
1010#define VKI_IPC_STAT 2 /* get ipc_perm options */
1011#define VKI_IPC_INFO 3 /* see ipcs */
1012
1013#define VKI_IPC_64 0x0100 /* New version (support 32-bit UIDs, bigger
1014 message sizes, etc. */
1015
1016//----------------------------------------------------------------------
1017// From linux-2.6.8.1/include/linux/sem.h
1018//----------------------------------------------------------------------
1019
1020#define VKI_GETALL 13 /* get all semval's */
1021#define VKI_SETVAL 16 /* set semval */
1022#define VKI_SETALL 17 /* set all semval's */
1023
1024#define VKI_SEM_STAT 18
1025#define VKI_SEM_INFO 19
1026
1027/* Obsolete, used only for backwards compatibility and libc5 compiles */
1028struct vki_semid_ds {
1029 struct vki_ipc_perm sem_perm; /* permissions .. see ipc.h */
1030 __vki_kernel_time_t sem_otime; /* last semop time */
1031 __vki_kernel_time_t sem_ctime; /* last change time */
1032 // [[Use void* to avoid excess header copying]]
1033 void/*struct sem */*sem_base; /* ptr to first semaphore in array */
1034 void/*struct sem_queue */*sem_pending; /* pending operations to be processed */
1035 void/*struct sem_queue */**sem_pending_last; /* last pending operation */
1036 void/*struct sem_undo */*undo; /* undo requests on this array */
1037 unsigned short sem_nsems; /* no. of semaphores in array */
1038};
1039
1040struct vki_sembuf {
1041 unsigned short sem_num; /* semaphore index in array */
1042 short sem_op; /* semaphore operation */
1043 short sem_flg; /* operation flags */
1044};
1045
1046union vki_semun {
1047 int val; /* value for SETVAL */
1048 struct vki_semid_ds __user *buf; /* buffer for IPC_STAT & IPC_SET */
1049 unsigned short __user *array; /* array for GETALL & SETALL */
1050 struct vki_seminfo __user *__buf; /* buffer for IPC_INFO */
1051 void __user *__pad;
1052};
1053
1054struct vki_seminfo {
1055 int semmap;
1056 int semmni;
1057 int semmns;
1058 int semmnu;
1059 int semmsl;
1060 int semopm;
1061 int semume;
1062 int semusz;
1063 int semvmx;
1064 int semaem;
1065};
1066
1067//----------------------------------------------------------------------
1068// From linux-2.6.8.1/include/asm-generic/errno-base.h
1069//----------------------------------------------------------------------
1070
1071#define VKI_EPERM 1 /* Operation not permitted */
sewardj45f4e7c2005-09-27 19:20:21 +00001072#define VKI_ENOENT 2 /* No such file or directory */
nethercote73b526f2004-10-31 18:48:21 +00001073#define VKI_ESRCH 3 /* No such process */
1074#define VKI_EINTR 4 /* Interrupted system call */
sewardj45f4e7c2005-09-27 19:20:21 +00001075#define VKI_ENOEXEC 8 /* Exec format error */
nethercote73b526f2004-10-31 18:48:21 +00001076#define VKI_EBADF 9 /* Bad file number */
sewardj98e68a42005-10-04 23:07:33 +00001077#define VKI_ECHILD 10 /* No child processes */
sewardjb5f6f512005-03-10 23:59:00 +00001078#define VKI_EAGAIN 11 /* Try again */
1079#define VKI_EWOULDBLOCK VKI_EAGAIN
nethercote73b526f2004-10-31 18:48:21 +00001080#define VKI_ENOMEM 12 /* Out of memory */
1081#define VKI_EACCES 13 /* Permission denied */
1082#define VKI_EFAULT 14 /* Bad address */
1083#define VKI_EEXIST 17 /* File exists */
1084#define VKI_EINVAL 22 /* Invalid argument */
1085#define VKI_EMFILE 24 /* Too many open files */
1086
1087//----------------------------------------------------------------------
1088// From linux-2.6.8.1/include/asm-generic/errno.h
1089//----------------------------------------------------------------------
1090
1091#define VKI_ENOSYS 38 /* Function not implemented */
1092
1093//----------------------------------------------------------------------
1094// From linux-2.6.8.1/include/linux/wait.h
1095//----------------------------------------------------------------------
1096
1097#define VKI_WNOHANG 0x00000001
1098
1099#define __VKI_WALL 0x40000000 /* Wait on all children, regardless of type */
1100#define __VKI_WCLONE 0x80000000 /* Wait only on non-SIGCHLD children */
1101
1102//----------------------------------------------------------------------
1103// From linux-2.6.8.1/include/linux/mman.h
1104//----------------------------------------------------------------------
1105
1106#define VKI_MREMAP_MAYMOVE 1
1107#define VKI_MREMAP_FIXED 2
1108
1109//----------------------------------------------------------------------
sewardjb5f6f512005-03-10 23:59:00 +00001110// From linux-2.6.10-rc3-mm1/include/linux/futex.h
nethercote73b526f2004-10-31 18:48:21 +00001111//----------------------------------------------------------------------
1112
1113#define VKI_FUTEX_WAIT (0)
sewardjb5f6f512005-03-10 23:59:00 +00001114#define VKI_FUTEX_WAKE (1)
nethercote73b526f2004-10-31 18:48:21 +00001115#define VKI_FUTEX_FD (2)
1116#define VKI_FUTEX_REQUEUE (3)
sewardjb5f6f512005-03-10 23:59:00 +00001117#define VKI_FUTEX_CMP_REQUEUE (4)
nethercote73b526f2004-10-31 18:48:21 +00001118
1119//----------------------------------------------------------------------
1120// From linux-2.6.8.1/include/linux/errno.h
1121//----------------------------------------------------------------------
1122
1123#define VKI_ERESTARTSYS 512
1124
1125//----------------------------------------------------------------------
1126// From linux-2.6.8.1/include/linux/stat.h
1127//----------------------------------------------------------------------
1128
njn09b84802005-08-27 17:20:53 +00001129#define VKI_S_IFMT 00170000
1130#define VKI_S_IFSOCK 0140000
1131#define VKI_S_IFLNK 0120000
1132#define VKI_S_IFREG 0100000
1133#define VKI_S_IFBLK 0060000
1134#define VKI_S_IFDIR 0040000
1135#define VKI_S_IFCHR 0020000
1136#define VKI_S_IFIFO 0010000
1137#define VKI_S_ISUID 0004000
1138#define VKI_S_ISGID 0002000
1139#define VKI_S_ISVTX 0001000
1140
1141#define VKI_S_ISLNK(m) (((m) & VKI_S_IFMT) == VKI_S_IFLNK)
1142#define VKI_S_ISREG(m) (((m) & VKI_S_IFMT) == VKI_S_IFREG)
1143#define VKI_S_ISDIR(m) (((m) & VKI_S_IFMT) == VKI_S_IFDIR)
1144#define VKI_S_ISCHR(m) (((m) & VKI_S_IFMT) == VKI_S_IFCHR)
1145#define VKI_S_ISBLK(m) (((m) & VKI_S_IFMT) == VKI_S_IFBLK)
1146#define VKI_S_ISFIFO(m) (((m) & VKI_S_IFMT) == VKI_S_IFIFO)
1147#define VKI_S_ISSOCK(m) (((m) & VKI_S_IFMT) == VKI_S_IFSOCK)
1148
sewardj45f4e7c2005-09-27 19:20:21 +00001149#define VKI_S_IRWXU 00700
nethercote73b526f2004-10-31 18:48:21 +00001150#define VKI_S_IRUSR 00400
1151#define VKI_S_IWUSR 00200
sewardj45f4e7c2005-09-27 19:20:21 +00001152#define VKI_S_IXUSR 00100
1153
1154#define VKI_S_IRWXG 00070
1155#define VKI_S_IRGRP 00040
1156#define VKI_S_IWGRP 00020
1157#define VKI_S_IXGRP 00010
1158
1159#define VKI_S_IRWXO 00007
1160#define VKI_S_IROTH 00004
1161#define VKI_S_IWOTH 00002
1162#define VKI_S_IXOTH 00001
nethercote73b526f2004-10-31 18:48:21 +00001163
1164//----------------------------------------------------------------------
1165// From linux-2.6.8.1/include/linux/dirent.h
1166//----------------------------------------------------------------------
1167
1168struct vki_dirent {
1169 long d_ino;
1170 __vki_kernel_off_t d_off;
1171 unsigned short d_reclen;
1172 char d_name[256]; /* We must not include limits.h! */
1173};
1174
1175//----------------------------------------------------------------------
njncfb8ad52004-11-23 14:57:49 +00001176// From linux-2.6.8.1/include/linux/fcntl.h
1177//----------------------------------------------------------------------
1178
1179#define VKI_F_SETLEASE (VKI_F_LINUX_SPECIFIC_BASE+0)
1180#define VKI_F_GETLEASE (VKI_F_LINUX_SPECIFIC_BASE+1)
1181
1182#define VKI_F_NOTIFY (VKI_F_LINUX_SPECIFIC_BASE+2)
1183
1184//----------------------------------------------------------------------
nethercote73b526f2004-10-31 18:48:21 +00001185// From linux-2.6.8.1/include/linux/sysctl.h
1186//----------------------------------------------------------------------
1187
1188struct __vki_sysctl_args {
1189 int __user *name;
1190 int nlen;
1191 void __user *oldval;
1192 vki_size_t __user *oldlenp;
1193 void __user *newval;
1194 vki_size_t newlen;
1195 unsigned long __unused[4];
1196};
1197
1198//----------------------------------------------------------------------
1199// From linux-2.6.8.1/include/linux/aio_abi.h
1200//----------------------------------------------------------------------
1201
1202typedef unsigned long vki_aio_context_t;
1203
1204enum {
1205 VKI_IOCB_CMD_PREAD = 0,
1206 VKI_IOCB_CMD_PWRITE = 1,
1207};
1208
1209/* read() from /dev/aio returns these structures. */
1210struct vki_io_event {
1211 __vki_u64 data; /* the data field from the iocb */
1212 __vki_u64 obj; /* what iocb this event came from */
1213 // [[Nb: These fields renamed from 'res' and 'res2' because 'res' is
1214 // a macro in vg_syscalls.c!]]
1215 __vki_s64 result; /* result code for this event */
1216 __vki_s64 result2; /* secondary result */
1217};
1218
nethercote73b526f2004-10-31 18:48:21 +00001219#if defined(VKI_LITTLE_ENDIAN)
cerion85665ca2005-06-20 15:51:07 +00001220# define VKI_PADDED(x,y) x, y
nethercote73b526f2004-10-31 18:48:21 +00001221#elif defined(VKI_BIG_ENDIAN)
cerion85665ca2005-06-20 15:51:07 +00001222# define VKI_PADDED(x,y) y, x
nethercote73b526f2004-10-31 18:48:21 +00001223#else
1224#error edit for your odd byteorder.
1225#endif
1226
1227struct vki_iocb {
1228 /* these are internal to the kernel/libc. */
1229 __vki_u64 aio_data; /* data to be returned in event's data */
1230 __vki_u32 VKI_PADDED(aio_key, aio_reserved1);
1231 /* the kernel sets aio_key to the req # */
1232
1233 /* common fields */
1234 __vki_u16 aio_lio_opcode; /* see IOCB_CMD_ above */
1235 __vki_s16 aio_reqprio;
1236 __vki_u32 aio_fildes;
1237
1238 __vki_u64 aio_buf;
1239 __vki_u64 aio_nbytes;
1240 __vki_s64 aio_offset;
1241
1242 /* extra parameters */
1243 __vki_u64 aio_reserved2; /* TODO: use this for a (struct sigevent *) */
1244 __vki_u64 aio_reserved3;
1245}; /* 64 bytes */
1246
1247//----------------------------------------------------------------------
1248// From linux-2.6.8.1/include/linux/aio.h
1249//----------------------------------------------------------------------
1250
1251struct vki_aio_ring {
1252 unsigned id; /* kernel internal index number */
1253 unsigned nr; /* number of io_events */
1254 unsigned head;
1255 unsigned tail;
1256
1257 unsigned magic;
1258 unsigned compat_features;
1259 unsigned incompat_features;
1260 unsigned header_length; /* size of aio_ring */
1261
1262 struct vki_io_event io_events[0];
1263}; /* 128 bytes + ring size */
1264
1265//----------------------------------------------------------------------
1266// From linux-2.6.8.1/include/linux/msg.h
1267//----------------------------------------------------------------------
1268
1269#define VKI_MSG_STAT 11
1270#define VKI_MSG_INFO 12
1271
1272struct vki_msqid_ds {
1273 struct vki_ipc_perm msg_perm;
1274 struct vki_msg *msg_first; /* first message on queue,unused */
1275 struct vki_msg *msg_last; /* last message in queue,unused */
1276 __vki_kernel_time_t msg_stime; /* last msgsnd time */
1277 __vki_kernel_time_t msg_rtime; /* last msgrcv time */
1278 __vki_kernel_time_t msg_ctime; /* last change time */
1279 unsigned long msg_lcbytes; /* Reuse junk fields for 32 bit */
1280 unsigned long msg_lqbytes; /* ditto */
1281 unsigned short msg_cbytes; /* current number of bytes on queue */
1282 unsigned short msg_qnum; /* number of messages in queue */
1283 unsigned short msg_qbytes; /* max number of bytes on queue */
1284 __vki_kernel_ipc_pid_t msg_lspid; /* pid of last msgsnd */
1285 __vki_kernel_ipc_pid_t msg_lrpid; /* last receive pid */
1286};
1287
1288struct vki_msgbuf {
1289 long mtype; /* type of message */
1290 char mtext[1]; /* message text */
1291};
1292
1293struct vki_msginfo {
1294 int msgpool;
1295 int msgmap;
1296 int msgmax;
1297 int msgmnb;
1298 int msgmni;
1299 int msgssz;
1300 int msgtql;
1301 unsigned short msgseg;
1302};
1303
1304//----------------------------------------------------------------------
1305// From linux-2.6.8.1/include/linux/shm.h
1306//----------------------------------------------------------------------
1307
1308struct vki_shmid_ds {
1309 struct vki_ipc_perm shm_perm; /* operation perms */
1310 int shm_segsz; /* size of segment (bytes) */
1311 __vki_kernel_time_t shm_atime; /* last attach time */
1312 __vki_kernel_time_t shm_dtime; /* last detach time */
1313 __vki_kernel_time_t shm_ctime; /* last change time */
1314 __vki_kernel_ipc_pid_t shm_cpid; /* pid of creator */
1315 __vki_kernel_ipc_pid_t shm_lpid; /* pid of last operator */
1316 unsigned short shm_nattch; /* no. of current attaches */
1317 unsigned short shm_unused; /* compatibility */
1318 void *shm_unused2; /* ditto - used by DIPC */
1319 void *shm_unused3; /* unused */
1320};
1321
tomf61fea02005-10-04 12:04:06 +00001322#define VKI_SHM_RDONLY 010000 /* read-only access */
1323
nethercote73b526f2004-10-31 18:48:21 +00001324#define VKI_SHM_STAT 13
1325#define VKI_SHM_INFO 14
1326
1327/* Obsolete, used only for backwards compatibility */
1328struct vki_shminfo {
1329 int shmmax;
1330 int shmmin;
1331 int shmmni;
1332 int shmseg;
1333 int shmall;
1334};
1335
1336struct vki_shm_info {
1337 int used_ids;
1338 unsigned long shm_tot; /* total allocated shm */
1339 unsigned long shm_rss; /* total resident shm */
1340 unsigned long shm_swp; /* total swapped shm */
1341 unsigned long swap_attempts;
1342 unsigned long swap_successes;
1343};
1344
1345//----------------------------------------------------------------------
1346// From linux-2.6.8.1/include/linux/rtc.h
1347//----------------------------------------------------------------------
1348
1349struct vki_rtc_time {
1350 int tm_sec;
1351 int tm_min;
1352 int tm_hour;
1353 int tm_mday;
1354 int tm_mon;
1355 int tm_year;
1356 int tm_wday;
1357 int tm_yday;
1358 int tm_isdst;
1359};
1360
1361#define VKI_RTC_AIE_ON _VKI_IO('p', 0x01) /* Alarm int. enable on */
1362#define VKI_RTC_AIE_OFF _VKI_IO('p', 0x02) /* ... off */
1363#define VKI_RTC_UIE_ON _VKI_IO('p', 0x03) /* Update int. enable on*/
1364#define VKI_RTC_UIE_OFF _VKI_IO('p', 0x04) /* ... off */
1365#define VKI_RTC_PIE_ON _VKI_IO('p', 0x05) /* Periodic int. enable on*/
1366#define VKI_RTC_PIE_OFF _VKI_IO('p', 0x06) /* ... off */
1367
1368#define VKI_RTC_ALM_SET _VKI_IOW('p', 0x07, struct vki_rtc_time) /* Set alarm time */
1369#define VKI_RTC_ALM_READ _VKI_IOR('p', 0x08, struct vki_rtc_time) /* Read alarm time */
1370#define VKI_RTC_RD_TIME _VKI_IOR('p', 0x09, struct vki_rtc_time) /* Read RTC time */
1371//#define RTC_SET_TIME _IOW('p', 0x0a, struct rtc_time) /* Set RTC time */
1372#define VKI_RTC_IRQP_READ _VKI_IOR('p', 0x0b, unsigned long) /* Read IRQ rate */
1373#define VKI_RTC_IRQP_SET _VKI_IOW('p', 0x0c, unsigned long) /* Set IRQ rate */
1374
1375//----------------------------------------------------------------------
1376// From linux-2.6.8.1/include/linux/isdn.h
1377//----------------------------------------------------------------------
1378
nethercote95a97862004-11-06 16:31:43 +00001379// [[Nb: Resolved this for the common case where CONFIG_COBALT_MICRO_SERVER
1380// is not defined]]
1381#define VKI_ISDN_MAX_CHANNELS 64
1382
nethercote73b526f2004-10-31 18:48:21 +00001383#define VKI_IIOCGETCPS _VKI_IO('I',21)
1384
1385#define VKI_IIOCNETGPN _VKI_IO('I',34)
1386
1387#define VKI_ISDN_MSNLEN 32
1388
1389typedef struct {
1390 char name[10];
1391 char phone[VKI_ISDN_MSNLEN];
1392 int outgoing;
1393} vki_isdn_net_ioctl_phone;
1394
1395//----------------------------------------------------------------------
1396// From linux-2.6.8.1/include/linux/sockios.h
1397//----------------------------------------------------------------------
1398
1399#define VKI_SIOCOUTQ VKI_TIOCOUTQ
1400
1401#define VKI_SIOCADDRT 0x890B /* add routing table entry */
1402#define VKI_SIOCDELRT 0x890C /* delete routing table entry */
1403
1404#define VKI_SIOCGIFNAME 0x8910 /* get iface name */
1405#define VKI_SIOCGIFCONF 0x8912 /* get iface list */
1406#define VKI_SIOCGIFFLAGS 0x8913 /* get flags */
1407#define VKI_SIOCSIFFLAGS 0x8914 /* set flags */
1408#define VKI_SIOCGIFADDR 0x8915 /* get PA address */
1409#define VKI_SIOCSIFADDR 0x8916 /* set PA address */
1410#define VKI_SIOCGIFDSTADDR 0x8917 /* get remote PA address */
1411#define VKI_SIOCSIFDSTADDR 0x8918 /* set remote PA address */
1412#define VKI_SIOCGIFBRDADDR 0x8919 /* get broadcast PA address */
1413#define VKI_SIOCSIFBRDADDR 0x891a /* set broadcast PA address */
1414#define VKI_SIOCGIFNETMASK 0x891b /* get network PA mask */
1415#define VKI_SIOCSIFNETMASK 0x891c /* set network PA mask */
1416#define VKI_SIOCGIFMETRIC 0x891d /* get metric */
1417#define VKI_SIOCSIFMETRIC 0x891e /* set metric */
1418#define VKI_SIOCGIFMTU 0x8921 /* get MTU size */
1419#define VKI_SIOCSIFMTU 0x8922 /* set MTU size */
1420#define VKI_SIOCSIFHWADDR 0x8924 /* set hardware address */
1421#define VKI_SIOCGIFHWADDR 0x8927 /* Get hardware address */
1422#define VKI_SIOCGIFINDEX 0x8933 /* name -> if_index mapping */
1423
1424#define VKI_SIOCGIFTXQLEN 0x8942 /* Get the tx queue length */
1425#define VKI_SIOCSIFTXQLEN 0x8943 /* Set the tx queue length */
1426
1427#define VKI_SIOCGMIIPHY 0x8947 /* Get address of MII PHY in use. */
1428#define VKI_SIOCGMIIREG 0x8948 /* Read MII PHY register. */
1429#define VKI_SIOCSMIIREG 0x8949 /* Write MII PHY register. */
1430
1431#define VKI_SIOCDARP 0x8953 /* delete ARP table entry */
1432#define VKI_SIOCGARP 0x8954 /* get ARP table entry */
1433#define VKI_SIOCSARP 0x8955 /* set ARP table entry */
1434
1435#define VKI_SIOCDRARP 0x8960 /* delete RARP table entry */
1436#define VKI_SIOCGRARP 0x8961 /* get RARP table entry */
1437#define VKI_SIOCSRARP 0x8962 /* set RARP table entry */
1438
1439#define VKI_SIOCGIFMAP 0x8970 /* Get device parameters */
1440#define VKI_SIOCSIFMAP 0x8971 /* Set device parameters */
1441
1442//----------------------------------------------------------------------
1443// From linux-2.6.8.1/include/linux/ppdev.h
1444//----------------------------------------------------------------------
1445
1446#define VKI_PP_MAJOR 99
1447
1448#define VKI_PP_IOCTL 'p'
1449
1450/* Set mode for read/write (e.g. IEEE1284_MODE_EPP) */
1451#define VKI_PPSETMODE _VKI_IOW(VKI_PP_IOCTL, 0x80, int)
1452
1453/* Read status */
1454#define VKI_PPRSTATUS _VKI_IOR(VKI_PP_IOCTL, 0x81, unsigned char)
1455//#define PPWSTATUS OBSOLETE__IOW(PP_IOCTL, 0x82, unsigned char)
1456
1457/* Read/write control */
1458#define VKI_PPRCONTROL _VKI_IOR(VKI_PP_IOCTL, 0x83, unsigned char)
1459#define VKI_PPWCONTROL _VKI_IOW(VKI_PP_IOCTL, 0x84, unsigned char)
1460
1461struct vki_ppdev_frob_struct {
1462 unsigned char mask;
1463 unsigned char val;
1464};
1465#define VKI_PPFCONTROL _VKI_IOW(VKI_PP_IOCTL, 0x8e, struct vki_ppdev_frob_struct)
1466
1467/* Read/write data */
1468#define VKI_PPRDATA _VKI_IOR(VKI_PP_IOCTL, 0x85, unsigned char)
1469#define VKI_PPWDATA _VKI_IOW(VKI_PP_IOCTL, 0x86, unsigned char)
1470
1471/* Claim the port to start using it */
1472#define VKI_PPCLAIM _VKI_IO(VKI_PP_IOCTL, 0x8b)
1473
1474/* Release the port when you aren't using it */
1475#define VKI_PPRELEASE _VKI_IO(VKI_PP_IOCTL, 0x8c)
1476
1477/* Yield the port (release it if another driver is waiting,
1478 * then reclaim) */
1479#define VKI_PPYIELD _VKI_IO(VKI_PP_IOCTL, 0x8d)
1480
1481/* Register device exclusively (must be before PPCLAIM). */
1482#define VKI_PPEXCL _VKI_IO(VKI_PP_IOCTL, 0x8f)
1483
1484/* Data line direction: non-zero for input mode. */
1485#define VKI_PPDATADIR _VKI_IOW(VKI_PP_IOCTL, 0x90, int)
1486
1487/* Negotiate a particular IEEE 1284 mode. */
1488#define VKI_PPNEGOT _VKI_IOW(VKI_PP_IOCTL, 0x91, int)
1489
1490/* Set control lines when an interrupt occurs. */
1491#define VKI_PPWCTLONIRQ _VKI_IOW(VKI_PP_IOCTL, 0x92, unsigned char)
1492
1493/* Clear (and return) interrupt count. */
1494#define VKI_PPCLRIRQ _VKI_IOR(VKI_PP_IOCTL, 0x93, int)
1495
1496/* Set the IEEE 1284 phase that we're in (e.g. IEEE1284_PH_FWD_IDLE) */
1497#define VKI_PPSETPHASE _VKI_IOW(VKI_PP_IOCTL, 0x94, int)
1498
1499/* Set and get port timeout (struct timeval's) */
1500#define VKI_PPGETTIME _VKI_IOR(VKI_PP_IOCTL, 0x95, struct vki_timeval)
1501#define VKI_PPSETTIME _VKI_IOW(VKI_PP_IOCTL, 0x96, struct vki_timeval)
1502
1503#define VKI_PPGETMODES _VKI_IOR(VKI_PP_IOCTL, 0x97, unsigned int)
1504
1505#define VKI_PPGETMODE _VKI_IOR(VKI_PP_IOCTL, 0x98, int)
1506#define VKI_PPGETPHASE _VKI_IOR(VKI_PP_IOCTL, 0x99, int)
1507
1508#define VKI_PPGETFLAGS _VKI_IOR(VKI_PP_IOCTL, 0x9a, int)
1509#define VKI_PPSETFLAGS _VKI_IOW(VKI_PP_IOCTL, 0x9b, int)
1510
1511//----------------------------------------------------------------------
1512// From linux-2.6.8.1/include/linux/fs.h
1513//----------------------------------------------------------------------
1514
tomedd26f12005-07-28 16:10:42 +00001515#define VKI_BLKROSET _VKI_IO(0x12,93) /* set device read-only (0 = read-write) */
1516#define VKI_BLKROGET _VKI_IO(0x12,94) /* get read-only status (0 = read_write) */
nethercote95a97862004-11-06 16:31:43 +00001517#define VKI_BLKGETSIZE _VKI_IO(0x12,96) /* return device size /512 (long *arg) */
tomedd26f12005-07-28 16:10:42 +00001518#define VKI_BLKRASET _VKI_IO(0x12,98) /* set read ahead for block device */
1519#define VKI_BLKRAGET _VKI_IO(0x12,99) /* get current read ahead setting */
1520#define VKI_BLKFRASET _VKI_IO(0x12,100)/* set filesystem (mm/filemap.c) read-ahead */
1521#define VKI_BLKFRAGET _VKI_IO(0x12,101)/* get filesystem (mm/filemap.c) read-ahead */
1522#define VKI_BLKSECTGET _VKI_IO(0x12,103)/* get max sectors per request (ll_rw_blk.c) */
1523#define VKI_BLKSSZGET _VKI_IO(0x12,104)/* get block device sector size */
1524#define VKI_BLKBSZGET _VKI_IOR(0x12,112,vki_size_t)
1525#define VKI_BLKBSZSET _VKI_IOW(0x12,113,vki_size_t)
1526#define VKI_BLKGETSIZE64 _VKI_IOR(0x12,114,vki_size_t) /* return device size in bytes (u64 *arg) */
nethercote95a97862004-11-06 16:31:43 +00001527
nethercote73b526f2004-10-31 18:48:21 +00001528#define VKI_FIBMAP _VKI_IO(0x00,1) /* bmap access */
1529#define VKI_FIGETBSZ _VKI_IO(0x00,2) /* get the block size used for bmap */
1530
1531//----------------------------------------------------------------------
1532// From linux-2.6.8.1/include/scsi/sg.h
1533//----------------------------------------------------------------------
1534
1535typedef struct vki_sg_io_hdr
1536{
1537 int interface_id; /* [i] 'S' for SCSI generic (required) */
1538 int dxfer_direction; /* [i] data transfer direction */
1539 unsigned char cmd_len; /* [i] SCSI command length ( <= 16 bytes) */
1540 unsigned char mx_sb_len; /* [i] max length to write to sbp */
1541 unsigned short iovec_count; /* [i] 0 implies no scatter gather */
1542 unsigned int dxfer_len; /* [i] byte count of data transfer */
1543 void __user *dxferp; /* [i], [*io] points to data transfer memory
1544 or scatter gather list */
1545 unsigned char __user *cmdp; /* [i], [*i] points to command to perform */
1546 void __user *sbp; /* [i], [*o] points to sense_buffer memory */
1547 unsigned int timeout; /* [i] MAX_UINT->no timeout (unit: millisec) */
1548 unsigned int flags; /* [i] 0 -> default, see SG_FLAG... */
1549 int pack_id; /* [i->o] unused internally (normally) */
1550 void __user * usr_ptr; /* [i->o] unused internally */
1551 unsigned char status; /* [o] scsi status */
1552 unsigned char masked_status;/* [o] shifted, masked scsi status */
1553 unsigned char msg_status; /* [o] messaging level data (optional) */
1554 unsigned char sb_len_wr; /* [o] byte count actually written to sbp */
1555 unsigned short host_status; /* [o] errors from host adapter */
1556 unsigned short driver_status;/* [o] errors from software driver */
1557 int resid; /* [o] dxfer_len - actual_transferred */
1558 unsigned int duration; /* [o] time taken by cmd (unit: millisec) */
1559 unsigned int info; /* [o] auxiliary information */
1560} vki_sg_io_hdr_t; /* 64 bytes long (on i386) */
1561
1562typedef struct vki_sg_scsi_id { /* used by SG_GET_SCSI_ID ioctl() */
1563 int host_no; /* as in "scsi<n>" where 'n' is one of 0, 1, 2 etc */
1564 int channel;
1565 int scsi_id; /* scsi id of target device */
1566 int lun;
1567 int scsi_type; /* TYPE_... defined in scsi/scsi.h */
1568 short h_cmd_per_lun;/* host (adapter) maximum commands per lun */
1569 short d_queue_depth;/* device (or adapter) maximum queue length */
1570 int unused[2]; /* probably find a good use, set 0 for now */
1571} vki_sg_scsi_id_t; /* 32 bytes long on i386 */
1572
1573#define VKI_SG_EMULATED_HOST 0x2203 /* true for emulated host adapter (ATAPI) */
1574
1575#define VKI_SG_SET_RESERVED_SIZE 0x2275 /* request a new reserved buffer size */
1576#define VKI_SG_GET_RESERVED_SIZE 0x2272 /* actual size of reserved buffer */
1577
1578#define VKI_SG_GET_SCSI_ID 0x2276 /* Yields fd's bus, chan, dev, lun + type */
1579
1580#define VKI_SG_GET_SG_TABLESIZE 0x227F /* 0 implies can't do scatter gather */
1581
1582#define VKI_SG_GET_VERSION_NUM 0x2282 /* Example: version 2.1.34 yields 20134 */
1583
1584#define VKI_SG_IO 0x2285 /* similar effect as write() followed by read() */
1585
1586#define VKI_SG_SET_TIMEOUT 0x2201 /* unit: jiffies (10ms on i386) */
1587#define VKI_SG_GET_TIMEOUT 0x2202 /* yield timeout as _return_ value */
1588
1589//#define SG_GET_COMMAND_Q 0x2270 /* Yields 0 (queuing off) or 1 (on) */
1590#define VKI_SG_SET_COMMAND_Q 0x2271 /* Change queuing state with 0 or 1 */
1591
1592//----------------------------------------------------------------------
1593// From linux-2.6.8.1/include/linux/cdrom.h
1594//----------------------------------------------------------------------
1595
1596#define VKI_CDROMPLAYMSF 0x5303 /* Play Audio MSF (struct cdrom_msf) */
1597#define VKI_CDROMREADTOCHDR 0x5305 /* Read TOC header
1598 (struct cdrom_tochdr) */
1599#define VKI_CDROMREADTOCENTRY 0x5306 /* Read TOC entry
1600 (struct cdrom_tocentry) */
1601#define VKI_CDROMSUBCHNL 0x530b /* Read subchannel data
1602 (struct cdrom_subchnl) */
1603#define VKI_CDROMREADMODE2 0x530c /* Read CDROM mode 2 data (2336 Bytes)
1604 (struct cdrom_read) */
1605#define VKI_CDROMREADAUDIO 0x530e /* (struct cdrom_read_audio) */
1606#define VKI_CDROMMULTISESSION 0x5310 /* Obtain the start-of-last-session
1607 address of multi session disks
1608 (struct cdrom_multisession) */
1609#define VKI_CDROM_GET_MCN 0x5311 /* Obtain the "Universal Product Code"
1610 if available (struct cdrom_mcn) */
1611#define VKI_CDROMVOLREAD 0x5313 /* Get the drive's volume setting
1612 (struct cdrom_volctrl) */
1613#define VKI_CDROM_CLEAR_OPTIONS 0x5321 /* Clear behavior options */
1614#define VKI_CDROM_DRIVE_STATUS 0x5326 /* Get tray position, etc. */
1615
1616#define VKI_CDROM_SEND_PACKET 0x5393 /* send a packet to the drive */
1617
1618struct vki_cdrom_msf0
1619{
1620 __vki_u8 minute;
1621 __vki_u8 second;
1622 __vki_u8 frame;
1623};
1624
1625union vki_cdrom_addr
1626{
1627 struct vki_cdrom_msf0 msf;
1628 int lba;
1629};
1630
1631struct vki_cdrom_msf
1632{
1633 __vki_u8 cdmsf_min0; /* start minute */
1634 __vki_u8 cdmsf_sec0; /* start second */
1635 __vki_u8 cdmsf_frame0; /* start frame */
1636 __vki_u8 cdmsf_min1; /* end minute */
1637 __vki_u8 cdmsf_sec1; /* end second */
1638 __vki_u8 cdmsf_frame1; /* end frame */
1639};
1640
1641struct vki_cdrom_tochdr
1642{
1643 __vki_u8 cdth_trk0; /* start track */
1644 __vki_u8 cdth_trk1; /* end track */
1645};
1646
1647struct vki_cdrom_volctrl
1648{
1649 __vki_u8 channel0;
1650 __vki_u8 channel1;
1651 __vki_u8 channel2;
1652 __vki_u8 channel3;
1653};
1654
1655struct vki_cdrom_subchnl
1656{
1657 __vki_u8 cdsc_format;
1658 __vki_u8 cdsc_audiostatus;
1659 __vki_u8 cdsc_adr: 4;
1660 __vki_u8 cdsc_ctrl: 4;
1661 __vki_u8 cdsc_trk;
1662 __vki_u8 cdsc_ind;
1663 union vki_cdrom_addr cdsc_absaddr;
1664 union vki_cdrom_addr cdsc_reladdr;
1665};
1666
1667struct vki_cdrom_tocentry
1668{
1669 __vki_u8 cdte_track;
1670 __vki_u8 cdte_adr :4;
1671 __vki_u8 cdte_ctrl :4;
1672 __vki_u8 cdte_format;
1673 union vki_cdrom_addr cdte_addr;
1674 __vki_u8 cdte_datamode;
1675};
1676
1677struct vki_cdrom_read
1678{
1679 int cdread_lba;
1680 char *cdread_bufaddr;
1681 int cdread_buflen;
1682};
1683
1684struct vki_cdrom_read_audio
1685{
1686 union vki_cdrom_addr addr; /* frame address */
1687 __vki_u8 addr_format; /* CDROM_LBA or CDROM_MSF */
1688 int nframes; /* number of 2352-byte-frames to read at once */
1689 __vki_u8 __user *buf; /* frame buffer (size: nframes*2352 bytes) */
1690};
1691
1692struct vki_cdrom_multisession
1693{
1694 union vki_cdrom_addr addr; /* frame address: start-of-last-session
1695 (not the new "frame 16"!). Only valid
1696 if the "xa_flag" is true. */
1697 __vki_u8 xa_flag; /* 1: "is XA disk" */
1698 __vki_u8 addr_format; /* CDROM_LBA or CDROM_MSF */
1699};
1700
1701struct vki_cdrom_mcn
1702{
1703 __vki_u8 medium_catalog_number[14]; /* 13 ASCII digits, null-terminated */
1704};
1705
1706#define VKI_CDROM_PACKET_SIZE 12
1707
1708struct vki_cdrom_generic_command
1709{
1710 unsigned char cmd[VKI_CDROM_PACKET_SIZE];
1711 unsigned char __user *buffer;
1712 unsigned int buflen;
1713 int stat;
1714 // [[replace with void* to reduce inclusion amounts]]
1715 void/*struct vki_request_sense */__user *sense;
1716 unsigned char data_direction;
1717 int quiet;
1718 int timeout;
1719 void __user *reserved[1]; /* unused, actually */
1720};
1721
1722#define VKI_CD_SYNC_SIZE 12 /* 12 sync bytes per raw data frame */
1723#define VKI_CD_HEAD_SIZE 4 /* header (address) bytes per raw data frame */
1724#define VKI_CD_FRAMESIZE_RAW 2352 /* bytes per frame, "raw" mode */
1725#define VKI_CD_FRAMESIZE_RAW0 (VKI_CD_FRAMESIZE_RAW-VKI_CD_SYNC_SIZE-VKI_CD_HEAD_SIZE) /*2336*/
1726
1727//----------------------------------------------------------------------
1728// From linux-2.6.8.1/include/linux/soundcard.h
1729//----------------------------------------------------------------------
1730
1731#ifndef _VKI_SIOWR
1732#if defined(_VKI_IOWR) && (defined(_AIX) || (!defined(sun) && !defined(sparc) && !defined(__sparc__) && !defined(__INCioctlh) && !defined(__Lynx__)))
1733/* Use already defined ioctl defines if they exist (except with Sun or Sparc) */
1734#define _VKI_SIO _VKI_IO
1735#define _VKI_SIOR _VKI_IOR
1736#define _VKI_SIOW _VKI_IOW
1737#define _VKI_SIOWR _VKI_IOWR
1738#else
1739// [[Valgrind: Install this case if/when necessary]
1740#error Valgrind: Cannot handle sparc/sun case yet...
1741# endif /* _IOWR */
1742#endif /* !_VKI_SIOWR */
1743
1744#define VKI_SNDCTL_SEQ_CTRLRATE _VKI_SIOWR('Q', 3, int) /* Set/get timer resolution (HZ) */
1745#define VKI_SNDCTL_SEQ_GETOUTCOUNT _VKI_SIOR ('Q', 4, int)
1746#define VKI_SNDCTL_SEQ_GETINCOUNT _VKI_SIOR ('Q', 5, int)
1747#define VKI_SNDCTL_SEQ_PERCMODE _VKI_SIOW ('Q', 6, int)
1748#define VKI_SNDCTL_SEQ_TESTMIDI _VKI_SIOW ('Q', 8, int)
1749#define VKI_SNDCTL_SEQ_RESETSAMPLES _VKI_SIOW ('Q', 9, int)
1750#define VKI_SNDCTL_SEQ_NRSYNTHS _VKI_SIOR ('Q',10, int)
1751#define VKI_SNDCTL_SEQ_NRMIDIS _VKI_SIOR ('Q',11, int)
1752#define VKI_SNDCTL_SEQ_GETTIME _VKI_SIOR ('Q',19, int)
1753
1754#define VKI_SNDCTL_TMR_TIMEBASE _VKI_SIOWR('T', 1, int)
1755#define VKI_SNDCTL_TMR_TEMPO _VKI_SIOWR('T', 5, int)
1756#define VKI_SNDCTL_TMR_SOURCE _VKI_SIOWR('T', 6, int)
1757
1758#define VKI_SNDCTL_MIDI_PRETIME _VKI_SIOWR('m', 0, int)
1759#define VKI_SNDCTL_MIDI_MPUMODE _VKI_SIOWR('m', 1, int)
1760
1761#define VKI_SNDCTL_DSP_RESET _VKI_SIO ('P', 0)
1762#define VKI_SNDCTL_DSP_SYNC _VKI_SIO ('P', 1)
1763#define VKI_SNDCTL_DSP_SPEED _VKI_SIOWR('P', 2, int)
1764#define VKI_SNDCTL_DSP_STEREO _VKI_SIOWR('P', 3, int)
1765#define VKI_SNDCTL_DSP_GETBLKSIZE _VKI_SIOWR('P', 4, int)
1766#define VKI_SNDCTL_DSP_CHANNELS _VKI_SIOWR('P', 6, int)
1767#define VKI_SOUND_PCM_WRITE_FILTER _VKI_SIOWR('P', 7, int)
1768#define VKI_SNDCTL_DSP_POST _VKI_SIO ('P', 8)
1769#define VKI_SNDCTL_DSP_SUBDIVIDE _VKI_SIOWR('P', 9, int)
1770#define VKI_SNDCTL_DSP_SETFRAGMENT _VKI_SIOWR('P',10, int)
1771
1772#define VKI_SNDCTL_DSP_GETFMTS _VKI_SIOR ('P',11, int) /* Returns a mask */
1773
1774typedef struct vki_audio_buf_info {
1775 int fragments; /* # of available fragments (partially usend ones not counted) */
1776 int fragstotal; /* Total # of fragments allocated */
1777 int fragsize; /* Size of a fragment in bytes */
1778
1779 int bytes; /* Available space in bytes (includes partially used fragments) */
1780 /* Note! 'bytes' could be more than fragments*fragsize */
1781 } vki_audio_buf_info;
1782
1783#define VKI_SNDCTL_DSP_GETOSPACE _VKI_SIOR ('P',12, vki_audio_buf_info)
1784#define VKI_SNDCTL_DSP_GETISPACE _VKI_SIOR ('P',13, vki_audio_buf_info)
1785//#define VKI_SNDCTL_DSP_NONBLOCK _VKI_SIO ('P',14)
1786#define VKI_SNDCTL_DSP_GETCAPS _VKI_SIOR ('P',15, int)
1787
1788#define VKI_SNDCTL_DSP_GETTRIGGER _VKI_SIOR ('P',16, int)
1789#define VKI_SNDCTL_DSP_SETTRIGGER _VKI_SIOW ('P',16, int)
1790
1791#define VKI_SNDCTL_DSP_SETSYNCRO _VKI_SIO ('P', 21)
1792#define VKI_SNDCTL_DSP_SETDUPLEX _VKI_SIO ('P', 22)
1793#define VKI_SNDCTL_DSP_GETODELAY _VKI_SIOR ('P', 23, int)
1794
nethercote95a97862004-11-06 16:31:43 +00001795#define VKI_SNDCTL_DSP_GETCHANNELMASK _VKI_SIOWR('P', 64, int)
1796#define VKI_SNDCTL_DSP_BIND_CHANNEL _VKI_SIOWR('P', 65, int)
1797
nethercote73b526f2004-10-31 18:48:21 +00001798#define VKI_SNDCTL_DSP_SETSPDIF _VKI_SIOW ('P', 66, int)
1799#define VKI_SNDCTL_DSP_GETSPDIF _VKI_SIOR ('P', 67, int)
1800
1801#define VKI_SOUND_PCM_READ_RATE _VKI_SIOR ('P', 2, int)
1802#define VKI_SOUND_PCM_READ_CHANNELS _VKI_SIOR ('P', 6, int)
1803#define VKI_SOUND_PCM_READ_BITS _VKI_SIOR ('P', 5, int)
1804#define VKI_SOUND_PCM_READ_FILTER _VKI_SIOR ('P', 7, int)
1805
1806
1807//----------------------------------------------------------------------
1808// From linux-2.6.8.1/include/linux/hdreg.h
1809//----------------------------------------------------------------------
1810
tom2c2bc252005-07-28 16:13:42 +00001811struct vki_hd_geometry {
1812 unsigned char heads;
1813 unsigned char sectors;
1814 unsigned short cylinders;
1815 unsigned long start;
1816};
1817
1818#define VKI_HDIO_GETGEO 0x0301 /* get device geometry */
nethercote73b526f2004-10-31 18:48:21 +00001819#define VKI_HDIO_GET_IDENTITY 0x030d /* get IDE identification info */
1820
1821// [[Nb: done like this because the original type is a huge struct that will
1822// always be the same size.]]
1823#define VKI_SIZEOF_STRUCT_HD_DRIVEID 512
1824
1825//----------------------------------------------------------------------
1826// From linux-2.6.8.1/include/linux/fb.h
1827//----------------------------------------------------------------------
1828
1829#define VKI_FBIOGET_VSCREENINFO 0x4600
1830#define VKI_FBIOGET_FSCREENINFO 0x4602
1831
1832struct vki_fb_fix_screeninfo {
1833 char id[16]; /* identification string eg "TT Builtin" */
1834 unsigned long smem_start; /* Start of frame buffer mem */
1835 /* (physical address) */
1836 __vki_u32 smem_len; /* Length of frame buffer mem */
1837 __vki_u32 type; /* see FB_TYPE_* */
1838 __vki_u32 type_aux; /* Interleave for interleaved Planes */
1839 __vki_u32 visual; /* see FB_VISUAL_* */
1840 __vki_u16 xpanstep; /* zero if no hardware panning */
1841 __vki_u16 ypanstep; /* zero if no hardware panning */
1842 __vki_u16 ywrapstep; /* zero if no hardware ywrap */
1843 __vki_u32 line_length; /* length of a line in bytes */
1844 unsigned long mmio_start; /* Start of Memory Mapped I/O */
1845 /* (physical address) */
1846 __vki_u32 mmio_len; /* Length of Memory Mapped I/O */
1847 __vki_u32 accel; /* Indicate to driver which */
1848 /* specific chip/card we have */
1849 __vki_u16 reserved[3]; /* Reserved for future compatibility */
1850};
1851
1852struct vki_fb_bitfield {
1853 __vki_u32 offset; /* beginning of bitfield */
1854 __vki_u32 length; /* length of bitfield */
1855 __vki_u32 msb_right; /* != 0 : Most significant bit is */
1856 /* right */
1857};
1858
1859struct vki_fb_var_screeninfo {
1860 __vki_u32 xres; /* visible resolution */
1861 __vki_u32 yres;
1862 __vki_u32 xres_virtual; /* virtual resolution */
1863 __vki_u32 yres_virtual;
1864 __vki_u32 xoffset; /* offset from virtual to visible */
1865 __vki_u32 yoffset; /* resolution */
1866
1867 __vki_u32 bits_per_pixel; /* guess what */
1868 __vki_u32 grayscale; /* != 0 Graylevels instead of colors */
1869
1870 struct vki_fb_bitfield red; /* bitfield in fb mem if true color, */
1871 struct vki_fb_bitfield green; /* else only length is significant */
1872 struct vki_fb_bitfield blue;
1873 struct vki_fb_bitfield transp; /* transparency */
1874
1875 __vki_u32 nonstd; /* != 0 Non standard pixel format */
1876
1877 __vki_u32 activate; /* see FB_ACTIVATE_* */
1878
1879 __vki_u32 height; /* height of picture in mm */
1880 __vki_u32 width; /* width of picture in mm */
1881
1882 __vki_u32 accel_flags; /* (OBSOLETE) see fb_info.flags */
1883
1884 /* Timing: All values in pixclocks, except pixclock (of course) */
1885 __vki_u32 pixclock; /* pixel clock in ps (pico seconds) */
1886 __vki_u32 left_margin; /* time from sync to picture */
1887 __vki_u32 right_margin; /* time from picture to sync */
1888 __vki_u32 upper_margin; /* time from sync to picture */
1889 __vki_u32 lower_margin;
1890 __vki_u32 hsync_len; /* length of horizontal sync */
1891 __vki_u32 vsync_len; /* length of vertical sync */
1892 __vki_u32 sync; /* see FB_SYNC_* */
1893 __vki_u32 vmode; /* see FB_VMODE_* */
1894 __vki_u32 rotate; /* angle we rotate counter clockwise */
1895 __vki_u32 reserved[5]; /* Reserved for future compatibility */
1896};
1897
thughesb3d3bcf2004-11-13 00:36:15 +00001898//----------------------------------------------------------------------
1899// From linux-2.6.9/include/linux/kb.h
1900//----------------------------------------------------------------------
1901
1902#define VKI_GIO_FONT 0x4B60 /* gets font in expanded form */
1903#define VKI_PIO_FONT 0x4B61 /* use font in expanded form */
1904
1905#define VKI_GIO_FONTX 0x4B6B /* get font using struct consolefontdesc */
1906#define VKI_PIO_FONTX 0x4B6C /* set font using struct consolefontdesc */
1907struct vki_consolefontdesc {
1908 unsigned short charcount; /* characters in font (256 or 512) */
1909 unsigned short charheight; /* scan lines per character (1-32) */
1910 char __user *chardata; /* font data in expanded form */
1911};
1912
1913#define VKI_PIO_FONTRESET 0x4B6D /* reset to default font */
1914
1915#define VKI_GIO_CMAP 0x4B70 /* gets colour palette on VGA+ */
1916#define VKI_PIO_CMAP 0x4B71 /* sets colour palette on VGA+ */
1917
1918#define VKI_KIOCSOUND 0x4B2F /* start sound generation (0 for off) */
1919#define VKI_KDMKTONE 0x4B30 /* generate tone */
1920
1921#define VKI_KDGETLED 0x4B31 /* return current led state */
1922#define VKI_KDSETLED 0x4B32 /* set led state [lights, not flags] */
1923
1924#define VKI_KDGKBTYPE 0x4B33 /* get keyboard type */
1925
1926#define VKI_KDADDIO 0x4B34 /* add i/o port as valid */
1927#define VKI_KDDELIO 0x4B35 /* del i/o port as valid */
1928#define VKI_KDENABIO 0x4B36 /* enable i/o to video board */
1929#define VKI_KDDISABIO 0x4B37 /* disable i/o to video board */
1930
1931#define VKI_KDSETMODE 0x4B3A /* set text/graphics mode */
1932#define VKI_KDGETMODE 0x4B3B /* get current mode */
1933
1934#define VKI_KDMAPDISP 0x4B3C /* map display into address space */
1935#define VKI_KDUNMAPDISP 0x4B3D /* unmap display from address space */
1936
1937#define VKI_E_TABSZ 256
1938#define VKI_GIO_SCRNMAP 0x4B40 /* get screen mapping from kernel */
1939#define VKI_PIO_SCRNMAP 0x4B41 /* put screen mapping table in kernel */
1940#define VKI_GIO_UNISCRNMAP 0x4B69 /* get full Unicode screen mapping */
1941#define VKI_PIO_UNISCRNMAP 0x4B6A /* set full Unicode screen mapping */
1942
1943#define VKI_GIO_UNIMAP 0x4B66 /* get unicode-to-font mapping from kernel */
1944#define VKI_PIO_UNIMAP 0x4B67 /* put unicode-to-font mapping in kernel */
1945#define VKI_PIO_UNIMAPCLR 0x4B68 /* clear table, possibly advise hash algorithm */
1946
1947#define VKI_KDGKBMODE 0x4B44 /* gets current keyboard mode */
1948#define VKI_KDSKBMODE 0x4B45 /* sets current keyboard mode */
1949
1950#define VKI_KDGKBMETA 0x4B62 /* gets meta key handling mode */
1951#define VKI_KDSKBMETA 0x4B63 /* sets meta key handling mode */
1952
1953#define VKI_KDGKBLED 0x4B64 /* get led flags (not lights) */
1954#define VKI_KDSKBLED 0x4B65 /* set led flags (not lights) */
1955
1956struct vki_kbentry {
1957 unsigned char kb_table;
1958 unsigned char kb_index;
1959 unsigned short kb_value;
1960};
1961#define VKI_KDGKBENT 0x4B46 /* gets one entry in translation table */
1962#define VKI_KDSKBENT 0x4B47 /* sets one entry in translation table */
1963
1964struct vki_kbsentry {
1965 unsigned char kb_func;
1966 unsigned char kb_string[512];
1967};
1968#define VKI_KDGKBSENT 0x4B48 /* gets one function key string entry */
1969#define VKI_KDSKBSENT 0x4B49 /* sets one function key string entry */
1970
1971struct vki_kbdiacr {
1972 unsigned char diacr, base, result;
1973};
1974struct vki_kbdiacrs {
1975 unsigned int kb_cnt; /* number of entries in following array */
1976 struct vki_kbdiacr kbdiacr[256]; /* MAX_DIACR from keyboard.h */
1977};
1978#define VKI_KDGKBDIACR 0x4B4A /* read kernel accent table */
1979#define VKI_KDSKBDIACR 0x4B4B /* write kernel accent table */
1980
1981struct vki_kbkeycode {
1982 unsigned int scancode, keycode;
1983};
1984#define VKI_KDGETKEYCODE 0x4B4C /* read kernel keycode table entry */
1985#define VKI_KDSETKEYCODE 0x4B4D /* write kernel keycode table entry */
1986
1987#define VKI_KDSIGACCEPT 0x4B4E /* accept kbd generated signals */
1988
1989struct vki_kbd_repeat {
1990 int delay; /* in msec; <= 0: don't change */
1991 int period; /* in msec; <= 0: don't change */
1992 /* earlier this field was misnamed "rate" */
1993};
1994#define VKI_KDKBDREP 0x4B52 /* set keyboard delay/repeat rate;
1995 * actually used values are returned */
1996
1997#define VKI_KDFONTOP 0x4B72 /* font operations */
1998
nethercote5b653bc2004-11-15 14:32:12 +00001999//----------------------------------------------------------------------
2000// From linux-2.6.9/include/linux/kb.h
2001//----------------------------------------------------------------------
2002
2003typedef __vki_kernel_uid32_t vki_qid_t; /* Type in which we store ids in memory */
2004
njnca0518d2004-11-26 19:34:36 +00002005//----------------------------------------------------------------------
2006// From linux-2.6.9/include/linux/ptrace.h
2007//----------------------------------------------------------------------
2008
sewardj45f4e7c2005-09-27 19:20:21 +00002009#define VKI_PTRACE_TRACEME 0
njnca0518d2004-11-26 19:34:36 +00002010#define VKI_PTRACE_PEEKTEXT 1
2011#define VKI_PTRACE_PEEKDATA 2
2012#define VKI_PTRACE_PEEKUSR 3
tom01093222005-11-09 08:52:56 +00002013#define VKI_PTRACE_POKEUSR 6
nethercote5b653bc2004-11-15 14:32:12 +00002014
sewardj45f4e7c2005-09-27 19:20:21 +00002015#define VKI_PTRACE_DETACH 0x11
2016
tom2f932882005-11-14 17:03:54 +00002017//----------------------------------------------------------------------
2018// From linux-2.6.14/include/sound/asound.h
2019//----------------------------------------------------------------------
2020
2021enum {
2022 VKI_SNDRV_PCM_IOCTL_HW_FREE = _VKI_IO('A', 0x12),
2023 VKI_SNDRV_PCM_IOCTL_HWSYNC = _VKI_IO('A', 0x22),
2024 VKI_SNDRV_PCM_IOCTL_PREPARE = _VKI_IO('A', 0x40),
2025 VKI_SNDRV_PCM_IOCTL_RESET = _VKI_IO('A', 0x41),
2026 VKI_SNDRV_PCM_IOCTL_START = _VKI_IO('A', 0x42),
2027 VKI_SNDRV_PCM_IOCTL_DROP = _VKI_IO('A', 0x43),
2028 VKI_SNDRV_PCM_IOCTL_DRAIN = _VKI_IO('A', 0x44),
2029 VKI_SNDRV_PCM_IOCTL_RESUME = _VKI_IO('A', 0x47),
2030 VKI_SNDRV_PCM_IOCTL_XRUN = _VKI_IO('A', 0x48),
2031 VKI_SNDRV_PCM_IOCTL_UNLINK = _VKI_IO('A', 0x61),
2032};
2033
2034enum {
2035 VKI_SNDRV_TIMER_IOCTL_START = _VKI_IO('T', 0xa0),
2036 VKI_SNDRV_TIMER_IOCTL_STOP = _VKI_IO('T', 0xa1),
2037 VKI_SNDRV_TIMER_IOCTL_CONTINUE = _VKI_IO('T', 0xa2),
2038 VKI_SNDRV_TIMER_IOCTL_PAUSE = _VKI_IO('T', 0xa3),
2039};
2040
njn4de47b12005-05-16 03:25:12 +00002041#endif // __VKI_LINUX_H
nethercote73b526f2004-10-31 18:48:21 +00002042
2043/*--------------------------------------------------------------------*/
2044/*--- end ---*/
2045/*--------------------------------------------------------------------*/