Lines Matching defs:scsicmd

135 static long aac_build_sg(struct scsi_cmnd *scsicmd, struct sgmap *sgmap);
136 static long aac_build_sg64(struct scsi_cmnd *scsicmd, struct sgmap64 *psg);
137 static long aac_build_sgraw(struct scsi_cmnd *scsicmd, struct sgmapraw *psg);
138 static long aac_build_sgraw2(struct scsi_cmnd *scsicmd,
142 static int aac_send_srb_fib(struct scsi_cmnd* scsicmd);
242 static inline int aac_valid_context(struct scsi_cmnd *scsicmd,
246 if (unlikely(!scsicmd || !scsicmd->scsi_done)) {
252 scsicmd->SCp.phase = AAC_OWNER_MIDLEVEL;
253 device = scsicmd->device;
345 static void aac_expose_phy_device(struct scsi_cmnd *scsicmd)
348 scsi_sg_copy_to_buffer(scsicmd, &inq_data, sizeof(inq_data));
351 scsi_sg_copy_from_buffer(scsicmd, &inq_data, sizeof(inq_data));
426 struct scsi_cmnd * scsicmd;
428 scsicmd = (struct scsi_cmnd *) context;
430 if (!aac_valid_context(scsicmd, fibptr))
453 scsi_sg_copy_to_buffer(scsicmd, &inq, sizeof(inq));
455 scsi_sg_copy_from_buffer(scsicmd, &inq, sizeof(inq));
459 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD;
463 scsicmd->scsi_done(scsicmd);
469 static int aac_get_container_name(struct scsi_cmnd * scsicmd)
476 dev = (struct aac_dev *)scsicmd->device->host->hostdata;
486 dinfo->cid = cpu_to_le32(scmd_id(scsicmd));
495 (void *) scsicmd);
501 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE;
511 static int aac_probe_container_callback2(struct scsi_cmnd * scsicmd)
513 struct fsa_dev_info *fsa_dev_ptr = ((struct aac_dev *)(scsicmd->device->host->hostdata))->fsa_dev;
515 if ((fsa_dev_ptr[scmd_id(scsicmd)].valid & 1))
516 return aac_scsi_cmd(scsicmd);
518 scsicmd->result = DID_NO_CONNECT << 16;
519 scsicmd->scsi_done(scsicmd);
527 struct scsi_cmnd * scsicmd = (struct scsi_cmnd *)context;
530 if (!aac_valid_context(scsicmd, fibptr))
533 scsicmd->SCp.Status = 0;
537 fsa_dev_ptr += scmd_id(scsicmd);
556 scsicmd->SCp.Status = le32_to_cpu(dresp->count);
560 callback = (int (*)(struct scsi_cmnd *))(scsicmd->SCp.ptr);
561 scsicmd->SCp.ptr = NULL;
562 (*callback)(scsicmd);
568 struct scsi_cmnd * scsicmd;
580 scsicmd = (struct scsi_cmnd *) context;
582 if (!aac_valid_context(scsicmd, fibptr))
590 dinfo->count = cpu_to_le32(scmd_id(scsicmd));
599 (void *) scsicmd);
604 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE;
612 static int _aac_probe_container(struct scsi_cmnd * scsicmd, int (*callback)(struct scsi_cmnd *))
617 if ((fibptr = aac_fib_alloc((struct aac_dev *)scsicmd->device->host->hostdata))) {
625 dinfo->count = cpu_to_le32(scmd_id(scsicmd));
627 scsicmd->SCp.ptr = (char *)callback;
635 (void *) scsicmd);
640 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE;
644 scsicmd->SCp.ptr = NULL;
650 struct fsa_dev_info *fsa_dev_ptr = ((struct aac_dev *)(scsicmd->device->host->hostdata))->fsa_dev;
652 fsa_dev_ptr += scmd_id(scsicmd);
655 return (*callback)(scsicmd);
670 static int aac_probe_container_callback1(struct scsi_cmnd * scsicmd)
672 scsicmd->device = NULL;
678 struct scsi_cmnd *scsicmd = kmalloc(sizeof(*scsicmd), GFP_KERNEL);
682 if (!scsicmd || !scsidev) {
683 kfree(scsicmd);
687 scsicmd->list.next = NULL;
688 scsicmd->scsi_done = (void (*)(struct scsi_cmnd*))aac_probe_container_callback1;
690 scsicmd->device = scsidev;
695 if (_aac_probe_container(scsicmd, aac_probe_container_callback1) == 0)
696 while (scsicmd->device == scsidev)
699 status = scsicmd->SCp.Status;
700 kfree(scsicmd);
827 struct scsi_cmnd * scsicmd;
831 scsicmd = (struct scsi_cmnd *) context;
832 if (!aac_valid_context(scsicmd, fibptr))
841 sp[1] = scsicmd->cmnd[2];
845 scsi_sg_copy_from_buffer(scsicmd, sp, sizeof(sp));
848 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD;
852 scsicmd->scsi_done(scsicmd);
858 static int aac_get_container_serial(struct scsi_cmnd * scsicmd)
865 dev = (struct aac_dev *)scsicmd->device->host->hostdata;
875 dinfo->cid = cpu_to_le32(scmd_id(scsicmd));
883 (void *) scsicmd);
889 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE;
1606 struct scsi_cmnd *scsicmd;
1609 scsicmd = (struct scsi_cmnd *) context;
1611 if (!aac_valid_context(scsicmd, fibptr))
1615 cid = scmd_id(scsicmd);
1619 switch (scsicmd->cmnd[0]) {
1622 lba = ((scsicmd->cmnd[1] & 0x1F) << 16) |
1623 (scsicmd->cmnd[2] << 8) | scsicmd->cmnd[3];
1627 lba = ((u64)scsicmd->cmnd[2] << 56) |
1628 ((u64)scsicmd->cmnd[3] << 48) |
1629 ((u64)scsicmd->cmnd[4] << 40) |
1630 ((u64)scsicmd->cmnd[5] << 32) |
1631 ((u64)scsicmd->cmnd[6] << 24) |
1632 (scsicmd->cmnd[7] << 16) |
1633 (scsicmd->cmnd[8] << 8) | scsicmd->cmnd[9];
1637 lba = ((u64)scsicmd->cmnd[2] << 24) |
1638 (scsicmd->cmnd[3] << 16) |
1639 (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5];
1642 lba = ((u64)scsicmd->cmnd[2] << 24) |
1643 (scsicmd->cmnd[3] << 16) |
1644 (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5];
1654 scsi_dma_unmap(scsicmd);
1659 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 |
1664 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 |
1668 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data,
1677 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 |
1682 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data,
1690 scsicmd->scsi_done(scsicmd);
1693 static int aac_read(struct scsi_cmnd * scsicmd)
1702 dev = (struct aac_dev *)scsicmd->device->host->hostdata;
1706 switch (scsicmd->cmnd[0]) {
1708 dprintk((KERN_DEBUG "aachba: received a read(6) command on id %d.\n", scmd_id(scsicmd)));
1710 lba = ((scsicmd->cmnd[1] & 0x1F) << 16) |
1711 (scsicmd->cmnd[2] << 8) | scsicmd->cmnd[3];
1712 count = scsicmd->cmnd[4];
1718 dprintk((KERN_DEBUG "aachba: received a read(16) command on id %d.\n", scmd_id(scsicmd)));
1720 lba = ((u64)scsicmd->cmnd[2] << 56) |
1721 ((u64)scsicmd->cmnd[3] << 48) |
1722 ((u64)scsicmd->cmnd[4] << 40) |
1723 ((u64)scsicmd->cmnd[5] << 32) |
1724 ((u64)scsicmd->cmnd[6] << 24) |
1725 (scsicmd->cmnd[7] << 16) |
1726 (scsicmd->cmnd[8] << 8) | scsicmd->cmnd[9];
1727 count = (scsicmd->cmnd[10] << 24) |
1728 (scsicmd->cmnd[11] << 16) |
1729 (scsicmd->cmnd[12] << 8) | scsicmd->cmnd[13];
1732 dprintk((KERN_DEBUG "aachba: received a read(12) command on id %d.\n", scmd_id(scsicmd)));
1734 lba = ((u64)scsicmd->cmnd[2] << 24) |
1735 (scsicmd->cmnd[3] << 16) |
1736 (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5];
1737 count = (scsicmd->cmnd[6] << 24) |
1738 (scsicmd->cmnd[7] << 16) |
1739 (scsicmd->cmnd[8] << 8) | scsicmd->cmnd[9];
1742 dprintk((KERN_DEBUG "aachba: received a read(10) command on id %d.\n", scmd_id(scsicmd)));
1744 lba = ((u64)scsicmd->cmnd[2] << 24) |
1745 (scsicmd->cmnd[3] << 16) |
1746 (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5];
1747 count = (scsicmd->cmnd[7] << 8) | scsicmd->cmnd[8];
1751 if ((lba + count) > (dev->fsa_dev[scmd_id(scsicmd)].size)) {
1752 cid = scmd_id(scsicmd);
1754 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 |
1759 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data,
1762 scsicmd->scsi_done(scsicmd);
1768 if (aac_adapter_bounds(dev,scsicmd,lba))
1778 status = aac_adapter_read(cmd_fibcontext, scsicmd, lba, count);
1784 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE;
1792 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_TASK_SET_FULL;
1793 scsicmd->scsi_done(scsicmd);
1799 static int aac_write(struct scsi_cmnd * scsicmd)
1809 dev = (struct aac_dev *)scsicmd->device->host->hostdata;
1813 if (scsicmd->cmnd[0] == WRITE_6) /* 6 byte command */
1815 lba = ((scsicmd->cmnd[1] & 0x1F) << 16) | (scsicmd->cmnd[2] << 8) | scsicmd->cmnd[3];
1816 count = scsicmd->cmnd[4];
1820 } else if (scsicmd->cmnd[0] == WRITE_16) { /* 16 byte command */
1821 dprintk((KERN_DEBUG "aachba: received a write(16) command on id %d.\n", scmd_id(scsicmd)));
1823 lba = ((u64)scsicmd->cmnd[2] << 56) |
1824 ((u64)scsicmd->cmnd[3] << 48) |
1825 ((u64)scsicmd->cmnd[4] << 40) |
1826 ((u64)scsicmd->cmnd[5] << 32) |
1827 ((u64)scsicmd->cmnd[6] << 24) |
1828 (scsicmd->cmnd[7] << 16) |
1829 (scsicmd->cmnd[8] << 8) | scsicmd->cmnd[9];
1830 count = (scsicmd->cmnd[10] << 24) | (scsicmd->cmnd[11] << 16) |
1831 (scsicmd->cmnd[12] << 8) | scsicmd->cmnd[13];
1832 fua = scsicmd->cmnd[1] & 0x8;
1833 } else if (scsicmd->cmnd[0] == WRITE_12) { /* 12 byte command */
1834 dprintk((KERN_DEBUG "aachba: received a write(12) command on id %d.\n", scmd_id(scsicmd)));
1836 lba = ((u64)scsicmd->cmnd[2] << 24) | (scsicmd->cmnd[3] << 16)
1837 | (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5];
1838 count = (scsicmd->cmnd[6] << 24) | (scsicmd->cmnd[7] << 16)
1839 | (scsicmd->cmnd[8] << 8) | scsicmd->cmnd[9];
1840 fua = scsicmd->cmnd[1] & 0x8;
1842 dprintk((KERN_DEBUG "aachba: received a write(10) command on id %d.\n", scmd_id(scsicmd)));
1843 lba = ((u64)scsicmd->cmnd[2] << 24) | (scsicmd->cmnd[3] << 16) | (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5];
1844 count = (scsicmd->cmnd[7] << 8) | scsicmd->cmnd[8];
1845 fua = scsicmd->cmnd[1] & 0x8;
1848 if ((lba + count) > (dev->fsa_dev[scmd_id(scsicmd)].size)) {
1849 cid = scmd_id(scsicmd);
1851 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 |
1856 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data,
1859 scsicmd->scsi_done(scsicmd);
1865 if (aac_adapter_bounds(dev,scsicmd,lba))
1873 /* scsicmd->result = DID_ERROR << 16;
1874 * scsicmd->scsi_done(scsicmd);
1881 status = aac_adapter_write(cmd_fibcontext, scsicmd, lba, count, fua);
1887 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE;
1895 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_TASK_SET_FULL;
1896 scsicmd->scsi_done(scsicmd);
1944 static int aac_synchronize(struct scsi_cmnd *scsicmd)
1950 struct scsi_device *sdev = scsicmd->device;
1953 u64 lba = ((u64)scsicmd->cmnd[2] << 24) | (scsicmd->cmnd[3] << 16) |
1954 (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5];
1955 u32 count = (scsicmd->cmnd[7] << 8) | scsicmd->cmnd[8];
2036 synchronizecmd->cid = cpu_to_le32(scmd_id(scsicmd));
2049 (void *)scsicmd);
2055 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE;
2068 struct scsi_cmnd *scsicmd = context;
2070 if (!aac_valid_context(scsicmd, fibptr))
2075 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD;
2079 scsicmd->scsi_done(scsicmd);
2082 static int aac_start_stop(struct scsi_cmnd *scsicmd)
2087 struct scsi_device *sdev = scsicmd->device;
2092 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 |
2094 scsicmd->scsi_done(scsicmd);
2114 pmcmd->sub = (scsicmd->cmnd[4] & 1) ?
2117 pmcmd->parm = (scsicmd->cmnd[1] & 1) ?
2129 (void *)scsicmd);
2135 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE;
2146 * @scsicmd: SCSI command block
2152 int aac_scsi_cmd(struct scsi_cmnd * scsicmd)
2155 struct Scsi_Host *host = scsicmd->device->host;
2166 cid = scmd_id(scsicmd);
2168 if (scmd_channel(scsicmd) == CONTAINER_CHANNEL) {
2170 (scsicmd->device->lun != 0)) {
2171 scsicmd->result = DID_NO_CONNECT << 16;
2172 scsicmd->scsi_done(scsicmd);
2183 switch (scsicmd->cmnd[0]) {
2187 ((scsicmd->cmnd[1] & 0x1f) != SAI_READ_CAPACITY_16))
2194 return _aac_probe_container(scsicmd,
2205 return aac_send_srb_fib(scsicmd);
2207 scsicmd->result = DID_NO_CONNECT << 16;
2208 scsicmd->scsi_done(scsicmd);
2216 else if ((scsicmd->cmnd[0] != INQUIRY) && /* only INQUIRY & TUR cmnd supported for controller */
2217 (scsicmd->cmnd[0] != TEST_UNIT_READY))
2219 dprintk((KERN_WARNING "Only INQUIRY & TUR command supported for controller, rcvd = 0x%x.\n", scsicmd->cmnd[0]));
2220 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_CHECK_CONDITION;
2224 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data,
2227 scsicmd->scsi_done(scsicmd);
2233 switch (scsicmd->cmnd[0]) {
2241 if ((scsicmd->cmnd[1] & 0x1) && aac_wwn) {
2245 arr[0] = (scmd_id(scsicmd) == host->this_id) ?
2247 if (scsicmd->cmnd[2] == 0) {
2252 arr[1] = scsicmd->cmnd[2];
2253 scsi_sg_copy_from_buffer(scsicmd, &inq_data,
2255 scsicmd->result = DID_OK << 16 |
2257 } else if (scsicmd->cmnd[2] == 0x80) {
2260 scmd_id(scsicmd));
2261 arr[1] = scsicmd->cmnd[2];
2262 scsi_sg_copy_from_buffer(scsicmd, &inq_data,
2266 scsicmd);
2268 scsicmd->result = DID_OK << 16 |
2272 scsicmd->result = DID_OK << 16 |
2278 memcpy(scsicmd->sense_buffer,
2284 scsicmd->scsi_done(scsicmd);
2299 scsi_sg_copy_from_buffer(scsicmd, &inq_data,
2301 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD;
2302 scsicmd->scsi_done(scsicmd);
2309 scsi_sg_copy_from_buffer(scsicmd, &inq_data, sizeof(inq_data));
2310 return aac_get_container_name(scsicmd);
2315 ((scsicmd->cmnd[1] & 0x1f) != SAI_READ_CAPACITY_16))
2338 alloc_len = ((scsicmd->cmnd[10] << 24)
2339 + (scsicmd->cmnd[11] << 16)
2340 + (scsicmd->cmnd[12] << 8) + scsicmd->cmnd[13]);
2343 scsi_sg_copy_from_buffer(scsicmd, cp, alloc_len);
2344 if (alloc_len < scsi_bufflen(scsicmd))
2345 scsi_set_resid(scsicmd,
2346 scsi_bufflen(scsicmd) - alloc_len);
2349 scsicmd->device->removable = 1;
2351 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD;
2352 scsicmd->scsi_done(scsicmd);
2376 scsi_sg_copy_from_buffer(scsicmd, cp, sizeof(cp));
2378 scsicmd->device->removable = 1;
2379 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 |
2381 scsicmd->scsi_done(scsicmd);
2400 if (((scsicmd->cmnd[2] & 0x3f) == 8) ||
2401 ((scsicmd->cmnd[2] & 0x3f) == 0x3f)) {
2408 if (mode_buf_length > scsicmd->cmnd[4])
2409 mode_buf_length = scsicmd->cmnd[4];
2411 scsi_sg_copy_from_buffer(scsicmd, mode_buf, mode_buf_length);
2412 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD;
2413 scsicmd->scsi_done(scsicmd);
2435 if (((scsicmd->cmnd[2] & 0x3f) == 8) ||
2436 ((scsicmd->cmnd[2] & 0x3f) == 0x3f)) {
2443 if (mode_buf_length > scsicmd->cmnd[8])
2444 mode_buf_length = scsicmd->cmnd[8];
2446 scsi_sg_copy_from_buffer(scsicmd, mode_buf, mode_buf_length);
2448 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD;
2449 scsicmd->scsi_done(scsicmd);
2455 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data, sizeof (struct sense_data));
2457 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD;
2458 scsicmd->scsi_done(scsicmd);
2463 if (scsicmd->cmnd[4])
2468 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD;
2469 scsicmd->scsi_done(scsicmd);
2476 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 |
2481 memcpy(scsicmd->sense_buffer,
2486 scsicmd->scsi_done(scsicmd);
2495 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD;
2496 scsicmd->scsi_done(scsicmd);
2500 return aac_start_stop(scsicmd);
2503 switch (scsicmd->cmnd[0])
2517 if (scsicmd->request->rq_disk)
2519 scsicmd->request->rq_disk->disk_name,
2521 sizeof(scsicmd->request->rq_disk->disk_name) + 1));
2523 return aac_read(scsicmd);
2531 return aac_write(scsicmd);
2535 scsicmd->result = DID_OK << 16 |
2537 scsicmd->scsi_done(scsicmd);
2542 return aac_synchronize(scsicmd);
2548 dprintk((KERN_WARNING "Unhandled SCSI Command: 0x%x.\n", scsicmd->cmnd[0]));
2549 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_CHECK_CONDITION;
2553 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data,
2557 scsicmd->scsi_done(scsicmd);
2686 struct scsi_cmnd *scsicmd;
2688 scsicmd = (struct scsi_cmnd *) context;
2690 if (!aac_valid_context(scsicmd, fibptr))
2699 scsicmd->sense_buffer[0] = '\0'; /* Initialize sense valid flag to false */
2709 scsi_set_resid(scsicmd, scsi_bufflen(scsicmd)
2713 scsi_dma_unmap(scsicmd);
2716 if (scsicmd->cmnd[0] == INQUIRY && !(scsicmd->cmnd[1] & 0x01)
2718 aac_expose_phy_device(scsicmd);
2729 scsicmd->result = DID_ERROR << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_CHECK_CONDITION;
2730 memcpy(scsicmd->sense_buffer, srbreply->sense_data, len);
2740 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8;
2743 switch(scsicmd->cmnd[0]){
2752 if (le32_to_cpu(srbreply->data_xfer_length) < scsicmd->underflow) {
2757 scsicmd->result = DID_ERROR << 16 | COMMAND_COMPLETE << 8;
2760 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8;
2764 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8;
2769 scsicmd->result = DID_ABORT << 16 | ABORT << 8;
2773 scsicmd->result = DID_ERROR << 16 | ABORT << 8;
2776 scsicmd->result = DID_PARITY << 16 | MSG_PARITY_ERROR << 8;
2783 scsicmd->result = DID_NO_CONNECT << 16 | COMMAND_COMPLETE << 8;
2788 scsicmd->result = DID_TIME_OUT << 16 | COMMAND_COMPLETE << 8;
2792 scsicmd->result = DID_BUS_BUSY << 16 | COMMAND_COMPLETE << 8;
2796 scsicmd->result = DID_RESET << 16 | COMMAND_COMPLETE << 8;
2800 scsicmd->result = DID_ERROR << 16 | MESSAGE_REJECT << 8;
2822 scsicmd->cmnd[0],
2825 if ((scsicmd->cmnd[0] == ATA_12)
2826 || (scsicmd->cmnd[0] == ATA_16)) {
2827 if (scsicmd->cmnd[2] & (0x01 << 5)) {
2828 scsicmd->result = DID_OK << 16
2832 scsicmd->result = DID_ERROR << 16
2837 scsicmd->result = DID_ERROR << 16
2844 scsicmd->result |= SAM_STAT_CHECK_CONDITION;
2851 memcpy(scsicmd->sense_buffer, srbreply->sense_data, len);
2856 scsicmd->result |= le32_to_cpu(srbreply->scsi_status);
2860 scsicmd->scsi_done(scsicmd);
2866 * @scsicmd: the scsi command block
2869 * scsicmd passed in.
2872 static int aac_send_srb_fib(struct scsi_cmnd* scsicmd)
2878 dev = (struct aac_dev *)scsicmd->device->host->hostdata;
2879 if (scmd_id(scsicmd) >= dev->maximum_num_physicals ||
2880 scsicmd->device->lun > 7) {
2881 scsicmd->result = DID_NO_CONNECT << 16;
2882 scsicmd->scsi_done(scsicmd);
2892 status = aac_adapter_scsi(cmd_fibcontext, scsicmd);
2898 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE;
2909 static long aac_build_sg(struct scsi_cmnd *scsicmd, struct sgmap *psg)
2915 dev = (struct aac_dev *)scsicmd->device->host->hostdata;
2921 nseg = scsi_dma_map(scsicmd);
2930 scsi_for_each_sg(scsicmd, sg, nseg, i) {
2936 if (byte_count > scsi_bufflen(scsicmd)) {
2938 (byte_count - scsi_bufflen(scsicmd));
2940 byte_count = scsi_bufflen(scsicmd);
2943 if(scsicmd->underflow && (byte_count < scsicmd->underflow)){
2945 byte_count, scsicmd->underflow);
2952 static long aac_build_sg64(struct scsi_cmnd *scsicmd, struct sgmap64 *psg)
2959 dev = (struct aac_dev *)scsicmd->device->host->hostdata;
2966 nseg = scsi_dma_map(scsicmd);
2973 scsi_for_each_sg(scsicmd, sg, nseg, i) {
2983 if (byte_count > scsi_bufflen(scsicmd)) {
2985 (byte_count - scsi_bufflen(scsicmd));
2987 byte_count = scsi_bufflen(scsicmd);
2990 if(scsicmd->underflow && (byte_count < scsicmd->underflow)){
2992 byte_count, scsicmd->underflow);
2998 static long aac_build_sgraw(struct scsi_cmnd *scsicmd, struct sgmapraw *psg)
3012 nseg = scsi_dma_map(scsicmd);
3019 scsi_for_each_sg(scsicmd, sg, nseg, i) {
3032 if (byte_count > scsi_bufflen(scsicmd)) {
3034 (byte_count - scsi_bufflen(scsicmd));
3036 byte_count = scsi_bufflen(scsicmd);
3039 if(scsicmd->underflow && (byte_count < scsicmd->underflow)){
3041 byte_count, scsicmd->underflow);
3047 static long aac_build_sgraw2(struct scsi_cmnd *scsicmd,
3053 nseg = scsi_dma_map(scsicmd);
3061 scsi_for_each_sg(scsicmd, sg, nseg, i) {
3086 if (byte_count > scsi_bufflen(scsicmd)) {
3088 (byte_count - scsi_bufflen(scsicmd));
3090 byte_count = scsi_bufflen(scsicmd);
3117 if (scsicmd->underflow && (byte_count < scsicmd->underflow)) {
3119 byte_count, scsicmd->underflow);