18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Copyright (C) 2012 ARM Ltd.
48c2ecf20Sopenharmony_ci */
58c2ecf20Sopenharmony_ci#ifndef __ASM_SIGNAL32_H
68c2ecf20Sopenharmony_ci#define __ASM_SIGNAL32_H
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ci#ifdef CONFIG_COMPAT
98c2ecf20Sopenharmony_ci#include <linux/compat.h>
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_cistruct compat_sigcontext {
128c2ecf20Sopenharmony_ci	/* We always set these two fields to 0 */
138c2ecf20Sopenharmony_ci	compat_ulong_t			trap_no;
148c2ecf20Sopenharmony_ci	compat_ulong_t			error_code;
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_ci	compat_ulong_t			oldmask;
178c2ecf20Sopenharmony_ci	compat_ulong_t			arm_r0;
188c2ecf20Sopenharmony_ci	compat_ulong_t			arm_r1;
198c2ecf20Sopenharmony_ci	compat_ulong_t			arm_r2;
208c2ecf20Sopenharmony_ci	compat_ulong_t			arm_r3;
218c2ecf20Sopenharmony_ci	compat_ulong_t			arm_r4;
228c2ecf20Sopenharmony_ci	compat_ulong_t			arm_r5;
238c2ecf20Sopenharmony_ci	compat_ulong_t			arm_r6;
248c2ecf20Sopenharmony_ci	compat_ulong_t			arm_r7;
258c2ecf20Sopenharmony_ci	compat_ulong_t			arm_r8;
268c2ecf20Sopenharmony_ci	compat_ulong_t			arm_r9;
278c2ecf20Sopenharmony_ci	compat_ulong_t			arm_r10;
288c2ecf20Sopenharmony_ci	compat_ulong_t			arm_fp;
298c2ecf20Sopenharmony_ci	compat_ulong_t			arm_ip;
308c2ecf20Sopenharmony_ci	compat_ulong_t			arm_sp;
318c2ecf20Sopenharmony_ci	compat_ulong_t			arm_lr;
328c2ecf20Sopenharmony_ci	compat_ulong_t			arm_pc;
338c2ecf20Sopenharmony_ci	compat_ulong_t			arm_cpsr;
348c2ecf20Sopenharmony_ci	compat_ulong_t			fault_address;
358c2ecf20Sopenharmony_ci};
368c2ecf20Sopenharmony_ci
378c2ecf20Sopenharmony_cistruct compat_ucontext {
388c2ecf20Sopenharmony_ci	compat_ulong_t			uc_flags;
398c2ecf20Sopenharmony_ci	compat_uptr_t			uc_link;
408c2ecf20Sopenharmony_ci	compat_stack_t			uc_stack;
418c2ecf20Sopenharmony_ci	struct compat_sigcontext	uc_mcontext;
428c2ecf20Sopenharmony_ci	compat_sigset_t			uc_sigmask;
438c2ecf20Sopenharmony_ci	int 				__unused[32 - (sizeof(compat_sigset_t) / sizeof(int))];
448c2ecf20Sopenharmony_ci	compat_ulong_t			uc_regspace[128] __attribute__((__aligned__(8)));
458c2ecf20Sopenharmony_ci};
468c2ecf20Sopenharmony_ci
478c2ecf20Sopenharmony_cistruct compat_sigframe {
488c2ecf20Sopenharmony_ci	struct compat_ucontext	uc;
498c2ecf20Sopenharmony_ci	compat_ulong_t		retcode[2];
508c2ecf20Sopenharmony_ci};
518c2ecf20Sopenharmony_ci
528c2ecf20Sopenharmony_cistruct compat_rt_sigframe {
538c2ecf20Sopenharmony_ci	struct compat_siginfo info;
548c2ecf20Sopenharmony_ci	struct compat_sigframe sig;
558c2ecf20Sopenharmony_ci};
568c2ecf20Sopenharmony_ci
578c2ecf20Sopenharmony_ciint compat_setup_frame(int usig, struct ksignal *ksig, sigset_t *set,
588c2ecf20Sopenharmony_ci		       struct pt_regs *regs);
598c2ecf20Sopenharmony_ciint compat_setup_rt_frame(int usig, struct ksignal *ksig, sigset_t *set,
608c2ecf20Sopenharmony_ci			  struct pt_regs *regs);
618c2ecf20Sopenharmony_ci
628c2ecf20Sopenharmony_civoid compat_setup_restart_syscall(struct pt_regs *regs);
638c2ecf20Sopenharmony_ci#else
648c2ecf20Sopenharmony_ci
658c2ecf20Sopenharmony_cistatic inline int compat_setup_frame(int usid, struct ksignal *ksig,
668c2ecf20Sopenharmony_ci				     sigset_t *set, struct pt_regs *regs)
678c2ecf20Sopenharmony_ci{
688c2ecf20Sopenharmony_ci	return -ENOSYS;
698c2ecf20Sopenharmony_ci}
708c2ecf20Sopenharmony_ci
718c2ecf20Sopenharmony_cistatic inline int compat_setup_rt_frame(int usig, struct ksignal *ksig, sigset_t *set,
728c2ecf20Sopenharmony_ci					struct pt_regs *regs)
738c2ecf20Sopenharmony_ci{
748c2ecf20Sopenharmony_ci	return -ENOSYS;
758c2ecf20Sopenharmony_ci}
768c2ecf20Sopenharmony_ci
778c2ecf20Sopenharmony_cistatic inline void compat_setup_restart_syscall(struct pt_regs *regs)
788c2ecf20Sopenharmony_ci{
798c2ecf20Sopenharmony_ci}
808c2ecf20Sopenharmony_ci#endif /* CONFIG_COMPAT */
818c2ecf20Sopenharmony_ci#endif /* __ASM_SIGNAL32_H */
82