Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 /*
0003  * QLogic iSCSI Offload Driver
0004  * Copyright (c) 2016 Cavium Inc.
0005  */
0006 
0007 #include "qedi.h"
0008 #include "qedi_gbl.h"
0009 #include "qedi_iscsi.h"
0010 #include "qedi_dbg.h"
0011 
0012 static inline struct qedi_ctx *qedi_dev_to_hba(struct device *dev)
0013 {
0014     struct Scsi_Host *shost = class_to_shost(dev);
0015 
0016     return iscsi_host_priv(shost);
0017 }
0018 
0019 static ssize_t port_state_show(struct device *dev,
0020                    struct device_attribute *attr,
0021                    char *buf)
0022 {
0023     struct qedi_ctx *qedi = qedi_dev_to_hba(dev);
0024 
0025     if (atomic_read(&qedi->link_state) == QEDI_LINK_UP)
0026         return sprintf(buf, "Online\n");
0027     else
0028         return sprintf(buf, "Linkdown\n");
0029 }
0030 
0031 static ssize_t speed_show(struct device *dev,
0032               struct device_attribute *attr, char *buf)
0033 {
0034     struct qedi_ctx *qedi = qedi_dev_to_hba(dev);
0035     struct qed_link_output if_link;
0036 
0037     qedi_ops->common->get_link(qedi->cdev, &if_link);
0038 
0039     return sprintf(buf, "%d Gbit\n", if_link.speed / 1000);
0040 }
0041 
0042 static DEVICE_ATTR_RO(port_state);
0043 static DEVICE_ATTR_RO(speed);
0044 
0045 static struct attribute *qedi_shost_attrs[] = {
0046     &dev_attr_port_state.attr,
0047     &dev_attr_speed.attr,
0048     NULL
0049 };
0050 
0051 static const struct attribute_group qedi_shost_attr_group = {
0052     .attrs = qedi_shost_attrs
0053 };
0054 
0055 const struct attribute_group *qedi_shost_groups[] = {
0056     &qedi_shost_attr_group,
0057     NULL
0058 };