xref: /linux/drivers/scsi/qedi/qedi_dbg.h (revision c1144d29f405ce1f4e6ede6482beb3d0d09750c6)
1ace7f46bSManish Rangankar /*
2ace7f46bSManish Rangankar  * QLogic iSCSI Offload Driver
3ace7f46bSManish Rangankar  * Copyright (c) 2016 Cavium Inc.
4ace7f46bSManish Rangankar  *
5ace7f46bSManish Rangankar  * This software is available under the terms of the GNU General Public License
6ace7f46bSManish Rangankar  * (GPL) Version 2, available from the file COPYING in the main directory of
7ace7f46bSManish Rangankar  * this source tree.
8ace7f46bSManish Rangankar  */
9ace7f46bSManish Rangankar 
10ace7f46bSManish Rangankar #ifndef _QEDI_DBG_H_
11ace7f46bSManish Rangankar #define _QEDI_DBG_H_
12ace7f46bSManish Rangankar 
13ace7f46bSManish Rangankar #include <linux/types.h>
14ace7f46bSManish Rangankar #include <linux/kernel.h>
15ace7f46bSManish Rangankar #include <linux/compiler.h>
16ace7f46bSManish Rangankar #include <linux/string.h>
17ace7f46bSManish Rangankar #include <linux/version.h>
18ace7f46bSManish Rangankar #include <linux/pci.h>
19ace7f46bSManish Rangankar #include <linux/delay.h>
20ace7f46bSManish Rangankar #include <scsi/scsi_transport.h>
21ace7f46bSManish Rangankar #include <scsi/scsi_transport_iscsi.h>
22ace7f46bSManish Rangankar #include <linux/fs.h>
23ace7f46bSManish Rangankar 
24ace7f46bSManish Rangankar #define __PREVENT_QED_HSI__
25ace7f46bSManish Rangankar #include <linux/qed/common_hsi.h>
26ace7f46bSManish Rangankar #include <linux/qed/qed_if.h>
27ace7f46bSManish Rangankar 
28ace7f46bSManish Rangankar extern uint qedi_dbg_log;
29ace7f46bSManish Rangankar 
30ace7f46bSManish Rangankar /* Debug print level definitions */
31ace7f46bSManish Rangankar #define QEDI_LOG_DEFAULT	0x1		/* Set default logging mask */
32ace7f46bSManish Rangankar #define QEDI_LOG_INFO		0x2		/* Informational logs,
33ace7f46bSManish Rangankar 						 * MAC address, WWPN, WWNN
34ace7f46bSManish Rangankar 						 */
35ace7f46bSManish Rangankar #define QEDI_LOG_DISC		0x4		/* Init, discovery, rport */
36ace7f46bSManish Rangankar #define QEDI_LOG_LL2		0x8		/* LL2, VLAN logs */
37ace7f46bSManish Rangankar #define QEDI_LOG_CONN		0x10		/* Connection setup, cleanup */
38ace7f46bSManish Rangankar #define QEDI_LOG_EVT		0x20		/* Events, link, mtu */
39ace7f46bSManish Rangankar #define QEDI_LOG_TIMER		0x40		/* Timer events */
40ace7f46bSManish Rangankar #define QEDI_LOG_MP_REQ		0x80		/* Middle Path (MP) logs */
41ace7f46bSManish Rangankar #define QEDI_LOG_SCSI_TM	0x100		/* SCSI Aborts, Task Mgmt */
42ace7f46bSManish Rangankar #define QEDI_LOG_UNSOL		0x200		/* unsolicited event logs */
43ace7f46bSManish Rangankar #define QEDI_LOG_IO		0x400		/* scsi cmd, completion */
44ace7f46bSManish Rangankar #define QEDI_LOG_MQ		0x800		/* Multi Queue logs */
45ace7f46bSManish Rangankar #define QEDI_LOG_BSG		0x1000		/* BSG logs */
46ace7f46bSManish Rangankar #define QEDI_LOG_DEBUGFS	0x2000		/* debugFS logs */
47ace7f46bSManish Rangankar #define QEDI_LOG_LPORT		0x4000		/* lport logs */
48ace7f46bSManish Rangankar #define QEDI_LOG_ELS		0x8000		/* ELS logs */
49ace7f46bSManish Rangankar #define QEDI_LOG_NPIV		0x10000		/* NPIV logs */
50ace7f46bSManish Rangankar #define QEDI_LOG_SESS		0x20000		/* Conection setup, cleanup */
51ace7f46bSManish Rangankar #define QEDI_LOG_UIO		0x40000		/* iSCSI UIO logs */
52ace7f46bSManish Rangankar #define QEDI_LOG_TID		0x80000         /* FW TID context acquire,
53ace7f46bSManish Rangankar 						 * free
54ace7f46bSManish Rangankar 						 */
55ace7f46bSManish Rangankar #define QEDI_TRACK_TID		0x100000        /* Track TID state. To be
56ace7f46bSManish Rangankar 						 * enabled only at module load
57ace7f46bSManish Rangankar 						 * and not run-time.
58ace7f46bSManish Rangankar 						 */
59ace7f46bSManish Rangankar #define QEDI_TRACK_CMD_LIST    0x300000        /* Track active cmd list nodes,
60ace7f46bSManish Rangankar 						* done with reference to TID,
61ace7f46bSManish Rangankar 						* hence TRACK_TID also enabled.
62ace7f46bSManish Rangankar 						*/
63ace7f46bSManish Rangankar #define QEDI_LOG_NOTICE		0x40000000	/* Notice logs */
64ace7f46bSManish Rangankar #define QEDI_LOG_WARN		0x80000000	/* Warning logs */
65ace7f46bSManish Rangankar 
66ace7f46bSManish Rangankar /* Debug context structure */
67ace7f46bSManish Rangankar struct qedi_dbg_ctx {
68ace7f46bSManish Rangankar 	unsigned int host_no;
69ace7f46bSManish Rangankar 	struct pci_dev *pdev;
70ace7f46bSManish Rangankar #ifdef CONFIG_DEBUG_FS
71ace7f46bSManish Rangankar 	struct dentry *bdf_dentry;
72ace7f46bSManish Rangankar #endif
73ace7f46bSManish Rangankar };
74ace7f46bSManish Rangankar 
75ace7f46bSManish Rangankar #define QEDI_ERR(pdev, fmt, ...)	\
76ace7f46bSManish Rangankar 		qedi_dbg_err(pdev, __func__, __LINE__, fmt, ## __VA_ARGS__)
77ace7f46bSManish Rangankar #define QEDI_WARN(pdev, fmt, ...)	\
78ace7f46bSManish Rangankar 		qedi_dbg_warn(pdev, __func__, __LINE__, fmt, ## __VA_ARGS__)
79ace7f46bSManish Rangankar #define QEDI_NOTICE(pdev, fmt, ...)	\
80ace7f46bSManish Rangankar 		qedi_dbg_notice(pdev, __func__, __LINE__, fmt, ## __VA_ARGS__)
81ace7f46bSManish Rangankar #define QEDI_INFO(pdev, level, fmt, ...)	\
82ace7f46bSManish Rangankar 		qedi_dbg_info(pdev, __func__, __LINE__, level, fmt,	\
83ace7f46bSManish Rangankar 			      ## __VA_ARGS__)
84ace7f46bSManish Rangankar 
85ace7f46bSManish Rangankar void qedi_dbg_err(struct qedi_dbg_ctx *qedi, const char *func, u32 line,
86ace7f46bSManish Rangankar 		  const char *fmt, ...);
87ace7f46bSManish Rangankar void qedi_dbg_warn(struct qedi_dbg_ctx *qedi, const char *func, u32 line,
88ace7f46bSManish Rangankar 		   const char *fmt, ...);
89ace7f46bSManish Rangankar void qedi_dbg_notice(struct qedi_dbg_ctx *qedi, const char *func, u32 line,
90ace7f46bSManish Rangankar 		     const char *fmt, ...);
91ace7f46bSManish Rangankar void qedi_dbg_info(struct qedi_dbg_ctx *qedi, const char *func, u32 line,
92ace7f46bSManish Rangankar 		   u32 info, const char *fmt, ...);
93ace7f46bSManish Rangankar 
94ace7f46bSManish Rangankar struct Scsi_Host;
95ace7f46bSManish Rangankar 
96ace7f46bSManish Rangankar struct sysfs_bin_attrs {
97ace7f46bSManish Rangankar 	char *name;
98ace7f46bSManish Rangankar 	struct bin_attribute *attr;
99ace7f46bSManish Rangankar };
100ace7f46bSManish Rangankar 
101ace7f46bSManish Rangankar int qedi_create_sysfs_attr(struct Scsi_Host *shost,
102ace7f46bSManish Rangankar 			   struct sysfs_bin_attrs *iter);
103ace7f46bSManish Rangankar void qedi_remove_sysfs_attr(struct Scsi_Host *shost,
104ace7f46bSManish Rangankar 			    struct sysfs_bin_attrs *iter);
105ace7f46bSManish Rangankar 
106ace7f46bSManish Rangankar /* DebugFS related code */
107ace7f46bSManish Rangankar struct qedi_list_of_funcs {
108ace7f46bSManish Rangankar 	char *oper_str;
109ace7f46bSManish Rangankar 	ssize_t (*oper_func)(struct qedi_dbg_ctx *qedi);
110ace7f46bSManish Rangankar };
111ace7f46bSManish Rangankar 
112ace7f46bSManish Rangankar struct qedi_debugfs_ops {
113ace7f46bSManish Rangankar 	char *name;
114ace7f46bSManish Rangankar 	struct qedi_list_of_funcs *qedi_funcs;
115ace7f46bSManish Rangankar };
116ace7f46bSManish Rangankar 
117ace7f46bSManish Rangankar #define qedi_dbg_fileops(drv, ops) \
118ace7f46bSManish Rangankar { \
119ace7f46bSManish Rangankar 	.owner  = THIS_MODULE, \
120ace7f46bSManish Rangankar 	.open   = simple_open, \
121ace7f46bSManish Rangankar 	.read   = drv##_dbg_##ops##_cmd_read, \
122ace7f46bSManish Rangankar 	.write  = drv##_dbg_##ops##_cmd_write \
123ace7f46bSManish Rangankar }
124ace7f46bSManish Rangankar 
125ace7f46bSManish Rangankar /* Used for debugfs sequential files */
126ace7f46bSManish Rangankar #define qedi_dbg_fileops_seq(drv, ops) \
127ace7f46bSManish Rangankar { \
128ace7f46bSManish Rangankar 	.owner = THIS_MODULE, \
129ace7f46bSManish Rangankar 	.open = drv##_dbg_##ops##_open, \
130ace7f46bSManish Rangankar 	.read = seq_read, \
131ace7f46bSManish Rangankar 	.llseek = seq_lseek, \
132ace7f46bSManish Rangankar 	.release = single_release, \
133ace7f46bSManish Rangankar }
134ace7f46bSManish Rangankar 
135ace7f46bSManish Rangankar void qedi_dbg_host_init(struct qedi_dbg_ctx *qedi,
136*779936faSArnd Bergmann 			const struct qedi_debugfs_ops *dops,
137ace7f46bSManish Rangankar 			const struct file_operations *fops);
138ace7f46bSManish Rangankar void qedi_dbg_host_exit(struct qedi_dbg_ctx *qedi);
139ace7f46bSManish Rangankar void qedi_dbg_init(char *drv_name);
140ace7f46bSManish Rangankar void qedi_dbg_exit(void);
141ace7f46bSManish Rangankar 
142ace7f46bSManish Rangankar #endif /* _QEDI_DBG_H_ */
143