qemu/linux-user/syscall_defs.h
<<
>>
Prefs
   1/* common syscall defines for all architectures */
   2
   3/* Note: although the syscall numbers change between architectures,
   4   most of them stay the same, so we handle it by putting ifdefs if
   5   necessary */
   6
   7#ifndef SYSCALL_DEFS_H
   8#define SYSCALL_DEFS_H
   9
  10#include "syscall_nr.h"
  11
  12
  13/* socket operations for socketcall() */
  14#define TARGET_SYS_SOCKET       1         /* socket()              */
  15#define TARGET_SYS_BIND         2         /* bind()                */
  16#define TARGET_SYS_CONNECT      3         /* connect()             */
  17#define TARGET_SYS_LISTEN       4         /* listen()              */
  18#define TARGET_SYS_ACCEPT       5         /* accept()              */
  19#define TARGET_SYS_GETSOCKNAME  6         /* getsockname()         */
  20#define TARGET_SYS_GETPEERNAME  7         /* getpeername()         */
  21#define TARGET_SYS_SOCKETPAIR   8         /* socketpair()          */
  22#define TARGET_SYS_SEND         9         /* send()                */
  23#define TARGET_SYS_RECV         10        /* recv()                */
  24#define TARGET_SYS_SENDTO       11        /* sendto()              */
  25#define TARGET_SYS_RECVFROM     12        /* recvfrom()            */
  26#define TARGET_SYS_SHUTDOWN     13        /* shutdown()            */
  27#define TARGET_SYS_SETSOCKOPT   14        /* setsockopt()          */
  28#define TARGET_SYS_GETSOCKOPT   15        /* getsockopt()          */
  29#define TARGET_SYS_SENDMSG      16        /* sendmsg()             */
  30#define TARGET_SYS_RECVMSG      17        /* recvmsg()             */
  31#define TARGET_SYS_ACCEPT4      18        /* accept4()             */
  32#define TARGET_SYS_RECVMMSG     19        /* recvmmsg()            */
  33#define TARGET_SYS_SENDMMSG     20        /* sendmmsg()            */
  34
  35#define IPCOP_CALL(VERSION, OP) ((VERSION) << 16 | (OP))
  36#define IPCOP_semop             1
  37#define IPCOP_semget            2
  38#define IPCOP_semctl            3
  39#define IPCOP_semtimedop        4
  40#define IPCOP_msgsnd            11
  41#define IPCOP_msgrcv            12
  42#define IPCOP_msgget            13
  43#define IPCOP_msgctl            14
  44#define IPCOP_shmat             21
  45#define IPCOP_shmdt             22
  46#define IPCOP_shmget            23
  47#define IPCOP_shmctl            24
  48
  49#define TARGET_SEMOPM     500
  50
  51/*
  52 * The following is for compatibility across the various Linux
  53 * platforms.  The i386 ioctl numbering scheme doesn't really enforce
  54 * a type field.  De facto, however, the top 8 bits of the lower 16
  55 * bits are indeed used as a type field, so we might just as well make
  56 * this explicit here.  Please be sure to use the decoding macros
  57 * below from now on.
  58 */
  59#define TARGET_IOC_NRBITS       8
  60#define TARGET_IOC_TYPEBITS     8
  61
  62#if (defined(TARGET_I386) && defined(TARGET_ABI32)) \
  63    || (defined(TARGET_ARM) && defined(TARGET_ABI32)) \
  64    || defined(TARGET_SPARC) \
  65    || defined(TARGET_M68K) || defined(TARGET_SH4) || defined(TARGET_CRIS)
  66    /* 16 bit uid wrappers emulation */
  67#define USE_UID16
  68#define target_id uint16_t
  69#else
  70#define target_id uint32_t
  71#endif
  72
  73#if defined(TARGET_I386) || defined(TARGET_ARM) || defined(TARGET_SH4) \
  74    || defined(TARGET_M68K) || defined(TARGET_CRIS) \
  75    || defined(TARGET_S390X) \
  76    || defined(TARGET_OPENRISC) || defined(TARGET_TILEGX) \
  77    || defined(TARGET_NIOS2) || defined(TARGET_RISCV) \
  78    || defined(TARGET_XTENSA)
  79
  80#define TARGET_IOC_SIZEBITS     14
  81#define TARGET_IOC_DIRBITS      2
  82
  83#define TARGET_IOC_NONE   0U
  84#define TARGET_IOC_WRITE  1U
  85#define TARGET_IOC_READ   2U
  86
  87#elif defined(TARGET_PPC) || defined(TARGET_ALPHA) || \
  88      defined(TARGET_SPARC) || defined(TARGET_MICROBLAZE) || \
  89      defined(TARGET_MIPS)
  90
  91#define TARGET_IOC_SIZEBITS     13
  92#define TARGET_IOC_DIRBITS      3
  93
  94#define TARGET_IOC_NONE   1U
  95#define TARGET_IOC_READ   2U
  96#define TARGET_IOC_WRITE  4U
  97
  98#elif defined(TARGET_HPPA)
  99
 100#define TARGET_IOC_SIZEBITS  14
 101#define TARGET_IOC_DIRBITS    2
 102
 103#define TARGET_IOC_NONE   0U
 104#define TARGET_IOC_WRITE  2U
 105#define TARGET_IOC_READ   1U
 106
 107#else
 108#error unsupported CPU
 109#endif
 110
 111#define TARGET_IOC_NRMASK       ((1 << TARGET_IOC_NRBITS)-1)
 112#define TARGET_IOC_TYPEMASK     ((1 << TARGET_IOC_TYPEBITS)-1)
 113#define TARGET_IOC_SIZEMASK     ((1 << TARGET_IOC_SIZEBITS)-1)
 114#define TARGET_IOC_DIRMASK      ((1 << TARGET_IOC_DIRBITS)-1)
 115
 116#define TARGET_IOC_NRSHIFT      0
 117#define TARGET_IOC_TYPESHIFT    (TARGET_IOC_NRSHIFT+TARGET_IOC_NRBITS)
 118#define TARGET_IOC_SIZESHIFT    (TARGET_IOC_TYPESHIFT+TARGET_IOC_TYPEBITS)
 119#define TARGET_IOC_DIRSHIFT     (TARGET_IOC_SIZESHIFT+TARGET_IOC_SIZEBITS)
 120
 121#define TARGET_IOC(dir,type,nr,size) \
 122        (((dir)  << TARGET_IOC_DIRSHIFT) | \
 123         ((type) << TARGET_IOC_TYPESHIFT) | \
 124         ((nr)   << TARGET_IOC_NRSHIFT) | \
 125         ((size) << TARGET_IOC_SIZESHIFT))
 126
 127/* used to create numbers */
 128#define TARGET_IO(type,nr)              TARGET_IOC(TARGET_IOC_NONE,(type),(nr),0)
 129#define TARGET_IOR(type,nr,size)        TARGET_IOC(TARGET_IOC_READ,(type),(nr),sizeof(size))
 130#define TARGET_IOW(type,nr,size)        TARGET_IOC(TARGET_IOC_WRITE,(type),(nr),sizeof(size))
 131#define TARGET_IOWR(type,nr,size)       TARGET_IOC(TARGET_IOC_READ|TARGET_IOC_WRITE,(type),(nr),sizeof(size))
 132
 133/* the size is automatically computed for these defines */
 134#define TARGET_IORU(type,nr)    TARGET_IOC(TARGET_IOC_READ,(type),(nr),TARGET_IOC_SIZEMASK)
 135#define TARGET_IOWU(type,nr)    TARGET_IOC(TARGET_IOC_WRITE,(type),(nr),TARGET_IOC_SIZEMASK)
 136#define TARGET_IOWRU(type,nr)   TARGET_IOC(TARGET_IOC_READ|TARGET_IOC_WRITE,(type),(nr),TARGET_IOC_SIZEMASK)
 137
 138struct target_sockaddr {
 139    abi_ushort sa_family;
 140    uint8_t sa_data[14];
 141};
 142
 143struct target_sockaddr_ll {
 144    abi_ushort sll_family;   /* Always AF_PACKET */
 145    abi_ushort sll_protocol; /* Physical layer protocol */
 146    abi_int    sll_ifindex;  /* Interface number */
 147    abi_ushort sll_hatype;   /* ARP hardware type */
 148    uint8_t    sll_pkttype;  /* Packet type */
 149    uint8_t    sll_halen;    /* Length of address */
 150    uint8_t    sll_addr[8];  /* Physical layer address */
 151};
 152
 153struct target_sockaddr_un {
 154    abi_ushort su_family;
 155    uint8_t sun_path[108];
 156};
 157
 158struct target_sockaddr_nl {
 159    abi_ushort nl_family;   /* AF_NETLINK */
 160    abi_ushort __pad;
 161    abi_uint nl_pid;
 162    abi_uint nl_groups;
 163};
 164
 165struct target_in_addr {
 166    abi_uint s_addr; /* big endian */
 167};
 168
 169struct target_sockaddr_in {
 170  abi_ushort sin_family;
 171  abi_short sin_port; /* big endian */
 172  struct target_in_addr sin_addr;
 173  uint8_t __pad[sizeof(struct target_sockaddr) -
 174                sizeof(abi_ushort) - sizeof(abi_short) -
 175                sizeof(struct target_in_addr)];
 176};
 177
 178struct target_sockaddr_in6 {
 179    abi_ushort sin6_family;
 180    abi_ushort sin6_port; /* big endian */
 181    abi_uint sin6_flowinfo; /* big endian */
 182    struct in6_addr sin6_addr; /* IPv6 address, big endian */
 183    abi_uint sin6_scope_id;
 184};
 185
 186struct target_sock_filter {
 187    abi_ushort code;
 188    uint8_t jt;
 189    uint8_t jf;
 190    abi_uint k;
 191};
 192
 193struct target_sock_fprog {
 194    abi_ushort len;
 195    abi_ulong filter;
 196};
 197
 198struct target_ip_mreq {
 199    struct target_in_addr imr_multiaddr;
 200    struct target_in_addr imr_address;
 201};
 202
 203struct target_ip_mreqn {
 204    struct target_in_addr imr_multiaddr;
 205    struct target_in_addr imr_address;
 206    abi_long imr_ifindex;
 207};
 208
 209struct target_ip_mreq_source {
 210    /* big endian */
 211    uint32_t imr_multiaddr;
 212    uint32_t imr_interface;
 213    uint32_t imr_sourceaddr;
 214};
 215
 216struct target_linger {
 217    abi_int l_onoff;        /* Linger active                */
 218    abi_int l_linger;       /* How long to linger for       */
 219};
 220
 221#if defined(TARGET_SPARC64) && !defined(TARGET_ABI32)
 222struct target_timeval {
 223    abi_long tv_sec;
 224    abi_int tv_usec;
 225};
 226#define target__kernel_sock_timeval target_timeval
 227#else
 228struct target_timeval {
 229    abi_long tv_sec;
 230    abi_long tv_usec;
 231};
 232
 233struct target__kernel_sock_timeval {
 234    abi_llong tv_sec;
 235    abi_llong tv_usec;
 236};
 237#endif
 238
 239struct target_timespec {
 240    abi_long tv_sec;
 241    abi_long tv_nsec;
 242};
 243
 244struct target__kernel_timespec {
 245    abi_llong tv_sec;
 246    abi_llong tv_nsec;
 247};
 248
 249struct target_timezone {
 250    abi_int tz_minuteswest;
 251    abi_int tz_dsttime;
 252};
 253
 254struct target_itimerval {
 255    struct target_timeval it_interval;
 256    struct target_timeval it_value;
 257};
 258
 259struct target_itimerspec {
 260    struct target_timespec it_interval;
 261    struct target_timespec it_value;
 262};
 263
 264struct target__kernel_itimerspec {
 265    struct target__kernel_timespec it_interval;
 266    struct target__kernel_timespec it_value;
 267};
 268
 269struct target_timex {
 270    abi_uint modes;              /* Mode selector */
 271    abi_long offset;             /* Time offset */
 272    abi_long freq;               /* Frequency offset */
 273    abi_long maxerror;           /* Maximum error (microseconds) */
 274    abi_long esterror;           /* Estimated error (microseconds) */
 275    abi_int status;              /* Clock command/status */
 276    abi_long constant;           /* PLL (phase-locked loop) time constant */
 277    abi_long precision;          /* Clock precision (microseconds, ro) */
 278    abi_long tolerance;          /* Clock freq. tolerance (ppm, ro) */
 279    struct target_timeval time;  /* Current time */
 280    abi_long tick;               /* Microseconds between clock ticks */
 281    abi_long ppsfreq;            /* PPS (pulse per second) frequency */
 282    abi_long jitter;             /* PPS jitter (ro); nanoseconds */
 283    abi_int shift;               /* PPS interval duration (seconds) */
 284    abi_long stabil;             /* PPS stability */
 285    abi_long jitcnt;             /* PPS jitter limit exceeded (ro) */
 286    abi_long calcnt;             /* PPS calibration intervals */
 287    abi_long errcnt;             /* PPS calibration errors */
 288    abi_long stbcnt;             /* PPS stability limit exceeded */
 289    abi_int tai;                 /* TAI offset */
 290
 291    /* Further padding bytes to allow for future expansion */
 292    abi_int:32; abi_int:32; abi_int:32; abi_int:32;
 293    abi_int:32; abi_int:32; abi_int:32; abi_int:32;
 294    abi_int:32; abi_int:32; abi_int:32;
 295};
 296
 297struct target__kernel_timex {
 298    abi_uint modes;               /* Mode selector */
 299    abi_int: 32;                  /* pad */
 300    abi_llong offset;             /* Time offset */
 301    abi_llong freq;               /* Frequency offset */
 302    abi_llong maxerror;           /* Maximum error (microseconds) */
 303    abi_llong esterror;           /* Estimated error (microseconds) */
 304    abi_int status;               /* Clock command/status */
 305    abi_int: 32;                  /* pad */
 306    abi_llong constant;           /* PLL (phase-locked loop) time constant */
 307    abi_llong precision;          /* Clock precision (microseconds, ro) */
 308    abi_llong tolerance;          /* Clock freq. tolerance (ppm, ro) */
 309    struct target__kernel_sock_timeval time;  /* Current time */
 310    abi_llong tick;               /* Microseconds between clock ticks */
 311    abi_llong ppsfreq;            /* PPS (pulse per second) frequency */
 312    abi_llong jitter;             /* PPS jitter (ro); nanoseconds */
 313    abi_int shift;                /* PPS interval duration (seconds) */
 314    abi_int: 32;                  /* pad */
 315    abi_llong stabil;             /* PPS stability */
 316    abi_llong jitcnt;             /* PPS jitter limit exceeded (ro) */
 317    abi_llong calcnt;             /* PPS calibration intervals */
 318    abi_llong errcnt;             /* PPS calibration errors */
 319    abi_llong stbcnt;             /* PPS stability limit exceeded */
 320    abi_int tai;                  /* TAI offset */
 321
 322    /* Further padding bytes to allow for future expansion */
 323    abi_int:32; abi_int:32; abi_int:32; abi_int:32;
 324    abi_int:32; abi_int:32; abi_int:32; abi_int:32;
 325    abi_int:32; abi_int:32; abi_int:32;
 326};
 327
 328typedef abi_long target_clock_t;
 329
 330#define TARGET_HZ 100
 331
 332struct target_tms {
 333    target_clock_t tms_utime;
 334    target_clock_t tms_stime;
 335    target_clock_t tms_cutime;
 336    target_clock_t tms_cstime;
 337};
 338
 339struct target_utimbuf {
 340    abi_long actime;
 341    abi_long modtime;
 342};
 343
 344struct target_sel_arg_struct {
 345    abi_long n;
 346    abi_long inp, outp, exp;
 347    abi_long tvp;
 348};
 349
 350struct target_iovec {
 351    abi_long iov_base;   /* Starting address */
 352    abi_long iov_len;   /* Number of bytes */
 353};
 354
 355struct target_msghdr {
 356    abi_long     msg_name;       /* Socket name                 */
 357    int          msg_namelen;    /* Length of name              */
 358    abi_long     msg_iov;        /* Data blocks                 */
 359    abi_long     msg_iovlen;     /* Number of blocks            */
 360    abi_long     msg_control;    /* Per protocol magic (eg BSD file descriptor passing) */
 361    abi_long     msg_controllen; /* Length of cmsg list */
 362    unsigned int msg_flags;
 363};
 364
 365struct target_cmsghdr {
 366    abi_long     cmsg_len;
 367    int          cmsg_level;
 368    int          cmsg_type;
 369};
 370
 371#define TARGET_CMSG_DATA(cmsg) ((unsigned char *) ((struct target_cmsghdr *) (cmsg) + 1))
 372#define TARGET_CMSG_NXTHDR(mhdr, cmsg, cmsg_start) \
 373                               __target_cmsg_nxthdr(mhdr, cmsg, cmsg_start)
 374#define TARGET_CMSG_ALIGN(len) (((len) + sizeof (abi_long) - 1) \
 375                               & (size_t) ~(sizeof (abi_long) - 1))
 376#define TARGET_CMSG_SPACE(len) (sizeof(struct target_cmsghdr) + \
 377                                TARGET_CMSG_ALIGN(len))
 378#define TARGET_CMSG_LEN(len) (sizeof(struct target_cmsghdr) + (len))
 379
 380static __inline__ struct target_cmsghdr *
 381__target_cmsg_nxthdr(struct target_msghdr *__mhdr,
 382                     struct target_cmsghdr *__cmsg,
 383                     struct target_cmsghdr *__cmsg_start)
 384{
 385  struct target_cmsghdr *__ptr;
 386
 387  __ptr = (struct target_cmsghdr *)((unsigned char *) __cmsg
 388                                    + TARGET_CMSG_ALIGN (tswapal(__cmsg->cmsg_len)));
 389  if ((unsigned long)((char *)(__ptr+1) - (char *)__cmsg_start)
 390      > tswapal(__mhdr->msg_controllen)) {
 391    /* No more entries.  */
 392    return (struct target_cmsghdr *)0;
 393  }
 394  return __ptr;
 395}
 396
 397struct target_mmsghdr {
 398    struct target_msghdr msg_hdr;              /* Message header */
 399    unsigned int         msg_len;              /* Number of bytes transmitted */
 400};
 401
 402struct  target_rusage {
 403        struct target_timeval ru_utime;        /* user time used */
 404        struct target_timeval ru_stime;        /* system time used */
 405        abi_long    ru_maxrss;                 /* maximum resident set size */
 406        abi_long    ru_ixrss;                  /* integral shared memory size */
 407        abi_long    ru_idrss;                  /* integral unshared data size */
 408        abi_long    ru_isrss;                  /* integral unshared stack size */
 409        abi_long    ru_minflt;                 /* page reclaims */
 410        abi_long    ru_majflt;                 /* page faults */
 411        abi_long    ru_nswap;                  /* swaps */
 412        abi_long    ru_inblock;                /* block input operations */
 413        abi_long    ru_oublock;                /* block output operations */
 414        abi_long    ru_msgsnd;                 /* messages sent */
 415        abi_long    ru_msgrcv;                 /* messages received */
 416        abi_long    ru_nsignals;               /* signals received */
 417        abi_long    ru_nvcsw;                  /* voluntary context switches */
 418        abi_long    ru_nivcsw;                 /* involuntary " */
 419};
 420
 421typedef struct {
 422        int     val[2];
 423} kernel_fsid_t;
 424
 425struct target_dirent {
 426        abi_long        d_ino;
 427        abi_long        d_off;
 428        unsigned short  d_reclen;
 429        char            d_name[];
 430};
 431
 432struct target_dirent64 {
 433        uint64_t        d_ino;
 434        int64_t         d_off;
 435        unsigned short  d_reclen;
 436        unsigned char   d_type;
 437        char            d_name[256];
 438};
 439
 440
 441/* mostly generic signal stuff */
 442#define TARGET_SIG_DFL  ((abi_long)0)   /* default signal handling */
 443#define TARGET_SIG_IGN  ((abi_long)1)   /* ignore signal */
 444#define TARGET_SIG_ERR  ((abi_long)-1)  /* error return from signal */
 445
 446#ifdef TARGET_MIPS
 447#define TARGET_NSIG        128
 448#else
 449#define TARGET_NSIG        64
 450#endif
 451#define TARGET_NSIG_BPW    TARGET_ABI_BITS
 452#define TARGET_NSIG_WORDS  (TARGET_NSIG / TARGET_NSIG_BPW)
 453
 454typedef struct {
 455    abi_ulong sig[TARGET_NSIG_WORDS];
 456} target_sigset_t;
 457
 458#ifdef BSWAP_NEEDED
 459static inline void tswap_sigset(target_sigset_t *d, const target_sigset_t *s)
 460{
 461    int i;
 462    for(i = 0;i < TARGET_NSIG_WORDS; i++)
 463        d->sig[i] = tswapal(s->sig[i]);
 464}
 465#else
 466static inline void tswap_sigset(target_sigset_t *d, const target_sigset_t *s)
 467{
 468    *d = *s;
 469}
 470#endif
 471
 472static inline void target_siginitset(target_sigset_t *d, abi_ulong set)
 473{
 474    int i;
 475    d->sig[0] = set;
 476    for(i = 1;i < TARGET_NSIG_WORDS; i++)
 477        d->sig[i] = 0;
 478}
 479
 480void host_to_target_sigset(target_sigset_t *d, const sigset_t *s);
 481void target_to_host_sigset(sigset_t *d, const target_sigset_t *s);
 482void host_to_target_old_sigset(abi_ulong *old_sigset,
 483                               const sigset_t *sigset);
 484void target_to_host_old_sigset(sigset_t *sigset,
 485                               const abi_ulong *old_sigset);
 486struct target_sigaction;
 487int do_sigaction(int sig, const struct target_sigaction *act,
 488                 struct target_sigaction *oact);
 489
 490#include "target_signal.h"
 491
 492#ifdef TARGET_SA_RESTORER
 493#define TARGET_ARCH_HAS_SA_RESTORER 1
 494#endif
 495
 496#if defined(TARGET_ALPHA)
 497struct target_old_sigaction {
 498    abi_ulong _sa_handler;
 499    abi_ulong sa_mask;
 500    int32_t sa_flags;
 501};
 502
 503struct target_rt_sigaction {
 504    abi_ulong _sa_handler;
 505    abi_ulong sa_flags;
 506    target_sigset_t sa_mask;
 507};
 508
 509/* This is the struct used inside the kernel.  The ka_restorer
 510   field comes from the 5th argument to sys_rt_sigaction.  */
 511struct target_sigaction {
 512    abi_ulong _sa_handler;
 513    abi_ulong sa_flags;
 514    target_sigset_t sa_mask;
 515    abi_ulong sa_restorer;
 516};
 517#elif defined(TARGET_MIPS)
 518struct target_sigaction {
 519        uint32_t        sa_flags;
 520#if defined(TARGET_ABI_MIPSN32)
 521        uint32_t        _sa_handler;
 522#else
 523        abi_ulong       _sa_handler;
 524#endif
 525        target_sigset_t sa_mask;
 526#ifdef TARGET_ARCH_HAS_SA_RESTORER
 527        /* ??? This is always present, but ignored unless O32.  */
 528        abi_ulong sa_restorer;
 529#endif
 530};
 531#else
 532struct target_old_sigaction {
 533        abi_ulong _sa_handler;
 534        abi_ulong sa_mask;
 535        abi_ulong sa_flags;
 536#ifdef TARGET_ARCH_HAS_SA_RESTORER
 537        abi_ulong sa_restorer;
 538#endif
 539};
 540
 541struct target_sigaction {
 542        abi_ulong _sa_handler;
 543        abi_ulong sa_flags;
 544#ifdef TARGET_ARCH_HAS_SA_RESTORER
 545        abi_ulong sa_restorer;
 546#endif
 547        target_sigset_t sa_mask;
 548#ifdef TARGET_ARCH_HAS_KA_RESTORER
 549        abi_ulong ka_restorer;
 550#endif
 551};
 552#endif
 553
 554typedef union target_sigval {
 555        int sival_int;
 556        abi_ulong sival_ptr;
 557} target_sigval_t;
 558#if 0
 559#if defined (TARGET_SPARC)
 560typedef struct {
 561        struct {
 562                abi_ulong psr;
 563                abi_ulong pc;
 564                abi_ulong npc;
 565                abi_ulong y;
 566                abi_ulong u_regs[16]; /* globals and ins */
 567        }               si_regs;
 568        int             si_mask;
 569} __siginfo_t;
 570
 571typedef struct {
 572        unsigned   long si_float_regs [32];
 573        unsigned   long si_fsr;
 574        unsigned   long si_fpqdepth;
 575        struct {
 576                unsigned long *insn_addr;
 577                unsigned long insn;
 578        } si_fpqueue [16];
 579} __siginfo_fpu_t;
 580#endif
 581#endif
 582
 583#define TARGET_SI_MAX_SIZE      128
 584
 585#if TARGET_ABI_BITS == 32
 586#define TARGET_SI_PREAMBLE_SIZE (3 * sizeof(int))
 587#else
 588#define TARGET_SI_PREAMBLE_SIZE (4 * sizeof(int))
 589#endif
 590
 591#define TARGET_SI_PAD_SIZE ((TARGET_SI_MAX_SIZE - TARGET_SI_PREAMBLE_SIZE) / sizeof(int))
 592
 593/* Within QEMU the top 16 bits of si_code indicate which of the parts of
 594 * the union in target_siginfo is valid. This only applies between
 595 * host_to_target_siginfo_noswap() and tswap_siginfo(); it does not
 596 * appear either within host siginfo_t or in target_siginfo structures
 597 * which we get from the guest userspace program. (The Linux kernel
 598 * does a similar thing with using the top bits for its own internal
 599 * purposes but not letting them be visible to userspace.)
 600 */
 601#define QEMU_SI_KILL 0
 602#define QEMU_SI_TIMER 1
 603#define QEMU_SI_POLL 2
 604#define QEMU_SI_FAULT 3
 605#define QEMU_SI_CHLD 4
 606#define QEMU_SI_RT 5
 607
 608typedef struct target_siginfo {
 609#ifdef TARGET_MIPS
 610        int si_signo;
 611        int si_code;
 612        int si_errno;
 613#else
 614        int si_signo;
 615        int si_errno;
 616        int si_code;
 617#endif
 618
 619        union {
 620                int _pad[TARGET_SI_PAD_SIZE];
 621
 622                /* kill() */
 623                struct {
 624                        pid_t _pid;             /* sender's pid */
 625                        uid_t _uid;             /* sender's uid */
 626                } _kill;
 627
 628                /* POSIX.1b timers */
 629                struct {
 630                        unsigned int _timer1;
 631                        unsigned int _timer2;
 632                } _timer;
 633
 634                /* POSIX.1b signals */
 635                struct {
 636                        pid_t _pid;             /* sender's pid */
 637                        uid_t _uid;             /* sender's uid */
 638                        target_sigval_t _sigval;
 639                } _rt;
 640
 641                /* SIGCHLD */
 642                struct {
 643                        pid_t _pid;             /* which child */
 644                        uid_t _uid;             /* sender's uid */
 645                        int _status;            /* exit code */
 646                        target_clock_t _utime;
 647                        target_clock_t _stime;
 648                } _sigchld;
 649
 650                /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
 651                struct {
 652                        abi_ulong _addr; /* faulting insn/memory ref. */
 653                } _sigfault;
 654
 655                /* SIGPOLL */
 656                struct {
 657                        int _band;      /* POLL_IN, POLL_OUT, POLL_MSG */
 658                        int _fd;
 659                } _sigpoll;
 660        } _sifields;
 661} target_siginfo_t;
 662
 663/*
 664 * si_code values
 665 * Digital reserves positive values for kernel-generated signals.
 666 */
 667#define TARGET_SI_USER          0       /* sent by kill, sigsend, raise */
 668#define TARGET_SI_KERNEL        0x80    /* sent by the kernel from somewhere */
 669#define TARGET_SI_QUEUE -1              /* sent by sigqueue */
 670#define TARGET_SI_TIMER -2              /* sent by timer expiration */
 671#define TARGET_SI_MESGQ -3              /* sent by real time mesq state change */
 672#define TARGET_SI_ASYNCIO       -4      /* sent by AIO completion */
 673#define TARGET_SI_SIGIO -5              /* sent by queued SIGIO */
 674
 675/*
 676 * SIGILL si_codes
 677 */
 678#define TARGET_ILL_ILLOPC       (1)     /* illegal opcode */
 679#define TARGET_ILL_ILLOPN       (2)     /* illegal operand */
 680#define TARGET_ILL_ILLADR       (3)     /* illegal addressing mode */
 681#define TARGET_ILL_ILLTRP       (4)     /* illegal trap */
 682#define TARGET_ILL_PRVOPC       (5)     /* privileged opcode */
 683#define TARGET_ILL_PRVREG       (6)     /* privileged register */
 684#define TARGET_ILL_COPROC       (7)     /* coprocessor error */
 685#define TARGET_ILL_BADSTK       (8)     /* internal stack error */
 686#ifdef TARGET_TILEGX
 687#define TARGET_ILL_DBLFLT       (9)     /* double fault */
 688#define TARGET_ILL_HARDWALL     (10)    /* user networks hardwall violation */
 689#endif
 690
 691/*
 692 * SIGFPE si_codes
 693 */
 694#define TARGET_FPE_INTDIV      (1)  /* integer divide by zero */
 695#define TARGET_FPE_INTOVF      (2)  /* integer overflow */
 696#define TARGET_FPE_FLTDIV      (3)  /* floating point divide by zero */
 697#define TARGET_FPE_FLTOVF      (4)  /* floating point overflow */
 698#define TARGET_FPE_FLTUND      (5)  /* floating point underflow */
 699#define TARGET_FPE_FLTRES      (6)  /* floating point inexact result */
 700#define TARGET_FPE_FLTINV      (7)  /* floating point invalid operation */
 701#define TARGET_FPE_FLTSUB      (8)  /* subscript out of range */
 702#define TARGET_FPE_FLTUNK      (14) /* undiagnosed fp exception */
 703#define TARGET_NSIGFPE         15
 704
 705/*
 706 * SIGSEGV si_codes
 707 */
 708#define TARGET_SEGV_MAPERR     (1)  /* address not mapped to object */
 709#define TARGET_SEGV_ACCERR     (2)  /* invalid permissions for mapped object */
 710#define TARGET_SEGV_BNDERR     (3)  /* failed address bound checks */
 711
 712/*
 713 * SIGBUS si_codes
 714 */
 715#define TARGET_BUS_ADRALN       (1)     /* invalid address alignment */
 716#define TARGET_BUS_ADRERR       (2)     /* non-existent physical address */
 717#define TARGET_BUS_OBJERR       (3)     /* object specific hardware error */
 718/* hardware memory error consumed on a machine check: action required */
 719#define TARGET_BUS_MCEERR_AR    (4)
 720/* hardware memory error detected in process but not consumed: action optional*/
 721#define TARGET_BUS_MCEERR_AO    (5)
 722
 723/*
 724 * SIGTRAP si_codes
 725 */
 726#define TARGET_TRAP_BRKPT       (1)     /* process breakpoint */
 727#define TARGET_TRAP_TRACE       (2)     /* process trace trap */
 728#define TARGET_TRAP_BRANCH      (3)     /* process taken branch trap */
 729#define TARGET_TRAP_HWBKPT      (4)     /* hardware breakpoint/watchpoint */
 730
 731struct target_rlimit {
 732        abi_ulong   rlim_cur;
 733        abi_ulong   rlim_max;
 734};
 735
 736#if defined(TARGET_ALPHA)
 737#define TARGET_RLIM_INFINITY    0x7fffffffffffffffull
 738#elif defined(TARGET_MIPS) || (defined(TARGET_SPARC) && TARGET_ABI_BITS == 32)
 739#define TARGET_RLIM_INFINITY    0x7fffffffUL
 740#else
 741#define TARGET_RLIM_INFINITY    ((abi_ulong)-1)
 742#endif
 743
 744#if defined(TARGET_MIPS)
 745#define TARGET_RLIMIT_CPU               0
 746#define TARGET_RLIMIT_FSIZE             1
 747#define TARGET_RLIMIT_DATA              2
 748#define TARGET_RLIMIT_STACK             3
 749#define TARGET_RLIMIT_CORE              4
 750#define TARGET_RLIMIT_RSS               7
 751#define TARGET_RLIMIT_NPROC             8
 752#define TARGET_RLIMIT_NOFILE            5
 753#define TARGET_RLIMIT_MEMLOCK           9
 754#define TARGET_RLIMIT_AS                6
 755#define TARGET_RLIMIT_LOCKS             10
 756#define TARGET_RLIMIT_SIGPENDING        11
 757#define TARGET_RLIMIT_MSGQUEUE          12
 758#define TARGET_RLIMIT_NICE              13
 759#define TARGET_RLIMIT_RTPRIO            14
 760#else
 761#define TARGET_RLIMIT_CPU               0
 762#define TARGET_RLIMIT_FSIZE             1
 763#define TARGET_RLIMIT_DATA              2
 764#define TARGET_RLIMIT_STACK             3
 765#define TARGET_RLIMIT_CORE              4
 766#define TARGET_RLIMIT_RSS               5
 767#if defined(TARGET_SPARC)
 768#define TARGET_RLIMIT_NOFILE            6
 769#define TARGET_RLIMIT_NPROC             7
 770#else
 771#define TARGET_RLIMIT_NPROC             6
 772#define TARGET_RLIMIT_NOFILE            7
 773#endif
 774#define TARGET_RLIMIT_MEMLOCK           8
 775#define TARGET_RLIMIT_AS                9
 776#define TARGET_RLIMIT_LOCKS             10
 777#define TARGET_RLIMIT_SIGPENDING        11
 778#define TARGET_RLIMIT_MSGQUEUE          12
 779#define TARGET_RLIMIT_NICE              13
 780#define TARGET_RLIMIT_RTPRIO            14
 781#endif
 782
 783struct target_pollfd {
 784    int fd;           /* file descriptor */
 785    short events;     /* requested events */
 786    short revents;    /* returned events */
 787};
 788
 789/* virtual terminal ioctls */
 790#define TARGET_KIOCSOUND       0x4B2F   /* start sound generation (0 for off) */
 791#define TARGET_KDMKTONE        0x4B30   /* generate tone */
 792#define TARGET_KDGKBTYPE       0x4b33
 793#define TARGET_KDSETMODE       0x4b3a
 794#define TARGET_KDGKBMODE       0x4b44
 795#define TARGET_KDSKBMODE       0x4b45
 796#define TARGET_KDGKBENT        0x4B46   /* gets one entry in translation table */
 797#define TARGET_KDGKBSENT       0x4B48   /* gets one function key string entry */
 798#define TARGET_KDGKBLED        0x4B64   /* get led flags (not lights) */
 799#define TARGET_KDSKBLED        0x4B65   /* set led flags (not lights) */
 800#define TARGET_KDGETLED        0x4B31   /* return current led state */
 801#define TARGET_KDSETLED        0x4B32   /* set led state [lights, not flags] */
 802#define TARGET_KDSIGACCEPT     0x4B4E
 803
 804struct target_rtc_pll_info {
 805    int pll_ctrl;
 806    int pll_value;
 807    int pll_max;
 808    int pll_min;
 809    int pll_posmult;
 810    int pll_negmult;
 811    abi_long pll_clock;
 812};
 813
 814/* real time clock ioctls */
 815#define TARGET_RTC_AIE_ON           TARGET_IO('p', 0x01)
 816#define TARGET_RTC_AIE_OFF          TARGET_IO('p', 0x02)
 817#define TARGET_RTC_UIE_ON           TARGET_IO('p', 0x03)
 818#define TARGET_RTC_UIE_OFF          TARGET_IO('p', 0x04)
 819#define TARGET_RTC_PIE_ON           TARGET_IO('p', 0x05)
 820#define TARGET_RTC_PIE_OFF          TARGET_IO('p', 0x06)
 821#define TARGET_RTC_WIE_ON           TARGET_IO('p', 0x0f)
 822#define TARGET_RTC_WIE_OFF          TARGET_IO('p', 0x10)
 823#define TARGET_RTC_ALM_READ         TARGET_IOR('p', 0x08, struct rtc_time)
 824#define TARGET_RTC_ALM_SET          TARGET_IOW('p', 0x07, struct rtc_time)
 825#define TARGET_RTC_RD_TIME          TARGET_IOR('p', 0x09, struct rtc_time)
 826#define TARGET_RTC_SET_TIME         TARGET_IOW('p', 0x0a, struct rtc_time)
 827#define TARGET_RTC_IRQP_READ        TARGET_IOR('p', 0x0b, abi_ulong)
 828#define TARGET_RTC_IRQP_SET         TARGET_IOW('p', 0x0c, abi_ulong)
 829#define TARGET_RTC_EPOCH_READ       TARGET_IOR('p', 0x0d, abi_ulong)
 830#define TARGET_RTC_EPOCH_SET        TARGET_IOW('p', 0x0e, abi_ulong)
 831#define TARGET_RTC_WKALM_RD         TARGET_IOR('p', 0x10, struct rtc_wkalrm)
 832#define TARGET_RTC_WKALM_SET        TARGET_IOW('p', 0x0f, struct rtc_wkalrm)
 833#define TARGET_RTC_PLL_GET          TARGET_IOR('p', 0x11,                      \
 834                                               struct target_rtc_pll_info)
 835#define TARGET_RTC_PLL_SET          TARGET_IOW('p', 0x12,                      \
 836                                               struct target_rtc_pll_info)
 837#define TARGET_RTC_VL_READ          TARGET_IOR('p', 0x13, int)
 838#define TARGET_RTC_VL_CLR           TARGET_IO('p', 0x14)
 839
 840#if defined(TARGET_ALPHA) || defined(TARGET_MIPS) || defined(TARGET_SH4) ||    \
 841       defined(TARGET_XTENSA)
 842#define TARGET_FIOGETOWN       TARGET_IOR('f', 123, int)
 843#define TARGET_FIOSETOWN       TARGET_IOW('f', 124, int)
 844#define TARGET_SIOCATMARK      TARGET_IOR('s', 7, int)
 845#define TARGET_SIOCSPGRP       TARGET_IOW('s', 8, pid_t)
 846#define TARGET_SIOCGPGRP       TARGET_IOR('s', 9, pid_t)
 847#else
 848#define TARGET_FIOGETOWN       0x8903
 849#define TARGET_FIOSETOWN       0x8901
 850#define TARGET_SIOCATMARK      0x8905
 851#define TARGET_SIOCSPGRP       0x8902
 852#define TARGET_SIOCGPGRP       0x8904
 853#endif
 854
 855#if defined(TARGET_SH4)
 856#define TARGET_SIOCGSTAMP_OLD   TARGET_IOR('s', 100, struct target_timeval)
 857#define TARGET_SIOCGSTAMPNS_OLD TARGET_IOR('s', 101, struct target_timespec)
 858#else
 859#define TARGET_SIOCGSTAMP_OLD   0x8906
 860#define TARGET_SIOCGSTAMPNS_OLD 0x8907
 861#endif
 862
 863#define TARGET_SIOCGSTAMP_NEW   TARGET_IOR(0x89, 0x06, abi_llong[2])
 864#define TARGET_SIOCGSTAMPNS_NEW TARGET_IOR(0x89, 0x07, abi_llong[2])
 865
 866/* Networking ioctls */
 867#define TARGET_SIOCADDRT       0x890B          /* add routing table entry */
 868#define TARGET_SIOCDELRT       0x890C          /* delete routing table entry */
 869#define TARGET_SIOCGIFNAME     0x8910          /* get iface name               */
 870#define TARGET_SIOCSIFLINK     0x8911          /* set iface channel            */
 871#define TARGET_SIOCGIFCONF     0x8912          /* get iface list               */
 872#define TARGET_SIOCGIFFLAGS    0x8913          /* get flags                    */
 873#define TARGET_SIOCSIFFLAGS    0x8914          /* set flags                    */
 874#define TARGET_SIOCGIFADDR     0x8915          /* get PA address               */
 875#define TARGET_SIOCSIFADDR     0x8916          /* set PA address               */
 876#define TARGET_SIOCGIFDSTADDR  0x8917          /* get remote PA address        */
 877#define TARGET_SIOCSIFDSTADDR  0x8918          /* set remote PA address        */
 878#define TARGET_SIOCGIFBRDADDR  0x8919          /* get broadcast PA address     */
 879#define TARGET_SIOCSIFBRDADDR  0x891a          /* set broadcast PA address     */
 880#define TARGET_SIOCGIFNETMASK  0x891b          /* get network PA mask          */
 881#define TARGET_SIOCSIFNETMASK  0x891c          /* set network PA mask          */
 882#define TARGET_SIOCGIFMETRIC   0x891d          /* get metric                   */
 883#define TARGET_SIOCSIFMETRIC   0x891e          /* set metric                   */
 884#define TARGET_SIOCGIFMEM      0x891f          /* get memory address (BSD)     */
 885#define TARGET_SIOCSIFMEM      0x8920          /* set memory address (BSD)     */
 886#define TARGET_SIOCGIFMTU      0x8921          /* get MTU size                 */
 887#define TARGET_SIOCSIFMTU      0x8922          /* set MTU size                 */
 888#define TARGET_SIOCSIFHWADDR   0x8924          /* set hardware address (NI)    */
 889#define TARGET_SIOCGIFENCAP    0x8925          /* get/set slip encapsulation   */
 890#define TARGET_SIOCSIFENCAP    0x8926
 891#define TARGET_SIOCGIFHWADDR   0x8927          /* Get hardware address         */
 892#define TARGET_SIOCGIFSLAVE    0x8929          /* Driver slaving support       */
 893#define TARGET_SIOCSIFSLAVE    0x8930
 894#define TARGET_SIOCADDMULTI    0x8931          /* Multicast address lists      */
 895#define TARGET_SIOCDELMULTI    0x8932
 896#define TARGET_SIOCGIFINDEX    0x8933
 897#define TARGET_SIOCSIFPFLAGS   0x8934          /* set extended flags          */
 898#define TARGET_SIOCGIFPFLAGS   0x8935          /* get extended flags          */
 899
 900/* Bridging control calls */
 901#define TARGET_SIOCGIFBR       0x8940          /* Bridging support             */
 902#define TARGET_SIOCSIFBR       0x8941          /* Set bridging options         */
 903
 904#define TARGET_SIOCGIFTXQLEN   0x8942          /* Get the tx queue length      */
 905#define TARGET_SIOCSIFTXQLEN   0x8943          /* Set the tx queue length      */
 906
 907/* ARP cache control calls. */
 908#define TARGET_OLD_SIOCDARP    0x8950          /* old delete ARP table entry   */
 909#define TARGET_OLD_SIOCGARP    0x8951          /* old get ARP table entry      */
 910#define TARGET_OLD_SIOCSARP    0x8952          /* old set ARP table entry      */
 911#define TARGET_SIOCDARP        0x8953          /* delete ARP table entry       */
 912#define TARGET_SIOCGARP        0x8954          /* get ARP table entry          */
 913#define TARGET_SIOCSARP        0x8955          /* set ARP table entry          */
 914
 915/* RARP cache control calls. */
 916#define TARGET_SIOCDRARP       0x8960          /* delete RARP table entry      */
 917#define TARGET_SIOCGRARP       0x8961          /* get RARP table entry         */
 918#define TARGET_SIOCSRARP       0x8962          /* set RARP table entry         */
 919
 920/* Driver configuration calls */
 921#define TARGET_SIOCGIFMAP      0x8970          /* Get device parameters        */
 922#define TARGET_SIOCSIFMAP      0x8971          /* Set device parameters        */
 923
 924/* DLCI configuration calls */
 925#define TARGET_SIOCADDDLCI     0x8980          /* Create new DLCI device       */
 926#define TARGET_SIOCDELDLCI     0x8981          /* Delete DLCI device           */
 927
 928/* From <linux/wireless.h> */
 929
 930#define TARGET_SIOCGIWNAME     0x8B01          /* get name == wireless protocol */
 931
 932/* From <linux/random.h> */
 933
 934#define TARGET_RNDGETENTCNT    TARGET_IOR('R', 0x00, int)
 935#define TARGET_RNDADDTOENTCNT  TARGET_IOW('R', 0x01, int)
 936#define TARGET_RNDZAPENTCNT    TARGET_IO('R', 0x04)
 937#define TARGET_RNDCLEARPOOL    TARGET_IO('R', 0x06)
 938#define TARGET_RNDRESEEDCRNG   TARGET_IO('R', 0x07)
 939
 940/* From <linux/fs.h> */
 941
 942#define TARGET_BLKROSET   TARGET_IO(0x12,93) /* set device read-only (0 = read-write) */
 943#define TARGET_BLKROGET   TARGET_IO(0x12,94) /* get read-only status (0 = read_write) */
 944#define TARGET_BLKRRPART  TARGET_IO(0x12,95) /* re-read partition table */
 945#define TARGET_BLKGETSIZE TARGET_IO(0x12,96) /* return device size /512 (long *arg) */
 946#define TARGET_BLKFLSBUF  TARGET_IO(0x12,97) /* flush buffer cache */
 947#define TARGET_BLKRASET   TARGET_IO(0x12,98) /* Set read ahead for block device */
 948#define TARGET_BLKRAGET   TARGET_IO(0x12,99) /* get current read ahead setting */
 949#define TARGET_BLKFRASET  TARGET_IO(0x12,100)/* set filesystem (mm/filemap.c) read-ahead */
 950#define TARGET_BLKFRAGET  TARGET_IO(0x12,101)/* get filesystem (mm/filemap.c) read-ahead */
 951#define TARGET_BLKSECTSET TARGET_IO(0x12,102)/* set max sectors per request (ll_rw_blk.c) */
 952#define TARGET_BLKSECTGET TARGET_IO(0x12,103)/* get max sectors per request (ll_rw_blk.c) */
 953#define TARGET_BLKSSZGET  TARGET_IO(0x12,104)/* get block device sector size */
 954#define TARGET_BLKPG      TARGET_IO(0x12,105)/* Partition table and disk geometry handling */
 955/* A jump here: 108-111 have been used for various private purposes. */
 956#define TARGET_BLKBSZGET  TARGET_IOR(0x12, 112, abi_ulong)
 957#define TARGET_BLKBSZSET  TARGET_IOW(0x12, 113, abi_ulong)
 958#define TARGET_BLKGETSIZE64 TARGET_IOR(0x12,114,abi_ulong)
 959                                             /* return device size in bytes
 960                                                (u64 *arg) */
 961
 962#define TARGET_BLKDISCARD TARGET_IO(0x12, 119)
 963#define TARGET_BLKIOMIN TARGET_IO(0x12, 120)
 964#define TARGET_BLKIOOPT TARGET_IO(0x12, 121)
 965#define TARGET_BLKALIGNOFF TARGET_IO(0x12, 122)
 966#define TARGET_BLKPBSZGET TARGET_IO(0x12, 123)
 967#define TARGET_BLKDISCARDZEROES TARGET_IO(0x12, 124)
 968#define TARGET_BLKSECDISCARD TARGET_IO(0x12, 125)
 969#define TARGET_BLKROTATIONAL TARGET_IO(0x12, 126)
 970#define TARGET_BLKZEROOUT TARGET_IO(0x12, 127)
 971
 972/* From <linux/fd.h> */
 973
 974#define TARGET_FDMSGON        TARGET_IO(2, 0x45)
 975#define TARGET_FDMSGOFF       TARGET_IO(2, 0x46)
 976#define TARGET_FDFMTBEG       TARGET_IO(2, 0x47)
 977#define TARGET_FDFMTTRK      TARGET_IOW(2, 0x48, struct format_descr)
 978#define TARGET_FDFMTEND       TARGET_IO(2, 0x49)
 979#define TARGET_FDSETEMSGTRESH TARGET_IO(2, 0x4a)
 980#define TARGET_FDFLUSH        TARGET_IO(2, 0x4b)
 981#define TARGET_FDSETMAXERRS  TARGET_IOW(2, 0x4c, struct floppy_max_errors)
 982#define TARGET_FDGETMAXERRS  TARGET_IOR(2, 0x0e, struct floppy_max_errors)
 983#define TARGET_FDRESET        TARGET_IO(2, 0x54)
 984#define TARGET_FDRAWCMD       TARGET_IO(2, 0x58)
 985#define TARGET_FDTWADDLE      TARGET_IO(2, 0x59)
 986#define TARGET_FDEJECT        TARGET_IO(2, 0x5a)
 987
 988#define TARGET_FIBMAP     TARGET_IO(0x00,1)  /* bmap access */
 989#define TARGET_FIGETBSZ   TARGET_IO(0x00,2)  /* get the block size used for bmap */
 990
 991#define TARGET_FICLONE    TARGET_IOW(0x94, 9, int)
 992#define TARGET_FICLONERANGE TARGET_IOW(0x94, 13, struct file_clone_range)
 993
 994/*
 995 * Note that the ioctl numbers for FS_IOC_<GET|SET><FLAGS|VERSION>
 996 * claim type "long" but the actual type used by the kernel is "int".
 997 */
 998#define TARGET_FS_IOC_GETFLAGS TARGET_IOR('f', 1, abi_long)
 999#define TARGET_FS_IOC_SETFLAGS TARGET_IOW('f', 2, abi_long)
1000#define TARGET_FS_IOC_GETVERSION TARGET_IOR('v', 1, abi_long)
1001#define TARGET_FS_IOC_SETVERSION TARGET_IOW('v', 2, abi_long)
1002#define TARGET_FS_IOC_FIEMAP TARGET_IOWR('f',11,struct fiemap)
1003#define TARGET_FS_IOC32_GETFLAGS TARGET_IOR('f', 1, int)
1004#define TARGET_FS_IOC32_SETFLAGS TARGET_IOW('f', 2, int)
1005#define TARGET_FS_IOC32_GETVERSION TARGET_IOR('v', 1, int)
1006#define TARGET_FS_IOC32_SETVERSION TARGET_IOW('v', 2, int)
1007
1008/* btrfs ioctls */
1009#ifdef CONFIG_BTRFS
1010#define TARGET_BTRFS_IOC_SNAP_CREATE            TARGET_IOWU(BTRFS_IOCTL_MAGIC, 1)
1011#define TARGET_BTRFS_IOC_SCAN_DEV               TARGET_IOWU(BTRFS_IOCTL_MAGIC, 4)
1012#define TARGET_BTRFS_IOC_FORGET_DEV             TARGET_IOWU(BTRFS_IOCTL_MAGIC, 5)
1013#define TARGET_BTRFS_IOC_ADD_DEV                TARGET_IOWU(BTRFS_IOCTL_MAGIC, 10)
1014#define TARGET_BTRFS_IOC_RM_DEV                 TARGET_IOWU(BTRFS_IOCTL_MAGIC, 11)
1015#define TARGET_BTRFS_IOC_SUBVOL_CREATE          TARGET_IOWU(BTRFS_IOCTL_MAGIC, 14)
1016#define TARGET_BTRFS_IOC_SNAP_DESTROY           TARGET_IOWU(BTRFS_IOCTL_MAGIC, 15)
1017#define TARGET_BTRFS_IOC_INO_LOOKUP             TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 18)
1018#define TARGET_BTRFS_IOC_DEFAULT_SUBVOL         TARGET_IOW(BTRFS_IOCTL_MAGIC, 19,\
1019                                                           abi_ullong)
1020#define TARGET_BTRFS_IOC_SUBVOL_GETFLAGS        TARGET_IOR(BTRFS_IOCTL_MAGIC, 25,\
1021                                                           abi_ullong)
1022#define TARGET_BTRFS_IOC_SUBVOL_SETFLAGS        TARGET_IOW(BTRFS_IOCTL_MAGIC, 26,\
1023                                                           abi_ullong)
1024#define TARGET_BTRFS_IOC_SCRUB                  TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 27)
1025#define TARGET_BTRFS_IOC_SCRUB_CANCEL           TARGET_IO(BTRFS_IOCTL_MAGIC, 28)
1026#define TARGET_BTRFS_IOC_SCRUB_PROGRESS         TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 29)
1027#define TARGET_BTRFS_IOC_DEV_INFO               TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 30)
1028#define TARGET_BTRFS_IOC_INO_PATHS              TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 35)
1029#define TARGET_BTRFS_IOC_LOGICAL_INO            TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 36)
1030#define TARGET_BTRFS_IOC_QUOTA_CTL              TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 40)
1031#define TARGET_BTRFS_IOC_QGROUP_ASSIGN          TARGET_IOWU(BTRFS_IOCTL_MAGIC, 41)
1032#define TARGET_BTRFS_IOC_QGROUP_CREATE          TARGET_IOWU(BTRFS_IOCTL_MAGIC, 42)
1033#define TARGET_BTRFS_IOC_QGROUP_LIMIT           TARGET_IORU(BTRFS_IOCTL_MAGIC, 43)
1034#define TARGET_BTRFS_IOC_QUOTA_RESCAN           TARGET_IOWU(BTRFS_IOCTL_MAGIC, 44)
1035#define TARGET_BTRFS_IOC_QUOTA_RESCAN_STATUS    TARGET_IORU(BTRFS_IOCTL_MAGIC, 45)
1036#define TARGET_BTRFS_IOC_QUOTA_RESCAN_WAIT      TARGET_IO(BTRFS_IOCTL_MAGIC, 46)
1037#define TARGET_BTRFS_IOC_GET_DEV_STATS          TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 52)
1038#define TARGET_BTRFS_IOC_GET_FEATURES           TARGET_IORU(BTRFS_IOCTL_MAGIC, 57)
1039#define TARGET_BTRFS_IOC_SET_FEATURES           TARGET_IOWU(BTRFS_IOCTL_MAGIC, 57)
1040#define TARGET_BTRFS_IOC_GET_SUPPORTED_FEATURES TARGET_IORU(BTRFS_IOCTL_MAGIC, 57)
1041#define TARGET_BTRFS_IOC_LOGICAL_INO_V2         TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 59)
1042#define TARGET_BTRFS_IOC_GET_SUBVOL_INFO        TARGET_IORU(BTRFS_IOCTL_MAGIC, 60)
1043#define TARGET_BTRFS_IOC_GET_SUBVOL_ROOTREF     TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 61)
1044#define TARGET_BTRFS_IOC_INO_LOOKUP_USER        TARGET_IOWRU(BTRFS_IOCTL_MAGIC, 62)
1045#endif
1046
1047/* usb ioctls */
1048#define TARGET_USBDEVFS_CONTROL TARGET_IOWRU('U', 0)
1049#define TARGET_USBDEVFS_BULK TARGET_IOWRU('U', 2)
1050#define TARGET_USBDEVFS_RESETEP TARGET_IORU('U', 3)
1051#define TARGET_USBDEVFS_SETINTERFACE TARGET_IORU('U', 4)
1052#define TARGET_USBDEVFS_SETCONFIGURATION TARGET_IORU('U',  5)
1053#define TARGET_USBDEVFS_GETDRIVER TARGET_IOWU('U', 8)
1054#define TARGET_USBDEVFS_SUBMITURB TARGET_IORU('U', 10)
1055#define TARGET_USBDEVFS_DISCARDURB TARGET_IO('U', 11)
1056#define TARGET_USBDEVFS_REAPURB TARGET_IOWU('U', 12)
1057#define TARGET_USBDEVFS_REAPURBNDELAY TARGET_IOWU('U', 13)
1058#define TARGET_USBDEVFS_DISCSIGNAL TARGET_IORU('U', 14)
1059#define TARGET_USBDEVFS_CLAIMINTERFACE TARGET_IORU('U', 15)
1060#define TARGET_USBDEVFS_RELEASEINTERFACE TARGET_IORU('U', 16)
1061#define TARGET_USBDEVFS_CONNECTINFO TARGET_IOWU('U', 17)
1062#define TARGET_USBDEVFS_IOCTL TARGET_IOWRU('U', 18)
1063#define TARGET_USBDEVFS_HUB_PORTINFO TARGET_IORU('U', 19)
1064#define TARGET_USBDEVFS_RESET TARGET_IO('U', 20)
1065#define TARGET_USBDEVFS_CLEAR_HALT TARGET_IORU('U', 21)
1066#define TARGET_USBDEVFS_DISCONNECT TARGET_IO('U', 22)
1067#define TARGET_USBDEVFS_CONNECT TARGET_IO('U', 23)
1068#define TARGET_USBDEVFS_CLAIM_PORT TARGET_IORU('U', 24)
1069#define TARGET_USBDEVFS_RELEASE_PORT TARGET_IORU('U', 25)
1070#define TARGET_USBDEVFS_GET_CAPABILITIES TARGET_IORU('U', 26)
1071#define TARGET_USBDEVFS_DISCONNECT_CLAIM TARGET_IORU('U', 27)
1072#define TARGET_USBDEVFS_DROP_PRIVILEGES TARGET_IOWU('U', 30)
1073#define TARGET_USBDEVFS_GET_SPEED TARGET_IO('U', 31)
1074
1075/* cdrom commands */
1076#define TARGET_CDROMPAUSE               0x5301 /* Pause Audio Operation */
1077#define TARGET_CDROMRESUME              0x5302 /* Resume paused Audio Operation */
1078#define TARGET_CDROMPLAYMSF             0x5303 /* Play Audio MSF (struct cdrom_msf) */
1079#define TARGET_CDROMPLAYTRKIND          0x5304 /* Play Audio Track/index
1080                                           (struct cdrom_ti) */
1081#define TARGET_CDROMREADTOCHDR          0x5305 /* Read TOC header
1082                                           (struct cdrom_tochdr) */
1083#define TARGET_CDROMREADTOCENTRY        0x5306 /* Read TOC entry
1084                                           (struct cdrom_tocentry) */
1085#define TARGET_CDROMSTOP                0x5307 /* Stop the cdrom drive */
1086#define TARGET_CDROMSTART               0x5308 /* Start the cdrom drive */
1087#define TARGET_CDROMEJECT               0x5309 /* Ejects the cdrom media */
1088#define TARGET_CDROMVOLCTRL             0x530a /* Control output volume
1089                                           (struct cdrom_volctrl) */
1090#define TARGET_CDROMSUBCHNL             0x530b /* Read subchannel data
1091                                           (struct cdrom_subchnl) */
1092#define TARGET_CDROMREADMODE2           0x530c /* Read TARGET_CDROM mode 2 data (2336 Bytes)
1093                                           (struct cdrom_read) */
1094#define TARGET_CDROMREADMODE1           0x530d /* Read TARGET_CDROM mode 1 data (2048 Bytes)
1095                                           (struct cdrom_read) */
1096#define TARGET_CDROMREADAUDIO           0x530e /* (struct cdrom_read_audio) */
1097#define TARGET_CDROMEJECT_SW            0x530f /* enable(1)/disable(0) auto-ejecting */
1098#define TARGET_CDROMMULTISESSION        0x5310 /* Obtain the start-of-last-session
1099                                           address of multi session disks
1100                                           (struct cdrom_multisession) */
1101#define TARGET_CDROM_GET_MCN            0x5311 /* Obtain the "Universal Product Code"
1102                                           if available (struct cdrom_mcn) */
1103#define TARGET_CDROM_GET_UPC            TARGET_CDROM_GET_MCN  /* This one is deprecated,
1104                                          but here anyway for compatibility */
1105#define TARGET_CDROMRESET               0x5312 /* hard-reset the drive */
1106#define TARGET_CDROMVOLREAD             0x5313 /* Get the drive's volume setting
1107                                          (struct cdrom_volctrl) */
1108#define TARGET_CDROMREADRAW             0x5314  /* read data in raw mode (2352 Bytes)
1109                                           (struct cdrom_read) */
1110/*
1111 * These ioctls are used only used in aztcd.c and optcd.c
1112 */
1113#define TARGET_CDROMREADCOOKED          0x5315  /* read data in cooked mode */
1114#define TARGET_CDROMSEEK                0x5316  /* seek msf address */
1115
1116/*
1117 * This ioctl is only used by the scsi-cd driver.
1118   It is for playing audio in logical block addressing mode.
1119 */
1120#define TARGET_CDROMPLAYBLK             0x5317  /* (struct cdrom_blk) */
1121
1122/*
1123 * These ioctls are only used in optcd.c
1124 */
1125#define TARGET_CDROMREADALL             0x5318  /* read all 2646 bytes */
1126
1127/*
1128 * These ioctls are (now) only in ide-cd.c for controlling
1129 * drive spindown time.  They should be implemented in the
1130 * Uniform driver, via generic packet commands, GPCMD_MODE_SELECT_10,
1131 * GPCMD_MODE_SENSE_10 and the GPMODE_POWER_PAGE...
1132 *  -Erik
1133 */
1134#define TARGET_CDROMGETSPINDOWN        0x531d
1135#define TARGET_CDROMSETSPINDOWN        0x531e
1136
1137/*
1138 * These ioctls are implemented through the uniform CD-ROM driver
1139 * They _will_ be adopted by all CD-ROM drivers, when all the CD-ROM
1140 * drivers are eventually ported to the uniform CD-ROM driver interface.
1141 */
1142#define TARGET_CDROMCLOSETRAY           0x5319  /* pendant of CDROMEJECT */
1143#define TARGET_CDROM_SET_OPTIONS        0x5320  /* Set behavior options */
1144#define TARGET_CDROM_CLEAR_OPTIONS      0x5321  /* Clear behavior options */
1145#define TARGET_CDROM_SELECT_SPEED       0x5322  /* Set the CD-ROM speed */
1146#define TARGET_CDROM_SELECT_DISC        0x5323  /* Select disc (for juke-boxes) */
1147#define TARGET_CDROM_MEDIA_CHANGED      0x5325  /* Check is media changed  */
1148#define TARGET_CDROM_DRIVE_STATUS       0x5326  /* Get tray position, etc. */
1149#define TARGET_CDROM_DISC_STATUS        0x5327  /* Get disc type, etc. */
1150#define TARGET_CDROM_CHANGER_NSLOTS    0x5328  /* Get number of slots */
1151#define TARGET_CDROM_LOCKDOOR           0x5329  /* lock or unlock door */
1152#define TARGET_CDROM_DEBUG              0x5330  /* Turn debug messages on/off */
1153#define TARGET_CDROM_GET_CAPABILITY     0x5331  /* get capabilities */
1154
1155/* Note that scsi/scsi_ioctl.h also uses 0x5382 - 0x5386.
1156 * Future CDROM ioctls should be kept below 0x537F
1157 */
1158
1159/* This ioctl is only used by sbpcd at the moment */
1160#define TARGET_CDROMAUDIOBUFSIZ        0x5382   /* set the audio buffer size */
1161                                        /* conflict with SCSI_IOCTL_GET_IDLUN */
1162
1163/* DVD-ROM Specific ioctls */
1164#define TARGET_DVD_READ_STRUCT          0x5390  /* Read structure */
1165#define TARGET_DVD_WRITE_STRUCT 0x5391  /* Write structure */
1166#define TARGET_DVD_AUTH         0x5392  /* Authentication */
1167
1168#define TARGET_CDROM_SEND_PACKET        0x5393  /* send a packet to the drive */
1169#define TARGET_CDROM_NEXT_WRITABLE      0x5394  /* get next writable block */
1170#define TARGET_CDROM_LAST_WRITTEN       0x5395  /* get last block written on disc */
1171
1172/* HD commands */
1173
1174/* hd/ide ctl's that pass (arg) ptrs to user space are numbered 0x030n/0x031n */
1175#define TARGET_HDIO_GETGEO            0x0301  /* get device geometry */
1176#define TARGET_HDIO_GET_UNMASKINTR    0x0302  /* get current unmask setting */
1177#define TARGET_HDIO_GET_MULTCOUNT     0x0304  /* get current IDE blockmode setting */
1178#define TARGET_HDIO_GET_KEEPSETTINGS  0x0308  /* get keep-settings-on-reset flag */
1179#define TARGET_HDIO_GET_32BIT         0x0309  /* get current io_32bit setting */
1180#define TARGET_HDIO_GET_NOWERR        0x030a  /* get ignore-write-error flag */
1181#define TARGET_HDIO_GET_DMA           0x030b  /* get use-dma flag */
1182#define TARGET_HDIO_GET_IDENTITY      0x030d  /* get IDE identification info */
1183#define TARGET_HDIO_DRIVE_CMD         0x031f  /* execute a special drive command */
1184
1185/* hd/ide ctl's that pass (arg) non-ptr values are numbered 0x032n/0x033n */
1186#define TARGET_HDIO_SET_MULTCOUNT     0x0321  /* change IDE blockmode */
1187#define TARGET_HDIO_SET_UNMASKINTR    0x0322  /* permit other irqs during I/O */
1188#define TARGET_HDIO_SET_KEEPSETTINGS  0x0323  /* keep ioctl settings on reset */
1189#define TARGET_HDIO_SET_32BIT         0x0324  /* change io_32bit flags */
1190#define TARGET_HDIO_SET_NOWERR        0x0325  /* change ignore-write-error flag */
1191#define TARGET_HDIO_SET_DMA           0x0326  /* change use-dma flag */
1192#define TARGET_HDIO_SET_PIO_MODE      0x0327  /* reconfig interface to new speed */
1193
1194/* loop ioctls */
1195#define TARGET_LOOP_SET_FD            0x4C00
1196#define TARGET_LOOP_CLR_FD            0x4C01
1197#define TARGET_LOOP_SET_STATUS        0x4C02
1198#define TARGET_LOOP_GET_STATUS        0x4C03
1199#define TARGET_LOOP_SET_STATUS64      0x4C04
1200#define TARGET_LOOP_GET_STATUS64      0x4C05
1201#define TARGET_LOOP_CHANGE_FD         0x4C06
1202
1203#define TARGET_LOOP_CTL_ADD           0x4C80
1204#define TARGET_LOOP_CTL_REMOVE        0x4C81
1205#define TARGET_LOOP_CTL_GET_FREE      0x4C82
1206
1207/* fb ioctls */
1208#define TARGET_FBIOGET_VSCREENINFO    0x4600
1209#define TARGET_FBIOPUT_VSCREENINFO    0x4601
1210#define TARGET_FBIOGET_FSCREENINFO    0x4602
1211#define TARGET_FBIOGETCMAP            0x4604
1212#define TARGET_FBIOPUTCMAP            0x4605
1213#define TARGET_FBIOPAN_DISPLAY        0x4606
1214#define TARGET_FBIOGET_CON2FBMAP      0x460F
1215#define TARGET_FBIOPUT_CON2FBMAP      0x4610
1216
1217/* vt ioctls */
1218#define TARGET_VT_OPENQRY             0x5600
1219#define TARGET_VT_GETSTATE            0x5603
1220#define TARGET_VT_ACTIVATE            0x5606
1221#define TARGET_VT_WAITACTIVE          0x5607
1222#define TARGET_VT_LOCKSWITCH          0x560b
1223#define TARGET_VT_UNLOCKSWITCH        0x560c
1224#define TARGET_VT_GETMODE             0x5601
1225#define TARGET_VT_SETMODE             0x5602
1226#define TARGET_VT_RELDISP             0x5605
1227#define TARGET_VT_DISALLOCATE         0x5608
1228
1229/* device mapper */
1230#define TARGET_DM_VERSION             TARGET_IOWRU(0xfd, 0x00)
1231#define TARGET_DM_REMOVE_ALL          TARGET_IOWRU(0xfd, 0x01)
1232#define TARGET_DM_LIST_DEVICES        TARGET_IOWRU(0xfd, 0x02)
1233#define TARGET_DM_DEV_CREATE          TARGET_IOWRU(0xfd, 0x03)
1234#define TARGET_DM_DEV_REMOVE          TARGET_IOWRU(0xfd, 0x04)
1235#define TARGET_DM_DEV_RENAME          TARGET_IOWRU(0xfd, 0x05)
1236#define TARGET_DM_DEV_SUSPEND         TARGET_IOWRU(0xfd, 0x06)
1237#define TARGET_DM_DEV_STATUS          TARGET_IOWRU(0xfd, 0x07)
1238#define TARGET_DM_DEV_WAIT            TARGET_IOWRU(0xfd, 0x08)
1239#define TARGET_DM_TABLE_LOAD          TARGET_IOWRU(0xfd, 0x09)
1240#define TARGET_DM_TABLE_CLEAR         TARGET_IOWRU(0xfd, 0x0a)
1241#define TARGET_DM_TABLE_DEPS          TARGET_IOWRU(0xfd, 0x0b)
1242#define TARGET_DM_TABLE_STATUS        TARGET_IOWRU(0xfd, 0x0c)
1243#define TARGET_DM_LIST_VERSIONS       TARGET_IOWRU(0xfd, 0x0d)
1244#define TARGET_DM_TARGET_MSG          TARGET_IOWRU(0xfd, 0x0e)
1245#define TARGET_DM_DEV_SET_GEOMETRY    TARGET_IOWRU(0xfd, 0x0f)
1246
1247/* drm ioctls */
1248#define TARGET_DRM_IOCTL_VERSION      TARGET_IOWRU('d', 0x00)
1249
1250/* drm i915 ioctls */
1251#define TARGET_DRM_IOCTL_I915_GETPARAM              TARGET_IOWRU('d', 0x46)
1252
1253/* from asm/termbits.h */
1254
1255#define TARGET_NCC 8
1256struct target_termio {
1257        unsigned short c_iflag;         /* input mode flags */
1258        unsigned short c_oflag;         /* output mode flags */
1259        unsigned short c_cflag;         /* control mode flags */
1260        unsigned short c_lflag;         /* local mode flags */
1261        unsigned char c_line;           /* line discipline */
1262        unsigned char c_cc[TARGET_NCC]; /* control characters */
1263};
1264
1265struct target_winsize {
1266        unsigned short ws_row;
1267        unsigned short ws_col;
1268        unsigned short ws_xpixel;
1269        unsigned short ws_ypixel;
1270};
1271
1272#include "termbits.h"
1273
1274#if defined(TARGET_MIPS)
1275#define TARGET_PROT_SEM         0x10
1276#else
1277#define TARGET_PROT_SEM         0x08
1278#endif
1279
1280#ifdef TARGET_AARCH64
1281#define TARGET_PROT_BTI         0x10
1282#endif
1283
1284/* Common */
1285#define TARGET_MAP_SHARED       0x01            /* Share changes */
1286#define TARGET_MAP_PRIVATE      0x02            /* Changes are private */
1287#if defined(TARGET_HPPA)
1288#define TARGET_MAP_TYPE         0x03            /* Mask for type of mapping */
1289#else
1290#define TARGET_MAP_TYPE         0x0f            /* Mask for type of mapping */
1291#endif
1292
1293/* Target specific */
1294#if defined(TARGET_MIPS)
1295#define TARGET_MAP_FIXED        0x10            /* Interpret addr exactly */
1296#define TARGET_MAP_ANONYMOUS    0x0800          /* don't use a file */
1297#define TARGET_MAP_GROWSDOWN    0x1000          /* stack-like segment */
1298#define TARGET_MAP_DENYWRITE    0x2000          /* ETXTBSY */
1299#define TARGET_MAP_EXECUTABLE   0x4000          /* mark it as an executable */
1300#define TARGET_MAP_LOCKED       0x8000          /* pages are locked */
1301#define TARGET_MAP_NORESERVE    0x0400          /* don't check for reservations */
1302#define TARGET_MAP_POPULATE     0x10000         /* populate (prefault) pagetables */
1303#define TARGET_MAP_NONBLOCK     0x20000         /* do not block on IO */
1304#define TARGET_MAP_STACK        0x40000         /* ignored */
1305#define TARGET_MAP_HUGETLB      0x80000         /* create a huge page mapping */
1306#elif defined(TARGET_PPC)
1307#define TARGET_MAP_FIXED        0x10            /* Interpret addr exactly */
1308#define TARGET_MAP_ANONYMOUS    0x20            /* don't use a file */
1309#define TARGET_MAP_GROWSDOWN    0x0100          /* stack-like segment */
1310#define TARGET_MAP_DENYWRITE    0x0800          /* ETXTBSY */
1311#define TARGET_MAP_EXECUTABLE   0x1000          /* mark it as an executable */
1312#define TARGET_MAP_LOCKED       0x0080          /* pages are locked */
1313#define TARGET_MAP_NORESERVE    0x0040          /* don't check for reservations */
1314#define TARGET_MAP_POPULATE     0x8000          /* populate (prefault) pagetables */
1315#define TARGET_MAP_NONBLOCK     0x10000         /* do not block on IO */
1316#define TARGET_MAP_STACK        0x20000         /* ignored */
1317#define TARGET_MAP_HUGETLB      0x40000         /* create a huge page mapping */
1318#elif defined(TARGET_ALPHA)
1319#define TARGET_MAP_ANONYMOUS    0x10            /* don't use a file */
1320#define TARGET_MAP_FIXED        0x100           /* Interpret addr exactly */
1321#define TARGET_MAP_GROWSDOWN    0x01000         /* stack-like segment */
1322#define TARGET_MAP_DENYWRITE    0x02000         /* ETXTBSY */
1323#define TARGET_MAP_EXECUTABLE   0x04000         /* mark it as an executable */
1324#define TARGET_MAP_LOCKED       0x08000         /* lock the mapping */
1325#define TARGET_MAP_NORESERVE    0x10000         /* no check for reservations */
1326#define TARGET_MAP_POPULATE     0x20000         /* pop (prefault) pagetables */
1327#define TARGET_MAP_NONBLOCK     0x40000         /* do not block on IO */
1328#define TARGET_MAP_STACK        0x80000         /* ignored */
1329#define TARGET_MAP_HUGETLB      0x100000        /* create a huge page mapping */
1330#elif defined(TARGET_HPPA)
1331#define TARGET_MAP_ANONYMOUS    0x10            /* don't use a file */
1332#define TARGET_MAP_FIXED        0x04            /* Interpret addr exactly */
1333#define TARGET_MAP_GROWSDOWN    0x08000         /* stack-like segment */
1334#define TARGET_MAP_DENYWRITE    0x00800         /* ETXTBSY */
1335#define TARGET_MAP_EXECUTABLE   0x01000         /* mark it as an executable */
1336#define TARGET_MAP_LOCKED       0x02000         /* lock the mapping */
1337#define TARGET_MAP_NORESERVE    0x04000         /* no check for reservations */
1338#define TARGET_MAP_POPULATE     0x10000         /* pop (prefault) pagetables */
1339#define TARGET_MAP_NONBLOCK     0x20000         /* do not block on IO */
1340#define TARGET_MAP_STACK        0x40000         /* ignored */
1341#define TARGET_MAP_HUGETLB      0x80000         /* create a huge page mapping */
1342#elif defined(TARGET_XTENSA)
1343#define TARGET_MAP_FIXED        0x10            /* Interpret addr exactly */
1344#define TARGET_MAP_ANONYMOUS    0x0800          /* don't use a file */
1345#define TARGET_MAP_GROWSDOWN    0x1000          /* stack-like segment */
1346#define TARGET_MAP_DENYWRITE    0x2000          /* ETXTBSY */
1347#define TARGET_MAP_EXECUTABLE   0x4000          /* mark it as an executable */
1348#define TARGET_MAP_LOCKED       0x8000          /* pages are locked */
1349#define TARGET_MAP_NORESERVE    0x0400          /* don't check for reservations */
1350#define TARGET_MAP_POPULATE     0x10000         /* populate (prefault) pagetables */
1351#define TARGET_MAP_NONBLOCK     0x20000         /* do not block on IO */
1352#define TARGET_MAP_STACK        0x40000
1353#define TARGET_MAP_HUGETLB  0x80000         /* create a huge page mapping */
1354#else
1355#define TARGET_MAP_FIXED        0x10            /* Interpret addr exactly */
1356#define TARGET_MAP_ANONYMOUS    0x20            /* don't use a file */
1357#define TARGET_MAP_GROWSDOWN    0x0100          /* stack-like segment */
1358#define TARGET_MAP_DENYWRITE    0x0800          /* ETXTBSY */
1359#define TARGET_MAP_EXECUTABLE   0x1000          /* mark it as an executable */
1360#define TARGET_MAP_LOCKED       0x2000          /* pages are locked */
1361#define TARGET_MAP_NORESERVE    0x4000          /* don't check for reservations */
1362#define TARGET_MAP_POPULATE     0x8000          /* populate (prefault) pagetables */
1363#define TARGET_MAP_NONBLOCK     0x10000         /* do not block on IO */
1364#define TARGET_MAP_STACK        0x20000         /* ignored */
1365#define TARGET_MAP_HUGETLB      0x40000         /* create a huge page mapping */
1366#define TARGET_MAP_UNINITIALIZED 0x4000000      /* for anonymous mmap, memory could be uninitialized */
1367#endif
1368
1369#if (defined(TARGET_I386) && defined(TARGET_ABI32)) \
1370    || (defined(TARGET_ARM) && defined(TARGET_ABI32)) \
1371    || defined(TARGET_CRIS)
1372#define TARGET_STAT_HAVE_NSEC
1373struct target_stat {
1374        unsigned short st_dev;
1375        unsigned short __pad1;
1376        abi_ulong st_ino;
1377        unsigned short st_mode;
1378        unsigned short st_nlink;
1379        unsigned short st_uid;
1380        unsigned short st_gid;
1381        unsigned short st_rdev;
1382        unsigned short __pad2;
1383        abi_ulong  st_size;
1384        abi_ulong  st_blksize;
1385        abi_ulong  st_blocks;
1386        abi_ulong  target_st_atime;
1387        abi_ulong  target_st_atime_nsec;
1388        abi_ulong  target_st_mtime;
1389        abi_ulong  target_st_mtime_nsec;
1390        abi_ulong  target_st_ctime;
1391        abi_ulong  target_st_ctime_nsec;
1392        abi_ulong  __unused4;
1393        abi_ulong  __unused5;
1394};
1395
1396/* This matches struct stat64 in glibc2.1, hence the absolutely
1397 * insane amounts of padding around dev_t's.
1398 */
1399#define TARGET_HAS_STRUCT_STAT64
1400struct target_stat64 {
1401        unsigned short  st_dev;
1402        unsigned char   __pad0[10];
1403
1404#define TARGET_STAT64_HAS_BROKEN_ST_INO 1
1405        abi_ulong       __st_ino;
1406
1407        unsigned int    st_mode;
1408        unsigned int    st_nlink;
1409
1410        abi_ulong       st_uid;
1411        abi_ulong       st_gid;
1412
1413        unsigned short  st_rdev;
1414        unsigned char   __pad3[10];
1415
1416        long long       st_size;
1417        abi_ulong       st_blksize;
1418
1419        abi_ulong       st_blocks;      /* Number 512-byte blocks allocated. */
1420        abi_ulong       __pad4;         /* future possible st_blocks high bits */
1421
1422        abi_ulong       target_st_atime;
1423        abi_ulong       target_st_atime_nsec;
1424
1425        abi_ulong       target_st_mtime;
1426        abi_ulong       target_st_mtime_nsec;
1427
1428        abi_ulong       target_st_ctime;
1429        abi_ulong       target_st_ctime_nsec;
1430
1431        unsigned long long      st_ino;
1432} QEMU_PACKED;
1433
1434#ifdef TARGET_ARM
1435#define TARGET_HAS_STRUCT_STAT64
1436struct target_eabi_stat64 {
1437        unsigned long long st_dev;
1438        unsigned int    __pad1;
1439        abi_ulong    __st_ino;
1440        unsigned int    st_mode;
1441        unsigned int    st_nlink;
1442
1443        abi_ulong    st_uid;
1444        abi_ulong    st_gid;
1445
1446        unsigned long long st_rdev;
1447        unsigned int    __pad2[2];
1448
1449        long long       st_size;
1450        abi_ulong    st_blksize;
1451        unsigned int    __pad3;
1452        unsigned long long st_blocks;
1453
1454        abi_ulong    target_st_atime;
1455        abi_ulong    target_st_atime_nsec;
1456
1457        abi_ulong    target_st_mtime;
1458        abi_ulong    target_st_mtime_nsec;
1459
1460        abi_ulong    target_st_ctime;
1461        abi_ulong    target_st_ctime_nsec;
1462
1463        unsigned long long st_ino;
1464} QEMU_PACKED;
1465#endif
1466
1467#elif defined(TARGET_SPARC64) && !defined(TARGET_ABI32)
1468struct target_stat {
1469        unsigned int    st_dev;
1470        abi_ulong       st_ino;
1471        unsigned int    st_mode;
1472        unsigned int    st_nlink;
1473        unsigned int    st_uid;
1474        unsigned int    st_gid;
1475        unsigned int    st_rdev;
1476        abi_long        st_size;
1477        abi_long        target_st_atime;
1478        abi_long        target_st_mtime;
1479        abi_long        target_st_ctime;
1480        abi_long        st_blksize;
1481        abi_long        st_blocks;
1482        abi_ulong       __unused4[2];
1483};
1484
1485#define TARGET_HAS_STRUCT_STAT64
1486struct target_stat64 {
1487        unsigned char   __pad0[6];
1488        unsigned short  st_dev;
1489
1490        uint64_t        st_ino;
1491        uint64_t        st_nlink;
1492
1493        unsigned int    st_mode;
1494
1495        unsigned int    st_uid;
1496        unsigned int    st_gid;
1497
1498        unsigned char   __pad2[6];
1499        unsigned short  st_rdev;
1500
1501        int64_t         st_size;
1502        int64_t         st_blksize;
1503
1504        unsigned char   __pad4[4];
1505        unsigned int    st_blocks;
1506
1507        abi_ulong       target_st_atime;
1508        abi_ulong       target_st_atime_nsec;
1509
1510        abi_ulong       target_st_mtime;
1511        abi_ulong       target_st_mtime_nsec;
1512
1513        abi_ulong       target_st_ctime;
1514        abi_ulong       target_st_ctime_nsec;
1515
1516        abi_ulong       __unused4[3];
1517};
1518
1519#elif defined(TARGET_SPARC)
1520
1521#define TARGET_STAT_HAVE_NSEC
1522struct target_stat {
1523        unsigned short  st_dev;
1524        abi_ulong       st_ino;
1525        unsigned short  st_mode;
1526        short           st_nlink;
1527        unsigned short  st_uid;
1528        unsigned short  st_gid;
1529        unsigned short  st_rdev;
1530        abi_long        st_size;
1531        abi_long        target_st_atime;
1532        abi_ulong       target_st_atime_nsec;
1533        abi_long        target_st_mtime;
1534        abi_ulong       target_st_mtime_nsec;
1535        abi_long        target_st_ctime;
1536        abi_ulong       target_st_ctime_nsec;
1537        abi_long        st_blksize;
1538        abi_long        st_blocks;
1539        abi_ulong       __unused1[2];
1540};
1541
1542#define TARGET_HAS_STRUCT_STAT64
1543struct target_stat64 {
1544        unsigned char   __pad0[6];
1545        unsigned short  st_dev;
1546
1547        uint64_t st_ino;
1548
1549        unsigned int    st_mode;
1550        unsigned int    st_nlink;
1551
1552        unsigned int    st_uid;
1553        unsigned int    st_gid;
1554
1555        unsigned char   __pad2[6];
1556        unsigned short  st_rdev;
1557
1558        unsigned char   __pad3[8];
1559
1560        int64_t st_size;
1561        unsigned int    st_blksize;
1562
1563        unsigned char   __pad4[8];
1564        unsigned int    st_blocks;
1565
1566        unsigned int    target_st_atime;
1567        unsigned int    target_st_atime_nsec;
1568
1569        unsigned int    target_st_mtime;
1570        unsigned int    target_st_mtime_nsec;
1571
1572        unsigned int    target_st_ctime;
1573        unsigned int    target_st_ctime_nsec;
1574
1575        unsigned int    __unused1;
1576        unsigned int    __unused2;
1577};
1578
1579#elif defined(TARGET_PPC)
1580
1581#define TARGET_STAT_HAVE_NSEC
1582struct target_stat {
1583        abi_ulong st_dev;
1584        abi_ulong st_ino;
1585#if defined(TARGET_PPC64) && !defined(TARGET_ABI32)
1586        abi_ulong st_nlink;
1587        unsigned int st_mode;
1588#else
1589        unsigned int st_mode;
1590        unsigned short st_nlink;
1591#endif
1592        unsigned int st_uid;
1593        unsigned int st_gid;
1594        abi_ulong  st_rdev;
1595        abi_ulong  st_size;
1596        abi_ulong  st_blksize;
1597        abi_ulong  st_blocks;
1598        abi_ulong  target_st_atime;
1599        abi_ulong  target_st_atime_nsec;
1600        abi_ulong  target_st_mtime;
1601        abi_ulong  target_st_mtime_nsec;
1602        abi_ulong  target_st_ctime;
1603        abi_ulong  target_st_ctime_nsec;
1604        abi_ulong  __unused4;
1605        abi_ulong  __unused5;
1606#if defined(TARGET_PPC64) && !defined(TARGET_ABI32)
1607        abi_ulong  __unused6;
1608#endif
1609};
1610
1611#if !defined(TARGET_PPC64) || defined(TARGET_ABI32)
1612#define TARGET_HAS_STRUCT_STAT64
1613struct QEMU_PACKED target_stat64 {
1614        unsigned long long st_dev;
1615        unsigned long long st_ino;
1616        unsigned int st_mode;
1617        unsigned int st_nlink;
1618        unsigned int st_uid;
1619        unsigned int st_gid;
1620        unsigned long long st_rdev;
1621        unsigned long long __pad0;
1622        long long      st_size;
1623        int            st_blksize;
1624        unsigned int   __pad1;
1625        long long      st_blocks;       /* Number 512-byte blocks allocated. */
1626        int            target_st_atime;
1627        unsigned int   target_st_atime_nsec;
1628        int            target_st_mtime;
1629        unsigned int   target_st_mtime_nsec;
1630        int            target_st_ctime;
1631        unsigned int   target_st_ctime_nsec;
1632        unsigned int   __unused4;
1633        unsigned int   __unused5;
1634};
1635#endif
1636
1637#elif defined(TARGET_MICROBLAZE)
1638
1639#define TARGET_STAT_HAVE_NSEC
1640struct target_stat {
1641        abi_ulong st_dev;
1642        abi_ulong st_ino;
1643        unsigned int st_mode;
1644        unsigned short st_nlink;
1645        unsigned int st_uid;
1646        unsigned int st_gid;
1647        abi_ulong  st_rdev;
1648        abi_ulong  st_size;
1649        abi_ulong  st_blksize;
1650        abi_ulong  st_blocks;
1651        abi_ulong  target_st_atime;
1652        abi_ulong  target_st_atime_nsec;
1653        abi_ulong  target_st_mtime;
1654        abi_ulong  target_st_mtime_nsec;
1655        abi_ulong  target_st_ctime;
1656        abi_ulong  target_st_ctime_nsec;
1657        abi_ulong  __unused4;
1658        abi_ulong  __unused5;
1659};
1660
1661/* FIXME: Microblaze no-mmu user-space has a difference stat64 layout...  */
1662#define TARGET_HAS_STRUCT_STAT64
1663struct QEMU_PACKED target_stat64 {
1664        uint64_t st_dev;
1665#define TARGET_STAT64_HAS_BROKEN_ST_INO 1
1666        uint32_t pad0;
1667        uint32_t __st_ino;
1668
1669        uint32_t st_mode;
1670        uint32_t st_nlink;
1671        uint32_t st_uid;
1672        uint32_t st_gid;
1673        uint64_t st_rdev;
1674        uint64_t __pad1;
1675
1676        int64_t  st_size;
1677        int32_t  st_blksize;
1678        uint32_t __pad2;
1679        int64_t st_blocks;      /* Number 512-byte blocks allocated. */
1680
1681        int            target_st_atime;
1682        unsigned int   target_st_atime_nsec;
1683        int            target_st_mtime;
1684        unsigned int   target_st_mtime_nsec;
1685        int            target_st_ctime;
1686        unsigned int   target_st_ctime_nsec;
1687        uint64_t st_ino;
1688};
1689
1690#elif defined(TARGET_M68K)
1691
1692struct target_stat {
1693        unsigned short st_dev;
1694        unsigned short __pad1;
1695        abi_ulong st_ino;
1696        unsigned short st_mode;
1697        unsigned short st_nlink;
1698        unsigned short st_uid;
1699        unsigned short st_gid;
1700        unsigned short st_rdev;
1701        unsigned short __pad2;
1702        abi_ulong  st_size;
1703        abi_ulong  st_blksize;
1704        abi_ulong  st_blocks;
1705        abi_ulong  target_st_atime;
1706        abi_ulong  __unused1;
1707        abi_ulong  target_st_mtime;
1708        abi_ulong  __unused2;
1709        abi_ulong  target_st_ctime;
1710        abi_ulong  __unused3;
1711        abi_ulong  __unused4;
1712        abi_ulong  __unused5;
1713};
1714
1715/* This matches struct stat64 in glibc2.1, hence the absolutely
1716 * insane amounts of padding around dev_t's.
1717 */
1718#define TARGET_HAS_STRUCT_STAT64
1719struct target_stat64 {
1720        unsigned long long      st_dev;
1721        unsigned char   __pad1[2];
1722
1723#define TARGET_STAT64_HAS_BROKEN_ST_INO 1
1724        abi_ulong       __st_ino;
1725
1726        unsigned int    st_mode;
1727        unsigned int    st_nlink;
1728
1729        abi_ulong       st_uid;
1730        abi_ulong       st_gid;
1731
1732        unsigned long long      st_rdev;
1733        unsigned char   __pad3[2];
1734
1735        long long       st_size;
1736        abi_ulong       st_blksize;
1737
1738        abi_ulong       __pad4;         /* future possible st_blocks high bits */
1739        abi_ulong       st_blocks;      /* Number 512-byte blocks allocated. */
1740
1741        abi_ulong       target_st_atime;
1742        abi_ulong       target_st_atime_nsec;
1743
1744        abi_ulong       target_st_mtime;
1745        abi_ulong       target_st_mtime_nsec;
1746
1747        abi_ulong       target_st_ctime;
1748        abi_ulong       target_st_ctime_nsec;
1749
1750        unsigned long long      st_ino;
1751} QEMU_PACKED;
1752
1753#elif defined(TARGET_ABI_MIPSN64)
1754
1755#define TARGET_STAT_HAVE_NSEC
1756/* The memory layout is the same as of struct stat64 of the 32-bit kernel.  */
1757struct target_stat {
1758        unsigned int            st_dev;
1759        unsigned int            st_pad0[3]; /* Reserved for st_dev expansion */
1760
1761        abi_ulong               st_ino;
1762
1763        unsigned int            st_mode;
1764        unsigned int            st_nlink;
1765
1766        int                     st_uid;
1767        int                     st_gid;
1768
1769        unsigned int            st_rdev;
1770        unsigned int            st_pad1[3]; /* Reserved for st_rdev expansion */
1771
1772        abi_ulong               st_size;
1773
1774        /*
1775         * Actually this should be timestruc_t st_atime, st_mtime and st_ctime
1776         * but we don't have it under Linux.
1777         */
1778        unsigned int            target_st_atime;
1779        unsigned int            target_st_atime_nsec;
1780
1781        unsigned int            target_st_mtime;
1782        unsigned int            target_st_mtime_nsec;
1783
1784        unsigned int            target_st_ctime;
1785        unsigned int            target_st_ctime_nsec;
1786
1787        unsigned int            st_blksize;
1788        unsigned int            st_pad2;
1789
1790        abi_ulong               st_blocks;
1791};
1792
1793#elif defined(TARGET_ABI_MIPSN32)
1794
1795#define TARGET_STAT_HAVE_NSEC
1796struct target_stat {
1797        abi_ulong    st_dev;
1798        abi_ulong    st_pad0[3]; /* Reserved for st_dev expansion */
1799        uint64_t     st_ino;
1800        unsigned int st_mode;
1801        unsigned int st_nlink;
1802        int          st_uid;
1803        int          st_gid;
1804        abi_ulong    st_rdev;
1805        abi_ulong    st_pad1[3]; /* Reserved for st_rdev expansion */
1806        int64_t      st_size;
1807        abi_long     target_st_atime;
1808        abi_ulong    target_st_atime_nsec; /* Reserved for st_atime expansion */
1809        abi_long     target_st_mtime;
1810        abi_ulong    target_st_mtime_nsec; /* Reserved for st_mtime expansion */
1811        abi_long     target_st_ctime;
1812        abi_ulong    target_st_ctime_nsec; /* Reserved for st_ctime expansion */
1813        abi_ulong    st_blksize;
1814        abi_ulong    st_pad2;
1815        int64_t      st_blocks;
1816};
1817
1818#elif defined(TARGET_ABI_MIPSO32)
1819
1820#define TARGET_STAT_HAVE_NSEC
1821struct target_stat {
1822        unsigned        st_dev;
1823        abi_long        st_pad1[3];             /* Reserved for network id */
1824        abi_ulong       st_ino;
1825        unsigned int    st_mode;
1826        unsigned int    st_nlink;
1827        int             st_uid;
1828        int             st_gid;
1829        unsigned        st_rdev;
1830        abi_long        st_pad2[2];
1831        abi_long        st_size;
1832        abi_long        st_pad3;
1833        /*
1834         * Actually this should be timestruc_t st_atime, st_mtime and st_ctime
1835         * but we don't have it under Linux.
1836         */
1837        abi_long                target_st_atime;
1838        abi_long                target_st_atime_nsec;
1839        abi_long                target_st_mtime;
1840        abi_long                target_st_mtime_nsec;
1841        abi_long                target_st_ctime;
1842        abi_long                target_st_ctime_nsec;
1843        abi_long                st_blksize;
1844        abi_long                st_blocks;
1845        abi_long                st_pad4[14];
1846};
1847
1848/*
1849 * This matches struct stat64 in glibc2.1, hence the absolutely insane
1850 * amounts of padding around dev_t's.  The memory layout is the same as of
1851 * struct stat of the 64-bit kernel.
1852 */
1853
1854#define TARGET_HAS_STRUCT_STAT64
1855struct target_stat64 {
1856        abi_ulong       st_dev;
1857        abi_ulong       st_pad0[3];     /* Reserved for st_dev expansion  */
1858
1859        uint64_t        st_ino;
1860
1861        unsigned int    st_mode;
1862        unsigned int    st_nlink;
1863
1864        int             st_uid;
1865        int             st_gid;
1866
1867        abi_ulong       st_rdev;
1868        abi_ulong       st_pad1[3];     /* Reserved for st_rdev expansion  */
1869
1870        int64_t         st_size;
1871
1872        /*
1873         * Actually this should be timestruc_t st_atime, st_mtime and st_ctime
1874         * but we don't have it under Linux.
1875         */
1876        abi_long        target_st_atime;
1877        abi_ulong       target_st_atime_nsec;   /* Reserved for st_atime expansion  */
1878
1879        abi_long        target_st_mtime;
1880        abi_ulong       target_st_mtime_nsec;   /* Reserved for st_mtime expansion  */
1881
1882        abi_long        target_st_ctime;
1883        abi_ulong       target_st_ctime_nsec;   /* Reserved for st_ctime expansion  */
1884
1885        abi_ulong       st_blksize;
1886        abi_ulong       st_pad2;
1887
1888        int64_t         st_blocks;
1889};
1890
1891#elif defined(TARGET_ALPHA)
1892
1893struct target_stat {
1894       unsigned int    st_dev;
1895       unsigned int    st_ino;
1896       unsigned int    st_mode;
1897       unsigned int    st_nlink;
1898       unsigned int    st_uid;
1899       unsigned int    st_gid;
1900       unsigned int    st_rdev;
1901       abi_long     st_size;
1902       abi_ulong    target_st_atime;
1903       abi_ulong    target_st_mtime;
1904       abi_ulong    target_st_ctime;
1905       unsigned int    st_blksize;
1906       unsigned int    st_blocks;
1907       unsigned int    st_flags;
1908       unsigned int    st_gen;
1909};
1910
1911#define TARGET_HAS_STRUCT_STAT64
1912struct target_stat64 {
1913       abi_ulong    st_dev;
1914       abi_ulong    st_ino;
1915       abi_ulong    st_rdev;
1916       abi_long     st_size;
1917       abi_ulong    st_blocks;
1918
1919       unsigned int    st_mode;
1920       unsigned int    st_uid;
1921       unsigned int    st_gid;
1922       unsigned int    st_blksize;
1923       unsigned int    st_nlink;
1924       unsigned int    __pad0;
1925
1926       abi_ulong    target_st_atime;
1927       abi_ulong    target_st_atime_nsec;
1928       abi_ulong    target_st_mtime;
1929       abi_ulong    target_st_mtime_nsec;
1930       abi_ulong    target_st_ctime;
1931       abi_ulong    target_st_ctime_nsec;
1932       abi_long     __unused[3];
1933};
1934
1935#elif defined(TARGET_SH4)
1936
1937#define TARGET_STAT_HAVE_NSEC
1938struct target_stat {
1939        abi_ulong  st_dev;
1940        abi_ulong  st_ino;
1941        unsigned short st_mode;
1942        unsigned short st_nlink;
1943        unsigned short st_uid;
1944        unsigned short st_gid;
1945        abi_ulong  st_rdev;
1946        abi_ulong  st_size;
1947        abi_ulong  st_blksize;
1948        abi_ulong  st_blocks;
1949        abi_ulong  target_st_atime;
1950        abi_ulong  target_st_atime_nsec;
1951        abi_ulong  target_st_mtime;
1952        abi_ulong  target_st_mtime_nsec;
1953        abi_ulong  target_st_ctime;
1954        abi_ulong  target_st_ctime_nsec;
1955        abi_ulong  __unused4;
1956        abi_ulong  __unused5;
1957};
1958
1959/* This matches struct stat64 in glibc2.1, hence the absolutely
1960 * insane amounts of padding around dev_t's.
1961 */
1962#define TARGET_HAS_STRUCT_STAT64
1963struct QEMU_PACKED target_stat64 {
1964        unsigned long long      st_dev;
1965        unsigned char   __pad0[4];
1966
1967#define TARGET_STAT64_HAS_BROKEN_ST_INO 1
1968        abi_ulong       __st_ino;
1969
1970        unsigned int    st_mode;
1971        unsigned int    st_nlink;
1972
1973        abi_ulong       st_uid;
1974        abi_ulong       st_gid;
1975
1976        unsigned long long      st_rdev;
1977        unsigned char   __pad3[4];
1978
1979        long long       st_size;
1980        abi_ulong       st_blksize;
1981
1982        unsigned long long      st_blocks;      /* Number 512-byte blocks allocated. */
1983
1984        abi_ulong       target_st_atime;
1985        abi_ulong       target_st_atime_nsec;
1986
1987        abi_ulong       target_st_mtime;
1988        abi_ulong       target_st_mtime_nsec;
1989
1990        abi_ulong       target_st_ctime;
1991        abi_ulong       target_st_ctime_nsec;
1992
1993        unsigned long long      st_ino;
1994};
1995
1996#elif defined(TARGET_I386) && !defined(TARGET_ABI32)
1997#define TARGET_STAT_HAVE_NSEC
1998struct target_stat {
1999        abi_ulong       st_dev;
2000        abi_ulong       st_ino;
2001        abi_ulong       st_nlink;
2002
2003        unsigned int    st_mode;
2004        unsigned int    st_uid;
2005        unsigned int    st_gid;
2006        unsigned int    __pad0;
2007        abi_ulong       st_rdev;
2008        abi_long        st_size;
2009        abi_long        st_blksize;
2010        abi_long        st_blocks;      /* Number 512-byte blocks allocated. */
2011
2012        abi_ulong       target_st_atime;
2013        abi_ulong       target_st_atime_nsec; 
2014        abi_ulong       target_st_mtime;
2015        abi_ulong       target_st_mtime_nsec;
2016        abi_ulong       target_st_ctime;
2017        abi_ulong       target_st_ctime_nsec;
2018
2019        abi_long        __unused[3];
2020};
2021#elif defined(TARGET_S390X)
2022struct target_stat {
2023    abi_ulong  st_dev;
2024    abi_ulong  st_ino;
2025    abi_ulong  st_nlink;
2026    unsigned int   st_mode;
2027    unsigned int   st_uid;
2028    unsigned int   st_gid;
2029    unsigned int   __pad1;
2030    abi_ulong  st_rdev;
2031    abi_ulong  st_size;
2032    abi_ulong  target_st_atime;
2033    abi_ulong  target_st_atime_nsec;
2034    abi_ulong  target_st_mtime;
2035    abi_ulong  target_st_mtime_nsec;
2036    abi_ulong  target_st_ctime;
2037    abi_ulong  target_st_ctime_nsec;
2038    abi_ulong  st_blksize;
2039    abi_long       st_blocks;
2040    abi_ulong  __unused[3];
2041};
2042#elif defined(TARGET_AARCH64)
2043#define TARGET_STAT_HAVE_NSEC
2044struct target_stat {
2045    abi_ulong  st_dev;
2046    abi_ulong  st_ino;
2047    unsigned int st_mode;
2048    unsigned int st_nlink;
2049    unsigned int   st_uid;
2050    unsigned int   st_gid;
2051    abi_ulong  st_rdev;
2052    abi_ulong  _pad1;
2053    abi_long  st_size;
2054    int        st_blksize;
2055    int        __pad2;
2056    abi_long   st_blocks;
2057    abi_long  target_st_atime;
2058    abi_ulong  target_st_atime_nsec;
2059    abi_long  target_st_mtime;
2060    abi_ulong  target_st_mtime_nsec;
2061    abi_long  target_st_ctime;
2062    abi_ulong  target_st_ctime_nsec;
2063    unsigned int __unused[2];
2064};
2065#elif defined(TARGET_XTENSA)
2066#define TARGET_STAT_HAVE_NSEC
2067struct target_stat {
2068    abi_ulong       st_dev;
2069    abi_ulong       st_ino;
2070    unsigned int    st_mode;
2071    unsigned int    st_nlink;
2072    unsigned int    st_uid;
2073    unsigned int    st_gid;
2074    abi_ulong       st_rdev;
2075    abi_long        st_size;
2076    abi_ulong       st_blksize;
2077    abi_ulong       st_blocks;
2078    abi_ulong       target_st_atime;
2079    abi_ulong       target_st_atime_nsec;
2080    abi_ulong       target_st_mtime;
2081    abi_ulong       target_st_mtime_nsec;
2082    abi_ulong       target_st_ctime;
2083    abi_ulong       target_st_ctime_nsec;
2084    abi_ulong       __unused4;
2085    abi_ulong       __unused5;
2086};
2087
2088#define TARGET_HAS_STRUCT_STAT64
2089struct target_stat64  {
2090    uint64_t st_dev;            /* Device */
2091    uint64_t st_ino;            /* File serial number */
2092    unsigned int  st_mode;      /* File mode. */
2093    unsigned int  st_nlink;     /* Link count. */
2094    unsigned int  st_uid;       /* User ID of the file's owner. */
2095    unsigned int  st_gid;       /* Group ID of the file's group. */
2096    uint64_t st_rdev;           /* Device number, if device. */
2097    int64_t st_size;            /* Size of file, in bytes. */
2098    abi_ulong st_blksize;       /* Optimal block size for I/O. */
2099    abi_ulong __unused2;
2100    uint64_t st_blocks;         /* Number 512-byte blocks allocated. */
2101    abi_ulong target_st_atime;  /* Time of last access. */
2102    abi_ulong target_st_atime_nsec;
2103    abi_ulong target_st_mtime;  /* Time of last modification. */
2104    abi_ulong target_st_mtime_nsec;
2105    abi_ulong target_st_ctime;  /* Time of last status change. */
2106    abi_ulong target_st_ctime_nsec;
2107    abi_ulong __unused4;
2108    abi_ulong __unused5;
2109};
2110
2111#elif defined(TARGET_OPENRISC) || defined(TARGET_TILEGX) || \
2112      defined(TARGET_NIOS2) || defined(TARGET_RISCV)
2113
2114/* These are the asm-generic versions of the stat and stat64 structures */
2115
2116#define TARGET_STAT_HAVE_NSEC
2117struct target_stat {
2118    abi_ulong st_dev;
2119    abi_ulong st_ino;
2120    unsigned int st_mode;
2121    unsigned int st_nlink;
2122    unsigned int st_uid;
2123    unsigned int st_gid;
2124    abi_ulong st_rdev;
2125    abi_ulong __pad1;
2126    abi_long st_size;
2127    int st_blksize;
2128    int __pad2;
2129    abi_long st_blocks;
2130    abi_long target_st_atime;
2131    abi_ulong target_st_atime_nsec;
2132    abi_long target_st_mtime;
2133    abi_ulong target_st_mtime_nsec;
2134    abi_long target_st_ctime;
2135    abi_ulong target_st_ctime_nsec;
2136    unsigned int __unused4;
2137    unsigned int __unused5;
2138};
2139
2140#if !defined(TARGET_RISCV64)
2141#define TARGET_HAS_STRUCT_STAT64
2142struct target_stat64 {
2143    uint64_t st_dev;
2144    uint64_t st_ino;
2145    unsigned int st_mode;
2146    unsigned int st_nlink;
2147    unsigned int st_uid;
2148    unsigned int st_gid;
2149    uint64_t st_rdev;
2150    uint64_t __pad1;
2151    int64_t st_size;
2152    int st_blksize;
2153    int __pad2;
2154    int64_t st_blocks;
2155    int target_st_atime;
2156    unsigned int target_st_atime_nsec;
2157    int target_st_mtime;
2158    unsigned int target_st_mtime_nsec;
2159    int target_st_ctime;
2160    unsigned int target_st_ctime_nsec;
2161    unsigned int __unused4;
2162    unsigned int __unused5;
2163};
2164#endif
2165
2166#elif defined(TARGET_HPPA)
2167
2168#define TARGET_STAT_HAVE_NSEC
2169struct target_stat {
2170    abi_uint   st_dev;
2171    abi_uint   st_ino;
2172    abi_ushort st_mode;
2173    abi_ushort st_nlink;
2174    abi_ushort _res1;
2175    abi_ushort _res2;
2176    abi_uint   st_rdev;
2177    abi_int    st_size;
2178    abi_int    target_st_atime;
2179    abi_uint   target_st_atime_nsec;
2180    abi_int    target_st_mtime;
2181    abi_uint   target_st_mtime_nsec;
2182    abi_int    target_st_ctime;
2183    abi_uint   target_st_ctime_nsec;
2184    abi_int    st_blksize;
2185    abi_int    st_blocks;
2186    abi_uint   _unused1;
2187    abi_uint   _unused2;
2188    abi_uint   _unused3;
2189    abi_uint   _unused4;
2190    abi_ushort _unused5;
2191    abi_short  st_fstype;
2192    abi_uint   st_realdev;
2193    abi_ushort st_basemode;
2194    abi_ushort _unused6;
2195    abi_uint   st_uid;
2196    abi_uint   st_gid;
2197    abi_uint   _unused7[3];
2198};
2199
2200#define TARGET_HAS_STRUCT_STAT64
2201struct target_stat64 {
2202    uint64_t   st_dev;
2203    abi_uint   _pad1;
2204    abi_uint   _res1;
2205    abi_uint   st_mode;
2206    abi_uint   st_nlink;
2207    abi_uint   st_uid;
2208    abi_uint   st_gid;
2209    uint64_t   st_rdev;
2210    abi_uint   _pad2;
2211    int64_t    st_size;
2212    abi_int    st_blksize;
2213    int64_t    st_blocks;
2214    abi_int    target_st_atime;
2215    abi_uint   target_st_atime_nsec;
2216    abi_int    target_st_mtime;
2217    abi_uint   target_st_mtime_nsec;
2218    abi_int    target_st_ctime;
2219    abi_uint   target_st_ctime_nsec;
2220    uint64_t   st_ino;
2221};
2222
2223#else
2224#error unsupported CPU
2225#endif
2226
2227typedef struct {
2228        int     val[2];
2229} target_fsid_t;
2230
2231#ifdef TARGET_MIPS
2232#ifdef TARGET_ABI_MIPSN32
2233struct target_statfs {
2234        int32_t                 f_type;
2235        int32_t                 f_bsize;
2236        int32_t                 f_frsize;       /* Fragment size - unsupported */
2237        int32_t                 f_blocks;
2238        int32_t                 f_bfree;
2239        int32_t                 f_files;
2240        int32_t                 f_ffree;
2241        int32_t                 f_bavail;
2242
2243        /* Linux specials */
2244        target_fsid_t           f_fsid;
2245        int32_t                 f_namelen;
2246        int32_t                 f_flags;
2247        int32_t                 f_spare[5];
2248};
2249#else
2250struct target_statfs {
2251        abi_long                f_type;
2252        abi_long                f_bsize;
2253        abi_long                f_frsize;       /* Fragment size - unsupported */
2254        abi_long                f_blocks;
2255        abi_long                f_bfree;
2256        abi_long                f_files;
2257        abi_long                f_ffree;
2258        abi_long                f_bavail;
2259
2260        /* Linux specials */
2261        target_fsid_t           f_fsid;
2262        abi_long                f_namelen;
2263        abi_long                f_flags;
2264        abi_long                f_spare[5];
2265};
2266#endif
2267
2268struct target_statfs64 {
2269        uint32_t        f_type;
2270        uint32_t        f_bsize;
2271        uint32_t        f_frsize;       /* Fragment size - unsupported */
2272        uint32_t        __pad;
2273        uint64_t        f_blocks;
2274        uint64_t        f_bfree;
2275        uint64_t        f_files;
2276        uint64_t        f_ffree;
2277        uint64_t        f_bavail;
2278        target_fsid_t   f_fsid;
2279        uint32_t        f_namelen;
2280        uint32_t        f_flags;
2281        uint32_t        f_spare[5];
2282};
2283#elif (defined(TARGET_PPC64) || defined(TARGET_X86_64) || \
2284       defined(TARGET_SPARC64) || defined(TARGET_AARCH64) || \
2285       defined(TARGET_RISCV)) && !defined(TARGET_ABI32)
2286struct target_statfs {
2287        abi_long f_type;
2288        abi_long f_bsize;
2289        abi_long f_blocks;
2290        abi_long f_bfree;
2291        abi_long f_bavail;
2292        abi_long f_files;
2293        abi_long f_ffree;
2294        target_fsid_t f_fsid;
2295        abi_long f_namelen;
2296        abi_long f_frsize;
2297        abi_long f_flags;
2298        abi_long f_spare[4];
2299};
2300
2301struct target_statfs64 {
2302        abi_long f_type;
2303        abi_long f_bsize;
2304        abi_long f_blocks;
2305        abi_long f_bfree;
2306        abi_long f_bavail;
2307        abi_long f_files;
2308        abi_long f_ffree;
2309        target_fsid_t f_fsid;
2310        abi_long f_namelen;
2311        abi_long f_frsize;
2312        abi_long f_flags;
2313        abi_long f_spare[4];
2314};
2315#elif defined(TARGET_S390X)
2316struct target_statfs {
2317    int32_t  f_type;
2318    int32_t  f_bsize;
2319    abi_long f_blocks;
2320    abi_long f_bfree;
2321    abi_long f_bavail;
2322    abi_long f_files;
2323    abi_long f_ffree;
2324    kernel_fsid_t f_fsid;
2325    int32_t  f_namelen;
2326    int32_t  f_frsize;
2327    int32_t  f_flags;
2328    int32_t  f_spare[4];
2329
2330};
2331
2332struct target_statfs64 {
2333    int32_t  f_type;
2334    int32_t  f_bsize;
2335    abi_long f_blocks;
2336    abi_long f_bfree;
2337    abi_long f_bavail;
2338    abi_long f_files;
2339    abi_long f_ffree;
2340    kernel_fsid_t f_fsid;
2341    int32_t  f_namelen;
2342    int32_t  f_frsize;
2343    int32_t  f_flags;
2344    int32_t  f_spare[4];
2345};
2346#else
2347struct target_statfs {
2348        uint32_t f_type;
2349        uint32_t f_bsize;
2350        uint32_t f_blocks;
2351        uint32_t f_bfree;
2352        uint32_t f_bavail;
2353        uint32_t f_files;
2354        uint32_t f_ffree;
2355        target_fsid_t f_fsid;
2356        uint32_t f_namelen;
2357        uint32_t f_frsize;
2358        uint32_t f_flags;
2359        uint32_t f_spare[4];
2360};
2361
2362struct target_statfs64 {
2363        uint32_t f_type;
2364        uint32_t f_bsize;
2365        uint64_t f_blocks;
2366        uint64_t f_bfree;
2367        uint64_t f_bavail;
2368        uint64_t f_files;
2369        uint64_t f_ffree;
2370        target_fsid_t f_fsid;
2371        uint32_t f_namelen;
2372        uint32_t f_frsize;
2373        uint32_t f_flags;
2374        uint32_t f_spare[4];
2375};
2376#endif
2377
2378#define TARGET_F_LINUX_SPECIFIC_BASE 1024
2379#define TARGET_F_SETLEASE (TARGET_F_LINUX_SPECIFIC_BASE + 0)
2380#define TARGET_F_GETLEASE (TARGET_F_LINUX_SPECIFIC_BASE + 1)
2381#define TARGET_F_DUPFD_CLOEXEC (TARGET_F_LINUX_SPECIFIC_BASE + 6)
2382#define TARGET_F_SETPIPE_SZ (TARGET_F_LINUX_SPECIFIC_BASE + 7)
2383#define TARGET_F_GETPIPE_SZ (TARGET_F_LINUX_SPECIFIC_BASE + 8)
2384#define TARGET_F_NOTIFY  (TARGET_F_LINUX_SPECIFIC_BASE+2)
2385
2386#include "target_fcntl.h"
2387
2388/* soundcard defines */
2389/* XXX: convert them all to arch independent entries */
2390#define TARGET_SNDCTL_COPR_HALT           TARGET_IOWR('C',  7, int);
2391#define TARGET_SNDCTL_COPR_LOAD           0xcfb04301
2392#define TARGET_SNDCTL_COPR_RCODE          0xc0144303
2393#define TARGET_SNDCTL_COPR_RCVMSG         0x8fa44309
2394#define TARGET_SNDCTL_COPR_RDATA          0xc0144302
2395#define TARGET_SNDCTL_COPR_RESET          0x00004300
2396#define TARGET_SNDCTL_COPR_RUN            0xc0144306
2397#define TARGET_SNDCTL_COPR_SENDMSG        0xcfa44308
2398#define TARGET_SNDCTL_COPR_WCODE          0x40144305
2399#define TARGET_SNDCTL_COPR_WDATA          0x40144304
2400#define TARGET_SNDCTL_DSP_RESET           TARGET_IO('P', 0)
2401#define TARGET_SNDCTL_DSP_SYNC            TARGET_IO('P', 1)
2402#define TARGET_SNDCTL_DSP_SPEED           TARGET_IOWR('P', 2, int)
2403#define TARGET_SNDCTL_DSP_STEREO          TARGET_IOWR('P', 3, int)
2404#define TARGET_SNDCTL_DSP_GETBLKSIZE      TARGET_IOWR('P', 4, int)
2405#define TARGET_SNDCTL_DSP_SETFMT          TARGET_IOWR('P', 5, int)
2406#define TARGET_SNDCTL_DSP_CHANNELS        TARGET_IOWR('P', 6, int)
2407#define TARGET_SOUND_PCM_WRITE_FILTER     TARGET_IOWR('P', 7, int)
2408#define TARGET_SNDCTL_DSP_POST            TARGET_IO('P', 8)
2409#define TARGET_SNDCTL_DSP_SUBDIVIDE       TARGET_IOWR('P', 9, int)
2410#define TARGET_SNDCTL_DSP_SETFRAGMENT     TARGET_IOWR('P',10, int)
2411#define TARGET_SNDCTL_DSP_GETFMTS         TARGET_IOR('P', 11, int)
2412#define TARGET_SNDCTL_DSP_GETOSPACE       TARGET_IORU('P',12)
2413#define TARGET_SNDCTL_DSP_GETISPACE       TARGET_IORU('P',13)
2414#define TARGET_SNDCTL_DSP_GETCAPS         TARGET_IOR('P', 15, int)
2415#define TARGET_SNDCTL_DSP_GETTRIGGER      TARGET_IOR('P',16, int)
2416#define TARGET_SNDCTL_DSP_GETIPTR         TARGET_IORU('P',17)
2417#define TARGET_SNDCTL_DSP_GETOPTR         TARGET_IORU('P',18)
2418#define TARGET_SNDCTL_DSP_MAPINBUF        TARGET_IORU('P', 19)
2419#define TARGET_SNDCTL_DSP_MAPOUTBUF       TARGET_IORU('P', 20)
2420#define TARGET_SNDCTL_DSP_NONBLOCK        0x0000500e
2421#define TARGET_SNDCTL_DSP_SAMPLESIZE      0xc0045005
2422#define TARGET_SNDCTL_DSP_SETDUPLEX       0x00005016
2423#define TARGET_SNDCTL_DSP_SETSYNCRO       0x00005015
2424#define TARGET_SNDCTL_DSP_SETTRIGGER      0x40045010
2425#define TARGET_SNDCTL_FM_4OP_ENABLE       0x4004510f
2426#define TARGET_SNDCTL_FM_LOAD_INSTR       0x40285107
2427#define TARGET_SNDCTL_MIDI_INFO           0xc074510c
2428#define TARGET_SNDCTL_MIDI_MPUCMD         0xc0216d02
2429#define TARGET_SNDCTL_MIDI_MPUMODE        0xc0046d01
2430#define TARGET_SNDCTL_MIDI_PRETIME        0xc0046d00
2431#define TARGET_SNDCTL_PMGR_ACCESS         0xcfb85110
2432#define TARGET_SNDCTL_PMGR_IFACE          0xcfb85001
2433#define TARGET_SNDCTL_SEQ_CTRLRATE        0xc0045103
2434#define TARGET_SNDCTL_SEQ_GETINCOUNT      0x80045105
2435#define TARGET_SNDCTL_SEQ_GETOUTCOUNT     0x80045104
2436#define TARGET_SNDCTL_SEQ_NRMIDIS         0x8004510b
2437#define TARGET_SNDCTL_SEQ_NRSYNTHS        0x8004510a
2438#define TARGET_SNDCTL_SEQ_OUTOFBAND       0x40085112
2439#define TARGET_SNDCTL_SEQ_PANIC           0x00005111
2440#define TARGET_SNDCTL_SEQ_PERCMODE        0x40045106
2441#define TARGET_SNDCTL_SEQ_RESET           0x00005100
2442#define TARGET_SNDCTL_SEQ_RESETSAMPLES    0x40045109
2443#define TARGET_SNDCTL_SEQ_SYNC            0x00005101
2444#define TARGET_SNDCTL_SEQ_TESTMIDI        0x40045108
2445#define TARGET_SNDCTL_SEQ_THRESHOLD       0x4004510d
2446#define TARGET_SNDCTL_SEQ_TRESHOLD        0x4004510d
2447#define TARGET_SNDCTL_SYNTH_INFO          0xc08c5102
2448#define TARGET_SNDCTL_SYNTH_MEMAVL        0xc004510e
2449#define TARGET_SNDCTL_TMR_CONTINUE        0x00005404
2450#define TARGET_SNDCTL_TMR_METRONOME       0x40045407
2451#define TARGET_SNDCTL_TMR_SELECT          0x40045408
2452#define TARGET_SNDCTL_TMR_SOURCE          0xc0045406
2453#define TARGET_SNDCTL_TMR_START           0x00005402
2454#define TARGET_SNDCTL_TMR_STOP            0x00005403
2455#define TARGET_SNDCTL_TMR_TEMPO           0xc0045405
2456#define TARGET_SNDCTL_TMR_TIMEBASE        0xc0045401
2457#define TARGET_SOUND_PCM_READ_RATE        0x80045002
2458#define TARGET_SOUND_PCM_READ_CHANNELS    0x80045006
2459#define TARGET_SOUND_PCM_READ_BITS        0x80045005
2460#define TARGET_SOUND_PCM_READ_FILTER      0x80045007
2461#define TARGET_SOUND_MIXER_INFO           TARGET_IOR ('M', 101, mixer_info)
2462#define TARGET_SOUND_MIXER_ACCESS         0xc0804d66
2463#define TARGET_SOUND_MIXER_PRIVATE1       TARGET_IOWR('M', 111, int)
2464#define TARGET_SOUND_MIXER_PRIVATE2       TARGET_IOWR('M', 112, int)
2465#define TARGET_SOUND_MIXER_PRIVATE3       TARGET_IOWR('M', 113, int)
2466#define TARGET_SOUND_MIXER_PRIVATE4       TARGET_IOWR('M', 114, int)
2467#define TARGET_SOUND_MIXER_PRIVATE5       TARGET_IOWR('M', 115, int)
2468
2469#define TARGET_MIXER_READ(dev)  TARGET_IOR('M', dev, int)
2470
2471#define TARGET_SOUND_MIXER_READ_VOLUME          TARGET_MIXER_READ(SOUND_MIXER_VOLUME)
2472#define TARGET_SOUND_MIXER_READ_BASS            TARGET_MIXER_READ(SOUND_MIXER_BASS)
2473#define TARGET_SOUND_MIXER_READ_TREBLE          TARGET_MIXER_READ(SOUND_MIXER_TREBLE)
2474#define TARGET_SOUND_MIXER_READ_SYNTH           TARGET_MIXER_READ(SOUND_MIXER_SYNTH)
2475#define TARGET_SOUND_MIXER_READ_PCM             TARGET_MIXER_READ(SOUND_MIXER_PCM)
2476#define TARGET_SOUND_MIXER_READ_SPEAKER         TARGET_MIXER_READ(SOUND_MIXER_SPEAKER)
2477#define TARGET_SOUND_MIXER_READ_LINE            TARGET_MIXER_READ(SOUND_MIXER_LINE)
2478#define TARGET_SOUND_MIXER_READ_MIC             TARGET_MIXER_READ(SOUND_MIXER_MIC)
2479#define TARGET_SOUND_MIXER_READ_CD              TARGET_MIXER_READ(SOUND_MIXER_CD)
2480#define TARGET_SOUND_MIXER_READ_IMIX            TARGET_MIXER_READ(SOUND_MIXER_IMIX)
2481#define TARGET_SOUND_MIXER_READ_ALTPCM          TARGET_MIXER_READ(SOUND_MIXER_ALTPCM)
2482#define TARGET_SOUND_MIXER_READ_RECLEV          TARGET_MIXER_READ(SOUND_MIXER_RECLEV)
2483#define TARGET_SOUND_MIXER_READ_IGAIN           TARGET_MIXER_READ(SOUND_MIXER_IGAIN)
2484#define TARGET_SOUND_MIXER_READ_OGAIN           TARGET_MIXER_READ(SOUND_MIXER_OGAIN)
2485#define TARGET_SOUND_MIXER_READ_LINE1           TARGET_MIXER_READ(SOUND_MIXER_LINE1)
2486#define TARGET_SOUND_MIXER_READ_LINE2           TARGET_MIXER_READ(SOUND_MIXER_LINE2)
2487#define TARGET_SOUND_MIXER_READ_LINE3           TARGET_MIXER_READ(SOUND_MIXER_LINE3)
2488
2489/* Obsolete macros */
2490#define TARGET_SOUND_MIXER_READ_MUTE            TARGET_MIXER_READ(SOUND_MIXER_MUTE)
2491#define TARGET_SOUND_MIXER_READ_ENHANCE         TARGET_MIXER_READ(SOUND_MIXER_ENHANCE)
2492#define TARGET_SOUND_MIXER_READ_LOUD            TARGET_MIXER_READ(SOUND_MIXER_LOUD)
2493
2494#define TARGET_SOUND_MIXER_READ_RECSRC          TARGET_MIXER_READ(SOUND_MIXER_RECSRC)
2495#define TARGET_SOUND_MIXER_READ_DEVMASK         TARGET_MIXER_READ(SOUND_MIXER_DEVMASK)
2496#define TARGET_SOUND_MIXER_READ_RECMASK         TARGET_MIXER_READ(SOUND_MIXER_RECMASK)
2497#define TARGET_SOUND_MIXER_READ_STEREODEVS      TARGET_MIXER_READ(SOUND_MIXER_STEREODEVS)
2498#define TARGET_SOUND_MIXER_READ_CAPS            TARGET_MIXER_READ(SOUND_MIXER_CAPS)
2499
2500#define TARGET_MIXER_WRITE(dev)         TARGET_IOWR('M', dev, int)
2501
2502#define TARGET_SOUND_MIXER_WRITE_VOLUME TARGET_MIXER_WRITE(SOUND_MIXER_VOLUME)
2503#define TARGET_SOUND_MIXER_WRITE_BASS           TARGET_MIXER_WRITE(SOUND_MIXER_BASS)
2504#define TARGET_SOUND_MIXER_WRITE_TREBLE TARGET_MIXER_WRITE(SOUND_MIXER_TREBLE)
2505#define TARGET_SOUND_MIXER_WRITE_SYNTH          TARGET_MIXER_WRITE(SOUND_MIXER_SYNTH)
2506#define TARGET_SOUND_MIXER_WRITE_PCM            TARGET_MIXER_WRITE(SOUND_MIXER_PCM)
2507#define TARGET_SOUND_MIXER_WRITE_SPEAKER        TARGET_MIXER_WRITE(SOUND_MIXER_SPEAKER)
2508#define TARGET_SOUND_MIXER_WRITE_LINE           TARGET_MIXER_WRITE(SOUND_MIXER_LINE)
2509#define TARGET_SOUND_MIXER_WRITE_MIC            TARGET_MIXER_WRITE(SOUND_MIXER_MIC)
2510#define TARGET_SOUND_MIXER_WRITE_CD             TARGET_MIXER_WRITE(SOUND_MIXER_CD)
2511#define TARGET_SOUND_MIXER_WRITE_IMIX           TARGET_MIXER_WRITE(SOUND_MIXER_IMIX)
2512#define TARGET_SOUND_MIXER_WRITE_ALTPCM TARGET_MIXER_WRITE(SOUND_MIXER_ALTPCM)
2513#define TARGET_SOUND_MIXER_WRITE_RECLEV TARGET_MIXER_WRITE(SOUND_MIXER_RECLEV)
2514#define TARGET_SOUND_MIXER_WRITE_IGAIN          TARGET_MIXER_WRITE(SOUND_MIXER_IGAIN)
2515#define TARGET_SOUND_MIXER_WRITE_OGAIN          TARGET_MIXER_WRITE(SOUND_MIXER_OGAIN)
2516#define TARGET_SOUND_MIXER_WRITE_LINE1          TARGET_MIXER_WRITE(SOUND_MIXER_LINE1)
2517#define TARGET_SOUND_MIXER_WRITE_LINE2          TARGET_MIXER_WRITE(SOUND_MIXER_LINE2)
2518#define TARGET_SOUND_MIXER_WRITE_LINE3          TARGET_MIXER_WRITE(SOUND_MIXER_LINE3)
2519
2520/* Obsolete macros */
2521#define TARGET_SOUND_MIXER_WRITE_MUTE           TARGET_MIXER_WRITE(SOUND_MIXER_MUTE)
2522#define TARGET_SOUND_MIXER_WRITE_ENHANCE        TARGET_MIXER_WRITE(SOUND_MIXER_ENHANCE)
2523#define TARGET_SOUND_MIXER_WRITE_LOUD           TARGET_MIXER_WRITE(SOUND_MIXER_LOUD)
2524
2525#define TARGET_SOUND_MIXER_WRITE_RECSRC TARGET_MIXER_WRITE(SOUND_MIXER_RECSRC)
2526
2527struct target_snd_timer_id {
2528    int dev_class;
2529    int dev_sclass;
2530    int card;
2531    int device;
2532    int subdevice;
2533};
2534
2535struct target_snd_timer_ginfo {
2536    struct target_snd_timer_id tid;
2537    unsigned int flags;
2538    int card;
2539    unsigned char id[64];
2540    unsigned char name[80];
2541    abi_ulong reserved0;
2542    abi_ulong resolution;
2543    abi_ulong resolution_min;
2544    abi_ulong resolution_max;
2545    unsigned int clients;
2546    unsigned char reserved[32];
2547};
2548
2549struct target_snd_timer_gparams {
2550    struct target_snd_timer_id tid;
2551    abi_ulong period_num;
2552    abi_ulong period_den;
2553    unsigned char reserved[32];
2554};
2555
2556struct target_snd_timer_gstatus {
2557    struct target_snd_timer_id tid;
2558    abi_ulong resolution;
2559    abi_ulong resolution_num;
2560    abi_ulong resolution_den;
2561    unsigned char reserved[32];
2562};
2563
2564struct target_snd_timer_select {
2565    struct target_snd_timer_id id;
2566    unsigned char reserved[32];
2567};
2568
2569struct target_snd_timer_info {
2570    unsigned int flags;
2571    int card;
2572    unsigned char id[64];
2573    unsigned char name[80];
2574    abi_ulong reserved0;
2575    abi_ulong resolution;
2576    unsigned char reserved[64];
2577};
2578
2579struct target_snd_timer_status {
2580    struct target_timespec tstamp;
2581    unsigned int resolution;
2582    unsigned int lost;
2583    unsigned int overrun;
2584    unsigned int queue;
2585    unsigned char reserved[64];
2586};
2587
2588/* alsa timer ioctls */
2589#define TARGET_SNDRV_TIMER_IOCTL_PVERSION     TARGET_IOR('T', 0x00, int)
2590#define TARGET_SNDRV_TIMER_IOCTL_NEXT_DEVICE  TARGET_IOWR('T', 0x01,           \
2591                                                struct snd_timer_id)
2592#define TARGET_SNDRV_TIMER_IOCTL_GINFO        TARGET_IOWR('T', 0x03,           \
2593                                                struct target_snd_timer_ginfo)
2594#define TARGET_SNDRV_TIMER_IOCTL_GPARAMS      TARGET_IOW('T', 0x04,            \
2595                                                struct target_snd_timer_gparams)
2596#define TARGET_SNDRV_TIMER_IOCTL_GSTATUS      TARGET_IOWR('T', 0x05,           \
2597                                                struct target_snd_timer_gstatus)
2598#define TARGET_SNDRV_TIMER_IOCTL_SELECT       TARGET_IOW('T', 0x10,            \
2599                                                struct target_snd_timer_select)
2600#define TARGET_SNDRV_TIMER_IOCTL_INFO         TARGET_IOR('T', 0x11,            \
2601                                                struct target_snd_timer_info)
2602#define TARGET_SNDRV_TIMER_IOCTL_PARAMS       TARGET_IOW('T', 0x12,            \
2603                                                struct snd_timer_params)
2604#define TARGET_SNDRV_TIMER_IOCTL_STATUS       TARGET_IOR('T', 0x14,            \
2605                                                struct target_snd_timer_status)
2606#define TARGET_SNDRV_TIMER_IOCTL_START        TARGET_IO('T', 0xa0)
2607#define TARGET_SNDRV_TIMER_IOCTL_STOP         TARGET_IO('T', 0xa1)
2608#define TARGET_SNDRV_TIMER_IOCTL_CONTINUE     TARGET_IO('T', 0xa2)
2609#define TARGET_SNDRV_TIMER_IOCTL_PAUSE        TARGET_IO('T', 0xa3)
2610
2611/* vfat ioctls */
2612#define TARGET_VFAT_IOCTL_READDIR_BOTH    TARGET_IORU('r', 1)
2613#define TARGET_VFAT_IOCTL_READDIR_SHORT   TARGET_IORU('r', 2)
2614
2615struct target_mtop {
2616    abi_short mt_op;
2617    abi_int mt_count;
2618};
2619
2620#if defined(TARGET_SPARC) || defined(TARGET_MIPS)
2621typedef abi_long target_kernel_daddr_t;
2622#else
2623typedef abi_int target_kernel_daddr_t;
2624#endif
2625
2626struct target_mtget {
2627    abi_long mt_type;
2628    abi_long mt_resid;
2629    abi_long mt_dsreg;
2630    abi_long mt_gstat;
2631    abi_long mt_erreg;
2632    target_kernel_daddr_t mt_fileno;
2633    target_kernel_daddr_t mt_blkno;
2634};
2635
2636struct target_mtpos {
2637    abi_long mt_blkno;
2638};
2639
2640#define TARGET_MTIOCTOP        TARGET_IOW('m', 1, struct target_mtop)
2641#define TARGET_MTIOCGET        TARGET_IOR('m', 2, struct target_mtget)
2642#define TARGET_MTIOCPOS        TARGET_IOR('m', 3, struct target_mtpos)
2643
2644/* kcov ioctls */
2645#define TARGET_KCOV_ENABLE     TARGET_IO('c', 100)
2646#define TARGET_KCOV_DISABLE    TARGET_IO('c', 101)
2647#define TARGET_KCOV_INIT_TRACE TARGET_IOR('c', 1, abi_ulong)
2648
2649struct target_sysinfo {
2650    abi_long uptime;                /* Seconds since boot */
2651    abi_ulong loads[3];             /* 1, 5, and 15 minute load averages */
2652    abi_ulong totalram;             /* Total usable main memory size */
2653    abi_ulong freeram;              /* Available memory size */
2654    abi_ulong sharedram;            /* Amount of shared memory */
2655    abi_ulong bufferram;            /* Memory used by buffers */
2656    abi_ulong totalswap;            /* Total swap space size */
2657    abi_ulong freeswap;             /* swap space still available */
2658    unsigned short procs;           /* Number of current processes */
2659    unsigned short pad;             /* explicit padding for m68k */
2660    abi_ulong totalhigh;            /* Total high memory size */
2661    abi_ulong freehigh;             /* Available high memory size */
2662    unsigned int mem_unit;          /* Memory unit size in bytes */
2663    char _f[20-2*sizeof(abi_long)-sizeof(int)]; /* Padding: libc5 uses this.. */
2664};
2665
2666struct linux_dirent {
2667    long            d_ino;
2668    unsigned long   d_off;
2669    unsigned short  d_reclen;
2670    char            d_name[256]; /* We must not include limits.h! */
2671};
2672
2673struct linux_dirent64 {
2674    uint64_t        d_ino;
2675    int64_t         d_off;
2676    unsigned short  d_reclen;
2677    unsigned char   d_type;
2678    char            d_name[256];
2679};
2680
2681struct target_mq_attr {
2682    abi_long mq_flags;
2683    abi_long mq_maxmsg;
2684    abi_long mq_msgsize;
2685    abi_long mq_curmsgs;
2686};
2687
2688struct target_drm_version {
2689    int version_major;
2690    int version_minor;
2691    int version_patchlevel;
2692    abi_ulong name_len;
2693    abi_ulong name;
2694    abi_ulong date_len;
2695    abi_ulong date;
2696    abi_ulong desc_len;
2697    abi_ulong desc;
2698};
2699
2700struct target_drm_i915_getparam {
2701    int param;
2702    abi_ulong value;
2703};
2704
2705#include "socket.h"
2706
2707#include "errno_defs.h"
2708
2709#define FUTEX_WAIT              0
2710#define FUTEX_WAKE              1
2711#define FUTEX_FD                2
2712#define FUTEX_REQUEUE           3
2713#define FUTEX_CMP_REQUEUE       4
2714#define FUTEX_WAKE_OP           5
2715#define FUTEX_LOCK_PI           6
2716#define FUTEX_UNLOCK_PI         7
2717#define FUTEX_TRYLOCK_PI        8
2718#define FUTEX_WAIT_BITSET       9
2719#define FUTEX_WAKE_BITSET       10
2720
2721#define FUTEX_PRIVATE_FLAG      128
2722#define FUTEX_CLOCK_REALTIME    256
2723#define FUTEX_CMD_MASK          ~(FUTEX_PRIVATE_FLAG | FUTEX_CLOCK_REALTIME)
2724
2725#ifdef CONFIG_EPOLL
2726#if defined(TARGET_X86_64)
2727#define TARGET_EPOLL_PACKED QEMU_PACKED
2728#else
2729#define TARGET_EPOLL_PACKED
2730#endif
2731
2732typedef union target_epoll_data {
2733    abi_ulong ptr;
2734    abi_int fd;
2735    abi_uint u32;
2736    abi_ullong u64;
2737} target_epoll_data_t;
2738
2739struct target_epoll_event {
2740    abi_uint events;
2741    target_epoll_data_t data;
2742} TARGET_EPOLL_PACKED;
2743
2744#define TARGET_EP_MAX_EVENTS (INT_MAX / sizeof(struct target_epoll_event))
2745
2746#endif
2747struct target_rlimit64 {
2748    uint64_t rlim_cur;
2749    uint64_t rlim_max;
2750};
2751
2752struct target_ucred {
2753    uint32_t pid;
2754    uint32_t uid;
2755    uint32_t gid;
2756};
2757
2758typedef int32_t target_timer_t;
2759
2760#define TARGET_SIGEV_MAX_SIZE 64
2761
2762/* This is architecture-specific but most architectures use the default */
2763#ifdef TARGET_MIPS
2764#define TARGET_SIGEV_PREAMBLE_SIZE (sizeof(int32_t) * 2 + sizeof(abi_long))
2765#else
2766#define TARGET_SIGEV_PREAMBLE_SIZE (sizeof(int32_t) * 2 \
2767                                    + sizeof(target_sigval_t))
2768#endif
2769
2770#define TARGET_SIGEV_PAD_SIZE ((TARGET_SIGEV_MAX_SIZE \
2771                                - TARGET_SIGEV_PREAMBLE_SIZE) \
2772                               / sizeof(int32_t))
2773
2774struct target_sigevent {
2775    target_sigval_t sigev_value;
2776    abi_int sigev_signo;
2777    abi_int sigev_notify;
2778    union {
2779        abi_int _pad[TARGET_SIGEV_PAD_SIZE];
2780        abi_int _tid;
2781
2782        /* The kernel (and thus QEMU) never looks at these;
2783         * they're only used as part of the ABI between a
2784         * userspace program and libc.
2785         */
2786        struct {
2787            abi_ulong _function;
2788            abi_ulong _attribute;
2789        } _sigev_thread;
2790    } _sigev_un;
2791};
2792
2793struct target_user_cap_header {
2794    uint32_t version;
2795    int pid;
2796};
2797
2798struct target_user_cap_data {
2799    uint32_t effective;
2800    uint32_t permitted;
2801    uint32_t inheritable;
2802};
2803
2804/* from kernel's include/linux/syslog.h */
2805
2806/* Close the log.  Currently a NOP. */
2807#define TARGET_SYSLOG_ACTION_CLOSE          0
2808/* Open the log. Currently a NOP. */
2809#define TARGET_SYSLOG_ACTION_OPEN           1
2810/* Read from the log. */
2811#define TARGET_SYSLOG_ACTION_READ           2
2812/* Read all messages remaining in the ring buffer. */
2813#define TARGET_SYSLOG_ACTION_READ_ALL       3
2814/* Read and clear all messages remaining in the ring buffer */
2815#define TARGET_SYSLOG_ACTION_READ_CLEAR     4
2816/* Clear ring buffer. */
2817#define TARGET_SYSLOG_ACTION_CLEAR          5
2818/* Disable printk's to console */
2819#define TARGET_SYSLOG_ACTION_CONSOLE_OFF    6
2820/* Enable printk's to console */
2821#define TARGET_SYSLOG_ACTION_CONSOLE_ON     7
2822/* Set level of messages printed to console */
2823#define TARGET_SYSLOG_ACTION_CONSOLE_LEVEL  8
2824/* Return number of unread characters in the log buffer */
2825#define TARGET_SYSLOG_ACTION_SIZE_UNREAD    9
2826/* Return size of the log buffer */
2827#define TARGET_SYSLOG_ACTION_SIZE_BUFFER   10
2828
2829struct target_statx_timestamp {
2830   int64_t tv_sec;
2831   uint32_t tv_nsec;
2832   int32_t __reserved;
2833};
2834
2835struct target_statx {
2836   /* 0x00 */
2837   uint32_t stx_mask;       /* What results were written [uncond] */
2838   uint32_t stx_blksize;    /* Preferred general I/O size [uncond] */
2839   uint64_t stx_attributes; /* Flags conveying information about the file */
2840   /* 0x10 */
2841   uint32_t stx_nlink;      /* Number of hard links */
2842   uint32_t stx_uid;        /* User ID of owner */
2843   uint32_t stx_gid;        /* Group ID of owner */
2844   uint16_t stx_mode;       /* File mode */
2845   uint16_t __spare0[1];
2846   /* 0x20 */
2847   uint64_t stx_ino;        /* Inode number */
2848   uint64_t stx_size;       /* File size */
2849   uint64_t stx_blocks;     /* Number of 512-byte blocks allocated */
2850   uint64_t stx_attributes_mask; /* Mask to show what is supported */
2851   /* 0x40 */
2852   struct target_statx_timestamp  stx_atime;  /* Last access time */
2853   struct target_statx_timestamp  stx_btime;  /* File creation time */
2854   struct target_statx_timestamp  stx_ctime;  /* Last attribute change time */
2855   struct target_statx_timestamp  stx_mtime;  /* Last data modification time */
2856   /* 0x80 */
2857   uint32_t stx_rdev_major;   /* Device ID of special file [if bdev/cdev] */
2858   uint32_t stx_rdev_minor;
2859   uint32_t stx_dev_major; /* ID of device containing file [uncond] */
2860   uint32_t stx_dev_minor;
2861   /* 0x90 */
2862   uint64_t __spare2[14];  /* Spare space for future expansion */
2863   /* 0x100 */
2864};
2865
2866#endif
2867