@@ -1,3 +1,13 @@
+/* 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_
@@ -7,4 +17,20 @@
#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
@@ -13,13 +13,14 @@
#include <libcflat.h>
#include <asm/facility.h>
#include <asm/arch_def.h>
+#include <bitops.h>
#define NB_STFL_DOUBLEWORDS 32
extern uint64_t stfl_doublewords[];
static inline bool test_facility(int nr)
{
- return stfl_doublewords[nr / 64] & (0x8000000000000000UL >> (nr % 64));
+ return test_bit_inv(nr, stfl_doublewords);
}
static inline void stfl(void)