aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorDan Williams <dan.j.williams@intel.com>2011-05-11 11:27:47 -0400
committerDan Williams <dan.j.williams@intel.com>2011-07-03 07:04:48 -0400
commita7e255a34220ba57eeeb75637c911974e54c08e7 (patch)
tree5f40bcae968de741393d4ad5c7d16b80d8d1408b /drivers
parentd1c637c35b33ddd2b405956e04b50939bb10ed2a (diff)
isci: remove request task context completion state handler
Unlike the other conversions this only updates scic_sds_io_request_tc_completion() to call the old state handlers directly (with less verbose names). This was done for future patch readability, the implementations have only minor differences for different completion codes. Without a reference to the function name it would be difficult to dicern which state is being updated. Considered changing the order to look up the completion code before the state but that was not a clean conversion either. Reported-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/scsi/isci/request.c531
-rw-r--r--drivers/scsi/isci/request.h3
2 files changed, 197 insertions, 337 deletions
diff --git a/drivers/scsi/isci/request.c b/drivers/scsi/isci/request.c
index b9f97e8cc5e0..cb13b78d8026 100644
--- a/drivers/scsi/isci/request.c
+++ b/drivers/scsi/isci/request.c
@@ -932,27 +932,14 @@ static void scic_sds_io_request_copy_response(struct scic_sds_request *sci_req)
932 memcpy(resp_buf, ssp_response->resp_data, len); 932 memcpy(resp_buf, ssp_response->resp_data, len);
933} 933}
934 934
935/* 935static enum sci_status request_started_state_tc_event(struct scic_sds_request *sci_req,
936 * scic_sds_request_started_state_tc_completion_handler() - This method process 936 u32 completion_code)
937 * TC (task context) completions for normal IO request (i.e. Task/Abort
938 * Completions of type 0). This method will update the
939 * SCIC_SDS_IO_REQUEST_T::status field.
940 * @sci_req: This parameter specifies the request for which a completion
941 * occurred.
942 * @completion_code: This parameter specifies the completion code received from
943 * the SCU.
944 *
945 */
946static enum sci_status
947scic_sds_request_started_state_tc_completion_handler(struct scic_sds_request *sci_req,
948 u32 completion_code)
949{ 937{
950 u8 datapres;
951 struct ssp_response_iu *resp_iu; 938 struct ssp_response_iu *resp_iu;
939 u8 datapres;
952 940
953 /* 941 /* TODO: Any SDMA return code of other than 0 is bad decode 0x003C0000
954 * TODO: Any SDMA return code of other than 0 is bad 942 * to determine SDMA status
955 * decode 0x003C0000 to determine SDMA status
956 */ 943 */
957 switch (SCU_GET_COMPLETION_TL_STATUS(completion_code)) { 944 switch (SCU_GET_COMPLETION_TL_STATUS(completion_code)) {
958 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_GOOD): 945 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_GOOD):
@@ -960,11 +947,8 @@ scic_sds_request_started_state_tc_completion_handler(struct scic_sds_request *sc
960 SCU_TASK_DONE_GOOD, 947 SCU_TASK_DONE_GOOD,
961 SCI_SUCCESS); 948 SCI_SUCCESS);
962 break; 949 break;
963 950 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_EARLY_RESP): {
964 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_EARLY_RESP): 951 /* There are times when the SCU hardware will return an early
965 {
966 /*
967 * There are times when the SCU hardware will return an early
968 * response because the io request specified more data than is 952 * response because the io request specified more data than is
969 * returned by the target device (mode pages, inquiry data, 953 * returned by the target device (mode pages, inquiry data,
970 * etc.). We must check the response stats to see if this is 954 * etc.). We must check the response stats to see if this is
@@ -979,21 +963,17 @@ scic_sds_request_started_state_tc_completion_handler(struct scic_sds_request *sc
979 word_cnt); 963 word_cnt);
980 964
981 if (resp->status == 0) { 965 if (resp->status == 0) {
982 scic_sds_request_set_status( 966 scic_sds_request_set_status(sci_req,
983 sci_req, 967 SCU_TASK_DONE_GOOD,
984 SCU_TASK_DONE_GOOD, 968 SCI_SUCCESS_IO_DONE_EARLY);
985 SCI_SUCCESS_IO_DONE_EARLY);
986 } else { 969 } else {
987 scic_sds_request_set_status( 970 scic_sds_request_set_status(sci_req,
988 sci_req, 971 SCU_TASK_DONE_CHECK_RESPONSE,
989 SCU_TASK_DONE_CHECK_RESPONSE, 972 SCI_FAILURE_IO_RESPONSE_VALID);
990 SCI_FAILURE_IO_RESPONSE_VALID);
991 } 973 }
974 break;
992 } 975 }
993 break; 976 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_CHECK_RESPONSE): {
994
995 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_CHECK_RESPONSE):
996 {
997 ssize_t word_cnt = SSP_RESP_IU_MAX_SIZE / sizeof(u32); 977 ssize_t word_cnt = SSP_RESP_IU_MAX_SIZE / sizeof(u32);
998 978
999 sci_swab32_cpy(&sci_req->ssp.rsp, 979 sci_swab32_cpy(&sci_req->ssp.rsp,
@@ -1007,24 +987,22 @@ scic_sds_request_started_state_tc_completion_handler(struct scic_sds_request *sc
1007 } 987 }
1008 988
1009 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_RESP_LEN_ERR): 989 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_RESP_LEN_ERR):
1010 /* 990 /* TODO With TASK_DONE_RESP_LEN_ERR is the response frame
1011 * / @todo With TASK_DONE_RESP_LEN_ERR is the response frame
1012 * guaranteed to be received before this completion status is 991 * guaranteed to be received before this completion status is
1013 * posted? 992 * posted?
1014 */ 993 */
1015 resp_iu = &sci_req->ssp.rsp; 994 resp_iu = &sci_req->ssp.rsp;
1016 datapres = resp_iu->datapres; 995 datapres = resp_iu->datapres;
1017 996
1018 if ((datapres == 0x01) || (datapres == 0x02)) { 997 if (datapres == 1 || datapres == 2) {
1019 scic_sds_request_set_status( 998 scic_sds_request_set_status(sci_req,
1020 sci_req, 999 SCU_TASK_DONE_CHECK_RESPONSE,
1021 SCU_TASK_DONE_CHECK_RESPONSE, 1000 SCI_FAILURE_IO_RESPONSE_VALID);
1022 SCI_FAILURE_IO_RESPONSE_VALID);
1023 } else 1001 } else
1024 scic_sds_request_set_status( 1002 scic_sds_request_set_status(sci_req,
1025 sci_req, SCU_TASK_DONE_GOOD, SCI_SUCCESS); 1003 SCU_TASK_DONE_GOOD,
1004 SCI_SUCCESS);
1026 break; 1005 break;
1027
1028 /* only stp device gets suspended. */ 1006 /* only stp device gets suspended. */
1029 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_ACK_NAK_TO): 1007 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_ACK_NAK_TO):
1030 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_LL_PERR): 1008 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_LL_PERR):
@@ -1038,14 +1016,12 @@ scic_sds_request_started_state_tc_completion_handler(struct scic_sds_request *sc
1038 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_REG_ERR): 1016 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_REG_ERR):
1039 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_SDB_ERR): 1017 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_SDB_ERR):
1040 if (sci_req->protocol == SCIC_STP_PROTOCOL) { 1018 if (sci_req->protocol == SCIC_STP_PROTOCOL) {
1041 scic_sds_request_set_status( 1019 scic_sds_request_set_status(sci_req,
1042 sci_req,
1043 SCU_GET_COMPLETION_TL_STATUS(completion_code) >> 1020 SCU_GET_COMPLETION_TL_STATUS(completion_code) >>
1044 SCU_COMPLETION_TL_STATUS_SHIFT, 1021 SCU_COMPLETION_TL_STATUS_SHIFT,
1045 SCI_FAILURE_REMOTE_DEVICE_RESET_REQUIRED); 1022 SCI_FAILURE_REMOTE_DEVICE_RESET_REQUIRED);
1046 } else { 1023 } else {
1047 scic_sds_request_set_status( 1024 scic_sds_request_set_status(sci_req,
1048 sci_req,
1049 SCU_GET_COMPLETION_TL_STATUS(completion_code) >> 1025 SCU_GET_COMPLETION_TL_STATUS(completion_code) >>
1050 SCU_COMPLETION_TL_STATUS_SHIFT, 1026 SCU_COMPLETION_TL_STATUS_SHIFT,
1051 SCI_FAILURE_CONTROLLER_SPECIFIC_IO_ERR); 1027 SCI_FAILURE_CONTROLLER_SPECIFIC_IO_ERR);
@@ -1063,11 +1039,10 @@ scic_sds_request_started_state_tc_completion_handler(struct scic_sds_request *sc
1063 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_OPEN_REJECT_STP_RESOURCES_BUSY): 1039 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_OPEN_REJECT_STP_RESOURCES_BUSY):
1064 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_OPEN_REJECT_PROTOCOL_NOT_SUPPORTED): 1040 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_OPEN_REJECT_PROTOCOL_NOT_SUPPORTED):
1065 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_OPEN_REJECT_CONNECTION_RATE_NOT_SUPPORTED): 1041 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_OPEN_REJECT_CONNECTION_RATE_NOT_SUPPORTED):
1066 scic_sds_request_set_status( 1042 scic_sds_request_set_status(sci_req,
1067 sci_req, 1043 SCU_GET_COMPLETION_TL_STATUS(completion_code) >>
1068 SCU_GET_COMPLETION_TL_STATUS(completion_code) >> 1044 SCU_COMPLETION_TL_STATUS_SHIFT,
1069 SCU_COMPLETION_TL_STATUS_SHIFT, 1045 SCI_FAILURE_REMOTE_DEVICE_RESET_REQUIRED);
1070 SCI_FAILURE_REMOTE_DEVICE_RESET_REQUIRED);
1071 break; 1046 break;
1072 1047
1073 /* neither ssp nor stp gets suspended. */ 1048 /* neither ssp nor stp gets suspended. */
@@ -1105,22 +1080,6 @@ scic_sds_request_started_state_tc_completion_handler(struct scic_sds_request *sc
1105 return SCI_SUCCESS; 1080 return SCI_SUCCESS;
1106} 1081}
1107 1082
1108enum sci_status
1109scic_sds_io_request_tc_completion(struct scic_sds_request *request, u32 completion_code)
1110{
1111 if (request->state_handlers->tc_completion_handler)
1112 return request->state_handlers->tc_completion_handler(request, completion_code);
1113
1114 dev_warn(scic_to_dev(request->owning_controller),
1115 "%s: SCIC IO Request given task completion notification %x "
1116 "while in wrong state %d\n",
1117 __func__,
1118 completion_code,
1119 sci_base_state_machine_get_state(&request->state_machine));
1120
1121 return SCI_FAILURE_INVALID_STATE;
1122}
1123
1124/* 1083/*
1125 * This method implements the action to be taken when an SCIC_SDS_IO_REQUEST_T 1084 * This method implements the action to be taken when an SCIC_SDS_IO_REQUEST_T
1126 * object receives a scic_sds_request_complete() request. This method frees up 1085 * object receives a scic_sds_request_complete() request. This method frees up
@@ -1146,54 +1105,32 @@ static enum sci_status scic_sds_request_completed_state_complete_handler(
1146 return SCI_SUCCESS; 1105 return SCI_SUCCESS;
1147} 1106}
1148 1107
1149/* 1108static enum sci_status request_aborting_state_tc_event(
1150 * This method implements the action to be taken when an SCIC_SDS_IO_REQUEST_T
1151 * object receives a scic_sds_request_task_completion() request. This method
1152 * decodes the completion type waiting for the abort task complete
1153 * notification. When the abort task complete is received the io request
1154 * transitions to the completed state. enum sci_status SCI_SUCCESS
1155 */
1156static enum sci_status scic_sds_request_aborting_state_tc_completion_handler(
1157 struct scic_sds_request *sci_req, 1109 struct scic_sds_request *sci_req,
1158 u32 completion_code) 1110 u32 completion_code)
1159{ 1111{
1160 switch (SCU_GET_COMPLETION_TL_STATUS(completion_code)) { 1112 switch (SCU_GET_COMPLETION_TL_STATUS(completion_code)) {
1161 case (SCU_TASK_DONE_GOOD << SCU_COMPLETION_TL_STATUS_SHIFT): 1113 case (SCU_TASK_DONE_GOOD << SCU_COMPLETION_TL_STATUS_SHIFT):
1162 case (SCU_TASK_DONE_TASK_ABORT << SCU_COMPLETION_TL_STATUS_SHIFT): 1114 case (SCU_TASK_DONE_TASK_ABORT << SCU_COMPLETION_TL_STATUS_SHIFT):
1163 scic_sds_request_set_status( 1115 scic_sds_request_set_status(sci_req, SCU_TASK_DONE_TASK_ABORT,
1164 sci_req, SCU_TASK_DONE_TASK_ABORT, SCI_FAILURE_IO_TERMINATED 1116 SCI_FAILURE_IO_TERMINATED);
1165 );
1166 1117
1167 sci_base_state_machine_change_state(&sci_req->state_machine, 1118 sci_base_state_machine_change_state(&sci_req->state_machine,
1168 SCI_BASE_REQUEST_STATE_COMPLETED); 1119 SCI_BASE_REQUEST_STATE_COMPLETED);
1169 break; 1120 break;
1170 1121
1171 default: 1122 default:
1172 /* 1123 /* Unless we get some strange error wait for the task abort to complete
1173 * Unless we get some strange error wait for the task abort to complete 1124 * TODO: Should there be a state change for this completion?
1174 * TODO: Should there be a state change for this completion? */ 1125 */
1175 break; 1126 break;
1176 } 1127 }
1177 1128
1178 return SCI_SUCCESS; 1129 return SCI_SUCCESS;
1179} 1130}
1180 1131
1181/** 1132static enum sci_status ssp_task_request_await_tc_event(struct scic_sds_request *sci_req,
1182 * This method processes the completions transport layer (TL) status to 1133 u32 completion_code)
1183 * determine if the RAW task management frame was sent successfully. If the
1184 * raw frame was sent successfully, then the state for the task request
1185 * transitions to waiting for a response frame.
1186 * @sci_req: This parameter specifies the request for which the TC
1187 * completion was received.
1188 * @completion_code: This parameter indicates the completion status information
1189 * for the TC.
1190 *
1191 * Indicate if the tc completion handler was successful. SCI_SUCCESS currently
1192 * this method always returns success.
1193 */
1194static enum sci_status scic_sds_ssp_task_request_await_tc_completion_tc_completion_handler(
1195 struct scic_sds_request *sci_req,
1196 u32 completion_code)
1197{ 1134{
1198 switch (SCU_GET_COMPLETION_TL_STATUS(completion_code)) { 1135 switch (SCU_GET_COMPLETION_TL_STATUS(completion_code)) {
1199 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_GOOD): 1136 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_GOOD):
@@ -1203,33 +1140,27 @@ static enum sci_status scic_sds_ssp_task_request_await_tc_completion_tc_completi
1203 sci_base_state_machine_change_state(&sci_req->state_machine, 1140 sci_base_state_machine_change_state(&sci_req->state_machine,
1204 SCIC_SDS_IO_REQUEST_STARTED_TASK_MGMT_SUBSTATE_AWAIT_TC_RESPONSE); 1141 SCIC_SDS_IO_REQUEST_STARTED_TASK_MGMT_SUBSTATE_AWAIT_TC_RESPONSE);
1205 break; 1142 break;
1206
1207 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_ACK_NAK_TO): 1143 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_ACK_NAK_TO):
1208 /* 1144 /* Currently, the decision is to simply allow the task request
1209 * Currently, the decision is to simply allow the task request to 1145 * to timeout if the task IU wasn't received successfully.
1210 * timeout if the task IU wasn't received successfully. 1146 * There is a potential for receiving multiple task responses if
1211 * There is a potential for receiving multiple task responses if we 1147 * we decide to send the task IU again.
1212 * decide to send the task IU again. */ 1148 */
1213 dev_warn(scic_to_dev(sci_req->owning_controller), 1149 dev_warn(scic_to_dev(sci_req->owning_controller),
1214 "%s: TaskRequest:0x%p CompletionCode:%x - " 1150 "%s: TaskRequest:0x%p CompletionCode:%x - "
1215 "ACK/NAK timeout\n", 1151 "ACK/NAK timeout\n", __func__, sci_req,
1216 __func__,
1217 sci_req,
1218 completion_code); 1152 completion_code);
1219 1153
1220 sci_base_state_machine_change_state(&sci_req->state_machine, 1154 sci_base_state_machine_change_state(&sci_req->state_machine,
1221 SCIC_SDS_IO_REQUEST_STARTED_TASK_MGMT_SUBSTATE_AWAIT_TC_RESPONSE); 1155 SCIC_SDS_IO_REQUEST_STARTED_TASK_MGMT_SUBSTATE_AWAIT_TC_RESPONSE);
1222 break; 1156 break;
1223
1224 default: 1157 default:
1225 /* 1158 /* All other completion status cause the IO to be complete. If a NAK
1226 * All other completion status cause the IO to be complete. If a NAK 1159 * was received, then it is up to the user to retry the request.
1227 * was received, then it is up to the user to retry the request. */ 1160 */
1228 scic_sds_request_set_status( 1161 scic_sds_request_set_status(sci_req,
1229 sci_req,
1230 SCU_NORMALIZE_COMPLETION_STATUS(completion_code), 1162 SCU_NORMALIZE_COMPLETION_STATUS(completion_code),
1231 SCI_FAILURE_CONTROLLER_SPECIFIC_IO_ERR 1163 SCI_FAILURE_CONTROLLER_SPECIFIC_IO_ERR);
1232 );
1233 1164
1234 sci_base_state_machine_change_state(&sci_req->state_machine, 1165 sci_base_state_machine_change_state(&sci_req->state_machine,
1235 SCI_BASE_REQUEST_STATE_COMPLETED); 1166 SCI_BASE_REQUEST_STATE_COMPLETED);
@@ -1239,27 +1170,15 @@ static enum sci_status scic_sds_ssp_task_request_await_tc_completion_tc_completi
1239 return SCI_SUCCESS; 1170 return SCI_SUCCESS;
1240} 1171}
1241 1172
1242/** 1173static enum sci_status smp_request_await_response_tc_event(struct scic_sds_request *sci_req,
1243 * This method processes an abnormal TC completion while the SMP request is 1174 u32 completion_code)
1244 * waiting for a response frame. It decides what happened to the IO based
1245 * on TC completion status.
1246 * @sci_req: This parameter specifies the request for which the TC
1247 * completion was received.
1248 * @completion_code: This parameter indicates the completion status information
1249 * for the TC.
1250 *
1251 * Indicate if the tc completion handler was successful. SCI_SUCCESS currently
1252 * this method always returns success.
1253 */
1254static enum sci_status scic_sds_smp_request_await_response_tc_completion_handler(
1255 struct scic_sds_request *sci_req,
1256 u32 completion_code)
1257{ 1175{
1258 switch (SCU_GET_COMPLETION_TL_STATUS(completion_code)) { 1176 switch (SCU_GET_COMPLETION_TL_STATUS(completion_code)) {
1259 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_GOOD): 1177 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_GOOD):
1260 /* 1178 /* In the AWAIT RESPONSE state, any TC completion is
1261 * In the AWAIT RESPONSE state, any TC completion is unexpected. 1179 * unexpected. but if the TC has success status, we
1262 * but if the TC has success status, we complete the IO anyway. */ 1180 * complete the IO anyway.
1181 */
1263 scic_sds_request_set_status(sci_req, SCU_TASK_DONE_GOOD, 1182 scic_sds_request_set_status(sci_req, SCU_TASK_DONE_GOOD,
1264 SCI_SUCCESS); 1183 SCI_SUCCESS);
1265 1184
@@ -1271,11 +1190,13 @@ static enum sci_status scic_sds_smp_request_await_response_tc_completion_handler
1271 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_SMP_UFI_ERR): 1190 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_SMP_UFI_ERR):
1272 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_SMP_FRM_TYPE_ERR): 1191 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_SMP_FRM_TYPE_ERR):
1273 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_SMP_LL_RX_ERR): 1192 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_SMP_LL_RX_ERR):
1274 /* 1193 /* These status has been seen in a specific LSI
1275 * These status has been seen in a specific LSI expander, which sometimes 1194 * expander, which sometimes is not able to send smp
1276 * is not able to send smp response within 2 ms. This causes our hardware 1195 * response within 2 ms. This causes our hardware break
1277 * break the connection and set TC completion with one of these SMP_XXX_XX_ERR 1196 * the connection and set TC completion with one of
1278 * status. For these type of error, we ask scic user to retry the request. */ 1197 * these SMP_XXX_XX_ERR status. For these type of error,
1198 * we ask scic user to retry the request.
1199 */
1279 scic_sds_request_set_status(sci_req, SCU_TASK_DONE_SMP_RESP_TO_ERR, 1200 scic_sds_request_set_status(sci_req, SCU_TASK_DONE_SMP_RESP_TO_ERR,
1280 SCI_FAILURE_RETRY_REQUIRED); 1201 SCI_FAILURE_RETRY_REQUIRED);
1281 1202
@@ -1284,14 +1205,12 @@ static enum sci_status scic_sds_smp_request_await_response_tc_completion_handler
1284 break; 1205 break;
1285 1206
1286 default: 1207 default:
1287 /* 1208 /* All other completion status cause the IO to be complete. If a NAK
1288 * All other completion status cause the IO to be complete. If a NAK 1209 * was received, then it is up to the user to retry the request
1289 * was received, then it is up to the user to retry the request. */ 1210 */
1290 scic_sds_request_set_status( 1211 scic_sds_request_set_status(sci_req,
1291 sci_req, 1212 SCU_NORMALIZE_COMPLETION_STATUS(completion_code),
1292 SCU_NORMALIZE_COMPLETION_STATUS(completion_code), 1213 SCI_FAILURE_CONTROLLER_SPECIFIC_IO_ERR);
1293 SCI_FAILURE_CONTROLLER_SPECIFIC_IO_ERR
1294 );
1295 1214
1296 sci_base_state_machine_change_state(&sci_req->state_machine, 1215 sci_base_state_machine_change_state(&sci_req->state_machine,
1297 SCI_BASE_REQUEST_STATE_COMPLETED); 1216 SCI_BASE_REQUEST_STATE_COMPLETED);
@@ -1301,22 +1220,8 @@ static enum sci_status scic_sds_smp_request_await_response_tc_completion_handler
1301 return SCI_SUCCESS; 1220 return SCI_SUCCESS;
1302} 1221}
1303 1222
1304/** 1223static enum sci_status smp_request_await_tc_event(struct scic_sds_request *sci_req,
1305 * This method processes the completions transport layer (TL) status to 1224 u32 completion_code)
1306 * determine if the SMP request was sent successfully. If the SMP request
1307 * was sent successfully, then the state for the SMP request transits to
1308 * waiting for a response frame.
1309 * @sci_req: This parameter specifies the request for which the TC
1310 * completion was received.
1311 * @completion_code: This parameter indicates the completion status information
1312 * for the TC.
1313 *
1314 * Indicate if the tc completion handler was successful. SCI_SUCCESS currently
1315 * this method always returns success.
1316 */
1317static enum sci_status scic_sds_smp_request_await_tc_completion_tc_completion_handler(
1318 struct scic_sds_request *sci_req,
1319 u32 completion_code)
1320{ 1225{
1321 switch (SCU_GET_COMPLETION_TL_STATUS(completion_code)) { 1226 switch (SCU_GET_COMPLETION_TL_STATUS(completion_code)) {
1322 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_GOOD): 1227 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_GOOD):
@@ -1326,20 +1231,17 @@ static enum sci_status scic_sds_smp_request_await_tc_completion_tc_completion_ha
1326 sci_base_state_machine_change_state(&sci_req->state_machine, 1231 sci_base_state_machine_change_state(&sci_req->state_machine,
1327 SCI_BASE_REQUEST_STATE_COMPLETED); 1232 SCI_BASE_REQUEST_STATE_COMPLETED);
1328 break; 1233 break;
1329
1330 default: 1234 default:
1331 /* 1235 /* All other completion status cause the IO to be
1332 * All other completion status cause the IO to be complete. If a NAK 1236 * complete. If a NAK was received, then it is up to
1333 * was received, then it is up to the user to retry the request. */ 1237 * the user to retry the request.
1334 scic_sds_request_set_status( 1238 */
1335 sci_req, 1239 scic_sds_request_set_status(sci_req,
1336 SCU_NORMALIZE_COMPLETION_STATUS(completion_code), 1240 SCU_NORMALIZE_COMPLETION_STATUS(completion_code),
1337 SCI_FAILURE_CONTROLLER_SPECIFIC_IO_ERR 1241 SCI_FAILURE_CONTROLLER_SPECIFIC_IO_ERR);
1338 );
1339 1242
1340 sci_base_state_machine_change_state( 1243 sci_base_state_machine_change_state(&sci_req->state_machine,
1341 &sci_req->state_machine, 1244 SCI_BASE_REQUEST_STATE_COMPLETED);
1342 SCI_BASE_REQUEST_STATE_COMPLETED);
1343 break; 1245 break;
1344 } 1246 }
1345 1247
@@ -1400,44 +1302,29 @@ static struct scu_sgl_element *scic_sds_stp_request_pio_get_next_sgl(struct scic
1400 return current_sgl; 1302 return current_sgl;
1401} 1303}
1402 1304
1403/** 1305static enum sci_status stp_request_non_data_await_h2d_tc_event(struct scic_sds_request *sci_req,
1404 * 1306 u32 completion_code)
1405 * @sci_req:
1406 * @completion_code:
1407 *
1408 * This method processes a TC completion. The expected TC completion is for
1409 * the transmission of the H2D register FIS containing the SATA/STP non-data
1410 * request. This method always successfully processes the TC completion.
1411 * SCI_SUCCESS This value is always returned.
1412 */
1413static enum sci_status scic_sds_stp_request_non_data_await_h2d_tc_completion_handler(
1414 struct scic_sds_request *sci_req,
1415 u32 completion_code)
1416{ 1307{
1417 switch (SCU_GET_COMPLETION_TL_STATUS(completion_code)) { 1308 switch (SCU_GET_COMPLETION_TL_STATUS(completion_code)) {
1418 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_GOOD): 1309 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_GOOD):
1419 scic_sds_request_set_status( 1310 scic_sds_request_set_status(sci_req, SCU_TASK_DONE_GOOD,
1420 sci_req, SCU_TASK_DONE_GOOD, SCI_SUCCESS 1311 SCI_SUCCESS);
1421 );
1422 1312
1423 sci_base_state_machine_change_state( 1313 sci_base_state_machine_change_state(&sci_req->state_machine,
1424 &sci_req->state_machine, 1314 SCIC_SDS_STP_REQUEST_STARTED_NON_DATA_AWAIT_D2H_SUBSTATE);
1425 SCIC_SDS_STP_REQUEST_STARTED_NON_DATA_AWAIT_D2H_SUBSTATE
1426 );
1427 break; 1315 break;
1428 1316
1429 default: 1317 default:
1430 /* 1318 /* All other completion status cause the IO to be
1431 * All other completion status cause the IO to be complete. If a NAK 1319 * complete. If a NAK was received, then it is up to
1432 * was received, then it is up to the user to retry the request. */ 1320 * the user to retry the request.
1433 scic_sds_request_set_status( 1321 */
1434 sci_req, 1322 scic_sds_request_set_status(sci_req,
1435 SCU_NORMALIZE_COMPLETION_STATUS(completion_code), 1323 SCU_NORMALIZE_COMPLETION_STATUS(completion_code),
1436 SCI_FAILURE_CONTROLLER_SPECIFIC_IO_ERR 1324 SCI_FAILURE_CONTROLLER_SPECIFIC_IO_ERR);
1437 );
1438 1325
1439 sci_base_state_machine_change_state( 1326 sci_base_state_machine_change_state(&sci_req->state_machine,
1440 &sci_req->state_machine, SCI_BASE_REQUEST_STATE_COMPLETED); 1327 SCI_BASE_REQUEST_STATE_COMPLETED);
1441 break; 1328 break;
1442 } 1329 }
1443 1330
@@ -1613,55 +1500,38 @@ static enum sci_status scic_sds_stp_request_pio_data_in_copy_data(
1613 return status; 1500 return status;
1614} 1501}
1615 1502
1616/** 1503static enum sci_status stp_request_pio_await_h2d_completion_tc_event(struct scic_sds_request *sci_req,
1617 * 1504 u32 completion_code)
1618 * @sci_req:
1619 * @completion_code:
1620 *
1621 * enum sci_status
1622 */
1623static enum sci_status scic_sds_stp_request_pio_await_h2d_completion_tc_completion_handler(
1624 struct scic_sds_request *sci_req,
1625 u32 completion_code)
1626{ 1505{
1627 enum sci_status status = SCI_SUCCESS; 1506 enum sci_status status = SCI_SUCCESS;
1628 1507
1629 switch (SCU_GET_COMPLETION_TL_STATUS(completion_code)) { 1508 switch (SCU_GET_COMPLETION_TL_STATUS(completion_code)) {
1630 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_GOOD): 1509 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_GOOD):
1631 scic_sds_request_set_status( 1510 scic_sds_request_set_status(sci_req, SCU_TASK_DONE_GOOD, SCI_SUCCESS);
1632 sci_req, SCU_TASK_DONE_GOOD, SCI_SUCCESS
1633 );
1634 1511
1635 sci_base_state_machine_change_state( 1512 sci_base_state_machine_change_state(&sci_req->state_machine,
1636 &sci_req->state_machine, 1513 SCIC_SDS_STP_REQUEST_STARTED_PIO_AWAIT_FRAME_SUBSTATE);
1637 SCIC_SDS_STP_REQUEST_STARTED_PIO_AWAIT_FRAME_SUBSTATE
1638 );
1639 break; 1514 break;
1640 1515
1641 default: 1516 default:
1642 /* 1517 /* All other completion status cause the IO to be
1643 * All other completion status cause the IO to be complete. If a NAK 1518 * complete. If a NAK was received, then it is up to
1644 * was received, then it is up to the user to retry the request. */ 1519 * the user to retry the request.
1645 scic_sds_request_set_status( 1520 */
1646 sci_req, 1521 scic_sds_request_set_status(sci_req,
1647 SCU_NORMALIZE_COMPLETION_STATUS(completion_code), 1522 SCU_NORMALIZE_COMPLETION_STATUS(completion_code),
1648 SCI_FAILURE_CONTROLLER_SPECIFIC_IO_ERR 1523 SCI_FAILURE_CONTROLLER_SPECIFIC_IO_ERR);
1649 );
1650 1524
1651 sci_base_state_machine_change_state( 1525 sci_base_state_machine_change_state(&sci_req->state_machine,
1652 &sci_req->state_machine, 1526 SCI_BASE_REQUEST_STATE_COMPLETED);
1653 SCI_BASE_REQUEST_STATE_COMPLETED
1654 );
1655 break; 1527 break;
1656 } 1528 }
1657 1529
1658 return status; 1530 return status;
1659} 1531}
1660 1532
1661static enum sci_status scic_sds_stp_request_pio_data_out_await_data_transmit_completion_tc_completion_handler( 1533static enum sci_status pio_data_out_tx_done_tc_event(struct scic_sds_request *sci_req,
1662 1534 u32 completion_code)
1663 struct scic_sds_request *sci_req,
1664 u32 completion_code)
1665{ 1535{
1666 enum sci_status status = SCI_SUCCESS; 1536 enum sci_status status = SCI_SUCCESS;
1667 bool all_frames_transferred = false; 1537 bool all_frames_transferred = false;
@@ -1695,7 +1565,6 @@ static enum sci_status scic_sds_stp_request_pio_data_out_await_data_transmit_com
1695 ); 1565 );
1696 } 1566 }
1697 break; 1567 break;
1698
1699 default: 1568 default:
1700 /* 1569 /*
1701 * All other completion status cause the IO to be complete. If a NAK 1570 * All other completion status cause the IO to be complete. If a NAK
@@ -2209,12 +2078,8 @@ enum sci_status scic_sds_io_request_frame_handler(struct scic_sds_request *sci_r
2209 } 2078 }
2210} 2079}
2211 2080
2212 2081static enum sci_status stp_request_udma_await_tc_event(struct scic_sds_request *sci_req,
2213 2082 u32 completion_code)
2214
2215static enum sci_status scic_sds_stp_request_udma_await_tc_completion_tc_completion_handler(
2216 struct scic_sds_request *sci_req,
2217 u32 completion_code)
2218{ 2083{
2219 enum sci_status status = SCI_SUCCESS; 2084 enum sci_status status = SCI_SUCCESS;
2220 2085
@@ -2226,9 +2091,10 @@ static enum sci_status scic_sds_stp_request_udma_await_tc_completion_tc_completi
2226 break; 2091 break;
2227 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_UNEXP_FIS): 2092 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_UNEXP_FIS):
2228 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_REG_ERR): 2093 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_REG_ERR):
2229 /* 2094 /* We must check ther response buffer to see if the D2H
2230 * We must check ther response buffer to see if the D2H Register FIS was 2095 * Register FIS was received before we got the TC
2231 * received before we got the TC completion. */ 2096 * completion.
2097 */
2232 if (sci_req->stp.rsp.fis_type == FIS_REGD2H) { 2098 if (sci_req->stp.rsp.fis_type == FIS_REGD2H) {
2233 scic_sds_remote_device_suspend(sci_req->target_device, 2099 scic_sds_remote_device_suspend(sci_req->target_device,
2234 SCU_EVENT_SPECIFIC(SCU_NORMALIZE_COMPLETION_STATUS(completion_code))); 2100 SCU_EVENT_SPECIFIC(SCU_NORMALIZE_COMPLETION_STATUS(completion_code)));
@@ -2237,18 +2103,22 @@ static enum sci_status scic_sds_stp_request_udma_await_tc_completion_tc_completi
2237 SCU_TASK_DONE_CHECK_RESPONSE, 2103 SCU_TASK_DONE_CHECK_RESPONSE,
2238 SCI_FAILURE_IO_RESPONSE_VALID); 2104 SCI_FAILURE_IO_RESPONSE_VALID);
2239 } else { 2105 } else {
2240 /* 2106 /* If we have an error completion status for the
2241 * If we have an error completion status for the TC then we can expect a 2107 * TC then we can expect a D2H register FIS from
2242 * D2H register FIS from the device so we must change state to wait for it */ 2108 * the device so we must change state to wait
2109 * for it
2110 */
2243 sci_base_state_machine_change_state(&sci_req->state_machine, 2111 sci_base_state_machine_change_state(&sci_req->state_machine,
2244 SCIC_SDS_STP_REQUEST_STARTED_UDMA_AWAIT_D2H_REG_FIS_SUBSTATE); 2112 SCIC_SDS_STP_REQUEST_STARTED_UDMA_AWAIT_D2H_REG_FIS_SUBSTATE);
2245 } 2113 }
2246 break; 2114 break;
2247 2115
2248 /* 2116 /* TODO Check to see if any of these completion status need to
2249 * / @todo Check to see if any of these completion status need to wait for 2117 * wait for the device to host register fis.
2250 * / the device to host register fis. */ 2118 */
2251 /* / @todo We can retry the command for SCU_TASK_DONE_CMD_LL_R_ERR - this comes only for B0 */ 2119 /* TODO We can retry the command for SCU_TASK_DONE_CMD_LL_R_ERR
2120 * - this comes only for B0
2121 */
2252 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_INV_FIS_LEN): 2122 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_INV_FIS_LEN):
2253 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_MAX_PLD_ERR): 2123 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_MAX_PLD_ERR):
2254 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_LL_R_ERR): 2124 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_LL_R_ERR):
@@ -2268,61 +2138,35 @@ static enum sci_status scic_sds_stp_request_udma_await_tc_completion_tc_completi
2268 return status; 2138 return status;
2269} 2139}
2270 2140
2271/** 2141static enum sci_status stp_request_soft_reset_await_h2d_asserted_tc_event(struct scic_sds_request *sci_req,
2272 * 2142 u32 completion_code)
2273 * @sci_req:
2274 * @completion_code:
2275 *
2276 * This method processes a TC completion. The expected TC completion is for
2277 * the transmission of the H2D register FIS containing the SATA/STP non-data
2278 * request. This method always successfully processes the TC completion.
2279 * SCI_SUCCESS This value is always returned.
2280 */
2281static enum sci_status scic_sds_stp_request_soft_reset_await_h2d_asserted_tc_completion_handler(
2282 struct scic_sds_request *sci_req,
2283 u32 completion_code)
2284{ 2143{
2285 switch (SCU_GET_COMPLETION_TL_STATUS(completion_code)) { 2144 switch (SCU_GET_COMPLETION_TL_STATUS(completion_code)) {
2286 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_GOOD): 2145 case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_GOOD):
2287 scic_sds_request_set_status( 2146 scic_sds_request_set_status(sci_req, SCU_TASK_DONE_GOOD,
2288 sci_req, SCU_TASK_DONE_GOOD, SCI_SUCCESS 2147 SCI_SUCCESS);
2289 );
2290 2148
2291 sci_base_state_machine_change_state( 2149 sci_base_state_machine_change_state(&sci_req->state_machine,
2292 &sci_req->state_machine, 2150 SCIC_SDS_STP_REQUEST_STARTED_SOFT_RESET_AWAIT_H2D_DIAGNOSTIC_COMPLETION_SUBSTATE);
2293 SCIC_SDS_STP_REQUEST_STARTED_SOFT_RESET_AWAIT_H2D_DIAGNOSTIC_COMPLETION_SUBSTATE
2294 );
2295 break; 2151 break;
2296 2152
2297 default: 2153 default:
2298 /* 2154 /*
2299 * All other completion status cause the IO to be complete. If a NAK 2155 * All other completion status cause the IO to be complete. If a NAK
2300 * was received, then it is up to the user to retry the request. */ 2156 * was received, then it is up to the user to retry the request. */
2301 scic_sds_request_set_status( 2157 scic_sds_request_set_status(sci_req,
2302 sci_req,
2303 SCU_NORMALIZE_COMPLETION_STATUS(completion_code), 2158 SCU_NORMALIZE_COMPLETION_STATUS(completion_code),
2304 SCI_FAILURE_CONTROLLER_SPECIFIC_IO_ERR 2159 SCI_FAILURE_CONTROLLER_SPECIFIC_IO_ERR);
2305 );
2306 2160
2307 sci_base_state_machine_change_state( 2161 sci_base_state_machine_change_state(&sci_req->state_machine,
2308 &sci_req->state_machine, SCI_BASE_REQUEST_STATE_COMPLETED); 2162 SCI_BASE_REQUEST_STATE_COMPLETED);
2309 break; 2163 break;
2310 } 2164 }
2311 2165
2312 return SCI_SUCCESS; 2166 return SCI_SUCCESS;
2313} 2167}
2314 2168
2315/** 2169static enum sci_status stp_request_soft_reset_await_h2d_diagnostic_tc_event(
2316 *
2317 * @sci_req:
2318 * @completion_code:
2319 *
2320 * This method processes a TC completion. The expected TC completion is for
2321 * the transmission of the H2D register FIS containing the SATA/STP non-data
2322 * request. This method always successfully processes the TC completion.
2323 * SCI_SUCCESS This value is always returned.
2324 */
2325static enum sci_status scic_sds_stp_request_soft_reset_await_h2d_diagnostic_tc_completion_handler(
2326 struct scic_sds_request *sci_req, 2170 struct scic_sds_request *sci_req,
2327 u32 completion_code) 2171 u32 completion_code)
2328{ 2172{
@@ -2336,70 +2180,89 @@ static enum sci_status scic_sds_stp_request_soft_reset_await_h2d_diagnostic_tc_c
2336 break; 2180 break;
2337 2181
2338 default: 2182 default:
2339 /* 2183 /* All other completion status cause the IO to be complete. If
2340 * All other completion status cause the IO to be complete. If a NAK 2184 * a NAK was received, then it is up to the user to retry the
2341 * was received, then it is up to the user to retry the request. */ 2185 * request.
2342 scic_sds_request_set_status( 2186 */
2343 sci_req, 2187 scic_sds_request_set_status(sci_req,
2344 SCU_NORMALIZE_COMPLETION_STATUS(completion_code), 2188 SCU_NORMALIZE_COMPLETION_STATUS(completion_code),
2345 SCI_FAILURE_CONTROLLER_SPECIFIC_IO_ERR 2189 SCI_FAILURE_CONTROLLER_SPECIFIC_IO_ERR);
2346 );
2347 2190
2348 sci_base_state_machine_change_state(&sci_req->state_machine, 2191 sci_base_state_machine_change_state(&sci_req->state_machine,
2349 SCI_BASE_REQUEST_STATE_COMPLETED); 2192 SCI_BASE_REQUEST_STATE_COMPLETED);
2350 break; 2193 break;
2351 } 2194 }
2352 2195
2353 return SCI_SUCCESS; 2196 return SCI_SUCCESS;
2354} 2197}
2355 2198
2199enum sci_status
2200scic_sds_io_request_tc_completion(struct scic_sds_request *sci_req, u32 completion_code)
2201{
2202 enum sci_base_request_states state;
2203 struct scic_sds_controller *scic = sci_req->owning_controller;
2204
2205 state = sci_req->state_machine.current_state_id;
2206
2207 switch (state) {
2208 case SCI_BASE_REQUEST_STATE_STARTED:
2209 return request_started_state_tc_event(sci_req, completion_code);
2210 case SCIC_SDS_IO_REQUEST_STARTED_TASK_MGMT_SUBSTATE_AWAIT_TC_COMPLETION:
2211 return ssp_task_request_await_tc_event(sci_req, completion_code);
2212 case SCIC_SDS_SMP_REQUEST_STARTED_SUBSTATE_AWAIT_RESPONSE:
2213 return smp_request_await_response_tc_event(sci_req, completion_code);
2214 case SCIC_SDS_SMP_REQUEST_STARTED_SUBSTATE_AWAIT_TC_COMPLETION:
2215 return smp_request_await_tc_event(sci_req, completion_code);
2216 case SCIC_SDS_STP_REQUEST_STARTED_UDMA_AWAIT_TC_COMPLETION_SUBSTATE:
2217 return stp_request_udma_await_tc_event(sci_req, completion_code);
2218 case SCIC_SDS_STP_REQUEST_STARTED_NON_DATA_AWAIT_H2D_COMPLETION_SUBSTATE:
2219 return stp_request_non_data_await_h2d_tc_event(sci_req, completion_code);
2220 case SCIC_SDS_STP_REQUEST_STARTED_PIO_AWAIT_H2D_COMPLETION_SUBSTATE:
2221 return stp_request_pio_await_h2d_completion_tc_event(sci_req, completion_code);
2222 case SCIC_SDS_STP_REQUEST_STARTED_PIO_DATA_OUT_TRANSMIT_DATA_SUBSTATE:
2223 return pio_data_out_tx_done_tc_event(sci_req, completion_code);
2224 case SCIC_SDS_STP_REQUEST_STARTED_SOFT_RESET_AWAIT_H2D_ASSERTED_COMPLETION_SUBSTATE:
2225 return stp_request_soft_reset_await_h2d_asserted_tc_event(sci_req, completion_code);
2226 case SCIC_SDS_STP_REQUEST_STARTED_SOFT_RESET_AWAIT_H2D_DIAGNOSTIC_COMPLETION_SUBSTATE:
2227 return stp_request_soft_reset_await_h2d_diagnostic_tc_event(sci_req, completion_code);
2228 case SCI_BASE_REQUEST_STATE_ABORTING:
2229 return request_aborting_state_tc_event(sci_req, completion_code);
2230 default:
2231 dev_warn(scic_to_dev(scic),
2232 "%s: SCIC IO Request given task completion notification %x "
2233 "while in wrong state %d\n", __func__, completion_code,
2234 state);
2235 return SCI_FAILURE_INVALID_STATE;
2236 }
2237}
2238
2239
2240
2356static const struct scic_sds_io_request_state_handler scic_sds_request_state_handler_table[] = { 2241static const struct scic_sds_io_request_state_handler scic_sds_request_state_handler_table[] = {
2357 [SCI_BASE_REQUEST_STATE_INITIAL] = {}, 2242 [SCI_BASE_REQUEST_STATE_INITIAL] = {},
2358 [SCI_BASE_REQUEST_STATE_CONSTRUCTED] = {}, 2243 [SCI_BASE_REQUEST_STATE_CONSTRUCTED] = {},
2359 [SCI_BASE_REQUEST_STATE_STARTED] = { 2244 [SCI_BASE_REQUEST_STATE_STARTED] = { },
2360 .tc_completion_handler = scic_sds_request_started_state_tc_completion_handler, 2245 [SCIC_SDS_IO_REQUEST_STARTED_TASK_MGMT_SUBSTATE_AWAIT_TC_COMPLETION] = { },
2361 },
2362 [SCIC_SDS_IO_REQUEST_STARTED_TASK_MGMT_SUBSTATE_AWAIT_TC_COMPLETION] = {
2363 .tc_completion_handler = scic_sds_ssp_task_request_await_tc_completion_tc_completion_handler,
2364 },
2365 [SCIC_SDS_IO_REQUEST_STARTED_TASK_MGMT_SUBSTATE_AWAIT_TC_RESPONSE] = { }, 2246 [SCIC_SDS_IO_REQUEST_STARTED_TASK_MGMT_SUBSTATE_AWAIT_TC_RESPONSE] = { },
2366 [SCIC_SDS_SMP_REQUEST_STARTED_SUBSTATE_AWAIT_RESPONSE] = { 2247 [SCIC_SDS_SMP_REQUEST_STARTED_SUBSTATE_AWAIT_RESPONSE] = { },
2367 .tc_completion_handler = scic_sds_smp_request_await_response_tc_completion_handler, 2248 [SCIC_SDS_SMP_REQUEST_STARTED_SUBSTATE_AWAIT_TC_COMPLETION] = { },
2368 }, 2249 [SCIC_SDS_STP_REQUEST_STARTED_UDMA_AWAIT_TC_COMPLETION_SUBSTATE] = { },
2369 [SCIC_SDS_SMP_REQUEST_STARTED_SUBSTATE_AWAIT_TC_COMPLETION] = {
2370 .tc_completion_handler = scic_sds_smp_request_await_tc_completion_tc_completion_handler,
2371 },
2372 [SCIC_SDS_STP_REQUEST_STARTED_UDMA_AWAIT_TC_COMPLETION_SUBSTATE] = {
2373 .tc_completion_handler = scic_sds_stp_request_udma_await_tc_completion_tc_completion_handler,
2374 },
2375 [SCIC_SDS_STP_REQUEST_STARTED_UDMA_AWAIT_D2H_REG_FIS_SUBSTATE] = { }, 2250 [SCIC_SDS_STP_REQUEST_STARTED_UDMA_AWAIT_D2H_REG_FIS_SUBSTATE] = { },
2376 [SCIC_SDS_STP_REQUEST_STARTED_NON_DATA_AWAIT_H2D_COMPLETION_SUBSTATE] = { 2251 [SCIC_SDS_STP_REQUEST_STARTED_NON_DATA_AWAIT_H2D_COMPLETION_SUBSTATE] = { },
2377 .tc_completion_handler = scic_sds_stp_request_non_data_await_h2d_tc_completion_handler,
2378 },
2379 [SCIC_SDS_STP_REQUEST_STARTED_NON_DATA_AWAIT_D2H_SUBSTATE] = { }, 2252 [SCIC_SDS_STP_REQUEST_STARTED_NON_DATA_AWAIT_D2H_SUBSTATE] = { },
2380 [SCIC_SDS_STP_REQUEST_STARTED_PIO_AWAIT_H2D_COMPLETION_SUBSTATE] = { 2253 [SCIC_SDS_STP_REQUEST_STARTED_PIO_AWAIT_H2D_COMPLETION_SUBSTATE] = { },
2381 .tc_completion_handler = scic_sds_stp_request_pio_await_h2d_completion_tc_completion_handler,
2382 },
2383 [SCIC_SDS_STP_REQUEST_STARTED_PIO_AWAIT_FRAME_SUBSTATE] = { }, 2254 [SCIC_SDS_STP_REQUEST_STARTED_PIO_AWAIT_FRAME_SUBSTATE] = { },
2384 [SCIC_SDS_STP_REQUEST_STARTED_PIO_DATA_IN_AWAIT_DATA_SUBSTATE] = { 2255 [SCIC_SDS_STP_REQUEST_STARTED_PIO_DATA_IN_AWAIT_DATA_SUBSTATE] = {
2385 .event_handler = scic_sds_stp_request_pio_data_in_await_data_event_handler, 2256 .event_handler = scic_sds_stp_request_pio_data_in_await_data_event_handler,
2386 }, 2257 },
2387 [SCIC_SDS_STP_REQUEST_STARTED_PIO_DATA_OUT_TRANSMIT_DATA_SUBSTATE] = { 2258 [SCIC_SDS_STP_REQUEST_STARTED_PIO_DATA_OUT_TRANSMIT_DATA_SUBSTATE] = { },
2388 .tc_completion_handler = scic_sds_stp_request_pio_data_out_await_data_transmit_completion_tc_completion_handler, 2259 [SCIC_SDS_STP_REQUEST_STARTED_SOFT_RESET_AWAIT_H2D_ASSERTED_COMPLETION_SUBSTATE] = { },
2389 }, 2260 [SCIC_SDS_STP_REQUEST_STARTED_SOFT_RESET_AWAIT_H2D_DIAGNOSTIC_COMPLETION_SUBSTATE] = { },
2390 [SCIC_SDS_STP_REQUEST_STARTED_SOFT_RESET_AWAIT_H2D_ASSERTED_COMPLETION_SUBSTATE] = {
2391 .tc_completion_handler = scic_sds_stp_request_soft_reset_await_h2d_asserted_tc_completion_handler,
2392 },
2393 [SCIC_SDS_STP_REQUEST_STARTED_SOFT_RESET_AWAIT_H2D_DIAGNOSTIC_COMPLETION_SUBSTATE] = {
2394 .tc_completion_handler = scic_sds_stp_request_soft_reset_await_h2d_diagnostic_tc_completion_handler,
2395 },
2396 [SCIC_SDS_STP_REQUEST_STARTED_SOFT_RESET_AWAIT_D2H_RESPONSE_FRAME_SUBSTATE] = { }, 2261 [SCIC_SDS_STP_REQUEST_STARTED_SOFT_RESET_AWAIT_D2H_RESPONSE_FRAME_SUBSTATE] = { },
2397 [SCI_BASE_REQUEST_STATE_COMPLETED] = { 2262 [SCI_BASE_REQUEST_STATE_COMPLETED] = {
2398 .complete_handler = scic_sds_request_completed_state_complete_handler, 2263 .complete_handler = scic_sds_request_completed_state_complete_handler,
2399 }, 2264 },
2400 [SCI_BASE_REQUEST_STATE_ABORTING] = { 2265 [SCI_BASE_REQUEST_STATE_ABORTING] = { },
2401 .tc_completion_handler = scic_sds_request_aborting_state_tc_completion_handler,
2402 },
2403 [SCI_BASE_REQUEST_STATE_FINAL] = { }, 2266 [SCI_BASE_REQUEST_STATE_FINAL] = { },
2404}; 2267};
2405 2268
diff --git a/drivers/scsi/isci/request.h b/drivers/scsi/isci/request.h
index c9070e708948..e13ca3f7c8d7 100644
--- a/drivers/scsi/isci/request.h
+++ b/drivers/scsi/isci/request.h
@@ -426,8 +426,6 @@ typedef enum sci_status (*scic_sds_io_request_handler_t)
426 (struct scic_sds_request *request); 426 (struct scic_sds_request *request);
427typedef enum sci_status (*scic_sds_io_request_event_handler_t) 427typedef enum sci_status (*scic_sds_io_request_event_handler_t)
428 (struct scic_sds_request *req, u32 event); 428 (struct scic_sds_request *req, u32 event);
429typedef enum sci_status (*scic_sds_io_request_task_completion_handler_t)
430 (struct scic_sds_request *req, u32 completion_code);
431 429
432/** 430/**
433 * struct scic_sds_io_request_state_handler - This is the SDS core definition 431 * struct scic_sds_io_request_state_handler - This is the SDS core definition
@@ -442,7 +440,6 @@ struct scic_sds_io_request_state_handler {
442 */ 440 */
443 scic_sds_io_request_handler_t complete_handler; 441 scic_sds_io_request_handler_t complete_handler;
444 442
445 scic_sds_io_request_task_completion_handler_t tc_completion_handler;
446 scic_sds_io_request_event_handler_t event_handler; 443 scic_sds_io_request_event_handler_t event_handler;
447}; 444};
448 445