Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  1 #ifndef _ASM_GENERIC_ATOMIC_H
  2 #define _ASM_GENERIC_ATOMIC_H
  3 /*
  4  * Copyright (C) 2005 Silicon Graphics, Inc.
  5  *      Christoph Lameter <clameter@sgi.com>
  6  *
  7  * Allows to provide arch independent atomic definitions without the need to
  8  * edit all arch specific atomic.h files.
  9  */
 10 
 11 #include <asm/types.h>
 12 
 13 /*
 14  * Suppport for atomic_long_t
 15  *
 16  * Casts for parameters are avoided for existing atomic functions in order to
 17  * avoid issues with cast-as-lval under gcc 4.x and other limitations that the
 18  * macros of a platform may have.
 19  */
 20 
 21 #if BITS_PER_LONG == 64
 22 
 23 typedef atomic64_t atomic_long_t;
 24 
 25 #define ATOMIC_LONG_INIT(i)     ATOMIC64_INIT(i)
 26 
 27 static inline long atomic_long_read(atomic_long_t *l)
 28 {
 29         atomic64_t *v = (atomic64_t *)l;
 30 
 31         return (long)atomic64_read(v);
 32 }
 33 
 34 static inline void atomic_long_set(atomic_long_t *l, long i)
 35 {
 36         atomic64_t *v = (atomic64_t *)l;
 37 
 38         atomic64_set(v, i);
 39 }
 40 
 41 static inline void atomic_long_inc(atomic_long_t *l)
 42 {
 43         atomic64_t *v = (atomic64_t *)l;
 44 
 45         atomic64_inc(v);
 46 }
 47 
 48 static inline void atomic_long_dec(atomic_long_t *l)
 49 {
 50         atomic64_t *v = (atomic64_t *)l;
 51 
 52         atomic64_dec(v);
 53 }
 54 
 55 static inline void atomic_long_add(long i, atomic_long_t *l)
 56 {
 57         atomic64_t *v = (atomic64_t *)l;
 58 
 59         atomic64_add(i, v);
 60 }
 61 
 62 static inline void atomic_long_sub(long i, atomic_long_t *l)
 63 {
 64         atomic64_t *v = (atomic64_t *)l;
 65 
 66         atomic64_sub(i, v);
 67 }
 68 
 69 static inline int atomic_long_sub_and_test(long i, atomic_long_t *l)
 70 {
 71         atomic64_t *v = (atomic64_t *)l;
 72 
 73         return atomic64_sub_and_test(i, v);
 74 }
 75 
 76 static inline int atomic_long_dec_and_test(atomic_long_t *l)
 77 {
 78         atomic64_t *v = (atomic64_t *)l;
 79 
 80         return atomic64_dec_and_test(v);
 81 }
 82 
 83 static inline int atomic_long_inc_and_test(atomic_long_t *l)
 84 {
 85         atomic64_t *v = (atomic64_t *)l;
 86 
 87         return atomic64_inc_and_test(v);
 88 }
 89 
 90 static inline int atomic_long_add_negative(long i, atomic_long_t *l)
 91 {
 92         atomic64_t *v = (atomic64_t *)l;
 93 
 94         return atomic64_add_negative(i, v);
 95 }
 96 
 97 static inline long atomic_long_add_return(long i, atomic_long_t *l)
 98 {
 99         atomic64_t *v = (atomic64_t *)l;
100 
101         return (long)atomic64_add_return(i, v);
102 }
103 
104 static inline long atomic_long_sub_return(long i, atomic_long_t *l)
105 {
106         atomic64_t *v = (atomic64_t *)l;
107 
108         return (long)atomic64_sub_return(i, v);
109 }
110 
111 static inline long atomic_long_inc_return(atomic_long_t *l)
112 {
113         atomic64_t *v = (atomic64_t *)l;
114 
115         return (long)atomic64_inc_return(v);
116 }
117 
118 static inline long atomic_long_dec_return(atomic_long_t *l)
119 {
120         atomic64_t *v = (atomic64_t *)l;
121 
122         return (long)atomic64_dec_return(v);
123 }
124 
125 static inline long atomic_long_add_unless(atomic_long_t *l, long a, long u)
126 {
127         atomic64_t *v = (atomic64_t *)l;
128 
129         return (long)atomic64_add_unless(v, a, u);
130 }
131 
132 #define atomic_long_inc_not_zero(l) atomic64_inc_not_zero((atomic64_t *)(l))
133 
134 #define atomic_long_cmpxchg(l, old, new) \
135         (atomic_cmpxchg((atomic64_t *)(l), (old), (new)))
136 #define atomic_long_xchg(v, new) \
137         (atomic_xchg((atomic64_t *)(l), (new)))
138 
139 #else  /*  BITS_PER_LONG == 64  */
140 
141 typedef atomic_t atomic_long_t;
142 
143 #define ATOMIC_LONG_INIT(i)     ATOMIC_INIT(i)
144 static inline long atomic_long_read(atomic_long_t *l)
145 {
146         atomic_t *v = (atomic_t *)l;
147 
148         return (long)atomic_read(v);
149 }
150 
151 static inline void atomic_long_set(atomic_long_t *l, long i)
152 {
153         atomic_t *v = (atomic_t *)l;
154 
155         atomic_set(v, i);
156 }
157 
158 static inline void atomic_long_inc(atomic_long_t *l)
159 {
160         atomic_t *v = (atomic_t *)l;
161 
162         atomic_inc(v);
163 }
164 
165 static inline void atomic_long_dec(atomic_long_t *l)
166 {
167         atomic_t *v = (atomic_t *)l;
168 
169         atomic_dec(v);
170 }
171 
172 static inline void atomic_long_add(long i, atomic_long_t *l)
173 {
174         atomic_t *v = (atomic_t *)l;
175 
176         atomic_add(i, v);
177 }
178 
179 static inline void atomic_long_sub(long i, atomic_long_t *l)
180 {
181         atomic_t *v = (atomic_t *)l;
182 
183         atomic_sub(i, v);
184 }
185 
186 static inline int atomic_long_sub_and_test(long i, atomic_long_t *l)
187 {
188         atomic_t *v = (atomic_t *)l;
189 
190         return atomic_sub_and_test(i, v);
191 }
192 
193 static inline int atomic_long_dec_and_test(atomic_long_t *l)
194 {
195         atomic_t *v = (atomic_t *)l;
196 
197         return atomic_dec_and_test(v);
198 }
199 
200 static inline int atomic_long_inc_and_test(atomic_long_t *l)
201 {
202         atomic_t *v = (atomic_t *)l;
203 
204         return atomic_inc_and_test(v);
205 }
206 
207 static inline int atomic_long_add_negative(long i, atomic_long_t *l)
208 {
209         atomic_t *v = (atomic_t *)l;
210 
211         return atomic_add_negative(i, v);
212 }
213 
214 static inline long atomic_long_add_return(long i, atomic_long_t *l)
215 {
216         atomic_t *v = (atomic_t *)l;
217 
218         return (long)atomic_add_return(i, v);
219 }
220 
221 static inline long atomic_long_sub_return(long i, atomic_long_t *l)
222 {
223         atomic_t *v = (atomic_t *)l;
224 
225         return (long)atomic_sub_return(i, v);
226 }
227 
228 static inline long atomic_long_inc_return(atomic_long_t *l)
229 {
230         atomic_t *v = (atomic_t *)l;
231 
232         return (long)atomic_inc_return(v);
233 }
234 
235 static inline long atomic_long_dec_return(atomic_long_t *l)
236 {
237         atomic_t *v = (atomic_t *)l;
238 
239         return (long)atomic_dec_return(v);
240 }
241 
242 static inline long atomic_long_add_unless(atomic_long_t *l, long a, long u)
243 {
244         atomic_t *v = (atomic_t *)l;
245 
246         return (long)atomic_add_unless(v, a, u);
247 }
248 
249 #define atomic_long_inc_not_zero(l) atomic_inc_not_zero((atomic_t *)(l))
250 
251 #define atomic_long_cmpxchg(l, old, new) \
252         (atomic_cmpxchg((atomic_t *)(l), (old), (new)))
253 #define atomic_long_xchg(v, new) \
254         (atomic_xchg((atomic_t *)(l), (new)))
255 
256 #endif  /*  BITS_PER_LONG == 64  */
257 
258 #endif  /*  _ASM_GENERIC_ATOMIC_H  */
259 
  This page was automatically generated by the LXR engine.