184 lines
4.7 KiB
C
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
|