1*b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
28dba99e0SGreg Ungerer #ifndef _M68K_SIGNAL_H
38dba99e0SGreg Ungerer #define _M68K_SIGNAL_H
48dba99e0SGreg Ungerer
510b3a979SDavid Howells #include <uapi/asm/signal.h>
68dba99e0SGreg Ungerer
78dba99e0SGreg Ungerer /* Most things should be clean enough to redefine this at will, if care
88dba99e0SGreg Ungerer is taken to make libc match. */
98dba99e0SGreg Ungerer
108dba99e0SGreg Ungerer #define _NSIG 64
118dba99e0SGreg Ungerer #define _NSIG_BPW 32
128dba99e0SGreg Ungerer #define _NSIG_WORDS (_NSIG / _NSIG_BPW)
138dba99e0SGreg Ungerer
148dba99e0SGreg Ungerer typedef unsigned long old_sigset_t; /* at least 32 bits */
158dba99e0SGreg Ungerer
168dba99e0SGreg Ungerer typedef struct {
178dba99e0SGreg Ungerer unsigned long sig[_NSIG_WORDS];
188dba99e0SGreg Ungerer } sigset_t;
198dba99e0SGreg Ungerer
20574c4866SAl Viro #define __ARCH_HAS_SA_RESTORER
218dba99e0SGreg Ungerer
228dba99e0SGreg Ungerer #include <asm/sigcontext.h>
238dba99e0SGreg Ungerer
24f3c23a28SGreg Ungerer #ifndef CONFIG_CPU_HAS_NO_BITFIELDS
258dba99e0SGreg Ungerer #define __HAVE_ARCH_SIG_BITOPS
268dba99e0SGreg Ungerer
sigaddset(sigset_t * set,int _sig)278dba99e0SGreg Ungerer static inline void sigaddset(sigset_t *set, int _sig)
288dba99e0SGreg Ungerer {
298dba99e0SGreg Ungerer asm ("bfset %0{%1,#1}"
3034fa78b5SAndreas Schwab : "+o" (*set)
318dba99e0SGreg Ungerer : "id" ((_sig - 1) ^ 31)
328dba99e0SGreg Ungerer : "cc");
338dba99e0SGreg Ungerer }
348dba99e0SGreg Ungerer
sigdelset(sigset_t * set,int _sig)358dba99e0SGreg Ungerer static inline void sigdelset(sigset_t *set, int _sig)
368dba99e0SGreg Ungerer {
378dba99e0SGreg Ungerer asm ("bfclr %0{%1,#1}"
3834fa78b5SAndreas Schwab : "+o" (*set)
398dba99e0SGreg Ungerer : "id" ((_sig - 1) ^ 31)
408dba99e0SGreg Ungerer : "cc");
418dba99e0SGreg Ungerer }
428dba99e0SGreg Ungerer
__const_sigismember(sigset_t * set,int _sig)438dba99e0SGreg Ungerer static inline int __const_sigismember(sigset_t *set, int _sig)
448dba99e0SGreg Ungerer {
458dba99e0SGreg Ungerer unsigned long sig = _sig - 1;
468dba99e0SGreg Ungerer return 1 & (set->sig[sig / _NSIG_BPW] >> (sig % _NSIG_BPW));
478dba99e0SGreg Ungerer }
488dba99e0SGreg Ungerer
__gen_sigismember(sigset_t * set,int _sig)498dba99e0SGreg Ungerer static inline int __gen_sigismember(sigset_t *set, int _sig)
508dba99e0SGreg Ungerer {
518dba99e0SGreg Ungerer int ret;
528dba99e0SGreg Ungerer asm ("bfextu %1{%2,#1},%0"
538dba99e0SGreg Ungerer : "=d" (ret)
5434fa78b5SAndreas Schwab : "o" (*set), "id" ((_sig-1) ^ 31)
558dba99e0SGreg Ungerer : "cc");
568dba99e0SGreg Ungerer return ret;
578dba99e0SGreg Ungerer }
588dba99e0SGreg Ungerer
598dba99e0SGreg Ungerer #define sigismember(set,sig) \
608dba99e0SGreg Ungerer (__builtin_constant_p(sig) ? \
618dba99e0SGreg Ungerer __const_sigismember(set,sig) : \
628dba99e0SGreg Ungerer __gen_sigismember(set,sig))
638dba99e0SGreg Ungerer
64f3c23a28SGreg Ungerer #endif /* !CONFIG_CPU_HAS_NO_BITFIELDS */
65f3c23a28SGreg Ungerer
668dba99e0SGreg Ungerer #endif /* _M68K_SIGNAL_H */
67