Merge tag 'tpmdd-next-6.10-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-2.6-block.git] / arch / sparc / include / asm / sigcontext.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef __SPARC_SIGCONTEXT_H
3 #define __SPARC_SIGCONTEXT_H
4
5 #include <asm/ptrace.h>
6 #include <uapi/asm/sigcontext.h>
7
8 #ifndef __ASSEMBLY__
9
10 #define __SUNOS_MAXWIN   31
11
12 /* This is what SunOS does, so shall I unless we use new 32bit signals or rt signals. */
13 struct sigcontext32 {
14         int sigc_onstack;      /* state to restore */
15         int sigc_mask;         /* sigmask to restore */
16         int sigc_sp;           /* stack pointer */
17         int sigc_pc;           /* program counter */
18         int sigc_npc;          /* next program counter */
19         int sigc_psr;          /* for condition codes etc */
20         int sigc_g1;           /* User uses these two registers */
21         int sigc_o0;           /* within the trampoline code. */
22
23         /* Now comes information regarding the users window set
24          * at the time of the signal.
25          */
26         int sigc_oswins;       /* outstanding windows */
27
28         /* stack ptrs for each regwin buf */
29         unsigned int sigc_spbuf[__SUNOS_MAXWIN];
30
31         /* Windows to restore after signal */
32         struct reg_window32 sigc_wbuf[__SUNOS_MAXWIN];
33 };
34
35
36 /* This is what we use for 32bit new non-rt signals. */
37
38 typedef struct {
39         struct {
40                 unsigned int psr;
41                 unsigned int pc;
42                 unsigned int npc;
43                 unsigned int y;
44                 unsigned int u_regs[16]; /* globals and ins */
45         }                       si_regs;
46         int                     si_mask;
47 } __siginfo32_t;
48
49 #define __SIGC_MAXWIN   7
50
51 typedef struct {
52         unsigned long locals[8];
53         unsigned long ins[8];
54 } __siginfo_reg_window;
55
56 typedef struct {
57         int                     wsaved;
58         __siginfo_reg_window    reg_window[__SIGC_MAXWIN];
59         unsigned long           rwbuf_stkptrs[__SIGC_MAXWIN];
60 } __siginfo_rwin_t;
61
62 #ifdef CONFIG_SPARC64
63 typedef struct {
64         unsigned   int si_float_regs [64];
65         unsigned   long si_fsr;
66         unsigned   long si_gsr;
67         unsigned   long si_fprs;
68 } __siginfo_fpu_t;
69
70 /* This is what SunOS doesn't, so we have to write this alone
71    and do it properly. */
72 struct sigcontext {
73         /* The size of this array has to match SI_MAX_SIZE from siginfo.h */
74         char                    sigc_info[128];
75         struct {
76                 unsigned long   u_regs[16]; /* globals and ins */
77                 unsigned long   tstate;
78                 unsigned long   tpc;
79                 unsigned long   tnpc;
80                 unsigned int    y;
81                 unsigned int    fprs;
82         }                       sigc_regs;
83         __siginfo_fpu_t *       sigc_fpu_save;
84         struct {
85                 void    *       ss_sp;
86                 int             ss_flags;
87                 unsigned long   ss_size;
88         }                       sigc_stack;
89         unsigned long           sigc_mask;
90         __siginfo_rwin_t *      sigc_rwin_save;
91 };
92
93 #else
94
95 typedef struct {
96         unsigned long si_float_regs [32];
97         unsigned long si_fsr;
98         unsigned long si_fpqdepth;
99         struct {
100                 unsigned long *insn_addr;
101                 unsigned long insn;
102         } si_fpqueue [16];
103 } __siginfo_fpu_t;
104 #endif /* (CONFIG_SPARC64) */
105
106
107 #endif /* !(__ASSEMBLY__) */
108
109 #endif /* !(__SPARC_SIGCONTEXT_H) */