
/*--------------------------------------------------------------------*/
/*--- PPC32/Linux-specific kernel interface.     vki-ppc32-linux.h ---*/
/*--------------------------------------------------------------------*/

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

   Copyright (C) 2005-2013 Julian Seward
      jseward@acm.org

   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_PPC32_LINUX_H
#define __VKI_PPC32_LINUX_H

// ppc32 is big-endian.
#define VKI_BIG_ENDIAN  1

//----------------------------------------------------------------------
// From linux-2.6.9/include/asm-ppc/types.h
//----------------------------------------------------------------------

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;

typedef unsigned short vki_u16;

typedef unsigned int vki_u32;

typedef struct {
        __vki_u32 u[4];
} __vki_vector128;

//----------------------------------------------------------------------
// From linux-2.6.9/include/asm-ppc/page.h
//----------------------------------------------------------------------

/* PAGE_SHIFT determines the page size, unfortunately
   page size might vary between 32-bit and 64-bit ppc kernels */
extern UWord VKI_PAGE_SHIFT;
extern UWord VKI_PAGE_SIZE;
#define VKI_MAX_PAGE_SHIFT	16
#define VKI_MAX_PAGE_SIZE	(1UL << VKI_MAX_PAGE_SHIFT)

//----------------------------------------------------------------------
// From linux-2.6.35.4/arch/powerpc/include/asm/shmparam.h
//----------------------------------------------------------------------

#define VKI_SHMLBA  VKI_PAGE_SIZE

//----------------------------------------------------------------------
// From linux-2.6.9/include/asm-ppc/signal.h
//----------------------------------------------------------------------

#define VKI_MINSIGSTKSZ	2048

#define VKI_SIG_BLOCK         0    /* for blocking signals */
#define VKI_SIG_UNBLOCK       1    /* for unblocking signals */
#define VKI_SIG_SETMASK       2    /* 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       64
#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
#define VKI_SIGINT		 2
#define VKI_SIGQUIT		 3
#define VKI_SIGILL		 4
#define VKI_SIGTRAP		 5
#define VKI_SIGABRT		 6
//#define VKI_SIGIOT		 6
#define VKI_SIGBUS		 7
#define VKI_SIGFPE		 8
#define VKI_SIGKILL		 9
#define VKI_SIGUSR1		10
#define VKI_SIGSEGV		11
#define VKI_SIGUSR2		12
#define VKI_SIGPIPE		13
#define VKI_SIGALRM		14
#define VKI_SIGTERM		15
#define VKI_SIGSTKFLT		16
#define VKI_SIGCHLD		17
#define VKI_SIGCONT		18
#define VKI_SIGSTOP		19
#define VKI_SIGTSTP		20
#define VKI_SIGTTIN		21
#define VKI_SIGTTOU		22
#define VKI_SIGURG		23
#define VKI_SIGXCPU		24
#define VKI_SIGXFSZ		25
#define VKI_SIGVTALRM		26
#define VKI_SIGPROF		27
#define VKI_SIGWINCH		28
#define VKI_SIGIO		29
#define VKI_SIGPWR		30
#define VKI_SIGSYS		31
#define VKI_SIGUNUSED		31

/* 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_NOCLDSTOP	0x00000001
#define VKI_SA_NOCLDWAIT	0x00000002
#define VKI_SA_SIGINFO		0x00000004
#define VKI_SA_ONSTACK		0x08000000
#define VKI_SA_RESTART		0x10000000
#define VKI_SA_NODEFER		0x40000000
#define VKI_SA_RESETHAND	0x80000000

#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

/* These are 'legacy' sigactions in which the size of sa_mask is fixed
   (cannot be expanded at any future point) because it is sandwiched
   between two other fields.
   (there is identical kludgery in vki-x86-linux.h) */
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.]]
        __vki_sighandler_t ksa_handler;
        vki_old_sigset_t sa_mask;
        unsigned long sa_flags;
        __vki_sigrestore_t sa_restorer;
};

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

/* 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;
	int ss_flags;
	vki_size_t ss_size;
} vki_stack_t;


//----------------------------------------------------------------------
// From linux-2.6.9/include/asm-ppc/ptrace.h
//----------------------------------------------------------------------

struct vki_pt_regs {
        unsigned long gpr[32];
        unsigned long nip;
        unsigned long msr;
        unsigned long orig_gpr3;        /* Used for restarting system calls */
        unsigned long ctr;
        unsigned long link;
        unsigned long xer;
        unsigned long ccr;
        unsigned long mq;               /* 601 only (not used at present) */
                                        /* Used on APUS to hold IPL value. */
        unsigned long trap;             /* Reason for being here */
        /* N.B. for critical exceptions on 4xx, the dar and dsisr
           fields are overloaded to hold srr0 and srr1. */
        unsigned long dar;              /* Fault registers */
        unsigned long dsisr;            /* on 4xx/Book-E used for ESR */
        unsigned long result;           /* Result of a system call */

        /* Not in kernel's definition, but apparently needed to stop
           assertion at coredump-elf.c:267 firing.  These padding
           words make the struct have the same size as a
           'vki_elf_greg_t'.  See message from Ghassan Hammouri on
           valgrind-developers on 6 April 06. */
        unsigned long pad[4];
};

#define vki_user_regs_struct vki_pt_regs

#define VKI_PT_R0		0
#define VKI_PT_R1		1
#define VKI_PT_R2		2
#define VKI_PT_R3		3
#define VKI_PT_R4		4
#define VKI_PT_R5		5
#define VKI_PT_R6		6
#define VKI_PT_R7		7
#define VKI_PT_R8		8
#define VKI_PT_R9		9
#define VKI_PT_R10		10
#define VKI_PT_R11		11
#define VKI_PT_R12		12
#define VKI_PT_R13		13
#define VKI_PT_R14		14
#define VKI_PT_R15		15
#define VKI_PT_R16		16
#define VKI_PT_R17		17
#define VKI_PT_R18		18
#define VKI_PT_R19		19
#define VKI_PT_R20		20
#define VKI_PT_R21		21
#define VKI_PT_R22		22
#define VKI_PT_R23		23
#define VKI_PT_R24		24
#define VKI_PT_R25		25
#define VKI_PT_R26		26
#define VKI_PT_R27		27
#define VKI_PT_R28		28
#define VKI_PT_R29		29
#define VKI_PT_R30		30
#define VKI_PT_R31		31
#define VKI_PT_NIP		32
#define VKI_PT_MSR		33
#define VKI_PT_ORIG_R3		34
#define VKI_PT_CTR		35
#define VKI_PT_LNK		36
#define VKI_PT_XER		37
#define VKI_PT_CCR		38
#define VKI_PT_MQ		39
#define VKI_PT_TRAP		40
#define VKI_PT_DAR		41
#define VKI_PT_DSISR		42
#define VKI_PT_RESULT		43

//----------------------------------------------------------------------
// From linux-2.6.9/include/asm-ppc/sigcontext.h
//----------------------------------------------------------------------

struct vki_sigcontext {
        unsigned long      _unused[4];
        int                signal;
        unsigned long      handler;
        unsigned long      oldmask;
        struct vki_pt_regs *regs;
};

//----------------------------------------------------------------------
// From linux-2.6.9/include/asm-ppc/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		0x01     /* Share changes */
#define VKI_MAP_PRIVATE		0x02     /* Changes are private */
//#define VKI_MAP_TYPE		0x0f     /* Mask for type of mapping */
#define VKI_MAP_FIXED		0x10     /* Interpret addr exactly */
#define VKI_MAP_ANONYMOUS	0x20     /* don't use a file */
#define VKI_MAP_NORESERVE	0x40     /* don't reserve swap pages */

//----------------------------------------------------------------------
// From linux-2.6.9/include/asm-ppc/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		 0100		/* not fcntl */
#define VKI_O_EXCL		 0200		/* not fcntl */
#define VKI_O_TRUNC		01000		/* not fcntl */
#define VKI_O_APPEND		02000
#define VKI_O_NONBLOCK		04000
#define VKI_O_LARGEFILE     0200000

#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		 5
#define VKI_F_SETLK		 6
#define VKI_F_SETLKW		 7

#define VKI_F_SETOWN		 8			/*  for sockets. */
#define VKI_F_GETOWN		 9			/*  for sockets. */
#define VKI_F_SETSIG		10			/*  for sockets. */
#define VKI_F_GETSIG		11			/*  for sockets. */

#define VKI_F_GETLK64		12			/*  using 'struct flock64' */
#define VKI_F_SETLK64		13
#define VKI_F_SETLKW64		14

#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_OWNER_TID		0
#define VKI_F_OWNER_PID		1
#define VKI_F_OWNER_PGRP	2

struct vki_f_owner_ex {
	int	type;
	__vki_kernel_pid_t	pid;
};

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

#define VKI_F_LINUX_SPECIFIC_BASE	1024

//----------------------------------------------------------------------
// From linux-2.6.9/include/asm-ppc/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	7   /* max number of open files */

//----------------------------------------------------------------------
// From linux-2.6.9/include/asm-ppc/socket.h
//----------------------------------------------------------------------

#define VKI_SOL_SOCKET	1

#define VKI_SO_TYPE	3

#define VKI_SO_ATTACH_FILTER	26

//----------------------------------------------------------------------
// From linux-2.6.8.1/include/asm-ppc/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.10/include/asm-ppc/stat.h
//----------------------------------------------------------------------

//.. #define VKI_S_IFMT		00170000
//.. #define VKI_S_IFSOCK	 0140000
//.. #define VKI_S_IFLNK	 0120000
//.. #define VKI_S_IFREG	 0100000
//.. #define VKI_S_IFBLK	 0060000
//.. #define VKI_S_IFDIR	 0040000
//.. #define VKI_S_IFCHR	 0020000
//.. #define VKI_S_IFIFO	 0010000
//.. #define VKI_S_ISUID	 0004000
//.. #define VKI_S_ISGID	 0002000
//.. #define VKI_S_ISVTX	 0001000
//.. 
//.. #define VKI_S_ISLNK(m)	(((m) & VKI_S_IFMT) == VKI_S_IFLNK)
//.. #define VKI_S_ISREG(m)	(((m) & VKI_S_IFMT) == VKI_S_IFREG)
//.. #define VKI_S_ISDIR(m)	(((m) & VKI_S_IFMT) == VKI_S_IFDIR)
//.. #define VKI_S_ISCHR(m)	(((m) & VKI_S_IFMT) == VKI_S_IFCHR)
//.. #define VKI_S_ISBLK(m)	(((m) & VKI_S_IFMT) == VKI_S_IFBLK)
//.. #define VKI_S_ISFIFO(m)	(((m) & VKI_S_IFMT) == VKI_S_IFIFO)
//.. #define VKI_S_ISSOCK(m)	(((m) & VKI_S_IFMT) == VKI_S_IFSOCK)

struct vki_stat {
   unsigned		st_dev;
   unsigned long	st_ino;
   unsigned int		st_mode;
   unsigned short	st_nlink;
   unsigned int		st_uid;
   unsigned int		st_gid;
   unsigned		st_rdev;
   long			st_size;
   unsigned long	st_blksize;
   unsigned long	st_blocks;
   unsigned long	st_atime;
   unsigned long	st_atime_nsec;
   unsigned long	st_mtime;
   unsigned long	st_mtime_nsec;
   unsigned long	st_ctime;
   unsigned long	st_ctime_nsec;
   unsigned long	__unused4;
   unsigned long	__unused5;
};

struct vki_stat64 {
   unsigned long long   st_dev;
   unsigned long long   st_ino;
   unsigned int         st_mode;
   unsigned int         st_nlink;
   unsigned int         st_uid;
   unsigned int         st_gid;
   unsigned long long   st_rdev;
   unsigned short int   __pad2;
   long long            st_size;
   long                 st_blksize;

   long long            st_blocks;
   long                 st_atime;
   unsigned long        st_atime_nsec;
   long                 st_mtime;
   unsigned long int    st_mtime_nsec;
   long                 st_ctime;
   unsigned long int    st_ctime_nsec;
   unsigned long int    __unused4;
   unsigned long int    __unused5;
};


//----------------------------------------------------------------------
// From linux-2.6.9/include/asm-ppc/statfs.h
//----------------------------------------------------------------------

// [[Nb: asm-ppc/statfs.h just #include asm-generic/statfs.h directly]]
struct vki_statfs {
   __vki_u32 f_type;
   __vki_u32 f_bsize;
   __vki_u32 f_blocks;
   __vki_u32 f_bfree;
   __vki_u32 f_bavail;
   __vki_u32 f_files;
   __vki_u32 f_ffree;
   __vki_kernel_fsid_t f_fsid;
   __vki_u32 f_namelen;
   __vki_u32 f_frsize;
   __vki_u32 f_spare[5];
};

//----------------------------------------------------------------------
// From linux-2.6.9/include/asm-ppc/termios.h
//----------------------------------------------------------------------

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

#define NCC 10
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 */
   unsigned char	c_line;			/* line discipline */
   unsigned char	c_cc[NCC];		/* control characters */
};

//----------------------------------------------------------------------
// From linux-2.6.9/include/asm-ppc/termbits.h
//----------------------------------------------------------------------

typedef unsigned char   vki_cc_t;
typedef unsigned int    vki_speed_t;
typedef unsigned int    vki_tcflag_t;

#define NCCS 19
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_cc[NCCS];		/* control characters */
        vki_cc_t	c_line;			/* line discipline (== c_cc[19]) */
        vki_speed_t	c_ispeed;		/* input speed */
        vki_speed_t	c_ospeed;		/* output speed */
};

//----------------------------------------------------------------------
// From linux-2.6.9/include/asm-ppc/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))

/* 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 them.. */
#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.9/include/asm-ppc/ioctls.h
//----------------------------------------------------------------------

#define VKI_FIOCLEX		_VKI_IO('f', 1)
#define VKI_FIONCLEX		_VKI_IO('f', 2)
#define VKI_FIOASYNC		_VKI_IOW('f', 125, int)
#define VKI_FIONBIO		_VKI_IOW('f', 126, int)
#define VKI_FIONREAD		_VKI_IOR('f', 127, int)
//#define VKI_TIOCINQ		VKI_FIONREAD
#define VKI_FIOQSIZE		_VKI_IOR('f', 128, vki_loff_t)

//#define VKI_TIOCGETP		_VKI_IOR('t', 8, struct vki_sgttyb)
//#define VKI_TIOCSETP		_VKI_IOW('t', 9, struct vki_sgttyb)
//#define VKI_TIOCSETN		_VKI_IOW('t', 10, struct vki_sgttyb)    /* TIOCSETP wo flush */

//#define VKI_TIOCSETC		_VKI_IOW('t', 17, struct vki_tchars)
//#define VKI_TIOCGETC		_VKI_IOR('t', 18, struct vki_tchars)
#define VKI_TCGETS		_VKI_IOR('t', 19, struct vki_termios)
#define VKI_TCSETS		_VKI_IOW('t', 20, struct vki_termios)
#define VKI_TCSETSW		_VKI_IOW('t', 21, struct vki_termios)
#define VKI_TCSETSF		_VKI_IOW('t', 22, struct vki_termios)

#define VKI_TCGETA		_VKI_IOR('t', 23, struct vki_termio)
#define VKI_TCSETA		_VKI_IOW('t', 24, struct vki_termio)
#define VKI_TCSETAW		_VKI_IOW('t', 25, struct vki_termio)
#define VKI_TCSETAF		_VKI_IOW('t', 28, struct vki_termio)

#define VKI_TCSBRK		_VKI_IO('t', 29)
#define VKI_TCXONC		_VKI_IO('t', 30)
#define VKI_TCFLSH		_VKI_IO('t', 31)

#define VKI_TIOCSWINSZ		_VKI_IOW('t', 103, struct vki_winsize)
#define VKI_TIOCGWINSZ		_VKI_IOR('t', 104, struct vki_winsize)
//#define VKI_TIOCSTART		_VKI_IO('t', 110)	   /* start output, like ^Q */
//#define VKI_TIOCSTOP		_VKI_IO('t', 111)	   /* stop output, like ^S */
#define VKI_TIOCOUTQ		_VKI_IOR('t', 115, int)	   /* output queue size */

//#define VKI_TIOCGLTC		_VKI_IOR('t', 116, struct vki_ltchars)
//#define VKI_TIOCSLTC		_VKI_IOW('t', 117, struct vki_ltchars)
#define VKI_TIOCSPGRP		_VKI_IOW('t', 118, int)
#define VKI_TIOCGPGRP		_VKI_IOR('t', 119, int)

//#define VKI_TIOCEXCL		0x540C
//#define VKI_TIOCNXCL		0x540D
#define VKI_TIOCSCTTY		0x540E

//#define VKI_TIOCSTI		0x5412
#define VKI_TIOCMGET		0x5415
#define VKI_TIOCMBIS		0x5416
#define VKI_TIOCMBIC		0x5417
#define VKI_TIOCMSET		0x5418
//# define VKI_TIOCM_LE		0x001
//# define VKI_TIOCM_DTR	0x002
//# define VKI_TIOCM_RTS	0x004
//# define VKI_TIOCM_ST		0x008
//# define VKI_TIOCM_SR		0x010
//# define VKI_TIOCM_CTS	0x020
//# define VKI_TIOCM_CAR	0x040
//# define VKI_TIOCM_RNG	0x080
//# define VKI_TIOCM_DSR	0x100
//# define VKI_TIOCM_CD		VKI_TIOCM_CAR
//# define VKI_TIOCM_RI		VKI_TIOCM_RNG

//#define VKI_TIOCGSOFTCAR	0x5419
//#define VKI_TIOCSSOFTCAR	0x541A
#define VKI_TIOCLINUX		0x541C
//#define VKI_TIOCCONS		0x541D
//#define VKI_TIOCGSERIAL	0x541E
//#define VKI_TIOCSSERIAL	0x541F
//#define VKI_TIOCPKT		0x5420
//# define VKI_TIOCPKT_DATA		 0
//# define VKI_TIOCPKT_FLUSHREAD	 1
//# define VKI_TIOCPKT_FLUSHWRITE	 2
//# define VKI_TIOCPKT_STOP		 4
//# define VKI_TIOCPKT_START		 8
//# define VKI_TIOCPKT_NOSTOP		16
//# define VKI_TIOCPKT_DOSTOP		32

#define VKI_TIOCNOTTY		0x5422
//#define VKI_TIOCSETD		0x5423
//#define VKI_TIOCGETD		0x5424
#define VKI_TCSBRKP		0x5425  /* Needed for POSIX tcsendbreak() */
//#define VKI_TIOCSBRK		0x5427  /* BSD compatibility */
//#define VKI_TIOCCBRK		0x5428  /* BSD compatibility */
//#define VKI_TIOCGSID		0x5429  /* 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 */

//#define VKI_TIOCSERCONFIG	0x5453
//#define VKI_TIOCSERGWILD	0x5454
//#define VKI_TIOCSERSWILD  	0x5455
//#define VKI_TIOCGLCKTRMIOS	0x5456
//#define VKI_TIOCSLCKTRMIOS	0x5457
//#define VKI_TIOCSERGSTRUCT	0x5458 /* For debugging only */
#define VKI_TIOCSERGETLSR	0x5459 /* Get line status register */
  /* ioctl (fd, VKI_TIOCSERGETLSR, &result) where result may be as below */
//# define VKI_TIOCSER_TEMT	0x01   /* Transmitter physically empty */
//#define VKI_TIOCSERGETMULTI	0x545A /* Get multiport config  */
//#define VKI_TIOCSERSETMULTI	0x545B /* Set multiport config */

//#define VKI_TIOCMIWAIT	0x545C  /* wait for a change on serial input line(s) */
#define VKI_TIOCGICOUNT		0x545D  /* read serial port inline interrupt counts */

//----------------------------------------------------------------------
// From linux-2.6.9/include/asm-ppc/poll.h
//----------------------------------------------------------------------

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

struct vki_pollfd {
	int fd;
	short events;
	short revents;
};

//.. //----------------------------------------------------------------------
//.. // From linux-2.6.8.1/include/asm-i386/user.h
//.. //----------------------------------------------------------------------
//.. 
//.. struct vki_user_i387_struct {
//.. 	long	cwd;
//.. 	long	swd;
//.. 	long	twd;
//.. 	long	fip;
//.. 	long	fcs;
//.. 	long	foo;
//.. 	long	fos;
//.. 	long	st_space[20];	/* 8*10 bytes for each FP-reg = 80 bytes */
//.. };
//.. 
//.. struct vki_user_fxsr_struct {
//.. 	unsigned short	cwd;
//.. 	unsigned short	swd;
//.. 	unsigned short	twd;
//.. 	unsigned short	fop;
//.. 	long	fip;
//.. 	long	fcs;
//.. 	long	foo;
//.. 	long	fos;
//.. 	long	mxcsr;
//.. 	long	reserved;
//.. 	long	st_space[32];	/* 8*16 bytes for each FP-reg = 128 bytes */
//.. 	long	xmm_space[32];	/* 8*16 bytes for each XMM-reg = 128 bytes */
//.. 	long	padding[56];
//.. };
//.. 
//.. /*
//..  * This is the old layout of "struct pt_regs", and
//..  * is still the layout used by user mode (the new
//..  * pt_regs doesn't have all registers as the kernel
//..  * doesn't use the extra segment registers)
//..  */
//.. struct vki_user_regs_struct {
//.. 	long ebx, ecx, edx, esi, edi, ebp, eax;
//.. 	unsigned short ds, __ds, es, __es;
//.. 	unsigned short fs, __fs, gs, __gs;
//.. 	long orig_eax, eip;
//.. 	unsigned short cs, __cs;
//.. 	long eflags, esp;
//.. 	unsigned short ss, __ss;
//.. };

//----------------------------------------------------------------------
// From linux-2.6.9/include/asm-ppc/elf.h
//----------------------------------------------------------------------

#define VKI_ELF_NGREG			48	/* includes nip, msr, lr, etc. */
#define VKI_ELF_NFPREG			33	/* includes fpscr */
#define VKI_ELF_NVRREG			33	/* includes vscr */

/* General registers */
typedef unsigned long vki_elf_greg_t;
typedef vki_elf_greg_t vki_elf_gregset_t[VKI_ELF_NGREG];

/* Floating point registers */
typedef double vki_elf_fpreg_t;
typedef vki_elf_fpreg_t vki_elf_fpregset_t[VKI_ELF_NFPREG];

/* Altivec registers */
typedef __vki_vector128 vki_elf_vrreg_t;
typedef vki_elf_vrreg_t vki_elf_vrregset_t[VKI_ELF_NVRREG];

#define VKI_AT_DCACHEBSIZE		19
#define VKI_AT_ICACHEBSIZE		20
#define VKI_AT_UCACHEBSIZE		21
/* A special ignored type value for PPC, for glibc compatibility.  */
#define VKI_AT_IGNOREPPC	  	22

/* CAB: Do we want these? */
//#define VKI_AT_SYSINFO		32
//#define VKI_AT_SYSINFO_EHDR  		33

//----------------------------------------------------------------------
// From linux-2.6.9/include/asm-ppc/ucontext.h
//----------------------------------------------------------------------

struct vki_mcontext {
        vki_elf_gregset_t	mc_gregs;
        vki_elf_fpregset_t	mc_fregs;
        unsigned long		mc_pad[2];
        vki_elf_vrregset_t	mc_vregs __attribute__((__aligned__(16)));
};

struct vki_ucontext {
        unsigned long		uc_flags;
        struct vki_ucontext	__user *uc_link;
        vki_stack_t		uc_stack;
        int			uc_pad[7];
        struct vki_mcontext	__user *uc_regs;		/* points to uc_mcontext field */
        vki_sigset_t		uc_sigmask;
        /* glibc has 1024-bit signal masks, ours are 64-bit */
        int			uc_maskext[30];
        int			uc_pad2[3];
        struct vki_mcontext	uc_mcontext;
};

//.. //----------------------------------------------------------------------
//.. // From linux-2.6.8.1/include/asm-i386/segment.h
//.. //----------------------------------------------------------------------
//.. 
//.. #define VKI_GDT_ENTRY_TLS_ENTRIES	3
//.. #define VKI_GDT_ENTRY_TLS_MIN	6
//.. #define VKI_GDT_ENTRY_TLS_MAX 	(VKI_GDT_ENTRY_TLS_MIN + VKI_GDT_ENTRY_TLS_ENTRIES - 1)

//----------------------------------------------------------------------
// From linux-2.6.9/include/asm-ppc/ldt.h
//----------------------------------------------------------------------

//.. /* [[Nb: This is the structure passed to the modify_ldt syscall.  Just so as
//..    to confuse and annoy everyone, this is _not_ the same as an
//..    VgLdtEntry and has to be translated into such.  The logic for doing
//..    so, in vg_ldt.c, is copied from the kernel sources.]] */
//.. struct vki_user_desc {
//.. 	unsigned int	entry_number;
//.. 	unsigned long	base_addr;
//.. 	unsigned int	limit;
//.. 	unsigned int	seg_32bit:1;
//.. 	unsigned int	contents:2;
//.. 	unsigned int	read_exec_only:1;
//.. 	unsigned int	limit_in_pages:1;
//.. 	unsigned int	seg_not_present:1;
//.. 	unsigned int	useable:1;
//..         // [[Nb: this field is not in the kernel sources, but it has always
//..         // been in the Valgrind sources so I will keep it there in case it's
//..         // important... this is an x86-defined data structure so who
//..         // knows;  maybe it's important to set this field to zero at some
//..         // point.  --njn]]
//.. 	unsigned int	reserved:25;
//.. };
//.. 
//.. // [[Nb: for our convenience within Valgrind, use a more specific name]]
//.. typedef struct vki_user_desc vki_modify_ldt_t;

// CAB: TODO
typedef void vki_modify_ldt_t;


//----------------------------------------------------------------------
// From linux-2.6.9/include/asm-ppc/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 long	seq;
   unsigned int		__pad2;
   unsigned long long	__unused1;
   unsigned long long	__unused2;
};

//----------------------------------------------------------------------
// From linux-2.6.9/include/asm-ppc/sembuf.h
//----------------------------------------------------------------------

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

//----------------------------------------------------------------------
// From linux-2.6.9/include/asm-ppc/msgbuf.h
//----------------------------------------------------------------------

struct vki_msqid64_ds {
   struct vki_ipc64_perm	msg_perm;
   unsigned int			__unused1;
   __vki_kernel_time_t		msg_stime;		/* last msgsnd time */
   unsigned int			__unused2;
   __vki_kernel_time_t		msg_rtime;		/* last msgrcv time */
   unsigned int			__unused3;
   __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.8.1/include/asm-ppc/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.9/include/asm-ppc/shmbuf.h
//----------------------------------------------------------------------

struct vki_shmid64_ds {
   struct vki_ipc64_perm	shm_perm;		/* operation perms */
   unsigned int			__unused1;
   __vki_kernel_time_t		shm_atime;		/* last attach time */
   unsigned int			__unused2;
   __vki_kernel_time_t		shm_dtime;		/* last detach time */
   unsigned int			__unused3;
   __vki_kernel_time_t		shm_ctime;		/* last change time */
   unsigned int			__unused4;
   vki_size_t			shm_segsz;		/* size of segment (bytes) */
   __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		__unused5;
   unsigned long		__unused6;
};

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.8.1/include/asm-generic/errno.h
//----------------------------------------------------------------------

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

//.. //----------------------------------------------------------------------
//.. // DRM ioctls
//.. //----------------------------------------------------------------------
//.. 
//.. // jrs 20050207: where did all this stuff come from?  Is it really
//.. // i386 specific, or should it go into the linux-generic category?
//.. //struct vki_drm_buf_pub {
//.. //	Int		  idx;	       /**< Index into the master buffer list */
//.. //	Int		  total;       /**< Buffer size */
//.. //	Int		  used;	       /**< Amount of buffer in use (for DMA) */
//.. //	void	  __user *address;     /**< Address of buffer */
//.. //};
//.. //
//.. //struct vki_drm_buf_map {
//.. //	Int	      count;		/**< Length of the buffer list */
//.. //	void	      __user *virtual;	/**< Mmap'd area in user-virtual */
//.. //	struct vki_drm_buf_pub __user *list;	/**< Buffer information */
//.. //};
//.. //
//.. ///* We need to pay attention to this, because it mmaps memory */
//.. //#define VKI_DRM_IOCTL_MAP_BUFS		_VKI_IOWR('d', 0x19, struct vki_drm_buf_map)

//----------------------------------------------------------------------
// And that's it!
//----------------------------------------------------------------------

#endif // __VKI_PPC32_LINUX_H

/*--------------------------------------------------------------------*/
/*--- end                                                          ---*/
/*--------------------------------------------------------------------*/
