1 | /******************************************************************* |
2 | * This file is part of the Emulex Linux Device Driver for * |
3 | * Fibre Channel Host Bus Adapters. * |
4 | * Copyright (C) 2017-2023 Broadcom. All Rights Reserved. The term * |
5 | * “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. * |
6 | * Copyright (C) 2004-2009 Emulex. All rights reserved. * |
7 | * EMULEX and SLI are trademarks of Emulex. * |
8 | * www.broadcom.com * |
9 | * * |
10 | * This program is free software; you can redistribute it and/or * |
11 | * modify it under the terms of version 2 of the GNU General * |
12 | * Public License as published by the Free Software Foundation. * |
13 | * This program is distributed in the hope that it will be useful. * |
14 | * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND * |
15 | * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, * |
16 | * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT, ARE * |
17 | * DISCLAIMED, EXCEPT TO THE EXTENT THAT SUCH DISCLAIMERS ARE HELD * |
18 | * TO BE LEGALLY INVALID. See the GNU General Public License for * |
19 | * more details, a copy of which can be found in the file COPYING * |
20 | * included with this package. * |
21 | *******************************************************************/ |
22 | |
23 | #define LOG_ELS 0x00000001 /* ELS events */ |
24 | #define LOG_DISCOVERY 0x00000002 /* Link discovery events */ |
25 | #define LOG_MBOX 0x00000004 /* Mailbox events */ |
26 | #define LOG_INIT 0x00000008 /* Initialization events */ |
27 | #define LOG_LINK_EVENT 0x00000010 /* Link events */ |
28 | #define LOG_NODE_VERBOSE 0x00000020 /* Node verbose events */ |
29 | #define LOG_FCP 0x00000040 /* FCP traffic history */ |
30 | #define LOG_NODE 0x00000080 /* Node table events */ |
31 | #define LOG_TEMP 0x00000100 /* Temperature sensor events */ |
32 | #define LOG_BG 0x00000200 /* BlockGuard events */ |
33 | #define LOG_MISC 0x00000400 /* Miscellaneous events */ |
34 | #define LOG_SLI 0x00000800 /* SLI events */ |
35 | #define LOG_FCP_ERROR 0x00001000 /* log errors, not underruns */ |
36 | #define LOG_LIBDFC 0x00002000 /* Libdfc events */ |
37 | #define LOG_VPORT 0x00004000 /* NPIV events */ |
38 | #define LOG_LDS_EVENT 0x00008000 /* Link Degrade Signaling events */ |
39 | #define LOG_EVENT 0x00010000 /* CT,TEMP,DUMP, logging */ |
40 | #define LOG_FIP 0x00020000 /* FIP events */ |
41 | #define LOG_FCP_UNDER 0x00040000 /* FCP underruns errors */ |
42 | #define LOG_SCSI_CMD 0x00080000 /* ALL SCSI commands */ |
43 | #define LOG_NVME 0x00100000 /* NVME general events. */ |
44 | #define LOG_NVME_DISC 0x00200000 /* NVME Discovery/Connect events. */ |
45 | #define LOG_NVME_ABTS 0x00400000 /* NVME ABTS events. */ |
46 | #define LOG_NVME_IOERR 0x00800000 /* NVME IO Error events. */ |
47 | #define LOG_RSVD1 0x01000000 /* Reserved */ |
48 | #define LOG_RSVD2 0x02000000 /* Reserved */ |
49 | #define LOG_CGN_MGMT 0x04000000 /* Congestion Mgmt events */ |
50 | #define LOG_TRACE_EVENT 0x80000000 /* Dmp the DBG log on this err */ |
51 | #define LOG_ALL_MSG 0x7fffffff /* LOG all messages */ |
52 | |
53 | void lpfc_dmp_dbg(struct lpfc_hba *phba); |
54 | void lpfc_dbg_print(struct lpfc_hba *phba, const char *fmt, ...); |
55 | |
56 | /* generate message by verbose log setting or severity */ |
57 | #define lpfc_vlog_msg(vport, level, mask, fmt, arg...) \ |
58 | { if (((mask) & (vport)->cfg_log_verbose) || (level[1] <= '5')) \ |
59 | dev_printk(level, &((vport)->phba->pcidev)->dev, "%d:(%d):" \ |
60 | fmt, (vport)->phba->brd_no, vport->vpi, ##arg); } |
61 | |
62 | #define lpfc_log_msg(phba, level, mask, fmt, arg...) \ |
63 | do { \ |
64 | { uint32_t log_verbose = (phba)->pport ? \ |
65 | (phba)->pport->cfg_log_verbose : \ |
66 | (phba)->cfg_log_verbose; \ |
67 | if (((mask) & log_verbose) || (level[1] <= '5')) \ |
68 | dev_printk(level, &((phba)->pcidev)->dev, "%d:" \ |
69 | fmt, phba->brd_no, ##arg); \ |
70 | } \ |
71 | } while (0) |
72 | |
73 | #define lpfc_printf_vlog(vport, level, mask, fmt, arg...) \ |
74 | do { \ |
75 | { if (((mask) & (vport)->cfg_log_verbose) || (level[1] <= '3')) { \ |
76 | if ((mask) & LOG_TRACE_EVENT && !(vport)->cfg_log_verbose) \ |
77 | lpfc_dmp_dbg((vport)->phba); \ |
78 | dev_printk(level, &((vport)->phba->pcidev)->dev, "%d:(%d):" \ |
79 | fmt, (vport)->phba->brd_no, vport->vpi, ##arg); \ |
80 | } else if (!(vport)->cfg_log_verbose) \ |
81 | lpfc_dbg_print((vport)->phba, "%d:(%d):" fmt, \ |
82 | (vport)->phba->brd_no, (vport)->vpi, ##arg); \ |
83 | } \ |
84 | } while (0) |
85 | |
86 | #define lpfc_printf_log(phba, level, mask, fmt, arg...) \ |
87 | do { \ |
88 | { uint32_t log_verbose = (phba)->pport ? \ |
89 | (phba)->pport->cfg_log_verbose : \ |
90 | (phba)->cfg_log_verbose; \ |
91 | if (((mask) & log_verbose) || (level[1] <= '3')) { \ |
92 | if ((mask) & LOG_TRACE_EVENT && !log_verbose) \ |
93 | lpfc_dmp_dbg(phba); \ |
94 | dev_printk(level, &((phba)->pcidev)->dev, "%d:" \ |
95 | fmt, phba->brd_no, ##arg); \ |
96 | } else if (!log_verbose)\ |
97 | lpfc_dbg_print(phba, "%d:" fmt, phba->brd_no, ##arg); \ |
98 | } \ |
99 | } while (0) |
100 | |