| /* SPDX-License-Identifier: GPL-2.0 */ |
| /* |
| * Bitops taken from the kernel as most developers are already used |
| * to them. |
| * |
| * Copyright IBM Corp. 1999,2013 |
| * |
| * Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com>, |
| * |
| */ |
| #ifndef _ASMS390X_BITOPS_H_ |
| #define _ASMS390X_BITOPS_H_ |
| |
| #ifndef _BITOPS_H_ |
| #error only <bitops.h> can be included directly |
| #endif |
| |
| #define BITS_PER_LONG 64 |
| |
| static inline bool test_bit(unsigned long nr, |
| const volatile unsigned long *ptr) |
| { |
| const volatile unsigned char *addr; |
| |
| addr = ((const volatile unsigned char *)ptr); |
| addr += (nr ^ (BITS_PER_LONG - 8)) >> 3; |
| return (*addr >> (nr & 7)) & 1; |
| } |
| |
| static inline bool test_bit_inv(unsigned long nr, |
| const volatile unsigned long *ptr) |
| { |
| return test_bit(nr ^ (BITS_PER_LONG - 1), ptr); |
| } |
| |
| #endif |