diff options
author | Andrew Vasquez <andrew.vasquez@qlogic.com> | 2008-04-03 16:13:18 -0400 |
---|---|---|
committer | James Bottomley <James.Bottomley@HansenPartnership.com> | 2008-04-07 13:19:13 -0400 |
commit | 0971de7f56f809f40edae6fd372745e429e970e9 (patch) | |
tree | 8ae6829060081a81e62193db81278f6aa5365e08 /drivers/scsi/qla2xxx/qla_isr.c | |
parent | c6952483b070ec8a4f2450d1116be908fe59edcc (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.c | 5 |
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: */ |