qlge: Add support for retrieving firmware version.
This is used by driver banner and ethtool info. Signed-off-by: Ron Mercer <ron.mercer@qlogic.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
0808dc8093
commit
cfec0cbc92
@@ -1430,6 +1430,7 @@ struct ql_adapter {
|
|||||||
|
|
||||||
/* Hardware information */
|
/* Hardware information */
|
||||||
u32 chip_rev_id;
|
u32 chip_rev_id;
|
||||||
|
u32 fw_rev_id;
|
||||||
u32 func; /* PCI function for this adapter */
|
u32 func; /* PCI function for this adapter */
|
||||||
|
|
||||||
spinlock_t adapter_lock;
|
spinlock_t adapter_lock;
|
||||||
@@ -1580,6 +1581,7 @@ void ql_mpi_idc_work(struct work_struct *work);
|
|||||||
void ql_mpi_port_cfg_work(struct work_struct *work);
|
void ql_mpi_port_cfg_work(struct work_struct *work);
|
||||||
int ql_mb_get_fw_state(struct ql_adapter *qdev);
|
int ql_mb_get_fw_state(struct ql_adapter *qdev);
|
||||||
int ql_cam_route_initialize(struct ql_adapter *qdev);
|
int ql_cam_route_initialize(struct ql_adapter *qdev);
|
||||||
|
int ql_mb_about_fw(struct ql_adapter *qdev);
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
#define QL_ALL_DUMP
|
#define QL_ALL_DUMP
|
||||||
|
@@ -293,7 +293,10 @@ static void ql_get_drvinfo(struct net_device *ndev,
|
|||||||
struct ql_adapter *qdev = netdev_priv(ndev);
|
struct ql_adapter *qdev = netdev_priv(ndev);
|
||||||
strncpy(drvinfo->driver, qlge_driver_name, 32);
|
strncpy(drvinfo->driver, qlge_driver_name, 32);
|
||||||
strncpy(drvinfo->version, qlge_driver_version, 32);
|
strncpy(drvinfo->version, qlge_driver_version, 32);
|
||||||
strncpy(drvinfo->fw_version, "N/A", 32);
|
snprintf(drvinfo->fw_version, 32, "v%d.%d.%d",
|
||||||
|
(qdev->fw_rev_id & 0x00ff0000) >> 16,
|
||||||
|
(qdev->fw_rev_id & 0x0000ff00) >> 8,
|
||||||
|
(qdev->fw_rev_id & 0x000000ff));
|
||||||
strncpy(drvinfo->bus_info, pci_name(qdev->pdev), 32);
|
strncpy(drvinfo->bus_info, pci_name(qdev->pdev), 32);
|
||||||
drvinfo->n_stats = 0;
|
drvinfo->n_stats = 0;
|
||||||
drvinfo->testinfo_len = 0;
|
drvinfo->testinfo_len = 0;
|
||||||
|
@@ -837,6 +837,13 @@ exit:
|
|||||||
static int ql_8000_port_initialize(struct ql_adapter *qdev)
|
static int ql_8000_port_initialize(struct ql_adapter *qdev)
|
||||||
{
|
{
|
||||||
int status;
|
int status;
|
||||||
|
/*
|
||||||
|
* Get MPI firmware version for driver banner
|
||||||
|
* and ethool info.
|
||||||
|
*/
|
||||||
|
status = ql_mb_about_fw(qdev);
|
||||||
|
if (status)
|
||||||
|
goto exit;
|
||||||
status = ql_mb_get_fw_state(qdev);
|
status = ql_mb_get_fw_state(qdev);
|
||||||
if (status)
|
if (status)
|
||||||
goto exit;
|
goto exit;
|
||||||
|
@@ -547,6 +547,40 @@ end:
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Get MPI firmware version. This will be used for
|
||||||
|
* driver banner and for ethtool info.
|
||||||
|
* Returns zero on success.
|
||||||
|
*/
|
||||||
|
int ql_mb_about_fw(struct ql_adapter *qdev)
|
||||||
|
{
|
||||||
|
struct mbox_params mbc;
|
||||||
|
struct mbox_params *mbcp = &mbc;
|
||||||
|
int status = 0;
|
||||||
|
|
||||||
|
memset(mbcp, 0, sizeof(struct mbox_params));
|
||||||
|
|
||||||
|
mbcp->in_count = 1;
|
||||||
|
mbcp->out_count = 3;
|
||||||
|
|
||||||
|
mbcp->mbox_in[0] = MB_CMD_ABOUT_FW;
|
||||||
|
|
||||||
|
status = ql_mailbox_command(qdev, mbcp);
|
||||||
|
if (status)
|
||||||
|
return status;
|
||||||
|
|
||||||
|
if (mbcp->mbox_out[0] != MB_CMD_STS_GOOD) {
|
||||||
|
QPRINTK(qdev, DRV, ERR,
|
||||||
|
"Failed about firmware command\n");
|
||||||
|
status = -EIO;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Store the firmware version */
|
||||||
|
qdev->fw_rev_id = mbcp->mbox_out[1];
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
/* Get functional state for MPI firmware.
|
/* Get functional state for MPI firmware.
|
||||||
* Returns zero on success.
|
* Returns zero on success.
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user