mirror of https://gitee.com/openkylin/linux.git
scsi: qedf: Enable basic FDMI information.
For libfc to register FDMI attributes we need to do two things: - Set the appropriate fc_host attributes that libfc will use to form the FDMI registration commands - Set lport->fdmi_enabled to 1 Signed-off-by: Chad Dupuis <chad.dupuis@cavium.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
96e6c633ec
commit
5185b32887
|
@ -22,6 +22,7 @@
|
|||
#include <linux/if_vlan.h>
|
||||
#include <linux/cpu.h>
|
||||
#include "qedf.h"
|
||||
#include <uapi/linux/pci_regs.h>
|
||||
|
||||
const struct qed_fcoe_ops *qed_ops;
|
||||
|
||||
|
@ -1334,6 +1335,59 @@ static void qedf_fcoe_ctlr_setup(struct qedf_ctx *qedf)
|
|||
ether_addr_copy(qedf->ctlr.ctl_src_addr, qedf->mac);
|
||||
}
|
||||
|
||||
static void qedf_setup_fdmi(struct qedf_ctx *qedf)
|
||||
{
|
||||
struct fc_lport *lport = qedf->lport;
|
||||
struct fc_host_attrs *fc_host = shost_to_fc_host(lport->host);
|
||||
u8 buf[8];
|
||||
int i, pos;
|
||||
|
||||
/*
|
||||
* fdmi_enabled needs to be set for libfc to execute FDMI registration.
|
||||
*/
|
||||
lport->fdmi_enabled = 1;
|
||||
|
||||
/*
|
||||
* Setup the necessary fc_host attributes to that will be used to fill
|
||||
* in the FDMI information.
|
||||
*/
|
||||
|
||||
/* Get the PCI-e Device Serial Number Capability */
|
||||
pos = pci_find_ext_capability(qedf->pdev, PCI_EXT_CAP_ID_DSN);
|
||||
if (pos) {
|
||||
pos += 4;
|
||||
for (i = 0; i < 8; i++)
|
||||
pci_read_config_byte(qedf->pdev, pos + i, &buf[i]);
|
||||
|
||||
snprintf(fc_host->serial_number,
|
||||
sizeof(fc_host->serial_number),
|
||||
"%02X%02X%02X%02X%02X%02X%02X%02X",
|
||||
buf[7], buf[6], buf[5], buf[4],
|
||||
buf[3], buf[2], buf[1], buf[0]);
|
||||
} else
|
||||
snprintf(fc_host->serial_number,
|
||||
sizeof(fc_host->serial_number), "Unknown");
|
||||
|
||||
snprintf(fc_host->manufacturer,
|
||||
sizeof(fc_host->manufacturer), "%s", "Cavium Inc.");
|
||||
|
||||
snprintf(fc_host->model, sizeof(fc_host->model), "%s", "QL41000");
|
||||
|
||||
snprintf(fc_host->model_description, sizeof(fc_host->model_description),
|
||||
"%s", "QLogic FastLinQ QL41000 Series 10/25/40/50GGbE Controller"
|
||||
"(FCoE)");
|
||||
|
||||
snprintf(fc_host->hardware_version, sizeof(fc_host->hardware_version),
|
||||
"Rev %d", qedf->pdev->revision);
|
||||
|
||||
snprintf(fc_host->driver_version, sizeof(fc_host->driver_version),
|
||||
"%s", QEDF_VERSION);
|
||||
|
||||
snprintf(fc_host->firmware_version, sizeof(fc_host->firmware_version),
|
||||
"%d.%d.%d.%d", FW_MAJOR_VERSION, FW_MINOR_VERSION,
|
||||
FW_REVISION_VERSION, FW_ENGINEERING_VERSION);
|
||||
}
|
||||
|
||||
static int qedf_lport_setup(struct qedf_ctx *qedf)
|
||||
{
|
||||
struct fc_lport *lport = qedf->lport;
|
||||
|
@ -1377,6 +1431,8 @@ static int qedf_lport_setup(struct qedf_ctx *qedf)
|
|||
snprintf(fc_host_symbolic_name(lport->host), 256,
|
||||
"QLogic %s v%s", QEDF_MODULE_NAME, QEDF_VERSION);
|
||||
|
||||
qedf_setup_fdmi(qedf);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue