Bit ops
authorBarret Rhoden <brho@cs.berkeley.edu>
Mon, 12 Jan 2015 23:33:48 +0000 (18:33 -0500)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 3 Feb 2015 15:12:27 +0000 (10:12 -0500)
kern/drivers/net/bxe/bxe.c
kern/drivers/net/bxe/bxe.h
kern/drivers/net/bxe/ecore_sp.h

index 62bc859..ed2faba 100644 (file)
@@ -777,52 +777,6 @@ calc_crc32(uint8_t  *crc32_packet,
     return (crc32_result);
 }
 
-int
-bxe_test_bit(int                    nr,
-             volatile unsigned long *addr)
-{
-    return ((atomic_load_acq_long(addr) & (1 << nr)) != 0);
-}
-
-void
-bxe_set_bit(unsigned int           nr,
-            volatile unsigned long *addr)
-{
-    atomic_set_acq_long(addr, (1 << nr));
-}
-
-void
-bxe_clear_bit(int                    nr,
-              volatile unsigned long *addr)
-{
-    atomic_clear_acq_long(addr, (1 << nr));
-}
-
-int
-bxe_test_and_set_bit(int                    nr,
-                       volatile unsigned long *addr)
-{
-    unsigned long x;
-    nr = (1 << nr);
-    do {
-        x = *addr;
-    } while (atomic_cmpset_acq_long(addr, x, x | nr) == 0);
-    // if (x & nr) bit_was_set; else bit_was_not_set;
-    return (x & nr);
-}
-
-int
-bxe_test_and_clear_bit(int                    nr,
-                       volatile unsigned long *addr)
-{
-    unsigned long x;
-    nr = (1 << nr);
-    do {
-        x = *addr;
-    } while (atomic_cmpset_acq_long(addr, x, x & ~nr) == 0);
-    // if (x & nr) bit_was_set; else bit_was_not_set;
-    return (x & nr);
-}
 
 int
 bxe_cmpxchg(volatile int *addr,
index 801f78a..d9b3fdb 100644 (file)
@@ -39,6 +39,7 @@
 #include <smp.h>
 #include <stdio.h>
 #include <string.h>
+#include <bitmap.h>
 
 
 /* MACROS for conversion to AKAROS. Might we want this stuff someday? */
@@ -2112,11 +2113,11 @@ static const uint32_t dmae_reg_go_c[] = {
 #define PCI_PM_D0    1
 #define PCI_PM_D3hot 2
 
-int  bxe_test_bit(int nr, volatile unsigned long * addr);
-void bxe_set_bit(unsigned int nr, volatile unsigned long * addr);
-void bxe_clear_bit(int nr, volatile unsigned long * addr);
-int  bxe_test_and_set_bit(int nr, volatile unsigned long * addr);
-int  bxe_test_and_clear_bit(int nr, volatile unsigned long * addr);
+#define bxe_test_bit(nr, addr) test_bit(nr, addr)
+#define bxe_set_bit(nr, addr) set_bit(nr, addr)
+#define bxe_clear_bit(nr, addr) clear_bit(nr, addr)
+#define bxe_test_and_set_bit(nr, addr) test_and_set_bit(nr, addr)
+#define bxe_test_and_clear_bit(nr, addr) test_and_clear_bit(nr, addr)
 int  bxe_cmpxchg(volatile int *addr, int old, int new);
 
 void bxe_reg_wr_ind(struct bxe_adapter *sc, uint32_t addr,
index 8af4352..163a901 100644 (file)
@@ -105,12 +105,12 @@ typedef _Bool bool;
 #define ECORE_SMP_WMB()                 wmb()
 #define ECORE_MMIOWB()                  wmb()
 
-#define ECORE_SET_BIT_NA(bit, var)   bit_set(var, bit) /* non-atomic */
-#define ECORE_CLEAR_BIT_NA(bit, var) bit_clear(var, bit) /* non-atomic */
-#define ECORE_TEST_BIT(bit, var)     bxe_test_bit(bit, var)
-#define ECORE_SET_BIT(bit, var)      bxe_set_bit(bit, var)
-#define ECORE_CLEAR_BIT(bit, var)    bxe_clear_bit(bit, var)
-#define ECORE_TEST_AND_CLEAR_BIT(bit, var) bxe_test_and_clear_bit(bit, var)
+#define ECORE_SET_BIT_NA(bit, var)   __set_bit(bit, var) /* non-atomic */
+#define ECORE_CLEAR_BIT_NA(bit, var) __clear_bit(bit, var) /* non-atomic */
+#define ECORE_TEST_BIT(bit, var)     test_bit(bit, var)
+#define ECORE_SET_BIT(bit, var)      set_bit(bit, var)
+#define ECORE_CLEAR_BIT(bit, var)    clear_bit(bit, var)
+#define ECORE_TEST_AND_CLEAR_BIT(bit, var) test_and_clear_bit(bit, var)
 
 #define ECORE_ATOMIC_READ(a) atomic_load_acq_int((volatile int *)a)
 #define ECORE_ATOMIC_SET(a, v) atomic_store_rel_int((volatile int *)a, v)