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