1
2
3
4
5
6
7
8
9
10#include "qedi_dbg.h"
11#include <linux/vmalloc.h>
12
13void
14qedi_dbg_err(struct qedi_dbg_ctx *qedi, const char *func, u32 line,
15 const char *fmt, ...)
16{
17 va_list va;
18 struct va_format vaf;
19 char nfunc[32];
20
21 memset(nfunc, 0, sizeof(nfunc));
22 memcpy(nfunc, func, sizeof(nfunc) - 1);
23
24 va_start(va, fmt);
25
26 vaf.fmt = fmt;
27 vaf.va = &va;
28
29 if (likely(qedi) && likely(qedi->pdev))
30 pr_err("[%s]:[%s:%d]:%d: %pV", dev_name(&qedi->pdev->dev),
31 nfunc, line, qedi->host_no, &vaf);
32 else
33 pr_err("[0000:00:00.0]:[%s:%d]: %pV", nfunc, line, &vaf);
34
35 va_end(va);
36}
37
38void
39qedi_dbg_warn(struct qedi_dbg_ctx *qedi, const char *func, u32 line,
40 const char *fmt, ...)
41{
42 va_list va;
43 struct va_format vaf;
44 char nfunc[32];
45
46 memset(nfunc, 0, sizeof(nfunc));
47 memcpy(nfunc, func, sizeof(nfunc) - 1);
48
49 va_start(va, fmt);
50
51 vaf.fmt = fmt;
52 vaf.va = &va;
53
54 if (!(qedi_dbg_log & QEDI_LOG_WARN))
55 return;
56
57 if (likely(qedi) && likely(qedi->pdev))
58 pr_warn("[%s]:[%s:%d]:%d: %pV", dev_name(&qedi->pdev->dev),
59 nfunc, line, qedi->host_no, &vaf);
60 else
61 pr_warn("[0000:00:00.0]:[%s:%d]: %pV", nfunc, line, &vaf);
62
63 va_end(va);
64}
65
66void
67qedi_dbg_notice(struct qedi_dbg_ctx *qedi, const char *func, u32 line,
68 const char *fmt, ...)
69{
70 va_list va;
71 struct va_format vaf;
72 char nfunc[32];
73
74 memset(nfunc, 0, sizeof(nfunc));
75 memcpy(nfunc, func, sizeof(nfunc) - 1);
76
77 va_start(va, fmt);
78
79 vaf.fmt = fmt;
80 vaf.va = &va;
81
82 if (!(qedi_dbg_log & QEDI_LOG_NOTICE))
83 return;
84
85 if (likely(qedi) && likely(qedi->pdev))
86 pr_notice("[%s]:[%s:%d]:%d: %pV",
87 dev_name(&qedi->pdev->dev), nfunc, line,
88 qedi->host_no, &vaf);
89 else
90 pr_notice("[0000:00:00.0]:[%s:%d]: %pV", nfunc, line, &vaf);
91
92 va_end(va);
93}
94
95void
96qedi_dbg_info(struct qedi_dbg_ctx *qedi, const char *func, u32 line,
97 u32 level, const char *fmt, ...)
98{
99 va_list va;
100 struct va_format vaf;
101 char nfunc[32];
102
103 memset(nfunc, 0, sizeof(nfunc));
104 memcpy(nfunc, func, sizeof(nfunc) - 1);
105
106 va_start(va, fmt);
107
108 vaf.fmt = fmt;
109 vaf.va = &va;
110
111 if (!(qedi_dbg_log & level))
112 return;
113
114 if (likely(qedi) && likely(qedi->pdev))
115 pr_info("[%s]:[%s:%d]:%d: %pV", dev_name(&qedi->pdev->dev),
116 nfunc, line, qedi->host_no, &vaf);
117 else
118 pr_info("[0000:00:00.0]:[%s:%d]: %pV", nfunc, line, &vaf);
119
120 va_end(va);
121}
122
123int
124qedi_create_sysfs_attr(struct Scsi_Host *shost, struct sysfs_bin_attrs *iter)
125{
126 int ret = 0;
127
128 for (; iter->name; iter++) {
129 ret = sysfs_create_bin_file(&shost->shost_gendev.kobj,
130 iter->attr);
131 if (ret)
132 pr_err("Unable to create sysfs %s attr, err(%d).\n",
133 iter->name, ret);
134 }
135 return ret;
136}
137
138void
139qedi_remove_sysfs_attr(struct Scsi_Host *shost, struct sysfs_bin_attrs *iter)
140{
141 for (; iter->name; iter++)
142 sysfs_remove_bin_file(&shost->shost_gendev.kobj, iter->attr);
143}
144