Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-05-20 08:25:19

0001 
0002 /*--------------------------------------------------------------------*/
0003 /*--- Linux-specific kernel interface.                 vki-linux.h ---*/
0004 /*--------------------------------------------------------------------*/
0005 
0006 /*
0007    This file is part of Valgrind, a dynamic binary instrumentation
0008    framework.
0009 
0010    Copyright (C) 2000-2017 Julian Seward 
0011       jseward@acm.org
0012 
0013    This program is free software; you can redistribute it and/or
0014    modify it under the terms of the GNU General Public License as
0015    published by the Free Software Foundation; either version 3 of the
0016    License, or (at your option) any later version.
0017 
0018    This program is distributed in the hope that it will be useful, but
0019    WITHOUT ANY WARRANTY; without even the implied warranty of
0020    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
0021    General Public License for more details.
0022 
0023    You should have received a copy of the GNU General Public License
0024    along with this program; if not, see <http://www.gnu.org/licenses/>.
0025 
0026    The GNU General Public License is contained in the file COPYING.
0027 */
0028 
0029 /* This file defines types and constants for the kernel interface, and to
0030    make that clear everything is prefixed VKI_/vki_.
0031 
0032    All code is copied verbatim from kernel source files, except that:
0033    - VKI_/vki_ prefixes are added
0034    - some extra explanatory comments are included;  they are all within
0035      "[[ ]]"
0036    - for some types, we only care about the size;  for a few of them (big
0037      ones that are painful to fully drag in here), a VKI_SIZEOF_* constant
0038      is used.
0039    
0040    The files the code is taken from is indicated.
0041 
0042    Note especially that the types are not the glibc versions, many of which
0043    are different to those in here. 
0044 
0045    Also note that this file contains all the generic header info, ie. that
0046    from linux/include/linux/ *.h.  The arch-specific header info, eg. that
0047    from linux/include/asm-i386/ *.h, is in vki-$PLATFORM.h and
0048    vki_posixtypes-$PLATFORM.h.  (Two files are required to avoid
0049    circular dependencies between the generic VKI header and the
0050    arch-specific VKI header.  It's possible in the future, as more stuff
0051    gets pulled in, that we might have to split files up some more to avoid
0052    further circular dependencies.)
0053    
0054    Finally, note that it is assumed that __KERNEL__ is set for all these
0055    definitions, which affects some of them.
0056 */
0057 
0058 /* The structure is (aiui, jrs 20060504):
0059 
0060      #include plat-specific posix types (vki-posixtypes-ARCH-linux.h)
0061 
0062      Lots more types, structs, consts, in this file
0063 
0064      #include other plat-specific stuff (vki-ARCH-linux.h)
0065 
0066      Even more types, structs, consts, in this file
0067 
0068    The system call numbers are dealt with by
0069    pub_{core,tool}_vkiscnums.h, not via pub_{core,tool}_vki.h, which
0070    is what this file is part of.
0071 */
0072 
0073 #ifndef __VKI_LINUX_H
0074 #define __VKI_LINUX_H
0075 
0076 //----------------------------------------------------------------------
0077 // Arch-specific POSIX types
0078 //----------------------------------------------------------------------
0079 
0080 #if defined(VGA_x86)
0081 #  include "vki-posixtypes-x86-linux.h"
0082 #elif defined(VGA_amd64)
0083 #  include "vki-posixtypes-amd64-linux.h"
0084 #elif defined(VGA_ppc32)
0085 #  include "vki-posixtypes-ppc32-linux.h"
0086 #elif defined(VGA_ppc64be) || defined(VGA_ppc64le)
0087 #  include "vki-posixtypes-ppc64-linux.h"
0088 #elif defined(VGA_arm)
0089 #  include "vki-posixtypes-arm-linux.h"
0090 #elif defined(VGA_arm64)
0091 #  include "vki-posixtypes-arm64-linux.h"
0092 #elif defined(VGA_s390x)
0093 #  include "vki-posixtypes-s390x-linux.h"
0094 #elif defined(VGA_mips32)
0095 #  include "vki-posixtypes-mips32-linux.h"
0096 #elif defined(VGA_mips64)
0097 #  include "vki-posixtypes-mips64-linux.h"
0098 #elif defined(VGA_nanomips)
0099 #  include "vki-posixtypes-nanomips-linux.h"
0100 #elif defined(VGA_riscv64)
0101 #  include "vki-posixtypes-riscv64-linux.h"
0102 #else
0103 #  error Unknown platform
0104 #endif
0105 
0106 //----------------------------------------------------------------------
0107 // VKI_STATIC_ASSERT(). Inspired by BUILD_BUG_ON() from
0108 // linux-2.6.34/include/linux/kernel.h
0109 //----------------------------------------------------------------------
0110 
0111 /*
0112  * Evaluates to zero if 'expr' is true and forces a compilation error if
0113  * 'expr' is false. Can be used in a context where no comma expressions
0114  * are allowed.
0115  */
0116 #ifdef __cplusplus
0117 template <bool b> struct vki_static_assert { int m_bitfield:(2*b-1); };
0118 #define VKI_STATIC_ASSERT(expr)                         \
0119     (sizeof(vki_static_assert<(expr)>) - sizeof(int))
0120 #else
0121 #define VKI_STATIC_ASSERT(expr) (sizeof(struct { int:-!(expr); }))
0122 #endif
0123 
0124 //----------------------------------------------------------------------
0125 // Based on _IOC_TYPECHECK() from linux-2.6.34/asm-generic/ioctl.h
0126 //----------------------------------------------------------------------
0127 
0128 /* provoke compile error for invalid uses of size argument */
0129 #define _VKI_IOC_TYPECHECK(t)                                           \
0130     (VKI_STATIC_ASSERT((sizeof(t) == sizeof(t[1])                       \
0131                         && sizeof(t) < (1 << _VKI_IOC_SIZEBITS)))       \
0132      + sizeof(t))
0133 
0134 //----------------------------------------------------------------------
0135 // From linux-2.6.8.1/include/linux/compiler.h
0136 //----------------------------------------------------------------------
0137 
0138 # define __user
0139 
0140 //----------------------------------------------------------------------
0141 // From linux/include/linux/compiler-gcc.h
0142 //----------------------------------------------------------------------
0143 
0144 #ifdef __GNUC__
0145 #define __vki_packed            __attribute__((packed))
0146 #endif
0147 
0148 //----------------------------------------------------------------------
0149 // From linux-2.6.8.1/include/linux/posix_types.h
0150 //----------------------------------------------------------------------
0151 
0152 #undef __VKI_NFDBITS
0153 #define __VKI_NFDBITS   (8 * sizeof(unsigned long))
0154 
0155 #undef __VKI_FD_SETSIZE
0156 #define __VKI_FD_SETSIZE    1024
0157 
0158 #undef __VKI_FDSET_LONGS
0159 #define __VKI_FDSET_LONGS   (__VKI_FD_SETSIZE/__VKI_NFDBITS)
0160 
0161 #undef __VKI_FDELT
0162 #define __VKI_FDELT(d)  ((d) / __VKI_NFDBITS)
0163 
0164 #undef __VKI_FDMASK
0165 #define __VKI_FDMASK(d) (1UL << ((d) % __VKI_NFDBITS))
0166 
0167 typedef struct {
0168     unsigned long fds_bits [__VKI_FDSET_LONGS];
0169 } __vki_kernel_fd_set;
0170 
0171 typedef int __vki_kernel_key_t;
0172 typedef int __vki_kernel_mqd_t;
0173 
0174 //----------------------------------------------------------------------
0175 // From pre-git history /include/linux/types.h
0176 //----------------------------------------------------------------------
0177 
0178 struct vki_ustat {
0179 #if defined(VGA_mips32) || defined(VGA_mips64) || defined(VGA_nanomips)
0180     long            f_tfree;
0181 #else
0182     int         f_tfree;
0183 #endif
0184 #if defined(VGA_s390x)
0185     unsigned int        f_tinode;
0186 #else
0187     unsigned long       f_tinode;
0188 #endif
0189     char            f_fname[6];
0190     char            f_fpack[6];
0191 };
0192 
0193 //----------------------------------------------------------------------
0194 // From linux-2.6.8.1/include/linux/types.h
0195 //----------------------------------------------------------------------
0196 
0197 typedef __vki_kernel_fd_set vki_fd_set;
0198 typedef __vki_kernel_mode_t vki_mode_t;
0199 typedef __vki_kernel_off_t  vki_off_t;
0200 typedef __vki_kernel_pid_t  vki_pid_t;
0201 typedef __vki_kernel_key_t  vki_key_t;
0202 typedef __vki_kernel_suseconds_t    vki_suseconds_t;
0203 typedef __vki_kernel_timer_t    vki_timer_t;
0204 typedef __vki_kernel_clockid_t  vki_clockid_t;
0205 typedef __vki_kernel_mqd_t  vki_mqd_t;
0206 
0207 // [[Nb: it's a bit unclear due to a #ifdef, but I think this is right. --njn]]
0208 typedef __vki_kernel_uid32_t    vki_uid_t;
0209 typedef __vki_kernel_gid32_t    vki_gid_t;
0210 
0211 typedef __vki_kernel_old_uid_t  vki_old_uid_t;
0212 typedef __vki_kernel_old_gid_t  vki_old_gid_t;
0213 
0214 typedef __vki_kernel_loff_t vki_loff_t;
0215 
0216 typedef __vki_kernel_size_t vki_size_t;
0217 typedef __vki_kernel_time_t vki_time_t;
0218 typedef __vki_kernel_clock_t    vki_clock_t;
0219 typedef __vki_kernel_caddr_t    vki_caddr_t;
0220 
0221 typedef unsigned long           vki_u_long;
0222 
0223 typedef unsigned int            vki_uint;
0224 
0225 //----------------------------------------------------------------------
0226 // Now the rest of the arch-specific stuff
0227 //----------------------------------------------------------------------
0228 
0229 #if defined(VGA_x86)
0230 #  include "vki-x86-linux.h"
0231 #elif defined(VGA_amd64)
0232 #  include "vki-amd64-linux.h"
0233 #elif defined(VGA_ppc32)
0234 #  include "vki-ppc32-linux.h"
0235 #elif defined(VGA_ppc64be) || defined(VGA_ppc64le)
0236 #  include "vki-ppc64-linux.h"
0237 #elif defined(VGA_arm)
0238 #  include "vki-arm-linux.h"
0239 #elif defined(VGA_arm64)
0240 #  include "vki-arm64-linux.h"
0241 #elif defined(VGA_s390x)
0242 #  include "vki-s390x-linux.h"
0243 #elif defined(VGA_mips32)
0244 #  include "vki-mips32-linux.h"
0245 #elif defined(VGA_mips64)
0246 #  include "vki-mips64-linux.h"
0247 #elif defined(VGA_nanomips)
0248 #  include "vki-nanomips-linux.h"
0249 #elif defined(VGA_riscv64)
0250 #  include "vki-riscv64-linux.h"
0251 #else
0252 #  error Unknown platform
0253 #endif
0254 
0255 //----------------------------------------------------------------------
0256 // From linux-2.6.20.1/include/linux/types.h
0257 //----------------------------------------------------------------------
0258 
0259 typedef     __vki_s32   vki_int32_t;
0260 typedef     __vki_s16   vki_int16_t;
0261 typedef     __vki_s64   vki_int64_t;
0262 
0263 typedef     __vki_u8    vki_uint8_t;
0264 typedef     __vki_u16   vki_uint16_t;
0265 typedef     __vki_u32   vki_uint32_t;
0266 typedef     __vki_u64   vki_uint64_t;
0267 
0268 typedef     __vki_u16   __vki_le16;
0269 
0270 #define __vki_aligned_u64 __vki_u64 __attribute__((aligned(8)))
0271 
0272 //----------------------------------------------------------------------
0273 // From linux-2.6.8.1/include/linux/limits.h
0274 //----------------------------------------------------------------------
0275 
0276 #define VKI_PATH_MAX       4096 /* # chars in a path name including nul */
0277 
0278 //----------------------------------------------------------------------
0279 // From linux-2.6.8.1/include/linux/kernel.h
0280 //----------------------------------------------------------------------
0281 
0282 struct vki_sysinfo {
0283     long uptime;            /* Seconds since boot */
0284     unsigned long loads[3];     /* 1, 5, and 15 minute load averages */
0285     unsigned long totalram;     /* Total usable main memory size */
0286     unsigned long freeram;      /* Available memory size */
0287     unsigned long sharedram;    /* Amount of shared memory */
0288     unsigned long bufferram;    /* Memory used by buffers */
0289     unsigned long totalswap;    /* Total swap space size */
0290     unsigned long freeswap;     /* swap space still available */
0291     unsigned short procs;       /* Number of current processes */
0292     unsigned short pad;     /* explicit padding for m68k */
0293     unsigned long totalhigh;    /* Total high memory size */
0294     unsigned long freehigh;     /* Available high memory size */
0295     unsigned int mem_unit;      /* Memory unit size in bytes */
0296     char _f[20-2*sizeof(long)-sizeof(int)]; /* Padding: libc5 uses this.. */
0297 };
0298 
0299 //----------------------------------------------------------------------
0300 // From linux-2.6.8.1/include/linux/time.h
0301 //----------------------------------------------------------------------
0302 
0303 #define VKI_CLOCK_REALTIME            0
0304 #define VKI_CLOCK_MONOTONIC           1
0305 #define VKI_CLOCK_PROCESS_CPUTIME_ID  2
0306 #define VKI_CLOCK_THREAD_CPUTIME_ID   3
0307 
0308 struct vki_timespec {
0309     vki_time_t  tv_sec;     /* seconds */
0310     long        tv_nsec;    /* nanoseconds */
0311 };
0312 
0313 /* Special values for vki_timespec.tv_nsec when used with utimensat.  */
0314 #define VKI_UTIME_NOW  ((1l << 30) - 1l)
0315 #define VKI_UTIME_OMIT ((1l << 30) - 2l)
0316 
0317 struct vki_timeval {
0318     vki_time_t  tv_sec;     /* seconds */
0319     vki_suseconds_t tv_usec;    /* microseconds */
0320 };
0321 
0322 struct vki_timezone {
0323     int tz_minuteswest; /* minutes west of Greenwich */
0324     int tz_dsttime; /* type of dst correction */
0325 };
0326 
0327 struct  vki_itimerspec {
0328         struct  vki_timespec it_interval;    /* timer period */
0329         struct  vki_timespec it_value;       /* timer expiration */
0330 };
0331 
0332 struct  vki_itimerval {
0333     struct  vki_timeval it_interval;    /* timer interval */
0334     struct  vki_timeval it_value;   /* current value */
0335 };
0336 
0337 //----------------------------------------------------------------------
0338 // From linux-2.6.8.1/include/linux/timex.h
0339 //----------------------------------------------------------------------
0340 
0341 struct vki_timex {
0342     unsigned int modes; /* mode selector */
0343     long offset;        /* time offset (usec) */
0344     long freq;      /* frequency offset (scaled ppm) */
0345     long maxerror;      /* maximum error (usec) */
0346     long esterror;      /* estimated error (usec) */
0347     int status;     /* clock command/status */
0348     long constant;      /* pll time constant */
0349     long precision;     /* clock precision (usec) (read only) */
0350     long tolerance;     /* clock frequency tolerance (ppm)
0351                  * (read only)
0352                  */
0353     struct vki_timeval time;    /* (read only) */
0354     long tick;      /* (modified) usecs between clock ticks */
0355 
0356     long ppsfreq;           /* pps frequency (scaled ppm) (ro) */
0357     long jitter;            /* pps jitter (us) (ro) */
0358     int shift;              /* interval duration (s) (shift) (ro) */
0359     long stabil;            /* pps stability (scaled ppm) (ro) */
0360     long jitcnt;            /* jitter limit exceeded (ro) */
0361     long calcnt;            /* calibration intervals (ro) */
0362     long errcnt;            /* calibration errors (ro) */
0363     long stbcnt;            /* stability limit exceeded (ro) */
0364 
0365     int  :32; int  :32; int  :32; int  :32;
0366     int  :32; int  :32; int  :32; int  :32;
0367     int  :32; int  :32; int  :32; int  :32;
0368 };
0369 
0370 #define VKI_ADJ_OFFSET          0x0001  /* time offset */
0371 #define VKI_ADJ_FREQUENCY       0x0002  /* frequency offset */
0372 #define VKI_ADJ_MAXERROR        0x0004  /* maximum time error */
0373 #define VKI_ADJ_ESTERROR        0x0008  /* estimated time error */
0374 #define VKI_ADJ_STATUS          0x0010  /* clock status */
0375 #define VKI_ADJ_TIMECONST       0x0020  /* pll time constant */
0376 #define VKI_ADJ_TAI         0x0080  /* set TAI offset */
0377 #define VKI_ADJ_TICK            0x4000  /* tick value */
0378 #define VKI_ADJ_ADJTIME         0x8000  /* switch between adjtime/adjtimex modes */
0379 //#define VKI_ADJ_OFFSET_SINGLESHOT 0x8001  /* old-fashioned adjtime */
0380 #define VKI_ADJ_OFFSET_READONLY     0x2000  /* read-only adjtime */
0381 
0382 //----------------------------------------------------------------------
0383 // From linux-2.6.8.1/include/linux/times.h
0384 //----------------------------------------------------------------------
0385 
0386 struct vki_tms {
0387     vki_clock_t tms_utime;
0388     vki_clock_t tms_stime;
0389     vki_clock_t tms_cutime;
0390     vki_clock_t tms_cstime;
0391 };
0392 
0393 //----------------------------------------------------------------------
0394 // From linux-2.6.8.1/include/linux/utime.h
0395 //----------------------------------------------------------------------
0396 
0397 struct vki_utimbuf {
0398     vki_time_t actime;
0399     vki_time_t modtime;
0400 };
0401 
0402 //----------------------------------------------------------------------
0403 // From linux-2.6.8.1/include/linux/sched.h
0404 //----------------------------------------------------------------------
0405 
0406 #define VKI_CSIGNAL         0x000000ff  /* signal mask to be sent at exit */
0407 #define VKI_CLONE_VM            0x00000100  /* set if VM shared between processes */
0408 #define VKI_CLONE_FS            0x00000200  /* set if fs info shared between processes */
0409 #define VKI_CLONE_FILES         0x00000400  /* set if open files shared between processes */
0410 #define VKI_CLONE_SIGHAND       0x00000800  /* set if signal handlers and blocked signals shared */
0411 #define VKI_CLONE_PIDFD         0x00001000  /* set if a pidfd should be placed in parent */
0412 #define VKI_CLONE_PTRACE        0x00002000  /* set if we want to let tracing continue on the child too */
0413 #define VKI_CLONE_VFORK         0x00004000  /* set if the parent wants the child to wake it up on mm_release */
0414 #define VKI_CLONE_PARENT        0x00008000  /* set if we want to have the same parent as the cloner */
0415 #define VKI_CLONE_THREAD        0x00010000  /* Same thread group? */
0416 #define VKI_CLONE_NEWNS         0x00020000  /* New mount namespace group */
0417 #define VKI_CLONE_SYSVSEM       0x00040000  /* share system V SEM_UNDO semantics */
0418 #define VKI_CLONE_SETTLS        0x00080000  /* create a new TLS for the child */
0419 #define VKI_CLONE_PARENT_SETTID     0x00100000  /* set the TID in the parent */
0420 #define VKI_CLONE_CHILD_CLEARTID    0x00200000  /* clear the TID in the child */
0421 #define VKI_CLONE_DETACHED      0x00400000  /* Unused, ignored */
0422 #define VKI_CLONE_UNTRACED      0x00800000  /* set if the tracing process can't force CLONE_PTRACE on this clone */
0423 #define VKI_CLONE_CHILD_SETTID      0x01000000  /* set the TID in the child */
0424 #define VKI_CLONE_NEWCGROUP     0x02000000  /* New cgroup namespace */
0425 #define VKI_CLONE_NEWUTS        0x04000000  /* New utsname namespace */
0426 #define VKI_CLONE_NEWIPC        0x08000000  /* New ipc namespace */
0427 #define VKI_CLONE_NEWUSER       0x10000000  /* New user namespace */
0428 #define VKI_CLONE_NEWPID        0x20000000  /* New pid namespace */
0429 #define VKI_CLONE_NEWNET        0x40000000  /* New network namespace */
0430 #define VKI_CLONE_IO            0x80000000  /* Clone io context */
0431 
0432 struct vki_sched_param {
0433     int sched_priority;
0434 };
0435 
0436 struct vki_sched_attr {
0437     vki_uint32_t size;
0438     vki_uint32_t sched_policy;
0439     vki_uint64_t sched_flags;
0440 
0441     /* SCHED_NORMAL, SCHED_BATCH */
0442     vki_int32_t sched_nice;
0443 
0444     /* SCHED_FIFO, SCHED_RR */
0445     vki_uint32_t sched_priority;
0446 
0447     /* SCHED_DEADLINE */
0448     vki_uint64_t sched_runtime;
0449     vki_uint64_t sched_deadline;
0450     vki_uint64_t sched_period;
0451 };
0452 
0453 #define VKI_TASK_COMM_LEN 16
0454 
0455 //----------------------------------------------------------------------
0456 // From linux-2.6.8.1/include/asm-generic/siginfo.h
0457 //----------------------------------------------------------------------
0458 
0459 // Some archs, such as MIPS, have non-standard vki_siginfo.
0460 #ifndef HAVE_ARCH_SIGINFO_T
0461 typedef union vki_sigval {
0462     int sival_int;
0463     void __user *sival_ptr;
0464 } vki_sigval_t;
0465 
0466 #ifndef __VKI_ARCH_SI_PREAMBLE_SIZE
0467 #define __VKI_ARCH_SI_PREAMBLE_SIZE (3 * sizeof(int))
0468 #endif
0469 
0470 #define VKI_SI_MAX_SIZE 128
0471 
0472 #ifndef VKI_SI_PAD_SIZE
0473 #define VKI_SI_PAD_SIZE ((VKI_SI_MAX_SIZE - __VKI_ARCH_SI_PREAMBLE_SIZE) / sizeof(int))
0474 #endif
0475 
0476 #ifndef __VKI_ARCH_SI_UID_T
0477 #define __VKI_ARCH_SI_UID_T vki_uid_t
0478 #endif
0479 
0480 #ifndef __VKI_ARCH_SI_BAND_T
0481 #define __VKI_ARCH_SI_BAND_T long
0482 #endif
0483 
0484 #ifndef __VKI_ARCH_SI_CLOCK_T
0485 #define __VKI_ARCH_SI_CLOCK_T vki_clock_t
0486 #endif
0487 
0488 #ifndef __VKI_ARCH_SI_ATTRIBUTES
0489 #define __VKI_ARCH_SI_ATTRIBUTES
0490 #endif
0491 
0492 // [[Nb: this type changed between 2.4 and 2.6, but not in a way that
0493 // affects Valgrind.]]
0494 typedef struct vki_siginfo {
0495     int si_signo;
0496     int si_errno;
0497     int si_code;
0498 
0499     union {
0500         int _pad[VKI_SI_PAD_SIZE];
0501 
0502         /* kill() */
0503         struct {
0504             vki_pid_t _pid;     /* sender's pid */
0505             __VKI_ARCH_SI_UID_T _uid;   /* sender's uid */
0506         } _kill;
0507 
0508         /* POSIX.1b timers */
0509         struct {
0510             vki_timer_t _tid;       /* timer id */
0511             int _overrun;       /* overrun count */
0512             char _pad[sizeof( __VKI_ARCH_SI_UID_T) - sizeof(int)];
0513             vki_sigval_t _sigval;   /* same as below */
0514             int _sys_private;       /* not to be passed to user */
0515         } _timer;
0516 
0517         /* POSIX.1b signals */
0518         struct {
0519             vki_pid_t _pid;     /* sender's pid */
0520             __VKI_ARCH_SI_UID_T _uid;   /* sender's uid */
0521             vki_sigval_t _sigval;
0522         } _rt;
0523 
0524         /* SIGCHLD */
0525         struct {
0526             vki_pid_t _pid;     /* which child */
0527             __VKI_ARCH_SI_UID_T _uid;   /* sender's uid */
0528             int _status;        /* exit code */
0529             __VKI_ARCH_SI_CLOCK_T _utime;
0530             __VKI_ARCH_SI_CLOCK_T _stime;
0531         } _sigchld;
0532 
0533         /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
0534         struct {
0535             void __user *_addr; /* faulting insn/memory ref. */
0536 #ifdef __ARCH_SI_TRAPNO
0537             int _trapno;    /* TRAP # which caused the signal */
0538 #endif
0539         } _sigfault;
0540 
0541         /* SIGPOLL */
0542         struct {
0543             __VKI_ARCH_SI_BAND_T _band; /* POLL_IN, POLL_OUT, POLL_MSG */
0544             int _fd;
0545         } _sigpoll;
0546     } _sifields;
0547 } __VKI_ARCH_SI_ATTRIBUTES vki_siginfo_t;
0548 #endif
0549 
0550 #define __VKI_SI_FAULT  0
0551 
0552 /*
0553  * si_code values
0554  * Digital reserves positive values for kernel-generated signals.
0555  */
0556 #define VKI_SI_USER 0       /* sent by kill, sigsend, raise */
0557 #define VKI_SI_TKILL    -6      /* sent by tkill system call */
0558 
0559 /*
0560  * SIGILL si_codes
0561  */
0562 #define VKI_ILL_ILLOPC  (__VKI_SI_FAULT|1)  /* illegal opcode */
0563 #define VKI_ILL_ILLOPN  (__VKI_SI_FAULT|2)  /* illegal operand */
0564 #define VKI_ILL_ILLADR  (__VKI_SI_FAULT|3)  /* illegal addressing mode */
0565 #define VKI_ILL_ILLTRP  (__VKI_SI_FAULT|4)  /* illegal trap */
0566 #define VKI_ILL_PRVOPC  (__VKI_SI_FAULT|5)  /* privileged opcode */
0567 #define VKI_ILL_PRVREG  (__VKI_SI_FAULT|6)  /* privileged register */
0568 #define VKI_ILL_COPROC  (__VKI_SI_FAULT|7)  /* coprocessor error */
0569 #define VKI_ILL_BADSTK  (__VKI_SI_FAULT|8)  /* internal stack error */
0570 
0571 /*
0572  * SIGFPE si_codes
0573  */
0574 #define VKI_FPE_INTDIV  (__VKI_SI_FAULT|1)  /* integer divide by zero */
0575 #define VKI_FPE_INTOVF  (__VKI_SI_FAULT|2)  /* integer overflow */
0576 #define VKI_FPE_FLTDIV  (__VKI_SI_FAULT|3)  /* floating point divide by zero */
0577 #define VKI_FPE_FLTOVF  (__VKI_SI_FAULT|4)  /* floating point overflow */
0578 #define VKI_FPE_FLTUND  (__VKI_SI_FAULT|5)  /* floating point underflow */
0579 #define VKI_FPE_FLTRES  (__VKI_SI_FAULT|6)  /* floating point inexact result */
0580 #define VKI_FPE_FLTINV  (__VKI_SI_FAULT|7)  /* floating point invalid operation */
0581 #define VKI_FPE_FLTSUB  (__VKI_SI_FAULT|8)  /* subscript out of range */
0582 
0583 /*
0584  * SIGSEGV si_codes
0585  */
0586 #define VKI_SEGV_MAPERR (__VKI_SI_FAULT|1)  /* address not mapped to object */
0587 #define VKI_SEGV_ACCERR (__VKI_SI_FAULT|2)  /* invalid permissions for mapped object */
0588 
0589 /*
0590  * SIGBUS si_codes
0591  */
0592 #define VKI_BUS_ADRALN  (__VKI_SI_FAULT|1)  /* invalid address alignment */
0593 #define VKI_BUS_ADRERR  (__VKI_SI_FAULT|2)  /* non-existent physical address */
0594 #define VKI_BUS_OBJERR  (__VKI_SI_FAULT|3)  /* object specific hardware error */
0595 
0596 /*
0597  * SIGTRAP si_codes
0598  */
0599 #define VKI_TRAP_BRKPT      (__VKI_SI_FAULT|1)  /* process breakpoint */
0600 #define VKI_TRAP_TRACE      (__VKI_SI_FAULT|2)  /* process trace trap */
0601 
0602 /*
0603  * SIGCHLD si_codes
0604  */
0605 #define VKI_CLD_EXITED    (__VKI_SI_FAULT|1)  /* child has exited */
0606 #define VKI_CLD_KILLED    (__VKI_SI_FAULT|2)  /* child was killed */
0607 #define VKI_CLD_DUMPED    (__VKI_SI_FAULT|3)  /* child terminated abnormally */
0608 #define VKI_CLD_TRAPPED   (__VKI_SI_FAULT|4)  /* traced child has trapped */
0609 #define VKI_CLD_STOPPED   (__VKI_SI_FAULT|5)  /* child has stopped */
0610 #define VKI_CLD_CONTINUED (__VKI_SI_FAULT|6)  /* stopped child has continued */
0611 
0612 /*
0613  * This works because the alignment is ok on all current architectures
0614  * but we leave open this being overridden in the future
0615  */
0616 #ifndef VKI___ARCH_SIGEV_PREAMBLE_SIZE
0617 #define VKI___ARCH_SIGEV_PREAMBLE_SIZE  (sizeof(int) * 2 + sizeof(vki_sigval_t))
0618 #endif
0619 
0620 #define VKI_SIGEV_MAX_SIZE  64
0621 #define VKI_SIGEV_PAD_SIZE  ((VKI_SIGEV_MAX_SIZE - VKI___ARCH_SIGEV_PREAMBLE_SIZE) \
0622         / sizeof(int))
0623 
0624 /* This is the flag the kernel handles, userspace/glibc handles SEGEV_THEAD. */
0625 #define VKI_SIGEV_THREAD_ID 4
0626 
0627 typedef struct vki_sigevent {
0628     vki_sigval_t sigev_value;
0629     int sigev_signo;
0630     int sigev_notify;
0631     union {
0632         int _pad[VKI_SIGEV_PAD_SIZE];
0633          int _tid;
0634 
0635         struct {
0636             void (*_function)(vki_sigval_t);
0637             void *_attribute;   /* really pthread_attr_t */
0638         } _sigev_thread;
0639     } _sigev_un;
0640 } vki_sigevent_t;
0641 
0642 #define vki_sigev_notify_thread_id  _sigev_un._tid
0643 
0644 //----------------------------------------------------------------------
0645 // From elsewhere...
0646 //----------------------------------------------------------------------
0647 
0648 // [[The kernel actually uses the numbers 0,1,2 directly here, believe it or
0649 // not.  So we introduce our own constants, based on the glibc ones.]]
0650 #define VKI_SEEK_SET              0
0651 #define VKI_SEEK_CUR              1
0652 #define VKI_SEEK_END              2
0653 
0654 //----------------------------------------------------------------------
0655 // From linux-2.6.8.1/include/linux/net.h
0656 //----------------------------------------------------------------------
0657 
0658 #define VKI_SYS_SOCKET      1   /* sys_socket(2)        */
0659 #define VKI_SYS_BIND        2   /* sys_bind(2)          */
0660 #define VKI_SYS_CONNECT     3   /* sys_connect(2)       */
0661 #define VKI_SYS_LISTEN      4   /* sys_listen(2)        */
0662 #define VKI_SYS_ACCEPT      5   /* sys_accept(2)        */
0663 #define VKI_SYS_GETSOCKNAME 6   /* sys_getsockname(2)       */
0664 #define VKI_SYS_GETPEERNAME 7   /* sys_getpeername(2)       */
0665 #define VKI_SYS_SOCKETPAIR  8   /* sys_socketpair(2)        */
0666 #define VKI_SYS_SEND        9   /* sys_send(2)          */
0667 #define VKI_SYS_RECV        10  /* sys_recv(2)          */
0668 #define VKI_SYS_SENDTO      11  /* sys_sendto(2)        */
0669 #define VKI_SYS_RECVFROM    12  /* sys_recvfrom(2)      */
0670 #define VKI_SYS_SHUTDOWN    13  /* sys_shutdown(2)      */
0671 #define VKI_SYS_SETSOCKOPT  14  /* sys_setsockopt(2)        */
0672 #define VKI_SYS_GETSOCKOPT  15  /* sys_getsockopt(2)        */
0673 #define VKI_SYS_SENDMSG     16  /* sys_sendmsg(2)       */
0674 #define VKI_SYS_RECVMSG     17  /* sys_recvmsg(2)       */
0675 #define VKI_SYS_ACCEPT4     18  /* sys_accept4(2)       */
0676 #define VKI_SYS_RECVMMSG    19  /* sys_recvmmsg(2)              */
0677 #define VKI_SYS_SENDMMSG    20  /* sys_sendmmsg(2)              */
0678 
0679 #ifndef ARCH_HAS_SOCKET_TYPES
0680 enum vki_sock_type {
0681     VKI_SOCK_STREAM = 1,
0682     // [[others omitted]]
0683 };
0684 #endif /* ARCH_HAS_SOCKET_TYPES */
0685 
0686 //----------------------------------------------------------------------
0687 // From linux-2.6.8.1/include/linux/uio.h
0688 //----------------------------------------------------------------------
0689 
0690 struct vki_iovec
0691 {
0692     void __user *iov_base;  /* BSD uses caddr_t (1003.1g requires void *) */
0693     __vki_kernel_size_t iov_len; /* Must be size_t (1003.1g) */
0694 };
0695 
0696 //----------------------------------------------------------------------
0697 // From linux-2.6.8.1/include/linux/socket.h
0698 //----------------------------------------------------------------------
0699 
0700 // [[Resolved arbitrarily;  doesn't really matter whether it's '__inline__'
0701 //   or 'inline']]
0702 #define __KINLINE static __inline__
0703 
0704 typedef unsigned short  vki_sa_family_t;
0705 
0706 struct vki_sockaddr {
0707     vki_sa_family_t sa_family;  /* address family, AF_xxx   */
0708     char        sa_data[14];    /* 14 bytes of protocol address */
0709 };
0710 
0711 struct vki_msghdr {
0712     void    *   msg_name;   /* Socket name          */
0713     int     msg_namelen;    /* Length of name       */
0714     struct vki_iovec *  msg_iov;    /* Data blocks          */
0715     __vki_kernel_size_t msg_iovlen; /* Number of blocks     */
0716     void    *   msg_control;    /* Per protocol magic (eg BSD file descriptor passing) */
0717     __vki_kernel_size_t msg_controllen; /* Length of cmsg list */
0718     unsigned    msg_flags;
0719 };
0720 
0721 struct vki_mmsghdr {
0722     struct vki_msghdr   msg_hdr;
0723     unsigned        msg_len;
0724 };
0725 
0726 struct vki_cmsghdr {
0727     __vki_kernel_size_t cmsg_len;   /* data byte count, including hdr */
0728         int     cmsg_level; /* originating protocol */
0729         int     cmsg_type;  /* protocol-specific type */
0730 };
0731 
0732 #define __VKI_CMSG_NXTHDR(ctl, len, cmsg) __vki_cmsg_nxthdr((ctl),(len),(cmsg))
0733 #define VKI_CMSG_NXTHDR(mhdr, cmsg) vki_cmsg_nxthdr((mhdr), (cmsg))
0734 
0735 #define VKI_CMSG_ALIGN(len) ( ((len)+sizeof(long)-1) & ~(sizeof(long)-1) )
0736 
0737 #define VKI_CMSG_DATA(cmsg) ((void *)((char *)(cmsg) + VKI_CMSG_ALIGN(sizeof(struct vki_cmsghdr))))
0738 
0739 #define __VKI_CMSG_FIRSTHDR(ctl,len) ((len) >= sizeof(struct vki_cmsghdr) ? \
0740                   (struct vki_cmsghdr *)(ctl) : \
0741                   (struct vki_cmsghdr *)NULL)
0742 #define VKI_CMSG_FIRSTHDR(msg)  __VKI_CMSG_FIRSTHDR((msg)->msg_control, (msg)->msg_controllen)
0743 
0744 // [[Urgh, this is revolting...]
0745 __KINLINE struct vki_cmsghdr * __vki_cmsg_nxthdr(void *__ctl, __vki_kernel_size_t __size,
0746                            struct vki_cmsghdr *__cmsg)
0747 {
0748     struct vki_cmsghdr * __ptr;
0749 
0750     __ptr = ASSUME_ALIGNED(struct vki_cmsghdr *,
0751             ((unsigned char *) __cmsg) +  VKI_CMSG_ALIGN(__cmsg->cmsg_len));
0752     if ((unsigned long)((char*)(__ptr+1) - (char *) __ctl) > __size)
0753         return (struct vki_cmsghdr *)0;
0754 
0755     return __ptr;
0756 }
0757 
0758 __KINLINE struct vki_cmsghdr * vki_cmsg_nxthdr (struct vki_msghdr *__msg, struct vki_cmsghdr *__cmsg)
0759 {
0760     return __vki_cmsg_nxthdr(__msg->msg_control, __msg->msg_controllen, __cmsg);
0761 }
0762 
0763 #define VKI_SCM_RIGHTS  0x01        /* rw: access rights (array of int) */
0764 
0765 #define VKI_AF_UNSPEC   0
0766 #define VKI_AF_UNIX 1   /* Unix domain sockets      */
0767 #define VKI_AF_INET 2   /* Internet IP Protocol     */
0768 #define VKI_AF_INET6    10  /* IP version 6         */
0769 #define VKI_AF_NETLINK  16
0770 #define VKI_AF_BLUETOOTH 31 /* Bluetooth sockets        */
0771 
0772 #define VKI_MSG_NOSIGNAL    0x4000  /* Do not generate SIGPIPE */
0773 
0774 #define VKI_SOL_SCTP    132
0775 
0776 //----------------------------------------------------------------------
0777 // From linux-2.6.8.1/include/linux/in.h
0778 //----------------------------------------------------------------------
0779 
0780 struct vki_in_addr {
0781     __vki_u32   s_addr;
0782 };
0783 
0784 /* Structure describing an Internet (IP) socket address. */
0785 #define __VKI_SOCK_SIZE__   16  /* sizeof(struct sockaddr)  */
0786 struct vki_sockaddr_in {
0787   vki_sa_family_t   sin_family; /* Address family       */
0788   unsigned short int    sin_port;   /* Port number          */
0789   struct vki_in_addr    sin_addr;   /* Internet address     */
0790 
0791   /* Pad to size of `struct sockaddr'. */
0792   unsigned char     __pad[__VKI_SOCK_SIZE__ - sizeof(short int) -
0793             sizeof(unsigned short int) - sizeof(struct vki_in_addr)];
0794 };
0795 
0796 #define VKI_IPPROTO_TCP 6       /* Transmission Control Protocol        */
0797 
0798 //----------------------------------------------------------------------
0799 // From linux-2.6.8.1/include/linux/in6.h
0800 //----------------------------------------------------------------------
0801 
0802 struct vki_in6_addr
0803 {
0804     union 
0805     {
0806         __vki_u8    u6_addr8[16];
0807         __vki_u16   u6_addr16[8];
0808         __vki_u32   u6_addr32[4];
0809     } vki_in6_u;
0810 #define vki_s6_addr     vki_in6_u.u6_addr8
0811 #define vki_s6_addr16       vki_in6_u.u6_addr16
0812 #define vki_s6_addr32       vki_in6_u.u6_addr32
0813 };
0814 
0815 struct vki_sockaddr_in6 {
0816     unsigned short int  sin6_family;    /* AF_INET6 */
0817     __vki_u16       sin6_port;      /* Transport layer port # */
0818     __vki_u32       sin6_flowinfo;  /* IPv6 flow information */
0819     struct vki_in6_addr sin6_addr;      /* IPv6 address */
0820     __vki_u32       sin6_scope_id;  /* scope id (new in RFC2553) */
0821 };
0822 
0823 //----------------------------------------------------------------------
0824 // From linux-2.6.8.1/include/linux/tcp.h
0825 //----------------------------------------------------------------------
0826 
0827 #define VKI_TCP_NODELAY    1       /* Turn off Nagle's algorithm. */
0828 
0829 
0830 //----------------------------------------------------------------------
0831 // From linux-2.6.8.1/include/linux/un.h
0832 //----------------------------------------------------------------------
0833 
0834 #define VKI_UNIX_PATH_MAX   108
0835 
0836 struct vki_sockaddr_un {
0837     vki_sa_family_t sun_family; /* AF_UNIX */
0838     char sun_path[VKI_UNIX_PATH_MAX];   /* pathname */
0839 };
0840 
0841 //----------------------------------------------------------------------
0842 // From linux-3.15.8/include/uapi/linux/netlink.h
0843 //----------------------------------------------------------------------
0844 
0845 struct vki_sockaddr_nl {
0846         vki_sa_family_t    nl_family;      /* AF_NETLINK   */
0847         unsigned short     nl_pad;         /* zero         */
0848         __vki_u32          nl_pid;         /* port ID      */
0849         __vki_u32          nl_groups;      /* multicast groups mask */
0850 };
0851 
0852 //----------------------------------------------------------------------
0853 // From linux-2.6.8.1/include/linux/if.h
0854 //----------------------------------------------------------------------
0855 
0856 #define VKI_IFNAMSIZ    16
0857 
0858 struct vki_ifmap 
0859 {
0860     unsigned long mem_start;
0861     unsigned long mem_end;
0862     unsigned short base_addr; 
0863     unsigned char irq;
0864     unsigned char dma;
0865     unsigned char port;
0866     /* 3 bytes spare */
0867 };
0868 
0869 struct vki_if_settings
0870 {
0871     unsigned int type;  /* Type of physical device or protocol */
0872     unsigned int size;  /* Size of the data allocated by the caller */
0873     union {
0874                 // [[Nb: converted these all to void* to avoid pulling in
0875                 //   unnecessary headers]]]
0876         /* {atm/eth/dsl}_settings anyone ? */
0877         void /*raw_hdlc_proto       */__user *raw_hdlc;
0878         void /*cisco_proto      */__user *cisco;
0879         void /*fr_proto         */__user *fr;
0880         void /*fr_proto_pvc     */__user *fr_pvc;
0881         void /*fr_proto_pvc_info    */__user *fr_pvc_info;
0882 
0883         /* interface settings */
0884         void /*sync_serial_settings */__user *sync;
0885         void /*te1_settings     */__user *te1;
0886     } ifs_ifsu;
0887 };
0888 
0889 struct vki_ifreq 
0890 {
0891 #define VKI_IFHWADDRLEN 6
0892     union
0893     {
0894         char    ifrn_name[VKI_IFNAMSIZ];        /* if name, e.g. "en0" */
0895     } ifr_ifrn;
0896     
0897     union {
0898         struct  vki_sockaddr ifru_addr;
0899         struct  vki_sockaddr ifru_dstaddr;
0900         struct  vki_sockaddr ifru_broadaddr;
0901         struct  vki_sockaddr ifru_netmask;
0902         struct  vki_sockaddr ifru_hwaddr;
0903         short   ifru_flags;
0904         int ifru_ivalue;
0905         int ifru_mtu;
0906         struct  vki_ifmap ifru_map;
0907         char    ifru_slave[VKI_IFNAMSIZ];   /* Just fits the size */
0908         char    ifru_newname[VKI_IFNAMSIZ];
0909         void __user *   ifru_data;
0910         struct  vki_if_settings ifru_settings;
0911     } ifr_ifru;
0912 };
0913 
0914 #define vki_ifr_name    ifr_ifrn.ifrn_name  /* interface name   */
0915 #define vki_ifr_hwaddr  ifr_ifru.ifru_hwaddr    /* MAC address      */
0916 #define vki_ifr_addr    ifr_ifru.ifru_addr  /* address      */
0917 #define vki_ifr_dstaddr ifr_ifru.ifru_dstaddr   /* other end of p-p lnk */
0918 #define vki_ifr_broadaddr ifr_ifru.ifru_broadaddr /* broadcast address  */
0919 #define vki_ifr_netmask ifr_ifru.ifru_netmask   /* interface net mask   */
0920 #define vki_ifr_flags   ifr_ifru.ifru_flags /* flags        */
0921 #define vki_ifr_metric  ifr_ifru.ifru_ivalue    /* metric       */
0922 #define vki_ifr_mtu ifr_ifru.ifru_mtu   /* mtu          */
0923 #define vki_ifr_map ifr_ifru.ifru_map   /* device map       */
0924 #define vki_ifr_slave   ifr_ifru.ifru_slave /* slave device     */
0925 #define vki_ifr_data    ifr_ifru.ifru_data  /* for use by interface */
0926 #define vki_ifr_ifindex ifr_ifru.ifru_ivalue    /* interface index  */
0927 #define vki_ifr_bandwidth ifr_ifru.ifru_ivalue  /* link bandwidth   */
0928 #define vki_ifr_qlen    ifr_ifru.ifru_ivalue    /* Queue length     */
0929 #define vki_ifr_newname ifr_ifru.ifru_newname   /* New name     */
0930 #define vki_ifr_settings ifr_ifru.ifru_settings /* Device/proto settings*/
0931 
0932 struct vki_ifconf 
0933 {
0934     int ifc_len;            /* size of buffer   */
0935     union 
0936     {
0937         char __user *ifcu_buf;
0938         struct vki_ifreq __user *ifcu_req;
0939     } ifc_ifcu;
0940 };
0941 #define vki_ifc_buf ifc_ifcu.ifcu_buf   /* buffer address   */
0942 
0943 //----------------------------------------------------------------------
0944 // From linux-2.6.8.1/include/linux/if_arp.h
0945 //----------------------------------------------------------------------
0946 
0947 struct vki_arpreq {
0948   struct vki_sockaddr   arp_pa;     /* protocol address     */
0949   struct vki_sockaddr   arp_ha;     /* hardware address     */
0950   int           arp_flags;  /* flags            */
0951   struct vki_sockaddr   arp_netmask;    /* netmask (only for proxy arps) */
0952   char          arp_dev[16];
0953 };
0954 
0955 //----------------------------------------------------------------------
0956 // From linux-2.6.8.1/include/linux/route.h
0957 //----------------------------------------------------------------------
0958 
0959 struct vki_rtentry 
0960 {
0961     unsigned long   rt_pad1;
0962     struct vki_sockaddr rt_dst;     /* target address       */
0963     struct vki_sockaddr rt_gateway; /* gateway addr (RTF_GATEWAY)   */
0964     struct vki_sockaddr rt_genmask; /* target network mask (IP) */
0965     unsigned short  rt_flags;
0966     short       rt_pad2;
0967     unsigned long   rt_pad3;
0968     void        *rt_pad4;
0969     short       rt_metric;  /* +1 for binary compatibility! */
0970     char __user *rt_dev;    /* forcing the device at add    */
0971     unsigned long   rt_mtu;     /* per route MTU/Window     */
0972 // [[Not important for Valgrind]]
0973 //#ifndef __KERNEL__
0974 //#define rt_mss    rt_mtu      /* Compatibility :-(            */
0975 //#endif
0976     unsigned long   rt_window;  /* Window clamping      */
0977     unsigned short  rt_irtt;    /* Initial RTT          */
0978 };
0979 
0980 //----------------------------------------------------------------------
0981 // From linux-2.6.13-rc5/include/net/sctp/user.h
0982 //----------------------------------------------------------------------
0983 
0984 typedef __vki_s32 vki_sctp_assoc_t;
0985 
0986 enum vki_sctp_optname {
0987     VKI_SCTP_RTOINFO,
0988 #define VKI_SCTP_RTOINFO VKI_SCTP_RTOINFO
0989     VKI_SCTP_ASSOCINFO,
0990 #define VKI_SCTP_ASSOCINFO VKI_SCTP_ASSOCINFO
0991     VKI_SCTP_INITMSG,
0992 #define VKI_SCTP_INITMSG VKI_SCTP_INITMSG
0993     VKI_SCTP_NODELAY,   /* Get/set nodelay option. */
0994 #define VKI_SCTP_NODELAY    VKI_SCTP_NODELAY
0995     VKI_SCTP_AUTOCLOSE,
0996 #define VKI_SCTP_AUTOCLOSE VKI_SCTP_AUTOCLOSE
0997     VKI_SCTP_SET_PEER_PRIMARY_ADDR, 
0998 #define VKI_SCTP_SET_PEER_PRIMARY_ADDR VKI_SCTP_SET_PEER_PRIMARY_ADDR
0999     VKI_SCTP_PRIMARY_ADDR,
1000 #define VKI_SCTP_PRIMARY_ADDR VKI_SCTP_PRIMARY_ADDR
1001     VKI_SCTP_ADAPTION_LAYER,      
1002 #define VKI_SCTP_ADAPTION_LAYER VKI_SCTP_ADAPTION_LAYER
1003     VKI_SCTP_DISABLE_FRAGMENTS,
1004 #define VKI_SCTP_DISABLE_FRAGMENTS VKI_SCTP_DISABLE_FRAGMENTS
1005     VKI_SCTP_PEER_ADDR_PARAMS,
1006 #define VKI_SCTP_PEER_ADDR_PARAMS VKI_SCTP_PEER_ADDR_PARAMS
1007     VKI_SCTP_DEFAULT_SEND_PARAM,
1008 #define VKI_SCTP_DEFAULT_SEND_PARAM VKI_SCTP_DEFAULT_SEND_PARAM
1009     VKI_SCTP_EVENTS,
1010 #define VKI_SCTP_EVENTS VKI_SCTP_EVENTS
1011     VKI_SCTP_I_WANT_MAPPED_V4_ADDR,  /* Turn on/off mapped v4 addresses  */
1012 #define VKI_SCTP_I_WANT_MAPPED_V4_ADDR VKI_SCTP_I_WANT_MAPPED_V4_ADDR
1013     VKI_SCTP_MAXSEG,    /* Get/set maximum fragment. */
1014 #define VKI_SCTP_MAXSEG     VKI_SCTP_MAXSEG
1015     VKI_SCTP_STATUS,
1016 #define VKI_SCTP_STATUS VKI_SCTP_STATUS
1017     VKI_SCTP_GET_PEER_ADDR_INFO,
1018 #define VKI_SCTP_GET_PEER_ADDR_INFO VKI_SCTP_GET_PEER_ADDR_INFO
1019 
1020     /* Internal Socket Options. Some of the sctp library functions are 
1021      * implemented using these socket options.
1022      */
1023     VKI_SCTP_SOCKOPT_BINDX_ADD = 100,/* BINDX requests for adding addresses. */
1024 #define VKI_SCTP_SOCKOPT_BINDX_ADD  VKI_SCTP_SOCKOPT_BINDX_ADD
1025     VKI_SCTP_SOCKOPT_BINDX_REM, /* BINDX requests for removing addresses. */
1026 #define VKI_SCTP_SOCKOPT_BINDX_REM  VKI_SCTP_SOCKOPT_BINDX_REM
1027     VKI_SCTP_SOCKOPT_PEELOFF,   /* peel off association. */
1028 #define VKI_SCTP_SOCKOPT_PEELOFF    VKI_SCTP_SOCKOPT_PEELOFF
1029     VKI_SCTP_GET_PEER_ADDRS_NUM,    /* Get number of peer addresss. */
1030 #define VKI_SCTP_GET_PEER_ADDRS_NUM VKI_SCTP_GET_PEER_ADDRS_NUM
1031     VKI_SCTP_GET_PEER_ADDRS,    /* Get all peer addresss. */
1032 #define VKI_SCTP_GET_PEER_ADDRS VKI_SCTP_GET_PEER_ADDRS
1033     VKI_SCTP_GET_LOCAL_ADDRS_NUM,   /* Get number of local addresss. */
1034 #define VKI_SCTP_GET_LOCAL_ADDRS_NUM    VKI_SCTP_GET_LOCAL_ADDRS_NUM
1035     VKI_SCTP_GET_LOCAL_ADDRS,   /* Get all local addresss. */
1036 #define VKI_SCTP_GET_LOCAL_ADDRS    VKI_SCTP_GET_LOCAL_ADDRS
1037     VKI_SCTP_SOCKOPT_CONNECTX, /* CONNECTX requests. */
1038 #define VKI_SCTP_SOCKOPT_CONNECTX   VKI_SCTP_SOCKOPT_CONNECTX
1039 };
1040 
1041 struct vki_sctp_getaddrs {
1042     vki_sctp_assoc_t        assoc_id;
1043     int         addr_num;
1044     struct vki_sockaddr *addrs;
1045 };
1046 
1047 //----------------------------------------------------------------------
1048 // From linux-2.6.8.1/include/linux/resource.h
1049 //----------------------------------------------------------------------
1050 
1051 #define VKI_RUSAGE_SELF     0
1052 #define VKI_RUSAGE_CHILDREN (-1)
1053 #define VKI_RUSAGE_BOTH     (-2)        /* sys_wait4() uses this */
1054 #define VKI_RUSAGE_THREAD   1           /* only the calling thread */
1055 
1056 struct  vki_rusage {
1057     struct vki_timeval ru_utime;    /* user time used */
1058     struct vki_timeval ru_stime;    /* system time used */
1059     long    ru_maxrss;      /* maximum resident set size */
1060     long    ru_ixrss;       /* integral shared memory size */
1061     long    ru_idrss;       /* integral unshared data size */
1062     long    ru_isrss;       /* integral unshared stack size */
1063     long    ru_minflt;      /* page reclaims */
1064     long    ru_majflt;      /* page faults */
1065     long    ru_nswap;       /* swaps */
1066     long    ru_inblock;     /* block input operations */
1067     long    ru_oublock;     /* block output operations */
1068     long    ru_msgsnd;      /* messages sent */
1069     long    ru_msgrcv;      /* messages received */
1070     long    ru_nsignals;        /* signals received */
1071     long    ru_nvcsw;       /* voluntary context switches */
1072     long    ru_nivcsw;      /* involuntary " */
1073 };
1074 
1075 struct vki_rlimit {
1076     unsigned long   rlim_cur;
1077     unsigned long   rlim_max;
1078 };
1079 
1080 struct vki_rlimit64 {
1081     __vki_u64 rlim_cur;
1082     __vki_u64 rlim_max;
1083 };
1084 
1085 //----------------------------------------------------------------------
1086 // From linux-2.6.8.1/include/linux/elfcore.h
1087 //----------------------------------------------------------------------
1088 
1089 struct vki_elf_siginfo
1090 {
1091     int si_signo;           /* signal number */
1092     int si_code;            /* extra code */
1093     int si_errno;           /* errno */
1094 };
1095 
1096 // [[Removed some commented out lines here]]
1097 struct vki_elf_prstatus
1098 {
1099     struct vki_elf_siginfo pr_info; /* Info associated with signal */
1100     short   pr_cursig;      /* Current signal */
1101     unsigned long pr_sigpend;   /* Set of pending signals */
1102     unsigned long pr_sighold;   /* Set of held signals */
1103     vki_pid_t   pr_pid;
1104     vki_pid_t   pr_ppid;
1105     vki_pid_t   pr_pgrp;
1106     vki_pid_t   pr_sid;
1107     struct vki_timeval pr_utime;    /* User time */
1108     struct vki_timeval pr_stime;    /* System time */
1109     struct vki_timeval pr_cutime;   /* Cumulative user time */
1110     struct vki_timeval pr_cstime;   /* Cumulative system time */
1111     vki_elf_gregset_t pr_reg;   /* GP registers */
1112     int pr_fpvalid;     /* True if math co-processor being used.  */
1113 };
1114 
1115 #define VKI_ELF_PRARGSZ (80)    /* Number of chars for args */
1116 
1117 struct vki_elf_prpsinfo
1118 {
1119     char    pr_state;   /* numeric process state */
1120     char    pr_sname;   /* char for pr_state */
1121     char    pr_zomb;    /* zombie */
1122     char    pr_nice;    /* nice val */
1123     unsigned long pr_flag;  /* flags */
1124     __vki_kernel_uid_t  pr_uid;
1125     __vki_kernel_gid_t  pr_gid;
1126     vki_pid_t   pr_pid, pr_ppid, pr_pgrp, pr_sid;
1127     /* Lots missing */
1128     char    pr_fname[16];   /* filename of executable */
1129     char    pr_psargs[VKI_ELF_PRARGSZ]; /* initial part of arg list */
1130 };
1131 
1132 //----------------------------------------------------------------------
1133 // From linux-2.6.12.1/include/linux/eventpoll.h
1134 //----------------------------------------------------------------------
1135 
1136 /* Valid opcodes to issue to sys_epoll_ctl() */
1137 #define VKI_EPOLL_CTL_ADD 1
1138 #define VKI_EPOLL_CTL_DEL 2
1139 #define VKI_EPOLL_CTL_MOD 3
1140 
1141 #ifdef __x86_64__
1142 #define VKI_EPOLL_PACKED __attribute__((packed))
1143 #else
1144 #define VKI_EPOLL_PACKED
1145 #endif
1146 
1147 struct vki_epoll_event {
1148     __vki_u32 events;
1149     __vki_u64 data;
1150 } VKI_EPOLL_PACKED;
1151 
1152 
1153 //----------------------------------------------------------------------
1154 // From linux-2.6.8.1/include/linux/mqueue.h
1155 //----------------------------------------------------------------------
1156 
1157 struct vki_mq_attr {
1158     long    mq_flags;   /* message queue flags          */
1159     long    mq_maxmsg;  /* maximum number of messages       */
1160     long    mq_msgsize; /* maximum message size         */
1161     long    mq_curmsgs; /* number of messages currently queued  */
1162     long    __reserved[4];  /* ignored for input, zeroed for output */
1163 };
1164 
1165 //----------------------------------------------------------------------
1166 // From linux-2.6.8.1/include/linux/utsname.h
1167 //----------------------------------------------------------------------
1168 
1169 struct vki_new_utsname {
1170     char sysname[65];
1171     char nodename[65];
1172     char release[65];
1173     char version[65];
1174     char machine[65];
1175     char domainname[65];
1176 };
1177 
1178 //----------------------------------------------------------------------
1179 // From linux-2.6.8.1/include/linux/mii.h
1180 //----------------------------------------------------------------------
1181 
1182 /* This structure is used in all SIOCxMIIxxx ioctl calls */
1183 struct vki_mii_ioctl_data {
1184     vki_u16     phy_id;
1185     vki_u16     reg_num;
1186     vki_u16     val_in;
1187     vki_u16     val_out;
1188 };
1189 
1190 //----------------------------------------------------------------------
1191 // From linux-2.6.8.1/include/linux/capability.h
1192 //----------------------------------------------------------------------
1193 
1194 // [[capget()/capset() man page says this, ominously:
1195 //
1196 //   The kernel API is likely to change and use of these functions  (in
1197 //   particular the format of the cap_user_*_t types) is subject to
1198 //   change with each kernel revision.
1199 //
1200 // However, the format hasn't changed since at least Linux 2.4.6.]]
1201 
1202 typedef struct __vki_user_cap_header_struct {
1203     __vki_u32 version;
1204     int pid;
1205 } __user *vki_cap_user_header_t;
1206  
1207 typedef struct __vki_user_cap_data_struct {
1208         __vki_u32 effective;
1209         __vki_u32 permitted;
1210         __vki_u32 inheritable;
1211 } __user *vki_cap_user_data_t;
1212   
1213 
1214 //----------------------------------------------------------------------
1215 // From linux-2.6.8.1/include/linux/module.h
1216 //----------------------------------------------------------------------
1217 
1218 // [[We do a VKI_SIZEOF_* here because this type is so big, and its size
1219 //   depends on the word size, so see vki_arch.h]]
1220 
1221 //----------------------------------------------------------------------
1222 // From linux-2.6.8.1/include/linux/ipc.h
1223 //----------------------------------------------------------------------
1224 
1225 /* Obsolete, used only for backwards compatibility and libc5 compiles */
1226 struct vki_ipc_perm
1227 {
1228     __vki_kernel_key_t  key;
1229     __vki_kernel_uid_t  uid;
1230     __vki_kernel_gid_t  gid;
1231     __vki_kernel_uid_t  cuid;
1232     __vki_kernel_gid_t  cgid;
1233     __vki_kernel_mode_t mode; 
1234     unsigned short  seq;
1235 };
1236 
1237 #define VKI_IPC_CREAT  00001000   /* create if key is nonexistent */
1238 #define VKI_IPC_EXCL   00002000   /* fail if key exists */
1239 #define VKI_IPC_NOWAIT 00004000   /* return error on wait */
1240 
1241 //#define VKI_IPC_RMID 0     /* remove resource */
1242 #define VKI_IPC_SET  1     /* set ipc_perm options */
1243 #define VKI_IPC_STAT 2     /* get ipc_perm options */
1244 #define VKI_IPC_INFO 3     /* see ipcs */
1245 
1246 #define VKI_IPC_64  0x0100  /* New version (support 32-bit UIDs, bigger
1247                    message sizes, etc. */
1248 // From /usr/include/bits/shm.h
1249 # define VKI_SHM_HUGETLB   04000
1250 
1251 
1252 //----------------------------------------------------------------------
1253 // From linux-2.6.8.1/include/linux/sem.h
1254 //----------------------------------------------------------------------
1255 
1256 #define VKI_GETALL  13       /* get all semval's */
1257 #define VKI_SETVAL  16       /* set semval */
1258 #define VKI_SETALL  17       /* set all semval's */
1259 
1260 #define VKI_SEM_STAT 18
1261 #define VKI_SEM_INFO 19
1262 
1263 /* Obsolete, used only for backwards compatibility and libc5 compiles */
1264 struct vki_semid_ds {
1265     struct vki_ipc_perm sem_perm;       /* permissions .. see ipc.h */
1266     __vki_kernel_time_t sem_otime;      /* last semop time */
1267     __vki_kernel_time_t sem_ctime;      /* last change time */
1268         // [[Use void* to avoid excess header copying]]
1269     void/*struct sem    */*sem_base;        /* ptr to first semaphore in array */
1270     void/*struct sem_queue */*sem_pending;      /* pending operations to be processed */
1271     void/*struct sem_queue */**sem_pending_last;    /* last pending operation */
1272     void/*struct sem_undo   */*undo;            /* undo requests on this array */
1273     unsigned short  sem_nsems;      /* no. of semaphores in array */
1274 };
1275 
1276 struct vki_sembuf {
1277     unsigned short  sem_num;    /* semaphore index in array */
1278     short       sem_op;     /* semaphore operation */
1279     short       sem_flg;    /* operation flags */
1280 };
1281 
1282 union vki_semun {
1283     int val;            /* value for SETVAL */
1284     struct vki_semid_ds __user *buf;    /* buffer for IPC_STAT & IPC_SET */
1285     struct vki_semid64_ds __user *buf64;    /* buffer for IPC_STAT & IPC_SET */
1286     unsigned short __user *array;   /* array for GETALL & SETALL */
1287     struct vki_seminfo __user *__buf;   /* buffer for IPC_INFO */
1288     void __user *__pad;
1289 };
1290 
1291 struct  vki_seminfo {
1292     int semmap;
1293     int semmni;
1294     int semmns;
1295     int semmnu;
1296     int semmsl;
1297     int semopm;
1298     int semume;
1299     int semusz;
1300     int semvmx;
1301     int semaem;
1302 };
1303 
1304 //----------------------------------------------------------------------
1305 // From linux-2.6.8.1/include/asm-generic/errno-base.h
1306 //----------------------------------------------------------------------
1307 
1308 #define VKI_EPERM        1  /* Operation not permitted */
1309 #define VKI_ENOENT       2  /* No such file or directory */
1310 #define VKI_ESRCH        3  /* No such process */
1311 #define VKI_EINTR        4  /* Interrupted system call */
1312 #define VKI_EIO          5  /* I/O error */
1313 #define VKI_ENXIO        6  /* No such device or address */
1314 #define VKI_E2BIG        7  /* Argument list too long */
1315 #define VKI_ENOEXEC      8  /* Exec format error */
1316 #define VKI_EBADF        9  /* Bad file number */
1317 #define VKI_ECHILD      10  /* No child processes */
1318 #define VKI_EAGAIN      11  /* Try again */
1319 #define VKI_ENOMEM      12  /* Out of memory */
1320 #define VKI_EACCES      13  /* Permission denied */
1321 #define VKI_EFAULT      14  /* Bad address */
1322 #define VKI_ENOTBLK     15  /* Block device required */
1323 #define VKI_EBUSY       16  /* Device or resource busy */
1324 #define VKI_EEXIST      17  /* File exists */
1325 #define VKI_EXDEV       18  /* Cross-device link */
1326 #define VKI_ENODEV      19  /* No such device */
1327 #define VKI_ENOTDIR     20  /* Not a directory */
1328 #define VKI_EISDIR      21  /* Is a directory */
1329 #define VKI_EINVAL      22  /* Invalid argument */
1330 #define VKI_ENFILE      23  /* File table overflow */
1331 #define VKI_EMFILE      24  /* Too many open files */
1332 #define VKI_ENOTTY      25  /* Not a typewriter */
1333 #define VKI_ETXTBSY     26  /* Text file busy */
1334 #define VKI_EFBIG       27  /* File too large */
1335 #define VKI_ENOSPC      28  /* No space left on device */
1336 #define VKI_ESPIPE      29  /* Illegal seek */
1337 #define VKI_EROFS       30  /* Read-only file system */
1338 #define VKI_EMLINK      31  /* Too many links */
1339 #define VKI_EPIPE       32  /* Broken pipe */
1340 #define VKI_EDOM        33  /* Math argument out of domain of func */
1341 #define VKI_ERANGE      34  /* Math result not representable */
1342 
1343 //----------------------------------------------------------------------
1344 // From linux-2.6.8.1/include/asm-generic/errno.h
1345 //----------------------------------------------------------------------
1346 
1347 #define VKI_EWOULDBLOCK     VKI_EAGAIN
1348 
1349 #define VKI_ELOOP 40
1350 
1351 //----------------------------------------------------------------------
1352 // From linux-2.6.8.1/include/linux/wait.h
1353 //----------------------------------------------------------------------
1354 
1355 #define VKI_WNOHANG 0x00000001
1356 
1357 #define __VKI_WALL  0x40000000  /* Wait on all children, regardless of type */
1358 #define __VKI_WCLONE    0x80000000  /* Wait only on non-SIGCHLD children */
1359 
1360 //----------------------------------------------------------------------
1361 // From linux-2.6.8.1/include/linux/mman.h
1362 //----------------------------------------------------------------------
1363 
1364 #define VKI_MREMAP_MAYMOVE  1
1365 #define VKI_MREMAP_FIXED    2
1366 
1367 //----------------------------------------------------------------------
1368 // From linux-2.6.31-rc4/include/linux/futex.h
1369 //----------------------------------------------------------------------
1370 
1371 #define VKI_FUTEX_WAIT (0)
1372 #define VKI_FUTEX_WAKE (1)
1373 #define VKI_FUTEX_FD (2)
1374 #define VKI_FUTEX_REQUEUE (3)
1375 #define VKI_FUTEX_CMP_REQUEUE (4)
1376 #define VKI_FUTEX_WAKE_OP (5)
1377 #define VKI_FUTEX_LOCK_PI (6)
1378 #define VKI_FUTEX_UNLOCK_PI (7)
1379 #define VKI_FUTEX_TRYLOCK_PI (8)
1380 #define VKI_FUTEX_WAIT_BITSET (9)
1381 #define VKI_FUTEX_WAKE_BITSET (10)
1382 #define VKI_FUTEX_WAIT_REQUEUE_PI (11)
1383 #define VKI_FUTEX_CMP_REQUEUE_PI (12)
1384 #define VKI_FUTEX_PRIVATE_FLAG (128)
1385 #define VKI_FUTEX_CLOCK_REALTIME (256)
1386 
1387 struct vki_robust_list {
1388     struct vki_robust_list __user *next;
1389 };
1390 
1391 struct vki_robust_list_head {
1392     /*
1393      * The head of the list. Points back to itself if empty:
1394      */
1395     struct vki_robust_list list;
1396 
1397     /*
1398      * This relative offset is set by user-space, it gives the kernel
1399      * the relative position of the futex field to examine. This way
1400      * we keep userspace flexible, to freely shape its data-structure,
1401      * without hardcoding any particular offset into the kernel:
1402      */
1403     long futex_offset;
1404 
1405     /*
1406      * The death of the thread may race with userspace setting
1407      * up a lock's links. So to handle this race, userspace first
1408      * sets this field to the address of the to-be-taken lock,
1409      * then does the lock acquire, and then adds itself to the
1410      * list, and then clears this field. Hence the kernel will
1411      * always have full knowledge of all locks that the thread
1412      * _might_ have taken. We check the owner TID in any case,
1413      * so only truly owned locks will be handled.
1414      */
1415     struct vki_robust_list __user *list_op_pending;
1416 };
1417 
1418 /* Introduced in linux commit bf69bad38cf63d980e8a603f8d1bd1f85b5ed3d9 */
1419 struct vki_futex_waitv {
1420     __vki_u64 val;
1421     __vki_u64 uaddr;
1422     __vki_u32 flags;
1423     __vki_u32 __reserved;
1424 };
1425 
1426 struct vki__kernel_timespec {
1427     long long tv_sec;
1428     long long tv_nsec;
1429 };
1430 
1431 //----------------------------------------------------------------------
1432 // From linux-2.6.8.1/include/linux/errno.h
1433 //----------------------------------------------------------------------
1434 
1435 #define VKI_ERESTARTSYS 512
1436 
1437 //----------------------------------------------------------------------
1438 // From linux-2.6.8.1/include/linux/stat.h
1439 //----------------------------------------------------------------------
1440 
1441 #define VKI_S_IFMT  00170000
1442 #define VKI_S_IFSOCK 0140000
1443 #define VKI_S_IFLNK  0120000
1444 #define VKI_S_IFREG  0100000
1445 #define VKI_S_IFBLK  0060000
1446 #define VKI_S_IFDIR  0040000
1447 #define VKI_S_IFCHR  0020000
1448 #define VKI_S_IFIFO  0010000
1449 #define VKI_S_ISUID  0004000
1450 #define VKI_S_ISGID  0002000
1451 #define VKI_S_ISVTX  0001000
1452 
1453 #define VKI_S_ISLNK(m)  (((m) & VKI_S_IFMT) == VKI_S_IFLNK)
1454 #define VKI_S_ISREG(m)  (((m) & VKI_S_IFMT) == VKI_S_IFREG)
1455 #define VKI_S_ISDIR(m)  (((m) & VKI_S_IFMT) == VKI_S_IFDIR)
1456 #define VKI_S_ISCHR(m)  (((m) & VKI_S_IFMT) == VKI_S_IFCHR)
1457 #define VKI_S_ISBLK(m)  (((m) & VKI_S_IFMT) == VKI_S_IFBLK)
1458 #define VKI_S_ISFIFO(m) (((m) & VKI_S_IFMT) == VKI_S_IFIFO)
1459 #define VKI_S_ISSOCK(m) (((m) & VKI_S_IFMT) == VKI_S_IFSOCK)
1460 
1461 #define VKI_S_IRWXU 00700
1462 #define VKI_S_IRUSR 00400
1463 #define VKI_S_IWUSR 00200
1464 #define VKI_S_IXUSR 00100
1465 
1466 #define VKI_S_IRWXG 00070
1467 #define VKI_S_IRGRP 00040
1468 #define VKI_S_IWGRP 00020
1469 #define VKI_S_IXGRP 00010
1470 
1471 #define VKI_S_IRWXO 00007
1472 #define VKI_S_IROTH 00004
1473 #define VKI_S_IWOTH 00002
1474 #define VKI_S_IXOTH 00001
1475 
1476 #define VKI_STATX_ALL 0x00000FFFU
1477 
1478 struct vki_statx_timestamp {
1479         __vki_s64   tv_sec;
1480         __vki_u32   tv_nsec;
1481         __vki_s32   __reserved;
1482 };
1483 
1484 struct vki_statx {
1485         /* 0x00 */
1486         __vki_u32   stx_mask;       /* What results were written [uncond] */
1487         __vki_u32   stx_blksize;    /* Preferred general I/O size [uncond] */
1488         __vki_u64   stx_attributes; /* Flags conveying information about the file [uncond] */
1489         /* 0x10 */
1490         __vki_u32   stx_nlink;      /* Number of hard links */
1491         __vki_u32   stx_uid;        /* User ID of owner */
1492         __vki_u32   stx_gid;        /* Group ID of owner */
1493         __vki_u16   stx_mode;       /* File mode */
1494         __vki_u16   __spare0[1];
1495         /* 0x20 */
1496         __vki_u64   stx_ino;        /* Inode number */
1497         __vki_u64   stx_size;       /* File size */
1498         __vki_u64   stx_blocks;     /* Number of 512-byte blocks allocated */
1499         __vki_u64   stx_attributes_mask; /* Mask to show what's supported in stx_attributes */
1500         /* 0x40 */
1501         struct vki_statx_timestamp  stx_atime;      /* Last access time */
1502         struct vki_statx_timestamp  stx_btime;      /* File creation time */
1503         struct vki_statx_timestamp  stx_ctime;      /* Last attribute change time */
1504         struct vki_statx_timestamp  stx_mtime;      /* Last data modification time */
1505         /* 0x80 */
1506         __vki_u32   stx_rdev_major; /* Device ID of special file [if bdev/cdev] */
1507         __vki_u32   stx_rdev_minor;
1508         __vki_u32   stx_dev_major;  /* ID of device containing file [uncond] */
1509         __vki_u32   stx_dev_minor;
1510         /* 0x90 */
1511         __vki_u64   stx_mnt_id;
1512         __vki_u32   stx_dio_mem_align;      /* Memory buffer alignment for direct I/O */
1513         __vki_u32   stx_dio_offset_align;   /* File offset alignment for direct I/O */
1514         /* 0xa0 */
1515 
1516         __vki_u64   __spare2[12];   /* Spare space for future expansion */
1517         /* 0x100 */
1518 };
1519 
1520 
1521 //----------------------------------------------------------------------
1522 // From linux-2.6.8.1/include/linux/dirent.h
1523 //----------------------------------------------------------------------
1524 
1525 /* This is the old compat structure to use with the old dirent syscall. */
1526 struct vki_dirent {
1527     long        d_ino;
1528     __vki_kernel_off_t  d_off;
1529     unsigned short  d_reclen;
1530     char        d_name[256]; /* We must not include limits.h! */
1531 };
1532 
1533 /* This is the new structure to use with the dirent64 syscall. */
1534 struct vki_dirent64 {
1535     __vki_u64 d_ino;
1536     __vki_s64 d_off;
1537     unsigned short d_reclen;
1538     unsigned char d_type;
1539     char d_name[256]; /* Note we hard code a max file length here. */
1540 };
1541 
1542 //----------------------------------------------------------------------
1543 // From linux-2.6.8.1/include/linux/fcntl.h
1544 //----------------------------------------------------------------------
1545 
1546 #define VKI_F_SETLEASE      (VKI_F_LINUX_SPECIFIC_BASE + 0)
1547 #define VKI_F_GETLEASE      (VKI_F_LINUX_SPECIFIC_BASE + 1)
1548 
1549 #define VKI_F_CREATED_QUERY (VKI_F_LINUX_SPECIFIC_BASE + 4)
1550 #define VKI_F_CANCELLK      (VKI_F_LINUX_SPECIFIC_BASE + 5)
1551 
1552 #define VKI_F_DUPFD_CLOEXEC (VKI_F_LINUX_SPECIFIC_BASE + 6)
1553 
1554 #define VKI_F_NOTIFY        (VKI_F_LINUX_SPECIFIC_BASE + 2)
1555 
1556 #define VKI_F_SETPIPE_SZ    (VKI_F_LINUX_SPECIFIC_BASE + 7)
1557 #define VKI_F_GETPIPE_SZ    (VKI_F_LINUX_SPECIFIC_BASE + 8)
1558 
1559 #define VKI_F_ADD_SEALS     (VKI_F_LINUX_SPECIFIC_BASE + 9)
1560 #define VKI_F_GET_SEALS     (VKI_F_LINUX_SPECIFIC_BASE + 10)
1561 
1562 struct vki_flock {
1563     short           l_type;
1564     short           l_whence;
1565     __vki_kernel_off_t  l_start;
1566     __vki_kernel_off_t  l_len;
1567     __vki_kernel_pid_t  l_pid;
1568 };
1569 
1570 struct vki_flock64 {
1571     short           l_type;
1572     short           l_whence;
1573     __vki_kernel_loff_t l_start;
1574     __vki_kernel_loff_t l_len;
1575     __vki_kernel_pid_t  l_pid;
1576 };
1577 
1578 #define VKI_AT_EMPTY_PATH       0x1000  /* Allow empty relative pathname */
1579 #define VKI_AT_SYMLINK_NOFOLLOW 0x100   /* Do not follow symbolic links.  */
1580 
1581 //----------------------------------------------------------------------
1582 // From linux-2.6.8.1/include/linux/sysctl.h
1583 //----------------------------------------------------------------------
1584 
1585 struct __vki_sysctl_args {
1586     int __user *name;
1587     int nlen;
1588     void __user *oldval;
1589     vki_size_t __user *oldlenp;
1590     void __user *newval;
1591     vki_size_t newlen;
1592     unsigned long __unused0[4];
1593 };
1594 
1595 //----------------------------------------------------------------------
1596 // From linux-2.6.8.1/include/linux/aio_abi.h
1597 //----------------------------------------------------------------------
1598 
1599 typedef unsigned long   vki_aio_context_t;
1600 
1601 enum {
1602     VKI_IOCB_CMD_PREAD = 0,
1603     VKI_IOCB_CMD_PWRITE = 1,
1604     VKI_IOCB_CMD_FSYNC = 2,
1605     VKI_IOCB_CMD_FDSYNC = 3,
1606     VKI_IOCB_CMD_PREADV = 7,
1607     VKI_IOCB_CMD_PWRITEV = 8,
1608 };
1609 
1610 /* read() from /dev/aio returns these structures. */
1611 struct vki_io_event {
1612     __vki_u64   data;       /* the data field from the iocb */
1613     __vki_u64   obj;        /* what iocb this event came from */
1614         // [[Nb: These fields renamed from 'res' and 'res2' because 'res' is
1615         //   a macro in vg_syscalls.c!]]
1616     __vki_s64   result;     /* result code for this event */
1617     __vki_s64   result2;    /* secondary result */
1618 };
1619 
1620 #if defined(VKI_LITTLE_ENDIAN)
1621 #  define VKI_PADDED(x,y)   x, y
1622 #elif defined(VKI_BIG_ENDIAN)
1623 #  define VKI_PADDED(x,y)   y, x
1624 #else
1625 #error edit for your odd byteorder.
1626 #endif
1627 
1628 struct vki_iocb {
1629     /* these are internal to the kernel/libc. */
1630     __vki_u64   aio_data;   /* data to be returned in event's data */
1631     __vki_u32   VKI_PADDED(aio_key, aio_reserved1);
1632                 /* the kernel sets aio_key to the req # */
1633 
1634     /* common fields */
1635     __vki_u16   aio_lio_opcode; /* see IOCB_CMD_ above */
1636     __vki_s16   aio_reqprio;
1637     __vki_u32   aio_fildes;
1638 
1639     __vki_u64   aio_buf;
1640     __vki_u64   aio_nbytes;
1641     __vki_s64   aio_offset;
1642 
1643     /* extra parameters */
1644     __vki_u64   aio_reserved2;  /* TODO: use this for a (struct sigevent *) */
1645     __vki_u64   aio_reserved3;
1646 }; /* 64 bytes */
1647 
1648 //----------------------------------------------------------------------
1649 // From linux-2.6.8.1/include/linux/aio.h
1650 //----------------------------------------------------------------------
1651 
1652 struct vki_aio_ring {
1653     unsigned    id; /* kernel internal index number */
1654     unsigned    nr; /* number of io_events */
1655     unsigned    head;
1656     unsigned    tail;
1657 
1658     unsigned    magic;
1659     unsigned    compat_features;
1660     unsigned    incompat_features;
1661     unsigned    header_length;  /* size of aio_ring */
1662 
1663     struct vki_io_event     io_events[0];
1664 }; /* 128 bytes + ring size */
1665 
1666 //----------------------------------------------------------------------
1667 // From linux-2.6.8.1/include/linux/msg.h
1668 //----------------------------------------------------------------------
1669 
1670 #define VKI_MSG_STAT 11
1671 #define VKI_MSG_INFO 12
1672 
1673 struct vki_msqid_ds {
1674     struct vki_ipc_perm msg_perm;
1675     struct vki_msg *msg_first;      /* first message on queue,unused  */
1676     struct vki_msg *msg_last;       /* last message in queue,unused */
1677     __vki_kernel_time_t msg_stime;  /* last msgsnd time */
1678     __vki_kernel_time_t msg_rtime;  /* last msgrcv time */
1679     __vki_kernel_time_t msg_ctime;  /* last change time */
1680     unsigned long  msg_lcbytes; /* Reuse junk fields for 32 bit */
1681     unsigned long  msg_lqbytes; /* ditto */
1682     unsigned short msg_cbytes;  /* current number of bytes on queue */
1683     unsigned short msg_qnum;    /* number of messages in queue */
1684     unsigned short msg_qbytes;  /* max number of bytes on queue */
1685     __vki_kernel_ipc_pid_t msg_lspid;   /* pid of last msgsnd */
1686     __vki_kernel_ipc_pid_t msg_lrpid;   /* last receive pid */
1687 };
1688 
1689 struct vki_msgbuf {
1690     long mtype;         /* type of message */
1691     char mtext[1];      /* message text */
1692 };
1693 
1694 struct vki_msginfo {
1695     int msgpool;
1696     int msgmap; 
1697     int msgmax; 
1698     int msgmnb; 
1699     int msgmni; 
1700     int msgssz; 
1701     int msgtql; 
1702     unsigned short  msgseg; 
1703 };
1704 
1705 //----------------------------------------------------------------------
1706 // From linux-2.6.8.1/include/linux/shm.h
1707 //----------------------------------------------------------------------
1708 
1709 struct vki_shmid_ds {
1710     struct vki_ipc_perm     shm_perm;   /* operation perms */
1711     int         shm_segsz;  /* size of segment (bytes) */
1712     __vki_kernel_time_t     shm_atime;  /* last attach time */
1713     __vki_kernel_time_t     shm_dtime;  /* last detach time */
1714     __vki_kernel_time_t     shm_ctime;  /* last change time */
1715     __vki_kernel_ipc_pid_t  shm_cpid;   /* pid of creator */
1716     __vki_kernel_ipc_pid_t  shm_lpid;   /* pid of last operator */
1717     unsigned short      shm_nattch; /* no. of current attaches */
1718     unsigned short      shm_unused; /* compatibility */
1719     void            *shm_unused2;   /* ditto - used by DIPC */
1720     void            *shm_unused3;   /* unused */
1721 };
1722 
1723 #define VKI_SHM_RDONLY  010000  /* read-only access */
1724 #define VKI_SHM_RND     020000  /* round attach address to SHMLBA boundary */
1725 
1726 #define VKI_SHM_STAT    13
1727 #define VKI_SHM_INFO    14
1728 
1729 /* Obsolete, used only for backwards compatibility */
1730 struct  vki_shminfo {
1731     int shmmax;
1732     int shmmin;
1733     int shmmni;
1734     int shmseg;
1735     int shmall;
1736 };
1737 
1738 struct vki_shm_info {
1739     int used_ids;
1740     unsigned long shm_tot;  /* total allocated shm */
1741     unsigned long shm_rss;  /* total resident shm */
1742     unsigned long shm_swp;  /* total swapped shm */
1743     unsigned long swap_attempts;
1744     unsigned long swap_successes;
1745 };
1746 
1747 //----------------------------------------------------------------------
1748 // From linux-2.6.8.1/include/linux/rtc.h
1749 //----------------------------------------------------------------------
1750 
1751 struct vki_rtc_time {
1752     int tm_sec;
1753     int tm_min;
1754     int tm_hour;
1755     int tm_mday;
1756     int tm_mon;
1757     int tm_year;
1758     int tm_wday;
1759     int tm_yday;
1760     int tm_isdst;
1761 };
1762 
1763 #define VKI_RTC_AIE_ON  _VKI_IO('p', 0x01)  /* Alarm int. enable on */
1764 #define VKI_RTC_AIE_OFF _VKI_IO('p', 0x02)  /* ... off      */
1765 #define VKI_RTC_UIE_ON  _VKI_IO('p', 0x03)  /* Update int. enable on*/
1766 #define VKI_RTC_UIE_OFF _VKI_IO('p', 0x04)  /* ... off      */
1767 #define VKI_RTC_PIE_ON  _VKI_IO('p', 0x05)  /* Periodic int. enable on*/
1768 #define VKI_RTC_PIE_OFF _VKI_IO('p', 0x06)  /* ... off      */
1769 
1770 #define VKI_RTC_ALM_SET     _VKI_IOW('p', 0x07, struct vki_rtc_time) /* Set alarm time  */
1771 #define VKI_RTC_ALM_READ    _VKI_IOR('p', 0x08, struct vki_rtc_time) /* Read alarm time */
1772 #define VKI_RTC_RD_TIME     _VKI_IOR('p', 0x09, struct vki_rtc_time) /* Read RTC time   */
1773 //#define RTC_SET_TIME  _IOW('p', 0x0a, struct rtc_time) /* Set RTC time    */
1774 #define VKI_RTC_IRQP_READ   _VKI_IOR('p', 0x0b, unsigned long)   /* Read IRQ rate   */
1775 #define VKI_RTC_IRQP_SET    _VKI_IOW('p', 0x0c, unsigned long)   /* Set IRQ rate    */
1776 
1777 //----------------------------------------------------------------------
1778 // From linux-2.6.8.1/include/linux/isdn.h
1779 //----------------------------------------------------------------------
1780 
1781 // [[Nb: Resolved this for the common case where CONFIG_COBALT_MICRO_SERVER
1782 //   is not defined]]
1783 #define VKI_ISDN_MAX_CHANNELS   64
1784 
1785 #define VKI_IIOCGETCPS  _VKI_IO('I',21)
1786 
1787 #define VKI_IIOCNETGPN  _VKI_IO('I',34)
1788 
1789 #define VKI_ISDN_MSNLEN          32
1790 
1791 typedef struct {
1792   char name[10];
1793   char phone[VKI_ISDN_MSNLEN];
1794   int  outgoing;
1795 } vki_isdn_net_ioctl_phone;
1796 
1797 //----------------------------------------------------------------------
1798 // From linux-2.6.8.1/include/linux/sockios.h
1799 //----------------------------------------------------------------------
1800 
1801 #define VKI_SIOCOUTQ        VKI_TIOCOUTQ
1802 
1803 #define VKI_SIOCADDRT       0x890B  /* add routing table entry  */
1804 #define VKI_SIOCDELRT       0x890C  /* delete routing table entry   */
1805 
1806 #define VKI_SIOCGIFNAME     0x8910  /* get iface name       */
1807 #define VKI_SIOCGIFCONF     0x8912  /* get iface list       */
1808 #define VKI_SIOCGIFFLAGS    0x8913  /* get flags            */
1809 #define VKI_SIOCSIFFLAGS    0x8914  /* set flags            */
1810 #define VKI_SIOCGIFADDR     0x8915  /* get PA address       */
1811 #define VKI_SIOCSIFADDR     0x8916  /* set PA address       */
1812 #define VKI_SIOCGIFDSTADDR  0x8917  /* get remote PA address    */
1813 #define VKI_SIOCSIFDSTADDR  0x8918  /* set remote PA address    */
1814 #define VKI_SIOCGIFBRDADDR  0x8919  /* get broadcast PA address */
1815 #define VKI_SIOCSIFBRDADDR  0x891a  /* set broadcast PA address */
1816 #define VKI_SIOCGIFNETMASK  0x891b  /* get network PA mask      */
1817 #define VKI_SIOCSIFNETMASK  0x891c  /* set network PA mask      */
1818 #define VKI_SIOCGIFMETRIC   0x891d  /* get metric           */
1819 #define VKI_SIOCSIFMETRIC   0x891e  /* set metric           */
1820 #define VKI_SIOCGIFMTU      0x8921  /* get MTU size         */
1821 #define VKI_SIOCSIFMTU      0x8922  /* set MTU size         */
1822 #define VKI_SIOCSIFHWADDR   0x8924  /* set hardware address     */
1823 #define VKI_SIOCGIFHWADDR   0x8927  /* Get hardware address     */
1824 #define VKI_SIOCGIFINDEX    0x8933  /* name -> if_index mapping */
1825 
1826 #define VKI_SIOCGIFTXQLEN   0x8942  /* Get the tx queue length  */
1827 #define VKI_SIOCSIFTXQLEN   0x8943  /* Set the tx queue length  */
1828 
1829 #define VKI_SIOCETHTOOL     0x8946  /* Ethtool interface        */
1830 
1831 #define VKI_SIOCGMIIPHY     0x8947  /* Get address of MII PHY in use. */
1832 #define VKI_SIOCGMIIREG     0x8948  /* Read MII PHY register.   */
1833 #define VKI_SIOCSMIIREG     0x8949  /* Write MII PHY register.  */
1834 
1835 #define VKI_SIOCDARP        0x8953  /* delete ARP table entry   */
1836 #define VKI_SIOCGARP        0x8954  /* get ARP table entry      */
1837 #define VKI_SIOCSARP        0x8955  /* set ARP table entry      */
1838 
1839 #define VKI_SIOCDRARP       0x8960  /* delete RARP table entry  */
1840 #define VKI_SIOCGRARP       0x8961  /* get RARP table entry     */
1841 #define VKI_SIOCSRARP       0x8962  /* set RARP table entry     */
1842 
1843 #define VKI_SIOCGIFMAP      0x8970  /* Get device parameters    */
1844 #define VKI_SIOCSIFMAP      0x8971  /* Set device parameters    */
1845 
1846 #define VKI_SIOCSHWTSTAMP   0x89B0  /* Set hardware time stamping */
1847 
1848 //----------------------------------------------------------------------
1849 // From linux-2.6.8.1/include/linux/ppdev.h
1850 //----------------------------------------------------------------------
1851 
1852 #define VKI_PP_MAJOR    99
1853 
1854 #define VKI_PP_IOCTL    'p'
1855 
1856 /* Set mode for read/write (e.g. IEEE1284_MODE_EPP) */
1857 #define VKI_PPSETMODE   _VKI_IOW(VKI_PP_IOCTL, 0x80, int)
1858 
1859 /* Read status */
1860 #define VKI_PPRSTATUS   _VKI_IOR(VKI_PP_IOCTL, 0x81, unsigned char)
1861 //#define PPWSTATUS OBSOLETE__IOW(PP_IOCTL, 0x82, unsigned char)
1862 
1863 /* Read/write control */
1864 #define VKI_PPRCONTROL  _VKI_IOR(VKI_PP_IOCTL, 0x83, unsigned char)
1865 #define VKI_PPWCONTROL  _VKI_IOW(VKI_PP_IOCTL, 0x84, unsigned char)
1866 
1867 struct vki_ppdev_frob_struct {
1868     unsigned char mask;
1869     unsigned char val;
1870 };
1871 #define VKI_PPFCONTROL      _VKI_IOW(VKI_PP_IOCTL, 0x8e, struct vki_ppdev_frob_struct)
1872 
1873 /* Read/write data */
1874 #define VKI_PPRDATA     _VKI_IOR(VKI_PP_IOCTL, 0x85, unsigned char)
1875 #define VKI_PPWDATA     _VKI_IOW(VKI_PP_IOCTL, 0x86, unsigned char)
1876 
1877 /* Claim the port to start using it */
1878 #define VKI_PPCLAIM     _VKI_IO(VKI_PP_IOCTL, 0x8b)
1879 
1880 /* Release the port when you aren't using it */
1881 #define VKI_PPRELEASE   _VKI_IO(VKI_PP_IOCTL, 0x8c)
1882 
1883 /* Yield the port (release it if another driver is waiting,
1884  * then reclaim) */
1885 #define VKI_PPYIELD     _VKI_IO(VKI_PP_IOCTL, 0x8d)
1886 
1887 /* Register device exclusively (must be before PPCLAIM). */
1888 #define VKI_PPEXCL      _VKI_IO(VKI_PP_IOCTL, 0x8f)
1889 
1890 /* Data line direction: non-zero for input mode. */
1891 #define VKI_PPDATADIR   _VKI_IOW(VKI_PP_IOCTL, 0x90, int)
1892 
1893 /* Negotiate a particular IEEE 1284 mode. */
1894 #define VKI_PPNEGOT _VKI_IOW(VKI_PP_IOCTL, 0x91, int)
1895 
1896 /* Set control lines when an interrupt occurs. */
1897 #define VKI_PPWCTLONIRQ _VKI_IOW(VKI_PP_IOCTL, 0x92, unsigned char)
1898 
1899 /* Clear (and return) interrupt count. */
1900 #define VKI_PPCLRIRQ    _VKI_IOR(VKI_PP_IOCTL, 0x93, int)
1901 
1902 /* Set the IEEE 1284 phase that we're in (e.g. IEEE1284_PH_FWD_IDLE) */
1903 #define VKI_PPSETPHASE  _VKI_IOW(VKI_PP_IOCTL, 0x94, int)
1904 
1905 /* Set and get port timeout (struct timeval's) */
1906 #define VKI_PPGETTIME   _VKI_IOR(VKI_PP_IOCTL, 0x95, struct vki_timeval)
1907 #define VKI_PPSETTIME   _VKI_IOW(VKI_PP_IOCTL, 0x96, struct vki_timeval)
1908 
1909 #define VKI_PPGETMODES  _VKI_IOR(VKI_PP_IOCTL, 0x97, unsigned int)
1910 
1911 #define VKI_PPGETMODE   _VKI_IOR(VKI_PP_IOCTL, 0x98, int)
1912 #define VKI_PPGETPHASE  _VKI_IOR(VKI_PP_IOCTL, 0x99, int)
1913 
1914 #define VKI_PPGETFLAGS  _VKI_IOR(VKI_PP_IOCTL, 0x9a, int)
1915 #define VKI_PPSETFLAGS  _VKI_IOW(VKI_PP_IOCTL, 0x9b, int)
1916 
1917 //----------------------------------------------------------------------
1918 // From linux-5.2.5/include/uapi/linux/loop.h
1919 //----------------------------------------------------------------------
1920 
1921 #define     VKI_LO_NAME_SIZE        64
1922 #define     VKI_LO_KEY_SIZE         32
1923 
1924 struct vki_loop_info {
1925 
1926     int                 lo_number;              /* ioctl r/o */
1927     unsigned short      lo_device;              /* ioctl r/o */
1928     unsigned long       lo_inode;               /* ioctl r/o */
1929     unsigned short      lo_rdevice;             /* ioctl r/o */
1930     int                 lo_offset;
1931     int                 lo_encrypt_type;
1932     int                 lo_encrypt_key_size;    /* ioctl w/o */
1933     int                 lo_flags;               /* ioctl r/o */
1934     char                lo_name[VKI_LO_NAME_SIZE];
1935     unsigned char       lo_encrypt_key[VKI_LO_KEY_SIZE];/* ioctl w/o */
1936     unsigned long       lo_init[2];
1937     char                reserved[4];
1938 };
1939 
1940 struct vki_loop_info64 {
1941     __vki_u64          lo_device;           /* ioctl r/o */
1942     __vki_u64          lo_inode;            /* ioctl r/o */
1943     __vki_u64          lo_rdevice;          /* ioctl r/o */
1944     __vki_u64          lo_offset;
1945     __vki_u64          lo_sizelimit;/* bytes, 0 == max available */
1946     __vki_u32          lo_number;           /* ioctl r/o */
1947     __vki_u32          lo_encrypt_type;
1948     __vki_u32          lo_encrypt_key_size; /* ioctl w/o */
1949     __vki_u32          lo_flags;            /* ioctl r/o */
1950     __vki_u8           lo_file_name[VKI_LO_NAME_SIZE];
1951     __vki_u8           lo_crypt_name[VKI_LO_NAME_SIZE];
1952     __vki_u8           lo_encrypt_key[VKI_LO_KEY_SIZE]; /* ioctl w/o */
1953     __vki_u64          lo_init[2];
1954 };
1955 
1956 /* loopback device related, e.g. see losetup program options */
1957 #define VKI_LOOP_SET_FD         0x4C00
1958 #define VKI_LOOP_CLR_FD         0x4C01
1959 #define VKI_LOOP_SET_STATUS     0x4C02
1960 #define VKI_LOOP_GET_STATUS     0x4C03
1961 #define VKI_LOOP_SET_STATUS64   0x4C04
1962 #define VKI_LOOP_GET_STATUS64   0x4C05
1963 #define VKI_LOOP_CHANGE_FD      0x4C06
1964 #define VKI_LOOP_SET_CAPACITY   0x4C07
1965 #define VKI_LOOP_SET_DIRECT_IO  0x4C08
1966 #define VKI_LOOP_SET_BLOCK_SIZE 0x4C09
1967 
1968 /* ioctls for loop-control device interface */
1969 #define VKI_LOOP_CTL_ADD        0x4C80 // adds a new loopback device
1970 #define VKI_LOOP_CTL_REMOVE     0x4C81 // deletes an existing loopback device
1971 #define VKI_LOOP_CTL_GET_FREE   0x4C82 // finds a free/available loopback device
1972 
1973 //----------------------------------------------------------------------
1974 // From linux-5.2.5/include/uapi/linux/fs.h
1975 //----------------------------------------------------------------------
1976 
1977 #define VKI_BLKROSET   _VKI_IO(0x12,93) /* set device read-only (0 = read-write) */
1978 #define VKI_BLKROGET   _VKI_IO(0x12,94) /* get read-only status (0 = read_write) */
1979 #define VKI_BLKRRPART  _VKI_IO(0x12,95) /* re-read partition table */
1980 #define VKI_BLKGETSIZE _VKI_IO(0x12,96) /* return device size /512 (long *arg) */
1981 #define VKI_BLKFLSBUF  _VKI_IO(0x12,97) /* flush buffer cache */
1982 #define VKI_BLKRASET   _VKI_IO(0x12,98) /* set read ahead for block device */
1983 #define VKI_BLKRAGET   _VKI_IO(0x12,99) /* get current read ahead setting */
1984 #define VKI_BLKFRASET  _VKI_IO(0x12,100)/* set filesystem (mm/filemap.c) read-ahead */
1985 #define VKI_BLKFRAGET  _VKI_IO(0x12,101)/* get filesystem (mm/filemap.c) read-ahead */
1986 #define VKI_BLKSECTSET _VKI_IO(0x12,102)/* set max sectors per request (ll_rw_blk.c) */
1987 #define VKI_BLKSECTGET _VKI_IO(0x12,103)/* get max sectors per request (ll_rw_blk.c) */
1988 #define VKI_BLKSSZGET  _VKI_IO(0x12,104)/* get block device sector size */
1989 #define VKI_BLKBSZGET  _VKI_IOR(0x12,112,vki_size_t)
1990 #define VKI_BLKBSZSET  _VKI_IOW(0x12,113,vki_size_t)
1991 #define VKI_BLKGETSIZE64 _VKI_IOR(0x12,114,vki_size_t) /* return device size in bytes (u64 *arg) */
1992 #define VKI_BLKDISCARD _VKI_IO(0x12,119)
1993 #define VKI_BLKIOMIN _VKI_IO(0x12,120)
1994 #define VKI_BLKIOOPT _VKI_IO(0x12,121)
1995 #define VKI_BLKALIGNOFF _VKI_IO(0x12,122)
1996 #define VKI_BLKPBSZGET _VKI_IO(0x12,123)
1997 #define VKI_BLKDISCARDZEROES _VKI_IO(0x12,124)
1998 #define VKI_BLKZEROOUT _VKI_IO(0x12,127)
1999 
2000 #define VKI_FIBMAP  _VKI_IO(0x00,1) /* bmap access */
2001 #define VKI_FIGETBSZ    _VKI_IO(0x00,2) /* get the block size used for bmap */
2002 #define VKI_FICLONE     _VKI_IOW(0x94, 9, int)
2003 
2004 //----------------------------------------------------------------------
2005 // From linux-2.6.8.1/include/scsi/sg.h
2006 //----------------------------------------------------------------------
2007 
2008 typedef struct vki_sg_io_hdr
2009 {
2010     int interface_id;           /* [i] 'S' for SCSI generic (required) */
2011     int dxfer_direction;        /* [i] data transfer direction  */
2012     unsigned char cmd_len;      /* [i] SCSI command length ( <= 16 bytes) */
2013     unsigned char mx_sb_len;    /* [i] max length to write to sbp */
2014     unsigned short iovec_count; /* [i] 0 implies no scatter gather */
2015     unsigned int dxfer_len;     /* [i] byte count of data transfer */
2016     void __user *dxferp;    /* [i], [*io] points to data transfer memory
2017                           or scatter gather list */
2018     unsigned char __user *cmdp; /* [i], [*i] points to command to perform */
2019     void __user *sbp;       /* [i], [*o] points to sense_buffer memory */
2020     unsigned int timeout;       /* [i] MAX_UINT->no timeout (unit: millisec) */
2021     unsigned int flags;         /* [i] 0 -> default, see SG_FLAG... */
2022     int pack_id;                /* [i->o] unused internally (normally) */
2023     void __user * usr_ptr;      /* [i->o] unused internally */
2024     unsigned char status;       /* [o] scsi status */
2025     unsigned char masked_status;/* [o] shifted, masked scsi status */
2026     unsigned char msg_status;   /* [o] messaging level data (optional) */
2027     unsigned char sb_len_wr;    /* [o] byte count actually written to sbp */
2028     unsigned short host_status; /* [o] errors from host adapter */
2029     unsigned short driver_status;/* [o] errors from software driver */
2030     int resid;                  /* [o] dxfer_len - actual_transferred */
2031     unsigned int duration;      /* [o] time taken by cmd (unit: millisec) */
2032     unsigned int info;          /* [o] auxiliary information */
2033 } vki_sg_io_hdr_t;  /* 64 bytes long (on i386) */
2034 
2035 #define VKI_SG_DXFER_NONE -1        /* e.g. a SCSI Test Unit Ready command */
2036 #define VKI_SG_DXFER_TO_DEV -2      /* e.g. a SCSI WRITE command */
2037 #define VKI_SG_DXFER_FROM_DEV -3    /* e.g. a SCSI READ command */
2038 #define VKI_SG_DXFER_TO_FROM_DEV -4 /* treated like SG_DXFER_FROM_DEV with the
2039                    additional property than during indirect
2040                    IO the user buffer is copied into the
2041                    kernel buffers before the transfer */
2042 
2043 typedef struct vki_sg_scsi_id { /* used by SG_GET_SCSI_ID ioctl() */
2044     int host_no;        /* as in "scsi<n>" where 'n' is one of 0, 1, 2 etc */
2045     int channel;
2046     int scsi_id;        /* scsi id of target device */
2047     int lun;
2048     int scsi_type;      /* TYPE_... defined in scsi/scsi.h */
2049     short h_cmd_per_lun;/* host (adapter) maximum commands per lun */
2050     short d_queue_depth;/* device (or adapter) maximum queue length */
2051     int unused[2];      /* probably find a good use, set 0 for now */
2052 } vki_sg_scsi_id_t; /* 32 bytes long on i386 */
2053 
2054 #define VKI_SG_EMULATED_HOST 0x2203 /* true for emulated host adapter (ATAPI) */
2055 
2056 #define VKI_SG_SET_RESERVED_SIZE 0x2275  /* request a new reserved buffer size */
2057 #define VKI_SG_GET_RESERVED_SIZE 0x2272  /* actual size of reserved buffer */
2058 
2059 #define VKI_SG_GET_SCSI_ID 0x2276   /* Yields fd's bus, chan, dev, lun + type */
2060 
2061 #define VKI_SG_GET_SG_TABLESIZE 0x227F  /* 0 implies can't do scatter gather */
2062 
2063 #define VKI_SG_GET_VERSION_NUM 0x2282 /* Example: version 2.1.34 yields 20134 */
2064 
2065 #define VKI_SG_IO 0x2285   /* similar effect as write() followed by read() */
2066 
2067 #define VKI_SG_SET_TIMEOUT 0x2201  /* unit: jiffies (10ms on i386) */
2068 #define VKI_SG_GET_TIMEOUT 0x2202  /* yield timeout as _return_ value */
2069 
2070 //#define SG_GET_COMMAND_Q 0x2270   /* Yields 0 (queuing off) or 1 (on) */
2071 #define VKI_SG_SET_COMMAND_Q 0x2271   /* Change queuing state with 0 or 1 */
2072 
2073 //----------------------------------------------------------------------
2074 // From linux-2.6.34/include/scsi/scsi.h and scsi/scsi_ioctl.h
2075 //----------------------------------------------------------------------
2076 
2077 #define VKI_SCSI_IOCTL_DOORLOCK     0x5380 /* Lock the eject mechanism.  */
2078 #define VKI_SCSI_IOCTL_DOORUNLOCK   0x5381 /* Unlock the mechanism.  */
2079 #define VKI_SCSI_IOCTL_GET_IDLUN    0x5382
2080 #define VKI_SCSI_IOCTL_GET_BUS_NUMBER   0x5386
2081 
2082 struct vki_scsi_idlun {
2083     __vki_u32 dev_id;
2084     __vki_u32 host_unique_id;
2085 };
2086 
2087 //----------------------------------------------------------------------
2088 // From linux-2.6.8.1/include/linux/cdrom.h
2089 //----------------------------------------------------------------------
2090 
2091 #define VKI_CDROMPLAYMSF        0x5303 /* Play Audio MSF (struct cdrom_msf) */
2092 #define VKI_CDROMREADTOCHDR     0x5305 /* Read TOC header 
2093                                                (struct cdrom_tochdr) */
2094 #define VKI_CDROMREADTOCENTRY       0x5306 /* Read TOC entry 
2095                                                (struct cdrom_tocentry) */
2096 #define VKI_CDROMSTOP           0x5307 /* Stop the cdrom drive */
2097 #define VKI_CDROMSUBCHNL        0x530b /* Read subchannel data 
2098                                                (struct cdrom_subchnl) */
2099 #define VKI_CDROMREADMODE2      0x530c /* Read CDROM mode 2 data (2336 Bytes) 
2100                                                (struct cdrom_read) */
2101 #define VKI_CDROMREADMODE1      0x530d /* Read CDROM mode 1 data (2048 Bytes)
2102                                                    (struct cdrom_read) */
2103 #define VKI_CDROMREADAUDIO      0x530e /* (struct cdrom_read_audio) */
2104 #define VKI_CDROMMULTISESSION       0x5310 /* Obtain the start-of-last-session 
2105                                                address of multi session disks 
2106                                                (struct cdrom_multisession) */
2107 #define VKI_CDROM_GET_MCN       0x5311 /* Obtain the "Universal Product Code" 
2108                                                if available (struct cdrom_mcn) */
2109 #define VKI_CDROMVOLREAD        0x5313 /* Get the drive's volume setting
2110                                               (struct cdrom_volctrl) */
2111 #define VKI_CDROMREADRAW        0x5314  /* read data in raw mode (2352 Bytes)
2112                                                (struct cdrom_read) */
2113 #define VKI_CDROM_CLEAR_OPTIONS     0x5321  /* Clear behavior options */
2114 #define VKI_CDROM_DRIVE_STATUS      0x5326  /* Get tray position, etc. */
2115 #define VKI_CDROM_DISC_STATUS       0x5327  /* get CD type information */
2116 #define VKI_CDROM_GET_CAPABILITY    0x5331  /* get capabilities */
2117 
2118 #define VKI_DVD_READ_STRUCT     0x5390  /* read structure */
2119 #define VKI_CDROM_SEND_PACKET       0x5393  /* send a packet to the drive */
2120 
2121 struct vki_cdrom_msf0       
2122 {
2123     __vki_u8    minute;
2124     __vki_u8    second;
2125     __vki_u8    frame;
2126 };
2127 
2128 union vki_cdrom_addr        
2129 {
2130     struct vki_cdrom_msf0   msf;
2131     int         lba;
2132 };
2133 
2134 struct vki_cdrom_msf 
2135 {
2136     __vki_u8    cdmsf_min0; /* start minute */
2137     __vki_u8    cdmsf_sec0; /* start second */
2138     __vki_u8    cdmsf_frame0;   /* start frame */
2139     __vki_u8    cdmsf_min1; /* end minute */
2140     __vki_u8    cdmsf_sec1; /* end second */
2141     __vki_u8    cdmsf_frame1;   /* end frame */
2142 };
2143 
2144 struct vki_cdrom_tochdr     
2145 {
2146     __vki_u8    cdth_trk0;  /* start track */
2147     __vki_u8    cdth_trk1;  /* end track */
2148 };
2149 
2150 struct vki_cdrom_volctrl
2151 {
2152     __vki_u8    channel0;
2153     __vki_u8    channel1;
2154     __vki_u8    channel2;
2155     __vki_u8    channel3;
2156 };
2157 
2158 struct vki_cdrom_subchnl 
2159 {
2160     __vki_u8    cdsc_format;
2161     __vki_u8    cdsc_audiostatus;
2162     __vki_u8    cdsc_adr:   4;
2163     __vki_u8    cdsc_ctrl:  4;
2164     __vki_u8    cdsc_trk;
2165     __vki_u8    cdsc_ind;
2166     union vki_cdrom_addr cdsc_absaddr;
2167     union vki_cdrom_addr cdsc_reladdr;
2168 };
2169 
2170 struct vki_cdrom_tocentry 
2171 {
2172     __vki_u8    cdte_track;
2173     __vki_u8    cdte_adr    :4;
2174     __vki_u8    cdte_ctrl   :4;
2175     __vki_u8    cdte_format;
2176     union vki_cdrom_addr cdte_addr;
2177     __vki_u8    cdte_datamode;
2178 };
2179 
2180 struct vki_cdrom_read      
2181 {
2182     int cdread_lba;
2183     char    *cdread_bufaddr;
2184     int cdread_buflen;
2185 };
2186 
2187 struct vki_cdrom_read_audio
2188 {
2189     union vki_cdrom_addr addr; /* frame address */
2190     __vki_u8 addr_format;      /* CDROM_LBA or CDROM_MSF */
2191     int nframes;           /* number of 2352-byte-frames to read at once */
2192     __vki_u8 __user *buf;      /* frame buffer (size: nframes*2352 bytes) */
2193 };
2194 
2195 struct vki_cdrom_multisession
2196 {
2197     union vki_cdrom_addr addr; /* frame address: start-of-last-session 
2198                                (not the new "frame 16"!).  Only valid
2199                                if the "xa_flag" is true. */
2200     __vki_u8 xa_flag;        /* 1: "is XA disk" */
2201     __vki_u8 addr_format;    /* CDROM_LBA or CDROM_MSF */
2202 };
2203 
2204 struct vki_cdrom_mcn 
2205 {
2206   __vki_u8 medium_catalog_number[14]; /* 13 ASCII digits, null-terminated */
2207 };
2208 
2209 #define VKI_CDROM_PACKET_SIZE   12
2210 
2211 struct vki_cdrom_generic_command
2212 {
2213     unsigned char       cmd[VKI_CDROM_PACKET_SIZE];
2214     unsigned char       __user *buffer;
2215     unsigned int        buflen;
2216     int         stat;
2217         // [[replace with void* to reduce inclusion amounts]]
2218     void/*struct vki_request_sense  */__user *sense;
2219     unsigned char       data_direction;
2220     int         quiet;
2221     int         timeout;
2222     void            __user *reserved[1];    /* unused, actually */
2223 };
2224 
2225 #define VKI_CD_SYNC_SIZE         12 /* 12 sync bytes per raw data frame */
2226 #define VKI_CD_HEAD_SIZE          4 /* header (address) bytes per raw data frame */
2227 #define VKI_CD_FRAMESIZE_RAW   2352 /* bytes per frame, "raw" mode */
2228 #define VKI_CD_FRAMESIZE_RAW0 (VKI_CD_FRAMESIZE_RAW-VKI_CD_SYNC_SIZE-VKI_CD_HEAD_SIZE) /*2336*/
2229 #define VKI_CD_FRAMESIZE_RAW1  2048 /* bytes per frame, mode 1*/
2230 
2231 //----------------------------------------------------------------------
2232 // From linux-2.6.8.1/include/linux/soundcard.h
2233 //----------------------------------------------------------------------
2234 
2235 #ifndef _VKI_SIOWR
2236 #if defined(_VKI_IOWR) && (defined(_AIX) || (!defined(sun) && !defined(sparc) && !defined(__sparc__) && !defined(__INCioctlh) && !defined(__Lynx__)))
2237 /* Use already defined ioctl defines if they exist (except with Sun or Sparc) */
2238 #define _VKI_SIO        _VKI_IO
2239 #define _VKI_SIOR       _VKI_IOR
2240 #define _VKI_SIOW       _VKI_IOW
2241 #define _VKI_SIOWR      _VKI_IOWR
2242 #else
2243 // [[Valgrind: Install this case if/when necessary]
2244 #error Valgrind: Cannot handle sparc/sun case yet...
2245 #  endif /* _IOWR */
2246 #endif  /* !_VKI_SIOWR */
2247 
2248 #define VKI_SNDCTL_SEQ_CTRLRATE     _VKI_SIOWR('Q', 3, int) /* Set/get timer resolution (HZ) */
2249 #define VKI_SNDCTL_SEQ_GETOUTCOUNT  _VKI_SIOR ('Q', 4, int)
2250 #define VKI_SNDCTL_SEQ_GETINCOUNT   _VKI_SIOR ('Q', 5, int)
2251 #define VKI_SNDCTL_SEQ_PERCMODE     _VKI_SIOW ('Q', 6, int)
2252 #define VKI_SNDCTL_SEQ_TESTMIDI     _VKI_SIOW ('Q', 8, int)
2253 #define VKI_SNDCTL_SEQ_RESETSAMPLES _VKI_SIOW ('Q', 9, int)
2254 #define VKI_SNDCTL_SEQ_NRSYNTHS     _VKI_SIOR ('Q',10, int)
2255 #define VKI_SNDCTL_SEQ_NRMIDIS      _VKI_SIOR ('Q',11, int)
2256 #define VKI_SNDCTL_SEQ_GETTIME      _VKI_SIOR ('Q',19, int)
2257 
2258 #define VKI_SNDCTL_TMR_TIMEBASE     _VKI_SIOWR('T', 1, int)
2259 #define VKI_SNDCTL_TMR_TEMPO        _VKI_SIOWR('T', 5, int)
2260 #define VKI_SNDCTL_TMR_SOURCE       _VKI_SIOWR('T', 6, int)
2261 
2262 #define VKI_SNDCTL_MIDI_PRETIME     _VKI_SIOWR('m', 0, int)
2263 #define VKI_SNDCTL_MIDI_MPUMODE     _VKI_SIOWR('m', 1, int)
2264 
2265 #define VKI_SNDCTL_DSP_RESET        _VKI_SIO  ('P', 0)
2266 #define VKI_SNDCTL_DSP_SYNC     _VKI_SIO  ('P', 1)
2267 #define VKI_SNDCTL_DSP_SPEED        _VKI_SIOWR('P', 2, int)
2268 #define VKI_SNDCTL_DSP_STEREO       _VKI_SIOWR('P', 3, int)
2269 #define VKI_SNDCTL_DSP_GETBLKSIZE   _VKI_SIOWR('P', 4, int)
2270 #define VKI_SNDCTL_DSP_CHANNELS     _VKI_SIOWR('P', 6, int)
2271 #define VKI_SOUND_PCM_WRITE_FILTER  _VKI_SIOWR('P', 7, int)
2272 #define VKI_SNDCTL_DSP_POST     _VKI_SIO  ('P', 8)
2273 #define VKI_SNDCTL_DSP_SUBDIVIDE    _VKI_SIOWR('P', 9, int)
2274 #define VKI_SNDCTL_DSP_SETFRAGMENT  _VKI_SIOWR('P',10, int)
2275 
2276 #define VKI_SNDCTL_DSP_GETFMTS      _VKI_SIOR ('P',11, int) /* Returns a mask */
2277 #define VKI_SNDCTL_DSP_SETFMT       _VKI_SIOWR('P', 5, int) /* Selects ONE fmt */
2278 
2279 typedef struct vki_audio_buf_info {
2280             int fragments;  /* # of available fragments (partially usend ones not counted) */
2281             int fragstotal; /* Total # of fragments allocated */
2282             int fragsize;   /* Size of a fragment in bytes */
2283 
2284             int bytes;  /* Available space in bytes (includes partially used fragments) */
2285             /* Note! 'bytes' could be more than fragments*fragsize */
2286         } vki_audio_buf_info;
2287 
2288 #define VKI_SNDCTL_DSP_GETOSPACE    _VKI_SIOR ('P',12, vki_audio_buf_info)
2289 #define VKI_SNDCTL_DSP_GETISPACE    _VKI_SIOR ('P',13, vki_audio_buf_info)
2290 #define VKI_SNDCTL_DSP_NONBLOCK     _VKI_SIO  ('P',14)
2291 #define VKI_SNDCTL_DSP_GETCAPS      _VKI_SIOR ('P',15, int)
2292 
2293 #define VKI_SNDCTL_DSP_GETTRIGGER   _VKI_SIOR ('P',16, int)
2294 #define VKI_SNDCTL_DSP_SETTRIGGER   _VKI_SIOW ('P',16, int)
2295 
2296 #define VKI_SNDCTL_DSP_SETSYNCRO    _VKI_SIO  ('P', 21)
2297 #define VKI_SNDCTL_DSP_SETDUPLEX    _VKI_SIO  ('P', 22)
2298 #define VKI_SNDCTL_DSP_GETODELAY    _VKI_SIOR ('P', 23, int)
2299 
2300 #define VKI_SNDCTL_DSP_GETCHANNELMASK   _VKI_SIOWR('P', 64, int)
2301 #define VKI_SNDCTL_DSP_BIND_CHANNEL _VKI_SIOWR('P', 65, int)
2302 
2303 #define VKI_SNDCTL_DSP_SETSPDIF     _VKI_SIOW ('P', 66, int)
2304 #define VKI_SNDCTL_DSP_GETSPDIF     _VKI_SIOR ('P', 67, int)
2305 
2306 #define VKI_SOUND_PCM_READ_RATE     _VKI_SIOR ('P', 2, int)
2307 #define VKI_SOUND_PCM_READ_CHANNELS _VKI_SIOR ('P', 6, int)
2308 #define VKI_SOUND_PCM_READ_BITS     _VKI_SIOR ('P', 5, int)
2309 #define VKI_SOUND_PCM_READ_FILTER   _VKI_SIOR ('P', 7, int)
2310 
2311 
2312 //----------------------------------------------------------------------
2313 // From linux-2.6.8.1/include/linux/hdreg.h
2314 //----------------------------------------------------------------------
2315 
2316 struct vki_hd_geometry {
2317       unsigned char heads;
2318       unsigned char sectors;
2319       unsigned short cylinders;
2320       unsigned long start;
2321 };
2322 
2323 #define VKI_HDIO_GETGEO     0x0301  /* get device geometry */
2324 #define VKI_HDIO_GET_DMA    0x030b  /* get use-dma flag */
2325 #define VKI_HDIO_GET_IDENTITY   0x030d  /* get IDE identification info */
2326 
2327 // [[Nb: done like this because the original type is a huge struct that will
2328 //   always be the same size.]]
2329 #define VKI_SIZEOF_STRUCT_HD_DRIVEID   512
2330 
2331 //----------------------------------------------------------------------
2332 // From linux-2.6.8.1/include/linux/fb.h
2333 //----------------------------------------------------------------------
2334 
2335 #define VKI_FBIOGET_VSCREENINFO 0x4600
2336 #define VKI_FBIOPUT_VSCREENINFO 0x4601
2337 #define VKI_FBIOGET_FSCREENINFO 0x4602
2338 #define VKI_FBIOPAN_DISPLAY 0x4606
2339 
2340 struct vki_fb_fix_screeninfo {
2341     char id[16];            /* identification string eg "TT Builtin" */
2342     unsigned long smem_start;   /* Start of frame buffer mem */
2343                     /* (physical address) */
2344     __vki_u32 smem_len;         /* Length of frame buffer mem */
2345     __vki_u32 type;         /* see FB_TYPE_*        */
2346     __vki_u32 type_aux;     /* Interleave for interleaved Planes */
2347     __vki_u32 visual;       /* see FB_VISUAL_*      */ 
2348     __vki_u16 xpanstep;     /* zero if no hardware panning  */
2349     __vki_u16 ypanstep;     /* zero if no hardware panning  */
2350     __vki_u16 ywrapstep;        /* zero if no hardware ywrap    */
2351     __vki_u32 line_length;      /* length of a line in bytes    */
2352     unsigned long mmio_start;   /* Start of Memory Mapped I/O   */
2353                     /* (physical address) */
2354     __vki_u32 mmio_len;     /* Length of Memory Mapped I/O  */
2355     __vki_u32 accel;        /* Indicate to driver which */
2356                     /*  specific chip/card we have  */
2357     __vki_u16 reserved[3];      /* Reserved for future compatibility */
2358 };
2359 
2360 struct vki_fb_bitfield {
2361     __vki_u32 offset;       /* beginning of bitfield    */
2362     __vki_u32 length;       /* length of bitfield       */
2363     __vki_u32 msb_right;        /* != 0 : Most significant bit is */ 
2364                     /* right */ 
2365 };
2366 
2367 struct vki_fb_var_screeninfo {
2368     __vki_u32 xres;         /* visible resolution       */
2369     __vki_u32 yres;
2370     __vki_u32 xres_virtual;     /* virtual resolution       */
2371     __vki_u32 yres_virtual;
2372     __vki_u32 xoffset;      /* offset from virtual to visible */
2373     __vki_u32 yoffset;      /* resolution           */
2374 
2375     __vki_u32 bits_per_pixel;   /* guess what           */
2376     __vki_u32 grayscale;        /* != 0 Graylevels instead of colors */
2377 
2378     struct vki_fb_bitfield red; /* bitfield in fb mem if true color, */
2379     struct vki_fb_bitfield green;   /* else only length is significant */
2380     struct vki_fb_bitfield blue;
2381     struct vki_fb_bitfield transp;  /* transparency         */  
2382 
2383     __vki_u32 nonstd;       /* != 0 Non standard pixel format */
2384 
2385     __vki_u32 activate;     /* see FB_ACTIVATE_*        */
2386 
2387     __vki_u32 height;       /* height of picture in mm    */
2388     __vki_u32 width;        /* width of picture in mm     */
2389 
2390     __vki_u32 accel_flags;      /* (OBSOLETE) see fb_info.flags */
2391 
2392     /* Timing: All values in pixclocks, except pixclock (of course) */
2393     __vki_u32 pixclock;     /* pixel clock in ps (pico seconds) */
2394     __vki_u32 left_margin;      /* time from sync to picture    */
2395     __vki_u32 right_margin;     /* time from picture to sync    */
2396     __vki_u32 upper_margin;     /* time from sync to picture    */
2397     __vki_u32 lower_margin;
2398     __vki_u32 hsync_len;        /* length of horizontal sync    */
2399     __vki_u32 vsync_len;        /* length of vertical sync  */
2400     __vki_u32 sync;         /* see FB_SYNC_*        */
2401     __vki_u32 vmode;        /* see FB_VMODE_*       */
2402     __vki_u32 rotate;       /* angle we rotate counter clockwise */
2403     __vki_u32 reserved[5];      /* Reserved for future compatibility */
2404 };
2405 
2406 //----------------------------------------------------------------------
2407 // From linux-2.6.9/include/linux/kd.h
2408 //----------------------------------------------------------------------
2409 
2410 #define VKI_GIO_FONT       0x4B60  /* gets font in expanded form */
2411 #define VKI_PIO_FONT       0x4B61  /* use font in expanded form */
2412 
2413 #define VKI_GIO_FONTX      0x4B6B  /* get font using struct consolefontdesc */
2414 #define VKI_PIO_FONTX      0x4B6C  /* set font using struct consolefontdesc */
2415 struct vki_consolefontdesc {
2416     unsigned short charcount;   /* characters in font (256 or 512) */
2417     unsigned short charheight;  /* scan lines per character (1-32) */
2418     char __user *chardata;      /* font data in expanded form */
2419 };
2420 
2421 #define VKI_PIO_FONTRESET  0x4B6D  /* reset to default font */
2422 
2423 #define VKI_GIO_CMAP       0x4B70  /* gets colour palette on VGA+ */
2424 #define VKI_PIO_CMAP       0x4B71  /* sets colour palette on VGA+ */
2425 
2426 #define VKI_KIOCSOUND      0x4B2F  /* start sound generation (0 for off) */
2427 #define VKI_KDMKTONE       0x4B30  /* generate tone */
2428 
2429 #define VKI_KDGETLED       0x4B31  /* return current led state */
2430 #define VKI_KDSETLED       0x4B32  /* set led state [lights, not flags] */
2431 
2432 #define VKI_KDGKBTYPE      0x4B33  /* get keyboard type */
2433 
2434 #define VKI_KDADDIO        0x4B34  /* add i/o port as valid */
2435 #define VKI_KDDELIO        0x4B35  /* del i/o port as valid */
2436 #define VKI_KDENABIO       0x4B36  /* enable i/o to video board */
2437 #define VKI_KDDISABIO      0x4B37  /* disable i/o to video board */
2438 
2439 #define VKI_KDSETMODE      0x4B3A  /* set text/graphics mode */
2440 #define VKI_KDGETMODE      0x4B3B  /* get current mode */
2441 
2442 #define VKI_KDMAPDISP      0x4B3C  /* map display into address space */
2443 #define VKI_KDUNMAPDISP    0x4B3D  /* unmap display from address space */
2444 
2445 #define     VKI_E_TABSZ     256
2446 #define VKI_GIO_SCRNMAP    0x4B40  /* get screen mapping from kernel */
2447 #define VKI_PIO_SCRNMAP    0x4B41  /* put screen mapping table in kernel */
2448 #define VKI_GIO_UNISCRNMAP 0x4B69  /* get full Unicode screen mapping */
2449 #define VKI_PIO_UNISCRNMAP 0x4B6A  /* set full Unicode screen mapping */
2450 
2451 #define VKI_GIO_UNIMAP     0x4B66  /* get unicode-to-font mapping from kernel */
2452 struct vki_unipair {
2453     unsigned short unicode;
2454     unsigned short fontpos;
2455 };
2456 struct vki_unimapdesc {
2457     unsigned short entry_ct;
2458     struct vki_unipair __user *entries;
2459 };
2460 #define VKI_PIO_UNIMAP     0x4B67  /* put unicode-to-font mapping in kernel */
2461 #define VKI_PIO_UNIMAPCLR  0x4B68  /* clear table, possibly advise hash algorithm */
2462 struct vki_unimapinit {
2463     unsigned short advised_hashsize;  /* 0 if no opinion */
2464     unsigned short advised_hashstep;  /* 0 if no opinion */
2465     unsigned short advised_hashlevel; /* 0 if no opinion */
2466 };
2467 
2468 #define VKI_KDGKBMODE      0x4B44  /* gets current keyboard mode */
2469 #define VKI_KDSKBMODE      0x4B45  /* sets current keyboard mode */
2470 
2471 #define VKI_KDGKBMETA      0x4B62  /* gets meta key handling mode */
2472 #define VKI_KDSKBMETA      0x4B63  /* sets meta key handling mode */
2473 
2474 #define VKI_KDGKBLED       0x4B64  /* get led flags (not lights) */
2475 #define VKI_KDSKBLED       0x4B65  /* set led flags (not lights) */
2476 
2477 struct vki_kbentry {
2478     unsigned char kb_table;
2479     unsigned char kb_index;
2480     unsigned short kb_value;
2481 };
2482 #define VKI_KDGKBENT       0x4B46  /* gets one entry in translation table */
2483 #define VKI_KDSKBENT       0x4B47  /* sets one entry in translation table */
2484 
2485 struct vki_kbsentry {
2486     unsigned char kb_func;
2487     unsigned char kb_string[512];
2488 };
2489 #define VKI_KDGKBSENT      0x4B48  /* gets one function key string entry */
2490 #define VKI_KDSKBSENT      0x4B49  /* sets one function key string entry */
2491 
2492 struct vki_kbdiacr {
2493         unsigned char diacr, base, result;
2494 };
2495 struct vki_kbdiacrs {
2496         unsigned int kb_cnt;    /* number of entries in following array */
2497     struct vki_kbdiacr kbdiacr[256];    /* MAX_DIACR from keyboard.h */
2498 };
2499 #define VKI_KDGKBDIACR     0x4B4A  /* read kernel accent table */
2500 #define VKI_KDSKBDIACR     0x4B4B  /* write kernel accent table */
2501 
2502 struct vki_kbkeycode {
2503     unsigned int scancode, keycode;
2504 };
2505 #define VKI_KDGETKEYCODE   0x4B4C  /* read kernel keycode table entry */
2506 #define VKI_KDSETKEYCODE   0x4B4D  /* write kernel keycode table entry */
2507 
2508 #define VKI_KDSIGACCEPT    0x4B4E  /* accept kbd generated signals */
2509 
2510 struct vki_kbd_repeat {
2511     int delay;  /* in msec; <= 0: don't change */
2512     int period; /* in msec; <= 0: don't change */
2513             /* earlier this field was misnamed "rate" */
2514 };
2515 #define VKI_KDKBDREP       0x4B52  /* set keyboard delay/repeat rate;
2516                                     * actually used values are returned */
2517 
2518 #define VKI_KDFONTOP       0x4B72  /* font operations */
2519 
2520 struct vki_console_font_op {
2521     unsigned int op;    /* operation code KD_FONT_OP_* */
2522     unsigned int flags; /* KD_FONT_FLAG_* */
2523     unsigned int width, height; /* font size */
2524     unsigned int charcount;
2525     unsigned char __user *data; /* font data with height fixed to 32 */
2526 };
2527 
2528 #define VKI_KD_FONT_OP_SET      0   /* Set font */
2529 #define VKI_KD_FONT_OP_GET      1   /* Get font */
2530 #define VKI_KD_FONT_OP_SET_DEFAULT  2   /* Set font to default, data points to name / NULL */
2531 #define VKI_KD_FONT_OP_COPY     3   /* Copy from another console */
2532 
2533 //----------------------------------------------------------------------
2534 // From linux-2.6.9/include/linux/kb.h
2535 //----------------------------------------------------------------------
2536 
2537 typedef __vki_kernel_uid32_t vki_qid_t; /* Type in which we store ids in memory */
2538 
2539 //----------------------------------------------------------------------
2540 // From linux-2.6.20.1/include/linux/ptrace.h
2541 //----------------------------------------------------------------------
2542 
2543 #define VKI_PTRACE_TRACEME         0
2544 #define VKI_PTRACE_PEEKTEXT    1
2545 #define VKI_PTRACE_PEEKDATA    2
2546 #define VKI_PTRACE_PEEKUSR     3
2547 #define VKI_PTRACE_POKEUSR     6
2548 
2549 #define VKI_PTRACE_DETACH         17
2550 
2551 #define VKI_PTRACE_GETEVENTMSG  0x4201
2552 #define VKI_PTRACE_GETSIGINFO   0x4202
2553 #define VKI_PTRACE_SETSIGINFO   0x4203
2554 #define VKI_PTRACE_GETREGSET    0x4204
2555 #define VKI_PTRACE_SETREGSET    0x4205
2556 
2557 #define VKI_PT_PTRACED 0x00000001
2558 
2559 //----------------------------------------------------------------------
2560 // From linux-2.6.14/include/sound/asound.h
2561 //----------------------------------------------------------------------
2562 
2563 enum {
2564     VKI_SNDRV_PCM_IOCTL_HW_FREE = _VKI_IO('A', 0x12),
2565     VKI_SNDRV_PCM_IOCTL_HWSYNC = _VKI_IO('A', 0x22),
2566     VKI_SNDRV_PCM_IOCTL_PREPARE = _VKI_IO('A', 0x40),
2567     VKI_SNDRV_PCM_IOCTL_RESET = _VKI_IO('A', 0x41),
2568     VKI_SNDRV_PCM_IOCTL_START = _VKI_IO('A', 0x42),
2569     VKI_SNDRV_PCM_IOCTL_DROP = _VKI_IO('A', 0x43),
2570     VKI_SNDRV_PCM_IOCTL_DRAIN = _VKI_IO('A', 0x44),
2571     VKI_SNDRV_PCM_IOCTL_PAUSE = _VKI_IOW('A', 0x45, int),
2572     VKI_SNDRV_PCM_IOCTL_RESUME = _VKI_IO('A', 0x47),
2573     VKI_SNDRV_PCM_IOCTL_XRUN = _VKI_IO('A', 0x48),
2574     VKI_SNDRV_PCM_IOCTL_LINK = _VKI_IOW('A', 0x60, int),
2575     VKI_SNDRV_PCM_IOCTL_UNLINK = _VKI_IO('A', 0x61),
2576 };
2577 
2578 enum {
2579     VKI_SNDRV_TIMER_IOCTL_START = _VKI_IO('T', 0xa0),
2580     VKI_SNDRV_TIMER_IOCTL_STOP = _VKI_IO('T', 0xa1),
2581     VKI_SNDRV_TIMER_IOCTL_CONTINUE = _VKI_IO('T', 0xa2),
2582     VKI_SNDRV_TIMER_IOCTL_PAUSE = _VKI_IO('T', 0xa3),
2583 };
2584 
2585 struct vki_snd_ctl_card_info {
2586     int card;           /* card number */
2587     int pad;            /* reserved for future (was type) */
2588     unsigned char id[16];       /* ID of card (user selectable) */
2589     unsigned char driver[16];   /* Driver name */
2590     unsigned char name[32];     /* Short name of soundcard */
2591     unsigned char longname[80]; /* name + info text about soundcard */
2592     unsigned char reserved_[16];    /* reserved for future (was ID of mixer) */
2593     unsigned char mixername[80];    /* visual mixer identification */
2594     unsigned char components[128];  /* card components / fine identification, delimited with one space (AC97 etc..) */
2595 };
2596 
2597 typedef int vki_snd_ctl_elem_iface_t;
2598 #define VKI_SNDRV_CTL_ELEM_IFACE_CARD       ((vki_snd_ctl_elem_iface_t) 0) /* global control */
2599 #define VKI_SNDRV_CTL_ELEM_IFACE_HWDEP      ((vki_snd_ctl_elem_iface_t) 1) /* hardware dependent device */
2600 #define VKI_SNDRV_CTL_ELEM_IFACE_MIXER      ((vki_snd_ctl_elem_iface_t) 2) /* virtual mixer device */
2601 #define VKI_SNDRV_CTL_ELEM_IFACE_PCM        ((vki_snd_ctl_elem_iface_t) 3) /* PCM device */
2602 #define VKI_SNDRV_CTL_ELEM_IFACE_RAWMIDI    ((vki_snd_ctl_elem_iface_t) 4) /* RawMidi device */
2603 #define VKI_SNDRV_CTL_ELEM_IFACE_TIMER      ((vki_snd_ctl_elem_iface_t) 5) /* timer device */
2604 #define VKI_SNDRV_CTL_ELEM_IFACE_SEQUENCER  ((vki_snd_ctl_elem_iface_t) 6) /* sequencer client */
2605 #define VKI_SNDRV_CTL_ELEM_IFACE_LAST       VKI_SNDRV_CTL_ELEM_IFACE_SEQUENCER
2606 
2607 struct vki_snd_ctl_elem_id {
2608     unsigned int numid;     /* numeric identifier, zero = invalid */
2609     vki_snd_ctl_elem_iface_t iface; /* interface identifier */
2610     unsigned int device;        /* device/client number */
2611     unsigned int subdevice;     /* subdevice (substream) number */
2612     unsigned char name[44];     /* ASCII name of item */
2613     unsigned int index;     /* index of item */
2614 };
2615 
2616 struct vki_snd_ctl_elem_list {
2617     unsigned int offset;        /* W: first element ID to get */
2618     unsigned int space;     /* W: count of element IDs to get */
2619     unsigned int used;      /* R: count of element IDs set */
2620     unsigned int count;     /* R: count of all elements */
2621     struct vki_snd_ctl_elem_id __user *pids; /* R: IDs */
2622     unsigned char reserved[50];
2623 };
2624 
2625 struct vki_snd_ctl_tlv {
2626     unsigned int numid; /* control element numeric identification */
2627     unsigned int length;    /* in bytes aligned to 4 */
2628     unsigned int tlv[0];    /* first TLV */
2629 };
2630 
2631 #define VKI_SNDRV_CTL_IOCTL_PVERSION    _VKI_IOR('U', 0x00, int)
2632 #define VKI_SNDRV_CTL_IOCTL_CARD_INFO   _VKI_IOR('U', 0x01, struct vki_snd_ctl_card_info)
2633 #define VKI_SNDRV_CTL_IOCTL_ELEM_LIST   _VKI_IOWR('U', 0x10, struct vki_snd_ctl_elem_list)
2634 #define VKI_SNDRV_CTL_IOCTL_TLV_READ    _VKI_IOWR('U', 0x1a, struct vki_snd_ctl_tlv)
2635 #define VKI_SNDRV_CTL_IOCTL_TLV_WRITE   _VKI_IOWR('U', 0x1b, struct vki_snd_ctl_tlv)
2636 #define VKI_SNDRV_CTL_IOCTL_TLV_COMMAND _VKI_IOWR('U', 0x1c, struct vki_snd_ctl_tlv)
2637 
2638 //----------------------------------------------------------------------
2639 // From linux-2.6.15.4/include/linux/serial.h
2640 //----------------------------------------------------------------------
2641 
2642 struct vki_serial_icounter_struct {
2643     int cts, dsr, rng, dcd;
2644     int rx, tx;
2645     int frame, overrun, parity, brk;
2646     int buf_overrun;
2647     int reserved[9];
2648 };
2649 
2650 //----------------------------------------------------------------------
2651 // From linux-2.6.16/include/linux/vt.h
2652 //----------------------------------------------------------------------
2653 
2654 #define VKI_VT_OPENQRY  0x5600  /* find available vt */
2655 
2656 struct vki_vt_mode {
2657     char mode;      /* vt mode */
2658     char waitv;     /* if set, hang on writes if not active */
2659     short relsig;       /* signal to raise on release req */
2660     short acqsig;       /* signal to raise on acquisition */
2661     short frsig;        /* unused (set to 0) */
2662 };
2663 #define VKI_VT_GETMODE  0x5601  /* get mode of active vt */
2664 #define VKI_VT_SETMODE  0x5602  /* set mode of active vt */
2665 
2666 struct vki_vt_stat {
2667     unsigned short v_active;    /* active vt */
2668     unsigned short v_signal;    /* signal to send */
2669     unsigned short v_state;     /* vt bitmask */
2670 };
2671 #define VKI_VT_GETSTATE 0x5603  /* get global vt state info */
2672 #define VKI_VT_SENDSIG  0x5604  /* signal to send to bitmask of vts */
2673 
2674 #define VKI_VT_RELDISP  0x5605  /* release display */
2675 
2676 #define VKI_VT_ACTIVATE 0x5606  /* make vt active */
2677 #define VKI_VT_WAITACTIVE   0x5607  /* wait for vt active */
2678 #define VKI_VT_DISALLOCATE  0x5608  /* free memory associated to vt */
2679 
2680 struct vki_vt_sizes {
2681     unsigned short v_rows;      /* number of rows */
2682     unsigned short v_cols;      /* number of columns */
2683     unsigned short v_scrollsize;    /* number of lines of scrollback */
2684 };
2685 #define VKI_VT_RESIZE   0x5609  /* set kernel's idea of screensize */
2686 
2687 struct vki_vt_consize {
2688     unsigned short v_rows;  /* number of rows */
2689     unsigned short v_cols;  /* number of columns */
2690     unsigned short v_vlin;  /* number of pixel rows on screen */
2691     unsigned short v_clin;  /* number of pixel rows per character */
2692     unsigned short v_vcol;  /* number of pixel columns on screen */
2693     unsigned short v_ccol;  /* number of pixel columns per character */
2694 };
2695 #define VKI_VT_RESIZEX      0x560A  /* set kernel's idea of screensize + more */
2696 #define VKI_VT_LOCKSWITCH   0x560B  /* disallow vt switching */
2697 #define VKI_VT_UNLOCKSWITCH 0x560C  /* allow vt switching */
2698 
2699 //----------------------------------------------------------------------
2700 // From linux-2.6.19/include/linux/prctl.h
2701 //----------------------------------------------------------------------
2702 
2703 #define VKI_PR_SET_PDEATHSIG  1  /* Second arg is a signal */
2704 #define VKI_PR_GET_PDEATHSIG  2  /* Second arg is a ptr to return the signal */
2705 
2706 #define VKI_PR_GET_DUMPABLE   3
2707 #define VKI_PR_SET_DUMPABLE   4
2708 
2709 #define VKI_PR_GET_UNALIGN    5
2710 #define VKI_PR_SET_UNALIGN    6
2711 # define VKI_PR_UNALIGN_NOPRINT 1   /* silently fix up unaligned user accesses */
2712 # define VKI_PR_UNALIGN_SIGBUS  2   /* generate SIGBUS on unaligned user access */
2713 
2714 #define VKI_PR_GET_KEEPCAPS   7
2715 #define VKI_PR_SET_KEEPCAPS   8
2716 
2717 #define VKI_PR_GET_FPEMU  9
2718 #define VKI_PR_SET_FPEMU 10
2719 # define VKI_PR_FPEMU_NOPRINT   1   /* silently emulate fp operations accesses */
2720 # define VKI_PR_FPEMU_SIGFPE    2   /* don't emulate fp operations, send SIGFPE instead */
2721 
2722 #define VKI_PR_GET_FPEXC    11
2723 #define VKI_PR_SET_FPEXC    12
2724 # define VKI_PR_FP_EXC_SW_ENABLE    0x80    /* Use FPEXC for FP exception enables */
2725 # define VKI_PR_FP_EXC_DIV      0x010000    /* floating point divide by zero */
2726 # define VKI_PR_FP_EXC_OVF      0x020000    /* floating point overflow */
2727 # define VKI_PR_FP_EXC_UND      0x040000    /* floating point underflow */
2728 # define VKI_PR_FP_EXC_RES      0x080000    /* floating point inexact result */
2729 # define VKI_PR_FP_EXC_INV      0x100000    /* floating point invalid operation */
2730 # define VKI_PR_FP_EXC_DISABLED 0   /* FP exceptions disabled */
2731 # define VKI_PR_FP_EXC_NONRECOV 1   /* async non-recoverable exc. mode */
2732 # define VKI_PR_FP_EXC_ASYNC    2   /* async recoverable exception mode */
2733 # define VKI_PR_FP_EXC_PRECISE  3   /* precise exception mode */
2734 
2735 #define VKI_PR_GET_TIMING   13
2736 #define VKI_PR_SET_TIMING   14
2737 # define VKI_PR_TIMING_STATISTICAL  0       /* Normal, traditional,
2738                                                    statistical process timing */
2739 # define VKI_PR_TIMING_TIMESTAMP    1       /* Accurate timestamp based
2740                                                    process timing */
2741 
2742 #define VKI_PR_SET_NAME    15       /* Set process name */
2743 #define VKI_PR_GET_NAME    16       /* Get process name */
2744 
2745 #define VKI_PR_GET_ENDIAN   19
2746 #define VKI_PR_SET_ENDIAN   20
2747 # define VKI_PR_ENDIAN_BIG      0
2748 # define VKI_PR_ENDIAN_LITTLE   1   /* True little endian mode */
2749 # define VKI_PR_ENDIAN_PPC_LITTLE   2   /* "PowerPC" pseudo little endian */
2750 
2751 #define VKI_PR_SET_SECCOMP 22
2752 
2753 #define VKI_PR_CAPBSET_READ 23
2754 #define VKI_PR_CAPBSET_DROP 24
2755 
2756 #define VKI_PR_GET_TSC 25
2757 #define VKI_PR_SET_TSC 26
2758 
2759 #define VKI_PR_GET_SECUREBITS 27
2760 #define VKI_PR_SET_SECUREBITS 28
2761 
2762 #define VKI_PR_SET_TIMERSLACK 29
2763 #define VKI_PR_GET_TIMERSLACK 30
2764 
2765 #define VKI_PR_TASK_PERF_EVENTS_DISABLE     31
2766 #define VKI_PR_TASK_PERF_EVENTS_ENABLE      32
2767 
2768 #define VKI_PR_MCE_KILL 33
2769 #define VKI_PR_MCE_KILL_GET 34
2770 
2771 #define VKI_PR_SET_PTRACER 0x59616d61
2772 
2773 #define VKI_PR_SET_CHILD_SUBREAPER  36
2774 #define VKI_PR_GET_CHILD_SUBREAPER  37
2775 
2776 #define VKI_PR_SET_NO_NEW_PRIVS 38
2777 #define VKI_PR_GET_NO_NEW_PRIVS 39
2778 
2779 #define VKI_PR_GET_TID_ADDRESS  40
2780 
2781 #define VKI_PR_SET_THP_DISABLE  41
2782 #define VKI_PR_GET_THP_DISABLE  42
2783 
2784 #define VKI_PR_MPX_ENABLE_MANAGEMENT  43
2785 #define VKI_PR_MPX_DISABLE_MANAGEMENT 44
2786 
2787 #define VKI_PR_SET_FP_MODE      45
2788 #define VKI_PR_GET_FP_MODE      46
2789 
2790 #define VKI_PR_CAP_AMBIENT      47
2791 
2792 #define VKI_PR_SVE_SET_VL       50
2793 #define VKI_PR_SVE_GET_VL       51
2794 #define VKI_PR_GET_SPECULATION_CTRL 52
2795 #define VKI_PR_SET_SPECULATION_CTRL 53
2796 #define VKI_PR_PAC_RESET_KEYS       54
2797 #define VKI_PR_SET_TAGGED_ADDR_CTRL 55
2798 #define VKI_PR_GET_TAGGED_ADDR_CTRL 56
2799 
2800 //----------------------------------------------------------------------
2801 // From linux-2.6.19/include/linux/usbdevice_fs.h
2802 //----------------------------------------------------------------------
2803 
2804 struct vki_usbdevfs_ctrltransfer {
2805     __vki_u8 bRequestType;
2806     __vki_u8 bRequest;
2807     __vki_u16 wValue;
2808     __vki_u16 wIndex;
2809     __vki_u16 wLength;
2810     __vki_u32 timeout;  /* in milliseconds */
2811     void __user *data;
2812 };
2813 
2814 struct vki_usbdevfs_bulktransfer {
2815     unsigned int ep;
2816     unsigned int len;
2817     unsigned int timeout; /* in milliseconds */
2818     void __user *data;
2819 };
2820 
2821 #define VKI_USBDEVFS_MAXDRIVERNAME 255
2822 
2823 struct vki_usbdevfs_getdriver {
2824     unsigned int interface;
2825     char driver[VKI_USBDEVFS_MAXDRIVERNAME + 1];
2826 };
2827 
2828 struct vki_usbdevfs_connectinfo {
2829     unsigned int devnum;
2830     unsigned char slow;
2831 };
2832 
2833 struct vki_usbdevfs_iso_packet_desc {
2834     unsigned int length;
2835     unsigned int actual_length;
2836     unsigned int status;
2837 };
2838 
2839 struct vki_usbdevfs_urb {
2840     unsigned char type;
2841     unsigned char endpoint;
2842     int status;
2843     unsigned int flags;
2844     void __user *buffer;
2845     int buffer_length;
2846     int actual_length;
2847     int start_frame;
2848     int number_of_packets;
2849     int error_count;
2850     unsigned int signr;  /* signal to be sent on error, -1 if none should be sent */
2851     void *usercontext;
2852     struct vki_usbdevfs_iso_packet_desc iso_frame_desc[0];
2853 };
2854 
2855 struct vki_usbdevfs_ioctl {
2856     int ifno;       /* interface 0..N ; negative numbers reserved */
2857     int ioctl_code; /* MUST encode size + direction of data so the
2858                  * macros in <asm/ioctl.h> give correct values */
2859     void __user *data;  /* param buffer (in, or out) */
2860 };
2861 
2862 #define VKI_USBDEVFS_CONTROL           _VKI_IOWR('U', 0, struct vki_usbdevfs_ctrltransfer)
2863 #define VKI_USBDEVFS_BULK              _VKI_IOWR('U', 2, struct vki_usbdevfs_bulktransfer)
2864 #define VKI_USBDEVFS_GETDRIVER         _VKI_IOW('U', 8, struct vki_usbdevfs_getdriver)
2865 #define VKI_USBDEVFS_SUBMITURB         _VKI_IOR('U', 10, struct vki_usbdevfs_urb)
2866 #define VKI_USBDEVFS_DISCARDURB        _VKI_IO('U', 11)
2867 #define VKI_USBDEVFS_REAPURB           _VKI_IOW('U', 12, void *)
2868 #define VKI_USBDEVFS_REAPURBNDELAY     _VKI_IOW('U', 13, void *)
2869 #define VKI_USBDEVFS_CONNECTINFO       _VKI_IOW('U', 17, struct vki_usbdevfs_connectinfo)
2870 #define VKI_USBDEVFS_IOCTL             _VKI_IOWR('U', 18, struct vki_usbdevfs_ioctl)
2871 #define VKI_USBDEVFS_RESET             _VKI_IO('U', 20)
2872 
2873 #define VKI_USBDEVFS_URB_TYPE_ISO              0
2874 #define VKI_USBDEVFS_URB_TYPE_INTERRUPT        1
2875 #define VKI_USBDEVFS_URB_TYPE_CONTROL          2
2876 #define VKI_USBDEVFS_URB_TYPE_BULK             3
2877 
2878 // [[this is missing in usbdevice_fs.h]]
2879 struct vki_usbdevfs_setuppacket {
2880        __vki_u8 bRequestType;
2881        __vki_u8 bRequest;
2882        __vki_u16 wValue;
2883        __vki_u16 wIndex;
2884        __vki_u16 wLength;
2885 };
2886 
2887 //----------------------------------------------------------------------
2888 // From linux-2.6.20.1/include/linux/i2c.h
2889 //----------------------------------------------------------------------
2890 
2891 #define VKI_I2C_SMBUS_QUICK             0
2892 #define VKI_I2C_SMBUS_BYTE              1
2893 #define VKI_I2C_SMBUS_BYTE_DATA         2
2894 #define VKI_I2C_SMBUS_WORD_DATA         3
2895 #define VKI_I2C_SMBUS_PROC_CALL         4
2896 #define VKI_I2C_SMBUS_BLOCK_DATA        5
2897 #define VKI_I2C_SMBUS_I2C_BLOCK_BROKEN  6
2898 #define VKI_I2C_SMBUS_BLOCK_PROC_CALL   7           /* SMBus 2.0 */
2899 #define VKI_I2C_SMBUS_I2C_BLOCK_DATA    8
2900 
2901 /* smbus_access read or write markers */
2902 #define VKI_I2C_SMBUS_READ  1
2903 #define VKI_I2C_SMBUS_WRITE 0
2904 
2905 #define VKI_I2C_SLAVE        0x0703  /* Change slave address                 */
2906                                      /* Attn.: Slave address is 7 or 10 bits */
2907 #define VKI_I2C_SLAVE_FORCE  0x0706  /* Change slave address                 */
2908                                      /* Attn.: Slave address is 7 or 10 bits */
2909                                      /* This changes the address, even if it */
2910                                      /* is already taken!                    */
2911 #define VKI_I2C_TENBIT       0x0704  /* 0 for 7 bit addrs, != 0 for 10 bit   */
2912 #define VKI_I2C_FUNCS        0x0705  /* Get the adapter functionality */
2913 #define VKI_I2C_RDWR         0x0707  /* Combined R/W transfer (one STOP only) */
2914 #define VKI_I2C_PEC          0x0708  /* != 0 for SMBus PEC                   */
2915 #define VKI_I2C_SMBUS        0x0720  /* SMBus transfer */
2916 
2917 #define VKI_I2C_SMBUS_BLOCK_MAX  32  /* As specified in SMBus standard */
2918 union vki_i2c_smbus_data {
2919         __vki_u8 byte;
2920         __vki_u16 word;
2921         __vki_u8 block[VKI_I2C_SMBUS_BLOCK_MAX + 2];
2922                  /* block[0] is used for length */
2923                  /* and one more for PEC */
2924 };
2925 
2926 /* This is the structure as used in the I2C_SMBUS ioctl call */
2927 struct vki_i2c_smbus_ioctl_data {
2928         __vki_u8 read_write;
2929         __vki_u8 command;
2930         __vki_u32 size;
2931         union vki_i2c_smbus_data __user *data;
2932 };
2933 
2934 struct vki_i2c_msg {
2935     __vki_u16 addr;     /* slave address            */
2936     __vki_u16 flags;
2937 #define VKI_I2C_M_TEN       0x0010  /* this is a ten bit chip address */
2938 #define VKI_I2C_M_RD        0x0001  /* read data, from slave to master */
2939 #define VKI_I2C_M_NOSTART   0x4000  /* if I2C_FUNC_PROTOCOL_MANGLING */
2940 #define VKI_I2C_M_REV_DIR_ADDR  0x2000  /* if I2C_FUNC_PROTOCOL_MANGLING */
2941 #define VKI_I2C_M_IGNORE_NAK    0x1000  /* if I2C_FUNC_PROTOCOL_MANGLING */
2942 #define VKI_I2C_M_NO_RD_ACK 0x0800  /* if I2C_FUNC_PROTOCOL_MANGLING */
2943 #define VKI_I2C_M_RECV_LEN  0x0400  /* length will be first received byte */
2944     __vki_u16 len;      /* msg length               */
2945     __vki_u8 *buf;      /* pointer to msg data          */
2946 };
2947 
2948 struct vki_i2c_rdwr_ioctl_data {
2949     struct vki_i2c_msg *msgs;   /* pointers to i2c_msgs */
2950     __vki_u32 nmsgs;        /* number of i2c_msgs */
2951 };
2952 
2953 //----------------------------------------------------------------------
2954 // From linux-2.6.20.1/include/linux/keyctl.h
2955 //----------------------------------------------------------------------
2956 
2957 /* keyctl commands */
2958 #define VKI_KEYCTL_GET_KEYRING_ID   0   /* ask for a keyring's ID */
2959 #define VKI_KEYCTL_JOIN_SESSION_KEYRING 1   /* join or start named session keyring */
2960 #define VKI_KEYCTL_UPDATE       2   /* update a key */
2961 #define VKI_KEYCTL_REVOKE       3   /* revoke a key */
2962 #define VKI_KEYCTL_CHOWN        4   /* set ownership of a key */
2963 #define VKI_KEYCTL_SETPERM      5   /* set perms on a key */
2964 #define VKI_KEYCTL_DESCRIBE     6   /* describe a key */
2965 #define VKI_KEYCTL_CLEAR        7   /* clear contents of a keyring */
2966 #define VKI_KEYCTL_LINK         8   /* link a key into a keyring */
2967 #define VKI_KEYCTL_UNLINK       9   /* unlink a key from a keyring */
2968 #define VKI_KEYCTL_SEARCH       10  /* search for a key in a keyring */
2969 #define VKI_KEYCTL_READ         11  /* read a key or keyring's contents */
2970 #define VKI_KEYCTL_INSTANTIATE      12  /* instantiate a partially constructed key */
2971 #define VKI_KEYCTL_NEGATE       13  /* negate a partially constructed key */
2972 #define VKI_KEYCTL_SET_REQKEY_KEYRING   14  /* set default request-key keyring */
2973 #define VKI_KEYCTL_SET_TIMEOUT      15  /* set key timeout */
2974 #define VKI_KEYCTL_ASSUME_AUTHORITY 16  /* assume request_key() authorisation */
2975 
2976 /*--------------------------------------------------------------------*/
2977 // From linux-2.6.20.1/include/linux/key.h
2978 /*--------------------------------------------------------------------*/
2979 
2980 /* key handle serial number */
2981 typedef vki_int32_t vki_key_serial_t;
2982 
2983 /* key handle permissions mask */
2984 typedef vki_uint32_t vki_key_perm_t;
2985 
2986 //----------------------------------------------------------------------
2987 // From linux-2.6.24.7/include/linux/wireless.h
2988 // (wireless extensions version 22, 2007-03-16)
2989 //----------------------------------------------------------------------
2990 
2991 /*
2992  * [[Wireless extensions ioctls.]]
2993  */
2994 
2995 /* Wireless Identification */
2996 #define VKI_SIOCSIWCOMMIT   0x8B00  /* Commit pending changes to driver */
2997 #define VKI_SIOCGIWNAME     0x8B01  /* get name == wireless protocol */
2998 
2999 /* Basic operations */
3000 #define VKI_SIOCSIWNWID     0x8B02  /* set network id (pre-802.11) */
3001 #define VKI_SIOCGIWNWID     0x8B03  /* get network id (the cell) */
3002 #define VKI_SIOCSIWFREQ     0x8B04  /* set channel/frequency (Hz) */
3003 #define VKI_SIOCGIWFREQ     0x8B05  /* get channel/frequency (Hz) */
3004 #define VKI_SIOCSIWMODE     0x8B06  /* set operation mode */
3005 #define VKI_SIOCGIWMODE     0x8B07  /* get operation mode */
3006 #define VKI_SIOCSIWSENS     0x8B08  /* set sensitivity (dBm) */
3007 #define VKI_SIOCGIWSENS     0x8B09  /* get sensitivity (dBm) */
3008 
3009 /* Informative stuff */
3010 #define VKI_SIOCSIWRANGE    0x8B0A  /* Unused */
3011 #define VKI_SIOCGIWRANGE    0x8B0B  /* Get range of parameters */
3012 #define VKI_SIOCSIWPRIV     0x8B0C  /* Unused */
3013 #define VKI_SIOCGIWPRIV     0x8B0D  /* get private ioctl interface info */
3014 #define VKI_SIOCSIWSTATS    0x8B0E  /* Unused */
3015 #define VKI_SIOCGIWSTATS    0x8B0F  /* Get /proc/net/wireless stats */
3016 
3017 /* Spy support (statistics per MAC address - used for Mobile IP support) */
3018 #define VKI_SIOCSIWSPY      0x8B10  /* set spy addresses */
3019 #define VKI_SIOCGIWSPY      0x8B11  /* get spy info (quality of link) */
3020 #define VKI_SIOCSIWTHRSPY   0x8B12  /* set spy threshold (spy event) */
3021 #define VKI_SIOCGIWTHRSPY   0x8B13  /* get spy threshold */
3022 
3023 /* Access Point manipulation */
3024 #define VKI_SIOCSIWAP       0x8B14  /* set access point MAC addresses */
3025 #define VKI_SIOCGIWAP       0x8B15  /* get access point MAC addresses */
3026 #define VKI_SIOCGIWAPLIST   0x8B17  /* Deprecated in favor of scanning */
3027 #define VKI_SIOCSIWSCAN         0x8B18  /* trigger scanning (list cells) */
3028 #define VKI_SIOCGIWSCAN         0x8B19  /* get scanning results */
3029 
3030 /* 802.11 specific support */
3031 #define VKI_SIOCSIWESSID    0x8B1A  /* set ESSID (network name) */
3032 #define VKI_SIOCGIWESSID    0x8B1B  /* get ESSID */
3033 #define VKI_SIOCSIWNICKN    0x8B1C  /* set node name/nickname */
3034 #define VKI_SIOCGIWNICKN    0x8B1D  /* get node name/nickname */
3035 
3036 /* Other parameters useful in 802.11 and some other devices */
3037 #define VKI_SIOCSIWRATE     0x8B20  /* set default bit rate (bps) */
3038 #define VKI_SIOCGIWRATE     0x8B21  /* get default bit rate (bps) */
3039 #define VKI_SIOCSIWRTS      0x8B22  /* set RTS/CTS threshold (bytes) */
3040 #define VKI_SIOCGIWRTS      0x8B23  /* get RTS/CTS threshold (bytes) */
3041 #define VKI_SIOCSIWFRAG     0x8B24  /* set fragmentation thr (bytes) */
3042 #define VKI_SIOCGIWFRAG     0x8B25  /* get fragmentation thr (bytes) */
3043 #define VKI_SIOCSIWTXPOW    0x8B26  /* set transmit power (dBm) */
3044 #define VKI_SIOCGIWTXPOW    0x8B27  /* get transmit power (dBm) */
3045 #define VKI_SIOCSIWRETRY    0x8B28  /* set retry limits and lifetime */
3046 #define VKI_SIOCGIWRETRY    0x8B29  /* get retry limits and lifetime */
3047 
3048 /* Encoding stuff (scrambling, hardware security, WEP...) */
3049 #define VKI_SIOCSIWENCODE   0x8B2A  /* set encoding token & mode */
3050 #define VKI_SIOCGIWENCODE   0x8B2B  /* get encoding token & mode */
3051 
3052 /* Power saving stuff (power management, unicast and multicast) */
3053 #define VKI_SIOCSIWPOWER    0x8B2C  /* set Power Management settings */
3054 #define VKI_SIOCGIWPOWER    0x8B2D  /* get Power Management settings */
3055 
3056 /* WPA : Generic IEEE 802.11 information element (e.g., for WPA/RSN/WMM). */
3057 #define VKI_SIOCSIWGENIE    0x8B30      /* set generic IE */
3058 #define VKI_SIOCGIWGENIE    0x8B31      /* get generic IE */
3059 
3060 /* WPA : IEEE 802.11 MLME requests */
3061 #define VKI_SIOCSIWMLME     0x8B16  /* request MLME operation; uses
3062                      * struct iw_mlme */
3063 /* WPA : Authentication mode parameters */
3064 #define VKI_SIOCSIWAUTH     0x8B32  /* set authentication mode params */
3065 #define VKI_SIOCGIWAUTH     0x8B33  /* get authentication mode params */
3066 
3067 /* WPA : Extended version of encoding configuration */
3068 #define VKI_SIOCSIWENCODEEXT    0x8B34  /* set encoding token & mode */
3069 #define VKI_SIOCGIWENCODEEXT    0x8B35  /* get encoding token & mode */
3070 
3071 /* WPA2 : PMKSA cache management */
3072 #define VKI_SIOCSIWPMKSA    0x8B36  /* PMKSA cache operation */
3073 
3074 /*
3075  * [[Payload for the wireless extensions ioctls.]]
3076  */
3077 
3078 struct  vki_iw_param
3079 {
3080   __vki_s32 value;      /* The value of the parameter itself */
3081   __vki_u8  fixed;      /* Hardware should not use auto select */
3082   __vki_u8  disabled;   /* Disable the feature */
3083   __vki_u16 flags;      /* Various specific flags (if any) */
3084 };
3085 
3086 struct  vki_iw_point
3087 {
3088   void __user   *pointer;   /* Pointer to the data  (in user space) */
3089   __vki_u16 length;     /* number of fields or size in bytes */
3090   __vki_u16 flags;      /* Optional params */
3091 };
3092 
3093 struct  vki_iw_freq
3094 {
3095     __vki_s32   m;      /* Mantissa */
3096     __vki_s16   e;      /* Exponent */
3097     __vki_u8    i;      /* List index (when in range struct) */
3098     __vki_u8    flags;      /* Flags (fixed/auto) */
3099 };
3100 
3101 struct  vki_iw_quality
3102 {
3103     __vki_u8    qual;       /* link quality (%retries, SNR,
3104                        %missed beacons or better...) */
3105     __vki_u8    level;      /* signal level (dBm) */
3106     __vki_u8    noise;      /* noise level (dBm) */
3107     __vki_u8    updated;    /* Flags to know if updated */
3108 };
3109 
3110 union   vki_iwreq_data
3111 {
3112     /* Config - generic */
3113     char        name[VKI_IFNAMSIZ];
3114     /* Name : used to verify the presence of  wireless extensions.
3115      * Name of the protocol/provider... */
3116 
3117     struct vki_iw_point essid;  /* Extended network name */
3118     struct vki_iw_param nwid;   /* network id (or domain - the cell) */
3119     struct vki_iw_freq  freq;   /* frequency or channel :
3120                      * 0-1000 = channel
3121                      * > 1000 = frequency in Hz */
3122 
3123     struct vki_iw_param sens;   /* signal level threshold */
3124     struct vki_iw_param bitrate;/* default bit rate */
3125     struct vki_iw_param txpower;/* default transmit power */
3126     struct vki_iw_param rts;    /* RTS threshold threshold */
3127     struct vki_iw_param frag;   /* Fragmentation threshold */
3128     __vki_u32       mode;   /* Operation mode */
3129     struct vki_iw_param retry;  /* Retry limits & lifetime */
3130 
3131     struct vki_iw_point encoding; /* Encoding stuff : tokens */
3132     struct vki_iw_param power;  /* PM duration/timeout */
3133     struct vki_iw_quality   qual;   /* Quality part of statistics */
3134 
3135     struct vki_sockaddr ap_addr;    /* Access point address */
3136     struct vki_sockaddr addr;   /* Destination address (hw/mac) */
3137 
3138     struct vki_iw_param param;  /* Other small parameters */
3139     struct vki_iw_point data;   /* Other large parameters */
3140 };
3141 
3142 struct  vki_iwreq 
3143 {
3144     union
3145     {
3146         char ifrn_name[VKI_IFNAMSIZ];   /* if name, e.g. "eth0" */
3147     } ifr_ifrn;
3148 
3149     /* Data part (defined just above) */
3150     union   vki_iwreq_data  u;
3151 };
3152 
3153 /*--------------------------------------------------------------------*/
3154 // From linux-2.6.31.5/include/linux/perf_event.h
3155 /*--------------------------------------------------------------------*/
3156 
3157 struct vki_perf_event_attr {
3158 
3159     /*
3160      * Major type: hardware/software/tracepoint/etc.
3161      */
3162     __vki_u32           type;
3163 
3164     /*
3165      * Size of the attr structure, for fwd/bwd compat.
3166      */
3167     __vki_u32           size;
3168 
3169     /*
3170      * Type specific configuration information.
3171      */
3172     __vki_u64           config;
3173 
3174     union {
3175         __vki_u64       sample_period;
3176         __vki_u64       sample_freq;
3177     };
3178 
3179     __vki_u64           sample_type;
3180     __vki_u64           read_format;
3181 
3182     __vki_u64           disabled       :  1, /* off by default        */
3183                     inherit        :  1, /* children inherit it   */
3184                     pinned         :  1, /* must always be on PMU */
3185                     exclusive      :  1, /* only group on PMU     */
3186                     exclude_user   :  1, /* don't count user      */
3187                     exclude_kernel :  1, /* ditto kernel          */
3188                     exclude_hv     :  1, /* ditto hypervisor      */
3189                     exclude_idle   :  1, /* don't count when idle */
3190                     mmap           :  1, /* include mmap data     */
3191                     comm           :  1, /* include comm data     */
3192                     freq           :  1, /* use freq, not period  */
3193                     inherit_stat   :  1, /* per task counts       */
3194                     enable_on_exec :  1, /* next exec enables     */
3195                     task           :  1, /* trace fork/exit       */
3196                     watermark      :  1, /* wakeup_watermark      */
3197                     /*
3198                      * precise_ip:
3199                      *
3200                      *  0 - SAMPLE_IP can have arbitrary skid
3201                      *  1 - SAMPLE_IP must have constant skid
3202                      *  2 - SAMPLE_IP requested to have 0 skid
3203                      *  3 - SAMPLE_IP must have 0 skid
3204                      *
3205                      *  See also PERF_RECORD_MISC_EXACT_IP
3206                      */
3207                     precise_ip     :  2, /* skid constraint       */
3208                     mmap_data      :  1, /* non-exec mmap data    */
3209                     sample_id_all  :  1, /* sample_type all events */
3210 
3211                     __reserved_1   : 45;
3212 
3213     union {
3214         __vki_u32       wakeup_events;    /* wakeup every n events */
3215         __vki_u32       wakeup_watermark; /* bytes before wakeup   */
3216     };
3217 
3218     __vki_u32           bp_type;
3219     union {
3220         __vki_u64       bp_addr;
3221         __vki_u64       config1; /* extension of config */
3222     };
3223     union {
3224         __vki_u64       bp_len;
3225         __vki_u64       config2; /* extension of config1 */
3226     };
3227 };
3228 
3229 #define VKI_PERF_EVENT_IOC_ENABLE       _VKI_IO ('$', 0)
3230 #define VKI_PERF_EVENT_IOC_DISABLE      _VKI_IO ('$', 1)
3231 #define VKI_PERF_EVENT_IOC_REFRESH      _VKI_IO ('$', 2)
3232 #define VKI_PERF_EVENT_IOC_RESET        _VKI_IO ('$', 3)
3233 #define VKI_PERF_EVENT_IOC_PERIOD       _VKI_IOW('$', 4, __vki_u64)
3234 #define VKI_PERF_EVENT_IOC_SET_OUTPUT   _VKI_IO ('$', 5)
3235 #define VKI_PERF_EVENT_IOC_SET_FILTER   _VKI_IOW('$', 6, char *)
3236 #define VKI_PERF_EVENT_IOC_ID           _VKI_IOR('$', 7, __vki_u64 *)
3237 #define VKI_PERF_EVENT_IOC_SET_BPF      _VKI_IOW('$', 8, __vki_u32)
3238 
3239 #define VKI_PERF_FLAG_FD_NO_GROUP       (1UL << 0)
3240 
3241 /*--------------------------------------------------------------------*/
3242 // From linux-2.6.32.4/include/linux/getcpu.h
3243 /*--------------------------------------------------------------------*/
3244 
3245 struct vki_getcpu_cache {
3246     unsigned long blob[128 / sizeof(long)];
3247 };
3248 
3249 //----------------------------------------------------------------------
3250 // From linux-2.6.33.3/include/linux/input.h
3251 //----------------------------------------------------------------------
3252 
3253 /*
3254  * IOCTLs (0x00 - 0x7f)
3255  */
3256 
3257 #define VKI_EVIOCGNAME(len) _VKI_IOC(_VKI_IOC_READ, 'E', 0x06, len)     /* get device name */
3258 #define VKI_EVIOCGPHYS(len) _VKI_IOC(_VKI_IOC_READ, 'E', 0x07, len)     /* get physical location */
3259 #define VKI_EVIOCGUNIQ(len) _VKI_IOC(_VKI_IOC_READ, 'E', 0x08, len)     /* get unique identifier */
3260 
3261 #define VKI_EVIOCGKEY(len)  _VKI_IOC(_VKI_IOC_READ, 'E', 0x18, len)     /* get global keystate */
3262 #define VKI_EVIOCGLED(len)  _VKI_IOC(_VKI_IOC_READ, 'E', 0x19, len)     /* get all LEDs */
3263 #define VKI_EVIOCGSND(len)  _VKI_IOC(_VKI_IOC_READ, 'E', 0x1a, len)     /* get all sounds status */
3264 #define VKI_EVIOCGSW(len)   _VKI_IOC(_VKI_IOC_READ, 'E', 0x1b, len)     /* get all switch states */
3265 
3266 #define VKI_EVIOCGBIT(ev,len)   _VKI_IOC(_VKI_IOC_READ, 'E', 0x20 + ev, len)    /* get event bits */
3267 
3268 #define VKI_EVIOCGRAB       _VKI_IOW('E', 0x90, int)
3269 /* grab device */
3270 
3271 /*
3272  * Event types
3273  */
3274 
3275 #define VKI_EV_SYN      0x00
3276 #define VKI_EV_KEY      0x01
3277 #define VKI_EV_REL      0x02
3278 #define VKI_EV_ABS      0x03
3279 #define VKI_EV_MSC      0x04
3280 #define VKI_EV_SW       0x05
3281 #define VKI_EV_LED      0x11
3282 #define VKI_EV_SND      0x12
3283 #define VKI_EV_REP      0x14
3284 #define VKI_EV_FF       0x15
3285 #define VKI_EV_PWR      0x16
3286 #define VKI_EV_FF_STATUS    0x17
3287 #define VKI_EV_MAX      0x1f
3288 #define VKI_EV_CNT      (VKI_EV_MAX+1)
3289 
3290 //----------------------------------------------------------------------
3291 // From linux-2.6.39-rc2/include/asm_generic/ioctls.h
3292 //----------------------------------------------------------------------
3293 
3294 #ifndef VKI_FIOQSIZE
3295 #define VKI_FIOQSIZE 0x5460     /* Value differs on some platforms */
3296 #endif
3297 
3298 #ifndef VKI_TIOCSIG
3299 #define VKI_TIOCSIG _VKI_IOW('T', 0x36, int) /* Value differs on some platforms */
3300 #endif
3301 
3302 //----------------------------------------------------------------------
3303 // From kernel/common/include/linux/ashmem.h
3304 //----------------------------------------------------------------------
3305 
3306 #if defined(VGPV_arm_linux_android) || defined(VGPV_x86_linux_android) \
3307     || defined(VGPV_mips32_linux_android) \
3308     || defined(VGPV_arm64_linux_android)
3309 
3310 #define VKI_ASHMEM_NAME_LEN 256
3311 
3312 #define VKI_ASHMEM_NAME_DEF "dev/ashmem"
3313 
3314 #define VKI_ASHMEM_NOT_PURGED 0
3315 #define VKI_ASHMEM_WAS_PURGED 1
3316 
3317 #define VKI_ASHMEM_IS_UNPINNED 0
3318 #define VKI_ASHMEM_IS_PINNED 1
3319 
3320 struct vki_ashmem_pin {
3321    vki_uint32_t offset;
3322    vki_uint32_t len;
3323 };
3324 
3325 #define __VKI_ASHMEMIOC 0x77
3326 
3327 #define VKI_ASHMEM_SET_NAME _VKI_IOW(__VKI_ASHMEMIOC, 1, char[VKI_ASHMEM_NAME_LEN])
3328 #define VKI_ASHMEM_GET_NAME _VKI_IOR(__VKI_ASHMEMIOC, 2, char[VKI_ASHMEM_NAME_LEN])
3329 #define VKI_ASHMEM_SET_SIZE _VKI_IOW(__VKI_ASHMEMIOC, 3, vki_size_t)
3330 #define VKI_ASHMEM_GET_SIZE _VKI_IO(__VKI_ASHMEMIOC, 4)
3331 #define VKI_ASHMEM_SET_PROT_MASK _VKI_IOW(__VKI_ASHMEMIOC, 5, unsigned long)
3332 #define VKI_ASHMEM_GET_PROT_MASK _VKI_IO(__VKI_ASHMEMIOC, 6)
3333 #define VKI_ASHMEM_PIN _VKI_IOW(__VKI_ASHMEMIOC, 7, struct vki_ashmem_pin)
3334 #define VKI_ASHMEM_UNPIN _VKI_IOW(__VKI_ASHMEMIOC, 8, struct vki_ashmem_pin)
3335 #define VKI_ASHMEM_GET_PIN_STATUS _VKI_IO(__VKI_ASHMEMIOC, 9)
3336 #define VKI_ASHMEM_PURGE_ALL_CACHES _VKI_IO(__VKI_ASHMEMIOC, 10)
3337 
3338 //----------------------------------------------------------------------
3339 // From kernel/common/include/linux/binder.h
3340 //----------------------------------------------------------------------
3341 
3342 struct vki_binder_write_read {
3343  signed long write_size;
3344  signed long write_consumed;
3345  unsigned long write_buffer;
3346  signed long read_size;
3347  signed long read_consumed;
3348  unsigned long read_buffer;
3349 };
3350 
3351 struct vki_binder_version {
3352  signed long protocol_version;
3353 };
3354 
3355 #define VKI_BINDER_WRITE_READ _VKI_IOWR('b', 1, struct vki_binder_write_read)
3356 #define VKI_BINDER_SET_IDLE_TIMEOUT _VKI_IOW('b', 3, vki_int64_t)
3357 #define VKI_BINDER_SET_MAX_THREADS _VKI_IOW('b', 5, vki_size_t)
3358 #define VKI_BINDER_SET_IDLE_PRIORITY _VKI_IOW('b', 6, int)
3359 #define VKI_BINDER_SET_CONTEXT_MGR _VKI_IOW('b', 7, int)
3360 #define VKI_BINDER_THREAD_EXIT _VKI_IOW('b', 8, int)
3361 #define VKI_BINDER_VERSION _VKI_IOWR('b', 9, struct vki_binder_version)
3362 
3363 #endif /* defined(VGPV_*_linux_android) */
3364 
3365 //----------------------------------------------------------------------
3366 // From linux-3.0.4/include/net/bluetooth/bluetooth.h
3367 //----------------------------------------------------------------------
3368 
3369 typedef struct {
3370    __vki_u8 b[6];
3371 } __vki_packed vki_bdaddr_t;
3372 
3373 //----------------------------------------------------------------------
3374 // From linux-3.0.4/include/net/bluetooth/hci.h
3375 //----------------------------------------------------------------------
3376 
3377 #define VKI_HCIDEVUP        _VKI_IOW('H', 201, int)
3378 #define VKI_HCIDEVDOWN      _VKI_IOW('H', 202, int)
3379 #define VKI_HCIDEVRESET     _VKI_IOW('H', 203, int)
3380 #define VKI_HCIDEVRESTAT    _VKI_IOW('H', 204, int)
3381 
3382 #define VKI_HCIGETDEVLIST   _VKI_IOR('H', 210, int)
3383 
3384 struct vki_hci_dev_req {
3385     __vki_u16  dev_id;
3386     __vki_u32  dev_opt;
3387 };
3388 
3389 struct vki_hci_dev_list_req {
3390     __vki_u16  dev_num;
3391     struct vki_hci_dev_req dev_req[0];  /* hci_dev_req structures */
3392 };
3393 
3394 #define VKI_HCIGETDEVINFO   _VKI_IOR('H', 211, int)
3395 #define VKI_HCIGETCONNLIST  _VKI_IOR('H', 212, int)
3396 #define VKI_HCIGETCONNINFO  _VKI_IOR('H', 213, int)
3397 #define VKI_HCIGETAUTHINFO  _VKI_IOR('H', 215, int)
3398 
3399 #define VKI_HCISETRAW       _VKI_IOW('H', 220, int)
3400 #define VKI_HCISETSCAN      _VKI_IOW('H', 221, int)
3401 #define VKI_HCISETAUTH      _VKI_IOW('H', 222, int)
3402 #define VKI_HCISETENCRYPT   _VKI_IOW('H', 223, int)
3403 #define VKI_HCISETPTYPE     _VKI_IOW('H', 224, int)
3404 #define VKI_HCISETLINKPOL   _VKI_IOW('H', 225, int)
3405 #define VKI_HCISETLINKMODE  _VKI_IOW('H', 226, int)
3406 #define VKI_HCISETACLMTU    _VKI_IOW('H', 227, int)
3407 #define VKI_HCISETSCOMTU    _VKI_IOW('H', 228, int)
3408 
3409 #define VKI_HCIBLOCKADDR    _VKI_IOW('H', 230, int)
3410 #define VKI_HCIUNBLOCKADDR  _VKI_IOW('H', 231, int)
3411 
3412 #define VKI_HCIINQUIRY      _VKI_IOR('H', 240, int)
3413 
3414 struct vki_inquiry_info {
3415    vki_bdaddr_t bdaddr;
3416    __vki_u8     pscan_rep_mode;
3417    __vki_u8     pscan_period_mode;
3418    __vki_u8     pscan_mode;
3419    __vki_u8     dev_class[3];
3420    __vki_le16   clock_offset;
3421 } __vki_packed;
3422 
3423 struct vki_hci_inquiry_req {
3424    __vki_u16 dev_id;
3425    __vki_u16 flags;
3426    __vki_u8  lap[3];
3427    __vki_u8  length;
3428    __vki_u8  num_rsp;
3429 };
3430 
3431 //----------------------------------------------------------------------
3432 // From linux-3.9.2/include/net/bluetooth/rfcomm.h
3433 //----------------------------------------------------------------------
3434 
3435 struct vki_sockaddr_rc {
3436         vki_sa_family_t     rc_family;
3437         vki_bdaddr_t        rc_bdaddr;
3438         __vki_u8            rc_channel;
3439 };
3440 
3441 //----------------------------------------------------------------------
3442 // From linux-3.4/include/linux/kvm.h
3443 //----------------------------------------------------------------------
3444 #define KVMIO 0xAE
3445 
3446 #define VKI_KVM_GET_API_VERSION       _VKI_IO(KVMIO,   0x00)
3447 #define VKI_KVM_CREATE_VM             _VKI_IO(KVMIO,   0x01) /* returns a VM fd */
3448 #define VKI_KVM_CHECK_EXTENSION       _VKI_IO(KVMIO,   0x03)
3449 #define VKI_KVM_GET_VCPU_MMAP_SIZE    _VKI_IO(KVMIO,   0x04) /* in bytes */
3450 #define VKI_KVM_S390_ENABLE_SIE       _VKI_IO(KVMIO,   0x06)
3451 #define VKI_KVM_CREATE_VCPU           _VKI_IO(KVMIO,   0x41)
3452 #define VKI_KVM_SET_NR_MMU_PAGES      _VKI_IO(KVMIO,   0x44)
3453 #define VKI_KVM_GET_NR_MMU_PAGES      _VKI_IO(KVMIO,   0x45)
3454 #define VKI_KVM_SET_TSS_ADDR          _VKI_IO(KVMIO,   0x47)
3455 #define VKI_KVM_CREATE_IRQCHIP        _VKI_IO(KVMIO,   0x60)
3456 #define VKI_KVM_CREATE_PIT            _VKI_IO(KVMIO,   0x64)
3457 #define VKI_KVM_REINJECT_CONTROL      _VKI_IO(KVMIO,   0x71)
3458 #define VKI_KVM_SET_BOOT_CPU_ID       _VKI_IO(KVMIO,   0x78)
3459 #define VKI_KVM_SET_TSC_KHZ           _VKI_IO(KVMIO,  0xa2)
3460 #define VKI_KVM_GET_TSC_KHZ           _VKI_IO(KVMIO,  0xa3)
3461 #define VKI_KVM_RUN                   _VKI_IO(KVMIO,   0x80)
3462 #define VKI_KVM_S390_INITIAL_RESET    _VKI_IO(KVMIO,   0x97)
3463 #define VKI_KVM_NMI                   _VKI_IO(KVMIO,   0x9a)
3464 #define VKI_KVM_KVMCLOCK_CTRL         _VKI_IO(KVMIO,   0xad)
3465 
3466 struct vki_kvm_s390_mem_op {
3467         /* in */
3468         __vki_u64 gaddr;            /* the guest address */
3469         __vki_u64 flags;            /* flags */
3470         __vki_u32 size;             /* amount of bytes */
3471         __vki_u32 op;               /* type of operation */
3472         __vki_u64 buf;              /* buffer in userspace */
3473         __vki_u8 ar;                /* the access register number */
3474         __vki_u8 reserved[31];      /* should be set to 0 */
3475 };
3476 
3477 #define VKI_KVM_S390_MEMOP_LOGICAL_READ     0
3478 #define VKI_KVM_S390_MEMOP_LOGICAL_WRITE    1
3479 #define VKI_KVM_S390_MEMOP_F_CHECK_ONLY     (1ULL << 0)
3480 #define VKI_KVM_S390_MEMOP_F_INJECT_EXCEPTION   (1ULL << 1)
3481 
3482 #define VKI_KVM_S390_MEM_OP           _VKI_IOW(KVMIO,  0xb1, struct vki_kvm_s390_mem_op)
3483 
3484 //----------------------------------------------------------------------
3485 // From linux-2.6/include/linux/net_stamp.h
3486 //----------------------------------------------------------------------
3487 
3488 struct vki_hwtstamp_config {
3489     int flags;
3490     int tx_type;
3491     int rx_filter;
3492 };
3493 
3494 //----------------------------------------------------------------------
3495 // From linux-2.6.12-rc2/include/linux/uinput.h
3496 //----------------------------------------------------------------------
3497 
3498 #define VKI_UINPUT_IOCTL_BASE       'U'
3499 #define VKI_UI_DEV_CREATE       _VKI_IO(VKI_UINPUT_IOCTL_BASE, 1)
3500 #define VKI_UI_DEV_DESTROY      _VKI_IO(VKI_UINPUT_IOCTL_BASE, 2)
3501 
3502 #define VKI_UI_SET_EVBIT        _VKI_IOW(VKI_UINPUT_IOCTL_BASE, 100, int)
3503 #define VKI_UI_SET_KEYBIT       _VKI_IOW(VKI_UINPUT_IOCTL_BASE, 101, int)
3504 #define VKI_UI_SET_RELBIT       _VKI_IOW(VKI_UINPUT_IOCTL_BASE, 102, int)
3505 #define VKI_UI_SET_ABSBIT       _VKI_IOW(VKI_UINPUT_IOCTL_BASE, 103, int)
3506 #define VKI_UI_SET_MSCBIT       _VKI_IOW(VKI_UINPUT_IOCTL_BASE, 104, int)
3507 #define VKI_UI_SET_LEDBIT       _VKI_IOW(VKI_UINPUT_IOCTL_BASE, 105, int)
3508 #define VKI_UI_SET_SNDBIT       _VKI_IOW(VKI_UINPUT_IOCTL_BASE, 106, int)
3509 #define VKI_UI_SET_FFBIT        _VKI_IOW(VKI_UINPUT_IOCTL_BASE, 107, int)
3510 #define VKI_UI_SET_SWBIT        _VKI_IOW(VKI_UINPUT_IOCTL_BASE, 109, int)
3511 #define VKI_UI_SET_PROPBIT      _VKI_IOW(VKI_UINPUT_IOCTL_BASE, 110, int)
3512 
3513 //----------------------------------------------------------------------
3514 // From linux-2.6/include/uapi/rdma/ib_user_mad.h
3515 //----------------------------------------------------------------------
3516 
3517 #define VKI_IB_IOCTL_MAGIC          0x1b
3518 
3519 #define VKI_IB_USER_MAD_REGISTER_AGENT    _VKI_IOWR(VKI_IB_IOCTL_MAGIC, 1, \
3520                                               struct ib_user_mad_reg_req)
3521 
3522 #define VKI_IB_USER_MAD_UNREGISTER_AGENT  _VKI_IOW(VKI_IB_IOCTL_MAGIC, 2, __u32)
3523 
3524 #define VKI_IB_USER_MAD_ENABLE_PKEY       _VKI_IO(VKI_IB_IOCTL_MAGIC, 3)
3525 
3526 //----------------------------------------------------------------------
3527 // From linux-3.8/include/uapi/linux/if_tun.h
3528 //----------------------------------------------------------------------
3529 
3530 #define VKI_TUNSETNOCSUM  _VKI_IOW('T', 200, int) 
3531 #define VKI_TUNSETDEBUG   _VKI_IOW('T', 201, int) 
3532 #define VKI_TUNSETIFF     _VKI_IOW('T', 202, int) 
3533 #define VKI_TUNSETPERSIST _VKI_IOW('T', 203, int) 
3534 #define VKI_TUNSETOWNER   _VKI_IOW('T', 204, int)
3535 #define VKI_TUNSETLINK    _VKI_IOW('T', 205, int)
3536 #define VKI_TUNSETGROUP   _VKI_IOW('T', 206, int)
3537 #define VKI_TUNGETFEATURES _VKI_IOR('T', 207, unsigned int)
3538 #define VKI_TUNSETOFFLOAD  _VKI_IOW('T', 208, unsigned int)
3539 #define VKI_TUNSETTXFILTER _VKI_IOW('T', 209, unsigned int)
3540 #define VKI_TUNGETIFF      _VKI_IOR('T', 210, unsigned int)
3541 #define VKI_TUNGETSNDBUF   _VKI_IOR('T', 211, int)
3542 #define VKI_TUNSETSNDBUF   _VKI_IOW('T', 212, int)
3543 //#define VKI_TUNATTACHFILTER _VKI_IOW('T', 213, struct sock_fprog)
3544 //#define VKI_TUNDETACHFILTER _VKI_IOW('T', 214, struct sock_fprog)
3545 #define VKI_TUNGETVNETHDRSZ _VKI_IOR('T', 215, int)
3546 #define VKI_TUNSETVNETHDRSZ _VKI_IOW('T', 216, int)
3547 #define VKI_TUNSETQUEUE  _VKI_IOW('T', 217, int)
3548 #define VKI_TUNSETIFINDEX   _VKI_IOW('T', 218, unsigned int)
3549 //#define VKI_TUNGETFILTER _VKI_IOR('T', 219, struct sock_fprog)
3550 
3551 //----------------------------------------------------------------------
3552 // From linux-3.8/include/uapi/linux/vhost.h
3553 //----------------------------------------------------------------------
3554 
3555 #define VKI_VHOST_VIRTIO 0xAF
3556 #define VKI_VHOST_SET_OWNER _VKI_IO(VKI_VHOST_VIRTIO, 0x01)
3557 #define VKI_VHOST_RESET_OWNER _VKI_IO(VKI_VHOST_VIRTIO, 0x02)
3558 
3559 //----------------------------------------------------------------------
3560 // Xen privcmd IOCTL
3561 //----------------------------------------------------------------------
3562 
3563 typedef unsigned long __vki_xen_pfn_t;
3564 
3565 struct vki_xen_privcmd_hypercall {
3566        __vki_u64 op;
3567        __vki_u64 arg[5];
3568 };
3569 
3570 struct vki_xen_privcmd_mmap_entry {
3571         __vki_u64 va;
3572         __vki_u64 mfn;
3573         __vki_u64 npages;
3574 };
3575 
3576 struct vki_xen_privcmd_mmap {
3577         int num;
3578         __vki_u16 dom; /* target domain */
3579         struct vki_xen_privcmd_mmap_entry *entry;
3580 };
3581 
3582 struct vki_xen_privcmd_mmapbatch {
3583         int num;     /* number of pages to populate */
3584         __vki_u16 dom; /* target domain */
3585         __vki_u64 addr;  /* virtual address */
3586         __vki_xen_pfn_t *arr; /* array of mfns - top nibble set on err */
3587 };
3588 
3589 struct vki_xen_privcmd_mmapbatch_v2 {
3590         unsigned int num; /* number of pages to populate */
3591         __vki_u16 dom;      /* target domain */
3592         __vki_u64 addr;       /* virtual address */
3593         const __vki_xen_pfn_t *arr; /* array of mfns */
3594         int __user *err;  /* array of error codes */
3595 };
3596 
3597 #define VKI_XEN_IOCTL_PRIVCMD_HYPERCALL    _VKI_IOC(_VKI_IOC_NONE, 'P', 0, sizeof(struct vki_xen_privcmd_hypercall))
3598 #define VKI_XEN_IOCTL_PRIVCMD_MMAP         _VKI_IOC(_VKI_IOC_NONE, 'P', 2, sizeof(struct vki_xen_privcmd_mmap))
3599 
3600 #define VKI_XEN_IOCTL_PRIVCMD_MMAPBATCH    _VKI_IOC(_VKI_IOC_NONE, 'P', 3, sizeof(struct vki_xen_privcmd_mmapbatch))
3601 #define VKI_XEN_IOCTL_PRIVCMD_MMAPBATCH_V2 _VKI_IOC(_VKI_IOC_NONE, 'P', 4, sizeof(struct vki_xen_privcmd_mmapbatch_v2))
3602 
3603 //----------------------------------------------------------------------
3604 // Xen evtchn IOCTL
3605 //----------------------------------------------------------------------
3606 
3607 #define VKI_XEN_IOCTL_EVTCHN_BIND_VIRQ              \
3608     _VKI_IOC(_VKI_IOC_NONE, 'E', 0, sizeof(struct vki_xen_ioctl_evtchn_bind_virq))
3609 struct vki_xen_ioctl_evtchn_bind_virq {
3610     vki_uint32_t virq;
3611 };
3612 
3613 #define VKI_XEN_IOCTL_EVTCHN_BIND_INTERDOMAIN           \
3614     _VKI_IOC(_VKI_IOC_NONE, 'E', 1, sizeof(struct vki_xen_ioctl_evtchn_bind_interdomain))
3615 struct vki_xen_ioctl_evtchn_bind_interdomain {
3616     vki_uint32_t remote_domain;
3617     vki_uint32_t remote_port;
3618 };
3619 
3620 #define VKI_XEN_IOCTL_EVTCHN_BIND_UNBOUND_PORT          \
3621     _VKI_IOC(_VKI_IOC_NONE, 'E', 2, sizeof(struct vki_xen_ioctl_evtchn_bind_unbound_port))
3622 struct vki_xen_ioctl_evtchn_bind_unbound_port {
3623     vki_uint32_t remote_domain;
3624 };
3625 
3626 #define VKI_XEN_IOCTL_EVTCHN_UNBIND             \
3627     _VKI_IOC(_VKI_IOC_NONE, 'E', 3, sizeof(struct vki_xen_ioctl_evtchn_unbind))
3628 struct vki_xen_ioctl_evtchn_unbind {
3629     vki_uint32_t port;
3630 };
3631 
3632 #define VKI_XEN_IOCTL_EVTCHN_NOTIFY             \
3633     _VKI_IOC(_VKI_IOC_NONE, 'E', 4, sizeof(struct vki_xen_ioctl_evtchn_notify))
3634 struct vki_xen_ioctl_evtchn_notify {
3635     vki_uint32_t port;
3636 };
3637 
3638 #define VKI_XEN_IOCTL_EVTCHN_RESET              \
3639     _VKI_IOC(_VKI_IOC_NONE, 'E', 5, 0)
3640 
3641 
3642 //----------------------------------------------------------------------
3643 // From linux-3.4.0/include/linux/fs.h
3644 //----------------------------------------------------------------------
3645 
3646 struct vki_file_handle {
3647    __vki_u32 handle_bytes;
3648    int handle_type;
3649    /* file identifier */
3650    unsigned char f_handle[0];
3651 };
3652 
3653 //----------------------------------------------------------------------
3654 // From linux-3.2.0/include/linux/filter.h
3655 //----------------------------------------------------------------------
3656 
3657 struct vki_sock_filter {
3658     __vki_u16 code; /* Actual filter code */
3659     __vki_u8 jt;    /* Jump true */
3660     __vki_u8 jf;    /* Jump false */
3661     __vki_u32 k;    /* Generic multiuse field */
3662 };
3663 
3664 struct vki_sock_fprog {
3665     __vki_u16 len;  /* actually unsigned short */
3666     struct vki_sock_filter *filter;
3667 };
3668    
3669 //----------------------------------------------------------------------
3670 // From linux/include/uapi/linux/ethtool.h
3671 //----------------------------------------------------------------------
3672 
3673 struct vki_ethtool_cmd {
3674     __vki_u32   cmd;
3675     __vki_u32   supported;
3676     __vki_u32   advertising;
3677     __vki_u16   speed;
3678     __vki_u8    duplex;
3679     __vki_u8    port;
3680     __vki_u8    phy_address;
3681     __vki_u8    transceiver;
3682     __vki_u8    autoneg;
3683     __vki_u8    mdio_support;
3684     __vki_u32   maxtxpkt;
3685     __vki_u32   maxrxpkt;
3686     __vki_u16   speed_hi;
3687     __vki_u8    eth_tp_mdix;
3688     __vki_u8    eth_tp_mdix_ctrl;
3689     __vki_u32   lp_advertising;
3690     __vki_u32   reserved[2];
3691 };
3692 
3693 #define VKI_ETHTOOL_FWVERS_LEN  32
3694 #define VKI_ETHTOOL_BUSINFO_LEN 32
3695 
3696 struct vki_ethtool_drvinfo {
3697     __vki_u32   cmd;
3698     char    driver[32];
3699     char    version[32];
3700     char    fw_version[VKI_ETHTOOL_FWVERS_LEN];
3701     char    bus_info[VKI_ETHTOOL_BUSINFO_LEN];
3702     char    reserved1[32];
3703     char    reserved2[12];
3704     __vki_u32   n_priv_flags;
3705     __vki_u32   n_stats;
3706     __vki_u32   testinfo_len;
3707     __vki_u32   eedump_len;
3708     __vki_u32   regdump_len;
3709 };
3710 
3711 #define VKI_SOPASS_MAX  6
3712 
3713 struct vki_ethtool_wolinfo {
3714     __vki_u32   cmd;
3715     __vki_u32   supported;
3716     __vki_u32   wolopts;
3717     __vki_u8    sopass[VKI_SOPASS_MAX];
3718 };
3719 
3720 struct vki_ethtool_value {
3721     __vki_u32   cmd;
3722     __vki_u32   data;
3723 };
3724 
3725 struct vki_ethtool_regs {
3726     __vki_u32   cmd;
3727     __vki_u32   version;
3728     __vki_u32   len;
3729     __vki_u8    data[0];
3730 };
3731 
3732 struct vki_ethtool_ringparam {
3733     __vki_u32   cmd;
3734     __vki_u32   rx_max_pending;
3735     __vki_u32   rx_mini_max_pending;
3736     __vki_u32   rx_jumbo_max_pending;
3737     __vki_u32   tx_max_pending;
3738     __vki_u32   rx_pending;
3739     __vki_u32   rx_mini_pending;
3740     __vki_u32   rx_jumbo_pending;
3741     __vki_u32   tx_pending;
3742 };
3743 
3744 struct vki_ethtool_channels {
3745     __vki_u32   cmd;
3746     __vki_u32   max_rx;
3747     __vki_u32   max_tx;
3748     __vki_u32   max_other;
3749     __vki_u32   max_combined;
3750     __vki_u32   rx_count;
3751     __vki_u32   tx_count;
3752     __vki_u32   other_count;
3753     __vki_u32   combined_count;
3754 };
3755 
3756 struct vki_ethtool_sset_info {
3757     __vki_u32   cmd;
3758     __vki_u32   reserved;
3759     __vki_u64   sset_mask;
3760     __vki_u32   data[0];
3761 };
3762 
3763 struct vki_ethtool_test {
3764     __vki_u32   cmd;
3765     __vki_u32   flags;
3766     __vki_u32   reserved;
3767     __vki_u32   len;
3768     __vki_u64   data[0];
3769 };
3770 
3771 struct vki_ethtool_perm_addr {
3772     __vki_u32   cmd;
3773     __vki_u32   size;
3774     __vki_u8    data[0];
3775 };
3776 
3777 struct vki_ethtool_get_features_block {
3778     __vki_u32   available;
3779     __vki_u32   requested;
3780     __vki_u32   active;
3781     __vki_u32   never_changed;
3782 };
3783 
3784 struct vki_ethtool_gfeatures {
3785     __vki_u32   cmd;
3786     __vki_u32   size;
3787     struct vki_ethtool_get_features_block features[0];
3788 };
3789 
3790 struct vki_ethtool_set_features_block {
3791     __vki_u32   valid;
3792     __vki_u32   requested;
3793 };
3794 
3795 struct vki_ethtool_sfeatures {
3796     __vki_u32   cmd;
3797     __vki_u32   size;
3798     struct vki_ethtool_set_features_block features[0];
3799 };
3800 
3801 struct vki_ethtool_ts_info {
3802     __vki_u32   cmd;
3803     __vki_u32   so_timestamping;
3804     __vki_s32   phc_index;
3805     __vki_u32   tx_types;
3806     __vki_u32   tx_reserved[3];
3807     __vki_u32   rx_filters;
3808     __vki_u32   rx_reserved[3];
3809 };
3810 
3811 #define VKI_ETHTOOL_GSET    0x00000001 /* Get settings. */
3812 #define VKI_ETHTOOL_SSET    0x00000002 /* Set settings. */
3813 #define VKI_ETHTOOL_GDRVINFO    0x00000003 /* Get driver info. */
3814 #define VKI_ETHTOOL_GREGS   0x00000004 /* Get NIC registers. */
3815 #define VKI_ETHTOOL_GWOL    0x00000005 /* Get wake-on-lan options. */
3816 #define VKI_ETHTOOL_SWOL    0x00000006 /* Set wake-on-lan options. */
3817 #define VKI_ETHTOOL_GMSGLVL 0x00000007 /* Get driver message level */
3818 #define VKI_ETHTOOL_SMSGLVL 0x00000008 /* Set driver msg level. */
3819 #define VKI_ETHTOOL_NWAY_RST    0x00000009 /* Restart autonegotiation. */
3820 #define VKI_ETHTOOL_GLINK   0x0000000a
3821 #define VKI_ETHTOOL_GRINGPARAM  0x00000010 /* Get ring parameters */
3822 #define VKI_ETHTOOL_SRINGPARAM  0x00000011 /* Set ring parameters. */
3823 #define VKI_ETHTOOL_GRXCSUM 0x00000014 /* Get RX hw csum enable (ethtool_value) */
3824 #define VKI_ETHTOOL_SRXCSUM 0x00000015 /* Set RX hw csum enable (ethtool_value) */
3825 #define VKI_ETHTOOL_GTXCSUM 0x00000016 /* Get TX hw csum enable (ethtool_value) */
3826 #define VKI_ETHTOOL_STXCSUM 0x00000017 /* Set TX hw csum enable (ethtool_value) */
3827 #define VKI_ETHTOOL_GSG     0x00000018 /* Get scatter-gather enable
3828                         * (ethtool_value) */
3829 #define VKI_ETHTOOL_SSG     0x00000019 /* Set scatter-gather enable
3830                         * (ethtool_value). */
3831 #define VKI_ETHTOOL_TEST    0x0000001a /* execute NIC self-test. */
3832 #define VKI_ETHTOOL_PHYS_ID 0x0000001c /* identify the NIC */
3833 #define VKI_ETHTOOL_GTSO    0x0000001e /* Get TSO enable (ethtool_value) */
3834 #define VKI_ETHTOOL_STSO    0x0000001f /* Set TSO enable (ethtool_value) */
3835 #define VKI_ETHTOOL_GPERMADDR   0x00000020 /* Get permanent hardware address */
3836 #define VKI_ETHTOOL_GUFO    0x00000021 /* Get UFO enable (ethtool_value) */
3837 #define VKI_ETHTOOL_SUFO    0x00000022 /* Set UFO enable (ethtool_value) */
3838 #define VKI_ETHTOOL_GGSO    0x00000023 /* Get GSO enable (ethtool_value) */
3839 #define VKI_ETHTOOL_SGSO    0x00000024 /* Set GSO enable (ethtool_value) */
3840 #define VKI_ETHTOOL_GFLAGS  0x00000025 /* Get flags bitmap(ethtool_value) */
3841 #define VKI_ETHTOOL_SFLAGS  0x00000026 /* Set flags bitmap(ethtool_value) */
3842 #define VKI_ETHTOOL_GGRO    0x0000002b /* Get GRO enable (ethtool_value) */
3843 #define VKI_ETHTOOL_SGRO    0x0000002c /* Set GRO enable (ethtool_value) */
3844 #define VKI_ETHTOOL_RESET   0x00000034 /* Reset hardware */
3845 #define VKI_ETHTOOL_GSSET_INFO  0x00000037 /* Get string set info */
3846 #define VKI_ETHTOOL_GFEATURES   0x0000003a /* Get device offload settings */
3847 #define VKI_ETHTOOL_SFEATURES   0x0000003b /* Change device offload settings */
3848 #define VKI_ETHTOOL_GCHANNELS   0x0000003c /* Get no of channels */
3849 #define VKI_ETHTOOL_SCHANNELS   0x0000003d /* Set no of channels */
3850 #define VKI_ETHTOOL_GET_TS_INFO 0x00000041 /* Get time stamping and PHC info */
3851 
3852 //----------------------------------------------------------------------
3853 // From linux-3.15.8/drivers/staging/android/uapi/ion.h
3854 //----------------------------------------------------------------------
3855 
3856 typedef int vki_ion_user_handle_t;
3857 
3858 struct vki_ion_allocation_data {
3859         vki_size_t len;
3860         vki_size_t align;
3861         unsigned int heap_id_mask;
3862         unsigned int flags;
3863         vki_ion_user_handle_t handle;
3864 };
3865 
3866 struct vki_ion_fd_data {
3867         vki_ion_user_handle_t handle;
3868         int fd;
3869 };
3870 
3871 struct vki_ion_handle_data {
3872         vki_ion_user_handle_t handle;
3873 };
3874 
3875 struct vki_ion_custom_data {
3876         unsigned int cmd;
3877         unsigned long arg;
3878 };
3879 
3880 #define VKI_ION_IOC_MAGIC   'I'
3881 
3882 #define VKI_ION_IOC_ALLOC \
3883    _VKI_IOWR(VKI_ION_IOC_MAGIC, 0, struct vki_ion_allocation_data)
3884 
3885 #define VKI_ION_IOC_FREE \
3886    _VKI_IOWR(VKI_ION_IOC_MAGIC, 1, struct vki_ion_handle_data)
3887 
3888 #define VKI_ION_IOC_MAP \
3889    _VKI_IOWR(VKI_ION_IOC_MAGIC, 2, struct vki_ion_fd_data)
3890 
3891 #define VKI_ION_IOC_SHARE \
3892    _VKI_IOWR(VKI_ION_IOC_MAGIC, 4, struct vki_ion_fd_data)
3893 
3894 #define VKI_ION_IOC_IMPORT \
3895    _VKI_IOWR(VKI_ION_IOC_MAGIC, 5, struct vki_ion_fd_data)
3896 
3897 #define VKI_ION_IOC_SYNC \
3898    _VKI_IOWR(VKI_ION_IOC_MAGIC, 7, struct vki_ion_fd_data)
3899 
3900 #define VKI_ION_IOC_CUSTOM \
3901    _VKI_IOWR(VKI_ION_IOC_MAGIC, 6, struct vki_ion_custom_data)
3902 
3903 //----------------------------------------------------------------------
3904 // From include/uapi/linux/sync_file.h 6.10.3
3905 //----------------------------------------------------------------------
3906 
3907 struct vki_sync_merge_data {
3908         char      name[32];
3909         __vki_s32 fd2;
3910         __vki_s32 fence;
3911         __vki_u32 flags;
3912     __vki_u32 pad;
3913 };
3914 
3915 struct vki_sync_fence_info {
3916         char      obj_name[32];
3917         char      driver_name[32];
3918         __vki_s32 status;
3919         __vki_u32 flags;
3920     __vki_u64 timestamp_ns;
3921 };
3922 
3923 struct vki_sync_file_info {
3924         char      name[32];
3925         __vki_s32 status;
3926         __vki_u32 flags;
3927         __vki_u32 num_fences;
3928         __vki_u32 pad;
3929     __vki_u64 sync_fence_info;
3930 };
3931 
3932 struct vki_sync_set_deadline {
3933     __vki_u64 deadline_ns;
3934     __vki_u64 pad;
3935 };
3936 
3937 #define VKI_SYNC_IOC_MAGIC   '>'
3938 
3939 #define VKI_SYNC_IOC_WAIT \
3940    _VKI_IOW(VKI_SYNC_IOC_MAGIC, 0, __vki_s32)
3941 
3942 #define VKI_SYNC_IOC_MERGE \
3943    _VKI_IOWR(VKI_SYNC_IOC_MAGIC, 3, struct vki_sync_merge_data)
3944 
3945 #define VKI_SYNC_IOC_FILE_INFO \
3946    _VKI_IOWR(VKI_SYNC_IOC_MAGIC, 4, struct vki_sync_file_info)
3947 
3948 #define VKI_SYNC_IOC_SET_DEADLINE \
3949    _VKI_IOW(VKI_SYNC_IOC_MAGIC, 5, struct vki_sync_set_deadline)
3950 
3951 //----------------------------------------------------------------------
3952 // From drivers/staging/lustre/lustre/include/lustre/lustre_user.h
3953 //----------------------------------------------------------------------
3954 
3955 struct vki_lu_fid {
3956     __vki_u64   f_seq;
3957     __vki_u32   f_oid;
3958     __vki_u32   f_ver;
3959 };
3960 
3961 //----------------------------------------------------------------------
3962 // From drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
3963 //----------------------------------------------------------------------
3964 
3965 struct vki_getinfo_fid2path {
3966     struct vki_lu_fid   gf_fid;
3967     __vki_u64       gf_recno;
3968     __vki_u32       gf_linkno;
3969     __vki_u32       gf_pathlen;
3970     char            gf_path[0];
3971 } __attribute__((packed));
3972 
3973 //----------------------------------------------------------------------
3974 // From drivers/staging/lustre/lustre/include/linux/lustre_lib.h
3975 //----------------------------------------------------------------------
3976 
3977 #define VKI_OBD_IOC_DATA_TYPE               long
3978 
3979 //----------------------------------------------------------------------
3980 // From drivers/staging/lustre/lustre/include/lustre_lib.h
3981 //----------------------------------------------------------------------
3982 
3983 #define VKI_OBD_IOC_FID2PATH \
3984            _VKI_IOWR ('f', 150, VKI_OBD_IOC_DATA_TYPE)
3985 #define VKI_LL_IOC_PATH2FID \
3986            _VKI_IOR ('f', 173, long)
3987 
3988 //----------------------------------------------------------------------
3989 // From lustre/include/lustre/lustre_idl.h
3990 //----------------------------------------------------------------------
3991 
3992 struct vki_getparent {
3993     struct vki_lu_fid   gp_fid;
3994     __vki_u32       gp_linkno;
3995     __vki_u32       gp_name_size;
3996     char            gp_name[0];
3997 } __attribute__((packed));
3998 
3999 //----------------------------------------------------------------------
4000 // From Lustre's lustre/include/lustre/lustre_user.h
4001 //----------------------------------------------------------------------
4002 #define VKI_LL_IOC_GROUP_LOCK \
4003            _VKI_IOW('f', 158, long)
4004 #define VKI_LL_IOC_GROUP_UNLOCK \
4005            _VKI_IOW('f', 159, long)
4006 #define VKI_LL_IOC_GETPARENT \
4007            _VKI_IOWR('f', 249, struct vki_getparent)
4008 
4009 
4010 struct vki_v4l2_rect {
4011     __vki_s32   left;
4012     __vki_s32   top;
4013     __vki_u32   width;
4014     __vki_u32   height;
4015 };
4016 
4017 struct vki_v4l2_fract {
4018     __vki_u32   numerator;
4019     __vki_u32   denominator;
4020 };
4021 
4022 struct vki_v4l2_capability {
4023     __vki_u8    driver[16];
4024     __vki_u8    card[32];
4025     __vki_u8    bus_info[32];
4026     __vki_u32   version;
4027     __vki_u32   capabilities;
4028     __vki_u32   device_caps;
4029     __vki_u32   reserved[3];
4030 };
4031 
4032 struct vki_v4l2_pix_format {
4033     __vki_u32               width;
4034     __vki_u32           height;
4035     __vki_u32           pixelformat;
4036     __vki_u32           field;      /* enum vki_v4l2_field */
4037     __vki_u32               bytesperline;   /* for padding, zero if unused */
4038     __vki_u32               sizeimage;
4039     __vki_u32           colorspace; /* enum vki_v4l2_colorspace */
4040     __vki_u32           priv;       /* private data, depends on pixelformat */
4041     __vki_u32           flags;      /* format flags (VKI_V4L2_PIX_FMT_FLAG_*) */
4042     __vki_u32           ycbcr_enc;
4043     __vki_u32           quantization;
4044 };
4045 
4046 struct vki_v4l2_fmtdesc {
4047     __vki_u32           index;             /* Format number      */
4048     __vki_u32           type;              /* enum vki_v4l2_buf_type */
4049     __vki_u32               flags;
4050     __vki_u8            description[32];   /* Description string */
4051     __vki_u32           pixelformat;       /* Format fourcc      */
4052     __vki_u32           reserved[4];
4053 };
4054 
4055 struct vki_v4l2_frmsize_discrete {
4056     __vki_u32           width;      /* Frame width [pixel] */
4057     __vki_u32           height;     /* Frame height [pixel] */
4058 };
4059 
4060 struct vki_v4l2_frmsize_stepwise {
4061     __vki_u32           min_width;  /* Minimum frame width [pixel] */
4062     __vki_u32           max_width;  /* Maximum frame width [pixel] */
4063     __vki_u32           step_width; /* Frame width step size [pixel] */
4064     __vki_u32           min_height; /* Minimum frame height [pixel] */
4065     __vki_u32           max_height; /* Maximum frame height [pixel] */
4066     __vki_u32           step_height;    /* Frame height step size [pixel] */
4067 };
4068 
4069 struct vki_v4l2_frmsizeenum {
4070     __vki_u32           index;      /* Frame size number */
4071     __vki_u32           pixel_format;   /* Pixel format */
4072     __vki_u32           type;       /* Frame size type the device supports. */
4073 
4074     union {                 /* Frame size */
4075         struct vki_v4l2_frmsize_discrete    discrete;
4076         struct vki_v4l2_frmsize_stepwise    stepwise;
4077     };
4078 
4079     __vki_u32   reserved[2];            /* Reserved space for future use */
4080 };
4081 
4082 struct vki_v4l2_frmival_stepwise {
4083     struct vki_v4l2_fract   min;
4084     struct vki_v4l2_fract   max;
4085     struct vki_v4l2_fract   step;
4086 };
4087 
4088 struct vki_v4l2_frmivalenum {
4089     __vki_u32           index;
4090     __vki_u32           pixel_format;
4091     __vki_u32           width;
4092     __vki_u32           height;
4093     __vki_u32           type;
4094 
4095     union {
4096         struct vki_v4l2_fract       discrete;
4097         struct vki_v4l2_frmival_stepwise    stepwise;
4098     };
4099 
4100     __vki_u32   reserved[2];
4101 };
4102 
4103 struct vki_v4l2_timecode {
4104     __vki_u32   type;
4105     __vki_u32   flags;
4106     __vki_u8    frames;
4107     __vki_u8    seconds;
4108     __vki_u8    minutes;
4109     __vki_u8    hours;
4110     __vki_u8    userbits[4];
4111 };
4112 
4113 struct vki_v4l2_jpegcompression {
4114     int quality;
4115     int  APPn;
4116     int  APP_len;
4117     char APP_data[60];
4118     int  COM_len;
4119     char COM_data[60];
4120     __vki_u32 jpeg_markers;
4121 };
4122 
4123 struct vki_v4l2_requestbuffers {
4124     __vki_u32           count;
4125     __vki_u32           type;
4126     __vki_u32           memory;
4127     __vki_u32           reserved[2];
4128 };
4129 
4130 struct vki_v4l2_plane {
4131     __vki_u32           bytesused;
4132     __vki_u32           length;
4133     union {
4134         __vki_u32       mem_offset;
4135         unsigned long   userptr;
4136         __vki_s32       fd;
4137     } m;
4138     __vki_u32           data_offset;
4139     __vki_u32           reserved[11];
4140 };
4141 
4142 #define VKI_V4L2_MEMORY_MMAP             1
4143 #define VKI_V4L2_MEMORY_DMABUF           4
4144 #define VKI_V4L2_BUF_FLAG_TIMESTAMP_MASK        0x0000e000
4145 #define VKI_V4L2_BUF_FLAG_TIMESTAMP_COPY        0x00004000
4146 struct vki_v4l2_buffer {
4147     __vki_u32           index;
4148     __vki_u32           type;
4149     __vki_u32           bytesused;
4150     __vki_u32           flags;
4151     __vki_u32           field;
4152     struct vki_timeval      timestamp;
4153     struct vki_v4l2_timecode    timecode;
4154     __vki_u32           sequence;
4155 
4156     /* memory location */
4157     __vki_u32           memory;
4158     union {
4159         __vki_u32           offset;
4160         unsigned long   userptr;
4161         struct vki_v4l2_plane *planes;
4162         __vki_s32       fd;
4163     } m;
4164     __vki_u32           length;
4165     __vki_u32           reserved2;
4166     __vki_u32           reserved;
4167 };
4168 
4169 struct vki_v4l2_exportbuffer {
4170     __vki_u32       type; /* enum vki_v4l2_buf_type */
4171     __vki_u32       index;
4172     __vki_u32       plane;
4173     __vki_u32       flags;
4174     __vki_s32       fd;
4175     __vki_u32       reserved[11];
4176 };
4177 
4178 struct vki_v4l2_framebuffer {
4179     __vki_u32           capability;
4180     __vki_u32           flags;
4181     void                    *base;
4182     struct {
4183         __vki_u32       width;
4184         __vki_u32       height;
4185         __vki_u32       pixelformat;
4186         __vki_u32       field;      /* enum vki_v4l2_field */
4187         __vki_u32       bytesperline;   /* for padding, zero if unused */
4188         __vki_u32       sizeimage;
4189         __vki_u32       colorspace; /* enum vki_v4l2_colorspace */
4190         __vki_u32       priv;       /* reserved field, set to 0 */
4191     } fmt;
4192 };
4193 
4194 struct vki_v4l2_clip {
4195     struct vki_v4l2_rect        c;
4196     struct vki_v4l2_clip    __user *next;
4197 };
4198 
4199 struct vki_v4l2_window {
4200     struct vki_v4l2_rect        w;
4201     __vki_u32           field;   /* enum vki_v4l2_field */
4202     __vki_u32           chromakey;
4203     struct vki_v4l2_clip    __user *clips;
4204     __vki_u32           clipcount;
4205     void            __user *bitmap;
4206     __vki_u8                    global_alpha;
4207 };
4208 
4209 struct vki_v4l2_captureparm {
4210     __vki_u32          capability;    /*  Supported modes */
4211     __vki_u32          capturemode;   /*  Current mode */
4212     struct vki_v4l2_fract  timeperframe;  /*  Time per frame in seconds */
4213     __vki_u32          extendedmode;  /*  Driver-specific extensions */
4214     __vki_u32              readbuffers;   /*  # of buffers for read */
4215     __vki_u32          reserved[4];
4216 };
4217 
4218 struct vki_v4l2_outputparm {
4219     __vki_u32          capability;   /*  Supported modes */
4220     __vki_u32          outputmode;   /*  Current mode */
4221     struct vki_v4l2_fract  timeperframe; /*  Time per frame in seconds */
4222     __vki_u32          extendedmode; /*  Driver-specific extensions */
4223     __vki_u32              writebuffers; /*  # of buffers for write */
4224     __vki_u32          reserved[4];
4225 };
4226 
4227 struct vki_v4l2_cropcap {
4228     __vki_u32           type;   /* enum vki_v4l2_buf_type */
4229     struct vki_v4l2_rect        bounds;
4230     struct vki_v4l2_rect        defrect;
4231     struct vki_v4l2_fract       pixelaspect;
4232 };
4233 
4234 struct vki_v4l2_crop {
4235     __vki_u32           type;   /* enum vki_v4l2_buf_type */
4236     struct vki_v4l2_rect        c;
4237 };
4238 
4239 struct vki_v4l2_selection {
4240     __vki_u32           type;
4241     __vki_u32           target;
4242     __vki_u32                   flags;
4243     struct vki_v4l2_rect        r;
4244     __vki_u32                   reserved[9];
4245 };
4246 
4247 typedef __vki_u64 vki_v4l2_std_id;
4248 
4249 struct vki_v4l2_standard {
4250     __vki_u32            index;
4251     vki_v4l2_std_id          id;
4252     __vki_u8             name[24];
4253     struct vki_v4l2_fract    frameperiod; /* Frames, not fields */
4254     __vki_u32            framelines;
4255     __vki_u32            reserved[4];
4256 };
4257 
4258 struct vki_v4l2_bt_timings {
4259     __vki_u32   width;
4260     __vki_u32   height;
4261     __vki_u32   interlaced;
4262     __vki_u32   polarities;
4263     __vki_u64   pixelclock;
4264     __vki_u32   hfrontporch;
4265     __vki_u32   hsync;
4266     __vki_u32   hbackporch;
4267     __vki_u32   vfrontporch;
4268     __vki_u32   vsync;
4269     __vki_u32   vbackporch;
4270     __vki_u32   il_vfrontporch;
4271     __vki_u32   il_vsync;
4272     __vki_u32   il_vbackporch;
4273     __vki_u32   standards;
4274     __vki_u32   flags;
4275     __vki_u32   reserved[14];
4276 } __attribute__ ((packed));
4277 
4278 struct vki_v4l2_dv_timings {
4279     __vki_u32 type;
4280     union {
4281         struct vki_v4l2_bt_timings  bt;
4282         __vki_u32   reserved[32];
4283     };
4284 } __attribute__ ((packed));
4285 
4286 struct vki_v4l2_enum_dv_timings {
4287     __vki_u32 index;
4288     __vki_u32 pad;
4289     __vki_u32 reserved[2];
4290     struct vki_v4l2_dv_timings timings;
4291 };
4292 
4293 struct vki_v4l2_bt_timings_cap {
4294     __vki_u32   min_width;
4295     __vki_u32   max_width;
4296     __vki_u32   min_height;
4297     __vki_u32   max_height;
4298     __vki_u64   min_pixelclock;
4299     __vki_u64   max_pixelclock;
4300     __vki_u32   standards;
4301     __vki_u32   capabilities;
4302     __vki_u32   reserved[16];
4303 } __attribute__ ((packed));
4304 
4305 struct vki_v4l2_dv_timings_cap {
4306     __vki_u32 type;
4307     __vki_u32 pad;
4308     __vki_u32 reserved[2];
4309     union {
4310         struct vki_v4l2_bt_timings_cap bt;
4311         __vki_u32 raw_data[32];
4312     };
4313 };
4314 
4315 struct vki_v4l2_input {
4316     __vki_u32        index;     /*  Which input */
4317     __vki_u8         name[32];      /*  Label */
4318     __vki_u32        type;      /*  Type of input */
4319     __vki_u32        audioset;      /*  Associated audios (bitfield) */
4320     __vki_u32        tuner;             /*  enum vki_v4l2_tuner_type */
4321     vki_v4l2_std_id  std;
4322     __vki_u32        status;
4323     __vki_u32        capabilities;
4324     __vki_u32        reserved[3];
4325 };
4326 
4327 struct vki_v4l2_output {
4328     __vki_u32        index;     /*  Which output */
4329     __vki_u8         name[32];      /*  Label */
4330     __vki_u32        type;      /*  Type of output */
4331     __vki_u32        audioset;      /*  Associated audios (bitfield) */
4332     __vki_u32        modulator;         /*  Associated modulator */
4333     vki_v4l2_std_id  std;
4334     __vki_u32        capabilities;
4335     __vki_u32        reserved[3];
4336 };
4337 
4338 struct vki_v4l2_control {
4339     __vki_u32            id;
4340     __vki_s32            value;
4341 };
4342 
4343 struct vki_v4l2_ext_control {
4344     __vki_u32 id;
4345     __vki_u32 size;
4346     __vki_u32 reserved2[1];
4347     union {
4348         __vki_s32 value;
4349         __vki_s64 value64;
4350         char *string;
4351         __vki_u8 *p_u8;
4352         __vki_u16 *p_u16;
4353         __vki_u32 *p_u32;
4354         void *ptr;
4355     };
4356 } __attribute__ ((packed));
4357 
4358 struct vki_v4l2_ext_controls {
4359     __vki_u32 ctrl_class;
4360     __vki_u32 count;
4361     __vki_u32 error_idx;
4362     __vki_u32 reserved[2];
4363     struct vki_v4l2_ext_control *controls;
4364 };
4365 
4366 struct vki_v4l2_queryctrl {
4367     __vki_u32            id;
4368     __vki_u32            type;  /* enum vki_v4l2_ctrl_type */
4369     __vki_u8             name[32];  /* Whatever */
4370     __vki_s32            minimum;   /* Note signedness */
4371     __vki_s32            maximum;
4372     __vki_s32            step;
4373     __vki_s32            default_value;
4374     __vki_u32                flags;
4375     __vki_u32            reserved[2];
4376 };
4377 
4378 #define VKI_V4L2_CTRL_MAX_DIMS    (4)
4379 struct vki_v4l2_query_ext_ctrl {
4380     __vki_u32            id;
4381     __vki_u32            type;
4382     char             name[32];
4383     __vki_s64            minimum;
4384     __vki_s64            maximum;
4385     __vki_u64            step;
4386     __vki_s64            default_value;
4387     __vki_u32                flags;
4388     __vki_u32                elem_size;
4389     __vki_u32                elems;
4390     __vki_u32                nr_of_dims;
4391     __vki_u32                dims[VKI_V4L2_CTRL_MAX_DIMS];
4392     __vki_u32            reserved[32];
4393 };
4394 
4395 struct vki_v4l2_querymenu {
4396     __vki_u32       id;
4397     __vki_u32       index;
4398     union {
4399         __vki_u8    name[32];   /* Whatever */
4400         __vki_s64   value;
4401     };
4402     __vki_u32       reserved;
4403 } __attribute__ ((packed));
4404 
4405 struct vki_v4l2_tuner {
4406     __vki_u32                   index;
4407     __vki_u8            name[32];
4408     __vki_u32           type;   /* enum vki_v4l2_tuner_type */
4409     __vki_u32           capability;
4410     __vki_u32           rangelow;
4411     __vki_u32           rangehigh;
4412     __vki_u32           rxsubchans;
4413     __vki_u32           audmode;
4414     __vki_s32           signal;
4415     __vki_s32           afc;
4416     __vki_u32           reserved[4];
4417 };
4418 
4419 struct vki_v4l2_modulator {
4420     __vki_u32           index;
4421     __vki_u8            name[32];
4422     __vki_u32           capability;
4423     __vki_u32           rangelow;
4424     __vki_u32           rangehigh;
4425     __vki_u32           txsubchans;
4426     __vki_u32           reserved[4];
4427 };
4428 
4429 struct vki_v4l2_frequency {
4430     __vki_u32   tuner;
4431     __vki_u32   type;   /* enum vki_v4l2_tuner_type */
4432     __vki_u32   frequency;
4433     __vki_u32   reserved[8];
4434 };
4435 
4436 struct vki_v4l2_frequency_band {
4437     __vki_u32   tuner;
4438     __vki_u32   type;   /* enum vki_v4l2_tuner_type */
4439     __vki_u32   index;
4440     __vki_u32   capability;
4441     __vki_u32   rangelow;
4442     __vki_u32   rangehigh;
4443     __vki_u32   modulation;
4444     __vki_u32   reserved[9];
4445 };
4446 
4447 struct vki_v4l2_hw_freq_seek {
4448     __vki_u32   tuner;
4449     __vki_u32   type;   /* enum vki_v4l2_tuner_type */
4450     __vki_u32   seek_upward;
4451     __vki_u32   wrap_around;
4452     __vki_u32   spacing;
4453     __vki_u32   rangelow;
4454     __vki_u32   rangehigh;
4455     __vki_u32   reserved[5];
4456 };
4457 
4458 struct vki_v4l2_audio {
4459     __vki_u32   index;
4460     __vki_u8    name[32];
4461     __vki_u32   capability;
4462     __vki_u32   mode;
4463     __vki_u32   reserved[2];
4464 };
4465 
4466 struct vki_v4l2_audioout {
4467     __vki_u32   index;
4468     __vki_u8    name[32];
4469     __vki_u32   capability;
4470     __vki_u32   mode;
4471     __vki_u32   reserved[2];
4472 };
4473 
4474 struct vki_v4l2_enc_idx_entry {
4475     __vki_u64 offset;
4476     __vki_u64 pts;
4477     __vki_u32 length;
4478     __vki_u32 flags;
4479     __vki_u32 reserved[2];
4480 };
4481 
4482 #define VKI_V4L2_ENC_IDX_ENTRIES (64)
4483 struct vki_v4l2_enc_idx {
4484     __vki_u32 entries;
4485     __vki_u32 entries_cap;
4486     __vki_u32 reserved[4];
4487     struct vki_v4l2_enc_idx_entry entry[VKI_V4L2_ENC_IDX_ENTRIES];
4488 };
4489 
4490 struct vki_v4l2_encoder_cmd {
4491     __vki_u32 cmd;
4492     __vki_u32 flags;
4493     union {
4494         struct {
4495             __vki_u32 data[8];
4496         } raw;
4497     };
4498 };
4499 
4500 struct vki_v4l2_decoder_cmd {
4501     __vki_u32 cmd;
4502     __vki_u32 flags;
4503     union {
4504         struct {
4505             __vki_u64 pts;
4506         } stop;
4507 
4508         struct {
4509             __vki_s32 speed;
4510             __vki_u32 format;
4511         } start;
4512 
4513         struct {
4514             __vki_u32 data[16];
4515         } raw;
4516     };
4517 };
4518 
4519 struct vki_v4l2_vbi_format {
4520     __vki_u32   sampling_rate;      /* in 1 Hz */
4521     __vki_u32   offset;
4522     __vki_u32   samples_per_line;
4523     __vki_u32   sample_format;      /* VKI_V4L2_PIX_FMT_* */
4524     __vki_s32   start[2];
4525     __vki_u32   count[2];
4526     __vki_u32   flags;          /* VKI_V4L2_VBI_* */
4527     __vki_u32   reserved[2];        /* must be zero */
4528 };
4529 
4530 struct vki_v4l2_sliced_vbi_format {
4531     __vki_u16   service_set;
4532     __vki_u16   service_lines[2][24];
4533     __vki_u32   io_size;
4534     __vki_u32   reserved[2];            /* must be zero */
4535 };
4536 
4537 struct vki_v4l2_sliced_vbi_cap {
4538     __vki_u16   service_set;
4539     __vki_u16   service_lines[2][24];
4540     __vki_u32   type;       /* enum vki_v4l2_buf_type */
4541     __vki_u32   reserved[3];    /* must be 0 */
4542 };
4543 
4544 struct vki_v4l2_sliced_vbi_data {
4545     __vki_u32   id;
4546     __vki_u32   field;          /* 0: first field, 1: second field */
4547     __vki_u32   line;           /* 1-23 */
4548     __vki_u32   reserved;       /* must be 0 */
4549     __vki_u8    data[48];
4550 };
4551 
4552 struct vki_v4l2_plane_pix_format {
4553     __vki_u32       sizeimage;
4554     __vki_u32       bytesperline;
4555     __vki_u16       reserved[6];
4556 } __attribute__ ((packed));
4557 
4558 #define VKI_VIDEO_MAX_PLANES               8
4559 
4560 struct vki_v4l2_pix_format_mplane {
4561     __vki_u32               width;
4562     __vki_u32               height;
4563     __vki_u32               pixelformat;
4564     __vki_u32               field;
4565     __vki_u32               colorspace;
4566 
4567     struct vki_v4l2_plane_pix_format    plane_fmt[VKI_VIDEO_MAX_PLANES];
4568     __vki_u8                num_planes;
4569     __vki_u8                flags;
4570     __vki_u8                ycbcr_enc;
4571     __vki_u8                quantization;
4572     __vki_u8                reserved[8];
4573 } __attribute__ ((packed));
4574 
4575 struct vki_v4l2_sdr_format {
4576     __vki_u32               pixelformat;
4577     __vki_u32               buffersize;
4578     __vki_u8                reserved[24];
4579 } __attribute__ ((packed));
4580 
4581 enum vki_v4l2_buf_type {
4582     VKI_V4L2_BUF_TYPE_VIDEO_CAPTURE        = 1,
4583     VKI_V4L2_BUF_TYPE_VIDEO_OUTPUT         = 2,
4584     VKI_V4L2_BUF_TYPE_VIDEO_OVERLAY        = 3,
4585     VKI_V4L2_BUF_TYPE_VBI_CAPTURE          = 4,
4586     VKI_V4L2_BUF_TYPE_VBI_OUTPUT           = 5,
4587     VKI_V4L2_BUF_TYPE_SLICED_VBI_CAPTURE   = 6,
4588     VKI_V4L2_BUF_TYPE_SLICED_VBI_OUTPUT    = 7,
4589     VKI_V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY = 8,
4590     VKI_V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE = 9,
4591     VKI_V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE  = 10,
4592     VKI_V4L2_BUF_TYPE_SDR_CAPTURE          = 11,
4593 };
4594 
4595 struct vki_v4l2_format {
4596     __vki_u32    type;
4597     union {
4598         struct vki_v4l2_pix_format      pix;
4599         struct vki_v4l2_pix_format_mplane   pix_mp;
4600         struct vki_v4l2_window      win;
4601         struct vki_v4l2_vbi_format      vbi;
4602         struct vki_v4l2_sliced_vbi_format   sliced;
4603         struct vki_v4l2_sdr_format      sdr;
4604         __vki_u8    raw_data[200];
4605     } fmt;
4606 };
4607 
4608 struct vki_v4l2_streamparm {
4609     __vki_u32    type;
4610     union {
4611         struct vki_v4l2_captureparm capture;
4612         struct vki_v4l2_outputparm  output;
4613         __vki_u8    raw_data[200];  /* user-defined */
4614     } parm;
4615 };
4616 
4617 struct vki_v4l2_event_vsync {
4618     __vki_u8 field;
4619 } __attribute__ ((packed));
4620 
4621 struct vki_v4l2_event_ctrl {
4622     __vki_u32 changes;
4623     __vki_u32 type;
4624     union {
4625         __vki_s32 value;
4626         __vki_s64 value64;
4627     };
4628     __vki_u32 flags;
4629     __vki_s32 minimum;
4630     __vki_s32 maximum;
4631     __vki_s32 step;
4632     __vki_s32 default_value;
4633 };
4634 
4635 struct vki_v4l2_event_frame_sync {
4636     __vki_u32 frame_sequence;
4637 };
4638 
4639 struct vki_v4l2_event_src_change {
4640     __vki_u32 changes;
4641 };
4642 
4643 struct vki_v4l2_event_motion_det {
4644     __vki_u32 flags;
4645     __vki_u32 frame_sequence;
4646     __vki_u32 region_mask;
4647 };
4648 
4649 struct vki_v4l2_event {
4650     __vki_u32               type;
4651     union {
4652         struct vki_v4l2_event_vsync     vsync;
4653         struct vki_v4l2_event_ctrl      ctrl;
4654         struct vki_v4l2_event_frame_sync    frame_sync;
4655         struct vki_v4l2_event_src_change    src_change;
4656         struct vki_v4l2_event_motion_det    motion_det;
4657         __vki_u8                data[64];
4658     } u;
4659     __vki_u32               pending;
4660     __vki_u32               sequence;
4661     struct vki_timespec         timestamp;
4662     __vki_u32               id;
4663     __vki_u32               reserved[8];
4664 };
4665 
4666 struct vki_v4l2_event_subscription {
4667     __vki_u32               type;
4668     __vki_u32               id;
4669     __vki_u32               flags;
4670     __vki_u32               reserved[5];
4671 };
4672 
4673 struct vki_v4l2_dbg_match {
4674     __vki_u32 type; /* Match type */
4675     union {     /* Match this chip, meaning determined by type */
4676         __vki_u32 addr;
4677         char name[32];
4678     };
4679 } __attribute__ ((packed));
4680 
4681 struct vki_v4l2_dbg_register {
4682     struct vki_v4l2_dbg_match match;
4683     __vki_u32 size; /* register size in bytes */
4684     __vki_u64 reg;
4685     __vki_u64 val;
4686 } __attribute__ ((packed));
4687 
4688 struct vki_v4l2_dbg_chip_info {
4689     struct vki_v4l2_dbg_match match;
4690     char name[32];
4691     __vki_u32 flags;
4692     __vki_u32 reserved[32];
4693 } __attribute__ ((packed));
4694 
4695 struct vki_v4l2_create_buffers {
4696     __vki_u32           index;
4697     __vki_u32           count;
4698     __vki_u32           memory;
4699     struct vki_v4l2_format  format;
4700     __vki_u32           reserved[8];
4701 };
4702 
4703 struct vki_v4l2_edid {
4704     __vki_u32 pad;
4705     __vki_u32 start_block;
4706     __vki_u32 blocks;
4707     __vki_u32 reserved[5];
4708     __vki_u8  *edid;
4709 };
4710 
4711 #define VKI_V4L2_QUERYCAP       _VKI_IOR('V',  0, struct vki_v4l2_capability)
4712 #define VKI_V4L2_ENUM_FMT       _VKI_IOWR('V',  2, struct vki_v4l2_fmtdesc)
4713 #define VKI_V4L2_G_FMT          _VKI_IOWR('V',  4, struct vki_v4l2_format)
4714 #define VKI_V4L2_S_FMT          _VKI_IOWR('V',  5, struct vki_v4l2_format)
4715 #define VKI_V4L2_REQBUFS        _VKI_IOWR('V',  8, struct vki_v4l2_requestbuffers)
4716 #define VKI_V4L2_QUERYBUF       _VKI_IOWR('V',  9, struct vki_v4l2_buffer)
4717 #define VKI_V4L2_G_FBUF         _VKI_IOR('V', 10, struct vki_v4l2_framebuffer)
4718 #define VKI_V4L2_S_FBUF         _VKI_IOW('V', 11, struct vki_v4l2_framebuffer)
4719 #define VKI_V4L2_OVERLAY        _VKI_IOW('V', 14, int)
4720 #define VKI_V4L2_QBUF           _VKI_IOWR('V', 15, struct vki_v4l2_buffer)
4721 #define VKI_V4L2_EXPBUF         _VKI_IOWR('V', 16, struct vki_v4l2_exportbuffer)
4722 #define VKI_V4L2_DQBUF          _VKI_IOWR('V', 17, struct vki_v4l2_buffer)
4723 #define VKI_V4L2_STREAMON       _VKI_IOW('V', 18, int)
4724 #define VKI_V4L2_STREAMOFF      _VKI_IOW('V', 19, int)
4725 #define VKI_V4L2_G_PARM         _VKI_IOWR('V', 21, struct vki_v4l2_streamparm)
4726 #define VKI_V4L2_S_PARM         _VKI_IOWR('V', 22, struct vki_v4l2_streamparm)
4727 #define VKI_V4L2_G_STD          _VKI_IOR('V', 23, vki_v4l2_std_id)
4728 #define VKI_V4L2_S_STD          _VKI_IOW('V', 24, vki_v4l2_std_id)
4729 #define VKI_V4L2_ENUMSTD        _VKI_IOWR('V', 25, struct vki_v4l2_standard)
4730 #define VKI_V4L2_ENUMINPUT      _VKI_IOWR('V', 26, struct vki_v4l2_input)
4731 #define VKI_V4L2_G_CTRL         _VKI_IOWR('V', 27, struct vki_v4l2_control)
4732 #define VKI_V4L2_S_CTRL         _VKI_IOWR('V', 28, struct vki_v4l2_control)
4733 #define VKI_V4L2_G_TUNER        _VKI_IOWR('V', 29, struct vki_v4l2_tuner)
4734 #define VKI_V4L2_S_TUNER        _VKI_IOW('V', 30, struct vki_v4l2_tuner)
4735 #define VKI_V4L2_G_AUDIO        _VKI_IOR('V', 33, struct vki_v4l2_audio)
4736 #define VKI_V4L2_S_AUDIO        _VKI_IOW('V', 34, struct vki_v4l2_audio)
4737 #define VKI_V4L2_QUERYCTRL      _VKI_IOWR('V', 36, struct vki_v4l2_queryctrl)
4738 #define VKI_V4L2_QUERYMENU      _VKI_IOWR('V', 37, struct vki_v4l2_querymenu)
4739 #define VKI_V4L2_G_INPUT        _VKI_IOR('V', 38, int)
4740 #define VKI_V4L2_S_INPUT        _VKI_IOWR('V', 39, int)
4741 #define VKI_V4L2_G_EDID         _VKI_IOWR('V', 40, struct vki_v4l2_edid)
4742 #define VKI_V4L2_S_EDID         _VKI_IOWR('V', 41, struct vki_v4l2_edid)
4743 #define VKI_V4L2_G_OUTPUT       _VKI_IOR('V', 46, int)
4744 #define VKI_V4L2_S_OUTPUT       _VKI_IOWR('V', 47, int)
4745 #define VKI_V4L2_ENUMOUTPUT     _VKI_IOWR('V', 48, struct vki_v4l2_output)
4746 #define VKI_V4L2_G_AUDOUT       _VKI_IOR('V', 49, struct vki_v4l2_audioout)
4747 #define VKI_V4L2_S_AUDOUT       _VKI_IOW('V', 50, struct vki_v4l2_audioout)
4748 #define VKI_V4L2_G_MODULATOR        _VKI_IOWR('V', 54, struct vki_v4l2_modulator)
4749 #define VKI_V4L2_S_MODULATOR        _VKI_IOW('V', 55, struct vki_v4l2_modulator)
4750 #define VKI_V4L2_G_FREQUENCY        _VKI_IOWR('V', 56, struct vki_v4l2_frequency)
4751 #define VKI_V4L2_S_FREQUENCY        _VKI_IOW('V', 57, struct vki_v4l2_frequency)
4752 #define VKI_V4L2_CROPCAP        _VKI_IOWR('V', 58, struct vki_v4l2_cropcap)
4753 #define VKI_V4L2_G_CROP         _VKI_IOWR('V', 59, struct vki_v4l2_crop)
4754 #define VKI_V4L2_S_CROP         _VKI_IOW('V', 60, struct vki_v4l2_crop)
4755 #define VKI_V4L2_G_JPEGCOMP     _VKI_IOR('V', 61, struct vki_v4l2_jpegcompression)
4756 #define VKI_V4L2_S_JPEGCOMP     _VKI_IOW('V', 62, struct vki_v4l2_jpegcompression)
4757 #define VKI_V4L2_QUERYSTD           _VKI_IOR('V', 63, vki_v4l2_std_id)
4758 #define VKI_V4L2_TRY_FMT            _VKI_IOWR('V', 64, struct vki_v4l2_format)
4759 #define VKI_V4L2_ENUMAUDIO      _VKI_IOWR('V', 65, struct vki_v4l2_audio)
4760 #define VKI_V4L2_ENUMAUDOUT     _VKI_IOWR('V', 66, struct vki_v4l2_audioout)
4761 #define VKI_V4L2_G_PRIORITY     _VKI_IOR('V', 67, __vki_u32)
4762 #define VKI_V4L2_S_PRIORITY     _VKI_IOW('V', 68, __vki_u32)
4763 #define VKI_V4L2_G_SLICED_VBI_CAP   _VKI_IOWR('V', 69, struct vki_v4l2_sliced_vbi_cap)
4764 #define VKI_V4L2_LOG_STATUS         _VKI_IO('V', 70)
4765 #define VKI_V4L2_G_EXT_CTRLS        _VKI_IOWR('V', 71, struct vki_v4l2_ext_controls)
4766 #define VKI_V4L2_S_EXT_CTRLS        _VKI_IOWR('V', 72, struct vki_v4l2_ext_controls)
4767 #define VKI_V4L2_TRY_EXT_CTRLS      _VKI_IOWR('V', 73, struct vki_v4l2_ext_controls)
4768 #define VKI_V4L2_ENUM_FRAMESIZES    _VKI_IOWR('V', 74, struct vki_v4l2_frmsizeenum)
4769 #define VKI_V4L2_ENUM_FRAMEINTERVALS    _VKI_IOWR('V', 75, struct vki_v4l2_frmivalenum)
4770 #define VKI_V4L2_G_ENC_INDEX        _VKI_IOR('V', 76, struct vki_v4l2_enc_idx)
4771 #define VKI_V4L2_ENCODER_CMD        _VKI_IOWR('V', 77, struct vki_v4l2_encoder_cmd)
4772 #define VKI_V4L2_TRY_ENCODER_CMD    _VKI_IOWR('V', 78, struct vki_v4l2_encoder_cmd)
4773 #define VKI_V4L2_DBG_S_REGISTER     _VKI_IOW('V', 79, struct vki_v4l2_dbg_register)
4774 #define VKI_V4L2_DBG_G_REGISTER     _VKI_IOWR('V', 80, struct vki_v4l2_dbg_register)
4775 #define VKI_V4L2_S_HW_FREQ_SEEK     _VKI_IOW('V', 82, struct vki_v4l2_hw_freq_seek)
4776 #define VKI_V4L2_S_DV_TIMINGS       _VKI_IOWR('V', 87, struct vki_v4l2_dv_timings)
4777 #define VKI_V4L2_G_DV_TIMINGS       _VKI_IOWR('V', 88, struct vki_v4l2_dv_timings)
4778 #define VKI_V4L2_DQEVENT        _VKI_IOR('V', 89, struct vki_v4l2_event)
4779 #define VKI_V4L2_SUBSCRIBE_EVENT    _VKI_IOW('V', 90, struct vki_v4l2_event_subscription)
4780 #define VKI_V4L2_UNSUBSCRIBE_EVENT  _VKI_IOW('V', 91, struct vki_v4l2_event_subscription)
4781 #define VKI_V4L2_CREATE_BUFS        _VKI_IOWR('V', 92, struct vki_v4l2_create_buffers)
4782 #define VKI_V4L2_PREPARE_BUF        _VKI_IOWR('V', 93, struct vki_v4l2_buffer)
4783 #define VKI_V4L2_G_SELECTION        _VKI_IOWR('V', 94, struct vki_v4l2_selection)
4784 #define VKI_V4L2_S_SELECTION        _VKI_IOWR('V', 95, struct vki_v4l2_selection)
4785 #define VKI_V4L2_DECODER_CMD        _VKI_IOWR('V', 96, struct vki_v4l2_decoder_cmd)
4786 #define VKI_V4L2_TRY_DECODER_CMD    _VKI_IOWR('V', 97, struct vki_v4l2_decoder_cmd)
4787 #define VKI_V4L2_ENUM_DV_TIMINGS    _VKI_IOWR('V', 98, struct vki_v4l2_enum_dv_timings)
4788 #define VKI_V4L2_QUERY_DV_TIMINGS   _VKI_IOR('V', 99, struct vki_v4l2_dv_timings)
4789 #define VKI_V4L2_DV_TIMINGS_CAP     _VKI_IOWR('V', 100, struct vki_v4l2_dv_timings_cap)
4790 #define VKI_V4L2_ENUM_FREQ_BANDS    _VKI_IOWR('V', 101, struct vki_v4l2_frequency_band)
4791 #define VKI_V4L2_DBG_G_CHIP_INFO    _VKI_IOWR('V', 102, struct vki_v4l2_dbg_chip_info)
4792 #define VKI_V4L2_QUERY_EXT_CTRL     _VKI_IOWR('V', 103, struct vki_v4l2_query_ext_ctrl)
4793 
4794 struct vki_v4l2_mbus_framefmt {
4795     __vki_u32           width;
4796     __vki_u32           height;
4797     __vki_u32           code;
4798     __vki_u32           field;
4799     __vki_u32           colorspace;
4800     __vki_u16           ycbcr_enc;
4801     __vki_u16           quantization;
4802     __vki_u32           reserved[6];
4803 };
4804 
4805 struct vki_v4l2_subdev_format {
4806     __vki_u32 which;
4807     __vki_u32 pad;
4808     struct vki_v4l2_mbus_framefmt format;
4809     __vki_u32 reserved[8];
4810 };
4811 
4812 struct vki_v4l2_subdev_crop {
4813     __vki_u32 which;
4814     __vki_u32 pad;
4815     struct vki_v4l2_rect rect;
4816     __vki_u32 reserved[8];
4817 };
4818 
4819 struct vki_v4l2_subdev_mbus_code_enum {
4820     __vki_u32 pad;
4821     __vki_u32 index;
4822     __vki_u32 code;
4823     __vki_u32 which;
4824     __vki_u32 reserved[8];
4825 };
4826 
4827 struct vki_v4l2_subdev_frame_size_enum {
4828     __vki_u32 index;
4829     __vki_u32 pad;
4830     __vki_u32 code;
4831     __vki_u32 min_width;
4832     __vki_u32 max_width;
4833     __vki_u32 min_height;
4834     __vki_u32 max_height;
4835     __vki_u32 which;
4836     __vki_u32 reserved[8];
4837 };
4838 
4839 struct vki_v4l2_subdev_frame_interval {
4840     __vki_u32 pad;
4841     struct vki_v4l2_fract interval;
4842     __vki_u32 reserved[9];
4843 };
4844 
4845 struct vki_v4l2_subdev_frame_interval_enum {
4846     __vki_u32 index;
4847     __vki_u32 pad;
4848     __vki_u32 code;
4849     __vki_u32 width;
4850     __vki_u32 height;
4851     struct vki_v4l2_fract interval;
4852     __vki_u32 which;
4853     __vki_u32 reserved[8];
4854 };
4855 
4856 struct vki_v4l2_subdev_selection {
4857     __vki_u32 which;
4858     __vki_u32 pad;
4859     __vki_u32 target;
4860     __vki_u32 flags;
4861     struct vki_v4l2_rect r;
4862     __vki_u32 reserved[8];
4863 };
4864 
4865 #define VKI_V4L2_SUBDEV_G_FMT           _VKI_IOWR('V',  4, struct vki_v4l2_subdev_format)
4866 #define VKI_V4L2_SUBDEV_S_FMT           _VKI_IOWR('V',  5, struct vki_v4l2_subdev_format)
4867 #define VKI_V4L2_SUBDEV_G_FRAME_INTERVAL    _VKI_IOWR('V', 21, struct vki_v4l2_subdev_frame_interval)
4868 #define VKI_V4L2_SUBDEV_S_FRAME_INTERVAL    _VKI_IOWR('V', 22, struct vki_v4l2_subdev_frame_interval)
4869 #define VKI_V4L2_SUBDEV_ENUM_MBUS_CODE      _VKI_IOWR('V',  2, struct vki_v4l2_subdev_mbus_code_enum)
4870 #define VKI_V4L2_SUBDEV_ENUM_FRAME_SIZE     _VKI_IOWR('V', 74, struct vki_v4l2_subdev_frame_size_enum)
4871 #define VKI_V4L2_SUBDEV_ENUM_FRAME_INTERVAL _VKI_IOWR('V', 75, struct vki_v4l2_subdev_frame_interval_enum)
4872 #define VKI_V4L2_SUBDEV_G_CROP          _VKI_IOWR('V', 59, struct vki_v4l2_subdev_crop)
4873 #define VKI_V4L2_SUBDEV_S_CROP          _VKI_IOWR('V', 60, struct vki_v4l2_subdev_crop)
4874 #define VKI_V4L2_SUBDEV_G_SELECTION     _VKI_IOWR('V', 61, struct vki_v4l2_subdev_selection)
4875 #define VKI_V4L2_SUBDEV_S_SELECTION     _VKI_IOWR('V', 62, struct vki_v4l2_subdev_selection)
4876 
4877 struct vki_media_device_info {
4878     char driver[16];
4879     char model[32];
4880     char serial[40];
4881     char bus_info[32];
4882     __vki_u32 media_version;
4883     __vki_u32 hw_revision;
4884     __vki_u32 driver_version;
4885     __vki_u32 reserved[31];
4886 };
4887 
4888 struct vki_media_entity_desc {
4889     __vki_u32 id;
4890     char name[32];
4891     __vki_u32 type;
4892     __vki_u32 revision;
4893     __vki_u32 flags;
4894     __vki_u32 group_id;
4895     __vki_u16 pads;
4896     __vki_u16 links;
4897 
4898     __vki_u32 reserved[4];
4899 
4900     union {
4901         /* Node specifications */
4902         struct {
4903             __vki_u32 major;
4904             __vki_u32 minor;
4905         } v4l;
4906         struct {
4907             __vki_u32 major;
4908             __vki_u32 minor;
4909         } fb;
4910         struct {
4911             __vki_u32 card;
4912             __vki_u32 device;
4913             __vki_u32 subdevice;
4914         } alsa;
4915         int dvb;
4916 
4917         /* Sub-device specifications */
4918         /* Nothing needed yet */
4919         __vki_u8 raw[184];
4920     };
4921 };
4922 
4923 struct vki_media_pad_desc {
4924     __vki_u32 entity;       /* entity ID */
4925     __vki_u16 index;        /* pad index */
4926     __vki_u32 flags;        /* pad flags */
4927     __vki_u32 reserved[2];
4928 };
4929 
4930 struct vki_media_link_desc {
4931     struct vki_media_pad_desc source;
4932     struct vki_media_pad_desc sink;
4933     __vki_u32 flags;
4934     __vki_u32 reserved[2];
4935 };
4936 
4937 struct vki_media_links_enum {
4938     __vki_u32 entity;
4939     struct vki_media_pad_desc __user *pads;
4940     struct vki_media_link_desc __user *links;
4941     __vki_u32 reserved[4];
4942 };
4943 
4944 #define VKI_MEDIA_IOC_DEVICE_INFO       _VKI_IOWR('|', 0x00, struct vki_media_device_info)
4945 #define VKI_MEDIA_IOC_ENUM_ENTITIES     _VKI_IOWR('|', 0x01, struct vki_media_entity_desc)
4946 #define VKI_MEDIA_IOC_ENUM_LINKS        _VKI_IOWR('|', 0x02, struct vki_media_links_enum)
4947 #define VKI_MEDIA_IOC_SETUP_LINK        _VKI_IOWR('|', 0x03, struct vki_media_link_desc)
4948 
4949 /* DVB demux API */
4950 #define VKI_DMX_STOP    _VKI_IO('o', 42)
4951 
4952 /* Comparison type */
4953 enum vki_kcmp_type {
4954    VKI_KCMP_FILE,
4955    VKI_KCMP_VM,
4956    VKI_KCMP_FILES,
4957    VKI_KCMP_FS,
4958    VKI_KCMP_SIGHAND,
4959    VKI_KCMP_IO,
4960    VKI_KCMP_SYSVSEM,
4961 
4962    VKI_KCMP_TYPES
4963 };
4964 
4965 //----------------------------------------------------------------------
4966 // From linux-3.19-rc5/include/uapi/linux/seccomp.h
4967 //----------------------------------------------------------------------
4968 
4969 #define VKI_SECCOMP_MODE_FILTER 2
4970 
4971 //----------------------------------------------------------------------
4972 // From linux-3.19.3/include/uapi/linux/binfmts.h
4973 //----------------------------------------------------------------------
4974 #define VKI_BINPRM_BUF_SIZE 128
4975 
4976 //----------------------------------------------------------------------
4977 // From linux-3.19.0/include/linux/serial.h
4978 //----------------------------------------------------------------------
4979 
4980 struct vki_serial_struct {
4981     int type;
4982     int line;
4983     unsigned int    port;
4984     int irq;
4985     int flags;
4986     int xmit_fifo_size;
4987     int custom_divisor;
4988     int baud_base;
4989     unsigned short  close_delay;
4990     char    io_type;
4991     char    reserved_char[1];
4992     int hub6;
4993     unsigned short  closing_wait; /* time to wait before closing */
4994     unsigned short  closing_wait2; /* no longer used... */
4995     unsigned char   *iomem_base;
4996     unsigned short  iomem_reg_shift;
4997     unsigned int    port_high;
4998     unsigned long   iomap_base; /* cookie passed into ioremap */
4999 };
5000 
5001 //----------------------------------------------------------------------
5002 // From linux-3.19.0/fs/binfmt_elf.c
5003 //----------------------------------------------------------------------
5004 
5005 #if !defined(VKI_INIT_ARCH_ELF_STATE)
5006    /* This structure is used to preserve architecture specific data during
5007       the loading of an ELF file, throughout the checking of architecture
5008       specific ELF headers & through to the point where the ELF load is
5009       known to be proceeding. This implementation is a dummy for
5010       architectures which require no specific state. */
5011    struct vki_arch_elf_state {
5012    };
5013 
5014 #  define VKI_INIT_ARCH_ELF_STATE { }
5015 
5016 #endif
5017 
5018 //----------------------------------------------------------------------
5019 // From linux-4.0/include/uapi/linux/prctl.h
5020 //----------------------------------------------------------------------
5021 
5022 #define VKI_PR_SET_FP_MODE          45
5023 #define VKI_PR_GET_FP_MODE          46
5024 # define VKI_PR_FP_MODE_FR          (1 << 0)     /* 64b FP registers  */
5025 # define VKI_PR_FP_MODE_FRE         (1 << 1)     /* 32b compatibility */
5026 
5027 #endif // __VKI_LINUX_H
5028 
5029 //----------------------------------------------------------------------
5030 // From linux-4.10/include/uapi/linux/blkzoned.h
5031 //----------------------------------------------------------------------
5032 
5033 struct vki_blk_zone {
5034     __vki_u64   start;
5035     __vki_u64   len;
5036     __vki_u64   wp;
5037     __vki_u8    type;
5038     __vki_u8    cond;
5039     __vki_u8    non_seq;
5040     __vki_u8    reset;
5041     __vki_u8    reserved[36];
5042 };
5043 
5044 struct vki_blk_zone_report {
5045     __vki_u64       sector;
5046     __vki_u32       nr_zones;
5047     __vki_u8        reserved[4];
5048     struct vki_blk_zone zones[0];
5049 };
5050 
5051 struct vki_blk_zone_range {
5052     __vki_u64       sector;
5053     __vki_u64       nr_sectors;
5054 };
5055 
5056 #define VKI_BLKREPORTZONE   _VKI_IOWR(0x12, 130, struct vki_blk_zone_report)
5057 #define VKI_BLKRESETZONE    _VKI_IOW(0x12, 131, struct vki_blk_zone_range)
5058 
5059 //----------------------------------------------------------------------
5060 // From linux-4.18/include/uapi/linux/bpf.h
5061 //----------------------------------------------------------------------
5062 
5063 struct vki_bpf_insn {
5064     __vki_u8    code;       /* opcode */
5065     __vki_u8    dst_reg:4;  /* dest register */
5066     __vki_u8    src_reg:4;  /* source register */
5067     __vki_s16   off;        /* signed offset */
5068     __vki_s32   imm;        /* signed immediate constant */
5069 };
5070 
5071 enum vki_bpf_cmd {
5072     VKI_BPF_MAP_CREATE,
5073     VKI_BPF_MAP_LOOKUP_ELEM,
5074     VKI_BPF_MAP_UPDATE_ELEM,
5075     VKI_BPF_MAP_DELETE_ELEM,
5076     VKI_BPF_MAP_GET_NEXT_KEY,
5077     VKI_BPF_PROG_LOAD,
5078     VKI_BPF_OBJ_PIN,
5079     VKI_BPF_OBJ_GET,
5080     VKI_BPF_PROG_ATTACH,
5081     VKI_BPF_PROG_DETACH,
5082     VKI_BPF_PROG_TEST_RUN,
5083     VKI_BPF_PROG_GET_NEXT_ID,
5084     VKI_BPF_MAP_GET_NEXT_ID,
5085     VKI_BPF_PROG_GET_FD_BY_ID,
5086     VKI_BPF_MAP_GET_FD_BY_ID,
5087     VKI_BPF_OBJ_GET_INFO_BY_FD,
5088     VKI_BPF_PROG_QUERY,
5089     VKI_BPF_RAW_TRACEPOINT_OPEN,
5090     VKI_BPF_BTF_LOAD,
5091     VKI_BPF_BTF_GET_FD_BY_ID,
5092     VKI_BPF_TASK_FD_QUERY,
5093     VKI_BPF_MAP_LOOKUP_AND_DELETE_ELEM,
5094     VKI_BPF_MAP_FREEZE,
5095 };
5096 
5097 enum vki_bpf_map_type {
5098     VKI_BPF_MAP_TYPE_UNSPEC,
5099     VKI_BPF_MAP_TYPE_HASH,
5100     VKI_BPF_MAP_TYPE_ARRAY,
5101     VKI_BPF_MAP_TYPE_PROG_ARRAY,
5102     VKI_BPF_MAP_TYPE_PERF_EVENT_ARRAY,
5103     VKI_BPF_MAP_TYPE_PERCPU_HASH,
5104     VKI_BPF_MAP_TYPE_PERCPU_ARRAY,
5105     VKI_BPF_MAP_TYPE_STACK_TRACE,
5106     VKI_BPF_MAP_TYPE_CGROUP_ARRAY,
5107     VKI_BPF_MAP_TYPE_LRU_HASH,
5108     VKI_BPF_MAP_TYPE_LRU_PERCPU_HASH,
5109     VKI_BPF_MAP_TYPE_LPM_TRIE,
5110     VKI_BPF_MAP_TYPE_ARRAY_OF_MAPS,
5111     VKI_BPF_MAP_TYPE_HASH_OF_MAPS,
5112     VKI_BPF_MAP_TYPE_DEVMAP,
5113     VKI_BPF_MAP_TYPE_SOCKMAP,
5114     VKI_BPF_MAP_TYPE_CPUMAP,
5115     VKI_BPF_MAP_TYPE_XSKMAP,
5116     VKI_BPF_MAP_TYPE_SOCKHASH,
5117 };
5118 
5119 enum vki_bpf_prog_type {
5120     VKI_BPF_PROG_TYPE_UNSPEC,
5121     VKI_BPF_PROG_TYPE_SOCKET_FILTER,
5122     VKI_BPF_PROG_TYPE_KPROBE,
5123     VKI_BPF_PROG_TYPE_SCHED_CLS,
5124     VKI_BPF_PROG_TYPE_SCHED_ACT,
5125     VKI_BPF_PROG_TYPE_TRACEPOINT,
5126     VKI_BPF_PROG_TYPE_XDP,
5127     VKI_BPF_PROG_TYPE_PERF_EVENT,
5128     VKI_BPF_PROG_TYPE_CGROUP_SKB,
5129     VKI_BPF_PROG_TYPE_CGROUP_SOCK,
5130     VKI_BPF_PROG_TYPE_LWT_IN,
5131     VKI_BPF_PROG_TYPE_LWT_OUT,
5132     VKI_BPF_PROG_TYPE_LWT_XMIT,
5133     VKI_BPF_PROG_TYPE_SOCK_OPS,
5134     VKI_BPF_PROG_TYPE_SK_SKB,
5135     VKI_BPF_PROG_TYPE_CGROUP_DEVICE,
5136     VKI_BPF_PROG_TYPE_SK_MSG,
5137     VKI_BPF_PROG_TYPE_RAW_TRACEPOINT,
5138     VKI_BPF_PROG_TYPE_CGROUP_SOCK_ADDR,
5139     VKI_BPF_PROG_TYPE_LWT_SEG6LOCAL,
5140     VKI_BPF_PROG_TYPE_LIRC_MODE2,
5141 };
5142 
5143 enum vki_bpf_attach_type {
5144     VKI_BPF_CGROUP_INET_INGRESS,
5145     VKI_BPF_CGROUP_INET_EGRESS,
5146     VKI_BPF_CGROUP_INET_SOCK_CREATE,
5147     VKI_BPF_CGROUP_SOCK_OPS,
5148     VKI_BPF_SK_SKB_STREAM_PARSER,
5149     VKI_BPF_SK_SKB_STREAM_VERDICT,
5150     VKI_BPF_CGROUP_DEVICE,
5151     VKI_BPF_SK_MSG_VERDICT,
5152     VKI_BPF_CGROUP_INET4_BIND,
5153     VKI_BPF_CGROUP_INET6_BIND,
5154     VKI_BPF_CGROUP_INET4_CONNECT,
5155     VKI_BPF_CGROUP_INET6_CONNECT,
5156     VKI_BPF_CGROUP_INET4_POST_BIND,
5157     VKI_BPF_CGROUP_INET6_POST_BIND,
5158     VKI_BPF_CGROUP_UDP4_SENDMSG,
5159     VKI_BPF_CGROUP_UDP6_SENDMSG,
5160     VKI_BPF_LIRC_MODE2,
5161     __VKI_MAX_BPF_ATTACH_TYPE
5162 };
5163 
5164 /* Specify numa node during map creation */
5165 #define VKI_BPF_F_NUMA_NODE     (1U << 2)
5166 
5167 #define VKI_BPF_OBJ_NAME_LEN 16U
5168 
5169 union vki_bpf_attr {
5170     struct { /* anonymous struct used by BPF_MAP_CREATE command */
5171         __vki_u32   map_type;   /* one of enum bpf_map_type */
5172         __vki_u32   key_size;   /* size of key in bytes */
5173         __vki_u32   value_size; /* size of value in bytes */
5174         __vki_u32   max_entries;    /* max number of entries in a map */
5175         __vki_u32   map_flags;  /* BPF_MAP_CREATE related
5176                      * flags defined above.
5177                      */
5178         __vki_u32   inner_map_fd;   /* fd pointing to the inner map */
5179         __vki_u32   numa_node;  /* numa node (effective only if
5180                      * BPF_F_NUMA_NODE is set).
5181                      */
5182         char    map_name[VKI_BPF_OBJ_NAME_LEN];
5183         __vki_u32   map_ifindex;    /* ifindex of netdev to create on */
5184         __vki_u32   btf_fd;     /* fd pointing to a BTF type data */
5185         __vki_u32   btf_key_type_id;    /* BTF type_id of the key */
5186         __vki_u32   btf_value_type_id;  /* BTF type_id of the value */
5187     };
5188 
5189     struct { /* anonymous struct used by BPF_MAP_*_ELEM commands */
5190         __vki_u32       map_fd;
5191         __vki_aligned_u64   key;
5192         union {
5193             __vki_aligned_u64 value;
5194             __vki_aligned_u64 next_key;
5195         };
5196         __vki_u64       flags;
5197     };
5198 
5199     struct { /* anonymous struct used by BPF_PROG_LOAD command */
5200         __vki_u32       prog_type;  /* one of enum bpf_prog_type */
5201         __vki_u32       insn_cnt;
5202         __vki_aligned_u64   insns;
5203         __vki_aligned_u64   license;
5204         __vki_u32       log_level;  /* verbosity level of verifier */
5205         __vki_u32       log_size;   /* size of user buffer */
5206         __vki_aligned_u64   log_buf;    /* user supplied buffer */
5207         __vki_u32       kern_version;   /* checked when prog_type=kprobe */
5208         __vki_u32       prog_flags;
5209         char        prog_name[VKI_BPF_OBJ_NAME_LEN];
5210         __vki_u32       prog_ifindex;   /* ifindex of netdev to prep for */
5211         /* For some prog types expected attach type must be known at
5212          * load time to verify attach type specific parts of prog
5213          * (context accesses, allowed helpers, etc).
5214          */
5215         __vki_u32       expected_attach_type;
5216     };
5217 
5218     struct { /* anonymous struct used by BPF_OBJ_* commands */
5219         __vki_aligned_u64   pathname;
5220         __vki_u32       bpf_fd;
5221         __vki_u32       file_flags;
5222     };
5223 
5224     struct { /* anonymous struct used by BPF_PROG_ATTACH/DETACH commands */
5225         __vki_u32       target_fd;  /* container object to attach to */
5226         __vki_u32       attach_bpf_fd;  /* eBPF program to attach */
5227         __vki_u32       attach_type;
5228         __vki_u32       attach_flags;
5229     };
5230 
5231     struct { /* anonymous struct used by BPF_PROG_TEST_RUN command */
5232         __vki_u32       prog_fd;
5233         __vki_u32       retval;
5234         __vki_u32       data_size_in;
5235         __vki_u32       data_size_out;
5236         __vki_aligned_u64   data_in;
5237         __vki_aligned_u64   data_out;
5238         __vki_u32       repeat;
5239         __vki_u32       duration;
5240     } test;
5241 
5242     struct { /* anonymous struct used by BPF_*_GET_*_ID */
5243         union {
5244             __vki_u32       start_id;
5245             __vki_u32       prog_id;
5246             __vki_u32       map_id;
5247             __vki_u32       btf_id;
5248         };
5249         __vki_u32       next_id;
5250         __vki_u32       open_flags;
5251     };
5252 
5253     struct { /* anonymous struct used by BPF_OBJ_GET_INFO_BY_FD */
5254         __vki_u32       bpf_fd;
5255         __vki_u32       info_len;
5256         __vki_aligned_u64   info;
5257     } info;
5258 
5259     struct { /* anonymous struct used by BPF_PROG_QUERY command */
5260         __vki_u32       target_fd;  /* container object to query */
5261         __vki_u32       attach_type;
5262         __vki_u32       query_flags;
5263         __vki_u32       attach_flags;
5264         __vki_aligned_u64   prog_ids;
5265         __vki_u32       prog_cnt;
5266     } query;
5267 
5268     struct {
5269         __vki_u64 name;
5270         __vki_u32 prog_fd;
5271     } raw_tracepoint;
5272 
5273     struct { /* anonymous struct for BPF_BTF_LOAD */
5274         __vki_aligned_u64   btf;
5275         __vki_aligned_u64   btf_log_buf;
5276         __vki_u32       btf_size;
5277         __vki_u32       btf_log_size;
5278         __vki_u32       btf_log_level;
5279     };
5280 
5281     struct {
5282         __vki_u32       pid;        /* input: pid */
5283         __vki_u32       fd;     /* input: fd */
5284         __vki_u32       flags;      /* input: flags */
5285         __vki_u32       buf_len;    /* input/output: buf len */
5286         __vki_aligned_u64   buf;        /* input/output:
5287                          *   tp_name for tracepoint
5288                          *   symbol for kprobe
5289                          *   filename for uprobe
5290                          */
5291         __vki_u32       prog_id;    /* output: prod_id */
5292         __vki_u32       fd_type;    /* output: BPF_FD_TYPE_* */
5293         __vki_u64       probe_offset;   /* output: probe_offset */
5294         __vki_u64       probe_addr; /* output: probe_addr */
5295     } task_fd_query;
5296 } __attribute__((aligned(8)));
5297 
5298 #define VKI_XDP_PACKET_HEADROOM 256
5299 
5300 #define VKI_BPF_TAG_SIZE    8
5301 
5302 struct vki_bpf_prog_info {
5303     __vki_u32 type;
5304     __vki_u32 id;
5305     __vki_u8  tag[VKI_BPF_TAG_SIZE];
5306     __vki_u32 jited_prog_len;
5307     __vki_u32 xlated_prog_len;
5308     __vki_aligned_u64 jited_prog_insns;
5309     __vki_aligned_u64 xlated_prog_insns;
5310     __vki_u64 load_time;    /* ns since boottime */
5311     __vki_u32 created_by_uid;
5312     __vki_u32 nr_map_ids;
5313     __vki_aligned_u64 map_ids;
5314     char name[VKI_BPF_OBJ_NAME_LEN];
5315     __vki_u32 ifindex;
5316     __vki_u32 gpl_compatible:1;
5317     __vki_u64 netns_dev;
5318     __vki_u64 netns_ino;
5319     __vki_u32 nr_jited_ksyms;
5320     __vki_u32 nr_jited_func_lens;
5321     __vki_aligned_u64 jited_ksyms;
5322     __vki_aligned_u64 jited_func_lens;
5323 } __attribute__((aligned(8)));
5324 
5325 struct vki_bpf_map_info {
5326     __vki_u32 type;
5327     __vki_u32 id;
5328     __vki_u32 key_size;
5329     __vki_u32 value_size;
5330     __vki_u32 max_entries;
5331     __vki_u32 map_flags;
5332     char  name[VKI_BPF_OBJ_NAME_LEN];
5333     __vki_u32 ifindex;
5334     __vki_u32 :32;
5335     __vki_u64 netns_dev;
5336     __vki_u64 netns_ino;
5337     __vki_u32 btf_id;
5338     __vki_u32 btf_key_type_id;
5339     __vki_u32 btf_value_type_id;
5340 } __attribute__((aligned(8)));
5341 
5342 struct vki_bpf_btf_info {
5343     __vki_aligned_u64 btf;
5344     __vki_u32 btf_size;
5345     __vki_u32 id;
5346 } __attribute__((aligned(8)));
5347 
5348 //----------------------------------------------------------------------
5349 // From linux-5.1/include/uapi/linux/pps.h
5350 //----------------------------------------------------------------------
5351 
5352 struct vki_pps_ktime {
5353     __vki_s64 sec;
5354     __vki_s32 nsec;
5355     __vki_u32 flags;
5356 };
5357 
5358 struct vki_pps_kinfo {
5359     __vki_u32 assert_sequence;
5360     __vki_u32 clear_sequence;
5361     struct vki_pps_ktime assert_tu;
5362     struct vki_pps_ktime clear_tu;
5363     int current_mode;
5364 };
5365 
5366 struct vki_pps_kparams {
5367     int api_version;
5368     int mode;
5369     struct vki_pps_ktime assert_off_tu;
5370     struct vki_pps_ktime clear_off_tu;
5371 };
5372 
5373 struct vki_pps_fdata {
5374     struct vki_pps_kinfo info;
5375     struct vki_pps_ktime timeout;
5376 };
5377 
5378 struct vki_pps_bind_args {
5379     int tsformat;
5380     int edge;
5381     int consumer;
5382 };
5383 
5384 #define VKI_PPS_GETPARAMS   _VKI_IOR('p', 0xa1, struct vki_pps_kparams *)
5385 #define VKI_PPS_SETPARAMS   _VKI_IOW('p', 0xa2, struct vki_pps_kparams *)
5386 #define VKI_PPS_GETCAP      _VKI_IOR('p', 0xa3, int *)
5387 #define VKI_PPS_FETCH       _VKI_IOWR('p', 0xa4, struct vki_pps_fdata *)
5388 #define VKI_PPS_KC_BIND     _VKI_IOW('p', 0xa5, struct vki_pps_bind_args *)
5389 
5390 //----------------------------------------------------------------------
5391 // From linux-5.1/include/uapi/linux/ptp_clock.h
5392 //----------------------------------------------------------------------
5393 
5394 struct vki_ptp_clock_time {
5395     __vki_s64 sec;
5396     __vki_u32 nsec;
5397     __vki_u32 reserved;
5398 };
5399 
5400 struct vki_ptp_clock_caps {
5401     int max_adj;
5402     int n_alarm;
5403     int n_ext_ts;
5404     int n_per_out;
5405     int pps;
5406     int n_pins;
5407     int cross_timestamping;
5408     int rsv[13];
5409 };
5410 
5411 struct vki_ptp_extts_request {
5412     unsigned int index;
5413     unsigned int flags;
5414     unsigned int rsv[2];
5415 };
5416 
5417 struct vki_ptp_perout_request {
5418     struct vki_ptp_clock_time start;
5419     struct vki_ptp_clock_time period;
5420     unsigned int index;
5421     unsigned int flags;
5422     unsigned int rsv[4];
5423 };
5424 
5425 #define VKI_PTP_MAX_SAMPLES 25
5426 
5427 struct vki_ptp_sys_offset {
5428     unsigned int n_samples;
5429     unsigned int rsv[3];
5430     struct vki_ptp_clock_time ts[2 * VKI_PTP_MAX_SAMPLES + 1];
5431 };
5432 
5433 struct vki_ptp_sys_offset_extended {
5434     unsigned int n_samples;
5435     unsigned int rsv[3];
5436     struct vki_ptp_clock_time ts[VKI_PTP_MAX_SAMPLES][3];
5437 };
5438 
5439 struct vki_ptp_sys_offset_precise {
5440     struct vki_ptp_clock_time device;
5441     struct vki_ptp_clock_time sys_realtime;
5442     struct vki_ptp_clock_time sys_monoraw;
5443     unsigned int rsv[4];
5444 };
5445 
5446 struct vki_ptp_pin_desc {
5447     char name[64];
5448     unsigned int index;
5449     unsigned int func;
5450     unsigned int chan;
5451     unsigned int rsv[5];
5452 };
5453 
5454 #define VKI_PTP_CLOCK_GETCAPS  _VKI_IOR('=', 1, struct vki_ptp_clock_caps)
5455 #define VKI_PTP_EXTTS_REQUEST  _VKI_IOW('=', 2, struct vki_ptp_extts_request)
5456 #define VKI_PTP_PEROUT_REQUEST _VKI_IOW('=', 3, struct vki_ptp_perout_request)
5457 #define VKI_PTP_ENABLE_PPS     _VKI_IOW('=', 4, int)
5458 #define VKI_PTP_SYS_OFFSET     _VKI_IOW('=', 5, struct vki_ptp_sys_offset)
5459 #define VKI_PTP_PIN_GETFUNC    _VKI_IOWR('=', 6, struct vki_ptp_pin_desc)
5460 #define VKI_PTP_PIN_SETFUNC    _VKI_IOW('=', 7, struct vki_ptp_pin_desc)
5461 #define VKI_PTP_SYS_OFFSET_PRECISE \
5462     _VKI_IOWR('=', 8, struct vki_ptp_sys_offset_precise)
5463 #define VKI_PTP_SYS_OFFSET_EXTENDED \
5464     _VKI_IOWR('=', 9, struct vki_ptp_sys_offset_extended)
5465 
5466 /* Needed for 64bit time_t on 32bit arches.  */
5467 
5468 typedef vki_int64_t vki_time64_t;
5469 
5470 /* Note that this is the padding used by glibc, the kernel uses
5471    a 64-bit signed int, but is ignoring the upper 32 bits of the
5472    tv_nsec field.  It does always write the full struct though.
5473    So this is only needed for PRE_MEM_READ. See pre_read_timespec64. */
5474 struct vki_timespec64 {
5475    vki_time64_t tv_sec;
5476 #if defined(VKI_BIG_ENDIAN)
5477    vki_int32_t tv_pad;
5478    vki_int32_t tv_nsec;
5479 #elif defined(VKI_LITTLE_ENDIAN)
5480    vki_int32_t tv_nsec;
5481    vki_int32_t tv_pad;
5482 #else
5483 #error edit for your odd byteorder.
5484 #endif
5485 };
5486 
5487 struct vki_itimerspec64 {
5488    struct vki_timespec it_interval;
5489    struct vki_timespec it_value;
5490 };
5491 
5492 /* From include/linux/openat2.h */
5493 
5494 struct vki_open_how {
5495     vki_uint64_t vki_flags;
5496     vki_uint64_t vki_mode;
5497     vki_uint64_t vki_resolve;
5498 };
5499 
5500 #define VKI_RESOLVE_NO_XDEV     0x01
5501 #define VKI_RESOLVE_NO_MAGICLINKS   0x02
5502 #define VKI_RESOLVE_NO_SYMLINKS 0x04
5503 #define VKI_RESOLVE_BENEATH     0x08
5504 #define VKI_RESOLVE_IN_ROOT     0x10
5505 #define VKI_RESOLVE_CACHED      0x20
5506 
5507 #ifndef VKI_RLIM_INFINITY
5508 #define VKI_RLIM_INFINITY (~0UL)
5509 #endif
5510 
5511 #define VKI_RLIM64_INFINITY (~0ULL)
5512 
5513 #define VKI_CLOSE_RANGE_UNSHARE (1U << 1)
5514 #define VKI_CLOSE_RANGE_CLOEXEC (1U << 2)
5515 
5516 struct vki_cachestat_range {
5517     __vki_u64 off;
5518     __vki_u64 len;
5519 };
5520 
5521 struct vki_cachestat {
5522     __vki_u64 nr_cache;
5523     __vki_u64 nr_dirty;
5524     __vki_u64 nr_writeback;
5525     __vki_u64 nr_evicted;
5526     __vki_u64 nr_recently_evicted;
5527 };
5528 
5529 //----------------------------------------------------------------------
5530 // From linux/magic.h
5531 //----------------------------------------------------------------------
5532 
5533 #define VKI_BTRFS_SUPER_MAGIC    0x9123683E
5534 
5535 struct vki__aio_sigset {
5536    const vki_sigset_t __user    *sigmask;
5537    vki_size_t       sigsetsize;
5538 };
5539 
5540 //----------------------------------------------------------------------
5541 // From uapi/linux/mount.h
5542 //----------------------------------------------------------------------
5543 
5544 struct vki_mnt_id_req {
5545    __vki_u32 size;
5546    __vki_u32 spare;
5547    __vki_u64 mnt_id;
5548    __vki_u64 param;
5549    __vki_u64 mnt_ns_id;
5550 };
5551 
5552 struct vki_statmount {
5553     __vki_u32 size;     /* Total size, including strings */
5554     __vki_u32 mnt_opts;     /* [str] Mount options of the mount */
5555     __vki_u64 mask;     /* What results were written */
5556     __vki_u32 sb_dev_major; /* Device ID */
5557     __vki_u32 sb_dev_minor;
5558     __vki_u64 sb_magic;     /* ..._SUPER_MAGIC */
5559     __vki_u32 sb_flags;     /* SB_{RDONLY,SYNCHRONOUS,DIRSYNC,LAZYTIME} */
5560     __vki_u32 fs_type;      /* [str] Filesystem type */
5561     __vki_u64 mnt_id;       /* Unique ID of mount */
5562     __vki_u64 mnt_parent_id;    /* Unique ID of parent (for root == mnt_id) */
5563     __vki_u32 mnt_id_old;   /* Reused IDs used in proc/.../mountinfo */
5564     __vki_u32 mnt_parent_id_old;
5565     __vki_u64 mnt_attr;     /* MOUNT_ATTR_... */
5566     __vki_u64 mnt_propagation;  /* MS_{SHARED,SLAVE,PRIVATE,UNBINDABLE} */
5567     __vki_u64 mnt_peer_group;   /* ID of shared peer group */
5568     __vki_u64 mnt_master;   /* Mount receives propagation from this ID */
5569     __vki_u64 propagate_from;   /* Propagation from in current namespace */
5570     __vki_u32 mnt_root;     /* [str] Root of mount relative to root of fs */
5571     __vki_u32 mnt_point;    /* [str] Mountpoint relative to current root */
5572     __vki_u64 mnt_ns_id;    /* ID of the mount namespace */
5573     __vki_u64 __spare2[49];
5574     char str[];     /* Variable size part containing strings */
5575 };
5576 
5577 /*--------------------------------------------------------------------*/
5578 /*--- end                                                          ---*/
5579 /*--------------------------------------------------------------------*/