1*2989246eSJanosch Frank /* SPDX-License-Identifier: GPL-2.0 */ 2*2989246eSJanosch Frank /* 3*2989246eSJanosch Frank * Bitops taken from the kernel as most developers are already used 4*2989246eSJanosch Frank * to them. 5*2989246eSJanosch Frank * 6*2989246eSJanosch Frank * Copyright IBM Corp. 1999,2013 7*2989246eSJanosch Frank * 8*2989246eSJanosch Frank * Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com>, 9*2989246eSJanosch Frank * 10*2989246eSJanosch Frank */ 1171a6a145SAndrew Jones #ifndef _ASMS390X_BITOPS_H_ 1271a6a145SAndrew Jones #define _ASMS390X_BITOPS_H_ 1371a6a145SAndrew Jones 1471a6a145SAndrew Jones #ifndef _BITOPS_H_ 1571a6a145SAndrew Jones #error only <bitops.h> can be included directly 1671a6a145SAndrew Jones #endif 1771a6a145SAndrew Jones 1871a6a145SAndrew Jones #define BITS_PER_LONG 64 1971a6a145SAndrew Jones test_bit(unsigned long nr,const volatile unsigned long * ptr)20*2989246eSJanosch Frankstatic inline bool test_bit(unsigned long nr, 21*2989246eSJanosch Frank const volatile unsigned long *ptr) 22*2989246eSJanosch Frank { 23*2989246eSJanosch Frank const volatile unsigned char *addr; 24*2989246eSJanosch Frank 25*2989246eSJanosch Frank addr = ((const volatile unsigned char *)ptr); 26*2989246eSJanosch Frank addr += (nr ^ (BITS_PER_LONG - 8)) >> 3; 27*2989246eSJanosch Frank return (*addr >> (nr & 7)) & 1; 28*2989246eSJanosch Frank } 29*2989246eSJanosch Frank test_bit_inv(unsigned long nr,const volatile unsigned long * ptr)30*2989246eSJanosch Frankstatic inline bool test_bit_inv(unsigned long nr, 31*2989246eSJanosch Frank const volatile unsigned long *ptr) 32*2989246eSJanosch Frank { 33*2989246eSJanosch Frank return test_bit(nr ^ (BITS_PER_LONG - 1), ptr); 34*2989246eSJanosch Frank } 35*2989246eSJanosch Frank 3671a6a145SAndrew Jones #endif 37