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