x86: EFI runtime service support
[linux-2.6/mini2440.git] / include / asm-x86 / sigcontext.h
blob681deade5f0005d5ac0938104b377712997257a8
1 #ifndef _ASM_X86_SIGCONTEXT_H
2 #define _ASM_X86_SIGCONTEXT_H
4 #include <linux/compiler.h>
5 #include <asm/types.h>
7 #ifdef __i386__
8 /*
9 * As documented in the iBCS2 standard..
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.
15 * Pentium III FXSR, SSE support
16 * Gareth Hughes <gareth@valinux.com>, May 2000
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.
22 struct _fpreg {
23 unsigned short significand[4];
24 unsigned short exponent;
27 struct _fpxreg {
28 unsigned short significand[4];
29 unsigned short exponent;
30 unsigned short padding[3];
33 struct _xmmreg {
34 unsigned long element[4];
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 */
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];
59 #define X86_FXSR_MAGIC 0x0000
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;
86 #else /* __i386__ */
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];
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];
136 #endif /* !__i386__ */
138 #endif