linux/arch/blackfin/include/asm/trace.h
<<
>>
Prefs
   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
   9#ifndef _BLACKFIN_TRACE_
  10#define _BLACKFIN_TRACE_
  11
  12/* Normally, we use ON, but you can't turn on software expansion until
  13 * interrupts subsystem is ready
  14 */
  15
  16#define BFIN_TRACE_INIT ((CONFIG_DEBUG_BFIN_HWTRACE_COMPRESSION << 4) | 0x03)
  17#ifdef CONFIG_DEBUG_BFIN_HWTRACE_EXPAND
  18#define BFIN_TRACE_ON   (BFIN_TRACE_INIT | (CONFIG_DEBUG_BFIN_HWTRACE_EXPAND << 2))
  19#else
  20#define BFIN_TRACE_ON   (BFIN_TRACE_INIT)
  21#endif
  22
  23#ifndef __ASSEMBLY__
  24extern unsigned long trace_buff_offset;
  25extern unsigned long software_trace_buff[];
  26#if defined(CONFIG_DEBUG_VERBOSE)
  27extern void decode_address(char *buf, unsigned long address);
  28extern bool get_instruction(unsigned int *val, unsigned short *address);
  29#else
  30static inline void decode_address(char *buf, unsigned long address) { }
  31static inline bool get_instruction(unsigned int *val, unsigned short *address) { return false; }
  32#endif
  33
  34/* Trace Macros for C files */
  35
  36#ifdef CONFIG_DEBUG_BFIN_HWTRACE_ON
  37
  38#define trace_buffer_init() bfin_write_TBUFCTL(BFIN_TRACE_INIT)
  39
  40#define trace_buffer_save(x) \
  41        do { \
  42                (x) = bfin_read_TBUFCTL(); \
  43                bfin_write_TBUFCTL((x) & ~TBUFEN); \
  44        } while (0)
  45
  46#define trace_buffer_restore(x) \
  47        do { \
  48                bfin_write_TBUFCTL((x));        \
  49        } while (0)
  50#else /* DEBUG_BFIN_HWTRACE_ON */
  51
  52#define trace_buffer_save(x)
  53#define trace_buffer_restore(x)
  54#endif /* CONFIG_DEBUG_BFIN_HWTRACE_ON */
  55
  56#else
  57/* Trace Macros for Assembly files */
  58
  59#ifdef CONFIG_DEBUG_BFIN_HWTRACE_ON
  60
  61#define trace_buffer_stop(preg, dreg)   \
  62        preg.L = LO(TBUFCTL);           \
  63        preg.H = HI(TBUFCTL);           \
  64        dreg = 0x1;                     \
  65        [preg] = dreg;
  66
  67#define trace_buffer_init(preg, dreg) \
  68        preg.L = LO(TBUFCTL);         \
  69        preg.H = HI(TBUFCTL);         \
  70        dreg = BFIN_TRACE_INIT;       \
  71        [preg] = dreg;
  72
  73#define trace_buffer_save(preg, dreg) \
  74        preg.L = LO(TBUFCTL); \
  75        preg.H = HI(TBUFCTL); \
  76        dreg = [preg]; \
  77        [--sp] = dreg; \
  78        dreg = 0x1; \
  79        [preg] = dreg;
  80
  81#define trace_buffer_restore(preg, dreg) \
  82        preg.L = LO(TBUFCTL); \
  83        preg.H = HI(TBUFCTL); \
  84        dreg = [sp++]; \
  85        [preg] = dreg;
  86
  87#else /* CONFIG_DEBUG_BFIN_HWTRACE_ON */
  88
  89#define trace_buffer_stop(preg, dreg)
  90#define trace_buffer_init(preg, dreg)
  91#define trace_buffer_save(preg, dreg)
  92#define trace_buffer_restore(preg, dreg)
  93
  94#endif /* CONFIG_DEBUG_BFIN_HWTRACE_ON */
  95
  96#ifdef CONFIG_DEBUG_BFIN_NO_KERN_HWTRACE
  97# define DEBUG_HWTRACE_SAVE(preg, dreg)    trace_buffer_save(preg, dreg)
  98# define DEBUG_HWTRACE_RESTORE(preg, dreg) trace_buffer_restore(preg, dreg)
  99#else
 100# define DEBUG_HWTRACE_SAVE(preg, dreg)
 101# define DEBUG_HWTRACE_RESTORE(preg, dreg)
 102#endif
 103
 104#endif /* __ASSEMBLY__ */
 105
 106#endif                          /* _BLACKFIN_TRACE_ */
 107