trace.h 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. /*
  2. * header file for hardware trace functions
  3. *
  4. * Copyright 2007-2008 Analog Devices Inc.
  5. *
  6. * Licensed under the GPL-2 or later.
  7. */
  8. #ifndef _BLACKFIN_TRACE_
  9. #define _BLACKFIN_TRACE_
  10. /* Normally, we use ON, but you can't turn on software expansion until
  11. * interrupts subsystem is ready
  12. */
  13. #define BFIN_TRACE_INIT ((CONFIG_DEBUG_BFIN_HWTRACE_COMPRESSION << 4) | 0x03)
  14. #ifdef CONFIG_DEBUG_BFIN_HWTRACE_EXPAND
  15. #define BFIN_TRACE_ON (BFIN_TRACE_INIT | (CONFIG_DEBUG_BFIN_HWTRACE_EXPAND << 2))
  16. #else
  17. #define BFIN_TRACE_ON (BFIN_TRACE_INIT)
  18. #endif
  19. #ifndef __ASSEMBLY__
  20. extern unsigned long trace_buff_offset;
  21. extern unsigned long software_trace_buff[];
  22. /* Trace Macros for C files */
  23. #ifdef CONFIG_DEBUG_BFIN_HWTRACE_ON
  24. #define trace_buffer_save(x) \
  25. do { \
  26. (x) = bfin_read_TBUFCTL(); \
  27. bfin_write_TBUFCTL((x) & ~TBUFEN); \
  28. } while (0)
  29. #define trace_buffer_restore(x) \
  30. do { \
  31. bfin_write_TBUFCTL((x)); \
  32. } while (0)
  33. #else /* DEBUG_BFIN_HWTRACE_ON */
  34. #define trace_buffer_save(x)
  35. #define trace_buffer_restore(x)
  36. #endif /* CONFIG_DEBUG_BFIN_HWTRACE_ON */
  37. #else
  38. /* Trace Macros for Assembly files */
  39. #ifdef CONFIG_DEBUG_BFIN_HWTRACE_ON
  40. #define trace_buffer_stop(preg, dreg) \
  41. preg.L = LO(TBUFCTL); \
  42. preg.H = HI(TBUFCTL); \
  43. dreg = 0x1; \
  44. [preg] = dreg;
  45. #define trace_buffer_init(preg, dreg) \
  46. preg.L = LO(TBUFCTL); \
  47. preg.H = HI(TBUFCTL); \
  48. dreg = BFIN_TRACE_INIT; \
  49. [preg] = dreg;
  50. #define trace_buffer_save(preg, dreg) \
  51. preg.L = LO(TBUFCTL); \
  52. preg.H = HI(TBUFCTL); \
  53. dreg = [preg]; \
  54. [--sp] = dreg; \
  55. dreg = 0x1; \
  56. [preg] = dreg;
  57. #define trace_buffer_restore(preg, dreg) \
  58. preg.L = LO(TBUFCTL); \
  59. preg.H = HI(TBUFCTL); \
  60. dreg = [sp++]; \
  61. [preg] = dreg;
  62. #else /* CONFIG_DEBUG_BFIN_HWTRACE_ON */
  63. #define trace_buffer_stop(preg, dreg)
  64. #define trace_buffer_init(preg, dreg)
  65. #define trace_buffer_save(preg, dreg)
  66. #define trace_buffer_restore(preg, dreg)
  67. #endif /* CONFIG_DEBUG_BFIN_HWTRACE_ON */
  68. #ifdef CONFIG_DEBUG_BFIN_NO_KERN_HWTRACE
  69. # define DEBUG_HWTRACE_SAVE(preg, dreg) trace_buffer_save(preg, dreg)
  70. # define DEBUG_HWTRACE_RESTORE(preg, dreg) trace_buffer_restore(preg, dreg)
  71. #else
  72. # define DEBUG_HWTRACE_SAVE(preg, dreg)
  73. # define DEBUG_HWTRACE_RESTORE(preg, dreg)
  74. #endif
  75. #endif /* __ASSEMBLY__ */
  76. #endif /* _BLACKFIN_TRACE_ */