Lines Matching refs:scsicmd

216 static long aac_build_sg(struct scsi_cmnd *scsicmd, struct sgmap *sgmap);
217 static long aac_build_sg64(struct scsi_cmnd *scsicmd, struct sgmap64 *psg);
218 static long aac_build_sgraw(struct scsi_cmnd *scsicmd, struct sgmapraw *psg);
219 static long aac_build_sgraw2(struct scsi_cmnd *scsicmd,
221 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)) { in aac_valid_context()
341 aac_priv(scsicmd)->owner = 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()
535 struct scsi_cmnd * scsicmd; in get_container_name_callback() local
537 scsicmd = (struct scsi_cmnd *) context; in get_container_name_callback()
539 if (!aac_valid_context(scsicmd, fibptr)) in get_container_name_callback()
564 scsi_sg_copy_to_buffer(scsicmd, &inq, sizeof(inq)); in get_container_name_callback()
566 scsi_sg_copy_from_buffer(scsicmd, &inq, sizeof(inq)); in get_container_name_callback()
570 scsicmd->result = DID_OK << 16 | SAM_STAT_GOOD; in get_container_name_callback()
573 aac_scsi_done(scsicmd); in get_container_name_callback()
579 static int aac_get_container_name(struct scsi_cmnd * scsicmd) in aac_get_container_name() argument
587 dev = (struct aac_dev *)scsicmd->device->host->hostdata; in aac_get_container_name()
591 cmd_fibcontext = aac_fib_alloc_tag(dev, scsicmd); in aac_get_container_name()
595 aac_priv(scsicmd)->owner = AAC_OWNER_FIRMWARE; in aac_get_container_name()
599 dinfo->cid = cpu_to_le32(scmd_id(scsicmd)); in aac_get_container_name()
608 (void *) scsicmd); in aac_get_container_name()
621 static int aac_probe_container_callback2(struct scsi_cmnd * scsicmd) in aac_probe_container_callback2() argument
623 struct fsa_dev_info *fsa_dev_ptr = ((struct aac_dev *)(scsicmd->device->host->hostdata))->fsa_dev; in aac_probe_container_callback2()
625 if ((fsa_dev_ptr[scmd_id(scsicmd)].valid & 1)) in aac_probe_container_callback2()
626 return aac_scsi_cmd(scsicmd); in aac_probe_container_callback2()
628 scsicmd->result = DID_NO_CONNECT << 16; in aac_probe_container_callback2()
629 aac_scsi_done(scsicmd); in aac_probe_container_callback2()
637 struct scsi_cmnd *scsicmd = context; in _aac_probe_container2() local
638 struct aac_cmd_priv *cmd_priv = aac_priv(scsicmd); in _aac_probe_container2()
642 if (!aac_valid_context(scsicmd, fibptr)) in _aac_probe_container2()
651 fsa_dev_ptr += scmd_id(scsicmd); in _aac_probe_container2()
689 (*callback)(scsicmd); in _aac_probe_container2()
695 struct scsi_cmnd * scsicmd; in _aac_probe_container1() local
709 scsicmd = (struct scsi_cmnd *) context; in _aac_probe_container1()
711 if (!aac_valid_context(scsicmd, fibptr)) in _aac_probe_container1()
724 dinfo->count = cpu_to_le32(scmd_id(scsicmd)); in _aac_probe_container1()
726 aac_priv(scsicmd)->owner = AAC_OWNER_FIRMWARE; in _aac_probe_container1()
734 (void *) scsicmd); in _aac_probe_container1()
745 static int _aac_probe_container(struct scsi_cmnd * scsicmd, int (*callback)(struct scsi_cmnd *)) in _aac_probe_container() argument
747 struct aac_cmd_priv *cmd_priv = aac_priv(scsicmd); in _aac_probe_container()
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()
775 (void *) scsicmd); 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()
808 static int aac_probe_container_callback1(struct scsi_cmnd * scsicmd) in aac_probe_container_callback1() argument
810 scsicmd->device = NULL; in aac_probe_container_callback1()
822 struct scsi_cmnd *scsicmd = kzalloc(sizeof(*scsicmd) + sizeof(*cmd_priv), GFP_KERNEL); in aac_probe_container() local
826 if (!scsicmd || !scsidev) { in aac_probe_container()
827 kfree(scsicmd); in aac_probe_container()
832 scsicmd->device = scsidev; in aac_probe_container()
837 if (_aac_probe_container(scsicmd, aac_probe_container_callback1) == 0) in aac_probe_container()
838 while (scsicmd->device == scsidev) in aac_probe_container()
841 cmd_priv = aac_priv(scsicmd); in aac_probe_container()
843 kfree(scsicmd); in aac_probe_container()
973 struct aac_dev *dev, struct scsi_cmnd *scsicmd) in build_vpd83_type3() argument
985 if (scmd_id(scsicmd) == container) { in build_vpd83_type3()
997 struct scsi_cmnd * scsicmd; in get_container_serial_callback() local
1001 scsicmd = (struct scsi_cmnd *) context; in get_container_serial_callback()
1002 if (!aac_valid_context(scsicmd, fibptr)) in get_container_serial_callback()
1009 if (scsicmd->cmnd[2] == 0x83) { in get_container_serial_callback()
1015 dev = (struct aac_dev *)scsicmd->device->host->hostdata; in get_container_serial_callback()
1089 dev, scsicmd); in get_container_serial_callback()
1093 scsi_sg_copy_from_buffer(scsicmd, &vpdpage83data, in get_container_serial_callback()
1100 sp[1] = scsicmd->cmnd[2]; in get_container_serial_callback()
1104 scsi_sg_copy_from_buffer(scsicmd, sp, in get_container_serial_callback()
1109 scsicmd->result = DID_OK << 16 | SAM_STAT_GOOD; in get_container_serial_callback()
1112 aac_scsi_done(scsicmd); in get_container_serial_callback()
1118 static int aac_get_container_serial(struct scsi_cmnd * scsicmd) in aac_get_container_serial() argument
1125 dev = (struct aac_dev *)scsicmd->device->host->hostdata; in aac_get_container_serial()
1127 cmd_fibcontext = aac_fib_alloc_tag(dev, scsicmd); in aac_get_container_serial()
1134 dinfo->cid = cpu_to_le32(scmd_id(scsicmd)); in aac_get_container_serial()
1135 aac_priv(scsicmd)->owner = AAC_OWNER_FIRMWARE; in aac_get_container_serial()
1143 (void *) scsicmd); in aac_get_container_serial()
2320 struct scsi_cmnd *scsicmd; in io_callback() local
2323 scsicmd = (struct scsi_cmnd *) context; in io_callback()
2325 if (!aac_valid_context(scsicmd, fibptr)) in io_callback()
2329 cid = scmd_id(scsicmd); in io_callback()
2333 switch (scsicmd->cmnd[0]) { in io_callback()
2336 lba = ((scsicmd->cmnd[1] & 0x1F) << 16) | in io_callback()
2337 (scsicmd->cmnd[2] << 8) | scsicmd->cmnd[3]; in io_callback()
2341 lba = ((u64)scsicmd->cmnd[2] << 56) | in io_callback()
2342 ((u64)scsicmd->cmnd[3] << 48) | in io_callback()
2343 ((u64)scsicmd->cmnd[4] << 40) | in io_callback()
2344 ((u64)scsicmd->cmnd[5] << 32) | in io_callback()
2345 ((u64)scsicmd->cmnd[6] << 24) | in io_callback()
2346 (scsicmd->cmnd[7] << 16) | in io_callback()
2347 (scsicmd->cmnd[8] << 8) | scsicmd->cmnd[9]; in io_callback()
2351 lba = ((u64)scsicmd->cmnd[2] << 24) | in io_callback()
2352 (scsicmd->cmnd[3] << 16) | in io_callback()
2353 (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5]; 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()
2368 scsi_dma_unmap(scsicmd); in io_callback()
2373 scsicmd->result = DID_OK << 16 | SAM_STAT_GOOD; in io_callback()
2377 scsicmd->result = DID_OK << 16 | SAM_STAT_CHECK_CONDITION; in io_callback()
2380 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data, in io_callback()
2385 scsicmd->result = DID_OK << 16 | SAM_STAT_CHECK_CONDITION; in io_callback()
2388 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data, in io_callback()
2397 scsicmd->result = DID_OK << 16 | SAM_STAT_CHECK_CONDITION; in io_callback()
2401 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data, in io_callback()
2408 aac_scsi_done(scsicmd); in io_callback()
2411 static int aac_read(struct scsi_cmnd * scsicmd) in aac_read() argument
2420 dev = (struct aac_dev *)scsicmd->device->host->hostdata; in aac_read()
2424 switch (scsicmd->cmnd[0]) { in aac_read()
2426 dprintk((KERN_DEBUG "aachba: received a read(6) command on id %d.\n", scmd_id(scsicmd))); in aac_read()
2428 lba = ((scsicmd->cmnd[1] & 0x1F) << 16) | in aac_read()
2429 (scsicmd->cmnd[2] << 8) | scsicmd->cmnd[3]; in aac_read()
2430 count = scsicmd->cmnd[4]; in aac_read()
2436 dprintk((KERN_DEBUG "aachba: received a read(16) command on id %d.\n", scmd_id(scsicmd))); in aac_read()
2438 lba = ((u64)scsicmd->cmnd[2] << 56) | in aac_read()
2439 ((u64)scsicmd->cmnd[3] << 48) | in aac_read()
2440 ((u64)scsicmd->cmnd[4] << 40) | in aac_read()
2441 ((u64)scsicmd->cmnd[5] << 32) | in aac_read()
2442 ((u64)scsicmd->cmnd[6] << 24) | in aac_read()
2443 (scsicmd->cmnd[7] << 16) | in aac_read()
2444 (scsicmd->cmnd[8] << 8) | scsicmd->cmnd[9]; in aac_read()
2445 count = (scsicmd->cmnd[10] << 24) | in aac_read()
2446 (scsicmd->cmnd[11] << 16) | in aac_read()
2447 (scsicmd->cmnd[12] << 8) | scsicmd->cmnd[13]; in aac_read()
2450 dprintk((KERN_DEBUG "aachba: received a read(12) command on id %d.\n", scmd_id(scsicmd))); in aac_read()
2452 lba = ((u64)scsicmd->cmnd[2] << 24) | in aac_read()
2453 (scsicmd->cmnd[3] << 16) | in aac_read()
2454 (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5]; in aac_read()
2455 count = (scsicmd->cmnd[6] << 24) | in aac_read()
2456 (scsicmd->cmnd[7] << 16) | in aac_read()
2457 (scsicmd->cmnd[8] << 8) | scsicmd->cmnd[9]; in aac_read()
2460 dprintk((KERN_DEBUG "aachba: received a read(10) command on id %d.\n", scmd_id(scsicmd))); in aac_read()
2462 lba = ((u64)scsicmd->cmnd[2] << 24) | in aac_read()
2463 (scsicmd->cmnd[3] << 16) | in aac_read()
2464 (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5]; in aac_read()
2465 count = (scsicmd->cmnd[7] << 8) | scsicmd->cmnd[8]; in aac_read()
2469 if ((lba + count) > (dev->fsa_dev[scmd_id(scsicmd)].size)) { in aac_read()
2470 cid = scmd_id(scsicmd); in aac_read()
2472 scsicmd->result = DID_OK << 16 | SAM_STAT_CHECK_CONDITION; in aac_read()
2476 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data, in aac_read()
2479 aac_scsi_done(scsicmd); in aac_read()
2485 if (aac_adapter_bounds(dev,scsicmd,lba)) in aac_read()
2490 cmd_fibcontext = aac_fib_alloc_tag(dev, scsicmd); in aac_read()
2491 aac_priv(scsicmd)->owner = AAC_OWNER_FIRMWARE; in aac_read()
2492 status = aac_adapter_read(cmd_fibcontext, scsicmd, lba, count); in aac_read()
2504 scsicmd->result = DID_OK << 16 | SAM_STAT_TASK_SET_FULL; in aac_read()
2505 aac_scsi_done(scsicmd); in aac_read()
2511 static int aac_write(struct scsi_cmnd * scsicmd) in aac_write() argument
2521 dev = (struct aac_dev *)scsicmd->device->host->hostdata; in aac_write()
2525 if (scsicmd->cmnd[0] == WRITE_6) /* 6 byte command */ in aac_write()
2527 lba = ((scsicmd->cmnd[1] & 0x1F) << 16) | (scsicmd->cmnd[2] << 8) | scsicmd->cmnd[3]; in aac_write()
2528 count = scsicmd->cmnd[4]; in aac_write()
2532 } else if (scsicmd->cmnd[0] == WRITE_16) { /* 16 byte command */ in aac_write()
2533 dprintk((KERN_DEBUG "aachba: received a write(16) command on id %d.\n", scmd_id(scsicmd))); in aac_write()
2535 lba = ((u64)scsicmd->cmnd[2] << 56) | in aac_write()
2536 ((u64)scsicmd->cmnd[3] << 48) | in aac_write()
2537 ((u64)scsicmd->cmnd[4] << 40) | in aac_write()
2538 ((u64)scsicmd->cmnd[5] << 32) | in aac_write()
2539 ((u64)scsicmd->cmnd[6] << 24) | in aac_write()
2540 (scsicmd->cmnd[7] << 16) | in aac_write()
2541 (scsicmd->cmnd[8] << 8) | scsicmd->cmnd[9]; in aac_write()
2542 count = (scsicmd->cmnd[10] << 24) | (scsicmd->cmnd[11] << 16) | in aac_write()
2543 (scsicmd->cmnd[12] << 8) | scsicmd->cmnd[13]; in aac_write()
2544 fua = scsicmd->cmnd[1] & 0x8; in aac_write()
2545 } else if (scsicmd->cmnd[0] == WRITE_12) { /* 12 byte command */ in aac_write()
2546 dprintk((KERN_DEBUG "aachba: received a write(12) command on id %d.\n", scmd_id(scsicmd))); in aac_write()
2548 lba = ((u64)scsicmd->cmnd[2] << 24) | (scsicmd->cmnd[3] << 16) in aac_write()
2549 | (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5]; in aac_write()
2550 count = (scsicmd->cmnd[6] << 24) | (scsicmd->cmnd[7] << 16) in aac_write()
2551 | (scsicmd->cmnd[8] << 8) | scsicmd->cmnd[9]; in aac_write()
2552 fua = scsicmd->cmnd[1] & 0x8; in aac_write()
2554 dprintk((KERN_DEBUG "aachba: received a write(10) command on id %d.\n", scmd_id(scsicmd))); in aac_write()
2555 …lba = ((u64)scsicmd->cmnd[2] << 24) | (scsicmd->cmnd[3] << 16) | (scsicmd->cmnd[4] << 8) | scsicmd in aac_write()
2556 count = (scsicmd->cmnd[7] << 8) | scsicmd->cmnd[8]; in aac_write()
2557 fua = scsicmd->cmnd[1] & 0x8; in aac_write()
2560 if ((lba + count) > (dev->fsa_dev[scmd_id(scsicmd)].size)) { in aac_write()
2561 cid = scmd_id(scsicmd); in aac_write()
2563 scsicmd->result = DID_OK << 16 | SAM_STAT_CHECK_CONDITION; in aac_write()
2567 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data, in aac_write()
2570 aac_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 aac_priv(scsicmd)->owner = 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 | SAM_STAT_TASK_SET_FULL; in aac_write()
2596 aac_scsi_done(scsicmd); in aac_write()
2640 static int aac_synchronize(struct scsi_cmnd *scsicmd) in aac_synchronize() argument
2645 struct scsi_device *sdev = scsicmd->device; in aac_synchronize()
2655 cmd_fibcontext = aac_fib_alloc_tag(aac, scsicmd); in aac_synchronize()
2662 synchronizecmd->cid = cpu_to_le32(scmd_id(scsicmd)); in aac_synchronize()
2665 aac_priv(scsicmd)->owner = AAC_OWNER_FIRMWARE; in aac_synchronize()
2676 (void *)scsicmd); in aac_synchronize()
2693 struct scsi_cmnd *scsicmd = context; in aac_start_stop_callback() local
2695 if (!aac_valid_context(scsicmd, fibptr)) in aac_start_stop_callback()
2700 scsicmd->result = DID_OK << 16 | SAM_STAT_GOOD; in aac_start_stop_callback()
2704 aac_scsi_done(scsicmd); in aac_start_stop_callback()
2707 static int aac_start_stop(struct scsi_cmnd *scsicmd) in aac_start_stop() argument
2712 struct scsi_device *sdev = scsicmd->device; in aac_start_stop()
2717 scsicmd->result = DID_OK << 16 | SAM_STAT_GOOD; in aac_start_stop()
2718 aac_scsi_done(scsicmd); in aac_start_stop()
2728 cmd_fibcontext = aac_fib_alloc_tag(aac, scsicmd); in aac_start_stop()
2736 pmcmd->sub = (scsicmd->cmnd[4] & 1) ? in aac_start_stop()
2739 pmcmd->parm = (scsicmd->cmnd[1] & 1) ? in aac_start_stop()
2741 aac_priv(scsicmd)->owner = AAC_OWNER_FIRMWARE; in aac_start_stop()
2752 (void *)scsicmd); in aac_start_stop()
2773 int aac_scsi_cmd(struct scsi_cmnd * scsicmd) in aac_scsi_cmd() argument
2776 struct Scsi_Host *host = scsicmd->device->host; in aac_scsi_cmd()
2787 cid = scmd_id(scsicmd); in aac_scsi_cmd()
2789 if (scmd_channel(scsicmd) == CONTAINER_CHANNEL) { in aac_scsi_cmd()
2791 (scsicmd->device->lun != 0)) { in aac_scsi_cmd()
2792 scsicmd->result = DID_NO_CONNECT << 16; in aac_scsi_cmd()
2803 switch (scsicmd->cmnd[0]) { in aac_scsi_cmd()
2807 ((scsicmd->cmnd[1] & 0x1f) != SAI_READ_CAPACITY_16)) in aac_scsi_cmd()
2815 return _aac_probe_container(scsicmd, in aac_scsi_cmd()
2822 bus = aac_logical_to_phys(scmd_channel(scsicmd)); in aac_scsi_cmd()
2829 return aac_send_hba_fib(scsicmd); in aac_scsi_cmd()
2834 return aac_send_srb_fib(scsicmd); in aac_scsi_cmd()
2836 scsicmd->result = DID_NO_CONNECT << 16; in aac_scsi_cmd()
2844 else if ((scsicmd->cmnd[0] != INQUIRY) && /* only INQUIRY & TUR cmnd supported for controller */ in aac_scsi_cmd()
2845 (scsicmd->cmnd[0] != TEST_UNIT_READY)) in aac_scsi_cmd()
2847 …_WARNING "Only INQUIRY & TUR command supported for controller, rcvd = 0x%x.\n", scsicmd->cmnd[0])); in aac_scsi_cmd()
2848 scsicmd->result = DID_OK << 16 | SAM_STAT_CHECK_CONDITION; in aac_scsi_cmd()
2852 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data, in aac_scsi_cmd()
2858 switch (scsicmd->cmnd[0]) { in aac_scsi_cmd()
2865 return aac_read(scsicmd); in aac_scsi_cmd()
2873 return aac_write(scsicmd); in aac_scsi_cmd()
2877 scsicmd->result = DID_OK << 16 | SAM_STAT_GOOD; in aac_scsi_cmd()
2882 return aac_synchronize(scsicmd); in aac_scsi_cmd()
2891 if ((scsicmd->cmnd[1] & 0x1) && aac_wwn) { in aac_scsi_cmd()
2895 arr[0] = (scmd_id(scsicmd) == host->this_id) ? in aac_scsi_cmd()
2897 if (scsicmd->cmnd[2] == 0) { in aac_scsi_cmd()
2903 arr[1] = scsicmd->cmnd[2]; in aac_scsi_cmd()
2904 scsi_sg_copy_from_buffer(scsicmd, &inq_data, in aac_scsi_cmd()
2906 scsicmd->result = DID_OK << 16 | SAM_STAT_GOOD; in aac_scsi_cmd()
2907 } else if (scsicmd->cmnd[2] == 0x80) { in aac_scsi_cmd()
2910 scmd_id(scsicmd)); in aac_scsi_cmd()
2911 arr[1] = scsicmd->cmnd[2]; in aac_scsi_cmd()
2912 scsi_sg_copy_from_buffer(scsicmd, &inq_data, in aac_scsi_cmd()
2916 scsicmd); in aac_scsi_cmd()
2917 scsicmd->result = DID_OK << 16 | SAM_STAT_GOOD; in aac_scsi_cmd()
2918 } else if (scsicmd->cmnd[2] == 0x83) { in aac_scsi_cmd()
2922 scmd_id(scsicmd)); in aac_scsi_cmd()
2925 scsicmd); in aac_scsi_cmd()
2926 scsicmd->result = DID_OK << 16 | SAM_STAT_GOOD; in aac_scsi_cmd()
2929 scsicmd->result = DID_OK << 16 | SAM_STAT_CHECK_CONDITION; in aac_scsi_cmd()
2933 memcpy(scsicmd->sense_buffer, in aac_scsi_cmd()
2953 scsi_sg_copy_from_buffer(scsicmd, &inq_data, in aac_scsi_cmd()
2955 scsicmd->result = DID_OK << 16 | SAM_STAT_GOOD; in aac_scsi_cmd()
2962 scsi_sg_copy_from_buffer(scsicmd, &inq_data, sizeof(inq_data)); in aac_scsi_cmd()
2963 return aac_get_container_name(scsicmd); in aac_scsi_cmd()
2968 ((scsicmd->cmnd[1] & 0x1f) != SAI_READ_CAPACITY_16)) in aac_scsi_cmd()
2991 alloc_len = ((scsicmd->cmnd[10] << 24) in aac_scsi_cmd()
2992 + (scsicmd->cmnd[11] << 16) in aac_scsi_cmd()
2993 + (scsicmd->cmnd[12] << 8) + scsicmd->cmnd[13]); in aac_scsi_cmd()
2996 scsi_sg_copy_from_buffer(scsicmd, cp, alloc_len); in aac_scsi_cmd()
2997 if (alloc_len < scsi_bufflen(scsicmd)) in aac_scsi_cmd()
2998 scsi_set_resid(scsicmd, in aac_scsi_cmd()
2999 scsi_bufflen(scsicmd) - alloc_len); in aac_scsi_cmd()
3002 scsicmd->device->removable = 1; in aac_scsi_cmd()
3004 scsicmd->result = DID_OK << 16 | SAM_STAT_GOOD; in aac_scsi_cmd()
3027 scsi_sg_copy_from_buffer(scsicmd, cp, sizeof(cp)); in aac_scsi_cmd()
3029 scsicmd->device->removable = 1; in aac_scsi_cmd()
3030 scsicmd->result = DID_OK << 16 | SAM_STAT_GOOD; in aac_scsi_cmd()
3059 if (scsicmd->cmnd[1] & 0x8) in aac_scsi_cmd()
3071 mpd.mpc_buf[0] = scsicmd->cmnd[2]; in aac_scsi_cmd()
3072 if (scsicmd->cmnd[2] == 0x1C) { in aac_scsi_cmd()
3092 if (((scsicmd->cmnd[2] & 0x3f) == 8) || in aac_scsi_cmd()
3093 ((scsicmd->cmnd[2] & 0x3f) == 0x3f)) { in aac_scsi_cmd()
3102 if (mode_buf_length > scsicmd->cmnd[4]) in aac_scsi_cmd()
3103 mode_buf_length = scsicmd->cmnd[4]; in aac_scsi_cmd()
3106 scsi_sg_copy_from_buffer(scsicmd, in aac_scsi_cmd()
3109 scsicmd->result = DID_OK << 16 | SAM_STAT_GOOD; in aac_scsi_cmd()
3140 if (scsicmd->cmnd[1] & 0x8) { in aac_scsi_cmd()
3171 if (((scsicmd->cmnd[2] & 0x3f) == 8) || in aac_scsi_cmd()
3172 ((scsicmd->cmnd[2] & 0x3f) == 0x3f)) { in aac_scsi_cmd()
3179 if (mode_buf_length > scsicmd->cmnd[8]) in aac_scsi_cmd()
3180 mode_buf_length = scsicmd->cmnd[8]; in aac_scsi_cmd()
3182 scsi_sg_copy_from_buffer(scsicmd, in aac_scsi_cmd()
3186 scsicmd->result = DID_OK << 16 | SAM_STAT_GOOD; in aac_scsi_cmd()
3191 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data, in aac_scsi_cmd()
3195 scsicmd->result = DID_OK << 16 | SAM_STAT_GOOD; in aac_scsi_cmd()
3200 if (scsicmd->cmnd[4]) in aac_scsi_cmd()
3205 scsicmd->result = DID_OK << 16 | SAM_STAT_GOOD; in aac_scsi_cmd()
3212 scsicmd->result = DID_OK << 16 | SAM_STAT_CHECK_CONDITION; in aac_scsi_cmd()
3216 memcpy(scsicmd->sense_buffer, in aac_scsi_cmd()
3229 scsicmd->result = DID_OK << 16 | SAM_STAT_GOOD; in aac_scsi_cmd()
3233 return aac_start_stop(scsicmd); in aac_scsi_cmd()
3240 scsicmd->cmnd[0])); in aac_scsi_cmd()
3241 scsicmd->result = DID_OK << 16 | SAM_STAT_CHECK_CONDITION; in aac_scsi_cmd()
3245 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data, in aac_scsi_cmd()
3253 aac_scsi_done(scsicmd); in aac_scsi_cmd()
3378 struct scsi_cmnd *scsicmd; in aac_srb_callback() local
3380 scsicmd = (struct scsi_cmnd *) context; in aac_srb_callback()
3382 if (!aac_valid_context(scsicmd, fibptr)) in aac_srb_callback()
3389 scsicmd->sense_buffer[0] = '\0'; /* Initialize sense valid flag to false */ in aac_srb_callback()
3399 scsi_set_resid(scsicmd, scsi_bufflen(scsicmd) in aac_srb_callback()
3404 scsi_dma_unmap(scsicmd); in aac_srb_callback()
3407 if (scsicmd->cmnd[0] == INQUIRY && !(scsicmd->cmnd[1] & 0x01) in aac_srb_callback()
3409 aac_expose_phy_device(scsicmd); in aac_srb_callback()
3422 scsicmd->result = DID_ERROR << 16 | SAM_STAT_CHECK_CONDITION; in aac_srb_callback()
3423 memcpy(scsicmd->sense_buffer, in aac_srb_callback()
3434 scsicmd->result = DID_OK << 16; in aac_srb_callback()
3437 switch (scsicmd->cmnd[0]) { in aac_srb_callback()
3447 < scsicmd->underflow) in aac_srb_callback()
3451 scsicmd->result = DID_ERROR << 16; in aac_srb_callback()
3454 scsicmd->result = DID_OK << 16; in aac_srb_callback()
3457 scsicmd->result = DID_OK << 16; in aac_srb_callback()
3462 scsicmd->result = DID_ABORT << 16; in aac_srb_callback()
3469 scsicmd->result = DID_ERROR << 16; in aac_srb_callback()
3472 scsicmd->result = DID_PARITY << 16; in aac_srb_callback()
3479 scsicmd->result = DID_NO_CONNECT << 16; in aac_srb_callback()
3484 scsicmd->result = DID_TIME_OUT << 16; in aac_srb_callback()
3488 scsicmd->result = DID_BUS_BUSY << 16; in aac_srb_callback()
3492 scsicmd->result = DID_RESET << 16; in aac_srb_callback()
3496 scsicmd->result = DID_ERROR << 16; in aac_srb_callback()
3518 scsicmd->cmnd[0], in aac_srb_callback()
3528 if ((scsicmd->cmnd[0] == ATA_12) in aac_srb_callback()
3529 || (scsicmd->cmnd[0] == ATA_16)) { in aac_srb_callback()
3531 if (scsicmd->cmnd[2] & (0x01 << 5)) { in aac_srb_callback()
3532 scsicmd->result = DID_OK << 16; in aac_srb_callback()
3534 scsicmd->result = DID_ERROR << 16; in aac_srb_callback()
3537 scsicmd->result = DID_ERROR << 16; in aac_srb_callback()
3545 scsicmd->result |= SAM_STAT_CHECK_CONDITION; in aac_srb_callback()
3552 memcpy(scsicmd->sense_buffer, in aac_srb_callback()
3559 scsicmd->result |= le32_to_cpu(srbreply->scsi_status); in aac_srb_callback()
3562 aac_scsi_done(scsicmd); in aac_srb_callback()
3566 struct scsi_cmnd *scsicmd, in hba_resp_task_complete() argument
3569 scsicmd->result = err->status; in hba_resp_task_complete()
3571 scsi_set_resid(scsicmd, le32_to_cpu(err->residual_count)); in hba_resp_task_complete()
3575 scsicmd->result |= DID_OK << 16; in hba_resp_task_complete()
3584 memcpy(scsicmd->sense_buffer, in hba_resp_task_complete()
3586 scsicmd->result |= DID_OK << 16; in hba_resp_task_complete()
3590 scsicmd->result |= DID_BUS_BUSY << 16; in hba_resp_task_complete()
3593 scsicmd->result |= DID_ABORT << 16; in hba_resp_task_complete()
3598 scsicmd->result |= DID_ERROR << 16; in hba_resp_task_complete()
3604 struct scsi_cmnd *scsicmd, in hba_resp_task_failure() argument
3612 bus = aac_logical_to_phys(scmd_channel(scsicmd)); in hba_resp_task_failure()
3613 cid = scmd_id(scsicmd); in hba_resp_task_failure()
3618 scsicmd->result = DID_NO_CONNECT << 16; in hba_resp_task_failure()
3623 scsicmd->result = DID_OK << 16 | SAM_STAT_BUSY; in hba_resp_task_failure()
3626 scsicmd->result = DID_ABORT << 16; in hba_resp_task_failure()
3629 scsicmd->result = DID_NO_CONNECT << 16; in hba_resp_task_failure()
3633 scsicmd->result = DID_OK << 16; in hba_resp_task_failure()
3637 scsicmd->result = DID_ERROR << 16; in hba_resp_task_failure()
3652 struct scsi_cmnd *scsicmd; in aac_hba_callback() local
3657 scsicmd = (struct scsi_cmnd *) context; in aac_hba_callback()
3659 if (!aac_valid_context(scsicmd, fibptr)) in aac_hba_callback()
3666 scsi_dma_unmap(scsicmd); in aac_hba_callback()
3670 scsicmd->result = DID_OK << 16; in aac_hba_callback()
3676 hba_resp_task_complete(dev, scsicmd, err); in aac_hba_callback()
3679 hba_resp_task_failure(dev, scsicmd, err); in aac_hba_callback()
3682 scsicmd->result = DID_ERROR << 16; in aac_hba_callback()
3685 scsicmd->result = DID_NO_CONNECT << 16; in aac_hba_callback()
3689 scsicmd->result = DID_OK << 16; in aac_hba_callback()
3692 scsicmd->result = DID_ERROR << 16; in aac_hba_callback()
3700 aac_priv(scsicmd)->sent_command = 1; in aac_hba_callback()
3702 aac_scsi_done(scsicmd); in aac_hba_callback()
3712 static int aac_send_srb_fib(struct scsi_cmnd* scsicmd) in aac_send_srb_fib() argument
3718 dev = (struct aac_dev *)scsicmd->device->host->hostdata; in aac_send_srb_fib()
3719 if (scmd_id(scsicmd) >= dev->maximum_num_physicals || in aac_send_srb_fib()
3720 scsicmd->device->lun > 7) { in aac_send_srb_fib()
3721 scsicmd->result = DID_NO_CONNECT << 16; in aac_send_srb_fib()
3722 aac_scsi_done(scsicmd); in aac_send_srb_fib()
3729 cmd_fibcontext = aac_fib_alloc_tag(dev, scsicmd); in aac_send_srb_fib()
3730 aac_priv(scsicmd)->owner = AAC_OWNER_FIRMWARE; in aac_send_srb_fib()
3731 status = aac_adapter_scsi(cmd_fibcontext, scsicmd); in aac_send_srb_fib()
3753 static int aac_send_hba_fib(struct scsi_cmnd *scsicmd) in aac_send_hba_fib() argument
3759 dev = shost_priv(scsicmd->device->host); in aac_send_hba_fib()
3760 if (scmd_id(scsicmd) >= dev->maximum_num_physicals || in aac_send_hba_fib()
3761 scsicmd->device->lun > AAC_MAX_LUN - 1) { in aac_send_hba_fib()
3762 scsicmd->result = DID_NO_CONNECT << 16; in aac_send_hba_fib()
3763 aac_scsi_done(scsicmd); in aac_send_hba_fib()
3770 cmd_fibcontext = aac_fib_alloc_tag(dev, scsicmd); in aac_send_hba_fib()
3774 aac_priv(scsicmd)->owner = AAC_OWNER_FIRMWARE; in aac_send_hba_fib()
3775 status = aac_adapter_hba(cmd_fibcontext, scsicmd); in aac_send_hba_fib()
3792 static long aac_build_sg(struct scsi_cmnd *scsicmd, struct sgmap *psg) in aac_build_sg() argument
3804 nseg = scsi_dma_map(scsicmd); in aac_build_sg()
3810 scsi_for_each_sg(scsicmd, sg, nseg, i) { in aac_build_sg()
3816 if (byte_count > scsi_bufflen(scsicmd)) { in aac_build_sg()
3818 (byte_count - scsi_bufflen(scsicmd)); in aac_build_sg()
3820 byte_count = scsi_bufflen(scsicmd); in aac_build_sg()
3823 if (scsicmd->underflow && (byte_count < scsicmd->underflow)) { in aac_build_sg()
3825 byte_count, scsicmd->underflow); in aac_build_sg()
3832 static long aac_build_sg64(struct scsi_cmnd *scsicmd, struct sgmap64 *psg) in aac_build_sg64() argument
3846 nseg = scsi_dma_map(scsicmd); in aac_build_sg64()
3850 scsi_for_each_sg(scsicmd, sg, nseg, i) { in aac_build_sg64()
3860 if (byte_count > scsi_bufflen(scsicmd)) { in aac_build_sg64()
3862 (byte_count - scsi_bufflen(scsicmd)); in aac_build_sg64()
3864 byte_count = scsi_bufflen(scsicmd); in aac_build_sg64()
3867 if (scsicmd->underflow && (byte_count < scsicmd->underflow)) { in aac_build_sg64()
3869 byte_count, scsicmd->underflow); in aac_build_sg64()
3875 static long aac_build_sgraw(struct scsi_cmnd *scsicmd, struct sgmapraw *psg) in aac_build_sgraw() argument
3891 nseg = scsi_dma_map(scsicmd); in aac_build_sgraw()
3895 scsi_for_each_sg(scsicmd, sg, nseg, i) { in aac_build_sgraw()
3908 if (byte_count > scsi_bufflen(scsicmd)) { in aac_build_sgraw()
3910 (byte_count - scsi_bufflen(scsicmd)); in aac_build_sgraw()
3912 byte_count = scsi_bufflen(scsicmd); in aac_build_sgraw()
3915 if (scsicmd->underflow && (byte_count < scsicmd->underflow)) { in aac_build_sgraw()
3917 byte_count, scsicmd->underflow); in aac_build_sgraw()
3923 static long aac_build_sgraw2(struct scsi_cmnd *scsicmd, in aac_build_sgraw2() argument
3932 nseg = scsi_dma_map(scsicmd); in aac_build_sgraw2()
3936 scsi_for_each_sg(scsicmd, sg, nseg, i) { in aac_build_sgraw2()
3961 if (byte_count > scsi_bufflen(scsicmd)) { in aac_build_sgraw2()
3963 (byte_count - scsi_bufflen(scsicmd)); in aac_build_sgraw2()
3965 byte_count = scsi_bufflen(scsicmd); in aac_build_sgraw2()
3996 if (scsicmd->underflow && (byte_count < scsicmd->underflow)) { in aac_build_sgraw2()
3998 byte_count, scsicmd->underflow); in aac_build_sgraw2()
4039 static long aac_build_sghba(struct scsi_cmnd *scsicmd, in aac_build_sghba() argument
4051 nseg = scsi_dma_map(scsicmd); in aac_build_sghba()
4062 scsi_for_each_sg(scsicmd, sg, nseg, i) { in aac_build_sghba()
4078 if (byte_count > scsi_bufflen(scsicmd)) { in aac_build_sghba()
4082 - scsi_bufflen(scsicmd); in aac_build_sghba()
4084 byte_count = scsi_bufflen(scsicmd); in aac_build_sghba()
4100 if (scsicmd->underflow && (byte_count < scsicmd->underflow)) { in aac_build_sghba()
4102 byte_count, scsicmd->underflow); in aac_build_sghba()