1
2
3
4
5
6
7
8
9
10
11#ifndef _CRIS_BITOPS_H
12#define _CRIS_BITOPS_H
13
14
15#ifdef __KERNEL__
16
17#ifndef _LINUX_BITOPS_H
18#error only <linux/bitops.h> can be included directly
19#endif
20
21#include <arch/bitops.h>
22#include <linux/atomic.h>
23#include <linux/compiler.h>
24
25
26
27
28
29
30
31
32
33
34
35
36#define set_bit(nr, addr) (void)test_and_set_bit(nr, addr)
37
38
39
40
41
42
43
44
45
46
47
48
49#define clear_bit(nr, addr) (void)test_and_clear_bit(nr, addr)
50
51
52
53
54
55
56
57
58
59
60
61#define change_bit(nr, addr) (void)test_and_change_bit(nr, addr)
62
63
64
65
66
67
68
69
70
71
72static inline int test_and_set_bit(int nr, volatile unsigned long *addr)
73{
74 unsigned int mask, retval;
75 unsigned long flags;
76 unsigned int *adr = (unsigned int *)addr;
77
78 adr += nr >> 5;
79 mask = 1 << (nr & 0x1f);
80 cris_atomic_save(addr, flags);
81 retval = (mask & *adr) != 0;
82 *adr |= mask;
83 cris_atomic_restore(addr, flags);
84 return retval;
85}
86
87
88
89
90#define smp_mb__before_clear_bit() barrier()
91#define smp_mb__after_clear_bit() barrier()
92
93
94
95
96
97
98
99
100
101
102static inline int test_and_clear_bit(int nr, volatile unsigned long *addr)
103{
104 unsigned int mask, retval;
105 unsigned long flags;
106 unsigned int *adr = (unsigned int *)addr;
107
108 adr += nr >> 5;
109 mask = 1 << (nr & 0x1f);
110 cris_atomic_save(addr, flags);
111 retval = (mask & *adr) != 0;
112 *adr &= ~mask;
113 cris_atomic_restore(addr, flags);
114 return retval;
115}
116
117
118
119
120
121
122
123
124
125
126static inline int test_and_change_bit(int nr, volatile unsigned long *addr)
127{
128 unsigned int mask, retval;
129 unsigned long flags;
130 unsigned int *adr = (unsigned int *)addr;
131 adr += nr >> 5;
132 mask = 1 << (nr & 0x1f);
133 cris_atomic_save(addr, flags);
134 retval = (mask & *adr) != 0;
135 *adr ^= mask;
136 cris_atomic_restore(addr, flags);
137 return retval;
138}
139
140#include <asm-generic/bitops/non-atomic.h>
141
142
143
144
145
146
147#define ffs kernel_ffs
148
149#include <asm-generic/bitops/fls.h>
150#include <asm-generic/bitops/__fls.h>
151#include <asm-generic/bitops/fls64.h>
152#include <asm-generic/bitops/hweight.h>
153#include <asm-generic/bitops/find.h>
154#include <asm-generic/bitops/lock.h>
155
156#include <asm-generic/bitops/le.h>
157
158#include <asm-generic/bitops/ext2-atomic-setbit.h>
159
160#include <asm-generic/bitops/sched.h>
161
162#endif
163
164#endif
165