diff options
Diffstat (limited to 'arch/m68k/include')
-rw-r--r-- | arch/m68k/include/asm/bitops_mm.h | 102 | ||||
-rw-r--r-- | arch/m68k/include/asm/bitops_no.h | 32 | ||||
-rw-r--r-- | arch/m68k/include/asm/types.h | 6 |
3 files changed, 71 insertions, 69 deletions
diff --git a/arch/m68k/include/asm/bitops_mm.h b/arch/m68k/include/asm/bitops_mm.h index b4ecdaada520..9d69f6e62365 100644 --- a/arch/m68k/include/asm/bitops_mm.h +++ b/arch/m68k/include/asm/bitops_mm.h | |||
@@ -325,58 +325,45 @@ static inline int __fls(int x) | |||
325 | #include <asm-generic/bitops/hweight.h> | 325 | #include <asm-generic/bitops/hweight.h> |
326 | #include <asm-generic/bitops/lock.h> | 326 | #include <asm-generic/bitops/lock.h> |
327 | 327 | ||
328 | /* Bitmap functions for the minix filesystem */ | 328 | /* Bitmap functions for the little endian bitmap. */ |
329 | 329 | ||
330 | static inline int minix_find_first_zero_bit(const void *vaddr, unsigned size) | 330 | static inline void __set_bit_le(int nr, void *addr) |
331 | { | 331 | { |
332 | const unsigned short *p = vaddr, *addr = vaddr; | 332 | __set_bit(nr ^ 24, addr); |
333 | int res; | 333 | } |
334 | unsigned short num; | ||
335 | |||
336 | if (!size) | ||
337 | return 0; | ||
338 | |||
339 | size = (size >> 4) + ((size & 15) > 0); | ||
340 | while (*p++ == 0xffff) | ||
341 | { | ||
342 | if (--size == 0) | ||
343 | return (p - addr) << 4; | ||
344 | } | ||
345 | 334 | ||
346 | num = ~*--p; | 335 | static inline void __clear_bit_le(int nr, void *addr) |
347 | __asm__ __volatile__ ("bfffo %1{#16,#16},%0" | 336 | { |
348 | : "=d" (res) : "d" (num & -num)); | 337 | __clear_bit(nr ^ 24, addr); |
349 | return ((p - addr) << 4) + (res ^ 31); | ||
350 | } | 338 | } |
351 | 339 | ||
352 | #define minix_test_and_set_bit(nr, addr) __test_and_set_bit((nr) ^ 16, (unsigned long *)(addr)) | 340 | static inline int __test_and_set_bit_le(int nr, void *addr) |
353 | #define minix_set_bit(nr,addr) __set_bit((nr) ^ 16, (unsigned long *)(addr)) | 341 | { |
354 | #define minix_test_and_clear_bit(nr, addr) __test_and_clear_bit((nr) ^ 16, (unsigned long *)(addr)) | 342 | return __test_and_set_bit(nr ^ 24, addr); |
343 | } | ||
355 | 344 | ||
356 | static inline int minix_test_bit(int nr, const void *vaddr) | 345 | static inline int test_and_set_bit_le(int nr, void *addr) |
357 | { | 346 | { |
358 | const unsigned short *p = vaddr; | 347 | return test_and_set_bit(nr ^ 24, addr); |
359 | return (p[nr >> 4] & (1U << (nr & 15))) != 0; | ||
360 | } | 348 | } |
361 | 349 | ||
362 | /* Bitmap functions for the ext2 filesystem. */ | 350 | static inline int __test_and_clear_bit_le(int nr, void *addr) |
351 | { | ||
352 | return __test_and_clear_bit(nr ^ 24, addr); | ||
353 | } | ||
363 | 354 | ||
364 | #define ext2_set_bit(nr, addr) __test_and_set_bit((nr) ^ 24, (unsigned long *)(addr)) | 355 | static inline int test_and_clear_bit_le(int nr, void *addr) |
365 | #define ext2_set_bit_atomic(lock, nr, addr) test_and_set_bit((nr) ^ 24, (unsigned long *)(addr)) | 356 | { |
366 | #define ext2_clear_bit(nr, addr) __test_and_clear_bit((nr) ^ 24, (unsigned long *)(addr)) | 357 | return test_and_clear_bit(nr ^ 24, addr); |
367 | #define ext2_clear_bit_atomic(lock, nr, addr) test_and_clear_bit((nr) ^ 24, (unsigned long *)(addr)) | 358 | } |
368 | #define ext2_find_next_zero_bit(addr, size, offset) \ | ||
369 | generic_find_next_zero_le_bit((unsigned long *)addr, size, offset) | ||
370 | #define ext2_find_next_bit(addr, size, offset) \ | ||
371 | generic_find_next_le_bit((unsigned long *)addr, size, offset) | ||
372 | 359 | ||
373 | static inline int ext2_test_bit(int nr, const void *vaddr) | 360 | static inline int test_bit_le(int nr, const void *vaddr) |
374 | { | 361 | { |
375 | const unsigned char *p = vaddr; | 362 | const unsigned char *p = vaddr; |
376 | return (p[nr >> 3] & (1U << (nr & 7))) != 0; | 363 | return (p[nr >> 3] & (1U << (nr & 7))) != 0; |
377 | } | 364 | } |
378 | 365 | ||
379 | static inline int ext2_find_first_zero_bit(const void *vaddr, unsigned size) | 366 | static inline int find_first_zero_bit_le(const void *vaddr, unsigned size) |
380 | { | 367 | { |
381 | const unsigned long *p = vaddr, *addr = vaddr; | 368 | const unsigned long *p = vaddr, *addr = vaddr; |
382 | int res; | 369 | int res; |
@@ -393,33 +380,36 @@ static inline int ext2_find_first_zero_bit(const void *vaddr, unsigned size) | |||
393 | 380 | ||
394 | --p; | 381 | --p; |
395 | for (res = 0; res < 32; res++) | 382 | for (res = 0; res < 32; res++) |
396 | if (!ext2_test_bit (res, p)) | 383 | if (!test_bit_le(res, p)) |
397 | break; | 384 | break; |
398 | return (p - addr) * 32 + res; | 385 | return (p - addr) * 32 + res; |
399 | } | 386 | } |
400 | 387 | ||
401 | static inline unsigned long generic_find_next_zero_le_bit(const unsigned long *addr, | 388 | static inline unsigned long find_next_zero_bit_le(const void *addr, |
402 | unsigned long size, unsigned long offset) | 389 | unsigned long size, unsigned long offset) |
403 | { | 390 | { |
404 | const unsigned long *p = addr + (offset >> 5); | 391 | const unsigned long *p = addr; |
405 | int bit = offset & 31UL, res; | 392 | int bit = offset & 31UL, res; |
406 | 393 | ||
407 | if (offset >= size) | 394 | if (offset >= size) |
408 | return size; | 395 | return size; |
409 | 396 | ||
397 | p += offset >> 5; | ||
398 | |||
410 | if (bit) { | 399 | if (bit) { |
400 | offset -= bit; | ||
411 | /* Look for zero in first longword */ | 401 | /* Look for zero in first longword */ |
412 | for (res = bit; res < 32; res++) | 402 | for (res = bit; res < 32; res++) |
413 | if (!ext2_test_bit (res, p)) | 403 | if (!test_bit_le(res, p)) |
414 | return (p - addr) * 32 + res; | 404 | return offset + res; |
415 | p++; | 405 | p++; |
406 | offset += 32; | ||
416 | } | 407 | } |
417 | /* No zero yet, search remaining full bytes for a zero */ | 408 | /* No zero yet, search remaining full bytes for a zero */ |
418 | res = ext2_find_first_zero_bit (p, size - 32 * (p - addr)); | 409 | return offset + find_first_zero_bit_le(p, size - offset); |
419 | return (p - addr) * 32 + res; | ||
420 | } | 410 | } |
421 | 411 | ||
422 | static inline int ext2_find_first_bit(const void *vaddr, unsigned size) | 412 | static inline int find_first_bit_le(const void *vaddr, unsigned size) |
423 | { | 413 | { |
424 | const unsigned long *p = vaddr, *addr = vaddr; | 414 | const unsigned long *p = vaddr, *addr = vaddr; |
425 | int res; | 415 | int res; |
@@ -435,32 +425,42 @@ static inline int ext2_find_first_bit(const void *vaddr, unsigned size) | |||
435 | 425 | ||
436 | --p; | 426 | --p; |
437 | for (res = 0; res < 32; res++) | 427 | for (res = 0; res < 32; res++) |
438 | if (ext2_test_bit(res, p)) | 428 | if (test_bit_le(res, p)) |
439 | break; | 429 | break; |
440 | return (p - addr) * 32 + res; | 430 | return (p - addr) * 32 + res; |
441 | } | 431 | } |
442 | 432 | ||
443 | static inline unsigned long generic_find_next_le_bit(const unsigned long *addr, | 433 | static inline unsigned long find_next_bit_le(const void *addr, |
444 | unsigned long size, unsigned long offset) | 434 | unsigned long size, unsigned long offset) |
445 | { | 435 | { |
446 | const unsigned long *p = addr + (offset >> 5); | 436 | const unsigned long *p = addr; |
447 | int bit = offset & 31UL, res; | 437 | int bit = offset & 31UL, res; |
448 | 438 | ||
449 | if (offset >= size) | 439 | if (offset >= size) |
450 | return size; | 440 | return size; |
451 | 441 | ||
442 | p += offset >> 5; | ||
443 | |||
452 | if (bit) { | 444 | if (bit) { |
445 | offset -= bit; | ||
453 | /* Look for one in first longword */ | 446 | /* Look for one in first longword */ |
454 | for (res = bit; res < 32; res++) | 447 | for (res = bit; res < 32; res++) |
455 | if (ext2_test_bit(res, p)) | 448 | if (test_bit_le(res, p)) |
456 | return (p - addr) * 32 + res; | 449 | return offset + res; |
457 | p++; | 450 | p++; |
451 | offset += 32; | ||
458 | } | 452 | } |
459 | /* No set bit yet, search remaining full bytes for a set bit */ | 453 | /* No set bit yet, search remaining full bytes for a set bit */ |
460 | res = ext2_find_first_bit(p, size - 32 * (p - addr)); | 454 | return offset + find_first_bit_le(p, size - offset); |
461 | return (p - addr) * 32 + res; | ||
462 | } | 455 | } |
463 | 456 | ||
457 | /* Bitmap functions for the ext2 filesystem. */ | ||
458 | |||
459 | #define ext2_set_bit_atomic(lock, nr, addr) \ | ||
460 | test_and_set_bit_le(nr, addr) | ||
461 | #define ext2_clear_bit_atomic(lock, nr, addr) \ | ||
462 | test_and_clear_bit_le(nr, addr) | ||
463 | |||
464 | #endif /* __KERNEL__ */ | 464 | #endif /* __KERNEL__ */ |
465 | 465 | ||
466 | #endif /* _M68K_BITOPS_H */ | 466 | #endif /* _M68K_BITOPS_H */ |
diff --git a/arch/m68k/include/asm/bitops_no.h b/arch/m68k/include/asm/bitops_no.h index 9d3cbe5fad1e..7d3779fdc5b6 100644 --- a/arch/m68k/include/asm/bitops_no.h +++ b/arch/m68k/include/asm/bitops_no.h | |||
@@ -196,7 +196,19 @@ static __inline__ int __test_bit(int nr, const volatile unsigned long * addr) | |||
196 | #include <asm-generic/bitops/hweight.h> | 196 | #include <asm-generic/bitops/hweight.h> |
197 | #include <asm-generic/bitops/lock.h> | 197 | #include <asm-generic/bitops/lock.h> |
198 | 198 | ||
199 | static __inline__ int ext2_set_bit(int nr, volatile void * addr) | 199 | #define BITOP_LE_SWIZZLE ((BITS_PER_LONG-1) & ~0x7) |
200 | |||
201 | static inline void __set_bit_le(int nr, void *addr) | ||
202 | { | ||
203 | __set_bit(nr ^ BITOP_LE_SWIZZLE, addr); | ||
204 | } | ||
205 | |||
206 | static inline void __clear_bit_le(int nr, void *addr) | ||
207 | { | ||
208 | __clear_bit(nr ^ BITOP_LE_SWIZZLE, addr); | ||
209 | } | ||
210 | |||
211 | static inline int __test_and_set_bit_le(int nr, volatile void *addr) | ||
200 | { | 212 | { |
201 | char retval; | 213 | char retval; |
202 | 214 | ||
@@ -215,7 +227,7 @@ static __inline__ int ext2_set_bit(int nr, volatile void * addr) | |||
215 | return retval; | 227 | return retval; |
216 | } | 228 | } |
217 | 229 | ||
218 | static __inline__ int ext2_clear_bit(int nr, volatile void * addr) | 230 | static inline int __test_and_clear_bit_le(int nr, volatile void *addr) |
219 | { | 231 | { |
220 | char retval; | 232 | char retval; |
221 | 233 | ||
@@ -238,7 +250,7 @@ static __inline__ int ext2_clear_bit(int nr, volatile void * addr) | |||
238 | ({ \ | 250 | ({ \ |
239 | int ret; \ | 251 | int ret; \ |
240 | spin_lock(lock); \ | 252 | spin_lock(lock); \ |
241 | ret = ext2_set_bit((nr), (addr)); \ | 253 | ret = __test_and_set_bit_le((nr), (addr)); \ |
242 | spin_unlock(lock); \ | 254 | spin_unlock(lock); \ |
243 | ret; \ | 255 | ret; \ |
244 | }) | 256 | }) |
@@ -247,12 +259,12 @@ static __inline__ int ext2_clear_bit(int nr, volatile void * addr) | |||
247 | ({ \ | 259 | ({ \ |
248 | int ret; \ | 260 | int ret; \ |
249 | spin_lock(lock); \ | 261 | spin_lock(lock); \ |
250 | ret = ext2_clear_bit((nr), (addr)); \ | 262 | ret = __test_and_clear_bit_le((nr), (addr)); \ |
251 | spin_unlock(lock); \ | 263 | spin_unlock(lock); \ |
252 | ret; \ | 264 | ret; \ |
253 | }) | 265 | }) |
254 | 266 | ||
255 | static __inline__ int ext2_test_bit(int nr, const volatile void * addr) | 267 | static inline int test_bit_le(int nr, const volatile void *addr) |
256 | { | 268 | { |
257 | char retval; | 269 | char retval; |
258 | 270 | ||
@@ -271,10 +283,10 @@ static __inline__ int ext2_test_bit(int nr, const volatile void * addr) | |||
271 | return retval; | 283 | return retval; |
272 | } | 284 | } |
273 | 285 | ||
274 | #define ext2_find_first_zero_bit(addr, size) \ | 286 | #define find_first_zero_bit_le(addr, size) \ |
275 | ext2_find_next_zero_bit((addr), (size), 0) | 287 | find_next_zero_bit_le((addr), (size), 0) |
276 | 288 | ||
277 | static __inline__ unsigned long ext2_find_next_zero_bit(void *addr, unsigned long size, unsigned long offset) | 289 | static inline unsigned long find_next_zero_bit_le(void *addr, unsigned long size, unsigned long offset) |
278 | { | 290 | { |
279 | unsigned long *p = ((unsigned long *) addr) + (offset >> 5); | 291 | unsigned long *p = ((unsigned long *) addr) + (offset >> 5); |
280 | unsigned long result = offset & ~31UL; | 292 | unsigned long result = offset & ~31UL; |
@@ -324,10 +336,6 @@ found_middle: | |||
324 | return result + ffz(__swab32(tmp)); | 336 | return result + ffz(__swab32(tmp)); |
325 | } | 337 | } |
326 | 338 | ||
327 | #define ext2_find_next_bit(addr, size, off) \ | ||
328 | generic_find_next_le_bit((unsigned long *)(addr), (size), (off)) | ||
329 | #include <asm-generic/bitops/minix.h> | ||
330 | |||
331 | #endif /* __KERNEL__ */ | 339 | #endif /* __KERNEL__ */ |
332 | 340 | ||
333 | #include <asm-generic/bitops/fls.h> | 341 | #include <asm-generic/bitops/fls.h> |
diff --git a/arch/m68k/include/asm/types.h b/arch/m68k/include/asm/types.h index 10ad92f1c173..b17fd115a4e7 100644 --- a/arch/m68k/include/asm/types.h +++ b/arch/m68k/include/asm/types.h | |||
@@ -23,12 +23,6 @@ typedef unsigned short umode_t; | |||
23 | 23 | ||
24 | #define BITS_PER_LONG 32 | 24 | #define BITS_PER_LONG 32 |
25 | 25 | ||
26 | #ifndef __ASSEMBLY__ | ||
27 | |||
28 | typedef u32 dma64_addr_t; | ||
29 | |||
30 | #endif /* __ASSEMBLY__ */ | ||
31 | |||
32 | #endif /* __KERNEL__ */ | 26 | #endif /* __KERNEL__ */ |
33 | 27 | ||
34 | #endif /* _M68K_TYPES_H */ | 28 | #endif /* _M68K_TYPES_H */ |