ctcm_dbug.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. /*
  2. * drivers/s390/net/ctcm_dbug.h
  3. *
  4. * Copyright IBM Corp. 2001, 2007
  5. * Authors: Peter Tiedemann (ptiedem@de.ibm.com)
  6. *
  7. */
  8. #ifndef _CTCM_DBUG_H_
  9. #define _CTCM_DBUG_H_
  10. /*
  11. * Debug Facility stuff
  12. */
  13. #include <asm/debug.h>
  14. #ifdef DEBUG
  15. #define do_debug 1
  16. #else
  17. #define do_debug 0
  18. #endif
  19. #ifdef DEBUGDATA
  20. #define do_debug_data 1
  21. #else
  22. #define do_debug_data 0
  23. #endif
  24. #ifdef DEBUGCCW
  25. #define do_debug_ccw 1
  26. #else
  27. #define do_debug_ccw 0
  28. #endif
  29. /* define dbf debug levels similar to kernel msg levels */
  30. #define CTC_DBF_ALWAYS 0 /* always print this */
  31. #define CTC_DBF_EMERG 0 /* system is unusable */
  32. #define CTC_DBF_ALERT 1 /* action must be taken immediately */
  33. #define CTC_DBF_CRIT 2 /* critical conditions */
  34. #define CTC_DBF_ERROR 3 /* error conditions */
  35. #define CTC_DBF_WARN 4 /* warning conditions */
  36. #define CTC_DBF_NOTICE 5 /* normal but significant condition */
  37. #define CTC_DBF_INFO 5 /* informational */
  38. #define CTC_DBF_DEBUG 6 /* debug-level messages */
  39. DECLARE_PER_CPU(char[256], ctcm_dbf_txt_buf);
  40. enum ctcm_dbf_names {
  41. CTCM_DBF_SETUP,
  42. CTCM_DBF_ERROR,
  43. CTCM_DBF_TRACE,
  44. CTCM_DBF_MPC_SETUP,
  45. CTCM_DBF_MPC_ERROR,
  46. CTCM_DBF_MPC_TRACE,
  47. CTCM_DBF_INFOS /* must be last element */
  48. };
  49. struct ctcm_dbf_info {
  50. char name[DEBUG_MAX_NAME_LEN];
  51. int pages;
  52. int areas;
  53. int len;
  54. int level;
  55. debug_info_t *id;
  56. };
  57. extern struct ctcm_dbf_info ctcm_dbf[CTCM_DBF_INFOS];
  58. int ctcm_register_dbf_views(void);
  59. void ctcm_unregister_dbf_views(void);
  60. static inline const char *strtail(const char *s, int n)
  61. {
  62. int l = strlen(s);
  63. return (l > n) ? s + (l - n) : s;
  64. }
  65. /* sort out levels early to avoid unnecessary sprintfs */
  66. static inline int ctcm_dbf_passes(debug_info_t *dbf_grp, int level)
  67. {
  68. return (dbf_grp->level >= level);
  69. }
  70. #define CTCM_FUNTAIL strtail((char *)__func__, 16)
  71. #define CTCM_DBF_TEXT(name, level, text) \
  72. do { \
  73. debug_text_event(ctcm_dbf[CTCM_DBF_##name].id, level, text); \
  74. } while (0)
  75. #define CTCM_DBF_HEX(name, level, addr, len) \
  76. do { \
  77. debug_event(ctcm_dbf[CTCM_DBF_##name].id, \
  78. level, (void *)(addr), len); \
  79. } while (0)
  80. #define CTCM_DBF_TEXT_(name, level, text...) \
  81. do { \
  82. if (ctcm_dbf_passes(ctcm_dbf[CTCM_DBF_##name].id, level)) { \
  83. char *ctcm_dbf_txt_buf = \
  84. get_cpu_var(ctcm_dbf_txt_buf); \
  85. sprintf(ctcm_dbf_txt_buf, text); \
  86. debug_text_event(ctcm_dbf[CTCM_DBF_##name].id, \
  87. level, ctcm_dbf_txt_buf); \
  88. put_cpu_var(ctcm_dbf_txt_buf); \
  89. } \
  90. } while (0)
  91. /*
  92. * cat : one of {setup, mpc_setup, trace, mpc_trace, error, mpc_error}.
  93. * dev : netdevice with valid name field.
  94. * text: any text string.
  95. */
  96. #define CTCM_DBF_DEV_NAME(cat, dev, text) \
  97. do { \
  98. CTCM_DBF_TEXT_(cat, CTC_DBF_INFO, "%s(%s) : %s", \
  99. CTCM_FUNTAIL, dev->name, text); \
  100. } while (0)
  101. #define MPC_DBF_DEV_NAME(cat, dev, text) \
  102. do { \
  103. CTCM_DBF_TEXT_(MPC_##cat, CTC_DBF_INFO, "%s(%s) : %s", \
  104. CTCM_FUNTAIL, dev->name, text); \
  105. } while (0)
  106. #define CTCMY_DBF_DEV_NAME(cat, dev, text) \
  107. do { \
  108. if (IS_MPCDEV(dev)) \
  109. MPC_DBF_DEV_NAME(cat, dev, text); \
  110. else \
  111. CTCM_DBF_DEV_NAME(cat, dev, text); \
  112. } while (0)
  113. /*
  114. * cat : one of {setup, mpc_setup, trace, mpc_trace, error, mpc_error}.
  115. * dev : netdevice.
  116. * text: any text string.
  117. */
  118. #define CTCM_DBF_DEV(cat, dev, text) \
  119. do { \
  120. CTCM_DBF_TEXT_(cat, CTC_DBF_INFO, "%s(%p) : %s", \
  121. CTCM_FUNTAIL, dev, text); \
  122. } while (0)
  123. #define MPC_DBF_DEV(cat, dev, text) \
  124. do { \
  125. CTCM_DBF_TEXT_(MPC_##cat, CTC_DBF_INFO, "%s(%p) : %s", \
  126. CTCM_FUNTAIL, dev, text); \
  127. } while (0)
  128. #define CTCMY_DBF_DEV(cat, dev, text) \
  129. do { \
  130. if (IS_MPCDEV(dev)) \
  131. MPC_DBF_DEV(cat, dev, text); \
  132. else \
  133. CTCM_DBF_DEV(cat, dev, text); \
  134. } while (0)
  135. #endif