qlge: Add support for lost firmware events.
authorRon Mercer <ron.mercer@qlogic.com>
Tue, 3 Mar 2009 12:10:37 +0000 (12:10 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 4 Mar 2009 07:50:49 +0000 (23:50 -0800)
When the firmware is issuing events to the driver the events
must be removed from the queue.  If the queue overflows, the
firmware will build and special event that captures those that
are lost.

Signed-off-by: Ron Mercer <ron.mercer@qlogic.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/qlge/qlge_mpi.c

index f9a237165fc1d0a770d51b1be2a5938f52285eba..9f81b797f10b84126151cfed392190804cc25f9e 100644 (file)
@@ -284,6 +284,27 @@ static int ql_sfp_out(struct ql_adapter *qdev, struct mbox_params *mbcp)
        return status;
 }
 
+static int ql_aen_lost(struct ql_adapter *qdev, struct mbox_params *mbcp)
+{
+       int status;
+
+       mbcp->out_count = 6;
+
+       status = ql_get_mb_sts(qdev, mbcp);
+       if (status)
+               QPRINTK(qdev, DRV, ERR, "Lost AEN broken!\n");
+       else {
+               int i;
+               QPRINTK(qdev, DRV, ERR, "Lost AEN detected.\n");
+               for (i = 0; i < mbcp->out_count; i++)
+                       QPRINTK(qdev, DRV, ERR, "mbox_out[%d] = 0x%.08x.\n",
+                                       i, mbcp->mbox_out[i]);
+
+       }
+
+       return status;
+}
+
 static void ql_init_fw_done(struct ql_adapter *qdev, struct mbox_params *mbcp)
 {
        int status;
@@ -421,6 +442,10 @@ static int ql_mpi_handler(struct ql_adapter *qdev, struct mbox_params *mbcp)
                status = -EIO;
                break;
 
+       case AEN_AEN_LOST:
+               ql_aen_lost(qdev, mbcp);
+               break;
+
        default:
                QPRINTK(qdev, DRV, ERR,
                        "Unsupported AE %.08x.\n", mbcp->mbox_out[0]);