0001
0002
0003
0004
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 };