Commit | Line | Data |
---|---|---|
3287e96a | 1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
61d8658b DC |
2 | /* |
3 | * QLogic FCoE Offload Driver | |
5d1c8b5b | 4 | * Copyright (c) 2016-2018 Cavium Inc. |
61d8658b DC |
5 | */ |
6 | #ifndef _QEDF_DBG_H_ | |
7 | #define _QEDF_DBG_H_ | |
8 | ||
9 | #include <linux/types.h> | |
10 | #include <linux/kernel.h> | |
11 | #include <linux/compiler.h> | |
12 | #include <linux/string.h> | |
13 | #include <linux/version.h> | |
14 | #include <linux/pci.h> | |
15 | #include <linux/delay.h> | |
16 | #include <scsi/scsi_transport.h> | |
17 | #include <linux/fs.h> | |
18 | ||
19 | #include <linux/qed/common_hsi.h> | |
20 | #include <linux/qed/qed_if.h> | |
21 | ||
22 | extern uint qedf_debug; | |
23 | ||
24 | /* Debug print level definitions */ | |
25 | #define QEDF_LOG_DEFAULT 0x1 /* Set default logging mask */ | |
26 | #define QEDF_LOG_INFO 0x2 /* | |
27 | * Informational logs, | |
28 | * MAC address, WWPN, WWNN | |
29 | */ | |
30 | #define QEDF_LOG_DISC 0x4 /* Init, discovery, rport */ | |
31 | #define QEDF_LOG_LL2 0x8 /* LL2, VLAN logs */ | |
32 | #define QEDF_LOG_CONN 0x10 /* Connection setup, cleanup */ | |
33 | #define QEDF_LOG_EVT 0x20 /* Events, link, mtu */ | |
34 | #define QEDF_LOG_TIMER 0x40 /* Timer events */ | |
35 | #define QEDF_LOG_MP_REQ 0x80 /* Middle Path (MP) logs */ | |
36 | #define QEDF_LOG_SCSI_TM 0x100 /* SCSI Aborts, Task Mgmt */ | |
37 | #define QEDF_LOG_UNSOL 0x200 /* unsolicited event logs */ | |
38 | #define QEDF_LOG_IO 0x400 /* scsi cmd, completion */ | |
39 | #define QEDF_LOG_MQ 0x800 /* Multi Queue logs */ | |
40 | #define QEDF_LOG_BSG 0x1000 /* BSG logs */ | |
41 | #define QEDF_LOG_DEBUGFS 0x2000 /* debugFS logs */ | |
42 | #define QEDF_LOG_LPORT 0x4000 /* lport logs */ | |
43 | #define QEDF_LOG_ELS 0x8000 /* ELS logs */ | |
44 | #define QEDF_LOG_NPIV 0x10000 /* NPIV logs */ | |
45 | #define QEDF_LOG_SESS 0x20000 /* Conection setup, cleanup */ | |
46 | #define QEDF_LOG_TID 0x80000 /* | |
47 | * FW TID context acquire | |
48 | * free | |
49 | */ | |
50 | #define QEDF_TRACK_TID 0x100000 /* | |
51 | * Track TID state. To be | |
52 | * enabled only at module load | |
53 | * and not run-time. | |
54 | */ | |
55 | #define QEDF_TRACK_CMD_LIST 0x300000 /* | |
56 | * Track active cmd list nodes, | |
57 | * done with reference to TID, | |
58 | * hence TRACK_TID also enabled. | |
59 | */ | |
60 | #define QEDF_LOG_NOTICE 0x40000000 /* Notice logs */ | |
61 | #define QEDF_LOG_WARN 0x80000000 /* Warning logs */ | |
62 | ||
63 | /* Debug context structure */ | |
64 | struct qedf_dbg_ctx { | |
65 | unsigned int host_no; | |
66 | struct pci_dev *pdev; | |
67 | #ifdef CONFIG_DEBUG_FS | |
68 | struct dentry *bdf_dentry; | |
69 | #endif | |
70 | }; | |
71 | ||
72 | #define QEDF_ERR(pdev, fmt, ...) \ | |
73 | qedf_dbg_err(pdev, __func__, __LINE__, fmt, ## __VA_ARGS__) | |
74 | #define QEDF_WARN(pdev, fmt, ...) \ | |
75 | qedf_dbg_warn(pdev, __func__, __LINE__, fmt, ## __VA_ARGS__) | |
76 | #define QEDF_NOTICE(pdev, fmt, ...) \ | |
77 | qedf_dbg_notice(pdev, __func__, __LINE__, fmt, ## __VA_ARGS__) | |
78 | #define QEDF_INFO(pdev, level, fmt, ...) \ | |
79 | qedf_dbg_info(pdev, __func__, __LINE__, level, fmt, \ | |
80 | ## __VA_ARGS__) | |
db6b2060 JP |
81 | __printf(4, 5) |
82 | void qedf_dbg_err(struct qedf_dbg_ctx *qedf, const char *func, u32 line, | |
61d8658b | 83 | const char *fmt, ...); |
db6b2060 JP |
84 | __printf(4, 5) |
85 | void qedf_dbg_warn(struct qedf_dbg_ctx *qedf, const char *func, u32 line, | |
61d8658b | 86 | const char *, ...); |
db6b2060 JP |
87 | __printf(4, 5) |
88 | void qedf_dbg_notice(struct qedf_dbg_ctx *qedf, const char *func, | |
61d8658b | 89 | u32 line, const char *, ...); |
db6b2060 JP |
90 | __printf(5, 6) |
91 | void qedf_dbg_info(struct qedf_dbg_ctx *qedf, const char *func, u32 line, | |
61d8658b DC |
92 | u32 info, const char *fmt, ...); |
93 | ||
94 | /* GRC Dump related defines */ | |
95 | ||
96 | struct Scsi_Host; | |
97 | ||
98 | #define QEDF_UEVENT_CODE_GRCDUMP 0 | |
99 | ||
100 | struct sysfs_bin_attrs { | |
101 | char *name; | |
102 | struct bin_attribute *attr; | |
103 | }; | |
104 | ||
105 | extern int qedf_alloc_grc_dump_buf(uint8_t **buf, uint32_t len); | |
106 | extern void qedf_free_grc_dump_buf(uint8_t **buf); | |
107 | extern int qedf_get_grc_dump(struct qed_dev *cdev, | |
108 | const struct qed_common_ops *common, uint8_t **buf, | |
109 | uint32_t *grcsize); | |
110 | extern void qedf_uevent_emit(struct Scsi_Host *shost, u32 code, char *msg); | |
111 | extern int qedf_create_sysfs_attr(struct Scsi_Host *shost, | |
112 | struct sysfs_bin_attrs *iter); | |
113 | extern void qedf_remove_sysfs_attr(struct Scsi_Host *shost, | |
114 | struct sysfs_bin_attrs *iter); | |
115 | ||
d9ea463a AB |
116 | struct qedf_debugfs_ops { |
117 | char *name; | |
118 | struct qedf_list_of_funcs *qedf_funcs; | |
119 | }; | |
120 | ||
121 | extern const struct qedf_debugfs_ops qedf_debugfs_ops[]; | |
122 | extern const struct file_operations qedf_dbg_fops[]; | |
123 | ||
61d8658b DC |
124 | #ifdef CONFIG_DEBUG_FS |
125 | /* DebugFS related code */ | |
126 | struct qedf_list_of_funcs { | |
127 | char *oper_str; | |
128 | ssize_t (*oper_func)(struct qedf_dbg_ctx *qedf); | |
129 | }; | |
130 | ||
61d8658b DC |
131 | #define qedf_dbg_fileops(drv, ops) \ |
132 | { \ | |
133 | .owner = THIS_MODULE, \ | |
134 | .open = simple_open, \ | |
135 | .read = drv##_dbg_##ops##_cmd_read, \ | |
136 | .write = drv##_dbg_##ops##_cmd_write \ | |
137 | } | |
138 | ||
139 | /* Used for debugfs sequential files */ | |
140 | #define qedf_dbg_fileops_seq(drv, ops) \ | |
141 | { \ | |
142 | .owner = THIS_MODULE, \ | |
143 | .open = drv##_dbg_##ops##_open, \ | |
144 | .read = seq_read, \ | |
145 | .llseek = seq_lseek, \ | |
146 | .release = single_release, \ | |
147 | } | |
148 | ||
149 | extern void qedf_dbg_host_init(struct qedf_dbg_ctx *qedf, | |
d9ea463a AB |
150 | const struct qedf_debugfs_ops *dops, |
151 | const struct file_operations *fops); | |
61d8658b DC |
152 | extern void qedf_dbg_host_exit(struct qedf_dbg_ctx *qedf); |
153 | extern void qedf_dbg_init(char *drv_name); | |
154 | extern void qedf_dbg_exit(void); | |
155 | #endif /* CONFIG_DEBUG_FS */ | |
156 | ||
157 | #endif /* _QEDF_DBG_H_ */ |