/arch/powerpc/include/asm/compat.h

http://github.com/mirrors/linux · C Header · 183 lines · 148 code · 22 blank · 13 comment · 1 complexity · e197d2f71861d13e0cd308bc05c8ea84 MD5 · raw file

  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #ifndef _ASM_POWERPC_COMPAT_H
  3. #define _ASM_POWERPC_COMPAT_H
  4. #ifdef __KERNEL__
  5. /*
  6. * Architecture specific compatibility types
  7. */
  8. #include <linux/types.h>
  9. #include <linux/sched.h>
  10. #include <asm-generic/compat.h>
  11. #define COMPAT_USER_HZ 100
  12. #ifdef __BIG_ENDIAN__
  13. #define COMPAT_UTS_MACHINE "ppc\0\0"
  14. #else
  15. #define COMPAT_UTS_MACHINE "ppcle\0\0"
  16. #endif
  17. typedef u32 __compat_uid_t;
  18. typedef u32 __compat_gid_t;
  19. typedef u32 __compat_uid32_t;
  20. typedef u32 __compat_gid32_t;
  21. typedef u32 compat_mode_t;
  22. typedef u32 compat_dev_t;
  23. typedef s16 compat_nlink_t;
  24. typedef u16 compat_ipc_pid_t;
  25. typedef u32 compat_caddr_t;
  26. typedef __kernel_fsid_t compat_fsid_t;
  27. typedef s64 compat_s64;
  28. typedef u64 compat_u64;
  29. struct compat_stat {
  30. compat_dev_t st_dev;
  31. compat_ino_t st_ino;
  32. compat_mode_t st_mode;
  33. compat_nlink_t st_nlink;
  34. __compat_uid32_t st_uid;
  35. __compat_gid32_t st_gid;
  36. compat_dev_t st_rdev;
  37. compat_off_t st_size;
  38. compat_off_t st_blksize;
  39. compat_off_t st_blocks;
  40. old_time32_t st_atime;
  41. u32 st_atime_nsec;
  42. old_time32_t st_mtime;
  43. u32 st_mtime_nsec;
  44. old_time32_t st_ctime;
  45. u32 st_ctime_nsec;
  46. u32 __unused4[2];
  47. };
  48. struct compat_flock {
  49. short l_type;
  50. short l_whence;
  51. compat_off_t l_start;
  52. compat_off_t l_len;
  53. compat_pid_t l_pid;
  54. };
  55. #define F_GETLK64 12 /* using 'struct flock64' */
  56. #define F_SETLK64 13
  57. #define F_SETLKW64 14
  58. struct compat_flock64 {
  59. short l_type;
  60. short l_whence;
  61. compat_loff_t l_start;
  62. compat_loff_t l_len;
  63. compat_pid_t l_pid;
  64. };
  65. struct compat_statfs {
  66. int f_type;
  67. int f_bsize;
  68. int f_blocks;
  69. int f_bfree;
  70. int f_bavail;
  71. int f_files;
  72. int f_ffree;
  73. compat_fsid_t f_fsid;
  74. int f_namelen; /* SunOS ignores this field. */
  75. int f_frsize;
  76. int f_flags;
  77. int f_spare[4];
  78. };
  79. #define COMPAT_RLIM_INFINITY 0xffffffff
  80. typedef u32 compat_old_sigset_t;
  81. #define _COMPAT_NSIG 64
  82. #define _COMPAT_NSIG_BPW 32
  83. typedef u32 compat_sigset_word;
  84. #define COMPAT_OFF_T_MAX 0x7fffffff
  85. static inline void __user *arch_compat_alloc_user_space(long len)
  86. {
  87. struct pt_regs *regs = current->thread.regs;
  88. unsigned long usp = regs->gpr[1];
  89. /*
  90. * We can't access below the stack pointer in the 32bit ABI and
  91. * can access 288 bytes in the 64bit big-endian ABI,
  92. * or 512 bytes with the new ELFv2 little-endian ABI.
  93. */
  94. if (!is_32bit_task())
  95. usp -= USER_REDZONE_SIZE;
  96. return (void __user *) (usp - len);
  97. }
  98. /*
  99. * ipc64_perm is actually 32/64bit clean but since the compat layer refers to
  100. * it we may as well define it.
  101. */
  102. struct compat_ipc64_perm {
  103. compat_key_t key;
  104. __compat_uid_t uid;
  105. __compat_gid_t gid;
  106. __compat_uid_t cuid;
  107. __compat_gid_t cgid;
  108. compat_mode_t mode;
  109. unsigned int seq;
  110. unsigned int __pad2;
  111. unsigned long __unused1; /* yes they really are 64bit pads */
  112. unsigned long __unused2;
  113. };
  114. struct compat_semid64_ds {
  115. struct compat_ipc64_perm sem_perm;
  116. unsigned int sem_otime_high;
  117. unsigned int sem_otime;
  118. unsigned int sem_ctime_high;
  119. unsigned int sem_ctime;
  120. compat_ulong_t sem_nsems;
  121. compat_ulong_t __unused3;
  122. compat_ulong_t __unused4;
  123. };
  124. struct compat_msqid64_ds {
  125. struct compat_ipc64_perm msg_perm;
  126. unsigned int msg_stime_high;
  127. unsigned int msg_stime;
  128. unsigned int msg_rtime_high;
  129. unsigned int msg_rtime;
  130. unsigned int msg_ctime_high;
  131. unsigned int msg_ctime;
  132. compat_ulong_t msg_cbytes;
  133. compat_ulong_t msg_qnum;
  134. compat_ulong_t msg_qbytes;
  135. compat_pid_t msg_lspid;
  136. compat_pid_t msg_lrpid;
  137. compat_ulong_t __unused4;
  138. compat_ulong_t __unused5;
  139. };
  140. struct compat_shmid64_ds {
  141. struct compat_ipc64_perm shm_perm;
  142. unsigned int shm_atime_high;
  143. unsigned int shm_atime;
  144. unsigned int shm_dtime_high;
  145. unsigned int shm_dtime;
  146. unsigned int shm_ctime_high;
  147. unsigned int shm_ctime;
  148. unsigned int __unused4;
  149. compat_size_t shm_segsz;
  150. compat_pid_t shm_cpid;
  151. compat_pid_t shm_lpid;
  152. compat_ulong_t shm_nattch;
  153. compat_ulong_t __unused5;
  154. compat_ulong_t __unused6;
  155. };
  156. static inline int is_compat_task(void)
  157. {
  158. return is_32bit_task();
  159. }
  160. #endif /* __KERNEL__ */
  161. #endif /* _ASM_POWERPC_COMPAT_H */