aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/qla2xxx/qla_isr.c
diff options
context:
space:
mode:
authorAndrew Vasquez <andrew.vasquez@qlogic.com>2008-04-03 16:13:18 -0400
committerJames Bottomley <James.Bottomley@HansenPartnership.com>2008-04-07 13:19:13 -0400
commit0971de7f56f809f40edae6fd372745e429e970e9 (patch)
tree8ae6829060081a81e62193db81278f6aa5365e08 /drivers/scsi/qla2xxx/qla_isr.c
parentc6952483b070ec8a4f2450d1116be908fe59edcc (diff)
[SCSI] qla2xxx: Add FC-transport Asynchronous Event Notification support.
Supported events include LIP, LIP reset, RSCN, link up, and link down. To support AEN (and additional forthcoming features), we also introduce a simple deferred-work construct to manage events which require a non-atomic sleeping-capable context. This work-list is processed as part of the driver's standard DPC routine. Signed-off-by: Andrew Vasquez <andrew.vasquez@qlogic.com> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Diffstat (limited to 'drivers/scsi/qla2xxx/qla_isr.c')
-rw-r--r--drivers/scsi/qla2xxx/qla_isr.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c
index 4e9f41034466..e9d8a79dd6a4 100644
--- a/drivers/scsi/qla2xxx/qla_isr.c
+++ b/drivers/scsi/qla2xxx/qla_isr.c
@@ -408,6 +408,7 @@ qla2x00_async_event(scsi_qla_host_t *ha, uint16_t *mb)
408 set_bit(REGISTER_FC4_NEEDED, &ha->dpc_flags); 408 set_bit(REGISTER_FC4_NEEDED, &ha->dpc_flags);
409 409
410 ha->flags.management_server_logged_in = 0; 410 ha->flags.management_server_logged_in = 0;
411 qla2x00_post_aen_work(ha, FCH_EVT_LIP, mb[1]);
411 break; 412 break;
412 413
413 case MBA_LOOP_UP: /* Loop Up Event */ 414 case MBA_LOOP_UP: /* Loop Up Event */
@@ -427,6 +428,7 @@ qla2x00_async_event(scsi_qla_host_t *ha, uint16_t *mb)
427 link_speed); 428 link_speed);
428 429
429 ha->flags.management_server_logged_in = 0; 430 ha->flags.management_server_logged_in = 0;
431 qla2x00_post_aen_work(ha, FCH_EVT_LINKUP, ha->link_data_rate);
430 break; 432 break;
431 433
432 case MBA_LOOP_DOWN: /* Loop Down Event */ 434 case MBA_LOOP_DOWN: /* Loop Down Event */
@@ -450,6 +452,7 @@ qla2x00_async_event(scsi_qla_host_t *ha, uint16_t *mb)
450 ha->link_data_rate = PORT_SPEED_UNKNOWN; 452 ha->link_data_rate = PORT_SPEED_UNKNOWN;
451 if (ql2xfdmienable) 453 if (ql2xfdmienable)
452 set_bit(REGISTER_FDMI_NEEDED, &ha->dpc_flags); 454 set_bit(REGISTER_FDMI_NEEDED, &ha->dpc_flags);
455 qla2x00_post_aen_work(ha, FCH_EVT_LINKDOWN, 0);
453 break; 456 break;
454 457
455 case MBA_LIP_RESET: /* LIP reset occurred */ 458 case MBA_LIP_RESET: /* LIP reset occurred */
@@ -473,6 +476,7 @@ qla2x00_async_event(scsi_qla_host_t *ha, uint16_t *mb)
473 476
474 ha->operating_mode = LOOP; 477 ha->operating_mode = LOOP;
475 ha->flags.management_server_logged_in = 0; 478 ha->flags.management_server_logged_in = 0;
479 qla2x00_post_aen_work(ha, FCH_EVT_LIPRESET, mb[1]);
476 break; 480 break;
477 481
478 case MBA_POINT_TO_POINT: /* Point-to-Point */ 482 case MBA_POINT_TO_POINT: /* Point-to-Point */
@@ -610,6 +614,7 @@ qla2x00_async_event(scsi_qla_host_t *ha, uint16_t *mb)
610 614
611 set_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags); 615 set_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags);
612 set_bit(RSCN_UPDATE, &ha->dpc_flags); 616 set_bit(RSCN_UPDATE, &ha->dpc_flags);
617 qla2x00_post_aen_work(ha, FCH_EVT_RSCN, rscn_entry);
613 break; 618 break;
614 619
615 /* case MBA_RIO_RESPONSE: */ 620 /* case MBA_RIO_RESPONSE: */