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 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 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 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 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