diff options
author | Dan Williams <dan.j.williams@intel.com> | 2011-05-01 19:15:47 -0400 |
---|---|---|
committer | Dan Williams <dan.j.williams@intel.com> | 2011-07-03 07:04:45 -0400 |
commit | 323f0ec0fc72670f71210ba89611f6a1ec234394 (patch) | |
tree | 59367c9ff09267699b8bd01a6b4aa21e4c8765c9 | |
parent | e4a867bb4a7617dc1067e1c41627782f3c6c284c (diff) |
isci: unify remote_device suspend_handlers
Implement all states in scic_sds_remote_device_suspend() 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_device.c | 56 | ||||
-rw-r--r-- | drivers/scsi/isci/remote_device.h | 1 |
2 files changed, 13 insertions, 44 deletions
diff --git a/drivers/scsi/isci/remote_device.c b/drivers/scsi/isci/remote_device.c index 3344f38355c..97ea8748335 100644 --- a/drivers/scsi/isci/remote_device.c +++ b/drivers/scsi/isci/remote_device.c | |||
@@ -261,17 +261,20 @@ enum sci_status scic_remote_device_reset_complete(struct scic_sds_remote_device | |||
261 | return SCI_SUCCESS; | 261 | return SCI_SUCCESS; |
262 | } | 262 | } |
263 | 263 | ||
264 | /** | 264 | enum sci_status scic_sds_remote_device_suspend(struct scic_sds_remote_device *sci_dev, |
265 | * | 265 | u32 suspend_type) |
266 | * @sci_dev: The remote device for which the suspend is being requested. | ||
267 | * | ||
268 | * This method invokes the remote device suspend state handler. enum sci_status | ||
269 | */ | ||
270 | enum sci_status scic_sds_remote_device_suspend( | ||
271 | struct scic_sds_remote_device *sci_dev, | ||
272 | u32 suspend_type) | ||
273 | { | 266 | { |
274 | return sci_dev->state_handlers->suspend_handler(sci_dev, suspend_type); | 267 | struct sci_base_state_machine *sm = &sci_dev->state_machine; |
268 | enum scic_sds_remote_device_states state = sm->current_state_id; | ||
269 | |||
270 | if (state != SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_CMD) { | ||
271 | dev_warn(scirdev_to_dev(sci_dev), "%s: in wrong state: %d\n", | ||
272 | __func__, state); | ||
273 | return SCI_FAILURE_INVALID_STATE; | ||
274 | } | ||
275 | |||
276 | return scic_sds_remote_node_context_suspend(&sci_dev->rnc, | ||
277 | suspend_type, NULL, NULL); | ||
275 | } | 278 | } |
276 | 279 | ||
277 | /** | 280 | /** |
@@ -674,12 +677,6 @@ default_device_handler(struct scic_sds_remote_device *sci_dev, | |||
674 | return SCI_FAILURE_INVALID_STATE; | 677 | return SCI_FAILURE_INVALID_STATE; |
675 | } | 678 | } |
676 | 679 | ||
677 | static enum sci_status scic_sds_remote_device_default_suspend_handler( | ||
678 | struct scic_sds_remote_device *sci_dev, u32 suspend_type) | ||
679 | { | ||
680 | return default_device_handler(sci_dev, __func__); | ||
681 | } | ||
682 | |||
683 | static enum sci_status scic_sds_remote_device_default_resume_handler( | 680 | static enum sci_status scic_sds_remote_device_default_resume_handler( |
684 | struct scic_sds_remote_device *sci_dev) | 681 | struct scic_sds_remote_device *sci_dev) |
685 | { | 682 | { |
@@ -919,18 +916,6 @@ static enum sci_status scic_sds_stp_remote_device_ready_ncq_substate_frame_handl | |||
919 | return status; | 916 | return status; |
920 | } | 917 | } |
921 | 918 | ||
922 | static enum sci_status scic_sds_stp_remote_device_ready_cmd_substate_suspend_handler( | ||
923 | struct scic_sds_remote_device *sci_dev, | ||
924 | u32 suspend_type) | ||
925 | { | ||
926 | enum sci_status status; | ||
927 | |||
928 | status = scic_sds_remote_node_context_suspend(&sci_dev->rnc, | ||
929 | suspend_type, NULL, NULL); | ||
930 | |||
931 | return status; | ||
932 | } | ||
933 | |||
934 | static enum sci_status scic_sds_stp_remote_device_ready_cmd_substate_frame_handler( | 919 | static enum sci_status scic_sds_stp_remote_device_ready_cmd_substate_frame_handler( |
935 | struct scic_sds_remote_device *sci_dev, | 920 | struct scic_sds_remote_device *sci_dev, |
936 | u32 frame_index) | 921 | u32 frame_index) |
@@ -976,91 +961,76 @@ static enum sci_status scic_sds_smp_remote_device_ready_cmd_substate_frame_handl | |||
976 | 961 | ||
977 | static const struct scic_sds_remote_device_state_handler scic_sds_remote_device_state_handler_table[] = { | 962 | static const struct scic_sds_remote_device_state_handler scic_sds_remote_device_state_handler_table[] = { |
978 | [SCI_BASE_REMOTE_DEVICE_STATE_INITIAL] = { | 963 | [SCI_BASE_REMOTE_DEVICE_STATE_INITIAL] = { |
979 | .suspend_handler = scic_sds_remote_device_default_suspend_handler, | ||
980 | .resume_handler = scic_sds_remote_device_default_resume_handler, | 964 | .resume_handler = scic_sds_remote_device_default_resume_handler, |
981 | .event_handler = scic_sds_remote_device_default_event_handler, | 965 | .event_handler = scic_sds_remote_device_default_event_handler, |
982 | .frame_handler = scic_sds_remote_device_default_frame_handler | 966 | .frame_handler = scic_sds_remote_device_default_frame_handler |
983 | }, | 967 | }, |
984 | [SCI_BASE_REMOTE_DEVICE_STATE_STOPPED] = { | 968 | [SCI_BASE_REMOTE_DEVICE_STATE_STOPPED] = { |
985 | .suspend_handler = scic_sds_remote_device_default_suspend_handler, | ||
986 | .resume_handler = scic_sds_remote_device_default_resume_handler, | 969 | .resume_handler = scic_sds_remote_device_default_resume_handler, |
987 | .event_handler = scic_sds_remote_device_default_event_handler, | 970 | .event_handler = scic_sds_remote_device_default_event_handler, |
988 | .frame_handler = scic_sds_remote_device_default_frame_handler | 971 | .frame_handler = scic_sds_remote_device_default_frame_handler |
989 | }, | 972 | }, |
990 | [SCI_BASE_REMOTE_DEVICE_STATE_STARTING] = { | 973 | [SCI_BASE_REMOTE_DEVICE_STATE_STARTING] = { |
991 | .suspend_handler = scic_sds_remote_device_default_suspend_handler, | ||
992 | .resume_handler = scic_sds_remote_device_default_resume_handler, | 974 | .resume_handler = scic_sds_remote_device_default_resume_handler, |
993 | .event_handler = scic_sds_remote_device_general_event_handler, | 975 | .event_handler = scic_sds_remote_device_general_event_handler, |
994 | .frame_handler = scic_sds_remote_device_default_frame_handler | 976 | .frame_handler = scic_sds_remote_device_default_frame_handler |
995 | }, | 977 | }, |
996 | [SCI_BASE_REMOTE_DEVICE_STATE_READY] = { | 978 | [SCI_BASE_REMOTE_DEVICE_STATE_READY] = { |
997 | .suspend_handler = scic_sds_remote_device_default_suspend_handler, | ||
998 | .resume_handler = scic_sds_remote_device_default_resume_handler, | 979 | .resume_handler = scic_sds_remote_device_default_resume_handler, |
999 | .event_handler = scic_sds_remote_device_general_event_handler, | 980 | .event_handler = scic_sds_remote_device_general_event_handler, |
1000 | .frame_handler = scic_sds_remote_device_general_frame_handler, | 981 | .frame_handler = scic_sds_remote_device_general_frame_handler, |
1001 | }, | 982 | }, |
1002 | [SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_IDLE] = { | 983 | [SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_IDLE] = { |
1003 | .suspend_handler = scic_sds_remote_device_default_suspend_handler, | ||
1004 | .resume_handler = scic_sds_remote_device_default_resume_handler, | 984 | .resume_handler = scic_sds_remote_device_default_resume_handler, |
1005 | .event_handler = scic_sds_stp_remote_device_ready_idle_substate_event_handler, | 985 | .event_handler = scic_sds_stp_remote_device_ready_idle_substate_event_handler, |
1006 | .frame_handler = scic_sds_remote_device_default_frame_handler | 986 | .frame_handler = scic_sds_remote_device_default_frame_handler |
1007 | }, | 987 | }, |
1008 | [SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_CMD] = { | 988 | [SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_CMD] = { |
1009 | .suspend_handler = scic_sds_stp_remote_device_ready_cmd_substate_suspend_handler, | ||
1010 | .resume_handler = scic_sds_remote_device_default_resume_handler, | 989 | .resume_handler = scic_sds_remote_device_default_resume_handler, |
1011 | .event_handler = scic_sds_remote_device_general_event_handler, | 990 | .event_handler = scic_sds_remote_device_general_event_handler, |
1012 | .frame_handler = scic_sds_stp_remote_device_ready_cmd_substate_frame_handler | 991 | .frame_handler = scic_sds_stp_remote_device_ready_cmd_substate_frame_handler |
1013 | }, | 992 | }, |
1014 | [SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ] = { | 993 | [SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ] = { |
1015 | .suspend_handler = scic_sds_remote_device_default_suspend_handler, | ||
1016 | .resume_handler = scic_sds_remote_device_default_resume_handler, | 994 | .resume_handler = scic_sds_remote_device_default_resume_handler, |
1017 | .event_handler = scic_sds_remote_device_general_event_handler, | 995 | .event_handler = scic_sds_remote_device_general_event_handler, |
1018 | .frame_handler = scic_sds_stp_remote_device_ready_ncq_substate_frame_handler | 996 | .frame_handler = scic_sds_stp_remote_device_ready_ncq_substate_frame_handler |
1019 | }, | 997 | }, |
1020 | [SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ_ERROR] = { | 998 | [SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ_ERROR] = { |
1021 | .suspend_handler = scic_sds_remote_device_default_suspend_handler, | ||
1022 | .resume_handler = scic_sds_remote_device_default_resume_handler, | 999 | .resume_handler = scic_sds_remote_device_default_resume_handler, |
1023 | .event_handler = scic_sds_remote_device_general_event_handler, | 1000 | .event_handler = scic_sds_remote_device_general_event_handler, |
1024 | .frame_handler = scic_sds_remote_device_general_frame_handler | 1001 | .frame_handler = scic_sds_remote_device_general_frame_handler |
1025 | }, | 1002 | }, |
1026 | [SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_AWAIT_RESET] = { | 1003 | [SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_AWAIT_RESET] = { |
1027 | .suspend_handler = scic_sds_remote_device_default_suspend_handler, | ||
1028 | .resume_handler = scic_sds_remote_device_default_resume_handler, | 1004 | .resume_handler = scic_sds_remote_device_default_resume_handler, |
1029 | .event_handler = scic_sds_remote_device_general_event_handler, | 1005 | .event_handler = scic_sds_remote_device_general_event_handler, |
1030 | .frame_handler = scic_sds_remote_device_general_frame_handler | 1006 | .frame_handler = scic_sds_remote_device_general_frame_handler |
1031 | }, | 1007 | }, |
1032 | [SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_IDLE] = { | 1008 | [SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_IDLE] = { |
1033 | .suspend_handler = scic_sds_remote_device_default_suspend_handler, | ||
1034 | .resume_handler = scic_sds_remote_device_default_resume_handler, | 1009 | .resume_handler = scic_sds_remote_device_default_resume_handler, |
1035 | .event_handler = scic_sds_remote_device_general_event_handler, | 1010 | .event_handler = scic_sds_remote_device_general_event_handler, |
1036 | .frame_handler = scic_sds_remote_device_default_frame_handler | 1011 | .frame_handler = scic_sds_remote_device_default_frame_handler |
1037 | }, | 1012 | }, |
1038 | [SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_CMD] = { | 1013 | [SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_CMD] = { |
1039 | .suspend_handler = scic_sds_remote_device_default_suspend_handler, | ||
1040 | .resume_handler = scic_sds_remote_device_default_resume_handler, | 1014 | .resume_handler = scic_sds_remote_device_default_resume_handler, |
1041 | .event_handler = scic_sds_remote_device_general_event_handler, | 1015 | .event_handler = scic_sds_remote_device_general_event_handler, |
1042 | .frame_handler = scic_sds_smp_remote_device_ready_cmd_substate_frame_handler | 1016 | .frame_handler = scic_sds_smp_remote_device_ready_cmd_substate_frame_handler |
1043 | }, | 1017 | }, |
1044 | [SCI_BASE_REMOTE_DEVICE_STATE_STOPPING] = { | 1018 | [SCI_BASE_REMOTE_DEVICE_STATE_STOPPING] = { |
1045 | .suspend_handler = scic_sds_remote_device_default_suspend_handler, | ||
1046 | .resume_handler = scic_sds_remote_device_default_resume_handler, | 1019 | .resume_handler = scic_sds_remote_device_default_resume_handler, |
1047 | .event_handler = scic_sds_remote_device_general_event_handler, | 1020 | .event_handler = scic_sds_remote_device_general_event_handler, |
1048 | .frame_handler = scic_sds_remote_device_general_frame_handler | 1021 | .frame_handler = scic_sds_remote_device_general_frame_handler |
1049 | }, | 1022 | }, |
1050 | [SCI_BASE_REMOTE_DEVICE_STATE_FAILED] = { | 1023 | [SCI_BASE_REMOTE_DEVICE_STATE_FAILED] = { |
1051 | .suspend_handler = scic_sds_remote_device_default_suspend_handler, | ||
1052 | .resume_handler = scic_sds_remote_device_default_resume_handler, | 1024 | .resume_handler = scic_sds_remote_device_default_resume_handler, |
1053 | .event_handler = scic_sds_remote_device_default_event_handler, | 1025 | .event_handler = scic_sds_remote_device_default_event_handler, |
1054 | .frame_handler = scic_sds_remote_device_general_frame_handler | 1026 | .frame_handler = scic_sds_remote_device_general_frame_handler |
1055 | }, | 1027 | }, |
1056 | [SCI_BASE_REMOTE_DEVICE_STATE_RESETTING] = { | 1028 | [SCI_BASE_REMOTE_DEVICE_STATE_RESETTING] = { |
1057 | .suspend_handler = scic_sds_remote_device_default_suspend_handler, | ||
1058 | .resume_handler = scic_sds_remote_device_default_resume_handler, | 1029 | .resume_handler = scic_sds_remote_device_default_resume_handler, |
1059 | .event_handler = scic_sds_remote_device_default_event_handler, | 1030 | .event_handler = scic_sds_remote_device_default_event_handler, |
1060 | .frame_handler = scic_sds_remote_device_general_frame_handler | 1031 | .frame_handler = scic_sds_remote_device_general_frame_handler |
1061 | }, | 1032 | }, |
1062 | [SCI_BASE_REMOTE_DEVICE_STATE_FINAL] = { | 1033 | [SCI_BASE_REMOTE_DEVICE_STATE_FINAL] = { |
1063 | .suspend_handler = scic_sds_remote_device_default_suspend_handler, | ||
1064 | .resume_handler = scic_sds_remote_device_default_resume_handler, | 1034 | .resume_handler = scic_sds_remote_device_default_resume_handler, |
1065 | .event_handler = scic_sds_remote_device_default_event_handler, | 1035 | .event_handler = scic_sds_remote_device_default_event_handler, |
1066 | .frame_handler = scic_sds_remote_device_default_frame_handler | 1036 | .frame_handler = scic_sds_remote_device_default_frame_handler |
diff --git a/drivers/scsi/isci/remote_device.h b/drivers/scsi/isci/remote_device.h index dbfb13e2851..f0cabd013bd 100644 --- a/drivers/scsi/isci/remote_device.h +++ b/drivers/scsi/isci/remote_device.h | |||
@@ -386,7 +386,6 @@ typedef void (*scic_sds_remote_device_ready_not_ready_handler_t)( | |||
386 | * | 386 | * |
387 | */ | 387 | */ |
388 | struct scic_sds_remote_device_state_handler { | 388 | struct scic_sds_remote_device_state_handler { |
389 | scic_sds_remote_device_suspend_handler_t suspend_handler; | ||
390 | scic_sds_remote_device_resume_handler_t resume_handler; | 389 | scic_sds_remote_device_resume_handler_t resume_handler; |
391 | scic_sds_remote_device_event_handler_t event_handler; | 390 | scic_sds_remote_device_event_handler_t event_handler; |
392 | scic_sds_remote_device_frame_handler_t frame_handler; | 391 | scic_sds_remote_device_frame_handler_t frame_handler; |