1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun #ifndef _ASM_PARISC_COMPAT_H 3*4882a593Smuzhiyun #define _ASM_PARISC_COMPAT_H 4*4882a593Smuzhiyun /* 5*4882a593Smuzhiyun * Architecture specific compatibility types 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun #include <linux/types.h> 8*4882a593Smuzhiyun #include <linux/sched.h> 9*4882a593Smuzhiyun #include <linux/thread_info.h> 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun #include <asm-generic/compat.h> 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun #define COMPAT_USER_HZ 100 14*4882a593Smuzhiyun #define COMPAT_UTS_MACHINE "parisc\0\0" 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun typedef u32 __compat_uid_t; 17*4882a593Smuzhiyun typedef u32 __compat_gid_t; 18*4882a593Smuzhiyun typedef u32 __compat_uid32_t; 19*4882a593Smuzhiyun typedef u32 __compat_gid32_t; 20*4882a593Smuzhiyun typedef u16 compat_mode_t; 21*4882a593Smuzhiyun typedef u32 compat_dev_t; 22*4882a593Smuzhiyun typedef u16 compat_nlink_t; 23*4882a593Smuzhiyun typedef u16 compat_ipc_pid_t; 24*4882a593Smuzhiyun typedef u32 compat_caddr_t; 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun struct compat_stat { 27*4882a593Smuzhiyun compat_dev_t st_dev; /* dev_t is 32 bits on parisc */ 28*4882a593Smuzhiyun compat_ino_t st_ino; /* 32 bits */ 29*4882a593Smuzhiyun compat_mode_t st_mode; /* 16 bits */ 30*4882a593Smuzhiyun compat_nlink_t st_nlink; /* 16 bits */ 31*4882a593Smuzhiyun u16 st_reserved1; /* old st_uid */ 32*4882a593Smuzhiyun u16 st_reserved2; /* old st_gid */ 33*4882a593Smuzhiyun compat_dev_t st_rdev; 34*4882a593Smuzhiyun compat_off_t st_size; 35*4882a593Smuzhiyun old_time32_t st_atime; 36*4882a593Smuzhiyun u32 st_atime_nsec; 37*4882a593Smuzhiyun old_time32_t st_mtime; 38*4882a593Smuzhiyun u32 st_mtime_nsec; 39*4882a593Smuzhiyun old_time32_t st_ctime; 40*4882a593Smuzhiyun u32 st_ctime_nsec; 41*4882a593Smuzhiyun s32 st_blksize; 42*4882a593Smuzhiyun s32 st_blocks; 43*4882a593Smuzhiyun u32 __unused1; /* ACL stuff */ 44*4882a593Smuzhiyun compat_dev_t __unused2; /* network */ 45*4882a593Smuzhiyun compat_ino_t __unused3; /* network */ 46*4882a593Smuzhiyun u32 __unused4; /* cnodes */ 47*4882a593Smuzhiyun u16 __unused5; /* netsite */ 48*4882a593Smuzhiyun short st_fstype; 49*4882a593Smuzhiyun compat_dev_t st_realdev; 50*4882a593Smuzhiyun u16 st_basemode; 51*4882a593Smuzhiyun u16 st_spareshort; 52*4882a593Smuzhiyun __compat_uid32_t st_uid; 53*4882a593Smuzhiyun __compat_gid32_t st_gid; 54*4882a593Smuzhiyun u32 st_spare4[3]; 55*4882a593Smuzhiyun }; 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun struct compat_flock { 58*4882a593Smuzhiyun short l_type; 59*4882a593Smuzhiyun short l_whence; 60*4882a593Smuzhiyun compat_off_t l_start; 61*4882a593Smuzhiyun compat_off_t l_len; 62*4882a593Smuzhiyun compat_pid_t l_pid; 63*4882a593Smuzhiyun }; 64*4882a593Smuzhiyun 65*4882a593Smuzhiyun struct compat_flock64 { 66*4882a593Smuzhiyun short l_type; 67*4882a593Smuzhiyun short l_whence; 68*4882a593Smuzhiyun compat_loff_t l_start; 69*4882a593Smuzhiyun compat_loff_t l_len; 70*4882a593Smuzhiyun compat_pid_t l_pid; 71*4882a593Smuzhiyun }; 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun struct compat_statfs { 74*4882a593Smuzhiyun s32 f_type; 75*4882a593Smuzhiyun s32 f_bsize; 76*4882a593Smuzhiyun s32 f_blocks; 77*4882a593Smuzhiyun s32 f_bfree; 78*4882a593Smuzhiyun s32 f_bavail; 79*4882a593Smuzhiyun s32 f_files; 80*4882a593Smuzhiyun s32 f_ffree; 81*4882a593Smuzhiyun __kernel_fsid_t f_fsid; 82*4882a593Smuzhiyun s32 f_namelen; 83*4882a593Smuzhiyun s32 f_frsize; 84*4882a593Smuzhiyun s32 f_flags; 85*4882a593Smuzhiyun s32 f_spare[4]; 86*4882a593Smuzhiyun }; 87*4882a593Smuzhiyun 88*4882a593Smuzhiyun struct compat_sigcontext { 89*4882a593Smuzhiyun compat_int_t sc_flags; 90*4882a593Smuzhiyun compat_int_t sc_gr[32]; /* PSW in sc_gr[0] */ 91*4882a593Smuzhiyun u64 sc_fr[32]; 92*4882a593Smuzhiyun compat_int_t sc_iasq[2]; 93*4882a593Smuzhiyun compat_int_t sc_iaoq[2]; 94*4882a593Smuzhiyun compat_int_t sc_sar; /* cr11 */ 95*4882a593Smuzhiyun }; 96*4882a593Smuzhiyun 97*4882a593Smuzhiyun #define COMPAT_RLIM_INFINITY 0xffffffff 98*4882a593Smuzhiyun 99*4882a593Smuzhiyun typedef u32 compat_old_sigset_t; /* at least 32 bits */ 100*4882a593Smuzhiyun 101*4882a593Smuzhiyun #define _COMPAT_NSIG 64 102*4882a593Smuzhiyun #define _COMPAT_NSIG_BPW 32 103*4882a593Smuzhiyun 104*4882a593Smuzhiyun typedef u32 compat_sigset_word; 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun #define COMPAT_OFF_T_MAX 0x7fffffff 107*4882a593Smuzhiyun 108*4882a593Smuzhiyun struct compat_ipc64_perm { 109*4882a593Smuzhiyun compat_key_t key; 110*4882a593Smuzhiyun __compat_uid_t uid; 111*4882a593Smuzhiyun __compat_gid_t gid; 112*4882a593Smuzhiyun __compat_uid_t cuid; 113*4882a593Smuzhiyun __compat_gid_t cgid; 114*4882a593Smuzhiyun unsigned short int __pad1; 115*4882a593Smuzhiyun compat_mode_t mode; 116*4882a593Smuzhiyun unsigned short int __pad2; 117*4882a593Smuzhiyun unsigned short int seq; 118*4882a593Smuzhiyun unsigned int __pad3; 119*4882a593Smuzhiyun unsigned long __unused1; /* yes they really are 64bit pads */ 120*4882a593Smuzhiyun unsigned long __unused2; 121*4882a593Smuzhiyun }; 122*4882a593Smuzhiyun 123*4882a593Smuzhiyun struct compat_semid64_ds { 124*4882a593Smuzhiyun struct compat_ipc64_perm sem_perm; 125*4882a593Smuzhiyun unsigned int sem_otime_high; 126*4882a593Smuzhiyun unsigned int sem_otime; 127*4882a593Smuzhiyun unsigned int sem_ctime_high; 128*4882a593Smuzhiyun unsigned int sem_ctime; 129*4882a593Smuzhiyun compat_ulong_t sem_nsems; 130*4882a593Smuzhiyun compat_ulong_t __unused3; 131*4882a593Smuzhiyun compat_ulong_t __unused4; 132*4882a593Smuzhiyun }; 133*4882a593Smuzhiyun 134*4882a593Smuzhiyun struct compat_msqid64_ds { 135*4882a593Smuzhiyun struct compat_ipc64_perm msg_perm; 136*4882a593Smuzhiyun unsigned int msg_stime_high; 137*4882a593Smuzhiyun unsigned int msg_stime; 138*4882a593Smuzhiyun unsigned int msg_rtime_high; 139*4882a593Smuzhiyun unsigned int msg_rtime; 140*4882a593Smuzhiyun unsigned int msg_ctime_high; 141*4882a593Smuzhiyun unsigned int msg_ctime; 142*4882a593Smuzhiyun compat_ulong_t msg_cbytes; 143*4882a593Smuzhiyun compat_ulong_t msg_qnum; 144*4882a593Smuzhiyun compat_ulong_t msg_qbytes; 145*4882a593Smuzhiyun compat_pid_t msg_lspid; 146*4882a593Smuzhiyun compat_pid_t msg_lrpid; 147*4882a593Smuzhiyun compat_ulong_t __unused4; 148*4882a593Smuzhiyun compat_ulong_t __unused5; 149*4882a593Smuzhiyun }; 150*4882a593Smuzhiyun 151*4882a593Smuzhiyun struct compat_shmid64_ds { 152*4882a593Smuzhiyun struct compat_ipc64_perm shm_perm; 153*4882a593Smuzhiyun unsigned int shm_atime_high; 154*4882a593Smuzhiyun unsigned int shm_atime; 155*4882a593Smuzhiyun unsigned int shm_dtime_high; 156*4882a593Smuzhiyun unsigned int shm_dtime; 157*4882a593Smuzhiyun unsigned int shm_ctime_high; 158*4882a593Smuzhiyun unsigned int shm_ctime; 159*4882a593Smuzhiyun unsigned int __unused4; 160*4882a593Smuzhiyun compat_size_t shm_segsz; 161*4882a593Smuzhiyun compat_pid_t shm_cpid; 162*4882a593Smuzhiyun compat_pid_t shm_lpid; 163*4882a593Smuzhiyun compat_ulong_t shm_nattch; 164*4882a593Smuzhiyun compat_ulong_t __unused5; 165*4882a593Smuzhiyun compat_ulong_t __unused6; 166*4882a593Smuzhiyun }; 167*4882a593Smuzhiyun 168*4882a593Smuzhiyun /* 169*4882a593Smuzhiyun * The type of struct elf_prstatus.pr_reg in compatible core dumps. 170*4882a593Smuzhiyun */ 171*4882a593Smuzhiyun #define COMPAT_ELF_NGREG 80 172*4882a593Smuzhiyun typedef compat_ulong_t compat_elf_gregset_t[COMPAT_ELF_NGREG]; 173*4882a593Smuzhiyun arch_compat_alloc_user_space(long len)174*4882a593Smuzhiyunstatic __inline__ void __user *arch_compat_alloc_user_space(long len) 175*4882a593Smuzhiyun { 176*4882a593Smuzhiyun struct pt_regs *regs = ¤t->thread.regs; 177*4882a593Smuzhiyun return (void __user *)regs->gr[30]; 178*4882a593Smuzhiyun } 179*4882a593Smuzhiyun __is_compat_task(struct task_struct * t)180*4882a593Smuzhiyunstatic inline int __is_compat_task(struct task_struct *t) 181*4882a593Smuzhiyun { 182*4882a593Smuzhiyun return test_ti_thread_flag(task_thread_info(t), TIF_32BIT); 183*4882a593Smuzhiyun } 184*4882a593Smuzhiyun is_compat_task(void)185*4882a593Smuzhiyunstatic inline int is_compat_task(void) 186*4882a593Smuzhiyun { 187*4882a593Smuzhiyun return __is_compat_task(current); 188*4882a593Smuzhiyun } 189*4882a593Smuzhiyun 190*4882a593Smuzhiyun #endif /* _ASM_PARISC_COMPAT_H */ 191