xref: /linux/drivers/scsi/isci/request.c (revision 06d07429858317ded2db7986113a9e0129cd599b)
1 /*
2  * This file is provided under a dual BSD/GPLv2 license.  When using or
3  * redistributing this file, you may do so under either license.
4  *
5  * GPL LICENSE SUMMARY
6  *
7  * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of version 2 of the GNU General Public License as
11  * published by the Free Software Foundation.
12  *
13  * This program is distributed in the hope that it will be useful, but
14  * WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
21  * The full GNU General Public License is included in this distribution
22  * in the file called LICENSE.GPL.
23  *
24  * BSD LICENSE
25  *
26  * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
27  * All rights reserved.
28  *
29  * Redistribution and use in source and binary forms, with or without
30  * modification, are permitted provided that the following conditions
31  * are met:
32  *
33  *   * Redistributions of source code must retain the above copyright
34  *     notice, this list of conditions and the following disclaimer.
35  *   * Redistributions in binary form must reproduce the above copyright
36  *     notice, this list of conditions and the following disclaimer in
37  *     the documentation and/or other materials provided with the
38  *     distribution.
39  *   * Neither the name of Intel Corporation nor the names of its
40  *     contributors may be used to endorse or promote products derived
41  *     from this software without specific prior written permission.
42  *
43  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
44  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
45  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
46  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
47  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
48  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
49  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
50  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
51  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
52  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
53  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
54  */
55 
56 #include <scsi/scsi_cmnd.h>
57 #include "isci.h"
58 #include "task.h"
59 #include "request.h"
60 #include "scu_completion_codes.h"
61 #include "scu_event_codes.h"
62 #include "sas.h"
63 
64 #undef C
65 #define C(a) (#a)
req_state_name(enum sci_base_request_states state)66 const char *req_state_name(enum sci_base_request_states state)
67 {
68 	static const char * const strings[] = REQUEST_STATES;
69 
70 	return strings[state];
71 }
72 #undef C
73 
to_sgl_element_pair(struct isci_request * ireq,int idx)74 static struct scu_sgl_element_pair *to_sgl_element_pair(struct isci_request *ireq,
75 							int idx)
76 {
77 	if (idx == 0)
78 		return &ireq->tc->sgl_pair_ab;
79 	else if (idx == 1)
80 		return &ireq->tc->sgl_pair_cd;
81 	else if (idx < 0)
82 		return NULL;
83 	else
84 		return &ireq->sg_table[idx - 2];
85 }
86 
to_sgl_element_pair_dma(struct isci_host * ihost,struct isci_request * ireq,u32 idx)87 static dma_addr_t to_sgl_element_pair_dma(struct isci_host *ihost,
88 					  struct isci_request *ireq, u32 idx)
89 {
90 	u32 offset;
91 
92 	if (idx == 0) {
93 		offset = (void *) &ireq->tc->sgl_pair_ab -
94 			 (void *) &ihost->task_context_table[0];
95 		return ihost->tc_dma + offset;
96 	} else if (idx == 1) {
97 		offset = (void *) &ireq->tc->sgl_pair_cd -
98 			 (void *) &ihost->task_context_table[0];
99 		return ihost->tc_dma + offset;
100 	}
101 
102 	return sci_io_request_get_dma_addr(ireq, &ireq->sg_table[idx - 2]);
103 }
104 
init_sgl_element(struct scu_sgl_element * e,struct scatterlist * sg)105 static void init_sgl_element(struct scu_sgl_element *e, struct scatterlist *sg)
106 {
107 	e->length = sg_dma_len(sg);
108 	e->address_upper = upper_32_bits(sg_dma_address(sg));
109 	e->address_lower = lower_32_bits(sg_dma_address(sg));
110 	e->address_modifier = 0;
111 }
112 
sci_request_build_sgl(struct isci_request * ireq)113 static void sci_request_build_sgl(struct isci_request *ireq)
114 {
115 	struct isci_host *ihost = ireq->isci_host;
116 	struct sas_task *task = isci_request_access_task(ireq);
117 	struct scatterlist *sg = NULL;
118 	dma_addr_t dma_addr;
119 	u32 sg_idx = 0;
120 	struct scu_sgl_element_pair *scu_sg   = NULL;
121 	struct scu_sgl_element_pair *prev_sg  = NULL;
122 
123 	if (task->num_scatter > 0) {
124 		sg = task->scatter;
125 
126 		while (sg) {
127 			scu_sg = to_sgl_element_pair(ireq, sg_idx);
128 			init_sgl_element(&scu_sg->A, sg);
129 			sg = sg_next(sg);
130 			if (sg) {
131 				init_sgl_element(&scu_sg->B, sg);
132 				sg = sg_next(sg);
133 			} else
134 				memset(&scu_sg->B, 0, sizeof(scu_sg->B));
135 
136 			if (prev_sg) {
137 				dma_addr = to_sgl_element_pair_dma(ihost,
138 								   ireq,
139 								   sg_idx);
140 
141 				prev_sg->next_pair_upper =
142 					upper_32_bits(dma_addr);
143 				prev_sg->next_pair_lower =
144 					lower_32_bits(dma_addr);
145 			}
146 
147 			prev_sg = scu_sg;
148 			sg_idx++;
149 		}
150 	} else {	/* handle when no sg */
151 		scu_sg = to_sgl_element_pair(ireq, sg_idx);
152 
153 		dma_addr = dma_map_single(&ihost->pdev->dev,
154 					  task->scatter,
155 					  task->total_xfer_len,
156 					  task->data_dir);
157 
158 		ireq->zero_scatter_daddr = dma_addr;
159 
160 		scu_sg->A.length = task->total_xfer_len;
161 		scu_sg->A.address_upper = upper_32_bits(dma_addr);
162 		scu_sg->A.address_lower = lower_32_bits(dma_addr);
163 	}
164 
165 	if (scu_sg) {
166 		scu_sg->next_pair_upper = 0;
167 		scu_sg->next_pair_lower = 0;
168 	}
169 }
170 
sci_io_request_build_ssp_command_iu(struct isci_request * ireq)171 static void sci_io_request_build_ssp_command_iu(struct isci_request *ireq)
172 {
173 	struct ssp_cmd_iu *cmd_iu;
174 	struct sas_task *task = isci_request_access_task(ireq);
175 
176 	cmd_iu = &ireq->ssp.cmd;
177 
178 	memcpy(cmd_iu->LUN, task->ssp_task.LUN, 8);
179 	cmd_iu->add_cdb_len = 0;
180 	cmd_iu->_r_a = 0;
181 	cmd_iu->_r_b = 0;
182 	cmd_iu->en_fburst = 0; /* unsupported */
183 	cmd_iu->task_prio = 0;
184 	cmd_iu->task_attr = task->ssp_task.task_attr;
185 	cmd_iu->_r_c = 0;
186 
187 	sci_swab32_cpy(&cmd_iu->cdb, task->ssp_task.cmd->cmnd,
188 		       (task->ssp_task.cmd->cmd_len+3) / sizeof(u32));
189 }
190 
sci_task_request_build_ssp_task_iu(struct isci_request * ireq)191 static void sci_task_request_build_ssp_task_iu(struct isci_request *ireq)
192 {
193 	struct ssp_task_iu *task_iu;
194 	struct sas_task *task = isci_request_access_task(ireq);
195 	struct isci_tmf *isci_tmf = isci_request_access_tmf(ireq);
196 
197 	task_iu = &ireq->ssp.tmf;
198 
199 	memset(task_iu, 0, sizeof(struct ssp_task_iu));
200 
201 	memcpy(task_iu->LUN, task->ssp_task.LUN, 8);
202 
203 	task_iu->task_func = isci_tmf->tmf_code;
204 	task_iu->task_tag =
205 		(test_bit(IREQ_TMF, &ireq->flags)) ?
206 		isci_tmf->io_tag :
207 		SCI_CONTROLLER_INVALID_IO_TAG;
208 }
209 
210 /*
211  * This method is will fill in the SCU Task Context for any type of SSP request.
212  */
scu_ssp_request_construct_task_context(struct isci_request * ireq,struct scu_task_context * task_context)213 static void scu_ssp_request_construct_task_context(
214 	struct isci_request *ireq,
215 	struct scu_task_context *task_context)
216 {
217 	dma_addr_t dma_addr;
218 	struct isci_remote_device *idev;
219 	struct isci_port *iport;
220 
221 	idev = ireq->target_device;
222 	iport = idev->owning_port;
223 
224 	/* Fill in the TC with its required data */
225 	task_context->abort = 0;
226 	task_context->priority = 0;
227 	task_context->initiator_request = 1;
228 	task_context->connection_rate = idev->connection_rate;
229 	task_context->protocol_engine_index = ISCI_PEG;
230 	task_context->logical_port_index = iport->physical_port_index;
231 	task_context->protocol_type = SCU_TASK_CONTEXT_PROTOCOL_SSP;
232 	task_context->valid = SCU_TASK_CONTEXT_VALID;
233 	task_context->context_type = SCU_TASK_CONTEXT_TYPE;
234 
235 	task_context->remote_node_index = idev->rnc.remote_node_index;
236 	task_context->command_code = 0;
237 
238 	task_context->link_layer_control = 0;
239 	task_context->do_not_dma_ssp_good_response = 1;
240 	task_context->strict_ordering = 0;
241 	task_context->control_frame = 0;
242 	task_context->timeout_enable = 0;
243 	task_context->block_guard_enable = 0;
244 
245 	task_context->address_modifier = 0;
246 
247 	/* task_context->type.ssp.tag = ireq->io_tag; */
248 	task_context->task_phase = 0x01;
249 
250 	ireq->post_context = (SCU_CONTEXT_COMMAND_REQUEST_TYPE_POST_TC |
251 			      (ISCI_PEG << SCU_CONTEXT_COMMAND_PROTOCOL_ENGINE_GROUP_SHIFT) |
252 			      (iport->physical_port_index <<
253 			       SCU_CONTEXT_COMMAND_LOGICAL_PORT_SHIFT) |
254 			      ISCI_TAG_TCI(ireq->io_tag));
255 
256 	/*
257 	 * Copy the physical address for the command buffer to the
258 	 * SCU Task Context
259 	 */
260 	dma_addr = sci_io_request_get_dma_addr(ireq, &ireq->ssp.cmd);
261 
262 	task_context->command_iu_upper = upper_32_bits(dma_addr);
263 	task_context->command_iu_lower = lower_32_bits(dma_addr);
264 
265 	/*
266 	 * Copy the physical address for the response buffer to the
267 	 * SCU Task Context
268 	 */
269 	dma_addr = sci_io_request_get_dma_addr(ireq, &ireq->ssp.rsp);
270 
271 	task_context->response_iu_upper = upper_32_bits(dma_addr);
272 	task_context->response_iu_lower = lower_32_bits(dma_addr);
273 }
274 
scu_bg_blk_size(struct scsi_device * sdp)275 static u8 scu_bg_blk_size(struct scsi_device *sdp)
276 {
277 	switch (sdp->sector_size) {
278 	case 512:
279 		return 0;
280 	case 1024:
281 		return 1;
282 	case 4096:
283 		return 3;
284 	default:
285 		return 0xff;
286 	}
287 }
288 
scu_dif_bytes(u32 len,u32 sector_size)289 static u32 scu_dif_bytes(u32 len, u32 sector_size)
290 {
291 	return (len >> ilog2(sector_size)) * 8;
292 }
293 
scu_ssp_ireq_dif_insert(struct isci_request * ireq,u8 type,u8 op)294 static void scu_ssp_ireq_dif_insert(struct isci_request *ireq, u8 type, u8 op)
295 {
296 	struct scu_task_context *tc = ireq->tc;
297 	struct scsi_cmnd *scmd = ireq->ttype_ptr.io_task_ptr->uldd_task;
298 	u8 blk_sz = scu_bg_blk_size(scmd->device);
299 
300 	tc->block_guard_enable = 1;
301 	tc->blk_prot_en = 1;
302 	tc->blk_sz = blk_sz;
303 	/* DIF write insert */
304 	tc->blk_prot_func = 0x2;
305 
306 	tc->transfer_length_bytes += scu_dif_bytes(tc->transfer_length_bytes,
307 						   scmd->device->sector_size);
308 
309 	/* always init to 0, used by hw */
310 	tc->interm_crc_val = 0;
311 
312 	tc->init_crc_seed = 0;
313 	tc->app_tag_verify = 0;
314 	tc->app_tag_gen = 0;
315 	tc->ref_tag_seed_verify = 0;
316 
317 	/* always init to same as bg_blk_sz */
318 	tc->UD_bytes_immed_val = scmd->device->sector_size;
319 
320 	tc->reserved_DC_0 = 0;
321 
322 	/* always init to 8 */
323 	tc->DIF_bytes_immed_val = 8;
324 
325 	tc->reserved_DC_1 = 0;
326 	tc->bgc_blk_sz = scmd->device->sector_size;
327 	tc->reserved_E0_0 = 0;
328 	tc->app_tag_gen_mask = 0;
329 
330 	/** setup block guard control **/
331 	tc->bgctl = 0;
332 
333 	/* DIF write insert */
334 	tc->bgctl_f.op = 0x2;
335 
336 	tc->app_tag_verify_mask = 0;
337 
338 	/* must init to 0 for hw */
339 	tc->blk_guard_err = 0;
340 
341 	tc->reserved_E8_0 = 0;
342 
343 	if ((type & SCSI_PROT_DIF_TYPE1) || (type & SCSI_PROT_DIF_TYPE2))
344 		tc->ref_tag_seed_gen = scsi_prot_ref_tag(scmd);
345 	else if (type & SCSI_PROT_DIF_TYPE3)
346 		tc->ref_tag_seed_gen = 0;
347 }
348 
scu_ssp_ireq_dif_strip(struct isci_request * ireq,u8 type,u8 op)349 static void scu_ssp_ireq_dif_strip(struct isci_request *ireq, u8 type, u8 op)
350 {
351 	struct scu_task_context *tc = ireq->tc;
352 	struct scsi_cmnd *scmd = ireq->ttype_ptr.io_task_ptr->uldd_task;
353 	u8 blk_sz = scu_bg_blk_size(scmd->device);
354 
355 	tc->block_guard_enable = 1;
356 	tc->blk_prot_en = 1;
357 	tc->blk_sz = blk_sz;
358 	/* DIF read strip */
359 	tc->blk_prot_func = 0x1;
360 
361 	tc->transfer_length_bytes += scu_dif_bytes(tc->transfer_length_bytes,
362 						   scmd->device->sector_size);
363 
364 	/* always init to 0, used by hw */
365 	tc->interm_crc_val = 0;
366 
367 	tc->init_crc_seed = 0;
368 	tc->app_tag_verify = 0;
369 	tc->app_tag_gen = 0;
370 
371 	if ((type & SCSI_PROT_DIF_TYPE1) || (type & SCSI_PROT_DIF_TYPE2))
372 		tc->ref_tag_seed_verify = scsi_prot_ref_tag(scmd);
373 	else if (type & SCSI_PROT_DIF_TYPE3)
374 		tc->ref_tag_seed_verify = 0;
375 
376 	/* always init to same as bg_blk_sz */
377 	tc->UD_bytes_immed_val = scmd->device->sector_size;
378 
379 	tc->reserved_DC_0 = 0;
380 
381 	/* always init to 8 */
382 	tc->DIF_bytes_immed_val = 8;
383 
384 	tc->reserved_DC_1 = 0;
385 	tc->bgc_blk_sz = scmd->device->sector_size;
386 	tc->reserved_E0_0 = 0;
387 	tc->app_tag_gen_mask = 0;
388 
389 	/** setup block guard control **/
390 	tc->bgctl = 0;
391 
392 	/* DIF read strip */
393 	tc->bgctl_f.crc_verify = 1;
394 	tc->bgctl_f.op = 0x1;
395 	if ((type & SCSI_PROT_DIF_TYPE1) || (type & SCSI_PROT_DIF_TYPE2)) {
396 		tc->bgctl_f.ref_tag_chk = 1;
397 		tc->bgctl_f.app_f_detect = 1;
398 	} else if (type & SCSI_PROT_DIF_TYPE3)
399 		tc->bgctl_f.app_ref_f_detect = 1;
400 
401 	tc->app_tag_verify_mask = 0;
402 
403 	/* must init to 0 for hw */
404 	tc->blk_guard_err = 0;
405 
406 	tc->reserved_E8_0 = 0;
407 	tc->ref_tag_seed_gen = 0;
408 }
409 
410 /*
411  * This method is will fill in the SCU Task Context for a SSP IO request.
412  */
scu_ssp_io_request_construct_task_context(struct isci_request * ireq,enum dma_data_direction dir,u32 len)413 static void scu_ssp_io_request_construct_task_context(struct isci_request *ireq,
414 						      enum dma_data_direction dir,
415 						      u32 len)
416 {
417 	struct scu_task_context *task_context = ireq->tc;
418 	struct sas_task *sas_task = ireq->ttype_ptr.io_task_ptr;
419 	struct scsi_cmnd *scmd = sas_task->uldd_task;
420 	u8 prot_type = scsi_get_prot_type(scmd);
421 	u8 prot_op = scsi_get_prot_op(scmd);
422 
423 	scu_ssp_request_construct_task_context(ireq, task_context);
424 
425 	task_context->ssp_command_iu_length =
426 		sizeof(struct ssp_cmd_iu) / sizeof(u32);
427 	task_context->type.ssp.frame_type = SSP_COMMAND;
428 
429 	switch (dir) {
430 	case DMA_FROM_DEVICE:
431 	case DMA_NONE:
432 	default:
433 		task_context->task_type = SCU_TASK_TYPE_IOREAD;
434 		break;
435 	case DMA_TO_DEVICE:
436 		task_context->task_type = SCU_TASK_TYPE_IOWRITE;
437 		break;
438 	}
439 
440 	task_context->transfer_length_bytes = len;
441 
442 	if (task_context->transfer_length_bytes > 0)
443 		sci_request_build_sgl(ireq);
444 
445 	if (prot_type != SCSI_PROT_DIF_TYPE0) {
446 		if (prot_op == SCSI_PROT_READ_STRIP)
447 			scu_ssp_ireq_dif_strip(ireq, prot_type, prot_op);
448 		else if (prot_op == SCSI_PROT_WRITE_INSERT)
449 			scu_ssp_ireq_dif_insert(ireq, prot_type, prot_op);
450 	}
451 }
452 
453 /**
454  * scu_ssp_task_request_construct_task_context() - This method will fill in
455  *    the SCU Task Context for a SSP Task request.  The following important
456  *    settings are utilized: -# priority == SCU_TASK_PRIORITY_HIGH.  This
457  *    ensures that the task request is issued ahead of other task destined
458  *    for the same Remote Node. -# task_type == SCU_TASK_TYPE_IOREAD.  This
459  *    simply indicates that a normal request type (i.e. non-raw frame) is
460  *    being utilized to perform task management. -#control_frame == 1.  This
461  *    ensures that the proper endianness is set so that the bytes are
462  *    transmitted in the right order for a task frame.
463  * @ireq: This parameter specifies the task request object being constructed.
464  */
scu_ssp_task_request_construct_task_context(struct isci_request * ireq)465 static void scu_ssp_task_request_construct_task_context(struct isci_request *ireq)
466 {
467 	struct scu_task_context *task_context = ireq->tc;
468 
469 	scu_ssp_request_construct_task_context(ireq, task_context);
470 
471 	task_context->control_frame                = 1;
472 	task_context->priority                     = SCU_TASK_PRIORITY_HIGH;
473 	task_context->task_type                    = SCU_TASK_TYPE_RAW_FRAME;
474 	task_context->transfer_length_bytes        = 0;
475 	task_context->type.ssp.frame_type          = SSP_TASK;
476 	task_context->ssp_command_iu_length =
477 		sizeof(struct ssp_task_iu) / sizeof(u32);
478 }
479 
480 /**
481  * scu_sata_request_construct_task_context()
482  * This method is will fill in the SCU Task Context for any type of SATA
483  *    request.  This is called from the various SATA constructors.
484  * @ireq: The general IO request object which is to be used in
485  *    constructing the SCU task context.
486  * @task_context: The buffer pointer for the SCU task context which is being
487  *    constructed.
488  *
489  * The general io request construction is complete. The buffer assignment for
490  * the command buffer is complete. none Revisit task context construction to
491  * determine what is common for SSP/SMP/STP task context structures.
492  */
scu_sata_request_construct_task_context(struct isci_request * ireq,struct scu_task_context * task_context)493 static void scu_sata_request_construct_task_context(
494 	struct isci_request *ireq,
495 	struct scu_task_context *task_context)
496 {
497 	dma_addr_t dma_addr;
498 	struct isci_remote_device *idev;
499 	struct isci_port *iport;
500 
501 	idev = ireq->target_device;
502 	iport = idev->owning_port;
503 
504 	/* Fill in the TC with its required data */
505 	task_context->abort = 0;
506 	task_context->priority = SCU_TASK_PRIORITY_NORMAL;
507 	task_context->initiator_request = 1;
508 	task_context->connection_rate = idev->connection_rate;
509 	task_context->protocol_engine_index = ISCI_PEG;
510 	task_context->logical_port_index = iport->physical_port_index;
511 	task_context->protocol_type = SCU_TASK_CONTEXT_PROTOCOL_STP;
512 	task_context->valid = SCU_TASK_CONTEXT_VALID;
513 	task_context->context_type = SCU_TASK_CONTEXT_TYPE;
514 
515 	task_context->remote_node_index = idev->rnc.remote_node_index;
516 	task_context->command_code = 0;
517 
518 	task_context->link_layer_control = 0;
519 	task_context->do_not_dma_ssp_good_response = 1;
520 	task_context->strict_ordering = 0;
521 	task_context->control_frame = 0;
522 	task_context->timeout_enable = 0;
523 	task_context->block_guard_enable = 0;
524 
525 	task_context->address_modifier = 0;
526 	task_context->task_phase = 0x01;
527 
528 	task_context->ssp_command_iu_length =
529 		(sizeof(struct host_to_dev_fis) - sizeof(u32)) / sizeof(u32);
530 
531 	/* Set the first word of the H2D REG FIS */
532 	task_context->type.words[0] = *(u32 *)&ireq->stp.cmd;
533 
534 	ireq->post_context = (SCU_CONTEXT_COMMAND_REQUEST_TYPE_POST_TC |
535 			      (ISCI_PEG << SCU_CONTEXT_COMMAND_PROTOCOL_ENGINE_GROUP_SHIFT) |
536 			      (iport->physical_port_index <<
537 			       SCU_CONTEXT_COMMAND_LOGICAL_PORT_SHIFT) |
538 			      ISCI_TAG_TCI(ireq->io_tag));
539 	/*
540 	 * Copy the physical address for the command buffer to the SCU Task
541 	 * Context. We must offset the command buffer by 4 bytes because the
542 	 * first 4 bytes are transfered in the body of the TC.
543 	 */
544 	dma_addr = sci_io_request_get_dma_addr(ireq,
545 						((char *) &ireq->stp.cmd) +
546 						sizeof(u32));
547 
548 	task_context->command_iu_upper = upper_32_bits(dma_addr);
549 	task_context->command_iu_lower = lower_32_bits(dma_addr);
550 
551 	/* SATA Requests do not have a response buffer */
552 	task_context->response_iu_upper = 0;
553 	task_context->response_iu_lower = 0;
554 }
555 
scu_stp_raw_request_construct_task_context(struct isci_request * ireq)556 static void scu_stp_raw_request_construct_task_context(struct isci_request *ireq)
557 {
558 	struct scu_task_context *task_context = ireq->tc;
559 
560 	scu_sata_request_construct_task_context(ireq, task_context);
561 
562 	task_context->control_frame         = 0;
563 	task_context->priority              = SCU_TASK_PRIORITY_NORMAL;
564 	task_context->task_type             = SCU_TASK_TYPE_SATA_RAW_FRAME;
565 	task_context->type.stp.fis_type     = FIS_REGH2D;
566 	task_context->transfer_length_bytes = sizeof(struct host_to_dev_fis) - sizeof(u32);
567 }
568 
sci_stp_pio_request_construct(struct isci_request * ireq,bool copy_rx_frame)569 static enum sci_status sci_stp_pio_request_construct(struct isci_request *ireq,
570 							  bool copy_rx_frame)
571 {
572 	struct isci_stp_request *stp_req = &ireq->stp.req;
573 
574 	scu_stp_raw_request_construct_task_context(ireq);
575 
576 	stp_req->status = 0;
577 	stp_req->sgl.offset = 0;
578 	stp_req->sgl.set = SCU_SGL_ELEMENT_PAIR_A;
579 
580 	if (copy_rx_frame) {
581 		sci_request_build_sgl(ireq);
582 		stp_req->sgl.index = 0;
583 	} else {
584 		/* The user does not want the data copied to the SGL buffer location */
585 		stp_req->sgl.index = -1;
586 	}
587 
588 	return SCI_SUCCESS;
589 }
590 
591 /*
592  * sci_stp_optimized_request_construct()
593  * @ireq: This parameter specifies the request to be constructed as an
594  *    optimized request.
595  * @optimized_task_type: This parameter specifies whether the request is to be
596  *    an UDMA request or a NCQ request. - A value of 0 indicates UDMA. - A
597  *    value of 1 indicates NCQ.
598  *
599  * This method will perform request construction common to all types of STP
600  * requests that are optimized by the silicon (i.e. UDMA, NCQ). This method
601  * returns an indication as to whether the construction was successful.
602  */
sci_stp_optimized_request_construct(struct isci_request * ireq,u8 optimized_task_type,u32 len,enum dma_data_direction dir)603 static void sci_stp_optimized_request_construct(struct isci_request *ireq,
604 						     u8 optimized_task_type,
605 						     u32 len,
606 						     enum dma_data_direction dir)
607 {
608 	struct scu_task_context *task_context = ireq->tc;
609 
610 	/* Build the STP task context structure */
611 	scu_sata_request_construct_task_context(ireq, task_context);
612 
613 	/* Copy over the SGL elements */
614 	sci_request_build_sgl(ireq);
615 
616 	/* Copy over the number of bytes to be transfered */
617 	task_context->transfer_length_bytes = len;
618 
619 	if (dir == DMA_TO_DEVICE) {
620 		/*
621 		 * The difference between the DMA IN and DMA OUT request task type
622 		 * values are consistent with the difference between FPDMA READ
623 		 * and FPDMA WRITE values.  Add the supplied task type parameter
624 		 * to this difference to set the task type properly for this
625 		 * DATA OUT (WRITE) case. */
626 		task_context->task_type = optimized_task_type + (SCU_TASK_TYPE_DMA_OUT
627 								 - SCU_TASK_TYPE_DMA_IN);
628 	} else {
629 		/*
630 		 * For the DATA IN (READ) case, simply save the supplied
631 		 * optimized task type. */
632 		task_context->task_type = optimized_task_type;
633 	}
634 }
635 
sci_atapi_construct(struct isci_request * ireq)636 static void sci_atapi_construct(struct isci_request *ireq)
637 {
638 	struct host_to_dev_fis *h2d_fis = &ireq->stp.cmd;
639 	struct sas_task *task;
640 
641 	/* To simplify the implementation we take advantage of the
642 	 * silicon's partial acceleration of atapi protocol (dma data
643 	 * transfers), so we promote all commands to dma protocol.  This
644 	 * breaks compatibility with ATA_HORKAGE_ATAPI_MOD16_DMA drives.
645 	 */
646 	h2d_fis->features |= ATAPI_PKT_DMA;
647 
648 	scu_stp_raw_request_construct_task_context(ireq);
649 
650 	task = isci_request_access_task(ireq);
651 	if (task->data_dir == DMA_NONE)
652 		task->total_xfer_len = 0;
653 
654 	/* clear the response so we can detect arrivial of an
655 	 * unsolicited h2d fis
656 	 */
657 	ireq->stp.rsp.fis_type = 0;
658 }
659 
660 static enum sci_status
sci_io_request_construct_sata(struct isci_request * ireq,u32 len,enum dma_data_direction dir,bool copy)661 sci_io_request_construct_sata(struct isci_request *ireq,
662 			       u32 len,
663 			       enum dma_data_direction dir,
664 			       bool copy)
665 {
666 	enum sci_status status = SCI_SUCCESS;
667 	struct sas_task *task = isci_request_access_task(ireq);
668 	struct domain_device *dev = ireq->target_device->domain_dev;
669 
670 	/* check for management protocols */
671 	if (test_bit(IREQ_TMF, &ireq->flags)) {
672 		struct isci_tmf *tmf = isci_request_access_tmf(ireq);
673 
674 		dev_err(&ireq->owning_controller->pdev->dev,
675 			"%s: Request 0x%p received un-handled SAT "
676 			"management protocol 0x%x.\n",
677 			__func__, ireq, tmf->tmf_code);
678 
679 		return SCI_FAILURE;
680 	}
681 
682 	if (!sas_protocol_ata(task->task_proto)) {
683 		dev_err(&ireq->owning_controller->pdev->dev,
684 			"%s: Non-ATA protocol in SATA path: 0x%x\n",
685 			__func__,
686 			task->task_proto);
687 		return SCI_FAILURE;
688 
689 	}
690 
691 	/* ATAPI */
692 	if (dev->sata_dev.class == ATA_DEV_ATAPI &&
693 	    task->ata_task.fis.command == ATA_CMD_PACKET) {
694 		sci_atapi_construct(ireq);
695 		return SCI_SUCCESS;
696 	}
697 
698 	/* non data */
699 	if (task->data_dir == DMA_NONE) {
700 		scu_stp_raw_request_construct_task_context(ireq);
701 		return SCI_SUCCESS;
702 	}
703 
704 	/* NCQ */
705 	if (task->ata_task.use_ncq) {
706 		sci_stp_optimized_request_construct(ireq,
707 							 SCU_TASK_TYPE_FPDMAQ_READ,
708 							 len, dir);
709 		return SCI_SUCCESS;
710 	}
711 
712 	/* DMA */
713 	if (task->ata_task.dma_xfer) {
714 		sci_stp_optimized_request_construct(ireq,
715 							 SCU_TASK_TYPE_DMA_IN,
716 							 len, dir);
717 		return SCI_SUCCESS;
718 	} else /* PIO */
719 		return sci_stp_pio_request_construct(ireq, copy);
720 
721 	return status;
722 }
723 
sci_io_request_construct_basic_ssp(struct isci_request * ireq)724 static enum sci_status sci_io_request_construct_basic_ssp(struct isci_request *ireq)
725 {
726 	struct sas_task *task = isci_request_access_task(ireq);
727 
728 	ireq->protocol = SAS_PROTOCOL_SSP;
729 
730 	scu_ssp_io_request_construct_task_context(ireq,
731 						  task->data_dir,
732 						  task->total_xfer_len);
733 
734 	sci_io_request_build_ssp_command_iu(ireq);
735 
736 	sci_change_state(&ireq->sm, SCI_REQ_CONSTRUCTED);
737 
738 	return SCI_SUCCESS;
739 }
740 
sci_task_request_construct_ssp(struct isci_request * ireq)741 void sci_task_request_construct_ssp(struct isci_request *ireq)
742 {
743 	/* Construct the SSP Task SCU Task Context */
744 	scu_ssp_task_request_construct_task_context(ireq);
745 
746 	/* Fill in the SSP Task IU */
747 	sci_task_request_build_ssp_task_iu(ireq);
748 
749 	sci_change_state(&ireq->sm, SCI_REQ_CONSTRUCTED);
750 }
751 
sci_io_request_construct_basic_sata(struct isci_request * ireq)752 static enum sci_status sci_io_request_construct_basic_sata(struct isci_request *ireq)
753 {
754 	enum sci_status status;
755 	bool copy = false;
756 	struct sas_task *task = isci_request_access_task(ireq);
757 
758 	ireq->protocol = SAS_PROTOCOL_STP;
759 
760 	copy = (task->data_dir == DMA_NONE) ? false : true;
761 
762 	status = sci_io_request_construct_sata(ireq,
763 						task->total_xfer_len,
764 						task->data_dir,
765 						copy);
766 
767 	if (status == SCI_SUCCESS)
768 		sci_change_state(&ireq->sm, SCI_REQ_CONSTRUCTED);
769 
770 	return status;
771 }
772 
773 #define SCU_TASK_CONTEXT_SRAM 0x200000
774 /**
775  * sci_req_tx_bytes - bytes transferred when reply underruns request
776  * @ireq: request that was terminated early
777  */
sci_req_tx_bytes(struct isci_request * ireq)778 static u32 sci_req_tx_bytes(struct isci_request *ireq)
779 {
780 	struct isci_host *ihost = ireq->owning_controller;
781 	u32 ret_val = 0;
782 
783 	if (readl(&ihost->smu_registers->address_modifier) == 0) {
784 		void __iomem *scu_reg_base = ihost->scu_registers;
785 
786 		/* get the bytes of data from the Address == BAR1 + 20002Ch + (256*TCi) where
787 		 *   BAR1 is the scu_registers
788 		 *   0x20002C = 0x200000 + 0x2c
789 		 *            = start of task context SRAM + offset of (type.ssp.data_offset)
790 		 *   TCi is the io_tag of struct sci_request
791 		 */
792 		ret_val = readl(scu_reg_base +
793 				(SCU_TASK_CONTEXT_SRAM + offsetof(struct scu_task_context, type.ssp.data_offset)) +
794 				((sizeof(struct scu_task_context)) * ISCI_TAG_TCI(ireq->io_tag)));
795 	}
796 
797 	return ret_val;
798 }
799 
sci_request_start(struct isci_request * ireq)800 enum sci_status sci_request_start(struct isci_request *ireq)
801 {
802 	enum sci_base_request_states state;
803 	struct scu_task_context *tc = ireq->tc;
804 	struct isci_host *ihost = ireq->owning_controller;
805 
806 	state = ireq->sm.current_state_id;
807 	if (state != SCI_REQ_CONSTRUCTED) {
808 		dev_warn(&ihost->pdev->dev,
809 			"%s: SCIC IO Request requested to start while in wrong "
810 			 "state %d\n", __func__, state);
811 		return SCI_FAILURE_INVALID_STATE;
812 	}
813 
814 	tc->task_index = ISCI_TAG_TCI(ireq->io_tag);
815 
816 	switch (tc->protocol_type) {
817 	case SCU_TASK_CONTEXT_PROTOCOL_SMP:
818 	case SCU_TASK_CONTEXT_PROTOCOL_SSP:
819 		/* SSP/SMP Frame */
820 		tc->type.ssp.tag = ireq->io_tag;
821 		tc->type.ssp.target_port_transfer_tag = 0xFFFF;
822 		break;
823 
824 	case SCU_TASK_CONTEXT_PROTOCOL_STP:
825 		/* STP/SATA Frame
826 		 * tc->type.stp.ncq_tag = ireq->ncq_tag;
827 		 */
828 		break;
829 
830 	case SCU_TASK_CONTEXT_PROTOCOL_NONE:
831 		/* / @todo When do we set no protocol type? */
832 		break;
833 
834 	default:
835 		/* This should never happen since we build the IO
836 		 * requests */
837 		break;
838 	}
839 
840 	/* Add to the post_context the io tag value */
841 	ireq->post_context |= ISCI_TAG_TCI(ireq->io_tag);
842 
843 	/* Everything is good go ahead and change state */
844 	sci_change_state(&ireq->sm, SCI_REQ_STARTED);
845 
846 	return SCI_SUCCESS;
847 }
848 
849 enum sci_status
sci_io_request_terminate(struct isci_request * ireq)850 sci_io_request_terminate(struct isci_request *ireq)
851 {
852 	enum sci_base_request_states state;
853 
854 	state = ireq->sm.current_state_id;
855 
856 	switch (state) {
857 	case SCI_REQ_CONSTRUCTED:
858 		/* Set to make sure no HW terminate posting is done: */
859 		set_bit(IREQ_TC_ABORT_POSTED, &ireq->flags);
860 		ireq->scu_status = SCU_TASK_DONE_TASK_ABORT;
861 		ireq->sci_status = SCI_FAILURE_IO_TERMINATED;
862 		sci_change_state(&ireq->sm, SCI_REQ_COMPLETED);
863 		return SCI_SUCCESS;
864 	case SCI_REQ_STARTED:
865 	case SCI_REQ_TASK_WAIT_TC_COMP:
866 	case SCI_REQ_SMP_WAIT_RESP:
867 	case SCI_REQ_SMP_WAIT_TC_COMP:
868 	case SCI_REQ_STP_UDMA_WAIT_TC_COMP:
869 	case SCI_REQ_STP_UDMA_WAIT_D2H:
870 	case SCI_REQ_STP_NON_DATA_WAIT_H2D:
871 	case SCI_REQ_STP_NON_DATA_WAIT_D2H:
872 	case SCI_REQ_STP_PIO_WAIT_H2D:
873 	case SCI_REQ_STP_PIO_WAIT_FRAME:
874 	case SCI_REQ_STP_PIO_DATA_IN:
875 	case SCI_REQ_STP_PIO_DATA_OUT:
876 	case SCI_REQ_ATAPI_WAIT_H2D:
877 	case SCI_REQ_ATAPI_WAIT_PIO_SETUP:
878 	case SCI_REQ_ATAPI_WAIT_D2H:
879 	case SCI_REQ_ATAPI_WAIT_TC_COMP:
880 		/* Fall through and change state to ABORTING... */
881 	case SCI_REQ_TASK_WAIT_TC_RESP:
882 		/* The task frame was already confirmed to have been
883 		 * sent by the SCU HW.  Since the state machine is
884 		 * now only waiting for the task response itself,
885 		 * abort the request and complete it immediately
886 		 * and don't wait for the task response.
887 		 */
888 		sci_change_state(&ireq->sm, SCI_REQ_ABORTING);
889 		fallthrough;	/* and handle like ABORTING */
890 	case SCI_REQ_ABORTING:
891 		if (!isci_remote_device_is_safe_to_abort(ireq->target_device))
892 			set_bit(IREQ_PENDING_ABORT, &ireq->flags);
893 		else
894 			clear_bit(IREQ_PENDING_ABORT, &ireq->flags);
895 		/* If the request is only waiting on the remote device
896 		 * suspension, return SUCCESS so the caller will wait too.
897 		 */
898 		return SCI_SUCCESS;
899 	case SCI_REQ_COMPLETED:
900 	default:
901 		dev_warn(&ireq->owning_controller->pdev->dev,
902 			 "%s: SCIC IO Request requested to abort while in wrong "
903 			 "state %d\n", __func__, ireq->sm.current_state_id);
904 		break;
905 	}
906 
907 	return SCI_FAILURE_INVALID_STATE;
908 }
909 
sci_request_complete(struct isci_request * ireq)910 enum sci_status sci_request_complete(struct isci_request *ireq)
911 {
912 	enum sci_base_request_states state;
913 	struct isci_host *ihost = ireq->owning_controller;
914 
915 	state = ireq->sm.current_state_id;
916 	if (WARN_ONCE(state != SCI_REQ_COMPLETED,
917 		      "isci: request completion from wrong state (%s)\n",
918 		      req_state_name(state)))
919 		return SCI_FAILURE_INVALID_STATE;
920 
921 	if (ireq->saved_rx_frame_index != SCU_INVALID_FRAME_INDEX)
922 		sci_controller_release_frame(ihost,
923 						  ireq->saved_rx_frame_index);
924 
925 	/* XXX can we just stop the machine and remove the 'final' state? */
926 	sci_change_state(&ireq->sm, SCI_REQ_FINAL);
927 	return SCI_SUCCESS;
928 }
929 
sci_io_request_event_handler(struct isci_request * ireq,u32 event_code)930 enum sci_status sci_io_request_event_handler(struct isci_request *ireq,
931 						  u32 event_code)
932 {
933 	enum sci_base_request_states state;
934 	struct isci_host *ihost = ireq->owning_controller;
935 
936 	state = ireq->sm.current_state_id;
937 
938 	if (state != SCI_REQ_STP_PIO_DATA_IN) {
939 		dev_warn(&ihost->pdev->dev, "%s: (%x) in wrong state %s\n",
940 			 __func__, event_code, req_state_name(state));
941 
942 		return SCI_FAILURE_INVALID_STATE;
943 	}
944 
945 	switch (scu_get_event_specifier(event_code)) {
946 	case SCU_TASK_DONE_CRC_ERR << SCU_EVENT_SPECIFIC_CODE_SHIFT:
947 		/* We are waiting for data and the SCU has R_ERR the data frame.
948 		 * Go back to waiting for the D2H Register FIS
949 		 */
950 		sci_change_state(&ireq->sm, SCI_REQ_STP_PIO_WAIT_FRAME);
951 		return SCI_SUCCESS;
952 	default:
953 		dev_err(&ihost->pdev->dev,
954 			"%s: pio request unexpected event %#x\n",
955 			__func__, event_code);
956 
957 		/* TODO Should we fail the PIO request when we get an
958 		 * unexpected event?
959 		 */
960 		return SCI_FAILURE;
961 	}
962 }
963 
964 /*
965  * This function copies response data for requests returning response data
966  *    instead of sense data.
967  * @sci_req: This parameter specifies the request object for which to copy
968  *    the response data.
969  */
sci_io_request_copy_response(struct isci_request * ireq)970 static void sci_io_request_copy_response(struct isci_request *ireq)
971 {
972 	void *resp_buf;
973 	u32 len;
974 	struct ssp_response_iu *ssp_response;
975 	struct isci_tmf *isci_tmf = isci_request_access_tmf(ireq);
976 
977 	ssp_response = &ireq->ssp.rsp;
978 
979 	resp_buf = &isci_tmf->resp.resp_iu;
980 
981 	len = min_t(u32,
982 		    SSP_RESP_IU_MAX_SIZE,
983 		    be32_to_cpu(ssp_response->response_data_len));
984 
985 	memcpy(resp_buf, ssp_response->resp_data, len);
986 }
987 
988 static enum sci_status
request_started_state_tc_event(struct isci_request * ireq,u32 completion_code)989 request_started_state_tc_event(struct isci_request *ireq,
990 			       u32 completion_code)
991 {
992 	struct ssp_response_iu *resp_iu;
993 	u8 datapres;
994 
995 	/* TODO: Any SDMA return code of other than 0 is bad decode 0x003C0000
996 	 * to determine SDMA status
997 	 */
998 	switch (SCU_GET_COMPLETION_TL_STATUS(completion_code)) {
999 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_GOOD):
1000 		ireq->scu_status = SCU_TASK_DONE_GOOD;
1001 		ireq->sci_status = SCI_SUCCESS;
1002 		break;
1003 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_EARLY_RESP): {
1004 		/* There are times when the SCU hardware will return an early
1005 		 * response because the io request specified more data than is
1006 		 * returned by the target device (mode pages, inquiry data,
1007 		 * etc.).  We must check the response stats to see if this is
1008 		 * truly a failed request or a good request that just got
1009 		 * completed early.
1010 		 */
1011 		struct ssp_response_iu *resp = &ireq->ssp.rsp;
1012 		ssize_t word_cnt = SSP_RESP_IU_MAX_SIZE / sizeof(u32);
1013 
1014 		sci_swab32_cpy(&ireq->ssp.rsp,
1015 			       &ireq->ssp.rsp,
1016 			       word_cnt);
1017 
1018 		if (resp->status == 0) {
1019 			ireq->scu_status = SCU_TASK_DONE_GOOD;
1020 			ireq->sci_status = SCI_SUCCESS_IO_DONE_EARLY;
1021 		} else {
1022 			ireq->scu_status = SCU_TASK_DONE_CHECK_RESPONSE;
1023 			ireq->sci_status = SCI_FAILURE_IO_RESPONSE_VALID;
1024 		}
1025 		break;
1026 	}
1027 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_CHECK_RESPONSE): {
1028 		ssize_t word_cnt = SSP_RESP_IU_MAX_SIZE / sizeof(u32);
1029 
1030 		sci_swab32_cpy(&ireq->ssp.rsp,
1031 			       &ireq->ssp.rsp,
1032 			       word_cnt);
1033 
1034 		ireq->scu_status = SCU_TASK_DONE_CHECK_RESPONSE;
1035 		ireq->sci_status = SCI_FAILURE_IO_RESPONSE_VALID;
1036 		break;
1037 	}
1038 
1039 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_RESP_LEN_ERR):
1040 		/* TODO With TASK_DONE_RESP_LEN_ERR is the response frame
1041 		 * guaranteed to be received before this completion status is
1042 		 * posted?
1043 		 */
1044 		resp_iu = &ireq->ssp.rsp;
1045 		datapres = resp_iu->datapres;
1046 
1047 		if (datapres == SAS_DATAPRES_RESPONSE_DATA ||
1048 		    datapres == SAS_DATAPRES_SENSE_DATA) {
1049 			ireq->scu_status = SCU_TASK_DONE_CHECK_RESPONSE;
1050 			ireq->sci_status = SCI_FAILURE_IO_RESPONSE_VALID;
1051 		} else {
1052 			ireq->scu_status = SCU_TASK_DONE_GOOD;
1053 			ireq->sci_status = SCI_SUCCESS;
1054 		}
1055 		break;
1056 	/* only stp device gets suspended. */
1057 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_ACK_NAK_TO):
1058 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_LL_PERR):
1059 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_NAK_ERR):
1060 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_DATA_LEN_ERR):
1061 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_LL_ABORT_ERR):
1062 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_XR_WD_LEN):
1063 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_MAX_PLD_ERR):
1064 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_UNEXP_RESP):
1065 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_UNEXP_SDBFIS):
1066 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_REG_ERR):
1067 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_SDB_ERR):
1068 		if (ireq->protocol == SAS_PROTOCOL_STP) {
1069 			ireq->scu_status = SCU_GET_COMPLETION_TL_STATUS(completion_code) >>
1070 					   SCU_COMPLETION_TL_STATUS_SHIFT;
1071 			ireq->sci_status = SCI_FAILURE_REMOTE_DEVICE_RESET_REQUIRED;
1072 		} else {
1073 			ireq->scu_status = SCU_GET_COMPLETION_TL_STATUS(completion_code) >>
1074 					   SCU_COMPLETION_TL_STATUS_SHIFT;
1075 			ireq->sci_status = SCI_FAILURE_CONTROLLER_SPECIFIC_IO_ERR;
1076 		}
1077 		break;
1078 
1079 	/* both stp/ssp device gets suspended */
1080 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_LF_ERR):
1081 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_OPEN_REJECT_WRONG_DESTINATION):
1082 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_OPEN_REJECT_RESERVED_ABANDON_1):
1083 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_OPEN_REJECT_RESERVED_ABANDON_2):
1084 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_OPEN_REJECT_RESERVED_ABANDON_3):
1085 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_OPEN_REJECT_BAD_DESTINATION):
1086 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_OPEN_REJECT_ZONE_VIOLATION):
1087 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_OPEN_REJECT_STP_RESOURCES_BUSY):
1088 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_OPEN_REJECT_PROTOCOL_NOT_SUPPORTED):
1089 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_OPEN_REJECT_CONNECTION_RATE_NOT_SUPPORTED):
1090 		ireq->scu_status = SCU_GET_COMPLETION_TL_STATUS(completion_code) >>
1091 				   SCU_COMPLETION_TL_STATUS_SHIFT;
1092 		ireq->sci_status = SCI_FAILURE_REMOTE_DEVICE_RESET_REQUIRED;
1093 		break;
1094 
1095 	/* neither ssp nor stp gets suspended. */
1096 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_NAK_CMD_ERR):
1097 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_UNEXP_XR):
1098 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_XR_IU_LEN_ERR):
1099 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_SDMA_ERR):
1100 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_OFFSET_ERR):
1101 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_EXCESS_DATA):
1102 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_SMP_RESP_TO_ERR):
1103 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_SMP_UFI_ERR):
1104 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_SMP_FRM_TYPE_ERR):
1105 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_SMP_LL_RX_ERR):
1106 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_UNEXP_DATA):
1107 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_OPEN_FAIL):
1108 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_VIIT_ENTRY_NV):
1109 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_IIT_ENTRY_NV):
1110 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_RNCNV_OUTBOUND):
1111 	default:
1112 		ireq->scu_status = SCU_GET_COMPLETION_TL_STATUS(completion_code) >>
1113 				   SCU_COMPLETION_TL_STATUS_SHIFT;
1114 		ireq->sci_status = SCI_FAILURE_CONTROLLER_SPECIFIC_IO_ERR;
1115 		break;
1116 	}
1117 
1118 	/*
1119 	 * TODO: This is probably wrong for ACK/NAK timeout conditions
1120 	 */
1121 
1122 	/* In all cases we will treat this as the completion of the IO req. */
1123 	sci_change_state(&ireq->sm, SCI_REQ_COMPLETED);
1124 	return SCI_SUCCESS;
1125 }
1126 
1127 static enum sci_status
request_aborting_state_tc_event(struct isci_request * ireq,u32 completion_code)1128 request_aborting_state_tc_event(struct isci_request *ireq,
1129 				u32 completion_code)
1130 {
1131 	switch (SCU_GET_COMPLETION_TL_STATUS(completion_code)) {
1132 	case (SCU_TASK_DONE_GOOD << SCU_COMPLETION_TL_STATUS_SHIFT):
1133 	case (SCU_TASK_DONE_TASK_ABORT << SCU_COMPLETION_TL_STATUS_SHIFT):
1134 		ireq->scu_status = SCU_TASK_DONE_TASK_ABORT;
1135 		ireq->sci_status = SCI_FAILURE_IO_TERMINATED;
1136 		sci_change_state(&ireq->sm, SCI_REQ_COMPLETED);
1137 		break;
1138 
1139 	default:
1140 		/* Unless we get some strange error wait for the task abort to complete
1141 		 * TODO: Should there be a state change for this completion?
1142 		 */
1143 		break;
1144 	}
1145 
1146 	return SCI_SUCCESS;
1147 }
1148 
ssp_task_request_await_tc_event(struct isci_request * ireq,u32 completion_code)1149 static enum sci_status ssp_task_request_await_tc_event(struct isci_request *ireq,
1150 						       u32 completion_code)
1151 {
1152 	switch (SCU_GET_COMPLETION_TL_STATUS(completion_code)) {
1153 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_GOOD):
1154 		ireq->scu_status = SCU_TASK_DONE_GOOD;
1155 		ireq->sci_status = SCI_SUCCESS;
1156 		sci_change_state(&ireq->sm, SCI_REQ_TASK_WAIT_TC_RESP);
1157 		break;
1158 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_ACK_NAK_TO):
1159 		/* Currently, the decision is to simply allow the task request
1160 		 * to timeout if the task IU wasn't received successfully.
1161 		 * There is a potential for receiving multiple task responses if
1162 		 * we decide to send the task IU again.
1163 		 */
1164 		dev_warn(&ireq->owning_controller->pdev->dev,
1165 			 "%s: TaskRequest:0x%p CompletionCode:%x - "
1166 			 "ACK/NAK timeout\n", __func__, ireq,
1167 			 completion_code);
1168 
1169 		sci_change_state(&ireq->sm, SCI_REQ_TASK_WAIT_TC_RESP);
1170 		break;
1171 	default:
1172 		/*
1173 		 * All other completion status cause the IO to be complete.
1174 		 * If a NAK was received, then it is up to the user to retry
1175 		 * the request.
1176 		 */
1177 		ireq->scu_status = SCU_NORMALIZE_COMPLETION_STATUS(completion_code);
1178 		ireq->sci_status = SCI_FAILURE_CONTROLLER_SPECIFIC_IO_ERR;
1179 		sci_change_state(&ireq->sm, SCI_REQ_COMPLETED);
1180 		break;
1181 	}
1182 
1183 	return SCI_SUCCESS;
1184 }
1185 
1186 static enum sci_status
smp_request_await_response_tc_event(struct isci_request * ireq,u32 completion_code)1187 smp_request_await_response_tc_event(struct isci_request *ireq,
1188 				    u32 completion_code)
1189 {
1190 	switch (SCU_GET_COMPLETION_TL_STATUS(completion_code)) {
1191 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_GOOD):
1192 		/* In the AWAIT RESPONSE state, any TC completion is
1193 		 * unexpected.  but if the TC has success status, we
1194 		 * complete the IO anyway.
1195 		 */
1196 		ireq->scu_status = SCU_TASK_DONE_GOOD;
1197 		ireq->sci_status = SCI_SUCCESS;
1198 		sci_change_state(&ireq->sm, SCI_REQ_COMPLETED);
1199 		break;
1200 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_SMP_RESP_TO_ERR):
1201 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_SMP_UFI_ERR):
1202 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_SMP_FRM_TYPE_ERR):
1203 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_SMP_LL_RX_ERR):
1204 		/* These status has been seen in a specific LSI
1205 		 * expander, which sometimes is not able to send smp
1206 		 * response within 2 ms. This causes our hardware break
1207 		 * the connection and set TC completion with one of
1208 		 * these SMP_XXX_XX_ERR status. For these type of error,
1209 		 * we ask ihost user to retry the request.
1210 		 */
1211 		ireq->scu_status = SCU_TASK_DONE_SMP_RESP_TO_ERR;
1212 		ireq->sci_status = SCI_FAILURE_RETRY_REQUIRED;
1213 		sci_change_state(&ireq->sm, SCI_REQ_COMPLETED);
1214 		break;
1215 	default:
1216 		/* All other completion status cause the IO to be complete.  If a NAK
1217 		 * was received, then it is up to the user to retry the request
1218 		 */
1219 		ireq->scu_status = SCU_NORMALIZE_COMPLETION_STATUS(completion_code);
1220 		ireq->sci_status = SCI_FAILURE_CONTROLLER_SPECIFIC_IO_ERR;
1221 		sci_change_state(&ireq->sm, SCI_REQ_COMPLETED);
1222 		break;
1223 	}
1224 
1225 	return SCI_SUCCESS;
1226 }
1227 
1228 static enum sci_status
smp_request_await_tc_event(struct isci_request * ireq,u32 completion_code)1229 smp_request_await_tc_event(struct isci_request *ireq,
1230 			   u32 completion_code)
1231 {
1232 	switch (SCU_GET_COMPLETION_TL_STATUS(completion_code)) {
1233 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_GOOD):
1234 		ireq->scu_status = SCU_TASK_DONE_GOOD;
1235 		ireq->sci_status = SCI_SUCCESS;
1236 		sci_change_state(&ireq->sm, SCI_REQ_COMPLETED);
1237 		break;
1238 	default:
1239 		/* All other completion status cause the IO to be
1240 		 * complete.  If a NAK was received, then it is up to
1241 		 * the user to retry the request.
1242 		 */
1243 		ireq->scu_status = SCU_NORMALIZE_COMPLETION_STATUS(completion_code);
1244 		ireq->sci_status = SCI_FAILURE_CONTROLLER_SPECIFIC_IO_ERR;
1245 		sci_change_state(&ireq->sm, SCI_REQ_COMPLETED);
1246 		break;
1247 	}
1248 
1249 	return SCI_SUCCESS;
1250 }
1251 
pio_sgl_next(struct isci_stp_request * stp_req)1252 static struct scu_sgl_element *pio_sgl_next(struct isci_stp_request *stp_req)
1253 {
1254 	struct scu_sgl_element *sgl;
1255 	struct scu_sgl_element_pair *sgl_pair;
1256 	struct isci_request *ireq = to_ireq(stp_req);
1257 	struct isci_stp_pio_sgl *pio_sgl = &stp_req->sgl;
1258 
1259 	sgl_pair = to_sgl_element_pair(ireq, pio_sgl->index);
1260 	if (!sgl_pair)
1261 		sgl = NULL;
1262 	else if (pio_sgl->set == SCU_SGL_ELEMENT_PAIR_A) {
1263 		if (sgl_pair->B.address_lower == 0 &&
1264 		    sgl_pair->B.address_upper == 0) {
1265 			sgl = NULL;
1266 		} else {
1267 			pio_sgl->set = SCU_SGL_ELEMENT_PAIR_B;
1268 			sgl = &sgl_pair->B;
1269 		}
1270 	} else {
1271 		if (sgl_pair->next_pair_lower == 0 &&
1272 		    sgl_pair->next_pair_upper == 0) {
1273 			sgl = NULL;
1274 		} else {
1275 			pio_sgl->index++;
1276 			pio_sgl->set = SCU_SGL_ELEMENT_PAIR_A;
1277 			sgl_pair = to_sgl_element_pair(ireq, pio_sgl->index);
1278 			sgl = &sgl_pair->A;
1279 		}
1280 	}
1281 
1282 	return sgl;
1283 }
1284 
1285 static enum sci_status
stp_request_non_data_await_h2d_tc_event(struct isci_request * ireq,u32 completion_code)1286 stp_request_non_data_await_h2d_tc_event(struct isci_request *ireq,
1287 					u32 completion_code)
1288 {
1289 	switch (SCU_GET_COMPLETION_TL_STATUS(completion_code)) {
1290 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_GOOD):
1291 		ireq->scu_status = SCU_TASK_DONE_GOOD;
1292 		ireq->sci_status = SCI_SUCCESS;
1293 		sci_change_state(&ireq->sm, SCI_REQ_STP_NON_DATA_WAIT_D2H);
1294 		break;
1295 
1296 	default:
1297 		/* All other completion status cause the IO to be
1298 		 * complete.  If a NAK was received, then it is up to
1299 		 * the user to retry the request.
1300 		 */
1301 		ireq->scu_status = SCU_NORMALIZE_COMPLETION_STATUS(completion_code);
1302 		ireq->sci_status = SCI_FAILURE_CONTROLLER_SPECIFIC_IO_ERR;
1303 		sci_change_state(&ireq->sm, SCI_REQ_COMPLETED);
1304 		break;
1305 	}
1306 
1307 	return SCI_SUCCESS;
1308 }
1309 
1310 #define SCU_MAX_FRAME_BUFFER_SIZE  0x400  /* 1K is the maximum SCU frame data payload */
1311 
1312 /* transmit DATA_FIS from (current sgl + offset) for input
1313  * parameter length. current sgl and offset is alreay stored in the IO request
1314  */
sci_stp_request_pio_data_out_trasmit_data_frame(struct isci_request * ireq,u32 length)1315 static enum sci_status sci_stp_request_pio_data_out_trasmit_data_frame(
1316 	struct isci_request *ireq,
1317 	u32 length)
1318 {
1319 	struct isci_stp_request *stp_req = &ireq->stp.req;
1320 	struct scu_task_context *task_context = ireq->tc;
1321 	struct scu_sgl_element_pair *sgl_pair;
1322 	struct scu_sgl_element *current_sgl;
1323 
1324 	/* Recycle the TC and reconstruct it for sending out DATA FIS containing
1325 	 * for the data from current_sgl+offset for the input length
1326 	 */
1327 	sgl_pair = to_sgl_element_pair(ireq, stp_req->sgl.index);
1328 	if (stp_req->sgl.set == SCU_SGL_ELEMENT_PAIR_A)
1329 		current_sgl = &sgl_pair->A;
1330 	else
1331 		current_sgl = &sgl_pair->B;
1332 
1333 	/* update the TC */
1334 	task_context->command_iu_upper = current_sgl->address_upper;
1335 	task_context->command_iu_lower = current_sgl->address_lower;
1336 	task_context->transfer_length_bytes = length;
1337 	task_context->type.stp.fis_type = FIS_DATA;
1338 
1339 	/* send the new TC out. */
1340 	return sci_controller_continue_io(ireq);
1341 }
1342 
sci_stp_request_pio_data_out_transmit_data(struct isci_request * ireq)1343 static enum sci_status sci_stp_request_pio_data_out_transmit_data(struct isci_request *ireq)
1344 {
1345 	struct isci_stp_request *stp_req = &ireq->stp.req;
1346 	struct scu_sgl_element_pair *sgl_pair;
1347 	enum sci_status status = SCI_SUCCESS;
1348 	struct scu_sgl_element *sgl;
1349 	u32 offset;
1350 	u32 len = 0;
1351 
1352 	offset = stp_req->sgl.offset;
1353 	sgl_pair = to_sgl_element_pair(ireq, stp_req->sgl.index);
1354 	if (WARN_ONCE(!sgl_pair, "%s: null sgl element", __func__))
1355 		return SCI_FAILURE;
1356 
1357 	if (stp_req->sgl.set == SCU_SGL_ELEMENT_PAIR_A) {
1358 		sgl = &sgl_pair->A;
1359 		len = sgl_pair->A.length - offset;
1360 	} else {
1361 		sgl = &sgl_pair->B;
1362 		len = sgl_pair->B.length - offset;
1363 	}
1364 
1365 	if (stp_req->pio_len == 0)
1366 		return SCI_SUCCESS;
1367 
1368 	if (stp_req->pio_len >= len) {
1369 		status = sci_stp_request_pio_data_out_trasmit_data_frame(ireq, len);
1370 		if (status != SCI_SUCCESS)
1371 			return status;
1372 		stp_req->pio_len -= len;
1373 
1374 		/* update the current sgl, offset and save for future */
1375 		sgl = pio_sgl_next(stp_req);
1376 		offset = 0;
1377 	} else if (stp_req->pio_len < len) {
1378 		sci_stp_request_pio_data_out_trasmit_data_frame(ireq, stp_req->pio_len);
1379 
1380 		/* Sgl offset will be adjusted and saved for future */
1381 		offset += stp_req->pio_len;
1382 		sgl->address_lower += stp_req->pio_len;
1383 		stp_req->pio_len = 0;
1384 	}
1385 
1386 	stp_req->sgl.offset = offset;
1387 
1388 	return status;
1389 }
1390 
1391 /**
1392  * sci_stp_request_pio_data_in_copy_data_buffer()
1393  * @stp_req: The request that is used for the SGL processing.
1394  * @data_buf: The buffer of data to be copied.
1395  * @len: The length of the data transfer.
1396  *
1397  * Copy the data from the buffer for the length specified to the IO request SGL
1398  * specified data region. enum sci_status
1399  */
1400 static enum sci_status
sci_stp_request_pio_data_in_copy_data_buffer(struct isci_stp_request * stp_req,u8 * data_buf,u32 len)1401 sci_stp_request_pio_data_in_copy_data_buffer(struct isci_stp_request *stp_req,
1402 					     u8 *data_buf, u32 len)
1403 {
1404 	struct isci_request *ireq;
1405 	u8 *src_addr;
1406 	int copy_len;
1407 	struct sas_task *task;
1408 	struct scatterlist *sg;
1409 	void *kaddr;
1410 	int total_len = len;
1411 
1412 	ireq = to_ireq(stp_req);
1413 	task = isci_request_access_task(ireq);
1414 	src_addr = data_buf;
1415 
1416 	if (task->num_scatter > 0) {
1417 		sg = task->scatter;
1418 
1419 		while (total_len > 0) {
1420 			struct page *page = sg_page(sg);
1421 
1422 			copy_len = min_t(int, total_len, sg_dma_len(sg));
1423 			kaddr = kmap_atomic(page);
1424 			memcpy(kaddr + sg->offset, src_addr, copy_len);
1425 			kunmap_atomic(kaddr);
1426 			total_len -= copy_len;
1427 			src_addr += copy_len;
1428 			sg = sg_next(sg);
1429 		}
1430 	} else {
1431 		BUG_ON(task->total_xfer_len < total_len);
1432 		memcpy(task->scatter, src_addr, total_len);
1433 	}
1434 
1435 	return SCI_SUCCESS;
1436 }
1437 
1438 /**
1439  * sci_stp_request_pio_data_in_copy_data()
1440  * @stp_req: The PIO DATA IN request that is to receive the data.
1441  * @data_buffer: The buffer to copy from.
1442  *
1443  * Copy the data buffer to the io request data region. enum sci_status
1444  */
sci_stp_request_pio_data_in_copy_data(struct isci_stp_request * stp_req,u8 * data_buffer)1445 static enum sci_status sci_stp_request_pio_data_in_copy_data(
1446 	struct isci_stp_request *stp_req,
1447 	u8 *data_buffer)
1448 {
1449 	enum sci_status status;
1450 
1451 	/*
1452 	 * If there is less than 1K remaining in the transfer request
1453 	 * copy just the data for the transfer */
1454 	if (stp_req->pio_len < SCU_MAX_FRAME_BUFFER_SIZE) {
1455 		status = sci_stp_request_pio_data_in_copy_data_buffer(
1456 			stp_req, data_buffer, stp_req->pio_len);
1457 
1458 		if (status == SCI_SUCCESS)
1459 			stp_req->pio_len = 0;
1460 	} else {
1461 		/* We are transfering the whole frame so copy */
1462 		status = sci_stp_request_pio_data_in_copy_data_buffer(
1463 			stp_req, data_buffer, SCU_MAX_FRAME_BUFFER_SIZE);
1464 
1465 		if (status == SCI_SUCCESS)
1466 			stp_req->pio_len -= SCU_MAX_FRAME_BUFFER_SIZE;
1467 	}
1468 
1469 	return status;
1470 }
1471 
1472 static enum sci_status
stp_request_pio_await_h2d_completion_tc_event(struct isci_request * ireq,u32 completion_code)1473 stp_request_pio_await_h2d_completion_tc_event(struct isci_request *ireq,
1474 					      u32 completion_code)
1475 {
1476 	switch (SCU_GET_COMPLETION_TL_STATUS(completion_code)) {
1477 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_GOOD):
1478 		ireq->scu_status = SCU_TASK_DONE_GOOD;
1479 		ireq->sci_status = SCI_SUCCESS;
1480 		sci_change_state(&ireq->sm, SCI_REQ_STP_PIO_WAIT_FRAME);
1481 		break;
1482 
1483 	default:
1484 		/* All other completion status cause the IO to be
1485 		 * complete.  If a NAK was received, then it is up to
1486 		 * the user to retry the request.
1487 		 */
1488 		ireq->scu_status = SCU_NORMALIZE_COMPLETION_STATUS(completion_code);
1489 		ireq->sci_status = SCI_FAILURE_CONTROLLER_SPECIFIC_IO_ERR;
1490 		sci_change_state(&ireq->sm, SCI_REQ_COMPLETED);
1491 		break;
1492 	}
1493 
1494 	return SCI_SUCCESS;
1495 }
1496 
1497 static enum sci_status
pio_data_out_tx_done_tc_event(struct isci_request * ireq,u32 completion_code)1498 pio_data_out_tx_done_tc_event(struct isci_request *ireq,
1499 			      u32 completion_code)
1500 {
1501 	enum sci_status status = SCI_SUCCESS;
1502 	bool all_frames_transferred = false;
1503 	struct isci_stp_request *stp_req = &ireq->stp.req;
1504 
1505 	switch (SCU_GET_COMPLETION_TL_STATUS(completion_code)) {
1506 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_GOOD):
1507 		/* Transmit data */
1508 		if (stp_req->pio_len != 0) {
1509 			status = sci_stp_request_pio_data_out_transmit_data(ireq);
1510 			if (status == SCI_SUCCESS) {
1511 				if (stp_req->pio_len == 0)
1512 					all_frames_transferred = true;
1513 			}
1514 		} else if (stp_req->pio_len == 0) {
1515 			/*
1516 			 * this will happen if the all data is written at the
1517 			 * first time after the pio setup fis is received
1518 			 */
1519 			all_frames_transferred  = true;
1520 		}
1521 
1522 		/* all data transferred. */
1523 		if (all_frames_transferred) {
1524 			/*
1525 			 * Change the state to SCI_REQ_STP_PIO_DATA_IN
1526 			 * and wait for PIO_SETUP fis / or D2H REg fis. */
1527 			sci_change_state(&ireq->sm, SCI_REQ_STP_PIO_WAIT_FRAME);
1528 		}
1529 		break;
1530 
1531 	default:
1532 		/*
1533 		 * All other completion status cause the IO to be complete.
1534 		 * If a NAK was received, then it is up to the user to retry
1535 		 * the request.
1536 		 */
1537 		ireq->scu_status = SCU_NORMALIZE_COMPLETION_STATUS(completion_code);
1538 		ireq->sci_status = SCI_FAILURE_CONTROLLER_SPECIFIC_IO_ERR;
1539 		sci_change_state(&ireq->sm, SCI_REQ_COMPLETED);
1540 		break;
1541 	}
1542 
1543 	return status;
1544 }
1545 
sci_stp_request_udma_general_frame_handler(struct isci_request * ireq,u32 frame_index)1546 static enum sci_status sci_stp_request_udma_general_frame_handler(struct isci_request *ireq,
1547 								       u32 frame_index)
1548 {
1549 	struct isci_host *ihost = ireq->owning_controller;
1550 	struct dev_to_host_fis *frame_header;
1551 	enum sci_status status;
1552 	u32 *frame_buffer;
1553 
1554 	status = sci_unsolicited_frame_control_get_header(&ihost->uf_control,
1555 							       frame_index,
1556 							       (void **)&frame_header);
1557 
1558 	if ((status == SCI_SUCCESS) &&
1559 	    (frame_header->fis_type == FIS_REGD2H)) {
1560 		sci_unsolicited_frame_control_get_buffer(&ihost->uf_control,
1561 							      frame_index,
1562 							      (void **)&frame_buffer);
1563 
1564 		sci_controller_copy_sata_response(&ireq->stp.rsp,
1565 						       frame_header,
1566 						       frame_buffer);
1567 	}
1568 
1569 	sci_controller_release_frame(ihost, frame_index);
1570 
1571 	return status;
1572 }
1573 
process_unsolicited_fis(struct isci_request * ireq,u32 frame_index)1574 static enum sci_status process_unsolicited_fis(struct isci_request *ireq,
1575 					       u32 frame_index)
1576 {
1577 	struct isci_host *ihost = ireq->owning_controller;
1578 	enum sci_status status;
1579 	struct dev_to_host_fis *frame_header;
1580 	u32 *frame_buffer;
1581 
1582 	status = sci_unsolicited_frame_control_get_header(&ihost->uf_control,
1583 							  frame_index,
1584 							  (void **)&frame_header);
1585 
1586 	if (status != SCI_SUCCESS)
1587 		return status;
1588 
1589 	if (frame_header->fis_type != FIS_REGD2H) {
1590 		dev_err(&ireq->isci_host->pdev->dev,
1591 			"%s ERROR: invalid fis type 0x%X\n",
1592 			__func__, frame_header->fis_type);
1593 		return SCI_FAILURE;
1594 	}
1595 
1596 	sci_unsolicited_frame_control_get_buffer(&ihost->uf_control,
1597 						 frame_index,
1598 						 (void **)&frame_buffer);
1599 
1600 	sci_controller_copy_sata_response(&ireq->stp.rsp,
1601 					  (u32 *)frame_header,
1602 					  frame_buffer);
1603 
1604 	/* Frame has been decoded return it to the controller */
1605 	sci_controller_release_frame(ihost, frame_index);
1606 
1607 	return status;
1608 }
1609 
atapi_d2h_reg_frame_handler(struct isci_request * ireq,u32 frame_index)1610 static enum sci_status atapi_d2h_reg_frame_handler(struct isci_request *ireq,
1611 						   u32 frame_index)
1612 {
1613 	struct sas_task *task = isci_request_access_task(ireq);
1614 	enum sci_status status;
1615 
1616 	status = process_unsolicited_fis(ireq, frame_index);
1617 
1618 	if (status == SCI_SUCCESS) {
1619 		if (ireq->stp.rsp.status & ATA_ERR)
1620 			status = SCI_FAILURE_IO_RESPONSE_VALID;
1621 	} else {
1622 		status = SCI_FAILURE_IO_RESPONSE_VALID;
1623 	}
1624 
1625 	if (status != SCI_SUCCESS) {
1626 		ireq->scu_status = SCU_TASK_DONE_CHECK_RESPONSE;
1627 		ireq->sci_status = status;
1628 	} else {
1629 		ireq->scu_status = SCU_TASK_DONE_GOOD;
1630 		ireq->sci_status = SCI_SUCCESS;
1631 	}
1632 
1633 	/* the d2h ufi is the end of non-data commands */
1634 	if (task->data_dir == DMA_NONE)
1635 		sci_change_state(&ireq->sm, SCI_REQ_COMPLETED);
1636 
1637 	return status;
1638 }
1639 
scu_atapi_reconstruct_raw_frame_task_context(struct isci_request * ireq)1640 static void scu_atapi_reconstruct_raw_frame_task_context(struct isci_request *ireq)
1641 {
1642 	struct ata_device *dev = sas_to_ata_dev(ireq->target_device->domain_dev);
1643 	void *atapi_cdb = ireq->ttype_ptr.io_task_ptr->ata_task.atapi_packet;
1644 	struct scu_task_context *task_context = ireq->tc;
1645 
1646 	/* fill in the SCU Task Context for a DATA fis containing CDB in Raw Frame
1647 	 * type. The TC for previous Packet fis was already there, we only need to
1648 	 * change the H2D fis content.
1649 	 */
1650 	memset(&ireq->stp.cmd, 0, sizeof(struct host_to_dev_fis));
1651 	memcpy(((u8 *)&ireq->stp.cmd + sizeof(u32)), atapi_cdb, ATAPI_CDB_LEN);
1652 	memset(&(task_context->type.stp), 0, sizeof(struct stp_task_context));
1653 	task_context->type.stp.fis_type = FIS_DATA;
1654 	task_context->transfer_length_bytes = dev->cdb_len;
1655 }
1656 
scu_atapi_construct_task_context(struct isci_request * ireq)1657 static void scu_atapi_construct_task_context(struct isci_request *ireq)
1658 {
1659 	struct ata_device *dev = sas_to_ata_dev(ireq->target_device->domain_dev);
1660 	struct sas_task *task = isci_request_access_task(ireq);
1661 	struct scu_task_context *task_context = ireq->tc;
1662 	int cdb_len = dev->cdb_len;
1663 
1664 	/* reference: SSTL 1.13.4.2
1665 	 * task_type, sata_direction
1666 	 */
1667 	if (task->data_dir == DMA_TO_DEVICE) {
1668 		task_context->task_type = SCU_TASK_TYPE_PACKET_DMA_OUT;
1669 		task_context->sata_direction = 0;
1670 	} else {
1671 		/* todo: for NO_DATA command, we need to send out raw frame. */
1672 		task_context->task_type = SCU_TASK_TYPE_PACKET_DMA_IN;
1673 		task_context->sata_direction = 1;
1674 	}
1675 
1676 	memset(&task_context->type.stp, 0, sizeof(task_context->type.stp));
1677 	task_context->type.stp.fis_type = FIS_DATA;
1678 
1679 	memset(&ireq->stp.cmd, 0, sizeof(ireq->stp.cmd));
1680 	memcpy(&ireq->stp.cmd.lbal, task->ata_task.atapi_packet, cdb_len);
1681 	task_context->ssp_command_iu_length = cdb_len / sizeof(u32);
1682 
1683 	/* task phase is set to TX_CMD */
1684 	task_context->task_phase = 0x1;
1685 
1686 	/* retry counter */
1687 	task_context->stp_retry_count = 0;
1688 
1689 	/* data transfer size. */
1690 	task_context->transfer_length_bytes = task->total_xfer_len;
1691 
1692 	/* setup sgl */
1693 	sci_request_build_sgl(ireq);
1694 }
1695 
1696 enum sci_status
sci_io_request_frame_handler(struct isci_request * ireq,u32 frame_index)1697 sci_io_request_frame_handler(struct isci_request *ireq,
1698 				  u32 frame_index)
1699 {
1700 	struct isci_host *ihost = ireq->owning_controller;
1701 	struct isci_stp_request *stp_req = &ireq->stp.req;
1702 	enum sci_base_request_states state;
1703 	enum sci_status status;
1704 	ssize_t word_cnt;
1705 
1706 	state = ireq->sm.current_state_id;
1707 	switch (state)  {
1708 	case SCI_REQ_STARTED: {
1709 		struct ssp_frame_hdr ssp_hdr;
1710 		void *frame_header;
1711 
1712 		sci_unsolicited_frame_control_get_header(&ihost->uf_control,
1713 							      frame_index,
1714 							      &frame_header);
1715 
1716 		word_cnt = sizeof(struct ssp_frame_hdr) / sizeof(u32);
1717 		sci_swab32_cpy(&ssp_hdr, frame_header, word_cnt);
1718 
1719 		if (ssp_hdr.frame_type == SSP_RESPONSE) {
1720 			struct ssp_response_iu *resp_iu;
1721 			ssize_t word_cnt = SSP_RESP_IU_MAX_SIZE / sizeof(u32);
1722 
1723 			sci_unsolicited_frame_control_get_buffer(&ihost->uf_control,
1724 								      frame_index,
1725 								      (void **)&resp_iu);
1726 
1727 			sci_swab32_cpy(&ireq->ssp.rsp, resp_iu, word_cnt);
1728 
1729 			resp_iu = &ireq->ssp.rsp;
1730 
1731 			if (resp_iu->datapres == SAS_DATAPRES_RESPONSE_DATA ||
1732 			    resp_iu->datapres == SAS_DATAPRES_SENSE_DATA) {
1733 				ireq->scu_status = SCU_TASK_DONE_CHECK_RESPONSE;
1734 				ireq->sci_status = SCI_FAILURE_CONTROLLER_SPECIFIC_IO_ERR;
1735 			} else {
1736 				ireq->scu_status = SCU_TASK_DONE_GOOD;
1737 				ireq->sci_status = SCI_SUCCESS;
1738 			}
1739 		} else {
1740 			/* not a response frame, why did it get forwarded? */
1741 			dev_err(&ihost->pdev->dev,
1742 				"%s: SCIC IO Request 0x%p received unexpected "
1743 				"frame %d type 0x%02x\n", __func__, ireq,
1744 				frame_index, ssp_hdr.frame_type);
1745 		}
1746 
1747 		/*
1748 		 * In any case we are done with this frame buffer return it to
1749 		 * the controller
1750 		 */
1751 		sci_controller_release_frame(ihost, frame_index);
1752 
1753 		return SCI_SUCCESS;
1754 	}
1755 
1756 	case SCI_REQ_TASK_WAIT_TC_RESP:
1757 		sci_io_request_copy_response(ireq);
1758 		sci_change_state(&ireq->sm, SCI_REQ_COMPLETED);
1759 		sci_controller_release_frame(ihost, frame_index);
1760 		return SCI_SUCCESS;
1761 
1762 	case SCI_REQ_SMP_WAIT_RESP: {
1763 		struct sas_task *task = isci_request_access_task(ireq);
1764 		struct scatterlist *sg = &task->smp_task.smp_resp;
1765 		void *frame_header, *kaddr;
1766 		u8 *rsp;
1767 
1768 		sci_unsolicited_frame_control_get_header(&ihost->uf_control,
1769 							 frame_index,
1770 							 &frame_header);
1771 		kaddr = kmap_atomic(sg_page(sg));
1772 		rsp = kaddr + sg->offset;
1773 		sci_swab32_cpy(rsp, frame_header, 1);
1774 
1775 		if (rsp[0] == SMP_RESPONSE) {
1776 			void *smp_resp;
1777 
1778 			sci_unsolicited_frame_control_get_buffer(&ihost->uf_control,
1779 								 frame_index,
1780 								 &smp_resp);
1781 
1782 			word_cnt = (sg->length/4)-1;
1783 			if (word_cnt > 0)
1784 				word_cnt = min_t(unsigned int, word_cnt,
1785 						 SCU_UNSOLICITED_FRAME_BUFFER_SIZE/4);
1786 			sci_swab32_cpy(rsp + 4, smp_resp, word_cnt);
1787 
1788 			ireq->scu_status = SCU_TASK_DONE_GOOD;
1789 			ireq->sci_status = SCI_SUCCESS;
1790 			sci_change_state(&ireq->sm, SCI_REQ_SMP_WAIT_TC_COMP);
1791 		} else {
1792 			/*
1793 			 * This was not a response frame why did it get
1794 			 * forwarded?
1795 			 */
1796 			dev_err(&ihost->pdev->dev,
1797 				"%s: SCIC SMP Request 0x%p received unexpected "
1798 				"frame %d type 0x%02x\n",
1799 				__func__,
1800 				ireq,
1801 				frame_index,
1802 				rsp[0]);
1803 
1804 			ireq->scu_status = SCU_TASK_DONE_SMP_FRM_TYPE_ERR;
1805 			ireq->sci_status = SCI_FAILURE_CONTROLLER_SPECIFIC_IO_ERR;
1806 			sci_change_state(&ireq->sm, SCI_REQ_COMPLETED);
1807 		}
1808 		kunmap_atomic(kaddr);
1809 
1810 		sci_controller_release_frame(ihost, frame_index);
1811 
1812 		return SCI_SUCCESS;
1813 	}
1814 
1815 	case SCI_REQ_STP_UDMA_WAIT_TC_COMP:
1816 		return sci_stp_request_udma_general_frame_handler(ireq,
1817 								       frame_index);
1818 
1819 	case SCI_REQ_STP_UDMA_WAIT_D2H:
1820 		/* Use the general frame handler to copy the resposne data */
1821 		status = sci_stp_request_udma_general_frame_handler(ireq, frame_index);
1822 
1823 		if (status != SCI_SUCCESS)
1824 			return status;
1825 
1826 		ireq->scu_status = SCU_TASK_DONE_CHECK_RESPONSE;
1827 		ireq->sci_status = SCI_FAILURE_IO_RESPONSE_VALID;
1828 		sci_change_state(&ireq->sm, SCI_REQ_COMPLETED);
1829 		return SCI_SUCCESS;
1830 
1831 	case SCI_REQ_STP_NON_DATA_WAIT_D2H: {
1832 		struct dev_to_host_fis *frame_header;
1833 		u32 *frame_buffer;
1834 
1835 		status = sci_unsolicited_frame_control_get_header(&ihost->uf_control,
1836 								       frame_index,
1837 								       (void **)&frame_header);
1838 
1839 		if (status != SCI_SUCCESS) {
1840 			dev_err(&ihost->pdev->dev,
1841 				"%s: SCIC IO Request 0x%p could not get frame "
1842 				"header for frame index %d, status %x\n",
1843 				__func__,
1844 				stp_req,
1845 				frame_index,
1846 				status);
1847 
1848 			return status;
1849 		}
1850 
1851 		switch (frame_header->fis_type) {
1852 		case FIS_REGD2H:
1853 			sci_unsolicited_frame_control_get_buffer(&ihost->uf_control,
1854 								      frame_index,
1855 								      (void **)&frame_buffer);
1856 
1857 			sci_controller_copy_sata_response(&ireq->stp.rsp,
1858 							       frame_header,
1859 							       frame_buffer);
1860 
1861 			/* The command has completed with error */
1862 			ireq->scu_status = SCU_TASK_DONE_CHECK_RESPONSE;
1863 			ireq->sci_status = SCI_FAILURE_IO_RESPONSE_VALID;
1864 			break;
1865 
1866 		default:
1867 			dev_warn(&ihost->pdev->dev,
1868 				 "%s: IO Request:0x%p Frame Id:%d protocol "
1869 				  "violation occurred\n", __func__, stp_req,
1870 				  frame_index);
1871 
1872 			ireq->scu_status = SCU_TASK_DONE_UNEXP_FIS;
1873 			ireq->sci_status = SCI_FAILURE_PROTOCOL_VIOLATION;
1874 			break;
1875 		}
1876 
1877 		sci_change_state(&ireq->sm, SCI_REQ_COMPLETED);
1878 
1879 		/* Frame has been decoded return it to the controller */
1880 		sci_controller_release_frame(ihost, frame_index);
1881 
1882 		return status;
1883 	}
1884 
1885 	case SCI_REQ_STP_PIO_WAIT_FRAME: {
1886 		struct sas_task *task = isci_request_access_task(ireq);
1887 		struct dev_to_host_fis *frame_header;
1888 		u32 *frame_buffer;
1889 
1890 		status = sci_unsolicited_frame_control_get_header(&ihost->uf_control,
1891 								       frame_index,
1892 								       (void **)&frame_header);
1893 
1894 		if (status != SCI_SUCCESS) {
1895 			dev_err(&ihost->pdev->dev,
1896 				"%s: SCIC IO Request 0x%p could not get frame "
1897 				"header for frame index %d, status %x\n",
1898 				__func__, stp_req, frame_index, status);
1899 			return status;
1900 		}
1901 
1902 		switch (frame_header->fis_type) {
1903 		case FIS_PIO_SETUP:
1904 			/* Get from the frame buffer the PIO Setup Data */
1905 			sci_unsolicited_frame_control_get_buffer(&ihost->uf_control,
1906 								      frame_index,
1907 								      (void **)&frame_buffer);
1908 
1909 			/* Get the data from the PIO Setup The SCU Hardware
1910 			 * returns first word in the frame_header and the rest
1911 			 * of the data is in the frame buffer so we need to
1912 			 * back up one dword
1913 			 */
1914 
1915 			/* transfer_count: first 16bits in the 4th dword */
1916 			stp_req->pio_len = frame_buffer[3] & 0xffff;
1917 
1918 			/* status: 4th byte in the 3rd dword */
1919 			stp_req->status = (frame_buffer[2] >> 24) & 0xff;
1920 
1921 			sci_controller_copy_sata_response(&ireq->stp.rsp,
1922 							       frame_header,
1923 							       frame_buffer);
1924 
1925 			ireq->stp.rsp.status = stp_req->status;
1926 
1927 			/* The next state is dependent on whether the
1928 			 * request was PIO Data-in or Data out
1929 			 */
1930 			if (task->data_dir == DMA_FROM_DEVICE) {
1931 				sci_change_state(&ireq->sm, SCI_REQ_STP_PIO_DATA_IN);
1932 			} else if (task->data_dir == DMA_TO_DEVICE) {
1933 				/* Transmit data */
1934 				status = sci_stp_request_pio_data_out_transmit_data(ireq);
1935 				if (status != SCI_SUCCESS)
1936 					break;
1937 				sci_change_state(&ireq->sm, SCI_REQ_STP_PIO_DATA_OUT);
1938 			}
1939 			break;
1940 
1941 		case FIS_SETDEVBITS:
1942 			sci_change_state(&ireq->sm, SCI_REQ_STP_PIO_WAIT_FRAME);
1943 			break;
1944 
1945 		case FIS_REGD2H:
1946 			if (frame_header->status & ATA_BUSY) {
1947 				/*
1948 				 * Now why is the drive sending a D2H Register
1949 				 * FIS when it is still busy?  Do nothing since
1950 				 * we are still in the right state.
1951 				 */
1952 				dev_dbg(&ihost->pdev->dev,
1953 					"%s: SCIC PIO Request 0x%p received "
1954 					"D2H Register FIS with BSY status "
1955 					"0x%x\n",
1956 					__func__,
1957 					stp_req,
1958 					frame_header->status);
1959 				break;
1960 			}
1961 
1962 			sci_unsolicited_frame_control_get_buffer(&ihost->uf_control,
1963 								      frame_index,
1964 								      (void **)&frame_buffer);
1965 
1966 			sci_controller_copy_sata_response(&ireq->stp.rsp,
1967 							       frame_header,
1968 							       frame_buffer);
1969 
1970 			ireq->scu_status = SCU_TASK_DONE_CHECK_RESPONSE;
1971 			ireq->sci_status = SCI_FAILURE_IO_RESPONSE_VALID;
1972 			sci_change_state(&ireq->sm, SCI_REQ_COMPLETED);
1973 			break;
1974 
1975 		default:
1976 			/* FIXME: what do we do here? */
1977 			break;
1978 		}
1979 
1980 		/* Frame is decoded return it to the controller */
1981 		sci_controller_release_frame(ihost, frame_index);
1982 
1983 		return status;
1984 	}
1985 
1986 	case SCI_REQ_STP_PIO_DATA_IN: {
1987 		struct dev_to_host_fis *frame_header;
1988 		struct sata_fis_data *frame_buffer;
1989 
1990 		status = sci_unsolicited_frame_control_get_header(&ihost->uf_control,
1991 								       frame_index,
1992 								       (void **)&frame_header);
1993 
1994 		if (status != SCI_SUCCESS) {
1995 			dev_err(&ihost->pdev->dev,
1996 				"%s: SCIC IO Request 0x%p could not get frame "
1997 				"header for frame index %d, status %x\n",
1998 				__func__,
1999 				stp_req,
2000 				frame_index,
2001 				status);
2002 			return status;
2003 		}
2004 
2005 		if (frame_header->fis_type != FIS_DATA) {
2006 			dev_err(&ihost->pdev->dev,
2007 				"%s: SCIC PIO Request 0x%p received frame %d "
2008 				"with fis type 0x%02x when expecting a data "
2009 				"fis.\n",
2010 				__func__,
2011 				stp_req,
2012 				frame_index,
2013 				frame_header->fis_type);
2014 
2015 			ireq->scu_status = SCU_TASK_DONE_GOOD;
2016 			ireq->sci_status = SCI_FAILURE_IO_REQUIRES_SCSI_ABORT;
2017 			sci_change_state(&ireq->sm, SCI_REQ_COMPLETED);
2018 
2019 			/* Frame is decoded return it to the controller */
2020 			sci_controller_release_frame(ihost, frame_index);
2021 			return status;
2022 		}
2023 
2024 		if (stp_req->sgl.index < 0) {
2025 			ireq->saved_rx_frame_index = frame_index;
2026 			stp_req->pio_len = 0;
2027 		} else {
2028 			sci_unsolicited_frame_control_get_buffer(&ihost->uf_control,
2029 								      frame_index,
2030 								      (void **)&frame_buffer);
2031 
2032 			status = sci_stp_request_pio_data_in_copy_data(stp_req,
2033 									    (u8 *)frame_buffer);
2034 
2035 			/* Frame is decoded return it to the controller */
2036 			sci_controller_release_frame(ihost, frame_index);
2037 		}
2038 
2039 		/* Check for the end of the transfer, are there more
2040 		 * bytes remaining for this data transfer
2041 		 */
2042 		if (status != SCI_SUCCESS || stp_req->pio_len != 0)
2043 			return status;
2044 
2045 		if ((stp_req->status & ATA_BUSY) == 0) {
2046 			ireq->scu_status = SCU_TASK_DONE_CHECK_RESPONSE;
2047 			ireq->sci_status = SCI_FAILURE_IO_RESPONSE_VALID;
2048 			sci_change_state(&ireq->sm, SCI_REQ_COMPLETED);
2049 		} else {
2050 			sci_change_state(&ireq->sm, SCI_REQ_STP_PIO_WAIT_FRAME);
2051 		}
2052 		return status;
2053 	}
2054 
2055 	case SCI_REQ_ATAPI_WAIT_PIO_SETUP: {
2056 		struct sas_task *task = isci_request_access_task(ireq);
2057 
2058 		sci_controller_release_frame(ihost, frame_index);
2059 		ireq->target_device->working_request = ireq;
2060 		if (task->data_dir == DMA_NONE) {
2061 			sci_change_state(&ireq->sm, SCI_REQ_ATAPI_WAIT_TC_COMP);
2062 			scu_atapi_reconstruct_raw_frame_task_context(ireq);
2063 		} else {
2064 			sci_change_state(&ireq->sm, SCI_REQ_ATAPI_WAIT_D2H);
2065 			scu_atapi_construct_task_context(ireq);
2066 		}
2067 
2068 		sci_controller_continue_io(ireq);
2069 		return SCI_SUCCESS;
2070 	}
2071 	case SCI_REQ_ATAPI_WAIT_D2H:
2072 		return atapi_d2h_reg_frame_handler(ireq, frame_index);
2073 	case SCI_REQ_ABORTING:
2074 		/*
2075 		 * TODO: Is it even possible to get an unsolicited frame in the
2076 		 * aborting state?
2077 		 */
2078 		sci_controller_release_frame(ihost, frame_index);
2079 		return SCI_SUCCESS;
2080 
2081 	default:
2082 		dev_warn(&ihost->pdev->dev,
2083 			 "%s: SCIC IO Request given unexpected frame %x while "
2084 			 "in state %d\n",
2085 			 __func__,
2086 			 frame_index,
2087 			 state);
2088 
2089 		sci_controller_release_frame(ihost, frame_index);
2090 		return SCI_FAILURE_INVALID_STATE;
2091 	}
2092 }
2093 
stp_request_udma_await_tc_event(struct isci_request * ireq,u32 completion_code)2094 static enum sci_status stp_request_udma_await_tc_event(struct isci_request *ireq,
2095 						       u32 completion_code)
2096 {
2097 	switch (SCU_GET_COMPLETION_TL_STATUS(completion_code)) {
2098 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_GOOD):
2099 		ireq->scu_status = SCU_TASK_DONE_GOOD;
2100 		ireq->sci_status = SCI_SUCCESS;
2101 		sci_change_state(&ireq->sm, SCI_REQ_COMPLETED);
2102 		break;
2103 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_UNEXP_FIS):
2104 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_REG_ERR):
2105 		/* We must check ther response buffer to see if the D2H
2106 		 * Register FIS was received before we got the TC
2107 		 * completion.
2108 		 */
2109 		if (ireq->stp.rsp.fis_type == FIS_REGD2H) {
2110 			sci_remote_device_suspend(ireq->target_device,
2111 						  SCI_SW_SUSPEND_NORMAL);
2112 
2113 			ireq->scu_status = SCU_TASK_DONE_CHECK_RESPONSE;
2114 			ireq->sci_status = SCI_FAILURE_IO_RESPONSE_VALID;
2115 			sci_change_state(&ireq->sm, SCI_REQ_COMPLETED);
2116 		} else {
2117 			/* If we have an error completion status for the
2118 			 * TC then we can expect a D2H register FIS from
2119 			 * the device so we must change state to wait
2120 			 * for it
2121 			 */
2122 			sci_change_state(&ireq->sm, SCI_REQ_STP_UDMA_WAIT_D2H);
2123 		}
2124 		break;
2125 
2126 	/* TODO Check to see if any of these completion status need to
2127 	 * wait for the device to host register fis.
2128 	 */
2129 	/* TODO We can retry the command for SCU_TASK_DONE_CMD_LL_R_ERR
2130 	 * - this comes only for B0
2131 	 */
2132 	default:
2133 		/* All other completion status cause the IO to be complete. */
2134 		ireq->scu_status = SCU_NORMALIZE_COMPLETION_STATUS(completion_code);
2135 		ireq->sci_status = SCI_FAILURE_CONTROLLER_SPECIFIC_IO_ERR;
2136 		sci_change_state(&ireq->sm, SCI_REQ_COMPLETED);
2137 		break;
2138 	}
2139 
2140 	return SCI_SUCCESS;
2141 }
2142 
atapi_raw_completion(struct isci_request * ireq,u32 completion_code,enum sci_base_request_states next)2143 static enum sci_status atapi_raw_completion(struct isci_request *ireq, u32 completion_code,
2144 						  enum sci_base_request_states next)
2145 {
2146 	switch (SCU_GET_COMPLETION_TL_STATUS(completion_code)) {
2147 	case SCU_MAKE_COMPLETION_STATUS(SCU_TASK_DONE_GOOD):
2148 		ireq->scu_status = SCU_TASK_DONE_GOOD;
2149 		ireq->sci_status = SCI_SUCCESS;
2150 		sci_change_state(&ireq->sm, next);
2151 		break;
2152 	default:
2153 		/* All other completion status cause the IO to be complete.
2154 		 * If a NAK was received, then it is up to the user to retry
2155 		 * the request.
2156 		 */
2157 		ireq->scu_status = SCU_NORMALIZE_COMPLETION_STATUS(completion_code);
2158 		ireq->sci_status = SCI_FAILURE_CONTROLLER_SPECIFIC_IO_ERR;
2159 
2160 		sci_change_state(&ireq->sm, SCI_REQ_COMPLETED);
2161 		break;
2162 	}
2163 
2164 	return SCI_SUCCESS;
2165 }
2166 
atapi_data_tc_completion_handler(struct isci_request * ireq,u32 completion_code)2167 static enum sci_status atapi_data_tc_completion_handler(struct isci_request *ireq,
2168 							u32 completion_code)
2169 {
2170 	struct isci_remote_device *idev = ireq->target_device;
2171 	struct dev_to_host_fis *d2h = &ireq->stp.rsp;
2172 	enum sci_status status = SCI_SUCCESS;
2173 
2174 	switch (SCU_GET_COMPLETION_TL_STATUS(completion_code)) {
2175 	case (SCU_TASK_DONE_GOOD << SCU_COMPLETION_TL_STATUS_SHIFT):
2176 		sci_change_state(&ireq->sm, SCI_REQ_COMPLETED);
2177 		break;
2178 
2179 	case (SCU_TASK_DONE_UNEXP_FIS << SCU_COMPLETION_TL_STATUS_SHIFT): {
2180 		u16 len = sci_req_tx_bytes(ireq);
2181 
2182 		/* likely non-error data underrun, workaround missing
2183 		 * d2h frame from the controller
2184 		 */
2185 		if (d2h->fis_type != FIS_REGD2H) {
2186 			d2h->fis_type = FIS_REGD2H;
2187 			d2h->flags = (1 << 6);
2188 			d2h->status = 0x50;
2189 			d2h->error = 0;
2190 			d2h->lbal = 0;
2191 			d2h->byte_count_low = len & 0xff;
2192 			d2h->byte_count_high = len >> 8;
2193 			d2h->device = 0xa0;
2194 			d2h->lbal_exp = 0;
2195 			d2h->lbam_exp = 0;
2196 			d2h->lbah_exp = 0;
2197 			d2h->_r_a = 0;
2198 			d2h->sector_count = 0x3;
2199 			d2h->sector_count_exp = 0;
2200 			d2h->_r_b = 0;
2201 			d2h->_r_c = 0;
2202 			d2h->_r_d = 0;
2203 		}
2204 
2205 		ireq->scu_status = SCU_TASK_DONE_GOOD;
2206 		ireq->sci_status = SCI_SUCCESS_IO_DONE_EARLY;
2207 		status = ireq->sci_status;
2208 
2209 		/* the hw will have suspended the rnc, so complete the
2210 		 * request upon pending resume
2211 		 */
2212 		sci_change_state(&idev->sm, SCI_STP_DEV_ATAPI_ERROR);
2213 		break;
2214 	}
2215 	case (SCU_TASK_DONE_EXCESS_DATA << SCU_COMPLETION_TL_STATUS_SHIFT):
2216 		/* In this case, there is no UF coming after.
2217 		 * compelte the IO now.
2218 		 */
2219 		ireq->scu_status = SCU_TASK_DONE_GOOD;
2220 		ireq->sci_status = SCI_SUCCESS;
2221 		sci_change_state(&ireq->sm, SCI_REQ_COMPLETED);
2222 		break;
2223 
2224 	default:
2225 		if (d2h->fis_type == FIS_REGD2H) {
2226 			/* UF received change the device state to ATAPI_ERROR */
2227 			status = ireq->sci_status;
2228 			sci_change_state(&idev->sm, SCI_STP_DEV_ATAPI_ERROR);
2229 		} else {
2230 			/* If receiving any non-success TC status, no UF
2231 			 * received yet, then an UF for the status fis
2232 			 * is coming after (XXX: suspect this is
2233 			 * actually a protocol error or a bug like the
2234 			 * DONE_UNEXP_FIS case)
2235 			 */
2236 			ireq->scu_status = SCU_TASK_DONE_CHECK_RESPONSE;
2237 			ireq->sci_status = SCI_FAILURE_IO_RESPONSE_VALID;
2238 
2239 			sci_change_state(&ireq->sm, SCI_REQ_ATAPI_WAIT_D2H);
2240 		}
2241 		break;
2242 	}
2243 
2244 	return status;
2245 }
2246 
sci_request_smp_completion_status_is_tx_suspend(unsigned int completion_status)2247 static int sci_request_smp_completion_status_is_tx_suspend(
2248 	unsigned int completion_status)
2249 {
2250 	switch (completion_status) {
2251 	case SCU_TASK_OPEN_REJECT_WRONG_DESTINATION:
2252 	case SCU_TASK_OPEN_REJECT_RESERVED_ABANDON_1:
2253 	case SCU_TASK_OPEN_REJECT_RESERVED_ABANDON_2:
2254 	case SCU_TASK_OPEN_REJECT_RESERVED_ABANDON_3:
2255 	case SCU_TASK_OPEN_REJECT_BAD_DESTINATION:
2256 	case SCU_TASK_OPEN_REJECT_ZONE_VIOLATION:
2257 		return 1;
2258 	}
2259 	return 0;
2260 }
2261 
sci_request_smp_completion_status_is_tx_rx_suspend(unsigned int completion_status)2262 static int sci_request_smp_completion_status_is_tx_rx_suspend(
2263 	unsigned int completion_status)
2264 {
2265 	return 0; /* There are no Tx/Rx SMP suspend conditions. */
2266 }
2267 
sci_request_ssp_completion_status_is_tx_suspend(unsigned int completion_status)2268 static int sci_request_ssp_completion_status_is_tx_suspend(
2269 	unsigned int completion_status)
2270 {
2271 	switch (completion_status) {
2272 	case SCU_TASK_DONE_TX_RAW_CMD_ERR:
2273 	case SCU_TASK_DONE_LF_ERR:
2274 	case SCU_TASK_OPEN_REJECT_WRONG_DESTINATION:
2275 	case SCU_TASK_OPEN_REJECT_RESERVED_ABANDON_1:
2276 	case SCU_TASK_OPEN_REJECT_RESERVED_ABANDON_2:
2277 	case SCU_TASK_OPEN_REJECT_RESERVED_ABANDON_3:
2278 	case SCU_TASK_OPEN_REJECT_BAD_DESTINATION:
2279 	case SCU_TASK_OPEN_REJECT_ZONE_VIOLATION:
2280 	case SCU_TASK_OPEN_REJECT_STP_RESOURCES_BUSY:
2281 	case SCU_TASK_OPEN_REJECT_PROTOCOL_NOT_SUPPORTED:
2282 	case SCU_TASK_OPEN_REJECT_CONNECTION_RATE_NOT_SUPPORTED:
2283 		return 1;
2284 	}
2285 	return 0;
2286 }
2287 
sci_request_ssp_completion_status_is_tx_rx_suspend(unsigned int completion_status)2288 static int sci_request_ssp_completion_status_is_tx_rx_suspend(
2289 	unsigned int completion_status)
2290 {
2291 	return 0; /* There are no Tx/Rx SSP suspend conditions. */
2292 }
2293 
sci_request_stpsata_completion_status_is_tx_suspend(unsigned int completion_status)2294 static int sci_request_stpsata_completion_status_is_tx_suspend(
2295 	unsigned int completion_status)
2296 {
2297 	switch (completion_status) {
2298 	case SCU_TASK_DONE_TX_RAW_CMD_ERR:
2299 	case SCU_TASK_DONE_LL_R_ERR:
2300 	case SCU_TASK_DONE_LL_PERR:
2301 	case SCU_TASK_DONE_REG_ERR:
2302 	case SCU_TASK_DONE_SDB_ERR:
2303 	case SCU_TASK_OPEN_REJECT_WRONG_DESTINATION:
2304 	case SCU_TASK_OPEN_REJECT_RESERVED_ABANDON_1:
2305 	case SCU_TASK_OPEN_REJECT_RESERVED_ABANDON_2:
2306 	case SCU_TASK_OPEN_REJECT_RESERVED_ABANDON_3:
2307 	case SCU_TASK_OPEN_REJECT_BAD_DESTINATION:
2308 	case SCU_TASK_OPEN_REJECT_ZONE_VIOLATION:
2309 	case SCU_TASK_OPEN_REJECT_STP_RESOURCES_BUSY:
2310 	case SCU_TASK_OPEN_REJECT_PROTOCOL_NOT_SUPPORTED:
2311 	case SCU_TASK_OPEN_REJECT_CONNECTION_RATE_NOT_SUPPORTED:
2312 		return 1;
2313 	}
2314 	return 0;
2315 }
2316 
2317 
sci_request_stpsata_completion_status_is_tx_rx_suspend(unsigned int completion_status)2318 static int sci_request_stpsata_completion_status_is_tx_rx_suspend(
2319 	unsigned int completion_status)
2320 {
2321 	switch (completion_status) {
2322 	case SCU_TASK_DONE_LF_ERR:
2323 	case SCU_TASK_DONE_LL_SY_TERM:
2324 	case SCU_TASK_DONE_LL_LF_TERM:
2325 	case SCU_TASK_DONE_BREAK_RCVD:
2326 	case SCU_TASK_DONE_INV_FIS_LEN:
2327 	case SCU_TASK_DONE_UNEXP_FIS:
2328 	case SCU_TASK_DONE_UNEXP_SDBFIS:
2329 	case SCU_TASK_DONE_MAX_PLD_ERR:
2330 		return 1;
2331 	}
2332 	return 0;
2333 }
2334 
sci_request_handle_suspending_completions(struct isci_request * ireq,u32 completion_code)2335 static void sci_request_handle_suspending_completions(
2336 	struct isci_request *ireq,
2337 	u32 completion_code)
2338 {
2339 	int is_tx = 0;
2340 	int is_tx_rx = 0;
2341 
2342 	switch (ireq->protocol) {
2343 	case SAS_PROTOCOL_SMP:
2344 		is_tx = sci_request_smp_completion_status_is_tx_suspend(
2345 			completion_code);
2346 		is_tx_rx = sci_request_smp_completion_status_is_tx_rx_suspend(
2347 			completion_code);
2348 		break;
2349 	case SAS_PROTOCOL_SSP:
2350 		is_tx = sci_request_ssp_completion_status_is_tx_suspend(
2351 			completion_code);
2352 		is_tx_rx = sci_request_ssp_completion_status_is_tx_rx_suspend(
2353 			completion_code);
2354 		break;
2355 	case SAS_PROTOCOL_STP:
2356 		is_tx = sci_request_stpsata_completion_status_is_tx_suspend(
2357 			completion_code);
2358 		is_tx_rx =
2359 			sci_request_stpsata_completion_status_is_tx_rx_suspend(
2360 				completion_code);
2361 		break;
2362 	default:
2363 		dev_warn(&ireq->isci_host->pdev->dev,
2364 			 "%s: request %p has no valid protocol\n",
2365 			 __func__, ireq);
2366 		break;
2367 	}
2368 	if (is_tx || is_tx_rx) {
2369 		BUG_ON(is_tx && is_tx_rx);
2370 
2371 		sci_remote_node_context_suspend(
2372 			&ireq->target_device->rnc,
2373 			SCI_HW_SUSPEND,
2374 			(is_tx_rx) ? SCU_EVENT_TL_RNC_SUSPEND_TX_RX
2375 				   : SCU_EVENT_TL_RNC_SUSPEND_TX);
2376 	}
2377 }
2378 
2379 enum sci_status
sci_io_request_tc_completion(struct isci_request * ireq,u32 completion_code)2380 sci_io_request_tc_completion(struct isci_request *ireq,
2381 			     u32 completion_code)
2382 {
2383 	enum sci_base_request_states state;
2384 	struct isci_host *ihost = ireq->owning_controller;
2385 
2386 	state = ireq->sm.current_state_id;
2387 
2388 	/* Decode those completions that signal upcoming suspension events. */
2389 	sci_request_handle_suspending_completions(
2390 		ireq, SCU_GET_COMPLETION_TL_STATUS(completion_code));
2391 
2392 	switch (state) {
2393 	case SCI_REQ_STARTED:
2394 		return request_started_state_tc_event(ireq, completion_code);
2395 
2396 	case SCI_REQ_TASK_WAIT_TC_COMP:
2397 		return ssp_task_request_await_tc_event(ireq,
2398 						       completion_code);
2399 
2400 	case SCI_REQ_SMP_WAIT_RESP:
2401 		return smp_request_await_response_tc_event(ireq,
2402 							   completion_code);
2403 
2404 	case SCI_REQ_SMP_WAIT_TC_COMP:
2405 		return smp_request_await_tc_event(ireq, completion_code);
2406 
2407 	case SCI_REQ_STP_UDMA_WAIT_TC_COMP:
2408 		return stp_request_udma_await_tc_event(ireq,
2409 						       completion_code);
2410 
2411 	case SCI_REQ_STP_NON_DATA_WAIT_H2D:
2412 		return stp_request_non_data_await_h2d_tc_event(ireq,
2413 							       completion_code);
2414 
2415 	case SCI_REQ_STP_PIO_WAIT_H2D:
2416 		return stp_request_pio_await_h2d_completion_tc_event(ireq,
2417 								     completion_code);
2418 
2419 	case SCI_REQ_STP_PIO_DATA_OUT:
2420 		return pio_data_out_tx_done_tc_event(ireq, completion_code);
2421 
2422 	case SCI_REQ_ABORTING:
2423 		return request_aborting_state_tc_event(ireq,
2424 						       completion_code);
2425 
2426 	case SCI_REQ_ATAPI_WAIT_H2D:
2427 		return atapi_raw_completion(ireq, completion_code,
2428 					    SCI_REQ_ATAPI_WAIT_PIO_SETUP);
2429 
2430 	case SCI_REQ_ATAPI_WAIT_TC_COMP:
2431 		return atapi_raw_completion(ireq, completion_code,
2432 					    SCI_REQ_ATAPI_WAIT_D2H);
2433 
2434 	case SCI_REQ_ATAPI_WAIT_D2H:
2435 		return atapi_data_tc_completion_handler(ireq, completion_code);
2436 
2437 	default:
2438 		dev_warn(&ihost->pdev->dev, "%s: %x in wrong state %s\n",
2439 			 __func__, completion_code, req_state_name(state));
2440 		return SCI_FAILURE_INVALID_STATE;
2441 	}
2442 }
2443 
2444 /**
2445  * isci_request_process_response_iu() - This function sets the status and
2446  *    response iu, in the task struct, from the request object for the upper
2447  *    layer driver.
2448  * @task: This parameter is the task struct from the upper layer driver.
2449  * @resp_iu: This parameter points to the response iu of the completed request.
2450  * @dev: This parameter specifies the linux device struct.
2451  *
2452  * none.
2453  */
isci_request_process_response_iu(struct sas_task * task,struct ssp_response_iu * resp_iu,struct device * dev)2454 static void isci_request_process_response_iu(
2455 	struct sas_task *task,
2456 	struct ssp_response_iu *resp_iu,
2457 	struct device *dev)
2458 {
2459 	dev_dbg(dev,
2460 		"%s: resp_iu = %p "
2461 		"resp_iu->status = 0x%x,\nresp_iu->datapres = %d "
2462 		"resp_iu->response_data_len = %x, "
2463 		"resp_iu->sense_data_len = %x\nresponse data: ",
2464 		__func__,
2465 		resp_iu,
2466 		resp_iu->status,
2467 		resp_iu->datapres,
2468 		resp_iu->response_data_len,
2469 		resp_iu->sense_data_len);
2470 
2471 	task->task_status.stat = resp_iu->status;
2472 
2473 	/* libsas updates the task status fields based on the response iu. */
2474 	sas_ssp_task_response(dev, task, resp_iu);
2475 }
2476 
2477 /**
2478  * isci_request_set_open_reject_status() - This function prepares the I/O
2479  *    completion for OPEN_REJECT conditions.
2480  * @request: This parameter is the completed isci_request object.
2481  * @task: This parameter is the task struct from the upper layer driver.
2482  * @response_ptr: This parameter specifies the service response for the I/O.
2483  * @status_ptr: This parameter specifies the exec status for the I/O.
2484  * @open_rej_reason: This parameter specifies the encoded reason for the
2485  *    abandon-class reject.
2486  *
2487  * none.
2488  */
isci_request_set_open_reject_status(struct isci_request * request,struct sas_task * task,enum service_response * response_ptr,enum exec_status * status_ptr,enum sas_open_rej_reason open_rej_reason)2489 static void isci_request_set_open_reject_status(
2490 	struct isci_request *request,
2491 	struct sas_task *task,
2492 	enum service_response *response_ptr,
2493 	enum exec_status *status_ptr,
2494 	enum sas_open_rej_reason open_rej_reason)
2495 {
2496 	/* Task in the target is done. */
2497 	set_bit(IREQ_COMPLETE_IN_TARGET, &request->flags);
2498 	*response_ptr                     = SAS_TASK_UNDELIVERED;
2499 	*status_ptr                       = SAS_OPEN_REJECT;
2500 	task->task_status.open_rej_reason = open_rej_reason;
2501 }
2502 
2503 /**
2504  * isci_request_handle_controller_specific_errors() - This function decodes
2505  *    controller-specific I/O completion error conditions.
2506  * @idev: Remote device
2507  * @request: This parameter is the completed isci_request object.
2508  * @task: This parameter is the task struct from the upper layer driver.
2509  * @response_ptr: This parameter specifies the service response for the I/O.
2510  * @status_ptr: This parameter specifies the exec status for the I/O.
2511  *
2512  * none.
2513  */
isci_request_handle_controller_specific_errors(struct isci_remote_device * idev,struct isci_request * request,struct sas_task * task,enum service_response * response_ptr,enum exec_status * status_ptr)2514 static void isci_request_handle_controller_specific_errors(
2515 	struct isci_remote_device *idev,
2516 	struct isci_request *request,
2517 	struct sas_task *task,
2518 	enum service_response *response_ptr,
2519 	enum exec_status *status_ptr)
2520 {
2521 	unsigned int cstatus;
2522 
2523 	cstatus = request->scu_status;
2524 
2525 	dev_dbg(&request->isci_host->pdev->dev,
2526 		"%s: %p SCI_FAILURE_CONTROLLER_SPECIFIC_IO_ERR "
2527 		"- controller status = 0x%x\n",
2528 		__func__, request, cstatus);
2529 
2530 	/* Decode the controller-specific errors; most
2531 	 * important is to recognize those conditions in which
2532 	 * the target may still have a task outstanding that
2533 	 * must be aborted.
2534 	 *
2535 	 * Note that there are SCU completion codes being
2536 	 * named in the decode below for which SCIC has already
2537 	 * done work to handle them in a way other than as
2538 	 * a controller-specific completion code; these are left
2539 	 * in the decode below for completeness sake.
2540 	 */
2541 	switch (cstatus) {
2542 	case SCU_TASK_DONE_DMASETUP_DIRERR:
2543 	/* Also SCU_TASK_DONE_SMP_FRM_TYPE_ERR: */
2544 	case SCU_TASK_DONE_XFERCNT_ERR:
2545 		/* Also SCU_TASK_DONE_SMP_UFI_ERR: */
2546 		if (task->task_proto == SAS_PROTOCOL_SMP) {
2547 			/* SCU_TASK_DONE_SMP_UFI_ERR == Task Done. */
2548 			*response_ptr = SAS_TASK_COMPLETE;
2549 
2550 			/* See if the device has been/is being stopped. Note
2551 			 * that we ignore the quiesce state, since we are
2552 			 * concerned about the actual device state.
2553 			 */
2554 			if (!idev)
2555 				*status_ptr = SAS_DEVICE_UNKNOWN;
2556 			else
2557 				*status_ptr = SAS_ABORTED_TASK;
2558 
2559 			set_bit(IREQ_COMPLETE_IN_TARGET, &request->flags);
2560 		} else {
2561 			/* Task in the target is not done. */
2562 			*response_ptr = SAS_TASK_UNDELIVERED;
2563 
2564 			if (!idev)
2565 				*status_ptr = SAS_DEVICE_UNKNOWN;
2566 			else
2567 				*status_ptr = SAS_SAM_STAT_TASK_ABORTED;
2568 
2569 			clear_bit(IREQ_COMPLETE_IN_TARGET, &request->flags);
2570 		}
2571 
2572 		break;
2573 
2574 	case SCU_TASK_DONE_CRC_ERR:
2575 	case SCU_TASK_DONE_NAK_CMD_ERR:
2576 	case SCU_TASK_DONE_EXCESS_DATA:
2577 	case SCU_TASK_DONE_UNEXP_FIS:
2578 	/* Also SCU_TASK_DONE_UNEXP_RESP: */
2579 	case SCU_TASK_DONE_VIIT_ENTRY_NV:       /* TODO - conditions? */
2580 	case SCU_TASK_DONE_IIT_ENTRY_NV:        /* TODO - conditions? */
2581 	case SCU_TASK_DONE_RNCNV_OUTBOUND:      /* TODO - conditions? */
2582 		/* These are conditions in which the target
2583 		 * has completed the task, so that no cleanup
2584 		 * is necessary.
2585 		 */
2586 		*response_ptr = SAS_TASK_COMPLETE;
2587 
2588 		/* See if the device has been/is being stopped. Note
2589 		 * that we ignore the quiesce state, since we are
2590 		 * concerned about the actual device state.
2591 		 */
2592 		if (!idev)
2593 			*status_ptr = SAS_DEVICE_UNKNOWN;
2594 		else
2595 			*status_ptr = SAS_ABORTED_TASK;
2596 
2597 		set_bit(IREQ_COMPLETE_IN_TARGET, &request->flags);
2598 		break;
2599 
2600 
2601 	/* Note that the only open reject completion codes seen here will be
2602 	 * abandon-class codes; all others are automatically retried in the SCU.
2603 	 */
2604 	case SCU_TASK_OPEN_REJECT_WRONG_DESTINATION:
2605 
2606 		isci_request_set_open_reject_status(
2607 			request, task, response_ptr, status_ptr,
2608 			SAS_OREJ_WRONG_DEST);
2609 		break;
2610 
2611 	case SCU_TASK_OPEN_REJECT_ZONE_VIOLATION:
2612 
2613 		/* Note - the return of AB0 will change when
2614 		 * libsas implements detection of zone violations.
2615 		 */
2616 		isci_request_set_open_reject_status(
2617 			request, task, response_ptr, status_ptr,
2618 			SAS_OREJ_RESV_AB0);
2619 		break;
2620 
2621 	case SCU_TASK_OPEN_REJECT_RESERVED_ABANDON_1:
2622 
2623 		isci_request_set_open_reject_status(
2624 			request, task, response_ptr, status_ptr,
2625 			SAS_OREJ_RESV_AB1);
2626 		break;
2627 
2628 	case SCU_TASK_OPEN_REJECT_RESERVED_ABANDON_2:
2629 
2630 		isci_request_set_open_reject_status(
2631 			request, task, response_ptr, status_ptr,
2632 			SAS_OREJ_RESV_AB2);
2633 		break;
2634 
2635 	case SCU_TASK_OPEN_REJECT_RESERVED_ABANDON_3:
2636 
2637 		isci_request_set_open_reject_status(
2638 			request, task, response_ptr, status_ptr,
2639 			SAS_OREJ_RESV_AB3);
2640 		break;
2641 
2642 	case SCU_TASK_OPEN_REJECT_BAD_DESTINATION:
2643 
2644 		isci_request_set_open_reject_status(
2645 			request, task, response_ptr, status_ptr,
2646 			SAS_OREJ_BAD_DEST);
2647 		break;
2648 
2649 	case SCU_TASK_OPEN_REJECT_STP_RESOURCES_BUSY:
2650 
2651 		isci_request_set_open_reject_status(
2652 			request, task, response_ptr, status_ptr,
2653 			SAS_OREJ_STP_NORES);
2654 		break;
2655 
2656 	case SCU_TASK_OPEN_REJECT_PROTOCOL_NOT_SUPPORTED:
2657 
2658 		isci_request_set_open_reject_status(
2659 			request, task, response_ptr, status_ptr,
2660 			SAS_OREJ_EPROTO);
2661 		break;
2662 
2663 	case SCU_TASK_OPEN_REJECT_CONNECTION_RATE_NOT_SUPPORTED:
2664 
2665 		isci_request_set_open_reject_status(
2666 			request, task, response_ptr, status_ptr,
2667 			SAS_OREJ_CONN_RATE);
2668 		break;
2669 
2670 	case SCU_TASK_DONE_LL_R_ERR:
2671 	/* Also SCU_TASK_DONE_ACK_NAK_TO: */
2672 	case SCU_TASK_DONE_LL_PERR:
2673 	case SCU_TASK_DONE_LL_SY_TERM:
2674 	/* Also SCU_TASK_DONE_NAK_ERR:*/
2675 	case SCU_TASK_DONE_LL_LF_TERM:
2676 	/* Also SCU_TASK_DONE_DATA_LEN_ERR: */
2677 	case SCU_TASK_DONE_LL_ABORT_ERR:
2678 	case SCU_TASK_DONE_SEQ_INV_TYPE:
2679 	/* Also SCU_TASK_DONE_UNEXP_XR: */
2680 	case SCU_TASK_DONE_XR_IU_LEN_ERR:
2681 	case SCU_TASK_DONE_INV_FIS_LEN:
2682 	/* Also SCU_TASK_DONE_XR_WD_LEN: */
2683 	case SCU_TASK_DONE_SDMA_ERR:
2684 	case SCU_TASK_DONE_OFFSET_ERR:
2685 	case SCU_TASK_DONE_MAX_PLD_ERR:
2686 	case SCU_TASK_DONE_LF_ERR:
2687 	case SCU_TASK_DONE_SMP_RESP_TO_ERR:  /* Escalate to dev reset? */
2688 	case SCU_TASK_DONE_SMP_LL_RX_ERR:
2689 	case SCU_TASK_DONE_UNEXP_DATA:
2690 	case SCU_TASK_DONE_UNEXP_SDBFIS:
2691 	case SCU_TASK_DONE_REG_ERR:
2692 	case SCU_TASK_DONE_SDB_ERR:
2693 	case SCU_TASK_DONE_TASK_ABORT:
2694 	default:
2695 		/* Task in the target is not done. */
2696 		*response_ptr = SAS_TASK_UNDELIVERED;
2697 		*status_ptr = SAS_SAM_STAT_TASK_ABORTED;
2698 
2699 		if (task->task_proto == SAS_PROTOCOL_SMP)
2700 			set_bit(IREQ_COMPLETE_IN_TARGET, &request->flags);
2701 		else
2702 			clear_bit(IREQ_COMPLETE_IN_TARGET, &request->flags);
2703 		break;
2704 	}
2705 }
2706 
isci_process_stp_response(struct sas_task * task,struct dev_to_host_fis * fis)2707 static void isci_process_stp_response(struct sas_task *task, struct dev_to_host_fis *fis)
2708 {
2709 	struct task_status_struct *ts = &task->task_status;
2710 	struct ata_task_resp *resp = (void *)&ts->buf[0];
2711 
2712 	resp->frame_len = sizeof(*fis);
2713 	memcpy(resp->ending_fis, fis, sizeof(*fis));
2714 	ts->buf_valid_size = sizeof(*resp);
2715 
2716 	/* If an error is flagged let libata decode the fis */
2717 	if (ac_err_mask(fis->status))
2718 		ts->stat = SAS_PROTO_RESPONSE;
2719 	else
2720 		ts->stat = SAS_SAM_STAT_GOOD;
2721 
2722 	ts->resp = SAS_TASK_COMPLETE;
2723 }
2724 
isci_request_io_request_complete(struct isci_host * ihost,struct isci_request * request,enum sci_io_status completion_status)2725 static void isci_request_io_request_complete(struct isci_host *ihost,
2726 					     struct isci_request *request,
2727 					     enum sci_io_status completion_status)
2728 {
2729 	struct sas_task *task = isci_request_access_task(request);
2730 	struct ssp_response_iu *resp_iu;
2731 	unsigned long task_flags;
2732 	struct isci_remote_device *idev = request->target_device;
2733 	enum service_response response = SAS_TASK_UNDELIVERED;
2734 	enum exec_status status = SAS_ABORTED_TASK;
2735 
2736 	dev_dbg(&ihost->pdev->dev,
2737 		"%s: request = %p, task = %p, "
2738 		"task->data_dir = %d completion_status = 0x%x\n",
2739 		__func__, request, task, task->data_dir, completion_status);
2740 
2741 	/* The request is done from an SCU HW perspective. */
2742 
2743 	/* This is an active request being completed from the core. */
2744 	switch (completion_status) {
2745 
2746 	case SCI_IO_FAILURE_RESPONSE_VALID:
2747 		dev_dbg(&ihost->pdev->dev,
2748 			"%s: SCI_IO_FAILURE_RESPONSE_VALID (%p/%p)\n",
2749 			__func__, request, task);
2750 
2751 		if (sas_protocol_ata(task->task_proto)) {
2752 			isci_process_stp_response(task, &request->stp.rsp);
2753 		} else if (SAS_PROTOCOL_SSP == task->task_proto) {
2754 
2755 			/* crack the iu response buffer. */
2756 			resp_iu = &request->ssp.rsp;
2757 			isci_request_process_response_iu(task, resp_iu,
2758 							 &ihost->pdev->dev);
2759 
2760 		} else if (SAS_PROTOCOL_SMP == task->task_proto) {
2761 
2762 			dev_err(&ihost->pdev->dev,
2763 				"%s: SCI_IO_FAILURE_RESPONSE_VALID: "
2764 					"SAS_PROTOCOL_SMP protocol\n",
2765 				__func__);
2766 
2767 		} else
2768 			dev_err(&ihost->pdev->dev,
2769 				"%s: unknown protocol\n", __func__);
2770 
2771 		/* use the task status set in the task struct by the
2772 		* isci_request_process_response_iu call.
2773 		*/
2774 		set_bit(IREQ_COMPLETE_IN_TARGET, &request->flags);
2775 		response = task->task_status.resp;
2776 		status = task->task_status.stat;
2777 		break;
2778 
2779 	case SCI_IO_SUCCESS:
2780 	case SCI_IO_SUCCESS_IO_DONE_EARLY:
2781 
2782 		response = SAS_TASK_COMPLETE;
2783 		status   = SAS_SAM_STAT_GOOD;
2784 		set_bit(IREQ_COMPLETE_IN_TARGET, &request->flags);
2785 
2786 		if (completion_status == SCI_IO_SUCCESS_IO_DONE_EARLY) {
2787 
2788 			/* This was an SSP / STP / SATA transfer.
2789 			* There is a possibility that less data than
2790 			* the maximum was transferred.
2791 			*/
2792 			u32 transferred_length = sci_req_tx_bytes(request);
2793 
2794 			task->task_status.residual
2795 				= task->total_xfer_len - transferred_length;
2796 
2797 			/* If there were residual bytes, call this an
2798 			* underrun.
2799 			*/
2800 			if (task->task_status.residual != 0)
2801 				status = SAS_DATA_UNDERRUN;
2802 
2803 			dev_dbg(&ihost->pdev->dev,
2804 				"%s: SCI_IO_SUCCESS_IO_DONE_EARLY %d\n",
2805 				__func__, status);
2806 
2807 		} else
2808 			dev_dbg(&ihost->pdev->dev, "%s: SCI_IO_SUCCESS\n",
2809 				__func__);
2810 		break;
2811 
2812 	case SCI_IO_FAILURE_TERMINATED:
2813 
2814 		dev_dbg(&ihost->pdev->dev,
2815 			"%s: SCI_IO_FAILURE_TERMINATED (%p/%p)\n",
2816 			__func__, request, task);
2817 
2818 		/* The request was terminated explicitly. */
2819 		set_bit(IREQ_COMPLETE_IN_TARGET, &request->flags);
2820 		response = SAS_TASK_UNDELIVERED;
2821 
2822 		/* See if the device has been/is being stopped. Note
2823 		* that we ignore the quiesce state, since we are
2824 		* concerned about the actual device state.
2825 		*/
2826 		if (!idev)
2827 			status = SAS_DEVICE_UNKNOWN;
2828 		else
2829 			status = SAS_ABORTED_TASK;
2830 		break;
2831 
2832 	case SCI_FAILURE_CONTROLLER_SPECIFIC_IO_ERR:
2833 
2834 		isci_request_handle_controller_specific_errors(idev, request,
2835 							       task, &response,
2836 							       &status);
2837 		break;
2838 
2839 	case SCI_IO_FAILURE_REMOTE_DEVICE_RESET_REQUIRED:
2840 		/* This is a special case, in that the I/O completion
2841 		* is telling us that the device needs a reset.
2842 		* In order for the device reset condition to be
2843 		* noticed, the I/O has to be handled in the error
2844 		* handler.  Set the reset flag and cause the
2845 		* SCSI error thread to be scheduled.
2846 		*/
2847 		spin_lock_irqsave(&task->task_state_lock, task_flags);
2848 		task->task_state_flags |= SAS_TASK_NEED_DEV_RESET;
2849 		spin_unlock_irqrestore(&task->task_state_lock, task_flags);
2850 
2851 		/* Fail the I/O. */
2852 		response = SAS_TASK_UNDELIVERED;
2853 		status = SAS_SAM_STAT_TASK_ABORTED;
2854 
2855 		clear_bit(IREQ_COMPLETE_IN_TARGET, &request->flags);
2856 		break;
2857 
2858 	case SCI_FAILURE_RETRY_REQUIRED:
2859 
2860 		/* Fail the I/O so it can be retried. */
2861 		response = SAS_TASK_UNDELIVERED;
2862 		if (!idev)
2863 			status = SAS_DEVICE_UNKNOWN;
2864 		else
2865 			status = SAS_ABORTED_TASK;
2866 
2867 		set_bit(IREQ_COMPLETE_IN_TARGET, &request->flags);
2868 		break;
2869 
2870 
2871 	default:
2872 		/* Catch any otherwise unhandled error codes here. */
2873 		dev_dbg(&ihost->pdev->dev,
2874 			"%s: invalid completion code: 0x%x - "
2875 				"isci_request = %p\n",
2876 			__func__, completion_status, request);
2877 
2878 		response = SAS_TASK_UNDELIVERED;
2879 
2880 		/* See if the device has been/is being stopped. Note
2881 		* that we ignore the quiesce state, since we are
2882 		* concerned about the actual device state.
2883 		*/
2884 		if (!idev)
2885 			status = SAS_DEVICE_UNKNOWN;
2886 		else
2887 			status = SAS_ABORTED_TASK;
2888 
2889 		if (SAS_PROTOCOL_SMP == task->task_proto)
2890 			set_bit(IREQ_COMPLETE_IN_TARGET, &request->flags);
2891 		else
2892 			clear_bit(IREQ_COMPLETE_IN_TARGET, &request->flags);
2893 		break;
2894 	}
2895 
2896 	switch (task->task_proto) {
2897 	case SAS_PROTOCOL_SSP:
2898 		if (task->data_dir == DMA_NONE)
2899 			break;
2900 		if (task->num_scatter == 0)
2901 			/* 0 indicates a single dma address */
2902 			dma_unmap_single(&ihost->pdev->dev,
2903 					 request->zero_scatter_daddr,
2904 					 task->total_xfer_len, task->data_dir);
2905 		else  /* unmap the sgl dma addresses */
2906 			dma_unmap_sg(&ihost->pdev->dev, task->scatter,
2907 				     request->num_sg_entries, task->data_dir);
2908 		break;
2909 	case SAS_PROTOCOL_SMP: {
2910 		struct scatterlist *sg = &task->smp_task.smp_req;
2911 		struct smp_req *smp_req;
2912 		void *kaddr;
2913 
2914 		dma_unmap_sg(&ihost->pdev->dev, sg, 1, DMA_TO_DEVICE);
2915 
2916 		/* need to swab it back in case the command buffer is re-used */
2917 		kaddr = kmap_atomic(sg_page(sg));
2918 		smp_req = kaddr + sg->offset;
2919 		sci_swab32_cpy(smp_req, smp_req, sg->length / sizeof(u32));
2920 		kunmap_atomic(kaddr);
2921 		break;
2922 	}
2923 	default:
2924 		break;
2925 	}
2926 
2927 	spin_lock_irqsave(&task->task_state_lock, task_flags);
2928 
2929 	task->task_status.resp = response;
2930 	task->task_status.stat = status;
2931 
2932 	if (test_bit(IREQ_COMPLETE_IN_TARGET, &request->flags)) {
2933 		/* Normal notification (task_done) */
2934 		task->task_state_flags |= SAS_TASK_STATE_DONE;
2935 		task->task_state_flags &= ~SAS_TASK_STATE_PENDING;
2936 	}
2937 	spin_unlock_irqrestore(&task->task_state_lock, task_flags);
2938 
2939 	/* complete the io request to the core. */
2940 	sci_controller_complete_io(ihost, request->target_device, request);
2941 
2942 	/* set terminated handle so it cannot be completed or
2943 	 * terminated again, and to cause any calls into abort
2944 	 * task to recognize the already completed case.
2945 	 */
2946 	set_bit(IREQ_TERMINATED, &request->flags);
2947 
2948 	ireq_done(ihost, request, task);
2949 }
2950 
sci_request_started_state_enter(struct sci_base_state_machine * sm)2951 static void sci_request_started_state_enter(struct sci_base_state_machine *sm)
2952 {
2953 	struct isci_request *ireq = container_of(sm, typeof(*ireq), sm);
2954 	struct domain_device *dev = ireq->target_device->domain_dev;
2955 	enum sci_base_request_states state;
2956 	struct sas_task *task;
2957 
2958 	/* XXX as hch said always creating an internal sas_task for tmf
2959 	 * requests would simplify the driver
2960 	 */
2961 	task = (test_bit(IREQ_TMF, &ireq->flags)) ? NULL : isci_request_access_task(ireq);
2962 
2963 	/* all unaccelerated request types (non ssp or ncq) handled with
2964 	 * substates
2965 	 */
2966 	if (!task && dev->dev_type == SAS_END_DEVICE) {
2967 		state = SCI_REQ_TASK_WAIT_TC_COMP;
2968 	} else if (task && task->task_proto == SAS_PROTOCOL_SMP) {
2969 		state = SCI_REQ_SMP_WAIT_RESP;
2970 	} else if (task && sas_protocol_ata(task->task_proto) &&
2971 		   !task->ata_task.use_ncq) {
2972 		if (dev->sata_dev.class == ATA_DEV_ATAPI &&
2973 			task->ata_task.fis.command == ATA_CMD_PACKET) {
2974 			state = SCI_REQ_ATAPI_WAIT_H2D;
2975 		} else if (task->data_dir == DMA_NONE) {
2976 			state = SCI_REQ_STP_NON_DATA_WAIT_H2D;
2977 		} else if (task->ata_task.dma_xfer) {
2978 			state = SCI_REQ_STP_UDMA_WAIT_TC_COMP;
2979 		} else /* PIO */ {
2980 			state = SCI_REQ_STP_PIO_WAIT_H2D;
2981 		}
2982 	} else {
2983 		/* SSP or NCQ are fully accelerated, no substates */
2984 		return;
2985 	}
2986 	sci_change_state(sm, state);
2987 }
2988 
sci_request_completed_state_enter(struct sci_base_state_machine * sm)2989 static void sci_request_completed_state_enter(struct sci_base_state_machine *sm)
2990 {
2991 	struct isci_request *ireq = container_of(sm, typeof(*ireq), sm);
2992 	struct isci_host *ihost = ireq->owning_controller;
2993 
2994 	/* Tell the SCI_USER that the IO request is complete */
2995 	if (!test_bit(IREQ_TMF, &ireq->flags))
2996 		isci_request_io_request_complete(ihost, ireq,
2997 						 ireq->sci_status);
2998 	else
2999 		isci_task_request_complete(ihost, ireq, ireq->sci_status);
3000 }
3001 
sci_request_aborting_state_enter(struct sci_base_state_machine * sm)3002 static void sci_request_aborting_state_enter(struct sci_base_state_machine *sm)
3003 {
3004 	struct isci_request *ireq = container_of(sm, typeof(*ireq), sm);
3005 
3006 	/* Setting the abort bit in the Task Context is required by the silicon. */
3007 	ireq->tc->abort = 1;
3008 }
3009 
sci_stp_request_started_non_data_await_h2d_completion_enter(struct sci_base_state_machine * sm)3010 static void sci_stp_request_started_non_data_await_h2d_completion_enter(struct sci_base_state_machine *sm)
3011 {
3012 	struct isci_request *ireq = container_of(sm, typeof(*ireq), sm);
3013 
3014 	ireq->target_device->working_request = ireq;
3015 }
3016 
sci_stp_request_started_pio_await_h2d_completion_enter(struct sci_base_state_machine * sm)3017 static void sci_stp_request_started_pio_await_h2d_completion_enter(struct sci_base_state_machine *sm)
3018 {
3019 	struct isci_request *ireq = container_of(sm, typeof(*ireq), sm);
3020 
3021 	ireq->target_device->working_request = ireq;
3022 }
3023 
3024 static const struct sci_base_state sci_request_state_table[] = {
3025 	[SCI_REQ_INIT] = { },
3026 	[SCI_REQ_CONSTRUCTED] = { },
3027 	[SCI_REQ_STARTED] = {
3028 		.enter_state = sci_request_started_state_enter,
3029 	},
3030 	[SCI_REQ_STP_NON_DATA_WAIT_H2D] = {
3031 		.enter_state = sci_stp_request_started_non_data_await_h2d_completion_enter,
3032 	},
3033 	[SCI_REQ_STP_NON_DATA_WAIT_D2H] = { },
3034 	[SCI_REQ_STP_PIO_WAIT_H2D] = {
3035 		.enter_state = sci_stp_request_started_pio_await_h2d_completion_enter,
3036 	},
3037 	[SCI_REQ_STP_PIO_WAIT_FRAME] = { },
3038 	[SCI_REQ_STP_PIO_DATA_IN] = { },
3039 	[SCI_REQ_STP_PIO_DATA_OUT] = { },
3040 	[SCI_REQ_STP_UDMA_WAIT_TC_COMP] = { },
3041 	[SCI_REQ_STP_UDMA_WAIT_D2H] = { },
3042 	[SCI_REQ_TASK_WAIT_TC_COMP] = { },
3043 	[SCI_REQ_TASK_WAIT_TC_RESP] = { },
3044 	[SCI_REQ_SMP_WAIT_RESP] = { },
3045 	[SCI_REQ_SMP_WAIT_TC_COMP] = { },
3046 	[SCI_REQ_ATAPI_WAIT_H2D] = { },
3047 	[SCI_REQ_ATAPI_WAIT_PIO_SETUP] = { },
3048 	[SCI_REQ_ATAPI_WAIT_D2H] = { },
3049 	[SCI_REQ_ATAPI_WAIT_TC_COMP] = { },
3050 	[SCI_REQ_COMPLETED] = {
3051 		.enter_state = sci_request_completed_state_enter,
3052 	},
3053 	[SCI_REQ_ABORTING] = {
3054 		.enter_state = sci_request_aborting_state_enter,
3055 	},
3056 	[SCI_REQ_FINAL] = { },
3057 };
3058 
3059 static void
sci_general_request_construct(struct isci_host * ihost,struct isci_remote_device * idev,struct isci_request * ireq)3060 sci_general_request_construct(struct isci_host *ihost,
3061 				   struct isci_remote_device *idev,
3062 				   struct isci_request *ireq)
3063 {
3064 	sci_init_sm(&ireq->sm, sci_request_state_table, SCI_REQ_INIT);
3065 
3066 	ireq->target_device = idev;
3067 	ireq->protocol = SAS_PROTOCOL_NONE;
3068 	ireq->saved_rx_frame_index = SCU_INVALID_FRAME_INDEX;
3069 
3070 	ireq->sci_status   = SCI_SUCCESS;
3071 	ireq->scu_status   = 0;
3072 	ireq->post_context = 0xFFFFFFFF;
3073 }
3074 
3075 static enum sci_status
sci_io_request_construct(struct isci_host * ihost,struct isci_remote_device * idev,struct isci_request * ireq)3076 sci_io_request_construct(struct isci_host *ihost,
3077 			  struct isci_remote_device *idev,
3078 			  struct isci_request *ireq)
3079 {
3080 	struct domain_device *dev = idev->domain_dev;
3081 	enum sci_status status = SCI_SUCCESS;
3082 
3083 	/* Build the common part of the request */
3084 	sci_general_request_construct(ihost, idev, ireq);
3085 
3086 	if (idev->rnc.remote_node_index == SCIC_SDS_REMOTE_NODE_CONTEXT_INVALID_INDEX)
3087 		return SCI_FAILURE_INVALID_REMOTE_DEVICE;
3088 
3089 	if (dev->dev_type == SAS_END_DEVICE)
3090 		/* pass */;
3091 	else if (dev_is_sata(dev))
3092 		memset(&ireq->stp.cmd, 0, sizeof(ireq->stp.cmd));
3093 	else if (dev_is_expander(dev->dev_type))
3094 		/* pass */;
3095 	else
3096 		return SCI_FAILURE_UNSUPPORTED_PROTOCOL;
3097 
3098 	memset(ireq->tc, 0, offsetof(struct scu_task_context, sgl_pair_ab));
3099 
3100 	return status;
3101 }
3102 
sci_task_request_construct(struct isci_host * ihost,struct isci_remote_device * idev,u16 io_tag,struct isci_request * ireq)3103 enum sci_status sci_task_request_construct(struct isci_host *ihost,
3104 					    struct isci_remote_device *idev,
3105 					    u16 io_tag, struct isci_request *ireq)
3106 {
3107 	struct domain_device *dev = idev->domain_dev;
3108 	enum sci_status status = SCI_SUCCESS;
3109 
3110 	/* Build the common part of the request */
3111 	sci_general_request_construct(ihost, idev, ireq);
3112 
3113 	if (dev->dev_type == SAS_END_DEVICE || dev_is_sata(dev)) {
3114 		set_bit(IREQ_TMF, &ireq->flags);
3115 		memset(ireq->tc, 0, sizeof(struct scu_task_context));
3116 
3117 		/* Set the protocol indicator. */
3118 		if (dev_is_sata(dev))
3119 			ireq->protocol = SAS_PROTOCOL_STP;
3120 		else
3121 			ireq->protocol = SAS_PROTOCOL_SSP;
3122 	} else
3123 		status = SCI_FAILURE_UNSUPPORTED_PROTOCOL;
3124 
3125 	return status;
3126 }
3127 
isci_request_ssp_request_construct(struct isci_request * request)3128 static enum sci_status isci_request_ssp_request_construct(
3129 	struct isci_request *request)
3130 {
3131 	enum sci_status status;
3132 
3133 	dev_dbg(&request->isci_host->pdev->dev,
3134 		"%s: request = %p\n",
3135 		__func__,
3136 		request);
3137 	status = sci_io_request_construct_basic_ssp(request);
3138 	return status;
3139 }
3140 
isci_request_stp_request_construct(struct isci_request * ireq)3141 static enum sci_status isci_request_stp_request_construct(struct isci_request *ireq)
3142 {
3143 	struct sas_task *task = isci_request_access_task(ireq);
3144 	struct host_to_dev_fis *fis = &ireq->stp.cmd;
3145 	struct ata_queued_cmd *qc = task->uldd_task;
3146 	enum sci_status status;
3147 
3148 	dev_dbg(&ireq->isci_host->pdev->dev,
3149 		"%s: ireq = %p\n",
3150 		__func__,
3151 		ireq);
3152 
3153 	memcpy(fis, &task->ata_task.fis, sizeof(struct host_to_dev_fis));
3154 	if (!task->ata_task.device_control_reg_update)
3155 		fis->flags |= 0x80;
3156 	fis->flags &= 0xF0;
3157 
3158 	status = sci_io_request_construct_basic_sata(ireq);
3159 
3160 	if (qc && (qc->tf.command == ATA_CMD_FPDMA_WRITE ||
3161 		   qc->tf.command == ATA_CMD_FPDMA_READ ||
3162 		   qc->tf.command == ATA_CMD_FPDMA_RECV ||
3163 		   qc->tf.command == ATA_CMD_FPDMA_SEND ||
3164 		   qc->tf.command == ATA_CMD_NCQ_NON_DATA)) {
3165 		fis->sector_count = qc->tag << 3;
3166 		ireq->tc->type.stp.ncq_tag = qc->tag;
3167 	}
3168 
3169 	return status;
3170 }
3171 
3172 static enum sci_status
sci_io_request_construct_smp(struct device * dev,struct isci_request * ireq,struct sas_task * task)3173 sci_io_request_construct_smp(struct device *dev,
3174 			      struct isci_request *ireq,
3175 			      struct sas_task *task)
3176 {
3177 	struct scatterlist *sg = &task->smp_task.smp_req;
3178 	struct isci_remote_device *idev;
3179 	struct scu_task_context *task_context;
3180 	struct isci_port *iport;
3181 	struct smp_req *smp_req;
3182 	void *kaddr;
3183 	u8 req_len;
3184 	u32 cmd;
3185 
3186 	kaddr = kmap_atomic(sg_page(sg));
3187 	smp_req = kaddr + sg->offset;
3188 	/*
3189 	 * Look at the SMP requests' header fields; for certain SAS 1.x SMP
3190 	 * functions under SAS 2.0, a zero request length really indicates
3191 	 * a non-zero default length.
3192 	 */
3193 	if (smp_req->req_len == 0) {
3194 		switch (smp_req->func) {
3195 		case SMP_DISCOVER:
3196 		case SMP_REPORT_PHY_ERR_LOG:
3197 		case SMP_REPORT_PHY_SATA:
3198 		case SMP_REPORT_ROUTE_INFO:
3199 			smp_req->req_len = 2;
3200 			break;
3201 		case SMP_CONF_ROUTE_INFO:
3202 		case SMP_PHY_CONTROL:
3203 		case SMP_PHY_TEST_FUNCTION:
3204 			smp_req->req_len = 9;
3205 			break;
3206 			/* Default - zero is a valid default for 2.0. */
3207 		}
3208 	}
3209 	req_len = smp_req->req_len;
3210 	sci_swab32_cpy(smp_req, smp_req, sg->length / sizeof(u32));
3211 	cmd = *(u32 *) smp_req;
3212 	kunmap_atomic(kaddr);
3213 
3214 	if (!dma_map_sg(dev, sg, 1, DMA_TO_DEVICE))
3215 		return SCI_FAILURE;
3216 
3217 	ireq->protocol = SAS_PROTOCOL_SMP;
3218 
3219 	/* byte swap the smp request. */
3220 
3221 	task_context = ireq->tc;
3222 
3223 	idev = ireq->target_device;
3224 	iport = idev->owning_port;
3225 
3226 	/*
3227 	 * Fill in the TC with its required data
3228 	 * 00h
3229 	 */
3230 	task_context->priority = 0;
3231 	task_context->initiator_request = 1;
3232 	task_context->connection_rate = idev->connection_rate;
3233 	task_context->protocol_engine_index = ISCI_PEG;
3234 	task_context->logical_port_index = iport->physical_port_index;
3235 	task_context->protocol_type = SCU_TASK_CONTEXT_PROTOCOL_SMP;
3236 	task_context->abort = 0;
3237 	task_context->valid = SCU_TASK_CONTEXT_VALID;
3238 	task_context->context_type = SCU_TASK_CONTEXT_TYPE;
3239 
3240 	/* 04h */
3241 	task_context->remote_node_index = idev->rnc.remote_node_index;
3242 	task_context->command_code = 0;
3243 	task_context->task_type = SCU_TASK_TYPE_SMP_REQUEST;
3244 
3245 	/* 08h */
3246 	task_context->link_layer_control = 0;
3247 	task_context->do_not_dma_ssp_good_response = 1;
3248 	task_context->strict_ordering = 0;
3249 	task_context->control_frame = 1;
3250 	task_context->timeout_enable = 0;
3251 	task_context->block_guard_enable = 0;
3252 
3253 	/* 0ch */
3254 	task_context->address_modifier = 0;
3255 
3256 	/* 10h */
3257 	task_context->ssp_command_iu_length = req_len;
3258 
3259 	/* 14h */
3260 	task_context->transfer_length_bytes = 0;
3261 
3262 	/*
3263 	 * 18h ~ 30h, protocol specific
3264 	 * since commandIU has been build by framework at this point, we just
3265 	 * copy the frist DWord from command IU to this location. */
3266 	memcpy(&task_context->type.smp, &cmd, sizeof(u32));
3267 
3268 	/*
3269 	 * 40h
3270 	 * "For SMP you could program it to zero. We would prefer that way
3271 	 * so that done code will be consistent." - Venki
3272 	 */
3273 	task_context->task_phase = 0;
3274 
3275 	ireq->post_context = (SCU_CONTEXT_COMMAND_REQUEST_TYPE_POST_TC |
3276 			      (ISCI_PEG << SCU_CONTEXT_COMMAND_PROTOCOL_ENGINE_GROUP_SHIFT) |
3277 			       (iport->physical_port_index <<
3278 				SCU_CONTEXT_COMMAND_LOGICAL_PORT_SHIFT) |
3279 			      ISCI_TAG_TCI(ireq->io_tag));
3280 	/*
3281 	 * Copy the physical address for the command buffer to the SCU Task
3282 	 * Context command buffer should not contain command header.
3283 	 */
3284 	task_context->command_iu_upper = upper_32_bits(sg_dma_address(sg));
3285 	task_context->command_iu_lower = lower_32_bits(sg_dma_address(sg) + sizeof(u32));
3286 
3287 	/* SMP response comes as UF, so no need to set response IU address. */
3288 	task_context->response_iu_upper = 0;
3289 	task_context->response_iu_lower = 0;
3290 
3291 	sci_change_state(&ireq->sm, SCI_REQ_CONSTRUCTED);
3292 
3293 	return SCI_SUCCESS;
3294 }
3295 
3296 /*
3297  * isci_smp_request_build() - This function builds the smp request.
3298  * @ireq: This parameter points to the isci_request allocated in the
3299  *    request construct function.
3300  *
3301  * SCI_SUCCESS on successfull completion, or specific failure code.
3302  */
isci_smp_request_build(struct isci_request * ireq)3303 static enum sci_status isci_smp_request_build(struct isci_request *ireq)
3304 {
3305 	struct sas_task *task = isci_request_access_task(ireq);
3306 	struct device *dev = &ireq->isci_host->pdev->dev;
3307 	enum sci_status status = SCI_FAILURE;
3308 
3309 	status = sci_io_request_construct_smp(dev, ireq, task);
3310 	if (status != SCI_SUCCESS)
3311 		dev_dbg(&ireq->isci_host->pdev->dev,
3312 			 "%s: failed with status = %d\n",
3313 			 __func__,
3314 			 status);
3315 
3316 	return status;
3317 }
3318 
3319 /**
3320  * isci_io_request_build() - This function builds the io request object.
3321  * @ihost: This parameter specifies the ISCI host object
3322  * @request: This parameter points to the isci_request object allocated in the
3323  *    request construct function.
3324  * @idev: This parameter is the handle for the sci core's remote device
3325  *    object that is the destination for this request.
3326  *
3327  * SCI_SUCCESS on successfull completion, or specific failure code.
3328  */
isci_io_request_build(struct isci_host * ihost,struct isci_request * request,struct isci_remote_device * idev)3329 static enum sci_status isci_io_request_build(struct isci_host *ihost,
3330 					     struct isci_request *request,
3331 					     struct isci_remote_device *idev)
3332 {
3333 	enum sci_status status = SCI_SUCCESS;
3334 	struct sas_task *task = isci_request_access_task(request);
3335 
3336 	dev_dbg(&ihost->pdev->dev,
3337 		"%s: idev = 0x%p; request = %p, "
3338 		"num_scatter = %d\n",
3339 		__func__,
3340 		idev,
3341 		request,
3342 		task->num_scatter);
3343 
3344 	/* map the sgl addresses, if present.
3345 	 * libata does the mapping for sata devices
3346 	 * before we get the request.
3347 	 */
3348 	if (task->num_scatter &&
3349 	    !sas_protocol_ata(task->task_proto) &&
3350 	    !(SAS_PROTOCOL_SMP & task->task_proto)) {
3351 
3352 		request->num_sg_entries = dma_map_sg(
3353 			&ihost->pdev->dev,
3354 			task->scatter,
3355 			task->num_scatter,
3356 			task->data_dir
3357 			);
3358 
3359 		if (request->num_sg_entries == 0)
3360 			return SCI_FAILURE_INSUFFICIENT_RESOURCES;
3361 	}
3362 
3363 	status = sci_io_request_construct(ihost, idev, request);
3364 
3365 	if (status != SCI_SUCCESS) {
3366 		dev_dbg(&ihost->pdev->dev,
3367 			 "%s: failed request construct\n",
3368 			 __func__);
3369 		return SCI_FAILURE;
3370 	}
3371 
3372 	switch (task->task_proto) {
3373 	case SAS_PROTOCOL_SMP:
3374 		status = isci_smp_request_build(request);
3375 		break;
3376 	case SAS_PROTOCOL_SSP:
3377 		status = isci_request_ssp_request_construct(request);
3378 		break;
3379 	case SAS_PROTOCOL_SATA:
3380 	case SAS_PROTOCOL_STP:
3381 	case SAS_PROTOCOL_SATA | SAS_PROTOCOL_STP:
3382 		status = isci_request_stp_request_construct(request);
3383 		break;
3384 	default:
3385 		dev_dbg(&ihost->pdev->dev,
3386 			 "%s: unknown protocol\n", __func__);
3387 		return SCI_FAILURE;
3388 	}
3389 
3390 	return status;
3391 }
3392 
isci_request_from_tag(struct isci_host * ihost,u16 tag)3393 static struct isci_request *isci_request_from_tag(struct isci_host *ihost, u16 tag)
3394 {
3395 	struct isci_request *ireq;
3396 
3397 	ireq = ihost->reqs[ISCI_TAG_TCI(tag)];
3398 	ireq->io_tag = tag;
3399 	ireq->io_request_completion = NULL;
3400 	ireq->flags = 0;
3401 	ireq->num_sg_entries = 0;
3402 
3403 	return ireq;
3404 }
3405 
isci_io_request_from_tag(struct isci_host * ihost,struct sas_task * task,u16 tag)3406 struct isci_request *isci_io_request_from_tag(struct isci_host *ihost,
3407 					      struct sas_task *task,
3408 					      u16 tag)
3409 {
3410 	struct isci_request *ireq;
3411 
3412 	ireq = isci_request_from_tag(ihost, tag);
3413 	ireq->ttype_ptr.io_task_ptr = task;
3414 	clear_bit(IREQ_TMF, &ireq->flags);
3415 	task->lldd_task = ireq;
3416 
3417 	return ireq;
3418 }
3419 
isci_tmf_request_from_tag(struct isci_host * ihost,struct isci_tmf * isci_tmf,u16 tag)3420 struct isci_request *isci_tmf_request_from_tag(struct isci_host *ihost,
3421 					       struct isci_tmf *isci_tmf,
3422 					       u16 tag)
3423 {
3424 	struct isci_request *ireq;
3425 
3426 	ireq = isci_request_from_tag(ihost, tag);
3427 	ireq->ttype_ptr.tmf_task_ptr = isci_tmf;
3428 	set_bit(IREQ_TMF, &ireq->flags);
3429 
3430 	return ireq;
3431 }
3432 
isci_request_execute(struct isci_host * ihost,struct isci_remote_device * idev,struct sas_task * task,struct isci_request * ireq)3433 int isci_request_execute(struct isci_host *ihost, struct isci_remote_device *idev,
3434 			 struct sas_task *task, struct isci_request *ireq)
3435 {
3436 	enum sci_status status;
3437 	unsigned long flags;
3438 	int ret = 0;
3439 
3440 	status = isci_io_request_build(ihost, ireq, idev);
3441 	if (status != SCI_SUCCESS) {
3442 		dev_dbg(&ihost->pdev->dev,
3443 			 "%s: request_construct failed - status = 0x%x\n",
3444 			 __func__,
3445 			 status);
3446 		return status;
3447 	}
3448 
3449 	spin_lock_irqsave(&ihost->scic_lock, flags);
3450 
3451 	if (test_bit(IDEV_IO_NCQERROR, &idev->flags)) {
3452 
3453 		if (isci_task_is_ncq_recovery(task)) {
3454 
3455 			/* The device is in an NCQ recovery state.  Issue the
3456 			 * request on the task side.  Note that it will
3457 			 * complete on the I/O request side because the
3458 			 * request was built that way (ie.
3459 			 * ireq->is_task_management_request is false).
3460 			 */
3461 			status = sci_controller_start_task(ihost,
3462 							    idev,
3463 							    ireq);
3464 		} else {
3465 			status = SCI_FAILURE;
3466 		}
3467 	} else {
3468 		/* send the request, let the core assign the IO TAG.	*/
3469 		status = sci_controller_start_io(ihost, idev,
3470 						  ireq);
3471 	}
3472 
3473 	if (status != SCI_SUCCESS &&
3474 	    status != SCI_FAILURE_REMOTE_DEVICE_RESET_REQUIRED) {
3475 		dev_dbg(&ihost->pdev->dev,
3476 			 "%s: failed request start (0x%x)\n",
3477 			 __func__, status);
3478 		spin_unlock_irqrestore(&ihost->scic_lock, flags);
3479 		return status;
3480 	}
3481 	/* Either I/O started OK, or the core has signaled that
3482 	 * the device needs a target reset.
3483 	 */
3484 	if (status != SCI_SUCCESS) {
3485 		/* The request did not really start in the
3486 		 * hardware, so clear the request handle
3487 		 * here so no terminations will be done.
3488 		 */
3489 		set_bit(IREQ_TERMINATED, &ireq->flags);
3490 	}
3491 	spin_unlock_irqrestore(&ihost->scic_lock, flags);
3492 
3493 	if (status ==
3494 	    SCI_FAILURE_REMOTE_DEVICE_RESET_REQUIRED) {
3495 		/* Signal libsas that we need the SCSI error
3496 		 * handler thread to work on this I/O and that
3497 		 * we want a device reset.
3498 		 */
3499 		spin_lock_irqsave(&task->task_state_lock, flags);
3500 		task->task_state_flags |= SAS_TASK_NEED_DEV_RESET;
3501 		spin_unlock_irqrestore(&task->task_state_lock, flags);
3502 
3503 		/* Cause this task to be scheduled in the SCSI error
3504 		 * handler thread.
3505 		 */
3506 		sas_task_abort(task);
3507 
3508 		/* Change the status, since we are holding
3509 		 * the I/O until it is managed by the SCSI
3510 		 * error handler.
3511 		 */
3512 		status = SCI_SUCCESS;
3513 	}
3514 
3515 	return ret;
3516 }
3517