Merge branch 'fixes' of master.kernel.org:/pub/scm/linux/kernel/git/linville/wireless-2.6
[linux-2.6] / include / asm-sparc / svr4.h
1 /* Solaris/SPARC constants and definitions -- 
2  * (C) 1996 Miguel de Icaza
3  *
4  * This file is not meant to be included by user level applications
5  * but the solaris syscall emulator
6  */
7
8 #ifndef _SPARC_SVR4_H
9 #define _SPARC_SVR4_H
10
11 /* Signals as used by svr4 */
12 typedef struct {                /* signal set type */
13         ulong sigbits[4];
14 } svr4_sigset_t;
15
16 /* Values for siginfo.code */
17 #define SVR4_SINOINFO 32767
18 /* Siginfo, sucker expects bunch of information on those parameters */
19 typedef union {
20         char total_size [128];
21         struct {
22                 int signo;
23                 int code;
24                 int error;
25                 union {
26                 } data; 
27         } siginfo;
28 } svr4_siginfo_t;
29
30 /* Context definition */
31
32 /* Location of the user stored registers into a greg_t */
33 enum {
34         SVR4_PSR, SVR4_PC, SVR4_NPC, SVR4_Y,
35         SVR4_G1,  SVR4_G2, SVR4_G3,  SVR4_G4,
36         SVR4_G5,  SVR4_G6, SVR4_G7,  SVR4_O0,
37         SVR4_O1,  SVR4_O2, SVR4_O3,  SVR4_O4,
38         SVR4_O5,  SVR4_O6, SVR4_O7
39 };
40
41 /* sizeof (regs) / sizeof (greg_t), defined in the ABI */
42 #define SVR4_NREGS  19
43 #define SVR4_MAXWIN 31
44
45 typedef struct {
46         uint rwin_lo[8];
47         uint rwin_in[8];
48 } svr4_rwindow_t;
49
50 typedef struct {
51         int            count;
52         int            __user *winptr [SVR4_MAXWIN]; /* pointer to the windows */
53         svr4_rwindow_t win[SVR4_MAXWIN];      /* the windows */
54 } svr4_gwindows_t;
55
56 typedef int svr4_gregset_t[SVR4_NREGS];
57
58 typedef struct {
59         double   fpu_regs[32];
60         void     *fp_q;
61         unsigned fp_fsr;
62         u_char   fp_nqel;
63         u_char   fp_nqsize;
64         u_char   inuse;         /* if fpu is in use */
65 } svr4_fregset_t;
66
67 typedef struct {
68         uint    id;             /* if this holds "xrs" string => ptr is valid */
69         caddr_t ptr;
70 } svr4_xrs_t;
71
72 /* Machine dependent context */
73 typedef struct {
74         svr4_gregset_t   greg;  /* registers 0..19 (see top) */
75         svr4_gwindows_t  __user *gwin;  /* may point to register windows */
76         svr4_fregset_t   freg;  /* floating point registers */
77         svr4_xrs_t       xrs;   /* mhm? */
78         long             pad[19];
79 } svr4_mcontext_t;
80
81 /* flags for stack_t.flags */
82 enum svr4_stack_flags {
83         SVR4_SS_ONSTACK,
84         SVR4_SS_DISABLE,
85 };
86
87 /* signal stack exection place, unsupported */
88 typedef struct svr4_stack_t {
89         char __user *sp;
90         int  size;
91         int  flags;
92 } svr4_stack_t;
93
94 /* Context used by getcontext and setcontext */
95 typedef struct svr4_ucontext_t {
96         u_long               flags; /* context flags, indicate what is loaded */
97         struct svr4_ucontext *link;
98         svr4_sigset_t        sigmask;
99         svr4_stack_t         stack;
100         svr4_mcontext_t      mcontext;
101         long                 pad[23];
102 } svr4_ucontext_t;                          
103
104 /* windows hold the windows as they were at signal time,
105  * ucontext->mcontext holds a pointer to them.
106  * addresses for uc and si are passed as parameters to svr4 signal
107  * handler
108  */
109
110 /* This is the signal frame that is passed to the signal handler */
111 typedef struct {
112         svr4_gwindows_t gw;     /* windows */
113         svr4_ucontext_t uc;     /* machine context */
114         svr4_siginfo_t  si;     /* siginfo */
115 } svr4_signal_frame_t;
116
117 #define SVR4_SF_ALIGNED (((sizeof (svr4_signal_frame_t) + 7) & (~7)))
118
119 #endif /* include control */