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