Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 10:13:24

0001 
0002 /*--------------------------------------------------------------------*/
0003 /*--- PPC64/Linux-specific kernel interface.     vki-ppc64-linux.h ---*/
0004 /*--------------------------------------------------------------------*/
0005 
0006 /*
0007    This file is part of Valgrind, a dynamic binary instrumentation
0008    framework.
0009 
0010    Copyright (C) 2005-2017 Julian Seward
0011       jseward@acm.org
0012 
0013    This program is free software; you can redistribute it and/or
0014    modify it under the terms of the GNU General Public License as
0015    published by the Free Software Foundation; either version 2 of the
0016    License, or (at your option) any later version.
0017 
0018    This program is distributed in the hope that it will be useful, but
0019    WITHOUT ANY WARRANTY; without even the implied warranty of
0020    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
0021    General Public License for more details.
0022 
0023    You should have received a copy of the GNU General Public License
0024    along with this program; if not, see <http://www.gnu.org/licenses/>.
0025 
0026    The GNU General Public License is contained in the file COPYING.
0027 */
0028 
0029 #ifndef __VKI_PPC64_LINUX_H
0030 #define __VKI_PPC64_LINUX_H
0031 
0032 #if defined(VGP_ppc32_linux) || defined(VGP_ppc64be_linux)
0033 #define VKI_BIG_ENDIAN  1
0034 #elif defined(VGP_ppc64le_linux)
0035 #define VKI_LITTLE_ENDIAN  1
0036 #endif
0037 //----------------------------------------------------------------------
0038 // From linux-2.6.13/include/asm-ppc64/types.h
0039 //----------------------------------------------------------------------
0040 
0041 typedef __signed__ char __vki_s8;
0042 typedef unsigned char __vki_u8;
0043 
0044 typedef __signed__ short __vki_s16;
0045 typedef unsigned short __vki_u16;
0046 
0047 typedef __signed__ int __vki_s32;
0048 typedef unsigned int __vki_u32;
0049 
0050 typedef __signed__ long __vki_s64;
0051 typedef unsigned long __vki_u64;
0052 
0053 typedef struct {
0054   __vki_u32 u[4];
0055 } __attribute((aligned(16))) __vki_vector128;
0056 
0057 typedef unsigned short vki_u16;
0058 
0059 typedef unsigned int vki_u32;
0060 
0061 //----------------------------------------------------------------------
0062 // From linux-2.6.13/include/asm-ppc64/page.h
0063 //----------------------------------------------------------------------
0064 
0065 /* PAGE_SHIFT determines the page size, unfortunately
0066    page size might vary between 32-bit and 64-bit ppc kernels */
0067 extern UWord VKI_PAGE_SHIFT;
0068 extern UWord VKI_PAGE_SIZE;
0069 #define VKI_MAX_PAGE_SHIFT  16
0070 #define VKI_MAX_PAGE_SIZE   (1UL << VKI_MAX_PAGE_SHIFT)
0071 
0072 //----------------------------------------------------------------------
0073 // From linux-2.6.35.4/arch/powerpc/include/asm/shmparam.h
0074 //----------------------------------------------------------------------
0075 
0076 #define VKI_SHMLBA  VKI_PAGE_SIZE
0077 
0078 //----------------------------------------------------------------------
0079 // From linux-2.6.13/include/asm-ppc64/signal.h
0080 //----------------------------------------------------------------------
0081 
0082 #define VKI_MINSIGSTKSZ     2048
0083 
0084 /* Next 9 non-blank lines asm-generic/signal.h */
0085 #define VKI_SIG_BLOCK          0 /* for blocking signals */
0086 #define VKI_SIG_UNBLOCK        1 /* for unblocking signals */
0087 #define VKI_SIG_SETMASK        2 /* for setting the signal mask */
0088 
0089 typedef void __vki_signalfn_t(int);
0090 typedef __vki_signalfn_t __user *__vki_sighandler_t;
0091 
0092 typedef void __vki_restorefn_t(void);
0093 typedef __vki_restorefn_t __user *__vki_sigrestore_t;
0094 
0095 #define VKI_SIG_DFL ((__vki_sighandler_t)0)     /* default signal handling */
0096 #define VKI_SIG_IGN ((__vki_sighandler_t)1)     /* ignore signal */
0097 
0098 /* Back in asm-ppc64/signal.h */
0099 #define _VKI_NSIG           64
0100 #define _VKI_NSIG_BPW       64
0101 #define _VKI_NSIG_WORDS     (_VKI_NSIG / _VKI_NSIG_BPW)
0102 
0103 typedef unsigned long vki_old_sigset_t;             /* at least 32 bits */
0104 
0105 typedef struct {
0106   unsigned long sig[_VKI_NSIG_WORDS];
0107 } vki_sigset_t;
0108 
0109 #define VKI_SIGHUP           1
0110 #define VKI_SIGINT           2
0111 #define VKI_SIGQUIT          3
0112 #define VKI_SIGILL           4
0113 #define VKI_SIGTRAP          5
0114 #define VKI_SIGABRT          6
0115 #define VKI_SIGIOT           6
0116 #define VKI_SIGBUS           7
0117 #define VKI_SIGFPE           8
0118 #define VKI_SIGKILL          9
0119 #define VKI_SIGUSR1         10
0120 #define VKI_SIGSEGV         11
0121 #define VKI_SIGUSR2         12
0122 #define VKI_SIGPIPE         13
0123 #define VKI_SIGALRM         14
0124 #define VKI_SIGTERM         15
0125 #define VKI_SIGSTKFLT       16
0126 #define VKI_SIGCHLD         17
0127 #define VKI_SIGCONT         18
0128 #define VKI_SIGSTOP         19
0129 #define VKI_SIGTSTP         20
0130 #define VKI_SIGTTIN         21
0131 #define VKI_SIGTTOU         22
0132 #define VKI_SIGURG          23
0133 #define VKI_SIGXCPU         24
0134 #define VKI_SIGXFSZ         25
0135 #define VKI_SIGVTALRM       26
0136 #define VKI_SIGPROF         27
0137 #define VKI_SIGWINCH        28
0138 #define VKI_SIGIO           29
0139 #define VKI_SIGPOLL         VKI_SIGIO
0140 #define VKI_SIGPWR          30
0141 #define VKI_SIGSYS          31
0142 #define VKI_SIGUNUSED       31
0143 
0144 /* These should not be considered constants from userland.  */
0145 #define VKI_SIGRTMIN        32
0146 #define VKI_SIGRTMAX        _VKI_NSIG
0147 
0148 #define VKI_SA_NOCLDSTOP    0x00000001u
0149 #define VKI_SA_NOCLDWAIT    0x00000002u
0150 #define VKI_SA_SIGINFO      0x00000004u
0151 #define VKI_SA_ONSTACK      0x08000000u
0152 #define VKI_SA_RESTART      0x10000000u
0153 #define VKI_SA_NODEFER      0x40000000u
0154 #define VKI_SA_RESETHAND    0x80000000u
0155 
0156 #define VKI_SA_NOMASK       VKI_SA_NODEFER
0157 #define VKI_SA_ONESHOT      VKI_SA_RESETHAND
0158 //#define VKI_SA_INTERRUPT    0x20000000u /* dummy -- ignored */
0159 
0160 #define VKI_SA_RESTORER     0x04000000u
0161 
0162 #define VKI_SS_ONSTACK      1
0163 #define VKI_SS_DISABLE      2
0164 
0165 // See comments on corresponding decls in vki-x86-linux.h re ksa_handler
0166 struct vki_old_sigaction {
0167   __vki_sighandler_t ksa_handler;
0168   vki_old_sigset_t sa_mask;
0169   unsigned long sa_flags;
0170   __vki_sigrestore_t sa_restorer;
0171 };
0172 
0173 struct vki_sigaction_base {
0174   __vki_sighandler_t ksa_handler;
0175   unsigned long sa_flags;
0176   __vki_sigrestore_t sa_restorer;
0177   vki_sigset_t sa_mask;               /* mask last for extensibility */
0178 };
0179 
0180 /* On Linux we use the same type for passing sigactions to
0181    and from the kernel.  Hence: */
0182 typedef  struct vki_sigaction_base  vki_sigaction_toK_t;
0183 typedef  struct vki_sigaction_base  vki_sigaction_fromK_t;
0184 
0185 
0186 typedef struct vki_sigaltstack {
0187   void __user *ss_sp;
0188   int ss_flags;
0189   vki_size_t ss_size;
0190 } vki_stack_t;
0191 
0192 //----------------------------------------------------------------------
0193 // From linux-2.6.13/include/asm-ppc64/ptrace.h
0194 //----------------------------------------------------------------------
0195 
0196 #define VKI_PPC_REG unsigned long
0197 struct vki_pt_regs {
0198   VKI_PPC_REG gpr[32];
0199   VKI_PPC_REG nip;
0200   VKI_PPC_REG msr;
0201   VKI_PPC_REG orig_gpr3;      /* Used for restarting system calls */
0202   VKI_PPC_REG ctr;
0203   VKI_PPC_REG link;
0204   VKI_PPC_REG xer;
0205   VKI_PPC_REG ccr;
0206   VKI_PPC_REG softe;          /* Soft enabled/disabled */
0207   VKI_PPC_REG trap;           /* Reason for being here */
0208   VKI_PPC_REG dar;            /* Fault registers */
0209   VKI_PPC_REG dsisr;
0210   VKI_PPC_REG result;         /* Result of a system call */
0211 
0212   /* Not in kernel's definition, but apparently needed to stop
0213      assertion at coredump-elf.c:267 firing.  These padding words make
0214      the struct have the same size as a 'vki_elf_greg_t'.  See message
0215      from Ghassan Hammouri on valgrind-developers on 6 April 06, and
0216      also the analogous kludge for ppc32-linux (svn r5852 and bug
0217      #121617). */
0218   unsigned long pad[4];
0219 };
0220 
0221 /* Kludge?  I don't know where this came from or if it is right. */
0222 #define vki_user_regs_struct vki_pt_regs
0223 
0224 #define VKI_PT_R0   0
0225 #define VKI_PT_R1   1
0226 #define VKI_PT_R2   2
0227 #define VKI_PT_R3   3
0228 #define VKI_PT_R4   4
0229 #define VKI_PT_R5   5
0230 #define VKI_PT_R6   6
0231 #define VKI_PT_R7   7
0232 #define VKI_PT_R8   8
0233 #define VKI_PT_R9   9
0234 #define VKI_PT_R10  10
0235 #define VKI_PT_R11  11
0236 #define VKI_PT_R12  12
0237 #define VKI_PT_R13  13
0238 #define VKI_PT_R14  14
0239 #define VKI_PT_R15  15
0240 #define VKI_PT_R16  16
0241 #define VKI_PT_R17  17
0242 #define VKI_PT_R18  18
0243 #define VKI_PT_R19  19
0244 #define VKI_PT_R20  20
0245 #define VKI_PT_R21  21
0246 #define VKI_PT_R22  22
0247 #define VKI_PT_R23  23
0248 #define VKI_PT_R24  24
0249 #define VKI_PT_R25  25
0250 #define VKI_PT_R26  26
0251 #define VKI_PT_R27  27
0252 #define VKI_PT_R28  28
0253 #define VKI_PT_R29  29
0254 #define VKI_PT_R30  30
0255 #define VKI_PT_R31  31
0256 #define VKI_PT_NIP  32
0257 #define VKI_PT_MSR  33
0258 #define VKI_PT_ORIG_R3 34
0259 #define VKI_PT_CTR  35
0260 #define VKI_PT_LNK  36
0261 #define VKI_PT_XER  37
0262 #define VKI_PT_CCR  38
0263 #define VKI_PT_SOFTE 39
0264 #define VKI_PT_RESULT 43
0265 
0266 //----------------------------------------------------------------------
0267 // From linux-2.6.13/include/asm-ppc64/elf.h
0268 //----------------------------------------------------------------------
0269 
0270 #define VKI_ELF_NGREG       48      /* includes nip, msr, lr, etc. */
0271 #define VKI_ELF_NFPREG      33      /* includes fpscr */
0272 #define VKI_ELF_NVRREG      34      /* includes vscr & vrsave in split vectors */
0273 
0274 typedef unsigned long vki_elf_greg_t64;
0275 typedef vki_elf_greg_t64 vki_elf_gregset_t64[VKI_ELF_NGREG];
0276 
0277 typedef vki_elf_gregset_t64 vki_elf_gregset_t;
0278 
0279 typedef double vki_elf_fpreg_t;
0280 typedef vki_elf_fpreg_t vki_elf_fpregset_t[VKI_ELF_NFPREG];
0281 
0282 /* Altivec registers */
0283 /*
0284  * The entries with indexes 0-31 contain the corresponding vector registers.
0285  * The entry with index 32 contains the vscr as the last word (offset 12)
0286  * within the quadword.  This allows the vscr to be stored as either a
0287  * quadword (since it must be copied via a vector register to/from storage)
0288  * or as a word.  The entry with index 33 contains the vrsave as the first
0289  * word (offset 0) within the quadword.
0290  *
0291  * This definition of the VMX state is compatible with the current PPC32
0292  * ptrace interface.  This allows signal handling and ptrace to use the same
0293  * structures.  This also simplifies the implementation of a bi-arch
0294  * (combined (32- and 64-bit) gdb.
0295  *
0296  * Note that it's _not_ compatible with 32 bits ucontext which stuffs the
0297  * vrsave along with vscr and so only uses 33 vectors for the register set
0298  */
0299 typedef __vki_vector128 vki_elf_vrreg_t;
0300 typedef vki_elf_vrreg_t vki_elf_vrregset_t[VKI_ELF_NVRREG];
0301 
0302 //----------------------------------------------------------------------
0303 // From linux-2.6.13/include/asm-ppc64/sigcontext.h
0304 //----------------------------------------------------------------------
0305 
0306 struct vki_sigcontext {
0307   unsigned long       _unused[4];
0308   int                 signal;
0309   int                 _pad0;
0310   unsigned long       handler;
0311   unsigned long       oldmask;
0312   struct vki_pt_regs  __user *regs;
0313   vki_elf_gregset_t   gp_regs;
0314   vki_elf_fpregset_t  fp_regs;
0315   /*
0316    * To maintain compatibility with current implementations the sigcontext is
0317    * extended by appending a pointer (v_regs) to a quadword type (elf_vrreg_t)
0318    * followed by an unstructured (vmx_reserve) field of 69 doublewords.  This
0319    * allows the array of vector registers to be quadword aligned independent of
0320    * the alignment of the containing sigcontext or ucontext. It is the
0321    * responsibility of the code setting the sigcontext to set this pointer to
0322    * either NULL (if this processor does not support the VMX feature) or the
0323    * address of the first quadword within the allocated (vmx_reserve) area.
0324    *
0325    * The pointer (v_regs) of vector type (elf_vrreg_t) is type compatible with
0326    * an array of 34 quadword entries (elf_vrregset_t).  The entries with
0327    * indexes 0-31 contain the corresponding vector registers.  The entry with
0328    * index 32 contains the vscr as the last word (offset 12) within the
0329    * quadword.  This allows the vscr to be stored as either a quadword (since
0330    * it must be copied via a vector register to/from storage) or as a word.
0331    * The entry with index 33 contains the vrsave as the first word (offset 0)
0332    * within the quadword.
0333    */
0334   vki_elf_vrreg_t  __user *v_regs;
0335   long             vmx_reserve[VKI_ELF_NVRREG+VKI_ELF_NVRREG+1];
0336 };
0337 
0338 //----------------------------------------------------------------------
0339 // From linux-5.0.0/arch/powerpc/include/uapi/asm/siginfo.h
0340 //----------------------------------------------------------------------
0341 
0342 #ifdef __powerpc64__
0343 # define __VKI_ARCH_SI_PREAMBLE_SIZE     (4 * sizeof(int))
0344 #endif
0345 
0346 //----------------------------------------------------------------------
0347 // From linux-2.6.13/include/asm-ppc64/mman.h
0348 //----------------------------------------------------------------------
0349 
0350 #define VKI_PROT_NONE       0x0             /* page can not be accessed */
0351 #define VKI_PROT_READ       0x1             /* page can be read */
0352 #define VKI_PROT_WRITE      0x2             /* page can be written */
0353 #define VKI_PROT_EXEC       0x4             /* page can be executed */
0354 #define VKI_PROT_GROWSDOWN  0x01000000      /* mprotect flag: extend
0355                            change to start of
0356                            growsdown vma */
0357 #define VKI_PROT_GROWSUP    0x02000000      /* mprotect flag: extend
0358                            change to end of
0359                            growsup vma */
0360 
0361 #define VKI_MAP_SHARED      0x01            /* Share changes */
0362 #define VKI_MAP_PRIVATE     0x02            /* Changes are private */
0363 #define VKI_MAP_FIXED       0x10            /* Interpret addr exactly */
0364 #define VKI_MAP_ANONYMOUS   0x20            /* don't use a file */
0365 #define VKI_MAP_NORESERVE   0x40            /* don't reserve swap pages */
0366 
0367 //----------------------------------------------------------------------
0368 // From linux-2.6.13/include/asm-ppc64/fcntl.h
0369 //----------------------------------------------------------------------
0370 
0371 #define VKI_O_ACCMODE            03
0372 #define VKI_O_RDONLY             00
0373 #define VKI_O_WRONLY             01
0374 #define VKI_O_RDWR               02
0375 #define VKI_O_CREAT            0100 /* not fcntl */
0376 #define VKI_O_EXCL             0200 /* not fcntl */
0377 #define VKI_O_TRUNC           01000 /* not fcntl */
0378 #define VKI_O_APPEND          02000
0379 #define VKI_O_NONBLOCK        04000
0380 #define VKI_O_LARGEFILE     0200000
0381 
0382 #define VKI_AT_FDCWD            -100
0383 
0384 #define VKI_F_DUPFD         0       /* dup */
0385 #define VKI_F_GETFD         1       /* get close_on_exec */
0386 #define VKI_F_SETFD         2       /* set/clear close_on_exec */
0387 #define VKI_F_GETFL         3       /* get file->f_flags */
0388 #define VKI_F_SETFL         4       /* set file->f_flags */
0389 #define VKI_F_GETLK         5
0390 #define VKI_F_SETLK         6
0391 #define VKI_F_SETLKW        7
0392 
0393 #define VKI_F_SETOWN        8       /*  for sockets. */
0394 #define VKI_F_GETOWN        9       /*  for sockets. */
0395 #define VKI_F_SETSIG        10      /*  for sockets. */
0396 #define VKI_F_GETSIG        11      /*  for sockets. */
0397 
0398 #define VKI_F_SETOWN_EX     15
0399 #define VKI_F_GETOWN_EX     16
0400 
0401 #define VKI_F_OFD_GETLK     36
0402 #define VKI_F_OFD_SETLK     37
0403 #define VKI_F_OFD_SETLKW    38
0404 
0405 #define VKI_F_OWNER_TID     0
0406 #define VKI_F_OWNER_PID     1
0407 #define VKI_F_OWNER_PGRP    2
0408 
0409 struct vki_f_owner_ex {
0410     int type;
0411     __vki_kernel_pid_t  pid;
0412 };
0413 
0414 /* for F_[GET|SET]FL */
0415 #define VKI_FD_CLOEXEC  1  /* actually anything with low bit set goes */
0416 
0417 #define VKI_F_LINUX_SPECIFIC_BASE   1024
0418 
0419 //----------------------------------------------------------------------
0420 // From linux-2.6.13/include/asm-ppc64/resource.h
0421 //----------------------------------------------------------------------
0422 
0423 // which just does #include <asm-generic/resource.h>
0424 
0425 #define VKI_RLIMIT_DATA             2       /* max data size */
0426 #define VKI_RLIMIT_STACK            3       /* max stack size */
0427 #define VKI_RLIMIT_CORE             4       /* max core file size */
0428 #define VKI_RLIMIT_NOFILE           7       /* max number of open files */
0429 
0430 //----------------------------------------------------------------------
0431 // From linux-2.6.13/include/asm-ppc64/socket.h
0432 //----------------------------------------------------------------------
0433 
0434 #define VKI_SOL_SOCKET      1
0435 
0436 #define VKI_SO_TYPE         3
0437 
0438 #define VKI_SO_ATTACH_FILTER    26
0439 
0440 //----------------------------------------------------------------------
0441 // From linux-2.6.13/include/asm-ppc64/sockios.h
0442 //----------------------------------------------------------------------
0443 
0444 #define VKI_SIOCSPGRP       0x8902
0445 #define VKI_SIOCGPGRP       0x8904
0446 #define VKI_SIOCATMARK      0x8905
0447 #define VKI_SIOCGSTAMP      0x8906          /* Get stamp (timeval) */
0448 #define VKI_SIOCGSTAMPNS    0x8907          /* Get stamp (timespec) */
0449 
0450 //----------------------------------------------------------------------
0451 // From linux-2.6.13/include/asm-ppc64/stat.h
0452 //----------------------------------------------------------------------
0453 
0454 struct vki_stat {
0455   unsigned long   st_dev;
0456   unsigned long   st_ino;
0457   unsigned long   st_nlink;
0458   unsigned int    st_mode;
0459   unsigned int    st_uid;
0460   unsigned int    st_gid;
0461   unsigned long   st_rdev;
0462   long            st_size;
0463   unsigned long   st_blksize;
0464   unsigned long   st_blocks;
0465   unsigned long   st_atime;
0466   unsigned long   st_atime_nsec;
0467   unsigned long   st_mtime;
0468   unsigned long   st_mtime_nsec;
0469   unsigned long   st_ctime;
0470   unsigned long   st_ctime_nsec;
0471   unsigned long   __unused4;
0472   unsigned long   __unused5;
0473   unsigned long   __unused6;
0474 };
0475 
0476 #define VKI_STAT_HAVE_NSEC 1
0477 
0478 /* This matches struct stat64 in glibc2.1. Only used for 32 bit. */
0479 struct vki_stat64 {
0480   unsigned long st_dev;           /* Device.  */
0481   unsigned long st_ino;           /* File serial number.  */
0482   unsigned int st_mode;           /* File mode.  */
0483   unsigned int st_nlink;          /* Link count.  */
0484   unsigned int st_uid;            /* User ID of the file's owner.  */
0485   unsigned int st_gid;            /* Group ID of the file's group. */
0486   unsigned long st_rdev;          /* Device number, if device.  */
0487   unsigned short __pad2;
0488   long st_size;                   /* Size of file, in bytes.  */
0489   int  st_blksize;                /* Optimal block size for I/O.  */
0490 
0491   long st_blocks;                 /* Number 512-byte blocks allocated. */
0492   int   st_atime;                 /* Time of last access.  */
0493   int   st_atime_nsec;
0494   int   st_mtime;                 /* Time of last modification.  */
0495   int   st_mtime_nsec;
0496   int   st_ctime;                 /* Time of last status change.  */
0497   int   st_ctime_nsec;
0498   unsigned int   __unused4;
0499   unsigned int   __unused5;
0500 };
0501 
0502 //----------------------------------------------------------------------
0503 // From linux-2.6.13/include/asm-ppc64/statfs.h
0504 //----------------------------------------------------------------------
0505 
0506 struct vki_statfs {
0507   long f_type;
0508   long f_bsize;
0509   long f_blocks;
0510   long f_bfree;
0511   long f_bavail;
0512   long f_files;
0513   long f_ffree;
0514   __vki_kernel_fsid_t f_fsid;
0515   long f_namelen;
0516   long f_frsize;
0517   long f_spare[5];
0518 };
0519 
0520 //----------------------------------------------------------------------
0521 // From linux-2.6.13/include/asm-ppc64/termios.h
0522 //----------------------------------------------------------------------
0523 
0524 struct vki_winsize {
0525   unsigned short ws_row;
0526   unsigned short ws_col;
0527   unsigned short ws_xpixel;
0528   unsigned short ws_ypixel;
0529 };
0530 
0531 #define VKI_NCC 10
0532 struct vki_termio {
0533   unsigned short c_iflag;         /* input mode flags */
0534   unsigned short c_oflag;         /* output mode flags */
0535   unsigned short c_cflag;         /* control mode flags */
0536   unsigned short c_lflag;         /* local mode flags */
0537   unsigned char c_line;           /* line discipline */
0538   unsigned char c_cc[VKI_NCC];    /* control characters */
0539 };
0540 
0541 //----------------------------------------------------------------------
0542 // From linux-2.6.13/include/asm-ppc64/termbits.h
0543 //----------------------------------------------------------------------
0544 
0545 typedef unsigned char   vki_cc_t;
0546 typedef unsigned int    vki_speed_t;
0547 typedef unsigned int    vki_tcflag_t;
0548 
0549 #define VKI_NCCS 19
0550 struct vki_termios {
0551   vki_tcflag_t c_iflag;               /* input mode flags */
0552   vki_tcflag_t c_oflag;               /* output mode flags */
0553   vki_tcflag_t c_cflag;               /* control mode flags */
0554   vki_tcflag_t c_lflag;               /* local mode flags */
0555   vki_cc_t c_cc[VKI_NCCS];            /* control characters */
0556   vki_cc_t c_line;                    /* line discipline (== c_cc[19]) */
0557   vki_speed_t c_ispeed;               /* input speed */
0558   vki_speed_t c_ospeed;               /* output speed */
0559 };
0560 
0561 //----------------------------------------------------------------------
0562 // From linux-2.6.13/include/asm-ppc64/ioctl.h
0563 //----------------------------------------------------------------------
0564 
0565 #define _VKI_IOC_NRBITS     8
0566 #define _VKI_IOC_TYPEBITS   8
0567 #define _VKI_IOC_SIZEBITS   13
0568 #define _VKI_IOC_DIRBITS    3
0569 
0570 #define _VKI_IOC_NRMASK     ((1 << _VKI_IOC_NRBITS)-1)
0571 #define _VKI_IOC_TYPEMASK   ((1 << _VKI_IOC_TYPEBITS)-1)
0572 #define _VKI_IOC_SIZEMASK   ((1 << _VKI_IOC_SIZEBITS)-1)
0573 #define _VKI_IOC_DIRMASK    ((1 << _VKI_IOC_DIRBITS)-1)
0574 
0575 #define _VKI_IOC_NRSHIFT    0
0576 #define _VKI_IOC_TYPESHIFT  (_VKI_IOC_NRSHIFT+_VKI_IOC_NRBITS)
0577 #define _VKI_IOC_SIZESHIFT  (_VKI_IOC_TYPESHIFT+_VKI_IOC_TYPEBITS)
0578 #define _VKI_IOC_DIRSHIFT   (_VKI_IOC_SIZESHIFT+_VKI_IOC_SIZEBITS)
0579 
0580 /*
0581  * Direction bits _IOC_NONE could be 0, but OSF/1 gives it a bit.
0582  * And this turns out useful to catch old ioctl numbers in header
0583  * files for us.
0584  */
0585 #define _VKI_IOC_NONE       1U
0586 #define _VKI_IOC_READ       2U
0587 #define _VKI_IOC_WRITE      4U
0588 
0589 #define _VKI_IOC(dir,type,nr,size) \
0590         (((dir)  << _VKI_IOC_DIRSHIFT) | \
0591          ((type) << _VKI_IOC_TYPESHIFT) | \
0592          ((nr)   << _VKI_IOC_NRSHIFT) | \
0593          ((size) << _VKI_IOC_SIZESHIFT))
0594 
0595 /* used to create numbers */
0596 #define _VKI_IO(type,nr)            _VKI_IOC(_VKI_IOC_NONE,(type),(nr),0)
0597 #define _VKI_IOR(type,nr,size)      _VKI_IOC(_VKI_IOC_READ,(type),(nr), \
0598                                        (_VKI_IOC_TYPECHECK(size)))
0599 #define _VKI_IOW(type,nr,size)      _VKI_IOC(_VKI_IOC_WRITE,(type),(nr), \
0600                                        (_VKI_IOC_TYPECHECK(size)))
0601 #define _VKI_IOWR(type,nr,size)     _VKI_IOC(_VKI_IOC_READ|_VKI_IOC_WRITE, \
0602                                        (type),(nr),(_VKI_IOC_TYPECHECK(size)))
0603 #define _VKI_IOR_BAD(type,nr,size)  _VKI_IOC(_VKI_IOC_READ,(type),(nr), \
0604                                        sizeof(size))
0605 #define _VKI_IOW_BAD(type,nr,size)  _VKI_IOC(_VKI_IOC_WRITE,(type),(nr), \
0606                                        sizeof(size))
0607 #define _VKI_IOWR_BAD(type,nr,size) _VKI_IOC(_VKI_IOC_READ|_VKI_IOC_WRITE, \
0608                                        (type),(nr),sizeof(size))
0609 
0610 /* used to decode them.. */
0611 #define _VKI_IOC_DIR(nr)        (((nr) >> _VKI_IOC_DIRSHIFT) & _VKI_IOC_DIRMASK)
0612 #define _VKI_IOC_TYPE(nr)       (((nr) >> _VKI_IOC_TYPESHIFT) & _VKI_IOC_TYPEMASK)
0613 #define _VKI_IOC_NR(nr)         (((nr) >> _VKI_IOC_NRSHIFT) & _VKI_IOC_NRMASK)
0614 #define _VKI_IOC_SIZE(nr)       (((nr) >> _VKI_IOC_SIZESHIFT) & _VKI_IOC_SIZEMASK)
0615 
0616 //----------------------------------------------------------------------
0617 // From linux-2.6.13/include/asm-ppc64/ioctls.h
0618 //----------------------------------------------------------------------
0619 
0620 #define VKI_FIOCLEX         _VKI_IO('f', 1)
0621 #define VKI_FIONCLEX        _VKI_IO('f', 2)
0622 
0623 #define VKI_TCGETS          _VKI_IOR('t', 19, struct vki_termios)
0624 #define VKI_TCSETS          _VKI_IOW('t', 20, struct vki_termios)
0625 #define VKI_TCSETSW         _VKI_IOW('t', 21, struct vki_termios)
0626 #define VKI_TCSETSF         _VKI_IOW('t', 22, struct vki_termios)
0627 #define VKI_TCGETA          _VKI_IOR('t', 23, struct vki_termio)
0628 #define VKI_TCSETA          _VKI_IOW('t', 24, struct vki_termio)
0629 #define VKI_TCSETAW         _VKI_IOW('t', 25, struct vki_termio)
0630 #define VKI_TCSETAF         _VKI_IOW('t', 28, struct vki_termio)
0631 #define VKI_TCSBRK          _VKI_IO('t', 29)
0632 #define VKI_TCXONC          _VKI_IO('t', 30)
0633 #define VKI_TCFLSH          _VKI_IO('t', 31)
0634 #define VKI_TIOCSCTTY       0x540E
0635 #define VKI_TIOCGPGRP       _VKI_IOR('t', 119, int)
0636 #define VKI_TIOCSPGRP       _VKI_IOW('t', 118, int)
0637 #define VKI_TIOCOUTQ        _VKI_IOR('t', 115, int)     /* output queue size */
0638 #define VKI_TIOCGWINSZ      _VKI_IOR('t', 104, struct vki_winsize)
0639 #define VKI_TIOCSWINSZ      _VKI_IOW('t', 103, struct vki_winsize)
0640 #define VKI_TIOCMGET        0x5415
0641 #define VKI_TIOCMBIS        0x5416
0642 #define VKI_TIOCMBIC        0x5417
0643 #define VKI_TIOCMSET        0x5418
0644 #define VKI_FIONREAD        _VKI_IOR('f', 127, int)
0645 #define VKI_TIOCLINUX       0x541C
0646 #define VKI_FIONBIO         _VKI_IOW('f', 126, int)
0647 #define VKI_TIOCNOTTY       0x5422
0648 #define VKI_TCSBRKP         0x5425  /* Needed for POSIX tcsendbreak() */
0649 #define VKI_TIOCGPTN        _VKI_IOR('T',0x30, unsigned int) 
0650                             /* Get Pty Number (of pty-mux device) */
0651 #define VKI_TIOCSPTLCK      _VKI_IOW('T',0x31, int)  /* Lock/unlock Pty */
0652 #define VKI_FIOASYNC        _VKI_IOW('f', 125, int)
0653 #define VKI_TIOCSERGETLSR   0x5459 /* Get line status register */
0654 #define VKI_TIOCGICOUNT     0x545D /* read serial port inline interrupt counts */
0655 #define VKI_FIOQSIZE        _VKI_IOR('f', 128, vki_loff_t)
0656 
0657 //----------------------------------------------------------------------
0658 // From linux-2.6.13/include/asm-ppc64/poll.h
0659 //----------------------------------------------------------------------
0660 
0661 #define VKI_POLLIN          0x0001
0662 
0663 struct vki_pollfd {
0664   int fd;
0665   short events;
0666   short revents;
0667 };
0668 
0669 //----------------------------------------------------------------------
0670 // From linux-2.6.13/include/asm-ppc64/user.h
0671 //----------------------------------------------------------------------
0672 
0673 // Not sure what's needed from here
0674 
0675 //----------------------------------------------------------------------
0676 // From linux-2.6.13/include/asm-ppc64/elf.h
0677 //----------------------------------------------------------------------
0678 
0679 // Not sure what's needed from here
0680 
0681 //----------------------------------------------------------------------
0682 // From linux-2.6.13/include/asm-ppc64/ucontext.h
0683 //----------------------------------------------------------------------
0684 
0685 struct vki_ucontext {
0686   unsigned long         uc_flags;
0687   struct vki_ucontext  *uc_link;
0688   vki_stack_t           uc_stack;
0689   vki_sigset_t          uc_sigmask;
0690   vki_sigset_t          __unused0[15]; /* Allow for uc_sigmask growth */
0691   struct vki_sigcontext uc_mcontext;  /* last for extensibility */
0692 };
0693 
0694 // CAB: TODO
0695 typedef char vki_modify_ldt_t;
0696 
0697 //----------------------------------------------------------------------
0698 // From linux-2.6.13/include/asm-ppc64/ipcbuf.h
0699 //----------------------------------------------------------------------
0700 
0701 struct vki_ipc64_perm
0702 {
0703   __vki_kernel_key_t  key;
0704   __vki_kernel_uid_t  uid;
0705   __vki_kernel_gid_t  gid;
0706   __vki_kernel_uid_t  cuid;
0707   __vki_kernel_gid_t  cgid;
0708   __vki_kernel_mode_t mode;
0709   unsigned int        seq;
0710   unsigned int        __pad1;
0711   unsigned long       __unused1;
0712   unsigned long       __unused2;
0713 };
0714 
0715 //----------------------------------------------------------------------
0716 // From linux-2.6.13/include/asm-ppc64/sembuf.h
0717 //----------------------------------------------------------------------
0718 
0719 struct vki_semid64_ds {
0720   struct vki_ipc64_perm sem_perm;     /* permissions .. see ipc.h */
0721   __vki_kernel_time_t   sem_otime;      /* last semop time */
0722   __vki_kernel_time_t   sem_ctime;      /* last change time */
0723   unsigned long         sem_nsems;      /* no. of semaphores in array */
0724   unsigned long         __unused1;
0725   unsigned long         __unused2;
0726 };
0727 
0728 //----------------------------------------------------------------------
0729 // From linux-2.6.13/include/asm-ppc64/msgbuf.h
0730 //----------------------------------------------------------------------
0731 
0732 struct vki_msqid64_ds {
0733   struct vki_ipc64_perm msg_perm;
0734   __vki_kernel_time_t   msg_stime;      /* last msgsnd time */
0735   __vki_kernel_time_t   msg_rtime;      /* last msgrcv time */
0736   __vki_kernel_time_t   msg_ctime;      /* last change time */
0737   unsigned long         msg_cbytes;      /* current number of bytes on queue */
0738   unsigned long         msg_qnum;        /* number of messages in queue */
0739   unsigned long         msg_qbytes;      /* max number of bytes on queue */
0740   __vki_kernel_pid_t    msg_lspid;       /* pid of last msgsnd */
0741   __vki_kernel_pid_t    msg_lrpid;       /* last receive pid */
0742   unsigned long         __unused1;
0743   unsigned long         __unused2;
0744 };
0745 
0746 //----------------------------------------------------------------------
0747 // From linux-2.6.13/include/asm-ppc64/ipc.h
0748 //----------------------------------------------------------------------
0749 
0750 // this just does #include <asm-generic/ipc.h>
0751 
0752 struct vki_ipc_kludge {
0753   struct vki_msgbuf __user *msgp;
0754   long msgtyp;
0755 };
0756 
0757 #define VKI_SEMOP            1
0758 #define VKI_SEMGET           2
0759 #define VKI_SEMCTL           3
0760 #define VKI_SEMTIMEDOP       4
0761 #define VKI_MSGSND          11
0762 #define VKI_MSGRCV          12
0763 #define VKI_MSGGET          13
0764 #define VKI_MSGCTL          14
0765 #define VKI_SHMAT           21
0766 #define VKI_SHMDT           22
0767 #define VKI_SHMGET          23
0768 #define VKI_SHMCTL          24
0769 
0770 //----------------------------------------------------------------------
0771 // From linux-2.6.13/include/asm-ppc64/shmbuf.h
0772 //----------------------------------------------------------------------
0773 
0774 struct vki_shmid64_ds {
0775   struct vki_ipc64_perm       shm_perm;       /* operation perms */
0776   __vki_kernel_time_t         shm_atime;      /* last attach time */
0777   __vki_kernel_time_t         shm_dtime;      /* last detach time */
0778   __vki_kernel_time_t         shm_ctime;      /* last change time */
0779   vki_size_t                  shm_segsz;      /* size of segment (bytes) */
0780   __vki_kernel_pid_t          shm_cpid;       /* pid of creator */
0781   __vki_kernel_pid_t          shm_lpid;       /* pid of last operator */
0782   unsigned long               shm_nattch;     /* no. of current attaches */
0783   unsigned long               __unused1;
0784   unsigned long               __unused2;
0785 };
0786 
0787 struct vki_shminfo64 {
0788   unsigned long   shmmax;
0789   unsigned long   shmmin;
0790   unsigned long   shmmni;
0791   unsigned long   shmseg;
0792   unsigned long   shmall;
0793   unsigned long   __unused1;
0794   unsigned long   __unused2;
0795   unsigned long   __unused3;
0796   unsigned long   __unused4;
0797 };
0798 
0799 //----------------------------------------------------------------------
0800 // From linux-2.6.8.1/include/asm-generic/errno.h
0801 //----------------------------------------------------------------------
0802 
0803 #define VKI_ENOSYS       38  /* Function not implemented */
0804 #define VKI_EOVERFLOW    75  /* Value too large for defined data type */
0805 
0806 //----------------------------------------------------------------------
0807 // From linux-3.19.0/arch/powerpc/include/uapi/asm/ioctls.h
0808 //----------------------------------------------------------------------
0809 
0810 #define VKI_TIOCGSERIAL     0x541E
0811 #define VKI_TIOCSSERIAL     0x541F
0812 
0813 //----------------------------------------------------------------------
0814 // end
0815 //----------------------------------------------------------------------
0816 
0817 #endif // __VKI_PPC64_LINUX_H
0818 
0819 /*--------------------------------------------------------------------*/
0820 /*--- end                                                          ---*/
0821 /*--------------------------------------------------------------------*/