1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
2779e6e1cSJan Glauber /*
3779e6e1cSJan Glauber * Copyright IBM Corp. 2008
4779e6e1cSJan Glauber *
5779e6e1cSJan Glauber * Author: Jan Glauber (jang@linux.vnet.ibm.com)
6779e6e1cSJan Glauber */
7779e6e1cSJan Glauber #ifndef QDIO_DEBUG_H
8779e6e1cSJan Glauber #define QDIO_DEBUG_H
9779e6e1cSJan Glauber
10779e6e1cSJan Glauber #include <asm/debug.h>
11779e6e1cSJan Glauber #include <asm/qdio.h>
12779e6e1cSJan Glauber #include "qdio.h"
13779e6e1cSJan Glauber
1422f99347SJan Glauber /* that gives us 15 characters in the text event views */
156423ef69SHeiko Carstens #define QDIO_DBF_LEN 32
16779e6e1cSJan Glauber
17779e6e1cSJan Glauber extern debug_info_t *qdio_dbf_setup;
1822f99347SJan Glauber extern debug_info_t *qdio_dbf_error;
19779e6e1cSJan Glauber
2022f99347SJan Glauber #define DBF_ERR 3 /* error conditions */
2122f99347SJan Glauber #define DBF_WARN 4 /* warning conditions */
2222f99347SJan Glauber #define DBF_INFO 6 /* informational */
2322f99347SJan Glauber
2422f99347SJan Glauber #undef DBF_EVENT
2522f99347SJan Glauber #undef DBF_ERROR
2622f99347SJan Glauber #undef DBF_DEV_EVENT
2722f99347SJan Glauber
2822f99347SJan Glauber #define DBF_EVENT(text...) \
2922f99347SJan Glauber do { \
3022f99347SJan Glauber char debug_buffer[QDIO_DBF_LEN]; \
3122f99347SJan Glauber snprintf(debug_buffer, QDIO_DBF_LEN, text); \
3222f99347SJan Glauber debug_text_event(qdio_dbf_setup, DBF_ERR, debug_buffer); \
3322f99347SJan Glauber } while (0)
3422f99347SJan Glauber
DBF_HEX(void * addr,int len)35d3feb481SJan Glauber static inline void DBF_HEX(void *addr, int len)
36d3feb481SJan Glauber {
37d3feb481SJan Glauber debug_event(qdio_dbf_setup, DBF_ERR, addr, len);
38d3feb481SJan Glauber }
3922f99347SJan Glauber
4022f99347SJan Glauber #define DBF_ERROR(text...) \
4122f99347SJan Glauber do { \
4222f99347SJan Glauber char debug_buffer[QDIO_DBF_LEN]; \
4322f99347SJan Glauber snprintf(debug_buffer, QDIO_DBF_LEN, text); \
4422f99347SJan Glauber debug_text_event(qdio_dbf_error, DBF_ERR, debug_buffer); \
4522f99347SJan Glauber } while (0)
4622f99347SJan Glauber
DBF_ERROR_HEX(void * addr,int len)47d3feb481SJan Glauber static inline void DBF_ERROR_HEX(void *addr, int len)
48d3feb481SJan Glauber {
49d3feb481SJan Glauber debug_event(qdio_dbf_error, DBF_ERR, addr, len);
50d3feb481SJan Glauber }
5122f99347SJan Glauber
5222f99347SJan Glauber #define DBF_DEV_EVENT(level, device, text...) \
5322f99347SJan Glauber do { \
5422f99347SJan Glauber char debug_buffer[QDIO_DBF_LEN]; \
558e6a8285SHendrik Brueckner if (debug_level_enabled(device->debug_area, level)) { \
5622f99347SJan Glauber snprintf(debug_buffer, QDIO_DBF_LEN, text); \
5722f99347SJan Glauber debug_text_event(device->debug_area, level, debug_buffer); \
5822f99347SJan Glauber } \
5922f99347SJan Glauber } while (0)
6022f99347SJan Glauber
DBF_DEV_HEX(struct qdio_irq * dev,void * addr,int len,int level)61d3feb481SJan Glauber static inline void DBF_DEV_HEX(struct qdio_irq *dev, void *addr,
62d3feb481SJan Glauber int len, int level)
63d3feb481SJan Glauber {
64d3feb481SJan Glauber debug_event(dev->debug_area, level, addr, len);
65d3feb481SJan Glauber }
6622f99347SJan Glauber
67*3db1db93SJulian Wiedmann int qdio_allocate_dbf(struct qdio_irq *irq_ptr);
68b2745655SJulian Wiedmann void qdio_setup_debug_entries(struct qdio_irq *irq_ptr);
69aa2383f8SStefan Raspl void qdio_shutdown_debug_entries(struct qdio_irq *irq_ptr);
70779e6e1cSJan Glauber int qdio_debug_init(void);
71779e6e1cSJan Glauber void qdio_debug_exit(void);
7222f99347SJan Glauber
73779e6e1cSJan Glauber #endif
74