162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci#ifndef _ASM_COMPAT_H 362306a36Sopenharmony_ci#define _ASM_COMPAT_H 462306a36Sopenharmony_ci/* 562306a36Sopenharmony_ci * Architecture specific compatibility types 662306a36Sopenharmony_ci */ 762306a36Sopenharmony_ci#include <linux/thread_info.h> 862306a36Sopenharmony_ci#include <linux/types.h> 962306a36Sopenharmony_ci#include <asm/page.h> 1062306a36Sopenharmony_ci#include <asm/ptrace.h> 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#define __compat_uid_t __compat_uid_t 1362306a36Sopenharmony_citypedef s32 __compat_uid_t; 1462306a36Sopenharmony_citypedef s32 __compat_gid_t; 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_citypedef __compat_uid_t __compat_uid32_t; 1762306a36Sopenharmony_citypedef __compat_gid_t __compat_gid32_t; 1862306a36Sopenharmony_ci#define __compat_uid32_t __compat_uid32_t 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci#define compat_statfs compat_statfs 2162306a36Sopenharmony_ci#define compat_ipc64_perm compat_ipc64_perm 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ci#define _COMPAT_NSIG 128 /* Don't ask !$@#% ... */ 2462306a36Sopenharmony_ci#define _COMPAT_NSIG_BPW 32 2562306a36Sopenharmony_citypedef u32 compat_sigset_word; 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ci#define COMPAT_RLIM_INFINITY 0x7fffffffUL 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci#include <asm-generic/compat.h> 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ci#define COMPAT_UTS_MACHINE "mips\0\0\0" 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_citypedef u32 compat_nlink_t; 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_cistruct compat_stat { 3662306a36Sopenharmony_ci compat_dev_t st_dev; 3762306a36Sopenharmony_ci s32 st_pad1[3]; 3862306a36Sopenharmony_ci compat_ino_t st_ino; 3962306a36Sopenharmony_ci compat_mode_t st_mode; 4062306a36Sopenharmony_ci compat_nlink_t st_nlink; 4162306a36Sopenharmony_ci __compat_uid_t st_uid; 4262306a36Sopenharmony_ci __compat_gid_t st_gid; 4362306a36Sopenharmony_ci compat_dev_t st_rdev; 4462306a36Sopenharmony_ci s32 st_pad2[2]; 4562306a36Sopenharmony_ci compat_off_t st_size; 4662306a36Sopenharmony_ci s32 st_pad3; 4762306a36Sopenharmony_ci old_time32_t st_atime; 4862306a36Sopenharmony_ci s32 st_atime_nsec; 4962306a36Sopenharmony_ci old_time32_t st_mtime; 5062306a36Sopenharmony_ci s32 st_mtime_nsec; 5162306a36Sopenharmony_ci old_time32_t st_ctime; 5262306a36Sopenharmony_ci s32 st_ctime_nsec; 5362306a36Sopenharmony_ci s32 st_blksize; 5462306a36Sopenharmony_ci s32 st_blocks; 5562306a36Sopenharmony_ci s32 st_pad4[14]; 5662306a36Sopenharmony_ci}; 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ci#define __ARCH_COMPAT_FLOCK_EXTRA_SYSID s32 l_sysid; 5962306a36Sopenharmony_ci#define __ARCH_COMPAT_FLOCK_PAD s32 pad[4]; 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_cistruct compat_statfs { 6262306a36Sopenharmony_ci int f_type; 6362306a36Sopenharmony_ci int f_bsize; 6462306a36Sopenharmony_ci int f_frsize; 6562306a36Sopenharmony_ci int f_blocks; 6662306a36Sopenharmony_ci int f_bfree; 6762306a36Sopenharmony_ci int f_files; 6862306a36Sopenharmony_ci int f_ffree; 6962306a36Sopenharmony_ci int f_bavail; 7062306a36Sopenharmony_ci compat_fsid_t f_fsid; 7162306a36Sopenharmony_ci int f_namelen; 7262306a36Sopenharmony_ci int f_flags; 7362306a36Sopenharmony_ci int f_spare[5]; 7462306a36Sopenharmony_ci}; 7562306a36Sopenharmony_ci 7662306a36Sopenharmony_cistruct compat_ipc64_perm { 7762306a36Sopenharmony_ci compat_key_t key; 7862306a36Sopenharmony_ci __compat_uid32_t uid; 7962306a36Sopenharmony_ci __compat_gid32_t gid; 8062306a36Sopenharmony_ci __compat_uid32_t cuid; 8162306a36Sopenharmony_ci __compat_gid32_t cgid; 8262306a36Sopenharmony_ci compat_mode_t mode; 8362306a36Sopenharmony_ci unsigned short seq; 8462306a36Sopenharmony_ci unsigned short __pad2; 8562306a36Sopenharmony_ci compat_ulong_t __unused1; 8662306a36Sopenharmony_ci compat_ulong_t __unused2; 8762306a36Sopenharmony_ci}; 8862306a36Sopenharmony_ci 8962306a36Sopenharmony_cistruct compat_semid64_ds { 9062306a36Sopenharmony_ci struct compat_ipc64_perm sem_perm; 9162306a36Sopenharmony_ci compat_ulong_t sem_otime; 9262306a36Sopenharmony_ci compat_ulong_t sem_ctime; 9362306a36Sopenharmony_ci compat_ulong_t sem_nsems; 9462306a36Sopenharmony_ci compat_ulong_t sem_otime_high; 9562306a36Sopenharmony_ci compat_ulong_t sem_ctime_high; 9662306a36Sopenharmony_ci}; 9762306a36Sopenharmony_ci 9862306a36Sopenharmony_cistruct compat_msqid64_ds { 9962306a36Sopenharmony_ci struct compat_ipc64_perm msg_perm; 10062306a36Sopenharmony_ci#ifndef CONFIG_CPU_LITTLE_ENDIAN 10162306a36Sopenharmony_ci compat_ulong_t msg_stime_high; 10262306a36Sopenharmony_ci#endif 10362306a36Sopenharmony_ci compat_ulong_t msg_stime; 10462306a36Sopenharmony_ci#ifdef CONFIG_CPU_LITTLE_ENDIAN 10562306a36Sopenharmony_ci compat_ulong_t msg_stime_high; 10662306a36Sopenharmony_ci#endif 10762306a36Sopenharmony_ci#ifndef CONFIG_CPU_LITTLE_ENDIAN 10862306a36Sopenharmony_ci compat_ulong_t msg_rtime_high; 10962306a36Sopenharmony_ci#endif 11062306a36Sopenharmony_ci compat_ulong_t msg_rtime; 11162306a36Sopenharmony_ci#ifdef CONFIG_CPU_LITTLE_ENDIAN 11262306a36Sopenharmony_ci compat_ulong_t msg_rtime_high; 11362306a36Sopenharmony_ci#endif 11462306a36Sopenharmony_ci#ifndef CONFIG_CPU_LITTLE_ENDIAN 11562306a36Sopenharmony_ci compat_ulong_t msg_ctime_high; 11662306a36Sopenharmony_ci#endif 11762306a36Sopenharmony_ci compat_ulong_t msg_ctime; 11862306a36Sopenharmony_ci#ifdef CONFIG_CPU_LITTLE_ENDIAN 11962306a36Sopenharmony_ci compat_ulong_t msg_ctime_high; 12062306a36Sopenharmony_ci#endif 12162306a36Sopenharmony_ci compat_ulong_t msg_cbytes; 12262306a36Sopenharmony_ci compat_ulong_t msg_qnum; 12362306a36Sopenharmony_ci compat_ulong_t msg_qbytes; 12462306a36Sopenharmony_ci compat_pid_t msg_lspid; 12562306a36Sopenharmony_ci compat_pid_t msg_lrpid; 12662306a36Sopenharmony_ci compat_ulong_t __unused4; 12762306a36Sopenharmony_ci compat_ulong_t __unused5; 12862306a36Sopenharmony_ci}; 12962306a36Sopenharmony_ci 13062306a36Sopenharmony_cistruct compat_shmid64_ds { 13162306a36Sopenharmony_ci struct compat_ipc64_perm shm_perm; 13262306a36Sopenharmony_ci compat_size_t shm_segsz; 13362306a36Sopenharmony_ci compat_ulong_t shm_atime; 13462306a36Sopenharmony_ci compat_ulong_t shm_dtime; 13562306a36Sopenharmony_ci compat_ulong_t shm_ctime; 13662306a36Sopenharmony_ci compat_pid_t shm_cpid; 13762306a36Sopenharmony_ci compat_pid_t shm_lpid; 13862306a36Sopenharmony_ci compat_ulong_t shm_nattch; 13962306a36Sopenharmony_ci compat_ushort_t shm_atime_high; 14062306a36Sopenharmony_ci compat_ushort_t shm_dtime_high; 14162306a36Sopenharmony_ci compat_ushort_t shm_ctime_high; 14262306a36Sopenharmony_ci compat_ushort_t __unused2; 14362306a36Sopenharmony_ci}; 14462306a36Sopenharmony_ci 14562306a36Sopenharmony_ci/* MIPS has unusual order of fields in stack_t */ 14662306a36Sopenharmony_citypedef struct compat_sigaltstack { 14762306a36Sopenharmony_ci compat_uptr_t ss_sp; 14862306a36Sopenharmony_ci compat_size_t ss_size; 14962306a36Sopenharmony_ci int ss_flags; 15062306a36Sopenharmony_ci} compat_stack_t; 15162306a36Sopenharmony_ci#define compat_sigaltstack compat_sigaltstack 15262306a36Sopenharmony_ci 15362306a36Sopenharmony_cistatic inline int is_compat_task(void) 15462306a36Sopenharmony_ci{ 15562306a36Sopenharmony_ci return test_thread_flag(TIF_32BIT_ADDR); 15662306a36Sopenharmony_ci} 15762306a36Sopenharmony_ci 15862306a36Sopenharmony_ci#endif /* _ASM_COMPAT_H */ 159