1/* SPDX-License-Identifier: GPL-2.0-or-later */
2#ifndef _ASM_POWERPC_SYSCALLS_32_H
3#define _ASM_POWERPC_SYSCALLS_32_H
4
5#include <linux/compat.h>
6#include <asm/siginfo.h>
7#include <asm/signal.h>
8
9/*
10 * Data types and macros for providing 32b PowerPC support.
11 */
12
13/* These are here to support 32-bit syscalls on a 64-bit kernel. */
14
15struct pt_regs32 {
16	unsigned int gpr[32];
17	unsigned int nip;
18	unsigned int msr;
19	unsigned int orig_gpr3;		/* Used for restarting system calls */
20	unsigned int ctr;
21	unsigned int link;
22	unsigned int xer;
23	unsigned int ccr;
24	unsigned int mq;		/* 601 only (not used at present) */
25	unsigned int trap;		/* Reason for being here */
26	unsigned int dar;		/* Fault registers */
27	unsigned int dsisr;
28	unsigned int result;		/* Result of a system call */
29};
30
31struct sigcontext32 {
32	unsigned int	_unused[4];
33	int		signal;
34	compat_uptr_t	handler;
35	unsigned int	oldmask;
36	compat_uptr_t	regs;  /* 4 byte pointer to the pt_regs32 structure. */
37};
38
39struct mcontext32 {
40	elf_gregset_t32		mc_gregs;
41	elf_fpregset_t		mc_fregs;
42	unsigned int		mc_pad[2];
43	elf_vrregset_t32	mc_vregs __attribute__((__aligned__(16)));
44	elf_vsrreghalf_t32      mc_vsregs __attribute__((__aligned__(16)));
45};
46
47struct ucontext32 {
48	unsigned int	  	uc_flags;
49	unsigned int 	  	uc_link;
50	compat_stack_t	 	uc_stack;
51	int		 	uc_pad[7];
52	compat_uptr_t		uc_regs;	/* points to uc_mcontext field */
53	compat_sigset_t	 	uc_sigmask;	/* mask last for extensibility */
54	/* glibc has 1024-bit signal masks, ours are 64-bit */
55	int		 	uc_maskext[30];
56	int		 	uc_pad2[3];
57	struct mcontext32	uc_mcontext;
58};
59
60#endif  // _ASM_POWERPC_SYSCALLS_32_H
61