xref: /openbmc/linux/drivers/s390/cio/qdio_debug.h (revision ead5d1f4d877e92c051e1a1ade623d0d30e71619)
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