
/*--------------------------------------------------------------------*/
/*--- mips/Linux-specific kernel interface.     vki-mips64-linux.h ---*/
/*--------------------------------------------------------------------*/

/*
   This file is part of Valgrind, a dynamic binary instrumentation
   framework.

   Copyright (C) 2010-2013 RT-RK
      mips-valgrind@rt-rk.com

   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
   published by the Free Software Foundation; either version 2 of the
   License, or (at your option) any later version.

   This program is distributed in the hope that it will be useful, but
   WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
   02111-1307, USA.
*/

#ifndef __VKI_MIPS64_LINUX_H
#define __VKI_MIPS64_LINUX_H

#include <config.h>

// mips endian
#if defined (_MIPSEL)
#define VKI_LITTLE_ENDIAN  1
#elif defined (_MIPSEB)
#define VKI_BIG_ENDIAN  1
#endif

//----------------------------------------------------------------------
// From linux-2.6.35.9/include/asm-mips/cachectl.h
//----------------------------------------------------------------------

#define VKI_ICACHE  (1<<0)          /* flush instruction cache        */
#define VKI_DCACHE  (1<<1)          /* writeback and flush data cache */
#define VKI_BCACHE  (VKI_ICACHE | VKI_DCACHE) /* flush both caches    */

//----------------------------------------------------------------------
// From linux-2.6.35.9/include/mips-mips/types.h
//----------------------------------------------------------------------

typedef __signed__ char __vki_s8;
typedef unsigned   char __vki_u8;

typedef __signed__ short __vki_s16;
typedef unsigned   short __vki_u16;

typedef __signed__ int __vki_s32;
typedef unsigned   int __vki_u32;

typedef __signed char vki_s8;
typedef unsigned char vki_u8;

typedef __signed short vki_s16;
typedef unsigned short vki_u16;

typedef __signed int vki_s32;
typedef unsigned int vki_u32;

#if (_MIPS_SZLONG == 64)
typedef __signed__ long __vki_s64;
typedef unsigned   long __vki_u64;
#else
typedef __signed__ long long __vki_s64;
typedef unsigned   long long __vki_u64;
#endif

//----------------------------------------------------------------------
// From linux-2.6.35.9/include/asm-mips/page.h
//----------------------------------------------------------------------

/* PAGE_SHIFT determines the page size */
#define VKI_PAGE_SHIFT  MIPS_PAGE_SHIFT
#define VKI_PAGE_SIZE   (1UL << VKI_PAGE_SHIFT)
#define VKI_PAGE_MASK   (~(VKI_PAGE_SIZE-1))
#define VKI_MAX_PAGE_SHIFT      VKI_PAGE_SHIFT
#define VKI_MAX_PAGE_SIZE       VKI_PAGE_SIZE

//----------------------------------------------------------------------
// From linux-2.6.35.9/arch/mips/include/bits/shm.h
//----------------------------------------------------------------------

#define VKI_SHMLBA  0x40000

//----------------------------------------------------------------------
// From linux-2.6.35.9/include/asm-mips/signal.h
//----------------------------------------------------------------------

#define VKI_MINSIGSTKSZ 2048

#define VKI_SIG_BLOCK   1  /* for blocking signals */
#define VKI_SIG_UNBLOCK 2  /* for unblocking signals */
#define VKI_SIG_SETMASK 3  /* for setting the signal mask */

/* Type of a signal handler.  */
typedef void __vki_signalfn_t(int);
typedef __vki_signalfn_t __user *__vki_sighandler_t;

typedef void __vki_restorefn_t(void);
typedef __vki_restorefn_t __user *__vki_sigrestore_t;

#define VKI_SIG_DFL     ((__vki_sighandler_t)0)   /* default signal handling */
#define VKI_SIG_IGN     ((__vki_sighandler_t)1)   /* ignore signal */
#define VKI_SIG_ERR     ((__vki_sighandler_t)-1)  /* error return from signal */

#define _VKI_NSIG       128
#define _VKI_NSIG_BPW   64
#define _VKI_NSIG_WORDS (_VKI_NSIG / _VKI_NSIG_BPW)

typedef unsigned long vki_old_sigset_t;  /* at least 32 bits */

typedef struct {
        unsigned long sig[_VKI_NSIG_WORDS];
} vki_sigset_t;

#define VKI_SIGHUP           1          /* Hangup (POSIX).                    */
#define VKI_SIGINT           2          /* Interrupt (ANSI).                  */
#define VKI_SIGQUIT          3          /* Quit (POSIX).                      */
#define VKI_SIGILL           4          /* Illegal instruction (ANSI).        */
#define VKI_SIGTRAP          5          /* Trace trap (POSIX).                */
#define VKI_SIGIOT           6          /* IOT trap (4.2 BSD).                */
#define VKI_SIGABRT          VKI_SIGIOT /* Abort (ANSI).                      */
#define VKI_SIGEMT           7
#define VKI_SIGFPE           8          /* Floating-point exception (ANSI).   */
#define VKI_SIGKILL          9          /* Kill, unblockable (POSIX).         */
#define VKI_SIGBUS          10          /* BUS error (4.2 BSD).               */
#define VKI_SIGSEGV         11          /* Segmentation violation (ANSI).     */
#define VKI_SIGSYS          12
#define VKI_SIGPIPE         13          /* Broken pipe (POSIX).               */
#define VKI_SIGALRM         14          /* Alarm clock (POSIX).               */
#define VKI_SIGTERM         15          /* Termination (ANSI).                */
#define VKI_SIGUSR1         16          /* User-defined signal 1 (POSIX).     */
#define VKI_SIGUSR2         17          /* User-defined signal 2 (POSIX).     */
#define VKI_SIGCHLD         18          /* Child status has changed (POSIX).  */
#define VKI_SIGCLD          VKI_SIGCHLD /* Same as SIGCHLD (System V).        */
#define VKI_SIGPWR          19          /* Power failure restart (System V).  */
#define VKI_SIGWINCH        20          /* Window size change (4.3 BSD, Sun). */
#define VKI_SIGURG          21          /* Urgent condition on socket.        */
#define VKI_SIGIO           22          /* I/O now possible (4.2 BSD).        */
#define VKI_SIGPOLL         VKI_SIGIO   /* Pollable event occurred (System V).*/
#define VKI_SIGSTOP         23          /* Stop, unblockable (POSIX).         */
#define VKI_SIGTSTP         24          /* Keyboard stop (POSIX).             */
#define VKI_SIGCONT         25          /* Continue (POSIX).                  */
#define VKI_SIGTTIN         26          /* Background read from tty (POSIX).  */
#define VKI_SIGTTOU         27          /* Background write to tty (POSIX).   */
#define VKI_SIGVTALRM       28          /* Virtual alarm clock (4.2 BSD).     */
#define VKI_SIGPROF         29          /* Profiling alarm clock (4.2 BSD).   */
#define VKI_SIGXCPU         30          /* CPU limit exceeded (4.2 BSD).      */
#define VKI_SIGXFSZ         31          /* File size limit exceeded (4.2 BSD).*/

/* These should not be considered constants from userland.  */
#define VKI_SIGRTMIN    32
// [[This was (_NSIG-1) in 2.4.X... not sure if it matters.]]
#define VKI_SIGRTMAX    (_VKI_NSIG - 1)

#define VKI_SA_ONSTACK      0x08000000u
#define VKI_SA_RESETHAND    0x80000000u
#define VKI_SA_RESTART      0x10000000u
#define VKI_SA_SIGINFO      0x00000008u
#define VKI_SA_NODEFER      0x40000000u
#define VKI_SA_NOCLDWAIT    0x00010000u
#define VKI_SA_NOCLDSTOP    0x00000001u

#define VKI_SA_NOMASK           VKI_SA_NODEFER
#define VKI_SA_ONESHOT          VKI_SA_RESETHAND
//#define VKI_SA_INTERRUPT      0x20000000  /* dummy -- ignored */

#define VKI_SA_RESTORER         0x04000000

#define VKI_SS_ONSTACK          1
#define VKI_SS_DISABLE          2

struct vki_old_sigaction {
       // [[Nb: a 'k' prefix is added to "sa_handler" because
       // bits/sigaction.h (which gets dragged in somehow via signal.h)
       // #defines it as something else.  Since that is done for glibc's
       // purposes, which we don't care about here, we use our own name.]]
       unsigned long sa_flags;
       __vki_sighandler_t ksa_handler;
       vki_old_sigset_t sa_mask;
       __vki_sigrestore_t sa_restorer;
};

struct vki_sigaction {
       unsigned int    sa_flags;
       __vki_sighandler_t  sa_handler;
       vki_sigset_t        sa_mask;
};


struct vki_sigaction_base {
       // [[See comment about extra 'k' above]]
       unsigned int sa_flags;
       __vki_sighandler_t ksa_handler;
       vki_sigset_t sa_mask;           // mask last for extensibility
       __vki_sigrestore_t sa_restorer;
};

/* On Linux we use the same type for passing sigactions to
   and from the kernel.  Hence: */
typedef  struct vki_sigaction_base  vki_sigaction_toK_t;
typedef  struct vki_sigaction_base  vki_sigaction_fromK_t;

typedef struct vki_sigaltstack {
        void __user *ss_sp;
        vki_size_t ss_size;
        int ss_flags;
} vki_stack_t;

//----------------------------------------------------------------------
// From linux-2.6.35.9/include/asm-mips/sigcontext.h
//----------------------------------------------------------------------

struct _vki_fpreg {
       unsigned short significand[4];
       unsigned short exponent;
};

struct _vki_fpxreg {
       unsigned short significand[4];
       unsigned short exponent;
       unsigned short padding[3];
};

struct _vki_xmmreg {
       unsigned long element[4];
};

struct _vki_fpstate {
       /* Regular FPU environment */
       unsigned long    cw;
       unsigned long    sw;
       unsigned long    tag;
       unsigned long    ipoff;
       unsigned long    cssel;
       unsigned long    dataoff;
       unsigned long    datasel;
       struct _vki_fpreg    _st[8];
       unsigned short   status;
       unsigned short   magic;           /* 0xffff = regular FPU data only */

       /* FXSR FPU environment */
       unsigned long    _fxsr_env[6];    /* FXSR FPU env is ignored */
       unsigned long    mxcsr;
       unsigned long    reserved;
       struct _vki_fpxreg   _fxsr_st[8]; /* FXSR FPU reg data is ignored */
       struct _vki_xmmreg   _xmm[8];
       unsigned long    padding[56];
};

//----------------------------------------------------------------------
// From linux-2.6.35.9/include/asm-mips/sigcontext.h
//----------------------------------------------------------------------
struct vki_sigcontext {
       __vki_u64   sc_regs[32];
       __vki_u64   sc_fpregs[32];
       __vki_u64   sc_mdhi;
       __vki_u64   sc_hi1;
       __vki_u64   sc_hi2;
       __vki_u64   sc_hi3;
       __vki_u64   sc_mdlo;
       __vki_u64   sc_lo1;
       __vki_u64   sc_lo2;
       __vki_u64   sc_lo3;
       __vki_u64   sc_pc;
       __vki_u64   sc_fpc_csr;
       __vki_u64   sc_used_math;
       __vki_u64   sc_dsp;
       __vki_u64   sc_reserved;
};

//----------------------------------------------------------------------
// From linux-2.6.35.9/include/asm-mips/mman.h
//----------------------------------------------------------------------

#define VKI_PROT_NONE       0x0      /* No page permissions */
#define VKI_PROT_READ       0x1      /* page can be read */
#define VKI_PROT_WRITE      0x2      /* page can be written */
#define VKI_PROT_EXEC       0x4      /* page can be executed */
#define VKI_PROT_GROWSDOWN  0x01000000  /* mprotect flag: extend change to start
                                           of growsdown vma */
#define VKI_PROT_GROWSUP    0x02000000  /* mprotect flag: extend change to end
                                           of growsup vma */

#define VKI_MAP_SHARED      0x001     /* Share changes */
#define VKI_MAP_PRIVATE     0x002     /* Changes are private */
//#define VKI_MAP_TYPE      0x0f        /* Mask for type of mapping */
#define VKI_MAP_FIXED       0x010     /* Interpret addr exactly */

#define VKI_MAP_NORESERVE   0x0400   /* don't reserve swap pages */

/* These are linux-specific */
#define VKI_MAP_NORESERVE   0x0400          /* don't check for reservations */
#define VKI_MAP_ANONYMOUS   0x0800          /* don't use a file */
#define VKI_MAP_GROWSDOWN   0x1000          /* stack-like segment */
#define VKI_MAP_DENYWRITE   0x2000          /* ETXTBSY */
#define VKI_MAP_EXECUTABLE  0x4000          /* mark it as an executable */
#define VKI_MAP_LOCKED      0x8000          /* pages are locked */
#define VKI_MAP_POPULATE    0x10000         /* populate (prefault) pagetables */
#define VKI_MAP_NONBLOCK    0x20000         /* do not block on IO */

//----------------------------------------------------------------------
// From linux-2.6.35.9/include/asm-mips/fcntl.h
//----------------------------------------------------------------------

#define VKI_O_RDONLY        00
#define VKI_O_WRONLY        01
#define VKI_O_RDWR          02
#define VKI_O_ACCMODE       03

#define VKI_O_CREAT         0x0100      /* not fcntl */
#define VKI_O_EXCL          0x0400      /* not fcntl */

#define VKI_O_TRUNC         0x0200      /* not fcntl */

#define VKI_O_APPEND        0x0008
#define VKI_O_NONBLOCK      0x0080
#define VKI_O_LARGEFILE     0x2000

#define VKI_AT_FDCWD        -100

#define VKI_F_DUPFD         0           /* dup */
#define VKI_F_GETFD         1           /* get close_on_exec */
#define VKI_F_SETFD         2           /* set/clear close_on_exec */
#define VKI_F_GETFL         3           /* get file->f_flags */
#define VKI_F_SETFL         4           /* set file->f_flags */

#define VKI_F_GETLK         14
#define VKI_F_SETLK         6
#define VKI_F_SETLKW        7

#define VKI_F_SETOWN        24          /*  for sockets. */
#define VKI_F_GETOWN        23          /*  for sockets. */
#define VKI_F_SETSIG        10          /*  for sockets. */
#define VKI_F_GETSIG        11          /*  for sockets. */

#define VKI_F_SETOWN_EX     15
#define VKI_F_GETOWN_EX     16

#define VKI_F_OFD_GETLK     36
#define VKI_F_OFD_SETLK     37
#define VKI_F_OFD_SETLKW    38

#define VKI_F_GETLK64       33          /*  using 'struct flock64' */
#define VKI_F_SETLK64       34
#define VKI_F_SETLKW64      35

/* for F_[GET|SET]FL */
#define VKI_FD_CLOEXEC      1      /* actually anything with low bit set goes */

#define VKI_F_LINUX_SPECIFIC_BASE 1024

struct vki_f_owner_ex {
       int type;
       __vki_kernel_pid_t pid;
};

//----------------------------------------------------------------------
// From linux-2.6.35.9/include/asm-mips/resource.h
//----------------------------------------------------------------------

#define VKI_RLIMIT_DATA     2   /* max data size */
#define VKI_RLIMIT_STACK    3   /* max stack size */
#define VKI_RLIMIT_CORE     4   /* max core file size */
#define VKI_RLIMIT_NOFILE   5   /* max number of open files */

//----------------------------------------------------------------------
// From linux-2.6.35.9/include/asm-mips/socket.h
//----------------------------------------------------------------------

#define VKI_SOL_SOCKET   0xffff

#define VKI_SO_TYPE      0x1008

#define VKI_SO_ATTACH_FILTER	26

//----------------------------------------------------------------------
// From linux-2.6.35.9/include/asm-i386/sockios.h
//----------------------------------------------------------------------

#define VKI_SIOCSPGRP           0x8902
#define VKI_SIOCGPGRP           0x8904
#define VKI_SIOCATMARK          0x8905
#define VKI_SIOCGSTAMP          0x8906      /* Get stamp (timeval) */
#define VKI_SIOCGSTAMPNS        0x8907      /* Get stamp (timespec) */

//----------------------------------------------------------------------
// From linux-2.6.35.9/include/asm-mips/stat.h
//----------------------------------------------------------------------

struct vki_stat {
        unsigned int    st_dev;
        unsigned int    st_pad0[3];     /* Reserved for st_dev expansion  */

        unsigned long   st_ino;

        int             st_mode;
        unsigned int    st_nlink;

        unsigned int    st_uid;
        unsigned int    st_gid;

        unsigned int    st_rdev;
        unsigned int    st_pad1[3];     /* Reserved for st_rdev expansion  */

        long            st_size;

        /*
         * Actually this should be timestruc_t st_atime, st_mtime and st_ctime
         * but we don't have it under Linux.
         */
        unsigned int    st_atime;
        unsigned int    st_atime_nsec;  /* Reserved for st_atime expansion  */

        unsigned int    st_mtime;
        unsigned int    st_mtime_nsec;  /* Reserved for st_mtime expansion  */

        unsigned int    st_ctime;
        unsigned int    st_ctime_nsec;  /* Reserved for st_ctime expansion  */

        unsigned int    st_blksize;
        unsigned int    st_pad2;

        long long       st_blocks;
};

struct vki_stat64 {
        unsigned long   st_dev;
        unsigned long   st_pad0[3];     /* Reserved for st_dev expansion  */

        unsigned long long      st_ino;

        int             st_mode;
        unsigned int    st_nlink;

        unsigned int    st_uid;
        unsigned int    st_gid;

        unsigned long   st_rdev;
        unsigned long   st_pad1[3];     /* Reserved for st_rdev expansion  */

        long long       st_size;

        /*
         * Actually this should be timestruc_t st_atime, st_mtime and st_ctime
         * but we don't have it under Linux.
         */
        unsigned long   st_atime;
        unsigned long   st_atime_nsec;  /* Reserved for st_atime expansion  */

        unsigned long   st_mtime;
        unsigned long   st_mtime_nsec;  /* Reserved for st_mtime expansion  */

        unsigned long   st_ctime;
        unsigned long   st_ctime_nsec;  /* Reserved for st_ctime expansion  */

        unsigned long   st_blksize;
        unsigned long   st_pad2;

        long long       st_blocks;
};

//----------------------------------------------------------------------
// From linux-2.6.35.9/include/asm-mips/statfs.h
//----------------------------------------------------------------------

struct vki_statfs {
       __vki_u32 f_type;
#define f_fstyp f_type
       __vki_u32 f_bsize;
       __vki_u32 f_frsize;
       __vki_u32 f_blocks;
       __vki_u32 f_bfree;
       __vki_u32 f_files;
       __vki_u32 f_ffree;
       __vki_u32 f_bavail;
       __vki_kernel_fsid_t f_fsid;
       __vki_u32 f_namelen;
       __vki_u32 f_spare[6];
};

//----------------------------------------------------------------------
// From linux-2.6.35.9/include/asm-mips/termios.h
//----------------------------------------------------------------------

struct vki_winsize {
       unsigned short ws_row;
       unsigned short ws_col;
       unsigned short ws_xpixel;
       unsigned short ws_ypixel;
};

#define NCC     8
#define NCCS    23
struct vki_termio {
       unsigned short c_iflag;      /* input mode flags */
       unsigned short c_oflag;      /* output mode flags */
       unsigned short c_cflag;      /* control mode flags */
       unsigned short c_lflag;      /* local mode flags */
       char           c_line;       /* line discipline */
       unsigned char  c_cc[NCCS];   /* control characters */
};

//----------------------------------------------------------------------
// From linux-2.6.35.9/include/asm-mips/termbits.h
//----------------------------------------------------------------------

typedef unsigned char   vki_cc_t;
typedef unsigned long   vki_speed_t;
typedef unsigned long   vki_tcflag_t;

struct vki_termios {
       vki_tcflag_t c_iflag;        /* input mode flags */
       vki_tcflag_t c_oflag;        /* output mode flags */
       vki_tcflag_t c_cflag;        /* control mode flags */
       vki_tcflag_t c_lflag;        /* local mode flags */
       vki_cc_t c_line;             /* line discipline */
       vki_cc_t c_cc[NCCS];         /* control characters */
};

//----------------------------------------------------------------------
// From linux-2.6.35.9/include/asm-mips/ioctl.h
//----------------------------------------------------------------------

#define _VKI_IOC_NRBITS     8
#define _VKI_IOC_TYPEBITS   8
#define _VKI_IOC_SIZEBITS   13
#define _VKI_IOC_DIRBITS    3

#define _VKI_IOC_NRMASK     ((1 << _VKI_IOC_NRBITS)-1)
#define _VKI_IOC_TYPEMASK   ((1 << _VKI_IOC_TYPEBITS)-1)
#define _VKI_IOC_SIZEMASK   ((1 << _VKI_IOC_SIZEBITS)-1)
#define _VKI_IOC_DIRMASK    ((1 << _VKI_IOC_DIRBITS)-1)

#define _VKI_IOC_NRSHIFT    0
#define _VKI_IOC_TYPESHIFT  (_VKI_IOC_NRSHIFT+_VKI_IOC_NRBITS)
#define _VKI_IOC_SIZESHIFT  (_VKI_IOC_TYPESHIFT+_VKI_IOC_TYPEBITS)
#define _VKI_IOC_DIRSHIFT   (_VKI_IOC_SIZESHIFT+_VKI_IOC_SIZEBITS)

#define _VKI_IOC_NONE   1U
#define _VKI_IOC_READ   2U
#define _VKI_IOC_WRITE  4U

#define _VKI_IOC(dir,type,nr,size) \
                (((dir)  << _VKI_IOC_DIRSHIFT) | \
                ((type) << _VKI_IOC_TYPESHIFT) | \
                ((nr)   << _VKI_IOC_NRSHIFT) | \
                ((size) << _VKI_IOC_SIZESHIFT))

/* provoke compile error for invalid uses of size argument */
extern unsigned int __VKI_invalid_size_argument_for_IOC;
/* used to create numbers */
#define _VKI_IO(type,nr)        _VKI_IOC(_VKI_IOC_NONE,(type),(nr),0)
#define _VKI_IOR(type,nr,size)  _VKI_IOC(_VKI_IOC_READ,(type),(nr), \
                                (_VKI_IOC_TYPECHECK(size)))
#define _VKI_IOW(type,nr,size)  _VKI_IOC(_VKI_IOC_WRITE,(type),(nr), \
                                (_VKI_IOC_TYPECHECK(size)))
#define _VKI_IOWR(type,nr,size) _VKI_IOC(_VKI_IOC_READ|_VKI_IOC_WRITE,(type), \
                                (nr),(_VKI_IOC_TYPECHECK(size)))

/* used to decode ioctl numbers.. */
#define _VKI_IOC_DIR(nr)    (((nr) >> _VKI_IOC_DIRSHIFT) & _VKI_IOC_DIRMASK)
#define _VKI_IOC_TYPE(nr)   (((nr) >> _VKI_IOC_TYPESHIFT) & _VKI_IOC_TYPEMASK)
#define _VKI_IOC_NR(nr)     (((nr) >> _VKI_IOC_NRSHIFT) & _VKI_IOC_NRMASK)
#define _VKI_IOC_SIZE(nr)   (((nr) >> _VKI_IOC_SIZESHIFT) & _VKI_IOC_SIZEMASK)

//----------------------------------------------------------------------
// From linux-2.6.35.9/include/asm-mips/ioctls.h
//----------------------------------------------------------------------

#define VKI_TCGETA              0x5401
#define VKI_TCSETA              0x5402 /* Clashes with SNDCTL_TMR_START
                                          sound ioctl */
#define VKI_TCSETAW             0x5403
#define VKI_TCSETAF             0x5404

#define VKI_TCSBRK              0x5405
#define VKI_TCXONC              0x5406
#define VKI_TCFLSH              0x5407

#define VKI_TCGETS              0x540d
#define VKI_TCSETS              0x540e
#define VKI_TCSETSW             0x540f
#define VKI_TCSETSF             0x5410

#define VKI_TIOCEXCL            0x740d  /* set exclusive use of tty */
#define VKI_TIOCNXCL            0x740e  /* reset exclusive use of tty */
#define VKI_TIOCOUTQ            0x7472  /* output queue size */
#define VKI_TIOCSTI             0x5472  /* simulate terminal input */
#define VKI_TIOCMGET            0x741d  /* get all modem bits */
#define VKI_TIOCMBIS            0x741b  /* bis modem bits */
#define VKI_TIOCMBIC            0x741c  /* bic modem bits */
#define VKI_TIOCMSET            0x741a  /* set all modem bits */
#define VKI_TIOCPKT             0x5470  /* pty: set/clear packet mode */
#define VKI_TIOCPKT_DATA        0x00    /* data packet */
#define VKI_TIOCPKT_FLUSHREAD   0x01    /* flush packet */
#define VKI_TIOCPKT_FLUSHWRITE  0x02    /* flush packet */
#define VKI_TIOCPKT_STOP        0x04    /* stop output */
#define VKI_TIOCPKT_START       0x08    /* start output */
#define VKI_TIOCPKT_NOSTOP      0x10    /* no more ^S, ^Q */
#define VKI_TIOCPKT_DOSTOP      0x20    /* now do ^S ^Q */

/* set window size */
#define VKI_TIOCSWINSZ          _VKI_IOW('t', 103, struct vki_winsize)
/* get window size */
#define VKI_TIOCGWINSZ          _VKI_IOR('t', 104, struct vki_winsize)
#define VKI_TIOCNOTTY           0x5471 /* void tty association */
#define VKI_TIOCSETD            0x7401
#define VKI_TIOCGETD            0x7400

#define VKI_FIOCLEX             0x6601
#define VKI_FIONCLEX            0x6602
#define VKI_FIOASYNC            0x667d
#define VKI_FIONBIO             0x667e
#define VKI_FIOQSIZE            0x667f

#define VKI_TIOCGLTC            0x7474 /* get special local chars */
#define VKI_TIOCSLTC            0x7475 /* set special local chars */
#define VKI_TIOCSPGRP           _VKI_IOW('t', 118, int) /* set pgrp of tty */
#define VKI_TIOCGPGRP           _VKI_IOR('t', 119, int) /* get pgrp of tty */
#define VKI_TIOCCONS            _VKI_IOW('t', 120, int) /* become virtual
                                                           console */

#define VKI_FIONREAD            0x467f
#define VKI_TIOCINQ             FIONREAD

#define VKI_TIOCGETP            0x7408
#define VKI_TIOCSETP            0x7409
#define VKI_TIOCSETN            0x740a /* TIOCSETP wo flush */

#define VKI_TIOCSBRK            0x5427 /* BSD compatibility */
#define VKI_TIOCCBRK            0x5428 /* BSD compatibility */
#define VKI_TIOCGSID            0x7416 /* Return the session ID of FD */
#define VKI_TIOCGPTN            _VKI_IOR('T',0x30, unsigned int) /* Get Pty
                                                   Number (of pty-mux device) */
#define VKI_TIOCSPTLCK          _VKI_IOW('T',0x31, int) /* Lock/unlock Pty */

/* I hope the range from 0x5480 on is free ... */
#define VKI_TIOCSCTTY           0x5480 /* become controlling tty */
#define VKI_TIOCGSOFTCAR        0x5481
#define VKI_TIOCSSOFTCAR        0x5482
#define VKI_TIOCLINUX           0x5483
#define VKI_TIOCGSERIAL         0x5484
#define VKI_TIOCSSERIAL         0x5485
#define VKI_TCSBRKP             0x5486 /* Needed for POSIX tcsendbreak() */
#define VKI_TIOCSERCONFIG       0x5488
#define VKI_TIOCSERGWILD        0x5489
#define VKI_TIOCSERSWILD        0x548a
#define VKI_TIOCGLCKTRMIOS      0x548b
#define VKI_TIOCSLCKTRMIOS      0x548c
#define VKI_TIOCSERGSTRUCT      0x548d /* For debugging only */
#define VKI_TIOCSERGETLSR       0x548e /* Get line status register */
#define VKI_TIOCSERGETMULTI     0x548f /* Get multiport config  */
#define VKI_TIOCSERSETMULTI     0x5490 /* Set multiport config */
#define VKI_TIOCMIWAIT          0x5491 /* wait for a change on serial input
                                          line(s) */
#define VKI_TIOCGICOUNT         0x5492 /* read serial port inline interrupt
                                          counts */
#define VKI_TIOCGHAYESESP       0x5493 /* Get Hayes ESP configuration */
#define VKI_TIOCSHAYESESP       0x5494 /* Set Hayes ESP configuration */

//----------------------------------------------------------------------
// From asm-generic/poll.h
//----------------------------------------------------------------------

/* These are specified by iBCS2 */
#define VKI_POLLIN              0x0001

struct vki_pollfd {
       int fd;
       short events;
       short revents;
};
//----------------------------------------------------------------------
// From linux-2.6.35.9/include/asm-mips/elf.h
//----------------------------------------------------------------------

#define VKI_ELF_NGREG           45  /* includes nip, msr, lr, etc. */
#define VKI_ELF_NFPREG          33  /* includes fpscr */

typedef unsigned long vki_elf_greg_t;
typedef vki_elf_greg_t vki_elf_gregset_t[VKI_ELF_NGREG];

typedef double vki_elf_fpreg_t;
typedef vki_elf_fpreg_t vki_elf_fpregset_t[VKI_ELF_NFPREG];

typedef struct vki_user_fxsr_struct vki_elf_fpxregset_t;

#define VKI_AT_SYSINFO          32
//----------------------------------------------------------------------
// From linux-2.6.35.9/include/asm-mips/ucontext.h
//----------------------------------------------------------------------

struct vki_ucontext {
       unsigned long          uc_flags;
       struct vki_ucontext    *uc_link;
       vki_stack_t            uc_stack;
       struct vki_sigcontext  uc_mcontext;
       vki_sigset_t           uc_sigmask;  /* mask last for extensibility */
};

//----------------------------------------------------------------------
// From linux-2.6.35.9/include/asm-mips/ipcbuf.h
//----------------------------------------------------------------------

struct vki_ipc64_perm {
       __vki_kernel_key_t  key;
       __vki_kernel_uid_t  uid;
       __vki_kernel_gid_t  gid;
       __vki_kernel_uid_t  cuid;
       __vki_kernel_gid_t  cgid;
       __vki_kernel_mode_t mode;
       unsigned short  seq;
       unsigned short  __pad1;
       unsigned long   __unused1;
       unsigned long   __unused2;
};

//----------------------------------------------------------------------
// From linux-2.6.35.9/include/asm-mips/sembuf.h
//----------------------------------------------------------------------

struct vki_semid64_ds {
       struct vki_ipc64_perm sem_perm;         /* permissions .. see ipc.h */
       __vki_kernel_time_t sem_otime;          /* last semop time */
       __vki_kernel_time_t sem_ctime;          /* last change time */
       unsigned long   sem_nsems;              /* no. of semaphores in array */
       unsigned long   __unused1;
       unsigned long   __unused2;
};

//----------------------------------------------------------------------
// From linux-2.6.35.9/include/asm-mips/msgbuf.h
//----------------------------------------------------------------------

struct vki_msqid64_ds {
       struct vki_ipc64_perm msg_perm;
       __vki_kernel_time_t msg_stime;     /* last msgsnd time */
       __vki_kernel_time_t msg_rtime;     /* last msgrcv time */
       __vki_kernel_time_t msg_ctime;     /* last change time */
       unsigned long  msg_cbytes;         /* current number of bytes on queue */
       unsigned long  msg_qnum;           /* number of messages in queue */
       unsigned long  msg_qbytes;         /* max number of bytes on queue */
       __vki_kernel_pid_t msg_lspid;      /* pid of last msgsnd */
       __vki_kernel_pid_t msg_lrpid;      /* last receive pid */
       unsigned long  __unused4;
       unsigned long  __unused5;
};

//----------------------------------------------------------------------
// From linux-2.6.35.9/include/asm-mips/ipc.h
//----------------------------------------------------------------------

struct vki_ipc_kludge {
       struct vki_msgbuf __user *msgp;
       long msgtyp;
};

#define VKI_SEMOP            1
#define VKI_SEMGET           2
#define VKI_SEMCTL           3
#define VKI_SEMTIMEDOP       4
#define VKI_MSGSND          11
#define VKI_MSGRCV          12
#define VKI_MSGGET          13
#define VKI_MSGCTL          14
#define VKI_SHMAT           21
#define VKI_SHMDT           22
#define VKI_SHMGET          23
#define VKI_SHMCTL          24

//----------------------------------------------------------------------
// From linux-2.6.35.9/include/asm-mips/shmbuf.h
//----------------------------------------------------------------------

struct vki_shmid64_ds {
       struct vki_ipc64_perm       shm_perm;       /* operation perms */
       vki_size_t                  shm_segsz;      /* size of segment (bytes) */
       __vki_kernel_time_t         shm_atime;      /* last attach time */
       __vki_kernel_time_t         shm_dtime;      /* last detach time */
       __vki_kernel_time_t         shm_ctime;      /* last change time */
       __vki_kernel_pid_t          shm_cpid;       /* pid of creator */
       __vki_kernel_pid_t          shm_lpid;       /* pid of last operator */
       unsigned long               shm_nattch;     /* no. of current attaches */
       unsigned long               __unused1;
       unsigned long               __unused2;
};

struct vki_shminfo64 {
       unsigned long   shmmax;
       unsigned long   shmmin;
       unsigned long   shmmni;
       unsigned long   shmseg;
       unsigned long   shmall;
       unsigned long   __unused1;
       unsigned long   __unused2;
       unsigned long   __unused3;
       unsigned long   __unused4;
};

//----------------------------------------------------------------------
// From linux-2.6.35.9/include/asm-mips/ptrace.h
//----------------------------------------------------------------------

struct vki_pt_regs {
#ifdef CONFIG_32BIT
        /* Pad bytes for argument save space on the stack. */
       unsigned long pad0[6];
#endif

       /* Saved main processor registers. */
       unsigned long regs[32];

       /* Saved special registers. */
       unsigned long cp0_status;
       unsigned long hi;
       unsigned long lo;
#ifdef CONFIG_CPU_HAS_SMARTMIPS
       unsigned long acx;
#endif
       unsigned long cp0_badvaddr;
       unsigned long cp0_cause;
       unsigned long cp0_epc;
#ifdef CONFIG_MIPS_MT_SMTC
       unsigned long cp0_tcstatus;
#endif /* CONFIG_MIPS_MT_SMTC */
#ifdef CONFIG_CPU_CAVIUM_OCTEON
       unsigned long long mpl[3];        /* MTM{0,1,2} */
       unsigned long long mtp[3];        /* MTP{0,1,2} */
#endif
} __attribute__ ((aligned (8)));


#define vki_user_regs_struct vki_pt_regs

#define MIPS_lo     lo
#define MIPS_hi     hi
#define MIPS_r31    regs[31]
#define MIPS_r30    regs[30]
#define MIPS_r29    regs[29]
#define MIPS_r28    regs[28]
#define MIPS_r27    regs[27]
#define MIPS_r26    regs[26]
#define MIPS_r25    regs[25]
#define MIPS_r24    regs[24]
#define MIPS_r23    regs[23]
#define MIPS_r22    regs[22]
#define MIPS_r21    regs[21]
#define MIPS_r20    regs[20]
#define MIPS_r19    regs[19]
#define MIPS_r18    regs[18]
#define MIPS_r17    regs[17]
#define MIPS_r16    regs[16]
#define MIPS_r15    regs[15]
#define MIPS_r14    regs[14]
#define MIPS_r13    regs[13]
#define MIPS_r12    regs[12]
#define MIPS_r11    regs[11]
#define MIPS_r10    regs[10]
#define MIPS_r9     regs[9]
#define MIPS_r8     regs[8]
#define MIPS_r7     regs[7]
#define MIPS_r6     regs[6]
#define MIPS_r5     regs[5]
#define MIPS_r4     regs[4]
#define MIPS_r3     regs[3]
#define MIPS_r2     regs[2]
#define MIPS_r1     regs[1]
#define MIPS_r0     regs[0]

//----------------------------------------------------------------------
// From linux-2.6.35.9/include/asm-i386/ptrace.h
//----------------------------------------------------------------------

#define VKI_PTRACE_GETREGS            12
#define VKI_PTRACE_SETREGS            13
#define VKI_PTRACE_GETFPREGS          14
#define VKI_PTRACE_SETFPREGS          15
#define VKI_PTRACE_GETFPXREGS         18
#define VKI_PTRACE_SETFPXREGS         19

/* Calls to trace a 64bit program from a 32bit program.  */
#define VKI_PTRACE_PEEKTEXT_3264    0xc0
#define VKI_PTRACE_PEEKDATA_3264    0xc1
#define VKI_PTRACE_POKETEXT_3264    0xc2
#define VKI_PTRACE_POKEDATA_3264    0xc3
#define VKI_PTRACE_GET_THREAD_AREA_3264     0xc4s

//----------------------------------------------------------------------
// From linux-2.6.35.9/include/asm-generic/siginfo.h
//----------------------------------------------------------------------

#define HAVE_ARCH_SIGINFO_T
typedef union vki_sigval {
        int sival_int;
        void __user *sival_ptr;
} vki_sigval_t;

#ifndef __VKI_ARCH_SI_PREAMBLE_SIZE
#define __VKI_ARCH_SI_PREAMBLE_SIZE (4 * sizeof(int))
#endif

#define VKI_SI_MAX_SIZE 128

#ifndef VKI_SI_PAD_SIZE
#define VKI_SI_PAD_SIZE ((VKI_SI_MAX_SIZE - __VKI_ARCH_SI_PREAMBLE_SIZE) / sizeof(int))
#endif

#ifndef __VKI_ARCH_SI_UID_T
#define __VKI_ARCH_SI_UID_T vki_uid_t
#endif

#ifndef __VKI_ARCH_SI_BAND_T
#define __VKI_ARCH_SI_BAND_T long
#endif

typedef struct vki_siginfo {
        int si_signo;
        int si_code;
        int si_errno;
        int __pad0[VKI_SI_MAX_SIZE / sizeof(int) - VKI_SI_PAD_SIZE - 3];

        union {
                int _pad[VKI_SI_PAD_SIZE];

                /* kill() */
                struct {
                        vki_pid_t _pid;             /* sender's pid */
                        __VKI_ARCH_SI_UID_T _uid;   /* sender's uid */
                } _kill;

                /* POSIX.1b timers */
                struct {
                        vki_timer_t _tid;           /* timer id */
                        int _overrun;           /* overrun count */
                        char _pad[sizeof( __VKI_ARCH_SI_UID_T) - sizeof(int)];
                        vki_sigval_t _sigval;       /* same as below */
                        int _sys_private;       /* not to be passed to user */
                } _timer;

                /* POSIX.1b signals */
                struct {
                        vki_pid_t _pid;             /* sender's pid */
                        __VKI_ARCH_SI_UID_T _uid;   /* sender's uid */
                        vki_sigval_t _sigval;
                } _rt;

                /* SIGCHLD */
                struct {
                        vki_pid_t _pid;             /* which child */
                        __VKI_ARCH_SI_UID_T _uid;   /* sender's uid */
                        int _status;            /* exit code */
                        vki_clock_t _utime;
                        vki_clock_t _stime;
                } _sigchld;

                /* IRIX SIGCHLD */
                struct {
                        vki_pid_t _pid;             /* which child */
                        vki_clock_t _utime;
                        int _status;            /* exit code */
                        vki_clock_t _stime;
                } _irix_sigchld;

                /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
                struct {
                        void __user *_addr; /* faulting insn/memory ref. */
#ifdef __ARCH_SI_TRAPNO
                        int _trapno;    /* TRAP # which caused the signal */
#endif
                } _sigfault;

                /* SIGPOLL, SIGXFSZ (To do ...)  */
                struct {
                        __VKI_ARCH_SI_BAND_T _band; /* POLL_IN, POLL_OUT, POLL_MSG */
                        int _fd;
                } _sigpoll;
        } _sifields;
} vki_siginfo_t;

//----------------------------------------------------------------------
// From linux-2.6.35.5/include/asm/break.h
//----------------------------------------------------------------------
#define VKI_BRK_OVERFLOW 6  /* Overflow check */
#define VKI_BRK_DIVZERO  7  /* Divide by zero check */

//----------------------------------------------------------------------
// From linux-3.6.35.5/arch/mips/include/socket.h
//----------------------------------------------------------------------
enum vki_sock_type {
        VKI_SOCK_STREAM = 2,
        // [[others omitted]]
};
#define ARCH_HAS_SOCKET_TYPES 1

//----------------------------------------------------------------------
// From linux-3.13.0/include/asm/errno.h
//----------------------------------------------------------------------

#define	VKI_ENOSYS       89  /* Function not implemented */
#define	VKI_EOVERFLOW    79  /* Value too large for defined data type */

#endif // __VKI_MIPS64_LINUX_H

/*--------------------------------------------------------------------*/
/*--- end                                       vki-mips64-linux.h ---*/
/*--------------------------------------------------------------------*/
