Lines Matching refs:scsicmd
231 static long aac_build_sg(struct scsi_cmnd *scsicmd, struct sgmap *sgmap);
232 static long aac_build_sg64(struct scsi_cmnd *scsicmd, struct sgmap64 *psg);
233 static long aac_build_sgraw(struct scsi_cmnd *scsicmd, struct sgmapraw *psg);
234 static long aac_build_sgraw2(struct scsi_cmnd *scsicmd,
236 static long aac_build_sghba(struct scsi_cmnd *scsicmd,
241 static int aac_send_srb_fib(struct scsi_cmnd* scsicmd);
242 static int aac_send_hba_fib(struct scsi_cmnd *scsicmd);
346 static inline int aac_valid_context(struct scsi_cmnd *scsicmd, in aac_valid_context() argument
350 if (unlikely(!scsicmd || !scsicmd->scsi_done)) { in aac_valid_context()
355 scsicmd->SCp.phase = AAC_OWNER_MIDLEVEL; in aac_valid_context()
356 device = scsicmd->device; in aac_valid_context()
447 static void aac_expose_phy_device(struct scsi_cmnd *scsicmd) in aac_expose_phy_device() argument
450 scsi_sg_copy_to_buffer(scsicmd, &inq_data, sizeof(inq_data)); in aac_expose_phy_device()
453 scsi_sg_copy_from_buffer(scsicmd, &inq_data, sizeof(inq_data)); in aac_expose_phy_device()
537 struct scsi_cmnd * scsicmd; in get_container_name_callback() local
539 scsicmd = (struct scsi_cmnd *) context; in get_container_name_callback()
541 if (!aac_valid_context(scsicmd, fibptr)) in get_container_name_callback()
566 scsi_sg_copy_to_buffer(scsicmd, &inq, sizeof(inq)); in get_container_name_callback()
568 scsi_sg_copy_from_buffer(scsicmd, &inq, sizeof(inq)); in get_container_name_callback()
572 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD; in get_container_name_callback()
575 scsicmd->scsi_done(scsicmd); in get_container_name_callback()
581 static int aac_get_container_name(struct scsi_cmnd * scsicmd) in aac_get_container_name() argument
589 dev = (struct aac_dev *)scsicmd->device->host->hostdata; in aac_get_container_name()
593 cmd_fibcontext = aac_fib_alloc_tag(dev, scsicmd); in aac_get_container_name()
597 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE; in aac_get_container_name()
601 dinfo->cid = cpu_to_le32(scmd_id(scsicmd)); in aac_get_container_name()
610 (void *) scsicmd); in aac_get_container_name()
623 static int aac_probe_container_callback2(struct scsi_cmnd * scsicmd) in aac_probe_container_callback2() argument
625 struct fsa_dev_info *fsa_dev_ptr = ((struct aac_dev *)(scsicmd->device->host->hostdata))->fsa_dev; in aac_probe_container_callback2()
627 if ((fsa_dev_ptr[scmd_id(scsicmd)].valid & 1)) in aac_probe_container_callback2()
628 return aac_scsi_cmd(scsicmd); in aac_probe_container_callback2()
630 scsicmd->result = DID_NO_CONNECT << 16; in aac_probe_container_callback2()
631 scsicmd->scsi_done(scsicmd); in aac_probe_container_callback2()
639 struct scsi_cmnd * scsicmd = (struct scsi_cmnd *)context; in _aac_probe_container2() local
643 if (!aac_valid_context(scsicmd, fibptr)) in _aac_probe_container2()
646 scsicmd->SCp.Status = 0; in _aac_probe_container2()
652 fsa_dev_ptr += scmd_id(scsicmd); in _aac_probe_container2()
684 scsicmd->SCp.Status = le32_to_cpu(dresp->count); in _aac_probe_container2()
688 callback = (int (*)(struct scsi_cmnd *))(scsicmd->SCp.ptr); in _aac_probe_container2()
689 scsicmd->SCp.ptr = NULL; in _aac_probe_container2()
690 (*callback)(scsicmd); in _aac_probe_container2()
696 struct scsi_cmnd * scsicmd; in _aac_probe_container1() local
710 scsicmd = (struct scsi_cmnd *) context; in _aac_probe_container1()
712 if (!aac_valid_context(scsicmd, fibptr)) in _aac_probe_container1()
725 dinfo->count = cpu_to_le32(scmd_id(scsicmd)); in _aac_probe_container1()
727 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE; in _aac_probe_container1()
735 (void *) scsicmd); in _aac_probe_container1()
746 static int _aac_probe_container(struct scsi_cmnd * scsicmd, int (*callback)(struct scsi_cmnd *)) in _aac_probe_container() argument
751 if ((fibptr = aac_fib_alloc((struct aac_dev *)scsicmd->device->host->hostdata))) { in _aac_probe_container()
764 dinfo->count = cpu_to_le32(scmd_id(scsicmd)); in _aac_probe_container()
766 scsicmd->SCp.ptr = (char *)callback; in _aac_probe_container()
767 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE; in _aac_probe_container()
775 (void *) scsicmd); in _aac_probe_container()
783 scsicmd->SCp.ptr = NULL; in _aac_probe_container()
789 struct fsa_dev_info *fsa_dev_ptr = ((struct aac_dev *)(scsicmd->device->host->hostdata))->fsa_dev; in _aac_probe_container()
791 fsa_dev_ptr += scmd_id(scsicmd); in _aac_probe_container()
794 return (*callback)(scsicmd); in _aac_probe_container()
809 static int aac_probe_container_callback1(struct scsi_cmnd * scsicmd) in aac_probe_container_callback1() argument
811 scsicmd->device = NULL; in aac_probe_container_callback1()
817 struct scsi_cmnd *scsicmd = kmalloc(sizeof(*scsicmd), GFP_KERNEL); in aac_probe_container() local
821 if (!scsicmd || !scsidev) { in aac_probe_container()
822 kfree(scsicmd); in aac_probe_container()
826 scsicmd->list.next = NULL; in aac_probe_container()
827 scsicmd->scsi_done = (void (*)(struct scsi_cmnd*))aac_probe_container_callback1; in aac_probe_container()
829 scsicmd->device = scsidev; in aac_probe_container()
834 if (_aac_probe_container(scsicmd, aac_probe_container_callback1) == 0) in aac_probe_container()
835 while (scsicmd->device == scsidev) in aac_probe_container()
838 status = scsicmd->SCp.Status; in aac_probe_container()
839 kfree(scsicmd); in aac_probe_container()
969 struct aac_dev *dev, struct scsi_cmnd *scsicmd) in build_vpd83_type3() argument
981 if (scmd_id(scsicmd) == container) { in build_vpd83_type3()
993 struct scsi_cmnd * scsicmd; in get_container_serial_callback() local
997 scsicmd = (struct scsi_cmnd *) context; in get_container_serial_callback()
998 if (!aac_valid_context(scsicmd, fibptr)) in get_container_serial_callback()
1005 if (scsicmd->cmnd[2] == 0x83) { in get_container_serial_callback()
1011 dev = (struct aac_dev *)scsicmd->device->host->hostdata; in get_container_serial_callback()
1085 dev, scsicmd); in get_container_serial_callback()
1089 scsi_sg_copy_from_buffer(scsicmd, &vpdpage83data, in get_container_serial_callback()
1096 sp[1] = scsicmd->cmnd[2]; in get_container_serial_callback()
1100 scsi_sg_copy_from_buffer(scsicmd, sp, in get_container_serial_callback()
1105 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD; in get_container_serial_callback()
1108 scsicmd->scsi_done(scsicmd); in get_container_serial_callback()
1114 static int aac_get_container_serial(struct scsi_cmnd * scsicmd) in aac_get_container_serial() argument
1121 dev = (struct aac_dev *)scsicmd->device->host->hostdata; in aac_get_container_serial()
1123 cmd_fibcontext = aac_fib_alloc_tag(dev, scsicmd); in aac_get_container_serial()
1130 dinfo->cid = cpu_to_le32(scmd_id(scsicmd)); in aac_get_container_serial()
1131 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE; in aac_get_container_serial()
1139 (void *) scsicmd); in aac_get_container_serial()
2325 struct scsi_cmnd *scsicmd; in io_callback() local
2328 scsicmd = (struct scsi_cmnd *) context; in io_callback()
2330 if (!aac_valid_context(scsicmd, fibptr)) in io_callback()
2334 cid = scmd_id(scsicmd); in io_callback()
2338 switch (scsicmd->cmnd[0]) { in io_callback()
2341 lba = ((scsicmd->cmnd[1] & 0x1F) << 16) | in io_callback()
2342 (scsicmd->cmnd[2] << 8) | scsicmd->cmnd[3]; in io_callback()
2346 lba = ((u64)scsicmd->cmnd[2] << 56) | in io_callback()
2347 ((u64)scsicmd->cmnd[3] << 48) | in io_callback()
2348 ((u64)scsicmd->cmnd[4] << 40) | in io_callback()
2349 ((u64)scsicmd->cmnd[5] << 32) | in io_callback()
2350 ((u64)scsicmd->cmnd[6] << 24) | in io_callback()
2351 (scsicmd->cmnd[7] << 16) | in io_callback()
2352 (scsicmd->cmnd[8] << 8) | scsicmd->cmnd[9]; in io_callback()
2356 lba = ((u64)scsicmd->cmnd[2] << 24) | in io_callback()
2357 (scsicmd->cmnd[3] << 16) | in io_callback()
2358 (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5]; in io_callback()
2361 lba = ((u64)scsicmd->cmnd[2] << 24) | in io_callback()
2362 (scsicmd->cmnd[3] << 16) | in io_callback()
2363 (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5]; in io_callback()
2373 scsi_dma_unmap(scsicmd); in io_callback()
2378 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | in io_callback()
2383 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | in io_callback()
2387 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data, in io_callback()
2392 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | in io_callback()
2396 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data, in io_callback()
2405 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | in io_callback()
2410 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data, in io_callback()
2417 scsicmd->scsi_done(scsicmd); in io_callback()
2420 static int aac_read(struct scsi_cmnd * scsicmd) in aac_read() argument
2429 dev = (struct aac_dev *)scsicmd->device->host->hostdata; in aac_read()
2433 switch (scsicmd->cmnd[0]) { in aac_read()
2435 dprintk((KERN_DEBUG "aachba: received a read(6) command on id %d.\n", scmd_id(scsicmd))); in aac_read()
2437 lba = ((scsicmd->cmnd[1] & 0x1F) << 16) | in aac_read()
2438 (scsicmd->cmnd[2] << 8) | scsicmd->cmnd[3]; in aac_read()
2439 count = scsicmd->cmnd[4]; in aac_read()
2445 dprintk((KERN_DEBUG "aachba: received a read(16) command on id %d.\n", scmd_id(scsicmd))); in aac_read()
2447 lba = ((u64)scsicmd->cmnd[2] << 56) | in aac_read()
2448 ((u64)scsicmd->cmnd[3] << 48) | in aac_read()
2449 ((u64)scsicmd->cmnd[4] << 40) | in aac_read()
2450 ((u64)scsicmd->cmnd[5] << 32) | in aac_read()
2451 ((u64)scsicmd->cmnd[6] << 24) | in aac_read()
2452 (scsicmd->cmnd[7] << 16) | in aac_read()
2453 (scsicmd->cmnd[8] << 8) | scsicmd->cmnd[9]; in aac_read()
2454 count = (scsicmd->cmnd[10] << 24) | in aac_read()
2455 (scsicmd->cmnd[11] << 16) | in aac_read()
2456 (scsicmd->cmnd[12] << 8) | scsicmd->cmnd[13]; in aac_read()
2459 dprintk((KERN_DEBUG "aachba: received a read(12) command on id %d.\n", scmd_id(scsicmd))); in aac_read()
2461 lba = ((u64)scsicmd->cmnd[2] << 24) | in aac_read()
2462 (scsicmd->cmnd[3] << 16) | in aac_read()
2463 (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5]; in aac_read()
2464 count = (scsicmd->cmnd[6] << 24) | in aac_read()
2465 (scsicmd->cmnd[7] << 16) | in aac_read()
2466 (scsicmd->cmnd[8] << 8) | scsicmd->cmnd[9]; in aac_read()
2469 dprintk((KERN_DEBUG "aachba: received a read(10) command on id %d.\n", scmd_id(scsicmd))); in aac_read()
2471 lba = ((u64)scsicmd->cmnd[2] << 24) | in aac_read()
2472 (scsicmd->cmnd[3] << 16) | in aac_read()
2473 (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5]; in aac_read()
2474 count = (scsicmd->cmnd[7] << 8) | scsicmd->cmnd[8]; in aac_read()
2478 if ((lba + count) > (dev->fsa_dev[scmd_id(scsicmd)].size)) { in aac_read()
2479 cid = scmd_id(scsicmd); in aac_read()
2481 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | in aac_read()
2486 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data, in aac_read()
2489 scsicmd->scsi_done(scsicmd); in aac_read()
2495 if (aac_adapter_bounds(dev,scsicmd,lba)) in aac_read()
2500 cmd_fibcontext = aac_fib_alloc_tag(dev, scsicmd); in aac_read()
2501 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE; in aac_read()
2502 status = aac_adapter_read(cmd_fibcontext, scsicmd, lba, count); in aac_read()
2514 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_TASK_SET_FULL; in aac_read()
2515 scsicmd->scsi_done(scsicmd); in aac_read()
2521 static int aac_write(struct scsi_cmnd * scsicmd) in aac_write() argument
2531 dev = (struct aac_dev *)scsicmd->device->host->hostdata; in aac_write()
2535 if (scsicmd->cmnd[0] == WRITE_6) /* 6 byte command */ in aac_write()
2537 lba = ((scsicmd->cmnd[1] & 0x1F) << 16) | (scsicmd->cmnd[2] << 8) | scsicmd->cmnd[3]; in aac_write()
2538 count = scsicmd->cmnd[4]; in aac_write()
2542 } else if (scsicmd->cmnd[0] == WRITE_16) { /* 16 byte command */ in aac_write()
2543 dprintk((KERN_DEBUG "aachba: received a write(16) command on id %d.\n", scmd_id(scsicmd))); in aac_write()
2545 lba = ((u64)scsicmd->cmnd[2] << 56) | in aac_write()
2546 ((u64)scsicmd->cmnd[3] << 48) | in aac_write()
2547 ((u64)scsicmd->cmnd[4] << 40) | in aac_write()
2548 ((u64)scsicmd->cmnd[5] << 32) | in aac_write()
2549 ((u64)scsicmd->cmnd[6] << 24) | in aac_write()
2550 (scsicmd->cmnd[7] << 16) | in aac_write()
2551 (scsicmd->cmnd[8] << 8) | scsicmd->cmnd[9]; in aac_write()
2552 count = (scsicmd->cmnd[10] << 24) | (scsicmd->cmnd[11] << 16) | in aac_write()
2553 (scsicmd->cmnd[12] << 8) | scsicmd->cmnd[13]; in aac_write()
2554 fua = scsicmd->cmnd[1] & 0x8; in aac_write()
2555 } else if (scsicmd->cmnd[0] == WRITE_12) { /* 12 byte command */ in aac_write()
2556 dprintk((KERN_DEBUG "aachba: received a write(12) command on id %d.\n", scmd_id(scsicmd))); in aac_write()
2558 lba = ((u64)scsicmd->cmnd[2] << 24) | (scsicmd->cmnd[3] << 16) in aac_write()
2559 | (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5]; in aac_write()
2560 count = (scsicmd->cmnd[6] << 24) | (scsicmd->cmnd[7] << 16) in aac_write()
2561 | (scsicmd->cmnd[8] << 8) | scsicmd->cmnd[9]; in aac_write()
2562 fua = scsicmd->cmnd[1] & 0x8; in aac_write()
2564 dprintk((KERN_DEBUG "aachba: received a write(10) command on id %d.\n", scmd_id(scsicmd))); in aac_write()
2565 …lba = ((u64)scsicmd->cmnd[2] << 24) | (scsicmd->cmnd[3] << 16) | (scsicmd->cmnd[4] << 8) | scsicmd… in aac_write()
2566 count = (scsicmd->cmnd[7] << 8) | scsicmd->cmnd[8]; in aac_write()
2567 fua = scsicmd->cmnd[1] & 0x8; in aac_write()
2570 if ((lba + count) > (dev->fsa_dev[scmd_id(scsicmd)].size)) { in aac_write()
2571 cid = scmd_id(scsicmd); in aac_write()
2573 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | in aac_write()
2578 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data, in aac_write()
2581 scsicmd->scsi_done(scsicmd); in aac_write()
2587 if (aac_adapter_bounds(dev,scsicmd,lba)) in aac_write()
2592 cmd_fibcontext = aac_fib_alloc_tag(dev, scsicmd); in aac_write()
2593 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE; in aac_write()
2594 status = aac_adapter_write(cmd_fibcontext, scsicmd, lba, count, fua); in aac_write()
2606 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_TASK_SET_FULL; in aac_write()
2607 scsicmd->scsi_done(scsicmd); in aac_write()
2655 static int aac_synchronize(struct scsi_cmnd *scsicmd) in aac_synchronize() argument
2661 struct scsi_device *sdev = scsicmd->device; in aac_synchronize()
2664 u64 lba = ((u64)scsicmd->cmnd[2] << 24) | (scsicmd->cmnd[3] << 16) | in aac_synchronize()
2665 (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5]; in aac_synchronize()
2666 u32 count = (scsicmd->cmnd[7] << 8) | scsicmd->cmnd[8]; in aac_synchronize()
2747 synchronizecmd->cid = cpu_to_le32(scmd_id(scsicmd)); in aac_synchronize()
2750 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE; in aac_synchronize()
2761 (void *)scsicmd); in aac_synchronize()
2778 struct scsi_cmnd *scsicmd = context; in aac_start_stop_callback() local
2780 if (!aac_valid_context(scsicmd, fibptr)) in aac_start_stop_callback()
2785 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD; in aac_start_stop_callback()
2789 scsicmd->scsi_done(scsicmd); in aac_start_stop_callback()
2792 static int aac_start_stop(struct scsi_cmnd *scsicmd) in aac_start_stop() argument
2797 struct scsi_device *sdev = scsicmd->device; in aac_start_stop()
2802 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | in aac_start_stop()
2804 scsicmd->scsi_done(scsicmd); in aac_start_stop()
2814 cmd_fibcontext = aac_fib_alloc_tag(aac, scsicmd); in aac_start_stop()
2822 pmcmd->sub = (scsicmd->cmnd[4] & 1) ? in aac_start_stop()
2825 pmcmd->parm = (scsicmd->cmnd[1] & 1) ? in aac_start_stop()
2827 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE; in aac_start_stop()
2838 (void *)scsicmd); in aac_start_stop()
2859 int aac_scsi_cmd(struct scsi_cmnd * scsicmd) in aac_scsi_cmd() argument
2862 struct Scsi_Host *host = scsicmd->device->host; in aac_scsi_cmd()
2873 cid = scmd_id(scsicmd); in aac_scsi_cmd()
2875 if (scmd_channel(scsicmd) == CONTAINER_CHANNEL) { in aac_scsi_cmd()
2877 (scsicmd->device->lun != 0)) { in aac_scsi_cmd()
2878 scsicmd->result = DID_NO_CONNECT << 16; in aac_scsi_cmd()
2889 switch (scsicmd->cmnd[0]) { in aac_scsi_cmd()
2893 ((scsicmd->cmnd[1] & 0x1f) != SAI_READ_CAPACITY_16)) in aac_scsi_cmd()
2900 return _aac_probe_container(scsicmd, in aac_scsi_cmd()
2907 bus = aac_logical_to_phys(scmd_channel(scsicmd)); in aac_scsi_cmd()
2914 return aac_send_hba_fib(scsicmd); in aac_scsi_cmd()
2919 return aac_send_srb_fib(scsicmd); in aac_scsi_cmd()
2921 scsicmd->result = DID_NO_CONNECT << 16; in aac_scsi_cmd()
2929 else if ((scsicmd->cmnd[0] != INQUIRY) && /* only INQUIRY & TUR cmnd supported for controller */ in aac_scsi_cmd()
2930 (scsicmd->cmnd[0] != TEST_UNIT_READY)) in aac_scsi_cmd()
2932 …_WARNING "Only INQUIRY & TUR command supported for controller, rcvd = 0x%x.\n", scsicmd->cmnd[0])); in aac_scsi_cmd()
2933 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_CHECK_CONDITION; in aac_scsi_cmd()
2937 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data, in aac_scsi_cmd()
2943 switch (scsicmd->cmnd[0]) { in aac_scsi_cmd()
2950 return aac_read(scsicmd); in aac_scsi_cmd()
2958 return aac_write(scsicmd); in aac_scsi_cmd()
2962 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | in aac_scsi_cmd()
2968 return aac_synchronize(scsicmd); in aac_scsi_cmd()
2976 if ((scsicmd->cmnd[1] & 0x1) && aac_wwn) { in aac_scsi_cmd()
2980 arr[0] = (scmd_id(scsicmd) == host->this_id) ? in aac_scsi_cmd()
2982 if (scsicmd->cmnd[2] == 0) { in aac_scsi_cmd()
2988 arr[1] = scsicmd->cmnd[2]; in aac_scsi_cmd()
2989 scsi_sg_copy_from_buffer(scsicmd, &inq_data, in aac_scsi_cmd()
2991 scsicmd->result = DID_OK << 16 | in aac_scsi_cmd()
2994 } else if (scsicmd->cmnd[2] == 0x80) { in aac_scsi_cmd()
2997 scmd_id(scsicmd)); in aac_scsi_cmd()
2998 arr[1] = scsicmd->cmnd[2]; in aac_scsi_cmd()
2999 scsi_sg_copy_from_buffer(scsicmd, &inq_data, in aac_scsi_cmd()
3003 scsicmd); in aac_scsi_cmd()
3004 scsicmd->result = DID_OK << 16 | in aac_scsi_cmd()
3007 } else if (scsicmd->cmnd[2] == 0x83) { in aac_scsi_cmd()
3011 scmd_id(scsicmd)); in aac_scsi_cmd()
3014 scsicmd); in aac_scsi_cmd()
3015 scsicmd->result = DID_OK << 16 | in aac_scsi_cmd()
3020 scsicmd->result = DID_OK << 16 | in aac_scsi_cmd()
3026 memcpy(scsicmd->sense_buffer, in aac_scsi_cmd()
3046 scsi_sg_copy_from_buffer(scsicmd, &inq_data, in aac_scsi_cmd()
3048 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | in aac_scsi_cmd()
3056 scsi_sg_copy_from_buffer(scsicmd, &inq_data, sizeof(inq_data)); in aac_scsi_cmd()
3057 return aac_get_container_name(scsicmd); in aac_scsi_cmd()
3062 ((scsicmd->cmnd[1] & 0x1f) != SAI_READ_CAPACITY_16)) in aac_scsi_cmd()
3085 alloc_len = ((scsicmd->cmnd[10] << 24) in aac_scsi_cmd()
3086 + (scsicmd->cmnd[11] << 16) in aac_scsi_cmd()
3087 + (scsicmd->cmnd[12] << 8) + scsicmd->cmnd[13]); in aac_scsi_cmd()
3090 scsi_sg_copy_from_buffer(scsicmd, cp, alloc_len); in aac_scsi_cmd()
3091 if (alloc_len < scsi_bufflen(scsicmd)) in aac_scsi_cmd()
3092 scsi_set_resid(scsicmd, in aac_scsi_cmd()
3093 scsi_bufflen(scsicmd) - alloc_len); in aac_scsi_cmd()
3096 scsicmd->device->removable = 1; in aac_scsi_cmd()
3098 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | in aac_scsi_cmd()
3122 scsi_sg_copy_from_buffer(scsicmd, cp, sizeof(cp)); in aac_scsi_cmd()
3124 scsicmd->device->removable = 1; in aac_scsi_cmd()
3125 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | in aac_scsi_cmd()
3155 if (scsicmd->cmnd[1] & 0x8) in aac_scsi_cmd()
3167 mpd.mpc_buf[0] = scsicmd->cmnd[2]; in aac_scsi_cmd()
3168 if (scsicmd->cmnd[2] == 0x1C) { in aac_scsi_cmd()
3188 if (((scsicmd->cmnd[2] & 0x3f) == 8) || in aac_scsi_cmd()
3189 ((scsicmd->cmnd[2] & 0x3f) == 0x3f)) { in aac_scsi_cmd()
3198 if (mode_buf_length > scsicmd->cmnd[4]) in aac_scsi_cmd()
3199 mode_buf_length = scsicmd->cmnd[4]; in aac_scsi_cmd()
3202 scsi_sg_copy_from_buffer(scsicmd, in aac_scsi_cmd()
3205 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | in aac_scsi_cmd()
3237 if (scsicmd->cmnd[1] & 0x8) { in aac_scsi_cmd()
3268 if (((scsicmd->cmnd[2] & 0x3f) == 8) || in aac_scsi_cmd()
3269 ((scsicmd->cmnd[2] & 0x3f) == 0x3f)) { in aac_scsi_cmd()
3276 if (mode_buf_length > scsicmd->cmnd[8]) in aac_scsi_cmd()
3277 mode_buf_length = scsicmd->cmnd[8]; in aac_scsi_cmd()
3279 scsi_sg_copy_from_buffer(scsicmd, in aac_scsi_cmd()
3283 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | in aac_scsi_cmd()
3289 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data, in aac_scsi_cmd()
3293 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | in aac_scsi_cmd()
3299 if (scsicmd->cmnd[4]) in aac_scsi_cmd()
3304 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | in aac_scsi_cmd()
3312 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | in aac_scsi_cmd()
3317 memcpy(scsicmd->sense_buffer, in aac_scsi_cmd()
3329 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | in aac_scsi_cmd()
3334 return aac_start_stop(scsicmd); in aac_scsi_cmd()
3342 scsicmd->cmnd[0])); in aac_scsi_cmd()
3343 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | in aac_scsi_cmd()
3348 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data, in aac_scsi_cmd()
3356 scsicmd->scsi_done(scsicmd); in aac_scsi_cmd()
3485 struct scsi_cmnd *scsicmd; in aac_srb_callback() local
3487 scsicmd = (struct scsi_cmnd *) context; in aac_srb_callback()
3489 if (!aac_valid_context(scsicmd, fibptr)) in aac_srb_callback()
3498 scsicmd->sense_buffer[0] = '\0'; /* Initialize sense valid flag to false */ in aac_srb_callback()
3508 scsi_set_resid(scsicmd, scsi_bufflen(scsicmd) in aac_srb_callback()
3513 scsi_dma_unmap(scsicmd); in aac_srb_callback()
3516 if (scsicmd->cmnd[0] == INQUIRY && !(scsicmd->cmnd[1] & 0x01) in aac_srb_callback()
3518 aac_expose_phy_device(scsicmd); in aac_srb_callback()
3531 scsicmd->result = DID_ERROR << 16 in aac_srb_callback()
3534 memcpy(scsicmd->sense_buffer, in aac_srb_callback()
3545 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8; in aac_srb_callback()
3548 switch (scsicmd->cmnd[0]) { in aac_srb_callback()
3558 < scsicmd->underflow) in aac_srb_callback()
3562 scsicmd->result = DID_ERROR << 16 in aac_srb_callback()
3566 scsicmd->result = DID_OK << 16 in aac_srb_callback()
3570 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8; in aac_srb_callback()
3575 scsicmd->result = DID_ABORT << 16 | ABORT << 8; in aac_srb_callback()
3582 scsicmd->result = DID_ERROR << 16 | ABORT << 8; in aac_srb_callback()
3585 scsicmd->result = DID_PARITY << 16 in aac_srb_callback()
3593 scsicmd->result = DID_NO_CONNECT << 16 in aac_srb_callback()
3599 scsicmd->result = DID_TIME_OUT << 16 in aac_srb_callback()
3604 scsicmd->result = DID_BUS_BUSY << 16 in aac_srb_callback()
3609 scsicmd->result = DID_RESET << 16 in aac_srb_callback()
3614 scsicmd->result = DID_ERROR << 16 in aac_srb_callback()
3637 scsicmd->cmnd[0], in aac_srb_callback()
3647 if ((scsicmd->cmnd[0] == ATA_12) in aac_srb_callback()
3648 || (scsicmd->cmnd[0] == ATA_16)) { in aac_srb_callback()
3650 if (scsicmd->cmnd[2] & (0x01 << 5)) { in aac_srb_callback()
3651 scsicmd->result = DID_OK << 16 in aac_srb_callback()
3655 scsicmd->result = DID_ERROR << 16 in aac_srb_callback()
3660 scsicmd->result = DID_ERROR << 16 in aac_srb_callback()
3669 scsicmd->result |= SAM_STAT_CHECK_CONDITION; in aac_srb_callback()
3676 memcpy(scsicmd->sense_buffer, in aac_srb_callback()
3683 scsicmd->result |= le32_to_cpu(srbreply->scsi_status); in aac_srb_callback()
3686 scsicmd->scsi_done(scsicmd); in aac_srb_callback()
3690 struct scsi_cmnd *scsicmd, in hba_resp_task_complete() argument
3693 scsicmd->result = err->status; in hba_resp_task_complete()
3695 scsi_set_resid(scsicmd, le32_to_cpu(err->residual_count)); in hba_resp_task_complete()
3699 scsicmd->result |= DID_OK << 16 | COMMAND_COMPLETE << 8; in hba_resp_task_complete()
3708 memcpy(scsicmd->sense_buffer, in hba_resp_task_complete()
3710 scsicmd->result |= DID_OK << 16 | COMMAND_COMPLETE << 8; in hba_resp_task_complete()
3714 scsicmd->result |= DID_BUS_BUSY << 16 | COMMAND_COMPLETE << 8; in hba_resp_task_complete()
3717 scsicmd->result |= DID_ABORT << 16 | ABORT << 8; in hba_resp_task_complete()
3722 scsicmd->result |= DID_ERROR << 16 | COMMAND_COMPLETE << 8; in hba_resp_task_complete()
3728 struct scsi_cmnd *scsicmd, in hba_resp_task_failure() argument
3736 bus = aac_logical_to_phys(scmd_channel(scsicmd)); in hba_resp_task_failure()
3737 cid = scmd_id(scsicmd); in hba_resp_task_failure()
3742 scsicmd->result = DID_NO_CONNECT << 16 | COMMAND_COMPLETE << 8; in hba_resp_task_failure()
3747 scsicmd->result = DID_OK << 16 | in hba_resp_task_failure()
3751 scsicmd->result = DID_ABORT << 16 | ABORT << 8; in hba_resp_task_failure()
3754 scsicmd->result = DID_NO_CONNECT << 16 | COMMAND_COMPLETE << 8; in hba_resp_task_failure()
3758 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8; in hba_resp_task_failure()
3762 scsicmd->result = DID_ERROR << 16 | COMMAND_COMPLETE << 8; in hba_resp_task_failure()
3779 struct scsi_cmnd *scsicmd; in aac_hba_callback() local
3784 scsicmd = (struct scsi_cmnd *) context; in aac_hba_callback()
3786 if (!aac_valid_context(scsicmd, fibptr)) in aac_hba_callback()
3793 scsi_dma_unmap(scsicmd); in aac_hba_callback()
3797 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8; in aac_hba_callback()
3803 hba_resp_task_complete(dev, scsicmd, err); in aac_hba_callback()
3806 hba_resp_task_failure(dev, scsicmd, err); in aac_hba_callback()
3809 scsicmd->result = DID_ERROR << 16 | MESSAGE_REJECT << 8; in aac_hba_callback()
3812 scsicmd->result = DID_NO_CONNECT << 16 | COMMAND_COMPLETE << 8; in aac_hba_callback()
3816 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8; in aac_hba_callback()
3819 scsicmd->result = DID_ERROR << 16 | COMMAND_COMPLETE << 8; in aac_hba_callback()
3827 scsicmd->SCp.sent_command = 1; in aac_hba_callback()
3829 scsicmd->scsi_done(scsicmd); in aac_hba_callback()
3841 static int aac_send_srb_fib(struct scsi_cmnd* scsicmd) in aac_send_srb_fib() argument
3847 dev = (struct aac_dev *)scsicmd->device->host->hostdata; in aac_send_srb_fib()
3848 if (scmd_id(scsicmd) >= dev->maximum_num_physicals || in aac_send_srb_fib()
3849 scsicmd->device->lun > 7) { in aac_send_srb_fib()
3850 scsicmd->result = DID_NO_CONNECT << 16; in aac_send_srb_fib()
3851 scsicmd->scsi_done(scsicmd); in aac_send_srb_fib()
3858 cmd_fibcontext = aac_fib_alloc_tag(dev, scsicmd); in aac_send_srb_fib()
3859 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE; in aac_send_srb_fib()
3860 status = aac_adapter_scsi(cmd_fibcontext, scsicmd); in aac_send_srb_fib()
3883 static int aac_send_hba_fib(struct scsi_cmnd *scsicmd) in aac_send_hba_fib() argument
3889 dev = shost_priv(scsicmd->device->host); in aac_send_hba_fib()
3890 if (scmd_id(scsicmd) >= dev->maximum_num_physicals || in aac_send_hba_fib()
3891 scsicmd->device->lun > AAC_MAX_LUN - 1) { in aac_send_hba_fib()
3892 scsicmd->result = DID_NO_CONNECT << 16; in aac_send_hba_fib()
3893 scsicmd->scsi_done(scsicmd); in aac_send_hba_fib()
3900 cmd_fibcontext = aac_fib_alloc_tag(dev, scsicmd); in aac_send_hba_fib()
3904 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE; in aac_send_hba_fib()
3905 status = aac_adapter_hba(cmd_fibcontext, scsicmd); in aac_send_hba_fib()
3922 static long aac_build_sg(struct scsi_cmnd *scsicmd, struct sgmap *psg) in aac_build_sg() argument
3930 dev = (struct aac_dev *)scsicmd->device->host->hostdata; in aac_build_sg()
3936 nseg = scsi_dma_map(scsicmd); in aac_build_sg()
3942 scsi_for_each_sg(scsicmd, sg, nseg, i) { in aac_build_sg()
3948 if (byte_count > scsi_bufflen(scsicmd)) { in aac_build_sg()
3950 (byte_count - scsi_bufflen(scsicmd)); in aac_build_sg()
3952 byte_count = scsi_bufflen(scsicmd); in aac_build_sg()
3955 if (scsicmd->underflow && (byte_count < scsicmd->underflow)) { in aac_build_sg()
3957 byte_count, scsicmd->underflow); in aac_build_sg()
3964 static long aac_build_sg64(struct scsi_cmnd *scsicmd, struct sgmap64 *psg) in aac_build_sg64() argument
3973 dev = (struct aac_dev *)scsicmd->device->host->hostdata; in aac_build_sg64()
3980 nseg = scsi_dma_map(scsicmd); in aac_build_sg64()
3984 scsi_for_each_sg(scsicmd, sg, nseg, i) { in aac_build_sg64()
3994 if (byte_count > scsi_bufflen(scsicmd)) { in aac_build_sg64()
3996 (byte_count - scsi_bufflen(scsicmd)); in aac_build_sg64()
3998 byte_count = scsi_bufflen(scsicmd); in aac_build_sg64()
4001 if (scsicmd->underflow && (byte_count < scsicmd->underflow)) { in aac_build_sg64()
4003 byte_count, scsicmd->underflow); in aac_build_sg64()
4009 static long aac_build_sgraw(struct scsi_cmnd *scsicmd, struct sgmapraw *psg) in aac_build_sgraw() argument
4025 nseg = scsi_dma_map(scsicmd); in aac_build_sgraw()
4029 scsi_for_each_sg(scsicmd, sg, nseg, i) { in aac_build_sgraw()
4042 if (byte_count > scsi_bufflen(scsicmd)) { in aac_build_sgraw()
4044 (byte_count - scsi_bufflen(scsicmd)); in aac_build_sgraw()
4046 byte_count = scsi_bufflen(scsicmd); in aac_build_sgraw()
4049 if (scsicmd->underflow && (byte_count < scsicmd->underflow)) { in aac_build_sgraw()
4051 byte_count, scsicmd->underflow); in aac_build_sgraw()
4057 static long aac_build_sgraw2(struct scsi_cmnd *scsicmd, in aac_build_sgraw2() argument
4066 nseg = scsi_dma_map(scsicmd); in aac_build_sgraw2()
4070 scsi_for_each_sg(scsicmd, sg, nseg, i) { in aac_build_sgraw2()
4095 if (byte_count > scsi_bufflen(scsicmd)) { in aac_build_sgraw2()
4097 (byte_count - scsi_bufflen(scsicmd)); in aac_build_sgraw2()
4099 byte_count = scsi_bufflen(scsicmd); in aac_build_sgraw2()
4130 if (scsicmd->underflow && (byte_count < scsicmd->underflow)) { in aac_build_sgraw2()
4132 byte_count, scsicmd->underflow); in aac_build_sgraw2()
4173 static long aac_build_sghba(struct scsi_cmnd *scsicmd, in aac_build_sghba() argument
4185 nseg = scsi_dma_map(scsicmd); in aac_build_sghba()
4196 scsi_for_each_sg(scsicmd, sg, nseg, i) { in aac_build_sghba()
4212 if (byte_count > scsi_bufflen(scsicmd)) { in aac_build_sghba()
4216 - scsi_bufflen(scsicmd); in aac_build_sghba()
4218 byte_count = scsi_bufflen(scsicmd); in aac_build_sghba()
4234 if (scsicmd->underflow && (byte_count < scsicmd->underflow)) { in aac_build_sghba()
4236 byte_count, scsicmd->underflow); in aac_build_sghba()