ctcm_dbug.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  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 DEBUGCCW
  20. #define do_debug_ccw 1
  21. #define DEBUGDATA 1
  22. #else
  23. #define do_debug_ccw 0
  24. #endif
  25. #ifdef DEBUGDATA
  26. #define do_debug_data 1
  27. #else
  28. #define do_debug_data 0
  29. #endif
  30. /* define dbf debug levels similar to kernel msg levels */
  31. #define CTC_DBF_ALWAYS 0 /* always print this */
  32. #define CTC_DBF_EMERG 0 /* system is unusable */
  33. #define CTC_DBF_ALERT 1 /* action must be taken immediately */
  34. #define CTC_DBF_CRIT 2 /* critical conditions */
  35. #define CTC_DBF_ERROR 3 /* error conditions */
  36. #define CTC_DBF_WARN 4 /* warning conditions */
  37. #define CTC_DBF_NOTICE 5 /* normal but significant condition */
  38. #define CTC_DBF_INFO 5 /* informational */
  39. #define CTC_DBF_DEBUG 6 /* debug-level messages */
  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. void ctcm_dbf_longtext(enum ctcm_dbf_names dbf_nix, int level, char *text, ...);
  61. static inline const char *strtail(const char *s, int n)
  62. {
  63. int l = strlen(s);
  64. return (l > n) ? s + (l - n) : s;
  65. }
  66. #define CTCM_FUNTAIL strtail((char *)__func__, 16)
  67. #define CTCM_DBF_TEXT(name, level, text) \
  68. do { \
  69. debug_text_event(ctcm_dbf[CTCM_DBF_##name].id, level, text); \
  70. } while (0)
  71. #define CTCM_DBF_HEX(name, level, addr, len) \
  72. do { \
  73. debug_event(ctcm_dbf[CTCM_DBF_##name].id, \
  74. level, (void *)(addr), len); \
  75. } while (0)
  76. #define CTCM_DBF_TEXT_(name, level, text...) \
  77. ctcm_dbf_longtext(CTCM_DBF_##name, level, text)
  78. /*
  79. * cat : one of {setup, mpc_setup, trace, mpc_trace, error, mpc_error}.
  80. * dev : netdevice with valid name field.
  81. * text: any text string.
  82. */
  83. #define CTCM_DBF_DEV_NAME(cat, dev, text) \
  84. do { \
  85. CTCM_DBF_TEXT_(cat, CTC_DBF_INFO, "%s(%s) :- %s", \
  86. CTCM_FUNTAIL, dev->name, text); \
  87. } while (0)
  88. #define MPC_DBF_DEV_NAME(cat, dev, text) \
  89. do { \
  90. CTCM_DBF_TEXT_(MPC_##cat, CTC_DBF_INFO, "%s(%s) := %s", \
  91. CTCM_FUNTAIL, dev->name, text); \
  92. } while (0)
  93. #define CTCMY_DBF_DEV_NAME(cat, dev, text) \
  94. do { \
  95. if (IS_MPCDEV(dev)) \
  96. MPC_DBF_DEV_NAME(cat, dev, text); \
  97. else \
  98. CTCM_DBF_DEV_NAME(cat, dev, text); \
  99. } while (0)
  100. /*
  101. * cat : one of {setup, mpc_setup, trace, mpc_trace, error, mpc_error}.
  102. * dev : netdevice.
  103. * text: any text string.
  104. */
  105. #define CTCM_DBF_DEV(cat, dev, text) \
  106. do { \
  107. CTCM_DBF_TEXT_(cat, CTC_DBF_INFO, "%s(%p) :-: %s", \
  108. CTCM_FUNTAIL, dev, text); \
  109. } while (0)
  110. #define MPC_DBF_DEV(cat, dev, text) \
  111. do { \
  112. CTCM_DBF_TEXT_(MPC_##cat, CTC_DBF_INFO, "%s(%p) :=: %s", \
  113. CTCM_FUNTAIL, dev, text); \
  114. } while (0)
  115. #define CTCMY_DBF_DEV(cat, dev, text) \
  116. do { \
  117. if (IS_MPCDEV(dev)) \
  118. MPC_DBF_DEV(cat, dev, text); \
  119. else \
  120. CTCM_DBF_DEV(cat, dev, text); \
  121. } while (0)
  122. #endif