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