blob: 8af85c38d37718968ee3f02efb7e01dc4422c474 [file] [log] [blame]
Greg Kroah-Hartmanb2441312017-11-01 15:07:57 +01001/* SPDX-License-Identifier: GPL-2.0 */
Greg Ungerer8dba99e2009-03-16 22:10:08 +10002#ifndef _M68K_SIGNAL_H
3#define _M68K_SIGNAL_H
4
David Howells10b3a972012-10-09 09:47:06 +01005#include <uapi/asm/signal.h>
Greg Ungerer8dba99e2009-03-16 22:10:08 +10006
Greg Ungerer8dba99e2009-03-16 22:10:08 +10007/* Most things should be clean enough to redefine this at will, if care
8 is taken to make libc match. */
9
10#define _NSIG 64
11#define _NSIG_BPW 32
12#define _NSIG_WORDS (_NSIG / _NSIG_BPW)
13
14typedef unsigned long old_sigset_t; /* at least 32 bits */
15
16typedef struct {
17 unsigned long sig[_NSIG_WORDS];
18} sigset_t;
19
Al Viro574c4862012-11-25 22:24:19 -050020#define __ARCH_HAS_SA_RESTORER
Greg Ungerer8dba99e2009-03-16 22:10:08 +100021
Greg Ungerer8dba99e2009-03-16 22:10:08 +100022#include <asm/sigcontext.h>
23
Greg Ungererf3c23a22011-07-04 14:23:09 +100024#ifndef CONFIG_CPU_HAS_NO_BITFIELDS
Greg Ungerer8dba99e2009-03-16 22:10:08 +100025#define __HAVE_ARCH_SIG_BITOPS
26
27static inline void sigaddset(sigset_t *set, int _sig)
28{
29 asm ("bfset %0{%1,#1}"
Andreas Schwab34fa78b2012-11-17 22:27:04 +010030 : "+o" (*set)
Greg Ungerer8dba99e2009-03-16 22:10:08 +100031 : "id" ((_sig - 1) ^ 31)
32 : "cc");
33}
34
35static inline void sigdelset(sigset_t *set, int _sig)
36{
37 asm ("bfclr %0{%1,#1}"
Andreas Schwab34fa78b2012-11-17 22:27:04 +010038 : "+o" (*set)
Greg Ungerer8dba99e2009-03-16 22:10:08 +100039 : "id" ((_sig - 1) ^ 31)
40 : "cc");
41}
42
43static inline int __const_sigismember(sigset_t *set, int _sig)
44{
45 unsigned long sig = _sig - 1;
46 return 1 & (set->sig[sig / _NSIG_BPW] >> (sig % _NSIG_BPW));
47}
48
49static inline int __gen_sigismember(sigset_t *set, int _sig)
50{
51 int ret;
52 asm ("bfextu %1{%2,#1},%0"
53 : "=d" (ret)
Andreas Schwab34fa78b2012-11-17 22:27:04 +010054 : "o" (*set), "id" ((_sig-1) ^ 31)
Greg Ungerer8dba99e2009-03-16 22:10:08 +100055 : "cc");
56 return ret;
57}
58
59#define sigismember(set,sig) \
60 (__builtin_constant_p(sig) ? \
61 __const_sigismember(set,sig) : \
62 __gen_sigismember(set,sig))
63
Greg Ungererf3c23a22011-07-04 14:23:09 +100064#endif /* !CONFIG_CPU_HAS_NO_BITFIELDS */
65
Greg Ungerer8dba99e2009-03-16 22:10:08 +100066#endif /* _M68K_SIGNAL_H */