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