Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-08-18 09:32:34

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 // Common madvise flags mman-common.h
1369 //----------------------------------------------------------------------
1370 
1371 #define VKI_MADV_GUARD_INSTALL 102
1372 #define VKI_MADV_GUARD_REMOVE  103
1373 
1374 //----------------------------------------------------------------------
1375 // From linux-2.6.31-rc4/include/linux/futex.h
1376 //----------------------------------------------------------------------
1377 
1378 #define VKI_FUTEX_WAIT (0)
1379 #define VKI_FUTEX_WAKE (1)
1380 #define VKI_FUTEX_FD (2)
1381 #define VKI_FUTEX_REQUEUE (3)
1382 #define VKI_FUTEX_CMP_REQUEUE (4)
1383 #define VKI_FUTEX_WAKE_OP (5)
1384 #define VKI_FUTEX_LOCK_PI (6)
1385 #define VKI_FUTEX_UNLOCK_PI (7)
1386 #define VKI_FUTEX_TRYLOCK_PI (8)
1387 #define VKI_FUTEX_WAIT_BITSET (9)
1388 #define VKI_FUTEX_WAKE_BITSET (10)
1389 #define VKI_FUTEX_WAIT_REQUEUE_PI (11)
1390 #define VKI_FUTEX_CMP_REQUEUE_PI (12)
1391 #define VKI_FUTEX_PRIVATE_FLAG (128)
1392 #define VKI_FUTEX_CLOCK_REALTIME (256)
1393 
1394 struct vki_robust_list {
1395     struct vki_robust_list __user *next;
1396 };
1397 
1398 struct vki_robust_list_head {
1399     /*
1400      * The head of the list. Points back to itself if empty:
1401      */
1402     struct vki_robust_list list;
1403 
1404     /*
1405      * This relative offset is set by user-space, it gives the kernel
1406      * the relative position of the futex field to examine. This way
1407      * we keep userspace flexible, to freely shape its data-structure,
1408      * without hardcoding any particular offset into the kernel:
1409      */
1410     long futex_offset;
1411 
1412     /*
1413      * The death of the thread may race with userspace setting
1414      * up a lock's links. So to handle this race, userspace first
1415      * sets this field to the address of the to-be-taken lock,
1416      * then does the lock acquire, and then adds itself to the
1417      * list, and then clears this field. Hence the kernel will
1418      * always have full knowledge of all locks that the thread
1419      * _might_ have taken. We check the owner TID in any case,
1420      * so only truly owned locks will be handled.
1421      */
1422     struct vki_robust_list __user *list_op_pending;
1423 };
1424 
1425 /* Introduced in linux commit bf69bad38cf63d980e8a603f8d1bd1f85b5ed3d9 */
1426 struct vki_futex_waitv {
1427     __vki_u64 val;
1428     __vki_u64 uaddr;
1429     __vki_u32 flags;
1430     __vki_u32 __reserved;
1431 };
1432 
1433 struct vki__kernel_timespec {
1434     long long tv_sec;
1435     long long tv_nsec;
1436 };
1437 
1438 //----------------------------------------------------------------------
1439 // From linux-2.6.8.1/include/linux/errno.h
1440 //----------------------------------------------------------------------
1441 
1442 #define VKI_ERESTARTSYS 512
1443 
1444 //----------------------------------------------------------------------
1445 // From linux-2.6.8.1/include/linux/stat.h
1446 //----------------------------------------------------------------------
1447 
1448 #define VKI_S_IFMT  00170000
1449 #define VKI_S_IFSOCK 0140000
1450 #define VKI_S_IFLNK  0120000
1451 #define VKI_S_IFREG  0100000
1452 #define VKI_S_IFBLK  0060000
1453 #define VKI_S_IFDIR  0040000
1454 #define VKI_S_IFCHR  0020000
1455 #define VKI_S_IFIFO  0010000
1456 #define VKI_S_ISUID  0004000
1457 #define VKI_S_ISGID  0002000
1458 #define VKI_S_ISVTX  0001000
1459 
1460 #define VKI_S_ISLNK(m)  (((m) & VKI_S_IFMT) == VKI_S_IFLNK)
1461 #define VKI_S_ISREG(m)  (((m) & VKI_S_IFMT) == VKI_S_IFREG)
1462 #define VKI_S_ISDIR(m)  (((m) & VKI_S_IFMT) == VKI_S_IFDIR)
1463 #define VKI_S_ISCHR(m)  (((m) & VKI_S_IFMT) == VKI_S_IFCHR)
1464 #define VKI_S_ISBLK(m)  (((m) & VKI_S_IFMT) == VKI_S_IFBLK)
1465 #define VKI_S_ISFIFO(m) (((m) & VKI_S_IFMT) == VKI_S_IFIFO)
1466 #define VKI_S_ISSOCK(m) (((m) & VKI_S_IFMT) == VKI_S_IFSOCK)
1467 
1468 #define VKI_S_IRWXU 00700
1469 #define VKI_S_IRUSR 00400
1470 #define VKI_S_IWUSR 00200
1471 #define VKI_S_IXUSR 00100
1472 
1473 #define VKI_S_IRWXG 00070
1474 #define VKI_S_IRGRP 00040
1475 #define VKI_S_IWGRP 00020
1476 #define VKI_S_IXGRP 00010
1477 
1478 #define VKI_S_IRWXO 00007
1479 #define VKI_S_IROTH 00004
1480 #define VKI_S_IWOTH 00002
1481 #define VKI_S_IXOTH 00001
1482 
1483 #define VKI_STATX_ALL 0x00000FFFU
1484 
1485 struct vki_statx_timestamp {
1486         __vki_s64   tv_sec;
1487         __vki_u32   tv_nsec;
1488         __vki_s32   __reserved;
1489 };
1490 
1491 struct vki_statx {
1492         /* 0x00 */
1493         __vki_u32   stx_mask;       /* What results were written [uncond] */
1494         __vki_u32   stx_blksize;    /* Preferred general I/O size [uncond] */
1495         __vki_u64   stx_attributes; /* Flags conveying information about the file [uncond] */
1496         /* 0x10 */
1497         __vki_u32   stx_nlink;      /* Number of hard links */
1498         __vki_u32   stx_uid;        /* User ID of owner */
1499         __vki_u32   stx_gid;        /* Group ID of owner */
1500         __vki_u16   stx_mode;       /* File mode */
1501         __vki_u16   __spare0[1];
1502         /* 0x20 */
1503         __vki_u64   stx_ino;        /* Inode number */
1504         __vki_u64   stx_size;       /* File size */
1505         __vki_u64   stx_blocks;     /* Number of 512-byte blocks allocated */
1506         __vki_u64   stx_attributes_mask; /* Mask to show what's supported in stx_attributes */
1507         /* 0x40 */
1508         struct vki_statx_timestamp  stx_atime;      /* Last access time */
1509         struct vki_statx_timestamp  stx_btime;      /* File creation time */
1510         struct vki_statx_timestamp  stx_ctime;      /* Last attribute change time */
1511         struct vki_statx_timestamp  stx_mtime;      /* Last data modification time */
1512         /* 0x80 */
1513         __vki_u32   stx_rdev_major; /* Device ID of special file [if bdev/cdev] */
1514         __vki_u32   stx_rdev_minor;
1515         __vki_u32   stx_dev_major;  /* ID of device containing file [uncond] */
1516         __vki_u32   stx_dev_minor;
1517         /* 0x90 */
1518         __vki_u64   stx_mnt_id;
1519         __vki_u32   stx_dio_mem_align;      /* Memory buffer alignment for direct I/O */
1520         __vki_u32   stx_dio_offset_align;   /* File offset alignment for direct I/O */
1521         /* 0xa0 */
1522 
1523         __vki_u64   __spare2[12];   /* Spare space for future expansion */
1524         /* 0x100 */
1525 };
1526 
1527 
1528 //----------------------------------------------------------------------
1529 // From linux-2.6.8.1/include/linux/dirent.h
1530 //----------------------------------------------------------------------
1531 
1532 /* This is the old compat structure to use with the old dirent syscall. */
1533 struct vki_dirent {
1534     long        d_ino;
1535     __vki_kernel_off_t  d_off;
1536     unsigned short  d_reclen;
1537     char        d_name[256]; /* We must not include limits.h! */
1538 };
1539 
1540 /* This is the new structure to use with the dirent64 syscall. */
1541 struct vki_dirent64 {
1542     __vki_u64 d_ino;
1543     __vki_s64 d_off;
1544     unsigned short d_reclen;
1545     unsigned char d_type;
1546     char d_name[256]; /* Note we hard code a max file length here. */
1547 };
1548 
1549 //----------------------------------------------------------------------
1550 // From linux-2.6.8.1/include/linux/fcntl.h
1551 //----------------------------------------------------------------------
1552 
1553 #define VKI_F_SETLEASE      (VKI_F_LINUX_SPECIFIC_BASE + 0)
1554 #define VKI_F_GETLEASE      (VKI_F_LINUX_SPECIFIC_BASE + 1)
1555 
1556 #define VKI_F_CREATED_QUERY (VKI_F_LINUX_SPECIFIC_BASE + 4)
1557 #define VKI_F_CANCELLK      (VKI_F_LINUX_SPECIFIC_BASE + 5)
1558 
1559 #define VKI_F_DUPFD_CLOEXEC (VKI_F_LINUX_SPECIFIC_BASE + 6)
1560 
1561 #define VKI_F_NOTIFY        (VKI_F_LINUX_SPECIFIC_BASE + 2)
1562 
1563 #define VKI_F_SETPIPE_SZ    (VKI_F_LINUX_SPECIFIC_BASE + 7)
1564 #define VKI_F_GETPIPE_SZ    (VKI_F_LINUX_SPECIFIC_BASE + 8)
1565 
1566 #define VKI_F_ADD_SEALS     (VKI_F_LINUX_SPECIFIC_BASE + 9)
1567 #define VKI_F_GET_SEALS     (VKI_F_LINUX_SPECIFIC_BASE + 10)
1568 
1569 struct vki_flock {
1570     short           l_type;
1571     short           l_whence;
1572     __vki_kernel_off_t  l_start;
1573     __vki_kernel_off_t  l_len;
1574     __vki_kernel_pid_t  l_pid;
1575 };
1576 
1577 struct vki_flock64 {
1578     short           l_type;
1579     short           l_whence;
1580     __vki_kernel_loff_t l_start;
1581     __vki_kernel_loff_t l_len;
1582     __vki_kernel_pid_t  l_pid;
1583 };
1584 
1585 #define VKI_AT_EMPTY_PATH       0x1000  /* Allow empty relative pathname */
1586 #define VKI_AT_SYMLINK_NOFOLLOW 0x100   /* Do not follow symbolic links.  */
1587 
1588 //----------------------------------------------------------------------
1589 // From linux-2.6.8.1/include/linux/sysctl.h
1590 //----------------------------------------------------------------------
1591 
1592 struct __vki_sysctl_args {
1593     int __user *name;
1594     int nlen;
1595     void __user *oldval;
1596     vki_size_t __user *oldlenp;
1597     void __user *newval;
1598     vki_size_t newlen;
1599     unsigned long __unused0[4];
1600 };
1601 
1602 //----------------------------------------------------------------------
1603 // From linux-2.6.8.1/include/linux/aio_abi.h
1604 //----------------------------------------------------------------------
1605 
1606 typedef unsigned long   vki_aio_context_t;
1607 
1608 enum {
1609     VKI_IOCB_CMD_PREAD = 0,
1610     VKI_IOCB_CMD_PWRITE = 1,
1611     VKI_IOCB_CMD_FSYNC = 2,
1612     VKI_IOCB_CMD_FDSYNC = 3,
1613     VKI_IOCB_CMD_PREADV = 7,
1614     VKI_IOCB_CMD_PWRITEV = 8,
1615 };
1616 
1617 /* read() from /dev/aio returns these structures. */
1618 struct vki_io_event {
1619     __vki_u64   data;       /* the data field from the iocb */
1620     __vki_u64   obj;        /* what iocb this event came from */
1621         // [[Nb: These fields renamed from 'res' and 'res2' because 'res' is
1622         //   a macro in vg_syscalls.c!]]
1623     __vki_s64   result;     /* result code for this event */
1624     __vki_s64   result2;    /* secondary result */
1625 };
1626 
1627 #if defined(VKI_LITTLE_ENDIAN)
1628 #  define VKI_PADDED(x,y)   x, y
1629 #elif defined(VKI_BIG_ENDIAN)
1630 #  define VKI_PADDED(x,y)   y, x
1631 #else
1632 #error edit for your odd byteorder.
1633 #endif
1634 
1635 struct vki_iocb {
1636     /* these are internal to the kernel/libc. */
1637     __vki_u64   aio_data;   /* data to be returned in event's data */
1638     __vki_u32   VKI_PADDED(aio_key, aio_reserved1);
1639                 /* the kernel sets aio_key to the req # */
1640 
1641     /* common fields */
1642     __vki_u16   aio_lio_opcode; /* see IOCB_CMD_ above */
1643     __vki_s16   aio_reqprio;
1644     __vki_u32   aio_fildes;
1645 
1646     __vki_u64   aio_buf;
1647     __vki_u64   aio_nbytes;
1648     __vki_s64   aio_offset;
1649 
1650     /* extra parameters */
1651     __vki_u64   aio_reserved2;  /* TODO: use this for a (struct sigevent *) */
1652     __vki_u64   aio_reserved3;
1653 }; /* 64 bytes */
1654 
1655 //----------------------------------------------------------------------
1656 // From linux-2.6.8.1/include/linux/aio.h
1657 //----------------------------------------------------------------------
1658 
1659 struct vki_aio_ring {
1660     unsigned    id; /* kernel internal index number */
1661     unsigned    nr; /* number of io_events */
1662     unsigned    head;
1663     unsigned    tail;
1664 
1665     unsigned    magic;
1666     unsigned    compat_features;
1667     unsigned    incompat_features;
1668     unsigned    header_length;  /* size of aio_ring */
1669 
1670     struct vki_io_event     io_events[0];
1671 }; /* 128 bytes + ring size */
1672 
1673 //----------------------------------------------------------------------
1674 // From linux-2.6.8.1/include/linux/msg.h
1675 //----------------------------------------------------------------------
1676 
1677 #define VKI_MSG_STAT 11
1678 #define VKI_MSG_INFO 12
1679 
1680 struct vki_msqid_ds {
1681     struct vki_ipc_perm msg_perm;
1682     struct vki_msg *msg_first;      /* first message on queue,unused  */
1683     struct vki_msg *msg_last;       /* last message in queue,unused */
1684     __vki_kernel_time_t msg_stime;  /* last msgsnd time */
1685     __vki_kernel_time_t msg_rtime;  /* last msgrcv time */
1686     __vki_kernel_time_t msg_ctime;  /* last change time */
1687     unsigned long  msg_lcbytes; /* Reuse junk fields for 32 bit */
1688     unsigned long  msg_lqbytes; /* ditto */
1689     unsigned short msg_cbytes;  /* current number of bytes on queue */
1690     unsigned short msg_qnum;    /* number of messages in queue */
1691     unsigned short msg_qbytes;  /* max number of bytes on queue */
1692     __vki_kernel_ipc_pid_t msg_lspid;   /* pid of last msgsnd */
1693     __vki_kernel_ipc_pid_t msg_lrpid;   /* last receive pid */
1694 };
1695 
1696 struct vki_msgbuf {
1697     long mtype;         /* type of message */
1698     char mtext[1];      /* message text */
1699 };
1700 
1701 struct vki_msginfo {
1702     int msgpool;
1703     int msgmap; 
1704     int msgmax; 
1705     int msgmnb; 
1706     int msgmni; 
1707     int msgssz; 
1708     int msgtql; 
1709     unsigned short  msgseg; 
1710 };
1711 
1712 //----------------------------------------------------------------------
1713 // From linux-2.6.8.1/include/linux/shm.h
1714 //----------------------------------------------------------------------
1715 
1716 struct vki_shmid_ds {
1717     struct vki_ipc_perm     shm_perm;   /* operation perms */
1718     int         shm_segsz;  /* size of segment (bytes) */
1719     __vki_kernel_time_t     shm_atime;  /* last attach time */
1720     __vki_kernel_time_t     shm_dtime;  /* last detach time */
1721     __vki_kernel_time_t     shm_ctime;  /* last change time */
1722     __vki_kernel_ipc_pid_t  shm_cpid;   /* pid of creator */
1723     __vki_kernel_ipc_pid_t  shm_lpid;   /* pid of last operator */
1724     unsigned short      shm_nattch; /* no. of current attaches */
1725     unsigned short      shm_unused; /* compatibility */
1726     void            *shm_unused2;   /* ditto - used by DIPC */
1727     void            *shm_unused3;   /* unused */
1728 };
1729 
1730 #define VKI_SHM_RDONLY  010000  /* read-only access */
1731 #define VKI_SHM_RND     020000  /* round attach address to SHMLBA boundary */
1732 
1733 #define VKI_SHM_STAT    13
1734 #define VKI_SHM_INFO    14
1735 
1736 /* Obsolete, used only for backwards compatibility */
1737 struct  vki_shminfo {
1738     int shmmax;
1739     int shmmin;
1740     int shmmni;
1741     int shmseg;
1742     int shmall;
1743 };
1744 
1745 struct vki_shm_info {
1746     int used_ids;
1747     unsigned long shm_tot;  /* total allocated shm */
1748     unsigned long shm_rss;  /* total resident shm */
1749     unsigned long shm_swp;  /* total swapped shm */
1750     unsigned long swap_attempts;
1751     unsigned long swap_successes;
1752 };
1753 
1754 //----------------------------------------------------------------------
1755 // From linux-2.6.8.1/include/linux/rtc.h
1756 //----------------------------------------------------------------------
1757 
1758 struct vki_rtc_time {
1759     int tm_sec;
1760     int tm_min;
1761     int tm_hour;
1762     int tm_mday;
1763     int tm_mon;
1764     int tm_year;
1765     int tm_wday;
1766     int tm_yday;
1767     int tm_isdst;
1768 };
1769 
1770 #define VKI_RTC_AIE_ON  _VKI_IO('p', 0x01)  /* Alarm int. enable on */
1771 #define VKI_RTC_AIE_OFF _VKI_IO('p', 0x02)  /* ... off      */
1772 #define VKI_RTC_UIE_ON  _VKI_IO('p', 0x03)  /* Update int. enable on*/
1773 #define VKI_RTC_UIE_OFF _VKI_IO('p', 0x04)  /* ... off      */
1774 #define VKI_RTC_PIE_ON  _VKI_IO('p', 0x05)  /* Periodic int. enable on*/
1775 #define VKI_RTC_PIE_OFF _VKI_IO('p', 0x06)  /* ... off      */
1776 
1777 #define VKI_RTC_ALM_SET     _VKI_IOW('p', 0x07, struct vki_rtc_time) /* Set alarm time  */
1778 #define VKI_RTC_ALM_READ    _VKI_IOR('p', 0x08, struct vki_rtc_time) /* Read alarm time */
1779 #define VKI_RTC_RD_TIME     _VKI_IOR('p', 0x09, struct vki_rtc_time) /* Read RTC time   */
1780 //#define RTC_SET_TIME  _IOW('p', 0x0a, struct rtc_time) /* Set RTC time    */
1781 #define VKI_RTC_IRQP_READ   _VKI_IOR('p', 0x0b, unsigned long)   /* Read IRQ rate   */
1782 #define VKI_RTC_IRQP_SET    _VKI_IOW('p', 0x0c, unsigned long)   /* Set IRQ rate    */
1783 
1784 //----------------------------------------------------------------------
1785 // From linux-2.6.8.1/include/linux/isdn.h
1786 //----------------------------------------------------------------------
1787 
1788 // [[Nb: Resolved this for the common case where CONFIG_COBALT_MICRO_SERVER
1789 //   is not defined]]
1790 #define VKI_ISDN_MAX_CHANNELS   64
1791 
1792 #define VKI_IIOCGETCPS  _VKI_IO('I',21)
1793 
1794 #define VKI_IIOCNETGPN  _VKI_IO('I',34)
1795 
1796 #define VKI_ISDN_MSNLEN          32
1797 
1798 typedef struct {
1799   char name[10];
1800   char phone[VKI_ISDN_MSNLEN];
1801   int  outgoing;
1802 } vki_isdn_net_ioctl_phone;
1803 
1804 //----------------------------------------------------------------------
1805 // From linux-2.6.8.1/include/linux/sockios.h
1806 //----------------------------------------------------------------------
1807 
1808 #define VKI_SIOCOUTQ        VKI_TIOCOUTQ
1809 
1810 #define VKI_SIOCADDRT       0x890B  /* add routing table entry  */
1811 #define VKI_SIOCDELRT       0x890C  /* delete routing table entry   */
1812 
1813 #define VKI_SIOCGIFNAME     0x8910  /* get iface name       */
1814 #define VKI_SIOCGIFCONF     0x8912  /* get iface list       */
1815 #define VKI_SIOCGIFFLAGS    0x8913  /* get flags            */
1816 #define VKI_SIOCSIFFLAGS    0x8914  /* set flags            */
1817 #define VKI_SIOCGIFADDR     0x8915  /* get PA address       */
1818 #define VKI_SIOCSIFADDR     0x8916  /* set PA address       */
1819 #define VKI_SIOCGIFDSTADDR  0x8917  /* get remote PA address    */
1820 #define VKI_SIOCSIFDSTADDR  0x8918  /* set remote PA address    */
1821 #define VKI_SIOCGIFBRDADDR  0x8919  /* get broadcast PA address */
1822 #define VKI_SIOCSIFBRDADDR  0x891a  /* set broadcast PA address */
1823 #define VKI_SIOCGIFNETMASK  0x891b  /* get network PA mask      */
1824 #define VKI_SIOCSIFNETMASK  0x891c  /* set network PA mask      */
1825 #define VKI_SIOCGIFMETRIC   0x891d  /* get metric           */
1826 #define VKI_SIOCSIFMETRIC   0x891e  /* set metric           */
1827 #define VKI_SIOCGIFMTU      0x8921  /* get MTU size         */
1828 #define VKI_SIOCSIFMTU      0x8922  /* set MTU size         */
1829 #define VKI_SIOCSIFHWADDR   0x8924  /* set hardware address     */
1830 #define VKI_SIOCGIFHWADDR   0x8927  /* Get hardware address     */
1831 #define VKI_SIOCGIFINDEX    0x8933  /* name -> if_index mapping */
1832 
1833 #define VKI_SIOCGIFTXQLEN   0x8942  /* Get the tx queue length  */
1834 #define VKI_SIOCSIFTXQLEN   0x8943  /* Set the tx queue length  */
1835 
1836 #define VKI_SIOCETHTOOL     0x8946  /* Ethtool interface        */
1837 
1838 #define VKI_SIOCGMIIPHY     0x8947  /* Get address of MII PHY in use. */
1839 #define VKI_SIOCGMIIREG     0x8948  /* Read MII PHY register.   */
1840 #define VKI_SIOCSMIIREG     0x8949  /* Write MII PHY register.  */
1841 
1842 #define VKI_SIOCDARP        0x8953  /* delete ARP table entry   */
1843 #define VKI_SIOCGARP        0x8954  /* get ARP table entry      */
1844 #define VKI_SIOCSARP        0x8955  /* set ARP table entry      */
1845 
1846 #define VKI_SIOCDRARP       0x8960  /* delete RARP table entry  */
1847 #define VKI_SIOCGRARP       0x8961  /* get RARP table entry     */
1848 #define VKI_SIOCSRARP       0x8962  /* set RARP table entry     */
1849 
1850 #define VKI_SIOCGIFMAP      0x8970  /* Get device parameters    */
1851 #define VKI_SIOCSIFMAP      0x8971  /* Set device parameters    */
1852 
1853 #define VKI_SIOCSHWTSTAMP   0x89B0  /* Set hardware time stamping */
1854 
1855 //----------------------------------------------------------------------
1856 // From linux-2.6.8.1/include/linux/ppdev.h
1857 //----------------------------------------------------------------------
1858 
1859 #define VKI_PP_MAJOR    99
1860 
1861 #define VKI_PP_IOCTL    'p'
1862 
1863 /* Set mode for read/write (e.g. IEEE1284_MODE_EPP) */
1864 #define VKI_PPSETMODE   _VKI_IOW(VKI_PP_IOCTL, 0x80, int)
1865 
1866 /* Read status */
1867 #define VKI_PPRSTATUS   _VKI_IOR(VKI_PP_IOCTL, 0x81, unsigned char)
1868 //#define PPWSTATUS OBSOLETE__IOW(PP_IOCTL, 0x82, unsigned char)
1869 
1870 /* Read/write control */
1871 #define VKI_PPRCONTROL  _VKI_IOR(VKI_PP_IOCTL, 0x83, unsigned char)
1872 #define VKI_PPWCONTROL  _VKI_IOW(VKI_PP_IOCTL, 0x84, unsigned char)
1873 
1874 struct vki_ppdev_frob_struct {
1875     unsigned char mask;
1876     unsigned char val;
1877 };
1878 #define VKI_PPFCONTROL      _VKI_IOW(VKI_PP_IOCTL, 0x8e, struct vki_ppdev_frob_struct)
1879 
1880 /* Read/write data */
1881 #define VKI_PPRDATA     _VKI_IOR(VKI_PP_IOCTL, 0x85, unsigned char)
1882 #define VKI_PPWDATA     _VKI_IOW(VKI_PP_IOCTL, 0x86, unsigned char)
1883 
1884 /* Claim the port to start using it */
1885 #define VKI_PPCLAIM     _VKI_IO(VKI_PP_IOCTL, 0x8b)
1886 
1887 /* Release the port when you aren't using it */
1888 #define VKI_PPRELEASE   _VKI_IO(VKI_PP_IOCTL, 0x8c)
1889 
1890 /* Yield the port (release it if another driver is waiting,
1891  * then reclaim) */
1892 #define VKI_PPYIELD     _VKI_IO(VKI_PP_IOCTL, 0x8d)
1893 
1894 /* Register device exclusively (must be before PPCLAIM). */
1895 #define VKI_PPEXCL      _VKI_IO(VKI_PP_IOCTL, 0x8f)
1896 
1897 /* Data line direction: non-zero for input mode. */
1898 #define VKI_PPDATADIR   _VKI_IOW(VKI_PP_IOCTL, 0x90, int)
1899 
1900 /* Negotiate a particular IEEE 1284 mode. */
1901 #define VKI_PPNEGOT _VKI_IOW(VKI_PP_IOCTL, 0x91, int)
1902 
1903 /* Set control lines when an interrupt occurs. */
1904 #define VKI_PPWCTLONIRQ _VKI_IOW(VKI_PP_IOCTL, 0x92, unsigned char)
1905 
1906 /* Clear (and return) interrupt count. */
1907 #define VKI_PPCLRIRQ    _VKI_IOR(VKI_PP_IOCTL, 0x93, int)
1908 
1909 /* Set the IEEE 1284 phase that we're in (e.g. IEEE1284_PH_FWD_IDLE) */
1910 #define VKI_PPSETPHASE  _VKI_IOW(VKI_PP_IOCTL, 0x94, int)
1911 
1912 /* Set and get port timeout (struct timeval's) */
1913 #define VKI_PPGETTIME   _VKI_IOR(VKI_PP_IOCTL, 0x95, struct vki_timeval)
1914 #define VKI_PPSETTIME   _VKI_IOW(VKI_PP_IOCTL, 0x96, struct vki_timeval)
1915 
1916 #define VKI_PPGETMODES  _VKI_IOR(VKI_PP_IOCTL, 0x97, unsigned int)
1917 
1918 #define VKI_PPGETMODE   _VKI_IOR(VKI_PP_IOCTL, 0x98, int)
1919 #define VKI_PPGETPHASE  _VKI_IOR(VKI_PP_IOCTL, 0x99, int)
1920 
1921 #define VKI_PPGETFLAGS  _VKI_IOR(VKI_PP_IOCTL, 0x9a, int)
1922 #define VKI_PPSETFLAGS  _VKI_IOW(VKI_PP_IOCTL, 0x9b, int)
1923 
1924 //----------------------------------------------------------------------
1925 // From linux-5.2.5/include/uapi/linux/loop.h
1926 //----------------------------------------------------------------------
1927 
1928 #define     VKI_LO_NAME_SIZE        64
1929 #define     VKI_LO_KEY_SIZE         32
1930 
1931 struct vki_loop_info {
1932 
1933     int                 lo_number;              /* ioctl r/o */
1934     unsigned short      lo_device;              /* ioctl r/o */
1935     unsigned long       lo_inode;               /* ioctl r/o */
1936     unsigned short      lo_rdevice;             /* ioctl r/o */
1937     int                 lo_offset;
1938     int                 lo_encrypt_type;
1939     int                 lo_encrypt_key_size;    /* ioctl w/o */
1940     int                 lo_flags;               /* ioctl r/o */
1941     char                lo_name[VKI_LO_NAME_SIZE];
1942     unsigned char       lo_encrypt_key[VKI_LO_KEY_SIZE];/* ioctl w/o */
1943     unsigned long       lo_init[2];
1944     char                reserved[4];
1945 };
1946 
1947 struct vki_loop_info64 {
1948     __vki_u64          lo_device;           /* ioctl r/o */
1949     __vki_u64          lo_inode;            /* ioctl r/o */
1950     __vki_u64          lo_rdevice;          /* ioctl r/o */
1951     __vki_u64          lo_offset;
1952     __vki_u64          lo_sizelimit;/* bytes, 0 == max available */
1953     __vki_u32          lo_number;           /* ioctl r/o */
1954     __vki_u32          lo_encrypt_type;
1955     __vki_u32          lo_encrypt_key_size; /* ioctl w/o */
1956     __vki_u32          lo_flags;            /* ioctl r/o */
1957     __vki_u8           lo_file_name[VKI_LO_NAME_SIZE];
1958     __vki_u8           lo_crypt_name[VKI_LO_NAME_SIZE];
1959     __vki_u8           lo_encrypt_key[VKI_LO_KEY_SIZE]; /* ioctl w/o */
1960     __vki_u64          lo_init[2];
1961 };
1962 
1963 /* loopback device related, e.g. see losetup program options */
1964 #define VKI_LOOP_SET_FD         0x4C00
1965 #define VKI_LOOP_CLR_FD         0x4C01
1966 #define VKI_LOOP_SET_STATUS     0x4C02
1967 #define VKI_LOOP_GET_STATUS     0x4C03
1968 #define VKI_LOOP_SET_STATUS64   0x4C04
1969 #define VKI_LOOP_GET_STATUS64   0x4C05
1970 #define VKI_LOOP_CHANGE_FD      0x4C06
1971 #define VKI_LOOP_SET_CAPACITY   0x4C07
1972 #define VKI_LOOP_SET_DIRECT_IO  0x4C08
1973 #define VKI_LOOP_SET_BLOCK_SIZE 0x4C09
1974 
1975 /* ioctls for loop-control device interface */
1976 #define VKI_LOOP_CTL_ADD        0x4C80 // adds a new loopback device
1977 #define VKI_LOOP_CTL_REMOVE     0x4C81 // deletes an existing loopback device
1978 #define VKI_LOOP_CTL_GET_FREE   0x4C82 // finds a free/available loopback device
1979 
1980 //----------------------------------------------------------------------
1981 // From linux-5.2.5/include/uapi/linux/fs.h
1982 //----------------------------------------------------------------------
1983 
1984 #define VKI_BLKROSET   _VKI_IO(0x12,93) /* set device read-only (0 = read-write) */
1985 #define VKI_BLKROGET   _VKI_IO(0x12,94) /* get read-only status (0 = read_write) */
1986 #define VKI_BLKRRPART  _VKI_IO(0x12,95) /* re-read partition table */
1987 #define VKI_BLKGETSIZE _VKI_IO(0x12,96) /* return device size /512 (long *arg) */
1988 #define VKI_BLKFLSBUF  _VKI_IO(0x12,97) /* flush buffer cache */
1989 #define VKI_BLKRASET   _VKI_IO(0x12,98) /* set read ahead for block device */
1990 #define VKI_BLKRAGET   _VKI_IO(0x12,99) /* get current read ahead setting */
1991 #define VKI_BLKFRASET  _VKI_IO(0x12,100)/* set filesystem (mm/filemap.c) read-ahead */
1992 #define VKI_BLKFRAGET  _VKI_IO(0x12,101)/* get filesystem (mm/filemap.c) read-ahead */
1993 #define VKI_BLKSECTSET _VKI_IO(0x12,102)/* set max sectors per request (ll_rw_blk.c) */
1994 #define VKI_BLKSECTGET _VKI_IO(0x12,103)/* get max sectors per request (ll_rw_blk.c) */
1995 #define VKI_BLKSSZGET  _VKI_IO(0x12,104)/* get block device sector size */
1996 #define VKI_BLKBSZGET  _VKI_IOR(0x12,112,vki_size_t)
1997 #define VKI_BLKBSZSET  _VKI_IOW(0x12,113,vki_size_t)
1998 #define VKI_BLKGETSIZE64 _VKI_IOR(0x12,114,vki_size_t) /* return device size in bytes (u64 *arg) */
1999 #define VKI_BLKDISCARD _VKI_IO(0x12,119)
2000 #define VKI_BLKIOMIN _VKI_IO(0x12,120)
2001 #define VKI_BLKIOOPT _VKI_IO(0x12,121)
2002 #define VKI_BLKALIGNOFF _VKI_IO(0x12,122)
2003 #define VKI_BLKPBSZGET _VKI_IO(0x12,123)
2004 #define VKI_BLKDISCARDZEROES _VKI_IO(0x12,124)
2005 #define VKI_BLKZEROOUT _VKI_IO(0x12,127)
2006 
2007 #define VKI_FIBMAP  _VKI_IO(0x00,1) /* bmap access */
2008 #define VKI_FIGETBSZ    _VKI_IO(0x00,2) /* get the block size used for bmap */
2009 #define VKI_FICLONE     _VKI_IOW(0x94, 9, int)
2010 
2011 //----------------------------------------------------------------------
2012 // From linux-2.6.8.1/include/scsi/sg.h
2013 //----------------------------------------------------------------------
2014 
2015 typedef struct vki_sg_io_hdr
2016 {
2017     int interface_id;           /* [i] 'S' for SCSI generic (required) */
2018     int dxfer_direction;        /* [i] data transfer direction  */
2019     unsigned char cmd_len;      /* [i] SCSI command length ( <= 16 bytes) */
2020     unsigned char mx_sb_len;    /* [i] max length to write to sbp */
2021     unsigned short iovec_count; /* [i] 0 implies no scatter gather */
2022     unsigned int dxfer_len;     /* [i] byte count of data transfer */
2023     void __user *dxferp;    /* [i], [*io] points to data transfer memory
2024                           or scatter gather list */
2025     unsigned char __user *cmdp; /* [i], [*i] points to command to perform */
2026     void __user *sbp;       /* [i], [*o] points to sense_buffer memory */
2027     unsigned int timeout;       /* [i] MAX_UINT->no timeout (unit: millisec) */
2028     unsigned int flags;         /* [i] 0 -> default, see SG_FLAG... */
2029     int pack_id;                /* [i->o] unused internally (normally) */
2030     void __user * usr_ptr;      /* [i->o] unused internally */
2031     unsigned char status;       /* [o] scsi status */
2032     unsigned char masked_status;/* [o] shifted, masked scsi status */
2033     unsigned char msg_status;   /* [o] messaging level data (optional) */
2034     unsigned char sb_len_wr;    /* [o] byte count actually written to sbp */
2035     unsigned short host_status; /* [o] errors from host adapter */
2036     unsigned short driver_status;/* [o] errors from software driver */
2037     int resid;                  /* [o] dxfer_len - actual_transferred */
2038     unsigned int duration;      /* [o] time taken by cmd (unit: millisec) */
2039     unsigned int info;          /* [o] auxiliary information */
2040 } vki_sg_io_hdr_t;  /* 64 bytes long (on i386) */
2041 
2042 #define VKI_SG_DXFER_NONE -1        /* e.g. a SCSI Test Unit Ready command */
2043 #define VKI_SG_DXFER_TO_DEV -2      /* e.g. a SCSI WRITE command */
2044 #define VKI_SG_DXFER_FROM_DEV -3    /* e.g. a SCSI READ command */
2045 #define VKI_SG_DXFER_TO_FROM_DEV -4 /* treated like SG_DXFER_FROM_DEV with the
2046                    additional property than during indirect
2047                    IO the user buffer is copied into the
2048                    kernel buffers before the transfer */
2049 
2050 typedef struct vki_sg_scsi_id { /* used by SG_GET_SCSI_ID ioctl() */
2051     int host_no;        /* as in "scsi<n>" where 'n' is one of 0, 1, 2 etc */
2052     int channel;
2053     int scsi_id;        /* scsi id of target device */
2054     int lun;
2055     int scsi_type;      /* TYPE_... defined in scsi/scsi.h */
2056     short h_cmd_per_lun;/* host (adapter) maximum commands per lun */
2057     short d_queue_depth;/* device (or adapter) maximum queue length */
2058     int unused[2];      /* probably find a good use, set 0 for now */
2059 } vki_sg_scsi_id_t; /* 32 bytes long on i386 */
2060 
2061 #define VKI_SG_EMULATED_HOST 0x2203 /* true for emulated host adapter (ATAPI) */
2062 
2063 #define VKI_SG_SET_RESERVED_SIZE 0x2275  /* request a new reserved buffer size */
2064 #define VKI_SG_GET_RESERVED_SIZE 0x2272  /* actual size of reserved buffer */
2065 
2066 #define VKI_SG_GET_SCSI_ID 0x2276   /* Yields fd's bus, chan, dev, lun + type */
2067 
2068 #define VKI_SG_GET_SG_TABLESIZE 0x227F  /* 0 implies can't do scatter gather */
2069 
2070 #define VKI_SG_GET_VERSION_NUM 0x2282 /* Example: version 2.1.34 yields 20134 */
2071 
2072 #define VKI_SG_IO 0x2285   /* similar effect as write() followed by read() */
2073 
2074 #define VKI_SG_SET_TIMEOUT 0x2201  /* unit: jiffies (10ms on i386) */
2075 #define VKI_SG_GET_TIMEOUT 0x2202  /* yield timeout as _return_ value */
2076 
2077 //#define SG_GET_COMMAND_Q 0x2270   /* Yields 0 (queuing off) or 1 (on) */
2078 #define VKI_SG_SET_COMMAND_Q 0x2271   /* Change queuing state with 0 or 1 */
2079 
2080 //----------------------------------------------------------------------
2081 // From linux-2.6.34/include/scsi/scsi.h and scsi/scsi_ioctl.h
2082 //----------------------------------------------------------------------
2083 
2084 #define VKI_SCSI_IOCTL_DOORLOCK     0x5380 /* Lock the eject mechanism.  */
2085 #define VKI_SCSI_IOCTL_DOORUNLOCK   0x5381 /* Unlock the mechanism.  */
2086 #define VKI_SCSI_IOCTL_GET_IDLUN    0x5382
2087 #define VKI_SCSI_IOCTL_GET_BUS_NUMBER   0x5386
2088 
2089 struct vki_scsi_idlun {
2090     __vki_u32 dev_id;
2091     __vki_u32 host_unique_id;
2092 };
2093 
2094 //----------------------------------------------------------------------
2095 // From linux-2.6.8.1/include/linux/cdrom.h
2096 //----------------------------------------------------------------------
2097 
2098 #define VKI_CDROMPLAYMSF        0x5303 /* Play Audio MSF (struct cdrom_msf) */
2099 #define VKI_CDROMREADTOCHDR     0x5305 /* Read TOC header 
2100                                                (struct cdrom_tochdr) */
2101 #define VKI_CDROMREADTOCENTRY       0x5306 /* Read TOC entry 
2102                                                (struct cdrom_tocentry) */
2103 #define VKI_CDROMSTOP           0x5307 /* Stop the cdrom drive */
2104 #define VKI_CDROMSUBCHNL        0x530b /* Read subchannel data 
2105                                                (struct cdrom_subchnl) */
2106 #define VKI_CDROMREADMODE2      0x530c /* Read CDROM mode 2 data (2336 Bytes) 
2107                                                (struct cdrom_read) */
2108 #define VKI_CDROMREADMODE1      0x530d /* Read CDROM mode 1 data (2048 Bytes)
2109                                                    (struct cdrom_read) */
2110 #define VKI_CDROMREADAUDIO      0x530e /* (struct cdrom_read_audio) */
2111 #define VKI_CDROMMULTISESSION       0x5310 /* Obtain the start-of-last-session 
2112                                                address of multi session disks 
2113                                                (struct cdrom_multisession) */
2114 #define VKI_CDROM_GET_MCN       0x5311 /* Obtain the "Universal Product Code" 
2115                                                if available (struct cdrom_mcn) */
2116 #define VKI_CDROMVOLREAD        0x5313 /* Get the drive's volume setting
2117                                               (struct cdrom_volctrl) */
2118 #define VKI_CDROMREADRAW        0x5314  /* read data in raw mode (2352 Bytes)
2119                                                (struct cdrom_read) */
2120 #define VKI_CDROM_CLEAR_OPTIONS     0x5321  /* Clear behavior options */
2121 #define VKI_CDROM_DRIVE_STATUS      0x5326  /* Get tray position, etc. */
2122 #define VKI_CDROM_DISC_STATUS       0x5327  /* get CD type information */
2123 #define VKI_CDROM_GET_CAPABILITY    0x5331  /* get capabilities */
2124 
2125 #define VKI_DVD_READ_STRUCT     0x5390  /* read structure */
2126 #define VKI_CDROM_SEND_PACKET       0x5393  /* send a packet to the drive */
2127 
2128 struct vki_cdrom_msf0       
2129 {
2130     __vki_u8    minute;
2131     __vki_u8    second;
2132     __vki_u8    frame;
2133 };
2134 
2135 union vki_cdrom_addr        
2136 {
2137     struct vki_cdrom_msf0   msf;
2138     int         lba;
2139 };
2140 
2141 struct vki_cdrom_msf 
2142 {
2143     __vki_u8    cdmsf_min0; /* start minute */
2144     __vki_u8    cdmsf_sec0; /* start second */
2145     __vki_u8    cdmsf_frame0;   /* start frame */
2146     __vki_u8    cdmsf_min1; /* end minute */
2147     __vki_u8    cdmsf_sec1; /* end second */
2148     __vki_u8    cdmsf_frame1;   /* end frame */
2149 };
2150 
2151 struct vki_cdrom_tochdr     
2152 {
2153     __vki_u8    cdth_trk0;  /* start track */
2154     __vki_u8    cdth_trk1;  /* end track */
2155 };
2156 
2157 struct vki_cdrom_volctrl
2158 {
2159     __vki_u8    channel0;
2160     __vki_u8    channel1;
2161     __vki_u8    channel2;
2162     __vki_u8    channel3;
2163 };
2164 
2165 struct vki_cdrom_subchnl 
2166 {
2167     __vki_u8    cdsc_format;
2168     __vki_u8    cdsc_audiostatus;
2169     __vki_u8    cdsc_adr:   4;
2170     __vki_u8    cdsc_ctrl:  4;
2171     __vki_u8    cdsc_trk;
2172     __vki_u8    cdsc_ind;
2173     union vki_cdrom_addr cdsc_absaddr;
2174     union vki_cdrom_addr cdsc_reladdr;
2175 };
2176 
2177 struct vki_cdrom_tocentry 
2178 {
2179     __vki_u8    cdte_track;
2180     __vki_u8    cdte_adr    :4;
2181     __vki_u8    cdte_ctrl   :4;
2182     __vki_u8    cdte_format;
2183     union vki_cdrom_addr cdte_addr;
2184     __vki_u8    cdte_datamode;
2185 };
2186 
2187 struct vki_cdrom_read      
2188 {
2189     int cdread_lba;
2190     char    *cdread_bufaddr;
2191     int cdread_buflen;
2192 };
2193 
2194 struct vki_cdrom_read_audio
2195 {
2196     union vki_cdrom_addr addr; /* frame address */
2197     __vki_u8 addr_format;      /* CDROM_LBA or CDROM_MSF */
2198     int nframes;           /* number of 2352-byte-frames to read at once */
2199     __vki_u8 __user *buf;      /* frame buffer (size: nframes*2352 bytes) */
2200 };
2201 
2202 struct vki_cdrom_multisession
2203 {
2204     union vki_cdrom_addr addr; /* frame address: start-of-last-session 
2205                                (not the new "frame 16"!).  Only valid
2206                                if the "xa_flag" is true. */
2207     __vki_u8 xa_flag;        /* 1: "is XA disk" */
2208     __vki_u8 addr_format;    /* CDROM_LBA or CDROM_MSF */
2209 };
2210 
2211 struct vki_cdrom_mcn 
2212 {
2213   __vki_u8 medium_catalog_number[14]; /* 13 ASCII digits, null-terminated */
2214 };
2215 
2216 #define VKI_CDROM_PACKET_SIZE   12
2217 
2218 struct vki_cdrom_generic_command
2219 {
2220     unsigned char       cmd[VKI_CDROM_PACKET_SIZE];
2221     unsigned char       __user *buffer;
2222     unsigned int        buflen;
2223     int         stat;
2224         // [[replace with void* to reduce inclusion amounts]]
2225     void/*struct vki_request_sense  */__user *sense;
2226     unsigned char       data_direction;
2227     int         quiet;
2228     int         timeout;
2229     void            __user *reserved[1];    /* unused, actually */
2230 };
2231 
2232 #define VKI_CD_SYNC_SIZE         12 /* 12 sync bytes per raw data frame */
2233 #define VKI_CD_HEAD_SIZE          4 /* header (address) bytes per raw data frame */
2234 #define VKI_CD_FRAMESIZE_RAW   2352 /* bytes per frame, "raw" mode */
2235 #define VKI_CD_FRAMESIZE_RAW0 (VKI_CD_FRAMESIZE_RAW-VKI_CD_SYNC_SIZE-VKI_CD_HEAD_SIZE) /*2336*/
2236 #define VKI_CD_FRAMESIZE_RAW1  2048 /* bytes per frame, mode 1*/
2237 
2238 //----------------------------------------------------------------------
2239 // From linux-2.6.8.1/include/linux/soundcard.h
2240 //----------------------------------------------------------------------
2241 
2242 #ifndef _VKI_SIOWR
2243 #if defined(_VKI_IOWR) && (defined(_AIX) || (!defined(sun) && !defined(sparc) && !defined(__sparc__) && !defined(__INCioctlh) && !defined(__Lynx__)))
2244 /* Use already defined ioctl defines if they exist (except with Sun or Sparc) */
2245 #define _VKI_SIO        _VKI_IO
2246 #define _VKI_SIOR       _VKI_IOR
2247 #define _VKI_SIOW       _VKI_IOW
2248 #define _VKI_SIOWR      _VKI_IOWR
2249 #else
2250 // [[Valgrind: Install this case if/when necessary]
2251 #error Valgrind: Cannot handle sparc/sun case yet...
2252 #  endif /* _IOWR */
2253 #endif  /* !_VKI_SIOWR */
2254 
2255 #define VKI_SNDCTL_SEQ_CTRLRATE     _VKI_SIOWR('Q', 3, int) /* Set/get timer resolution (HZ) */
2256 #define VKI_SNDCTL_SEQ_GETOUTCOUNT  _VKI_SIOR ('Q', 4, int)
2257 #define VKI_SNDCTL_SEQ_GETINCOUNT   _VKI_SIOR ('Q', 5, int)
2258 #define VKI_SNDCTL_SEQ_PERCMODE     _VKI_SIOW ('Q', 6, int)
2259 #define VKI_SNDCTL_SEQ_TESTMIDI     _VKI_SIOW ('Q', 8, int)
2260 #define VKI_SNDCTL_SEQ_RESETSAMPLES _VKI_SIOW ('Q', 9, int)
2261 #define VKI_SNDCTL_SEQ_NRSYNTHS     _VKI_SIOR ('Q',10, int)
2262 #define VKI_SNDCTL_SEQ_NRMIDIS      _VKI_SIOR ('Q',11, int)
2263 #define VKI_SNDCTL_SEQ_GETTIME      _VKI_SIOR ('Q',19, int)
2264 
2265 #define VKI_SNDCTL_TMR_TIMEBASE     _VKI_SIOWR('T', 1, int)
2266 #define VKI_SNDCTL_TMR_TEMPO        _VKI_SIOWR('T', 5, int)
2267 #define VKI_SNDCTL_TMR_SOURCE       _VKI_SIOWR('T', 6, int)
2268 
2269 #define VKI_SNDCTL_MIDI_PRETIME     _VKI_SIOWR('m', 0, int)
2270 #define VKI_SNDCTL_MIDI_MPUMODE     _VKI_SIOWR('m', 1, int)
2271 
2272 #define VKI_SNDCTL_DSP_RESET        _VKI_SIO  ('P', 0)
2273 #define VKI_SNDCTL_DSP_SYNC     _VKI_SIO  ('P', 1)
2274 #define VKI_SNDCTL_DSP_SPEED        _VKI_SIOWR('P', 2, int)
2275 #define VKI_SNDCTL_DSP_STEREO       _VKI_SIOWR('P', 3, int)
2276 #define VKI_SNDCTL_DSP_GETBLKSIZE   _VKI_SIOWR('P', 4, int)
2277 #define VKI_SNDCTL_DSP_CHANNELS     _VKI_SIOWR('P', 6, int)
2278 #define VKI_SOUND_PCM_WRITE_FILTER  _VKI_SIOWR('P', 7, int)
2279 #define VKI_SNDCTL_DSP_POST     _VKI_SIO  ('P', 8)
2280 #define VKI_SNDCTL_DSP_SUBDIVIDE    _VKI_SIOWR('P', 9, int)
2281 #define VKI_SNDCTL_DSP_SETFRAGMENT  _VKI_SIOWR('P',10, int)
2282 
2283 #define VKI_SNDCTL_DSP_GETFMTS      _VKI_SIOR ('P',11, int) /* Returns a mask */
2284 #define VKI_SNDCTL_DSP_SETFMT       _VKI_SIOWR('P', 5, int) /* Selects ONE fmt */
2285 
2286 typedef struct vki_audio_buf_info {
2287             int fragments;  /* # of available fragments (partially usend ones not counted) */
2288             int fragstotal; /* Total # of fragments allocated */
2289             int fragsize;   /* Size of a fragment in bytes */
2290 
2291             int bytes;  /* Available space in bytes (includes partially used fragments) */
2292             /* Note! 'bytes' could be more than fragments*fragsize */
2293         } vki_audio_buf_info;
2294 
2295 #define VKI_SNDCTL_DSP_GETOSPACE    _VKI_SIOR ('P',12, vki_audio_buf_info)
2296 #define VKI_SNDCTL_DSP_GETISPACE    _VKI_SIOR ('P',13, vki_audio_buf_info)
2297 #define VKI_SNDCTL_DSP_NONBLOCK     _VKI_SIO  ('P',14)
2298 #define VKI_SNDCTL_DSP_GETCAPS      _VKI_SIOR ('P',15, int)
2299 
2300 #define VKI_SNDCTL_DSP_GETTRIGGER   _VKI_SIOR ('P',16, int)
2301 #define VKI_SNDCTL_DSP_SETTRIGGER   _VKI_SIOW ('P',16, int)
2302 
2303 #define VKI_SNDCTL_DSP_SETSYNCRO    _VKI_SIO  ('P', 21)
2304 #define VKI_SNDCTL_DSP_SETDUPLEX    _VKI_SIO  ('P', 22)
2305 #define VKI_SNDCTL_DSP_GETODELAY    _VKI_SIOR ('P', 23, int)
2306 
2307 #define VKI_SNDCTL_DSP_GETCHANNELMASK   _VKI_SIOWR('P', 64, int)
2308 #define VKI_SNDCTL_DSP_BIND_CHANNEL _VKI_SIOWR('P', 65, int)
2309 
2310 #define VKI_SNDCTL_DSP_SETSPDIF     _VKI_SIOW ('P', 66, int)
2311 #define VKI_SNDCTL_DSP_GETSPDIF     _VKI_SIOR ('P', 67, int)
2312 
2313 #define VKI_SOUND_PCM_READ_RATE     _VKI_SIOR ('P', 2, int)
2314 #define VKI_SOUND_PCM_READ_CHANNELS _VKI_SIOR ('P', 6, int)
2315 #define VKI_SOUND_PCM_READ_BITS     _VKI_SIOR ('P', 5, int)
2316 #define VKI_SOUND_PCM_READ_FILTER   _VKI_SIOR ('P', 7, int)
2317 
2318 
2319 //----------------------------------------------------------------------
2320 // From linux-2.6.8.1/include/linux/hdreg.h
2321 //----------------------------------------------------------------------
2322 
2323 struct vki_hd_geometry {
2324       unsigned char heads;
2325       unsigned char sectors;
2326       unsigned short cylinders;
2327       unsigned long start;
2328 };
2329 
2330 #define VKI_HDIO_GETGEO     0x0301  /* get device geometry */
2331 #define VKI_HDIO_GET_DMA    0x030b  /* get use-dma flag */
2332 #define VKI_HDIO_GET_IDENTITY   0x030d  /* get IDE identification info */
2333 
2334 // [[Nb: done like this because the original type is a huge struct that will
2335 //   always be the same size.]]
2336 #define VKI_SIZEOF_STRUCT_HD_DRIVEID   512
2337 
2338 //----------------------------------------------------------------------
2339 // From linux-2.6.8.1/include/linux/fb.h
2340 //----------------------------------------------------------------------
2341 
2342 #define VKI_FBIOGET_VSCREENINFO 0x4600
2343 #define VKI_FBIOPUT_VSCREENINFO 0x4601
2344 #define VKI_FBIOGET_FSCREENINFO 0x4602
2345 #define VKI_FBIOPAN_DISPLAY 0x4606
2346 
2347 struct vki_fb_fix_screeninfo {
2348     char id[16];            /* identification string eg "TT Builtin" */
2349     unsigned long smem_start;   /* Start of frame buffer mem */
2350                     /* (physical address) */
2351     __vki_u32 smem_len;         /* Length of frame buffer mem */
2352     __vki_u32 type;         /* see FB_TYPE_*        */
2353     __vki_u32 type_aux;     /* Interleave for interleaved Planes */
2354     __vki_u32 visual;       /* see FB_VISUAL_*      */ 
2355     __vki_u16 xpanstep;     /* zero if no hardware panning  */
2356     __vki_u16 ypanstep;     /* zero if no hardware panning  */
2357     __vki_u16 ywrapstep;        /* zero if no hardware ywrap    */
2358     __vki_u32 line_length;      /* length of a line in bytes    */
2359     unsigned long mmio_start;   /* Start of Memory Mapped I/O   */
2360                     /* (physical address) */
2361     __vki_u32 mmio_len;     /* Length of Memory Mapped I/O  */
2362     __vki_u32 accel;        /* Indicate to driver which */
2363                     /*  specific chip/card we have  */
2364     __vki_u16 reserved[3];      /* Reserved for future compatibility */
2365 };
2366 
2367 struct vki_fb_bitfield {
2368     __vki_u32 offset;       /* beginning of bitfield    */
2369     __vki_u32 length;       /* length of bitfield       */
2370     __vki_u32 msb_right;        /* != 0 : Most significant bit is */ 
2371                     /* right */ 
2372 };
2373 
2374 struct vki_fb_var_screeninfo {
2375     __vki_u32 xres;         /* visible resolution       */
2376     __vki_u32 yres;
2377     __vki_u32 xres_virtual;     /* virtual resolution       */
2378     __vki_u32 yres_virtual;
2379     __vki_u32 xoffset;      /* offset from virtual to visible */
2380     __vki_u32 yoffset;      /* resolution           */
2381 
2382     __vki_u32 bits_per_pixel;   /* guess what           */
2383     __vki_u32 grayscale;        /* != 0 Graylevels instead of colors */
2384 
2385     struct vki_fb_bitfield red; /* bitfield in fb mem if true color, */
2386     struct vki_fb_bitfield green;   /* else only length is significant */
2387     struct vki_fb_bitfield blue;
2388     struct vki_fb_bitfield transp;  /* transparency         */  
2389 
2390     __vki_u32 nonstd;       /* != 0 Non standard pixel format */
2391 
2392     __vki_u32 activate;     /* see FB_ACTIVATE_*        */
2393 
2394     __vki_u32 height;       /* height of picture in mm    */
2395     __vki_u32 width;        /* width of picture in mm     */
2396 
2397     __vki_u32 accel_flags;      /* (OBSOLETE) see fb_info.flags */
2398 
2399     /* Timing: All values in pixclocks, except pixclock (of course) */
2400     __vki_u32 pixclock;     /* pixel clock in ps (pico seconds) */
2401     __vki_u32 left_margin;      /* time from sync to picture    */
2402     __vki_u32 right_margin;     /* time from picture to sync    */
2403     __vki_u32 upper_margin;     /* time from sync to picture    */
2404     __vki_u32 lower_margin;
2405     __vki_u32 hsync_len;        /* length of horizontal sync    */
2406     __vki_u32 vsync_len;        /* length of vertical sync  */
2407     __vki_u32 sync;         /* see FB_SYNC_*        */
2408     __vki_u32 vmode;        /* see FB_VMODE_*       */
2409     __vki_u32 rotate;       /* angle we rotate counter clockwise */
2410     __vki_u32 reserved[5];      /* Reserved for future compatibility */
2411 };
2412 
2413 //----------------------------------------------------------------------
2414 // From linux-2.6.9/include/linux/kd.h
2415 //----------------------------------------------------------------------
2416 
2417 #define VKI_GIO_FONT       0x4B60  /* gets font in expanded form */
2418 #define VKI_PIO_FONT       0x4B61  /* use font in expanded form */
2419 
2420 #define VKI_GIO_FONTX      0x4B6B  /* get font using struct consolefontdesc */
2421 #define VKI_PIO_FONTX      0x4B6C  /* set font using struct consolefontdesc */
2422 struct vki_consolefontdesc {
2423     unsigned short charcount;   /* characters in font (256 or 512) */
2424     unsigned short charheight;  /* scan lines per character (1-32) */
2425     char __user *chardata;      /* font data in expanded form */
2426 };
2427 
2428 #define VKI_PIO_FONTRESET  0x4B6D  /* reset to default font */
2429 
2430 #define VKI_GIO_CMAP       0x4B70  /* gets colour palette on VGA+ */
2431 #define VKI_PIO_CMAP       0x4B71  /* sets colour palette on VGA+ */
2432 
2433 #define VKI_KIOCSOUND      0x4B2F  /* start sound generation (0 for off) */
2434 #define VKI_KDMKTONE       0x4B30  /* generate tone */
2435 
2436 #define VKI_KDGETLED       0x4B31  /* return current led state */
2437 #define VKI_KDSETLED       0x4B32  /* set led state [lights, not flags] */
2438 
2439 #define VKI_KDGKBTYPE      0x4B33  /* get keyboard type */
2440 
2441 #define VKI_KDADDIO        0x4B34  /* add i/o port as valid */
2442 #define VKI_KDDELIO        0x4B35  /* del i/o port as valid */
2443 #define VKI_KDENABIO       0x4B36  /* enable i/o to video board */
2444 #define VKI_KDDISABIO      0x4B37  /* disable i/o to video board */
2445 
2446 #define VKI_KDSETMODE      0x4B3A  /* set text/graphics mode */
2447 #define VKI_KDGETMODE      0x4B3B  /* get current mode */
2448 
2449 #define VKI_KDMAPDISP      0x4B3C  /* map display into address space */
2450 #define VKI_KDUNMAPDISP    0x4B3D  /* unmap display from address space */
2451 
2452 #define     VKI_E_TABSZ     256
2453 #define VKI_GIO_SCRNMAP    0x4B40  /* get screen mapping from kernel */
2454 #define VKI_PIO_SCRNMAP    0x4B41  /* put screen mapping table in kernel */
2455 #define VKI_GIO_UNISCRNMAP 0x4B69  /* get full Unicode screen mapping */
2456 #define VKI_PIO_UNISCRNMAP 0x4B6A  /* set full Unicode screen mapping */
2457 
2458 #define VKI_GIO_UNIMAP     0x4B66  /* get unicode-to-font mapping from kernel */
2459 struct vki_unipair {
2460     unsigned short unicode;
2461     unsigned short fontpos;
2462 };
2463 struct vki_unimapdesc {
2464     unsigned short entry_ct;
2465     struct vki_unipair __user *entries;
2466 };
2467 #define VKI_PIO_UNIMAP     0x4B67  /* put unicode-to-font mapping in kernel */
2468 #define VKI_PIO_UNIMAPCLR  0x4B68  /* clear table, possibly advise hash algorithm */
2469 struct vki_unimapinit {
2470     unsigned short advised_hashsize;  /* 0 if no opinion */
2471     unsigned short advised_hashstep;  /* 0 if no opinion */
2472     unsigned short advised_hashlevel; /* 0 if no opinion */
2473 };
2474 
2475 #define VKI_KDGKBMODE      0x4B44  /* gets current keyboard mode */
2476 #define VKI_KDSKBMODE      0x4B45  /* sets current keyboard mode */
2477 
2478 #define VKI_KDGKBMETA      0x4B62  /* gets meta key handling mode */
2479 #define VKI_KDSKBMETA      0x4B63  /* sets meta key handling mode */
2480 
2481 #define VKI_KDGKBLED       0x4B64  /* get led flags (not lights) */
2482 #define VKI_KDSKBLED       0x4B65  /* set led flags (not lights) */
2483 
2484 struct vki_kbentry {
2485     unsigned char kb_table;
2486     unsigned char kb_index;
2487     unsigned short kb_value;
2488 };
2489 #define VKI_KDGKBENT       0x4B46  /* gets one entry in translation table */
2490 #define VKI_KDSKBENT       0x4B47  /* sets one entry in translation table */
2491 
2492 struct vki_kbsentry {
2493     unsigned char kb_func;
2494     unsigned char kb_string[512];
2495 };
2496 #define VKI_KDGKBSENT      0x4B48  /* gets one function key string entry */
2497 #define VKI_KDSKBSENT      0x4B49  /* sets one function key string entry */
2498 
2499 struct vki_kbdiacr {
2500         unsigned char diacr, base, result;
2501 };
2502 struct vki_kbdiacrs {
2503         unsigned int kb_cnt;    /* number of entries in following array */
2504     struct vki_kbdiacr kbdiacr[256];    /* MAX_DIACR from keyboard.h */
2505 };
2506 #define VKI_KDGKBDIACR     0x4B4A  /* read kernel accent table */
2507 #define VKI_KDSKBDIACR     0x4B4B  /* write kernel accent table */
2508 
2509 struct vki_kbkeycode {
2510     unsigned int scancode, keycode;
2511 };
2512 #define VKI_KDGETKEYCODE   0x4B4C  /* read kernel keycode table entry */
2513 #define VKI_KDSETKEYCODE   0x4B4D  /* write kernel keycode table entry */
2514 
2515 #define VKI_KDSIGACCEPT    0x4B4E  /* accept kbd generated signals */
2516 
2517 struct vki_kbd_repeat {
2518     int delay;  /* in msec; <= 0: don't change */
2519     int period; /* in msec; <= 0: don't change */
2520             /* earlier this field was misnamed "rate" */
2521 };
2522 #define VKI_KDKBDREP       0x4B52  /* set keyboard delay/repeat rate;
2523                                     * actually used values are returned */
2524 
2525 #define VKI_KDFONTOP       0x4B72  /* font operations */
2526 
2527 struct vki_console_font_op {
2528     unsigned int op;    /* operation code KD_FONT_OP_* */
2529     unsigned int flags; /* KD_FONT_FLAG_* */
2530     unsigned int width, height; /* font size */
2531     unsigned int charcount;
2532     unsigned char __user *data; /* font data with height fixed to 32 */
2533 };
2534 
2535 #define VKI_KD_FONT_OP_SET      0   /* Set font */
2536 #define VKI_KD_FONT_OP_GET      1   /* Get font */
2537 #define VKI_KD_FONT_OP_SET_DEFAULT  2   /* Set font to default, data points to name / NULL */
2538 #define VKI_KD_FONT_OP_COPY     3   /* Copy from another console */
2539 
2540 //----------------------------------------------------------------------
2541 // From linux-2.6.9/include/linux/kb.h
2542 //----------------------------------------------------------------------
2543 
2544 typedef __vki_kernel_uid32_t vki_qid_t; /* Type in which we store ids in memory */
2545 
2546 //----------------------------------------------------------------------
2547 // From linux-2.6.20.1/include/linux/ptrace.h
2548 //----------------------------------------------------------------------
2549 
2550 #define VKI_PTRACE_TRACEME         0
2551 #define VKI_PTRACE_PEEKTEXT    1
2552 #define VKI_PTRACE_PEEKDATA    2
2553 #define VKI_PTRACE_PEEKUSR     3
2554 #define VKI_PTRACE_POKEUSR     6
2555 
2556 #define VKI_PTRACE_DETACH         17
2557 
2558 #define VKI_PTRACE_GETEVENTMSG  0x4201
2559 #define VKI_PTRACE_GETSIGINFO   0x4202
2560 #define VKI_PTRACE_SETSIGINFO   0x4203
2561 #define VKI_PTRACE_GETREGSET    0x4204
2562 #define VKI_PTRACE_SETREGSET    0x4205
2563 
2564 #define VKI_PT_PTRACED 0x00000001
2565 
2566 //----------------------------------------------------------------------
2567 // From linux-2.6.14/include/sound/asound.h
2568 //----------------------------------------------------------------------
2569 
2570 enum {
2571     VKI_SNDRV_PCM_IOCTL_HW_FREE = _VKI_IO('A', 0x12),
2572     VKI_SNDRV_PCM_IOCTL_HWSYNC = _VKI_IO('A', 0x22),
2573     VKI_SNDRV_PCM_IOCTL_PREPARE = _VKI_IO('A', 0x40),
2574     VKI_SNDRV_PCM_IOCTL_RESET = _VKI_IO('A', 0x41),
2575     VKI_SNDRV_PCM_IOCTL_START = _VKI_IO('A', 0x42),
2576     VKI_SNDRV_PCM_IOCTL_DROP = _VKI_IO('A', 0x43),
2577     VKI_SNDRV_PCM_IOCTL_DRAIN = _VKI_IO('A', 0x44),
2578     VKI_SNDRV_PCM_IOCTL_PAUSE = _VKI_IOW('A', 0x45, int),
2579     VKI_SNDRV_PCM_IOCTL_RESUME = _VKI_IO('A', 0x47),
2580     VKI_SNDRV_PCM_IOCTL_XRUN = _VKI_IO('A', 0x48),
2581     VKI_SNDRV_PCM_IOCTL_LINK = _VKI_IOW('A', 0x60, int),
2582     VKI_SNDRV_PCM_IOCTL_UNLINK = _VKI_IO('A', 0x61),
2583 };
2584 
2585 enum {
2586     VKI_SNDRV_TIMER_IOCTL_START = _VKI_IO('T', 0xa0),
2587     VKI_SNDRV_TIMER_IOCTL_STOP = _VKI_IO('T', 0xa1),
2588     VKI_SNDRV_TIMER_IOCTL_CONTINUE = _VKI_IO('T', 0xa2),
2589     VKI_SNDRV_TIMER_IOCTL_PAUSE = _VKI_IO('T', 0xa3),
2590 };
2591 
2592 struct vki_snd_ctl_card_info {
2593     int card;           /* card number */
2594     int pad;            /* reserved for future (was type) */
2595     unsigned char id[16];       /* ID of card (user selectable) */
2596     unsigned char driver[16];   /* Driver name */
2597     unsigned char name[32];     /* Short name of soundcard */
2598     unsigned char longname[80]; /* name + info text about soundcard */
2599     unsigned char reserved_[16];    /* reserved for future (was ID of mixer) */
2600     unsigned char mixername[80];    /* visual mixer identification */
2601     unsigned char components[128];  /* card components / fine identification, delimited with one space (AC97 etc..) */
2602 };
2603 
2604 typedef int vki_snd_ctl_elem_iface_t;
2605 #define VKI_SNDRV_CTL_ELEM_IFACE_CARD       ((vki_snd_ctl_elem_iface_t) 0) /* global control */
2606 #define VKI_SNDRV_CTL_ELEM_IFACE_HWDEP      ((vki_snd_ctl_elem_iface_t) 1) /* hardware dependent device */
2607 #define VKI_SNDRV_CTL_ELEM_IFACE_MIXER      ((vki_snd_ctl_elem_iface_t) 2) /* virtual mixer device */
2608 #define VKI_SNDRV_CTL_ELEM_IFACE_PCM        ((vki_snd_ctl_elem_iface_t) 3) /* PCM device */
2609 #define VKI_SNDRV_CTL_ELEM_IFACE_RAWMIDI    ((vki_snd_ctl_elem_iface_t) 4) /* RawMidi device */
2610 #define VKI_SNDRV_CTL_ELEM_IFACE_TIMER      ((vki_snd_ctl_elem_iface_t) 5) /* timer device */
2611 #define VKI_SNDRV_CTL_ELEM_IFACE_SEQUENCER  ((vki_snd_ctl_elem_iface_t) 6) /* sequencer client */
2612 #define VKI_SNDRV_CTL_ELEM_IFACE_LAST       VKI_SNDRV_CTL_ELEM_IFACE_SEQUENCER
2613 
2614 struct vki_snd_ctl_elem_id {
2615     unsigned int numid;     /* numeric identifier, zero = invalid */
2616     vki_snd_ctl_elem_iface_t iface; /* interface identifier */
2617     unsigned int device;        /* device/client number */
2618     unsigned int subdevice;     /* subdevice (substream) number */
2619     unsigned char name[44];     /* ASCII name of item */
2620     unsigned int index;     /* index of item */
2621 };
2622 
2623 struct vki_snd_ctl_elem_list {
2624     unsigned int offset;        /* W: first element ID to get */
2625     unsigned int space;     /* W: count of element IDs to get */
2626     unsigned int used;      /* R: count of element IDs set */
2627     unsigned int count;     /* R: count of all elements */
2628     struct vki_snd_ctl_elem_id __user *pids; /* R: IDs */
2629     unsigned char reserved[50];
2630 };
2631 
2632 struct vki_snd_ctl_tlv {
2633     unsigned int numid; /* control element numeric identification */
2634     unsigned int length;    /* in bytes aligned to 4 */
2635     unsigned int tlv[0];    /* first TLV */
2636 };
2637 
2638 #define VKI_SNDRV_CTL_IOCTL_PVERSION    _VKI_IOR('U', 0x00, int)
2639 #define VKI_SNDRV_CTL_IOCTL_CARD_INFO   _VKI_IOR('U', 0x01, struct vki_snd_ctl_card_info)
2640 #define VKI_SNDRV_CTL_IOCTL_ELEM_LIST   _VKI_IOWR('U', 0x10, struct vki_snd_ctl_elem_list)
2641 #define VKI_SNDRV_CTL_IOCTL_TLV_READ    _VKI_IOWR('U', 0x1a, struct vki_snd_ctl_tlv)
2642 #define VKI_SNDRV_CTL_IOCTL_TLV_WRITE   _VKI_IOWR('U', 0x1b, struct vki_snd_ctl_tlv)
2643 #define VKI_SNDRV_CTL_IOCTL_TLV_COMMAND _VKI_IOWR('U', 0x1c, struct vki_snd_ctl_tlv)
2644 
2645 //----------------------------------------------------------------------
2646 // From linux-2.6.15.4/include/linux/serial.h
2647 //----------------------------------------------------------------------
2648 
2649 struct vki_serial_icounter_struct {
2650     int cts, dsr, rng, dcd;
2651     int rx, tx;
2652     int frame, overrun, parity, brk;
2653     int buf_overrun;
2654     int reserved[9];
2655 };
2656 
2657 //----------------------------------------------------------------------
2658 // From linux-2.6.16/include/linux/vt.h
2659 //----------------------------------------------------------------------
2660 
2661 #define VKI_VT_OPENQRY  0x5600  /* find available vt */
2662 
2663 struct vki_vt_mode {
2664     char mode;      /* vt mode */
2665     char waitv;     /* if set, hang on writes if not active */
2666     short relsig;       /* signal to raise on release req */
2667     short acqsig;       /* signal to raise on acquisition */
2668     short frsig;        /* unused (set to 0) */
2669 };
2670 #define VKI_VT_GETMODE  0x5601  /* get mode of active vt */
2671 #define VKI_VT_SETMODE  0x5602  /* set mode of active vt */
2672 
2673 struct vki_vt_stat {
2674     unsigned short v_active;    /* active vt */
2675     unsigned short v_signal;    /* signal to send */
2676     unsigned short v_state;     /* vt bitmask */
2677 };
2678 #define VKI_VT_GETSTATE 0x5603  /* get global vt state info */
2679 #define VKI_VT_SENDSIG  0x5604  /* signal to send to bitmask of vts */
2680 
2681 #define VKI_VT_RELDISP  0x5605  /* release display */
2682 
2683 #define VKI_VT_ACTIVATE 0x5606  /* make vt active */
2684 #define VKI_VT_WAITACTIVE   0x5607  /* wait for vt active */
2685 #define VKI_VT_DISALLOCATE  0x5608  /* free memory associated to vt */
2686 
2687 struct vki_vt_sizes {
2688     unsigned short v_rows;      /* number of rows */
2689     unsigned short v_cols;      /* number of columns */
2690     unsigned short v_scrollsize;    /* number of lines of scrollback */
2691 };
2692 #define VKI_VT_RESIZE   0x5609  /* set kernel's idea of screensize */
2693 
2694 struct vki_vt_consize {
2695     unsigned short v_rows;  /* number of rows */
2696     unsigned short v_cols;  /* number of columns */
2697     unsigned short v_vlin;  /* number of pixel rows on screen */
2698     unsigned short v_clin;  /* number of pixel rows per character */
2699     unsigned short v_vcol;  /* number of pixel columns on screen */
2700     unsigned short v_ccol;  /* number of pixel columns per character */
2701 };
2702 #define VKI_VT_RESIZEX      0x560A  /* set kernel's idea of screensize + more */
2703 #define VKI_VT_LOCKSWITCH   0x560B  /* disallow vt switching */
2704 #define VKI_VT_UNLOCKSWITCH 0x560C  /* allow vt switching */
2705 
2706 //----------------------------------------------------------------------
2707 // From linux-2.6.19/include/linux/prctl.h
2708 //----------------------------------------------------------------------
2709 
2710 #define VKI_PR_SET_PDEATHSIG  1  /* Second arg is a signal */
2711 #define VKI_PR_GET_PDEATHSIG  2  /* Second arg is a ptr to return the signal */
2712 
2713 #define VKI_PR_GET_DUMPABLE   3
2714 #define VKI_PR_SET_DUMPABLE   4
2715 
2716 #define VKI_PR_GET_UNALIGN    5
2717 #define VKI_PR_SET_UNALIGN    6
2718 # define VKI_PR_UNALIGN_NOPRINT 1   /* silently fix up unaligned user accesses */
2719 # define VKI_PR_UNALIGN_SIGBUS  2   /* generate SIGBUS on unaligned user access */
2720 
2721 #define VKI_PR_GET_KEEPCAPS   7
2722 #define VKI_PR_SET_KEEPCAPS   8
2723 
2724 #define VKI_PR_GET_FPEMU  9
2725 #define VKI_PR_SET_FPEMU 10
2726 # define VKI_PR_FPEMU_NOPRINT   1   /* silently emulate fp operations accesses */
2727 # define VKI_PR_FPEMU_SIGFPE    2   /* don't emulate fp operations, send SIGFPE instead */
2728 
2729 #define VKI_PR_GET_FPEXC    11
2730 #define VKI_PR_SET_FPEXC    12
2731 # define VKI_PR_FP_EXC_SW_ENABLE    0x80    /* Use FPEXC for FP exception enables */
2732 # define VKI_PR_FP_EXC_DIV      0x010000    /* floating point divide by zero */
2733 # define VKI_PR_FP_EXC_OVF      0x020000    /* floating point overflow */
2734 # define VKI_PR_FP_EXC_UND      0x040000    /* floating point underflow */
2735 # define VKI_PR_FP_EXC_RES      0x080000    /* floating point inexact result */
2736 # define VKI_PR_FP_EXC_INV      0x100000    /* floating point invalid operation */
2737 # define VKI_PR_FP_EXC_DISABLED 0   /* FP exceptions disabled */
2738 # define VKI_PR_FP_EXC_NONRECOV 1   /* async non-recoverable exc. mode */
2739 # define VKI_PR_FP_EXC_ASYNC    2   /* async recoverable exception mode */
2740 # define VKI_PR_FP_EXC_PRECISE  3   /* precise exception mode */
2741 
2742 #define VKI_PR_GET_TIMING   13
2743 #define VKI_PR_SET_TIMING   14
2744 # define VKI_PR_TIMING_STATISTICAL  0       /* Normal, traditional,
2745                                                    statistical process timing */
2746 # define VKI_PR_TIMING_TIMESTAMP    1       /* Accurate timestamp based
2747                                                    process timing */
2748 
2749 #define VKI_PR_SET_NAME    15       /* Set process name */
2750 #define VKI_PR_GET_NAME    16       /* Get process name */
2751 
2752 #define VKI_PR_GET_ENDIAN   19
2753 #define VKI_PR_SET_ENDIAN   20
2754 # define VKI_PR_ENDIAN_BIG      0
2755 # define VKI_PR_ENDIAN_LITTLE   1   /* True little endian mode */
2756 # define VKI_PR_ENDIAN_PPC_LITTLE   2   /* "PowerPC" pseudo little endian */
2757 
2758 #define VKI_PR_SET_SECCOMP 22
2759 
2760 #define VKI_PR_CAPBSET_READ 23
2761 #define VKI_PR_CAPBSET_DROP 24
2762 
2763 #define VKI_PR_GET_TSC 25
2764 #define VKI_PR_SET_TSC 26
2765 
2766 #define VKI_PR_GET_SECUREBITS 27
2767 #define VKI_PR_SET_SECUREBITS 28
2768 
2769 #define VKI_PR_SET_TIMERSLACK 29
2770 #define VKI_PR_GET_TIMERSLACK 30
2771 
2772 #define VKI_PR_TASK_PERF_EVENTS_DISABLE     31
2773 #define VKI_PR_TASK_PERF_EVENTS_ENABLE      32
2774 
2775 #define VKI_PR_MCE_KILL 33
2776 #define VKI_PR_MCE_KILL_GET 34
2777 
2778 #define VKI_PR_SET_PTRACER 0x59616d61
2779 
2780 #define VKI_PR_SET_CHILD_SUBREAPER  36
2781 #define VKI_PR_GET_CHILD_SUBREAPER  37
2782 
2783 #define VKI_PR_SET_NO_NEW_PRIVS 38
2784 #define VKI_PR_GET_NO_NEW_PRIVS 39
2785 
2786 #define VKI_PR_GET_TID_ADDRESS  40
2787 
2788 #define VKI_PR_SET_THP_DISABLE  41
2789 #define VKI_PR_GET_THP_DISABLE  42
2790 
2791 #define VKI_PR_MPX_ENABLE_MANAGEMENT  43
2792 #define VKI_PR_MPX_DISABLE_MANAGEMENT 44
2793 
2794 #define VKI_PR_SET_FP_MODE      45
2795 #define VKI_PR_GET_FP_MODE      46
2796 
2797 #define VKI_PR_CAP_AMBIENT      47
2798 
2799 #define VKI_PR_SVE_SET_VL       50
2800 #define VKI_PR_SVE_GET_VL       51
2801 #define VKI_PR_GET_SPECULATION_CTRL 52
2802 #define VKI_PR_SET_SPECULATION_CTRL 53
2803 #define VKI_PR_PAC_RESET_KEYS       54
2804 #define VKI_PR_SET_TAGGED_ADDR_CTRL 55
2805 #define VKI_PR_GET_TAGGED_ADDR_CTRL 56
2806 
2807 //----------------------------------------------------------------------
2808 // From linux-2.6.19/include/linux/usbdevice_fs.h
2809 //----------------------------------------------------------------------
2810 
2811 struct vki_usbdevfs_ctrltransfer {
2812     __vki_u8 bRequestType;
2813     __vki_u8 bRequest;
2814     __vki_u16 wValue;
2815     __vki_u16 wIndex;
2816     __vki_u16 wLength;
2817     __vki_u32 timeout;  /* in milliseconds */
2818     void __user *data;
2819 };
2820 
2821 struct vki_usbdevfs_bulktransfer {
2822     unsigned int ep;
2823     unsigned int len;
2824     unsigned int timeout; /* in milliseconds */
2825     void __user *data;
2826 };
2827 
2828 #define VKI_USBDEVFS_MAXDRIVERNAME 255
2829 
2830 struct vki_usbdevfs_getdriver {
2831     unsigned int interface;
2832     char driver[VKI_USBDEVFS_MAXDRIVERNAME + 1];
2833 };
2834 
2835 struct vki_usbdevfs_connectinfo {
2836     unsigned int devnum;
2837     unsigned char slow;
2838 };
2839 
2840 struct vki_usbdevfs_iso_packet_desc {
2841     unsigned int length;
2842     unsigned int actual_length;
2843     unsigned int status;
2844 };
2845 
2846 struct vki_usbdevfs_urb {
2847     unsigned char type;
2848     unsigned char endpoint;
2849     int status;
2850     unsigned int flags;
2851     void __user *buffer;
2852     int buffer_length;
2853     int actual_length;
2854     int start_frame;
2855     int number_of_packets;
2856     int error_count;
2857     unsigned int signr;  /* signal to be sent on error, -1 if none should be sent */
2858     void *usercontext;
2859     struct vki_usbdevfs_iso_packet_desc iso_frame_desc[0];
2860 };
2861 
2862 struct vki_usbdevfs_ioctl {
2863     int ifno;       /* interface 0..N ; negative numbers reserved */
2864     int ioctl_code; /* MUST encode size + direction of data so the
2865                  * macros in <asm/ioctl.h> give correct values */
2866     void __user *data;  /* param buffer (in, or out) */
2867 };
2868 
2869 #define VKI_USBDEVFS_CONTROL           _VKI_IOWR('U', 0, struct vki_usbdevfs_ctrltransfer)
2870 #define VKI_USBDEVFS_BULK              _VKI_IOWR('U', 2, struct vki_usbdevfs_bulktransfer)
2871 #define VKI_USBDEVFS_GETDRIVER         _VKI_IOW('U', 8, struct vki_usbdevfs_getdriver)
2872 #define VKI_USBDEVFS_SUBMITURB         _VKI_IOR('U', 10, struct vki_usbdevfs_urb)
2873 #define VKI_USBDEVFS_DISCARDURB        _VKI_IO('U', 11)
2874 #define VKI_USBDEVFS_REAPURB           _VKI_IOW('U', 12, void *)
2875 #define VKI_USBDEVFS_REAPURBNDELAY     _VKI_IOW('U', 13, void *)
2876 #define VKI_USBDEVFS_CONNECTINFO       _VKI_IOW('U', 17, struct vki_usbdevfs_connectinfo)
2877 #define VKI_USBDEVFS_IOCTL             _VKI_IOWR('U', 18, struct vki_usbdevfs_ioctl)
2878 #define VKI_USBDEVFS_RESET             _VKI_IO('U', 20)
2879 
2880 #define VKI_USBDEVFS_URB_TYPE_ISO              0
2881 #define VKI_USBDEVFS_URB_TYPE_INTERRUPT        1
2882 #define VKI_USBDEVFS_URB_TYPE_CONTROL          2
2883 #define VKI_USBDEVFS_URB_TYPE_BULK             3
2884 
2885 // [[this is missing in usbdevice_fs.h]]
2886 struct vki_usbdevfs_setuppacket {
2887        __vki_u8 bRequestType;
2888        __vki_u8 bRequest;
2889        __vki_u16 wValue;
2890        __vki_u16 wIndex;
2891        __vki_u16 wLength;
2892 };
2893 
2894 //----------------------------------------------------------------------
2895 // From linux-2.6.20.1/include/linux/i2c.h
2896 //----------------------------------------------------------------------
2897 
2898 #define VKI_I2C_SMBUS_QUICK             0
2899 #define VKI_I2C_SMBUS_BYTE              1
2900 #define VKI_I2C_SMBUS_BYTE_DATA         2
2901 #define VKI_I2C_SMBUS_WORD_DATA         3
2902 #define VKI_I2C_SMBUS_PROC_CALL         4
2903 #define VKI_I2C_SMBUS_BLOCK_DATA        5
2904 #define VKI_I2C_SMBUS_I2C_BLOCK_BROKEN  6
2905 #define VKI_I2C_SMBUS_BLOCK_PROC_CALL   7           /* SMBus 2.0 */
2906 #define VKI_I2C_SMBUS_I2C_BLOCK_DATA    8
2907 
2908 /* smbus_access read or write markers */
2909 #define VKI_I2C_SMBUS_READ  1
2910 #define VKI_I2C_SMBUS_WRITE 0
2911 
2912 #define VKI_I2C_SLAVE        0x0703  /* Change slave address                 */
2913                                      /* Attn.: Slave address is 7 or 10 bits */
2914 #define VKI_I2C_SLAVE_FORCE  0x0706  /* Change slave address                 */
2915                                      /* Attn.: Slave address is 7 or 10 bits */
2916                                      /* This changes the address, even if it */
2917                                      /* is already taken!                    */
2918 #define VKI_I2C_TENBIT       0x0704  /* 0 for 7 bit addrs, != 0 for 10 bit   */
2919 #define VKI_I2C_FUNCS        0x0705  /* Get the adapter functionality */
2920 #define VKI_I2C_RDWR         0x0707  /* Combined R/W transfer (one STOP only) */
2921 #define VKI_I2C_PEC          0x0708  /* != 0 for SMBus PEC                   */
2922 #define VKI_I2C_SMBUS        0x0720  /* SMBus transfer */
2923 
2924 #define VKI_I2C_SMBUS_BLOCK_MAX  32  /* As specified in SMBus standard */
2925 union vki_i2c_smbus_data {
2926         __vki_u8 byte;
2927         __vki_u16 word;
2928         __vki_u8 block[VKI_I2C_SMBUS_BLOCK_MAX + 2];
2929                  /* block[0] is used for length */
2930                  /* and one more for PEC */
2931 };
2932 
2933 /* This is the structure as used in the I2C_SMBUS ioctl call */
2934 struct vki_i2c_smbus_ioctl_data {
2935         __vki_u8 read_write;
2936         __vki_u8 command;
2937         __vki_u32 size;
2938         union vki_i2c_smbus_data __user *data;
2939 };
2940 
2941 struct vki_i2c_msg {
2942     __vki_u16 addr;     /* slave address            */
2943     __vki_u16 flags;
2944 #define VKI_I2C_M_TEN       0x0010  /* this is a ten bit chip address */
2945 #define VKI_I2C_M_RD        0x0001  /* read data, from slave to master */
2946 #define VKI_I2C_M_NOSTART   0x4000  /* if I2C_FUNC_PROTOCOL_MANGLING */
2947 #define VKI_I2C_M_REV_DIR_ADDR  0x2000  /* if I2C_FUNC_PROTOCOL_MANGLING */
2948 #define VKI_I2C_M_IGNORE_NAK    0x1000  /* if I2C_FUNC_PROTOCOL_MANGLING */
2949 #define VKI_I2C_M_NO_RD_ACK 0x0800  /* if I2C_FUNC_PROTOCOL_MANGLING */
2950 #define VKI_I2C_M_RECV_LEN  0x0400  /* length will be first received byte */
2951     __vki_u16 len;      /* msg length               */
2952     __vki_u8 *buf;      /* pointer to msg data          */
2953 };
2954 
2955 struct vki_i2c_rdwr_ioctl_data {
2956     struct vki_i2c_msg *msgs;   /* pointers to i2c_msgs */
2957     __vki_u32 nmsgs;        /* number of i2c_msgs */
2958 };
2959 
2960 //----------------------------------------------------------------------
2961 // From linux-2.6.20.1/include/linux/keyctl.h
2962 //----------------------------------------------------------------------
2963 
2964 /* keyctl commands */
2965 #define VKI_KEYCTL_GET_KEYRING_ID   0   /* ask for a keyring's ID */
2966 #define VKI_KEYCTL_JOIN_SESSION_KEYRING 1   /* join or start named session keyring */
2967 #define VKI_KEYCTL_UPDATE       2   /* update a key */
2968 #define VKI_KEYCTL_REVOKE       3   /* revoke a key */
2969 #define VKI_KEYCTL_CHOWN        4   /* set ownership of a key */
2970 #define VKI_KEYCTL_SETPERM      5   /* set perms on a key */
2971 #define VKI_KEYCTL_DESCRIBE     6   /* describe a key */
2972 #define VKI_KEYCTL_CLEAR        7   /* clear contents of a keyring */
2973 #define VKI_KEYCTL_LINK         8   /* link a key into a keyring */
2974 #define VKI_KEYCTL_UNLINK       9   /* unlink a key from a keyring */
2975 #define VKI_KEYCTL_SEARCH       10  /* search for a key in a keyring */
2976 #define VKI_KEYCTL_READ         11  /* read a key or keyring's contents */
2977 #define VKI_KEYCTL_INSTANTIATE      12  /* instantiate a partially constructed key */
2978 #define VKI_KEYCTL_NEGATE       13  /* negate a partially constructed key */
2979 #define VKI_KEYCTL_SET_REQKEY_KEYRING   14  /* set default request-key keyring */
2980 #define VKI_KEYCTL_SET_TIMEOUT      15  /* set key timeout */
2981 #define VKI_KEYCTL_ASSUME_AUTHORITY 16  /* assume request_key() authorisation */
2982 
2983 /*--------------------------------------------------------------------*/
2984 // From linux-2.6.20.1/include/linux/key.h
2985 /*--------------------------------------------------------------------*/
2986 
2987 /* key handle serial number */
2988 typedef vki_int32_t vki_key_serial_t;
2989 
2990 /* key handle permissions mask */
2991 typedef vki_uint32_t vki_key_perm_t;
2992 
2993 //----------------------------------------------------------------------
2994 // From linux-2.6.24.7/include/linux/wireless.h
2995 // (wireless extensions version 22, 2007-03-16)
2996 //----------------------------------------------------------------------
2997 
2998 /*
2999  * [[Wireless extensions ioctls.]]
3000  */
3001 
3002 /* Wireless Identification */
3003 #define VKI_SIOCSIWCOMMIT   0x8B00  /* Commit pending changes to driver */
3004 #define VKI_SIOCGIWNAME     0x8B01  /* get name == wireless protocol */
3005 
3006 /* Basic operations */
3007 #define VKI_SIOCSIWNWID     0x8B02  /* set network id (pre-802.11) */
3008 #define VKI_SIOCGIWNWID     0x8B03  /* get network id (the cell) */
3009 #define VKI_SIOCSIWFREQ     0x8B04  /* set channel/frequency (Hz) */
3010 #define VKI_SIOCGIWFREQ     0x8B05  /* get channel/frequency (Hz) */
3011 #define VKI_SIOCSIWMODE     0x8B06  /* set operation mode */
3012 #define VKI_SIOCGIWMODE     0x8B07  /* get operation mode */
3013 #define VKI_SIOCSIWSENS     0x8B08  /* set sensitivity (dBm) */
3014 #define VKI_SIOCGIWSENS     0x8B09  /* get sensitivity (dBm) */
3015 
3016 /* Informative stuff */
3017 #define VKI_SIOCSIWRANGE    0x8B0A  /* Unused */
3018 #define VKI_SIOCGIWRANGE    0x8B0B  /* Get range of parameters */
3019 #define VKI_SIOCSIWPRIV     0x8B0C  /* Unused */
3020 #define VKI_SIOCGIWPRIV     0x8B0D  /* get private ioctl interface info */
3021 #define VKI_SIOCSIWSTATS    0x8B0E  /* Unused */
3022 #define VKI_SIOCGIWSTATS    0x8B0F  /* Get /proc/net/wireless stats */
3023 
3024 /* Spy support (statistics per MAC address - used for Mobile IP support) */
3025 #define VKI_SIOCSIWSPY      0x8B10  /* set spy addresses */
3026 #define VKI_SIOCGIWSPY      0x8B11  /* get spy info (quality of link) */
3027 #define VKI_SIOCSIWTHRSPY   0x8B12  /* set spy threshold (spy event) */
3028 #define VKI_SIOCGIWTHRSPY   0x8B13  /* get spy threshold */
3029 
3030 /* Access Point manipulation */
3031 #define VKI_SIOCSIWAP       0x8B14  /* set access point MAC addresses */
3032 #define VKI_SIOCGIWAP       0x8B15  /* get access point MAC addresses */
3033 #define VKI_SIOCGIWAPLIST   0x8B17  /* Deprecated in favor of scanning */
3034 #define VKI_SIOCSIWSCAN         0x8B18  /* trigger scanning (list cells) */
3035 #define VKI_SIOCGIWSCAN         0x8B19  /* get scanning results */
3036 
3037 /* 802.11 specific support */
3038 #define VKI_SIOCSIWESSID    0x8B1A  /* set ESSID (network name) */
3039 #define VKI_SIOCGIWESSID    0x8B1B  /* get ESSID */
3040 #define VKI_SIOCSIWNICKN    0x8B1C  /* set node name/nickname */
3041 #define VKI_SIOCGIWNICKN    0x8B1D  /* get node name/nickname */
3042 
3043 /* Other parameters useful in 802.11 and some other devices */
3044 #define VKI_SIOCSIWRATE     0x8B20  /* set default bit rate (bps) */
3045 #define VKI_SIOCGIWRATE     0x8B21  /* get default bit rate (bps) */
3046 #define VKI_SIOCSIWRTS      0x8B22  /* set RTS/CTS threshold (bytes) */
3047 #define VKI_SIOCGIWRTS      0x8B23  /* get RTS/CTS threshold (bytes) */
3048 #define VKI_SIOCSIWFRAG     0x8B24  /* set fragmentation thr (bytes) */
3049 #define VKI_SIOCGIWFRAG     0x8B25  /* get fragmentation thr (bytes) */
3050 #define VKI_SIOCSIWTXPOW    0x8B26  /* set transmit power (dBm) */
3051 #define VKI_SIOCGIWTXPOW    0x8B27  /* get transmit power (dBm) */
3052 #define VKI_SIOCSIWRETRY    0x8B28  /* set retry limits and lifetime */
3053 #define VKI_SIOCGIWRETRY    0x8B29  /* get retry limits and lifetime */
3054 
3055 /* Encoding stuff (scrambling, hardware security, WEP...) */
3056 #define VKI_SIOCSIWENCODE   0x8B2A  /* set encoding token & mode */
3057 #define VKI_SIOCGIWENCODE   0x8B2B  /* get encoding token & mode */
3058 
3059 /* Power saving stuff (power management, unicast and multicast) */
3060 #define VKI_SIOCSIWPOWER    0x8B2C  /* set Power Management settings */
3061 #define VKI_SIOCGIWPOWER    0x8B2D  /* get Power Management settings */
3062 
3063 /* WPA : Generic IEEE 802.11 information element (e.g., for WPA/RSN/WMM). */
3064 #define VKI_SIOCSIWGENIE    0x8B30      /* set generic IE */
3065 #define VKI_SIOCGIWGENIE    0x8B31      /* get generic IE */
3066 
3067 /* WPA : IEEE 802.11 MLME requests */
3068 #define VKI_SIOCSIWMLME     0x8B16  /* request MLME operation; uses
3069                      * struct iw_mlme */
3070 /* WPA : Authentication mode parameters */
3071 #define VKI_SIOCSIWAUTH     0x8B32  /* set authentication mode params */
3072 #define VKI_SIOCGIWAUTH     0x8B33  /* get authentication mode params */
3073 
3074 /* WPA : Extended version of encoding configuration */
3075 #define VKI_SIOCSIWENCODEEXT    0x8B34  /* set encoding token & mode */
3076 #define VKI_SIOCGIWENCODEEXT    0x8B35  /* get encoding token & mode */
3077 
3078 /* WPA2 : PMKSA cache management */
3079 #define VKI_SIOCSIWPMKSA    0x8B36  /* PMKSA cache operation */
3080 
3081 /*
3082  * [[Payload for the wireless extensions ioctls.]]
3083  */
3084 
3085 struct  vki_iw_param
3086 {
3087   __vki_s32 value;      /* The value of the parameter itself */
3088   __vki_u8  fixed;      /* Hardware should not use auto select */
3089   __vki_u8  disabled;   /* Disable the feature */
3090   __vki_u16 flags;      /* Various specific flags (if any) */
3091 };
3092 
3093 struct  vki_iw_point
3094 {
3095   void __user   *pointer;   /* Pointer to the data  (in user space) */
3096   __vki_u16 length;     /* number of fields or size in bytes */
3097   __vki_u16 flags;      /* Optional params */
3098 };
3099 
3100 struct  vki_iw_freq
3101 {
3102     __vki_s32   m;      /* Mantissa */
3103     __vki_s16   e;      /* Exponent */
3104     __vki_u8    i;      /* List index (when in range struct) */
3105     __vki_u8    flags;      /* Flags (fixed/auto) */
3106 };
3107 
3108 struct  vki_iw_quality
3109 {
3110     __vki_u8    qual;       /* link quality (%retries, SNR,
3111                        %missed beacons or better...) */
3112     __vki_u8    level;      /* signal level (dBm) */
3113     __vki_u8    noise;      /* noise level (dBm) */
3114     __vki_u8    updated;    /* Flags to know if updated */
3115 };
3116 
3117 union   vki_iwreq_data
3118 {
3119     /* Config - generic */
3120     char        name[VKI_IFNAMSIZ];
3121     /* Name : used to verify the presence of  wireless extensions.
3122      * Name of the protocol/provider... */
3123 
3124     struct vki_iw_point essid;  /* Extended network name */
3125     struct vki_iw_param nwid;   /* network id (or domain - the cell) */
3126     struct vki_iw_freq  freq;   /* frequency or channel :
3127                      * 0-1000 = channel
3128                      * > 1000 = frequency in Hz */
3129 
3130     struct vki_iw_param sens;   /* signal level threshold */
3131     struct vki_iw_param bitrate;/* default bit rate */
3132     struct vki_iw_param txpower;/* default transmit power */
3133     struct vki_iw_param rts;    /* RTS threshold threshold */
3134     struct vki_iw_param frag;   /* Fragmentation threshold */
3135     __vki_u32       mode;   /* Operation mode */
3136     struct vki_iw_param retry;  /* Retry limits & lifetime */
3137 
3138     struct vki_iw_point encoding; /* Encoding stuff : tokens */
3139     struct vki_iw_param power;  /* PM duration/timeout */
3140     struct vki_iw_quality   qual;   /* Quality part of statistics */
3141 
3142     struct vki_sockaddr ap_addr;    /* Access point address */
3143     struct vki_sockaddr addr;   /* Destination address (hw/mac) */
3144 
3145     struct vki_iw_param param;  /* Other small parameters */
3146     struct vki_iw_point data;   /* Other large parameters */
3147 };
3148 
3149 struct  vki_iwreq 
3150 {
3151     union
3152     {
3153         char ifrn_name[VKI_IFNAMSIZ];   /* if name, e.g. "eth0" */
3154     } ifr_ifrn;
3155 
3156     /* Data part (defined just above) */
3157     union   vki_iwreq_data  u;
3158 };
3159 
3160 /*--------------------------------------------------------------------*/
3161 // From linux-2.6.31.5/include/linux/perf_event.h
3162 /*--------------------------------------------------------------------*/
3163 
3164 struct vki_perf_event_attr {
3165 
3166     /*
3167      * Major type: hardware/software/tracepoint/etc.
3168      */
3169     __vki_u32           type;
3170 
3171     /*
3172      * Size of the attr structure, for fwd/bwd compat.
3173      */
3174     __vki_u32           size;
3175 
3176     /*
3177      * Type specific configuration information.
3178      */
3179     __vki_u64           config;
3180 
3181     union {
3182         __vki_u64       sample_period;
3183         __vki_u64       sample_freq;
3184     };
3185 
3186     __vki_u64           sample_type;
3187     __vki_u64           read_format;
3188 
3189     __vki_u64           disabled       :  1, /* off by default        */
3190                     inherit        :  1, /* children inherit it   */
3191                     pinned         :  1, /* must always be on PMU */
3192                     exclusive      :  1, /* only group on PMU     */
3193                     exclude_user   :  1, /* don't count user      */
3194                     exclude_kernel :  1, /* ditto kernel          */
3195                     exclude_hv     :  1, /* ditto hypervisor      */
3196                     exclude_idle   :  1, /* don't count when idle */
3197                     mmap           :  1, /* include mmap data     */
3198                     comm           :  1, /* include comm data     */
3199                     freq           :  1, /* use freq, not period  */
3200                     inherit_stat   :  1, /* per task counts       */
3201                     enable_on_exec :  1, /* next exec enables     */
3202                     task           :  1, /* trace fork/exit       */
3203                     watermark      :  1, /* wakeup_watermark      */
3204                     /*
3205                      * precise_ip:
3206                      *
3207                      *  0 - SAMPLE_IP can have arbitrary skid
3208                      *  1 - SAMPLE_IP must have constant skid
3209                      *  2 - SAMPLE_IP requested to have 0 skid
3210                      *  3 - SAMPLE_IP must have 0 skid
3211                      *
3212                      *  See also PERF_RECORD_MISC_EXACT_IP
3213                      */
3214                     precise_ip     :  2, /* skid constraint       */
3215                     mmap_data      :  1, /* non-exec mmap data    */
3216                     sample_id_all  :  1, /* sample_type all events */
3217 
3218                     __reserved_1   : 45;
3219 
3220     union {
3221         __vki_u32       wakeup_events;    /* wakeup every n events */
3222         __vki_u32       wakeup_watermark; /* bytes before wakeup   */
3223     };
3224 
3225     __vki_u32           bp_type;
3226     union {
3227         __vki_u64       bp_addr;
3228         __vki_u64       config1; /* extension of config */
3229     };
3230     union {
3231         __vki_u64       bp_len;
3232         __vki_u64       config2; /* extension of config1 */
3233     };
3234 };
3235 
3236 #define VKI_PERF_EVENT_IOC_ENABLE       _VKI_IO ('$', 0)
3237 #define VKI_PERF_EVENT_IOC_DISABLE      _VKI_IO ('$', 1)
3238 #define VKI_PERF_EVENT_IOC_REFRESH      _VKI_IO ('$', 2)
3239 #define VKI_PERF_EVENT_IOC_RESET        _VKI_IO ('$', 3)
3240 #define VKI_PERF_EVENT_IOC_PERIOD       _VKI_IOW('$', 4, __vki_u64)
3241 #define VKI_PERF_EVENT_IOC_SET_OUTPUT   _VKI_IO ('$', 5)
3242 #define VKI_PERF_EVENT_IOC_SET_FILTER   _VKI_IOW('$', 6, char *)
3243 #define VKI_PERF_EVENT_IOC_ID           _VKI_IOR('$', 7, __vki_u64 *)
3244 #define VKI_PERF_EVENT_IOC_SET_BPF      _VKI_IOW('$', 8, __vki_u32)
3245 
3246 #define VKI_PERF_FLAG_FD_NO_GROUP       (1UL << 0)
3247 
3248 /*--------------------------------------------------------------------*/
3249 // From linux-2.6.32.4/include/linux/getcpu.h
3250 /*--------------------------------------------------------------------*/
3251 
3252 struct vki_getcpu_cache {
3253     unsigned long blob[128 / sizeof(long)];
3254 };
3255 
3256 //----------------------------------------------------------------------
3257 // From linux-2.6.33.3/include/linux/input.h
3258 //----------------------------------------------------------------------
3259 
3260 /*
3261  * IOCTLs (0x00 - 0x7f)
3262  */
3263 
3264 #define VKI_EVIOCGNAME(len) _VKI_IOC(_VKI_IOC_READ, 'E', 0x06, len)     /* get device name */
3265 #define VKI_EVIOCGPHYS(len) _VKI_IOC(_VKI_IOC_READ, 'E', 0x07, len)     /* get physical location */
3266 #define VKI_EVIOCGUNIQ(len) _VKI_IOC(_VKI_IOC_READ, 'E', 0x08, len)     /* get unique identifier */
3267 
3268 #define VKI_EVIOCGKEY(len)  _VKI_IOC(_VKI_IOC_READ, 'E', 0x18, len)     /* get global keystate */
3269 #define VKI_EVIOCGLED(len)  _VKI_IOC(_VKI_IOC_READ, 'E', 0x19, len)     /* get all LEDs */
3270 #define VKI_EVIOCGSND(len)  _VKI_IOC(_VKI_IOC_READ, 'E', 0x1a, len)     /* get all sounds status */
3271 #define VKI_EVIOCGSW(len)   _VKI_IOC(_VKI_IOC_READ, 'E', 0x1b, len)     /* get all switch states */
3272 
3273 #define VKI_EVIOCGBIT(ev,len)   _VKI_IOC(_VKI_IOC_READ, 'E', 0x20 + ev, len)    /* get event bits */
3274 
3275 #define VKI_EVIOCGRAB       _VKI_IOW('E', 0x90, int)
3276 /* grab device */
3277 
3278 /*
3279  * Event types
3280  */
3281 
3282 #define VKI_EV_SYN      0x00
3283 #define VKI_EV_KEY      0x01
3284 #define VKI_EV_REL      0x02
3285 #define VKI_EV_ABS      0x03
3286 #define VKI_EV_MSC      0x04
3287 #define VKI_EV_SW       0x05
3288 #define VKI_EV_LED      0x11
3289 #define VKI_EV_SND      0x12
3290 #define VKI_EV_REP      0x14
3291 #define VKI_EV_FF       0x15
3292 #define VKI_EV_PWR      0x16
3293 #define VKI_EV_FF_STATUS    0x17
3294 #define VKI_EV_MAX      0x1f
3295 #define VKI_EV_CNT      (VKI_EV_MAX+1)
3296 
3297 //----------------------------------------------------------------------
3298 // From linux-2.6.39-rc2/include/asm_generic/ioctls.h
3299 //----------------------------------------------------------------------
3300 
3301 #ifndef VKI_FIOQSIZE
3302 #define VKI_FIOQSIZE 0x5460     /* Value differs on some platforms */
3303 #endif
3304 
3305 #ifndef VKI_TIOCSIG
3306 #define VKI_TIOCSIG _VKI_IOW('T', 0x36, int) /* Value differs on some platforms */
3307 #endif
3308 
3309 //----------------------------------------------------------------------
3310 // From kernel/common/include/linux/ashmem.h
3311 //----------------------------------------------------------------------
3312 
3313 #if defined(VGPV_arm_linux_android) || defined(VGPV_x86_linux_android) \
3314     || defined(VGPV_mips32_linux_android) \
3315     || defined(VGPV_arm64_linux_android)
3316 
3317 #define VKI_ASHMEM_NAME_LEN 256
3318 
3319 #define VKI_ASHMEM_NAME_DEF "dev/ashmem"
3320 
3321 #define VKI_ASHMEM_NOT_PURGED 0
3322 #define VKI_ASHMEM_WAS_PURGED 1
3323 
3324 #define VKI_ASHMEM_IS_UNPINNED 0
3325 #define VKI_ASHMEM_IS_PINNED 1
3326 
3327 struct vki_ashmem_pin {
3328    vki_uint32_t offset;
3329    vki_uint32_t len;
3330 };
3331 
3332 #define __VKI_ASHMEMIOC 0x77
3333 
3334 #define VKI_ASHMEM_SET_NAME _VKI_IOW(__VKI_ASHMEMIOC, 1, char[VKI_ASHMEM_NAME_LEN])
3335 #define VKI_ASHMEM_GET_NAME _VKI_IOR(__VKI_ASHMEMIOC, 2, char[VKI_ASHMEM_NAME_LEN])
3336 #define VKI_ASHMEM_SET_SIZE _VKI_IOW(__VKI_ASHMEMIOC, 3, vki_size_t)
3337 #define VKI_ASHMEM_GET_SIZE _VKI_IO(__VKI_ASHMEMIOC, 4)
3338 #define VKI_ASHMEM_SET_PROT_MASK _VKI_IOW(__VKI_ASHMEMIOC, 5, unsigned long)
3339 #define VKI_ASHMEM_GET_PROT_MASK _VKI_IO(__VKI_ASHMEMIOC, 6)
3340 #define VKI_ASHMEM_PIN _VKI_IOW(__VKI_ASHMEMIOC, 7, struct vki_ashmem_pin)
3341 #define VKI_ASHMEM_UNPIN _VKI_IOW(__VKI_ASHMEMIOC, 8, struct vki_ashmem_pin)
3342 #define VKI_ASHMEM_GET_PIN_STATUS _VKI_IO(__VKI_ASHMEMIOC, 9)
3343 #define VKI_ASHMEM_PURGE_ALL_CACHES _VKI_IO(__VKI_ASHMEMIOC, 10)
3344 
3345 //----------------------------------------------------------------------
3346 // From kernel/common/include/linux/binder.h
3347 //----------------------------------------------------------------------
3348 
3349 struct vki_binder_write_read {
3350  signed long write_size;
3351  signed long write_consumed;
3352  unsigned long write_buffer;
3353  signed long read_size;
3354  signed long read_consumed;
3355  unsigned long read_buffer;
3356 };
3357 
3358 struct vki_binder_version {
3359  signed long protocol_version;
3360 };
3361 
3362 #define VKI_BINDER_WRITE_READ _VKI_IOWR('b', 1, struct vki_binder_write_read)
3363 #define VKI_BINDER_SET_IDLE_TIMEOUT _VKI_IOW('b', 3, vki_int64_t)
3364 #define VKI_BINDER_SET_MAX_THREADS _VKI_IOW('b', 5, vki_size_t)
3365 #define VKI_BINDER_SET_IDLE_PRIORITY _VKI_IOW('b', 6, int)
3366 #define VKI_BINDER_SET_CONTEXT_MGR _VKI_IOW('b', 7, int)
3367 #define VKI_BINDER_THREAD_EXIT _VKI_IOW('b', 8, int)
3368 #define VKI_BINDER_VERSION _VKI_IOWR('b', 9, struct vki_binder_version)
3369 
3370 #endif /* defined(VGPV_*_linux_android) */
3371 
3372 //----------------------------------------------------------------------
3373 // From linux-3.0.4/include/net/bluetooth/bluetooth.h
3374 //----------------------------------------------------------------------
3375 
3376 typedef struct {
3377    __vki_u8 b[6];
3378 } __vki_packed vki_bdaddr_t;
3379 
3380 //----------------------------------------------------------------------
3381 // From linux-3.0.4/include/net/bluetooth/hci.h
3382 //----------------------------------------------------------------------
3383 
3384 #define VKI_HCIDEVUP        _VKI_IOW('H', 201, int)
3385 #define VKI_HCIDEVDOWN      _VKI_IOW('H', 202, int)
3386 #define VKI_HCIDEVRESET     _VKI_IOW('H', 203, int)
3387 #define VKI_HCIDEVRESTAT    _VKI_IOW('H', 204, int)
3388 
3389 #define VKI_HCIGETDEVLIST   _VKI_IOR('H', 210, int)
3390 
3391 struct vki_hci_dev_req {
3392     __vki_u16  dev_id;
3393     __vki_u32  dev_opt;
3394 };
3395 
3396 struct vki_hci_dev_list_req {
3397     __vki_u16  dev_num;
3398     struct vki_hci_dev_req dev_req[0];  /* hci_dev_req structures */
3399 };
3400 
3401 #define VKI_HCIGETDEVINFO   _VKI_IOR('H', 211, int)
3402 #define VKI_HCIGETCONNLIST  _VKI_IOR('H', 212, int)
3403 #define VKI_HCIGETCONNINFO  _VKI_IOR('H', 213, int)
3404 #define VKI_HCIGETAUTHINFO  _VKI_IOR('H', 215, int)
3405 
3406 #define VKI_HCISETRAW       _VKI_IOW('H', 220, int)
3407 #define VKI_HCISETSCAN      _VKI_IOW('H', 221, int)
3408 #define VKI_HCISETAUTH      _VKI_IOW('H', 222, int)
3409 #define VKI_HCISETENCRYPT   _VKI_IOW('H', 223, int)
3410 #define VKI_HCISETPTYPE     _VKI_IOW('H', 224, int)
3411 #define VKI_HCISETLINKPOL   _VKI_IOW('H', 225, int)
3412 #define VKI_HCISETLINKMODE  _VKI_IOW('H', 226, int)
3413 #define VKI_HCISETACLMTU    _VKI_IOW('H', 227, int)
3414 #define VKI_HCISETSCOMTU    _VKI_IOW('H', 228, int)
3415 
3416 #define VKI_HCIBLOCKADDR    _VKI_IOW('H', 230, int)
3417 #define VKI_HCIUNBLOCKADDR  _VKI_IOW('H', 231, int)
3418 
3419 #define VKI_HCIINQUIRY      _VKI_IOR('H', 240, int)
3420 
3421 struct vki_inquiry_info {
3422    vki_bdaddr_t bdaddr;
3423    __vki_u8     pscan_rep_mode;
3424    __vki_u8     pscan_period_mode;
3425    __vki_u8     pscan_mode;
3426    __vki_u8     dev_class[3];
3427    __vki_le16   clock_offset;
3428 } __vki_packed;
3429 
3430 struct vki_hci_inquiry_req {
3431    __vki_u16 dev_id;
3432    __vki_u16 flags;
3433    __vki_u8  lap[3];
3434    __vki_u8  length;
3435    __vki_u8  num_rsp;
3436 };
3437 
3438 //----------------------------------------------------------------------
3439 // From linux-3.9.2/include/net/bluetooth/rfcomm.h
3440 //----------------------------------------------------------------------
3441 
3442 struct vki_sockaddr_rc {
3443         vki_sa_family_t     rc_family;
3444         vki_bdaddr_t        rc_bdaddr;
3445         __vki_u8            rc_channel;
3446 };
3447 
3448 //----------------------------------------------------------------------
3449 // From linux-3.4/include/linux/kvm.h
3450 //----------------------------------------------------------------------
3451 #define KVMIO 0xAE
3452 
3453 #define VKI_KVM_GET_API_VERSION       _VKI_IO(KVMIO,   0x00)
3454 #define VKI_KVM_CREATE_VM             _VKI_IO(KVMIO,   0x01) /* returns a VM fd */
3455 #define VKI_KVM_CHECK_EXTENSION       _VKI_IO(KVMIO,   0x03)
3456 #define VKI_KVM_GET_VCPU_MMAP_SIZE    _VKI_IO(KVMIO,   0x04) /* in bytes */
3457 #define VKI_KVM_S390_ENABLE_SIE       _VKI_IO(KVMIO,   0x06)
3458 #define VKI_KVM_CREATE_VCPU           _VKI_IO(KVMIO,   0x41)
3459 #define VKI_KVM_SET_NR_MMU_PAGES      _VKI_IO(KVMIO,   0x44)
3460 #define VKI_KVM_GET_NR_MMU_PAGES      _VKI_IO(KVMIO,   0x45)
3461 #define VKI_KVM_SET_TSS_ADDR          _VKI_IO(KVMIO,   0x47)
3462 #define VKI_KVM_CREATE_IRQCHIP        _VKI_IO(KVMIO,   0x60)
3463 #define VKI_KVM_CREATE_PIT            _VKI_IO(KVMIO,   0x64)
3464 #define VKI_KVM_REINJECT_CONTROL      _VKI_IO(KVMIO,   0x71)
3465 #define VKI_KVM_SET_BOOT_CPU_ID       _VKI_IO(KVMIO,   0x78)
3466 #define VKI_KVM_SET_TSC_KHZ           _VKI_IO(KVMIO,  0xa2)
3467 #define VKI_KVM_GET_TSC_KHZ           _VKI_IO(KVMIO,  0xa3)
3468 #define VKI_KVM_RUN                   _VKI_IO(KVMIO,   0x80)
3469 #define VKI_KVM_S390_INITIAL_RESET    _VKI_IO(KVMIO,   0x97)
3470 #define VKI_KVM_NMI                   _VKI_IO(KVMIO,   0x9a)
3471 #define VKI_KVM_KVMCLOCK_CTRL         _VKI_IO(KVMIO,   0xad)
3472 
3473 struct vki_kvm_s390_mem_op {
3474         /* in */
3475         __vki_u64 gaddr;            /* the guest address */
3476         __vki_u64 flags;            /* flags */
3477         __vki_u32 size;             /* amount of bytes */
3478         __vki_u32 op;               /* type of operation */
3479         __vki_u64 buf;              /* buffer in userspace */
3480         __vki_u8 ar;                /* the access register number */
3481         __vki_u8 reserved[31];      /* should be set to 0 */
3482 };
3483 
3484 #define VKI_KVM_S390_MEMOP_LOGICAL_READ     0
3485 #define VKI_KVM_S390_MEMOP_LOGICAL_WRITE    1
3486 #define VKI_KVM_S390_MEMOP_F_CHECK_ONLY     (1ULL << 0)
3487 #define VKI_KVM_S390_MEMOP_F_INJECT_EXCEPTION   (1ULL << 1)
3488 
3489 #define VKI_KVM_S390_MEM_OP           _VKI_IOW(KVMIO,  0xb1, struct vki_kvm_s390_mem_op)
3490 
3491 //----------------------------------------------------------------------
3492 // From linux-2.6/include/linux/net_stamp.h
3493 //----------------------------------------------------------------------
3494 
3495 struct vki_hwtstamp_config {
3496     int flags;
3497     int tx_type;
3498     int rx_filter;
3499 };
3500 
3501 //----------------------------------------------------------------------
3502 // From linux-2.6.12-rc2/include/linux/uinput.h
3503 //----------------------------------------------------------------------
3504 
3505 #define VKI_UINPUT_IOCTL_BASE       'U'
3506 #define VKI_UI_DEV_CREATE       _VKI_IO(VKI_UINPUT_IOCTL_BASE, 1)
3507 #define VKI_UI_DEV_DESTROY      _VKI_IO(VKI_UINPUT_IOCTL_BASE, 2)
3508 
3509 #define VKI_UI_SET_EVBIT        _VKI_IOW(VKI_UINPUT_IOCTL_BASE, 100, int)
3510 #define VKI_UI_SET_KEYBIT       _VKI_IOW(VKI_UINPUT_IOCTL_BASE, 101, int)
3511 #define VKI_UI_SET_RELBIT       _VKI_IOW(VKI_UINPUT_IOCTL_BASE, 102, int)
3512 #define VKI_UI_SET_ABSBIT       _VKI_IOW(VKI_UINPUT_IOCTL_BASE, 103, int)
3513 #define VKI_UI_SET_MSCBIT       _VKI_IOW(VKI_UINPUT_IOCTL_BASE, 104, int)
3514 #define VKI_UI_SET_LEDBIT       _VKI_IOW(VKI_UINPUT_IOCTL_BASE, 105, int)
3515 #define VKI_UI_SET_SNDBIT       _VKI_IOW(VKI_UINPUT_IOCTL_BASE, 106, int)
3516 #define VKI_UI_SET_FFBIT        _VKI_IOW(VKI_UINPUT_IOCTL_BASE, 107, int)
3517 #define VKI_UI_SET_SWBIT        _VKI_IOW(VKI_UINPUT_IOCTL_BASE, 109, int)
3518 #define VKI_UI_SET_PROPBIT      _VKI_IOW(VKI_UINPUT_IOCTL_BASE, 110, int)
3519 
3520 //----------------------------------------------------------------------
3521 // From linux-2.6/include/uapi/rdma/ib_user_mad.h
3522 //----------------------------------------------------------------------
3523 
3524 #define VKI_IB_IOCTL_MAGIC          0x1b
3525 
3526 #define VKI_IB_USER_MAD_REGISTER_AGENT    _VKI_IOWR(VKI_IB_IOCTL_MAGIC, 1, \
3527                                               struct ib_user_mad_reg_req)
3528 
3529 #define VKI_IB_USER_MAD_UNREGISTER_AGENT  _VKI_IOW(VKI_IB_IOCTL_MAGIC, 2, __u32)
3530 
3531 #define VKI_IB_USER_MAD_ENABLE_PKEY       _VKI_IO(VKI_IB_IOCTL_MAGIC, 3)
3532 
3533 //----------------------------------------------------------------------
3534 // From linux-3.8/include/uapi/linux/if_tun.h
3535 //----------------------------------------------------------------------
3536 
3537 #define VKI_TUNSETNOCSUM  _VKI_IOW('T', 200, int) 
3538 #define VKI_TUNSETDEBUG   _VKI_IOW('T', 201, int) 
3539 #define VKI_TUNSETIFF     _VKI_IOW('T', 202, int) 
3540 #define VKI_TUNSETPERSIST _VKI_IOW('T', 203, int) 
3541 #define VKI_TUNSETOWNER   _VKI_IOW('T', 204, int)
3542 #define VKI_TUNSETLINK    _VKI_IOW('T', 205, int)
3543 #define VKI_TUNSETGROUP   _VKI_IOW('T', 206, int)
3544 #define VKI_TUNGETFEATURES _VKI_IOR('T', 207, unsigned int)
3545 #define VKI_TUNSETOFFLOAD  _VKI_IOW('T', 208, unsigned int)
3546 #define VKI_TUNSETTXFILTER _VKI_IOW('T', 209, unsigned int)
3547 #define VKI_TUNGETIFF      _VKI_IOR('T', 210, unsigned int)
3548 #define VKI_TUNGETSNDBUF   _VKI_IOR('T', 211, int)
3549 #define VKI_TUNSETSNDBUF   _VKI_IOW('T', 212, int)
3550 //#define VKI_TUNATTACHFILTER _VKI_IOW('T', 213, struct sock_fprog)
3551 //#define VKI_TUNDETACHFILTER _VKI_IOW('T', 214, struct sock_fprog)
3552 #define VKI_TUNGETVNETHDRSZ _VKI_IOR('T', 215, int)
3553 #define VKI_TUNSETVNETHDRSZ _VKI_IOW('T', 216, int)
3554 #define VKI_TUNSETQUEUE  _VKI_IOW('T', 217, int)
3555 #define VKI_TUNSETIFINDEX   _VKI_IOW('T', 218, unsigned int)
3556 //#define VKI_TUNGETFILTER _VKI_IOR('T', 219, struct sock_fprog)
3557 
3558 //----------------------------------------------------------------------
3559 // From linux-3.8/include/uapi/linux/vhost.h
3560 //----------------------------------------------------------------------
3561 
3562 #define VKI_VHOST_VIRTIO 0xAF
3563 #define VKI_VHOST_SET_OWNER _VKI_IO(VKI_VHOST_VIRTIO, 0x01)
3564 #define VKI_VHOST_RESET_OWNER _VKI_IO(VKI_VHOST_VIRTIO, 0x02)
3565 
3566 //----------------------------------------------------------------------
3567 // Xen privcmd IOCTL
3568 //----------------------------------------------------------------------
3569 
3570 typedef unsigned long __vki_xen_pfn_t;
3571 
3572 struct vki_xen_privcmd_hypercall {
3573        __vki_u64 op;
3574        __vki_u64 arg[5];
3575 };
3576 
3577 struct vki_xen_privcmd_mmap_entry {
3578         __vki_u64 va;
3579         __vki_u64 mfn;
3580         __vki_u64 npages;
3581 };
3582 
3583 struct vki_xen_privcmd_mmap {
3584         int num;
3585         __vki_u16 dom; /* target domain */
3586         struct vki_xen_privcmd_mmap_entry *entry;
3587 };
3588 
3589 struct vki_xen_privcmd_mmapbatch {
3590         int num;     /* number of pages to populate */
3591         __vki_u16 dom; /* target domain */
3592         __vki_u64 addr;  /* virtual address */
3593         __vki_xen_pfn_t *arr; /* array of mfns - top nibble set on err */
3594 };
3595 
3596 struct vki_xen_privcmd_mmapbatch_v2 {
3597         unsigned int num; /* number of pages to populate */
3598         __vki_u16 dom;      /* target domain */
3599         __vki_u64 addr;       /* virtual address */
3600         const __vki_xen_pfn_t *arr; /* array of mfns */
3601         int __user *err;  /* array of error codes */
3602 };
3603 
3604 #define VKI_XEN_IOCTL_PRIVCMD_HYPERCALL    _VKI_IOC(_VKI_IOC_NONE, 'P', 0, sizeof(struct vki_xen_privcmd_hypercall))
3605 #define VKI_XEN_IOCTL_PRIVCMD_MMAP         _VKI_IOC(_VKI_IOC_NONE, 'P', 2, sizeof(struct vki_xen_privcmd_mmap))
3606 
3607 #define VKI_XEN_IOCTL_PRIVCMD_MMAPBATCH    _VKI_IOC(_VKI_IOC_NONE, 'P', 3, sizeof(struct vki_xen_privcmd_mmapbatch))
3608 #define VKI_XEN_IOCTL_PRIVCMD_MMAPBATCH_V2 _VKI_IOC(_VKI_IOC_NONE, 'P', 4, sizeof(struct vki_xen_privcmd_mmapbatch_v2))
3609 
3610 //----------------------------------------------------------------------
3611 // Xen evtchn IOCTL
3612 //----------------------------------------------------------------------
3613 
3614 #define VKI_XEN_IOCTL_EVTCHN_BIND_VIRQ              \
3615     _VKI_IOC(_VKI_IOC_NONE, 'E', 0, sizeof(struct vki_xen_ioctl_evtchn_bind_virq))
3616 struct vki_xen_ioctl_evtchn_bind_virq {
3617     vki_uint32_t virq;
3618 };
3619 
3620 #define VKI_XEN_IOCTL_EVTCHN_BIND_INTERDOMAIN           \
3621     _VKI_IOC(_VKI_IOC_NONE, 'E', 1, sizeof(struct vki_xen_ioctl_evtchn_bind_interdomain))
3622 struct vki_xen_ioctl_evtchn_bind_interdomain {
3623     vki_uint32_t remote_domain;
3624     vki_uint32_t remote_port;
3625 };
3626 
3627 #define VKI_XEN_IOCTL_EVTCHN_BIND_UNBOUND_PORT          \
3628     _VKI_IOC(_VKI_IOC_NONE, 'E', 2, sizeof(struct vki_xen_ioctl_evtchn_bind_unbound_port))
3629 struct vki_xen_ioctl_evtchn_bind_unbound_port {
3630     vki_uint32_t remote_domain;
3631 };
3632 
3633 #define VKI_XEN_IOCTL_EVTCHN_UNBIND             \
3634     _VKI_IOC(_VKI_IOC_NONE, 'E', 3, sizeof(struct vki_xen_ioctl_evtchn_unbind))
3635 struct vki_xen_ioctl_evtchn_unbind {
3636     vki_uint32_t port;
3637 };
3638 
3639 #define VKI_XEN_IOCTL_EVTCHN_NOTIFY             \
3640     _VKI_IOC(_VKI_IOC_NONE, 'E', 4, sizeof(struct vki_xen_ioctl_evtchn_notify))
3641 struct vki_xen_ioctl_evtchn_notify {
3642     vki_uint32_t port;
3643 };
3644 
3645 #define VKI_XEN_IOCTL_EVTCHN_RESET              \
3646     _VKI_IOC(_VKI_IOC_NONE, 'E', 5, 0)
3647 
3648 
3649 //----------------------------------------------------------------------
3650 // From linux-3.4.0/include/linux/fs.h
3651 //----------------------------------------------------------------------
3652 
3653 struct vki_file_handle {
3654    __vki_u32 handle_bytes;
3655    int handle_type;
3656    /* file identifier */
3657    unsigned char f_handle[0];
3658 };
3659 
3660 //----------------------------------------------------------------------
3661 // From linux-3.2.0/include/linux/filter.h
3662 //----------------------------------------------------------------------
3663 
3664 struct vki_sock_filter {
3665     __vki_u16 code; /* Actual filter code */
3666     __vki_u8 jt;    /* Jump true */
3667     __vki_u8 jf;    /* Jump false */
3668     __vki_u32 k;    /* Generic multiuse field */
3669 };
3670 
3671 struct vki_sock_fprog {
3672     __vki_u16 len;  /* actually unsigned short */
3673     struct vki_sock_filter *filter;
3674 };
3675    
3676 //----------------------------------------------------------------------
3677 // From linux/include/uapi/linux/ethtool.h
3678 //----------------------------------------------------------------------
3679 
3680 struct vki_ethtool_cmd {
3681     __vki_u32   cmd;
3682     __vki_u32   supported;
3683     __vki_u32   advertising;
3684     __vki_u16   speed;
3685     __vki_u8    duplex;
3686     __vki_u8    port;
3687     __vki_u8    phy_address;
3688     __vki_u8    transceiver;
3689     __vki_u8    autoneg;
3690     __vki_u8    mdio_support;
3691     __vki_u32   maxtxpkt;
3692     __vki_u32   maxrxpkt;
3693     __vki_u16   speed_hi;
3694     __vki_u8    eth_tp_mdix;
3695     __vki_u8    eth_tp_mdix_ctrl;
3696     __vki_u32   lp_advertising;
3697     __vki_u32   reserved[2];
3698 };
3699 
3700 #define VKI_ETHTOOL_FWVERS_LEN  32
3701 #define VKI_ETHTOOL_BUSINFO_LEN 32
3702 
3703 struct vki_ethtool_drvinfo {
3704     __vki_u32   cmd;
3705     char    driver[32];
3706     char    version[32];
3707     char    fw_version[VKI_ETHTOOL_FWVERS_LEN];
3708     char    bus_info[VKI_ETHTOOL_BUSINFO_LEN];
3709     char    reserved1[32];
3710     char    reserved2[12];
3711     __vki_u32   n_priv_flags;
3712     __vki_u32   n_stats;
3713     __vki_u32   testinfo_len;
3714     __vki_u32   eedump_len;
3715     __vki_u32   regdump_len;
3716 };
3717 
3718 #define VKI_SOPASS_MAX  6
3719 
3720 struct vki_ethtool_wolinfo {
3721     __vki_u32   cmd;
3722     __vki_u32   supported;
3723     __vki_u32   wolopts;
3724     __vki_u8    sopass[VKI_SOPASS_MAX];
3725 };
3726 
3727 struct vki_ethtool_value {
3728     __vki_u32   cmd;
3729     __vki_u32   data;
3730 };
3731 
3732 struct vki_ethtool_regs {
3733     __vki_u32   cmd;
3734     __vki_u32   version;
3735     __vki_u32   len;
3736     __vki_u8    data[0];
3737 };
3738 
3739 struct vki_ethtool_ringparam {
3740     __vki_u32   cmd;
3741     __vki_u32   rx_max_pending;
3742     __vki_u32   rx_mini_max_pending;
3743     __vki_u32   rx_jumbo_max_pending;
3744     __vki_u32   tx_max_pending;
3745     __vki_u32   rx_pending;
3746     __vki_u32   rx_mini_pending;
3747     __vki_u32   rx_jumbo_pending;
3748     __vki_u32   tx_pending;
3749 };
3750 
3751 struct vki_ethtool_channels {
3752     __vki_u32   cmd;
3753     __vki_u32   max_rx;
3754     __vki_u32   max_tx;
3755     __vki_u32   max_other;
3756     __vki_u32   max_combined;
3757     __vki_u32   rx_count;
3758     __vki_u32   tx_count;
3759     __vki_u32   other_count;
3760     __vki_u32   combined_count;
3761 };
3762 
3763 struct vki_ethtool_sset_info {
3764     __vki_u32   cmd;
3765     __vki_u32   reserved;
3766     __vki_u64   sset_mask;
3767     __vki_u32   data[0];
3768 };
3769 
3770 struct vki_ethtool_test {
3771     __vki_u32   cmd;
3772     __vki_u32   flags;
3773     __vki_u32   reserved;
3774     __vki_u32   len;
3775     __vki_u64   data[0];
3776 };
3777 
3778 struct vki_ethtool_perm_addr {
3779     __vki_u32   cmd;
3780     __vki_u32   size;
3781     __vki_u8    data[0];
3782 };
3783 
3784 struct vki_ethtool_get_features_block {
3785     __vki_u32   available;
3786     __vki_u32   requested;
3787     __vki_u32   active;
3788     __vki_u32   never_changed;
3789 };
3790 
3791 struct vki_ethtool_gfeatures {
3792     __vki_u32   cmd;
3793     __vki_u32   size;
3794     struct vki_ethtool_get_features_block features[0];
3795 };
3796 
3797 struct vki_ethtool_set_features_block {
3798     __vki_u32   valid;
3799     __vki_u32   requested;
3800 };
3801 
3802 struct vki_ethtool_sfeatures {
3803     __vki_u32   cmd;
3804     __vki_u32   size;
3805     struct vki_ethtool_set_features_block features[0];
3806 };
3807 
3808 struct vki_ethtool_ts_info {
3809     __vki_u32   cmd;
3810     __vki_u32   so_timestamping;
3811     __vki_s32   phc_index;
3812     __vki_u32   tx_types;
3813     __vki_u32   tx_reserved[3];
3814     __vki_u32   rx_filters;
3815     __vki_u32   rx_reserved[3];
3816 };
3817 
3818 #define VKI_ETHTOOL_GSET    0x00000001 /* Get settings. */
3819 #define VKI_ETHTOOL_SSET    0x00000002 /* Set settings. */
3820 #define VKI_ETHTOOL_GDRVINFO    0x00000003 /* Get driver info. */
3821 #define VKI_ETHTOOL_GREGS   0x00000004 /* Get NIC registers. */
3822 #define VKI_ETHTOOL_GWOL    0x00000005 /* Get wake-on-lan options. */
3823 #define VKI_ETHTOOL_SWOL    0x00000006 /* Set wake-on-lan options. */
3824 #define VKI_ETHTOOL_GMSGLVL 0x00000007 /* Get driver message level */
3825 #define VKI_ETHTOOL_SMSGLVL 0x00000008 /* Set driver msg level. */
3826 #define VKI_ETHTOOL_NWAY_RST    0x00000009 /* Restart autonegotiation. */
3827 #define VKI_ETHTOOL_GLINK   0x0000000a
3828 #define VKI_ETHTOOL_GRINGPARAM  0x00000010 /* Get ring parameters */
3829 #define VKI_ETHTOOL_SRINGPARAM  0x00000011 /* Set ring parameters. */
3830 #define VKI_ETHTOOL_GRXCSUM 0x00000014 /* Get RX hw csum enable (ethtool_value) */
3831 #define VKI_ETHTOOL_SRXCSUM 0x00000015 /* Set RX hw csum enable (ethtool_value) */
3832 #define VKI_ETHTOOL_GTXCSUM 0x00000016 /* Get TX hw csum enable (ethtool_value) */
3833 #define VKI_ETHTOOL_STXCSUM 0x00000017 /* Set TX hw csum enable (ethtool_value) */
3834 #define VKI_ETHTOOL_GSG     0x00000018 /* Get scatter-gather enable
3835                         * (ethtool_value) */
3836 #define VKI_ETHTOOL_SSG     0x00000019 /* Set scatter-gather enable
3837                         * (ethtool_value). */
3838 #define VKI_ETHTOOL_TEST    0x0000001a /* execute NIC self-test. */
3839 #define VKI_ETHTOOL_PHYS_ID 0x0000001c /* identify the NIC */
3840 #define VKI_ETHTOOL_GTSO    0x0000001e /* Get TSO enable (ethtool_value) */
3841 #define VKI_ETHTOOL_STSO    0x0000001f /* Set TSO enable (ethtool_value) */
3842 #define VKI_ETHTOOL_GPERMADDR   0x00000020 /* Get permanent hardware address */
3843 #define VKI_ETHTOOL_GUFO    0x00000021 /* Get UFO enable (ethtool_value) */
3844 #define VKI_ETHTOOL_SUFO    0x00000022 /* Set UFO enable (ethtool_value) */
3845 #define VKI_ETHTOOL_GGSO    0x00000023 /* Get GSO enable (ethtool_value) */
3846 #define VKI_ETHTOOL_SGSO    0x00000024 /* Set GSO enable (ethtool_value) */
3847 #define VKI_ETHTOOL_GFLAGS  0x00000025 /* Get flags bitmap(ethtool_value) */
3848 #define VKI_ETHTOOL_SFLAGS  0x00000026 /* Set flags bitmap(ethtool_value) */
3849 #define VKI_ETHTOOL_GGRO    0x0000002b /* Get GRO enable (ethtool_value) */
3850 #define VKI_ETHTOOL_SGRO    0x0000002c /* Set GRO enable (ethtool_value) */
3851 #define VKI_ETHTOOL_RESET   0x00000034 /* Reset hardware */
3852 #define VKI_ETHTOOL_GSSET_INFO  0x00000037 /* Get string set info */
3853 #define VKI_ETHTOOL_GFEATURES   0x0000003a /* Get device offload settings */
3854 #define VKI_ETHTOOL_SFEATURES   0x0000003b /* Change device offload settings */
3855 #define VKI_ETHTOOL_GCHANNELS   0x0000003c /* Get no of channels */
3856 #define VKI_ETHTOOL_SCHANNELS   0x0000003d /* Set no of channels */
3857 #define VKI_ETHTOOL_GET_TS_INFO 0x00000041 /* Get time stamping and PHC info */
3858 
3859 //----------------------------------------------------------------------
3860 // From linux-3.15.8/drivers/staging/android/uapi/ion.h
3861 //----------------------------------------------------------------------
3862 
3863 typedef int vki_ion_user_handle_t;
3864 
3865 struct vki_ion_allocation_data {
3866         vki_size_t len;
3867         vki_size_t align;
3868         unsigned int heap_id_mask;
3869         unsigned int flags;
3870         vki_ion_user_handle_t handle;
3871 };
3872 
3873 struct vki_ion_fd_data {
3874         vki_ion_user_handle_t handle;
3875         int fd;
3876 };
3877 
3878 struct vki_ion_handle_data {
3879         vki_ion_user_handle_t handle;
3880 };
3881 
3882 struct vki_ion_custom_data {
3883         unsigned int cmd;
3884         unsigned long arg;
3885 };
3886 
3887 #define VKI_ION_IOC_MAGIC   'I'
3888 
3889 #define VKI_ION_IOC_ALLOC \
3890    _VKI_IOWR(VKI_ION_IOC_MAGIC, 0, struct vki_ion_allocation_data)
3891 
3892 #define VKI_ION_IOC_FREE \
3893    _VKI_IOWR(VKI_ION_IOC_MAGIC, 1, struct vki_ion_handle_data)
3894 
3895 #define VKI_ION_IOC_MAP \
3896    _VKI_IOWR(VKI_ION_IOC_MAGIC, 2, struct vki_ion_fd_data)
3897 
3898 #define VKI_ION_IOC_SHARE \
3899    _VKI_IOWR(VKI_ION_IOC_MAGIC, 4, struct vki_ion_fd_data)
3900 
3901 #define VKI_ION_IOC_IMPORT \
3902    _VKI_IOWR(VKI_ION_IOC_MAGIC, 5, struct vki_ion_fd_data)
3903 
3904 #define VKI_ION_IOC_SYNC \
3905    _VKI_IOWR(VKI_ION_IOC_MAGIC, 7, struct vki_ion_fd_data)
3906 
3907 #define VKI_ION_IOC_CUSTOM \
3908    _VKI_IOWR(VKI_ION_IOC_MAGIC, 6, struct vki_ion_custom_data)
3909 
3910 struct vki_procmap_query {
3911     __vki_u64 size;
3912     __vki_u64 query_flags;              /* in */
3913     __vki_u64 query_addr;               /* in */
3914     __vki_u64 vma_start;                /* out */
3915     __vki_u64 vma_end;                  /* out */
3916     __vki_u64 vma_flags;                /* out */
3917     __vki_u64 vma_page_size;            /* out */
3918     __vki_u64 vma_offset;               /* out */
3919     __vki_u64 inode;                    /* out */
3920     __vki_u32 dev_major;                /* out */
3921     __vki_u32 dev_minor;                /* out */
3922     __vki_u32 vma_name_size;            /* in/out */
3923     __vki_u32 build_id_size;            /* in/out */
3924     __vki_u64 vma_name_addr;            /* in */
3925     __vki_u64 build_id_addr;            /* in */
3926 };
3927 
3928 // linux/fs.h
3929 #define VKI_PROCFS_IOCTL_MAGIC 'f'
3930 
3931 #define VKI_PROCMAP_QUERY \
3932    _VKI_IOWR(VKI_PROCFS_IOCTL_MAGIC, 17, struct vki_procmap_query)
3933 
3934 //----------------------------------------------------------------------
3935 // From include/uapi/linux/sync_file.h 6.10.3
3936 //----------------------------------------------------------------------
3937 
3938 struct vki_sync_merge_data {
3939         char      name[32];
3940         __vki_s32 fd2;
3941         __vki_s32 fence;
3942         __vki_u32 flags;
3943     __vki_u32 pad;
3944 };
3945 
3946 struct vki_sync_fence_info {
3947         char      obj_name[32];
3948         char      driver_name[32];
3949         __vki_s32 status;
3950         __vki_u32 flags;
3951     __vki_u64 timestamp_ns;
3952 };
3953 
3954 struct vki_sync_file_info {
3955         char      name[32];
3956         __vki_s32 status;
3957         __vki_u32 flags;
3958         __vki_u32 num_fences;
3959         __vki_u32 pad;
3960     __vki_u64 sync_fence_info;
3961 };
3962 
3963 struct vki_sync_set_deadline {
3964     __vki_u64 deadline_ns;
3965     __vki_u64 pad;
3966 };
3967 
3968 #define VKI_SYNC_IOC_MAGIC   '>'
3969 
3970 #define VKI_SYNC_IOC_WAIT \
3971    _VKI_IOW(VKI_SYNC_IOC_MAGIC, 0, __vki_s32)
3972 
3973 #define VKI_SYNC_IOC_MERGE \
3974    _VKI_IOWR(VKI_SYNC_IOC_MAGIC, 3, struct vki_sync_merge_data)
3975 
3976 #define VKI_SYNC_IOC_FILE_INFO \
3977    _VKI_IOWR(VKI_SYNC_IOC_MAGIC, 4, struct vki_sync_file_info)
3978 
3979 #define VKI_SYNC_IOC_SET_DEADLINE \
3980    _VKI_IOW(VKI_SYNC_IOC_MAGIC, 5, struct vki_sync_set_deadline)
3981 
3982 //----------------------------------------------------------------------
3983 // From drivers/staging/lustre/lustre/include/lustre/lustre_user.h
3984 //----------------------------------------------------------------------
3985 
3986 struct vki_lu_fid {
3987     __vki_u64   f_seq;
3988     __vki_u32   f_oid;
3989     __vki_u32   f_ver;
3990 };
3991 
3992 //----------------------------------------------------------------------
3993 // From drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
3994 //----------------------------------------------------------------------
3995 
3996 struct vki_getinfo_fid2path {
3997     struct vki_lu_fid   gf_fid;
3998     __vki_u64       gf_recno;
3999     __vki_u32       gf_linkno;
4000     __vki_u32       gf_pathlen;
4001     char            gf_path[0];
4002 } __attribute__((packed));
4003 
4004 //----------------------------------------------------------------------
4005 // From drivers/staging/lustre/lustre/include/linux/lustre_lib.h
4006 //----------------------------------------------------------------------
4007 
4008 #define VKI_OBD_IOC_DATA_TYPE               long
4009 
4010 //----------------------------------------------------------------------
4011 // From drivers/staging/lustre/lustre/include/lustre_lib.h
4012 //----------------------------------------------------------------------
4013 
4014 #define VKI_OBD_IOC_FID2PATH \
4015            _VKI_IOWR ('f', 150, VKI_OBD_IOC_DATA_TYPE)
4016 #define VKI_LL_IOC_PATH2FID \
4017            _VKI_IOR ('f', 173, long)
4018 
4019 //----------------------------------------------------------------------
4020 // From lustre/include/lustre/lustre_idl.h
4021 //----------------------------------------------------------------------
4022 
4023 struct vki_getparent {
4024     struct vki_lu_fid   gp_fid;
4025     __vki_u32       gp_linkno;
4026     __vki_u32       gp_name_size;
4027     char            gp_name[0];
4028 } __attribute__((packed));
4029 
4030 //----------------------------------------------------------------------
4031 // From Lustre's lustre/include/lustre/lustre_user.h
4032 //----------------------------------------------------------------------
4033 #define VKI_LL_IOC_GROUP_LOCK \
4034            _VKI_IOW('f', 158, long)
4035 #define VKI_LL_IOC_GROUP_UNLOCK \
4036            _VKI_IOW('f', 159, long)
4037 #define VKI_LL_IOC_GETPARENT \
4038            _VKI_IOWR('f', 249, struct vki_getparent)
4039 
4040 
4041 struct vki_v4l2_rect {
4042     __vki_s32   left;
4043     __vki_s32   top;
4044     __vki_u32   width;
4045     __vki_u32   height;
4046 };
4047 
4048 struct vki_v4l2_fract {
4049     __vki_u32   numerator;
4050     __vki_u32   denominator;
4051 };
4052 
4053 struct vki_v4l2_capability {
4054     __vki_u8    driver[16];
4055     __vki_u8    card[32];
4056     __vki_u8    bus_info[32];
4057     __vki_u32   version;
4058     __vki_u32   capabilities;
4059     __vki_u32   device_caps;
4060     __vki_u32   reserved[3];
4061 };
4062 
4063 struct vki_v4l2_pix_format {
4064     __vki_u32               width;
4065     __vki_u32           height;
4066     __vki_u32           pixelformat;
4067     __vki_u32           field;      /* enum vki_v4l2_field */
4068     __vki_u32               bytesperline;   /* for padding, zero if unused */
4069     __vki_u32               sizeimage;
4070     __vki_u32           colorspace; /* enum vki_v4l2_colorspace */
4071     __vki_u32           priv;       /* private data, depends on pixelformat */
4072     __vki_u32           flags;      /* format flags (VKI_V4L2_PIX_FMT_FLAG_*) */
4073     __vki_u32           ycbcr_enc;
4074     __vki_u32           quantization;
4075 };
4076 
4077 struct vki_v4l2_fmtdesc {
4078     __vki_u32           index;             /* Format number      */
4079     __vki_u32           type;              /* enum vki_v4l2_buf_type */
4080     __vki_u32               flags;
4081     __vki_u8            description[32];   /* Description string */
4082     __vki_u32           pixelformat;       /* Format fourcc      */
4083     __vki_u32           reserved[4];
4084 };
4085 
4086 struct vki_v4l2_frmsize_discrete {
4087     __vki_u32           width;      /* Frame width [pixel] */
4088     __vki_u32           height;     /* Frame height [pixel] */
4089 };
4090 
4091 struct vki_v4l2_frmsize_stepwise {
4092     __vki_u32           min_width;  /* Minimum frame width [pixel] */
4093     __vki_u32           max_width;  /* Maximum frame width [pixel] */
4094     __vki_u32           step_width; /* Frame width step size [pixel] */
4095     __vki_u32           min_height; /* Minimum frame height [pixel] */
4096     __vki_u32           max_height; /* Maximum frame height [pixel] */
4097     __vki_u32           step_height;    /* Frame height step size [pixel] */
4098 };
4099 
4100 struct vki_v4l2_frmsizeenum {
4101     __vki_u32           index;      /* Frame size number */
4102     __vki_u32           pixel_format;   /* Pixel format */
4103     __vki_u32           type;       /* Frame size type the device supports. */
4104 
4105     union {                 /* Frame size */
4106         struct vki_v4l2_frmsize_discrete    discrete;
4107         struct vki_v4l2_frmsize_stepwise    stepwise;
4108     };
4109 
4110     __vki_u32   reserved[2];            /* Reserved space for future use */
4111 };
4112 
4113 struct vki_v4l2_frmival_stepwise {
4114     struct vki_v4l2_fract   min;
4115     struct vki_v4l2_fract   max;
4116     struct vki_v4l2_fract   step;
4117 };
4118 
4119 struct vki_v4l2_frmivalenum {
4120     __vki_u32           index;
4121     __vki_u32           pixel_format;
4122     __vki_u32           width;
4123     __vki_u32           height;
4124     __vki_u32           type;
4125 
4126     union {
4127         struct vki_v4l2_fract       discrete;
4128         struct vki_v4l2_frmival_stepwise    stepwise;
4129     };
4130 
4131     __vki_u32   reserved[2];
4132 };
4133 
4134 struct vki_v4l2_timecode {
4135     __vki_u32   type;
4136     __vki_u32   flags;
4137     __vki_u8    frames;
4138     __vki_u8    seconds;
4139     __vki_u8    minutes;
4140     __vki_u8    hours;
4141     __vki_u8    userbits[4];
4142 };
4143 
4144 struct vki_v4l2_jpegcompression {
4145     int quality;
4146     int  APPn;
4147     int  APP_len;
4148     char APP_data[60];
4149     int  COM_len;
4150     char COM_data[60];
4151     __vki_u32 jpeg_markers;
4152 };
4153 
4154 struct vki_v4l2_requestbuffers {
4155     __vki_u32           count;
4156     __vki_u32           type;
4157     __vki_u32           memory;
4158     __vki_u32           reserved[2];
4159 };
4160 
4161 struct vki_v4l2_plane {
4162     __vki_u32           bytesused;
4163     __vki_u32           length;
4164     union {
4165         __vki_u32       mem_offset;
4166         unsigned long   userptr;
4167         __vki_s32       fd;
4168     } m;
4169     __vki_u32           data_offset;
4170     __vki_u32           reserved[11];
4171 };
4172 
4173 #define VKI_V4L2_MEMORY_MMAP             1
4174 #define VKI_V4L2_MEMORY_DMABUF           4
4175 #define VKI_V4L2_BUF_FLAG_TIMESTAMP_MASK        0x0000e000
4176 #define VKI_V4L2_BUF_FLAG_TIMESTAMP_COPY        0x00004000
4177 struct vki_v4l2_buffer {
4178     __vki_u32           index;
4179     __vki_u32           type;
4180     __vki_u32           bytesused;
4181     __vki_u32           flags;
4182     __vki_u32           field;
4183     struct vki_timeval      timestamp;
4184     struct vki_v4l2_timecode    timecode;
4185     __vki_u32           sequence;
4186 
4187     /* memory location */
4188     __vki_u32           memory;
4189     union {
4190         __vki_u32           offset;
4191         unsigned long   userptr;
4192         struct vki_v4l2_plane *planes;
4193         __vki_s32       fd;
4194     } m;
4195     __vki_u32           length;
4196     __vki_u32           reserved2;
4197     __vki_u32           reserved;
4198 };
4199 
4200 struct vki_v4l2_exportbuffer {
4201     __vki_u32       type; /* enum vki_v4l2_buf_type */
4202     __vki_u32       index;
4203     __vki_u32       plane;
4204     __vki_u32       flags;
4205     __vki_s32       fd;
4206     __vki_u32       reserved[11];
4207 };
4208 
4209 struct vki_v4l2_framebuffer {
4210     __vki_u32           capability;
4211     __vki_u32           flags;
4212     void                    *base;
4213     struct {
4214         __vki_u32       width;
4215         __vki_u32       height;
4216         __vki_u32       pixelformat;
4217         __vki_u32       field;      /* enum vki_v4l2_field */
4218         __vki_u32       bytesperline;   /* for padding, zero if unused */
4219         __vki_u32       sizeimage;
4220         __vki_u32       colorspace; /* enum vki_v4l2_colorspace */
4221         __vki_u32       priv;       /* reserved field, set to 0 */
4222     } fmt;
4223 };
4224 
4225 struct vki_v4l2_clip {
4226     struct vki_v4l2_rect        c;
4227     struct vki_v4l2_clip    __user *next;
4228 };
4229 
4230 struct vki_v4l2_window {
4231     struct vki_v4l2_rect        w;
4232     __vki_u32           field;   /* enum vki_v4l2_field */
4233     __vki_u32           chromakey;
4234     struct vki_v4l2_clip    __user *clips;
4235     __vki_u32           clipcount;
4236     void            __user *bitmap;
4237     __vki_u8                    global_alpha;
4238 };
4239 
4240 struct vki_v4l2_captureparm {
4241     __vki_u32          capability;    /*  Supported modes */
4242     __vki_u32          capturemode;   /*  Current mode */
4243     struct vki_v4l2_fract  timeperframe;  /*  Time per frame in seconds */
4244     __vki_u32          extendedmode;  /*  Driver-specific extensions */
4245     __vki_u32              readbuffers;   /*  # of buffers for read */
4246     __vki_u32          reserved[4];
4247 };
4248 
4249 struct vki_v4l2_outputparm {
4250     __vki_u32          capability;   /*  Supported modes */
4251     __vki_u32          outputmode;   /*  Current mode */
4252     struct vki_v4l2_fract  timeperframe; /*  Time per frame in seconds */
4253     __vki_u32          extendedmode; /*  Driver-specific extensions */
4254     __vki_u32              writebuffers; /*  # of buffers for write */
4255     __vki_u32          reserved[4];
4256 };
4257 
4258 struct vki_v4l2_cropcap {
4259     __vki_u32           type;   /* enum vki_v4l2_buf_type */
4260     struct vki_v4l2_rect        bounds;
4261     struct vki_v4l2_rect        defrect;
4262     struct vki_v4l2_fract       pixelaspect;
4263 };
4264 
4265 struct vki_v4l2_crop {
4266     __vki_u32           type;   /* enum vki_v4l2_buf_type */
4267     struct vki_v4l2_rect        c;
4268 };
4269 
4270 struct vki_v4l2_selection {
4271     __vki_u32           type;
4272     __vki_u32           target;
4273     __vki_u32                   flags;
4274     struct vki_v4l2_rect        r;
4275     __vki_u32                   reserved[9];
4276 };
4277 
4278 typedef __vki_u64 vki_v4l2_std_id;
4279 
4280 struct vki_v4l2_standard {
4281     __vki_u32            index;
4282     vki_v4l2_std_id          id;
4283     __vki_u8             name[24];
4284     struct vki_v4l2_fract    frameperiod; /* Frames, not fields */
4285     __vki_u32            framelines;
4286     __vki_u32            reserved[4];
4287 };
4288 
4289 struct vki_v4l2_bt_timings {
4290     __vki_u32   width;
4291     __vki_u32   height;
4292     __vki_u32   interlaced;
4293     __vki_u32   polarities;
4294     __vki_u64   pixelclock;
4295     __vki_u32   hfrontporch;
4296     __vki_u32   hsync;
4297     __vki_u32   hbackporch;
4298     __vki_u32   vfrontporch;
4299     __vki_u32   vsync;
4300     __vki_u32   vbackporch;
4301     __vki_u32   il_vfrontporch;
4302     __vki_u32   il_vsync;
4303     __vki_u32   il_vbackporch;
4304     __vki_u32   standards;
4305     __vki_u32   flags;
4306     __vki_u32   reserved[14];
4307 } __attribute__ ((packed));
4308 
4309 struct vki_v4l2_dv_timings {
4310     __vki_u32 type;
4311     union {
4312         struct vki_v4l2_bt_timings  bt;
4313         __vki_u32   reserved[32];
4314     };
4315 } __attribute__ ((packed));
4316 
4317 struct vki_v4l2_enum_dv_timings {
4318     __vki_u32 index;
4319     __vki_u32 pad;
4320     __vki_u32 reserved[2];
4321     struct vki_v4l2_dv_timings timings;
4322 };
4323 
4324 struct vki_v4l2_bt_timings_cap {
4325     __vki_u32   min_width;
4326     __vki_u32   max_width;
4327     __vki_u32   min_height;
4328     __vki_u32   max_height;
4329     __vki_u64   min_pixelclock;
4330     __vki_u64   max_pixelclock;
4331     __vki_u32   standards;
4332     __vki_u32   capabilities;
4333     __vki_u32   reserved[16];
4334 } __attribute__ ((packed));
4335 
4336 struct vki_v4l2_dv_timings_cap {
4337     __vki_u32 type;
4338     __vki_u32 pad;
4339     __vki_u32 reserved[2];
4340     union {
4341         struct vki_v4l2_bt_timings_cap bt;
4342         __vki_u32 raw_data[32];
4343     };
4344 };
4345 
4346 struct vki_v4l2_input {
4347     __vki_u32        index;     /*  Which input */
4348     __vki_u8         name[32];      /*  Label */
4349     __vki_u32        type;      /*  Type of input */
4350     __vki_u32        audioset;      /*  Associated audios (bitfield) */
4351     __vki_u32        tuner;             /*  enum vki_v4l2_tuner_type */
4352     vki_v4l2_std_id  std;
4353     __vki_u32        status;
4354     __vki_u32        capabilities;
4355     __vki_u32        reserved[3];
4356 };
4357 
4358 struct vki_v4l2_output {
4359     __vki_u32        index;     /*  Which output */
4360     __vki_u8         name[32];      /*  Label */
4361     __vki_u32        type;      /*  Type of output */
4362     __vki_u32        audioset;      /*  Associated audios (bitfield) */
4363     __vki_u32        modulator;         /*  Associated modulator */
4364     vki_v4l2_std_id  std;
4365     __vki_u32        capabilities;
4366     __vki_u32        reserved[3];
4367 };
4368 
4369 struct vki_v4l2_control {
4370     __vki_u32            id;
4371     __vki_s32            value;
4372 };
4373 
4374 struct vki_v4l2_ext_control {
4375     __vki_u32 id;
4376     __vki_u32 size;
4377     __vki_u32 reserved2[1];
4378     union {
4379         __vki_s32 value;
4380         __vki_s64 value64;
4381         char *string;
4382         __vki_u8 *p_u8;
4383         __vki_u16 *p_u16;
4384         __vki_u32 *p_u32;
4385         void *ptr;
4386     };
4387 } __attribute__ ((packed));
4388 
4389 struct vki_v4l2_ext_controls {
4390     __vki_u32 ctrl_class;
4391     __vki_u32 count;
4392     __vki_u32 error_idx;
4393     __vki_u32 reserved[2];
4394     struct vki_v4l2_ext_control *controls;
4395 };
4396 
4397 struct vki_v4l2_queryctrl {
4398     __vki_u32            id;
4399     __vki_u32            type;  /* enum vki_v4l2_ctrl_type */
4400     __vki_u8             name[32];  /* Whatever */
4401     __vki_s32            minimum;   /* Note signedness */
4402     __vki_s32            maximum;
4403     __vki_s32            step;
4404     __vki_s32            default_value;
4405     __vki_u32                flags;
4406     __vki_u32            reserved[2];
4407 };
4408 
4409 #define VKI_V4L2_CTRL_MAX_DIMS    (4)
4410 struct vki_v4l2_query_ext_ctrl {
4411     __vki_u32            id;
4412     __vki_u32            type;
4413     char             name[32];
4414     __vki_s64            minimum;
4415     __vki_s64            maximum;
4416     __vki_u64            step;
4417     __vki_s64            default_value;
4418     __vki_u32                flags;
4419     __vki_u32                elem_size;
4420     __vki_u32                elems;
4421     __vki_u32                nr_of_dims;
4422     __vki_u32                dims[VKI_V4L2_CTRL_MAX_DIMS];
4423     __vki_u32            reserved[32];
4424 };
4425 
4426 struct vki_v4l2_querymenu {
4427     __vki_u32       id;
4428     __vki_u32       index;
4429     union {
4430         __vki_u8    name[32];   /* Whatever */
4431         __vki_s64   value;
4432     };
4433     __vki_u32       reserved;
4434 } __attribute__ ((packed));
4435 
4436 struct vki_v4l2_tuner {
4437     __vki_u32                   index;
4438     __vki_u8            name[32];
4439     __vki_u32           type;   /* enum vki_v4l2_tuner_type */
4440     __vki_u32           capability;
4441     __vki_u32           rangelow;
4442     __vki_u32           rangehigh;
4443     __vki_u32           rxsubchans;
4444     __vki_u32           audmode;
4445     __vki_s32           signal;
4446     __vki_s32           afc;
4447     __vki_u32           reserved[4];
4448 };
4449 
4450 struct vki_v4l2_modulator {
4451     __vki_u32           index;
4452     __vki_u8            name[32];
4453     __vki_u32           capability;
4454     __vki_u32           rangelow;
4455     __vki_u32           rangehigh;
4456     __vki_u32           txsubchans;
4457     __vki_u32           reserved[4];
4458 };
4459 
4460 struct vki_v4l2_frequency {
4461     __vki_u32   tuner;
4462     __vki_u32   type;   /* enum vki_v4l2_tuner_type */
4463     __vki_u32   frequency;
4464     __vki_u32   reserved[8];
4465 };
4466 
4467 struct vki_v4l2_frequency_band {
4468     __vki_u32   tuner;
4469     __vki_u32   type;   /* enum vki_v4l2_tuner_type */
4470     __vki_u32   index;
4471     __vki_u32   capability;
4472     __vki_u32   rangelow;
4473     __vki_u32   rangehigh;
4474     __vki_u32   modulation;
4475     __vki_u32   reserved[9];
4476 };
4477 
4478 struct vki_v4l2_hw_freq_seek {
4479     __vki_u32   tuner;
4480     __vki_u32   type;   /* enum vki_v4l2_tuner_type */
4481     __vki_u32   seek_upward;
4482     __vki_u32   wrap_around;
4483     __vki_u32   spacing;
4484     __vki_u32   rangelow;
4485     __vki_u32   rangehigh;
4486     __vki_u32   reserved[5];
4487 };
4488 
4489 struct vki_v4l2_audio {
4490     __vki_u32   index;
4491     __vki_u8    name[32];
4492     __vki_u32   capability;
4493     __vki_u32   mode;
4494     __vki_u32   reserved[2];
4495 };
4496 
4497 struct vki_v4l2_audioout {
4498     __vki_u32   index;
4499     __vki_u8    name[32];
4500     __vki_u32   capability;
4501     __vki_u32   mode;
4502     __vki_u32   reserved[2];
4503 };
4504 
4505 struct vki_v4l2_enc_idx_entry {
4506     __vki_u64 offset;
4507     __vki_u64 pts;
4508     __vki_u32 length;
4509     __vki_u32 flags;
4510     __vki_u32 reserved[2];
4511 };
4512 
4513 #define VKI_V4L2_ENC_IDX_ENTRIES (64)
4514 struct vki_v4l2_enc_idx {
4515     __vki_u32 entries;
4516     __vki_u32 entries_cap;
4517     __vki_u32 reserved[4];
4518     struct vki_v4l2_enc_idx_entry entry[VKI_V4L2_ENC_IDX_ENTRIES];
4519 };
4520 
4521 struct vki_v4l2_encoder_cmd {
4522     __vki_u32 cmd;
4523     __vki_u32 flags;
4524     union {
4525         struct {
4526             __vki_u32 data[8];
4527         } raw;
4528     };
4529 };
4530 
4531 struct vki_v4l2_decoder_cmd {
4532     __vki_u32 cmd;
4533     __vki_u32 flags;
4534     union {
4535         struct {
4536             __vki_u64 pts;
4537         } stop;
4538 
4539         struct {
4540             __vki_s32 speed;
4541             __vki_u32 format;
4542         } start;
4543 
4544         struct {
4545             __vki_u32 data[16];
4546         } raw;
4547     };
4548 };
4549 
4550 struct vki_v4l2_vbi_format {
4551     __vki_u32   sampling_rate;      /* in 1 Hz */
4552     __vki_u32   offset;
4553     __vki_u32   samples_per_line;
4554     __vki_u32   sample_format;      /* VKI_V4L2_PIX_FMT_* */
4555     __vki_s32   start[2];
4556     __vki_u32   count[2];
4557     __vki_u32   flags;          /* VKI_V4L2_VBI_* */
4558     __vki_u32   reserved[2];        /* must be zero */
4559 };
4560 
4561 struct vki_v4l2_sliced_vbi_format {
4562     __vki_u16   service_set;
4563     __vki_u16   service_lines[2][24];
4564     __vki_u32   io_size;
4565     __vki_u32   reserved[2];            /* must be zero */
4566 };
4567 
4568 struct vki_v4l2_sliced_vbi_cap {
4569     __vki_u16   service_set;
4570     __vki_u16   service_lines[2][24];
4571     __vki_u32   type;       /* enum vki_v4l2_buf_type */
4572     __vki_u32   reserved[3];    /* must be 0 */
4573 };
4574 
4575 struct vki_v4l2_sliced_vbi_data {
4576     __vki_u32   id;
4577     __vki_u32   field;          /* 0: first field, 1: second field */
4578     __vki_u32   line;           /* 1-23 */
4579     __vki_u32   reserved;       /* must be 0 */
4580     __vki_u8    data[48];
4581 };
4582 
4583 struct vki_v4l2_plane_pix_format {
4584     __vki_u32       sizeimage;
4585     __vki_u32       bytesperline;
4586     __vki_u16       reserved[6];
4587 } __attribute__ ((packed));
4588 
4589 #define VKI_VIDEO_MAX_PLANES               8
4590 
4591 struct vki_v4l2_pix_format_mplane {
4592     __vki_u32               width;
4593     __vki_u32               height;
4594     __vki_u32               pixelformat;
4595     __vki_u32               field;
4596     __vki_u32               colorspace;
4597 
4598     struct vki_v4l2_plane_pix_format    plane_fmt[VKI_VIDEO_MAX_PLANES];
4599     __vki_u8                num_planes;
4600     __vki_u8                flags;
4601     __vki_u8                ycbcr_enc;
4602     __vki_u8                quantization;
4603     __vki_u8                reserved[8];
4604 } __attribute__ ((packed));
4605 
4606 struct vki_v4l2_sdr_format {
4607     __vki_u32               pixelformat;
4608     __vki_u32               buffersize;
4609     __vki_u8                reserved[24];
4610 } __attribute__ ((packed));
4611 
4612 enum vki_v4l2_buf_type {
4613     VKI_V4L2_BUF_TYPE_VIDEO_CAPTURE        = 1,
4614     VKI_V4L2_BUF_TYPE_VIDEO_OUTPUT         = 2,
4615     VKI_V4L2_BUF_TYPE_VIDEO_OVERLAY        = 3,
4616     VKI_V4L2_BUF_TYPE_VBI_CAPTURE          = 4,
4617     VKI_V4L2_BUF_TYPE_VBI_OUTPUT           = 5,
4618     VKI_V4L2_BUF_TYPE_SLICED_VBI_CAPTURE   = 6,
4619     VKI_V4L2_BUF_TYPE_SLICED_VBI_OUTPUT    = 7,
4620     VKI_V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY = 8,
4621     VKI_V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE = 9,
4622     VKI_V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE  = 10,
4623     VKI_V4L2_BUF_TYPE_SDR_CAPTURE          = 11,
4624 };
4625 
4626 struct vki_v4l2_format {
4627     __vki_u32    type;
4628     union {
4629         struct vki_v4l2_pix_format      pix;
4630         struct vki_v4l2_pix_format_mplane   pix_mp;
4631         struct vki_v4l2_window      win;
4632         struct vki_v4l2_vbi_format      vbi;
4633         struct vki_v4l2_sliced_vbi_format   sliced;
4634         struct vki_v4l2_sdr_format      sdr;
4635         __vki_u8    raw_data[200];
4636     } fmt;
4637 };
4638 
4639 struct vki_v4l2_streamparm {
4640     __vki_u32    type;
4641     union {
4642         struct vki_v4l2_captureparm capture;
4643         struct vki_v4l2_outputparm  output;
4644         __vki_u8    raw_data[200];  /* user-defined */
4645     } parm;
4646 };
4647 
4648 struct vki_v4l2_event_vsync {
4649     __vki_u8 field;
4650 } __attribute__ ((packed));
4651 
4652 struct vki_v4l2_event_ctrl {
4653     __vki_u32 changes;
4654     __vki_u32 type;
4655     union {
4656         __vki_s32 value;
4657         __vki_s64 value64;
4658     };
4659     __vki_u32 flags;
4660     __vki_s32 minimum;
4661     __vki_s32 maximum;
4662     __vki_s32 step;
4663     __vki_s32 default_value;
4664 };
4665 
4666 struct vki_v4l2_event_frame_sync {
4667     __vki_u32 frame_sequence;
4668 };
4669 
4670 struct vki_v4l2_event_src_change {
4671     __vki_u32 changes;
4672 };
4673 
4674 struct vki_v4l2_event_motion_det {
4675     __vki_u32 flags;
4676     __vki_u32 frame_sequence;
4677     __vki_u32 region_mask;
4678 };
4679 
4680 struct vki_v4l2_event {
4681     __vki_u32               type;
4682     union {
4683         struct vki_v4l2_event_vsync     vsync;
4684         struct vki_v4l2_event_ctrl      ctrl;
4685         struct vki_v4l2_event_frame_sync    frame_sync;
4686         struct vki_v4l2_event_src_change    src_change;
4687         struct vki_v4l2_event_motion_det    motion_det;
4688         __vki_u8                data[64];
4689     } u;
4690     __vki_u32               pending;
4691     __vki_u32               sequence;
4692     struct vki_timespec         timestamp;
4693     __vki_u32               id;
4694     __vki_u32               reserved[8];
4695 };
4696 
4697 struct vki_v4l2_event_subscription {
4698     __vki_u32               type;
4699     __vki_u32               id;
4700     __vki_u32               flags;
4701     __vki_u32               reserved[5];
4702 };
4703 
4704 struct vki_v4l2_dbg_match {
4705     __vki_u32 type; /* Match type */
4706     union {     /* Match this chip, meaning determined by type */
4707         __vki_u32 addr;
4708         char name[32];
4709     };
4710 } __attribute__ ((packed));
4711 
4712 struct vki_v4l2_dbg_register {
4713     struct vki_v4l2_dbg_match match;
4714     __vki_u32 size; /* register size in bytes */
4715     __vki_u64 reg;
4716     __vki_u64 val;
4717 } __attribute__ ((packed));
4718 
4719 struct vki_v4l2_dbg_chip_info {
4720     struct vki_v4l2_dbg_match match;
4721     char name[32];
4722     __vki_u32 flags;
4723     __vki_u32 reserved[32];
4724 } __attribute__ ((packed));
4725 
4726 struct vki_v4l2_create_buffers {
4727     __vki_u32           index;
4728     __vki_u32           count;
4729     __vki_u32           memory;
4730     struct vki_v4l2_format  format;
4731     __vki_u32           reserved[8];
4732 };
4733 
4734 struct vki_v4l2_edid {
4735     __vki_u32 pad;
4736     __vki_u32 start_block;
4737     __vki_u32 blocks;
4738     __vki_u32 reserved[5];
4739     __vki_u8  *edid;
4740 };
4741 
4742 #define VKI_V4L2_QUERYCAP       _VKI_IOR('V',  0, struct vki_v4l2_capability)
4743 #define VKI_V4L2_ENUM_FMT       _VKI_IOWR('V',  2, struct vki_v4l2_fmtdesc)
4744 #define VKI_V4L2_G_FMT          _VKI_IOWR('V',  4, struct vki_v4l2_format)
4745 #define VKI_V4L2_S_FMT          _VKI_IOWR('V',  5, struct vki_v4l2_format)
4746 #define VKI_V4L2_REQBUFS        _VKI_IOWR('V',  8, struct vki_v4l2_requestbuffers)
4747 #define VKI_V4L2_QUERYBUF       _VKI_IOWR('V',  9, struct vki_v4l2_buffer)
4748 #define VKI_V4L2_G_FBUF         _VKI_IOR('V', 10, struct vki_v4l2_framebuffer)
4749 #define VKI_V4L2_S_FBUF         _VKI_IOW('V', 11, struct vki_v4l2_framebuffer)
4750 #define VKI_V4L2_OVERLAY        _VKI_IOW('V', 14, int)
4751 #define VKI_V4L2_QBUF           _VKI_IOWR('V', 15, struct vki_v4l2_buffer)
4752 #define VKI_V4L2_EXPBUF         _VKI_IOWR('V', 16, struct vki_v4l2_exportbuffer)
4753 #define VKI_V4L2_DQBUF          _VKI_IOWR('V', 17, struct vki_v4l2_buffer)
4754 #define VKI_V4L2_STREAMON       _VKI_IOW('V', 18, int)
4755 #define VKI_V4L2_STREAMOFF      _VKI_IOW('V', 19, int)
4756 #define VKI_V4L2_G_PARM         _VKI_IOWR('V', 21, struct vki_v4l2_streamparm)
4757 #define VKI_V4L2_S_PARM         _VKI_IOWR('V', 22, struct vki_v4l2_streamparm)
4758 #define VKI_V4L2_G_STD          _VKI_IOR('V', 23, vki_v4l2_std_id)
4759 #define VKI_V4L2_S_STD          _VKI_IOW('V', 24, vki_v4l2_std_id)
4760 #define VKI_V4L2_ENUMSTD        _VKI_IOWR('V', 25, struct vki_v4l2_standard)
4761 #define VKI_V4L2_ENUMINPUT      _VKI_IOWR('V', 26, struct vki_v4l2_input)
4762 #define VKI_V4L2_G_CTRL         _VKI_IOWR('V', 27, struct vki_v4l2_control)
4763 #define VKI_V4L2_S_CTRL         _VKI_IOWR('V', 28, struct vki_v4l2_control)
4764 #define VKI_V4L2_G_TUNER        _VKI_IOWR('V', 29, struct vki_v4l2_tuner)
4765 #define VKI_V4L2_S_TUNER        _VKI_IOW('V', 30, struct vki_v4l2_tuner)
4766 #define VKI_V4L2_G_AUDIO        _VKI_IOR('V', 33, struct vki_v4l2_audio)
4767 #define VKI_V4L2_S_AUDIO        _VKI_IOW('V', 34, struct vki_v4l2_audio)
4768 #define VKI_V4L2_QUERYCTRL      _VKI_IOWR('V', 36, struct vki_v4l2_queryctrl)
4769 #define VKI_V4L2_QUERYMENU      _VKI_IOWR('V', 37, struct vki_v4l2_querymenu)
4770 #define VKI_V4L2_G_INPUT        _VKI_IOR('V', 38, int)
4771 #define VKI_V4L2_S_INPUT        _VKI_IOWR('V', 39, int)
4772 #define VKI_V4L2_G_EDID         _VKI_IOWR('V', 40, struct vki_v4l2_edid)
4773 #define VKI_V4L2_S_EDID         _VKI_IOWR('V', 41, struct vki_v4l2_edid)
4774 #define VKI_V4L2_G_OUTPUT       _VKI_IOR('V', 46, int)
4775 #define VKI_V4L2_S_OUTPUT       _VKI_IOWR('V', 47, int)
4776 #define VKI_V4L2_ENUMOUTPUT     _VKI_IOWR('V', 48, struct vki_v4l2_output)
4777 #define VKI_V4L2_G_AUDOUT       _VKI_IOR('V', 49, struct vki_v4l2_audioout)
4778 #define VKI_V4L2_S_AUDOUT       _VKI_IOW('V', 50, struct vki_v4l2_audioout)
4779 #define VKI_V4L2_G_MODULATOR        _VKI_IOWR('V', 54, struct vki_v4l2_modulator)
4780 #define VKI_V4L2_S_MODULATOR        _VKI_IOW('V', 55, struct vki_v4l2_modulator)
4781 #define VKI_V4L2_G_FREQUENCY        _VKI_IOWR('V', 56, struct vki_v4l2_frequency)
4782 #define VKI_V4L2_S_FREQUENCY        _VKI_IOW('V', 57, struct vki_v4l2_frequency)
4783 #define VKI_V4L2_CROPCAP        _VKI_IOWR('V', 58, struct vki_v4l2_cropcap)
4784 #define VKI_V4L2_G_CROP         _VKI_IOWR('V', 59, struct vki_v4l2_crop)
4785 #define VKI_V4L2_S_CROP         _VKI_IOW('V', 60, struct vki_v4l2_crop)
4786 #define VKI_V4L2_G_JPEGCOMP     _VKI_IOR('V', 61, struct vki_v4l2_jpegcompression)
4787 #define VKI_V4L2_S_JPEGCOMP     _VKI_IOW('V', 62, struct vki_v4l2_jpegcompression)
4788 #define VKI_V4L2_QUERYSTD           _VKI_IOR('V', 63, vki_v4l2_std_id)
4789 #define VKI_V4L2_TRY_FMT            _VKI_IOWR('V', 64, struct vki_v4l2_format)
4790 #define VKI_V4L2_ENUMAUDIO      _VKI_IOWR('V', 65, struct vki_v4l2_audio)
4791 #define VKI_V4L2_ENUMAUDOUT     _VKI_IOWR('V', 66, struct vki_v4l2_audioout)
4792 #define VKI_V4L2_G_PRIORITY     _VKI_IOR('V', 67, __vki_u32)
4793 #define VKI_V4L2_S_PRIORITY     _VKI_IOW('V', 68, __vki_u32)
4794 #define VKI_V4L2_G_SLICED_VBI_CAP   _VKI_IOWR('V', 69, struct vki_v4l2_sliced_vbi_cap)
4795 #define VKI_V4L2_LOG_STATUS         _VKI_IO('V', 70)
4796 #define VKI_V4L2_G_EXT_CTRLS        _VKI_IOWR('V', 71, struct vki_v4l2_ext_controls)
4797 #define VKI_V4L2_S_EXT_CTRLS        _VKI_IOWR('V', 72, struct vki_v4l2_ext_controls)
4798 #define VKI_V4L2_TRY_EXT_CTRLS      _VKI_IOWR('V', 73, struct vki_v4l2_ext_controls)
4799 #define VKI_V4L2_ENUM_FRAMESIZES    _VKI_IOWR('V', 74, struct vki_v4l2_frmsizeenum)
4800 #define VKI_V4L2_ENUM_FRAMEINTERVALS    _VKI_IOWR('V', 75, struct vki_v4l2_frmivalenum)
4801 #define VKI_V4L2_G_ENC_INDEX        _VKI_IOR('V', 76, struct vki_v4l2_enc_idx)
4802 #define VKI_V4L2_ENCODER_CMD        _VKI_IOWR('V', 77, struct vki_v4l2_encoder_cmd)
4803 #define VKI_V4L2_TRY_ENCODER_CMD    _VKI_IOWR('V', 78, struct vki_v4l2_encoder_cmd)
4804 #define VKI_V4L2_DBG_S_REGISTER     _VKI_IOW('V', 79, struct vki_v4l2_dbg_register)
4805 #define VKI_V4L2_DBG_G_REGISTER     _VKI_IOWR('V', 80, struct vki_v4l2_dbg_register)
4806 #define VKI_V4L2_S_HW_FREQ_SEEK     _VKI_IOW('V', 82, struct vki_v4l2_hw_freq_seek)
4807 #define VKI_V4L2_S_DV_TIMINGS       _VKI_IOWR('V', 87, struct vki_v4l2_dv_timings)
4808 #define VKI_V4L2_G_DV_TIMINGS       _VKI_IOWR('V', 88, struct vki_v4l2_dv_timings)
4809 #define VKI_V4L2_DQEVENT        _VKI_IOR('V', 89, struct vki_v4l2_event)
4810 #define VKI_V4L2_SUBSCRIBE_EVENT    _VKI_IOW('V', 90, struct vki_v4l2_event_subscription)
4811 #define VKI_V4L2_UNSUBSCRIBE_EVENT  _VKI_IOW('V', 91, struct vki_v4l2_event_subscription)
4812 #define VKI_V4L2_CREATE_BUFS        _VKI_IOWR('V', 92, struct vki_v4l2_create_buffers)
4813 #define VKI_V4L2_PREPARE_BUF        _VKI_IOWR('V', 93, struct vki_v4l2_buffer)
4814 #define VKI_V4L2_G_SELECTION        _VKI_IOWR('V', 94, struct vki_v4l2_selection)
4815 #define VKI_V4L2_S_SELECTION        _VKI_IOWR('V', 95, struct vki_v4l2_selection)
4816 #define VKI_V4L2_DECODER_CMD        _VKI_IOWR('V', 96, struct vki_v4l2_decoder_cmd)
4817 #define VKI_V4L2_TRY_DECODER_CMD    _VKI_IOWR('V', 97, struct vki_v4l2_decoder_cmd)
4818 #define VKI_V4L2_ENUM_DV_TIMINGS    _VKI_IOWR('V', 98, struct vki_v4l2_enum_dv_timings)
4819 #define VKI_V4L2_QUERY_DV_TIMINGS   _VKI_IOR('V', 99, struct vki_v4l2_dv_timings)
4820 #define VKI_V4L2_DV_TIMINGS_CAP     _VKI_IOWR('V', 100, struct vki_v4l2_dv_timings_cap)
4821 #define VKI_V4L2_ENUM_FREQ_BANDS    _VKI_IOWR('V', 101, struct vki_v4l2_frequency_band)
4822 #define VKI_V4L2_DBG_G_CHIP_INFO    _VKI_IOWR('V', 102, struct vki_v4l2_dbg_chip_info)
4823 #define VKI_V4L2_QUERY_EXT_CTRL     _VKI_IOWR('V', 103, struct vki_v4l2_query_ext_ctrl)
4824 
4825 struct vki_v4l2_mbus_framefmt {
4826     __vki_u32           width;
4827     __vki_u32           height;
4828     __vki_u32           code;
4829     __vki_u32           field;
4830     __vki_u32           colorspace;
4831     __vki_u16           ycbcr_enc;
4832     __vki_u16           quantization;
4833     __vki_u32           reserved[6];
4834 };
4835 
4836 struct vki_v4l2_subdev_format {
4837     __vki_u32 which;
4838     __vki_u32 pad;
4839     struct vki_v4l2_mbus_framefmt format;
4840     __vki_u32 reserved[8];
4841 };
4842 
4843 struct vki_v4l2_subdev_crop {
4844     __vki_u32 which;
4845     __vki_u32 pad;
4846     struct vki_v4l2_rect rect;
4847     __vki_u32 reserved[8];
4848 };
4849 
4850 struct vki_v4l2_subdev_mbus_code_enum {
4851     __vki_u32 pad;
4852     __vki_u32 index;
4853     __vki_u32 code;
4854     __vki_u32 which;
4855     __vki_u32 reserved[8];
4856 };
4857 
4858 struct vki_v4l2_subdev_frame_size_enum {
4859     __vki_u32 index;
4860     __vki_u32 pad;
4861     __vki_u32 code;
4862     __vki_u32 min_width;
4863     __vki_u32 max_width;
4864     __vki_u32 min_height;
4865     __vki_u32 max_height;
4866     __vki_u32 which;
4867     __vki_u32 reserved[8];
4868 };
4869 
4870 struct vki_v4l2_subdev_frame_interval {
4871     __vki_u32 pad;
4872     struct vki_v4l2_fract interval;
4873     __vki_u32 reserved[9];
4874 };
4875 
4876 struct vki_v4l2_subdev_frame_interval_enum {
4877     __vki_u32 index;
4878     __vki_u32 pad;
4879     __vki_u32 code;
4880     __vki_u32 width;
4881     __vki_u32 height;
4882     struct vki_v4l2_fract interval;
4883     __vki_u32 which;
4884     __vki_u32 reserved[8];
4885 };
4886 
4887 struct vki_v4l2_subdev_selection {
4888     __vki_u32 which;
4889     __vki_u32 pad;
4890     __vki_u32 target;
4891     __vki_u32 flags;
4892     struct vki_v4l2_rect r;
4893     __vki_u32 reserved[8];
4894 };
4895 
4896 #define VKI_V4L2_SUBDEV_G_FMT           _VKI_IOWR('V',  4, struct vki_v4l2_subdev_format)
4897 #define VKI_V4L2_SUBDEV_S_FMT           _VKI_IOWR('V',  5, struct vki_v4l2_subdev_format)
4898 #define VKI_V4L2_SUBDEV_G_FRAME_INTERVAL    _VKI_IOWR('V', 21, struct vki_v4l2_subdev_frame_interval)
4899 #define VKI_V4L2_SUBDEV_S_FRAME_INTERVAL    _VKI_IOWR('V', 22, struct vki_v4l2_subdev_frame_interval)
4900 #define VKI_V4L2_SUBDEV_ENUM_MBUS_CODE      _VKI_IOWR('V',  2, struct vki_v4l2_subdev_mbus_code_enum)
4901 #define VKI_V4L2_SUBDEV_ENUM_FRAME_SIZE     _VKI_IOWR('V', 74, struct vki_v4l2_subdev_frame_size_enum)
4902 #define VKI_V4L2_SUBDEV_ENUM_FRAME_INTERVAL _VKI_IOWR('V', 75, struct vki_v4l2_subdev_frame_interval_enum)
4903 #define VKI_V4L2_SUBDEV_G_CROP          _VKI_IOWR('V', 59, struct vki_v4l2_subdev_crop)
4904 #define VKI_V4L2_SUBDEV_S_CROP          _VKI_IOWR('V', 60, struct vki_v4l2_subdev_crop)
4905 #define VKI_V4L2_SUBDEV_G_SELECTION     _VKI_IOWR('V', 61, struct vki_v4l2_subdev_selection)
4906 #define VKI_V4L2_SUBDEV_S_SELECTION     _VKI_IOWR('V', 62, struct vki_v4l2_subdev_selection)
4907 
4908 struct vki_media_device_info {
4909     char driver[16];
4910     char model[32];
4911     char serial[40];
4912     char bus_info[32];
4913     __vki_u32 media_version;
4914     __vki_u32 hw_revision;
4915     __vki_u32 driver_version;
4916     __vki_u32 reserved[31];
4917 };
4918 
4919 struct vki_media_entity_desc {
4920     __vki_u32 id;
4921     char name[32];
4922     __vki_u32 type;
4923     __vki_u32 revision;
4924     __vki_u32 flags;
4925     __vki_u32 group_id;
4926     __vki_u16 pads;
4927     __vki_u16 links;
4928 
4929     __vki_u32 reserved[4];
4930 
4931     union {
4932         /* Node specifications */
4933         struct {
4934             __vki_u32 major;
4935             __vki_u32 minor;
4936         } v4l;
4937         struct {
4938             __vki_u32 major;
4939             __vki_u32 minor;
4940         } fb;
4941         struct {
4942             __vki_u32 card;
4943             __vki_u32 device;
4944             __vki_u32 subdevice;
4945         } alsa;
4946         int dvb;
4947 
4948         /* Sub-device specifications */
4949         /* Nothing needed yet */
4950         __vki_u8 raw[184];
4951     };
4952 };
4953 
4954 struct vki_media_pad_desc {
4955     __vki_u32 entity;       /* entity ID */
4956     __vki_u16 index;        /* pad index */
4957     __vki_u32 flags;        /* pad flags */
4958     __vki_u32 reserved[2];
4959 };
4960 
4961 struct vki_media_link_desc {
4962     struct vki_media_pad_desc source;
4963     struct vki_media_pad_desc sink;
4964     __vki_u32 flags;
4965     __vki_u32 reserved[2];
4966 };
4967 
4968 struct vki_media_links_enum {
4969     __vki_u32 entity;
4970     struct vki_media_pad_desc __user *pads;
4971     struct vki_media_link_desc __user *links;
4972     __vki_u32 reserved[4];
4973 };
4974 
4975 #define VKI_MEDIA_IOC_DEVICE_INFO       _VKI_IOWR('|', 0x00, struct vki_media_device_info)
4976 #define VKI_MEDIA_IOC_ENUM_ENTITIES     _VKI_IOWR('|', 0x01, struct vki_media_entity_desc)
4977 #define VKI_MEDIA_IOC_ENUM_LINKS        _VKI_IOWR('|', 0x02, struct vki_media_links_enum)
4978 #define VKI_MEDIA_IOC_SETUP_LINK        _VKI_IOWR('|', 0x03, struct vki_media_link_desc)
4979 
4980 /* DVB demux API */
4981 #define VKI_DMX_STOP    _VKI_IO('o', 42)
4982 
4983 /* Comparison type */
4984 enum vki_kcmp_type {
4985    VKI_KCMP_FILE,
4986    VKI_KCMP_VM,
4987    VKI_KCMP_FILES,
4988    VKI_KCMP_FS,
4989    VKI_KCMP_SIGHAND,
4990    VKI_KCMP_IO,
4991    VKI_KCMP_SYSVSEM,
4992 
4993    VKI_KCMP_TYPES
4994 };
4995 
4996 //----------------------------------------------------------------------
4997 // From linux-3.19-rc5/include/uapi/linux/seccomp.h
4998 //----------------------------------------------------------------------
4999 
5000 #define VKI_SECCOMP_MODE_FILTER 2
5001 
5002 //----------------------------------------------------------------------
5003 // From linux-3.19.3/include/uapi/linux/binfmts.h
5004 //----------------------------------------------------------------------
5005 #define VKI_BINPRM_BUF_SIZE 128
5006 
5007 //----------------------------------------------------------------------
5008 // From linux-3.19.0/include/linux/serial.h
5009 //----------------------------------------------------------------------
5010 
5011 struct vki_serial_struct {
5012     int type;
5013     int line;
5014     unsigned int    port;
5015     int irq;
5016     int flags;
5017     int xmit_fifo_size;
5018     int custom_divisor;
5019     int baud_base;
5020     unsigned short  close_delay;
5021     char    io_type;
5022     char    reserved_char[1];
5023     int hub6;
5024     unsigned short  closing_wait; /* time to wait before closing */
5025     unsigned short  closing_wait2; /* no longer used... */
5026     unsigned char   *iomem_base;
5027     unsigned short  iomem_reg_shift;
5028     unsigned int    port_high;
5029     unsigned long   iomap_base; /* cookie passed into ioremap */
5030 };
5031 
5032 //----------------------------------------------------------------------
5033 // From linux-3.19.0/fs/binfmt_elf.c
5034 //----------------------------------------------------------------------
5035 
5036 #if !defined(VKI_INIT_ARCH_ELF_STATE)
5037    /* This structure is used to preserve architecture specific data during
5038       the loading of an ELF file, throughout the checking of architecture
5039       specific ELF headers & through to the point where the ELF load is
5040       known to be proceeding. This implementation is a dummy for
5041       architectures which require no specific state. */
5042    struct vki_arch_elf_state {
5043    };
5044 
5045 #  define VKI_INIT_ARCH_ELF_STATE { }
5046 
5047 #endif
5048 
5049 //----------------------------------------------------------------------
5050 // From linux-4.0/include/uapi/linux/prctl.h
5051 //----------------------------------------------------------------------
5052 
5053 #define VKI_PR_SET_FP_MODE          45
5054 #define VKI_PR_GET_FP_MODE          46
5055 # define VKI_PR_FP_MODE_FR          (1 << 0)     /* 64b FP registers  */
5056 # define VKI_PR_FP_MODE_FRE         (1 << 1)     /* 32b compatibility */
5057 
5058 #endif // __VKI_LINUX_H
5059 
5060 //----------------------------------------------------------------------
5061 // From linux-4.10/include/uapi/linux/blkzoned.h
5062 //----------------------------------------------------------------------
5063 
5064 struct vki_blk_zone {
5065     __vki_u64   start;
5066     __vki_u64   len;
5067     __vki_u64   wp;
5068     __vki_u8    type;
5069     __vki_u8    cond;
5070     __vki_u8    non_seq;
5071     __vki_u8    reset;
5072     __vki_u8    reserved[36];
5073 };
5074 
5075 struct vki_blk_zone_report {
5076     __vki_u64       sector;
5077     __vki_u32       nr_zones;
5078     __vki_u8        reserved[4];
5079     struct vki_blk_zone zones[0];
5080 };
5081 
5082 struct vki_blk_zone_range {
5083     __vki_u64       sector;
5084     __vki_u64       nr_sectors;
5085 };
5086 
5087 #define VKI_BLKREPORTZONE   _VKI_IOWR(0x12, 130, struct vki_blk_zone_report)
5088 #define VKI_BLKRESETZONE    _VKI_IOW(0x12, 131, struct vki_blk_zone_range)
5089 
5090 //----------------------------------------------------------------------
5091 // From linux-4.18/include/uapi/linux/bpf.h
5092 //----------------------------------------------------------------------
5093 
5094 struct vki_bpf_insn {
5095     __vki_u8    code;       /* opcode */
5096     __vki_u8    dst_reg:4;  /* dest register */
5097     __vki_u8    src_reg:4;  /* source register */
5098     __vki_s16   off;        /* signed offset */
5099     __vki_s32   imm;        /* signed immediate constant */
5100 };
5101 
5102 enum vki_bpf_cmd {
5103     VKI_BPF_MAP_CREATE,
5104     VKI_BPF_MAP_LOOKUP_ELEM,
5105     VKI_BPF_MAP_UPDATE_ELEM,
5106     VKI_BPF_MAP_DELETE_ELEM,
5107     VKI_BPF_MAP_GET_NEXT_KEY,
5108     VKI_BPF_PROG_LOAD,
5109     VKI_BPF_OBJ_PIN,
5110     VKI_BPF_OBJ_GET,
5111     VKI_BPF_PROG_ATTACH,
5112     VKI_BPF_PROG_DETACH,
5113     VKI_BPF_PROG_TEST_RUN,
5114     VKI_BPF_PROG_GET_NEXT_ID,
5115     VKI_BPF_MAP_GET_NEXT_ID,
5116     VKI_BPF_PROG_GET_FD_BY_ID,
5117     VKI_BPF_MAP_GET_FD_BY_ID,
5118     VKI_BPF_OBJ_GET_INFO_BY_FD,
5119     VKI_BPF_PROG_QUERY,
5120     VKI_BPF_RAW_TRACEPOINT_OPEN,
5121     VKI_BPF_BTF_LOAD,
5122     VKI_BPF_BTF_GET_FD_BY_ID,
5123     VKI_BPF_TASK_FD_QUERY,
5124     VKI_BPF_MAP_LOOKUP_AND_DELETE_ELEM,
5125     VKI_BPF_MAP_FREEZE,
5126 };
5127 
5128 enum vki_bpf_map_type {
5129     VKI_BPF_MAP_TYPE_UNSPEC,
5130     VKI_BPF_MAP_TYPE_HASH,
5131     VKI_BPF_MAP_TYPE_ARRAY,
5132     VKI_BPF_MAP_TYPE_PROG_ARRAY,
5133     VKI_BPF_MAP_TYPE_PERF_EVENT_ARRAY,
5134     VKI_BPF_MAP_TYPE_PERCPU_HASH,
5135     VKI_BPF_MAP_TYPE_PERCPU_ARRAY,
5136     VKI_BPF_MAP_TYPE_STACK_TRACE,
5137     VKI_BPF_MAP_TYPE_CGROUP_ARRAY,
5138     VKI_BPF_MAP_TYPE_LRU_HASH,
5139     VKI_BPF_MAP_TYPE_LRU_PERCPU_HASH,
5140     VKI_BPF_MAP_TYPE_LPM_TRIE,
5141     VKI_BPF_MAP_TYPE_ARRAY_OF_MAPS,
5142     VKI_BPF_MAP_TYPE_HASH_OF_MAPS,
5143     VKI_BPF_MAP_TYPE_DEVMAP,
5144     VKI_BPF_MAP_TYPE_SOCKMAP,
5145     VKI_BPF_MAP_TYPE_CPUMAP,
5146     VKI_BPF_MAP_TYPE_XSKMAP,
5147     VKI_BPF_MAP_TYPE_SOCKHASH,
5148 };
5149 
5150 enum vki_bpf_prog_type {
5151     VKI_BPF_PROG_TYPE_UNSPEC,
5152     VKI_BPF_PROG_TYPE_SOCKET_FILTER,
5153     VKI_BPF_PROG_TYPE_KPROBE,
5154     VKI_BPF_PROG_TYPE_SCHED_CLS,
5155     VKI_BPF_PROG_TYPE_SCHED_ACT,
5156     VKI_BPF_PROG_TYPE_TRACEPOINT,
5157     VKI_BPF_PROG_TYPE_XDP,
5158     VKI_BPF_PROG_TYPE_PERF_EVENT,
5159     VKI_BPF_PROG_TYPE_CGROUP_SKB,
5160     VKI_BPF_PROG_TYPE_CGROUP_SOCK,
5161     VKI_BPF_PROG_TYPE_LWT_IN,
5162     VKI_BPF_PROG_TYPE_LWT_OUT,
5163     VKI_BPF_PROG_TYPE_LWT_XMIT,
5164     VKI_BPF_PROG_TYPE_SOCK_OPS,
5165     VKI_BPF_PROG_TYPE_SK_SKB,
5166     VKI_BPF_PROG_TYPE_CGROUP_DEVICE,
5167     VKI_BPF_PROG_TYPE_SK_MSG,
5168     VKI_BPF_PROG_TYPE_RAW_TRACEPOINT,
5169     VKI_BPF_PROG_TYPE_CGROUP_SOCK_ADDR,
5170     VKI_BPF_PROG_TYPE_LWT_SEG6LOCAL,
5171     VKI_BPF_PROG_TYPE_LIRC_MODE2,
5172 };
5173 
5174 enum vki_bpf_attach_type {
5175     VKI_BPF_CGROUP_INET_INGRESS,
5176     VKI_BPF_CGROUP_INET_EGRESS,
5177     VKI_BPF_CGROUP_INET_SOCK_CREATE,
5178     VKI_BPF_CGROUP_SOCK_OPS,
5179     VKI_BPF_SK_SKB_STREAM_PARSER,
5180     VKI_BPF_SK_SKB_STREAM_VERDICT,
5181     VKI_BPF_CGROUP_DEVICE,
5182     VKI_BPF_SK_MSG_VERDICT,
5183     VKI_BPF_CGROUP_INET4_BIND,
5184     VKI_BPF_CGROUP_INET6_BIND,
5185     VKI_BPF_CGROUP_INET4_CONNECT,
5186     VKI_BPF_CGROUP_INET6_CONNECT,
5187     VKI_BPF_CGROUP_INET4_POST_BIND,
5188     VKI_BPF_CGROUP_INET6_POST_BIND,
5189     VKI_BPF_CGROUP_UDP4_SENDMSG,
5190     VKI_BPF_CGROUP_UDP6_SENDMSG,
5191     VKI_BPF_LIRC_MODE2,
5192     __VKI_MAX_BPF_ATTACH_TYPE
5193 };
5194 
5195 /* Specify numa node during map creation */
5196 #define VKI_BPF_F_NUMA_NODE     (1U << 2)
5197 
5198 #define VKI_BPF_OBJ_NAME_LEN 16U
5199 
5200 union vki_bpf_attr {
5201     struct { /* anonymous struct used by BPF_MAP_CREATE command */
5202         __vki_u32   map_type;   /* one of enum bpf_map_type */
5203         __vki_u32   key_size;   /* size of key in bytes */
5204         __vki_u32   value_size; /* size of value in bytes */
5205         __vki_u32   max_entries;    /* max number of entries in a map */
5206         __vki_u32   map_flags;  /* BPF_MAP_CREATE related
5207                      * flags defined above.
5208                      */
5209         __vki_u32   inner_map_fd;   /* fd pointing to the inner map */
5210         __vki_u32   numa_node;  /* numa node (effective only if
5211                      * BPF_F_NUMA_NODE is set).
5212                      */
5213         char    map_name[VKI_BPF_OBJ_NAME_LEN];
5214         __vki_u32   map_ifindex;    /* ifindex of netdev to create on */
5215         __vki_u32   btf_fd;     /* fd pointing to a BTF type data */
5216         __vki_u32   btf_key_type_id;    /* BTF type_id of the key */
5217         __vki_u32   btf_value_type_id;  /* BTF type_id of the value */
5218     };
5219 
5220     struct { /* anonymous struct used by BPF_MAP_*_ELEM commands */
5221         __vki_u32       map_fd;
5222         __vki_aligned_u64   key;
5223         union {
5224             __vki_aligned_u64 value;
5225             __vki_aligned_u64 next_key;
5226         };
5227         __vki_u64       flags;
5228     };
5229 
5230     struct { /* anonymous struct used by BPF_PROG_LOAD command */
5231         __vki_u32       prog_type;  /* one of enum bpf_prog_type */
5232         __vki_u32       insn_cnt;
5233         __vki_aligned_u64   insns;
5234         __vki_aligned_u64   license;
5235         __vki_u32       log_level;  /* verbosity level of verifier */
5236         __vki_u32       log_size;   /* size of user buffer */
5237         __vki_aligned_u64   log_buf;    /* user supplied buffer */
5238         __vki_u32       kern_version;   /* checked when prog_type=kprobe */
5239         __vki_u32       prog_flags;
5240         char        prog_name[VKI_BPF_OBJ_NAME_LEN];
5241         __vki_u32       prog_ifindex;   /* ifindex of netdev to prep for */
5242         /* For some prog types expected attach type must be known at
5243          * load time to verify attach type specific parts of prog
5244          * (context accesses, allowed helpers, etc).
5245          */
5246         __vki_u32       expected_attach_type;
5247     };
5248 
5249     struct { /* anonymous struct used by BPF_OBJ_* commands */
5250         __vki_aligned_u64   pathname;
5251         __vki_u32       bpf_fd;
5252         __vki_u32       file_flags;
5253     };
5254 
5255     struct { /* anonymous struct used by BPF_PROG_ATTACH/DETACH commands */
5256         __vki_u32       target_fd;  /* container object to attach to */
5257         __vki_u32       attach_bpf_fd;  /* eBPF program to attach */
5258         __vki_u32       attach_type;
5259         __vki_u32       attach_flags;
5260     };
5261 
5262     struct { /* anonymous struct used by BPF_PROG_TEST_RUN command */
5263         __vki_u32       prog_fd;
5264         __vki_u32       retval;
5265         __vki_u32       data_size_in;
5266         __vki_u32       data_size_out;
5267         __vki_aligned_u64   data_in;
5268         __vki_aligned_u64   data_out;
5269         __vki_u32       repeat;
5270         __vki_u32       duration;
5271     } test;
5272 
5273     struct { /* anonymous struct used by BPF_*_GET_*_ID */
5274         union {
5275             __vki_u32       start_id;
5276             __vki_u32       prog_id;
5277             __vki_u32       map_id;
5278             __vki_u32       btf_id;
5279         };
5280         __vki_u32       next_id;
5281         __vki_u32       open_flags;
5282     };
5283 
5284     struct { /* anonymous struct used by BPF_OBJ_GET_INFO_BY_FD */
5285         __vki_u32       bpf_fd;
5286         __vki_u32       info_len;
5287         __vki_aligned_u64   info;
5288     } info;
5289 
5290     struct { /* anonymous struct used by BPF_PROG_QUERY command */
5291         __vki_u32       target_fd;  /* container object to query */
5292         __vki_u32       attach_type;
5293         __vki_u32       query_flags;
5294         __vki_u32       attach_flags;
5295         __vki_aligned_u64   prog_ids;
5296         __vki_u32       prog_cnt;
5297     } query;
5298 
5299     struct {
5300         __vki_u64 name;
5301         __vki_u32 prog_fd;
5302     } raw_tracepoint;
5303 
5304     struct { /* anonymous struct for BPF_BTF_LOAD */
5305         __vki_aligned_u64   btf;
5306         __vki_aligned_u64   btf_log_buf;
5307         __vki_u32       btf_size;
5308         __vki_u32       btf_log_size;
5309         __vki_u32       btf_log_level;
5310     };
5311 
5312     struct {
5313         __vki_u32       pid;        /* input: pid */
5314         __vki_u32       fd;     /* input: fd */
5315         __vki_u32       flags;      /* input: flags */
5316         __vki_u32       buf_len;    /* input/output: buf len */
5317         __vki_aligned_u64   buf;        /* input/output:
5318                          *   tp_name for tracepoint
5319                          *   symbol for kprobe
5320                          *   filename for uprobe
5321                          */
5322         __vki_u32       prog_id;    /* output: prod_id */
5323         __vki_u32       fd_type;    /* output: BPF_FD_TYPE_* */
5324         __vki_u64       probe_offset;   /* output: probe_offset */
5325         __vki_u64       probe_addr; /* output: probe_addr */
5326     } task_fd_query;
5327 } __attribute__((aligned(8)));
5328 
5329 #define VKI_XDP_PACKET_HEADROOM 256
5330 
5331 #define VKI_BPF_TAG_SIZE    8
5332 
5333 struct vki_bpf_prog_info {
5334     __vki_u32 type;
5335     __vki_u32 id;
5336     __vki_u8  tag[VKI_BPF_TAG_SIZE];
5337     __vki_u32 jited_prog_len;
5338     __vki_u32 xlated_prog_len;
5339     __vki_aligned_u64 jited_prog_insns;
5340     __vki_aligned_u64 xlated_prog_insns;
5341     __vki_u64 load_time;    /* ns since boottime */
5342     __vki_u32 created_by_uid;
5343     __vki_u32 nr_map_ids;
5344     __vki_aligned_u64 map_ids;
5345     char name[VKI_BPF_OBJ_NAME_LEN];
5346     __vki_u32 ifindex;
5347     __vki_u32 gpl_compatible:1;
5348     __vki_u64 netns_dev;
5349     __vki_u64 netns_ino;
5350     __vki_u32 nr_jited_ksyms;
5351     __vki_u32 nr_jited_func_lens;
5352     __vki_aligned_u64 jited_ksyms;
5353     __vki_aligned_u64 jited_func_lens;
5354 } __attribute__((aligned(8)));
5355 
5356 struct vki_bpf_map_info {
5357     __vki_u32 type;
5358     __vki_u32 id;
5359     __vki_u32 key_size;
5360     __vki_u32 value_size;
5361     __vki_u32 max_entries;
5362     __vki_u32 map_flags;
5363     char  name[VKI_BPF_OBJ_NAME_LEN];
5364     __vki_u32 ifindex;
5365     __vki_u32 :32;
5366     __vki_u64 netns_dev;
5367     __vki_u64 netns_ino;
5368     __vki_u32 btf_id;
5369     __vki_u32 btf_key_type_id;
5370     __vki_u32 btf_value_type_id;
5371 } __attribute__((aligned(8)));
5372 
5373 struct vki_bpf_btf_info {
5374     __vki_aligned_u64 btf;
5375     __vki_u32 btf_size;
5376     __vki_u32 id;
5377 } __attribute__((aligned(8)));
5378 
5379 //----------------------------------------------------------------------
5380 // From linux-5.1/include/uapi/linux/pps.h
5381 //----------------------------------------------------------------------
5382 
5383 struct vki_pps_ktime {
5384     __vki_s64 sec;
5385     __vki_s32 nsec;
5386     __vki_u32 flags;
5387 };
5388 
5389 struct vki_pps_kinfo {
5390     __vki_u32 assert_sequence;
5391     __vki_u32 clear_sequence;
5392     struct vki_pps_ktime assert_tu;
5393     struct vki_pps_ktime clear_tu;
5394     int current_mode;
5395 };
5396 
5397 struct vki_pps_kparams {
5398     int api_version;
5399     int mode;
5400     struct vki_pps_ktime assert_off_tu;
5401     struct vki_pps_ktime clear_off_tu;
5402 };
5403 
5404 struct vki_pps_fdata {
5405     struct vki_pps_kinfo info;
5406     struct vki_pps_ktime timeout;
5407 };
5408 
5409 struct vki_pps_bind_args {
5410     int tsformat;
5411     int edge;
5412     int consumer;
5413 };
5414 
5415 #define VKI_PPS_GETPARAMS   _VKI_IOR('p', 0xa1, struct vki_pps_kparams *)
5416 #define VKI_PPS_SETPARAMS   _VKI_IOW('p', 0xa2, struct vki_pps_kparams *)
5417 #define VKI_PPS_GETCAP      _VKI_IOR('p', 0xa3, int *)
5418 #define VKI_PPS_FETCH       _VKI_IOWR('p', 0xa4, struct vki_pps_fdata *)
5419 #define VKI_PPS_KC_BIND     _VKI_IOW('p', 0xa5, struct vki_pps_bind_args *)
5420 
5421 //----------------------------------------------------------------------
5422 // From linux-5.1/include/uapi/linux/ptp_clock.h
5423 //----------------------------------------------------------------------
5424 
5425 struct vki_ptp_clock_time {
5426     __vki_s64 sec;
5427     __vki_u32 nsec;
5428     __vki_u32 reserved;
5429 };
5430 
5431 struct vki_ptp_clock_caps {
5432     int max_adj;
5433     int n_alarm;
5434     int n_ext_ts;
5435     int n_per_out;
5436     int pps;
5437     int n_pins;
5438     int cross_timestamping;
5439     int rsv[13];
5440 };
5441 
5442 struct vki_ptp_extts_request {
5443     unsigned int index;
5444     unsigned int flags;
5445     unsigned int rsv[2];
5446 };
5447 
5448 struct vki_ptp_perout_request {
5449     struct vki_ptp_clock_time start;
5450     struct vki_ptp_clock_time period;
5451     unsigned int index;
5452     unsigned int flags;
5453     unsigned int rsv[4];
5454 };
5455 
5456 #define VKI_PTP_MAX_SAMPLES 25
5457 
5458 struct vki_ptp_sys_offset {
5459     unsigned int n_samples;
5460     unsigned int rsv[3];
5461     struct vki_ptp_clock_time ts[2 * VKI_PTP_MAX_SAMPLES + 1];
5462 };
5463 
5464 struct vki_ptp_sys_offset_extended {
5465     unsigned int n_samples;
5466     unsigned int rsv[3];
5467     struct vki_ptp_clock_time ts[VKI_PTP_MAX_SAMPLES][3];
5468 };
5469 
5470 struct vki_ptp_sys_offset_precise {
5471     struct vki_ptp_clock_time device;
5472     struct vki_ptp_clock_time sys_realtime;
5473     struct vki_ptp_clock_time sys_monoraw;
5474     unsigned int rsv[4];
5475 };
5476 
5477 struct vki_ptp_pin_desc {
5478     char name[64];
5479     unsigned int index;
5480     unsigned int func;
5481     unsigned int chan;
5482     unsigned int rsv[5];
5483 };
5484 
5485 #define VKI_PTP_CLOCK_GETCAPS  _VKI_IOR('=', 1, struct vki_ptp_clock_caps)
5486 #define VKI_PTP_EXTTS_REQUEST  _VKI_IOW('=', 2, struct vki_ptp_extts_request)
5487 #define VKI_PTP_PEROUT_REQUEST _VKI_IOW('=', 3, struct vki_ptp_perout_request)
5488 #define VKI_PTP_ENABLE_PPS     _VKI_IOW('=', 4, int)
5489 #define VKI_PTP_SYS_OFFSET     _VKI_IOW('=', 5, struct vki_ptp_sys_offset)
5490 #define VKI_PTP_PIN_GETFUNC    _VKI_IOWR('=', 6, struct vki_ptp_pin_desc)
5491 #define VKI_PTP_PIN_SETFUNC    _VKI_IOW('=', 7, struct vki_ptp_pin_desc)
5492 #define VKI_PTP_SYS_OFFSET_PRECISE \
5493     _VKI_IOWR('=', 8, struct vki_ptp_sys_offset_precise)
5494 #define VKI_PTP_SYS_OFFSET_EXTENDED \
5495     _VKI_IOWR('=', 9, struct vki_ptp_sys_offset_extended)
5496 
5497 /* Needed for 64bit time_t on 32bit arches.  */
5498 
5499 typedef vki_int64_t vki_time64_t;
5500 
5501 /* Note that this is the padding used by glibc, the kernel uses
5502    a 64-bit signed int, but is ignoring the upper 32 bits of the
5503    tv_nsec field.  It does always write the full struct though.
5504    So this is only needed for PRE_MEM_READ. See pre_read_timespec64. */
5505 struct vki_timespec64 {
5506    vki_time64_t tv_sec;
5507 #if defined(VKI_BIG_ENDIAN)
5508    vki_int32_t tv_pad;
5509    vki_int32_t tv_nsec;
5510 #elif defined(VKI_LITTLE_ENDIAN)
5511    vki_int32_t tv_nsec;
5512    vki_int32_t tv_pad;
5513 #else
5514 #error edit for your odd byteorder.
5515 #endif
5516 };
5517 
5518 struct vki_itimerspec64 {
5519    struct vki_timespec it_interval;
5520    struct vki_timespec it_value;
5521 };
5522 
5523 /* From include/linux/openat2.h */
5524 
5525 struct vki_open_how {
5526     vki_uint64_t vki_flags;
5527     vki_uint64_t vki_mode;
5528     vki_uint64_t vki_resolve;
5529 };
5530 
5531 #define VKI_RESOLVE_NO_XDEV     0x01
5532 #define VKI_RESOLVE_NO_MAGICLINKS   0x02
5533 #define VKI_RESOLVE_NO_SYMLINKS 0x04
5534 #define VKI_RESOLVE_BENEATH     0x08
5535 #define VKI_RESOLVE_IN_ROOT     0x10
5536 #define VKI_RESOLVE_CACHED      0x20
5537 
5538 #ifndef VKI_RLIM_INFINITY
5539 #define VKI_RLIM_INFINITY (~0UL)
5540 #endif
5541 
5542 #define VKI_RLIM64_INFINITY (~0ULL)
5543 
5544 #define VKI_CLOSE_RANGE_UNSHARE (1U << 1)
5545 #define VKI_CLOSE_RANGE_CLOEXEC (1U << 2)
5546 
5547 struct vki_cachestat_range {
5548     __vki_u64 off;
5549     __vki_u64 len;
5550 };
5551 
5552 struct vki_cachestat {
5553     __vki_u64 nr_cache;
5554     __vki_u64 nr_dirty;
5555     __vki_u64 nr_writeback;
5556     __vki_u64 nr_evicted;
5557     __vki_u64 nr_recently_evicted;
5558 };
5559 
5560 //----------------------------------------------------------------------
5561 // From linux/magic.h
5562 //----------------------------------------------------------------------
5563 
5564 #define VKI_BTRFS_SUPER_MAGIC    0x9123683E
5565 
5566 struct vki__aio_sigset {
5567    const vki_sigset_t __user    *sigmask;
5568    vki_size_t       sigsetsize;
5569 };
5570 
5571 //----------------------------------------------------------------------
5572 // From uapi/linux/mount.h
5573 //----------------------------------------------------------------------
5574 
5575 struct vki_mnt_id_req {
5576    __vki_u32 size;
5577    __vki_u32 spare;
5578    __vki_u64 mnt_id;
5579    __vki_u64 param;
5580    __vki_u64 mnt_ns_id;
5581 };
5582 
5583 struct vki_statmount {
5584     __vki_u32 size;     /* Total size, including strings */
5585     __vki_u32 mnt_opts;     /* [str] Mount options of the mount */
5586     __vki_u64 mask;     /* What results were written */
5587     __vki_u32 sb_dev_major; /* Device ID */
5588     __vki_u32 sb_dev_minor;
5589     __vki_u64 sb_magic;     /* ..._SUPER_MAGIC */
5590     __vki_u32 sb_flags;     /* SB_{RDONLY,SYNCHRONOUS,DIRSYNC,LAZYTIME} */
5591     __vki_u32 fs_type;      /* [str] Filesystem type */
5592     __vki_u64 mnt_id;       /* Unique ID of mount */
5593     __vki_u64 mnt_parent_id;    /* Unique ID of parent (for root == mnt_id) */
5594     __vki_u32 mnt_id_old;   /* Reused IDs used in proc/.../mountinfo */
5595     __vki_u32 mnt_parent_id_old;
5596     __vki_u64 mnt_attr;     /* MOUNT_ATTR_... */
5597     __vki_u64 mnt_propagation;  /* MS_{SHARED,SLAVE,PRIVATE,UNBINDABLE} */
5598     __vki_u64 mnt_peer_group;   /* ID of shared peer group */
5599     __vki_u64 mnt_master;   /* Mount receives propagation from this ID */
5600     __vki_u64 propagate_from;   /* Propagation from in current namespace */
5601     __vki_u32 mnt_root;     /* [str] Root of mount relative to root of fs */
5602     __vki_u32 mnt_point;    /* [str] Mountpoint relative to current root */
5603     __vki_u64 mnt_ns_id;    /* ID of the mount namespace */
5604     __vki_u64 __spare2[49];
5605     char str[];     /* Variable size part containing strings */
5606 };
5607 
5608 //----------------------------------------------------------------------
5609 // From uapi/linux/fs.h
5610 //----------------------------------------------------------------------
5611 
5612 struct vki_file_attr {
5613     __vki_u64 fa_xflags;    /* xflags field value (get/set) */
5614     __vki_u32 fa_extsize;   /* extsize field value (get/set)*/
5615     __vki_u32 fa_nextents;  /* nextents field value (get)   */
5616     __vki_u32 fa_projid;    /* project identifier (get/set) */
5617     __vki_u32 fa_cowextsize;    /* CoW extsize field value (get/set) */
5618 };
5619 
5620 //----------------------------------------------------------------------
5621 // From uapi/linux/mount.h
5622 //----------------------------------------------------------------------
5623 
5624 #define VKI_SUBCMDMASK  0x00ff
5625 #define VKI_SUBCMDSHIFT 8
5626 
5627 #define VKI_Q_SYNC     0x800001 /* sync disk copy of a filesystems quotas */
5628 #define VKI_Q_QUOTAON  0x800002 /* turn quotas on */
5629 #define VKI_Q_QUOTAOFF 0x800003 /* turn quotas off */
5630 #define VKI_Q_GETFMT   0x800004 /* get quota format used on given filesystem */
5631 #define VKI_Q_GETINFO  0x800005 /* get information about quota files */
5632 #define VKI_Q_SETINFO  0x800006 /* set information about quota files */
5633 #define VKI_Q_GETQUOTA 0x800007 /* get user quota structure */
5634 #define VKI_Q_SETQUOTA 0x800008 /* set user quota structure */
5635 #define VKI_Q_GETNEXTQUOTA 0x800009 /* get disk limits and usage >= ID */
5636 
5637 struct vki_dqblk
5638   {
5639     __vki_u64 dqb_bhardlimit;   /* absolute limit on disk quota blocks alloc */
5640     __vki_u64 dqb_bsoftlimit;   /* preferred limit on disk quota blocks */
5641     __vki_u64 dqb_curspace; /* current quota block count */
5642     __vki_u64 dqb_ihardlimit;   /* maximum # allocated inodes */
5643     __vki_u64 dqb_isoftlimit;   /* preferred inode limit */
5644     __vki_u64 dqb_curinodes;    /* current # allocated inodes */
5645     __vki_u64 dqb_btime;    /* time limit for excessive disk use */
5646     __vki_u64 dqb_itime;    /* time limit for excessive files */
5647     __vki_u32 dqb_valid;    /* bitmask of QIF_* constants */
5648   };
5649 
5650 
5651 struct vki_nextdqblk {
5652     __vki_u64 dqb_bhardlimit;
5653     __vki_u64 dqb_bsoftlimit;
5654     __vki_u64 dqb_curspace;
5655     __vki_u64 dqb_ihardlimit;
5656     __vki_u64 dqb_isoftlimit;
5657     __vki_u64 dqb_curinodes;
5658     __vki_u64 dqb_btime;
5659     __vki_u64 dqb_itime;
5660     __vki_u32 dqb_valid;
5661     __vki_u32 dqb_id;
5662 };
5663 
5664 struct vki_dqinfo {
5665     __vki_u64 dqi_bgrace;
5666     __vki_u64 dqi_igrace;
5667     __vki_u32 dqi_flags;    /* DFQ_* */
5668     __vki_u32 dqi_valid;
5669 };
5670 
5671 //----------------------------------------------------------------------
5672 // From uapi/linux/lsm.h
5673 //----------------------------------------------------------------------
5674 
5675 struct vki_lsm_ctx {
5676     __vki_u64 id;
5677     __vki_u64 flags;
5678     __vki_u64 len;
5679     __vki_u64 ctx_len;
5680     __vki_u8 ctx[]; /* __counted_by(ctx_len); */
5681 };
5682 
5683 /*--------------------------------------------------------------------*/
5684 /*--- end                                                          ---*/
5685 /*--------------------------------------------------------------------*/