diff options
author | Ron Mercer <ron.mercer@qlogic.com> | 2009-03-03 12:10:35 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-03-03 23:50:48 -0800 |
commit | 7c92191cb4203d3900461074f90851e9e7b56fcb (patch) | |
tree | e8e93243f4f3711d38aea194db366024c72b89fb /drivers/net/qlge | |
parent | f56b54f5423177d26da0aee1f8e7d5da6225ce6d (diff) |
qlge: Improve handling for firmware init failure.
This event will arrive at boot time or after an
MPI processor reset if the firmware failed to initialize.
Signed-off-by: Ron Mercer <ron.mercer@qlogic.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/qlge')
-rw-r--r-- | drivers/net/qlge/qlge_mpi.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/drivers/net/qlge/qlge_mpi.c b/drivers/net/qlge/qlge_mpi.c index 3a660f9e9001..2c1d2205c653 100644 --- a/drivers/net/qlge/qlge_mpi.c +++ b/drivers/net/qlge/qlge_mpi.c @@ -395,7 +395,25 @@ static int ql_mpi_handler(struct ql_adapter *qdev, struct mbox_params *mbcp) ql_sfp_out(qdev, mbcp); break; + /* This event can arrive at boot time or after an + * MPI reset if the firmware failed to initialize. + */ case AEN_FW_INIT_FAIL: + /* If we're in process on executing the firmware, + * then convert the status to normal mailbox status. + */ + if (mbcp->mbox_in[0] == MB_CMD_EX_FW) { + mbcp->out_count = orig_count; + status = ql_get_mb_sts(qdev, mbcp); + mbcp->mbox_out[0] = MB_CMD_STS_ERR; + return status; + } + QPRINTK(qdev, DRV, ERR, + "Firmware initialization failed.\n"); + status = -EIO; + ql_queue_fw_error(qdev); + break; + case AEN_SYS_ERR: ql_queue_fw_error(qdev); break; |