
/*--------------------------------------------------------------------*/
/*--- 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_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_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   14
#define _VKI_IOC_DIRBITS    2

#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_WRITE  2U
#define _VKI_IOC_READ   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

#endif // __VKI_MIPS64_LINUX_H

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