Automatic merge of rsync://rsync.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata...
[linux-2.6] / include / asm-ppc64 / ppc32.h
1 #ifndef _PPC64_PPC32_H
2 #define _PPC64_PPC32_H
3
4 #include <linux/compat.h>
5 #include <asm/siginfo.h>
6 #include <asm/signal.h>
7
8 /*
9  * Data types and macros for providing 32b PowerPC support.
10  * 
11  * This program is free software; you can redistribute it and/or
12  * modify it under the terms of the GNU General Public License
13  * as published by the Free Software Foundation; either version
14  * 2 of the License, or (at your option) any later version.
15  */
16
17 /* These are here to support 32-bit syscalls on a 64-bit kernel. */
18
19 typedef struct compat_siginfo {
20         int si_signo;
21         int si_errno;
22         int si_code;
23
24         union {
25                 int _pad[SI_PAD_SIZE32];
26
27                 /* kill() */
28                 struct {
29                         compat_pid_t _pid;              /* sender's pid */
30                         compat_uid_t _uid;              /* sender's uid */
31                 } _kill;
32
33                 /* POSIX.1b timers */
34                 struct {
35                         timer_t _tid;                   /* timer id */
36                         int _overrun;                   /* overrun count */
37                         compat_sigval_t _sigval;                /* same as below */
38                         int _sys_private;               /* not to be passed to user */
39                 } _timer;
40
41                 /* POSIX.1b signals */
42                 struct {
43                         compat_pid_t _pid;              /* sender's pid */
44                         compat_uid_t _uid;              /* sender's uid */
45                         compat_sigval_t _sigval;
46                 } _rt;
47
48                 /* SIGCHLD */
49                 struct {
50                         compat_pid_t _pid;              /* which child */
51                         compat_uid_t _uid;              /* sender's uid */
52                         int _status;                    /* exit code */
53                         compat_clock_t _utime;
54                         compat_clock_t _stime;
55                 } _sigchld;
56
57                 /* SIGILL, SIGFPE, SIGSEGV, SIGBUS, SIGEMT */
58                 struct {
59                         unsigned int _addr; /* faulting insn/memory ref. */
60                 } _sigfault;
61
62                 /* SIGPOLL */
63                 struct {
64                         int _band;      /* POLL_IN, POLL_OUT, POLL_MSG */
65                         int _fd;
66                 } _sigpoll;
67         } _sifields;
68 } compat_siginfo_t;
69
70 #define __old_sigaction32       old_sigaction32
71
72 struct __old_sigaction32 {
73         unsigned                sa_handler;
74         compat_old_sigset_t     sa_mask;
75         unsigned int            sa_flags;
76         unsigned                sa_restorer;     /* not used by Linux/SPARC yet */
77 };
78
79
80
81 struct sigaction32 {
82        unsigned int  sa_handler;        /* Really a pointer, but need to deal with 32 bits */
83        unsigned int sa_flags;
84        unsigned int sa_restorer;        /* Another 32 bit pointer */
85        compat_sigset_t sa_mask;         /* A 32 bit mask */
86 };
87
88 typedef struct sigaltstack_32 {
89         unsigned int ss_sp;
90         int ss_flags;
91         compat_size_t ss_size;
92 } stack_32_t;
93
94 struct sigcontext32 {
95         unsigned int    _unused[4];
96         int             signal;
97         unsigned int    handler;
98         unsigned int    oldmask;
99         u32 regs;  /* 4 byte pointer to the pt_regs32 structure. */
100 };
101
102 struct mcontext32 {
103         elf_gregset_t32         mc_gregs;
104         elf_fpregset_t          mc_fregs;
105         unsigned int            mc_pad[2];
106         elf_vrregset_t32        mc_vregs __attribute__((__aligned__(16)));
107 };
108
109 struct ucontext32 { 
110         unsigned int            uc_flags;
111         unsigned int            uc_link;
112         stack_32_t              uc_stack;
113         int                     uc_pad[7];
114         u32                     uc_regs;        /* points to uc_mcontext field */
115         compat_sigset_t         uc_sigmask;     /* mask last for extensibility */
116         /* glibc has 1024-bit signal masks, ours are 64-bit */
117         int                     uc_maskext[30];
118         int                     uc_pad2[3];
119         struct mcontext32       uc_mcontext;
120 };
121
122 #endif  /* _PPC64_PPC32_H */