162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci *  Copyright IBM Corp. 2008
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci *  Author: Jan Glauber (jang@linux.vnet.ibm.com)
662306a36Sopenharmony_ci */
762306a36Sopenharmony_ci#ifndef QDIO_DEBUG_H
862306a36Sopenharmony_ci#define QDIO_DEBUG_H
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci#include <asm/debug.h>
1162306a36Sopenharmony_ci#include <asm/qdio.h>
1262306a36Sopenharmony_ci#include "qdio.h"
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci/* that gives us 15 characters in the text event views */
1562306a36Sopenharmony_ci#define QDIO_DBF_LEN	32
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ciextern debug_info_t *qdio_dbf_setup;
1862306a36Sopenharmony_ciextern debug_info_t *qdio_dbf_error;
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ci#define DBF_ERR		3	/* error conditions	*/
2162306a36Sopenharmony_ci#define DBF_WARN	4	/* warning conditions	*/
2262306a36Sopenharmony_ci#define DBF_INFO	6	/* informational	*/
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ci#undef DBF_EVENT
2562306a36Sopenharmony_ci#undef DBF_ERROR
2662306a36Sopenharmony_ci#undef DBF_DEV_EVENT
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci#define DBF_EVENT(text...) \
2962306a36Sopenharmony_ci	do { \
3062306a36Sopenharmony_ci		char debug_buffer[QDIO_DBF_LEN]; \
3162306a36Sopenharmony_ci		snprintf(debug_buffer, QDIO_DBF_LEN, text); \
3262306a36Sopenharmony_ci		debug_text_event(qdio_dbf_setup, DBF_ERR, debug_buffer); \
3362306a36Sopenharmony_ci	} while (0)
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_cistatic inline void DBF_HEX(void *addr, int len)
3662306a36Sopenharmony_ci{
3762306a36Sopenharmony_ci	debug_event(qdio_dbf_setup, DBF_ERR, addr, len);
3862306a36Sopenharmony_ci}
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ci#define DBF_ERROR(text...) \
4162306a36Sopenharmony_ci	do { \
4262306a36Sopenharmony_ci		char debug_buffer[QDIO_DBF_LEN]; \
4362306a36Sopenharmony_ci		snprintf(debug_buffer, QDIO_DBF_LEN, text); \
4462306a36Sopenharmony_ci		debug_text_event(qdio_dbf_error, DBF_ERR, debug_buffer); \
4562306a36Sopenharmony_ci	} while (0)
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_cistatic inline void DBF_ERROR_HEX(void *addr, int len)
4862306a36Sopenharmony_ci{
4962306a36Sopenharmony_ci	debug_event(qdio_dbf_error, DBF_ERR, addr, len);
5062306a36Sopenharmony_ci}
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_ci#define DBF_DEV_EVENT(level, device, text...) \
5362306a36Sopenharmony_ci	do { \
5462306a36Sopenharmony_ci		char debug_buffer[QDIO_DBF_LEN]; \
5562306a36Sopenharmony_ci		if (debug_level_enabled(device->debug_area, level)) { \
5662306a36Sopenharmony_ci			snprintf(debug_buffer, QDIO_DBF_LEN, text); \
5762306a36Sopenharmony_ci			debug_text_event(device->debug_area, level, debug_buffer); \
5862306a36Sopenharmony_ci		} \
5962306a36Sopenharmony_ci	} while (0)
6062306a36Sopenharmony_ci
6162306a36Sopenharmony_cistatic inline void DBF_DEV_HEX(struct qdio_irq *dev, void *addr,
6262306a36Sopenharmony_ci			       int len, int level)
6362306a36Sopenharmony_ci{
6462306a36Sopenharmony_ci	debug_event(dev->debug_area, level, addr, len);
6562306a36Sopenharmony_ci}
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_ciint qdio_allocate_dbf(struct qdio_irq *irq_ptr);
6862306a36Sopenharmony_civoid qdio_setup_debug_entries(struct qdio_irq *irq_ptr);
6962306a36Sopenharmony_civoid qdio_shutdown_debug_entries(struct qdio_irq *irq_ptr);
7062306a36Sopenharmony_ciint qdio_debug_init(void);
7162306a36Sopenharmony_civoid qdio_debug_exit(void);
7262306a36Sopenharmony_ci
7362306a36Sopenharmony_ci#endif
74