aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Williams <dan.j.williams@intel.com>2011-05-12 10:46:59 -0400
committerDan Williams <dan.j.williams@intel.com>2011-07-03 07:04:49 -0400
commit338e386d12c2440e39c987d35fda403d319a79a0 (patch)
tree912dec715b326319ed2631aa7dacad4e05d4a641
parent6813820c7b892e1a5c2306808a5ccc8a27b7946d (diff)
isci: unify rnc event handlers
Unify rnc event handlers and delete the state handler. Reported-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
-rw-r--r--drivers/scsi/isci/remote_node_context.c365
-rw-r--r--drivers/scsi/isci/remote_node_context.h16
2 files changed, 111 insertions, 270 deletions
diff --git a/drivers/scsi/isci/remote_node_context.c b/drivers/scsi/isci/remote_node_context.c
index aef258b959f8..9f2407f0f5a6 100644
--- a/drivers/scsi/isci/remote_node_context.c
+++ b/drivers/scsi/isci/remote_node_context.c
@@ -299,21 +299,6 @@ static enum sci_status scic_sds_remote_node_context_default_start_task_handler(
299 return SCI_FAILURE; 299 return SCI_FAILURE;
300} 300}
301 301
302static enum sci_status scic_sds_remote_node_context_default_event_handler(
303 struct scic_sds_remote_node_context *sci_rnc,
304 u32 event_code)
305{
306 dev_warn(scirdev_to_dev(rnc_to_dev(sci_rnc)),
307 "%s: SCIC Remote Node Context 0x%p requested to process "
308 "event 0x%x while in wrong state %d\n",
309 __func__,
310 sci_rnc,
311 event_code,
312 sci_base_state_machine_get_state(&sci_rnc->state_machine));
313
314 return SCI_FAILURE_INVALID_STATE;
315}
316
317/** 302/**
318 * 303 *
319 * @sci_rnc: The rnc for which the task request is targeted. 304 * @sci_rnc: The rnc for which the task request is targeted.
@@ -383,41 +368,6 @@ static enum sci_status scic_sds_remote_node_context_initial_state_resume_handler
383 return SCI_FAILURE_INVALID_STATE; 368 return SCI_FAILURE_INVALID_STATE;
384} 369}
385 370
386/* --------------------------------------------------------------------------- */
387
388static enum sci_status scic_sds_remote_node_context_posting_state_event_handler(
389 struct scic_sds_remote_node_context *sci_rnc,
390 u32 event_code)
391{
392 enum sci_status status;
393
394 switch (scu_get_event_code(event_code)) {
395 case SCU_EVENT_POST_RNC_COMPLETE:
396 status = SCI_SUCCESS;
397
398 sci_base_state_machine_change_state(
399 &sci_rnc->state_machine,
400 SCIC_SDS_REMOTE_NODE_CONTEXT_READY_STATE
401 );
402 break;
403
404 default:
405 status = SCI_FAILURE;
406 dev_warn(scirdev_to_dev(rnc_to_dev(sci_rnc)),
407 "%s: SCIC Remote Node Context 0x%p requested to "
408 "process unexpected event 0x%x while in posting "
409 "state\n",
410 __func__,
411 sci_rnc,
412 event_code);
413 break;
414 }
415
416 return status;
417}
418
419/* --------------------------------------------------------------------------- */
420
421static enum sci_status scic_sds_remote_node_context_invalidating_state_destruct_handler( 371static enum sci_status scic_sds_remote_node_context_invalidating_state_destruct_handler(
422 struct scic_sds_remote_node_context *sci_rnc, 372 struct scic_sds_remote_node_context *sci_rnc,
423 scics_sds_remote_node_context_callback callback, 373 scics_sds_remote_node_context_callback callback,
@@ -430,110 +380,6 @@ static enum sci_status scic_sds_remote_node_context_invalidating_state_destruct_
430 return SCI_SUCCESS; 380 return SCI_SUCCESS;
431} 381}
432 382
433static enum sci_status scic_sds_remote_node_context_invalidating_state_event_handler(
434 struct scic_sds_remote_node_context *sci_rnc,
435 u32 event_code)
436{
437 enum sci_status status;
438
439 if (scu_get_event_code(event_code) == SCU_EVENT_POST_RNC_INVALIDATE_COMPLETE) {
440 status = SCI_SUCCESS;
441
442 if (sci_rnc->destination_state == SCIC_SDS_REMOTE_NODE_DESTINATION_STATE_FINAL) {
443 sci_base_state_machine_change_state(
444 &sci_rnc->state_machine,
445 SCIC_SDS_REMOTE_NODE_CONTEXT_INITIAL_STATE
446 );
447 } else {
448 sci_base_state_machine_change_state(
449 &sci_rnc->state_machine,
450 SCIC_SDS_REMOTE_NODE_CONTEXT_POSTING_STATE
451 );
452 }
453 } else {
454 switch (scu_get_event_type(event_code)) {
455 case SCU_EVENT_TYPE_RNC_SUSPEND_TX:
456 case SCU_EVENT_TYPE_RNC_SUSPEND_TX_RX:
457 /*
458 * We really dont care if the hardware is going to suspend
459 * the device since it's being invalidated anyway */
460 dev_dbg(scirdev_to_dev(rnc_to_dev(sci_rnc)),
461 "%s: SCIC Remote Node Context 0x%p was "
462 "suspeneded by hardware while being "
463 "invalidated.\n",
464 __func__,
465 sci_rnc);
466 status = SCI_SUCCESS;
467 break;
468
469 default:
470 dev_warn(scirdev_to_dev(rnc_to_dev(sci_rnc)),
471 "%s: SCIC Remote Node Context 0x%p "
472 "requested to process event 0x%x while "
473 "in state %d.\n",
474 __func__,
475 sci_rnc,
476 event_code,
477 sci_base_state_machine_get_state(
478 &sci_rnc->state_machine));
479 status = SCI_FAILURE;
480 break;
481 }
482 }
483
484 return status;
485}
486
487/* --------------------------------------------------------------------------- */
488
489
490static enum sci_status scic_sds_remote_node_context_resuming_state_event_handler(
491 struct scic_sds_remote_node_context *sci_rnc,
492 u32 event_code)
493{
494 enum sci_status status;
495
496 if (scu_get_event_code(event_code) == SCU_EVENT_POST_RCN_RELEASE) {
497 status = SCI_SUCCESS;
498
499 sci_base_state_machine_change_state(
500 &sci_rnc->state_machine,
501 SCIC_SDS_REMOTE_NODE_CONTEXT_READY_STATE
502 );
503 } else {
504 switch (scu_get_event_type(event_code)) {
505 case SCU_EVENT_TYPE_RNC_SUSPEND_TX:
506 case SCU_EVENT_TYPE_RNC_SUSPEND_TX_RX:
507 /*
508 * We really dont care if the hardware is going to suspend
509 * the device since it's being resumed anyway */
510 dev_dbg(scirdev_to_dev(rnc_to_dev(sci_rnc)),
511 "%s: SCIC Remote Node Context 0x%p was "
512 "suspeneded by hardware while being resumed.\n",
513 __func__,
514 sci_rnc);
515 status = SCI_SUCCESS;
516 break;
517
518 default:
519 dev_warn(scirdev_to_dev(rnc_to_dev(sci_rnc)),
520 "%s: SCIC Remote Node Context 0x%p requested "
521 "to process event 0x%x while in state %d.\n",
522 __func__,
523 sci_rnc,
524 event_code,
525 sci_base_state_machine_get_state(
526 &sci_rnc->state_machine));
527 status = SCI_FAILURE;
528 break;
529 }
530 }
531
532 return status;
533}
534
535/* --------------------------------------------------------------------------- */
536
537/** 383/**
538 * 384 *
539 * @sci_rnc: The remote node context object being suspended. 385 * @sci_rnc: The remote node context object being suspended.
@@ -582,53 +428,6 @@ static enum sci_status scic_sds_remote_node_context_ready_state_start_io_handler
582 return SCI_SUCCESS; 428 return SCI_SUCCESS;
583} 429}
584 430
585
586static enum sci_status scic_sds_remote_node_context_ready_state_event_handler(
587 struct scic_sds_remote_node_context *sci_rnc,
588 u32 event_code)
589{
590 enum sci_status status;
591
592 switch (scu_get_event_type(event_code)) {
593 case SCU_EVENT_TL_RNC_SUSPEND_TX:
594 sci_base_state_machine_change_state(
595 &sci_rnc->state_machine,
596 SCIC_SDS_REMOTE_NODE_CONTEXT_TX_SUSPENDED_STATE
597 );
598
599 sci_rnc->suspension_code = scu_get_event_specifier(event_code);
600 status = SCI_SUCCESS;
601 break;
602
603 case SCU_EVENT_TL_RNC_SUSPEND_TX_RX:
604 sci_base_state_machine_change_state(
605 &sci_rnc->state_machine,
606 SCIC_SDS_REMOTE_NODE_CONTEXT_TX_RX_SUSPENDED_STATE
607 );
608
609 sci_rnc->suspension_code = scu_get_event_specifier(event_code);
610 status = SCI_SUCCESS;
611 break;
612
613 default:
614 dev_warn(scirdev_to_dev(rnc_to_dev(sci_rnc)),
615 "%s: SCIC Remote Node Context 0x%p requested to "
616 "process event 0x%x while in state %d.\n",
617 __func__,
618 sci_rnc,
619 event_code,
620 sci_base_state_machine_get_state(
621 &sci_rnc->state_machine));
622
623 status = SCI_FAILURE;
624 break;
625 }
626
627 return status;
628}
629
630/* --------------------------------------------------------------------------- */
631
632static enum sci_status scic_sds_remote_node_context_tx_suspended_state_resume_handler( 431static enum sci_status scic_sds_remote_node_context_tx_suspended_state_resume_handler(
633 struct scic_sds_remote_node_context *sci_rnc, 432 struct scic_sds_remote_node_context *sci_rnc,
634 scics_sds_remote_node_context_callback callback, 433 scics_sds_remote_node_context_callback callback,
@@ -738,61 +537,13 @@ static enum sci_status scic_sds_remote_node_context_await_suspension_state_start
738 return SCI_SUCCESS; 537 return SCI_SUCCESS;
739} 538}
740 539
741static enum sci_status scic_sds_remote_node_context_await_suspension_state_event_handler( 540static struct scic_sds_remote_node_context_handlers scic_sds_remote_node_context_state_handler_table[] = {
742 struct scic_sds_remote_node_context *sci_rnc,
743 u32 event_code)
744{
745 enum sci_status status;
746
747 switch (scu_get_event_type(event_code)) {
748 case SCU_EVENT_TL_RNC_SUSPEND_TX:
749 sci_base_state_machine_change_state(
750 &sci_rnc->state_machine,
751 SCIC_SDS_REMOTE_NODE_CONTEXT_TX_SUSPENDED_STATE
752 );
753
754 sci_rnc->suspension_code = scu_get_event_specifier(event_code);
755 status = SCI_SUCCESS;
756 break;
757
758 case SCU_EVENT_TL_RNC_SUSPEND_TX_RX:
759 sci_base_state_machine_change_state(
760 &sci_rnc->state_machine,
761 SCIC_SDS_REMOTE_NODE_CONTEXT_TX_RX_SUSPENDED_STATE
762 );
763
764 sci_rnc->suspension_code = scu_get_event_specifier(event_code);
765 status = SCI_SUCCESS;
766 break;
767
768 default:
769 dev_warn(scirdev_to_dev(rnc_to_dev(sci_rnc)),
770 "%s: SCIC Remote Node Context 0x%p requested to "
771 "process event 0x%x while in state %d.\n",
772 __func__,
773 sci_rnc,
774 event_code,
775 sci_base_state_machine_get_state(
776 &sci_rnc->state_machine));
777
778 status = SCI_FAILURE;
779 break;
780 }
781
782 return status;
783}
784
785/* --------------------------------------------------------------------------- */
786
787static struct scic_sds_remote_node_context_handlers
788scic_sds_remote_node_context_state_handler_table[] = {
789 [SCIC_SDS_REMOTE_NODE_CONTEXT_INITIAL_STATE] = { 541 [SCIC_SDS_REMOTE_NODE_CONTEXT_INITIAL_STATE] = {
790 .destruct_handler = scic_sds_remote_node_context_default_destruct_handler, 542 .destruct_handler = scic_sds_remote_node_context_default_destruct_handler,
791 .suspend_handler = scic_sds_remote_node_context_default_suspend_handler, 543 .suspend_handler = scic_sds_remote_node_context_default_suspend_handler,
792 .resume_handler = scic_sds_remote_node_context_initial_state_resume_handler, 544 .resume_handler = scic_sds_remote_node_context_initial_state_resume_handler,
793 .start_io_handler = scic_sds_remote_node_context_default_start_io_handler, 545 .start_io_handler = scic_sds_remote_node_context_default_start_io_handler,
794 .start_task_handler = scic_sds_remote_node_context_default_start_task_handler, 546 .start_task_handler = scic_sds_remote_node_context_default_start_task_handler,
795 .event_handler = scic_sds_remote_node_context_default_event_handler
796 }, 547 },
797 [SCIC_SDS_REMOTE_NODE_CONTEXT_POSTING_STATE] = { 548 [SCIC_SDS_REMOTE_NODE_CONTEXT_POSTING_STATE] = {
798 .destruct_handler = scic_sds_remote_node_context_general_destruct_handler, 549 .destruct_handler = scic_sds_remote_node_context_general_destruct_handler,
@@ -800,7 +551,6 @@ scic_sds_remote_node_context_state_handler_table[] = {
800 .resume_handler = scic_sds_remote_node_context_continue_to_resume_handler, 551 .resume_handler = scic_sds_remote_node_context_continue_to_resume_handler,
801 .start_io_handler = scic_sds_remote_node_context_default_start_io_handler, 552 .start_io_handler = scic_sds_remote_node_context_default_start_io_handler,
802 .start_task_handler = scic_sds_remote_node_context_default_start_task_handler, 553 .start_task_handler = scic_sds_remote_node_context_default_start_task_handler,
803 .event_handler = scic_sds_remote_node_context_posting_state_event_handler
804 }, 554 },
805 [SCIC_SDS_REMOTE_NODE_CONTEXT_INVALIDATING_STATE] = { 555 [SCIC_SDS_REMOTE_NODE_CONTEXT_INVALIDATING_STATE] = {
806 .destruct_handler = scic_sds_remote_node_context_invalidating_state_destruct_handler, 556 .destruct_handler = scic_sds_remote_node_context_invalidating_state_destruct_handler,
@@ -808,7 +558,6 @@ scic_sds_remote_node_context_state_handler_table[] = {
808 .resume_handler = scic_sds_remote_node_context_continue_to_resume_handler, 558 .resume_handler = scic_sds_remote_node_context_continue_to_resume_handler,
809 .start_io_handler = scic_sds_remote_node_context_default_start_io_handler, 559 .start_io_handler = scic_sds_remote_node_context_default_start_io_handler,
810 .start_task_handler = scic_sds_remote_node_context_default_start_task_handler, 560 .start_task_handler = scic_sds_remote_node_context_default_start_task_handler,
811 .event_handler = scic_sds_remote_node_context_invalidating_state_event_handler
812 }, 561 },
813 [SCIC_SDS_REMOTE_NODE_CONTEXT_RESUMING_STATE] = { 562 [SCIC_SDS_REMOTE_NODE_CONTEXT_RESUMING_STATE] = {
814 .destruct_handler = scic_sds_remote_node_context_general_destruct_handler, 563 .destruct_handler = scic_sds_remote_node_context_general_destruct_handler,
@@ -816,7 +565,6 @@ scic_sds_remote_node_context_state_handler_table[] = {
816 .resume_handler = scic_sds_remote_node_context_continue_to_resume_handler, 565 .resume_handler = scic_sds_remote_node_context_continue_to_resume_handler,
817 .start_io_handler = scic_sds_remote_node_context_default_start_io_handler, 566 .start_io_handler = scic_sds_remote_node_context_default_start_io_handler,
818 .start_task_handler = scic_sds_remote_node_context_success_start_task_handler, 567 .start_task_handler = scic_sds_remote_node_context_success_start_task_handler,
819 .event_handler = scic_sds_remote_node_context_resuming_state_event_handler
820 }, 568 },
821 [SCIC_SDS_REMOTE_NODE_CONTEXT_READY_STATE] = { 569 [SCIC_SDS_REMOTE_NODE_CONTEXT_READY_STATE] = {
822 .destruct_handler = scic_sds_remote_node_context_general_destruct_handler, 570 .destruct_handler = scic_sds_remote_node_context_general_destruct_handler,
@@ -824,7 +572,6 @@ scic_sds_remote_node_context_state_handler_table[] = {
824 .resume_handler = scic_sds_remote_node_context_default_resume_handler, 572 .resume_handler = scic_sds_remote_node_context_default_resume_handler,
825 .start_io_handler = scic_sds_remote_node_context_ready_state_start_io_handler, 573 .start_io_handler = scic_sds_remote_node_context_ready_state_start_io_handler,
826 .start_task_handler = scic_sds_remote_node_context_success_start_task_handler, 574 .start_task_handler = scic_sds_remote_node_context_success_start_task_handler,
827 .event_handler = scic_sds_remote_node_context_ready_state_event_handler
828 }, 575 },
829 [SCIC_SDS_REMOTE_NODE_CONTEXT_TX_SUSPENDED_STATE] = { 576 [SCIC_SDS_REMOTE_NODE_CONTEXT_TX_SUSPENDED_STATE] = {
830 .destruct_handler = scic_sds_remote_node_context_general_destruct_handler, 577 .destruct_handler = scic_sds_remote_node_context_general_destruct_handler,
@@ -832,7 +579,6 @@ scic_sds_remote_node_context_state_handler_table[] = {
832 .resume_handler = scic_sds_remote_node_context_tx_suspended_state_resume_handler, 579 .resume_handler = scic_sds_remote_node_context_tx_suspended_state_resume_handler,
833 .start_io_handler = scic_sds_remote_node_context_default_start_io_handler, 580 .start_io_handler = scic_sds_remote_node_context_default_start_io_handler,
834 .start_task_handler = scic_sds_remote_node_context_suspended_start_task_handler, 581 .start_task_handler = scic_sds_remote_node_context_suspended_start_task_handler,
835 .event_handler = scic_sds_remote_node_context_default_event_handler
836 }, 582 },
837 [SCIC_SDS_REMOTE_NODE_CONTEXT_TX_RX_SUSPENDED_STATE] = { 583 [SCIC_SDS_REMOTE_NODE_CONTEXT_TX_RX_SUSPENDED_STATE] = {
838 .destruct_handler = scic_sds_remote_node_context_general_destruct_handler, 584 .destruct_handler = scic_sds_remote_node_context_general_destruct_handler,
@@ -840,7 +586,6 @@ scic_sds_remote_node_context_state_handler_table[] = {
840 .resume_handler = scic_sds_remote_node_context_tx_rx_suspended_state_resume_handler, 586 .resume_handler = scic_sds_remote_node_context_tx_rx_suspended_state_resume_handler,
841 .start_io_handler = scic_sds_remote_node_context_default_start_io_handler, 587 .start_io_handler = scic_sds_remote_node_context_default_start_io_handler,
842 .start_task_handler = scic_sds_remote_node_context_suspended_start_task_handler, 588 .start_task_handler = scic_sds_remote_node_context_suspended_start_task_handler,
843 .event_handler = scic_sds_remote_node_context_default_event_handler
844 }, 589 },
845 [SCIC_SDS_REMOTE_NODE_CONTEXT_AWAIT_SUSPENSION_STATE] = { 590 [SCIC_SDS_REMOTE_NODE_CONTEXT_AWAIT_SUSPENSION_STATE] = {
846 .destruct_handler = scic_sds_remote_node_context_general_destruct_handler, 591 .destruct_handler = scic_sds_remote_node_context_general_destruct_handler,
@@ -848,7 +593,6 @@ scic_sds_remote_node_context_state_handler_table[] = {
848 .resume_handler = scic_sds_remote_node_context_await_suspension_state_resume_handler, 593 .resume_handler = scic_sds_remote_node_context_await_suspension_state_resume_handler,
849 .start_io_handler = scic_sds_remote_node_context_default_start_io_handler, 594 .start_io_handler = scic_sds_remote_node_context_default_start_io_handler,
850 .start_task_handler = scic_sds_remote_node_context_await_suspension_state_start_task_handler, 595 .start_task_handler = scic_sds_remote_node_context_await_suspension_state_start_task_handler,
851 .event_handler = scic_sds_remote_node_context_await_suspension_state_event_handler
852 } 596 }
853}; 597};
854 598
@@ -1172,3 +916,110 @@ void scic_sds_remote_node_context_construct(struct scic_sds_remote_node_context
1172 916
1173 sci_base_state_machine_start(&rnc->state_machine); 917 sci_base_state_machine_start(&rnc->state_machine);
1174} 918}
919
920enum sci_status scic_sds_remote_node_context_event_handler(struct scic_sds_remote_node_context *sci_rnc,
921 u32 event_code)
922{
923 enum scis_sds_remote_node_context_states state;
924
925 state = sci_rnc->state_machine.current_state_id;
926 switch (state) {
927 case SCIC_SDS_REMOTE_NODE_CONTEXT_POSTING_STATE:
928 switch (scu_get_event_code(event_code)) {
929 case SCU_EVENT_POST_RNC_COMPLETE:
930 sci_base_state_machine_change_state(&sci_rnc->state_machine,
931 SCIC_SDS_REMOTE_NODE_CONTEXT_READY_STATE);
932 break;
933 default:
934 goto out;
935 }
936 break;
937 case SCIC_SDS_REMOTE_NODE_CONTEXT_INVALIDATING_STATE:
938 if (scu_get_event_code(event_code) == SCU_EVENT_POST_RNC_INVALIDATE_COMPLETE) {
939 if (sci_rnc->destination_state == SCIC_SDS_REMOTE_NODE_DESTINATION_STATE_FINAL)
940 state = SCIC_SDS_REMOTE_NODE_CONTEXT_INITIAL_STATE;
941 else
942 state = SCIC_SDS_REMOTE_NODE_CONTEXT_POSTING_STATE;
943 sci_base_state_machine_change_state(&sci_rnc->state_machine,
944 state);
945 } else {
946 switch (scu_get_event_type(event_code)) {
947 case SCU_EVENT_TYPE_RNC_SUSPEND_TX:
948 case SCU_EVENT_TYPE_RNC_SUSPEND_TX_RX:
949 /* We really dont care if the hardware is going to suspend
950 * the device since it's being invalidated anyway */
951 dev_dbg(scirdev_to_dev(rnc_to_dev(sci_rnc)),
952 "%s: SCIC Remote Node Context 0x%p was "
953 "suspeneded by hardware while being "
954 "invalidated.\n", __func__, sci_rnc);
955 break;
956 default:
957 goto out;
958 }
959 }
960 break;
961 case SCIC_SDS_REMOTE_NODE_CONTEXT_RESUMING_STATE:
962 if (scu_get_event_code(event_code) == SCU_EVENT_POST_RCN_RELEASE) {
963 sci_base_state_machine_change_state(&sci_rnc->state_machine,
964 SCIC_SDS_REMOTE_NODE_CONTEXT_READY_STATE);
965 } else {
966 switch (scu_get_event_type(event_code)) {
967 case SCU_EVENT_TYPE_RNC_SUSPEND_TX:
968 case SCU_EVENT_TYPE_RNC_SUSPEND_TX_RX:
969 /* We really dont care if the hardware is going to suspend
970 * the device since it's being resumed anyway */
971 dev_dbg(scirdev_to_dev(rnc_to_dev(sci_rnc)),
972 "%s: SCIC Remote Node Context 0x%p was "
973 "suspeneded by hardware while being resumed.\n",
974 __func__, sci_rnc);
975 break;
976 default:
977 goto out;
978 }
979 }
980 break;
981 case SCIC_SDS_REMOTE_NODE_CONTEXT_READY_STATE:
982 switch (scu_get_event_type(event_code)) {
983 case SCU_EVENT_TL_RNC_SUSPEND_TX:
984 sci_base_state_machine_change_state(&sci_rnc->state_machine,
985 SCIC_SDS_REMOTE_NODE_CONTEXT_TX_SUSPENDED_STATE);
986 sci_rnc->suspension_code = scu_get_event_specifier(event_code);
987 break;
988 case SCU_EVENT_TL_RNC_SUSPEND_TX_RX:
989 sci_base_state_machine_change_state(&sci_rnc->state_machine,
990 SCIC_SDS_REMOTE_NODE_CONTEXT_TX_RX_SUSPENDED_STATE);
991 sci_rnc->suspension_code = scu_get_event_specifier(event_code);
992 break;
993 default:
994 goto out;
995 }
996 break;
997 case SCIC_SDS_REMOTE_NODE_CONTEXT_AWAIT_SUSPENSION_STATE:
998 switch (scu_get_event_type(event_code)) {
999 case SCU_EVENT_TL_RNC_SUSPEND_TX:
1000 sci_base_state_machine_change_state(&sci_rnc->state_machine,
1001 SCIC_SDS_REMOTE_NODE_CONTEXT_TX_SUSPENDED_STATE);
1002 sci_rnc->suspension_code = scu_get_event_specifier(event_code);
1003 break;
1004 case SCU_EVENT_TL_RNC_SUSPEND_TX_RX:
1005 sci_base_state_machine_change_state(&sci_rnc->state_machine,
1006 SCIC_SDS_REMOTE_NODE_CONTEXT_TX_RX_SUSPENDED_STATE);
1007 sci_rnc->suspension_code = scu_get_event_specifier(event_code);
1008 break;
1009 default:
1010 goto out;
1011 }
1012 break;
1013 default:
1014 dev_warn(scirdev_to_dev(rnc_to_dev(sci_rnc)),
1015 "%s: invalid state %d\n", __func__, state);
1016 return SCI_FAILURE_INVALID_STATE;
1017 }
1018 return SCI_SUCCESS;
1019
1020 out:
1021 dev_warn(scirdev_to_dev(rnc_to_dev(sci_rnc)),
1022 "%s: code: %#x state: %d\n", __func__, event_code, state);
1023 return SCI_FAILURE;
1024
1025}
diff --git a/drivers/scsi/isci/remote_node_context.h b/drivers/scsi/isci/remote_node_context.h
index a763468fa74f..fb93f09d4df6 100644
--- a/drivers/scsi/isci/remote_node_context.h
+++ b/drivers/scsi/isci/remote_node_context.h
@@ -102,11 +102,6 @@ typedef enum sci_status (*scic_sds_remote_node_context_io_request)(
102 struct scic_sds_request *sci_req 102 struct scic_sds_request *sci_req
103 ); 103 );
104 104
105typedef enum sci_status (*scic_sds_remote_node_context_event_handler)(
106 struct scic_sds_remote_node_context *sci_rnc,
107 u32 event_code
108 );
109
110struct scic_sds_remote_node_context_handlers { 105struct scic_sds_remote_node_context_handlers {
111 /** 106 /**
112 * This handle is invoked to stop the RNC. The callback is invoked when after 107 * This handle is invoked to stop the RNC. The callback is invoked when after
@@ -138,12 +133,6 @@ struct scic_sds_remote_node_context_handlers {
138 * operation. 133 * operation.
139 */ 134 */
140 scic_sds_remote_node_context_io_request start_task_handler; 135 scic_sds_remote_node_context_io_request start_task_handler;
141
142 /**
143 * This handler is invoked where there is an RNC event that must be processed.
144 */
145 scic_sds_remote_node_context_event_handler event_handler;
146
147}; 136};
148 137
149/** 138/**
@@ -271,8 +260,9 @@ bool scic_sds_remote_node_context_is_ready(
271#define scic_sds_remote_node_context_get_remote_node_index(rcn) \ 260#define scic_sds_remote_node_context_get_remote_node_index(rcn) \
272 ((rnc)->remote_node_index) 261 ((rnc)->remote_node_index)
273 262
274#define scic_sds_remote_node_context_event_handler(rnc, event_code) \ 263
275 ((rnc)->state_handlers->event_handler(rnc, event_code)) 264enum sci_status scic_sds_remote_node_context_event_handler(struct scic_sds_remote_node_context *sci_rnc,
265 u32 event_code);
276 266
277#define scic_sds_remote_node_context_resume(rnc, callback, parameter) \ 267#define scic_sds_remote_node_context_resume(rnc, callback, parameter) \
278 ((rnc)->state_handlers->resume_handler(rnc, callback, parameter)) 268 ((rnc)->state_handlers->resume_handler(rnc, callback, parameter))