aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/isci/request.c
diff options
context:
space:
mode:
authorDan Williams <dan.j.williams@intel.com>2011-06-30 19:31:37 -0400
committerDan Williams <dan.j.williams@intel.com>2011-07-03 07:04:52 -0400
commit78a6f06e0e82125787d7aa308fe28c2c8381540c (patch)
tree55ab54546aab6dbaccda4ff6d196d8995f453c83 /drivers/scsi/isci/request.c
parentffe191c92ff195d73f9130b1490045ca2dd4c5e0 (diff)
isci: unify isci_remote_device and scic_sds_remote_device
Remove the distinction between these two implementations and unify on isci_remote_device (local instances named idev). Reported-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Diffstat (limited to 'drivers/scsi/isci/request.c')
-rw-r--r--drivers/scsi/isci/request.c60
1 files changed, 28 insertions, 32 deletions
diff --git a/drivers/scsi/isci/request.c b/drivers/scsi/isci/request.c
index 2d29abf3ce1f..90ead662828d 100644
--- a/drivers/scsi/isci/request.c
+++ b/drivers/scsi/isci/request.c
@@ -209,17 +209,17 @@ static void scu_ssp_reqeust_construct_task_context(
209 struct scu_task_context *task_context) 209 struct scu_task_context *task_context)
210{ 210{
211 dma_addr_t dma_addr; 211 dma_addr_t dma_addr;
212 struct scic_sds_remote_device *target_device; 212 struct isci_remote_device *idev;
213 struct isci_port *iport; 213 struct isci_port *iport;
214 214
215 target_device = scic_sds_request_get_device(ireq); 215 idev = scic_sds_request_get_device(ireq);
216 iport = scic_sds_request_get_port(ireq); 216 iport = scic_sds_request_get_port(ireq);
217 217
218 /* Fill in the TC with the its required data */ 218 /* Fill in the TC with the its required data */
219 task_context->abort = 0; 219 task_context->abort = 0;
220 task_context->priority = 0; 220 task_context->priority = 0;
221 task_context->initiator_request = 1; 221 task_context->initiator_request = 1;
222 task_context->connection_rate = target_device->connection_rate; 222 task_context->connection_rate = idev->connection_rate;
223 task_context->protocol_engine_index = 223 task_context->protocol_engine_index =
224 scic_sds_controller_get_protocol_engine_group(controller); 224 scic_sds_controller_get_protocol_engine_group(controller);
225 task_context->logical_port_index = scic_sds_port_get_index(iport); 225 task_context->logical_port_index = scic_sds_port_get_index(iport);
@@ -227,8 +227,7 @@ static void scu_ssp_reqeust_construct_task_context(
227 task_context->valid = SCU_TASK_CONTEXT_VALID; 227 task_context->valid = SCU_TASK_CONTEXT_VALID;
228 task_context->context_type = SCU_TASK_CONTEXT_TYPE; 228 task_context->context_type = SCU_TASK_CONTEXT_TYPE;
229 229
230 task_context->remote_node_index = 230 task_context->remote_node_index = scic_sds_remote_device_get_index(idev);
231 scic_sds_remote_device_get_index(ireq->target_device);
232 task_context->command_code = 0; 231 task_context->command_code = 0;
233 232
234 task_context->link_layer_control = 0; 233 task_context->link_layer_control = 0;
@@ -348,17 +347,17 @@ static void scu_sata_reqeust_construct_task_context(
348 struct scu_task_context *task_context) 347 struct scu_task_context *task_context)
349{ 348{
350 dma_addr_t dma_addr; 349 dma_addr_t dma_addr;
351 struct scic_sds_remote_device *target_device; 350 struct isci_remote_device *idev;
352 struct isci_port *iport; 351 struct isci_port *iport;
353 352
354 target_device = scic_sds_request_get_device(ireq); 353 idev = scic_sds_request_get_device(ireq);
355 iport = scic_sds_request_get_port(ireq); 354 iport = scic_sds_request_get_port(ireq);
356 355
357 /* Fill in the TC with the its required data */ 356 /* Fill in the TC with the its required data */
358 task_context->abort = 0; 357 task_context->abort = 0;
359 task_context->priority = SCU_TASK_PRIORITY_NORMAL; 358 task_context->priority = SCU_TASK_PRIORITY_NORMAL;
360 task_context->initiator_request = 1; 359 task_context->initiator_request = 1;
361 task_context->connection_rate = target_device->connection_rate; 360 task_context->connection_rate = idev->connection_rate;
362 task_context->protocol_engine_index = 361 task_context->protocol_engine_index =
363 scic_sds_controller_get_protocol_engine_group(controller); 362 scic_sds_controller_get_protocol_engine_group(controller);
364 task_context->logical_port_index = 363 task_context->logical_port_index =
@@ -367,8 +366,7 @@ static void scu_sata_reqeust_construct_task_context(
367 task_context->valid = SCU_TASK_CONTEXT_VALID; 366 task_context->valid = SCU_TASK_CONTEXT_VALID;
368 task_context->context_type = SCU_TASK_CONTEXT_TYPE; 367 task_context->context_type = SCU_TASK_CONTEXT_TYPE;
369 368
370 task_context->remote_node_index = 369 task_context->remote_node_index = scic_sds_remote_device_get_index(idev);
371 scic_sds_remote_device_get_index(ireq->target_device);
372 task_context->command_code = 0; 370 task_context->command_code = 0;
373 371
374 task_context->link_layer_control = 0; 372 task_context->link_layer_control = 0;
@@ -2850,7 +2848,7 @@ static void isci_request_io_request_complete(struct isci_host *isci_host,
2850static void scic_sds_request_started_state_enter(struct sci_base_state_machine *sm) 2848static void scic_sds_request_started_state_enter(struct sci_base_state_machine *sm)
2851{ 2849{
2852 struct isci_request *ireq = container_of(sm, typeof(*ireq), sm); 2850 struct isci_request *ireq = container_of(sm, typeof(*ireq), sm);
2853 struct domain_device *dev = sci_dev_to_domain(ireq->target_device); 2851 struct domain_device *dev = ireq->target_device->domain_dev;
2854 struct sas_task *task; 2852 struct sas_task *task;
2855 2853
2856 /* XXX as hch said always creating an internal sas_task for tmf 2854 /* XXX as hch said always creating an internal sas_task for tmf
@@ -2988,12 +2986,12 @@ static const struct sci_base_state scic_sds_request_state_table[] = {
2988 2986
2989static void 2987static void
2990scic_sds_general_request_construct(struct scic_sds_controller *scic, 2988scic_sds_general_request_construct(struct scic_sds_controller *scic,
2991 struct scic_sds_remote_device *sci_dev, 2989 struct isci_remote_device *idev,
2992 struct isci_request *ireq) 2990 struct isci_request *ireq)
2993{ 2991{
2994 sci_init_sm(&ireq->sm, scic_sds_request_state_table, SCI_REQ_INIT); 2992 sci_init_sm(&ireq->sm, scic_sds_request_state_table, SCI_REQ_INIT);
2995 2993
2996 ireq->target_device = sci_dev; 2994 ireq->target_device = idev;
2997 ireq->protocol = SCIC_NO_PROTOCOL; 2995 ireq->protocol = SCIC_NO_PROTOCOL;
2998 ireq->saved_rx_frame_index = SCU_INVALID_FRAME_INDEX; 2996 ireq->saved_rx_frame_index = SCU_INVALID_FRAME_INDEX;
2999 2997
@@ -3004,16 +3002,16 @@ scic_sds_general_request_construct(struct scic_sds_controller *scic,
3004 3002
3005static enum sci_status 3003static enum sci_status
3006scic_io_request_construct(struct scic_sds_controller *scic, 3004scic_io_request_construct(struct scic_sds_controller *scic,
3007 struct scic_sds_remote_device *sci_dev, 3005 struct isci_remote_device *idev,
3008 struct isci_request *ireq) 3006 struct isci_request *ireq)
3009{ 3007{
3010 struct domain_device *dev = sci_dev_to_domain(sci_dev); 3008 struct domain_device *dev = idev->domain_dev;
3011 enum sci_status status = SCI_SUCCESS; 3009 enum sci_status status = SCI_SUCCESS;
3012 3010
3013 /* Build the common part of the request */ 3011 /* Build the common part of the request */
3014 scic_sds_general_request_construct(scic, sci_dev, ireq); 3012 scic_sds_general_request_construct(scic, idev, ireq);
3015 3013
3016 if (sci_dev->rnc.remote_node_index == SCIC_SDS_REMOTE_NODE_CONTEXT_INVALID_INDEX) 3014 if (idev->rnc.remote_node_index == SCIC_SDS_REMOTE_NODE_CONTEXT_INVALID_INDEX)
3017 return SCI_FAILURE_INVALID_REMOTE_DEVICE; 3015 return SCI_FAILURE_INVALID_REMOTE_DEVICE;
3018 3016
3019 if (dev->dev_type == SAS_END_DEV) 3017 if (dev->dev_type == SAS_END_DEV)
@@ -3031,14 +3029,14 @@ scic_io_request_construct(struct scic_sds_controller *scic,
3031} 3029}
3032 3030
3033enum sci_status scic_task_request_construct(struct scic_sds_controller *scic, 3031enum sci_status scic_task_request_construct(struct scic_sds_controller *scic,
3034 struct scic_sds_remote_device *sci_dev, 3032 struct isci_remote_device *idev,
3035 u16 io_tag, struct isci_request *ireq) 3033 u16 io_tag, struct isci_request *ireq)
3036{ 3034{
3037 struct domain_device *dev = sci_dev_to_domain(sci_dev); 3035 struct domain_device *dev = idev->domain_dev;
3038 enum sci_status status = SCI_SUCCESS; 3036 enum sci_status status = SCI_SUCCESS;
3039 3037
3040 /* Build the common part of the request */ 3038 /* Build the common part of the request */
3041 scic_sds_general_request_construct(scic, sci_dev, ireq); 3039 scic_sds_general_request_construct(scic, idev, ireq);
3042 3040
3043 if (dev->dev_type == SAS_END_DEV || 3041 if (dev->dev_type == SAS_END_DEV ||
3044 dev->dev_type == SATA_DEV || (dev->tproto & SAS_PROTOCOL_STP)) { 3042 dev->dev_type == SATA_DEV || (dev->tproto & SAS_PROTOCOL_STP)) {
@@ -3102,7 +3100,7 @@ scic_io_request_construct_smp(struct device *dev,
3102 struct sas_task *task) 3100 struct sas_task *task)
3103{ 3101{
3104 struct scatterlist *sg = &task->smp_task.smp_req; 3102 struct scatterlist *sg = &task->smp_task.smp_req;
3105 struct scic_sds_remote_device *sci_dev; 3103 struct isci_remote_device *idev;
3106 struct scu_task_context *task_context; 3104 struct scu_task_context *task_context;
3107 struct isci_port *iport; 3105 struct isci_port *iport;
3108 struct smp_req *smp_req; 3106 struct smp_req *smp_req;
@@ -3147,7 +3145,7 @@ scic_io_request_construct_smp(struct device *dev,
3147 3145
3148 task_context = ireq->tc; 3146 task_context = ireq->tc;
3149 3147
3150 sci_dev = scic_sds_request_get_device(ireq); 3148 idev = scic_sds_request_get_device(ireq);
3151 iport = scic_sds_request_get_port(ireq); 3149 iport = scic_sds_request_get_port(ireq);
3152 3150
3153 /* 3151 /*
@@ -3156,7 +3154,7 @@ scic_io_request_construct_smp(struct device *dev,
3156 */ 3154 */
3157 task_context->priority = 0; 3155 task_context->priority = 0;
3158 task_context->initiator_request = 1; 3156 task_context->initiator_request = 1;
3159 task_context->connection_rate = sci_dev->connection_rate; 3157 task_context->connection_rate = idev->connection_rate;
3160 task_context->protocol_engine_index = 3158 task_context->protocol_engine_index =
3161 scic_sds_controller_get_protocol_engine_group(scic); 3159 scic_sds_controller_get_protocol_engine_group(scic);
3162 task_context->logical_port_index = scic_sds_port_get_index(iport); 3160 task_context->logical_port_index = scic_sds_port_get_index(iport);
@@ -3166,7 +3164,7 @@ scic_io_request_construct_smp(struct device *dev,
3166 task_context->context_type = SCU_TASK_CONTEXT_TYPE; 3164 task_context->context_type = SCU_TASK_CONTEXT_TYPE;
3167 3165
3168 /* 04h */ 3166 /* 04h */
3169 task_context->remote_node_index = sci_dev->rnc.remote_node_index; 3167 task_context->remote_node_index = idev->rnc.remote_node_index;
3170 task_context->command_code = 0; 3168 task_context->command_code = 0;
3171 task_context->task_type = SCU_TASK_TYPE_SMP_REQUEST; 3169 task_context->task_type = SCU_TASK_TYPE_SMP_REQUEST;
3172 3170
@@ -3257,17 +3255,16 @@ static enum sci_status isci_smp_request_build(struct isci_request *ireq)
3257 */ 3255 */
3258static enum sci_status isci_io_request_build(struct isci_host *isci_host, 3256static enum sci_status isci_io_request_build(struct isci_host *isci_host,
3259 struct isci_request *request, 3257 struct isci_request *request,
3260 struct isci_remote_device *isci_device) 3258 struct isci_remote_device *idev)
3261{ 3259{
3262 enum sci_status status = SCI_SUCCESS; 3260 enum sci_status status = SCI_SUCCESS;
3263 struct sas_task *task = isci_request_access_task(request); 3261 struct sas_task *task = isci_request_access_task(request);
3264 struct scic_sds_remote_device *sci_device = &isci_device->sci;
3265 3262
3266 dev_dbg(&isci_host->pdev->dev, 3263 dev_dbg(&isci_host->pdev->dev,
3267 "%s: isci_device = 0x%p; request = %p, " 3264 "%s: idev = 0x%p; request = %p, "
3268 "num_scatter = %d\n", 3265 "num_scatter = %d\n",
3269 __func__, 3266 __func__,
3270 isci_device, 3267 idev,
3271 request, 3268 request,
3272 task->num_scatter); 3269 task->num_scatter);
3273 3270
@@ -3290,8 +3287,7 @@ static enum sci_status isci_io_request_build(struct isci_host *isci_host,
3290 return SCI_FAILURE_INSUFFICIENT_RESOURCES; 3287 return SCI_FAILURE_INSUFFICIENT_RESOURCES;
3291 } 3288 }
3292 3289
3293 status = scic_io_request_construct(&isci_host->sci, sci_device, 3290 status = scic_io_request_construct(&isci_host->sci, idev, request);
3294 request);
3295 3291
3296 if (status != SCI_SUCCESS) { 3292 if (status != SCI_SUCCESS) {
3297 dev_warn(&isci_host->pdev->dev, 3293 dev_warn(&isci_host->pdev->dev,
@@ -3397,14 +3393,14 @@ int isci_request_execute(struct isci_host *ihost, struct isci_remote_device *ide
3397 * ireq->is_task_management_request is false). 3393 * ireq->is_task_management_request is false).
3398 */ 3394 */
3399 status = scic_controller_start_task(&ihost->sci, 3395 status = scic_controller_start_task(&ihost->sci,
3400 &idev->sci, 3396 idev,
3401 ireq); 3397 ireq);
3402 } else { 3398 } else {
3403 status = SCI_FAILURE; 3399 status = SCI_FAILURE;
3404 } 3400 }
3405 } else { 3401 } else {
3406 /* send the request, let the core assign the IO TAG. */ 3402 /* send the request, let the core assign the IO TAG. */
3407 status = scic_controller_start_io(&ihost->sci, &idev->sci, 3403 status = scic_controller_start_io(&ihost->sci, idev,
3408 ireq); 3404 ireq);
3409 } 3405 }
3410 3406