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

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

   Copyright (C) 2010-2015 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.

   The GNU General Public License is contained in the file COPYING.
*/

#ifndef __VKI_MIPS32_LINUX_H
#define __VKI_MIPS32_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.5/include/asm-generic/int-ll64.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;

typedef __signed__ long long __vki_s64;
typedef unsigned long long __vki_u64;


//----------------------------------------------------------------------
// From linux-2.6.35.5/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.5/include/asm/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_NSIG		128
#define _VKI_NSIG_BPW	32
#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 (4.2 BSD).  */
#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

#define VKI_SA_ONSTACK		0x08000000
#define VKI_SA_RESETHAND	0x80000000
#define VKI_SA_RESTART		0x10000000
#define VKI_SA_SIGINFO		0x00000008
#define VKI_SA_NODEFER		0x40000000
#define VKI_SA_NOCLDWAIT	0x00010000
#define VKI_SA_NOCLDSTOP	0x00000001

#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 long 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 2.6.35.5/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.5/include/asm-mips/sigcontext.h
//----------------------------------------------------------------------

struct vki_sigcontext {
        unsigned int            sc_regmask;     /* Unused */
        unsigned int            sc_status;      /* Unused */
        unsigned long long      sc_pc;
        unsigned long long      sc_regs[32];
        unsigned long long      sc_fpregs[32];
        unsigned int            sc_acx;         /* Was sc_ownedfp */
        unsigned int            sc_fpc_csr;
        unsigned int            sc_fpc_eir;     /* Unused */
        unsigned int            sc_used_math;
        unsigned int            sc_dsp;         /* dsp status, was sc_ssflags */
        unsigned long long      sc_mdhi;
        unsigned long long      sc_mdlo;
        unsigned long           sc_hi1;         /* Was sc_cause */
        unsigned long           sc_lo1;         /* Was sc_badvaddr */
        unsigned long           sc_hi2;         /* Was sc_sigset[4] */
        unsigned long           sc_lo2;
        unsigned long           sc_hi3;
        unsigned long           sc_lo3;
};

//----------------------------------------------------------------------
// From linux-2.6.35.5/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_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.5/include/asm-mips/fcntl.h
//----------------------------------------------------------------------

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

#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.5/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.5/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.5/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.5/include/asm-mips/stat.h
//----------------------------------------------------------------------

struct vki_stat {
	unsigned	st_dev;
	long		st_pad1[3];		/* Reserved for network id */
	unsigned long	st_ino;
	unsigned int	st_mode;
	unsigned long	st_nlink;
	unsigned int	st_uid;
	unsigned int	st_gid;
	unsigned 	st_rdev;
	long		st_pad2[2];
	long		st_size;
	long		st_pad3;
	/*
	 * Actually this should be timestruc_t st_atime, st_mtime and st_ctime
	 * but we don't have it under Linux.
	 */
	long		st_atime;
	long		st_atime_nsec;
	long		st_mtime;
	long		st_mtime_nsec;
	long		st_ctime;
	long		st_ctime_nsec;
	long		st_blksize;
	long		st_blocks;
	long		st_pad4[14];
};

/*
 * This matches struct stat64 in glibc2.1, hence the absolutely insane
 * amounts of padding around dev_t's.  The memory layout is the same as of
 * struct stat of the 64-bit kernel.
 */

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

	unsigned long long	st_ino;

	unsigned int	st_mode;
	unsigned long	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.
	 */
	long		st_atime;
	unsigned long	st_atime_nsec;	/* Reserved for st_atime expansion  */

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

	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.5/include/asm-mips/statfs.h
//----------------------------------------------------------------------

struct vki_statfs {
	long		f_type;
	long		f_bsize;
	long		f_frsize;	/* Fragment size - unsupported */
	long		f_blocks;
	long		f_bfree;
	long		f_files;
	long		f_ffree;
	long		f_bavail;

	/* Linux specials */
	__vki_kernel_fsid_t	f_fsid;
	long		f_namelen;
	long		f_spare[6];
};

//----------------------------------------------------------------------
// From linux-2.6.35.5/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.5/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.5/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.5/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 */
/* #define  TIOCPKT_IOCTL		0x40	state change of pty driver */
#define VKI_TIOCSWINSZ	_VKI_IOW('t', 103, struct vki_winsize)	/* set window size */
#define VKI_TIOCGWINSZ	_VKI_IOR('t', 104, struct vki_winsize)	/* get window size */
#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.5/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 */
};

// CAB: TODO
typedef void vki_modify_ldt_t;

//----------------------------------------------------------------------
// From linux-2.6.35.5/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.5/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.5/include/asm-mips/msgbuf.h
//----------------------------------------------------------------------

struct vki_msqid64_ds {
	struct vki_ipc64_perm msg_perm;
	__vki_kernel_time_t msg_stime;	/* last msgsnd time */
	unsigned long	__unused1;
	__vki_kernel_time_t msg_rtime;	/* last msgrcv time */
	unsigned long	__unused2;
	__vki_kernel_time_t msg_ctime;	/* last change time */
	unsigned long	__unused3;
	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.5/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.5/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.5/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_pc		regs[32]
#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]

#define VKI_PTRACE_GETREGS            12
#define VKI_PTRACE_SETREGS            13
#define VKI_PTRACE_GETFPREGS          14
#define VKI_PTRACE_SETFPREGS          15
//----------------------------------------------------------------------
// From linux-2.6.35.5/include/asm-mips/elf.h
//----------------------------------------------------------------------
typedef unsigned long vki_elf_greg_t;

#define VKI_ELF_NGREG (sizeof (struct vki_user_regs_struct) / sizeof(vki_elf_greg_t))
#define VKI_ELF_NFPREG			33	/* includes fpscr */

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.5/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	(3 * 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_MIPS32_LINUX_H

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