18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * QLogic iSCSI Offload Driver 48c2ecf20Sopenharmony_ci * Copyright (c) 2016 Cavium Inc. 58c2ecf20Sopenharmony_ci */ 68c2ecf20Sopenharmony_ci 78c2ecf20Sopenharmony_ci#include "qedi.h" 88c2ecf20Sopenharmony_ci#include "qedi_gbl.h" 98c2ecf20Sopenharmony_ci#include "qedi_iscsi.h" 108c2ecf20Sopenharmony_ci#include "qedi_dbg.h" 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_cistatic inline struct qedi_ctx *qedi_dev_to_hba(struct device *dev) 138c2ecf20Sopenharmony_ci{ 148c2ecf20Sopenharmony_ci struct Scsi_Host *shost = class_to_shost(dev); 158c2ecf20Sopenharmony_ci 168c2ecf20Sopenharmony_ci return iscsi_host_priv(shost); 178c2ecf20Sopenharmony_ci} 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_cistatic ssize_t qedi_show_port_state(struct device *dev, 208c2ecf20Sopenharmony_ci struct device_attribute *attr, 218c2ecf20Sopenharmony_ci char *buf) 228c2ecf20Sopenharmony_ci{ 238c2ecf20Sopenharmony_ci struct qedi_ctx *qedi = qedi_dev_to_hba(dev); 248c2ecf20Sopenharmony_ci 258c2ecf20Sopenharmony_ci if (atomic_read(&qedi->link_state) == QEDI_LINK_UP) 268c2ecf20Sopenharmony_ci return sprintf(buf, "Online\n"); 278c2ecf20Sopenharmony_ci else 288c2ecf20Sopenharmony_ci return sprintf(buf, "Linkdown\n"); 298c2ecf20Sopenharmony_ci} 308c2ecf20Sopenharmony_ci 318c2ecf20Sopenharmony_cistatic ssize_t qedi_show_speed(struct device *dev, 328c2ecf20Sopenharmony_ci struct device_attribute *attr, char *buf) 338c2ecf20Sopenharmony_ci{ 348c2ecf20Sopenharmony_ci struct qedi_ctx *qedi = qedi_dev_to_hba(dev); 358c2ecf20Sopenharmony_ci struct qed_link_output if_link; 368c2ecf20Sopenharmony_ci 378c2ecf20Sopenharmony_ci qedi_ops->common->get_link(qedi->cdev, &if_link); 388c2ecf20Sopenharmony_ci 398c2ecf20Sopenharmony_ci return sprintf(buf, "%d Gbit\n", if_link.speed / 1000); 408c2ecf20Sopenharmony_ci} 418c2ecf20Sopenharmony_ci 428c2ecf20Sopenharmony_cistatic DEVICE_ATTR(port_state, 0444, qedi_show_port_state, NULL); 438c2ecf20Sopenharmony_cistatic DEVICE_ATTR(speed, 0444, qedi_show_speed, NULL); 448c2ecf20Sopenharmony_ci 458c2ecf20Sopenharmony_cistruct device_attribute *qedi_shost_attrs[] = { 468c2ecf20Sopenharmony_ci &dev_attr_port_state, 478c2ecf20Sopenharmony_ci &dev_attr_speed, 488c2ecf20Sopenharmony_ci NULL 498c2ecf20Sopenharmony_ci}; 50