qdio_debug.h 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. /*
  2. * Copyright IBM Corp. 2008
  3. *
  4. * Author: Jan Glauber (jang@linux.vnet.ibm.com)
  5. */
  6. #ifndef QDIO_DEBUG_H
  7. #define QDIO_DEBUG_H
  8. #include <asm/debug.h>
  9. #include <asm/qdio.h>
  10. #include "qdio.h"
  11. /* that gives us 15 characters in the text event views */
  12. #define QDIO_DBF_LEN 16
  13. extern debug_info_t *qdio_dbf_setup;
  14. extern debug_info_t *qdio_dbf_error;
  15. /* sort out low debug levels early to avoid wasted sprints */
  16. static inline int qdio_dbf_passes(debug_info_t *dbf_grp, int level)
  17. {
  18. return (level <= dbf_grp->level);
  19. }
  20. #define DBF_ERR 3 /* error conditions */
  21. #define DBF_WARN 4 /* warning conditions */
  22. #define DBF_INFO 6 /* informational */
  23. #undef DBF_EVENT
  24. #undef DBF_ERROR
  25. #undef DBF_DEV_EVENT
  26. #define DBF_EVENT(text...) \
  27. do { \
  28. char debug_buffer[QDIO_DBF_LEN]; \
  29. snprintf(debug_buffer, QDIO_DBF_LEN, text); \
  30. debug_text_event(qdio_dbf_setup, DBF_ERR, debug_buffer); \
  31. } while (0)
  32. static inline void DBF_HEX(void *addr, int len)
  33. {
  34. while (len > 0) {
  35. debug_event(qdio_dbf_setup, DBF_ERR, addr, len);
  36. len -= qdio_dbf_setup->buf_size;
  37. addr += qdio_dbf_setup->buf_size;
  38. }
  39. }
  40. #define DBF_ERROR(text...) \
  41. do { \
  42. char debug_buffer[QDIO_DBF_LEN]; \
  43. snprintf(debug_buffer, QDIO_DBF_LEN, text); \
  44. debug_text_event(qdio_dbf_error, DBF_ERR, debug_buffer); \
  45. } while (0)
  46. static inline void DBF_ERROR_HEX(void *addr, int len)
  47. {
  48. while (len > 0) {
  49. debug_event(qdio_dbf_error, DBF_ERR, addr, len);
  50. len -= qdio_dbf_error->buf_size;
  51. addr += qdio_dbf_error->buf_size;
  52. }
  53. }
  54. #define DBF_DEV_EVENT(level, device, text...) \
  55. do { \
  56. char debug_buffer[QDIO_DBF_LEN]; \
  57. if (qdio_dbf_passes(device->debug_area, level)) { \
  58. snprintf(debug_buffer, QDIO_DBF_LEN, text); \
  59. debug_text_event(device->debug_area, level, debug_buffer); \
  60. } \
  61. } while (0)
  62. static inline void DBF_DEV_HEX(struct qdio_irq *dev, void *addr,
  63. int len, int level)
  64. {
  65. while (len > 0) {
  66. debug_event(dev->debug_area, level, addr, len);
  67. len -= dev->debug_area->buf_size;
  68. addr += dev->debug_area->buf_size;
  69. }
  70. }
  71. void qdio_allocate_dbf(struct qdio_initialize *init_data,
  72. struct qdio_irq *irq_ptr);
  73. void qdio_setup_debug_entries(struct qdio_irq *irq_ptr,
  74. struct ccw_device *cdev);
  75. void qdio_shutdown_debug_entries(struct qdio_irq *irq_ptr,
  76. struct ccw_device *cdev);
  77. int qdio_debug_init(void);
  78. void qdio_debug_exit(void);
  79. #endif