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,
336 if (unlikely(!scsicmd)) {
341 aac_priv(scsicmd)->owner = 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));
535 struct scsi_cmnd * scsicmd;
537 scsicmd = (struct scsi_cmnd *) context;
539 if (!aac_valid_context(scsicmd, fibptr))
564 scsi_sg_copy_to_buffer(scsicmd, &inq, sizeof(inq));
566 scsi_sg_copy_from_buffer(scsicmd, &inq, sizeof(inq));
570 scsicmd->result = DID_OK << 16 | SAM_STAT_GOOD;
573 aac_scsi_done(scsicmd);
579 static int aac_get_container_name(struct scsi_cmnd * scsicmd)
587 dev = (struct aac_dev *)scsicmd->device->host->hostdata;
591 cmd_fibcontext = aac_fib_alloc_tag(dev, scsicmd);
595 aac_priv(scsicmd)->owner = AAC_OWNER_FIRMWARE;
599 dinfo->cid = cpu_to_le32(scmd_id(scsicmd));
608 (void *) scsicmd);
621 static int aac_probe_container_callback2(struct scsi_cmnd * scsicmd)
623 struct fsa_dev_info *fsa_dev_ptr = ((struct aac_dev *)(scsicmd->device->host->hostdata))->fsa_dev;
625 if ((fsa_dev_ptr[scmd_id(scsicmd)].valid & 1))
626 return aac_scsi_cmd(scsicmd);
628 scsicmd->result = DID_NO_CONNECT << 16;
629 aac_scsi_done(scsicmd);
637 struct scsi_cmnd *scsicmd = context;
638 struct aac_cmd_priv *cmd_priv = aac_priv(scsicmd);
642 if (!aac_valid_context(scsicmd, fibptr))
651 fsa_dev_ptr += scmd_id(scsicmd);
689 (*callback)(scsicmd);
695 struct scsi_cmnd * scsicmd;
709 scsicmd = (struct scsi_cmnd *) context;
711 if (!aac_valid_context(scsicmd, fibptr))
724 dinfo->count = cpu_to_le32(scmd_id(scsicmd));
726 aac_priv(scsicmd)->owner = AAC_OWNER_FIRMWARE;
734 (void *) scsicmd);
745 static int _aac_probe_container(struct scsi_cmnd * scsicmd, int (*callback)(struct scsi_cmnd *))
747 struct aac_cmd_priv *cmd_priv = aac_priv(scsicmd);
751 if ((fibptr = aac_fib_alloc((struct aac_dev *)scsicmd->device->host->hostdata))) {
764 dinfo->count = cpu_to_le32(scmd_id(scsicmd));
775 (void *) scsicmd);
789 struct fsa_dev_info *fsa_dev_ptr = ((struct aac_dev *)(scsicmd->device->host->hostdata))->fsa_dev;
791 fsa_dev_ptr += scmd_id(scsicmd);
794 return (*callback)(scsicmd);
803 * @scsicmd: the scsi command block
808 static int aac_probe_container_callback1(struct scsi_cmnd * scsicmd)
810 scsicmd->device = NULL;
822 struct scsi_cmnd *scsicmd = kzalloc(sizeof(*scsicmd) + sizeof(*cmd_priv), GFP_KERNEL);
826 if (!scsicmd || !scsidev) {
827 kfree(scsicmd);
832 scsicmd->device = scsidev;
837 if (_aac_probe_container(scsicmd, aac_probe_container_callback1) == 0)
838 while (scsicmd->device == scsidev)
841 cmd_priv = aac_priv(scsicmd);
843 kfree(scsicmd);
973 struct aac_dev *dev, struct scsi_cmnd *scsicmd)
985 if (scmd_id(scsicmd) == container) {
997 struct scsi_cmnd * scsicmd;
1001 scsicmd = (struct scsi_cmnd *) context;
1002 if (!aac_valid_context(scsicmd, fibptr))
1009 if (scsicmd->cmnd[2] == 0x83) {
1015 dev = (struct aac_dev *)scsicmd->device->host->hostdata;
1089 dev, scsicmd);
1093 scsi_sg_copy_from_buffer(scsicmd, &vpdpage83data,
1100 sp[1] = scsicmd->cmnd[2];
1104 scsi_sg_copy_from_buffer(scsicmd, sp,
1109 scsicmd->result = DID_OK << 16 | SAM_STAT_GOOD;
1112 aac_scsi_done(scsicmd);
1118 static int aac_get_container_serial(struct scsi_cmnd * scsicmd)
1125 dev = (struct aac_dev *)scsicmd->device->host->hostdata;
1127 cmd_fibcontext = aac_fib_alloc_tag(dev, scsicmd);
1134 dinfo->cid = cpu_to_le32(scmd_id(scsicmd));
1135 aac_priv(scsicmd)->owner = AAC_OWNER_FIRMWARE;
1143 (void *) scsicmd);
2322 struct scsi_cmnd *scsicmd;
2325 scsicmd = (struct scsi_cmnd *) context;
2327 if (!aac_valid_context(scsicmd, fibptr))
2331 cid = scmd_id(scsicmd);
2335 switch (scsicmd->cmnd[0]) {
2338 lba = ((scsicmd->cmnd[1] & 0x1F) << 16) |
2339 (scsicmd->cmnd[2] << 8) | scsicmd->cmnd[3];
2343 lba = ((u64)scsicmd->cmnd[2] << 56) |
2344 ((u64)scsicmd->cmnd[3] << 48) |
2345 ((u64)scsicmd->cmnd[4] << 40) |
2346 ((u64)scsicmd->cmnd[5] << 32) |
2347 ((u64)scsicmd->cmnd[6] << 24) |
2348 (scsicmd->cmnd[7] << 16) |
2349 (scsicmd->cmnd[8] << 8) | scsicmd->cmnd[9];
2353 lba = ((u64)scsicmd->cmnd[2] << 24) |
2354 (scsicmd->cmnd[3] << 16) |
2355 (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5];
2358 lba = ((u64)scsicmd->cmnd[2] << 24) |
2359 (scsicmd->cmnd[3] << 16) |
2360 (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5];
2370 scsi_dma_unmap(scsicmd);
2375 scsicmd->result = DID_OK << 16 | SAM_STAT_GOOD;
2379 scsicmd->result = DID_OK << 16 | SAM_STAT_CHECK_CONDITION;
2382 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data,
2387 scsicmd->result = DID_OK << 16 | SAM_STAT_CHECK_CONDITION;
2390 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data,
2399 scsicmd->result = DID_OK << 16 | SAM_STAT_CHECK_CONDITION;
2403 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data,
2410 aac_scsi_done(scsicmd);
2413 static int aac_read(struct scsi_cmnd * scsicmd)
2422 dev = (struct aac_dev *)scsicmd->device->host->hostdata;
2426 switch (scsicmd->cmnd[0]) {
2428 dprintk((KERN_DEBUG "aachba: received a read(6) command on id %d.\n", scmd_id(scsicmd)));
2430 lba = ((scsicmd->cmnd[1] & 0x1F) << 16) |
2431 (scsicmd->cmnd[2] << 8) | scsicmd->cmnd[3];
2432 count = scsicmd->cmnd[4];
2438 dprintk((KERN_DEBUG "aachba: received a read(16) command on id %d.\n", scmd_id(scsicmd)));
2440 lba = ((u64)scsicmd->cmnd[2] << 56) |
2441 ((u64)scsicmd->cmnd[3] << 48) |
2442 ((u64)scsicmd->cmnd[4] << 40) |
2443 ((u64)scsicmd->cmnd[5] << 32) |
2444 ((u64)scsicmd->cmnd[6] << 24) |
2445 (scsicmd->cmnd[7] << 16) |
2446 (scsicmd->cmnd[8] << 8) | scsicmd->cmnd[9];
2447 count = (scsicmd->cmnd[10] << 24) |
2448 (scsicmd->cmnd[11] << 16) |
2449 (scsicmd->cmnd[12] << 8) | scsicmd->cmnd[13];
2452 dprintk((KERN_DEBUG "aachba: received a read(12) command on id %d.\n", scmd_id(scsicmd)));
2454 lba = ((u64)scsicmd->cmnd[2] << 24) |
2455 (scsicmd->cmnd[3] << 16) |
2456 (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5];
2457 count = (scsicmd->cmnd[6] << 24) |
2458 (scsicmd->cmnd[7] << 16) |
2459 (scsicmd->cmnd[8] << 8) | scsicmd->cmnd[9];
2462 dprintk((KERN_DEBUG "aachba: received a read(10) command on id %d.\n", scmd_id(scsicmd)));
2464 lba = ((u64)scsicmd->cmnd[2] << 24) |
2465 (scsicmd->cmnd[3] << 16) |
2466 (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5];
2467 count = (scsicmd->cmnd[7] << 8) | scsicmd->cmnd[8];
2471 if ((lba + count) > (dev->fsa_dev[scmd_id(scsicmd)].size)) {
2472 cid = scmd_id(scsicmd);
2474 scsicmd->result = DID_OK << 16 | SAM_STAT_CHECK_CONDITION;
2478 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data,
2481 aac_scsi_done(scsicmd);
2487 if (aac_adapter_bounds(dev,scsicmd,lba))
2492 cmd_fibcontext = aac_fib_alloc_tag(dev, scsicmd);
2493 aac_priv(scsicmd)->owner = AAC_OWNER_FIRMWARE;
2494 status = aac_adapter_read(cmd_fibcontext, scsicmd, lba, count);
2506 scsicmd->result = DID_OK << 16 | SAM_STAT_TASK_SET_FULL;
2507 aac_scsi_done(scsicmd);
2513 static int aac_write(struct scsi_cmnd * scsicmd)
2523 dev = (struct aac_dev *)scsicmd->device->host->hostdata;
2527 if (scsicmd->cmnd[0] == WRITE_6) /* 6 byte command */
2529 lba = ((scsicmd->cmnd[1] & 0x1F) << 16) | (scsicmd->cmnd[2] << 8) | scsicmd->cmnd[3];
2530 count = scsicmd->cmnd[4];
2534 } else if (scsicmd->cmnd[0] == WRITE_16) { /* 16 byte command */
2535 dprintk((KERN_DEBUG "aachba: received a write(16) command on id %d.\n", scmd_id(scsicmd)));
2537 lba = ((u64)scsicmd->cmnd[2] << 56) |
2538 ((u64)scsicmd->cmnd[3] << 48) |
2539 ((u64)scsicmd->cmnd[4] << 40) |
2540 ((u64)scsicmd->cmnd[5] << 32) |
2541 ((u64)scsicmd->cmnd[6] << 24) |
2542 (scsicmd->cmnd[7] << 16) |
2543 (scsicmd->cmnd[8] << 8) | scsicmd->cmnd[9];
2544 count = (scsicmd->cmnd[10] << 24) | (scsicmd->cmnd[11] << 16) |
2545 (scsicmd->cmnd[12] << 8) | scsicmd->cmnd[13];
2546 fua = scsicmd->cmnd[1] & 0x8;
2547 } else if (scsicmd->cmnd[0] == WRITE_12) { /* 12 byte command */
2548 dprintk((KERN_DEBUG "aachba: received a write(12) command on id %d.\n", scmd_id(scsicmd)));
2550 lba = ((u64)scsicmd->cmnd[2] << 24) | (scsicmd->cmnd[3] << 16)
2551 | (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5];
2552 count = (scsicmd->cmnd[6] << 24) | (scsicmd->cmnd[7] << 16)
2553 | (scsicmd->cmnd[8] << 8) | scsicmd->cmnd[9];
2554 fua = scsicmd->cmnd[1] & 0x8;
2556 dprintk((KERN_DEBUG "aachba: received a write(10) command on id %d.\n", scmd_id(scsicmd)));
2557 lba = ((u64)scsicmd->cmnd[2] << 24) | (scsicmd->cmnd[3] << 16) | (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5];
2558 count = (scsicmd->cmnd[7] << 8) | scsicmd->cmnd[8];
2559 fua = scsicmd->cmnd[1] & 0x8;
2562 if ((lba + count) > (dev->fsa_dev[scmd_id(scsicmd)].size)) {
2563 cid = scmd_id(scsicmd);
2565 scsicmd->result = DID_OK << 16 | SAM_STAT_CHECK_CONDITION;
2569 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data,
2572 aac_scsi_done(scsicmd);
2578 if (aac_adapter_bounds(dev,scsicmd,lba))
2583 cmd_fibcontext = aac_fib_alloc_tag(dev, scsicmd);
2584 aac_priv(scsicmd)->owner = AAC_OWNER_FIRMWARE;
2585 status = aac_adapter_write(cmd_fibcontext, scsicmd, lba, count, fua);
2597 scsicmd->result = DID_OK << 16 | SAM_STAT_TASK_SET_FULL;
2598 aac_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 aac_priv(scsicmd)->owner = 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 | SAM_STAT_GOOD;
2706 aac_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 | SAM_STAT_GOOD;
2720 aac_scsi_done(scsicmd);
2730 cmd_fibcontext = aac_fib_alloc_tag(aac, scsicmd);
2738 pmcmd->sub = (scsicmd->cmnd[4] & 1) ?
2741 pmcmd->parm = (scsicmd->cmnd[1] & 1) ?
2743 aac_priv(scsicmd)->owner = AAC_OWNER_FIRMWARE;
2754 (void *)scsicmd);
2769 * @scsicmd: SCSI command block
2775 int aac_scsi_cmd(struct scsi_cmnd * scsicmd)
2778 struct Scsi_Host *host = scsicmd->device->host;
2789 cid = scmd_id(scsicmd);
2791 if (scmd_channel(scsicmd) == CONTAINER_CHANNEL) {
2793 (scsicmd->device->lun != 0)) {
2794 scsicmd->result = DID_NO_CONNECT << 16;
2805 switch (scsicmd->cmnd[0]) {
2809 ((scsicmd->cmnd[1] & 0x1f) != SAI_READ_CAPACITY_16))
2817 return _aac_probe_container(scsicmd,
2824 bus = aac_logical_to_phys(scmd_channel(scsicmd));
2831 return aac_send_hba_fib(scsicmd);
2836 return aac_send_srb_fib(scsicmd);
2838 scsicmd->result = DID_NO_CONNECT << 16;
2846 else if ((scsicmd->cmnd[0] != INQUIRY) && /* only INQUIRY & TUR cmnd supported for controller */
2847 (scsicmd->cmnd[0] != TEST_UNIT_READY))
2849 dprintk((KERN_WARNING "Only INQUIRY & TUR command supported for controller, rcvd = 0x%x.\n", scsicmd->cmnd[0]));
2850 scsicmd->result = DID_OK << 16 | SAM_STAT_CHECK_CONDITION;
2854 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data,
2860 switch (scsicmd->cmnd[0]) {
2867 return aac_read(scsicmd);
2875 return aac_write(scsicmd);
2879 scsicmd->result = DID_OK << 16 | SAM_STAT_GOOD;
2884 return aac_synchronize(scsicmd);
2893 if ((scsicmd->cmnd[1] & 0x1) && aac_wwn) {
2897 arr[0] = (scmd_id(scsicmd) == host->this_id) ?
2899 if (scsicmd->cmnd[2] == 0) {
2905 arr[1] = scsicmd->cmnd[2];
2906 scsi_sg_copy_from_buffer(scsicmd, &inq_data,
2908 scsicmd->result = DID_OK << 16 | SAM_STAT_GOOD;
2909 } else if (scsicmd->cmnd[2] == 0x80) {
2912 scmd_id(scsicmd));
2913 arr[1] = scsicmd->cmnd[2];
2914 scsi_sg_copy_from_buffer(scsicmd, &inq_data,
2918 scsicmd);
2919 scsicmd->result = DID_OK << 16 | SAM_STAT_GOOD;
2920 } else if (scsicmd->cmnd[2] == 0x83) {
2924 scmd_id(scsicmd));
2927 scsicmd);
2928 scsicmd->result = DID_OK << 16 | SAM_STAT_GOOD;
2931 scsicmd->result = DID_OK << 16 | SAM_STAT_CHECK_CONDITION;
2935 memcpy(scsicmd->sense_buffer,
2955 scsi_sg_copy_from_buffer(scsicmd, &inq_data,
2957 scsicmd->result = DID_OK << 16 | SAM_STAT_GOOD;
2964 scsi_sg_copy_from_buffer(scsicmd, &inq_data, sizeof(inq_data));
2965 return aac_get_container_name(scsicmd);
2970 ((scsicmd->cmnd[1] & 0x1f) != SAI_READ_CAPACITY_16))
2993 alloc_len = ((scsicmd->cmnd[10] << 24)
2994 + (scsicmd->cmnd[11] << 16)
2995 + (scsicmd->cmnd[12] << 8) + scsicmd->cmnd[13]);
2998 scsi_sg_copy_from_buffer(scsicmd, cp, alloc_len);
2999 if (alloc_len < scsi_bufflen(scsicmd))
3000 scsi_set_resid(scsicmd,
3001 scsi_bufflen(scsicmd) - alloc_len);
3004 scsicmd->device->removable = 1;
3006 scsicmd->result = DID_OK << 16 | SAM_STAT_GOOD;
3029 scsi_sg_copy_from_buffer(scsicmd, cp, sizeof(cp));
3031 scsicmd->device->removable = 1;
3032 scsicmd->result = DID_OK << 16 | SAM_STAT_GOOD;
3061 if (scsicmd->cmnd[1] & 0x8)
3073 mpd.mpc_buf[0] = scsicmd->cmnd[2];
3074 if (scsicmd->cmnd[2] == 0x1C) {
3094 if (((scsicmd->cmnd[2] & 0x3f) == 8) ||
3095 ((scsicmd->cmnd[2] & 0x3f) == 0x3f)) {
3104 if (mode_buf_length > scsicmd->cmnd[4])
3105 mode_buf_length = scsicmd->cmnd[4];
3108 scsi_sg_copy_from_buffer(scsicmd,
3111 scsicmd->result = DID_OK << 16 | SAM_STAT_GOOD;
3142 if (scsicmd->cmnd[1] & 0x8) {
3173 if (((scsicmd->cmnd[2] & 0x3f) == 8) ||
3174 ((scsicmd->cmnd[2] & 0x3f) == 0x3f)) {
3181 if (mode_buf_length > scsicmd->cmnd[8])
3182 mode_buf_length = scsicmd->cmnd[8];
3184 scsi_sg_copy_from_buffer(scsicmd,
3188 scsicmd->result = DID_OK << 16 | SAM_STAT_GOOD;
3193 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data,
3197 scsicmd->result = DID_OK << 16 | SAM_STAT_GOOD;
3202 if (scsicmd->cmnd[4])
3207 scsicmd->result = DID_OK << 16 | SAM_STAT_GOOD;
3214 scsicmd->result = DID_OK << 16 | SAM_STAT_CHECK_CONDITION;
3218 memcpy(scsicmd->sense_buffer,
3231 scsicmd->result = DID_OK << 16 | SAM_STAT_GOOD;
3235 return aac_start_stop(scsicmd);
3242 scsicmd->cmnd[0]));
3243 scsicmd->result = DID_OK << 16 | SAM_STAT_CHECK_CONDITION;
3247 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data,
3255 aac_scsi_done(scsicmd);
3380 struct scsi_cmnd *scsicmd;
3382 scsicmd = (struct scsi_cmnd *) context;
3384 if (!aac_valid_context(scsicmd, fibptr))
3391 scsicmd->sense_buffer[0] = '\0'; /* Initialize sense valid flag to false */
3401 scsi_set_resid(scsicmd, scsi_bufflen(scsicmd)
3406 scsi_dma_unmap(scsicmd);
3409 if (scsicmd->cmnd[0] == INQUIRY && !(scsicmd->cmnd[1] & 0x01)
3411 aac_expose_phy_device(scsicmd);
3424 scsicmd->result = DID_ERROR << 16 | SAM_STAT_CHECK_CONDITION;
3425 memcpy(scsicmd->sense_buffer,
3436 scsicmd->result = DID_OK << 16;
3439 switch (scsicmd->cmnd[0]) {
3449 < scsicmd->underflow)
3453 scsicmd->result = DID_ERROR << 16;
3456 scsicmd->result = DID_OK << 16;
3459 scsicmd->result = DID_OK << 16;
3464 scsicmd->result = DID_ABORT << 16;
3471 scsicmd->result = DID_ERROR << 16;
3474 scsicmd->result = DID_PARITY << 16;
3481 scsicmd->result = DID_NO_CONNECT << 16;
3486 scsicmd->result = DID_TIME_OUT << 16;
3490 scsicmd->result = DID_BUS_BUSY << 16;
3494 scsicmd->result = DID_RESET << 16;
3498 scsicmd->result = DID_ERROR << 16;
3520 scsicmd->cmnd[0],
3530 if ((scsicmd->cmnd[0] == ATA_12)
3531 || (scsicmd->cmnd[0] == ATA_16)) {
3533 if (scsicmd->cmnd[2] & (0x01 << 5)) {
3534 scsicmd->result = DID_OK << 16;
3536 scsicmd->result = DID_ERROR << 16;
3539 scsicmd->result = DID_ERROR << 16;
3547 scsicmd->result |= SAM_STAT_CHECK_CONDITION;
3554 memcpy(scsicmd->sense_buffer,
3561 scsicmd->result |= le32_to_cpu(srbreply->scsi_status);
3564 aac_scsi_done(scsicmd);
3568 struct scsi_cmnd *scsicmd,
3571 scsicmd->result = err->status;
3573 scsi_set_resid(scsicmd, le32_to_cpu(err->residual_count));
3577 scsicmd->result |= DID_OK << 16;
3586 memcpy(scsicmd->sense_buffer,
3588 scsicmd->result |= DID_OK << 16;
3592 scsicmd->result |= DID_BUS_BUSY << 16;
3595 scsicmd->result |= DID_ABORT << 16;
3600 scsicmd->result |= DID_ERROR << 16;
3606 struct scsi_cmnd *scsicmd,
3614 bus = aac_logical_to_phys(scmd_channel(scsicmd));
3615 cid = scmd_id(scsicmd);
3620 scsicmd->result = DID_NO_CONNECT << 16;
3625 scsicmd->result = DID_OK << 16 | SAM_STAT_BUSY;
3628 scsicmd->result = DID_ABORT << 16;
3631 scsicmd->result = DID_NO_CONNECT << 16;
3635 scsicmd->result = DID_OK << 16;
3639 scsicmd->result = DID_ERROR << 16;
3654 struct scsi_cmnd *scsicmd;
3659 scsicmd = (struct scsi_cmnd *) context;
3661 if (!aac_valid_context(scsicmd, fibptr))
3668 scsi_dma_unmap(scsicmd);
3672 scsicmd->result = DID_OK << 16;
3678 hba_resp_task_complete(dev, scsicmd, err);
3681 hba_resp_task_failure(dev, scsicmd, err);
3684 scsicmd->result = DID_ERROR << 16;
3687 scsicmd->result = DID_NO_CONNECT << 16;
3691 scsicmd->result = DID_OK << 16;
3694 scsicmd->result = DID_ERROR << 16;
3702 aac_priv(scsicmd)->sent_command = 1;
3704 aac_scsi_done(scsicmd);
3709 * @scsicmd: the scsi command block
3712 * scsicmd passed in.
3714 static int aac_send_srb_fib(struct scsi_cmnd* scsicmd)
3720 dev = (struct aac_dev *)scsicmd->device->host->hostdata;
3721 if (scmd_id(scsicmd) >= dev->maximum_num_physicals ||
3722 scsicmd->device->lun > 7) {
3723 scsicmd->result = DID_NO_CONNECT << 16;
3724 aac_scsi_done(scsicmd);
3731 cmd_fibcontext = aac_fib_alloc_tag(dev, scsicmd);
3732 aac_priv(scsicmd)->owner = AAC_OWNER_FIRMWARE;
3733 status = aac_adapter_scsi(cmd_fibcontext, scsicmd);
3750 * @scsicmd: the scsi command block
3753 * scsicmd passed in.
3755 static int aac_send_hba_fib(struct scsi_cmnd *scsicmd)
3761 dev = shost_priv(scsicmd->device->host);
3762 if (scmd_id(scsicmd) >= dev->maximum_num_physicals ||
3763 scsicmd->device->lun > AAC_MAX_LUN - 1) {
3764 scsicmd->result = DID_NO_CONNECT << 16;
3765 aac_scsi_done(scsicmd);
3772 cmd_fibcontext = aac_fib_alloc_tag(dev, scsicmd);
3776 aac_priv(scsicmd)->owner = AAC_OWNER_FIRMWARE;
3777 status = aac_adapter_hba(cmd_fibcontext, scsicmd);
3794 static long aac_build_sg(struct scsi_cmnd *scsicmd, struct sgmap *psg)
3806 nseg = scsi_dma_map(scsicmd);
3812 scsi_for_each_sg(scsicmd, sg, nseg, i) {
3818 if (byte_count > scsi_bufflen(scsicmd)) {
3820 (byte_count - scsi_bufflen(scsicmd));
3822 byte_count = scsi_bufflen(scsicmd);
3825 if (scsicmd->underflow && (byte_count < scsicmd->underflow)) {
3827 byte_count, scsicmd->underflow);
3834 static long aac_build_sg64(struct scsi_cmnd *scsicmd, struct sgmap64 *psg)
3848 nseg = scsi_dma_map(scsicmd);
3852 scsi_for_each_sg(scsicmd, sg, nseg, i) {
3862 if (byte_count > scsi_bufflen(scsicmd)) {
3864 (byte_count - scsi_bufflen(scsicmd));
3866 byte_count = scsi_bufflen(scsicmd);
3869 if (scsicmd->underflow && (byte_count < scsicmd->underflow)) {
3871 byte_count, scsicmd->underflow);
3877 static long aac_build_sgraw(struct scsi_cmnd *scsicmd, struct sgmapraw *psg)
3893 nseg = scsi_dma_map(scsicmd);
3897 scsi_for_each_sg(scsicmd, sg, nseg, i) {
3910 if (byte_count > scsi_bufflen(scsicmd)) {
3912 (byte_count - scsi_bufflen(scsicmd));
3914 byte_count = scsi_bufflen(scsicmd);
3917 if (scsicmd->underflow && (byte_count < scsicmd->underflow)) {
3919 byte_count, scsicmd->underflow);
3925 static long aac_build_sgraw2(struct scsi_cmnd *scsicmd,
3934 nseg = scsi_dma_map(scsicmd);
3938 scsi_for_each_sg(scsicmd, sg, nseg, i) {
3963 if (byte_count > scsi_bufflen(scsicmd)) {
3965 (byte_count - scsi_bufflen(scsicmd));
3967 byte_count = scsi_bufflen(scsicmd);
3998 if (scsicmd->underflow && (byte_count < scsicmd->underflow)) {
4000 byte_count, scsicmd->underflow);
4041 static long aac_build_sghba(struct scsi_cmnd *scsicmd,
4053 nseg = scsi_dma_map(scsicmd);
4064 scsi_for_each_sg(scsicmd, sg, nseg, i) {
4080 if (byte_count > scsi_bufflen(scsicmd)) {
4084 - scsi_bufflen(scsicmd);
4086 byte_count = scsi_bufflen(scsicmd);
4102 if (scsicmd->underflow && (byte_count < scsicmd->underflow)) {
4104 byte_count, scsicmd->underflow);