connectTheSignalSlot.h 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. /*
  2. * Blackfin core register bit & address definitions
  3. *
  4. * Copyright 2005-2008 Analog Devices Inc.
  5. *
  6. * Licensed under the Clear BSD license or GPL-2 (or later).
  7. */
  8. #ifndef _DEF_LPBLACKFIN_H
  9. #define _DEF_LPBLACKFIN_H
  10. #include <mach/anomaly.h>
  11. #define MK_BMSK_(x) (1<<x)
  12. #define BFIN_DEPOSIT(mask, x) (((x) << __ffs(mask)) & (mask))
  13. #define BFIN_EXTRACT(mask, x) (((x) & (mask)) >> __ffs(mask))
  14. #ifndef __ASSEMBLY__
  15. #include <linux/types.h>
  16. #if ANOMALY_05000198
  17. # define NOP_PAD_ANOMALY_05000198 "nop;"
  18. #else
  19. # define NOP_PAD_ANOMALY_05000198
  20. #endif
  21. #define _bfin_readX(addr, size, asm_size, asm_ext) ({ \
  22. u32 __v; \
  23. __asm__ __volatile__( \
  24. NOP_PAD_ANOMALY_05000198 \
  25. "%0 = " #asm_size "[%1]" #asm_ext ";" \
  26. : "=d" (__v) \
  27. : "a" (addr) \
  28. ); \
  29. __v; })
  30. #define _bfin_writeX(addr, val, size, asm_size) \
  31. __asm__ __volatile__( \
  32. NOP_PAD_ANOMALY_05000198 \
  33. #asm_size "[%0] = %1;" \
  34. : \
  35. : "a" (addr), "d" ((u##size)(val)) \
  36. : "memory" \
  37. )
  38. #define bfin_read8(addr) _bfin_readX(addr, 8, b, (z))
  39. #define bfin_read16(addr) _bfin_readX(addr, 16, w, (z))
  40. #define bfin_read32(addr) _bfin_readX(addr, 32, , )
  41. #define bfin_write8(addr, val) _bfin_writeX(addr, val, 8, b)
  42. #define bfin_write16(addr, val) _bfin_writeX(addr, val, 16, w)
  43. #define bfin_write32(addr, val) _bfin_writeX(addr, val, 32, )
  44. #define bfin_read(addr) \
  45. ({ \
  46. sizeof(*(addr)) == 1 ? bfin_read8(addr) : \
  47. sizeof(*(addr)) == 2 ? bfin_read16(addr) : \
  48. sizeof(*(addr)) == 4 ? bfin_read32(addr) : \
  49. ({ BUG(); 0; }); \
  50. })
  51. #define bfin_write(addr, val) \
  52. do { \
  53. switch (sizeof(*(addr))) { \
  54. case 1: bfin_write8(addr, val); break; \
  55. case 2: bfin_write16(addr, val); break; \
  56. case 4: bfin_write32(addr, val); break; \
  57. default: BUG(); \
  58. } \
  59. } while (0)
  60. #define bfin_write_or(addr, bits) \
  61. do { \
  62. typeof(addr) __addr = (addr); \
  63. bfin_write(__addr, bfin_read(__addr) | (bits)); \
  64. } while (0)
  65. #define bfin_write_and(addr, bits) \
  66. do { \