Lines Matching defs:task

36 static int asd_map_scatterlist(struct sas_task *task,
40 struct asd_ascb *ascb = task->lldd_task;
45 if (task->data_dir == DMA_NONE)
48 if (task->num_scatter == 0) {
49 void *p = task->scatter;
51 task->total_xfer_len,
52 task->data_dir);
57 sg_arr[0].size = cpu_to_le32(task->total_xfer_len);
64 if (sas_protocol_ata(task->task_proto))
65 num_sg = task->num_scatter;
67 num_sg = dma_map_sg(&asd_ha->pcidev->dev, task->scatter,
68 task->num_scatter, task->data_dir);
82 for_each_sg(task->scatter, sc, num_sg, i) {
91 for_each_sg(task->scatter, sc, 2, i) {
103 for_each_sg(task->scatter, sc, num_sg, i) {
113 if (sas_protocol_ata(task->task_proto))
114 dma_unmap_sg(&asd_ha->pcidev->dev, task->scatter,
115 task->num_scatter, task->data_dir);
122 struct sas_task *task = ascb->uldd_task;
124 if (task->data_dir == DMA_NONE)
127 if (task->num_scatter == 0) {
131 task->total_xfer_len, task->data_dir);
136 if (task->task_proto != SAS_PROTOCOL_STP)
137 dma_unmap_sg(&asd_ha->pcidev->dev, task->scatter,
138 task->num_scatter, task->data_dir);
147 struct sas_task *task = ascb->uldd_task;
148 struct task_status_struct *ts = &task->task_status;
175 if (task->task_proto == SAS_PROTOCOL_SSP) {
181 sas_ssp_task_response(&asd_ha->pcidev->dev, task, iu);
200 struct sas_task *task = ascb->uldd_task;
201 struct task_status_struct *ts = &task->task_status;
312 switch (task->task_proto) {
326 spin_lock_irqsave(&task->task_state_lock, flags);
327 task->task_state_flags &= ~SAS_TASK_STATE_PENDING;
328 task->task_state_flags &= ~SAS_TASK_AT_INITIATOR;
329 task->task_state_flags |= SAS_TASK_STATE_DONE;
330 if (unlikely((task->task_state_flags & SAS_TASK_STATE_ABORTED))) {
332 spin_unlock_irqrestore(&task->task_state_lock, flags);
333 ASD_DPRINTK("task 0x%p done with opcode 0x%x resp 0x%x "
335 task, opcode, ts->resp, ts->stat);
339 spin_unlock_irqrestore(&task->task_state_lock, flags);
340 task->lldd_task = NULL;
343 task->task_done(task);
349 static int asd_build_ata_ascb(struct asd_ascb *ascb, struct sas_task *task,
352 struct domain_device *dev = task->dev;
359 if (unlikely(task->ata_task.device_control_reg_update))
370 scb->ata_task.total_xfer_len = cpu_to_le32(task->total_xfer_len);
371 scb->ata_task.fis = task->ata_task.fis;
372 if (likely(!task->ata_task.device_control_reg_update))
376 memcpy(scb->ata_task.atapi_packet, task->ata_task.atapi_packet,
382 if (likely(!task->ata_task.device_control_reg_update)) {
384 if (task->ata_task.dma_xfer)
386 if (task->ata_task.use_ncq &&
389 flags |= data_dir_flags[task->data_dir];
392 scb->ata_task.retry_count = task->ata_task.retry_count;
395 if (task->ata_task.set_affil_pol)
397 if (task->ata_task.stp_affil_pol)
403 if (likely(!task->ata_task.device_control_reg_update))
404 res = asd_map_scatterlist(task, scb->ata_task.sg_element,
417 static int asd_build_smp_ascb(struct asd_ascb *ascb, struct sas_task *task,
421 struct domain_device *dev = task->dev;
424 dma_map_sg(&asd_ha->pcidev->dev, &task->smp_task.smp_req, 1,
426 dma_map_sg(&asd_ha->pcidev->dev, &task->smp_task.smp_resp, 1,
436 cpu_to_le64((u64)sg_dma_address(&task->smp_task.smp_req));
438 cpu_to_le32((u32)sg_dma_len(&task->smp_task.smp_req)-4);
441 cpu_to_le64((u64)sg_dma_address(&task->smp_task.smp_resp));
443 cpu_to_le32((u32)sg_dma_len(&task->smp_task.smp_resp)-4);
456 struct sas_task *task = a->uldd_task;
458 BUG_ON(!task);
459 dma_unmap_sg(&a->ha->pcidev->dev, &task->smp_task.smp_req, 1,
461 dma_unmap_sg(&a->ha->pcidev->dev, &task->smp_task.smp_resp, 1,
467 static int asd_build_ssp_ascb(struct asd_ascb *ascb, struct sas_task *task,
470 struct domain_device *dev = task->dev;
480 scb->ssp_task.total_xfer_len = cpu_to_le32(task->total_xfer_len);
488 memcpy(scb->ssp_task.ssp_cmd.lun, task->ssp_task.LUN, 8);
489 if (task->ssp_task.enable_first_burst)
491 scb->ssp_task.ssp_cmd.efb_prio_attr |= (task->ssp_task.task_prio << 3);
492 scb->ssp_task.ssp_cmd.efb_prio_attr |= (task->ssp_task.task_attr & 7);
493 memcpy(scb->ssp_task.ssp_cmd.cdb, task->ssp_task.cmd->cmnd,
494 task->ssp_task.cmd->cmd_len);
499 scb->ssp_task.data_dir = data_dir_flags[task->data_dir];
504 res = asd_map_scatterlist(task, scb->ssp_task.sg_element, gfp_flags);
531 int asd_execute_task(struct sas_task *task, gfp_t gfp_flags)
535 struct sas_task *t = task;
537 struct asd_ha_struct *asd_ha = task->dev->port->ha->lldd_ha;