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