/* SPDX-License-Identifier: GPL-2.0-or-later */ /* * Copyright 2020 IBM Corporation * */ #ifndef _NXU_DBG_H_ #define _NXU_DBG_H_ #include <sys/file.h> #include <stdint.h> #include <stdio.h> #include <time.h> #include <pthread.h> extern FILE * nx_gzip_log; extern int nx_gzip_trace; extern unsigned int nx_gzip_inflate_impl; extern unsigned int nx_gzip_deflate_impl; extern unsigned int nx_gzip_inflate_flags; extern unsigned int nx_gzip_deflate_flags; extern int nx_dbg; pthread_mutex_t mutex_log; #define nx_gzip_trace_enabled() (nx_gzip_trace & 0x1) #define nx_gzip_hw_trace_enabled() (nx_gzip_trace & 0x2) #define nx_gzip_sw_trace_enabled() (nx_gzip_trace & 0x4) #define nx_gzip_gather_statistics() (nx_gzip_trace & 0x8) #define nx_gzip_per_stream_stat() (nx_gzip_trace & 0x10) #define prt(fmt, ...) do { \ pthread_mutex_lock(&mutex_log); \ flock(nx_gzip_log->_fileno, LOCK_EX); \ time_t t; struct tm *m; time(&t); m = localtime(&t); \ fprintf(nx_gzip_log, "[%04d/%02d/%02d %02d:%02d:%02d] " \ "pid %d: " fmt, \ (int)m->tm_year + 1900, (int)m->tm_mon+1, (int)m->tm_mday, \ (int)m->tm_hour, (int)m->tm_min, (int)m->tm_sec, \ (int)getpid(), ## __VA_ARGS__); \ fflush(nx_gzip_log); \ flock(nx_gzip_log->_fileno, LOCK_UN); \ pthread_mutex_unlock(&mutex_log); \ } while (0) /* Use in case of an error */ #define prt_err(fmt, ...) do { if (nx_dbg >= 0) { \ prt("%s:%u: Error: "fmt, \ __FILE__, __LINE__, ## __VA_ARGS__); \ }} while (0) /* Use in case of an warning */ #define prt_warn(fmt, ...) do { if (nx_dbg >= 1) { \ prt("%s:%u: Warning: "fmt, \ __FILE__, __LINE__, ## __VA_ARGS__); \ }} while (0) /* Informational printouts */ #define prt_info(fmt, ...) do { if (nx_dbg >= 2) { \ prt("Info: "fmt, ## __VA_ARGS__); \ }} while (0) /* Trace zlib wrapper code */ #define prt_trace(fmt, ...) do { if (nx_gzip_trace_enabled()) { \ prt("### "fmt, ## __VA_ARGS__); \ }} while (0) /* Trace statistics */ #define prt_stat(fmt, ...) do { if (nx_gzip_gather_statistics()) { \ prt("### "fmt, ## __VA_ARGS__); \ }} while (0) /* Trace zlib hardware implementation */ #define hw_trace(fmt, ...) do { \ if (nx_gzip_hw_trace_enabled()) \ fprintf(nx_gzip_log, "hhh " fmt, ## __VA_ARGS__); \ } while (0) /* Trace zlib software implementation */ #define sw_trace(fmt, ...) do { \ if (nx_gzip_sw_trace_enabled()) \ fprintf(nx_gzip_log, "sss " fmt, ## __VA_ARGS__); \ } while (0) /** * str_to_num - Convert string into number and copy with endings like * KiB for kilobyte * MiB for megabyte * GiB for gigabyte */ uint64_t str_to_num(char *str); void nx_lib_debug(int onoff); #endif /* _NXU_DBG_H_ */