Merge git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
[sfrench/cifs-2.6.git] / include / asm-x86 / sigcontext.h
1 #ifndef _ASM_X86_SIGCONTEXT_H
2 #define _ASM_X86_SIGCONTEXT_H
3
4 #include <linux/compiler.h>
5 #include <asm/types.h>
6
7 #ifdef __i386__
8 /*
9  * As documented in the iBCS2 standard..
10  *
11  * The first part of "struct _fpstate" is just the normal i387
12  * hardware setup, the extra "status" word is used to save the
13  * coprocessor status word before entering the handler.
14  *
15  * Pentium III FXSR, SSE support
16  *      Gareth Hughes <gareth@valinux.com>, May 2000
17  *
18  * The FPU state data structure has had to grow to accommodate the
19  * extended FPU state required by the Streaming SIMD Extensions.
20  * There is no documented standard to accomplish this at the moment.
21  */
22 struct _fpreg {
23         unsigned short significand[4];
24         unsigned short exponent;
25 };
26
27 struct _fpxreg {
28         unsigned short significand[4];
29         unsigned short exponent;
30         unsigned short padding[3];
31 };
32
33 struct _xmmreg {
34         unsigned long element[4];
35 };
36
37 struct _fpstate {
38         /* Regular FPU environment */
39         unsigned long   cw;
40         unsigned long   sw;
41         unsigned long   tag;
42         unsigned long   ipoff;
43         unsigned long   cssel;
44         unsigned long   dataoff;
45         unsigned long   datasel;
46         struct _fpreg   _st[8];
47         unsigned short  status;
48         unsigned short  magic;          /* 0xffff = regular FPU data only */
49
50         /* FXSR FPU environment */
51         unsigned long   _fxsr_env[6];   /* FXSR FPU env is ignored */
52         unsigned long   mxcsr;
53         unsigned long   reserved;
54         struct _fpxreg  _fxsr_st[8];    /* FXSR FPU reg data is ignored */
55         struct _xmmreg  _xmm[8];
56         unsigned long   padding[56];
57 };
58
59 #define X86_FXSR_MAGIC          0x0000
60
61 struct sigcontext {
62         unsigned short gs, __gsh;
63         unsigned short fs, __fsh;
64         unsigned short es, __esh;
65         unsigned short ds, __dsh;
66         unsigned long di;
67         unsigned long si;
68         unsigned long bp;
69         unsigned long sp;
70         unsigned long bx;
71         unsigned long dx;
72         unsigned long cx;
73         unsigned long ax;
74         unsigned long trapno;
75         unsigned long err;
76         unsigned long ip;
77         unsigned short cs, __csh;
78         unsigned long flags;
79         unsigned long sp_at_signal;
80         unsigned short ss, __ssh;
81         struct _fpstate __user * fpstate;
82         unsigned long oldmask;
83         unsigned long cr2;
84 };
85
86 #else /* __i386__ */
87
88 /* FXSAVE frame */
89 /* Note: reserved1/2 may someday contain valuable data. Always save/restore
90    them when you change signal frames. */
91 struct _fpstate {
92         __u16   cwd;
93         __u16   swd;
94         __u16   twd;    /* Note this is not the same as the 32bit/x87/FSAVE twd */
95         __u16   fop;
96         __u64   rip;
97         __u64   rdp;
98         __u32   mxcsr;
99         __u32   mxcsr_mask;
100         __u32   st_space[32];   /* 8*16 bytes for each FP-reg */
101         __u32   xmm_space[64];  /* 16*16 bytes for each XMM-reg  */
102         __u32   reserved2[24];
103 };
104
105 struct sigcontext {
106         unsigned long r8;
107         unsigned long r9;
108         unsigned long r10;
109         unsigned long r11;
110         unsigned long r12;
111         unsigned long r13;
112         unsigned long r14;
113         unsigned long r15;
114         unsigned long di;
115         unsigned long si;
116         unsigned long bp;
117         unsigned long bx;
118         unsigned long dx;
119         unsigned long ax;
120         unsigned long cx;
121         unsigned long sp;
122         unsigned long ip;
123         unsigned long flags;
124         unsigned short cs;
125         unsigned short gs;
126         unsigned short fs;
127         unsigned short __pad0;
128         unsigned long err;
129         unsigned long trapno;
130         unsigned long oldmask;
131         unsigned long cr2;
132         struct _fpstate __user *fpstate;        /* zero when no FPU context */
133         unsigned long reserved1[8];
134 };
135
136 #endif /* !__i386__ */
137
138 #endif