xref: /openbmc/linux/tools/testing/selftests/powerpc/nx-gzip/include/nx_dbg.h (revision 4b4193256c8d3bc3a5397b5cd9494c2ad386317d)
1*f49b7572SRaphael Moreira Zinsly /* SPDX-License-Identifier: GPL-2.0-or-later */
2*f49b7572SRaphael Moreira Zinsly /*
3*f49b7572SRaphael Moreira Zinsly  * Copyright 2020 IBM Corporation
4*f49b7572SRaphael Moreira Zinsly  *
5*f49b7572SRaphael Moreira Zinsly  */
6*f49b7572SRaphael Moreira Zinsly 
7*f49b7572SRaphael Moreira Zinsly #ifndef _NXU_DBG_H_
8*f49b7572SRaphael Moreira Zinsly #define _NXU_DBG_H_
9*f49b7572SRaphael Moreira Zinsly 
10*f49b7572SRaphael Moreira Zinsly #include <sys/file.h>
11*f49b7572SRaphael Moreira Zinsly #include <stdint.h>
12*f49b7572SRaphael Moreira Zinsly #include <stdio.h>
13*f49b7572SRaphael Moreira Zinsly #include <time.h>
14*f49b7572SRaphael Moreira Zinsly #include <pthread.h>
15*f49b7572SRaphael Moreira Zinsly 
16*f49b7572SRaphael Moreira Zinsly extern FILE * nx_gzip_log;
17*f49b7572SRaphael Moreira Zinsly extern int nx_gzip_trace;
18*f49b7572SRaphael Moreira Zinsly extern unsigned int nx_gzip_inflate_impl;
19*f49b7572SRaphael Moreira Zinsly extern unsigned int nx_gzip_deflate_impl;
20*f49b7572SRaphael Moreira Zinsly extern unsigned int nx_gzip_inflate_flags;
21*f49b7572SRaphael Moreira Zinsly extern unsigned int nx_gzip_deflate_flags;
22*f49b7572SRaphael Moreira Zinsly 
23*f49b7572SRaphael Moreira Zinsly extern int nx_dbg;
24*f49b7572SRaphael Moreira Zinsly pthread_mutex_t mutex_log;
25*f49b7572SRaphael Moreira Zinsly 
26*f49b7572SRaphael Moreira Zinsly #define nx_gzip_trace_enabled()       (nx_gzip_trace & 0x1)
27*f49b7572SRaphael Moreira Zinsly #define nx_gzip_hw_trace_enabled()    (nx_gzip_trace & 0x2)
28*f49b7572SRaphael Moreira Zinsly #define nx_gzip_sw_trace_enabled()    (nx_gzip_trace & 0x4)
29*f49b7572SRaphael Moreira Zinsly #define nx_gzip_gather_statistics()   (nx_gzip_trace & 0x8)
30*f49b7572SRaphael Moreira Zinsly #define nx_gzip_per_stream_stat()     (nx_gzip_trace & 0x10)
31*f49b7572SRaphael Moreira Zinsly 
32*f49b7572SRaphael Moreira Zinsly #define prt(fmt, ...) do { \
33*f49b7572SRaphael Moreira Zinsly 	pthread_mutex_lock(&mutex_log);					\
34*f49b7572SRaphael Moreira Zinsly 	flock(nx_gzip_log->_fileno, LOCK_EX);				\
35*f49b7572SRaphael Moreira Zinsly 	time_t t; struct tm *m; time(&t); m = localtime(&t);		\
36*f49b7572SRaphael Moreira Zinsly 	fprintf(nx_gzip_log, "[%04d/%02d/%02d %02d:%02d:%02d] "		\
37*f49b7572SRaphael Moreira Zinsly 		"pid %d: " fmt,	\
38*f49b7572SRaphael Moreira Zinsly 		(int)m->tm_year + 1900, (int)m->tm_mon+1, (int)m->tm_mday, \
39*f49b7572SRaphael Moreira Zinsly 		(int)m->tm_hour, (int)m->tm_min, (int)m->tm_sec,	\
40*f49b7572SRaphael Moreira Zinsly 		(int)getpid(), ## __VA_ARGS__);				\
41*f49b7572SRaphael Moreira Zinsly 	fflush(nx_gzip_log);						\
42*f49b7572SRaphael Moreira Zinsly 	flock(nx_gzip_log->_fileno, LOCK_UN);				\
43*f49b7572SRaphael Moreira Zinsly 	pthread_mutex_unlock(&mutex_log);				\
44*f49b7572SRaphael Moreira Zinsly } while (0)
45*f49b7572SRaphael Moreira Zinsly 
46*f49b7572SRaphael Moreira Zinsly /* Use in case of an error */
47*f49b7572SRaphael Moreira Zinsly #define prt_err(fmt, ...) do { if (nx_dbg >= 0) {			\
48*f49b7572SRaphael Moreira Zinsly 	prt("%s:%u: Error: "fmt,					\
49*f49b7572SRaphael Moreira Zinsly 		__FILE__, __LINE__, ## __VA_ARGS__);			\
50*f49b7572SRaphael Moreira Zinsly }} while (0)
51*f49b7572SRaphael Moreira Zinsly 
52*f49b7572SRaphael Moreira Zinsly /* Use in case of an warning */
53*f49b7572SRaphael Moreira Zinsly #define prt_warn(fmt, ...) do {	if (nx_dbg >= 1) {			\
54*f49b7572SRaphael Moreira Zinsly 	prt("%s:%u: Warning: "fmt,					\
55*f49b7572SRaphael Moreira Zinsly 		__FILE__, __LINE__, ## __VA_ARGS__);			\
56*f49b7572SRaphael Moreira Zinsly }} while (0)
57*f49b7572SRaphael Moreira Zinsly 
58*f49b7572SRaphael Moreira Zinsly /* Informational printouts */
59*f49b7572SRaphael Moreira Zinsly #define prt_info(fmt, ...) do {	if (nx_dbg >= 2) {			\
60*f49b7572SRaphael Moreira Zinsly 	prt("Info: "fmt, ## __VA_ARGS__);				\
61*f49b7572SRaphael Moreira Zinsly }} while (0)
62*f49b7572SRaphael Moreira Zinsly 
63*f49b7572SRaphael Moreira Zinsly /* Trace zlib wrapper code */
64*f49b7572SRaphael Moreira Zinsly #define prt_trace(fmt, ...) do { if (nx_gzip_trace_enabled()) {		\
65*f49b7572SRaphael Moreira Zinsly 	prt("### "fmt, ## __VA_ARGS__);					\
66*f49b7572SRaphael Moreira Zinsly }} while (0)
67*f49b7572SRaphael Moreira Zinsly 
68*f49b7572SRaphael Moreira Zinsly /* Trace statistics */
69*f49b7572SRaphael Moreira Zinsly #define prt_stat(fmt, ...) do {	if (nx_gzip_gather_statistics()) {	\
70*f49b7572SRaphael Moreira Zinsly 	prt("### "fmt, ## __VA_ARGS__);					\
71*f49b7572SRaphael Moreira Zinsly }} while (0)
72*f49b7572SRaphael Moreira Zinsly 
73*f49b7572SRaphael Moreira Zinsly /* Trace zlib hardware implementation */
74*f49b7572SRaphael Moreira Zinsly #define hw_trace(fmt, ...) do {						\
75*f49b7572SRaphael Moreira Zinsly 		if (nx_gzip_hw_trace_enabled())				\
76*f49b7572SRaphael Moreira Zinsly 			fprintf(nx_gzip_log, "hhh " fmt, ## __VA_ARGS__); \
77*f49b7572SRaphael Moreira Zinsly 	} while (0)
78*f49b7572SRaphael Moreira Zinsly 
79*f49b7572SRaphael Moreira Zinsly /* Trace zlib software implementation */
80*f49b7572SRaphael Moreira Zinsly #define sw_trace(fmt, ...) do {						\
81*f49b7572SRaphael Moreira Zinsly 		if (nx_gzip_sw_trace_enabled())				\
82*f49b7572SRaphael Moreira Zinsly 			fprintf(nx_gzip_log, "sss " fmt, ## __VA_ARGS__); \
83*f49b7572SRaphael Moreira Zinsly 	} while (0)
84*f49b7572SRaphael Moreira Zinsly 
85*f49b7572SRaphael Moreira Zinsly 
86*f49b7572SRaphael Moreira Zinsly /**
87*f49b7572SRaphael Moreira Zinsly  * str_to_num - Convert string into number and copy with endings like
88*f49b7572SRaphael Moreira Zinsly  *              KiB for kilobyte
89*f49b7572SRaphael Moreira Zinsly  *              MiB for megabyte
90*f49b7572SRaphael Moreira Zinsly  *              GiB for gigabyte
91*f49b7572SRaphael Moreira Zinsly  */
92*f49b7572SRaphael Moreira Zinsly uint64_t str_to_num(char *str);
93*f49b7572SRaphael Moreira Zinsly void nx_lib_debug(int onoff);
94*f49b7572SRaphael Moreira Zinsly 
95*f49b7572SRaphael Moreira Zinsly #endif	/* _NXU_DBG_H_ */
96