aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/isci/request.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/isci/request.c')
-rw-r--r--drivers/scsi/isci/request.c531
1 files changed, 197 insertions, 334 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