0001
0002
0003
0004
0005
0006
0007 #include "qedi_dbg.h"
0008 #include <linux/vmalloc.h>
0009
0010 void
0011 qedi_dbg_err(struct qedi_dbg_ctx *qedi, const char *func, u32 line,
0012 const char *fmt, ...)
0013 {
0014 va_list va;
0015 struct va_format vaf;
0016
0017 va_start(va, fmt);
0018
0019 vaf.fmt = fmt;
0020 vaf.va = &va;
0021
0022 if (likely(qedi) && likely(qedi->pdev))
0023 pr_err("[%s]:[%s:%d]:%d: %pV", dev_name(&qedi->pdev->dev),
0024 func, line, qedi->host_no, &vaf);
0025 else
0026 pr_err("[0000:00:00.0]:[%s:%d]: %pV", func, line, &vaf);
0027
0028 va_end(va);
0029 }
0030
0031 void
0032 qedi_dbg_warn(struct qedi_dbg_ctx *qedi, const char *func, u32 line,
0033 const char *fmt, ...)
0034 {
0035 va_list va;
0036 struct va_format vaf;
0037
0038 va_start(va, fmt);
0039
0040 vaf.fmt = fmt;
0041 vaf.va = &va;
0042
0043 if (!(qedi_dbg_log & QEDI_LOG_WARN))
0044 goto ret;
0045
0046 if (likely(qedi) && likely(qedi->pdev))
0047 pr_warn("[%s]:[%s:%d]:%d: %pV", dev_name(&qedi->pdev->dev),
0048 func, line, qedi->host_no, &vaf);
0049 else
0050 pr_warn("[0000:00:00.0]:[%s:%d]: %pV", func, line, &vaf);
0051
0052 ret:
0053 va_end(va);
0054 }
0055
0056 void
0057 qedi_dbg_notice(struct qedi_dbg_ctx *qedi, const char *func, u32 line,
0058 const char *fmt, ...)
0059 {
0060 va_list va;
0061 struct va_format vaf;
0062
0063 va_start(va, fmt);
0064
0065 vaf.fmt = fmt;
0066 vaf.va = &va;
0067
0068 if (!(qedi_dbg_log & QEDI_LOG_NOTICE))
0069 goto ret;
0070
0071 if (likely(qedi) && likely(qedi->pdev))
0072 pr_notice("[%s]:[%s:%d]:%d: %pV",
0073 dev_name(&qedi->pdev->dev), func, line,
0074 qedi->host_no, &vaf);
0075 else
0076 pr_notice("[0000:00:00.0]:[%s:%d]: %pV", func, line, &vaf);
0077
0078 ret:
0079 va_end(va);
0080 }
0081
0082 void
0083 qedi_dbg_info(struct qedi_dbg_ctx *qedi, const char *func, u32 line,
0084 u32 level, const char *fmt, ...)
0085 {
0086 va_list va;
0087 struct va_format vaf;
0088
0089 va_start(va, fmt);
0090
0091 vaf.fmt = fmt;
0092 vaf.va = &va;
0093
0094 if (!(qedi_dbg_log & level))
0095 goto ret;
0096
0097 if (likely(qedi) && likely(qedi->pdev))
0098 pr_info("[%s]:[%s:%d]:%d: %pV", dev_name(&qedi->pdev->dev),
0099 func, line, qedi->host_no, &vaf);
0100 else
0101 pr_info("[0000:00:00.0]:[%s:%d]: %pV", func, line, &vaf);
0102
0103 ret:
0104 va_end(va);
0105 }
0106
0107 int
0108 qedi_create_sysfs_attr(struct Scsi_Host *shost, struct sysfs_bin_attrs *iter)
0109 {
0110 int ret = 0;
0111
0112 for (; iter->name; iter++) {
0113 ret = sysfs_create_bin_file(&shost->shost_gendev.kobj,
0114 iter->attr);
0115 if (ret)
0116 pr_err("Unable to create sysfs %s attr, err(%d).\n",
0117 iter->name, ret);
0118 }
0119 return ret;
0120 }
0121
0122 void
0123 qedi_remove_sysfs_attr(struct Scsi_Host *shost, struct sysfs_bin_attrs *iter)
0124 {
0125 for (; iter->name; iter++)
0126 sysfs_remove_bin_file(&shost->shost_gendev.kobj, iter->attr);
0127 }