Lines Matching refs:scsicmd

217 static long aac_build_sg(struct scsi_cmnd *scsicmd, struct sgmap *sgmap);
218 static long aac_build_sg64(struct scsi_cmnd *scsicmd, struct sgmap64 *psg);
219 static long aac_build_sgraw(struct scsi_cmnd *scsicmd, struct sgmapraw *psg);
220 static long aac_build_sgraw2(struct scsi_cmnd *scsicmd,
222 static long aac_build_sghba(struct scsi_cmnd *scsicmd,
227 static int aac_send_srb_fib(struct scsi_cmnd* scsicmd);
228 static int aac_send_hba_fib(struct scsi_cmnd *scsicmd);
332 static inline int aac_valid_context(struct scsi_cmnd *scsicmd, in aac_valid_context() argument
336 if (unlikely(!scsicmd || !scsicmd->scsi_done)) { in aac_valid_context()
341 scsicmd->SCp.phase = AAC_OWNER_MIDLEVEL; in aac_valid_context()
342 device = scsicmd->device; in aac_valid_context()
434 static void aac_expose_phy_device(struct scsi_cmnd *scsicmd) in aac_expose_phy_device() argument
437 scsi_sg_copy_to_buffer(scsicmd, &inq_data, sizeof(inq_data)); in aac_expose_phy_device()
440 scsi_sg_copy_from_buffer(scsicmd, &inq_data, sizeof(inq_data)); in aac_expose_phy_device()
524 struct scsi_cmnd * scsicmd; in get_container_name_callback() local
526 scsicmd = (struct scsi_cmnd *) context; in get_container_name_callback()
528 if (!aac_valid_context(scsicmd, fibptr)) in get_container_name_callback()
553 scsi_sg_copy_to_buffer(scsicmd, &inq, sizeof(inq)); in get_container_name_callback()
555 scsi_sg_copy_from_buffer(scsicmd, &inq, sizeof(inq)); in get_container_name_callback()
559 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD; in get_container_name_callback()
562 scsicmd->scsi_done(scsicmd); in get_container_name_callback()
568 static int aac_get_container_name(struct scsi_cmnd * scsicmd) in aac_get_container_name() argument
576 dev = (struct aac_dev *)scsicmd->device->host->hostdata; in aac_get_container_name()
580 cmd_fibcontext = aac_fib_alloc_tag(dev, scsicmd); in aac_get_container_name()
584 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE; in aac_get_container_name()
588 dinfo->cid = cpu_to_le32(scmd_id(scsicmd)); in aac_get_container_name()
597 (void *) scsicmd); in aac_get_container_name()
610 static int aac_probe_container_callback2(struct scsi_cmnd * scsicmd) in aac_probe_container_callback2() argument
612 struct fsa_dev_info *fsa_dev_ptr = ((struct aac_dev *)(scsicmd->device->host->hostdata))->fsa_dev; in aac_probe_container_callback2()
614 if ((fsa_dev_ptr[scmd_id(scsicmd)].valid & 1)) in aac_probe_container_callback2()
615 return aac_scsi_cmd(scsicmd); in aac_probe_container_callback2()
617 scsicmd->result = DID_NO_CONNECT << 16; in aac_probe_container_callback2()
618 scsicmd->scsi_done(scsicmd); in aac_probe_container_callback2()
626 struct scsi_cmnd * scsicmd = (struct scsi_cmnd *)context; in _aac_probe_container2() local
630 if (!aac_valid_context(scsicmd, fibptr)) in _aac_probe_container2()
633 scsicmd->SCp.Status = 0; in _aac_probe_container2()
639 fsa_dev_ptr += scmd_id(scsicmd); in _aac_probe_container2()
671 scsicmd->SCp.Status = le32_to_cpu(dresp->count); in _aac_probe_container2()
675 callback = (int (*)(struct scsi_cmnd *))(scsicmd->SCp.ptr); in _aac_probe_container2()
676 scsicmd->SCp.ptr = NULL; in _aac_probe_container2()
677 (*callback)(scsicmd); in _aac_probe_container2()
683 struct scsi_cmnd * scsicmd; in _aac_probe_container1() local
697 scsicmd = (struct scsi_cmnd *) context; in _aac_probe_container1()
699 if (!aac_valid_context(scsicmd, fibptr)) in _aac_probe_container1()
712 dinfo->count = cpu_to_le32(scmd_id(scsicmd)); in _aac_probe_container1()
714 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE; in _aac_probe_container1()
722 (void *) scsicmd); in _aac_probe_container1()
733 static int _aac_probe_container(struct scsi_cmnd * scsicmd, int (*callback)(struct scsi_cmnd *)) in _aac_probe_container() argument
738 if ((fibptr = aac_fib_alloc((struct aac_dev *)scsicmd->device->host->hostdata))) { in _aac_probe_container()
751 dinfo->count = cpu_to_le32(scmd_id(scsicmd)); in _aac_probe_container()
753 scsicmd->SCp.ptr = (char *)callback; in _aac_probe_container()
754 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE; in _aac_probe_container()
762 (void *) scsicmd); in _aac_probe_container()
770 scsicmd->SCp.ptr = NULL; in _aac_probe_container()
776 struct fsa_dev_info *fsa_dev_ptr = ((struct aac_dev *)(scsicmd->device->host->hostdata))->fsa_dev; in _aac_probe_container()
778 fsa_dev_ptr += scmd_id(scsicmd); in _aac_probe_container()
781 return (*callback)(scsicmd); in _aac_probe_container()
795 static int aac_probe_container_callback1(struct scsi_cmnd * scsicmd) in aac_probe_container_callback1() argument
797 scsicmd->device = NULL; in aac_probe_container_callback1()
808 struct scsi_cmnd *scsicmd = kmalloc(sizeof(*scsicmd), GFP_KERNEL); in aac_probe_container() local
812 if (!scsicmd || !scsidev) { in aac_probe_container()
813 kfree(scsicmd); in aac_probe_container()
817 scsicmd->scsi_done = aac_probe_container_scsi_done; in aac_probe_container()
819 scsicmd->device = scsidev; in aac_probe_container()
824 if (_aac_probe_container(scsicmd, aac_probe_container_callback1) == 0) in aac_probe_container()
825 while (scsicmd->device == scsidev) in aac_probe_container()
828 status = scsicmd->SCp.Status; in aac_probe_container()
829 kfree(scsicmd); in aac_probe_container()
959 struct aac_dev *dev, struct scsi_cmnd *scsicmd) in build_vpd83_type3() argument
971 if (scmd_id(scsicmd) == container) { in build_vpd83_type3()
983 struct scsi_cmnd * scsicmd; in get_container_serial_callback() local
987 scsicmd = (struct scsi_cmnd *) context; in get_container_serial_callback()
988 if (!aac_valid_context(scsicmd, fibptr)) in get_container_serial_callback()
995 if (scsicmd->cmnd[2] == 0x83) { in get_container_serial_callback()
1001 dev = (struct aac_dev *)scsicmd->device->host->hostdata; in get_container_serial_callback()
1075 dev, scsicmd); in get_container_serial_callback()
1079 scsi_sg_copy_from_buffer(scsicmd, &vpdpage83data, in get_container_serial_callback()
1086 sp[1] = scsicmd->cmnd[2]; in get_container_serial_callback()
1090 scsi_sg_copy_from_buffer(scsicmd, sp, in get_container_serial_callback()
1095 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD; in get_container_serial_callback()
1098 scsicmd->scsi_done(scsicmd); in get_container_serial_callback()
1104 static int aac_get_container_serial(struct scsi_cmnd * scsicmd) in aac_get_container_serial() argument
1111 dev = (struct aac_dev *)scsicmd->device->host->hostdata; in aac_get_container_serial()
1113 cmd_fibcontext = aac_fib_alloc_tag(dev, scsicmd); in aac_get_container_serial()
1120 dinfo->cid = cpu_to_le32(scmd_id(scsicmd)); in aac_get_container_serial()
1121 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE; in aac_get_container_serial()
1129 (void *) scsicmd); in aac_get_container_serial()
2314 struct scsi_cmnd *scsicmd; in io_callback() local
2317 scsicmd = (struct scsi_cmnd *) context; in io_callback()
2319 if (!aac_valid_context(scsicmd, fibptr)) in io_callback()
2323 cid = scmd_id(scsicmd); in io_callback()
2327 switch (scsicmd->cmnd[0]) { in io_callback()
2330 lba = ((scsicmd->cmnd[1] & 0x1F) << 16) | in io_callback()
2331 (scsicmd->cmnd[2] << 8) | scsicmd->cmnd[3]; in io_callback()
2335 lba = ((u64)scsicmd->cmnd[2] << 56) | in io_callback()
2336 ((u64)scsicmd->cmnd[3] << 48) | in io_callback()
2337 ((u64)scsicmd->cmnd[4] << 40) | in io_callback()
2338 ((u64)scsicmd->cmnd[5] << 32) | in io_callback()
2339 ((u64)scsicmd->cmnd[6] << 24) | in io_callback()
2340 (scsicmd->cmnd[7] << 16) | in io_callback()
2341 (scsicmd->cmnd[8] << 8) | scsicmd->cmnd[9]; in io_callback()
2345 lba = ((u64)scsicmd->cmnd[2] << 24) | in io_callback()
2346 (scsicmd->cmnd[3] << 16) | in io_callback()
2347 (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5]; in io_callback()
2350 lba = ((u64)scsicmd->cmnd[2] << 24) | in io_callback()
2351 (scsicmd->cmnd[3] << 16) | in io_callback()
2352 (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5]; in io_callback()
2362 scsi_dma_unmap(scsicmd); in io_callback()
2367 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | in io_callback()
2372 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | in io_callback()
2376 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data, in io_callback()
2381 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | in io_callback()
2385 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data, in io_callback()
2394 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | in io_callback()
2399 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data, in io_callback()
2406 scsicmd->scsi_done(scsicmd); in io_callback()
2409 static int aac_read(struct scsi_cmnd * scsicmd) in aac_read() argument
2418 dev = (struct aac_dev *)scsicmd->device->host->hostdata; in aac_read()
2422 switch (scsicmd->cmnd[0]) { in aac_read()
2424 dprintk((KERN_DEBUG "aachba: received a read(6) command on id %d.\n", scmd_id(scsicmd))); in aac_read()
2426 lba = ((scsicmd->cmnd[1] & 0x1F) << 16) | in aac_read()
2427 (scsicmd->cmnd[2] << 8) | scsicmd->cmnd[3]; in aac_read()
2428 count = scsicmd->cmnd[4]; in aac_read()
2434 dprintk((KERN_DEBUG "aachba: received a read(16) command on id %d.\n", scmd_id(scsicmd))); in aac_read()
2436 lba = ((u64)scsicmd->cmnd[2] << 56) | in aac_read()
2437 ((u64)scsicmd->cmnd[3] << 48) | in aac_read()
2438 ((u64)scsicmd->cmnd[4] << 40) | in aac_read()
2439 ((u64)scsicmd->cmnd[5] << 32) | in aac_read()
2440 ((u64)scsicmd->cmnd[6] << 24) | in aac_read()
2441 (scsicmd->cmnd[7] << 16) | in aac_read()
2442 (scsicmd->cmnd[8] << 8) | scsicmd->cmnd[9]; in aac_read()
2443 count = (scsicmd->cmnd[10] << 24) | in aac_read()
2444 (scsicmd->cmnd[11] << 16) | in aac_read()
2445 (scsicmd->cmnd[12] << 8) | scsicmd->cmnd[13]; in aac_read()
2448 dprintk((KERN_DEBUG "aachba: received a read(12) command on id %d.\n", scmd_id(scsicmd))); in aac_read()
2450 lba = ((u64)scsicmd->cmnd[2] << 24) | in aac_read()
2451 (scsicmd->cmnd[3] << 16) | in aac_read()
2452 (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5]; in aac_read()
2453 count = (scsicmd->cmnd[6] << 24) | in aac_read()
2454 (scsicmd->cmnd[7] << 16) | in aac_read()
2455 (scsicmd->cmnd[8] << 8) | scsicmd->cmnd[9]; in aac_read()
2458 dprintk((KERN_DEBUG "aachba: received a read(10) command on id %d.\n", scmd_id(scsicmd))); in aac_read()
2460 lba = ((u64)scsicmd->cmnd[2] << 24) | in aac_read()
2461 (scsicmd->cmnd[3] << 16) | in aac_read()
2462 (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5]; in aac_read()
2463 count = (scsicmd->cmnd[7] << 8) | scsicmd->cmnd[8]; in aac_read()
2467 if ((lba + count) > (dev->fsa_dev[scmd_id(scsicmd)].size)) { in aac_read()
2468 cid = scmd_id(scsicmd); in aac_read()
2470 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | in aac_read()
2475 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data, in aac_read()
2478 scsicmd->scsi_done(scsicmd); in aac_read()
2484 if (aac_adapter_bounds(dev,scsicmd,lba)) in aac_read()
2489 cmd_fibcontext = aac_fib_alloc_tag(dev, scsicmd); in aac_read()
2490 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE; in aac_read()
2491 status = aac_adapter_read(cmd_fibcontext, scsicmd, lba, count); in aac_read()
2503 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_TASK_SET_FULL; in aac_read()
2504 scsicmd->scsi_done(scsicmd); in aac_read()
2510 static int aac_write(struct scsi_cmnd * scsicmd) in aac_write() argument
2520 dev = (struct aac_dev *)scsicmd->device->host->hostdata; in aac_write()
2524 if (scsicmd->cmnd[0] == WRITE_6) /* 6 byte command */ in aac_write()
2526 lba = ((scsicmd->cmnd[1] & 0x1F) << 16) | (scsicmd->cmnd[2] << 8) | scsicmd->cmnd[3]; in aac_write()
2527 count = scsicmd->cmnd[4]; in aac_write()
2531 } else if (scsicmd->cmnd[0] == WRITE_16) { /* 16 byte command */ in aac_write()
2532 dprintk((KERN_DEBUG "aachba: received a write(16) command on id %d.\n", scmd_id(scsicmd))); in aac_write()
2534 lba = ((u64)scsicmd->cmnd[2] << 56) | in aac_write()
2535 ((u64)scsicmd->cmnd[3] << 48) | in aac_write()
2536 ((u64)scsicmd->cmnd[4] << 40) | in aac_write()
2537 ((u64)scsicmd->cmnd[5] << 32) | in aac_write()
2538 ((u64)scsicmd->cmnd[6] << 24) | in aac_write()
2539 (scsicmd->cmnd[7] << 16) | in aac_write()
2540 (scsicmd->cmnd[8] << 8) | scsicmd->cmnd[9]; in aac_write()
2541 count = (scsicmd->cmnd[10] << 24) | (scsicmd->cmnd[11] << 16) | in aac_write()
2542 (scsicmd->cmnd[12] << 8) | scsicmd->cmnd[13]; in aac_write()
2543 fua = scsicmd->cmnd[1] & 0x8; in aac_write()
2544 } else if (scsicmd->cmnd[0] == WRITE_12) { /* 12 byte command */ in aac_write()
2545 dprintk((KERN_DEBUG "aachba: received a write(12) command on id %d.\n", scmd_id(scsicmd))); in aac_write()
2547 lba = ((u64)scsicmd->cmnd[2] << 24) | (scsicmd->cmnd[3] << 16) in aac_write()
2548 | (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5]; in aac_write()
2549 count = (scsicmd->cmnd[6] << 24) | (scsicmd->cmnd[7] << 16) in aac_write()
2550 | (scsicmd->cmnd[8] << 8) | scsicmd->cmnd[9]; in aac_write()
2551 fua = scsicmd->cmnd[1] & 0x8; in aac_write()
2553 dprintk((KERN_DEBUG "aachba: received a write(10) command on id %d.\n", scmd_id(scsicmd))); in aac_write()
2554 …lba = ((u64)scsicmd->cmnd[2] << 24) | (scsicmd->cmnd[3] << 16) | (scsicmd->cmnd[4] << 8) | scsicmd in aac_write()
2555 count = (scsicmd->cmnd[7] << 8) | scsicmd->cmnd[8]; in aac_write()
2556 fua = scsicmd->cmnd[1] & 0x8; in aac_write()
2559 if ((lba + count) > (dev->fsa_dev[scmd_id(scsicmd)].size)) { in aac_write()
2560 cid = scmd_id(scsicmd); in aac_write()
2562 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | in aac_write()
2567 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data, in aac_write()
2570 scsicmd->scsi_done(scsicmd); in aac_write()
2576 if (aac_adapter_bounds(dev,scsicmd,lba)) in aac_write()
2581 cmd_fibcontext = aac_fib_alloc_tag(dev, scsicmd); in aac_write()
2582 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE; in aac_write()
2583 status = aac_adapter_write(cmd_fibcontext, scsicmd, lba, count, fua); in aac_write()
2595 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_TASK_SET_FULL; in aac_write()
2596 scsicmd->scsi_done(scsicmd); in aac_write()
2642 static int aac_synchronize(struct scsi_cmnd *scsicmd) in aac_synchronize() argument
2647 struct scsi_device *sdev = scsicmd->device; in aac_synchronize()
2657 cmd_fibcontext = aac_fib_alloc_tag(aac, scsicmd); in aac_synchronize()
2664 synchronizecmd->cid = cpu_to_le32(scmd_id(scsicmd)); in aac_synchronize()
2667 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE; in aac_synchronize()
2678 (void *)scsicmd); in aac_synchronize()
2695 struct scsi_cmnd *scsicmd = context; in aac_start_stop_callback() local
2697 if (!aac_valid_context(scsicmd, fibptr)) in aac_start_stop_callback()
2702 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD; in aac_start_stop_callback()
2706 scsicmd->scsi_done(scsicmd); in aac_start_stop_callback()
2709 static int aac_start_stop(struct scsi_cmnd *scsicmd) in aac_start_stop() argument
2714 struct scsi_device *sdev = scsicmd->device; in aac_start_stop()
2719 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | in aac_start_stop()
2721 scsicmd->scsi_done(scsicmd); in aac_start_stop()
2731 cmd_fibcontext = aac_fib_alloc_tag(aac, scsicmd); in aac_start_stop()
2739 pmcmd->sub = (scsicmd->cmnd[4] & 1) ? in aac_start_stop()
2742 pmcmd->parm = (scsicmd->cmnd[1] & 1) ? in aac_start_stop()
2744 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE; in aac_start_stop()
2755 (void *)scsicmd); in aac_start_stop()
2776 int aac_scsi_cmd(struct scsi_cmnd * scsicmd) in aac_scsi_cmd() argument
2779 struct Scsi_Host *host = scsicmd->device->host; in aac_scsi_cmd()
2790 cid = scmd_id(scsicmd); in aac_scsi_cmd()
2792 if (scmd_channel(scsicmd) == CONTAINER_CHANNEL) { in aac_scsi_cmd()
2794 (scsicmd->device->lun != 0)) { in aac_scsi_cmd()
2795 scsicmd->result = DID_NO_CONNECT << 16; in aac_scsi_cmd()
2806 switch (scsicmd->cmnd[0]) { in aac_scsi_cmd()
2810 ((scsicmd->cmnd[1] & 0x1f) != SAI_READ_CAPACITY_16)) in aac_scsi_cmd()
2818 return _aac_probe_container(scsicmd, in aac_scsi_cmd()
2825 bus = aac_logical_to_phys(scmd_channel(scsicmd)); in aac_scsi_cmd()
2832 return aac_send_hba_fib(scsicmd); in aac_scsi_cmd()
2837 return aac_send_srb_fib(scsicmd); in aac_scsi_cmd()
2839 scsicmd->result = DID_NO_CONNECT << 16; in aac_scsi_cmd()
2847 else if ((scsicmd->cmnd[0] != INQUIRY) && /* only INQUIRY & TUR cmnd supported for controller */ in aac_scsi_cmd()
2848 (scsicmd->cmnd[0] != TEST_UNIT_READY)) in aac_scsi_cmd()
2850 …_WARNING "Only INQUIRY & TUR command supported for controller, rcvd = 0x%x.\n", scsicmd->cmnd[0])); in aac_scsi_cmd()
2851 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_CHECK_CONDITION; in aac_scsi_cmd()
2855 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data, in aac_scsi_cmd()
2861 switch (scsicmd->cmnd[0]) { in aac_scsi_cmd()
2868 return aac_read(scsicmd); in aac_scsi_cmd()
2876 return aac_write(scsicmd); in aac_scsi_cmd()
2880 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | in aac_scsi_cmd()
2886 return aac_synchronize(scsicmd); in aac_scsi_cmd()
2895 if ((scsicmd->cmnd[1] & 0x1) && aac_wwn) { in aac_scsi_cmd()
2899 arr[0] = (scmd_id(scsicmd) == host->this_id) ? in aac_scsi_cmd()
2901 if (scsicmd->cmnd[2] == 0) { in aac_scsi_cmd()
2907 arr[1] = scsicmd->cmnd[2]; in aac_scsi_cmd()
2908 scsi_sg_copy_from_buffer(scsicmd, &inq_data, in aac_scsi_cmd()
2910 scsicmd->result = DID_OK << 16 | in aac_scsi_cmd()
2913 } else if (scsicmd->cmnd[2] == 0x80) { in aac_scsi_cmd()
2916 scmd_id(scsicmd)); in aac_scsi_cmd()
2917 arr[1] = scsicmd->cmnd[2]; in aac_scsi_cmd()
2918 scsi_sg_copy_from_buffer(scsicmd, &inq_data, in aac_scsi_cmd()
2922 scsicmd); in aac_scsi_cmd()
2923 scsicmd->result = DID_OK << 16 | in aac_scsi_cmd()
2926 } else if (scsicmd->cmnd[2] == 0x83) { in aac_scsi_cmd()
2930 scmd_id(scsicmd)); in aac_scsi_cmd()
2933 scsicmd); in aac_scsi_cmd()
2934 scsicmd->result = DID_OK << 16 | in aac_scsi_cmd()
2939 scsicmd->result = DID_OK << 16 | in aac_scsi_cmd()
2945 memcpy(scsicmd->sense_buffer, in aac_scsi_cmd()
2965 scsi_sg_copy_from_buffer(scsicmd, &inq_data, in aac_scsi_cmd()
2967 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | in aac_scsi_cmd()
2975 scsi_sg_copy_from_buffer(scsicmd, &inq_data, sizeof(inq_data)); in aac_scsi_cmd()
2976 return aac_get_container_name(scsicmd); in aac_scsi_cmd()
2981 ((scsicmd->cmnd[1] & 0x1f) != SAI_READ_CAPACITY_16)) in aac_scsi_cmd()
3004 alloc_len = ((scsicmd->cmnd[10] << 24) in aac_scsi_cmd()
3005 + (scsicmd->cmnd[11] << 16) in aac_scsi_cmd()
3006 + (scsicmd->cmnd[12] << 8) + scsicmd->cmnd[13]); in aac_scsi_cmd()
3009 scsi_sg_copy_from_buffer(scsicmd, cp, alloc_len); in aac_scsi_cmd()
3010 if (alloc_len < scsi_bufflen(scsicmd)) in aac_scsi_cmd()
3011 scsi_set_resid(scsicmd, in aac_scsi_cmd()
3012 scsi_bufflen(scsicmd) - alloc_len); in aac_scsi_cmd()
3015 scsicmd->device->removable = 1; in aac_scsi_cmd()
3017 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | in aac_scsi_cmd()
3041 scsi_sg_copy_from_buffer(scsicmd, cp, sizeof(cp)); in aac_scsi_cmd()
3043 scsicmd->device->removable = 1; in aac_scsi_cmd()
3044 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | in aac_scsi_cmd()
3074 if (scsicmd->cmnd[1] & 0x8) in aac_scsi_cmd()
3086 mpd.mpc_buf[0] = scsicmd->cmnd[2]; in aac_scsi_cmd()
3087 if (scsicmd->cmnd[2] == 0x1C) { in aac_scsi_cmd()
3107 if (((scsicmd->cmnd[2] & 0x3f) == 8) || in aac_scsi_cmd()
3108 ((scsicmd->cmnd[2] & 0x3f) == 0x3f)) { in aac_scsi_cmd()
3117 if (mode_buf_length > scsicmd->cmnd[4]) in aac_scsi_cmd()
3118 mode_buf_length = scsicmd->cmnd[4]; in aac_scsi_cmd()
3121 scsi_sg_copy_from_buffer(scsicmd, in aac_scsi_cmd()
3124 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | in aac_scsi_cmd()
3156 if (scsicmd->cmnd[1] & 0x8) { in aac_scsi_cmd()
3187 if (((scsicmd->cmnd[2] & 0x3f) == 8) || in aac_scsi_cmd()
3188 ((scsicmd->cmnd[2] & 0x3f) == 0x3f)) { in aac_scsi_cmd()
3195 if (mode_buf_length > scsicmd->cmnd[8]) in aac_scsi_cmd()
3196 mode_buf_length = scsicmd->cmnd[8]; in aac_scsi_cmd()
3198 scsi_sg_copy_from_buffer(scsicmd, in aac_scsi_cmd()
3202 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | in aac_scsi_cmd()
3208 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data, in aac_scsi_cmd()
3212 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | in aac_scsi_cmd()
3218 if (scsicmd->cmnd[4]) in aac_scsi_cmd()
3223 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | in aac_scsi_cmd()
3231 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | in aac_scsi_cmd()
3236 memcpy(scsicmd->sense_buffer, in aac_scsi_cmd()
3249 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | in aac_scsi_cmd()
3254 return aac_start_stop(scsicmd); in aac_scsi_cmd()
3261 scsicmd->cmnd[0])); in aac_scsi_cmd()
3262 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | in aac_scsi_cmd()
3267 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data, in aac_scsi_cmd()
3275 scsicmd->scsi_done(scsicmd); in aac_scsi_cmd()
3400 struct scsi_cmnd *scsicmd; in aac_srb_callback() local
3402 scsicmd = (struct scsi_cmnd *) context; in aac_srb_callback()
3404 if (!aac_valid_context(scsicmd, fibptr)) in aac_srb_callback()
3411 scsicmd->sense_buffer[0] = '\0'; /* Initialize sense valid flag to false */ in aac_srb_callback()
3421 scsi_set_resid(scsicmd, scsi_bufflen(scsicmd) in aac_srb_callback()
3426 scsi_dma_unmap(scsicmd); in aac_srb_callback()
3429 if (scsicmd->cmnd[0] == INQUIRY && !(scsicmd->cmnd[1] & 0x01) in aac_srb_callback()
3431 aac_expose_phy_device(scsicmd); in aac_srb_callback()
3444 scsicmd->result = DID_ERROR << 16 in aac_srb_callback()
3447 memcpy(scsicmd->sense_buffer, in aac_srb_callback()
3458 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8; in aac_srb_callback()
3461 switch (scsicmd->cmnd[0]) { in aac_srb_callback()
3471 < scsicmd->underflow) in aac_srb_callback()
3475 scsicmd->result = DID_ERROR << 16 in aac_srb_callback()
3479 scsicmd->result = DID_OK << 16 in aac_srb_callback()
3483 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8; in aac_srb_callback()
3488 scsicmd->result = DID_ABORT << 16 | ABORT << 8; in aac_srb_callback()
3495 scsicmd->result = DID_ERROR << 16 | ABORT << 8; in aac_srb_callback()
3498 scsicmd->result = DID_PARITY << 16 in aac_srb_callback()
3506 scsicmd->result = DID_NO_CONNECT << 16 in aac_srb_callback()
3512 scsicmd->result = DID_TIME_OUT << 16 in aac_srb_callback()
3517 scsicmd->result = DID_BUS_BUSY << 16 in aac_srb_callback()
3522 scsicmd->result = DID_RESET << 16 in aac_srb_callback()
3527 scsicmd->result = DID_ERROR << 16 in aac_srb_callback()
3550 scsicmd->cmnd[0], in aac_srb_callback()
3560 if ((scsicmd->cmnd[0] == ATA_12) in aac_srb_callback()
3561 || (scsicmd->cmnd[0] == ATA_16)) { in aac_srb_callback()
3563 if (scsicmd->cmnd[2] & (0x01 << 5)) { in aac_srb_callback()
3564 scsicmd->result = DID_OK << 16 in aac_srb_callback()
3568 scsicmd->result = DID_ERROR << 16 in aac_srb_callback()
3573 scsicmd->result = DID_ERROR << 16 in aac_srb_callback()
3582 scsicmd->result |= SAM_STAT_CHECK_CONDITION; in aac_srb_callback()
3589 memcpy(scsicmd->sense_buffer, in aac_srb_callback()
3596 scsicmd->result |= le32_to_cpu(srbreply->scsi_status); in aac_srb_callback()
3599 scsicmd->scsi_done(scsicmd); in aac_srb_callback()
3603 struct scsi_cmnd *scsicmd, in hba_resp_task_complete() argument
3606 scsicmd->result = err->status; in hba_resp_task_complete()
3608 scsi_set_resid(scsicmd, le32_to_cpu(err->residual_count)); in hba_resp_task_complete()
3612 scsicmd->result |= DID_OK << 16 | COMMAND_COMPLETE << 8; in hba_resp_task_complete()
3621 memcpy(scsicmd->sense_buffer, in hba_resp_task_complete()
3623 scsicmd->result |= DID_OK << 16 | COMMAND_COMPLETE << 8; in hba_resp_task_complete()
3627 scsicmd->result |= DID_BUS_BUSY << 16 | COMMAND_COMPLETE << 8; in hba_resp_task_complete()
3630 scsicmd->result |= DID_ABORT << 16 | ABORT << 8; in hba_resp_task_complete()
3635 scsicmd->result |= DID_ERROR << 16 | COMMAND_COMPLETE << 8; in hba_resp_task_complete()
3641 struct scsi_cmnd *scsicmd, in hba_resp_task_failure() argument
3649 bus = aac_logical_to_phys(scmd_channel(scsicmd)); in hba_resp_task_failure()
3650 cid = scmd_id(scsicmd); in hba_resp_task_failure()
3655 scsicmd->result = DID_NO_CONNECT << 16 | COMMAND_COMPLETE << 8; in hba_resp_task_failure()
3660 scsicmd->result = DID_OK << 16 | in hba_resp_task_failure()
3664 scsicmd->result = DID_ABORT << 16 | ABORT << 8; in hba_resp_task_failure()
3667 scsicmd->result = DID_NO_CONNECT << 16 | COMMAND_COMPLETE << 8; in hba_resp_task_failure()
3671 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8; in hba_resp_task_failure()
3675 scsicmd->result = DID_ERROR << 16 | COMMAND_COMPLETE << 8; in hba_resp_task_failure()
3690 struct scsi_cmnd *scsicmd; in aac_hba_callback() local
3695 scsicmd = (struct scsi_cmnd *) context; in aac_hba_callback()
3697 if (!aac_valid_context(scsicmd, fibptr)) in aac_hba_callback()
3704 scsi_dma_unmap(scsicmd); in aac_hba_callback()
3708 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8; in aac_hba_callback()
3714 hba_resp_task_complete(dev, scsicmd, err); in aac_hba_callback()
3717 hba_resp_task_failure(dev, scsicmd, err); in aac_hba_callback()
3720 scsicmd->result = DID_ERROR << 16 | MESSAGE_REJECT << 8; in aac_hba_callback()
3723 scsicmd->result = DID_NO_CONNECT << 16 | COMMAND_COMPLETE << 8; in aac_hba_callback()
3727 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8; in aac_hba_callback()
3730 scsicmd->result = DID_ERROR << 16 | COMMAND_COMPLETE << 8; in aac_hba_callback()
3738 scsicmd->SCp.sent_command = 1; in aac_hba_callback()
3740 scsicmd->scsi_done(scsicmd); in aac_hba_callback()
3750 static int aac_send_srb_fib(struct scsi_cmnd* scsicmd) in aac_send_srb_fib() argument
3756 dev = (struct aac_dev *)scsicmd->device->host->hostdata; in aac_send_srb_fib()
3757 if (scmd_id(scsicmd) >= dev->maximum_num_physicals || in aac_send_srb_fib()
3758 scsicmd->device->lun > 7) { in aac_send_srb_fib()
3759 scsicmd->result = DID_NO_CONNECT << 16; in aac_send_srb_fib()
3760 scsicmd->scsi_done(scsicmd); in aac_send_srb_fib()
3767 cmd_fibcontext = aac_fib_alloc_tag(dev, scsicmd); in aac_send_srb_fib()
3768 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE; in aac_send_srb_fib()
3769 status = aac_adapter_scsi(cmd_fibcontext, scsicmd); in aac_send_srb_fib()
3791 static int aac_send_hba_fib(struct scsi_cmnd *scsicmd) in aac_send_hba_fib() argument
3797 dev = shost_priv(scsicmd->device->host); in aac_send_hba_fib()
3798 if (scmd_id(scsicmd) >= dev->maximum_num_physicals || in aac_send_hba_fib()
3799 scsicmd->device->lun > AAC_MAX_LUN - 1) { in aac_send_hba_fib()
3800 scsicmd->result = DID_NO_CONNECT << 16; in aac_send_hba_fib()
3801 scsicmd->scsi_done(scsicmd); in aac_send_hba_fib()
3808 cmd_fibcontext = aac_fib_alloc_tag(dev, scsicmd); in aac_send_hba_fib()
3812 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE; in aac_send_hba_fib()
3813 status = aac_adapter_hba(cmd_fibcontext, scsicmd); in aac_send_hba_fib()
3830 static long aac_build_sg(struct scsi_cmnd *scsicmd, struct sgmap *psg) in aac_build_sg() argument
3842 nseg = scsi_dma_map(scsicmd); in aac_build_sg()
3848 scsi_for_each_sg(scsicmd, sg, nseg, i) { in aac_build_sg()
3854 if (byte_count > scsi_bufflen(scsicmd)) { in aac_build_sg()
3856 (byte_count - scsi_bufflen(scsicmd)); in aac_build_sg()
3858 byte_count = scsi_bufflen(scsicmd); in aac_build_sg()
3861 if (scsicmd->underflow && (byte_count < scsicmd->underflow)) { in aac_build_sg()
3863 byte_count, scsicmd->underflow); in aac_build_sg()
3870 static long aac_build_sg64(struct scsi_cmnd *scsicmd, struct sgmap64 *psg) in aac_build_sg64() argument
3884 nseg = scsi_dma_map(scsicmd); in aac_build_sg64()
3888 scsi_for_each_sg(scsicmd, sg, nseg, i) { in aac_build_sg64()
3898 if (byte_count > scsi_bufflen(scsicmd)) { in aac_build_sg64()
3900 (byte_count - scsi_bufflen(scsicmd)); in aac_build_sg64()
3902 byte_count = scsi_bufflen(scsicmd); in aac_build_sg64()
3905 if (scsicmd->underflow && (byte_count < scsicmd->underflow)) { in aac_build_sg64()
3907 byte_count, scsicmd->underflow); in aac_build_sg64()
3913 static long aac_build_sgraw(struct scsi_cmnd *scsicmd, struct sgmapraw *psg) in aac_build_sgraw() argument
3929 nseg = scsi_dma_map(scsicmd); in aac_build_sgraw()
3933 scsi_for_each_sg(scsicmd, sg, nseg, i) { in aac_build_sgraw()
3946 if (byte_count > scsi_bufflen(scsicmd)) { in aac_build_sgraw()
3948 (byte_count - scsi_bufflen(scsicmd)); in aac_build_sgraw()
3950 byte_count = scsi_bufflen(scsicmd); in aac_build_sgraw()
3953 if (scsicmd->underflow && (byte_count < scsicmd->underflow)) { in aac_build_sgraw()
3955 byte_count, scsicmd->underflow); in aac_build_sgraw()
3961 static long aac_build_sgraw2(struct scsi_cmnd *scsicmd, in aac_build_sgraw2() argument
3970 nseg = scsi_dma_map(scsicmd); in aac_build_sgraw2()
3974 scsi_for_each_sg(scsicmd, sg, nseg, i) { in aac_build_sgraw2()
3999 if (byte_count > scsi_bufflen(scsicmd)) { in aac_build_sgraw2()
4001 (byte_count - scsi_bufflen(scsicmd)); in aac_build_sgraw2()
4003 byte_count = scsi_bufflen(scsicmd); in aac_build_sgraw2()
4034 if (scsicmd->underflow && (byte_count < scsicmd->underflow)) { in aac_build_sgraw2()
4036 byte_count, scsicmd->underflow); in aac_build_sgraw2()
4077 static long aac_build_sghba(struct scsi_cmnd *scsicmd, in aac_build_sghba() argument
4089 nseg = scsi_dma_map(scsicmd); in aac_build_sghba()
4100 scsi_for_each_sg(scsicmd, sg, nseg, i) { in aac_build_sghba()
4116 if (byte_count > scsi_bufflen(scsicmd)) { in aac_build_sghba()
4120 - scsi_bufflen(scsicmd); in aac_build_sghba()
4122 byte_count = scsi_bufflen(scsicmd); in aac_build_sghba()
4138 if (scsicmd->underflow && (byte_count < scsicmd->underflow)) { in aac_build_sghba()
4140 byte_count, scsicmd->underflow); in aac_build_sghba()