2026-01-21 18:59:54 +08:00

184 lines
4.7 KiB
C

/* SPDX-License-Identifier: GPL-2.0 */
/* Huawei Hifc PCI Express Linux driver
* Copyright(c) 2017 Huawei Technologies Co., Ltd
*
*/
#ifndef __UNF_LOG_H__
#define __UNF_LOG_H__
#define UNF_CRITICAL 1
#define UNF_ERR 2
#define UNF_WARN 3
#define UNF_KEVENT 4
#define UNF_MAJOR 5
#define UNF_MINOR 6
#define UNF_INFO 7
#define UNF_DATA 7
#define UNF_ALL 7
enum unf_debug_type_e {
UNF_DEBUG_TYPE_MML = 0,
UNF_DEBUG_TYPE_DIAGNOSE = 1,
UNF_DEBUG_TYPE_MESSAGE = 2,
UNF_DEBUG_TYPE_BUTT
};
enum unf_log_attr_e {
UNF_LOG_LOGIN_ATT = 0x1,
UNF_LOG_IO_ATT = 0x2,
UNF_LOG_EQUIP_ATT = 0x4,
UNF_LOG_REG_ATT = 0x8,
UNF_LOG_REG_MML_TEST = 0x10,
UNF_LOG_EVENT = 0x20,
UNF_LOG_NORMAL = 0x40,
UNF_LOG_ABNORMAL = 0X80,
UNF_LOG_BUTT
};
enum event_log_e {
UNF_EVTLOG_DRIVER_SUC = 0,
UNF_EVTLOG_DRIVER_INFO,
UNF_EVTLOG_DRIVER_WARN,
UNF_EVTLOG_DRIVER_ERR,
UNF_EVTLOG_LINK_SUC,
UNF_EVTLOG_LINK_INFO,
UNF_EVTLOG_LINK_WARN,
UNF_EVTLOG_LINK_ERR,
UNF_EVTLOG_IO_SUC,
UNF_EVTLOG_IO_INFO,
UNF_EVTLOG_IO_WARN,
UNF_EVTLOG_IO_ERR,
UNF_EVTLOG_TOOL_SUC,
UNF_EVTLOG_TOOL_INFO,
UNF_EVTLOG_TOOL_WARN,
UNF_EVTLOG_TOOL_ERR,
UNF_EVTLOG_BUT
};
#define UNF_IO_ATT_PRINT_TIMES 2
#define UNF_LOGIN_ATT_PRINT_TIMES 100
#define UNF_IO_ATT_PRINT_LIMIT msecs_to_jiffies(6 * 1000)
extern unsigned int unf_dbg_level;
extern unsigned int log_print_level;
extern unsigned int log_limted_times;
#define DRV_LOG_LIMIT(module_id, log_level, log_id, log_att, format, ...) \
do { \
static unsigned long pre; \
static int should_print = UNF_LOGIN_ATT_PRINT_TIMES; \
if (time_after_eq(jiffies, pre + (UNF_IO_ATT_PRINT_LIMIT))) { \
if (log_att == UNF_LOG_ABNORMAL) { \
should_print = UNF_IO_ATT_PRINT_TIMES; \
} else { \
should_print = log_limted_times; \
} \
} \
if (should_print < 0) { \
if (log_att != UNF_LOG_ABNORMAL) { \
pre = jiffies; \
} \
break; \
} \
if (should_print-- > 0) { \
printk(log_level \
"[%d][FC_UNF]" format "[%s][%-5d]\n", \
smp_processor_id(), ##__VA_ARGS__, \
__func__, __LINE__); \
} \
if (should_print == 0) { \
printk(log_level \
"[FC_UNF]log is limited[%s][%-5d]\n", \
__func__, __LINE__); \
} \
pre = jiffies; \
} while (0)
#define UNF_CHECK_VALID(logid, need_check, condition, fail_do) \
do { \
if (unlikely(!(condition))) { \
UNF_TRACE((logid), UNF_LOG_REG_ATT, UNF_ERR, \
"Para check(%s) invalid", #condition); \
fail_do; \
} \
} while (0)
#define HIUNF_TRACE(log_id, log_att, log_level, format, ...) \
do { \
if (unlikely((log_level) <= log_print_level)) { \
if (log_level == UNF_CRITICAL) { \
DRV_LOG_LIMIT(UNF_PID, KERN_CRIT, log_id, \
log_att, format, ##__VA_ARGS__); \
} else if (log_level == UNF_WARN) { \
DRV_LOG_LIMIT(UNF_PID, KERN_WARNING, log_id, \
log_att, format, ##__VA_ARGS__); \
} else if (log_level == UNF_ERR) { \
DRV_LOG_LIMIT(UNF_PID, KERN_ERR, log_id, \
log_att, format, ##__VA_ARGS__); \
} else if (log_level == UNF_MAJOR || \
log_level == UNF_MINOR || \
log_level == UNF_KEVENT) { \
DRV_LOG_LIMIT(UNF_PID, KERN_NOTICE, log_id, \
log_att, format, ##__VA_ARGS__); \
} else if (log_level == UNF_INFO || \
log_level == UNF_DATA) { \
DRV_LOG_LIMIT(UNF_PID, KERN_INFO, log_id, \
log_att, format, ##__VA_ARGS__); \
} \
} \
} while (0)
#define UNF_TRACE(log_id, log_att, log_level, fmt, ...) \
do { \
HIUNF_TRACE(log_id, log_att, log_level, fmt, ##__VA_ARGS__); \
} while (0)
#define UNF_INIT_PRIVATE_ST(private_st) \
do { \
memset(&(private_st), 0, sizeof(private_st)); \
} while (0)
#define UNF_PRINT_SFS(dbg_level, portid, v_data, v_size) \
do { \
if ((dbg_level) <= log_print_level) { \
unsigned int cnt = 0; \
printk(KERN_INFO "[INFO]Port(0x%x) sfs:0x", \
(portid)); \
for (cnt = 0; cnt < (v_size) / 4; cnt++) { \
printk(KERN_INFO "%08x ", \
((unsigned int *)v_data)[cnt]); \
} \
printk(KERN_INFO "[FC_UNF][%s]\n", __FUNCTION__); \
} \
} while (0)
#define UNF_PRINT_SFS_LIMIT(dbg_level, portid, v_data, v_size) \
do { \
if ((dbg_level) <= log_print_level) { \
static unsigned long pre; \
static int should_print = UNF_LOGIN_ATT_PRINT_TIMES; \
if (time_after_eq(jiffies, pre + \
UNF_IO_ATT_PRINT_LIMIT)) { \
should_print = log_limted_times; \
} \
if (should_print < 0) { \
pre = jiffies; \
break; \
} \
if (should_print-- > 0) { \
UNF_PRINT_SFS(dbg_level, portid, \
v_data, v_size); \
} \
if (should_print == 0) { \
printk(KERN_INFO "[FC_UNF]sfs log is limited[%s][%-5d]\n", \
__func__, __LINE__); \
} \
pre = jiffies; \
} \
} while (0)
#define UNF_REFERNCE_VAR(var)
#endif